JP2011130333A - 巡回冗長検査符号生成回路及び巡回冗長検査符号生成方法 - Google Patents

巡回冗長検査符号生成回路及び巡回冗長検査符号生成方法 Download PDF

Info

Publication number
JP2011130333A
JP2011130333A JP2009288971A JP2009288971A JP2011130333A JP 2011130333 A JP2011130333 A JP 2011130333A JP 2009288971 A JP2009288971 A JP 2009288971A JP 2009288971 A JP2009288971 A JP 2009288971A JP 2011130333 A JP2011130333 A JP 2011130333A
Authority
JP
Japan
Prior art keywords
cyclic redundancy
redundancy check
crc code
parallel data
check code
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.)
Pending
Application number
JP2009288971A
Other languages
English (en)
Inventor
Masayuki Tanaka
正行 田中
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.)
Fujitsu Ltd
Original Assignee
Fujitsu 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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2009288971A priority Critical patent/JP2011130333A/ja
Priority to US12/970,651 priority patent/US8433974B2/en
Publication of JP2011130333A publication Critical patent/JP2011130333A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • 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/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/09Error detection only, e.g. using cyclic redundancy check [CRC] codes or single parity bit
    • H03M13/091Parallel or block-wise CRC computation

Landscapes

  • Engineering & Computer Science (AREA)
  • Computing Systems (AREA)
  • Physics & Mathematics (AREA)
  • Probability & Statistics with Applications (AREA)
  • Theoretical Computer Science (AREA)
  • Error Detection And Correction (AREA)
  • Detection And Correction Of Errors (AREA)

Abstract

【課題】並列データのCRC符号を演算する演算回路において、論理演算回路が1クロックサイクルで行う論理演算の段数を低減する。
【解決手段】巡回冗長検査符号生成回路1は、1個以上の並列データを逐次入力し、各並列データについて、並列データと、初期値又は先行して演算された巡回冗長検査符号と、に基づいて巡回冗長検査符号を算出する所定演算を反復する。巡回冗長検査符号生成回路1は、上記の所定演算を並列データの桁方向に分割した部分演算のそれぞれを、異なるパイプライン段において、初期値と並列データとに基づいて実行する複数の部分演算部200、201と、初期値と前記先行して演算された巡回冗長検査符号とに基づいて、部分演算部200、201によって演算された巡回冗長検査符号を補正する補正部3と、を備える。
【選択図】図2

Description

本明細書で論じられる実施態様は、巡回冗長検査符号生成回路及び巡回冗長検査符号生成方法に関する。
現在、様々な巡回冗長検査(CRC: Cyclic Redundancy Check)符号の生成方法が提案されている。例えば、並列入力データによるCRCの演算を並列入力データを再展開し割り算の部分演算をパイプライン処理によって行うCRC符号演算方法が提案されている。この方法は、並列展開にともなう排他的論理和回路網内の回路段数の増加を抑制し、演算処理を高速化することを意図する。
この方法では、入力端子から入力したデータを展開回路によってワード単位に二つに展開し、二つの第一部分演算回路と、一つの第二部分演算回路によって入力データに対するCRC符号を演算する。CRC符号生成時は、セレクタ回路によって最終データワードにCRC符号を付加して、偶数ワード側出力端子および奇数ワード側出力端子よりデータおよびCRC符号を出力する。CRC符号検査時は、全データを入力後に判定回路によってデータ誤りの可否について判定し、誤りが検出されれば判定回路の出力端子にhigh信号を出力する。
また、割算回路やROMを使わずに、予め計算されたいくつかのCRC符号をもとに、論理回路を組み、必要最小限の情報でCRC符号を生成するCRC符号生成方法が提案されている。この方法は、nビットの演算対象ビット列のそれぞれのビットに対応した、n個の部分CRC符号群を予め演算する手順と、nビットの演算対象ビット列の各ビットの有効値によって、前記部分CRC符号群の値を使って、前記nビットの演算対象ビット列全体に対するCRC符号を求める手順とを含む。前記CRC符号を求める手順は、nビットの演算対象ビット列の各ビットの有効値を、部分CRC符号にデコードし、排他的論理和をとることで、前記nビットの演算対象ビット列全体に対するCRC符号を求める。
また、生成多項式の次数を超える並列数で処理することができる誤り検出符号生成回路が提案されている。この方法では、データ列を1,2,...,nのn本のデータ系列に分割し、分割したそれぞれのデータ系列をそれぞれ独立に処理し、それぞれのデータ系列の全てのデータの処理が終了した後それぞれの処理結果の排他的論理和をとる。各処理は、入力するデータ系列の最終データより前のデータ系列に対して分割数nに応じた演算を行い、各処理手段に入力する最終データに対してデータ系列1,2,...,nに応じた演算を行う。
特開平8−330976号公報 特開平8−149017号公報 特開平9−64754号公報
並列データのCRC符号を演算する論理演算の論理段数は、並列データのビット数の増加に伴って増加する。実施態様に係る装置及び方法は、並列データのCRC符号を演算する演算回路において、論理演算回路が1クロックサイクルで行う論理演算の段数を低減することを目的とする。
実施例の一態様によれば、1個以上の並列データを逐次入力し、各並列データについて、並列データと、初期値又は先行して演算された巡回冗長検査符号と、に基づいて巡回冗長検査符号を算出する所定演算を反復することにより、1個以上の並列データに対する巡回冗長検査符号を生成する巡回冗長検査符号生成回路が与えられる。
この巡回冗長検査符号生成回路は、上記の所定演算を並列データの桁方向に分割した部分演算のそれぞれを、異なるパイプライン段において、初期値と並列データとに基づいて実行する複数の部分演算部と、初期値と前記先行して演算された巡回冗長検査符号とに基づいて、部分演算部によって演算された巡回冗長検査符号を補正する補正部と、を備える。
実施例の他の態様によれば、1個以上の並列データを逐次受信し、各並列データについて、並列データと、初期値又は先行して演算された巡回冗長検査符号と、に基づいて巡回冗長検査符号を算出する所定演算を反復することにより、1個以上の並列データに対する巡回冗長検査符号を生成する巡回冗長検査符号生成方法が与えられる。
この巡回冗長検査符号生成方法では、上記の所定演算を並列データの桁方向に分割した部分演算のそれぞれを、異なるパイプライン段において、初期値と並列データとに基づいて実行し、初期値と先行して演算された巡回冗長検査符号とに基づいて、部分演算によって演算された巡回冗長検査符号を補正する。
本件開示の装置又は方法によれば、並列データのCRC符号を演算する演算回路において、論理演算回路が1クロックサイクルで行う論理演算の段数が低減される。
並列データに対するCRC符号の演算方法の説明図である。 CRC符号生成回路における第1実施例の構成図である。 図2に示すCRC演算部の構成例を示す図である。 図2に示す補正部の構成例を示す図である。 データフォーマットの第1例のタイミングチャートである。 CRC符号生成回路における第2実施例の構成図である。 図6に示すCRC演算部の構成例を示す図である。 データフォーマットの第2例の説明図である。 CRC符号生成回路における第3実施例の構成図である。 図9に示すCRC演算部の構成例を示す図である。 図9に示す補正部の構成例を示す図である。 CRC符号生成回路における第4実施例の構成図である。 図12に示すシフトレジスタの構成例を示す図である。 図12に示すCRC演算部の構成例を示す図である。 図12に示すセレクト信号生成部の構成例を示す図である。 図12に示す補正部の構成例を示す図である。 データフォーマットの第3例のタイミングチャートである。 CRC符号生成回路における第5実施例の構成図である。 図18に示すCRC演算部の構成例を示す図である。 図18に示す補正部の構成例を示す図である。 CRC符号生成回路における第6実施例の構成図である。 図21に示すシフトレジスタの構成例を示す図である。 図21に示すセレクト信号生成部の構成例を示す図である。 図21に示すCRC演算部の構成例を示す図である。 図21に示す補正部の構成例を示す図である。
以下、添付する図面を参照して本発明の実施例について説明する。まず、並列データに対するCRC符号の演算方法について説明する。図1は、並列データに対するCRC符号の演算方法の説明図である。CRC符号生成回路800は、演算部801と、セレクタ802と、フリップフロップ803〜808を備える。
フリップフロップ803〜808は、前段から入力される信号をクロックエッジにて新たに保持し、次のクロックエッジが到来するまで後段へ出力し続ける状態論理要素である。以下に説明される他の実施例において使用されるフリップフロップについても同様である。
演算部801は、フリップフロップ803から順次出力される一連のmビットの並列データに対する、xビットのCRC符号を算出する。演算部801は、フリップフロップ803から順次出力される一連のmビットの並列データを入力Dとして受信し、セレクタ802から出力されるCRC符号を入力Cとして受信する。演算部801は、入力Cと入力Dの間で所定の論理演算を行いxビットのCRC符号を算出する。演算部801は、算出されたCRC符号をフリップフロップ806へ出力する。
例として、並列データの桁数が4ビットであり(m=4)、生成多項式が「1+X2+X5」である場合のCRC符号を演算する論理式を以下に示す。
CRC(0) = d(3) xor d(0) xor c(1) xor c(4)
CRC(1) = d(1) xor c(2)
CRC(2) = d(3) xor d(2) xor d(0) xor c(1) xor c(3) xor c(4)
CRC(3) = d(3) xor d(1) xor c(2) xor c(4)
CRC(4) = d(2) xor c(0) xor c(3)
上式において、CRC(0)〜CRC(4)は、演算結果のCRC符号の下位第1ビット〜第5ビットの値を示す。また、d(0)〜d(3)は、入力Dの下位第1ビット〜第4ビットの値を示す。c(0)〜c(4)は、入力Cの下位第1ビット〜第5ビットの値を示す。
セレクタ802は、一連の並列データの先頭データの入力タイミングを示すスタートパルスSPの値に従って、初期値及びフリップフロップ806の出力のいずれかを入力Cとして演算部801に入力する。フリップフロップ806の出力は、前回のクロックサイクルにおける演算部801の演算結果、すなわち、今回のクロックサイクルに先行して、前回のクロックサイクルまでに入力された一連の並列データに対して演算されたCRC符号である。
セレクタ802のシンボルの表記法について説明する。入力線「SEL」にはセレクト信号が入力される。セレクト信号の値が「1」であるとき(又は、セレクト信号がアサートされているとき)、入力線「1」への入力値が出力810として出力される。セレクト信号の値が「0」であるとき(又は、セレクト信号がアサートされていないとき)、入力線「0」への入力値が出力810として出力される。以下の説明において参照される他の図面上のセレクタのシンボルについても、上述の表記法が使用される。
本例では、スタートパルスSPの値が「1」(先頭データの入力タイミングを示す値)であるとき、セレクタ802は、入力線「1」への入力値である初期値を出力する。一方で、セレクタ802は、スタートパルスSPの値が「0」(先頭データの入力タイミング以外の期間を示す値)であるとき、入力線「0」への入力値であるフリップフロップ806の出力を出力する。
したがって、先頭データが入力されたクロックサイクルでは、演算部801は、初期値と先頭データとの間で論理演算を行うことによりCRC符号を算出する。それ以降のクロックサイクルでは、演算部801は、前回のクロックサイクルまでに入力された一連の並列データに対するCRC符号と、今回のクロックサイクルで入力された並列データとの間で論理演算を行うことによりCRC符号を算出する。
フリップフロップ807及び808は、並列データへCRC符号を挿入するタイミングを示すエンドパルスEPに対して遅延を与え、エンドパルスEPと、データ及びCRC符号とを同期させる。
次に、CRC符号生成回路の実施例を説明する。図2は、CRC符号生成回路における第1実施例の構成図である。CRC符号生成回路1は、順次出力される一連の128ビットの並列データに対する32ビットのCRC符号を算出する。なお本明細書の説明において使用する並列データ及びCRC符号の桁数はあくまで例示であって、実施例の形態を制限するものではない。CRC符号生成回路1は、CRC演算部2と、補正部3と、シフトレジスタ4と、セレクタ5と、フリップフロップ10〜15を備える。
CRC演算部2は、各クロックサイクルで順次入力される並列データについて、CRC符号を演算する。図3は、図2に示すCRC演算部2の構成例を示す図である。CRC演算部2は、64bit部分演算部200及び201と、フリップフロップ250〜255を備える。
64bit部分演算部200は、128ビットの並列データのうち上位64ビットに対するCRC符号の演算を行い、64bit部分演算部201は、128ビットの並列データのうち下位64ビットに対するCRC符号の演算を行う。以下の説明において、並列データの上位64ビットを「上位データ」と表記することがある。また、並列データの下位64ビットを「下位データ」と表記することがある。
同じクロックサイクルで入力された上位データ及び下位データと、この上位データに対して算出されたCRC符号は、フリップフロップ250、252及び251に保持される。64bit部分演算部201は、次のクロックサイクルで、フリップフロップ252に保持された下位データと、フリップフロップ251に保持されたCRC符号に基づいて、下位データに対するCRC符号を計算する。
すなわち、64bit部分演算部200及び201は、128ビットの並列データに対するCRC符号を演算する論理演算を並列データの桁方向に分割した部分演算を、異なるパイプライン段において実行する。フリップフロップ250〜252は、パイプライン段の間を区切るパイプラインレジスタとして動作する。
CRC符号を演算する論理演算を複数の部分演算に分割することにより、各部分演算を行う論理演算回路が行う論理演算の段数が、分割前の論理演算の段数よりも小さくなる。このため、論理演算回路が1クロックサイクルで行う論理演算の段数が低減され、1クロックサイクル内で行われる論理演算の演算時間が短くなる。これにより、CRC符号演算回路において、フリップフロップなどの状態論理要素から入力信号を読み出してから演算結果を状態論理要素に格納するまでの期間に与える、タイミングマージンを確保しやすくなる。
しかし、上述のようなパイプライン処理でCRC符号を演算する場合、複数のクロックサイクルに亘って1つの並列データに対するCRC符号の演算が行われる。このため、先行して演算されたCRC符号を用いて後続するCRC符号の演算を開始することができない。
そこで、本実施では、CRC演算部2は、初期値と並列データに基づいてCRC符号を演算する。このため、64bit部分演算部200は、入力される128ビットの並列データのうち上位データと、初期値に基づいてCRC符号を演算する。そして補正部3は、CRC演算部2から出力されたCRC符号を、このCRC符号に先行して演算されたCRC符号と初期値とに基づいて補正する。
セレクタ5は、スタートパルスSPに従って、補正されていないCRC符号、すなわちCRC演算部2の最終パイプライン段の64bit部分演算部201から出力されるCRC符号と、補正部3により補正されたCRC符号のうち一方を選択する。セレクタ5は、選択されたCRC符号をフリップフロップ12に出力する。
並列データの先頭データに対して演算されたCRC符号は補正の必要がないので、セレクタ5は、並列データの先頭データに対して演算されたCRC符号として、64bit部分演算部201から出力されるCRC符号を選択する。セレクタ5は、先頭データ以外のデータに対して演算されたCRC符号として、補正部3から出力される補正後のCRC符号を選択する。
図4は、図2に示す補正部3の構成例を示す図である。補正部3は、128bit部分演算部300及び301と、XOR回路302及び303を備える。補正部3は、CRC演算部2の最終パイプライン段の64bit部分演算部201から出力され、フリップフロップ255に保持されたCRC符号を、補正対象のCRC符号として入力する。
128bit部分演算部300及び301は、入力線「C」に入力されたCRC符号又は初期値に基づいて、全てのビットの値が「0」である128bitの並列データに対するCRC符号を演算する。128bit部分演算部300の入力線「C」には初期値が入力され、128bit部分演算部301の入力線「C」には、フリップフロップ12から出力されるCRC符号が入力される。フリップフロップ12から出力されるCRC符号は、補正対象のCRC符号に対して1クロックサイクル先行して演算されたCRC符号である。
XOR回路302は、128bit部分演算部300及び301の出力同士の排他的論理和を出力することにより、補正対象のCRC符号に対する補正値を算出する。XOR回路303は、この補正値と補正対象のCRC符号との排他的論理和を出力する。すなわち、XOR回路303は、上記補正値によって補正対象のCRC符号を補正し、補正されたCRC符号を算出する。XOR回路303の出力はセレクタ5の入力線「0」へ入力される。
以下、補正部3による補正処理について説明する。説明の簡単のため、並列データの桁数が4ビットであり、生成多項式が「1+X2+X5」である場合のCRC符号を補正する場合を例示する。補正対象のCRC符号に対して1クロックサイクル先行して演算されたCRC符号(以下、単に「先行CRC符号」と表記することがある)に代えて、初期値を使ってCRC符号を演算した場合の誤差DIFFは、以下の通りである。
DIFF(0) = (d(3) xor d(0) xor c1(1) xor c1(4))
xor (d(3) xor d(0) xor c2(1) xor c2(4))
DIFF(1) = (d(1) xor c1(2))
xor (d(1) xor c2(2))
DIFF(2) = (d(3) xor d(2) xor d(0) xor c1(1) xor c1(3) xor c1(4))
xor (d(3) xor d(2) xor d(0) xor c2(1) xor c2(3) xor c2(4))
DIFF(3) = (d(3) xor d(1) xor c1(2) xor c1(4))
xor (d(3) xor d(1) xor c2(2) xor c2(4))
DIFF(4) = (d(2) xor c1(0) xor c1(3))
xor (d(2) xor c2(0) xor c2(3))
上式において、DIFF(0)〜DIFF(4)は、誤差DIFFの下位第1ビット〜第5ビットの値を示す。また、d(0)〜d(3)は、並列データの下位第1ビット〜第4ビットの値を示す。c1(0)〜c1(4)は、初期値の下位第1ビット〜第5ビットの値を示す。c2(0)〜c2(4)は、先行CRC符号の下位第1ビット〜第5ビットの値を示す。
並列データに関する項d(0)〜d(3)を省略することにより、誤差DIFF(0)〜DIFF(4)は、以下の通り表すことができる。
DIFF(0) = (c1(1) xor c1(4)) xor (c2(1) xor c2(4))
DIFF(1) = (c1(2)) xor (c2(2))
DIFF(2) = (c1(1) xor c1(3) xor c1(4)) xor (c2(1) xor c2(3) xor c2(4))
DIFF(3) = (c1(2) xor c1(4)) xor (c2(2) xor c2(4))
DIFF(4) = (c1(0) xor c1(3)) xor (c2(0) xor c2(3))
128bit部分演算部300は、誤差DIFFを演算する論理式のうち、初期値に含まれるビット同士の排他的論理和により形成される項を演算する。128bit部分演算部301は、誤差DIFFを演算する論理式のうち、先行CRC符号に含まれるビット同士の排他的論理和により形成される項を演算する。XOR回路302は、これら2つの排他的論理和同士の排他的論理和を、誤差DIFFすなわち補正値として演算する。
誤差DIFFに関する上記の演算式は並列データに関する項を含まないため、補正部3の論理段数は並列データの値に依存しない。また、補正部3の論理段数は、生成多項式の項数の2倍を超えることはない。このため、補正部3にて使用される論理演算回路においても、状態論理要素から入力信号を読み出してから演算結果を状態論理要素に格納するまでの期間に与える、タイミングマージンが確保し易くなる。なお、初期値として固定値を使用すれば、128bit部分演算部300による論理演算は不要になるため、論理段数を更に低減させ、回路規模を小さくすることができる。
図2を参照する。シフトレジスタ4は、フリップフロップ400〜403を備える。シフトレジスタ4は、CRC演算部2にて演算されるCRC符号や、CRC演算部2の内部で遅延する並列データに対して、スタートパルスSP及びエンドパルスEPを同期させる。
図2に示すCRC符号生成回路1は、図5に示すデータフォーマットを有する並列データに使用される。図5は、データフォーマットの第1例のタイミングチャートである。図5の第1段は、クロックのタイミングエッジの発生タイミングを示し、第2段は、スタ−トパルスSPを示し、第3段はエンドパルスEPを示す。
図5の第4段は、並列データを示す。データ中の「ヘッダ」は並列データの先頭に付加されたヘッダ情報を意味し、データ中の「CRC32」はCRC符号を意味する。このフォーマットの例では、ヘッダは上位データに挿入される。また、CRC符号は並列データの下位データに挿入される。例えば、クロックサイクル900において、ある並列データの入力が開始すると、クロックサイクル900においてスタートパルスSPがアサートされる。クロックサイクル900における上位データにはヘッダが挿入される。
クロックサイクル901においてエンドパルスEPがアサートされることにより、クロックサイクル901の並列データの下位データにはCRC符号が挿入されることが示される。
本実施例によれば、CRC符号生成回路1に使用される論理演算回路が1クロックサイクルで行う論理演算の段数が低減される。これにより、CRC符号演算回路1において、フリップフロップなどの状態論理要素から入力信号を読み出してから演算結果を状態論理要素に格納するまでの期間に与える、タイミングマージンを確保しやすくなる。
また、以下に説明するように、CRC符号の論理演算の分割数は「2」に限定されない。CRC演算部2は、CRC符号の論理演算を3個以上の部分演算に分割してもよい。CRC符号の論理演算の分割数を増やすと、フリッププロップなどの状態論理要素の数の増加などに起因して回路規模が大きくなる。しかし、この分割数は、設計条件に応じて容易に最適化することができる。
続いて、他のCRC符号生成回路の実施例について説明する。図2に示すCRC符号生成回路1は、128ビットの並列データを、半分ずつ分割してパイプライン処理を行ったが、並列データの分割数は3以上でもよい。また、各パイプライン段において、異なる桁数の並列データについてCRC符号が演算されてもよい。
図6は、CRC符号生成回路における第2実施例の構成図である。別途説明する場合を除き、図2に示す構成要素と同様の構成要素には図2で使用した参照符号と同じ参照符号を付する。
CRC演算部2は、128ビットの並列データに対するCRC符号の演算を、3つの部分演算に分割する。1つの部分演算は、並列データの第1〜第43ビット(計43ビット)に対するCRC符号の演算である。他のもう1つの部分演算は、並列データの第44〜第86ビット(計43ビット)に対するCRC符号の演算である。残りの部分演算は、並列データの第87〜第128ビット(計42ビット)に対するCRC符号の演算である。以下の説明において、並列データの第87〜第128ビットを「第1部分データ」と記載することがある。また並列データの第44〜第86ビットを「第2部分データ」と記載することがある。また並列データの第1〜第43ビットを「第3部分データ」と記載することがある。
シフトレジスタ4は、フリップフロップ400〜405を備える。シフトレジスタ4は、CRC演算部2にて演算されるCRC符号や、CRC演算部2の内部で遅延する並列データに対して、スタートパルスSP及びエンドパルスEPを同期させる。
図7は、図6に示すCRC演算部2の構成例を示す図である。CRC演算部2は、42bit部分演算部202と、43bit部分演算部203及び204と、フリップフロップ260〜271を備える。42bit部分演算部202は、第1部分データに対するCRC符号の演算を行う。43bit部分演算部203は、第2部分データに対するCRC符号の演算を行う。43bit部分演算部204は、第3部分データに対するCRC符号の演算を行う。
同じクロックサイクルで入力された第1部分データ、第2部分データ及び第3部分データ、及びこの第1部分データに対して算出されたCRC符号は、それぞれフリップフロップ260、262、263及び261に保持される。43bit部分演算部203は、次のクロックサイクルで、フリップフロップ262に保持された第2部分データと、フリップフロップ261に保持されたCRC符号に基づいて、第2部分データに対するCRC符号を計算する。
また、フリップフロップ264、265、267及び266には、同じクロックサイクルで入力された第1部分データ、第2部分データ及び第3部分データ、及びこの第2部分データに対して算出されたCRC符号が保持される。43bit部分演算部204は、次のクロックサイクルで、フリップフロップ267に保持された第3部分データと、フリップフロップ266に保持されたCRC符号に基づいて、第3部分データに対するCRC符号を計算する。
すなわち、42bit部分演算部202、並びに43bit部分演算部203及び204は、128ビットの並列データに対するCRC符号を演算する論理演算を並列データの桁方向に分割した部分演算を、異なるパイプライン段において実行する。フリップフロップ260〜267は、パイプライン段の間を区切るパイプラインレジスタとして動作する。
本実施例によれば、CRC符号の論理演算を3個以上に分割して、パイプライン処理によってCRC符号を演算することが可能となる。論理演算の分割数を増やすことによって、論理演算に使用される論理演算回路が1クロックサイクルで行う論理演算の段数がさらに低減される。
続いて、他のCRC符号生成回路の実施例について説明する。図8は、データフォーマットの第2例の説明図である。図8の第1段は、クロックのタイミングエッジの発生タイミングを示し、第2段は、第1スタ−トパルスSP1を示し、第3段は、第2スタ−トパルスSP2を示す。図8の第4段は、第1エンドパルスEP1を示し、第5段は、第2エンドパルスEP2を示す。
図8の第6段は、並列データを示す。データ中の「ヘッダ」は並列データの先頭に付加されたヘッダ情報を意味し、データ中の「CRC32」はCRC符号を意味する。このフォーマットの例では、上位データ及び下位データのどちらにもヘッダ及びCRC符号が挿入される場合がある。
第1スタ−トパルスSP1は、上位データが並列データの先頭を含むクロックサイクルにてアサートされる。第2スタ−トパルスSP2は、下位データが並列データの先頭を含むクロックサイクルにてアサートされる。第1エンドパルスEP1は、上位データへCRC符号を挿入するクロックサイクルにてアサートされる。第2エンドパルスEP2は、下位データへCRC符号を挿入するクロックサイクルにてアサートされる。
例えば、クロックサイクル910において、上位データが並列データの先頭を含むと、クロックサイクル910において第1スタートパルスSP1がアサートされる。クロックサイクル910における上位データにヘッダが挿入される。クロックサイクル911において第2エンドパルスEP2がアサートされることにより、クロックサイクル911の並列データの下位データにはCRC符号が挿入されることが示される。
また例えば、クロックサイクル912において、下位データが並列データの先頭を含むと、クロックサイクル912において第2スタートパルスSP2がアサートされる。クロックサイクル912における下位データにはヘッダが挿入される。クロックサイクル913において第1エンドパルスEP1がアサートされることにより、クロックサイクル913の上位データにはCRC符号が挿入されることが示される。
図9は、図8に示すフォーマットのデータについてCRC符号を演算するCRC符号生成回路の実施例の構成図である。別途説明する場合を除き、図2に示す構成要素と同様の構成要素には図2で使用した参照符号と同じ参照符号を付する。CRC符号生成回路1は、CRC演算部2と、補正部3と、シフトレジスタ4と、セレクタ50及び51と、セレクト信号生成部6と、フリップフロップ10〜19を備える。
シフトレジスタ4は、フリップフロップ410〜417を備える。シフトレジスタ4は、CRC演算部2にて演算されるCRC符号や、CRC演算部2の内部で遅延する並列データに対して、第1スタートパルスSP1、第2スタートパルスSP2、第1エンドパルスEP1及び第2エンドパルスEP2を同期させる。
CRC演算部2は、上位データへの挿入用に生成される第1CRC符号を、補正部3及びセレクタ51へ出力する。またCRC演算部2は、下位データへの挿入用に生成される第2CRC符号を、補正部3及びセレクタ50へ出力する。
図10は、図9に示すCRC演算部2の構成例を示す図である。図3に示す構成要素と同様の構成要素には図3で使用した参照符号と同じ参照符号を付する。CRC演算部2は、64bit部分演算部200及び201と、フリップフロップ250〜256と、セレクタ210を備える。
64bit部分演算部200によって演算されるCRC符号が、フリップフロップ251及び256に順々に保持されたあと、第1CRC符号として出力される。また、64bit部分演算部201によって演算されるCRC符号が、フリップフロップ255に保持されたあと、第2CRC符号として出力される。
セレクタ210は、フリップフロップ412によって遅延された第2スタートパルスSP2をセレクト信号として受信する。フリップフロップ412は、フリップフロップ250〜252がデータ及び64bit部分演算部200の演算結果に与えた遅延と同じ遅延を、第2スタートパルスSP2に与える。セレクタ210は、第2スタートパルスSP2の値に従って、初期値及び64bit部分演算部200の演算結果のいずれかを選択して、64bit部分演算部201へ入力する。セレクタ210は、特許請求の範囲に記載の第2セレクタの一例として挙げられる。
このため、第2スタートパルスSP2がアサートされていないときは、CRC演算部2は、図3に示すCRC演算部2と同様に動作する。第2スタートパルスSP2がアサートされると、64bit部分演算部201は、64bit部分演算部200が初期値と上位データを使用してCRC符号を演算するのと同じ様に、初期値と下位データを使用してCRC符号を演算する。このため、下位データが並列データの先頭を含んでいても、CRC演算部2は、CRC符号の演算を開始することが可能になる。
図9を参照する。第1CRC符号及び第2CRC符号は補正部3によって補正され、それぞれセレクタ51及び50へ入力される。セレクタ51は、第1スタートパルスSP1に従って、補正されていない第1CRC符号、すなわち64bit部分演算部200から出力される第1CRC符号と、補正部3により補正された第1CRC符号のうち一方を選択する。
並列データの先頭を含む上位データに第1CRCを挿入する場合には、第1CRC符号を補正しなくてよい。したがって、セレクタ51は、第1スタートパルスSP1がアサートされたとき、補正されていない第1CRC符号を選択する。セレクタ51は、第1スタートパルスSP1がアサートされていないとき、補正された第1CRC符号を選択する。セレクタ51は、選択された第1CRC符号をフリップフロップ13へ出力する。
一方で、上位データ及び下位データのどちらかが並列データの先頭を含むクロックサイクルの下位データに挿入される第2CRC符号は補正しなくてよい。このため、セレクト信号生成回路6は、第1スタートパルスSP1及び第2スタートパルスSP2の論理和を、セレクタ50に対するセレクト信号として演算するOR回路600を備える。
セレクタ50は、セレクト信号がアサートされたとき、補正されていない第2CRC符号を選択する。セレクタ50は、第1スタートパルスSP1がアサートされていないとき、補正された第2CRC符号を選択する。セレクタ50は、選択された第2CRC符号をフリップフロップ12へ出力する。
図11は、図9に示す補正部3の構成例を示す図である。図4に示す構成要素と同様の構成要素には図4で使用した参照符号と同じ参照符号を付する。補正部3は、128bit部分演算部300及び301と、XOR回路302及び303を備える。また、補正部3は、64bit部分演算部310及び311と、XOR回路312及び313を備える。
補正部3は、CRC演算部2の64bit部分演算部200から出力され、フリップフロップ256に保持されたCRC符号を、補正対象の第1CRC符号として入力する。補正部3は、CRC演算部2の最終パイプライン段の64bit部分演算部201から出力され、フリップフロップ255に保持されたCRC符号を、補正対象の第2CRC符号として入力する。
128bit部分演算部300及び301と、XOR回路302及び303は、補正対象の第2CRC符号を補正し、補正された第2CRC符号を算出する。XOR回路303の出力はセレクタ50の入力線「0」へ入力される。128bit部分演算部300及び301と、XOR回路302及び303は、特許請求の範囲に記載の第2補正部の一例として挙げられる。
64bit部分演算部310及び311の機能は、CRC符号が演算される並列データのビット数が64である点を除き、128bit部分演算部300の機能と同様である。64bit部分演算部310の入力線「C」には初期値が入力され、64bit部分演算部311の入力線「C」にはフリップフロップ12から出力される第2CRC符号が入力される。フリップフロップ12から出力される第2CRC符号は、補正対象の第1CRC符号に対して1クロックサイクル先行して演算された第2CRC符号である。
XOR回路312は、64bit部分演算部310及び311の出力同士の排他的論理和を出力することにより、補正対象の第1CRC符号に対する補正値を算出する。XOR回路313は、この補正値と補正対象の第1CRC符号との排他的論理和を出力する。すなわち、XOR回路313は、上記補正値によって補正対象の第1CRC符号を補正し、補正された第1CRC符号を算出する。XOR回路313の出力はセレクタ51の入力線「0」へ入力される。64bit部分演算部310及び311と、XOR回路312及び313は、特許請求の範囲に記載の第1補正部の一例として挙げられる。
本実施例によれば、ヘッダ及びCRC符号が、上位データ及び下位データのいずれにも挿入されることがあるデータフォーマットに対しても、CRC符号を生成することができる。
続いて、他のCRC符号生成回路の実施例について説明する。図12は、CRC符号生成回路における第4実施例の構成図である。図9に示すCRC符号生成回路1の場合、128ビットの並列データが半分ずつ分割され、パイプライン処理が実行されたが、並列データの分割数は3以上でもよい。また、各パイプライン段において、異なる桁数の並列データについてCRC符号が演算されてもよい。また分割されたデータのいずれの部分に、並列データの先頭やCRC符号を挿入してもよい。
別途説明する場合を除き、図9に示す構成要素と同様の構成要素には図9で使用した参照符号と同じ参照符号を付する。CRC符号生成回路1は、CRC演算部2と、補正部3と、シフトレジスタ4と、セレクタ50〜53と、セレクト信号生成部6と、フリップフロップ10〜23を備える。
CRC演算部2は、128ビットの並列データに対するCRC符号の演算を、3つの部分演算に分割する。各部分演算は、第1部分データ〜第3部分データに対するCRC符号の演算を行う。
図13は、図12に示すシフトレジスタ4の構成例を示す図である。シフトレジスタ4は、フリップフロップ420〜437を備える。シフトレジスタ4は、CRC演算部2にて演算されるCRC符号や、CRC演算部2の内部で遅延する並列データに対して、第1スタートパルスSP1、第2スタートパルスSP2、第3スタートパルスSP3、第1エンドパルスEP1、第2エンドパルスEP2及び第3エンドパルスEP3を同期させる。
第1スタ−トパルスSP1は、第1部分データが並列データの先頭が含むクロックサイクルにてアサートされる。第2スタ−トパルスSP2は、第2部分データが並列データの先頭を含むクロックサイクルにてアサートされる。第3スタ−トパルスSP3は、第3部分データが並列データの先頭を含むクロックサイクルにてアサートされる。
第1エンドパルスEP1は、第1部分データへCRC符号を挿入するクロックサイクルにてアサートされる。第2エンドパルスEP2は、第2部分データへCRC符号を挿入するクロックサイクルにてアサートされる。第3エンドパルスEP3は、第3部分データへCRC符号を挿入するクロックサイクルにてアサートされる。
CRC演算部2は、第1部分データへの挿入用に生成される第1CRC符号を、補正部3及びセレクタ52へ出力する。またCRC演算部2は、第2部分データへの挿入用に生成される第2CRC符号を、補正部3及びセレクタ51へ出力する。またCRC演算部2は、第3部分データへの挿入用に生成される第3CRC符号を、補正部3及びセレクタ50へ出力する。
図14は、図12に示すCRC演算部2の構成例を示す図である。図7に示す構成要素と同様の構成要素には図7で使用した参照符号と同じ参照符号を付する。CRC演算部2は、42bit部分演算部202と、43bit部分演算部203及び204と、フリップフロップ260〜274と、セレクタ211及び212を備える。
42bit部分演算部202によって演算されるCRC符号が、フリップフロップ261、272及び273に順々に保持されたあと、第1CRC符号として出力される。また、43bit部分演算部203によって演算されるCRC符号が、フリップフロップ266及び274に順々に保持されたあと、第2CRC符号として出力される。また、43bit部分演算部204によって演算されるCRC符号が、フリップフロップ271に保持されたあと、第3CRC符号として出力される。
セレクタ211は、図13のフリップフロップ423によって遅延された第2スタートパルスSP2をセレクト信号として受信する。フリップフロップ423は、フリップフロップ260〜263がデータ及び42bit部分演算部202の演算結果に与えた遅延と同じ遅延を、第2スタートパルスSP2に与える。セレクタ211は、第2スタートパルスSP2の値に従って、初期値及び42bit部分演算部202の演算結果のいずれかを選択して、43bit部分演算部203へ入力する。
セレクタ212は、図13のフリップフロップ427から出力される第3スタートパルスSP3をセレクト信号として受信する。フリップフロップ427から出力される第3スタートパルスSP3には、フリップフロップ260〜267によってデータ及び43bit部分演算部203の演算結果に与えられた遅延と同じ遅延が与えられる。セレクタ212は、第3スタートパルスSP3の値に従って、初期値及び43bit部分演算部203の演算結果のいずれかを選択して、43bit部分演算部204へ入力する。
このため、第2スタートパルスSP2及び第3スタートパルスSP3がアサートされていないときは、CRC演算部2は、図7に示すCRC演算部2と同様に動作する。第2スタートパルスSP2がアサートされると、43bit部分演算部203は、42bit部分演算部202が初期値と第1部分データを使用してCRC符号を演算するのと同じ様に、初期値と第2部分データを使用してCRC符号を演算する。このため、第2部分データが並列データの先頭データを含んでいても、CRC演算部2は、CRC符号の演算を開始することが可能になる。
また、第3スタートパルスSP3がアサートされると、43bit部分演算部204は、初期値と第3部分データを使用してCRC符号を演算する。このため、第3部分データが並列データの先頭データを含んでいても、CRC演算部2は、CRC符号の演算を開始することが可能になる。
図12を参照する。第1〜3CRC符号は補正部3によって補正され、それぞれセレクタ52〜50へ入力される。セレクタ52は、第1スタートパルスSP1に従って、補正されていない第1CRC符号、すなわち42bit部分演算部202から出力される第1CRC符号と、補正部3により補正された第1CRC符号のうち一方を選択する。セレクタ52は、第1スタートパルスSP1がアサートされたとき、補正されていない第1CRC符号を選択する。セレクタ52は、第1スタートパルスSP1がアサートされていないとき、補正された第1CRC符号を選択する。セレクタ52は、選択された第1CRC符号をフリップフロップ14に出力する。
また、セレクタ51は、セレクト信号生成部6により生成されたセレクト信号に従って、補正されていない第2CRC符号、すなわち43bit部分演算部203から出力される第2CRC符号と、補正部3により補正された第2CRC符号のうち一方を選択する。セレクタ51は、セレクト信号がアサートされたとき、補正されていない第2CRC符号を選択する。セレクタ51は、セレクト信号がアサートされていないとき、補正された第2CRC符号を選択する。セレクタ51は、選択された第2CRC符号をフリップフロップ13に出力する。
また、セレクタ50は、セレクト信号生成部6により生成されたセレクト信号に従って、補正されていない第3CRC符号、すなわち43bit部分演算部204から出力される第3CRC符号と、補正部3により補正された第3CRC符号のうち一方を選択する。セレクタ50は、セレクト信号がアサートされたとき、補正されていない第3CRC符号を選択する。セレクタ50は、セレクト信号がアサートされていないとき、補正された第3CRC符号を選択する。セレクタ50は、選択された第3CRC符号をフリップフロップ12に出力する。
図15は、図12に示すセレクト信号生成部6の構成例を示す図である。第1部分データ及び第2部分データのどちらかが並列データの先頭を含むクロックサイクルの第2部分データに挿入される第2CRC符号は、補正しなくてよい。このため、セレクト信号生成回路6は、第1スタートパルスSP1及び第2スタートパルスSP2の論理和を、セレクタ51に対するセレクト信号として演算するOR回路62を備える。
また、第1部分データ〜第3部分データのどれかが並列データの先頭を含むクロックサイクルの第3部分データに挿入される第3CRC符号は、補正しなくてよい。このため、セレクト信号生成回路6は、第1スタートパルスSP1、第2スタートパルスSP2及び第3スタートパルスSP3の論理和を、セレクタ50に対するセレクト信号として演算するOR回路61を備える。
図16は、図12に示す補正部3の構成例を示す図である。図4に示す構成要素と同様の構成要素には図4で使用した参照符号と同じ参照符号を付する。補正部3は、128bit部分演算部300及び301と、XOR回路302及び303を備える。また、補正部3は、42bit部分演算部320及び321と、XOR回路322及び323を備える。また、補正部3は、85bit部分演算部330及び331と、XOR回路332及び333を備える。
補正部3は、CRC演算部2の42bit部分演算部202から出力され、フリップフロップ273に保持されたCRC符号を、補正対象の第1CRC符号として入力する。補正部3は、43bit部分演算部203から出力され、フリップフロップ274に保持されたCRC符号を、補正対象の第2CRC符号として入力する。補正部3は、CRC演算部2の最終パイプライン段の43bit部分演算部204から出力され、フリップフロップ271に保持されたCRC符号を、補正対象の第3CRC符号として入力する。
128bit部分演算部300及び301と、XOR回路302及び303は、補正対象の第3CRC符号を補正し、補正された第3CRC符号を算出する。XOR回路303の出力はセレクタ50の入力線「0」へ入力される。
42bit部分演算部320及び321の機能は、CRC符号が演算される並列データのビット数が42である点を除き、128bit部分演算部300の機能と同様である。また、85bit部分演算部330及び331の機能は、CRC符号が演算される並列データのビット数が85である点を除き、128bit部分演算部300の機能と同様である。
42bit部分演算部320の入力線「C」には初期値が入力され、42bit部分演算部321の入力線「C」にはフリップフロップ12から出力される第3CRC符号が入力される。フリップフロップ12から出力される第3CRC符号は、補正対象の第1CRC符号に対して1クロックサイクル先行して演算された第3CRC符号である。
85bit部分演算部330の入力線「C」には初期値が入力され、85bit部分演算部331の入力線「C」にはフリップフロップ12から出力される第3CRC符号が入力される。
XOR回路322は、42bit部分演算部320及び321の出力同士の排他的論理和を出力することにより、補正対象の第1CRC符号に対する補正値を算出する。XOR回路323は、この補正値と補正対象の第1CRC符号との排他的論理和を出力する。すなわち、XOR回路323は、上記補正値によって補正対象の第1CRC符号を補正し、補正された第1CRC符号を算出する。XOR回路323の出力はセレクタ52の入力線「0」へ入力される。
XOR回路332は、85bit部分演算部330及び331の出力同士の排他的論理和を出力することにより、補正対象の第2CRC符号に対する補正値を算出する。XOR回路333は、この補正値と補正対象の第2CRC符号との排他的論理和を出力する。すなわち、XOR回路333は、上記補正値によって補正対象の第2CRC符号を補正し、補正された第2CRC符号を算出する。XOR回路333の出力はセレクタ51の入力線「0」へ入力される。
本実施例によれば、ヘッダ及びCRC符号が、第1〜第3部分データのいずれにも挿入されることがあるデータフォーマットに対しても、CRC符号を生成することができる。
続いて、他のCRC符号生成回路の実施例について説明する。図17は、データフォーマットの第3例のタイミングチャートである。図17の第1段は、クロックのタイミングエッジの発生タイミングを示し、第2段は、第1スタ−トパルスSP1を示し、第3段は、第2スタ−トパルスSP2を示す。図17の第4段は、第1エンドパルスEP1を示し、第5段は、第2エンドパルスEP2を示す。
図17の第6段は、並列データを示す。データ中の「ヘッダ」は並列データの先頭に付加されたヘッダ情報を意味し、データ中の「CRC32」はCRC符号を意味する。このフォーマットの例では、上位データと下位データとが独立しており、それぞれのデータの先頭にヘッダが挿入され、末尾にCRC符号が挿入される。
第1スタ−トパルスSP1は、上位データの先頭が存在するクロックサイクルにてアサートされる。第2スタ−トパルスSP2は、下位データの先頭が存在するクロックサイクルにてアサートされる。第1エンドパルスEP1は、上位データへCRC符号を挿入するクロックサイクルにてアサートされる。第2エンドパルスEP2は、下位データへCRC符号を挿入するクロックサイクルにてアサートされる。
例えば、クロックサイクル920において上位データの先頭が存在すると、クロックサイクル920において第1スタートパルスSP1がアサートされる。クロックサイクル920における上位データにはヘッダが挿入される。クロックサイクル921において第1エンドパルスEP1がアサートされることにより、クロックサイクル921の上位データにはCRC符号が挿入されることが示される。
また例えば、クロックサイクル922において下位データの先頭が存在すると、クロックサイクル922において第2スタートパルスSP2がアサートされる。クロックサイクル922における下位データにはヘッダが挿入される。クロックサイクル923において第2エンドパルスEP2がアサートされることにより、クロックサイクル923の下位データにはCRC符号が挿入されることが示される。
図18は、図17に示すフォーマットのデータについてCRC符号を演算するCRC符号生成回路の実施例の構成図である。別途説明する場合を除き、図9に示す構成要素と同様の構成要素には図9で使用した参照符号と同じ参照符号を付する。CRC符号生成回路1は、CRC演算部2と、補正部3と、シフトレジスタ4と、セレクタ50及び51と、セレクト信号生成部6と、フリップフロップ10〜19を備える。シフトレジスタ4は、フリップフロップ410〜417を備える。
CRC符号生成回路1は、モード設定信号を受信する。モード設定信号がアサートされていないとき、CRC符号生成回路1は、図9に示すCRC符号生成回路1と同様に動作する。モード設定信号がアサートされるとき、CRC符号生成回路1は、図17に示すフォーマットのデータの上位データ及び下位データにそれぞれ挿入するCRC符号を生成するように動作する。以下の説明において、モード設定信号がアサートされていない場合における動作モードを「第1モード」と表記することがある。モード設定信号がアサートされている場合における動作モードを「第2モード」と表記することがある。
第1モードでは、上位データ及び下位データのどちらかが並列データの先頭を含むクロックサイクルの下位データに挿入される第2CRC符号は補正しなくてよい。これに対し第2モードでは、並列データの先頭を含む下位データに挿入される第2CRC符号のみ、補正しなくてよい。このため、セレクト信号生成回路6は、モード設定信号がアサートされている場合には、OR回路600への第1スタートパルスSP1の入力を阻止するAND回路601とインバータ602を備える。
図19は、図18に示すCRC演算部2の構成例を示す図である。図10に示す構成要素と同様の構成要素には図10で使用した参照符号と同じ参照符号を付する。CRC演算部2は、64bit部分演算部200及び201と、フリップフロップ250〜256と、セレクタ210と、OR回路220を備える。
第2モードでは、64bit部分演算部201は、上位データに対して64bit部分演算部200により演算されたCRC符号と独立して、下位データに対するCRC符号を演算する。このためOR回路220は、モード設定信号と、フリップフロップ412によって遅延された第2スタートパルスSP2との論理和を、セレクタ210のセレクト信号として生成する。これによって第2モードでは、第2スタートパルスSP2の値に関わらず、64bit部分演算部201には初期値が入力される。
図20は、図18に示す補正部3の構成例を示す図である。図11に示す構成要素と同様の構成要素には図11で使用した参照符号と同じ参照符号を付する。補正部3は、128bit部分演算部300及び301と、XOR回路302及び303を備える。また、補正部3は、64bit部分演算部310及び311と、XOR回路312及び313を備える。
さらに、補正部3は、64bit部分演算部340及び341と、XOR回路342を備える。64bit部分演算部340及び341の機能は、64bit部分演算部310と同様である。また、補正部3は、セレクタ350及び351を備える。
第1モードでは、64bit部分演算部310及び311と、XOR回路312は、初期値と、1クロックサイクル先行して演算された第2CRC符号とに基づいて、第1CRC符号に対する補正値を演算する。一方で第2モードでは、64bit部分演算部310及び311と、XOR回路312は、初期値と、1クロックサイクル先行して演算された第1CRC符号とに基づいて、第1CRC符号に対する補正値を演算する。
セレクタ350は、モード設定信号に基づいて、64bit部分演算部311の入力線「C」へ入力する信号として、フリップフロップ13及び12からそれぞれ出力される第1CRC符号及び第2CRC符号のいずれか一方を選択する。セレクタ350は、特許請求の範囲に記載の第3セレクタの一例として挙げられる。
64bit部分演算部340及び341と、XOR回路342は、第2モードにおいて下位データに挿入されるCRC符号に対する補正値を演算する。64bit部分演算部340の入力線「C」には初期値が入力され、64bit部分演算部341の入力線「C」にはフリップフロップ12から出力される第2CRC符号が入力される。XOR回路342は、64bit部分演算部340及び341の出力同士の排他的論理和を出力することにより、第2モードにおける第2CRC符号に対する補正値を算出する。セレクタ351は、モード設定信号に基づいて、第2CRC符号に対する補正値として、XOR回路302及び342のどちらかから出力される補正値を選択する。
本実施例によれば、本実施例によれば、上位データと下位データとが独立しているデータフォーマットに対しても、CRC符号を生成することができる。
続いて、他のCRC符号生成回路の実施例について説明する。図21は、CRC符号生成回路における第6実施例の構成図である。図18に示すCRC符号生成回路1の場合、128ビットの並列データが半分ずつ分割され、上位データと下位データとが独立しているデータフォーマットに対してCRC符号を生成した。しかし、並列データは3個以上の部分データに分割され、各部分データが独立していてもよい。いずれかの部分データの桁数は、他の部分データの桁数と異なっていてもよい。
別途説明する場合を除き、図12に示す構成要素と同様の構成要素には図12で使用した参照符号と同じ参照符号を付する。CRC符号生成回路1は、CRC演算部2と、補正部3と、シフトレジスタ4と、セレクタ50〜52と、セレクト信号生成部6と、フリップフロップ10〜23を備える。図22は、図21に示すシフトレジスタ4の構成例を示す図である。図13に示す構成要素と同様の構成要素には図13で使用した参照符号と同じ参照符号を付する。シフトレジスタ4は、フリップフロップ420〜437を備える。
図18に示すCRC符号生成回路1と同様に、CRC符号生成回路1は、モード設定信号を受信する。モード設定信号がアサートされていないとき、CRC符号生成回路1は、図12に示すCRC符号生成回路1と同様に動作する。モード設定信号がアサートされるとき、CRC符号生成回路1は、第1部分データ〜第3部分データが独立しているデータフォーマットに対して、それぞれの部分データに挿入するCRC符号を生成するように動作する。
図23は、図21に示すセレクト信号生成部6の構成例を示す図である。図15に示す構成要素と同様の構成要素には図15で使用した参照符号と同じ参照符号を付する。第2モードでは、並列データの先頭を含む第2部分データに挿入される第2CRC符号のみ、補正しなくてよい。また第2モードでは、並列データの先頭を含む第3部分データに挿入される第3CRC符号のみ、補正しなくてよい。
このため、セレクト信号生成回路6は、モード設定信号がアサートされている場合には、OR回路61及び62への第1スタートパルスSP1の入力を阻止するAND回路63とインバータ64を備える。また、セレクト信号生成回路6は、モード設定信号がアサートされている場合には、OR回路61への第2スタートパルスSP2の入力を阻止するAND回路65とインバータ66を備える。
図24は、図21に示すCRC演算部2の構成例を示す図である。図14に示す構成要素と同様の構成要素には図14で使用した参照符号と同じ参照符号を付する。CRC演算部2は、42bit部分演算部202と、43bit部分演算部203及び204と、フリップフロップ260〜274と、セレクタ211及び212と、OR回路221及び222を備える。
第2モードでは、43bit部分演算部203は、第1部分データに対して42bit部分演算部202により演算されたCRC符号と独立して、第2部分データに対するCRC符号を演算する。このためOR回路221は、モード設定信号と、フリップフロップ423によって遅延された第2スタートパルスSP2との論理和を、セレクタ211のセレクト信号として生成する。これによって第2モードでは、第2スタートパルスSP2の値に関わらず、43bit部分演算部203には初期値が入力される。
また第2モードでは、43bit部分演算部204は、第2部分データに対して43bit部分演算部203により演算されたCRC符号と独立して、第3部分データに対するCRC符号を演算する。このためOR回路222は、モード設定信号と、フリップフロップ427から出力される第3スタートパルスSP3との論理和を、セレクタ212のセレクト信号として生成する。これによって第2モードでは、第3スタートパルスSP3の値に関わらず、43bit部分演算部204には初期値が入力される。
図25は、図21に示す補正部3の構成例を示す図である。図16に示す構成要素と同様の構成要素には図16で使用した参照符号と同じ参照符号を付する。補正部3は、128bit部分演算部300及び301と、XOR回路302及び303を備える。また、補正部3は、42bit部分演算部320及び321と、XOR回路322及び323を備える。また、補正部3は、85bit部分演算部330及び331と、XOR回路332及び333を備える。
さらに補正部3は、43bit部分演算部360及び361と、XOR回路362を備える。また補正部3は、43bit部分演算部370及び371と、XOR回路372を備える。また、補正部3は、セレクタ352〜354を備える。43bit部分演算部360、361、370及び371の機能は、CRC符号が演算される並列データのビット数が43である点を除き、128bit部分演算部300の機能と同様である。
第1モードでは、42bit部分演算部320及び321と、XOR回路322は、初期値と、1クロックサイクル先行して演算された第3CRC符号とに基づいて、第1CRC符号に対する補正値を演算する。一方で第2モードでは、42bit部分演算部320及び321と、XOR回路322は、初期値と、1クロックサイクル先行して演算された第1CRC符号とに基づいて、第1CRC符号に対する補正値を演算する。
セレクタ352は、モード設定信号に基づいて、42bit部分演算部321の入力線「C」へ入力する信号として、フリップフロップ14及び12からそれぞれ出力される第1CRC符号及び第3CRC符号のいずれか一方を選択する。
43bit部分演算部370及び371と、XOR回路372は、第2モードにおいて第2部分データに挿入されるCRC符号に対する補正値を演算する。43bit部分演算部370の入力線「C」には初期値が入力され、43bit部分演算部371の入力線「C」にはフリップフロップ13から出力される第2CRC符号が入力される。XOR回路372は、43bit部分演算部370及び371の出力同士の排他的論理和を出力することにより、第2モードにおける第2CRC符号に対する補正値を算出する。セレクタ354は、モード設定信号に基づいて、第2CRC符号に対する補正値として、XOR回路332及び372のどちらかから出力される補正値を選択する。
43bit部分演算部360及び361と、XOR回路362は、第2モードにおいて第3部分データに挿入されるCRC符号に対する補正値を演算する。43bit部分演算部360の入力線「C」には初期値が入力され、43bit部分演算部361の入力線「C」にはフリップフロップ12から出力される第3CRC符号が入力される。XOR回路362は、43bit部分演算部360及び361の出力同士の排他的論理和を出力することにより、第2モードにおける第3CRC符号に対する補正値を算出する。セレクタ353は、モード設定信号に基づいて、第3CRC符号に対する補正値として、XOR回路302及び362のどちらかから出力される補正値を選択する。
本実施例によれば、本実施例によれば、独立した第1部分データ〜第3部分データを含むデータフォーマットに対しても、CRC符号を生成することができる。
以上の実施例を含む実施形態に関し、更に以下の付記を開示する。
(付記1)
1個以上の並列データを逐次入力し、各前記並列データについて、該並列データと、初期値又は先行して演算された巡回冗長検査符号と、に基づいて巡回冗長検査符号を算出する所定演算を反復することにより、前記1個以上の並列データに対する巡回冗長検査符号を生成する巡回冗長検査符号生成回路であって、
前記所定演算を前記並列データの桁方向に分割した部分演算のそれぞれを、異なるパイプライン段において、前記初期値と前記並列データとに基づいて実行する複数の部分演算部と、
前記初期値と前記先行して演算された巡回冗長検査符号とに基づいて、前記部分演算部によって演算された巡回冗長検査符号を補正する補正部と、
を備える巡回冗長検査符号生成回路。
(付記2)
入力される前記並列データが前記1個以上の並列データの先頭データであるか否かに応じて、前記補正部による補正前後の巡回冗長検査符号のいずれか一方を選択する第1セレクタを備える付記1に記載の巡回冗長検査符号生成回路。
(付記3)
複数の前記パイプライン段の2段目以降のいずれかのパイプライン段の前記部分演算部に、前記初期値及び前記いずれかのパイプライン段の前段の前記部分演算部から出力される巡回冗長検査符号のいずれか一方を選択して入力する第2セレクタを備え、
前記補正部は、前記いずれかのパイプライン段の前段の前記部分演算部から出力される巡回冗長検査符号を補正する第1補正部と、最終段のパイプライン段の前記部分演算部から出力される巡回冗長検査符号を補正する第2補正部と、を少なくとも備える付記1又は2に記載の巡回冗長検査符号生成回路。
(付記4)
前記先行して演算された巡回冗長検査符号として、前記第1補正部により補正された巡回冗長検査符号及び前記第2補正部により補正された巡回冗長検査符号のいずれか一方を選択して、前記第1補正部へ入力する第3セレクタを備える付記3に記載の巡回冗長検査符号生成回路。
(付記5)
複数の前記パイプライン段の2段目以降のいずれかのパイプライン段の前記部分演算部に、前記初期値及び前記いずれかのパイプライン段の前段の前記部分演算部から出力される巡回冗長検査符号のいずれか一方を選択して入力する第4セレクタを備え、
前記補正部は、
前記いずれかのパイプライン段の前記部分演算部がその前段の前記部分演算部から出力される巡回冗長検査符号及び前記並列データに基づいて演算した巡回冗長検査符号を補正する第3補正部と、
前記いずれかのパイプライン段の前記部分演算部が前記初期値及び前記並列データに基づいて演算した巡回冗長検査符号を補正する第4補正部と、
前記第3補正部により補正された巡回冗長検査符号及び前記第4補正部により補正された巡回冗長検査符号のいずれか一方を選択して第5セレクタと、
を備える付記1又は2に記載の巡回冗長検査符号生成回路。
(付記6)
前記部分演算部のうちのいずれかの部分演算部に入力される並列データの桁数が、前記部分演算部のうちの他の部分演算部に入力される並列データの桁数と異なる付記1〜5のいずれか一項に記載の巡回冗長検査符号生成回路。
(付記7)
1個以上の並列データを逐次受信し、各前記並列データについて、該並列データと、初期値又は先行して演算された巡回冗長検査符号と、に基づいて巡回冗長検査符号を算出する所定演算を反復することにより、前記1個以上の並列データに対する巡回冗長検査符号を生成する巡回冗長検査符号生成方法であって、
前記所定演算を前記並列データの桁方向に分割した部分演算のそれぞれを、異なるパイプライン段において、前記初期値と前記並列データとに基づいて実行し、
前記初期値と前記先行して演算された巡回冗長検査符号とに基づいて、前記部分演算によって演算された巡回冗長検査符号を補正する、巡回冗長検査符号生成方法。
1 CRC符号生成回路
2 CRC演算部
3 補正部
4 シフトレジスタ
5 セレクタ
10〜15、250〜255、400〜403 フリップフロップ
200、201 64bit部分演算部

Claims (5)

  1. 1個以上の並列データを逐次入力し、各前記並列データについて、該並列データと、初期値又は先行して演算された巡回冗長検査符号と、に基づいて巡回冗長検査符号を算出する所定演算を反復することにより、前記1個以上の並列データに対する巡回冗長検査符号を生成する巡回冗長検査符号生成回路であって、
    前記所定演算を前記並列データの桁方向に分割した部分演算のそれぞれを、異なるパイプライン段において、前記初期値と前記並列データとに基づいて実行する複数の部分演算部と、
    前記初期値と前記先行して演算された巡回冗長検査符号とに基づいて、前記部分演算部によって演算された巡回冗長検査符号を補正する補正部と、
    を備える巡回冗長検査符号生成回路。
  2. 複数の前記パイプライン段の2段目以降のいずれかのパイプライン段の前記部分演算部に、前記初期値及び前記いずれかのパイプライン段の前段の前記部分演算部から出力される巡回冗長検査符号のいずれか一方を選択して入力する第2セレクタを備え、
    前記補正部は、前記いずれかのパイプライン段の前段の前記部分演算部から出力される巡回冗長検査符号を補正する第1補正部と、最終段のパイプライン段の前記部分演算部から出力される巡回冗長検査符号を補正する第2補正部と、を少なくとも備える請求項1に記載の巡回冗長検査符号生成回路。
  3. 前記先行して演算された巡回冗長検査符号として、前記第1補正部により補正された巡回冗長検査符号及び前記第2補正部により補正された巡回冗長検査符号のいずれか一方を選択して、前記第1補正部へ入力する第3セレクタを備える請求項2に記載の巡回冗長検査符号生成回路。
  4. 前記部分演算部のうちのいずれかの部分演算部に入力される並列データの桁数が、前記部分演算部のうちの他の部分演算部に入力される並列データの桁数と異なる請求項1〜3のいずれか一項に記載の巡回冗長検査符号生成回路。
  5. 1個以上の並列データを逐次受信し、各前記並列データについて、該並列データと、初期値又は先行して演算された巡回冗長検査符号と、に基づいて巡回冗長検査符号を算出する所定演算を反復することにより、前記1個以上の並列データに対する巡回冗長検査符号を生成する巡回冗長検査符号生成方法であって、
    前記所定演算を前記並列データの桁方向に分割した部分演算のそれぞれを、異なるパイプライン段において、前記初期値と前記並列データとに基づいて実行し、
    前記初期値と前記先行して演算された巡回冗長検査符号とに基づいて、前記部分演算によって演算された巡回冗長検査符号を補正する、巡回冗長検査符号生成方法。
JP2009288971A 2009-12-21 2009-12-21 巡回冗長検査符号生成回路及び巡回冗長検査符号生成方法 Pending JP2011130333A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2009288971A JP2011130333A (ja) 2009-12-21 2009-12-21 巡回冗長検査符号生成回路及び巡回冗長検査符号生成方法
US12/970,651 US8433974B2 (en) 2009-12-21 2010-12-16 Cyclic redundancy check code generating circuit and cyclic redundancy check code generating method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009288971A JP2011130333A (ja) 2009-12-21 2009-12-21 巡回冗長検査符号生成回路及び巡回冗長検査符号生成方法

Publications (1)

Publication Number Publication Date
JP2011130333A true JP2011130333A (ja) 2011-06-30

Family

ID=44152895

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009288971A Pending JP2011130333A (ja) 2009-12-21 2009-12-21 巡回冗長検査符号生成回路及び巡回冗長検査符号生成方法

Country Status (2)

Country Link
US (1) US8433974B2 (ja)
JP (1) JP2011130333A (ja)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9154161B1 (en) 2014-04-01 2015-10-06 Cisco Technology, Inc. Calculating cyclic redundancy checks over overlapping windows of streaming data
CN105227500B (zh) * 2014-06-12 2019-10-18 中兴通讯股份有限公司 一种相位偏差的补偿方法及装置
US10162700B2 (en) 2014-12-23 2018-12-25 International Business Machines Corporation Workload-adaptive data packing algorithm
CN109417438A (zh) * 2016-08-01 2019-03-01 索尼半导体解决方案公司 通信单元和通信系统
EP3732810A1 (en) 2018-04-09 2020-11-04 Google LLC Fifth generation new radio uplink multiplexing assisted by shared grant-free transmission
CZ308855B6 (cs) * 2018-06-06 2021-07-14 CESNET, zájmové sdružení právnických osob Zapojení pro rychlý výpočet kontrolního součtu CRC obvodem připojeným přímo ke sběrnici pro přenos datových paketů
CN109462458B (zh) * 2019-01-11 2021-04-16 深圳市常茂信科技开发有限公司 一种多级流水电路实现并行crc的方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000101450A (ja) * 1998-09-25 2000-04-07 Nec Kofu Ltd 巡回冗長検査計算方法および装置
JP2007166031A (ja) * 2005-12-09 2007-06-28 National Institute Of Advanced Industrial & Technology Crc値の算出装置

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3257298B2 (ja) 1994-11-16 2002-02-18 松下電器産業株式会社 Crc符号生成方法
JP2822928B2 (ja) 1995-05-29 1998-11-11 日本電気株式会社 Crc符号演算方法および回路
JPH0964754A (ja) 1995-08-21 1997-03-07 Nippon Telegr & Teleph Corp <Ntt> 誤り検出符号生成回路
GB2378102B (en) * 2001-07-24 2003-09-24 3Com Corp Cyclic redundancy code generator
US7571370B2 (en) * 2003-06-19 2009-08-04 Lsi Logic Corporation Configurable, fast, 32-bit CRC generator for 1-byte to 16-bytes variable width input data
US7168024B2 (en) * 2003-10-03 2007-01-23 Jennic Limited Data processing system and method
US7249306B2 (en) * 2004-02-20 2007-07-24 Nvidia Corporation System and method for generating 128-bit cyclic redundancy check values with 32-bit granularity
US7904787B2 (en) * 2007-01-09 2011-03-08 International Business Machines Corporation Pipelined cyclic redundancy check for high bandwidth interfaces

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000101450A (ja) * 1998-09-25 2000-04-07 Nec Kofu Ltd 巡回冗長検査計算方法および装置
JP2007166031A (ja) * 2005-12-09 2007-06-28 National Institute Of Advanced Industrial & Technology Crc値の算出装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
JPN6013042892; Mathys Walma: 'Pipelined Cyclic Redundancy Check (CRC) Calculation' Computer Communications and Networks, 2007. ICCCN 2007. Proceedings of 16th International Conference , 20070816, pp.365-370 *

Also Published As

Publication number Publication date
US8433974B2 (en) 2013-04-30
US20110154159A1 (en) 2011-06-23

Similar Documents

Publication Publication Date Title
JP2011130333A (ja) 巡回冗長検査符号生成回路及び巡回冗長検査符号生成方法
JP4764973B2 (ja) Crc値の算出装置
US8468439B2 (en) Speed-optimized computation of cyclic redundancy check codes
US10187082B1 (en) Systems and methods for gray coding based error correction in an asynchronous counter
KR20080040706A (ko) 데이터 스트림에 주기적 덧붙임 검사(crc)를 수행하기위한 crc 생성 회로를 구성하는 방법 및 장치
JPH09247000A (ja) エラー訂正用シンドローム計算装置
JPH0728227B2 (ja) Bch符号の復号装置
US9619206B2 (en) Pseudo-random bit sequence generator
JP4134029B2 (ja) リードソロモン符号の軟判定復号方法
US5408476A (en) One bit error correction method having actual data reproduction function
JP2001251194A (ja) Crc演算装置
JP4567753B2 (ja) パリティ生成回路、計数回路および計数方法
JP3454962B2 (ja) 誤り訂正符号の符号器及び復号器
JP3248098B2 (ja) シンドローム計算装置
WO2020005582A1 (en) Serializing and deserializing stage testing
JP5602312B2 (ja) 誤り訂正復号装置
JP6600146B2 (ja) データ処理回路及びエラー訂正方法
JP2015019276A (ja) 記憶装置、crc生成装置およびcrc生成方法
JP5724601B2 (ja) Crc演算回路及びプロセッサ
US8312363B2 (en) Residue generation
JP2007288576A (ja) 情報シンボルの符号化方法及びその装置並びに情報シンボルの復号化方法及び復号化装置
JP4057876B2 (ja) ガロア体掛け算器の制御方法
JP3310186B2 (ja) リード・ソロモン符号の復号回路
JP2008112522A (ja) 誤り検出装置および誤り検出方法
JP3398560B2 (ja) 短縮化誤り訂正復号装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20120910

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130822

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130903

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20131009

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20140114