明 細 書
並列インターリーノ 、並列ディンターリーバ及びインターリーブ方法 技術分野
[0001] 本発明は、特に、 2次元配列型のデータ構造に対して行方向優先でデータを書き 込み、各行ごとに行内並び替えを行い、行同士を並び替え、列方向優先でデータを 読み出すインターリーブアルゴリズムを実現する並列インターリーバ、並列ディンター リーバ及びインターリーブ方法に関する。
背景技術
[0002] (インターリーブのアルゴリズム)
先ず、従来のインターリーバのアルゴリズムについて説明する。インターリーブ処理 とは、長さ Kのデータ列 {d[0], d[l] , · ··, d[K— 1] }を並び替えて、データ列 {d' [0 ] , d' [l] , · ··, d' [K— 1] }を出力する処理である。個々のデータ d[i]は、単一のビッ トである場合や固定小数点数 ( 、わゆる軟判定値)である場合などさまざまであるから 、以後シンボルと呼ぶ。
[0003] 従来のインターリーブアルゴリズムのうち、 2次元配列型のデータ構造を用いるもの がある。その基本的なアルゴリズムは以下の通りである。なお、例として非特許文献 1 に記載されているものを紹介する。そのインターリーブ方式は、素体インターリーバ (P rime Interleaver;PIL)として知られているものである。以下、 PILの手順を説明する。 例として、データ長 K=45の場合について、図 1、図 2及び図 3を用いて説明する。
[0004] [手順 1]データ長 Κに応じて、配列の行数 Rおよび列数 Cを所定の式により決定す る。
[0005] [手順 2]R行 C列の配列に、行方向優先でシンボルを書き込む。このとき、データ長 Kが配列のサイズ RCに満たな 、場合、残りの領域にダミーシンボル (d)を書き込む。 この状態を、図 1に示した。
[0006] [手順 3]次に、配列の各行について、所定の規則に従い行内での並び替えを行う 。ここで、並び替え規則は各行ごとに異なる場合がある。各行の並び替え規則は、数 列 Ui (j)により表される。 Ui(j)は、第 i行第 j列に移動されるデータの行内の元の位置
を示す。例えば、例においては U2 (3) = 7であるが、これは第 2行第 3列に移動され るデータの元の位置は第 2行第 7列であることを示す。すなわち、 d[27]が行内並び 替えにより第 2行第 7列力 第 2行第 3列に移動される。この状態を、図 2に示した。
[0007] [手順 4]さらに、各行内の順序を保ったまま、所定の規則に従い行ごとを入れ替え る。この行間並び替えは、数列 T(i)で表される。すなわち、第 i行に移動される行の 元の位置は、第 T(i)行である。この状態を、図 3に示した。
[0008] [手順 5]最後に、配列内のデータを列方向優先に読み出す。このとき、ダミーデー タは読み飛ばす (プル一ユングという)。以上により、出力シンボル列は、 {d[40], d[ 30] , d[20] , d[10] , · ··, d[18] , d[4] , d[31] , · ··, d[16] , d[7] }となる。
[0009] 上記手順中における、 Rと Cの決定方法、行内並び替え規則 Ui(j)、行間並び替え 規則 T(i)については、非特許文献 1に規定されている。また非特許文献 1に示される 方法以外にも、多数の方法が提案されている。
[0010] 因みに、本発明で提案する並列インターリーバは、 Rと Cの決定方法、行内並び替 え規則 Ui (j)、行間並び替え規則 T(i)にかかわらず、上記手順により行われる全て のインターリーバに対して有効なものである。
[0011] (インターリーバの実装方法)
実際に LSIなどでインターリーバ回路を実現する場合には、上述したような 2次元配 列への書き込みや行内 ·行間並び替えを行うわけではない。一般的に知られている インターリーバ回路は、入力されたシンボル順でメモリに順序良く書き込んだ後、ラン ダム的に読み出すことで並び替えを実現する。このランダム的なメモリ読み出しを行う 際のアドレス計算方法に、行内'行間並び替えや列方向優先読み出しの規則を反映 させることにより、上述したようなインターリーブを実現する。
[0012] 図 4に、最も基本的なインターリーバ回路を示す。 1サイクルに 1シンボルずつ処理 するため、逐次型インターリーバと呼ばれるものである。逐次型インターリーバは、シ ンボル列を格納する RAMと、昇順アドレスを生成するカウンタ 1と、擬似ランダムアド レスを生成するアドレステーブルとカウンタ 2からなる。
[0013] インターリーブ処理を行うに先立ち、インターリーブパターンを定めた規格に従い、 アドレステーブルを設定する。その手順は、直感的には、図 3を列方向優先で読むこ
とにより理解できる。
[0014] K=45の PILにおけるアドレステーブルを、図 6に示す。このテーブルは、例えば並 び替えの後、 1番目に出力されるべきデータは並び替え前の 41番目のデータである ことを示す (すなわち A (0) =40。インデックスが 0から始まっていることに注意)。さら に、 2番目に出力されるデータは並び替え前の 31番目のデータである。
[0015] 次に、実際のインターリーブ処理について説明する。インターリーブ処理は、書き込 みと読み出しの 2つのフェーズにより完了される。
[0016] 書き込みフェーズにおいては、カウンタ 1は 0から開始し 1ずつ増加するアドレスを 生成する。このアドレスを用いて入力シンボルを RAMに書き込むことにより、データ 列が入力された順序で RAMに格納される。図 5のタイミングチャートの時刻 0〜39は 書き込みフェーズである。
[0017] 全てのシンボルの書き込みが完了した後、読み出し動作を開始する。読み出しフエ ーズにおいては、先ずカウンタ 2が昇 j噴のカウント値を生成し、そのカウント値をァドレ スとしてアドレステーブルが参照される。そして、アドレステーブルから出力されたデ ータ(A(k2) )をアドレスとして、 RAMから 1シンボルを読み出す。このような動作をシ ンボル数繰り返すことにより、図 5の信号 r_dataが示すように、インターリーブされたデ 一タ列を得ることができる。
[0018] このように、アドレステーブルに擬似ランダムアドレスパターンを予め設定することに より、任意のパターンでインターリーブを行うことができる。なお、メモリによるアドレス テーブルを用いずに擬似ランダムアドレスパターンを生成することも可能である。 PIL のためのアドレス生成回路の例として、特許文献 1に記載されているものがある。
[0019] ところで、インターリーブされたデータ列を元の順序に戻す処理をディンターリーブ という。ディンターリーブは、図 5に示したような逐次型インターリーバを用いても実現 できる。すなわち、アドレステーブルにディンターリーブのパターンを設定すればよい
[0020] ディンターリーブを行うさらに簡単な方法は、逐次型インターリーバの書き込みアド レスと読み出しアドレスを入れ替えることである。例えば図 7に示すような構成とすれ ばよい。この方法により、新たなパターンを用意することなぐわずかな回路の追加 (w
—addrと r_addrを入れ替えるスィッチ)のみでインターリーブ及びディンターリーブを行 う回路を実現できる。
[0021] (インターリーバの並列化)
図 4のインターリーバは、逐次型、すなわち 1サイクルに 1つのシンボルのみを書き 込み又は読み出しするものであった。従って、 Kシンボルのデータ列をインターリーブ するためには、初めのシンボルを入力してから最後のシンボルが出力されるまでに、
2K+ 1サイクルの遅延が発生する。また逐次インターリーバのスループット(単位時 間当たりの処理能力)は、約 0. 5シンボル Zサイクルと低力つた。
[0022] 高速かつ低遅延なインターリーブ処理を実現するためには、インターリーバ回路を 並列化することが有効である。ここでは、インターリーバ回路の並列化方法として、 3 つの方法を挙げる。
[0023] <サブブロック分割方式 >
インターリーバを並列化する一つの方法は、図 9に示すように入力データ列を部分 データ列(サブブロック)に分割することである。各サブブロックは、インターリーバ〖こ 並列に入力される。
[0024] たとえば、図 9では、 K=45で、サブブロック数 2の場合を示している。この例におい ては、初めのサイクルにお!/、てデータ d[0]と d[23]が並列インターリーバ 1に同時に 入力され、次のサイクルにおいて d[l]と d[24]が同時に入力される。また、読み出し フェーズにおいては、 d[40]と d[2]が同時に出力される。このようにして、図 8に示す 逐次インターリーバに比べ、 2倍のスループット及び半分の遅延時間でインターリー ブ処理を完了することができる。
[0025] 並列インターリーバ 1を用いて構成したターボデコーダを、図 13に示す。この並列タ ーボデコーダは、 SISO (Soft- In Soft- Out)デコーダを 2つ備えることにより、図 12に 示す逐次型のターボデコーダに比べ 2倍のスループットを実現することができる。この ような、サブブロック分割を利用した並列ターボデコーダにつ 、ては、例えば非特許 文献 2に記載されている。
[0026] <シリアル/パラレル変換方式 >
図 10に、別の並列インターリーバを示す。この方法は、シリアル パラレル変 (
図中 SZP)により、連続したデータ (たとえば d [0]と d [ 1 ] )を並列インターリーバ 2に 同時に入力する。読み出しフェーズにおいては、同時に出力されるデータの組はパ ラレルーシリアル変換器(図中 PZS)により連続したデータ列に戻される。
[0027] 並列インターリーバ 2を用いて構成したターボデコーダは、図 14のようになる。この タイプの並列インターリーバにおいては、同時に入力されるデータはデータ列上で連 続したデータであるから、別の SISOデコーダで並列に処理することができない。従つ て、複数シンボルを同時に入力できる高速な SISOデコーダが必要となる。このような SISOデコーダとして、例えば非特許文献 3に記載されているような radix— 4と呼ば れる方式のものが知られて 、る。
[0028] <ハイブリッド方式 >
サブブロック分割方式とシリアル パラレル変換方式 (radix— 4)を併用することも 可能である。
[0029] radix— 4によるターボデコーダは 2並列のサブブロック分割方式に比べ、小さな回 路規模で同等のスループットが得られる。しかし、さらにスループットを高める(例えば radix— 8以上を採用)ことは、クリティカルパス及びターボ符号の拘束長の制約があ り困難である。
[0030] そこで、任意の並列度でサブブロック分割した後に、それぞれのサブブロックを radi X 4で処理する方法が考えられる。サブブロック数を 2として radix 4を適用するタ ーボデコーダ(図 15)に合わせて設計された、図 11に示す並列インターリーバ 3は、 並列度が 4 ( = 2 X 2)となる。
[0031] ところで、上述したインターリーバの並列化における課題は、複数のデータを同時 にメモリに書き込む (読み出す)必要があることである。以下に、従来知られている解決 策 (実現例)を列挙する。
[0032] (並列化の実現例 1)
最も単純な解決策は、マルチポート RAMを用いることである。マルチポート RAM は、同時に複数のアドレスを処理することができ、同時に複数のデータを書き込む( 読み出す)ことのできる RAMである。図 16に、デュアルポート RAM (同時に 2つのァ クセスが可能な RAM)を用いた並列インターリーバを示す。なお、図 16において、サ
ブブロック分割型の場合には offset値をサブブロックサイズに、シリアル パラレル変 換型の場合には offset値を 1に設定すればよ!、。
[0033] (並列化の実現例 2)
別の解決策は、 RAMを複数のバンク (モジュール)に分割することである。別のバ ンクであれば独立にアクセスすることができるので、最大でメモリバンク数と同数のァ クセスを同時に行うことができる。
[0034] しかしながら、インターリーブパターンやサブブロックの分割方法によっては、ある 1 つのバンクに同時に 2つ以上のアクセスが発生してしまうことがある(以下これをメモリ アクセス競合と呼ぶ)。従って、メモリアクセス競合が発生した場合にはそのサイクル には 1つだけの書き込みを行い、他のデータはバッファに保存し次のサイクル以降に 改めて書き込みを行うような調停回路が必要となる。
[0035] メモリアクセス競合を調停回路により回避する方法について、例を用いて説明する。
シンボル数 K=45として、サブブロックを Κ0 = 23と Kl = 22のようにほぼ均等に分割 した場合のディンターリーブ処理にっ 、て考える。調停回路付きの並列ディンターリ ーバの構成例を、図 17に示す。
[0036] サブブロック 0として出力されるデータは RAM0に、サブブロック 1として出力される データは RAMIに書き込まれる必要がある。従って、ディンターリーブ後のインデッ クスカ^〜 22のデータは RAM0に、インデックスが 23〜44のデータは RAMIに書き 込まれる。
[0037] 書き込みフェーズの初めのサイクルにおいては、 2つのサブブロックの先頭のデー タである d[0]と d[23]が入力される。アドレステーブル 0より A (0) =40、アドレステー ブル 1より A(23) =0のようにアドレスが求まるから、データ d[0]を RAMIへ、データ d [23]を RAM0へ書き込めば良いことがわかる。従って、調停回路は信号 in_data0の 値を w_datalへ、 in_datalの値を w_data0へ入力するように接続する。またアドレステー ブル 1の出力を w_addr0へ、アドレステーブル 0の出力から 23を減じた値^ w_addrlへ 入力する。
[0038] 次のサイクルには、データ d[l]とデータ d[24]が入力される。 A(l) = 30、 A (24)
= 39であるから、いずれのデータも RAMIへ書き込む必要がある。そこで、データ d
[1]を RAMIのアドレス 7へ書き込む一方、データ d[24]はバッファ(例えば FIFO) に保存し、次のサイクル以降に書き込む。
[0039] さらに次のサイクルには、データ d[2]とデータ d[25]が入力される。このサイクルに おいては、データ d[2]を RAM0のアドレス 20に書き込むと共に、バッファからデータ d[24]を取り出し RAMIのアドレス 16に書き込む。 RAMIへの書き込みは同時に 1 つしか行えないため、今度はデータ d[25]をバッファに保存する。
[0040] 以上のように、調停回路を用いることでマルチポートメモリを使うことなく並列インタ 一リーバ回路が実現可能となる。この方法はまた、 RAMの総容量を増やさなくてよい という利点がある。
[0041] し力しながら、インターリーブパターンのランダム性が高いほど、調停回路に必要な ノ ッファの容量が増大してしまう。
[0042] このような RAMを複数のバンク (モジュール)に分割した場合の別の構成例を、図 1
8に示す。
[0043] 図 18のインターリーノ (ディンターリーノ )では、 1つの出カサブブロックは 1つの R AMバンクと対応付けられる。例えば、出カサブブロック 0に属するデータは RAM0 に書き込まれる。例えば K=40のときのメモリへの書き込み方法は、図 19に示す通り である。このように書き込みを行った後、それぞれの RAMの内容をアドレス順に読み 出すことで、 4つのサブブロックを並列に出力することができる。
[0044] ところで、入力データはサブブロック分割されているため、書き込みも並列に行う必 要がある。たとえば、第 0サイクルにはデータ d[0] , d[10] , d[20] , d[30]を同時に 書き込む必要がある。このとき、 3つのデータ d[10] , d[20] , d[30]はいずれも RA Mlに書き込まなければならない。し力し、 RAMIはシングルポートメモリであるから、 いずれか 1つしか書き込むことができない。そこで、第 0サイクルにおいてはデータ d[ 10]のみを RAMIに書き込み、データ d[ 10]とデータ d [20]はバッファ(FIFO)に格 納しておき、次のサイクル以降に 1つずつ RAMIに書き込む。このような調停及びバ ッファリングを行う回路が、図中の FIFOZアービタ部である。
[0045] 図 18の構成のように、メモリをサブブロック数と同数のメモリバンク RAM0〜4に分 割することで並列インターリーバを実現することができる。このような構成は、例えば
特許文献 2に記載されて ヽる。
[0046] さらに、バンク割り当て (データの書き込み位置)を工夫してメモリアクセス競合を回 避するようにした例として、図 20に示すような構成のものがある。図 20のインターリー バでは、データの書き込み位置はバンク選択部の関数 Mで決定される。入力データ d[i] (i=0〜K— 1)は、バンク M(i)に書き込まれる。サブブロックサイズを Ksとしたと き、データ d[i], d[i+Ks], d[i + 2Ks],…が同時に書き込まれるから、アクセス競 合が発生しな 、ためには、 M (i)≠ M (i+Ks)≠M(i+ 2Ks)半…、である必要があ る。また、インターリーブパターンを πとしたとき、出力データ (1[π (i)], ά[π (i+Ks) ], ά[π (i + 2Ks)],…は同時に読み出される。従って、読み出し時にもアクセス競 合が発生しないためには、 Μ(π (ί))≠Μ(π (i+Ks))≠M(w (i+2Ks))≠ · · ·、 を満たす必要がある。このような関数 Mを見つけることにより、図 20のような回路によ つて並列インターリーブを実現することができる。
[0047] 非特許文献 4では、任意のインターリーブパターン πに対する関数 Μの設計方法 が示されている。
[0048] また図 20と同様の回路構成にて、インターリーブを行う技術が、特許文献 3に記載 されている。特許文献 3において、 Μ関数は簡単な関数 (たとえば、整数除算など)と なる。特許文献 3では、 Μ(π (i)), Μ(π (i+Ks)), Μ(π (i+2Ks)),…が固定的 な関係となるように M関数及びインターリーブパターン πを選ぶことが提案されている 。例えば、 Μ(π (i+Ks))—M(w (ί))=Μ(π (i+2Ks))—M(w (i+Ks)) = --- =定数値、となるような M関数の例とインターリーブパターン πが示されている。この とき、上記定数値とバンク数の関係によっては (例えば定数値とバンク数が互いに素) 、メモリアクセス競合が発生しないことを保証できる。特許文献 3には上記関係を常に 満たすインターリーブパターン πの設計方法が開示されているので、図 20の回路で メモリアクセス競合を起こさず並列処理可能なインターリーブパターン πを設計するこ とが可能となる。
特許文献 1:特許第 3399904号
特許文献 2:特開 2004— 104776号公報
特許文献 3:米国特許第 6, 775, 800号
非特許文献 1 : 3GPP TS25.212 v5.4.0 "Multiplexing and channel coding (FDD), Rele ase5 4.2. 2.3節 Turbo code internal interleaver
非特許文献 2 : Giulietti, A.; Bougard, B.; Derudder, V.; Dupont, S.; Weijers, J.- W.; Van der Perre, L.; "A 80 Mb/s low-power scalable turbo codec core , Custom Inte grated Circuits Conference, 2002. Proceedings of the IEEE 2002, pp. 389—392 非特許文献 3 : Charles Thomas, Mark A. Bickerstaff, Linda M. Davis, Thomas Proko p, Ben Widdup, Gongyu Zhou, David Garrett, Chris Nicol; "Integrated Circuits for Channel Coding in 3G Cellular Mobile Wireless Systems", IEEE Communications M agazine August 2003, pp.150 - 159
特許文献 4 : Tarable, A.; Benedetto, S.; "Mapping interleaving laws to parallel tur bo decoder architectures", Communications Letters, IEEE, Volume: 8, Issue: 3, Ma rch 2004, Pages: 162 - 164
発明の開示
発明が解決しょうとする課題
[0049] し力しながら、マルチポート RAMは回路規模が大きぐ使用されることが少ない。 F PGA(Field Programmable Gate Array)においては、デュアルポート RAMを備えてい るものも多いため、 2並列のインターリーバを実現することは可能である力 さらに高 い並列度のインターリーバを実現することは困難である。
[0050] また特許文献 2に記載されているような方法では、調停の機能が複雑である欠点が ある。サブブロック数 (並列度)が増えることにより、調停の機能はさらに複雑となり、回 路規模の増大を招く。また FIFO長が長くなる欠点がある。長い FIFOを必要とするこ とにより、回路規模が増大し、遅延時間が長くなつてしまう。
[0051] さらに非特許文献 4に示された M関数の設計方法では、 M関数は単純な式で表す ことができないため、実装するにあたってはテーブル引きが必要となる。従って、比較 的大きなメモリを追加する必要があり、インターリーバの回路規模を増大させてしまう 。また、インターリーブパターンが変わるごとに M関数を変更する必要がある力 リア ルタイムで M関数を導くことは実際上困難と考えられる。従って、 3GPP規格の turbo coding internal interleaverのよつにテータ長が変わるごとにインターリーブノヽ
ターンが変わる場合には対応することが困難である。
[0052] また特許文献 3では、ある与えられた πに対して上記の式を満たす Μを見つけるこ とは困難である。またその方法に 、ては上記特許文献 3では配慮されて 、な力つた。 特許文献 3に記載された技術はあくまで上記の式を満たす πの設計方法、および特 別な πに対して並列インターリーブを行う方法であるといえる。したがって、特許文献 3に記載された技術を適用しても 3GPP規格に示される internal interleaverをメモ リアクセス競合なしに並列化することは困難であるといった問題がある。
[0053] 本発明の目的は、比較的簡易な構成で、インターリーブパターンの変更にも柔軟に 対応でき、かつメモリアクセス競合も回避し得る並列インターリーノ 、並列ディンター リーバ及びインターリーブ方法を提供することである。
課題を解決するための手段
[0054] 本発明の並列インターリーバは、複数のメモリバンク力 なるメモリに入力データを 書き込み、書き込まれたデータを書き込みと異なる順序で読み出すことにより、 2次元 配列型のデータ構造に対して行方向優先でデータを書き込み、各行ごとに規定され る行内並び替えパターンに基づき行内並び替えを行い、行同士を並び替え、列方向 優先でデータを読み出すインターリーブアルゴリズムを実現する並列インターリーバ であって、複数のメモリバンク力 なり、各バンクが前記 2次元配列の 1または複数の 行番号と対応付けられているメモリと、それぞれ前記 2次元配列のデータ構造におけ る別の行において規定される複数の行内並び替えパターンを生成するパターン生成 手段と、前記パターン生成手段を内部に持ち、前記複数の行内並び替えパターンに 基づき複数の読み出しアドレスを生成する読み出し制御手段と、を具備し、前記メモ リから複数のデータを同時に読み出す構成を採る。
発明の効果
[0055] 本発明によれば、どのような行内および行間並び替えパターンを採用したとしても、 同一のメモリバンクに 2つ以上の読み出しアドレスが生成されることがなくなる。つまり 、どのようなインターリーブパターンを採用したとしても、メモリバンクへのメモリァクセ ス競合を回避できるようになる。この結果、比較的簡易な構成で、インターリーブバタ ーンの変更にも柔軟に対応でき、かつメモリアクセス競合も回避し得る並列インターリ
ーノ 、並列ディンターリーバ及びインターリーブ方法を実現できる。
図面の簡単な説明
[図 1]プライムインターリーバの 2次元マトリックスへの書き込み状態を示す図
[図 2]プライムインターリーバの行内並び替えを示す図
[図 3]プライムインターリーバの行間並び替えを示す図
[図 4]逐次型インターリーバの構成を示すブロック図
[図 5]図 1の逐次型インターリーバの動作を示すタイミングチャート
[図 6]図 1のアドレステーブルの内容を示す図
[図 7]逐次型インターリーバに対するディンターリーバの構成例を示すブロック図 圆 8]逐次インターリーブ方式の動作の説明に供する模式図
[図 9]サブブロック分割インターリーブ方式 (並列インターリーノ の動作の説明に供 する模式図
圆 10]別の並列インターリーバの説明に供する模式図
圆 11]別の並列インターリーバの説明に供する模式図
[図 12]逐次型インターリーバを用いたターボデコーダの構成例を示すブロック図 [図 13]図 9の並列インターリーバを用いたターボデコーダの構成例を示すブロック図 [図 14]図 10の並列インターリーバを用いたターボデコーダの構成例を示すブロック 図
[図 15]図 11の並列インターリーバを用いたターボデコーダの構成例を示すブロック 図
[図 16]デュアルポート RAMを用いた従来の並列インターリーバの構成を示すブロッ ク図
圆 17]従来の調停回路付きの並列ディンターリーバの構成例を示すブロック図 [図 18]従来の、 RAMを複数のバンク (モジュール)に分割した場合の並列インターリ ーバ(ディンターリーノ )の別の構成例を示すブロック図
[図 19]図 18の各 RAM0〜4に書き込まれるデータを示す図
[図 20]従来の、 RAMを複数のバンク (モジュール)に分割した場合の並列インターリ ーバ(ディンターリーノ )の別の構成例を示すブロック図
[図 21]本発明の実施の形態 1に係るインターリーバの構成を示すブロック図
[図 22]各ルックアップテーブル LUT0〜4の内容を示す図
[図 23]すべてのデータを書き込んだ後の RAM内のデータ配置を示す図
[図 24]実施の形態 1の書き込みタイミングを示すタイミングチャート
[図 25]実施の形態 1の読み出しタイミングを示すタイミングチャート
[図 26]無効アドレスを含めた場合の各ルックアップテーブル LUT0〜4の内容を示す 図
[図 27]無効アドレスを含めた場合の改良した各ルックアップテーブル LUT0〜4の内 容を示す図
[図 28]プル一ユングが発生した場合の書き込みタイミングを示すタイミングチャート [図 29]プル一ユングが発生した場合の読み出しタイミングを示すタイミングチャート [図 30]プル一二ングが発生した場合の出力ブロックサイズを示す図
[図 31]実施の形態 2のインターリーバの構成を示すブロック図
[図 32]無効判定部の構成を示すブロック図
[図 33]実施の形態 2における各ルックアップテーブル LUT0〜4の内容を示す図
[図 34]実施の形態 2の書き込みタイミングを示すタイミングチャート
[図 35]実施の形態 2の読み出しタイミングを示すタイミングチャート
[図 36]実施の形態 2のインターリーバの他の構成例を示すブロック図
[図 37]図 36のインターリーバにおける各ルックアップテーブル LUT0〜4の内容を示 す図
[図 38]図 36のインターリーバにおける書き込みタイミングを示すタイミングチャート [図 39]図 36のインターリーバにおける読み出しタイミングを示すタイミングチャート [図 40]実施の形態 3のターボデコーダの構成例を示すブロック図
[図 41]実施の形態 3のターボデコーダの構成例を示すブロック図
[図 42]実施の形態 3のターボデコーダの構成例を示すブロック図
[図 43]実施の形態 4のインターリーバの構成を示すブロック図
[図 44]書込時の組み合わせと、読出時の組み合わせを示す図
[図 45]バンク割り当ての説明に供する図
[図 46]バンク割り当ての説明に供する図
[図 47]入力側スィッチのコンフィギュレーションを示す図
[図 48]列番号スィッチのコンフィギュレーションを示す図
[図 49] (A)は入力データのサブブロック分割を示す図であり、 (B)は出力データのサ ブブロック分割の様子を示す図
[図 50]各サブブロックにつ 、ての行カウンタ初期値、列カウンタ初期値及び先頭デー タ順位を示す図
圆 51]列番号スィッチの機能の説明に供する図
[図 52]プルーニング(pruning)判定部の構成を示すブロック図
[図 53]閾値の例を示す図
[図 54]実施の形態 5のインターリーバの構成を示すブロック図
[図 55]入力側スィッチのコンフィギュレーションを示す図
[図 56] (A)は入力データのサブブロック分割を示す図であり、 (B)は出力データのサ ブブロック分割の様子を示す図
[図 57]書込時の組み合わせと、読出時の組み合わせを示す図
[図 58]バンク割り当ての説明に供する図
[図 59]バンク割り当ての説明に供する図
[図 60]各サブブロックについての入出力順序、行カウンタ初期値、列カウンタ初期値 及び先頭データ順位を示す図
圆 61]列番号スィッチの機能の説明に供する図
[図 62]列番号スィッチのコンフィギュレーションを示す図
[図 63]実施の形態 6のインターリーバの構成を示すブロック図
[図 64]出力データのサブブロック分割の様子を示す図
[図 65]書込時の組み合わせと、読出時の組み合わせを示す図
[図 66]バンク割り当ての説明に供する図
[図 67]列番号スィッチのコンフィギュレーションを示す図
[図 68]入力側スィッチのコンフィギュレーションを示す図
[図 69]行カウンタ、列カウンタ、列番号スィッチの他の構成例を示す図
[図 70]転送回路の構成例の説明に供する図
[図 71]実施の形態 4のインターリーバに対応する並列ターボデコーダの構成例を示 すブロック図
[図 72]実施の形態 6のインターリーバに対応する並列ターボデコーダの構成例を示 すブロック図 発明を実施するための最良の形態
[0057] 以下、本発明の実施の形態について図面を参照して詳細に説明する。
[0058] (実施の形態 1)
図 21に、本発明の実施の形態 1に係るインターリーバの構成を示す。インターリー ノ 100は、メモリアクセス競合を起こすことなく PIL (プライムインターリーブ)を並列に 実行可能とするものである。本実施の形態では、説明を簡単ィ匕するために、インター リーバの行数 R= 5のみに対応する回路を示し、基本構成について説明する。
[0059] インターリーバ 100は、サブブロック分割により 5並列でインターリーブを行う回路で ある。先ず、簡単のためプルーニングが発生しない (データ長 K=RC)場合について 説明する。
[0060] インターリーバ 100は、大きく分けて、入力側スィッチ 101と、独立に書き込み及び 読み出しが可能な複数のバンク (RAM0〜RAM4)力もなるメモリ 102と、出力側スィ ツチ 103と、行カウンタ 105及び列カウンタ 106からなる書き込みアドレス生成部 104 と、行数算出部 107と、列数算出部 108と、出カサブブロックサイズ算出部 109と、出 カサブブロックカウンタ 110と、ルックアップテーブル LUT0〜LUT4からなるアドレス テーブル 111と、ルックアップテーブル (LUT)設定部 112と、行 Z列番号分離回路 113と、アドレススィッチ 114と、有効検出部 115とを有する。
[0061] 行数算出部 107、列数算出部 108は 3GPP規格に従い、シンボル数 Kに基づき行 数 R及び列数 Cを決定する。
[0062] 入力データ data_in0〜data_in4は、前段の処理ブロック (例えばデレートマッチング 処理、 SISO(Soft-In Soft- Out)デコード処理など)により、サブブロックに分割されて 入力されるものとする。ここでは、入カサブブロック 0(data_inOに対応)力も入カサブブ ロック 3のサイズは全て等しいとする。これを Ksinと表記する。本発明のインターリーバ
回路で書き込み時に競合が起きないためには、入カサブブロックサイズ Ksinは列数 C以上である必要がある。
[0063] 入カサブブロックサイ Ksinは、外部より与えられる。インターリーバ 100は、与えら れた入カサブブロックサイ Ksinに基づき、書き込みアドレス生成部 104の列カウン タ 106及び行カウンタ 105の初期値を設定する。初期値の設定方法は、書き込み動 作とあわせて説明する。
[0064] 出カサブブロックサイズ算出部 109は、シンボル数 Kと行数 Rから出カサブブロック サイ Ksout,を決定する。図 21の基本回路のように、 RAM数 Mrと行数 Rと出力サ ブブロック数 Moutが等し!/、場合には、出カサブブロックサイ Ksoutは行数 Rと互!ヽ に素(最大公約数が 1)となるように定める。もちろん、出カサブブロックサイ Ksout は、 Msをサブブロック数とすると、 Ksout X Ms≥RCである必要がある(ここで、 K=R Co右辺を Kと書かない理由は、プルーニングありの場合にも対応するためである)。
[0065] 出カサブブロックサイ Ksoutを定めるひとつの方法は、 Ksout=C, C+ l, C + 2, のように順に Rと互 、に素である値を探すことである。
[0066] 別の方法は、次式で定めることである。
[0067] Ksout = ceiling ( (C - floor (Ro X Ms/R) ) /Ms) XR+Ro
(1)
ただし、 ceiling (): 無限大方向への丸め(切り上げ処理)
floor (): ゼロ方向への丸め(切り捨て)処理
Ro : Rと互いに素な定数 (例えば 1)
Ms : サブブロック数を示す。
[0068] 出カサブブロックサイズ Ksout'が決定した後、ルックアップテーブル (LUT)設定部 112はアドレステーブル 111の 5つのルックアップテーブル LUT0〜LUT4の設定を 行う。 5つの LUT0〜LUT4はそれぞれ 5つのサブブロックに対応する。この LUT0 〜LUT4は、カウンタ値 cnt_rをアドレスとして入力すると、バンク番号 bとアドレス(メモ リバンク内の物理アドレス) aを出力するよう設定される。ここで、バンク番号 bはインタ 一リーブ手順における行間並び替え後の行番号に、アドレス aは同じく列番号に対応 する。バンク番号 b及びアドレス aとインターリーブアドレス A (k2)との関係は、次式の
ようになる。
[0069] b [m] = floor {A (cnt— r +m X C) /C}
a[m] =A(cnt— r+m X C) mod C (2)
ただし、 m=0, 1, · ··, Mout— 1、
floor: 0方向への丸め(切捨て)処理
mod: 剰余演算を示す。
[0070] 作成されたアドレステーブル 111 (ルックアップテーブル LUT0〜LUT4)の例を、 図 22に示す。ここでは、参考のため k2及び A (k2)を併記している力 実際に LUT0 〜LUT4に保存される値はバンク番号 bとアドレス aのみである。またこの例はデータ 長 K=40、出カサブブロックサイズ Ksout = 8の場合を表している。例えば、インター リーブ後のインデックスが 18であるデータ (インターリーブ前のインデックスは 14)は、 LUT2の cnt_r= 2のエントリを参照すると、 RAMIのアドレス 6に書き込まれることが 分かる。
[0071] 以上の初期設定が完了した後、書き込みフェーズ及び読み出しフェーズにより並列 インターリーブが実行される。
[0072] 本実施の形態においては、入力データ€^&_ 0〜€^&_ 4はじずっ区切られ別の バンク(RAM0〜RAM4)に書き込まれる。例えば図 21の基本回路においては、 n 番目の入力シンボルは、 floor (nZC)番のバンクに書き込まれる。またそのときの物 理アドレス(該当するバンクに入力される読み出しアドレス)は、 n mod C (modは 剰余演算)である。
[0073] 上記のような書き込み処理を実現するために、本実施の形態のインターリーバ 100 では、行カウンタ 105と列カウンタ 106を用いる。行カウンタ 105と列カウンタ 106は、 それぞれ内部に複数のカウンタを持つ。ここで、カウンタの値を i[k] , j [b]とする。な お k = 0〜Ms - 1 (Msはサブブロック数)であり、 b = 0〜Mr - 1 (Mrは RAMバンク 数)である。
[0074] カウンタの初期値 iO[k] , jO[b]は入カサブブロックサイズ Ksを用いて、次式のよう に決定する。
[0075] iO [k] = floor (Ksin X k/C)
jO[iO[k] ] = (Ksin X k) mod C
jO[b] =じ0)=10[1^]なる1^が存在しなぃとき) (3)
[0076] 書き込みフェーズにお 、ては、列カウンタ j [k]は初期値力 毎サイクル 1ずつ増加 し、列数 Cまでカウントする。列数 Cに達すると、列カウンタ j [k]は停止するが、対応 する行カウンタ i[k]をインクリメントすると共に、カウンタ j [i[k] ]をリセットする。
[0077] 以上の処理を、例を用いて説明する。ここでサブブロックサイ Ksが Cより大きいと する。書き込み開始時において、 i[0] =0, j [0] =0であるから、サブブロック 0の入 力(datajnO)は RAMOのアドレス 0に書き込まれる。以後、 C—1サイクルにわたり、 R AMOのアドレス 0〜C 1にサブブロック 0のデータが書き込まれる。
[0078] このとき、 j [0] =C— 1となるので、次のサイクルにおいて、 i[0]がインクリメントされ i
[0] = 1になり、カウンタ j [i[0] ]はリセットされ、動作を開始する。すなわち、 j [l] =0 となる。従って、この時点においてサブブロック 0の C番目のデータは RAMIのァドレ ス 0に書き込まれる。図 23に、全てのデータを書き込んだ後の RAM0〜RAM4内の データ配置を示す。
[0079] 読み出しフェーズにおいては、出カサブブロックカウンタ 110が 0から出カサブブ口 ックサイ Ksout— 1までカウントアップを行い、カウンタ値 cnt_rを LUT0〜LUT4へ アドレスとして入力する。 LUT0〜LUT4はその時点で読み出すべきデータのバンク 番号とアドレスを出力する。例えば、図 22の例ではカウンタ値 cnt_r=0のときに LUT 0は b0=4, a0 = 7を出力する。これは、サブブロック 0の先頭のデータ(d[39])を出 力するためにはバンク 4のアドレス 7を読み出せば良!ヽと!、うことを示して!/、る。
[0080] LUT0〜LUT4からの 5つの出力は、それぞれ行 Z列番号分離回路 113に入力さ れ、行番号 bと列番号 aに分離される。
[0081] 列番号 a0〜a4はアドレススィッチ 114に入力され、行番号 b0〜b4の指定するメモ リバンク(RAMO〜: RAM4)へ分配される。例えば、前記の例では、 LUTOの出力 aO = 7というアドレスは、 b0=4より、 RAM4に転送される。 LUT1の出力 al = 3は、 bl = 1より RAMIに転送される。このように、行番号 b0〜b4がアドレススィッチ 114を操 作し、列番号 a0〜a4を適切な RAMモジュールへ転送する。
[0082] 行番号 b0〜b4はさらに、出力側スィッチ 103を操作し、 RAMO〜: RAM4の出力を
適切なサブブロック出力信号 data_out0〜data_out4へ分配する。例えば、前記の例で は、 LUTOの出力 b0=4であることから、 data_out0に出力されるべきデータは RAM4 力も出力されることが分かる。従って、出力側スィッチ 103は信号 r_data4を信号 data_o utOと接続する。
[0083] 以上のようにして、 5サブブロック分割による並列インターリーブが実現できる。以上 の動作を、図 24、図 25にタイミングチャートとして改めて示す。図 24は書き込みタイミ ングであり、図 25は読み出しタイミングである。
[0084] ところで、本実施の形態のインターリーバ 100でメモリ競合が発生しないための主た るポイントは、次の 2つである。
[0085] (i)インターリーブパターンを生成する 2次元マトリックス上で、異なる行に対応するシ ンボルは異なるメモリバンク RAMO〜: RAM4に書き込むこと。
(ii)出カサブブロックサイ Ksを行数 Rと互いに素となるよう選択すること。
[0086] ここで、(ii)の条件は次のように換言することもできる。つまり、「同時に読み出す 2つ 以上のシンボルに関して、いずれの 2つについても位置の間隔 Sが行数 Rと互いに素 となるように同時に読み出すシンボルを選択する」ということができる。
[0087] この条件を使えば、シリアル-パラレル変換型の並列インターリーバにおいても、並 列数カ 以下であればメモリアクセス競合を発生させることなく並列読み出しが可能 なインターリーバを設計できることが分力る。
[0088] 次に、本実施の形態のインターリーバ 100によるプルーニング処理について説明す る。
[0089] インターリーバ 100は、プルーニングが発生する場合 (Kく RCの場合)でもメモリア クセス競合を発生させずにインターリーブ処理を並列に実行可能となっている。
[0090] プルーニングに対応するための主なポイントは、以下の 2つである。
(i)プルーニング対象シンボル(無効アドレス)を含めて LUT0〜LUT4を作成する。
(ii)無効アドレスに対応する部分では、そのサブブロックのみシンボルを出力しな!、。
[0091] 以下、 K=45の場合を例に説明する。
[0092] 行数算出部 108及び列数算出部 107は 3GPP規格に従い、行数 R= 5、列数 C = 10を求める。
[0093] 入カサブブロックサイズに対する要件は、プルーニングが発生しない場合と同様で ある。ただし、本例のように、バンク数 Mrとサブブロック数 Msが等しい場合、 Ksin≥C の条件より、最終サブブロックは常に Cより短くなる (Ksinは最終以外のサブブロック サイズである)。逆に、全てのサブブロックが等しいサイズとなるようにサブブロック分 割すると、必ず書き込み時に競合が起こってしまう。
[0094] 出カサブブロックサイズ算出部 109は、出カサブブロックのサイズ Ksoutを、行数 R と互いに素になるように定める。また全てのサブブロックサイズの合計力 インターリー ブパターンを生成する配列のサイズより大きくなるようにする。すなわち、サブブロック 数を Msとしたとき、 Ksout X Ms≥RCとなるように出カサブブロックサイ Ksoutを定 める。 K=45の場合、これらの条件を満たす最小の出カサブブロックサイ Ksoutと して、 11を選択する。
[0095] ルックアップテーブル (LUT)設定部 112は、データ長 K及び出カサブブロックサイ ズ Ksoutの値から、全ての LUT0〜LUT4を設定する。ここでは、プルーニングされる シンボルのアドレス(無効アドレス)を含めてアドレスパターンを設定する。図 26に K =45の場合の LUT0〜LUT4の内容を示す。例えば LUT2のカウンタ値 cnt_r= 3 は、 A(k2) =49に対応するため、無効アドレスの 1つである。
[0096] 無効アドレスの場合、 RAM0〜RAMヘアドレスを送らないようにアドレススィッチ 1 14を制御することでプルーニングを実現できる。ここで、図 27に示すように無効アド レスに対応する場所はバンク番号 bの値を特別な値に書き替えておくことによって、ァ ドレススィッチ 114の制御を簡単にすることができる。また LUTの空いた部分にも無 効を示す値を設定しておく。
[0097] 以上の初期設定が完了した後、書き込みフェーズ及び読み出しフェーズにより並列 インターリーブが実行される。
[0098] 書き込みフェーズの動作はプルーニングが発生しない場合と同様である。タイミン グチャートを図 28に示す。
[0099] 読み出しフェーズにおいては、 LUT0〜LUT4から無効アドレスを示すデータ(b = 6, a=0)が出力されたときのみ異なる動作を行う。このことをタイミングチャート図 29 を用いて説明する。時刻 9において、 LUT0〜LUT4の出力 b0〜b3はバンク番号を
示す 3, 2, 1, 0という値を取るが、 b4は無効アドレスを示す 6という値を取る。これに 対し、アドレススィッチ 114は RAMO〜3に対しては有効なアドレス aO〜3を送り、 RA M4に対しては任意のアドレス(例えば 0)を送る力、 RAM4の読み出しを無効にする 。そして、有効検出部 115はサブブロック 4の出力が無効であることを信号 valid[4:0] を通じて外部(たとえば SISOデコーダ)に通知する。
[0100] 以上の繰り返しにより、図 29の data_out0〜4が示すとおりインターリーブ処理を完了 することができる。ここで、各出カサブブロックのサイズを、図 30に示す。プル一ニン グが発生しな!、場合、出カサブブロックサイズは最終ブロックを除きすベて Ksoutと一 致した力 プルーニングが発生する場合には Ksoul:より短くなる場合がある。
[0101] (実施の形態 2)
実施の形態 1では、競合を起こさず並列インターリーブを可能とする基本原理を示 した。本実施の形態では、さらに、(1)書き込み処理の簡略化、(2)読み出し処理の 簡略化、(3)サブブロックサイズ決定方法の変更、(4)少ないサブブロックへの対応 を可能とする構成及び方法を提案する。
[0102] 図 31に、本実施の形態のインターリーバの構成を示す。図 31のインターリーバ 200 は、上記(1)〜(3)を可能とする回路構成となっている。またインターリーバ 200は、 実施の形態 1のインターリーバ 100と比較して、回路構成が簡単化されている。
[0103] インターリーバ 200は、大きく分けて、独立に書き込み及び読み出しが可能な複数 のメモリバンク(RAM0〜: RAM4)力 なるメモリ 201と、出力側スィッチ 202と、列力 ゥンタ 204からなる書き込みアドレス生成部 203と、列数算出部 205と、行数算出部 2 06と、サブブロックサイズ決定部 207と、読み出しアドレス生成部 210と、バンク選択 信号生成部 220と、無効判定部 23とを有する。
[0104] (1)書き込み処理の簡略ィ匕
入カサブブロックサイズを Cと定めることで、入力側スィッチ及び行カウンタを不要と し、書き込みアドレス生成部 203の列カウンタ 204を簡略ィ匕できる。すなわち、入力サ ブブロックサイ Ksin=Cである場合、サブブロック [k]のデータは全てメモリ 201の R AM [k]に書き込まれる。従って、 data_in[k]^w_data[k]に直接接続することで、入力 側スィッチと、スィッチを制御する行カウンタが不要となる。また各時点で全てのデー
タを同じアドレスに書き込むため、列カウンタ 204は 1つでよ!ヽ(常に i[k] =k、 j [0] = j [1] =… =j [k— 1]であると見ることもできる)。
[0105] (2)読み出し処理の簡略ィ匕
実施の形態 1で示した図 21の読み出し制御では、各サブブロックが読み出すべき データのバンク番号とアドレスを LUT0〜LUT4で求め、アドレススィッチ 114を用い 該当するバンクにそのアドレスを送ることで読み出しを実現した。ここで、 LUTO〜L UT4内のデータを予め並べ替えておくことで、アドレススィッチを不要とすることがで きる。具体的には、 LUTOには RAMOに送るべきアドレスを、 LUT[b]には RAM[b] に送るべきアドレスを格納しておく。このテーブルは、行内並び替えパターン U[i] (j) を並び替えたものである。たとえば、 LUTOは、エントリ 0から順に、 U[0] (0)、 U[0] (v)、 U[0] (2v)ゝ…、 U[0] (tv mod Ksout)、のように格納されている。ここで、 v = Ms XRZMrである。 LUT[k]の t番目のエントリは、 LUT[k] (t) =U[k] ( (tv+j 0 [k] ) mod Ksout)である。ここで、 jO [k] = floor (Ksout X k/v)である。
[0106] 以上のようにして、アドレススィッチを不要とし、バンク選択番号を LUT内に格納す る必要が無くなるため、 LUTの容量を削減することができる。 3GPPの turbo intern al interleaverの場合、 LUTは 1ワードあたり 13ビットから 8ビットに削減することが できる。 K=45の場合の LUT0〜LUT4の内容を、図 33に示す。
[0107] し力しながら、バンク番号は出力側スィッチ 202の操作のために別途必要となる。ま た、無効アドレスを示す特別なバンク番号を LUT0〜LUT4に格納しな!、ために別 の方法で有効判定を行う必要がある。
[0108] まず、バンク番号を求める回路構成、すなわちバンク選択信号生成部 220につ ヽ て説明する。時刻 tにおけるバンク選択信号 b[k] (t)は、 b[k] (t) =T[ (t + kXKsou t) mod R]である。ここで、 i=t mod R、Ro=Ksout mod Rと書くと、 b[k] (t) =T[ (i+k XRo) mod R]となる。
[0109] 以上から、 i=0〜R—lまでカウントする行カウンタ 223と、行オフセット Ro= Ksout mod Rを求める行オフセット算出部 222と、 Rエントリの LUT221 (T— LUT)と、 R を法とする加算器 (加算の後、 Rの剰余を求める) 224とを設けることで、バンク番号を 生成する回路 (すなわちバンク選択信号生成部 220)を構成することができる。
[0110] 次に、有効判定を行う回路 (無効判定部 230)の例を示す。ここでは、 RAM4への アクセスが有効かどうかを調べ、無効である場合、無効となるサブブロックの番号を出 力する回路を示す。インターリーブ方式による力 プルーニングは一般に後半のバン クで発生する。従って、プルーニングが発生するバンクごとに無効判定回路を用意す ればよい。例えば、 PILでは行 17以降でプルーニングが発生しうる。従って、 RAMI 7, 18, 19それぞれについて判定を行う 3つの無効判定回路が必要となる。
[0111] 具体的な無効判定部 230の回路構成について、図 32を用いて説明する。無効判 定部 230は、比較部 231と、エンコーダ 232と、大小比較器 233とを有する。比較部 2 31を構成する 5つの比較器 0〜比較器 4は、 T—LUTの出力と、調べるバンク番号( ここでは 4)とを比較する。これは、 RAM4の出力がどのサブブロックに出力されるか を調べることに相当する。各比較器 0〜4は、 T—LUTの出力と、調べるバンク番号と がー致すると、 1を出力する。この出力 1がエンコーダ 232に入力されると、ェンコ一 ダ 232はバンク番号に変換する。
[0112] 同時に、大小比較器 233は r_addr4と K mod Cを比較する。 r_addr4のほうが大き いか、一致する場合には RAM4の出力は無効である。従って、大小比較器 233はこ のような場合、セレクタを操作し、エンコーダの出力を信号 invalicLblkに接続し、該当 するサブブロックが無効であることを示す。大小比較の結果、 r_addr4の出力が有効で あるときは、 invalid_blkにはいずれのバンク番号も出力しない。例えば、 1などの値 を出力するようにしておく。
[0113] 以上のように、サブブロックの出力が有効かどうかを判定する方法として 2つ示した 。一つは実施の形態 1の図 21で示したように、 LUTに無効アドレスを示すデータを 予めセットしておく方法で、もう一つは本実施の形態の図 31で示したように、バンク選 択信号と読み出しアドレス力も判定する回路 (無効判定部 230)を用いることである。
[0114] 実際上、上述したような無効判定は非常に重要となる。例えば従来の並列インター リーバでは、一般に、無効アドレスは取り除いてアドレステーブルを作成するようにし ていた。しかし、実施の形態では、あえて無効アドレスを残しておくことでメモリァクセ ス競合が発生しないことを保証できるようにした。そのため、実施の形態では無効判 定回路を設けるようになつている。このように、本実施の形態の一つの特徴は、並列ィ
ンターリーバで無効判定を行うようにしたことである。これにより、並列インターリーバ において無効なサブブロックまで特定することができる。
[0115] (3)サブブロックサイズ決定方法の変更
図 31のサブブロックサイズ決定部 207では、 Ksout = ceiling ( (C— floor (Ro X M s/R) ) /Ms) X R+Ro、に基づいてサブブロックサイズを決定する。ここで、行オフ セットを例えば Ro = 1と固定しておくことで、回路構成を簡単化できる。
[0116] 次に、図 34及び図 35を用いて、インターリーバ 200の動作タイミングを説明する。
なお図 34は書き込みタイミングを示し、図 35は読み出しタイミングを示す。ここでは、
K=45、 Ms = 5、 Mr= 5、 R= 5、 C= 10の場合を示した。
[0117] タイミングチャートにおける特徴は、次の点である。
(a)書き込みにおいて、 w_data[k]は全て等しい値であること、 in_data[k]は w_data[k]と 等しいことを確認できる。
(b)読み出しにおいて、 r_addr[k]は直接テーブルより求めることができる。 r_addr4に おいて、網掛け部分は、無効アドレス (プル一ユング)に対応する部分である。そのた め、 data_outの一部に有効なデータが出力されない部分がある。このとき、信号 invalid _blkが無効なサブブロックを示していることが分力る。
[0118] なおバンク番号生成部の構成は、図 31に示したものに限らない。すなわち、行オフ セット値は該当するサブブロックの T LUTの読み出し開始位置のずれをあらわす ので、 T—LUTの内容を行オフセットにあわせてあらかじめずらしておけば、オフセッ トを加算する回路が不要となる。
[0119] また、バンク選択信号は Rを周期として変化することから、 R個のレジスタをリング状 に接続した回路によっても生成することができる。 Roによりレジスタ間の接続が変わる ため、この構成は Roが固定である場合に用いるとよい。
[0120] (4)少ないサブブロックへの対応
実施の形態 1及び本実施の形態で説明したインターリーバは、サブブロック数 Msと バンク数 Mrが等しいとき、回路の利用効率が最も高いといえる。しかしながら、これら の構成のインターリーバをターボデコーダに組み込んで用いるとき、次の理由から M sを小さくする必要が生じる場合がある。
[0121] (i) SISO (Soft-Input Soft- Output)デコーダ、すなわち演算回路が Msより小さい並 列処理能力しか持たな 、とき
(ii)サブブロックサイズが小さすぎると、デコード性能が劣化してしまうとき
本発明では、 Ms< Mrである場合でも、メモリアクセス競合無く並列インターリーブ を実行可能である。ここでは、バンク数 Mr = 5、サブブロック数 Ms = 3である例を、図 36に示す。なお図 36では、図 31と対応する部分には同一符号を付した。また図 36 のインターリーバ 300の読み出しアドレス生成部の LUT0〜4の内容を図 37に、 K= 40、 Ksin= 14、 Ksout= 14、 Ro=4のときの書き込みタイミングを図 38に、読み出し タイミングを図 39に示した。
[0122] 書き込み処理に関して、 Ksin X Ms≥RCである必要があるので、 Ksin=Cとできな い。従って、簡易な構成をとることができず、図 36のインターリーノ 300では、書き込 みアドレス生成部 301を行カウンタ 302及び列カウンタ 303を有する構成とする。そ れぞれのブロックは、 3つのカウンタを内部に持つ。
[0123] 読み出し制御に関しては、図 31のインターリーバ 200との違いが 2点ある。まず、ァ ドレスを決定する LUT0〜LUT4の内部には空きが多いことである。サブブロック数 力 S3であるのに対し、 RAM数は 5つであるから、各時点において、 5つのうち 2つの R AMへのアクセスは無駄なアクセスとなってしまう。このことに対応するため、インター リーバ 300では、 LUT0〜LUT4の該当する部分に無効なアドレス(C以上の任意の 値、たとえば 8)をセットする。各 RAM0〜RAM4においては、 C以上のアドレスが入 力されたときに実際のアクセスを停止することで、無駄なアクセスを避けることができる (この制御を行う部分は図示していない)。この制御により、図 39の読み出しタイミング に示すとおり r_data端子には無駄なデータが出力されない。ただし、もし出力されても 出力側スィッチ 202でそのデータは無視されるため、 data_outには影響がな 、。
[0124] 2つ目の違いは、バンク選択信号生成部 310である力 単にルックアップテーブル 3 l l (T-LUT)をサブブロック数に合わせて 3つに削減するだけでよい。
[0125] インターリーバ 300においては、図 37〜図 39からも分かるように、 r_addr端子に無 効なアドレスである 8を入力したとき、 r_data端子からの有効な出力はない。しかし、出 力側スィッチ 202で並び替えを行うと、 3つのサブブロックから適切にインターリーブさ
れたデータ列が得られることが分かる。
[0126] なお、インターリーバ 300では、 LUTの無効部分を 8という値で埋めたため、 LUT の容量及びビット数が増えてしまうという欠点がある。これが問題となる場合は、次の いずれかの方法をとることができる。第 1に、図 21の構成を用いることである。第 2に、 LUTに無効アドレスを挿入する代わりに、有効アドレスを LUTの前方に詰めることで ある。ただし、カウンタ値 cnt_rを LUTの読み出しアドレスとして直接使用できず、 LU Tの読み出し制御が多少複雑になる。
[0127] (実施の形態 3)
実施の形態 1、 2で説明した並列インターリーバは、特にターボデコーダに適用する と効果的である。本実施の形態では、実施の形態 1、 2の並列インターリーバをターボ デコーダに組み込んだ場合の構成につ 、て説明する。
[0128] 図 40に、現在知られているターボデコーダの概略を示す。破線で囲んだ部分に示 すように、外部値 (あるいは、外部情報、事前情報など)と呼ばれる情報を 2つの SIS Oデコーダ(Soft— In Soft— Outデコーダ)間で受け渡し、繰り返し処理を行うこと が大きな特徴である。詳しくは、文献「Berrou, C; Glavieux, A.; Thitimajshima, P.; " Near shannon limit error-correcting coding and decoding: Turbo-codes", IEEE Inte rnational Conference on Communications, 1993, Pages :1064 - 1070 vol.2」等【こ己載 されている。
[0129] 近年においては、高速な通信を実現するために、ターボデコーダに対しても高速処 理が求められている。 SISOデコーダを高速化する方法として、複数の SISOデコー ダを並列動作させる方法と、 radix— 4アルゴリズム(例えば文献「Charles Thomas, M ark A. Bickerstaff, Linda M. Davis, Thomas Prokop, Ben Widaup, uongyu Zhou, Da vid Garrett, し hns Nicol; 'Integratedし ireuits for Channel Coding in 3G Cellular Mo bile Wireless Systems", IEEE Communications Magazine August 2003, pp.150- 159」 等に記載されている)が知られている。しかし、ターボデコーダとして高速に動作させ るためにはインターリーバも高速動作させることが必要である。 SISOデコーダの高速 化手法に対応した並列インターリーバが必要となる。
[0130] SISOデコーダを並列動作させる場合には、データ(外部値)はサブブロック分割さ
れる。サブブロック分割を用いた並列ターボデコーダ回路を、図 41に示す。なお、こ の図では外部値の流れを中心に示すため、通信路値の処理や硬判定に関する回路 を省略した。図 41の並列ターボデコーダは、大きく分けて、並列インターリーバ 510と 、並列ディンターリーバ 520と、 SISOデコーダ 530と、遅延回路 540と、 SISOデコ ーダ 550とを有する。並列インターリーバ 510は、メモリ 511と、アドレス生成部 512と 、インターリーブアドレス生成部 513と、スィッチ 514と、バンク選択信号生成部 515と 、無効判定部 516とを有する。並列ディンターリーバ 520は、スィッチ 521と、メモリ 5 22と、 、レス生成咅 523とを有する。
[0131] なお、図 41では、 SISOデコーダ 00乃至 04、及び 10乃至 14の計 10個の SISOデ コーダを用いているが、 SISOデコーダ 00乃至 04と 10乃至 14を時分割共有すること で 5個の SISOデコーダのみで実現することも可能である。
[0132] また、 radix— 4アルゴリズムを用いた SISOデコーダに対応しては、シリアル パラ レル型のインターリーバが利用できる。これらを組み込んだターボデコーダ回路を図 42に示す。図 42のターボデコーダは、大きく分けて、並列インターリーバ 610と、並 列ディンターリーバ 620と、 Radix -4 SISOデコーダ 630と、遅延回路 640と、 Rad ix-4 SISOデコーダ 650とを有する。並列インターリーバ 610は、スィッチ 611と、 バンク選択信号生成部 612と、メモリ 613と、アドレス生成部 614と、インターリーブァ ドレス生成部 615と、スィッチ 616と、バンク選択信号生成部 617と、無効判定部 618 とを有する。
[0133] 以上のように、本発明によれば高速なインターリーバ回路をアービタ回路の付加な どによる回路規模の増大を招くことなぐ簡易な構成で実現できるため、小型で高速 なターボデコーダ回路を実現することができる。
[0134] なお上述した実施の形態 1、 2では、本発明をプライムインターリーブに用いた場合 について述べたが、本発明はこれに限らず、 2次元配列型のデータ構造に対して行 方向優先でデータを書き込み、各行ごとに行内並び替えを行い、行同士を並び替え 、列方向優先でデータを読み出すインターリーブアルゴリズムを実現する場合に広く 適用できる。
[0135] (実施の形態 4)
図 43に、本実施の形態のインターリーバの構成を示す。インターリーバ 700は、入 力側スィッチ 701と、独立に書き込み及び読み出しが可能な複数のバンク (RAM0 〜RAM4)力 なるメモリ 702と、出力側スィッチ 703と、入力側カウンタ 704及び conf iguration選択部 705からなる書き込みアドレス生成部と、行カウンタ 706と、列カウン タ 707と、列番号スィッチ 708と、カロ算器 709と、ルックアップテーブル LUT0〜LUT 4からなるアドレステーブル 710と、遅延部 711と、カロ算器 712と、プルーニング(prun ing)判定部(図 1の有効検出部 115に相当) 713とを有する。
[0136] (1)設計方法'原理
先ず、インターリーバ 700の詳細を説明する前に、本実施の形態の原理について 説明する。
[0137] 本実施の形態では、一例として、行数 20のインターリーブを、 RAM数 5、 5並列入 出力(5サブブロック分割)により並列インターリーブする回路を示す。また本実施の 形態では、ブロックサイズが 203のデータを例に説明する。 3GPP規格の PILでは、 インターリーバの配列は行数 R= 20、列数 C= 11である。
[0138] 入カサブブロックサイズは、 Cの倍数とするとよい。ここでは Cの 4倍、すなわち 44と する。その理由は、行数が 20で、並列度(サブブロック数)が 5なので、 1サブブロック あたり 4とした。
[0139] 出カサブブロックサイズ Ksoutは、次の 2つの条件を同時に満たすように定める。
(i) Ksoutを Rで割った余りは 1以上
(ii) 1バンクに割り当てられる行数は、 Ksoutと Rの最大公約数を超えない
このような Ksoutを求める簡単な方法は、(1)式において Ro=4とすることである。 K soutを Rで割った余りは 4である。また、 Ksoutと Rの最大公約数は 4となるので、 1バン クに 4行を割り当てることができる。以上から、 Ksoutは 44とする。
[0140] 次に、データとメモリバンクの対応を決める。
入カサブブロックは Cの倍数とした。したがって、書込み動作の始めの Cサイクルは 、サブブロック 0は 0行目のデータを、サブブロック 1は 4行目のデータを、 · · ·、メモリ に書き込む。そして、次の Cサイクルは、サブブロック 0は 1行目のデータを、サブブロ ック 1は 5行目のデータを、 · · ·、書き込む。
以上から、同時に書き込まれるデータの組み合わせを行番号で表すと、図 44の(0 )〜(3)〖こ示される 4通りとなる。
[0141] 読出し時には、毎サイクル組み合わせが変わる。出カサブブロック Ksoutを 44とした ことにより、組み合わせの数は 20通りで、同じ行への同時アクセスがない (競合が発 生しない)。本実施の形態ではさらに、 Ksoutを行数 Rで除した余りである Roを 4とした ことにより、組み合わせに重複が生じ、図 44に示す 4通りにまで削減される。
[0142] 以上から、同時にアクセスされる行の組み合わせ (8通り)が全て明らかになった。し たがって、これらの行が別のバンクになるよう、バンク割り当てを決定する。割り当ての 一例を、図 45及び図 46に示す。
[0143] 以上が、本実施の形態のインターリーバの設計の原理である。重要な点を列挙する 。 ·出カサブブロックサイ Ksoutを、「ダミーデータ (プル一ユングされるデータ)を含 めて 44」としたので、書込み時に同じ行への同時アクセスが発生しない。 'Ksoutを R で除した余りである Roを 4としたので、同時読出しがなされる行の組み合わせの数が 4通りまでに削減された。 ·同時にアクセスされる行は別のバンクとなるよう、データ RA Mの分割方法 (バンクへの割り当て方法)を決定した。同時にアクセスされる行の組 み合わせが少ないほど、少ないバンク数で済み、回路が簡略化される。
[0144] (2)構成及び動作
次に、本実施の形態のインターリーバ 700の構成及び動作について説明する。 <構成 > (書込み関連)
入力端子 (data_in0〜4): 1つの端子は 1つのサブブロックに対応する。
入力側スィッチ 701:入力端子をメモリ 702の適切な RAMのバンクに接続する。ス イッチは、図 47 (A)〜(B)に示す 4通りの接続を実現する。各時点でどの接続に切り 替えるかは configuration選択部 705が決定する。
入力側カウンタ 704 :データ書き込み用のアドレスを生成する。なお、 configuration 選択部 705はこのカウンタの出力に基づき動作する。
RAM0〜4:入力データが書き込まれる。 5つのバンクに分割されて!、る。
[0145] (読出し関連)
行カウンタ 706:サブブロック 0〜4がそれぞれ読み出すべきデータのインターリー
ブ後の行番号を保持'更新する。
列カウンタ 707:サブブロック 0〜4がそれぞれ読み出すべきデータのインターリー ブ後の列番号を保持'更新する。
列番号スィッチ 708:列カウンタ 707の値を適切な LUTに転送する。接続の形態と しては、図 48 (A)、(B)に示した 2つの他、計 20通りを実現する。同時に、各カウンタ 値に加算すべき上位アドレス値を算出する。
アドレステーブル (LUT0〜4) 710 :アドレスのテーブル。特に、本実施の形態では 行内並び替えパターン (intra-row permutation pattern)を保持する。データの RAMと 同様に 5つのバンクに分割されている。
プル一-ング(Pruning)判定部 713:アドレステーブル 710の出力に無効アドレスが 含まれていないか検査する。含まれている場合、それがどのサブブロックに対応する かを調べ、結果を端子 validに出力する。
出力側スィッチ 703 :メモリ 702の各バンク力ものデータ出力を適切な出力端子に 接続する。
出力端子 (data_out0〜4) : lつの端子は 1つのサブブロックに対応する。
[0146] <書込み動作 >
ブロックサイズ (データ長) 203シンボルの場合を例に説明する。
3GPP規格(PIL)では、インターリーバの配列は R= 20、 C= l lである。インターリ ーバ 700は、入力データを 5サブブロックに分割する。その様子を、図 49 (A)に示す 。なお、後半のサブブロックは Ksinより短くなる場合がある。図 49 (A)の例においても 、最後のサブブロック (サブブロック 4)は他より短ぐ 27シンボルしかない。
[0147] 入力データは、図 46のようにメモリ 702に配置する。ここで、各図面には行番号 Iに 基づく表現で補足を加えた。たとえば、サブブロック 3の先頭のデータは 1= 12のデ ータであり、 RAM3の先頭部分に書き込まれる。
[0148] このような書き込みを行うため、図 21の回路は次のように動作する。
入力側カウンタ 704は 0から 4C— 1まで 1ずつカウントする。このカウント値は書き込 みアドレスとして各 RAMに入力される。このカウント値に従い、入力側スィッチ 701の 制御も行われる。すなわち、入力側スィッチ 701は、カウント値が 0〜C—1の期間に
は図 47 (A)、カウント値が C〜2C— 1の期間には図 47 (B)のような接続状態となる。
[0149] <読み出し動作 >
この例では、出カサブブロックサイズを Ksout=44とする。この値に基づき、カウンタ 706、 707の初期設定を行う。
出カサブブロック 0の先頭データのデータ順位は 0である。そこで、行カウンタ 0の初 期値を 0、列カウンタ 0の値を 0と定める。
出カサブブロック 1の先頭データのデータ順位は 44である。そこで、行カウンタ 1の 値を 4、歹 IJカウンタ 1の値を 2と定める。
[0150] ここで、行カウンタを I、列カウンタを J、データ順位を nと表すと、これらの間に次式の 関係が成り立つ。
n=I+JR (4)
(4)式に表される関係と、 Iが 0〜19の範囲であるという条件から、行カウンタ 1と列 カウンタ 1の初期値が算出される。同様に、サブブロック 2〜4についてもカウンタの初 期値が算出される。それらの値とデータ順位を、図 50に示す。
[0151] ここで、データ順位はプルーニング処理により除去されるダミーデータを含む、イン ターリーブ後のデータ順位である。したがって、ブロックサイ Kが 203であるのに対 し、サブブロック 4の最後のデータ順位は 219と、ブロックサイズより大きくなる。 (219 - 203 = 16であるから、 16個のダミーデータが挿入されて!、る)
なお、ダミーデータを含むデータ順位に基づきカウンタ値を定めないと、メモリァク セス競合が起こらな 、ことが保証されな 、。
[0152] 初期設定が完了すると、読み出し動作を開始する。行カウンタ 706は毎サイクル 1 ずつ増加し、行の最大値 19を超えると 0にリセットされるとともに対応する列カウンタ 7 07を 1増加させる。すなわち、列カウンタ 707は 20サイクルに一度インクリメントされる
[0153] 列カウンタ 707の値は、列番号スィッチ 708により適切な LUTに転送される。ここで 、列番号スィッチ 708は 3つの役割を担う。
• intra- row permutation ( ¾业ぴ替;
•行番号とバンク番号の関連付け
•行番号とバンク内位置の関連付け(上位アドレスの生成)
図 51に、これらの関係を示す。
[0154] 列番号スィッチ 708の動作を具体的に説明する。初めのサイクル (初期設定時)に おいて、行カウンタ 3、列カウンタ 3の値は、それぞれ 12、 6である。この行番号に対 応する並び替え(inter-row permutation)前行番号は 13である。並び替え前に 13行 目に属するデータはバンク 1 (RAMI)にあるので、列番号スィッチ 708は図 48のよう に接続される。
[0155] また、 13行目のデータはバンク 1の前から 2番目の領域に保存されている。したがつ て、そのことを示す上位アドレスである A= 1という値が列番号スィッチ 708により生成 される。 A= lという値は、実際のアドレス (A= lの領域が始まるアドレス) 11に変換さ れ、列カウンタ値に加算される。
この結果、 17(=6 + 11)という値力LUT1に入力される。 LUT1は 12行 6列に対応 する行内並び替えパターン (intra-row permutation pattern)である 4という値を出力す る。
[0156] この出力に対し、再び上位アドレスをカ卩算し、 RAMへのアドレスとして入力する。す なわち、 RAMIへ、 15 (=4 + 11)というアドレス値が入力され、 RAMからは d[147] が出力される。
出力側スィッチ 703は、列番号スィッチ 708と逆方向の接続を行う。すなわち、 RA M 1の出力をサブブロック 3(data_out3)に接続する。
[0157] 以上のようにして、読出し動作の初めのサイクルには、サブブロック 3のデータとして d[147]が出力される。すべての出力の様子を、図 49 (B) Bに示す。
[0158] 本発明の並列インターリーバでは、一部のサブブロックにおいて無効データが出力 される場合がある。プルーニング判定部 713は、各サブブロックのデータが有効であ るかどうかを検査する。無効であった場合、無効を知らせる信号を出力する。
[0159] 図 52に、プルーニング判定部 713の回路構成を示す。プルーニング判定部 713は 、閾値設定部 713— 1と、閾値判定部 713— 2と、 valid信号スィッチ 713— 3とを有す る。閾値判定部 713— 2は、各 RAMの無効なデータが保存されている領域のァドレ スを指定する。たとえば、ブロックサイズ 203の場合、 19行目は全て無効であるから、
RAM2のアドレス 33〜43は無効である。また、 18行目は初めの 5シンボルのみ有効 であるから、 RAM3のアドレス 27〜32は無効である。図 53に、閾値の例を示す。 thl は無効データが始まるアドレス、 thhは無効データが終了するアドレスを示す。なお、 RAM4ではプルーニングは発生しな!ヽ。
閾値判定部 713— 2は、アドレステーブル 710から出力されたアドレスが無効の領 域であるかどうかを判定し、有効の時 trueを、無効の時 falseを返す。これで、各 RAM の出力が有効であるかどうかが分かる。
valid信号スィッチ 713— 3は、出力側スィッチ 703と同様の動作をする。この結果、 どのサブブロックが有効であるかを示す 5ビットの信号 valid[4:0]が出力される。
[0160] (実施の形態 5)
図 54に、本実施の形態のインターリーバの構成を示す。インターリーバ 800は、入 力側スィッチ 801と、独立に書き込み及び読み出しが可能な複数のバンク (RAMO 〜RAM9)力 なるメモリ 802と、出力側スィッチ 703と、昇順カウンタ 804— 1、降順 カウンタ 804— 2、スィッチ 805及び configuration選択部 806からなる書き込みァドレ ス生成咅と、行カウンタ 807と、歹 IJカウンタ 808と、歹 IJ番号ス ツチ 809と、カロ算器 810 と、ルックァップテーブル1^1710〜1^719からなるァドレステーブル811と、遅延部 81 2と、加算器 813と、プルーニング判定部 814とを有する。
[0161] (1)設計方法'原理
先ず、インターリーバ 800の詳細を説明する前に、本実施の形態の原理について 説明する。
ターボデコーダにおいては、データの入力順を逆方向にすることがしばしば有効で ある。そこで、本実施の形態では奇数サブブロックのみについて、入出力順序を逆に する。その様子を、図 56に示す。
この場合においても、実施の形態 4と同様に競合の発生しない並列インターリーバ を実現できる。ブロックサイズ 203の例で説明する。また、本実施の形態では並列度 を 10とした。
[0162] 入カサブブロックサイズを 22、出カサブブロックサイズを 22とした。ここで、サブブロ ックサイズは、並列度が 10であるから、 Roを 2とし (R÷ 10 = 2)、 (1)式を用いて決定
した。サブブロック分割の様子を、図 56に示す。
[0163] ここで注意すべきことは、昇順と降順のサブブロックが混在している場合、(1)式に 従っていれば必ず競合が発生しないわけではないことである。あくまで、「同時に読 み出す 2つ以上のデータについて、いずれの 2つ以上についても、インターリーブ後 のデータ順位の差を行数で除した余りが 1以上となる」ように注意深く設計しなければ ならない。
[0164] ただし、簡易な方法として、次のいずれかを満たせば(1)式を使ってもよい。
(i)出カサブブロックサイズを偶数とする。
(ii)偶数サブブロックはすべて昇順、奇数サブブロックはすべて降順とする。あるいは 、その逆とする。
[0165] 同時にアクセスされる行の組み合わせは、図 57の通りである。
バンクの割り当て方法の一例を、図 58に示す。なお、列番号スィッチ 809における 上位アドレスの加算を簡単にするため、図 59に示すように、バンク内の境界を 256ず つに区切った。
[0166] (2)動作
次に、本実施の形態のインターリーバ 800の動作について、実施の形態 4のインタ 一リーバ 700 (図 43)と異なる部分を中心に説明する。
[0167] <書込み動作 >
偶数サブブロック(サブブロック 0、 2、 · ·)は順方向にデータが入力されるので、昇 順カウンタ 804— 1を使ってメモリ 802に書き込む。奇数サブブロックは逆方向にデー タが入力されるので、降順カウンタ 804— 2を使ってメモリ 802に書き込む。
図 55に、入力側スィッチ 801のコンフィギュレーションを示す。
[0168] <読出し動作 >
行カウンタ 807、列カウンタ 808の初期値を、図 60に示す。
ところで、サブブロック番号が奇数のカウンタは降順カウンタである。すなわち、行力 ゥンタ 807は毎サイクル 1ずつ減少していく。 0に達すると、次のサイクルには 19にリ セットされるとともに、列カウンタ 808の値をデクリメントする。
実施の形態 4と同様に、列カウンタ 808の値は、列番号スィッチ 809により適切な L
UTに転送される。ここで、列番号スィッチ 809は、 intra- row permutation (行間並び 替え)、行番号とバンク番号の関連付け、行番号とバンク内位置の関連付け(上位ァ ドレスの生成)の役割を担う。図 61に、これらの関係を示す。
入力側スィッチ 801の動作も同様である。図 62に、列番号スィッチ 708の 20通りの コンフィギュレーションのうち初めの 2つを示す。
他の動作は実施の形態 4のインターリーバ 700 (図 43)と同様である。
[0169] (実施の形態 6)
図 63に、本実施の形態のインターリーバの構成を示す。インターリーバ 900は、入 力側スィッチ 901と、独立に書き込み及び読み出しが可能な複数のバンク (RAM0 〜RAM9)力 なるメモリ 902と、出力側スィッチ 903と、昇順カウンタ 904及び config uration選択部 905からなる書き込みアドレス生成部と、行カウンタ 906と、列カウンタ 907と、列番号スィッチ 908と、カロ算器 909と、ルックアップテーブル LUT0〜LUT9 力もなるアドレステーブル 910と、遅延部 911と、加算器 912と、プルーニング判定部 913とを有する。
[0170] (1)設計方法'原理
先ず、インターリーバ 900の詳細を説明する前に、本実施の形態の原理について 説明する。
本実施の形態は、サブブロック分割方式と、シリアル/パラレル変換型を組み合わ せたハイブリッド型の並列インターリーバを提示するものである。ここでは、並列度を 5 X 2とした。
前述の実施の形態と同様に、読出しを競合なく並列に行うことができる。
[0171] 前述の実施の形態と同様の手法では、書き込みは 10並列でできない。そこで、本 実施の形態では書き込みは 5並列であるとした。ただし、全ての RAMを偶数アドレス と奇数アドレスで 2分割すれば 10並列書込みが可能である。 RAM0を RAMO-even , RAM0— oddのように分ける。このようなメモリ分割により、逐次書込み処理を並列 ィ匕することは、すでに知られていることであるから、あえて説明しない。
[0172] ノ、イブリツド型にぉ 、ても、(1)式を使用できる。ただし、サブブロックサイズが偶数 になるようにする。そこで、並列度が 5 X 2の本例では、 Ro=4を選び、出カサブブ口
ックサイズを 44とする。
サブブロック分割の様子は、図 64の通りである。 1つのサブブロックにっき、 1サイク ルに 2シンボルが出力される。
同時にアクセスされる行の組み合わせは、図 65の通りである。なお、書込みが 5並 列、読出しが 10並列であることに注意されたい。
上記の条件から、バンク割り当てを、図 66のように定める。
[0173] (2)動作
次に、本実施の形態のインターリーバ 900の動作について、実施の形態 4のインタ 一リーバ 700 (図 43)と異なる部分を中心に説明する。
[0174] <書込み動作 >
入力側スィッチ 901は、 configuration選択部 905に制御され、図 68に示すようなコ ンフィギユレーシヨンとされる。
[0175] <読出し動作 >
行カウンタ 906、列カウンタ 907の初期値は、サブブロックサイズが等しいので、実 施の形態 4のときと同様である。つまり、図 50の通りである。
本実施の形態では、行カウンタ 906は毎サイクル 2ずつ増加する。 19を超えたらリ セットされる(つまり 20が減算される)点、及びリセット時に列カウンタ 906を 1増加させ ることは実施の形態 4の例と同様である。
列番号スィッチ 908は、図 67に示すように、 1つの列カウンタ値を 2つの LUTに送 るよう、接続する。
[0176] このようにして、 1組の行カウンタ.列カウンタから 2つのアドレスが生成され、 2つの データが同時に読み出される。カウンタは 5組あるので計 10個のデータが読み出さ れる。これらは、出力側スィッチ 903により適切な端子に送られる(サブブロック 1つあ たり 2つの端子がある)。
そして、本発明によればこれら 10個のデータ読み出しはすべて別のバンクへのァク セスであることが保証され、アクセス競合は起こらな 、。
なお、プルーニング判定部 913でのプルーニング判定は、サブブロックごとではなく データごとに行われる。たとえば、サブブロック 0のはじめのデータは、 2つのうち 1つ
だけが無効である。
[0177] (他の実施の形態)
(1)行カウンタ、列カウンタ、列番号スィッチの他の構成例
行カウンタ、列カウンタ、列番号スィッチは、上述した実施の形態と異なる回路構成 でも実現できる。ただし、 LUTに列番号を供給し、出力スィッチを操作するための信 号を生成すると!ヽぅ目的に変わりはな ヽ。
[0178] 図 69に、図 54に示した実施の形態 5の回路構成に対するノ リエーシヨンを示す。
なお、図 69は、図 54のインターリーバ 800の行カウンタ 807、列カウンタ 808、列番 号スィッチ 809、アドレス生成部 811に対応する部分のみを示したものであり、インタ 一リーバ 1000の他の部分は省略している。
[0179] インターリーバ 1000は、行カウンタ 807、列カウンタ 808、列番号スィッチ 809に換 えて、転送回路 1001と、制御部 1002と、レジスタ部 1003と、上位アドレス生成部 10
04と、カロ算器 1005とを有する。
10個のレジスタ 0〜9は、列カウンタ 808の値に相当する値を保持する。図 54では
、列カウンタ 808はサブブロックとの対応が固定であった力 図 69のレジスタ 0〜9は
LUT0〜9との対応を固定とした。
転送回路 1001は、レジスタの内容を並びかえる。一部のレジスタに対しては値の 更新を行う。
[0180] 図 70に、転送回路 1001の構成例を示す。転送回路 1001は 4つの状態を持ち、図 70 (B)のように状態遷移する。
状態 0では、白抜き四角形を記した部分が接続される。すなわち、レジスタ 0の内容 はレジスタ 0に転送され、レジスタ 9の内容はレジスタ 5に転送される。
図 62と比較すると転送回路 1001の動作が理解できる。すなわち、図 62では LUT 9に入力されていた値は列カウンタ 0の値である。そして、次の時刻では、図 62 (B)の ように、列カウンタ 0の値は LUT5に転送されるようスィッチの接続が変更される。 これに対して、図 70では、はじめの状態ではレジスタ 9には LUT9に入力すべき値 として列カウンタ 0に相当する値を保持していた。この値は、次の時刻に LUT5で使 われるので、転送回路はレジスタ 5に転送するよう接続がなされる。
状態 3 (三角印)においては、レジスタ 9に入力される値に 1を加算するとともに、レジ スタ 5に入力される値から 1を減ずる。これは、図 62において列カウンタ 707がインクリ メント /デクリメントする動作に相当する。
図 69の制御部 1002は、転送回路 1001の 4状態を制御する。それと同時に、上位 アドレス生成部 1004及び出力側スィッチの制御を行う。
[0181] (2)ターボデコーダへの適用例 1
実施の形態 3においては、実施の形態 1、 2の並列インターリーバに対応する並列 ターボデコーダの構成例(図 41、図 42)を示した。図 71に、実施の形態 4のインター リーバ 700 (図 43)に対応する並列ターボデコーダの構成例を示す。
[0182] 図 71の並列ターボデコーダは、大きく分けて、並列インターリーバ 1100と、並列デ インタージーノ 1200と、 SISOデコーダ 1300と、遅延回路 1400と、 SISOデコーダ 1 500とを有する。
並列インターリーバ 1100は、メモリ 1101と、 natural orderアドレス生成部 1102と、 スィッチ 1103と、 interleave orderアドレス生成部 1104と、プルーニング判定部 110 3とを有する。また並歹 IJディンターリーノ 1200は、スィッチ 1201と、メモリ 1202と、 na tural orderアドレス生成部 1203とを有する。
[0183] 図 71の並列ターボデコーダの特徴的な動作は、次の点である。(0プル一ユング判 定部 1105により、無効アドレスが検出された場合には、該当する SISOデコーダのみ をウェイト (一時停止)する。 (ii)並列インターリーバ 1100のインターリーブオーダーァ ドレスは、遅延回路 1400でタイミング調整すればそのまま並列ディンターリーバ 120 0で使うことができるので、インターリーブオーダーアドレス生成部 1104は 1つでよい 。同時に、スィッチの制御信号も受け渡す。これにより、同じアドレスを (単に遅延させ ただけの)同じタイミングで渡すので、アクセス競合がないことが保証される。因みに、 SISOデコーダ 1300の入力と出力でデータの並び順が同じ場合は、遅延回路 1400 として FIFO (先入れ先出し)バッファを用いる。入力と出力でデータの並び順が逆に なる場合は LIFO (後入れ先出し)バッファを用いる。
[0184] なお、(i)については、プルーニング判定に基づき SISOデコーダをウェイトするとい う構成は従来も行われていた。本発明はこれを並列構成で行うことに特徴がある。
[0185] 因みに、従来の構成例として次の 2つのものがあった。
[従来構成 1]逐次(並列でな 、)ターボデコーダが前提。(アドレステーブルは大き 、 ので)テーブル引きではなぐ 1つずつアドレスを計算する。このとき、無効アドレスま で生成されてしまうのでその場合は SISOデコーダをウェイトする。ウェイトが発生しな いように、アドレスを 2個ずつ生成して 1個だけ使うなどの方法も考案されている。この 場合、連続した 2個カ^、ずれも無効であることはな!/、。
[従来構成 2]並列インターリーバでは、テーブル引きでアドレス生成する。なお、テー ブル引き以外でもできる力もしれないが、たいていテーブル引きでやっている。どうせ テーブルを作るのであれば、無効アドレスは除去しておこうというのが常識になってい る。
[0186] これに対して、本発明では、並列ターボデコーダで、わざわざプルーニングによるゥ エイトを発生させている。換言すれば、無効アドレスを残してテーブルを作っている。 これにより、競合が発生しない状態を維持することができる。
[0187] (3)ターボデコーダへの適用例 2
図 72に、実施の形態 6のハイブリッド型のインターリーバ 900に対応するターボデコ ーダの構成例を示す。
[0188] 図 72のターボデコーダは、大きく分けて、並列インターリーバ 2100と、並列ディン ターリーノ 2200と、 Radix— 4 SISOデコーダ 2300と、遅延回路 2400と、 Radix—
4 SISOデコーダ 2500とを有する。
並列インターリーバ 2100は、スィッチ 2101と、メモリ 2102と、 natural orderアドレス 生成部 2103と、スィッチ 2104と、 interleave orderアドレス生成部 2105、プル一ニン グ判定部 2106とを有する。
[0189] ここで、 natural order (並列インターリーバの書込み時)においても 10シンボル/サイ クルの書き込みができるように、メモリバンクをさらに偶数アドレスと奇数アドレスの 2つ に分割する。末尾に eが付く RAMには偶数アドレスのデータ、 0が付く RAMには奇 数アドレスのデータを保存する。
natural orderにおいては、 RAMlOeに書き込むときには同時に RAMlOoにもデー タを書き込む。 Interleave orderにおいては、 RAMlOeと RAMlOoのいずれか一方
に対してのみ読出しを行う。
[0190] 以上説明したように、本発明の並列インターリーバの一つの態様は、例えば図 21、 図 31、図 36、図 43、図 54、図 63を用いて説明したように、複数のメモリバンク力もな るメモリに入力データを書き込み、書き込まれたデータを書き込みと異なる順序で読 み出すことにより、 2次元配列型のデータ構造に対して行方向優先でデータを書き込 み、各行ごとに規定される行内並び替えパターンに基づき行内並び替えを行い、行 同士を並び替え、列方向優先でデータを読み出すインターリーブアルゴリズムを実現 する並列インターリーバであって、複数のメモリバンク力 なり、各バンクが前記 2次元 配列の 1または複数の行番号と対応付けられているメモリと、それぞれ前記 2次元配 列のデータ構造における別の行において規定される複数の行内並び替えパターン を生成するパターン生成部手段と、前記パターン生成部手段を内部に持ち、前記複 数の行内並び替えパターンに基づき複数の読み出しアドレスを生成する読み出し制 御手段アドレス生成部と、を具備し、前記メモリから複数のデータを同時に読み出す 構成を採る。
[0191] この構成によれば、複数のアドレスを用いて、アクセス競合なく並列に処理すること ができ、インターリーバの高速ィ匕を図ることができる。
[0192] 本発明の並列インターリーバの一つの態様は、前記読み出し制御手段は、前記メ モリバンク間で同時に読み出す 2つ以上のデータについて、いずれの 2つ以上につ いても、インターリーブ後のデータ順位の差を行数で除した余りが 1以上となるように 、前記複数のメモリバンク力 データを読み出す構成を採る。
[0193] この構成によれば、読み出し時に、メモリバンク間で同時に読み出すデータのイン ターリーブ後の順位の差を行数で除した余りが 1以上となるように、各メモリバンクの データを読み出すようにしたので、どのような行内および行間並び替えパターンを採 用したとしても、同一のメモリバンクに 2つ以上の読み出しアドレスが生成されることが なくなる。つまり、どのようなインターリーブパターンを採用したとしても、メモリバンクへ のメモリアクセス競合を回避できるようになる。この結果、調停回路等の付加的な回路 を設けなくても、良好に高速なインターリーブ処理を行うことができる並列インターリー バを実現できる。
[0194] 本発明の並列インターリーバの一つの態様は、前記インターリーブアルゴリズムは、 入力データのデータサイズが前記 2次元配列より小さ 、場合、前記入力データにダミ 一データを付加してインターリーブ処理を行った後、ダミーデータを取り除くインター リーブアルゴリズムであり、さらに、前記複数のアドレスのうち、前記ダミーデータに対 応する 0ないし複数個の無効アドレスを判別する無効アドレス判定部を具備する構成 を採る。
[0195] 本発明の並列インターリーバの一つの態様は、前記読み出し制御手段は、前記メ モリバンク間で読み出す 2つ以上のデータにっ 、て、 、ずれの 2つ以上にっ 、ても、 ダミーデータ除去前の順位の差を行数で除した余りが 1以上となるように、前記複数 のメモリからデータを読み出す、構成を採る。
[0196] この構成によれば、ダミーデータの除去処理(プル一ユング処理)を行っても同一の メモリバンクに 2つ以上の読み出しアドレスが生成されることがなくなるため、任意のデ ータサイズのインターリーブを行う場合でもメモリバンクへのメモリアクセス競合を回避 でさるよう〖こなる。
[0197] 本発明の並列インターリーバの一つの態様は、前記 2次元配列のデータ構造にお ける各行の入力データを、同じ行のデータはその行番号に対応するメモリバンクに書 き込むようにして、定められたメモリバンクに書き込むための書き込みアドレスを生成 する書き込み制御手段を具備し、書き込み制御手段は、 2次元配列のデータ構造に おける各行と、書き込み先バンクとの対応が、一対一の対応となる書き込みアドレスを 生成する、構成を採る。
[0198] この構成によれば、メモリバンクへのアクセス競合を回避しつつ、並列度をメモリバ ンク数と等しくできるので、メモリバンクを最大限に利用して高速なインターリーブ処 理を行うことができるようになる。
[0199] 本発明の並列インターリーバの一つの態様は、前記 2次元配列のデータ構造にお ける各行の入力データを、同じ行のデータはその行番号に対応するメモリバンクに書 き込むようにして、定められたメモリバンクに書き込むための書き込みアドレスを生成 する書き込み制御手段を具備し、 2次元配列のデータ構造における行に対する書き 込み先のメモリバンクの対応を一意に定め、かつ、インターリーブ後の順位の差と行
数との最大公約数を越えな 、 1な 、し複数の行を 1つのメモリバンクに対応付ける書 き込みアドレスを生成する、構成を採る。
[0200] この構成によれば、同時に読み出すデータ数が行数より少ない場合に、バンクメモ リ数を少なくできるので、並列インターリーバを、より小規模な回路で実現することが でさるよう〖こなる。
[0201] 本発明の並列インターリーバの一つの態様は、前記書き込み制御手段は、前記同 時に読み出すデータと同数の第 1の行番号の組を生成する行カウンタと、前記同時 に読み出すデータと同数の第 1の列番号の組を生成する列カウンタとを備え、前記 第 1の行番号の組により書き込み先バンクを決定すると共に、前記第 1の列番号の組 より書き込みアドレスを算出し、前記読み出し制御手段は、いずれの 2つについても、 差を行数で除した余りが 1以上となるような複数のデータ順位に対するインターリーブ アドレスを複数生成するインターリーブアドレス生成手段と、前記インターリーブァドレ スに対し第 2の行番号の組及び第 2の列番号の組を一意に算出する行列番号決定 手段と、前記第 2の列番号の組を読み出しアドレスとし、前記第 2の行番号の組により 読み出し元バンクを決定すると共に前記読み出しアドレスを該当する読み出し元バン クに送出するアドレス転送手段と、を具備する構成を採る。
[0202] 本発明の並列インターリーバの一つの態様は、前記読み出し制御手段は、前記ィ ンターリーブ後の順位の差を行数で除した余りを行オフセットとして求め、当該行オフ セットぶんずつオフセットした、前記メモリバンク分の行番号力 なる行番号セットを、 行間並び替えパターンに基づいて変換し、変換後の行番号セットを前記メモリの出 力側に設けられた出力選択手段にバンク選択信号として送出するバンク選択信号生 成手段と、列番号セットと、前記バンク選択信号生成手段により求められた変換後の 行番号セットとを用いて、行内並べ替えパターンを生成して、そのパターンを読み出 しアドレスとして前記メモリの該当するメモリバンクに送出する読み出しアドレス生成手 段と、を具備する構成を採る。
[0203] この構成によれば、読み出しアドレス生成手段とバンク選択信号生成手段とによつ て、メモリバンク間で同時に読み出す 2つ以上のデータについて、いずれの 2つ以上 につ 、ても、インターリーブ後のデータ順位の差を行数で除した余りが 1以上となるよ
うにデータを読み出すと ヽつた処理を実現できるようになる。
[0204] 本発明の並列インターリーバの一つの態様は、前記並列インターリーバは、前記 2 次元配列のデータ構造における各行の入力データを、所定のサブブロック単位で異 なるメモリバンクに書き込むための書き込みアドレスを生成する書き込み制御手段を 有するサブブロック分割型のインターリーバであり、前記読み出し制御手段は、前記 インターリーブ後の順位の差を行数で除した余りを行オフセットとして求め、当該行ォ フセットぶんずつオフセットした、前記メモリバンク分の行番号力 なる行番号セットを 、行間並び替えパターンに基づいて変換し、変換後の行番号セットを前記メモリの出 力側に設けられた出力選択手段にバンク選択信号として送出するバンク選択信号生 成手段と、列番号セットと、前記バンク選択信号生成手段により求められた変換後の 行番号セットとを用いて、インターリーブ後の順位の差がサブブロックサイズとなる行 内並べ替えパターンを生成し、そのパターンを読み出しアドレスとして前記メモリの該 当するメモリバンクに送出する読み出しアドレス生成手段と、を具備する構成を採る。
[0205] この構成によれば、サブブロック分割型のインターリーバにおいて、読み出しァドレ ス生成手段とバンク選択信号生成手段とによって、メモリバンク間で同時に読み出す 2つ以上のデータについて、いずれの 2つ以上についても、インターリーブ後のデー タ順位の差を行数で除した余りが 1以上となるようにデータを読み出す、といった処理 を実現できるようになる。
[0206] 本発明の並列インターリーバの一つの態様は、前記書き込み制御手段は、前記各 メモリバンクに書き込む入力データのサブブロックサイズを前記 2次元配列のデータ 構造における列数以上とする、書き込みアドレスを生成する、構成を採る。
[0207] この構成によれば、サブブロック型のインターリーバにおいて、 2次元配列のデータ 構造における各行の入力データを、同じ行のデータはその行番号に対応するメモリ バンクに書き込むといった処理を、メモリアクセス競合を起こすことなく行うことができ るよつになる。
[0208] 本発明の並列インターリーバの一つの態様は、前記書き込み制御手段は、前記各 メモリバンクに書き込む入力データのサブブロックサイズを前記 2次元配列のデータ 構造の列数に等しくする、書き込みアドレスを生成する、構成を採る。
[0209] この構成によれば、書き込み、読み出しともに、同一のサブブロック単位で処理を行 うことがでさるよう〖こなる。
[0210] 本発明の並列ディンターリーバの一つの態様は、上記いずれかの並列インターリ ーバの書き込みアドレスと読み出しアドレスを入れ替え、さらに入力選択手段と出力 選択手段を入れ替えることにより、インターリーブアルゴリズムの逆処理を実現する構 成を採る。
[0211] この構成によれば、上記いずれかの並列インターリーバによってインターリーブされ たデータを、メモリアクセス競合無しに、元の配列に戻すことができるようになる。
[0212] 本発明のターボデコーダの一つの態様は、上記いずれかの並列インターリーバを 具備する構成を採る。
[0213] 本発明のインターリーブ方法の一つの態様は、複数のメモリバンク力もなるメモリに 入力データを書き込み、書き込まれたデータを書き込みと異なる順序で読み出すこと により、 2次元配列型のデータ構造に対して行方向優先でデータを書き込み、各行ご とに規定される行内並び替えパターンに基づき行内並び替えを行い、行同士を並び 替え、列方向優先でデータを読み出すインターリーブアルゴリズムを実現する並列ィ ンターリーブ方法であって、それぞれ前記 2次元配列のデータ構造における別の行 において規定される複数の行内並び替えパターンを生成するパターン生成ステップ と、前記パターン生成ステップで生成した前記複数の行内並び替えパターンに基づ き、複数のメモリバンク力もなり各バンクが前記 2次元配列の 1または複数の行番号と 対応付けられて 、るメモリにつ 、ての複数のアドレスを生成するアドレス生成ステップ と、を含み、前記メモリから複数のデータを同時に読み出すようにする。
[0214] 本明糸田書 ίま、 2005年 2月 3日出願の特願 2005— 28314に基づく。その内容 ίま、 全てここに含めておく。
産業上の利用可能性
[0215] 本発明の並列インターリーノ 、並列ディンターリーバ及びインターリーブ方法は、例 えば無線通信機器のターボデコーダに適用して好適である。