JP4848359B2 - 並列インターリーバ、並列デインターリーバ及びインターリーブ方法 - Google Patents

並列インターリーバ、並列デインターリーバ及びインターリーブ方法 Download PDF

Info

Publication number
JP4848359B2
JP4848359B2 JP2007501644A JP2007501644A JP4848359B2 JP 4848359 B2 JP4848359 B2 JP 4848359B2 JP 2007501644 A JP2007501644 A JP 2007501644A JP 2007501644 A JP2007501644 A JP 2007501644A JP 4848359 B2 JP4848359 B2 JP 4848359B2
Authority
JP
Japan
Prior art keywords
data
row
address
memory
bank
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2007501644A
Other languages
English (en)
Other versions
JPWO2006082923A1 (ja
Inventor
裕幸 本塚
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Panasonic Corp
Panasonic Holdings Corp
Original Assignee
Panasonic Corp
Matsushita Electric Industrial Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Panasonic Corp, Matsushita Electric Industrial Co Ltd filed Critical Panasonic Corp
Priority to JP2007501644A priority Critical patent/JP4848359B2/ja
Publication of JPWO2006082923A1 publication Critical patent/JPWO2006082923A1/ja
Application granted granted Critical
Publication of JP4848359B2 publication Critical patent/JP4848359B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L1/00Arrangements for detecting or preventing errors in the information received
    • H04L1/004Arrangements for detecting or preventing errors in the information received by using forward error control
    • H04L1/0056Systems characterized by the type of code used
    • H04L1/0071Use of interleaving
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/27Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes using interleaving techniques
    • H03M13/276Interleaving address generation
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/27Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes using interleaving techniques
    • H03M13/2771Internal interleaver for turbo codes
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/27Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes using interleaving techniques
    • H03M13/2792Interleaver wherein interleaving is performed jointly with another technique such as puncturing, multiplexing or routing
    • H03M13/2796Two or more interleaving operations are performed jointly, e.g. the first and second interleaving operations defined for 3GPP UMTS are performed jointly in a single interleaving operation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L1/00Arrangements for detecting or preventing errors in the information received
    • H04L1/004Arrangements for detecting or preventing errors in the information received by using forward error control
    • H04L1/0056Systems characterized by the type of code used
    • H04L1/0064Concatenated codes
    • H04L1/0066Parallel concatenated codes
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/29Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes combining two or more codes or code structures, e.g. product codes, generalised product codes, concatenated codes, inner and outer codes
    • H03M13/2957Turbo codes and decoding

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Probability & Statistics with Applications (AREA)
  • Signal Processing (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Error Detection And Correction (AREA)

Description

本発明は、特に、2次元配列型のデータ構造に対して行方向優先でデータを書き込み、各行ごとに行内並び替えを行い、行同士を並び替え、列方向優先でデータを読み出すインターリーブアルゴリズムを実現する並列インターリーバ、並列デインターリーバ及びインターリーブ方法に関する。
(インターリーブのアルゴリズム)
先ず、従来のインターリーバのアルゴリズムについて説明する。インターリーブ処理とは、長さKのデータ列{d[0],d[1],…,d[K−1]}を並び替えて、データ列{d’[0],d’[1],…,d’[K−1]}を出力する処理である。個々のデータd[i]は、単一のビットである場合や固定小数点数(いわゆる軟判定値)である場合などさまざまであるから、以後シンボルと呼ぶ。
従来のインターリーブアルゴリズムのうち、2次元配列型のデータ構造を用いるものがある。その基本的なアルゴリズムは以下の通りである。なお、例として非特許文献1に記載されているものを紹介する。そのインターリーブ方式は、素体インターリーバ(Prime Interleaver;PIL)として知られているものである。以下、PILの手順を説明する。例として、データ長K=45の場合について、図1、図2及び図3を用いて説明する。
[手順1]データ長Kに応じて、配列の行数Rおよび列数Cを所定の式により決定する。
[手順2]R行C列の配列に、行方向優先でシンボルを書き込む。このとき、データ長Kが配列のサイズRCに満たない場合、残りの領域にダミーシンボル(d)を書き込む。この状態を、図1に示した。
[手順3]次に、配列の各行について、所定の規則に従い行内での並び替えを行う。ここで、並び替え規則は各行ごとに異なる場合がある。各行の並び替え規則は、数列Ui(j)により表される。Ui(j)は、第i行第j列に移動されるデータの行内の元の位置を示す。例えば、例においてはU2(3)=7であるが、これは第2行第3列に移動されるデータの元の位置は第2行第7列であることを示す。すなわち、d[27]が行内並び替えにより第2行第7列から第2行第3列に移動される。この状態を、図2に示した。
[手順4]さらに、各行内の順序を保ったまま、所定の規則に従い行ごとを入れ替える。この行間並び替えは、数列T(i)で表される。すなわち、第i行に移動される行の元の位置は、第T(i)行である。この状態を、図3に示した。
[手順5]最後に、配列内のデータを列方向優先に読み出す。このとき、ダミーデータは読み飛ばす(プルーニングという)。以上により、出力シンボル列は、{d[40],d[30],d[20],d[10],…,d[18],d[4],d[31],…,d[16],d[7]}となる。
上記手順中における、RとCの決定方法、行内並び替え規則Ui(j)、行間並び替え規則T(i)については、非特許文献1に規定されている。また非特許文献1に示される方法以外にも、多数の方法が提案されている。
因みに、本発明で提案する並列インターリーバは、RとCの決定方法、行内並び替え規則Ui(j)、行間並び替え規則T(i)にかかわらず、上記手順により行われる全てのインターリーバに対して有効なものである。
(インターリーバの実装方法)
実際にLSIなどでインターリーバ回路を実現する場合には、上述したような2次元配列への書き込みや行内・行間並び替えを行うわけではない。一般的に知られているインターリーバ回路は、入力されたシンボル順でメモリに順序良く書き込んだ後、ランダム的に読み出すことで並び替えを実現する。このランダム的なメモリ読み出しを行う際のアドレス計算方法に、行内・行間並び替えや列方向優先読み出しの規則を反映させることにより、上述したようなインターリーブを実現する。
図4に、最も基本的なインターリーバ回路を示す。1サイクルに1シンボルずつ処理するため、逐次型インターリーバと呼ばれるものである。逐次型インターリーバは、シンボル列を格納するRAMと、昇順アドレスを生成するカウンタ1と、擬似ランダムアドレスを生成するアドレステーブルとカウンタ2からなる。
インターリーブ処理を行うに先立ち、インターリーブパターンを定めた規格に従い、アドレステーブルを設定する。その手順は、直感的には、図3を列方向優先で読むことにより理解できる。
K=45のPILにおけるアドレステーブルを、図6に示す。このテーブルは、例えば並び替えの後、1番目に出力されるべきデータは並び替え前の41番目のデータであることを示す(すなわちA(0)=40。インデックスが0から始まっていることに注意)。さらに、2番目に出力されるデータは並び替え前の31番目のデータである。
次に、実際のインターリーブ処理について説明する。インターリーブ処理は、書き込みと読み出しの2つのフェーズにより完了される。
書き込みフェーズにおいては、カウンタ1は0から開始し1ずつ増加するアドレスを生成する。このアドレスを用いて入力シンボルをRAMに書き込むことにより、データ列が入力された順序でRAMに格納される。図5のタイミングチャートの時刻0〜39は書き込みフェーズである。
全てのシンボルの書き込みが完了した後、読み出し動作を開始する。読み出しフェーズにおいては、先ずカウンタ2が昇順のカウント値を生成し、そのカウント値をアドレスとしてアドレステーブルが参照される。そして、アドレステーブルから出力されたデータ(A(k2))をアドレスとして、RAMから1シンボルを読み出す。このような動作をシンボル数繰り返すことにより、図5の信号r_dataが示すように、インターリーブされたデータ列を得ることができる。
このように、アドレステーブルに擬似ランダムアドレスパターンを予め設定することにより、任意のパターンでインターリーブを行うことができる。なお、メモリによるアドレステーブルを用いずに擬似ランダムアドレスパターンを生成することも可能である。PILのためのアドレス生成回路の例として、特許文献1に記載されているものがある。
ところで、インターリーブされたデータ列を元の順序に戻す処理をデインターリーブという。デインターリーブは、図5に示したような逐次型インターリーバを用いても実現できる。すなわち、アドレステーブルにデインターリーブのパターンを設定すればよい。
デインターリーブを行うさらに簡単な方法は、逐次型インターリーバの書き込みアドレスと読み出しアドレスを入れ替えることである。例えば図7に示すような構成とすればよい。この方法により、新たなパターンを用意することなく、わずかな回路の追加(w_addrとr_addrを入れ替えるスイッチ)のみでインターリーブ及びデインターリーブを行う回路を実現できる。
(インターリーバの並列化)
図4のインターリーバは、逐次型、すなわち1サイクルに1つのシンボルのみを書き込み又は読み出しするものであった。従って、Kシンボルのデータ列をインターリーブするためには、初めのシンボルを入力してから最後のシンボルが出力されるまでに、2K+1サイクルの遅延が発生する。また逐次インターリーバのスループット(単位時間当たりの処理能力)は、約0.5シンボル/サイクルと低かった。
高速かつ低遅延なインターリーブ処理を実現するためには、インターリーバ回路を並列化することが有効である。ここでは、インターリーバ回路の並列化方法として、3つの方法を挙げる。
<サブブロック分割方式>
インターリーバを並列化する一つの方法は、図9に示すように入力データ列を部分データ列(サブブロック)に分割することである。各サブブロックは、インターリーバに並列に入力される。
たとえば、図9では、K=45で、サブブロック数2の場合を示している。この例においては、初めのサイクルにおいてデータd[0]とd[23]が並列インターリーバ1に同時に入力され、次のサイクルにおいてd[1]とd[24]が同時に入力される。また、読み出しフェーズにおいては、d[40]とd[2]が同時に出力される。このようにして、図8に示す逐次インターリーバに比べ、2倍のスループット及び半分の遅延時間でインターリーブ処理を完了することができる。
並列インターリーバ1を用いて構成したターボデコーダを、図13に示す。この並列ターボデコーダは、SISO(Soft-In Soft-Out)デコーダを2つ備えることにより、図12に示す逐次型のターボデコーダに比べ2倍のスループットを実現することができる。このような、サブブロック分割を利用した並列ターボデコーダについては、例えば非特許文献2に記載されている。
<シリアル/パラレル変換方式>
図10に、別の並列インターリーバを示す。この方法は、シリアル−パラレル変換器(図中S/P)により、連続したデータ(たとえばd[0]とd[1])を並列インターリーバ2に同時に入力する。読み出しフェーズにおいては、同時に出力されるデータの組はパラレル−シリアル変換器(図中P/S)により連続したデータ列に戻される。
並列インターリーバ2を用いて構成したターボデコーダは、図14のようになる。このタイプの並列インターリーバにおいては、同時に入力されるデータはデータ列上で連続したデータであるから、別のSISOデコーダで並列に処理することができない。従って、複数シンボルを同時に入力できる高速なSISOデコーダが必要となる。このようなSISOデコーダとして、例えば非特許文献3に記載されているようなradix−4と呼ばれる方式のものが知られている。
<ハイブリッド方式>
サブブロック分割方式とシリアル−パラレル変換方式(radix−4)を併用することも可能である。
radix−4によるターボデコーダは2並列のサブブロック分割方式に比べ、小さな回路規模で同等のスループットが得られる。しかし、さらにスループットを高める(例えばradix−8以上を採用)ことは、クリティカルパス及びターボ符号の拘束長の制約があり困難である。
そこで、任意の並列度でサブブロック分割した後に、それぞれのサブブロックをradix−4で処理する方法が考えられる。サブブロック数を2としてradix−4を適用するターボデコーダ(図15)に合わせて設計された、図11に示す並列インターリーバ3は、並列度が4(=2×2)となる。
ところで、上述したインターリーバの並列化における課題は、複数のデータを同時にメモリに書き込む(読み出す)必要があることである。以下に、従来知られている解決策(実現例)を列挙する。
(並列化の実現例1)
最も単純な解決策は、マルチポートRAMを用いることである。マルチポートRAMは、同時に複数のアドレスを処理することができ、同時に複数のデータを書き込む(読み出す)ことのできるRAMである。図16に、デュアルポートRAM(同時に2つのアクセスが可能なRAM)を用いた並列インターリーバを示す。なお、図16において、サブブロック分割型の場合にはoffset値をサブブロックサイズに、シリアル−パラレル変換型の場合にはoffset値を1に設定すればよい。
(並列化の実現例2)
別の解決策は、RAMを複数のバンク(モジュール)に分割することである。別のバンクであれば独立にアクセスすることができるので、最大でメモリバンク数と同数のアクセスを同時に行うことができる。
しかしながら、インターリーブパターンやサブブロックの分割方法によっては、ある1つのバンクに同時に2つ以上のアクセスが発生してしまうことがある(以下これをメモリアクセス競合と呼ぶ)。従って、メモリアクセス競合が発生した場合にはそのサイクルには1つだけの書き込みを行い、他のデータはバッファに保存し次のサイクル以降に改めて書き込みを行うような調停回路が必要となる。
メモリアクセス競合を調停回路により回避する方法について、例を用いて説明する。シンボル数K=45として、サブブロックをK0=23とK1=22のようにほぼ均等に分割した場合のデインターリーブ処理について考える。調停回路付きの並列デインターリーバの構成例を、図17に示す。
サブブロック0として出力されるデータはRAM0に、サブブロック1として出力されるデータはRAM1に書き込まれる必要がある。従って、デインターリーブ後のインデックスが0〜22のデータはRAM0に、インデックスが23〜44のデータはRAM1に書き込まれる。
書き込みフェーズの初めのサイクルにおいては、2つのサブブロックの先頭のデータであるd[0]とd[23]が入力される。アドレステーブル0よりA(0)=40、アドレステーブル1よりA(23)=0のようにアドレスが求まるから、データd[0]をRAM1へ、データd[23]をRAM0へ書き込めば良いことがわかる。従って、調停回
路は信号in_data0の値をw_data1へ、in_data1の値をw_data0へ入力するように接続する。またアドレステーブル1の出力をw_addr0へ、アドレステーブル0の出力から23を減じた値をw_addr1へ入力する。
次のサイクルには、データd[1]とデータd[24]が入力される。A(1)=30、A(24)=39であるから、いずれのデータもRAM1へ書き込む必要がある。そこで、データd[1]をRAM1のアドレス7へ書き込む一方、データd[24]はバッファ(例えばFIFO)に保存し、次のサイクル以降に書き込む。
さらに次のサイクルには、データd[2]とデータd[25]が入力される。このサイクルにおいては、データd[2]をRAM0のアドレス20に書き込むと共に、バッファからデータd[24]を取り出しRAM1のアドレス16に書き込む。RAM1への書き込みは同時に1つしか行えないため、今度はデータd[25]をバッファに保存する。
以上のように、調停回路を用いることでマルチポートメモリを使うことなく並列インターリーバ回路が実現可能となる。この方法はまた、RAMの総容量を増やさなくてよいという利点がある。
しかしながら、インターリーブパターンのランダム性が高いほど、調停回路に必要なバッファの容量が増大してしまう。
このようなRAMを複数のバンク(モジュール)に分割した場合の別の構成例を、図18に示す。
図18のインターリーバ(デインターリーバ)では、1つの出力サブブロックは1つのRAMバンクと対応付けられる。例えば、出力サブブロック0に属するデータはRAM0に書き込まれる。例えばK=40のときのメモリへの書き込み方法は、図19に示す通りである。このように書き込みを行った後、それぞれのRAMの内容をアドレス順に読み出すことで、4つのサブブロックを並列に出力することができる。
ところで、入力データはサブブロック分割されているため、書き込みも並列に行う必要がある。たとえば、第0サイクルにはデータd[0],d[10],d[20],d[30]を同時に書き込む必要がある。このとき、3つのデータd[10],d[20],d[30]はいずれもRAM1に書き込まなければならない。しかし、RAM1はシングルポートメモリであるから、いずれか1つしか書き込むことができない。そこで、第0サイクルにおいてはデータd[10]のみをRAM1に書き込み、データd[10]とデータd[20]はバッファ(FIFO)に格納しておき、次のサイクル以降に1つずつRAM1に書き込む。このような調停及びバッファリングを行う回路が、図中のFIFO/アービタ部である。
図18の構成のように、メモリをサブブロック数と同数のメモリバンクRAM0〜4に分割することで並列インターリーバを実現することができる。このような構成は、例えば特許文献2に記載されている。
さらに、バンク割り当て(データの書き込み位置)を工夫してメモリアクセス競合を回避するようにした例として、図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+2
Ks)≠・・・、である必要がある。また、インターリーブパターンをπとしたとき、出力データd[π(i)],d[π(i+Ks)],d[π(i+2Ks)],…は同時に読み出される。従って、読み出し時にもアクセス競合が発生しないためには、M(π(i))≠M(π(i+Ks))≠M(π(i+2Ks))≠・・・、を満たす必要がある。このような関数Mを見つけることにより、図20のような回路によって並列インターリーブを実現することができる。
非特許文献4では、任意のインターリーブパターンπに対する関数Mの設計方法が示されている。
また図20と同様の回路構成にて、インターリーブを行う技術が、特許文献3に記載されている。特許文献3において、M関数は簡単な関数(たとえば、整数除算など)となる。特許文献3では、M(π(i)),M(π(i+Ks)),M(π(i+2Ks)),…が固定的な関係となるようにM関数及びインターリーブパターンπを選ぶことが提案されている。例えば、M(π(i+Ks))−M(π(i))=M(π(i+2Ks))−M(π(i+Ks))=・・・=定数値、となるようなM関数の例とインターリーブパターンπが示されている。このとき、上記定数値とバンク数の関係によっては(例えば定数値とバンク数が互いに素)、メモリアクセス競合が発生しないことを保証できる。特許文献3には上記関係を常に満たすインターリーブパターンπの設計方法が開示されているので、図20の回路でメモリアクセス競合を起こさず並列処理可能なインターリーブパターンπを設計することが可能となる。
特許第3399904号 特開2004−104776号公報 米国特許第6,775,800号 3GPP TS25.212 v5.4.0 "Multiplexing and channel coding (FDD), Release5" 4.2.3.2.3節 Turbo code internal interleaver 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 Integrated Circuits Conference, 2002. Proceedings of the IEEE 2002, pp. 389-392 Charles Thomas, Mark A. Bickerstaff, Linda M. Davis, Thomas Prokop, Ben Widdup, Gongyu Zhou, David Garrett, Chris Nicol; "Integrated Circuits for Channel Coding in 3G Cellular Mobile Wireless Systems", IEEE Communications Magazine August 2003, pp.150-159 Tarable, A.; Benedetto, S.; "Mapping interleaving laws to parallel turbo decoder architectures", Communications Letters, IEEE, Volume: 8, Issue: 3, March 2004, Pages:162 - 164
しかしながら、マルチポートRAMは回路規模が大きく、使用されることが少ない。FPGA(Field Programmable Gate Array)においては、デュアルポートRAMを備えているものも多いため、2並列のインターリーバを実現することは可能であるが、さらに高い並列度のインターリーバを実現することは困難である。
また特許文献2に記載されているような方法では、調停の機能が複雑である欠点がある。サブブロック数(並列度)が増えることにより、調停の機能はさらに複雑となり、回路規模の増大を招く。またFIFO長が長くなる欠点がある。長いFIFOを必要とすることにより、回路規模が増大し、遅延時間が長くなってしまう。
さらに非特許文献4に示されたM関数の設計方法では、M関数は単純な式で表すことができないため、実装するにあたってはテーブル引きが必要となる。従って、比較的大きなメモリを追加する必要があり、インターリーバの回路規模を増大させてしまう。また、インターリーブパターンが変わるごとにM関数を変更する必要があるが、リアルタイムでM関数を導くことは実際上困難と考えられる。従って、3GPP規格のturbo coding internal interleaverのようにデータ長が変わるごとにインターリーブパターンが変わる場合には対応することが困難である。
また特許文献3では、ある与えられたπに対して上記の式を満たすMを見つけることは困難である。またその方法にいては上記特許文献3では配慮されていなかった。特許文献3に記載された技術はあくまで上記の式を満たすπの設計方法、および特別なπに対して並列インターリーブを行う方法であるといえる。したがって、特許文献3に記載された技術を適用しても3GPP規格に示されるinternal interleaverをメモリアクセス競合なしに並列化することは困難であるといった問題がある。
本発明の目的は、比較的簡易な構成で、インターリーブパターンの変更にも柔軟に対応でき、かつメモリアクセス競合も回避し得る並列インターリーバ、並列デインターリーバ及びインターリーブ方法を提供することである。
本発明の並列インターリーバは、複数のメモリバンクからなるメモリに入力データを書き込み、書き込まれたデータを書き込みと異なる順序で読み出すことにより、2次元配列型のデータ構造に対して行方向優先でデータを書き込み、各行ごとに規定される行内並び替えパターンに基づき行内並び替えを行い、行同士を並び替え、列方向優先でデータを読み出すインターリーブアルゴリズムを実現する並列インターリーバであって、複数のメモリバンクからなり、各バンクが前記2次元配列の1または複数の行番号と対応付けられているメモリと、それぞれ前記2次元配列のデータ構造における別の行において規定される複数の行内並び替えパターンを生成するパターン生成手段と、前記パターン生成手段を内部に持ち、前記複数の行内並び替えパターンに基づき複数の読み出しアドレスを生成する読み出し制御手段と、を具備し、前記メモリから複数のデータを同時に読み出す構成を採る。
本発明によれば、どのような行内および行間並び替えパターンを採用したとしても、同一のメモリバンクに2つ以上の読み出しアドレスが生成されることがなくなる。つまり、どのようなインターリーブパターンを採用したとしても、メモリバンクへのメモリアクセス競合を回避できるようになる。この結果、比較的簡易な構成で、インターリーブパターンの変更にも柔軟に対応でき、かつメモリアクセス競合も回避し得る並列インターリーバ、並列デインターリーバ及びインターリーブ方法を実現できる。
以下、本発明の実施の形態について図面を参照して詳細に説明する。
(実施の形態1)
図21に、本発明の実施の形態1に係るインターリーバの構成を示す。インターリーバ100は、メモリアクセス競合を起こすことなくPIL(プライムインターリーブ)を並列に実行可能とするものである。本実施の形態では、説明を簡単化するために、インターリーバの行数R=5のみに対応する回路を示し、基本構成について説明する。
インターリーバ100は、サブブロック分割により5並列でインターリーブを行う回路である。先ず、簡単のためプルーニングが発生しない(データ長K=RC)場合について説明する。
インターリーバ100は、大きく分けて、入力側スイッチ101と、独立に書き込み及び読み出しが可能な複数のバンク(RAM0〜RAM4)からなるメモリ102と、出力側スイッチ103と、行カウンタ105及び列カウンタ106からなる書き込みアドレス生成部104と、行数算出部107と、列数算出部108と、出力サブブロックサイズ算出部109と、出力サブブロックカウンタ110と、ルックアップテーブルLUT0〜LUT4からなるアドレステーブル111と、ルックアップテーブル(LUT)設定部11
2と、行/列番号分離回路113と、アドレススイッチ114と、有効検出部115とを有する。
行数算出部107、列数算出部108は3GPP規格に従い、シンボル数Kに基づき行数R及び列数Cを決定する。
入力データdata_in0〜data_in4は、前段の処理ブロック(例えばデレートマッチング処理、SISO(Soft-In Soft-Out)デコード処理など)により、サブブロックに分割されて入力されるものとする。ここでは、入力サブブロック0(data_in0に対応)から入力サブブロック3のサイズは全て等しいとする。これをKsinと表記する。本発明のインターリーバ回路で書き込み時に競合が起きないためには、入力サブブロックサイズKsinは列数C以上である必要がある。
入力サブブロックサイズKsinは、外部より与えられる。インターリーバ100は、与えられた入力サブブロックサイズKsinに基づき、書き込みアドレス生成部104の列カウンタ106及び行カウンタ105の初期値を設定する。初期値の設定方法は、書き込み動作とあわせて説明する。
出力サブブロックサイズ算出部109は、シンボル数Kと行数Rから出力サブブロックサイズKsout’を決定する。図21の基本回路のように、RAM数Mrと行数Rと出力サブブロック数Moutが等しい場合には、出力サブブロックサイズKsoutは行数Rと互いに素(最大公約数が1)となるように定める。もちろん、出力サブブロックサイズKsoutは、Msをサブブロック数とすると、Ksout×Ms≧RCである必要がある(ここで、K=RC。右辺をKと書かない理由は、プルーニングありの場合にも対応するためである)。
出力サブブロックサイズKsoutを定めるひとつの方法は、Ksout=C,C+1,C+2,………のように順にRと互いに素である値を探すことである。
別の方法は、次式で定めることである。
Ksout=ceiling((C−floor(Ro×Ms/R))/Ms)×R+Ro
………(1)ただし、ceiling(): 無限大方向への丸め(切り上げ処理)
floor(): ゼロ方向への丸め(切り捨て)処理
Ro: Rと互いに素な定数(例えば1)
Ms: サブブロック数
を示す。
出力サブブロックサイズKsout’が決定した後、ルックアップテーブル(LUT)設定部112はアドレステーブル111の5つのルックアップテーブルLUT0〜LUT4の設定を行う。5つのLUT0〜LUT4はそれぞれ5つのサブブロックに対応する。このLUT0〜LUT4は、カウンタ値cnt_rをアドレスとして入力すると、バンク番号bとアドレス(メモリバンク内の物理アドレス)aを出力するよう設定される。ここで、バンク番号bはインターリーブ手順における行間並び替え後の行番号に、アドレスaは同じく列番号に対応する。バンク番号b及びアドレスaとインターリーブアドレスA(k2)との関係は、次式のようになる。
b[m]=floor{A(cnt_r+m×C)/C}
a[m]=A(cnt_r+m×C) mod C ………(2)
ただし、m=0,1,…,Mout−1、
floor: 0方向への丸め(切捨て)処理
mod: 剰余演算
を示す。
作成されたアドレステーブル111(ルックアップテーブルLUT0〜LUT4)の例を、図22に示す。ここでは、参考のためk2及びA(k2)を併記しているが、実際にLUT0〜LUT4に保存される値はバンク番号bとアドレスaのみである。またこの例はデータ長K=40、出力サブブロックサイズKsout=8の場合を表している。例えば、インターリーブ後のインデックスが18であるデータ(インターリーブ前のインデックスは14)は、LUT2のcnt_r=2のエントリを参照すると、RAM1のアドレス6に書き込まれることが分かる。
以上の初期設定が完了した後、書き込みフェーズ及び読み出しフェーズにより並列インターリーブが実行される。
本実施の形態においては、入力データdata_in0〜data_in4はCずつ区切られ別のバンク(RAM0〜RAM4)に書き込まれる。例えば図21の基本回路においては、n番目の入力シンボルは、floor(n/C)番のバンクに書き込まれる。またそのときの物理アドレス(該当するバンクに入力される読み出しアドレス)は、n mod C (modは剰余演算)である。
上記のような書き込み処理を実現するために、本実施の形態のインターリーバ100では、行カウンタ105と列カウンタ106を用いる。行カウンタ105と列カウンタ106は、それぞれ内部に複数のカウンタを持つ。ここで、カウンタの値をi[k],j[b]とする。なおk=0〜Ms−1(Msはサブブロック数)であり、b=0〜Mr−1(MrはRAMバンク数)である。
カウンタの初期値i0[k],j0[b]は入力サブブロックサイズKsを用いて、次式のように決定する。
i0[k]=floor(Ksin×k/C)
j0[i0[k]]=(Ksin×k) mod C
j0[b]=C(b=i0[k]なるkが存在しないとき) ………(3)
書き込みフェーズにおいては、列カウンタj[k]は初期値から毎サイクル1ずつ増加し、列数Cまでカウントする。列数Cに達すると、列カウンタj[k]は停止するが、対応する行カウンタi[k]をインクリメントすると共に、カウンタj[i[k]]をリセットする。
以上の処理を、例を用いて説明する。ここでサブブロックサイズKsがCより大きいとする。書き込み開始時において、i[0]=0,j[0]=0であるから、サブブロック0の入力(data_in0)はRAM0のアドレス0に書き込まれる。以後、C−1サイクルにわたり、RAM0のアドレス0〜C−1にサブブロック0のデータが書き込まれる。
このとき、j[0]=C−1となるので、次のサイクルにおいて、i[0]がインクリメントされi[0]=1になり、カウンタj[i[0]]はリセットされ、動作を開始する。すなわち、j[1]=0となる。従って、この時点においてサブブロック0のC番目のデータはRAM1のアドレス0に書き込まれる。図23に、全てのデータを書き込んだ後のRAM0〜RAM4内のデータ配置を示す。
読み出しフェーズにおいては、出力サブブロックカウンタ110が0から出力サブブロックサイズKsout−1までカウントアップを行い、カウンタ値cnt_rをLUT0〜LUT4へアドレスとして入力する。LUT0〜LUT4はその時点で読み出すべきデータのバンク番号とアドレスを出力する。例えば、図22の例ではカウンタ値cnt_r=0のときにLUT0はb0=4,a0=7を出力する。これは、サブブロック0の先頭のデータ(d[39])を出力するためにはバンク4のアドレス7を読み出せば良いということを示している。
LUT0〜LUT4からの5つの出力は、それぞれ行/列番号分離回路113に入力され、行番号bと列番号aに分離される。
列番号a0〜a4はアドレススイッチ114に入力され、行番号b0〜b4の指定するメモリバンク(RAM0〜RAM4)へ分配される。例えば、前記の例では、LUT0の出力a0=7というアドレスは、b0=4より、RAM4に転送される。LUT1の出力a1=3は、b1=1よりRAM1に転送される。このように、行番号b0〜b4がアドレススイッチ114を操作し、列番号a0〜a4を適切なRAMモジュールへ転送する。
行番号b0〜b4はさらに、出力側スイッチ103を操作し、RAM0〜RAM4の出力を適切なサブブロック出力信号data_out0〜data_out4へ分配する。例えば、前記の例では、LUT0の出力b0=4であることから、data_out0に出力されるべきデータはRAM4から出力されることが分かる。従って、出力側スイッチ103は信号r_data4を信号data_out0と接続する。
以上のようにして、5サブブロック分割による並列インターリーブが実現できる。以上の動作を、図24、図25にタイミングチャートとして改めて示す。図24は書き込みタイミングであり、図25は読み出しタイミングである。
ところで、本実施の形態のインターリーバ100でメモリ競合が発生しないための主たるポイントは、次の2つである。
(i)インターリーブパターンを生成する2次元マトリックス上で、異なる行に対応するシンボルは異なるメモリバンクRAM0〜RAM4に書き込むこと。
(ii)出力サブブロックサイズKsを行数Rと互いに素となるよう選択すること。
ここで、(ii)の条件は次のように換言することもできる。つまり、「同時に読み出す2つ以上のシンボルに関して、いずれの2つについても位置の間隔Sが行数Rと互いに素となるように同時に読み出すシンボルを選択する」ということができる。
この条件を使えば、シリアル-パラレル変換型の並列インターリーバにおいても、並列数がR以下であればメモリアクセス競合を発生させることなく並列読み出しが可能なインターリーバを設計できることが分かる。
次に、本実施の形態のインターリーバ100によるプルーニング処理について説明する。
インターリーバ100は、プルーニングが発生する場合(K<RCの場合)でもメモリアクセス競合を発生させずにインターリーブ処理を並列に実行可能となっている。
プルーニングに対応するための主なポイントは、以下の2つである。
(i)プルーニング対象シンボル(無効アドレス)を含めてLUT0〜LUT4を作成す
る。
(ii)無効アドレスに対応する部分では、そのサブブロックのみシンボルを出力しない。
以下、K=45の場合を例に説明する。
行数算出部108及び列数算出部107は3GPP規格に従い、行数R=5、列数C=10を求める。
入力サブブロックサイズに対する要件は、プルーニングが発生しない場合と同様である。ただし、本例のように、バンク数Mrとサブブロック数Msが等しい場合、Ksin≧Cの条件より、最終サブブロックは常にCより短くなる(Ksinは最終以外のサブブロックサイズである)。逆に、全てのサブブロックが等しいサイズとなるようにサブブロック分割すると、必ず書き込み時に競合が起こってしまう。
出力サブブロックサイズ算出部109は、出力サブブロックのサイズKsoutを、行数Rと互いに素になるように定める。また全てのサブブロックサイズの合計が、インターリーブパターンを生成する配列のサイズより大きくなるようにする。すなわち、サブブロック数をMsとしたとき、Ksout×Ms≧RCとなるように出力サブブロックサイズKsoutを定める。K=45の場合、これらの条件を満たす最小の出力サブブロックサイズKsoutとして、11を選択する。
ルックアップテーブル(LUT)設定部112は、データ長K及び出力サブブロックサイズKsoutの値から、全てのLUT0〜LUT4を設定する。ここでは、プルーニングされるシンボルのアドレス(無効アドレス)を含めてアドレスパターンを設定する。図26にK=45の場合のLUT0〜LUT4の内容を示す。例えばLUT2のカウンタ値cnt_r=3は、A(k2)=49に対応するため、無効アドレスの1つである。
無効アドレスの場合、RAM0〜RAMへアドレスを送らないようにアドレススイッチ114を制御することでプルーニングを実現できる。ここで、図27に示すように無効アドレスに対応する場所はバンク番号bの値を特別な値に書き替えておくことによって、アドレススイッチ114の制御を簡単にすることができる。またLUTの空いた部分にも無効を示す値を設定しておく。
以上の初期設定が完了した後、書き込みフェーズ及び読み出しフェーズにより並列インターリーブが実行される。
書き込みフェーズの動作はプルーニングが発生しない場合と同様である。タイミングチャートを図28に示す。
読み出しフェーズにおいては、LUT0〜LUT4から無効アドレスを示すデータ(b=6,a=0)が出力されたときのみ異なる動作を行う。このことをタイミングチャート図29を用いて説明する。時刻9において、LUT0〜LUT4の出力b0〜b3はバンク番号を示す3,2,1,0という値を取るが、b4は無効アドレスを示す6という値を取る。これに対し、アドレススイッチ114はRAM0〜3に対しては有効なアドレスa0〜3を送り、RAM4に対しては任意のアドレス(例えば0)を送るか、RAM4の読み出しを無効にする。そして、有効検出部115はサブブロック4の出力が無効であることを信号valid[4:0]を通じて外部(たとえばSISOデコーダ)に通知する。
以上の繰り返しにより、図29のdata_out0〜4が示すとおりインターリーブ処理を完了することができる。ここで、各出力サブブロックのサイズを、図30に示す。プルーニン
グが発生しない場合、出力サブブロックサイズは最終ブロックを除きすべてKsoutと一致したが、プルーニングが発生する場合にはKsoutより短くなる場合がある。
(実施の形態2)
実施の形態1では、競合を起こさず並列インターリーブを可能とする基本原理を示した。本実施の形態では、さらに、(1)書き込み処理の簡略化、(2)読み出し処理の簡略化、(3)サブブロックサイズ決定方法の変更、(4)少ないサブブロックへの対応を可能とする構成及び方法を提案する。
図31に、本実施の形態のインターリーバの構成を示す。図31のインターリーバ200は、上記(1)〜(3)を可能とする回路構成となっている。またインターリーバ200は、実施の形態1のインターリーバ100と比較して、回路構成が簡単化されている。
インターリーバ200は、大きく分けて、独立に書き込み及び読み出しが可能な複数のメモリバンク(RAM0〜RAM4)からなるメモリ201と、出力側スイッチ202と、列カウンタ204からなる書き込みアドレス生成部203と、列数算出部205と、行数算出部206と、サブブロックサイズ決定部207と、読み出しアドレス生成部210と、バンク選択信号生成部220と、無効判定部23とを有する。
(1)書き込み処理の簡略化
入力サブブロックサイズをCと定めることで、入力側スイッチ及び行カウンタを不要とし、書き込みアドレス生成部203の列カウンタ204を簡略化できる。すなわち、入力サブブロックサイズKsin=Cである場合、サブブロック[k]のデータは全てメモリ201のRAM[k]に書き込まれる。従って、data_in[k]をw_data[k]に直接接続することで、入力側スイッチと、スイッチを制御する行カウンタが不要となる。また各時点で全てのデータを同じアドレスに書き込むため、列カウンタ204は1つでよい(常にi[k]=k、j[0]=j[1]=…=j[k−1]であると見ることもできる)。
(2)読み出し処理の簡略化
実施の形態1で示した図21の読み出し制御では、各サブブロックが読み出すべきデータのバンク番号とアドレスをLUT0〜LUT4で求め、アドレススイッチ114を用い該当するバンクにそのアドレスを送ることで読み出しを実現した。ここで、LUT0〜LUT4内のデータを予め並べ替えておくことで、アドレススイッチを不要とすることができる。具体的には、LUT0にはRAM0に送るべきアドレスを、LUT[b]にはRAM[b]に送るべきアドレスを格納しておく。このテーブルは、行内並び替えパターンU[i](j)を並び替えたものである。たとえば、LUT0は、エントリ0から順に、U[0](0)、U[0](v)、U[0](2v)、・・・、U[0](tv mod Ksout)、のように格納されている。ここで、v=Ms×R/Mrである。LUT[k]のt番目のエントリは、LUT[k](t)=U[k]((tv+j0[k]) mod
Ksout)である。ここで、j0[k]=floor(Ksout×k/v)である。
以上のようにして、アドレススイッチを不要とし、バンク選択番号をLUT内に格納する必要が無くなるため、LUTの容量を削減することができる。3GPPのturbo internal interleaverの場合、LUTは1ワードあたり13ビットから8ビットに削減することができる。K=45の場合のLUT0〜LUT4の内容を、図33に示す。
しかしながら、バンク番号は出力側スイッチ202の操作のために別途必要となる。また、無効アドレスを示す特別なバンク番号をLUT0〜LUT4に格納しないために別の方法で有効判定を行う必要がある。
まず、バンク番号を求める回路構成、すなわちバンク選択信号生成部220について説明する。時刻tにおけるバンク選択信号b[k](t)は、b[k](t)=T[(t+k×Ksout) mod R]である。ここで、i=t mod R、Ro=Ksout mod Rと書くと、b[k](t)=T[(i+k×Ro) mod R]となる。
以上から、i=0〜R−1までカウントする行カウンタ223と、行オフセットRo=Ksout mod Rを求める行オフセット算出部222と、RエントリのLUT221(T−LUT)と、Rを法とする加算器(加算の後、Rの剰余を求める)224とを設けることで、バンク番号を生成する回路(すなわちバンク選択信号生成部220)を構成することができる。
次に、有効判定を行う回路(無効判定部230)の例を示す。ここでは、RAM4へのアクセスが有効かどうかを調べ、無効である場合、無効となるサブブロックの番号を出力する回路を示す。インターリーブ方式によるが、プルーニングは一般に後半のバンクで発生する。従って、プルーニングが発生するバンクごとに無効判定回路を用意すればよい。例えば、PILでは行17以降でプルーニングが発生しうる。従って、RAM17,18,19それぞれについて判定を行う3つの無効判定回路が必要となる。
具体的な無効判定部230の回路構成について、図32を用いて説明する。無効判定部230は、比較部231と、エンコーダ232と、大小比較器233とを有する。比較部231を構成する5つの比較器0〜比較器4は、T−LUTの出力と、調べるバンク番号(ここでは4)とを比較する。これは、RAM4の出力がどのサブブロックに出力されるかを調べることに相当する。各比較器0〜4は、T−LUTの出力と、調べるバンク番号とが一致すると、1を出力する。この出力1がエンコーダ232に入力されると、エンコーダ232はバンク番号に変換する。
同時に、大小比較器233はr_addr4とK mod Cを比較する。r_addr4のほうが大きいか、一致する場合にはRAM4の出力は無効である。従って、大小比較器233はこのような場合、セレクタを操作し、エンコーダの出力を信号invalid_blkに接続し、該当するサブブロックが無効であることを示す。大小比較の結果、r_addr4の出力が有効であるときは、invalid_blkにはいずれのバンク番号も出力しない。例えば、−1などの値を出力するようにしておく。
以上のように、サブブロックの出力が有効かどうかを判定する方法として2つ示した。一つは実施の形態1の図21で示したように、LUTに無効アドレスを示すデータを予めセットしておく方法で、もう一つは本実施の形態の図31で示したように、バンク選択信号と読み出しアドレスから判定する回路(無効判定部230)を用いることである。
実際上、上述したような無効判定は非常に重要となる。例えば従来の並列インターリーバでは、一般に、無効アドレスは取り除いてアドレステーブルを作成するようにしていた。しかし、実施の形態では、あえて無効アドレスを残しておくことでメモリアクセス競合が発生しないことを保証できるようにした。そのため、実施の形態では無効判定回路を設けるようになっている。このように、本実施の形態の一つの特徴は、並列インターリーバで無効判定を行うようにしたことである。これにより、並列インターリーバにおいて無効なサブブロックまで特定することができる。
(3)サブブロックサイズ決定方法の変更
図31のサブブロックサイズ決定部207では、Ksout=ceiling((C−floor(Ro×Ms/R))/Ms)×R+Ro、に基づいてサブブロックサイズを決定
する。ここで、行オフセットを例えばRo=1と固定しておくことで、回路構成を簡単化できる。
次に、図34及び図35を用いて、インターリーバ200の動作タイミングを説明する。なお図34は書き込みタイミングを示し、図35は読み出しタイミングを示す。ここでは、K=45、Ms=5、Mr=5、R=5、C=10の場合を示した。
タイミングチャートにおける特徴は、次の点である。
(a)書き込みにおいて、w_data[k]は全て等しい値であること、in_data[k]はw_data[k]と等しいことを確認できる。
(b)読み出しにおいて、r_addr[k]は直接テーブルより求めることができる。r_addr4において、網掛け部分は、無効アドレス(プルーニング)に対応する部分である。そのため、data_outの一部に有効なデータが出力されない部分がある。このとき、信号invalid_blkが無効なサブブロックを示していることが分かる。
なおバンク番号生成部の構成は、図31に示したものに限らない。すなわち、行オフセット値は該当するサブブロックのT−LUTの読み出し開始位置のずれをあらわすので、T−LUTの内容を行オフセットにあわせてあらかじめずらしておけば、オフセットを加算する回路が不要となる。
また、バンク選択信号はRを周期として変化することから、R個のレジスタをリング状に接続した回路によっても生成することができる。Roによりレジスタ間の接続が変わるため、この構成はRoが固定である場合に用いるとよい。
(4)少ないサブブロックへの対応
実施の形態1及び本実施の形態で説明したインターリーバは、サブブロック数Msとバンク数Mrが等しいとき、回路の利用効率が最も高いといえる。しかしながら、これらの構成のインターリーバをターボデコーダに組み込んで用いるとき、次の理由からMsを小さくする必要が生じる場合がある。
(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に示した。
書き込み処理に関して、Ksin×Ms≧RCである必要があるので、Ksin=Cとできない。従って、簡易な構成をとることができず、図36のインターリーバ300では、書き込みアドレス生成部301を行カウンタ302及び列カウンタ303を有する構成とする。それぞれのブロックは、3つのカウンタを内部に持つ。
読み出し制御に関しては、図31のインターリーバ200との違いが2点ある。まず、アドレスを決定するLUT0〜LUT4の内部には空きが多いことである。サブブロック数が3であるのに対し、RAM数は5つであるから、各時点において、5つのうち2つのRAMへのアクセスは無駄なアクセスとなってしまう。このことに対応するため、インターリーバ300では、LUT0〜LUT4の該当する部分に無効なアドレス(C以上の任
意の値、たとえば8)をセットする。各RAM0〜RAM4においては、C以上のアドレスが入力されたときに実際のアクセスを停止することで、無駄なアクセスを避けることができる(この制御を行う部分は図示していない)。この制御により、図39の読み出しタイミングに示すとおりr_data端子には無駄なデータが出力されない。ただし、もし出力されても出力側スイッチ202でそのデータは無視されるため、data_outには影響がない。
2つ目の違いは、バンク選択信号生成部310であるが、単にルックアップテーブル311(T−LUT)をサブブロック数に合わせて3つに削減するだけでよい。
インターリーバ300においては、図37〜図39からも分かるように、r_addr端子に無効なアドレスである8を入力したとき、r_data端子からの有効な出力はない。しかし、出力側スイッチ202で並び替えを行うと、3つのサブブロックから適切にインターリーブされたデータ列が得られることが分かる。
なお、インターリーバ300では、LUTの無効部分を8という値で埋めたため、LUTの容量及びビット数が増えてしまうという欠点がある。これが問題となる場合は、次のいずれかの方法をとることができる。第1に、図21の構成を用いることである。第2に、LUTに無効アドレスを挿入する代わりに、有効アドレスをLUTの前方に詰めることである。ただし、カウンタ値cnt_rをLUTの読み出しアドレスとして直接使用できず、LUTの読み出し制御が多少複雑になる。
(実施の形態3)
実施の形態1、2で説明した並列インターリーバは、特にターボデコーダに適用すると効果的である。本実施の形態では、実施の形態1、2の並列インターリーバをターボデコーダに組み込んだ場合の構成について説明する。
図40に、現在知られているターボデコーダの概略を示す。破線で囲んだ部分に示すように、外部値(あるいは、外部情報、事前情報など)と呼ばれる情報を2つのSISOデコーダ(Soft−In Soft−Outデコーダ)間で受け渡し、繰り返し処理を行うことが大きな特徴である。詳しくは、文献「Berrou, C.; Glavieux, A.; Thitimajshima, P.; “Near Shannon limit error-correcting coding and decoding: Turbo-codes”,
IEEE International Conference on Communications, 1993, Pages:1064 - 1070 vol.2」等に記載されている。
近年においては、高速な通信を実現するために、ターボデコーダに対しても高速処理が求められている。SISOデコーダを高速化する方法として、複数のSISOデコーダを並列動作させる方法と、radix−4アルゴリズム(例えば文献「Charles Thomas, Mark A. Bickerstaff, Linda M. Davis, Thomas Prokop, Ben Widdup, Gongyu Zhou, David
Garrett, Chris Nicol; “Integrated Circuits for Channel Coding in 3G Cellular Mobile Wireless Systems”, IEEE Communications Magazine August 2003, pp.150-159」等に記載されている)が知られている。しかし、ターボデコーダとして高速に動作させるためにはインターリーバも高速動作させることが必要である。SISOデコーダの高速化手法に対応した並列インターリーバが必要となる。
SISOデコーダを並列動作させる場合には、データ(外部値)はサブブロック分割される。サブブロック分割を用いた並列ターボデコーダ回路を、図41に示す。なお、この図では外部値の流れを中心に示すため、通信路値の処理や硬判定に関する回路を省略した。図41の並列ターボデコーダは、大きく分けて、並列インターリーバ510と、並列デインターリーバ520と、SISOデコーダ530と、遅延回路540と、SISOデコーダ550とを有する。並列インターリーバ510は、メモリ511と、アドレス生成部
512と、インターリーブアドレス生成部513と、スイッチ514と、バンク選択信号生成部515と、無効判定部516とを有する。並列デインターリーバ520は、スイッチ521と、メモリ522と、アドレス生成部523とを有する。
なお、図41では、SISOデコーダ00乃至04、及び10乃至14の計10個のSISOデコーダを用いているが、SISOデコーダ00乃至04と10乃至14を時分割共有することで5個のSISOデコーダのみで実現することも可能である。
また、radix−4アルゴリズムを用いたSISOデコーダに対応しては、シリアル−パラレル型のインターリーバが利用できる。これらを組み込んだターボデコーダ回路を図42に示す。図42のターボデコーダは、大きく分けて、並列インターリーバ610と、並列デインターリーバ620と、Radix−4 SISOデコーダ630と、遅延回路640と、Radix−4 SISOデコーダ650とを有する。並列インターリーバ610は、スイッチ611と、バンク選択信号生成部612と、メモリ613と、アドレス生成部614と、インターリーブアドレス生成部615と、スイッチ616と、バンク選択信号生成部617と、無効判定部618とを有する。
以上のように、本発明によれば高速なインターリーバ回路をアービタ回路の付加などによる回路規模の増大を招くことなく、簡易な構成で実現できるため、小型で高速なターボデコーダ回路を実現することができる。
なお上述した実施の形態1、2では、本発明をプライムインターリーブに用いた場合について述べたが、本発明はこれに限らず、2次元配列型のデータ構造に対して行方向優先でデータを書き込み、各行ごとに行内並び替えを行い、行同士を並び替え、列方向優先でデータを読み出すインターリーブアルゴリズムを実現する場合に広く適用できる。
(実施の形態4)
図43に、本実施の形態のインターリーバの構成を示す。インターリーバ700は、入力側スイッチ701と、独立に書き込み及び読み出しが可能な複数のバンク(RAM0〜RAM4)からなるメモリ702と、出力側スイッチ703と、入力側カウンタ704及びconfiguration選択部705からなる書き込みアドレス生成部と、行カウンタ706と、列カウンタ707と、列番号スイッチ708と、加算器709と、ルックアップテーブルLUT0〜LUT4からなるアドレステーブル710と、遅延部711と、加算器712と、プルーニング(pruning)判定部(図1の有効検出部115に相当)713とを有する。
(1)設計方法・原理
先ず、インターリーバ700の詳細を説明する前に、本実施の形態の原理について説明する。
本実施の形態では、一例として、行数20のインターリーブを、RAM数5、5並列入出力(5サブブロック分割)により並列インターリーブする回路を示す。また本実施の形態では、ブロックサイズが203のデータを例に説明する。3GPP規格のPILでは、インターリーバの配列は行数R=20、列数C=11である。
入力サブブロックサイズは、Cの倍数とするとよい。ここではCの4倍、すなわち44とする。その理由は、行数が20で、並列度(サブブロック数)が5なので、1サブブロックあたり4とした。
出力サブブロックサイズKsoutは、次の2つの条件を同時に満たすように定める。
(i)KsoutをRで割った余りは1以上
(ii)1バンクに割り当てられる行数は、KsoutとRの最大公約数を超えない
このようなKsoutを求める簡単な方法は、(1)式においてRo=4とすることである。KsoutをRで割った余りは4である。また、KsoutとRの最大公約数は4となるので、1バンクに4行を割り当てることができる。以上から、Ksoutは44とする。
次に、データとメモリバンクの対応を決める。
入力サブブロックはCの倍数とした。したがって、書込み動作の始めのCサイクルは、サブブロック0は0行目のデータを、サブブロック1は4行目のデータを、・・・、メモリに書き込む。そして、次のCサイクルは、サブブロック0は1行目のデータを、サブブロック1は5行目のデータを、・・・、書き込む。
以上から、同時に書き込まれるデータの組み合わせを行番号で表すと、図44の(0)〜(3)に示される4通りとなる。
読出し時には、毎サイクル組み合わせが変わる。出力サブブロックKsoutを44としたことにより、組み合わせの数は20通りで、同じ行への同時アクセスがない(競合が発生しない)。本実施の形態ではさらに、Ksoutを行数Rで除した余りであるRoを4としたことにより、組み合わせに重複が生じ、図44に示す4通りにまで削減される。
以上から、同時にアクセスされる行の組み合わせ(8通り)が全て明らかになった。したがって、これらの行が別のバンクになるよう、バンク割り当てを決定する。割り当ての一例を、図45及び図46に示す。
以上が、本実施の形態のインターリーバの設計の原理である。重要な点を列挙する。
・出力サブブロックサイズKsoutを、「ダミーデータ(プルーニングされるデータ)を含めて44」としたので、書込み時に同じ行への同時アクセスが発生しない。
・KsoutをRで除した余りであるRoを4としたので、同時読出しがなされる行の組み合わせの数が4通りまでに削減された。
・同時にアクセスされる行は別のバンクとなるよう、データRAMの分割方法(バンクへの割り当て方法)を決定した。同時にアクセスされる行の組み合わせが少ないほど、少ないバンク数で済み、回路が簡略化される。
(2)構成及び動作
次に、本実施の形態のインターリーバ700の構成及び動作について説明する。
<構成>
(書込み関連)
入力端子(data_in0〜4):1つの端子は1つのサブブロックに対応する。
入力側スイッチ701:入力端子をメモリ702の適切なRAMのバンクに接続する。スイッチは、図47(A)〜(B)に示す4通りの接続を実現する。各時点でどの接続に切り替えるかはconfiguration選択部705が決定する。
入力側カウンタ704:データ書き込み用のアドレスを生成する。なお、configuration選択部705はこのカウンタの出力に基づき動作する。
RAM0〜4:入力データが書き込まれる。5つのバンクに分割されている。
(読出し関連)
行カウンタ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):1つの端子は1つのサブブロックに対応する。
<書込み動作>
ブロックサイズ(データ長)203シンボルの場合を例に説明する。
3GPP規格(PIL)では、インターリーバの配列はR=20、C=11である。インターリーバ700は、入力データを5サブブロックに分割する。その様子を、図49(A)に示す。なお、後半のサブブロックはKsinより短くなる場合がある。図49(A)の例においても、最後のサブブロック(サブブロック4)は他より短く、27シンボルしかない。
入力データは、図46のようにメモリ702に配置する。ここで、各図面には行番号Iに基づく表現で補足を加えた。たとえば、サブブロック3の先頭のデータはI=12のデータであり、RAM3の先頭部分に書き込まれる。
このような書き込みを行うため、図21の回路は次のように動作する。
入力側カウンタ704は0から4C−1まで1ずつカウントする。このカウント値は書き込みアドレスとして各RAMに入力される。このカウント値に従い、入力側スイッチ701の制御も行われる。すなわち、入力側スイッチ701は、カウント値が0〜C−1の期間には図47(A)、カウント値がC〜2C−1の期間には図47(B)のような接続状態となる。
<読み出し動作>
この例では、出力サブブロックサイズをKsout=44とする。この値に基づき、カウンタ706、707の初期設定を行う。
出力サブブロック0の先頭データのデータ順位は0である。そこで、行カウンタ0の初期値を0、列カウンタ0の値を0と定める。
出力サブブロック1の先頭データのデータ順位は44である。そこで、行カウンタ1の値を4、列カウンタ1の値を2と定める。
ここで、行カウンタをI、列カウンタをJ、データ順位をnと表すと、これらの間に次式の関係が成り立つ。
n=I+JR ………(4)
(4)式に表される関係と、Iが0〜19の範囲であるという条件から、行カウンタ1と列カウンタ1の初期値が算出される。同様に、サブブロック2〜4についてもカウンタの初期値が算出される。それらの値とデータ順位を、図50に示す。
ここで、データ順位はプルーニング処理により除去されるダミーデータを含む、インターリーブ後のデータ順位である。したがって、ブロックサイズKが203であるのに対し、サブブロック4の最後のデータ順位は219と、ブロックサイズより大きくなる。(219−203=16であるから、16個のダミーデータが挿入されている)
なお、ダミーデータを含むデータ順位に基づきカウンタ値を定めないと、メモリアクセス競合が起こらないことが保証されない。
初期設定が完了すると、読み出し動作を開始する。行カウンタ706は毎サイクル1ずつ増加し、行の最大値19を超えると0にリセットされるとともに対応する列カウンタ707を1増加させる。すなわち、列カウンタ707は20サイクルに一度インクリメントされる。
列カウンタ707の値は、列番号スイッチ708により適切なLUTに転送される。ここで、列番号スイッチ708は3つの役割を担う。
・intra-row permutation(行間並び替え)
・行番号とバンク番号の関連付け
・行番号とバンク内位置の関連付け(上位アドレスの生成)
図51に、これらの関係を示す。
列番号スイッチ708の動作を具体的に説明する。初めのサイクル(初期設定時)において、行カウンタ3、列カウンタ3の値は、それぞれ12、6である。この行番号に対応する並び替え(inter-row permutation)前行番号は13である。並び替え前に13行目に属するデータはバンク1(RAM1)にあるので、列番号スイッチ708は図48のように接続される。
また、13行目のデータはバンク1の前から2番目の領域に保存されている。したがって、そのことを示す上位アドレスであるA=1という値が列番号スイッチ708により生成される。A=1という値は、実際のアドレス(A=1の領域が始まるアドレス)11に変換され、列カウンタ値に加算される。
この結果、17(=6+11)という値がLUT1に入力される。LUT1は12行6列に対応する行内並び替えパターン(intra-row permutation pattern)である4という値を出力する。
この出力に対し、再び上位アドレスを加算し、RAMへのアドレスとして入力する。すなわち、RAM1へ、15(=4+11)というアドレス値が入力され、RAMからはd[147]が出力される。
出力側スイッチ703は、列番号スイッチ708と逆方向の接続を行う。すなわち、RAM1の出力をサブブロック3(data_out3)に接続する。
以上のようにして、読出し動作の初めのサイクルには、サブブロック3のデータとしてd[147]が出力される。すべての出力の様子を、図49(B)Bに示す。
本発明の並列インターリーバでは、一部のサブブロックにおいて無効データが出力される場合がある。プルーニング判定部713は、各サブブロックのデータが有効であるかどうかを検査する。無効であった場合、無効を知らせる信号を出力する。
図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]が出力される。
(実施の形態5)
図54に、本実施の形態のインターリーバの構成を示す。インターリーバ800は、入力側スイッチ801と、独立に書き込み及び読み出しが可能な複数のバンク(RAM0〜RAM9)からなるメモリ802と、出力側スイッチ703と、昇順カウンタ804−1、降順カウンタ804−2、スイッチ805及びconfiguration選択部806からなる書き込みアドレス生成部と、行カウンタ807と、列カウンタ808と、列番号スイッチ809と、加算器810と、ルックアップテーブルLUT0〜LUT9からなるアドレステーブル811と、遅延部812と、加算器813と、プルーニング判定部814とを有する。
(1)設計方法・原理
先ず、インターリーバ800の詳細を説明する前に、本実施の形態の原理について説明する。
ターボデコーダにおいては、データの入力順を逆方向にすることがしばしば有効である。そこで、本実施の形態では奇数サブブロックのみについて、入出力順序を逆にする。その様子を、図56に示す。
この場合においても、実施の形態4と同様に競合の発生しない並列インターリーバを実現できる。ブロックサイズ203の例で説明する。また、本実施の形態では並列度を10とした。
入力サブブロックサイズを22、出力サブブロックサイズを22とした。ここで、サブブロックサイズは、並列度が10であるから、Roを2とし(R÷10=2)、(1)式を用いて決定した。サブブロック分割の様子を、図56に示す。
ここで注意すべきことは、昇順と降順のサブブロックが混在している場合、(1)式に従っていれば必ず競合が発生しないわけではないことである。あくまで、「同時に読み出す2つ以上のデータについて、いずれの2つ以上についても、インターリーブ後のデータ順位の差を行数で除した余りが1以上となる」ように注意深く設計しなければならない。
ただし、簡易な方法として、次のいずれかを満たせば(1)式を使ってもよい。
(i)出力サブブロックサイズを偶数とする。
(ii)偶数サブブロックはすべて昇順、奇数サブブロックはすべて降順とする。あるいは、その逆とする。
同時にアクセスされる行の組み合わせは、図57の通りである。
バンクの割り当て方法の一例を、図58に示す。なお、列番号スイッチ809における上位アドレスの加算を簡単にするため、図59に示すように、バンク内の境界を256ずつに区切った。
(2)動作
次に、本実施の形態のインターリーバ800の動作について、実施の形態4のインターリーバ700(図43)と異なる部分を中心に説明する。
<書込み動作>
偶数サブブロック(サブブロック0、2、・・)は順方向にデータが入力されるので、昇順カウンタ804−1を使ってメモリ802に書き込む。奇数サブブロックは逆方向にデータが入力されるので、降順カウンタ804−2を使ってメモリ802に書き込む。
図55に、入力側スイッチ801のコンフィギュレーションを示す。
<読出し動作>
行カウンタ807、列カウンタ808の初期値を、図60に示す。
ところで、サブブロック番号が奇数のカウンタは降順カウンタである。すなわち、行カウンタ807は毎サイクル1ずつ減少していく。0に達すると、次のサイクルには19にリセットされるとともに、列カウンタ808の値をデクリメントする。
実施の形態4と同様に、列カウンタ808の値は、列番号スイッチ809により適切なLUTに転送される。ここで、列番号スイッチ809は、intra-row permutation(行間並び替え)、行番号とバンク番号の関連付け、行番号とバンク内位置の関連付け(上位アドレスの生成)の役割を担う。図61に、これらの関係を示す。
入力側スイッチ801の動作も同様である。図62に、列番号スイッチ708の20通りのコンフィギュレーションのうち初めの2つを示す。
他の動作は実施の形態4のインターリーバ700(図43)と同様である。
(実施の形態6)
図63に、本実施の形態のインターリーバの構成を示す。インターリーバ900は、入力側スイッチ901と、独立に書き込み及び読み出しが可能な複数のバンク(RAM0〜RAM9)からなるメモリ902と、出力側スイッチ903と、昇順カウンタ904及びconfiguration選択部905からなる書き込みアドレス生成部と、行カウンタ906と、列カウンタ907と、列番号スイッチ908と、加算器909と、ルックアップテーブルLUT0〜LUT9からなるアドレステーブル910と、遅延部911と、加算器912と、プルーニング判定部913とを有する。
(1)設計方法・原理
先ず、インターリーバ900の詳細を説明する前に、本実施の形態の原理について説明する。
本実施の形態は、サブブロック分割方式と、シリアル/パラレル変換型を組み合わせたハイブリッド型の並列インターリーバを提示するものである。ここでは、並列度を5×2とした。
前述の実施の形態と同様に、読出しを競合なく並列に行うことができる。
前述の実施の形態と同様の手法では、書き込みは10並列でできない。そこで、本実施の形態では書き込みは5並列であるとした。ただし、全てのRAMを偶数アドレスと奇数アドレスで2分割すれば10並列書込みが可能である。RAM0をRAM0-even,RAM0−oddのように分ける。このようなメモリ分割により、逐次書込み処理を並列化することは、すでに知られていることであるから、あえて説明しない。
ハイブリッド型においても、(1)式を使用できる。ただし、サブブロックサイズが偶数になるようにする。そこで、並列度が5×2の本例では、Ro=4を選び、出力サブブロックサイズを44とする。
サブブロック分割の様子は、図64の通りである。1つのサブブロックにつき、1サイクルに2シンボルが出力される。
同時にアクセスされる行の組み合わせは、図65の通りである。なお、書込みが5並列、読出しが10並列であることに注意されたい。
上記の条件から、バンク割り当てを、図66のように定める。
(2)動作
次に、本実施の形態のインターリーバ900の動作について、実施の形態4のインターリーバ700(図43)と異なる部分を中心に説明する。
<書込み動作>
入力側スイッチ901は、configuration選択部905に制御され、図68に示すようなコンフィギュレーションとされる。
<読出し動作>
行カウンタ906、列カウンタ907の初期値は、サブブロックサイズが等しいので、実施の形態4のときと同様である。つまり、図50の通りである。
本実施の形態では、行カウンタ906は毎サイクル2ずつ増加する。19を超えたらリセットされる(つまり20が減算される)点、及びリセット時に列カウンタ906を1増加させることは実施の形態4の例と同様である。
列番号スイッチ908は、図67に示すように、1つの列カウンタ値を2つのLUTに送るよう、接続する。
このようにして、1組の行カウンタ・列カウンタから2つのアドレスが生成され、2つのデータが同時に読み出される。カウンタは5組あるので計10個のデータが読み出される。これらは、出力側スイッチ903により適切な端子に送られる(サブブロック1つあたり2つの端子がある)。
そして、本発明によればこれら10個のデータ読み出しはすべて別のバンクへのアクセスであることが保証され、アクセス競合は起こらない。
なお、プルーニング判定部913でのプルーニング判定は、サブブロックごとではなくデータごとに行われる。たとえば、サブブロック0のはじめのデータは、2つのうち1つだけが無効である。
(他の実施の形態)
(1)行カウンタ、列カウンタ、列番号スイッチの他の構成例
行カウンタ、列カウンタ、列番号スイッチは、上述した実施の形態と異なる回路構成でも実現できる。ただし、LUTに列番号を供給し、出力スイッチを操作するための信号を生成するという目的に変わりはない。
図69に、図54に示した実施の形態5の回路構成に対するバリエーションを示す。なお、図69は、図54のインターリーバ800の行カウンタ807、列カウンタ808、列番号スイッチ809、アドレス生成部811に対応する部分のみを示したものであり、インターリーバ1000の他の部分は省略している。
インターリーバ1000は、行カウンタ807、列カウンタ808、列番号スイッチ809に換えて、転送回路1001と、制御部1002と、レジスタ部1003と、上位アドレス生成部1004と、加算器1005とを有する。
10個のレジスタ0〜9は、列カウンタ808の値に相当する値を保持する。図54では、列カウンタ808はサブブロックとの対応が固定であったが、図69のレジスタ0〜9はLUT0〜9との対応を固定とした。
転送回路1001は、レジスタの内容を並びかえる。一部のレジスタに対しては値の更新を行う。
図70に、転送回路1001の構成例を示す。転送回路1001は4つの状態を持ち、図70(B)のように状態遷移する。
状態0では、白抜き四角形を記した部分が接続される。すなわち、レジスタ0の内容は
レジスタ0に転送され、レジスタ9の内容はレジスタ5に転送される。
図62と比較すると転送回路1001の動作が理解できる。すなわち、図62ではLUT9に入力されていた値は列カウンタ0の値である。そして、次の時刻では、図62(B)のように、列カウンタ0の値はLUT5に転送されるようスイッチの接続が変更される。
これに対して、図70では、はじめの状態ではレジスタ9にはLUT9に入力すべき値として列カウンタ0に相当する値を保持していた。この値は、次の時刻にLUT5で使われるので、転送回路はレジスタ5に転送するよう接続がなされる。
状態3(三角印)においては、レジスタ9に入力される値に1を加算するとともに、レジスタ5に入力される値から1を減ずる。これは、図62において列カウンタ707がインクリメント/デクリメントする動作に相当する。
図69の制御部1002は、転送回路1001の4状態を制御する。それと同時に、上位アドレス生成部1004及び出力側スイッチの制御を行う。
(2)ターボデコーダへの適用例1
実施の形態3においては、実施の形態1、2の並列インターリーバに対応する並列ターボデコーダの構成例(図41、図42)を示した。図71に、実施の形態4のインターリーバ700(図43)に対応する並列ターボデコーダの構成例を示す。
図71の並列ターボデコーダは、大きく分けて、並列インターリーバ1100と、並列デインターリーバ1200と、SISOデコーダ1300と、遅延回路1400と、SISOデコーダ1500とを有する。
並列インターリーバ1100は、メモリ1101と、natural orderアドレス生成部1102と、スイッチ1103と、interleave order アドレス生成部1104と、プルーニング判定部1103とを有する。また並列デインターリーバ1200は、スイッチ1201と、メモリ1202と、natural orderアドレス生成部1203とを有する。
図71の並列ターボデコーダの特徴的な動作は、次の点である。
(i)プルーニング判定部1105により、無効アドレスが検出された場合には、該当するSISOデコーダのみをウェイト(一時停止)する。
(ii)並列インターリーバ1100のインターリーブオーダーアドレスは、遅延回路1400でタイミング調整すればそのまま並列デインターリーバ1200で使うことができるので、インターリーブオーダーアドレス生成部1104は1つでよい。同時に、スイッチの制御信号も受け渡す。これにより、同じアドレスを(単に遅延させただけの)同じタイミングで渡すので、アクセス競合がないことが保証される。因みに、SISOデコーダ1300の入力と出力でデータの並び順が同じ場合は、遅延回路1400としてFIFO(先入れ先出し)バッファを用いる。入力と出力でデータの並び順が逆になる場合はLIFO(後入れ先出し)バッファを用いる。
なお、(i)については、プルーニング判定に基づきSISOデコーダをウェイトするという構成は従来も行われていた。本発明はこれを並列構成で行うことに特徴がある。
因みに、従来の構成例として次の2つのものがあった。
[従来構成1]逐次(並列でない)ターボデコーダが前提。(アドレステーブルは大きいので)テーブル引きではなく、1つずつアドレスを計算する。このとき、無効アドレスまで生成されてしまうのでその場合はSISOデコーダをウェイトする。ウェイトが発生しないように、アドレスを2個ずつ生成して1個だけ使うなどの方法も考案されている。この場合、連続した2個がいずれも無効であることはない。
[従来構成2]並列インターリーバでは、テーブル引きでアドレス生成する。なお、テーブル引き以外でもできるかもしれないが、たいていテーブル引きでやっている。どうせテー
ブルを作るのであれば、無効アドレスは除去しておこうというのが常識になっている。
これに対して、本発明では、並列ターボデコーダで、わざわざプルーニングによるウェイトを発生させている。換言すれば、無効アドレスを残してテーブルを作っている。これにより、競合が発生しない状態を維持することができる。
(3)ターボデコーダへの適用例2
図72に、実施の形態6のハイブリッド型のインターリーバ900に対応するターボデコーダの構成例を示す。
図72のターボデコーダは、大きく分けて、並列インターリーバ2100と、並列デインターリーバ2200と、Radix−4 SISOデコーダ2300と、遅延回路2400と、Radix−4 SISOデコーダ2500とを有する。
並列インターリーバ2100は、スイッチ2101と、メモリ2102と、natural orderアドレス生成部2103と、スイッチ2104と、interleave order アドレス生成部2105、プルーニング判定部2106とを有する。
ここで、natural order(並列インターリーバの書込み時)においても10シンボル/サイクルの書き込みができるように、メモリバンクをさらに偶数アドレスと奇数アドレスの2つに分割する。末尾にeが付くRAMには偶数アドレスのデータ、oが付くRAMには奇数アドレスのデータを保存する。
natural orderにおいては、RAM10eに書き込むときには同時にRAM10oにもデータを書き込む。Interleave orderにおいては、RAM10eとRAM10oのいずれか一方に対してのみ読出しを行う。
以上説明したように、本発明の並列インターリーバの一つの態様は、例えば図21、図31、図36、図43、図54、図63を用いて説明したように、複数のメモリバンクからなるメモリに入力データを書き込み、書き込まれたデータを書き込みと異なる順序で読み出すことにより、2次元配列型のデータ構造に対して行方向優先でデータを書き込み、各行ごとに規定される行内並び替えパターンに基づき行内並び替えを行い、行同士を並び替え、列方向優先でデータを読み出すインターリーブアルゴリズムを実現する並列インターリーバであって、複数のメモリバンクからなり、各バンクが前記2次元配列の1または複数の行番号と対応付けられているメモリと、それぞれ前記2次元配列のデータ構造における別の行において規定される複数の行内並び替えパターンを生成するパターン生成部手段と、前記パターン生成部手段を内部に持ち、前記複数の行内並び替えパターンに基づき複数の読み出しアドレスを生成する読み出し制御手段アドレス生成部と、を具備し、前記メモリから複数のデータを同時に読み出す構成を採る。
この構成によれば、複数のアドレスを用いて、アクセス競合なく並列に処理することができ、インターリーバの高速化を図ることができる。
本発明の並列インターリーバの一つの態様は、前記読み出し制御手段は、前記メモリバンク間で同時に読み出す2つ以上のデータについて、いずれの2つ以上についても、インターリーブ後のデータ順位の差を行数で除した余りが1以上となるように、前記複数のメモリバンクからデータを読み出す構成を採る。
この構成によれば、読み出し時に、メモリバンク間で同時に読み出すデータのインターリーブ後の順位の差を行数で除した余りが1以上となるように、各メモリバンクのデータを読み出すようにしたので、どのような行内および行間並び替えパターンを採用したとしても、同一のメモリバンクに2つ以上の読み出しアドレスが生成されることがなくなる。
つまり、どのようなインターリーブパターンを採用したとしても、メモリバンクへのメモリアクセス競合を回避できるようになる。この結果、調停回路等の付加的な回路を設けなくても、良好に高速なインターリーブ処理を行うことができる並列インターリーバを実現できる。
本発明の並列インターリーバの一つの態様は、前記インターリーブアルゴリズムは、入力データのデータサイズが前記2次元配列より小さい場合、前記入力データにダミーデータを付加してインターリーブ処理を行った後、ダミーデータを取り除くインターリーブアルゴリズムであり、さらに、前記複数のアドレスのうち、前記ダミーデータに対応する0ないし複数個の無効アドレスを判別する無効アドレス判定部を具備する構成を採る。
本発明の並列インターリーバの一つの態様は、前記読み出し制御手段は、前記メモリバンク間で読み出す2つ以上のデータについて、いずれの2つ以上についても、ダミーデータ除去前の順位の差を行数で除した余りが1以上となるように、前記複数のメモリからデータを読み出す、構成を採る。
この構成によれば、ダミーデータの除去処理(プルーニング処理)を行っても同一のメモリバンクに2つ以上の読み出しアドレスが生成されることがなくなるため、任意のデータサイズのインターリーブを行う場合でもメモリバンクへのメモリアクセス競合を回避できるようになる。
本発明の並列インターリーバの一つの態様は、前記2次元配列のデータ構造における各行の入力データを、同じ行のデータはその行番号に対応するメモリバンクに書き込むようにして、定められたメモリバンクに書き込むための書き込みアドレスを生成する書き込み制御手段を具備し、書き込み制御手段は、2次元配列のデータ構造における各行と、書き込み先バンクとの対応が、一対一の対応となる書き込みアドレスを生成する、構成を採る。
この構成によれば、メモリバンクへのアクセス競合を回避しつつ、並列度をメモリバンク数と等しくできるので、メモリバンクを最大限に利用して高速なインターリーブ処理を行うことができるようになる。
本発明の並列インターリーバの一つの態様は、前記2次元配列のデータ構造における各行の入力データを、同じ行のデータはその行番号に対応するメモリバンクに書き込むようにして、定められたメモリバンクに書き込むための書き込みアドレスを生成する書き込み制御手段を具備し、2次元配列のデータ構造における行に対する書き込み先のメモリバンクの対応を一意に定め、かつ、インターリーブ後の順位の差と行数との最大公約数を越えない1ないし複数の行を1つのメモリバンクに対応付ける書き込みアドレスを生成する、構成を採る。
この構成によれば、同時に読み出すデータ数が行数より少ない場合に、バンクメモリ数を少なくできるので、並列インターリーバを、より小規模な回路で実現することができるようになる。
本発明の並列インターリーバの一つの態様は、前記書き込み制御手段は、前記同時に読み出すデータと同数の第1の行番号の組を生成する行カウンタと、前記同時に読み出すデータと同数の第1の列番号の組を生成する列カウンタとを備え、前記第1の行番号の組により書き込み先バンクを決定すると共に、前記第1の列番号の組より書き込みアドレスを算出し、前記読み出し制御手段は、いずれの2つについても、差を行数で除した余りが1以上となるような複数のデータ順位に対するインターリーブアドレスを複数生成するイン
ターリーブアドレス生成手段と、前記インターリーブアドレスに対し第2の行番号の組及び第2の列番号の組を一意に算出する行列番号決定手段と、前記第2の列番号の組を読み出しアドレスとし、前記第2の行番号の組により読み出し元バンクを決定すると共に前記読み出しアドレスを該当する読み出し元バンクに送出するアドレス転送手段と、を具備する構成を採る。
本発明の並列インターリーバの一つの態様は、前記読み出し制御手段は、前記インターリーブ後の順位の差を行数で除した余りを行オフセットとして求め、当該行オフセットぶんずつオフセットした、前記メモリバンク分の行番号からなる行番号セットを、行間並び替えパターンに基づいて変換し、変換後の行番号セットを前記メモリの出力側に設けられた出力選択手段にバンク選択信号として送出するバンク選択信号生成手段と、列番号セットと、前記バンク選択信号生成手段により求められた変換後の行番号セットとを用いて、行内並べ替えパターンを生成して、そのパターンを読み出しアドレスとして前記メモリの該当するメモリバンクに送出する読み出しアドレス生成手段と、を具備する構成を採る。
この構成によれば、読み出しアドレス生成手段とバンク選択信号生成手段とによって、メモリバンク間で同時に読み出す2つ以上のデータについて、いずれの2つ以上についても、インターリーブ後のデータ順位の差を行数で除した余りが1以上となるようにデータを読み出すといった処理を実現できるようになる。
本発明の並列インターリーバの一つの態様は、前記並列インターリーバは、前記2次元配列のデータ構造における各行の入力データを、所定のサブブロック単位で異なるメモリバンクに書き込むための書き込みアドレスを生成する書き込み制御手段を有するサブブロック分割型のインターリーバであり、前記読み出し制御手段は、前記インターリーブ後の順位の差を行数で除した余りを行オフセットとして求め、当該行オフセットぶんずつオフセットした、前記メモリバンク分の行番号からなる行番号セットを、行間並び替えパターンに基づいて変換し、変換後の行番号セットを前記メモリの出力側に設けられた出力選択手段にバンク選択信号として送出するバンク選択信号生成手段と、列番号セットと、前記バンク選択信号生成手段により求められた変換後の行番号セットとを用いて、インターリーブ後の順位の差がサブブロックサイズとなる行内並べ替えパターンを生成し、そのパターンを読み出しアドレスとして前記メモリの該当するメモリバンクに送出する読み出しアドレス生成手段と、を具備する構成を採る。
この構成によれば、サブブロック分割型のインターリーバにおいて、読み出しアドレス生成手段とバンク選択信号生成手段とによって、メモリバンク間で同時に読み出す2つ以上のデータについて、いずれの2つ以上についても、インターリーブ後のデータ順位の差を行数で除した余りが1以上となるようにデータを読み出す、といった処理を実現できるようになる。
本発明の並列インターリーバの一つの態様は、前記書き込み制御手段は、前記各メモリバンクに書き込む入力データのサブブロックサイズを前記2次元配列のデータ構造における列数以上とする、書き込みアドレスを生成する、構成を採る。
この構成によれば、サブブロック型のインターリーバにおいて、2次元配列のデータ構造における各行の入力データを、同じ行のデータはその行番号に対応するメモリバンクに書き込むといった処理を、メモリアクセス競合を起こすことなく行うことができるようになる。
本発明の並列インターリーバの一つの態様は、前記書き込み制御手段は、前記各メモリバンクに書き込む入力データのサブブロックサイズを前記2次元配列のデータ構造の列数
に等しくする、書き込みアドレスを生成する、構成を採る。
この構成によれば、書き込み、読み出しともに、同一のサブブロック単位で処理を行うことができるようになる。
本発明の並列デインターリーバの一つの態様は、上記いずれかの並列インターリーバの書き込みアドレスと読み出しアドレスを入れ替え、さらに入力選択手段と出力選択手段を入れ替えることにより、インターリーブアルゴリズムの逆処理を実現する構成を採る。
この構成によれば、上記いずれかの並列インターリーバによってインターリーブされたデータを、メモリアクセス競合無しに、元の配列に戻すことができるようになる。
本発明のターボデコーダの一つの態様は、上記いずれかの並列インターリーバを具備する構成を採る。
本発明のインターリーブ方法の一つの態様は、複数のメモリバンクからなるメモリに入力データを書き込み、書き込まれたデータを書き込みと異なる順序で読み出すことにより、2次元配列型のデータ構造に対して行方向優先でデータを書き込み、各行ごとに規定される行内並び替えパターンに基づき行内並び替えを行い、行同士を並び替え、列方向優先でデータを読み出すインターリーブアルゴリズムを実現する並列インターリーブ方法であって、それぞれ前記2次元配列のデータ構造における別の行において規定される複数の行内並び替えパターンを生成するパターン生成ステップと、前記パターン生成ステップで生成した前記複数の行内並び替えパターンに基づき、複数のメモリバンクからなり各バンクが前記2次元配列の1または複数の行番号と対応付けられているメモリについての複数のアドレスを生成するアドレス生成ステップと、を含み、前記メモリから複数のデータを同時に読み出すようにする。
本明細書は、2005年2月3日出願の特願2005−28314に基づく。その内容は、全てここに含めておく。
本発明の並列インターリーバ、並列デインターリーバ及びインターリーブ方法は、例えば無線通信機器のターボデコーダに適用して好適である。
プライムインターリーバの2次元マトリックスへの書き込み状態を示す図 プライムインターリーバの行内並び替えを示す図 プライムインターリーバの行間並び替えを示す図 逐次型インターリーバの構成を示すブロック図 図1の逐次型インターリーバの動作を示すタイミングチャート 図1のアドレステーブルの内容を示す図 逐次型インターリーバに対するデインターリーバの構成例を示すブロック図 逐次インターリーブ方式の動作の説明に供する模式図 サブブロック分割インターリーブ方式(並列インターリーバ)の動作の説明に供する模式図 別の並列インターリーバの説明に供する模式図 別の並列インターリーバの説明に供する模式図 逐次型インターリーバを用いたターボデコーダの構成例を示すブロック図 図9の並列インターリーバを用いたターボデコーダの構成例を示すブロック図 図10の並列インターリーバを用いたターボデコーダの構成例を示すブロック図 図11の並列インターリーバを用いたターボデコーダの構成例を示すブロック図 デュアルポートRAMを用いた従来の並列インターリーバの構成を示すブロック図 従来の調停回路付きの並列デインターリーバの構成例を示すブロック図 従来の、RAMを複数のバンク(モジュール)に分割した場合の並列インターリーバ(デインターリーバ)の別の構成例を示すブロック図 図18の各RAM0〜4に書き込まれるデータを示す図 従来の、RAMを複数のバンク(モジュール)に分割した場合の並列インターリーバ(デインターリーバ)の別の構成例を示すブロック図 本発明の実施の形態1に係るインターリーバの構成を示すブロック図 各ルックアップテーブルLUT0〜4の内容を示す図 すべてのデータを書き込んだ後のRAM内のデータ配置を示す図 実施の形態1の書き込みタイミングを示すタイミングチャート 実施の形態1の読み出しタイミングを示すタイミングチャート 無効アドレスを含めた場合の各ルックアップテーブルLUT0〜4の内容を示す図 無効アドレスを含めた場合の改良した各ルックアップテーブルLUT0〜4の内容を示す図 プルーニングが発生した場合の書き込みタイミングを示すタイミングチャート プルーニングが発生した場合の読み出しタイミングを示すタイミングチャート プルーニングが発生した場合の出力ブロックサイズを示す図 実施の形態2のインターリーバの構成を示すブロック図 無効判定部の構成を示すブロック図 実施の形態2における各ルックアップテーブルLUT0〜4の内容を示す図 実施の形態2の書き込みタイミングを示すタイミングチャート 実施の形態2の読み出しタイミングを示すタイミングチャート 実施の形態2のインターリーバの他の構成例を示すブロック図 図36のインターリーバにおける各ルックアップテーブルLUT0〜4の内容を示す図 図36のインターリーバにおける書き込みタイミングを示すタイミングチャート 図36のインターリーバにおける読み出しタイミングを示すタイミングチャート 実施の形態3のターボデコーダの構成例を示すブロック図 実施の形態3のターボデコーダの構成例を示すブロック図 実施の形態3のターボデコーダの構成例を示すブロック図 実施の形態4のインターリーバの構成を示すブロック図 書込時の組み合わせと、読出時の組み合わせを示す図 バンク割り当ての説明に供する図 バンク割り当ての説明に供する図 入力側スイッチのコンフィギュレーションを示す図 列番号スイッチのコンフィギュレーションを示す図 (A)は入力データのサブブロック分割を示す図であり、(B)は出力データのサブブロック分割の様子を示す図 各サブブロックについての行カウンタ初期値、列カウンタ初期値及び先頭データ順位を示す図 列番号スイッチの機能の説明に供する図 プルーニング(pruning)判定部の構成を示すブロック図 閾値の例を示す図 実施の形態5のインターリーバの構成を示すブロック図 入力側スイッチのコンフィギュレーションを示す図 (A)は入力データのサブブロック分割を示す図であり、(B)は出力データのサブブロック分割の様子を示す図 書込時の組み合わせと、読出時の組み合わせを示す図 バンク割り当ての説明に供する図 バンク割り当ての説明に供する図 各サブブロックについての入出力順序、行カウンタ初期値、列カウンタ初期値及び先頭データ順位を示す図 列番号スイッチの機能の説明に供する図 列番号スイッチのコンフィギュレーションを示す図 実施の形態6のインターリーバの構成を示すブロック図 出力データのサブブロック分割の様子を示す図 書込時の組み合わせと、読出時の組み合わせを示す図 バンク割り当ての説明に供する図 列番号スイッチのコンフィギュレーションを示す図 入力側スイッチのコンフィギュレーションを示す図 行カウンタ、列カウンタ、列番号スイッチの他の構成例を示す図 転送回路の構成例の説明に供する図 実施の形態4のインターリーバに対応する並列ターボデコーダの構成例を示すブロック図 実施の形態6のインターリーバに対応する並列ターボデコーダの構成例を示すブロック図

Claims (14)

  1. 複数のメモリバンクからなるメモリに入力データを書き込み、書き込まれたデータを書き込みと異なる順序で読み出すことにより、2次元配列型のデータ構造に対して行方向優先でデータを書き込み、各行ごとに規定される行内並び替えパターンに基づき行内並び替えを行い、行同士を並び替え、列方向優先でデータを読み出すインターリーブアルゴリズムを実現する並列インターリーバであって、
    複数のメモリバンクからなり、各バンクが前記2次元配列の1または複数の行番号と対応付けられているメモリと、
    それぞれ前記2次元配列のデータ構造における別の行において規定される複数の行内並び替えパターンを生成するパターン生成手段と、
    前記パターン生成手段を内部に持ち、前記複数の行内並び替えパターンに基づき複数の読み出しアドレスを生成する読み出し制御手段と、
    を具備し、前記メモリから複数のデータを同時に読み出す
    並列インターリーバ。
  2. 前記読み出し制御手段は、前記メモリバンク間で同時に読み出す2つ以上のデータについて、いずれの2つ以上についても、インターリーブ後のデータ順位の差を行数で除した余りが1以上となるように、前記複数のメモリバンクからデータを読み出す
    請求項1に記載の並列インターリーバ。
  3. 前記インターリーブアルゴリズムは、入力データのデータサイズが前記2次元配列より小さい場合、前記入力データにダミーデータを付加してインターリーブ処理を行った後、ダミーデータを取り除くインターリーブアルゴリズムであり、
    前記並列インターリーバは、さらに、前記複数のアドレスのうち、前記ダミーデータに対応する0ないし複数個の無効アドレスを判別する無効アドレス判定部を具備する
    請求項1に記載の並列インターリーバ。
  4. 前記読み出し制御手段は、前記メモリバンク間で読み出す2つ以上のデータについて、いずれの2つ以上についても、ダミーデータ除去前の順位の差を行数で除した余りが1以上となるように、前記複数のメモリバンクからデータを読み出す
    請求項3に記載の並列インターリーバ。
  5. 前記2次元配列のデータ構造における各行の入力データを、同じ行のデータはその行番号に対応するメモリバンクに書き込むようにして、定められたメモリバンクに書き込むための書き込みアドレスを生成する書き込み制御手段を具備し、
    当該書き込み制御手段は、2次元配列のデータ構造における各行と、書き込み先バンクとの対応が、一対一の対応となる書き込みアドレスを生成する
    請求項1に記載の並列インターリーバ。
  6. 前記2次元配列のデータ構造における各行の入力データを、同じ行のデータはその行番号に対応するメモリバンクに書き込むようにして、定められたメモリバンクに書き込むための書き込みアドレスを生成する書き込み制御手段を具備し、
    当該書き込み制御手段は、2次元配列のデータ構造における行に対する書き込み先のメモリバンクの対応を一意に定め、かつ、インターリーブ後の順位の差と行数との最大公約数を越えない1ないし複数の行を1つのメモリバンクに対応付ける書き込みアドレスを生成する
    請求項1に記載の並列インターリーバ。
  7. 前記2次元配列のデータ構造における各行の入力データを、同じ行のデータはその行番
    号に対応するメモリバンクに書き込むようにして、定められたメモリバンクに書き込むための書き込みアドレスを生成する書き込み制御手段を具備し、
    当該書き込み制御手段は、
    前記同時に読み出すデータと同数の第1の行番号の組を生成する行カウンタと、前記同時に読み出すデータと同数の第1の列番号の組を生成する列カウンタとを備え、前記第1の行番号の組により書き込み先バンクを決定すると共に、前記第1の列番号の組より書き込みアドレスを算出し、
    前記読み出し制御手段は、
    いずれの2つについても、差を行数で除した余りが1以上となるような複数のデータ順位に対するインターリーブアドレスを複数生成するインターリーブアドレス生成手段と、前記インターリーブアドレスに対し第2の行番号の組及び第2の列番号の組を一意に算出する行列番号決定手段と、前記第2の列番号の組を読み出しアドレスとし、前記第2の行番号の組により読み出し元バンクを決定すると共に前記読み出しアドレスを該当する読み出し元バンクに送出するアドレス転送手段と、を具備する
    請求項1に記載の並列インターリーバ。
  8. 前記読み出し制御手段は、
    前記インターリーブ後の順位の差を行数で除した余りを行オフセットとして求め、当該行オフセットぶんずつオフセットした、前記メモリバンク分の行番号からなる行番号セットを、行間並び替えパターンに基づいて変換し、変換後の行番号セットを前記メモリの出力側に設けられた出力選択手段にバンク選択信号として送出するバンク選択信号生成手段と、
    列番号セットと、前記バンク選択信号生成手段により求められた変換後の行番号セットとを用いて、行内並べ替えパターンを生成して、そのパターンを読み出しアドレスとして前記メモリの該当するメモリバンクに送出する読み出しアドレス生成手段と
    を具備する請求項1に記載の並列インターリーバ。
  9. 前記並列インターリーバは、前記2次元配列のデータ構造における各行の入力データを、所定のサブブロック単位で異なるメモリバンクに書き込むための書き込みアドレスを生成する書き込み制御手段を有するサブブロック分割型のインターリーバであり、
    前記読み出し制御手段は、
    前記インターリーブ後の順位の差を行数で除した余りを行オフセットとして求め、当該行オフセットぶんずつオフセットした、前記メモリバンク分の行番号からなる行番号セットを、行間並び替えパターンに基づいて変換し、変換後の行番号セットを前記メモリの出力側に設けられた出力選択手段にバンク選択信号として送出するバンク選択信号生成手段と、
    列番号セットと、前記バンク選択信号生成手段により求められた変換後の行番号セットとを用いて、インターリーブ後の順位の差がサブブロックサイズとなる行内並べ替えパターンを生成し、そのパターンを読み出しアドレスとして前記メモリの該当するメモリバンクに送出する読み出しアドレス生成手段と
    を具備する請求項1に記載の並列インターリーバ。
  10. 前記書き込み制御手段は、前記各メモリバンクに書き込む入力データのサブブロックサイズを前記2次元配列のデータ構造における列数以上とする、書き込みアドレスを生成する
    請求項9に記載の並列インターリーバ。
  11. 前記書き込み制御手段は、前記各メモリバンクに書き込む入力データのサブブロックサイズを前記2次元配列のデータ構造の列数に等しくする、書き込みアドレスを生成する
    請求項8に記載の並列インターリーバ。
  12. 請求項1に記載の並列インターリーバの書き込みアドレスと読み出しアドレスを入れ替え、さらに入力選択手段と出力選択手段を入れ替えることにより、インターリーブアルゴリズムの逆処理を実現する
    並列デインターリーバ。
  13. 請求項1に記載の並列インターリーバを具備するターボデコーダ。
  14. 複数のメモリバンクからなるメモリに入力データを書き込み、書き込まれたデータを書き込みと異なる順序で読み出すことにより、2次元配列型のデータ構造に対して行方向優先でデータを書き込み、各行ごとに規定される行内並び替えパターンに基づき行内並び替えを行い、行同士を並び替え、列方向優先でデータを読み出すインターリーブアルゴリズムを実現する並列インターリーブ方法であって、
    前記2次元配列のデータ構造における別の行において規定される複数の行内並び替えパターンを生成するパターン生成ステップと、
    前記パターン生成ステップで生成した前記複数の行内並び替えパターンに基づき、複数のメモリバンクからなり各バンクが前記2次元配列の1または複数の行番号と対応付けられているメモリについての複数の読み出しアドレスを生成する読み出し制御ステップと、
    を含み、前記メモリから複数のデータを同時に読み出す
    インターリーブ方法。
JP2007501644A 2005-02-03 2006-02-03 並列インターリーバ、並列デインターリーバ及びインターリーブ方法 Expired - Fee Related JP4848359B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2007501644A JP4848359B2 (ja) 2005-02-03 2006-02-03 並列インターリーバ、並列デインターリーバ及びインターリーブ方法

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
JP2005028314 2005-02-03
JP2005028314 2005-02-03
JP2007501644A JP4848359B2 (ja) 2005-02-03 2006-02-03 並列インターリーバ、並列デインターリーバ及びインターリーブ方法
PCT/JP2006/301864 WO2006082923A1 (ja) 2005-02-03 2006-02-03 並列インターリーバ、並列デインターリーバ及びインターリーブ方法

Publications (2)

Publication Number Publication Date
JPWO2006082923A1 JPWO2006082923A1 (ja) 2008-06-26
JP4848359B2 true JP4848359B2 (ja) 2011-12-28

Family

ID=36777305

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007501644A Expired - Fee Related JP4848359B2 (ja) 2005-02-03 2006-02-03 並列インターリーバ、並列デインターリーバ及びインターリーブ方法

Country Status (5)

Country Link
EP (1) EP1850486A4 (ja)
JP (1) JP4848359B2 (ja)
KR (1) KR100912156B1 (ja)
CN (1) CN101116249B (ja)
WO (1) WO2006082923A1 (ja)

Families Citing this family (39)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4692751B2 (ja) * 2005-11-28 2011-06-01 日本電気株式会社 ターボ復号器及びそれを備えた通信システム
US7925956B2 (en) * 2006-10-03 2011-04-12 Motorola Mobility, Inc. Method and apparatus for encoding and decoding data
US8356232B2 (en) 2006-10-06 2013-01-15 Motorola Mobility Llc Method and apparatus for encoding and decoding data
JP4837645B2 (ja) * 2006-10-12 2011-12-14 ルネサスエレクトロニクス株式会社 誤り訂正符号復号回路
US8010867B2 (en) 2006-10-12 2011-08-30 Renesas Electronics Corporation Error correction code decoding device
JP2010508790A (ja) * 2006-11-01 2010-03-18 クゥアルコム・インコーポレイテッド 高データレートのためのターボインターリーバ
KR101290472B1 (ko) 2006-11-22 2013-07-26 삼성전자주식회사 이동 통신 시스템에서 병렬 복호 방법 및 장치
JP2008135813A (ja) * 2006-11-27 2008-06-12 Fujitsu Ltd ターボ復号器及びターボ復号方法
US7949926B2 (en) * 2006-11-30 2011-05-24 Motorola Mobility, Inc. Method and apparatus for encoding and decoding data
EP2698936B1 (en) * 2007-06-19 2015-08-19 Panasonic Intellectual Property Corporation of America Channel arrangement circuit for radio communication
EP2051387A1 (en) * 2007-10-15 2009-04-22 CoreOptics, Inc., c/o The Corporation Trust Center Receiver, interleaving and deinterleaving circuit and method
KR101297563B1 (ko) 2007-11-15 2013-08-19 삼성전자주식회사 스토리지 관리 방법 및 관리 시스템
US8140932B2 (en) * 2007-11-26 2012-03-20 Motorola Mobility, Inc. Data interleaving circuit and method for vectorized turbo decoder
US8711984B2 (en) 2008-01-22 2014-04-29 Agere Systems Llc Methods and apparatus for map detection with reduced complexity
US8572332B2 (en) 2008-03-28 2013-10-29 Qualcomm Incorporated De-interleaving mechanism involving a multi-banked LLR buffer
CN101345604B (zh) * 2008-08-15 2012-03-21 北京理工大学 一种行列式分组交织器的并行实现方法
CN101882970A (zh) * 2009-05-06 2010-11-10 中国科学院微电子研究所 多模式的交织与解交织地址生成方法及装置
JP5477465B2 (ja) 2009-09-16 2014-04-23 日本電気株式会社 インタリーバ及びインタリーブ方法
JP5476902B2 (ja) 2009-09-30 2014-04-23 富士通株式会社 ターボ復号装置及び通信装置
KR101553651B1 (ko) 2009-10-13 2015-09-17 삼성전자 주식회사 다중 뱅크 메모리 액세스 장치
US8255759B2 (en) * 2009-10-29 2012-08-28 Qualcomm Incorporated APP (a priori probability) storage design for LTE turbo decoder with quadratic permutation polynomial interleaver
CN102064910A (zh) * 2009-11-13 2011-05-18 傲世通科技(苏州)有限公司 混合自动重传请求比特收集和交织的方法和装置
US8614977B2 (en) 2010-05-11 2013-12-24 Qualcomm Incorporated Method and apparatus for parallel de-interleaving of LTE interleaved data
CN102316059A (zh) * 2010-07-05 2012-01-11 中国科学院微电子研究所 一种ofdm系统的交织方法和装置
CN102412850B (zh) * 2010-09-25 2014-02-05 中兴通讯股份有限公司 Turbo码并行交织器及其并行交织方法
CN102170333B (zh) * 2011-05-17 2016-01-20 中兴通讯股份有限公司 一种交织地址的并行计算方法及系统
FR2987527B1 (fr) * 2012-02-23 2014-02-21 Univ Bretagne Sud Dispositif auto-configurable d'entrelacement/desentrelacement de trames de donnees
WO2014097531A1 (ja) * 2012-12-19 2014-06-26 日本電気株式会社 アクセス競合解決処理回路、データ処理装置及びアクセス競合解決方法
CN103780341B (zh) * 2013-12-31 2017-02-08 上海无线通信研究中心 基于并行编码与并行交织的无线通信传输方法
KR101558172B1 (ko) 2014-10-14 2015-10-08 숭실대학교산학협력단 오류 분산을 위한 인터리빙 방법 및 장치, 이를 수행하기 위한 기록매체
CN105790776A (zh) * 2014-12-18 2016-07-20 深圳市中兴微电子技术有限公司 3G协议的turbo码并行译码方法及装置
JP6863661B2 (ja) * 2017-06-08 2021-04-21 三菱電機株式会社 レートデマッチング及びデインターリーブ回路
CN109842461B (zh) * 2017-11-24 2022-08-26 山东协力合智通信科技有限公司 数据交织方法和装置、交织数据解交织方法和装置
KR102445674B1 (ko) 2017-12-18 2022-09-22 삼성전자주식회사 선택적으로 메모리를 부팅시키도록 구성되는 램 컨트롤러 및 그 동작 방법
WO2020077640A1 (zh) * 2018-10-19 2020-04-23 华为技术有限公司 一种存储方法及极化码接收设备
WO2020095093A1 (en) 2018-11-07 2020-05-14 Telefonaktiebolaget Lm Ericsson (Publ) Optimized implementation of (de-)interleaving and rate (de-)matching for 3gpp new radio
CN109889311B (zh) * 2019-03-25 2020-06-12 西安电子科技大学 基于组合编码的间隙信道通信方法
CN111478750B (zh) * 2020-03-12 2022-10-14 普联技术有限公司 一种数据并行交织方法、终端设备及计算机存储介质
CN111628787B (zh) * 2020-05-25 2022-03-22 武汉高德红外股份有限公司 一种无冗余数据的卷积交织与解交织fpga实现方法和系统

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003500885A (ja) * 1999-05-19 2003-01-07 サムスン エレクトロニクス カンパニー リミテッド ターボインターリービング装置及び方法
JP2004129240A (ja) * 2002-09-30 2004-04-22 Lucent Technol Inc インタリーブド・アドレスを生成するための方法および装置
JP2004164641A (ja) * 2002-11-12 2004-06-10 Hewlett-Packard Development Co Lp メモリバンクへのアドレスのマッピングをするメモリコントローラ
JP2004531138A (ja) * 2001-05-11 2004-10-07 クゥアルコム・インコーポレイテッド ターボ復号器のためのバッファアーキテクチャ

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2295791C (en) * 1997-07-30 2006-06-13 Samsung Electronics Co., Ltd. Adaptive channel encoding method and device
US6678843B2 (en) * 1999-02-18 2004-01-13 Interuniversitair Microelektronics Centrum (Imec) Method and apparatus for interleaving, deinterleaving and combined interleaving-deinterleaving
US6775800B2 (en) * 2000-01-03 2004-08-10 Icoding Technology, Inc. System and method for high speed processing of turbo codes
JP3399904B2 (ja) * 2000-03-17 2003-04-28 松下電器産業株式会社 インタリーブアドレス生成装置
US6845482B2 (en) * 2001-02-28 2005-01-18 Qualcomm Incorporated Interleaver for turbo decoder
US6603412B2 (en) * 2001-06-08 2003-08-05 Texas Instruments Incorporated Interleaved coder and method
FR2838581B1 (fr) * 2002-04-16 2005-07-08 Universit De Bretagne Sud Procede de codage et/ou de decodage de codes correcteurs d'erreurs, dispositifs et signal correspondants
EP1401108A1 (en) * 2002-09-12 2004-03-24 STMicroelectronics N.V. Electronic device avoiding write access conflicts in interleaving, in particular optimized concurrent interleaving architecture for high throughput turbo-decoding

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003500885A (ja) * 1999-05-19 2003-01-07 サムスン エレクトロニクス カンパニー リミテッド ターボインターリービング装置及び方法
JP2004531138A (ja) * 2001-05-11 2004-10-07 クゥアルコム・インコーポレイテッド ターボ復号器のためのバッファアーキテクチャ
JP2004129240A (ja) * 2002-09-30 2004-04-22 Lucent Technol Inc インタリーブド・アドレスを生成するための方法および装置
JP2004164641A (ja) * 2002-11-12 2004-06-10 Hewlett-Packard Development Co Lp メモリバンクへのアドレスのマッピングをするメモリコントローラ

Also Published As

Publication number Publication date
WO2006082923A1 (ja) 2006-08-10
EP1850486A4 (en) 2008-05-07
CN101116249A (zh) 2008-01-30
JPWO2006082923A1 (ja) 2008-06-26
KR20070093447A (ko) 2007-09-18
KR100912156B1 (ko) 2009-08-14
CN101116249B (zh) 2010-10-13
EP1850486A1 (en) 2007-10-31

Similar Documents

Publication Publication Date Title
JP4848359B2 (ja) 並列インターリーバ、並列デインターリーバ及びインターリーブ方法
Wang et al. Parallel interleaver design for a high throughput HSPA+/LTE multi-standard turbo decoder
US8438434B2 (en) N-way parallel turbo decoder architecture
WO2003044965A1 (fr) Generateur d'ordre d'entrelacement, entrelaceur, turbo codeur et turbo decodeur
WO2008149290A1 (en) Multiple access for parallel turbo decoder
Dobkin et al. Parallel interleaver design and VLSI architecture for low-latency MAP turbo decoders
US9490848B2 (en) Data handling system comprising memory banks and data rearrangement
WO2012083714A1 (zh) Turbo码数据交织处理方法和用于交织turbo码数据的交织器
WO2004055992A1 (en) Addresses generation for interleavers in turbo encoders and decoders
KR101110201B1 (ko) 통신시스템에서 병렬구조 라틴방진 인터리빙 방법 및 장치
Wang et al. High-throughput Contention-Free concurrent interleaver architecture for multi-standard turbo decoder
JP2009246474A (ja) ターボデコーダ
KR100884098B1 (ko) 다중 대역 직교 주파수 분할 다중 접속 통신 시스템에서혼합 기수 시스템을 이용한 블록 인터리빙 장치 및 방법
US9015551B2 (en) Decoding apparatus with de-interleaving efforts distributed to different decoding phases and related decoding method thereof
KR100519335B1 (ko) 채널 인터리빙 방법
Richter et al. Parallel interleaving on parallel DSP architectures
US20090083514A1 (en) Apparatus and method for block interleaving in mobile communication system
CN116318552B (zh) Turbo码的交织或解交织方法及其器件、通信芯片和装置
KR101290472B1 (ko) 이동 통신 시스템에서 병렬 복호 방법 및 장치
Abdel-Hamid et al. Memory conflict analysis for a multi-standard, reconfigurable turbo decoder
KR100782214B1 (ko) 멀티 캐리어 인터리빙 구현장치 및 방법
JP5510189B2 (ja) インタリーブ装置及びインタリーブ方法
KR101365372B1 (ko) 이동 통신 시스템에서의 고속 패킷데이타 채널의 인터리빙방법
Wang et al. Efficient interleaver memory architectures for serial turbo decoding
KR101173555B1 (ko) 데이터 디레이트 매처 및 방법

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20081225

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20111004

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20111017

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20141021

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees