本発明は、並列剰余演算器及び並列剰余演算方法に関し、例えば、ターボ復号器などの出力が並列で入力され、デジタル情報の誤りを検出する並列剰余演算器及び並列剰余演算方法に関する。
無線によるパケット通信や、光ディスクなどの記録ディスクなど、さまざまな分野でCRC(Cyclic Redundancy Check:巡回冗長検査)符号が用いられている。例えば、無線通信システムでは、無線回線を介して通信することから無線伝送路において送信データに誤りが発生する可能性があるので、CRCを使用した誤り訂正回路を設ける。送信側で送信データ列に基づいてCRCビットを生成し、それを送信データ列の後ろに付加する。CRCビットを付加したビット列は、畳み込み符号化やターボ符号化などの符号化方式を用いて符号化され、これにより得られる符号化ビット列が送信される。
CRC符号の原理については、非特許文献1に詳細に記載されている。
図1は、CRC符号の使われ方を説明する図である。
図1において、入力源(ソース)11からの入力データ列Aは、CRC符号化部12でCRC符号化され、送信データ列Bとして通信路13を介して受信側に送信される。通信路13は、例えば無線伝送路でありビット誤り(ノイズ)Eが付加される。受信側では、ビット誤りEが付加された送信データ列B’を受信し、CRC検査部14でCRC検査し、CRC検査に基づく受信データA’を出力側(シンク)15に渡す。無線通信システムが、誤り訂正能力が高いターボ符号化とARQ(Auto Repeat reQuest)とを組み合わせたHARQ(Hybrid Auto Repeat reQuest)の場合、CRC検査部14でCRCチェックを行い、誤りの発生状況を検出し、誤りが発生していない場合、データ列Aの受信データA’を出力するとともに、通信相手に送信するACK/NACK信号としてACK信号を形成する。これに対して、誤りが発生した場合、受信データを出力せずに、通信相手に送信するACK/NACK信号としてNACK信号を形成する。
より一般的に説明する。
nビットの入力データ列をA=[a0a1…an−2an−1]とする。a0がMSB(Most Significant Bit)、すなわち先に送信されるビットでる。a0,…,an−1をそれぞれGF(2)の元(すなわち、値0又は1をとる)とし、ビット列を次式(1)のように多項式で表す。
入力データ列Aは、CRC符号化され、次式(2)のBとなる。一般に用いられるCRC符号化では、nビットの入力データ列の後に長さcのビット列を追加することで行われる。追加されたcビットをCRCと呼ぶこともある。
B=[a0a1…ac−2ac−1r0r1…rc−2rc−1] …(2)
CRCの多項式表現を、次式(3)で表すとすると、Bの多項式表現は、次式(4)で示される。
B(D)=A(D)D
c+R(D) …(4)
CRC符号化は、あらかじめ定められたc次の多項式G(D)に対し、B(D)がG(D)で割り切れるようにR(D)が定められる。すなわち、A(D)D
cをG(D)で割った剰余がR(D)である。
上記G(D)は生成多項式と呼ばれ、次式(5)で示される。
以下では、生成多項式の次数cをCRCの次数と呼ぶ場合がある。
以上をまとめると、次式(6)になる。Q(D)はA(D)DcをG(D)で除した商である。
B(D)=A(D)Dc+R(D)=G(D)Q(D) …(6)
以上のようにしてCRC符号化されたn+cビットが、通信路13を介して送信される。通信路13では、ビット誤り(ノイズ)E(D)が付加される。
CRC検査は、受信値B’(D)=B(D)+E(D)がG(D)で割り切れるかどうかを検査することで行われる。受信値にビット誤りがなければ(すなわち、E(D)=0のとき)、B’(D)はG(D)で割り切れる。受信値にビット誤りがある場合、E(D)がG(D)で割り切れない場合にはB’(D)がG(D)で割り切れなくなる。したがって、通信路でビット誤りが発生したことを検出できる。E(D)がG(D)で割り切れる場合、誤りがあることをCRCにより検出できない。しかし、cが十分な長さを持っていればその発生確率は低い。cとしては、32〜8といった値がよく用いられる。
図2は、より実際的なシステムに適用したCRC符号の使われ方を説明する図である。
図2において、情報源(ソース)21からの入力データA(D)は、CRC符号化部22でCRC符号化され、CRC符号化されたデータB(D)は誤り訂正符号化部23で送信データC(D)として通信路24を介して受信側に送信される。送信側では、CRC符号化ののち、誤り訂正符号化が行われる。誤り訂正符号化の方法としては、リードソロモン符号、畳み込み符号、ターボ符号、などが用いられる。
通信路24において、ビット誤り(ノイズ)Eが付加されることがある。受信側では、ビット誤りEが付加された送信データ列C’(D)を受信し、誤り訂正復号部25で誤り訂正の復号を行って送信データB’(D)を出力し、CRC検査部26でCRC検査し、CRC検査に基づく受信データA’を出力側(シンク)27に渡す。受信側では、誤り訂正符号の復号が行われる。これにより、通信路24で加えられたビット誤りの大部分が取り除かれる。CRC検査部26によるCRC検査では、誤り訂正復号で取りきれなかった誤りがあるかどうかを検査する。
(従来例1:逐次CRC計算回路)
図3は、一般的によく知られる逐次CRC計算回路の構成を示す図である。
図3において、逐次CRC計算回路30は、EXOR(排他的論理和)回路31と、[0]〜[c−1]のフリップフロップ(FF)32と、AND回路33とから構成される。
図3は、シフトレジスタを用いた一般的な構成であり、入力データ列の先頭から1bitずつ毎クロックサイクル入力する。
逐次CRC計算回路30のCRC符号化では、a[t]で示す入力端子に、a0〜an−1を1ビットずつ入力する。すべて入力した後、cビットのフリップフロップ(FF)に保持されている値が、CRC演算結果となる。
CRC検査では、受信したn+cビットのデータB’(D)を1ビットずつ入力した後、フリップフロップに残った値が0かどうかを判定する。又は、B’(D)の先頭のnビットを入力し、フリップフロップに残った値がB’(D)の残りのcビットと一致するかどうかを判定してもよい。
しかし、この構成では、入力がnビットの場合、CRC符号化に少なくともnクロックを要し、処理遅延時間が大きいという問題がある。
(従来例2:部分CRCを算出する方法)
特許文献1には、部分CRCを算出することで処理遅延時間を短縮する部分CRC算出方法が開示されている。
特許文献1では、剰余R(D)の計算式を次式(7)のように変形する。
ここで、D
n−l+c−imodG(D)(i=0〜n−1)の値(部分CRC)をあらかじめ求めておき、入力データをパラレルで一度に入力することで1クロックサイクルでCRCを求めることができる。
図4は、部分CRC回路の構成を示す図であり、上記式(7)においてn=16,c=24の場合の部分CRC回路を示す。
図4において、部分CRC回路40は、演算対象ビット列A[0]A[15]入力端子41と、各ビット列A[0]A[15]とあらかじめ算出された部分CRCのANDをとるAND回路42と、部分CRCをまとめる加算回路43とから構成される。
AND回路42では、あらかじめ算出された部分CRCの、各演算対象ビット列の有効値を部分CRC符号にデコードし、加算回路43では、演算対象ビット列全体に対するCRC符号を求める。
しかし、特許文献1に示される並列度nの構成では、nが大きくなると、回路規模がとても大きくなってしまう。並列度を下げ、データの一部を順次入力していくことも考えられるが、i=0〜n−1に対する任意の部分CRCを即座に計算することは回路規模や処理遅延の面から困難である。そこで、すべての部分CRCをあらかじめ求めておく必要があるが、nが大きい場合には、部分CRCを保持しておくメモリの容量が大きくなってしまい、コストの増大を招く。
(従来例3:サブブロックに分割する方法)
また、特許文献2,3には、データをサブブロックに分割して並列処理を行うサブブロック分割型並列CRC回路が開示されている。特許文献2,3では、剰余R(D)の計算式を次式(8)のように変形する。
すなわち、上記式(8)長さnのデータを、長さmとn−mに分割し、(a)長さn−mのCRC計算と、(b)長さmのCRC計算とに分解する。
しかし、このサブブロック分割方法では、(a)の結果にDmmodG(D)を乗算したのち、G(D)による剰余を計算しなければならない。これらの処理のため、乗算器と剰余計算器が追加で必要となり、回路規模及び処理遅延の増加を招いていた。
最も一般的な並列化方法として、シリアル・パラレル変換型の並列CRC回路がある。
図5A及び図5Bは、シリアル・パラレル変換型の並列CRC回路を示す図である。図5Aにおいて、S/P変換型並列CRC回路50は、S/P変換器51と、並列CRC回路52とから構成される。
S/P変換型並列CRC回路50は、図5Bに示すように、S/P変換器51により入力をシリアル・パラレル変換し、並列CRC回路52で並列処理によるCRC計算を行う。並列処理は、例えば1byteずつ処理する。この並列化方法は、ハード・ソフトいずれにおいても実装及び応用例が多い。
今井秀樹著、「符号理論」、電子情報通信学会、1990年3月
特開平8−149017号公報
特表2003−523682号公報
特開2005−6188号公報
しかしながら、このような従来のCRC計算回路にあっては、以下のような課題がある。
(1)上述したように、逐次CRC計算回路は、処理遅延時間が非常に大きく、部分CRC回路は、部分CRCを保持しておくメモリの容量が大きくなりコストの増大を招く。
(2)サブブロック分割型並列CRC回路は、以下の点で必要性が高い。
並列ターボデコーダの出力は、サブブロック分割型であるため、サブブロック分割型並列CRC回路を適用できれば、メモリを介さずに直接入力可能という利点がある。すなわち、並列ターボ復号器の出力をCRC計算回路に直接入力するため、並列CRC計算回路は、シリアル・パラレル変換型(例えば、先頭から1byteずつ処理)ではなく、サブブロック分割型(例えば、データ系列を長さMの小ブロックに分割)である必要がある。したがって、サブブロック分割型並列CRC回路は、S/P型並列CRC回路を使う場合に比べ、インターフェースとなるメモリが不要となり、処理遅延の削減、回路規模・電流の削減につながる。しかしながら、このサブブロック分割型並列CRC回路では、サブブロックに分割し並列処理するため、並列処理する複数CRC剰余発生器の後段に、乗算器と加算器などの剰余計算器が追加で必要となり、回路規模及び処理遅延の増加を招く。
(3)シリアル・パラレル変換型並列CRC回路では、インターフェースメモリが必要となり、このことは、処理遅延の増加をもたらし、ACK送信の遅れ、反復停止の遅れによる消費電流増加を招く。
上述したように、サブブロック分割型並列CRC回路は、サブブロック分割を行う並列ターボ復号器と組み合わせる場合には、利点が大きいが、従来のサブブロック分割型並列CRC回路は、処理遅延・回路規模が大きく、処理遅延・回路規模の小さいCRC回路が求められている。
本発明の目的は、処理遅延を小さくすることができ、追加の乗算回路・剰余回路を不要にして回路規模を小さくすることができる並列剰余演算器を提供することである。
本発明の並列剰余演算器は、入力データが複数のサブブロックに分割されて並列に入力される並列剰余演算器であって、前記各サブブロックの先頭点に対応する部分剰余を初期値として生成する初期値生成手段と、前記初期値生成手段から各サブブロックの先頭に対応する部分剰余を初期値として受け取り、残りの部分剰余を所定の漸化式に従って順次生成する部分剰余生成手段と、前記入力データと、前記部分剰余生成手段から出力される部分剰余の値の論理を計算する論理手段と、前記論理手段から出力される値を、累積的に加算する累積加算手段とを備える構成を採る。
本発明の並列剰余演算器は、入力データが複数のサブブロックに分割されて並列に入力される並列剰余演算器であって、前記各サブブロックの最終点に対応する部分剰余を初期値として生成する初期値生成手段と、前記初期値生成手段から各サブブロックの最終点に対応する部分剰余を初期値として受け取り、残りの部分剰余を所定の漸化式に従って順次生成する逆順部分剰余生成手段と、前記入力データと、前記逆順部分剰余生成手段から出力される逆順部分剰余の値の論理を計算する論理手段と、前記論理手段から出力される値を、累積的に加算する累積加算手段とを備える構成を採る。
本発明の並列剰余演算方法は、長さnの入力データを長さn−mとmのデータ列に分割し、分割された個々のデータ列をサブブロックとするとき、最大次数cにおいて定められる多項式G(D)の値に応じて、 各サブブロックのi=0,mにおける先頭点の部分剰余であるDn−l+cmodG(D)とDn−l+c−mmodG(D)を初期値としてあらかじめ求めるステップと、前記Dn−l+cmodG(D)とDn−l+c−mmodG(D)を初期値として、i=1〜m−l及びi=m+l〜n−lに対応する部分剰余を、順次算出するステップとを有する。
本発明の並列剰余演算方法は、長さnの入力データを長さn−mとmのデータ列に分割し、分割された個々のデータ列をサブブロックとするとき、最大次数cにおいて定められる多項式G(D)の値に応じて、 各サブブロックのi=m−1,n−1における最終点の部分剰余であるDn−l+c−(m−1)modG(D)とDn−l+c−(n−1)modG(D)を初期値としてあらかじめ求めるステップと、前記Dn−l+c−(m−1)modG(D)とDn−l+c−(n−1)modG(D)を初期値として、i=m−2〜0及びi=n−2〜mに対応する逆順部分剰余を、順次算出するステップとを有する。
本発明によれば、処理遅延を小さくすることができ、部分CRCをすべて保存しておく必要が無く、また追加の乗算回路・剰余回路を不要にして回路規模を小さくすることができる。特に、サブブロック分割を行う並列ターボ復号器と組み合わせた場合に処理遅延を格段に小さくすることができる。
CRC符号の使われ方を説明する図
実際的なシステムに適用したCRC符号の使われ方を説明する図
従来のCRC計算回路の構成を示す図
従来の部分CRC回路の構成を示す図
従来のシリアル・パラレル変換型の並列CRC回路を示す図
従来のシリアル・パラレル変換型の並列CRC回路を示す図
本発明の実施の形態1に係る並列剰余演算器の全体構成を示すブロック図
上記実施の形態1に係る並列剰余演算器のデータの入出力を示すタイミングチャート
上記実施の形態1に係る並列剰余演算器の部分CRC生成部が計算する部分CRCを表にまとめた図
上記実施の形態1に係る並列剰余演算器の部分CRC生成部の回路構成を示す図
上記実施の形態1に係る並列剰余演算器の部分CRC生成部の動作を示すタイミングチャート
上記実施の形態1に係る並列剰余演算器のAND部の回路構成を示す図
上記実施の形態1に係る並列剰余演算器のAND部の動作を示すタイミングチャート
上記実施の形態1に係る並列剰余演算器の累積加算部の回路構成を示す図
上記実施の形態1に係る並列剰余演算器の初期値生成部の構成を示すブロック図
上記実施の形態1に係る並列剰余演算器の初期値候補生成部の回路構成を示す図
上記実施の形態1に係る並列剰余演算器の初期値生成部の動作を示すタイミングチャート
本発明の実施の形態2に係る並列剰余演算器の全体構成を示すブロック図
上記実施の形態2に係る並列剰余演算器の逆順部分CRC生成部の回路構成を示す図
上記実施の形態2に係る並列剰余演算器のそれぞれの部分CRC生成部が計算する部分CRCを表にまとめた図
上記実施の形態2に係る並列剰余演算器の初期値生成部の動作を示すタイミングチャート
以下、本発明の実施の形態について、図面を参照して詳細に説明する。
(基本原理)
まず、本発明の基本原理について説明する。
本発明は、全体構成に関連する[ポイント1]、部分CRC生成回路に関連する[ポイント2]、部分CRC生成回路(逆順)に関連する[ポイント3]を有する。
[ポイント1]:全体構成に関連して
本発明では、剰余R(D)の計算式を次式(9)のように変形する。
すなわち、上記従来例2(部分CRCを算出する方法)と同様に、部分CRC(D
n−l+c−imodG(D))の和としてCRCを計算するよう式変形し、さらに、上記従来例3(サブブロックに分割する方法)と同様に、長さnのデータを長さn−mとmに分割する。以下、分割された個々のデータ列をサブブロックと呼ぶことにする。入力データは、上記式(9)中(a)に対応するa
0〜a
m−lと、(b)に対応するa
m〜a
n−lに分割され、それぞれを並列に計算することで高速計算を実現する。
このとき、本発明では、次のようにして部分剰余(部分CRC)を算出する。ここで、入力データは、上記式(9)中(a)に対応するサブブロック1は、a0から1ビットずつ順に、am−lまで、上記式(9)中(b)に対応するサブブロック2は、amから1ビットずつ順に、an−lまで、それぞれ与えられる(入力される)ものとする。[手順1] i=0,mにおける部分CRCの値(すなわち、サブブロックの先頭点における部分CRC)Dn−l+cmodG(D))、Dn−l+c−mmodG(D))をあらかじめ求めておく。[手順2] 上記の2つの値を初期値として、i=1〜m−l及びi=m+l〜n−lに対応する部分CRCを、順次算出する。
上記のような計算方法をとったので、本発明のサブブロック分割型並列CRC回路は、(1)部分CRCをすべて保存しておく必要が無く、(2)追加の乗算回路・剰余回路が不要のため、小型・低遅延という特徴がある。
[ポイント2]:部分CRC生成回路に関連して
上記、サブブロックの先頭点における部分CRCを元に、その他の部分CRCを順次求める方法について、好適な計算方法について説明する。
生成多項式を次式(10)としたとき、通常用いられるCRCの生成多項式は、最低次の項の係数gc−1の値が1である、という特徴がある。
この特徴を利用すると、次式(11)に示す漸化式により、D
TmodG(D)の値からD
T−1modG(D)の値を容易に求めることができる。
以上から、次の手順により、上記[ポイント1]で述べた並列CRC計算を効率よく実現できる。[手順1’] DM
n−l+c(D)=D
n−l+cmodG(D)及びDM
n−l+c−m(D)=D
n−l+c−mmodG(D)をあらかじめ求めておく。[手順2’] DM
n−l+c(D)を元に、i=1〜m−1に対応する部分CRC(DM
n−l+c−l(D)〜DM
n−l+c−(m−l)(D))及び、i=m+1〜n−1に対応する部分CRC(DM
n−l+c−(m+l)(D)〜DM
n−l+c−n(D))を、順次求める。
上記のように、部分CRCをシフトレジスタを用いて順次計算する方法をとったので、本発明のサブブロック分割型並列CRC回路は、modG(D)上で定義される多項式の除算を行うことなく、小型の回路で部分CRCを算出することができる。
[ポイント3]:部分CRC生成回路(逆順)に関連して
上記では、各サブブロックのデータは、元のデータ順に従い順序良く入力する(例えばa0〜am−l)としたが、逆順(例えばam−l〜a0)に入力するような並列CRC計算回路も実現できる。
すなわち、下記の算出式(12)において、サブブロック1では、am−l〜a0の順に、サブブロック2では、an−l〜amの順にデータを入力する。これは、ターボ復号器の出力を並列CRC計算器に直接入力するような場合に特に有効である。
部分CRCの生成手順は次の通りである。[手順1] i=m−l,n−lにおける部分CRCの値(すなわち、サブブロックの最終点における部分CRC)D
n−l+c−(m−l)modG(D)、D
n−l+c−(n−l)modG(D)をあらかじめ求めておく。[手順2] 上記の2つの値を初期値として、i=m−2〜0及びi=n−2〜mに対応する部分CRCを、順次算出する。
好適な方法では、次の漸化式(13)を用いると良い。
上記のように、部分CRCを逆順に順次生成する方法をとったので、本発明のサブブロック分割型並列CRC回路は、データが(部分的に)逆順になっている場合にも、並べ替え操作を行うことなく、CRC計算が行えるようになった。その結果、並べ替え操作のための処理遅延をなくすことができた。
(実施の形態1)
図6は、上記基本原理に基づく本発明の実施の形態1に係る並列剰余演算器の全体構成を示すブロック図である。本実施の形態は、上記[ポイント1]及び[ポイント2]に対応する例である。「ポイント」の説明では、データを2分割する(2並列)例を示したが、実施の形態1では、4並列の場合を例として説明する。すなわち、長さnの入力データをi=0〜m−1、i=m〜2m−1、i=2m〜3m−1、i=3m〜n―1の4つのサブブロックに分割する。また、CRCの長さを24ビット(c=24)とした。
図6において、並列CRC計算回路(並列剰余演算器)100は、入力端子101〜104(入力端子<1>〜<4>)、初期値生成部110、部分CRC生成部111〜114(部分CRC生成部<1>〜<4>)、AND部121〜124(AND部<1>〜<4>)、及び累積加算部130を備えて構成される。
初期値生成部110は、部分CRC生成部111〜114に入力する初期値I1〜I4(初期値<1>〜<4>)を生成する。具体的には、各サブブロックのi=0,m,2m,3mにおける先頭点の部分CRC(部分剰余)であるDn−l+cmodG(D)Dn−l+c−mmodG(D)とDn−l+c−2mmodG(D)とDn−l+c−3mmodG(D)を初期値として生成する。初期値生成部110の実装方法については、図14乃至図16により後述する。
部分CRC生成部111〜114(部分CRC生成部<1>〜<4>)は、それぞれのサブブロックの先頭に対応する部分CRCを初期値として初期値生成部110から受け取り、残りの部分CRCを漸化式に基づき順次生成する。部分CRC生成部111〜114の構成及び動作については、図8乃至図10により後述する。
AND部121〜124(AND部<1>〜<4>)は、入力端子101〜104から入力された1ビットと、部分CRC生成部111〜114から出力された24ビットの値のAND(論理積)を計算する。なお、部分CRCの値の論理を計算する論理回路であればよく、AND(論理積)には限定されない。AND部121〜124の構成及び動作については、図11及び図12により後述する。
累積加算部130は、AND部121〜124から出力される値を、累積的に加算する。この加算は、ビットごとの排他的論理和(EXOR)である。累積加算部130の構成及び動作については、図13により後述する。
以下、上述のように構成された並列剰余演算器の動作について説明する。まず、並列CRC計算回路100の全体の動作タイミングについて述べる。
本実施の形態では、データを4分割する4並列の場合を例に採る。また、CRCの長さを24ビット(c=24)としている。
入力データの長さをN[ビット]とし、サブブロック1〜3の長さをM[ビット]とし、サブブロック4のサイズを残りのN−3M[ビット]とするようにデータを分割した。この分割方法は一例であり、どのように定めてもよい。
図7は、データの入出力を示すタイミングチャートであり、入力データをA[n−1:0]のように表記した。また、図7中、tは時刻を表す。図6中の信号tは、明記していない。
入力端子101には、a1に示すサブブロック1のデータ(A[0]〜A[M−1])が、A[0]を先頭に1ビットずつ入力される。入力端子102には、a2に示すサブブロック2のデータ(A[M]〜A[2M−1])が、A[M]を先頭に1ビットずつ入力される。入力端子103,104も同様である。なお、上記の例では、サブブロック4のサイズは他のサブブロックと異なる(端数のため、他より1ビット少ない)とした。そこで、図7のa4に示すように、時刻M−1には、入力端子104には0を入力するようにした。
すべてのデータが入力されると、所望のCRCの値がCRC出力端子(r)から出力される。本実施の形態では、すべての入力が完了した後も、入力端子の値を0に保持している限り、出力端子(r)に所望のCRCの値が保持されるようになっている。
次に、並列CRC計算回路100の個々のモジュールについて説明する。
〔部分CRC生成部111〜114〕
図8は、部分CRC生成部111〜114が計算(担当)する部分CRCを表にまとめた図である。ここで、DM{T}(D)という表記を用いた。DM{T}(D)=DMT(D)=DTmodG(D)である。
部分CRC生成部111〜114(部分CRC生成部<1>〜<4>)は、それぞれのサブブロックの先頭(0、M、2M、3M)に対応する部分CRCを初期値として初期値生成回路110から受け取り、残りの部分CRCを前述した漸化式(11)に基づき順次生成する。
例えば、図8の表において、回路番号1の部分CRC生成部111は、入力データ番号0〜M−1、初期値をDM{N−1+c}(D)とするとき、生成する部分CRCはDM{N−1+c−1}(D)〜DM{N−1+c−(M−1)}(D)である。同様に、部分CRC生成部112〜114は、それぞれのサブブロックの先頭(M、2M、3M)に対応する部分CRCを初期値として残りの部分CRCを前記式(11)に基づき順次生成する。
次に、部分CRC生成部111を例に採り、さらに詳細に説明する。
図9は、部分CRC生成部111の回路構成を示す図である。部分CRC生成部111〜114は、同一構成をとるため部分CRC生成部111を代表して説明する。
図9において、部分CRC生成部111は、セレクタ201、Dフリップフロップ(FF)202、EXOR回路203、及びAND回路204から構成される。
部分CRC生成部111は、24ビット分のDフリップフロップ202を中心とした構成となっている。なお、フリップフロップが数珠繋ぎになっている構成はしばしばシフトレジスタとも呼ばれる。
I1[23:0]は初期値であり、g[23:0]は生成多項式を表す値である。例えば、生成多項式が次式(14)で定義されるとき、
g[0]=g[17]=g[18]=g[22]=g[23]=1,
g[1]=g[2]=...=g[15]=g[16]=g[19]=g[20]=g[21]=0と定める。ここで、g[i]は、Dc−i−1の係数である。Dcの係数は常に1であるから、g[−1]を定義する必要はない。
G(D)=D24+D23+D6+D5+D+1 …(14)
16進数で表記すると、
g=C60001Hである。
p1[23:0]は、生成された部分CRCである。
次に、部分CRC生成部111の動作を説明する。
図10は、部分CRC生成部111の動作を示すタイミングチャートである。図10中、ldは制御信号で、ld=1のとき、初期値I1の値がシフトレジスタにロードされる。ここで、I1の値は、具体的には、図8表に示した通りDM{N−1+c}(D)である。図10のタイミングチャートでは、見易さのためN−1+c=98であるとした。
すると、時刻t=0には、ロードされた値そのものがA[0]に対応する部分CRCとして出力される。同時に、部分CRC生成部111内部では、次のDM[97]の値が漸化式に基づき算出される。
回路図の信号名に従うと、計算式は次式(15)のようになる。なお、p1’は更新後の(例えばDM[97])、p1は更新前の(例えばDM[98])シフトレジスタの内容である。
p1’[23:0]={p1[22:0],0}+p1[23]*{g[22:0],1}
…(15)
上記式(15)中の+はビットごとの排他的論理和(EXOR)、*は論理積(AND)である。また、{p1[22:0],0}という表記は、シフト操作を表す。すなわち、p1の値を1ビット分上位方向にシフトし、LSBに0を挿入することを意味する。{g[22:0],1}は、同様にシフト操作であるが、LSBに1を挿入することを意味する。
以上のように、並列CRC計算回路100の部分CRC生成部111〜114は、シフトレジスタと、ビットごとのAND・EXORという簡易な構成のみで、入力データに合わせて適時必要な部分CRCを算出することができる。
〔AND部121〜124〕
AND部121〜124(AND部<1>〜<4>)は、入力端子101〜104から入力された1ビットと、上記部分CRC生成部111〜114から出力された24ビットの値のAND(論理積)を計算する。
図11は、AND部121の回路構成を示す図である。AND部121〜124は、同一構成をとるためAND部121を代表して説明する。
図11において、AND部121は、入力端子101から入力された1ビットと、部分CRC生成部111〜114から出力された24ビットの値のANDを計算するAND回路211から構成される。
図11に示すAND部121では、入力端子101から入力された1ビットと、部分CRC生成部111〜114から出力された24ビットの値のANDを計算する。すなわち、次式(15)において、aiとDn−l+c−imodG(D)の積をとる操作に相当する。
図12は、AND部121の動作を示すタイミングチャートである。図12において、時刻を表すtは、前記図10のtと共通である。すなわち、部分CRC生成部111〜114では、入力データと対応付けられるべき部分CRCをタイミング良く生成しているのである。
〔累積加算部130〕
図13は、累積加算部130の回路構成を示す図である。
図13において、累積加算部130は、EXOR回路211、フリップフロップ(FF)222、及びスイッチ回路223から構成される。
累積加算部130では、AND部<1>〜<4>から出力される値を、累積的に加算していく。ここで、加算はビットごとの排他的論理和(EXOR)である。すなわち、i=0〜23に対し、次式(16)に示す演算を行う。
s’[i]=s[i] EXOR q1[i] EXOR q2[i] EXOR q3[i] EXOR q4[i] …(16)
上記式(16)中、sは更新前のフリップフロップの値、s’は更新後のフリップフロップの値である。
〔初期値生成部110〕
初期値生成部110の実装方法について説明する。
サブブロックサイズMと生成多項式があらかじめ定められている場合は、必要なDn+ImodG(D)の値をあらかじめ求めておき、メモリ(RAMやROM)に保存しておけばよい。とりうるIの種類は少ないので、メモリ容量は少なくてよい。
本実施の形態では、サブブロックサイズMが固定値であるとすれば、DM{N−1+c}(D)、DM{N−1+c−M}(D)、DM{N−1+c−2M}(D)、DM{N−1+c−3M}(D)の4つの値のみ求めておけばよいので、メモリ容量は24ビット×4通り=96ビットのみでよい。
また、サブブロックサイズMや生成多項式が変更される場合にも、変更される度に、CPUやDSPを用いてソフトウェアにより値を求め、RAMに保存すればよい。
Dn+ImodG(D)(I=0〜N−1)は、次の漸化式(17)により求めることができる。T=c+I,I=0〜N−1である。
ここで、D
cmodG(D)=G(D)−D
cである。
上記の初期値生成を高速に行う必要がある場合には、次に示すようなハードウェアを用いるとよい。
図14は、初期値生成部110の構成を示すブロック図である。
図14において、初期値生成部110は、初期値候補生成部230、データ取得タイミング生成部231、データ取得部241〜244(データ取得部<1>〜<4>)、及び初期値記憶部251〜254(初期値記憶部<1>〜<4>)を備えて構成される。
図15は、上記初期値候補生成部230の回路構成を示す図である。
図15において、初期値候補生成部230は、セレクタ261、フリップフロップ(FF)262、EXOR回路263、及びAND回路264から構成される。
初期値候補生成部230は、Dn+ImodG(D)の値をI=0〜N−1まで順次求める。内部構成は、図15の通りである。
図16は、初期値生成部110の動作を示すタイミングチャートである。
データ取得部241(データ取得部<1>)は、部分CRC生成部111(図6参照)で使用する初期値DM{N−1+c}(D)を取得し、初期値記憶部251(初期値記憶部<1>)に保存する。すなわち、データ取得タイミング生成部231は、図16に示すように、初期値候補生成部230がDM{N−1+c}(D)を出力したときにld1にトリガ信号を送る。データ取得部241は、ld1のトリガ信号に応じて初期値候補生成部230の出力を取得することにより、初期値記憶部1に格納すべき値DM{N−1+c}を取得することができる。
同様に、DM{N−1+c−M}(D)が出力されるタイミングでld2にトリガ信号が出力され、DM{N−1+c−2M}(D)が出力されるタイミング(I=j=N−1−2M)でld3にトリガ信号が出力され、DM{N−1+c−3M}(D)が出力されるタイミング(I=k=N−1−3M)でld4にトリガ信号が出力される。
以上のように、本実施の形態によれば、並列CRC計算回路100は、入力データが複数のサブブロックに分割されて並列に入力される入力端子101〜104、各サブブロックの先頭点に対応する部分CRCを初期値として生成する初期値生成部110、各サブブロックの先頭に対応する部分CRCを初期値として受け取り、残りの部分CRCを所定の漸化式に従って順次生成する部分CRC生成部111〜114、部分CRCの値の論理積を計算するAND部121〜124、及びAND部121〜124から出力される値を累積的に加算する累積加算部130を備える。部分CRC生成では、m番目の入力の次数(n−1−m)に生成多項式の次数cを足した次数(i=n−1−m+c)について示される剰余R(D)の計算式を、部分CRC(Dn−l+c−imodG(D))の和で示される式に変形して、各サブブロックの先頭点に対応する部分CRCを生成している。これにより、本実施の形態では、処理遅延を小さくすることができ、追加の乗算回路・剰余回路を不要にして回路規模を小さくすることができる。具体的な効果は以下の通りである。
(1)従来構成では、分割した入力データのCRCを求めてから合成していたので、追加の乗算回路・剰余回路が必要となり、回路規模や処理遅延の増大を招いていた。本実施の形態では、並列度に応じた個数の部分CRC生成部111〜114を設けることにより、簡易な構成でサブブロック分割型の並列CRC計算を行うことができる。また、従来の乗算回路の代わりにAND回路が使用できるので遅延が小さい、さらに、最終段に追加の剰余計算回路が不要となり、遅延及び回路規模が小さい利点がある。
(2)従来例2のように従来構成では、あらかじめ部分CRCを求めておく必要があったため、入力データのサイズに比例して、記憶容量の増加を招いていた。これに対し、本実施の形態では、部分CRC生成部111〜114は、初期値を元に順次新たな値を生成するようにしたので、入力データのサイズにかかわらない回路規模・記憶容量で部分CRCを算出できる。
(3)本実施の形態では、部分CRCをシフトレジスタを用いて順次計算する方法をとっているので、modG(D)上で定義される多項式の除算を行うことなく、小型の回路で部分CRCを算出できる。
このように、サブブロック分割型並列CRC回路の新しい構成を実現することができた。ターボ復号器と組み合わせて用いる場合に、処理遅延を少なくし、ACK/NACK送信までの遅延を短縮することができる。ターボ符号の反復復号を行う場合に、反復ごとに即座にCRC判定ができるので、復号を早期に停止し、消費電力を低減できる。ターボ復号器とCRC計算回路の間のインターフェースメモリへのアクセスを不要とできるので、消費電力を低減できる。
以上のように、特に、サブブロック分割を行う並列ターボ復号器と組み合わせた場合に処理遅延を格段に小さくすることができる。ターボ符号の種別を問わず、汎用に適用可能であり、実施も容易である。
(実施の形態2)
図17は、本発明の実施の形態2に係る並列剰余演算器の全体構成を示すブロック図である。図6と同一構成部分には同一符号を付している。
本実施の形態は、基本原理で述べた[ポイント3]に対応する例である。[ポイント3]では、サブブロックごとにデータ入力順を逆順にする例について述べた。データを4分割する4並列において、サブブロック<2>とサブブロック<4>を逆順にする場合を例として説明する。
図17において、並列CRC計算回路(並列剰余演算器)300は、入力端子101〜104(入力端子<1>〜<4>)、初期値生成部310、部分CRC生成部111,113(部分CRC生成部<1>,<3>)、逆順部分CRC生成部312,314(逆順部分CRC生成部<2>,<4>)、AND部121〜124(AND部<1>〜<4>)、及び累積加算部130を備えて構成される。
図17の並列CRC計算回路300は、サブブロックサイズをMとし、入力端子102,104についてのみデータの入力順を逆にした例である。
構成上の特徴は、次の通りである。
図6の並列CRC計算回路100と比較して、部分CRC生成部112,114を、それぞれ逆順部分CRC生成部312,314に変更した。また、逆順部分CRC生成回路312,314に入力する初期値を変更した。このため、初期値生成部310で生成する初期値は、図6の初期値生成部110と異なるが、構成は同一(図14参照)である。
図18は、逆順部分CRC生成部312の回路構成を示す図である。逆順部分CRC生成部312,314は、同一構成をとるため逆順部分CRC生成部312を代表して説明する。
図18において、逆順部分CRC生成部312は、セレクタ401、Dフリップフロップ(FF)402、EXOR回路403、及びAND回路404から構成される。
逆順部分CRC生成部312は、部分CRC生成部111(図9参照)と同様、24ビット分のDフリップフロップ402を中心とした構成となっているが、データの生成方向が逆方向である。
図19は、それぞれの部分CRC生成部、すなわち部分CRC生成部111,逆順部分CRC生成部312,部分CRC生成部113,逆順部分CRC生成部314が計算(担当)する部分CRCを表にまとめた図である。ここで、DM{T}(D)という表記を用いた。DM{T}(D)=DMT(D)=DTmodG(D)である。
図19の表に示すように、回路番号2,4の入力データ順が逆になっており、それに対応して初期値と部分CRCの生成順が変わっている。
基本原理の[ポイント3]で説明した通り、次の漸化式(18)に基づきDM{N−1+c−(2M−1)}(D)を初期値として、DM{N−1+c−(2M−2)}(D)〜DM{N−1+c−M}(D)の値を順次求めるものである。
正順の部分CRC生成部111,113では、Tが減少していく方向に算出したのに対し、逆順部分CRC生成部312,314では、Tが増加していく方向に算出しているのがわかる。
上述したように、初期値生成部310は、実施の形態1の部分CRC生成部111と同等の構成となる。但し、逆順部分CRC生成部312で必要とされる初期値は、DM{N−1+c−M}(D)ではなく、DM{N−1+c−(2M−1)}(D)であるから、ld2のトリガを発生するタイミングが異なる。すなわち、I=N−1−(2M−1)のタイミングでld2=1となる。ld4のタイミングについても同様であり、I=0のタイミングでl4=0となる。
図20は、初期値生成部310の動作を示すタイミングチャートである。並列CRC計算回路100の初期値生成部100の動作を示すタイミングチャート図16と比較すると、信号ld2とld4に対しトリガが出力されるタイミングが異なることが分かる。
このように、本実施の形態では、実施の形態1の効果に加えてさらに、サブブロックごとにデータの入力順を逆順に入力することができる。したがって、サブブロック分割を行う並列ターボ復号器と組み合わせる場合の親和性が高い。例えば、ターボ複合器でMax−log−MAP復号を行うとき、ターボ復号器の出力を本並列CRC計算回路(並列剰余演算器)300に直接入力することができる。特に、サブブロック分割を行う並列ターボ復号器と組み合わせた場合に処理遅延を格段に小さくすることができる。
以上の説明は本発明の好適な実施の形態の例証であり、本発明の範囲はこれに限定されることはない。
例えば、上記各実施の形態では、データを4分割する(4並列)の場合を例にとって説明したが、分割数やCRCのビット長さはこれに限定されない。
また、上記実施の形態1では、部分CRC生成部111は図10に示したように1クロックサイクルあたり1つの部分CRCを式(8)により計算するものとしたが、式(8)を繰り返し用いることにより、1クロックサイクルあたり2以上の部分CRCを計算するようにしても良い。例えば、部分CRC生成部111は、DM{N−1+c+i}(D)(iは整数)から、2つの部分CRC、DM{N−1+c+i+1}(D)とDM{N−1+c+i+2}(D)を出力する。このような構成により、各入力端子101〜104には1クロックサイクルごとに2ビットのデータを入力することができるようになる。すなわち、データをサブブロック分割した上で、各サブブロックのデータをシリアル・パラレル変換する場合にも、本明細に「ポイント1」「ポイント2」として示した方法を用いて、簡易な構成で並列計算が可能となる。
また、上記実施の形態2では、サブブロック2,4を逆順にしたが、どのサブブロックを逆順にしてもよく、一部のサブブロックのみ逆順としてもよい。
また、本実施の形態では、並列剰余演算器及び並列CRC計算回路という名称を用いたが、これは説明の便宜上であり、CRC計算回路、誤り訂正回路、誤り訂正方法等であってもよい。
また、本発明を本アルゴリズムによる並列剰余演算器及び並列剰余演算方法が実現できればよく、ハードウェアで構成する場合は勿論のこと、並列剰余演算方法を機能させるためのソフトウェアで実現することも可能である。このソフトウェアはコンピュータで読み取り可能な記録媒体に格納されている。
また、上記各実施の形態の説明に用いた各機能ブロックは、典型的には集積回路であるLSIとして実現される。これらは個別に1チップ化されても良いし、一部又は全てを含むように1チップ化されても良い。ここでは、LSIとしたが、集積度の違いにより、IC、システムLSI、スーパーLSI、ウルトラLSIと呼称されることもある。また、集積回路化の手法はLSIに限るものではなく、専用回路又は汎用プロセッサで実現しても良い。LSI製造後に、プログラムすることが可能なFPGA(Field Programmable Gate Array)や、LSI内部の回路セルの接続や設定を再構成可能なリコンフィギュラブル・プロセッサーを利用しても良い。さらには、半導体技術の進歩又は派生する別技術によりLSIに置き換わる集積回路化の技術が登場すれば、当然、その技術を用いて機能ブロックの集積化を行っても良い。例えば、バイオ技術の適用等が可能性としてありえる。
2006年8月22日出願の特願2006−225934の日本出願に含まれる明細書、図面および要約書の開示内容は、すべて本願に援用される。
本発明に係る並列剰余演算器及び並列剰余演算方法は、ターボ復号器などの出力が並列で入力され、デジタル情報の誤りを検出する通信システムにおいて、従来のCRC計算回路に代えて使用される新規な並列剰余演算器及び並列剰余演算方法として有用である。例えば、誤り訂正のために畳み込み符号、ターボ符号化等で符号化された送信データを復号するため、受信側で、ビタビ復号器やターボ復号器等の軟出力復号器や伝送誤りの有無を検出するための巡回符号を使用する受信装置や携帯電話等の通信端末装置に用いるに好適である。
本発明は、並列剰余演算器及び並列剰余演算方法に関し、例えば、ターボ復号器などの出力が並列で入力され、デジタル情報の誤りを検出する並列剰余演算器及び並列剰余演算方法に関する。
無線によるパケット通信や、光ディスクなどの記録ディスクなど、さまざまな分野でCRC(Cyclic Redundancy Check:巡回冗長検査)符号が用いられている。例えば、無線通信システムでは、無線回線を介して通信することから無線伝送路において送信データに誤りが発生する可能性があるので、CRCを使用した誤り訂正回路を設ける。送信側で送信データ列に基づいてCRCビットを生成し、それを送信データ列の後ろに付加する。CRCビットを付加したビット列は、畳み込み符号化やターボ符号化などの符号化方式を用いて符号化され、これにより得られる符号化ビット列が送信される。
CRC符号の原理については、非特許文献1に詳細に記載されている。
図1は、CRC符号の使われ方を説明する図である。
図1において、入力源(ソース)11からの入力データ列Aは、CRC符号化部12でCRC符号化され、送信データ列Bとして通信路13を介して受信側に送信される。通信路13は、例えば無線伝送路でありビット誤り(ノイズ)Eが付加される。受信側では、ビット誤りEが付加された送信データ列B’を受信し、CRC検査部14でCRC検査し、CRC検査に基づく受信データA’を出力側(シンク)15に渡す。無線通信システムが、誤り訂正能力が高いターボ符号化とARQ(Auto Repeat reQuest)とを組み合わせたHARQ(Hybrid Auto Repeat reQuest)の場合、CRC検査部14でCRCチェックを行い、誤りの発生状況を検出し、誤りが発生していない場合、データ列Aの受信データA’を出力するとともに、通信相手に送信するACK/NACK信号としてACK信号を形成する。これに対して、誤りが発生した場合、受信データを出力せずに、通信相手に送信するACK/NACK信号としてNACK信号を形成する。
より一般的に説明する。
nビットの入力データ列をA=[a0a1…an−2an−1]とする。a0がMSB(Most Significant Bit)、すなわち先に送信されるビットでる。a0,…,an−1をそれぞれGF(2)の元(すなわち、値0又は1をとる)とし、ビット列を次式(1)のように多項式で表す。
入力データ列Aは、CRC符号化され、次式(2)のBとなる。一般に用いられるCRC符号化では、nビットの入力データ列の後に長さcのビット列を追加することで行われる。追加されたcビットをCRCと呼ぶこともある。
B=[a0a1…ac−2ac−1r0r1…rc−2rc−1] …(2)
CRCの多項式表現を、次式(3)で表すとすると、Bの多項式表現は、次式(4)で示される。
B(D)=A(D)D
c+R(D) …(4)
CRC符号化は、あらかじめ定められたc次の多項式G(D)に対し、B(D)がG(D)で割り切れるようにR(D)が定められる。すなわち、A(D)D
cをG(D)で割った剰余がR(D)である。
上記G(D)は生成多項式と呼ばれ、次式(5)で示される。
以下では、生成多項式の次数cをCRCの次数と呼ぶ場合がある。
以上をまとめると、次式(6)になる。Q(D)はA(D)DcをG(D)で除した商である。
B(D)=A(D)Dc+R(D)=G(D)Q(D) …(6)
以上のようにしてCRC符号化されたn+cビットが、通信路13を介して送信される。通信路13では、ビット誤り(ノイズ)E(D)が付加される。
CRC検査は、受信値B’(D)=B(D)+E(D)がG(D)で割り切れるかどうかを検査することで行われる。受信値にビット誤りがなければ(すなわち、E(D)=0のとき)、B’(D)はG(D)で割り切れる。受信値にビット誤りがある場合、E(D)がG(D)で割り切れない場合にはB’(D)がG(D)で割り切れなくなる。したがって、通信路でビット誤りが発生したことを検出できる。E(D)がG(D)で割り切れる場合、誤りがあることをCRCにより検出できない。しかし、cが十分な長さを持っていればその発生確率は低い。cとしては、32〜8といった値がよく用いられる。
図2は、より実際的なシステムに適用したCRC符号の使われ方を説明する図である。
図2において、情報源(ソース)21からの入力データA(D)は、CRC符号化部22でCRC符号化され、CRC符号化されたデータB(D)は誤り訂正符号化部23で送信データC(D)として通信路24を介して受信側に送信される。送信側では、CRC符号化ののち、誤り訂正符号化が行われる。誤り訂正符号化の方法としては、リードソロモン符号、畳み込み符号、ターボ符号、などが用いられる。
通信路24において、ビット誤り(ノイズ)Eが付加されることがある。受信側では、ビット誤りEが付加された送信データ列C’(D)を受信し、誤り訂正復号部25で誤り訂正の復号を行って送信データB’(D)を出力し、CRC検査部26でCRC検査し、CRC検査に基づく受信データA’を出力側(シンク)27に渡す。受信側では、誤り訂正符号の復号が行われる。これにより、通信路24で加えられたビット誤りの大部分が取り除
かれる。CRC検査部26によるCRC検査では、誤り訂正復号で取りきれなかった誤りがあるかどうかを検査する。
(従来例1:逐次CRC計算回路)
図3は、一般的によく知られる逐次CRC計算回路の構成を示す図である。
図3において、逐次CRC計算回路30は、EXOR(排他的論理和)回路31と、[0]〜[c−1]のフリップフロップ(FF)32と、AND回路33とから構成される。
図3は、シフトレジスタを用いた一般的な構成であり、入力データ列の先頭から1bitずつ毎クロックサイクル入力する。
逐次CRC計算回路30のCRC符号化では、a[t]で示す入力端子に、a0〜an−1を1ビットずつ入力する。すべて入力した後、cビットのフリップフロップ(FF)に保持されている値が、CRC演算結果となる。
CRC検査では、受信したn+cビットのデータB’(D)を1ビットずつ入力した後、フリップフロップに残った値が0かどうかを判定する。又は、B’(D)の先頭のnビットを入力し、フリップフロップに残った値がB’(D)の残りのcビットと一致するかどうかを判定してもよい。
しかし、この構成では、入力がnビットの場合、CRC符号化に少なくともnクロックを要し、処理遅延時間が大きいという問題がある。
(従来例2:部分CRCを算出する方法)
特許文献1には、部分CRCを算出することで処理遅延時間を短縮する部分CRC算出方法が開示されている。
特許文献1では、剰余R(D)の計算式を次式(7)のように変形する。
ここで、D
n−l+c−imodG(D)(i=0〜n−1)の値(部分CRC)をあらかじめ求めておき、入力データをパラレルで一度に入力することで1クロックサイクルでCRCを求めることができる。
図4は、部分CRC回路の構成を示す図であり、上記式(7)においてn=16,c=24の場合の部分CRC回路を示す。
図4において、部分CRC回路40は、演算対象ビット列A[0]A[15]入力端子41と、各ビット列A[0]A[15]とあらかじめ算出された部分CRCのANDをとるAND回路42と、部分CRCをまとめる加算回路43とから構成される。
AND回路42では、あらかじめ算出された部分CRCの、各演算対象ビット列の有効値を部分CRC符号にデコードし、加算回路43では、演算対象ビット列全体に対するCRC符号を求める。
しかし、特許文献1に示される並列度nの構成では、nが大きくなると、回路規模がとても大きくなってしまう。並列度を下げ、データの一部を順次入力していくことも考えられるが、i=0〜n−1に対する任意の部分CRCを即座に計算することは回路規模や処理遅延の面から困難である。そこで、すべての部分CRCをあらかじめ求めておく必要があるが、nが大きい場合には、部分CRCを保持しておくメモリの容量が大きくなってしまい、コストの増大を招く。
(従来例3:サブブロックに分割する方法)
また、特許文献2,3には、データをサブブロックに分割して並列処理を行うサブブロック分割型並列CRC回路が開示されている。特許文献2,3では、剰余R(D)の計算式を次式(8)のように変形する。
すなわち、上記式(8)長さnのデータを、長さmとn−mに分割し、(a)長さn−mのCRC計算と、(b)長さmのCRC計算とに分解する。
しかし、このサブブロック分割方法では、(a)の結果にDmmodG(D)を乗算したのち、G(D)による剰余を計算しなければならない。これらの処理のため、乗算器と剰余計算器が追加で必要となり、回路規模及び処理遅延の増加を招いていた。
最も一般的な並列化方法として、シリアル・パラレル変換型の並列CRC回路がある。
図5A及び図5Bは、シリアル・パラレル変換型の並列CRC回路を示す図である。図5Aにおいて、S/P変換型並列CRC回路50は、S/P変換器51と、並列CRC回路52とから構成される。
S/P変換型並列CRC回路50は、図5Bに示すように、S/P変換器51により入力をシリアル・パラレル変換し、並列CRC回路52で並列処理によるCRC計算を行う。並列処理は、例えば1byteずつ処理する。この並列化方法は、ハード・ソフトいずれにおいても実装及び応用例が多い。
今井秀樹著、「符号理論」、電子情報通信学会、1990年3月
特開平8−149017号公報
特表2003−523682号公報
特開2005−6188号公報
しかしながら、このような従来のCRC計算回路にあっては、以下のような課題がある。
(1)上述したように、逐次CRC計算回路は、処理遅延時間が非常に大きく、部分CRC回路は、部分CRCを保持しておくメモリの容量が大きくなりコストの増大を招く。
(2)サブブロック分割型並列CRC回路は、以下の点で必要性が高い。
並列ターボデコーダの出力は、サブブロック分割型であるため、サブブロック分割型並列CRC回路を適用できれば、メモリを介さずに直接入力可能という利点がある。すなわち、並列ターボ復号器の出力をCRC計算回路に直接入力するため、並列CRC計算回路は、シリアル・パラレル変換型(例えば、先頭から1byteずつ処理)ではなく、サブブロック分割型(例えば、データ系列を長さMの小ブロックに分割)である必要がある。したがって、サブブロック分割型並列CRC回路は、S/P型並列CRC回路を使う場合に比べ、インターフェースとなるメモリが不要となり、処理遅延の削減、回路規模・電流の削減につながる。しかしながら、このサブブロック分割型並列CRC回路では、サブブロックに分割し並列処理するため、並列処理する複数CRC剰余発生器の後段に、乗算器と加算器などの剰余計算器が追加で必要となり、回路規模及び処理遅延の増加を招く。
(3)シリアル・パラレル変換型並列CRC回路では、インターフェースメモリが必要となり、このことは、処理遅延の増加をもたらし、ACK送信の遅れ、反復停止の遅れによる消費電流増加を招く。
上述したように、サブブロック分割型並列CRC回路は、サブブロック分割を行う並列ターボ復号器と組み合わせる場合には、利点が大きいが、従来のサブブロック分割型並列CRC回路は、処理遅延・回路規模が大きく、処理遅延・回路規模の小さいCRC回路が求められている。
本発明の目的は、処理遅延を小さくすることができ、追加の乗算回路・剰余回路を不要にして回路規模を小さくすることができる並列剰余演算器を提供することである。
本発明の並列剰余演算器は、入力データが複数のサブブロックに分割されて並列に入力される並列剰余演算器であって、前記各サブブロックの先頭点に対応する部分剰余を初期値として生成する初期値生成手段と、前記初期値生成手段から各サブブロックの先頭に対応する部分剰余を初期値として受け取り、残りの部分剰余を所定の漸化式に従って順次生成する部分剰余生成手段と、前記入力データと、前記部分剰余生成手段から出力される部分剰余の値の論理を計算する論理手段と、前記論理手段から出力される値を、累積的に加算する累積加算手段とを備える構成を採る。
本発明の並列剰余演算器は、入力データが複数のサブブロックに分割されて並列に入力される並列剰余演算器であって、前記各サブブロックの最終点に対応する部分剰余を初期値として生成する初期値生成手段と、前記初期値生成手段から各サブブロックの最終点に対応する部分剰余を初期値として受け取り、残りの部分剰余を所定の漸化式に従って順次
生成する逆順部分剰余生成手段と、前記入力データと、前記逆順部分剰余生成手段から出力される逆順部分剰余の値の論理を計算する論理手段と、前記論理手段から出力される値を、累積的に加算する累積加算手段とを備える構成を採る。
本発明の並列剰余演算方法は、長さnの入力データを長さn−mとmのデータ列に分割し、分割された個々のデータ列をサブブロックとするとき、最大次数cにおいて定められる多項式G(D)の値に応じて、 各サブブロックのi=0,mにおける先頭点の部分剰余であるDn−l+cmodG(D)とDn−l+c−mmodG(D)を初期値としてあらかじめ求めるステップと、前記Dn−l+cmodG(D)とDn−l+c−mmodG(D)を初期値として、i=1〜m−l及びi=m+l〜n−lに対応する部分剰余を、順次算出するステップとを有する。
本発明の並列剰余演算方法は、長さnの入力データを長さn−mとmのデータ列に分割し、分割された個々のデータ列をサブブロックとするとき、最大次数cにおいて定められる多項式G(D)の値に応じて、 各サブブロックのi=m−1,n−1における最終点の部分剰余であるDn−l+c−(m−1)modG(D)とDn−l+c−(n−1)modG(D)を初期値としてあらかじめ求めるステップと、前記Dn−l+c−(m−1)modG(D)とDn−l+c−(n−1)modG(D)を初期値として、i=m−2〜0及びi=n−2〜mに対応する逆順部分剰余を、順次算出するステップとを有する。
本発明によれば、処理遅延を小さくすることができ、部分CRCをすべて保存しておく必要が無く、また追加の乗算回路・剰余回路を不要にして回路規模を小さくすることができる。特に、サブブロック分割を行う並列ターボ復号器と組み合わせた場合に処理遅延を格段に小さくすることができる。
以下、本発明の実施の形態について、図面を参照して詳細に説明する。
(基本原理)
まず、本発明の基本原理について説明する。
本発明は、全体構成に関連する[ポイント1]、部分CRC生成回路に関連する[ポイント2]、部分CRC生成回路(逆順)に関連する[ポイント3]を有する。
[ポイント1]:全体構成に関連して
本発明では、剰余R(D)の計算式を次式(9)のように変形する。
すなわち、上記従来例2(部分CRCを算出する方法)と同様に、部分CRC(D
n−l+c−imodG(D))の和としてCRCを計算するよう式変形し、さらに、上記従来例3(サブブロックに分割する方法)と同様に、長さnのデータを長さn−mとmに分割する。以下、分割された個々のデータ列をサブブロックと呼ぶことにする。入力データは、上記式(9)中(a)に対応するa
0〜a
m−lと、(b)に対応するa
m〜a
n−lに分割され、それぞれを並列に計算することで高速計算を実現する。
このとき、本発明では、次のようにして部分剰余(部分CRC)を算出する。ここで、入力データは、上記式(9)中(a)に対応するサブブロック1は、a0から1ビットずつ順に、am−lまで、上記式(9)中(b)に対応するサブブロック2は、amから1ビットずつ順に、an−lまで、それぞれ与えられる(入力される)ものとする。
[手順1] i=0,mにおける部分CRCの値(すなわち、サブブロックの先頭点における部分CRC)Dn−l+cmodG(D))、Dn−l+c−mmodG(D))をあらかじめ求めておく。
[手順2] 上記の2つの値を初期値として、i=1〜m−l及びi=m+l〜n−lに対応する部分CRCを、順次算出する。
上記のような計算方法をとったので、本発明のサブブロック分割型並列CRC回路は、(1)部分CRCをすべて保存しておく必要が無く、(2)追加の乗算回路・剰余回路が
不要のため、小型・低遅延という特徴がある。
[ポイント2]:部分CRC生成回路に関連して
上記、サブブロックの先頭点における部分CRCを元に、その他の部分CRCを順次求める方法について、好適な計算方法について説明する。
生成多項式を次式(10)としたとき、通常用いられるCRCの生成多項式は、最低次の項の係数gc−1の値が1である、という特徴がある。
この特徴を利用すると、次式(11)に示す漸化式により、D
TmodG(D)の値からD
T−1modG(D)の値を容易に求めることができる。
以上から、次の手順により、上記[ポイント1]で述べた並列CRC計算を効率よく実現できる。
[手順1’] DM
n−l+c(D)=D
n−l+cmodG(D)及びDM
n−l+c−m(D)=D
n−l+c−mmodG(D)をあらかじめ求めておく。
[手順2’] DM
n−l+c(D)を元に、i=1〜m−1に対応する部分CRC(DM
n−l+c−l(D)〜DM
n−l+c−(m−l)(D))及び、i=m+1〜n−1に対応する部分CRC(DM
n−l+c−(m+l)(D)〜DM
n−l+c−n(D))を、順次求める。
上記のように、部分CRCをシフトレジスタを用いて順次計算する方法をとったので、本発明のサブブロック分割型並列CRC回路は、modG(D)上で定義される多項式の除算を行うことなく、小型の回路で部分CRCを算出することができる。
[ポイント3]:部分CRC生成回路(逆順)に関連して
上記では、各サブブロックのデータは、元のデータ順に従い順序良く入力する(例えば
a0〜am−l)としたが、逆順(例えばam−l〜a0)に入力するような並列CRC計算回路も実現できる。
すなわち、下記の算出式(12)において、サブブロック1では、am−l〜a0の順に、サブブロック2では、an−l〜amの順にデータを入力する。これは、ターボ復号器の出力を並列CRC計算器に直接入力するような場合に特に有効である。
部分CRCの生成手順は次の通りである。
[手順1] i=m−l,n−lにおける部分CRCの値(すなわち、サブブロックの最終点における部分CRC)D
n−l+c−(m−l)modG(D)、D
n−l+c−(n−l)modG(D)をあらかじめ求めておく。
[手順2] 上記の2つの値を初期値として、i=m−2〜0及びi=n−2〜mに対応する部分CRCを、順次算出する。
好適な方法では、次の漸化式(13)を用いると良い。
上記のように、部分CRCを逆順に順次生成する方法をとったので、本発明のサブブロック分割型並列CRC回路は、データが(部分的に)逆順になっている場合にも、並べ替え操作を行うことなく、CRC計算が行えるようになった。その結果、並べ替え操作のための処理遅延をなくすことができた。
(実施の形態1)
図6は、上記基本原理に基づく本発明の実施の形態1に係る並列剰余演算器の全体構成を示すブロック図である。本実施の形態は、上記[ポイント1]及び[ポイント2]に対応する例である。「ポイント」の説明では、データを2分割する(2並列)例を示したが、実施の形態1では、4並列の場合を例として説明する。すなわち、長さnの入力データをi=0〜m−1、i=m〜2m−1、i=2m〜3m−1、i=3m〜n―1の4つのサブブロックに分割する。また、CRCの長さを24ビット(c=24)とした。
図6において、並列CRC計算回路(並列剰余演算器)100は、入力端子101〜104(入力端子<1>〜<4>)、初期値生成部110、部分CRC生成部111〜114(部分CRC生成部<1>〜<4>)、AND部121〜124(AND部<1>〜<4>)、及び累積加算部130を備えて構成される。
初期値生成部110は、部分CRC生成部111〜114に入力する初期値I1〜I4(初期値<1>〜<4>)を生成する。具体的には、各サブブロックのi=0,m,2m,3mにおける先頭点の部分CRC(部分剰余)であるDn−l+cmodG(D)Dn−l+c−mmodG(D)とDn−l+c−2mmodG(D)とDn−l+c−3mmodG(D)を初期値として生成する。初期値生成部110の実装方法については、図14乃至図16により後述する。
部分CRC生成部111〜114(部分CRC生成部<1>〜<4>)は、それぞれのサブブロックの先頭に対応する部分CRCを初期値として初期値生成部110から受け取り、残りの部分CRCを漸化式に基づき順次生成する。部分CRC生成部111〜114の構成及び動作については、図8乃至図10により後述する。
AND部121〜124(AND部<1>〜<4>)は、入力端子101〜104から入力された1ビットと、部分CRC生成部111〜114から出力された24ビットの値のAND(論理積)を計算する。なお、部分CRCの値の論理を計算する論理回路であればよく、AND(論理積)には限定されない。AND部121〜124の構成及び動作については、図11及び図12により後述する。
累積加算部130は、AND部121〜124から出力される値を、累積的に加算する。この加算は、ビットごとの排他的論理和(EXOR)である。累積加算部130の構成及び動作については、図13により後述する。
以下、上述のように構成された並列剰余演算器の動作について説明する。まず、並列CRC計算回路100の全体の動作タイミングについて述べる。
本実施の形態では、データを4分割する4並列の場合を例に採る。また、CRCの長さを24ビット(c=24)としている。
入力データの長さをN[ビット]とし、サブブロック1〜3の長さをM[ビット]とし、サブブロック4のサイズを残りのN−3M[ビット]とするようにデータを分割した。この分割方法は一例であり、どのように定めてもよい。
図7は、データの入出力を示すタイミングチャートであり、入力データをA[n−1:0]のように表記した。また、図7中、tは時刻を表す。図6中の信号tは、明記していない。
入力端子101には、a1に示すサブブロック1のデータ(A[0]〜A[M−1])が、A[0]を先頭に1ビットずつ入力される。入力端子102には、a2に示すサブブロック2のデータ(A[M]〜A[2M−1])が、A[M]を先頭に1ビットずつ入力される。入力端子103,104も同様である。なお、上記の例では、サブブロック4のサイズは他のサブブロックと異なる(端数のため、他より1ビット少ない)とした。そこで、図7のa4に示すように、時刻M−1には、入力端子104には0を入力するようにした。
すべてのデータが入力されると、所望のCRCの値がCRC出力端子(r)から出力される。本実施の形態では、すべての入力が完了した後も、入力端子の値を0に保持している限り、出力端子(r)に所望のCRCの値が保持されるようになっている。
次に、並列CRC計算回路100の個々のモジュールについて説明する。
〔部分CRC生成部111〜114〕
図8は、部分CRC生成部111〜114が計算(担当)する部分CRCを表にまとめた図である。ここで、DM{T}(D)という表記を用いた。DM{T}(D)=DMT(D)=DTmodG(D)である。
部分CRC生成部111〜114(部分CRC生成部<1>〜<4>)は、それぞれのサブブロックの先頭(0、M、2M、3M)に対応する部分CRCを初期値として初期値生成回路110から受け取り、残りの部分CRCを前述した漸化式(11)に基づき順次生成する。
例えば、図8の表において、回路番号1の部分CRC生成部111は、入力データ番号0〜M−1、初期値をDM{N−1+c}(D)とするとき、生成する部分CRCはDM{N−1+c−1}(D)〜DM{N−1+c−(M−1)}(D)である。同様に、部分CRC生成部112〜114は、それぞれのサブブロックの先頭(M、2M、3M)に対応する部分CRCを初期値として残りの部分CRCを前記式(11)に基づき順次生成する。
次に、部分CRC生成部111を例に採り、さらに詳細に説明する。
図9は、部分CRC生成部111の回路構成を示す図である。部分CRC生成部111〜114は、同一構成をとるため部分CRC生成部111を代表して説明する。
図9において、部分CRC生成部111は、セレクタ201、Dフリップフロップ(FF)202、EXOR回路203、及びAND回路204から構成される。
部分CRC生成部111は、24ビット分のDフリップフロップ202を中心とした構成となっている。なお、フリップフロップが数珠繋ぎになっている構成はしばしばシフトレジスタとも呼ばれる。
I1[23:0]は初期値であり、g[23:0]は生成多項式を表す値である。例えば、生成多項式が次式(14)で定義されるとき、
g[0]=g[17]=g[18]=g[22]=g[23]=1,
g[1]=g[2]=...=g[15]=g[16]=g[19]=g[20]=g[21]=0
と定める。ここで、g[i]は、Dc−i−1の係数である。Dcの係数は常に1であるから、g[−1]を定義する必要はない。
G(D)=D24+D23+D6+D5+D+1 …(14)
16進数で表記すると、
g=C60001H
である。
p1[23:0]は、生成された部分CRCである。
次に、部分CRC生成部111の動作を説明する。
図10は、部分CRC生成部111の動作を示すタイミングチャートである。図10中、ldは制御信号で、ld=1のとき、初期値I1の値がシフトレジスタにロードされる。ここで、I1の値は、具体的には、図8表に示した通りDM{N−1+c}(D)である。図10のタイミングチャートでは、見易さのためN−1+c=98であるとした。
すると、時刻t=0には、ロードされた値そのものがA[0]に対応する部分CRCとして出力される。同時に、部分CRC生成部111内部では、次のDM[97]の値が漸化式
に基づき算出される。
回路図の信号名に従うと、計算式は次式(15)のようになる。なお、p1’は更新後の(例えばDM[97])、p1は更新前の(例えばDM[98])シフトレジスタの内容である。
p1’[23:0]={p1[22:0],0}+p1[23]*{g[22:0],1}
…(15)
上記式(15)中の+はビットごとの排他的論理和(EXOR)、*は論理積(AND)である。また、{p1[22:0],0}という表記は、シフト操作を表す。すなわち、p1の値を1ビット分上位方向にシフトし、LSBに0を挿入することを意味する。{g[22:0],1}は、同様にシフト操作であるが、LSBに1を挿入することを意味する。
以上のように、並列CRC計算回路100の部分CRC生成部111〜114は、シフトレジスタと、ビットごとのAND・EXORという簡易な構成のみで、入力データに合わせて適時必要な部分CRCを算出することができる。
〔AND部121〜124〕
AND部121〜124(AND部<1>〜<4>)は、入力端子101〜104から入力された1ビットと、上記部分CRC生成部111〜114から出力された24ビットの値のAND(論理積)を計算する。
図11は、AND部121の回路構成を示す図である。AND部121〜124は、同一構成をとるためAND部121を代表して説明する。
図11において、AND部121は、入力端子101から入力された1ビットと、部分CRC生成部111〜114から出力された24ビットの値のANDを計算するAND回路211から構成される。
図11に示すAND部121では、入力端子101から入力された1ビットと、部分CRC生成部111〜114から出力された24ビットの値のANDを計算する。すなわち、次式(15)において、aiとDn−l+c−imodG(D)の積をとる操作に相当する。
図12は、AND部121の動作を示すタイミングチャートである。図12において、時刻を表すtは、前記図10のtと共通である。すなわち、部分CRC生成部111〜114では、入力データと対応付けられるべき部分CRCをタイミング良く生成しているのである。
〔累積加算部130〕
図13は、累積加算部130の回路構成を示す図である。
図13において、累積加算部130は、EXOR回路211、フリップフロップ(FF)222、及びスイッチ回路223から構成される。
累積加算部130では、AND部<1>〜<4>から出力される値を、累積的に加算していく。ここで、加算はビットごとの排他的論理和(EXOR)である。すなわち、i=0〜23に対し、次式(16)に示す演算を行う。
s’[i]=s[i] EXOR q1[i] EXOR q2[i] EXOR q3[i] EXOR q4[i] …(16)
上記式(16)中、sは更新前のフリップフロップの値、s’は更新後のフリップフロップの値である。
〔初期値生成部110〕
初期値生成部110の実装方法について説明する。
サブブロックサイズMと生成多項式があらかじめ定められている場合は、必要なDn+ImodG(D)の値をあらかじめ求めておき、メモリ(RAMやROM)に保存しておけばよい。とりうるIの種類は少ないので、メモリ容量は少なくてよい。
本実施の形態では、サブブロックサイズMが固定値であるとすれば、DM{N−1+c}(D)、DM{N−1+c−M}(D)、DM{N−1+c−2M}(D)、DM{N−1+c−3M}(D)の4つの値のみ求めておけばよいので、メモリ容量は24ビット×4通り=96ビットのみでよい。
また、サブブロックサイズMや生成多項式が変更される場合にも、変更される度に、CPUやDSPを用いてソフトウェアにより値を求め、RAMに保存すればよい。
Dn+ImodG(D)(I=0〜N−1)は、次の漸化式(17)により求めることができる。T=c+I,I=0〜N−1である。
ここで、D
cmodG(D)=G(D)−D
cである。
上記の初期値生成を高速に行う必要がある場合には、次に示すようなハードウェアを用いるとよい。
図14は、初期値生成部110の構成を示すブロック図である。
図14において、初期値生成部110は、初期値候補生成部230、データ取得タイミング生成部231、データ取得部241〜244(データ取得部<1>〜<4>)、及び初期値記憶部251〜254(初期値記憶部<1>〜<4>)を備えて構成される。
図15は、上記初期値候補生成部230の回路構成を示す図である。
図15において、初期値候補生成部230は、セレクタ261、フリップフロップ(FF)262、EXOR回路263、及びAND回路264から構成される。
初期値候補生成部230は、Dn+ImodG(D)の値をI=0〜N−1まで順次求める。内部構成は、図15の通りである。
図16は、初期値生成部110の動作を示すタイミングチャートである。
データ取得部241(データ取得部<1>)は、部分CRC生成部111(図6参照)で使用する初期値DM{N−1+c}(D)を取得し、初期値記憶部251(初期値記憶部<1>)に保存する。すなわち、データ取得タイミング生成部231は、図16に示すように、初期値候補生成部230がDM{N−1+c}(D)を出力したときにld1にトリガ信号を送る。データ取得部241は、ld1のトリガ信号に応じて初期値候補生成部230の出力を取得することにより、初期値記憶部1に格納すべき値DM{N−1+c}を取得することができる。
同様に、DM{N−1+c−M}(D)が出力されるタイミングでld2にトリガ信号が出力され、DM{N−1+c−2M}(D)が出力されるタイミング(I=j=N−1−2M)でld3にトリガ信号が出力され、DM{N−1+c−3M}(D)が出力されるタイミング(I=k=N−1−3M)でld4にトリガ信号が出力される。
以上のように、本実施の形態によれば、並列CRC計算回路100は、入力データが複数のサブブロックに分割されて並列に入力される入力端子101〜104、各サブブロックの先頭点に対応する部分CRCを初期値として生成する初期値生成部110、各サブブロックの先頭に対応する部分CRCを初期値として受け取り、残りの部分CRCを所定の漸化式に従って順次生成する部分CRC生成部111〜114、部分CRCの値の論理積を計算するAND部121〜124、及びAND部121〜124から出力される値を累積的に加算する累積加算部130を備える。部分CRC生成では、m番目の入力の次数(n−1−m)に生成多項式の次数cを足した次数(i=n−1−m+c)について示される剰余R(D)の計算式を、部分CRC(Dn−l+c−imodG(D))の和で示される式に変形して、各サブブロックの先頭点に対応する部分CRCを生成している。これにより、本実施の形態では、処理遅延を小さくすることができ、追加の乗算回路・剰余回路を不要にして回路規模を小さくすることができる。具体的な効果は以下の通りである。
(1)従来構成では、分割した入力データのCRCを求めてから合成していたので、追加の乗算回路・剰余回路が必要となり、回路規模や処理遅延の増大を招いていた。本実施の形態では、並列度に応じた個数の部分CRC生成部111〜114を設けることにより、簡易な構成でサブブロック分割型の並列CRC計算を行うことができる。また、従来の乗算回路の代わりにAND回路が使用できるので遅延が小さい、さらに、最終段に追加の剰余計算回路が不要となり、遅延及び回路規模が小さい利点がある。
(2)従来例2のように従来構成では、あらかじめ部分CRCを求めておく必要があったため、入力データのサイズに比例して、記憶容量の増加を招いていた。これに対し、本実施の形態では、部分CRC生成部111〜114は、初期値を元に順次新たな値を生成するようにしたので、入力データのサイズにかかわらない回路規模・記憶容量で部分CRCを算出できる。
(3)本実施の形態では、部分CRCをシフトレジスタを用いて順次計算する方法をと
っているので、modG(D)上で定義される多項式の除算を行うことなく、小型の回路で部分CRCを算出できる。
このように、サブブロック分割型並列CRC回路の新しい構成を実現することができた。ターボ復号器と組み合わせて用いる場合に、処理遅延を少なくし、ACK/NACK送信までの遅延を短縮することができる。ターボ符号の反復復号を行う場合に、反復ごとに即座にCRC判定ができるので、復号を早期に停止し、消費電力を低減できる。ターボ復号器とCRC計算回路の間のインターフェースメモリへのアクセスを不要とできるので、消費電力を低減できる。
以上のように、特に、サブブロック分割を行う並列ターボ復号器と組み合わせた場合に処理遅延を格段に小さくすることができる。ターボ符号の種別を問わず、汎用に適用可能であり、実施も容易である。
(実施の形態2)
図17は、本発明の実施の形態2に係る並列剰余演算器の全体構成を示すブロック図である。図6と同一構成部分には同一符号を付している。
本実施の形態は、基本原理で述べた[ポイント3]に対応する例である。[ポイント3]では、サブブロックごとにデータ入力順を逆順にする例について述べた。データを4分割する4並列において、サブブロック<2>とサブブロック<4>を逆順にする場合を例として説明する。
図17において、並列CRC計算回路(並列剰余演算器)300は、入力端子101〜104(入力端子<1>〜<4>)、初期値生成部310、部分CRC生成部111,113(部分CRC生成部<1>,<3>)、逆順部分CRC生成部312,314(逆順部分CRC生成部<2>,<4>)、AND部121〜124(AND部<1>〜<4>)、及び累積加算部130を備えて構成される。
図17の並列CRC計算回路300は、サブブロックサイズをMとし、入力端子102,104についてのみデータの入力順を逆にした例である。
構成上の特徴は、次の通りである。
図6の並列CRC計算回路100と比較して、部分CRC生成部112,114を、それぞれ逆順部分CRC生成部312,314に変更した。また、逆順部分CRC生成回路312,314に入力する初期値を変更した。このため、初期値生成部310で生成する初期値は、図6の初期値生成部110と異なるが、構成は同一(図14参照)である。
図18は、逆順部分CRC生成部312の回路構成を示す図である。逆順部分CRC生成部312,314は、同一構成をとるため逆順部分CRC生成部312を代表して説明する。
図18において、逆順部分CRC生成部312は、セレクタ401、Dフリップフロップ(FF)402、EXOR回路403、及びAND回路404から構成される。
逆順部分CRC生成部312は、部分CRC生成部111(図9参照)と同様、24ビット分のDフリップフロップ402を中心とした構成となっているが、データの生成方向が逆方向である。
図19は、それぞれの部分CRC生成部、すなわち部分CRC生成部111,逆順部分CRC生成部312,部分CRC生成部113,逆順部分CRC生成部314が計算(担当)する部分CRCを表にまとめた図である。ここで、DM{T}(D)という表記を用いた。DM{T}(D)=DMT(D)=DTmodG(D)である。
図19の表に示すように、回路番号2,4の入力データ順が逆になっており、それに対応して初期値と部分CRCの生成順が変わっている。
基本原理の[ポイント3]で説明した通り、次の漸化式(18)に基づきDM{N−1+c−(2M−1)}(D)を初期値として、DM{N−1+c−(2M−2)}(D)〜DM{N−1+c−M}(D)の値を順次求めるものである。
正順の部分CRC生成部111,113では、Tが減少していく方向に算出したのに対し、逆順部分CRC生成部312,314では、Tが増加していく方向に算出しているのがわかる。
上述したように、初期値生成部310は、実施の形態1の部分CRC生成部111と同等の構成となる。但し、逆順部分CRC生成部312で必要とされる初期値は、DM{N−1+c−M}(D)ではなく、DM{N−1+c−(2M−1)}(D)であるから、ld2のトリガを発生するタイミングが異なる。すなわち、I=N−1−(2M−1)のタイミングでld2=1となる。ld4のタイミングについても同様であり、I=0のタイミングでl4=0となる。
図20は、初期値生成部310の動作を示すタイミングチャートである。並列CRC計算回路100の初期値生成部100の動作を示すタイミングチャート図16と比較すると、信号ld2とld4に対しトリガが出力されるタイミングが異なることが分かる。
このように、本実施の形態では、実施の形態1の効果に加えてさらに、サブブロックごとにデータの入力順を逆順に入力することができる。したがって、サブブロック分割を行う並列ターボ復号器と組み合わせる場合の親和性が高い。例えば、ターボ複合器でMax−log−MAP復号を行うとき、ターボ復号器の出力を本並列CRC計算回路(並列剰余演算器)300に直接入力することができる。特に、サブブロック分割を行う並列ターボ復号器と組み合わせた場合に処理遅延を格段に小さくすることができる。
以上の説明は本発明の好適な実施の形態の例証であり、本発明の範囲はこれに限定されることはない。
例えば、上記各実施の形態では、データを4分割する(4並列)の場合を例にとって説明したが、分割数やCRCのビット長さはこれに限定されない。
また、上記実施の形態1では、部分CRC生成部111は図10に示したように1クロックサイクルあたり1つの部分CRCを式(8)により計算するものとしたが、式(8)を繰り返し用いることにより、1クロックサイクルあたり2以上の部分CRCを計算するようにしても良い。例えば、部分CRC生成部111は、DM{N−1+c+i}(D)(
iは整数)から、2つの部分CRC、DM{N−1+c+i+1}(D)とDM{N−1+c+i+2}(D)を出力する。このような構成により、各入力端子101〜104には1クロックサイクルごとに2ビットのデータを入力することができるようになる。すなわち、データをサブブロック分割した上で、各サブブロックのデータをシリアル・パラレル変換する場合にも、本明細に「ポイント1」「ポイント2」として示した方法を用いて、簡易な構成で並列計算が可能となる。
また、上記実施の形態2では、サブブロック2,4を逆順にしたが、どのサブブロックを逆順にしてもよく、一部のサブブロックのみ逆順としてもよい。
また、本実施の形態では、並列剰余演算器及び並列CRC計算回路という名称を用いたが、これは説明の便宜上であり、CRC計算回路、誤り訂正回路、誤り訂正方法等であってもよい。
また、本発明を本アルゴリズムによる並列剰余演算器及び並列剰余演算方法が実現できればよく、ハードウェアで構成する場合は勿論のこと、並列剰余演算方法を機能させるためのソフトウェアで実現することも可能である。このソフトウェアはコンピュータで読み取り可能な記録媒体に格納されている。
また、上記各実施の形態の説明に用いた各機能ブロックは、典型的には集積回路であるLSIとして実現される。これらは個別に1チップ化されても良いし、一部又は全てを含むように1チップ化されても良い。ここでは、LSIとしたが、集積度の違いにより、IC、システムLSI、スーパーLSI、ウルトラLSIと呼称されることもある。また、集積回路化の手法はLSIに限るものではなく、専用回路又は汎用プロセッサで実現しても良い。LSI製造後に、プログラムすることが可能なFPGA(Field Programmable Gate Array)や、LSI内部の回路セルの接続や設定を再構成可能なリコンフィギュラブル・プロセッサーを利用しても良い。さらには、半導体技術の進歩又は派生する別技術によりLSIに置き換わる集積回路化の技術が登場すれば、当然、その技術を用いて機能ブロックの集積化を行っても良い。例えば、バイオ技術の適用等が可能性としてありえる。
2006年8月22日出願の特願2006−225934の日本出願に含まれる明細書、図面および要約書の開示内容は、すべて本願に援用される。
本発明に係る並列剰余演算器及び並列剰余演算方法は、ターボ復号器などの出力が並列で入力され、デジタル情報の誤りを検出する通信システムにおいて、従来のCRC計算回路に代えて使用される新規な並列剰余演算器及び並列剰余演算方法として有用である。例えば、誤り訂正のために畳み込み符号、ターボ符号化等で符号化された送信データを復号するため、受信側で、ビタビ復号器やターボ復号器等の軟出力復号器や伝送誤りの有無を検出するための巡回符号を使用する受信装置や携帯電話等の通信端末装置に用いるに好適である。
CRC符号の使われ方を説明する図
実際的なシステムに適用したCRC符号の使われ方を説明する図
従来のCRC計算回路の構成を示す図
従来の部分CRC回路の構成を示す図
従来のシリアル・パラレル変換型の並列CRC回路を示す図
従来のシリアル・パラレル変換型の並列CRC回路を示す図
本発明の実施の形態1に係る並列剰余演算器の全体構成を示すブロック図
上記実施の形態1に係る並列剰余演算器のデータの入出力を示すタイミングチャート
上記実施の形態1に係る並列剰余演算器の部分CRC生成部が計算する部分CRCを表にまとめた図
上記実施の形態1に係る並列剰余演算器の部分CRC生成部の回路構成を示す図
上記実施の形態1に係る並列剰余演算器の部分CRC生成部の動作を示すタイミングチャート
上記実施の形態1に係る並列剰余演算器のAND部の回路構成を示す図
上記実施の形態1に係る並列剰余演算器のAND部の動作を示すタイミングチャート
上記実施の形態1に係る並列剰余演算器の累積加算部の回路構成を示す図
上記実施の形態1に係る並列剰余演算器の初期値生成部の構成を示すブロック図
上記実施の形態1に係る並列剰余演算器の初期値候補生成部の回路構成を示す図
上記実施の形態1に係る並列剰余演算器の初期値生成部の動作を示すタイミングチャート
本発明の実施の形態2に係る並列剰余演算器の全体構成を示すブロック図
上記実施の形態2に係る並列剰余演算器の逆順部分CRC生成部の回路構成を示す図
上記実施の形態2に係る並列剰余演算器のそれぞれの部分CRC生成部が計算する部分CRCを表にまとめた図
上記実施の形態2に係る並列剰余演算器の初期値生成部の動作を示すタイミングチャート