(57)【要約】【課題】並列データのＣＲＣ符号を演算する演算回路において、論理演算回路が１クロックサイクルで行う論理演算の段数を低減する。【解決手段】巡回冗長検査符号生成回路１は、１個以上の並列データを逐次入力し、各並列データについて、並列データと、初期値又は先行して演算された巡回冗長検査符号と、に基づいて巡回冗長検査符号を算出する所定演算を反復する。巡回冗長検査符号生成回路１は、上記の所定演算を並列データの桁方向に分割した部分演算のそれぞれを、異なるパイプライン段において、初期値と並列データとに基づいて実行する複数の部分演算部２００、２０１と、初期値と前記先行して演算された巡回冗長検査符号とに基づいて、部分演算部２００、２０１によって演算された巡回冗長検査符号を補正する補正部３と、を備える。【選択図】図２
2011130333.tif 000002
【特許請求の範囲】
【請求項１】
１個以上の並列データを逐次入力し、各前記並列データについて、該並列データと、初期値又は先行して演算された巡回冗長検査符号と、に基づいて巡回冗長検査符号を算出する所定演算を反復することにより、前記１個以上の並列データに対する巡回冗長検査符号を生成する巡回冗長検査符号生成回路であって、
前記所定演算を前記並列データの桁方向に分割した部分演算のそれぞれを、異なるパイプライン段において、前記初期値と前記並列データとに基づいて実行する複数の部分演算部と、
前記初期値と前記先行して演算された巡回冗長検査符号とに基づいて、前記部分演算部によって演算された巡回冗長検査符号を補正する補正部と、
を備える巡回冗長検査符号生成回路。
【請求項２】
複数の前記パイプライン段の２段目以降のいずれかのパイプライン段の前記部分演算部に、前記初期値及び前記いずれかのパイプライン段の前段の前記部分演算部から出力される巡回冗長検査符号のいずれか一方を選択して入力する第２セレクタを備え、
前記補正部は、前記いずれかのパイプライン段の前段の前記部分演算部から出力される巡回冗長検査符号を補正する第１補正部と、最終段のパイプライン段の前記部分演算部から出力される巡回冗長検査符号を補正する第２補正部と、を少なくとも備える請求項１に記載の巡回冗長検査符号生成回路。
【請求項３】
前記先行して演算された巡回冗長検査符号として、前記第１補正部により補正された巡回冗長検査符号及び前記第２補正部により補正された巡回冗長検査符号のいずれか一方を選択して、前記第１補正部へ入力する第３セレクタを備える請求項２に記載の巡回冗長検査符号生成回路。
【請求項４】
前記部分演算部のうちのいずれかの部分演算部に入力される並列データの桁数が、前記部分演算部のうちの他の部分演算部に入力される並列データの桁数と異なる請求項１〜３のいずれか一項に記載の巡回冗長検査符号生成回路。
【請求項５】
１個以上の並列データを逐次受信し、各前記並列データについて、該並列データと、初期値又は先行して演算された巡回冗長検査符号と、に基づいて巡回冗長検査符号を算出する所定演算を反復することにより、前記１個以上の並列データに対する巡回冗長検査符号を生成する巡回冗長検査符号生成方法であって、
前記所定演算を前記並列データの桁方向に分割した部分演算のそれぞれを、異なるパイプライン段において、前記初期値と前記並列データとに基づいて実行し、
前記初期値と前記先行して演算された巡回冗長検査符号とに基づいて、前記部分演算によって演算された巡回冗長検査符号を補正する、巡回冗長検査符号生成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書で論じられる実施態様は、巡回冗長検査符号生成回路及び巡回冗長検査符号生成方法に関する。
【背景技術】
【０００２】
現在、様々な巡回冗長検査（ＣＲＣ: Cyclic Redundancy Check）符号の生成方法が提案されている。例えば、並列入力データによるＣＲＣの演算を並列入力データを再展開し割り算の部分演算をパイプライン処理によって行うＣＲＣ符号演算方法が提案されている。この方法は、並列展開にともなう排他的論理和回路網内の回路段数の増加を抑制し、演算処理を高速化することを意図する。
【０００３】
この方法では、入力端子から入力したデータを展開回路によってワード単位に二つに展開し、二つの第一部分演算回路と、一つの第二部分演算回路によって入力データに対するＣＲＣ符号を演算する。ＣＲＣ符号生成時は、セレクタ回路によって最終データワードにＣＲＣ符号を付加して、偶数ワード側出力端子および奇数ワード側出力端子よりデータおよびＣＲＣ符号を出力する。ＣＲＣ符号検査時は、全データを入力後に判定回路によってデータ誤りの可否について判定し、誤りが検出されれば判定回路の出力端子にｈｉｇｈ信号を出力する。
【０００４】
また、割算回路やＲＯＭを使わずに、予め計算されたいくつかのＣＲＣ符号をもとに、論理回路を組み、必要最小限の情報でＣＲＣ符号を生成するＣＲＣ符号生成方法が提案されている。この方法は、ｎビットの演算対象ビット列のそれぞれのビットに対応した、ｎ個の部分ＣＲＣ符号群を予め演算する手順と、ｎビットの演算対象ビット列の各ビットの有効値によって、前記部分ＣＲＣ符号群の値を使って、前記ｎビットの演算対象ビット列全体に対するＣＲＣ符号を求める手順とを含む。前記ＣＲＣ符号を求める手順は、ｎビットの演算対象ビット列の各ビットの有効値を、部分ＣＲＣ符号にデコードし、排他的論理和をとることで、前記ｎビットの演算対象ビット列全体に対するＣＲＣ符号を求める。
【０００５】
また、生成多項式の次数を超える並列数で処理することができる誤り検出符号生成回路が提案されている。この方法では、データ列を１，２，...，ｎのｎ本のデータ系列に分割し、分割したそれぞれのデータ系列をそれぞれ独立に処理し、それぞれのデータ系列の全てのデータの処理が終了した後それぞれの処理結果の排他的論理和をとる。各処理は、入力するデータ系列の最終データより前のデータ系列に対して分割数ｎに応じた演算を行い、各処理手段に入力する最終データに対してデータ系列１，２，...，ｎに応じた演算を行う。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平８−３３０９７６号公報
【特許文献２】特開平８−１４９０１７号公報
【特許文献３】特開平９−６４７５４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
並列データのＣＲＣ符号を演算する論理演算の論理段数は、並列データのビット数の増加に伴って増加する。実施態様に係る装置及び方法は、並列データのＣＲＣ符号を演算する演算回路において、論理演算回路が１クロックサイクルで行う論理演算の段数を低減することを目的とする。
【課題を解決するための手段】
【０００８】
実施例の一態様によれば、１個以上の並列データを逐次入力し、各並列データについて、並列データと、初期値又は先行して演算された巡回冗長検査符号と、に基づいて巡回冗長検査符号を算出する所定演算を反復することにより、１個以上の並列データに対する巡回冗長検査符号を生成する巡回冗長検査符号生成回路が与えられる。
【０００９】
この巡回冗長検査符号生成回路は、上記の所定演算を並列データの桁方向に分割した部分演算のそれぞれを、異なるパイプライン段において、初期値と並列データとに基づいて実行する複数の部分演算部と、初期値と前記先行して演算された巡回冗長検査符号とに基づいて、部分演算部によって演算された巡回冗長検査符号を補正する補正部と、を備える。
【００１０】
実施例の他の態様によれば、１個以上の並列データを逐次受信し、各並列データについて、並列データと、初期値又は先行して演算された巡回冗長検査符号と、に基づいて巡回冗長検査符号を算出する所定演算を反復することにより、１個以上の並列データに対する巡回冗長検査符号を生成する巡回冗長検査符号生成方法が与えられる。
【００１１】
この巡回冗長検査符号生成方法では、上記の所定演算を並列データの桁方向に分割した部分演算のそれぞれを、異なるパイプライン段において、初期値と並列データとに基づいて実行し、初期値と先行して演算された巡回冗長検査符号とに基づいて、部分演算によって演算された巡回冗長検査符号を補正する。
【発明の効果】
【００１２】
本件開示の装置又は方法によれば、並列データのＣＲＣ符号を演算する演算回路において、論理演算回路が１クロックサイクルで行う論理演算の段数が低減される。
【図面の簡単な説明】
【００１３】
【図１】並列データに対するＣＲＣ符号の演算方法の説明図である。
【図２】ＣＲＣ符号生成回路における第１実施例の構成図である。
【図３】図２に示すＣＲＣ演算部の構成例を示す図である。
【図４】図２に示す補正部の構成例を示す図である。
【図５】データフォーマットの第１例のタイミングチャートである。
【図６】ＣＲＣ符号生成回路における第２実施例の構成図である。
【図７】図６に示すＣＲＣ演算部の構成例を示す図である。
【図８】データフォーマットの第２例の説明図である。
【図９】ＣＲＣ符号生成回路における第３実施例の構成図である。
【図１０】図９に示すＣＲＣ演算部の構成例を示す図である。
【図１１】図９に示す補正部の構成例を示す図である。
【図１２】ＣＲＣ符号生成回路における第４実施例の構成図である。
【図１３】図１２に示すシフトレジスタの構成例を示す図である。
【図１４】図１２に示すＣＲＣ演算部の構成例を示す図である。
【図１５】図１２に示すセレクト信号生成部の構成例を示す図である。
【図１６】図１２に示す補正部の構成例を示す図である。
【図１７】データフォーマットの第３例のタイミングチャートである。
【図１８】ＣＲＣ符号生成回路における第５実施例の構成図である。
【図１９】図１８に示すＣＲＣ演算部の構成例を示す図である。
【図２０】図１８に示す補正部の構成例を示す図である。
【図２１】ＣＲＣ符号生成回路における第６実施例の構成図である。
【図２２】図２１に示すシフトレジスタの構成例を示す図である。
【図２３】図２１に示すセレクト信号生成部の構成例を示す図である。
【図２４】図２１に示すＣＲＣ演算部の構成例を示す図である。
【図２５】図２１に示す補正部の構成例を示す図である。
【発明を実施するための形態】
【００１４】
以下、添付する図面を参照して本発明の実施例について説明する。まず、並列データに対するＣＲＣ符号の演算方法について説明する。図１は、並列データに対するＣＲＣ符号の演算方法の説明図である。ＣＲＣ符号生成回路８００は、演算部８０１と、セレクタ８０２と、フリップフロップ８０３〜８０８を備える。
【００１５】
フリップフロップ８０３〜８０８は、前段から入力される信号をクロックエッジにて新たに保持し、次のクロックエッジが到来するまで後段へ出力し続ける状態論理要素である。以下に説明される他の実施例において使用されるフリップフロップについても同様である。
【００１６】
演算部８０１は、フリップフロップ８０３から順次出力される一連のｍビットの並列データに対する、ｘビットのＣＲＣ符号を算出する。演算部８０１は、フリップフロップ８０３から順次出力される一連のｍビットの並列データを入力Ｄとして受信し、セレクタ８０２から出力されるＣＲＣ符号を入力Ｃとして受信する。演算部８０１は、入力Ｃと入力Ｄの間で所定の論理演算を行いｘビットのＣＲＣ符号を算出する。演算部８０１は、算出されたＣＲＣ符号をフリップフロップ８０６へ出力する。
【００１７】
例として、並列データの桁数が４ビットであり（ｍ＝４）、生成多項式が「１＋Ｘ2＋Ｘ5」である場合のＣＲＣ符号を演算する論理式を以下に示す。
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)は、演算結果のＣＲＣ符号の下位第１ビット〜第５ビットの値を示す。また、d(0)〜d(3)は、入力Ｄの下位第１ビット〜第４ビットの値を示す。c(0)〜c(4)は、入力Ｃの下位第１ビット〜第５ビットの値を示す。
【００１８】
セレクタ８０２は、一連の並列データの先頭データの入力タイミングを示すスタートパルスＳＰの値に従って、初期値及びフリップフロップ８０６の出力のいずれかを入力Ｃとして演算部８０１に入力する。フリップフロップ８０６の出力は、前回のクロックサイクルにおける演算部８０１の演算結果、すなわち、今回のクロックサイクルに先行して、前回のクロックサイクルまでに入力された一連の並列データに対して演算されたＣＲＣ符号である。
【００１９】
セレクタ８０２のシンボルの表記法について説明する。入力線「ＳＥＬ」にはセレクト信号が入力される。セレクト信号の値が「１」であるとき（又は、セレクト信号がアサートされているとき）、入力線「１」への入力値が出力８１０として出力される。セレクト信号の値が「０」であるとき（又は、セレクト信号がアサートされていないとき）、入力線「０」への入力値が出力８１０として出力される。以下の説明において参照される他の図面上のセレクタのシンボルについても、上述の表記法が使用される。
【００２０】
本例では、スタートパルスＳＰの値が「１」（先頭データの入力タイミングを示す値）であるとき、セレクタ８０２は、入力線「１」への入力値である初期値を出力する。一方で、セレクタ８０２は、スタートパルスＳＰの値が「０」（先頭データの入力タイミング以外の期間を示す値）であるとき、入力線「０」への入力値であるフリップフロップ８０６の出力を出力する。
【００２１】
したがって、先頭データが入力されたクロックサイクルでは、演算部８０１は、初期値と先頭データとの間で論理演算を行うことによりＣＲＣ符号を算出する。それ以降のクロックサイクルでは、演算部８０１は、前回のクロックサイクルまでに入力された一連の並列データに対するＣＲＣ符号と、今回のクロックサイクルで入力された並列データとの間で論理演算を行うことによりＣＲＣ符号を算出する。
【００２２】
フリップフロップ８０７及び８０８は、並列データへＣＲＣ符号を挿入するタイミングを示すエンドパルスＥＰに対して遅延を与え、エンドパルスＥＰと、データ及びＣＲＣ符号とを同期させる。
【００２３】
次に、ＣＲＣ符号生成回路の実施例を説明する。図２は、ＣＲＣ符号生成回路における第１実施例の構成図である。ＣＲＣ符号生成回路１は、順次出力される一連の１２８ビットの並列データに対する３２ビットのＣＲＣ符号を算出する。なお本明細書の説明において使用する並列データ及びＣＲＣ符号の桁数はあくまで例示であって、実施例の形態を制限するものではない。ＣＲＣ符号生成回路１は、ＣＲＣ演算部２と、補正部３と、シフトレジスタ４と、セレクタ５と、フリップフロップ１０〜１５を備える。
【００２４】
ＣＲＣ演算部２は、各クロックサイクルで順次入力される並列データについて、ＣＲＣ符号を演算する。図３は、図２に示すＣＲＣ演算部２の構成例を示す図である。ＣＲＣ演算部２は、６４ｂｉｔ部分演算部２００及び２０１と、フリップフロップ２５０〜２５５を備える。
【００２５】
６４ｂｉｔ部分演算部２００は、１２８ビットの並列データのうち上位６４ビットに対するＣＲＣ符号の演算を行い、６４ｂｉｔ部分演算部２０１は、１２８ビットの並列データのうち下位６４ビットに対するＣＲＣ符号の演算を行う。以下の説明において、並列データの上位６４ビットを「上位データ」と表記することがある。また、並列データの下位６４ビットを「下位データ」と表記することがある。
【００２６】
同じクロックサイクルで入力された上位データ及び下位データと、この上位データに対して算出されたＣＲＣ符号は、フリップフロップ２５０、２５２及び２５１に保持される。６４ｂｉｔ部分演算部２０１は、次のクロックサイクルで、フリップフロップ２５２に保持された下位データと、フリップフロップ２５１に保持されたＣＲＣ符号に基づいて、下位データに対するＣＲＣ符号を計算する。
【００２７】
すなわち、６４ｂｉｔ部分演算部２００及び２０１は、１２８ビットの並列データに対するＣＲＣ符号を演算する論理演算を並列データの桁方向に分割した部分演算を、異なるパイプライン段において実行する。フリップフロップ２５０〜２５２は、パイプライン段の間を区切るパイプラインレジスタとして動作する。
【００２８】
ＣＲＣ符号を演算する論理演算を複数の部分演算に分割することにより、各部分演算を行う論理演算回路が行う論理演算の段数が、分割前の論理演算の段数よりも小さくなる。このため、論理演算回路が１クロックサイクルで行う論理演算の段数が低減され、１クロックサイクル内で行われる論理演算の演算時間が短くなる。これにより、ＣＲＣ符号演算回路において、フリップフロップなどの状態論理要素から入力信号を読み出してから演算結果を状態論理要素に格納するまでの期間に与える、タイミングマージンを確保しやすくなる。
【００２９】
しかし、上述のようなパイプライン処理でＣＲＣ符号を演算する場合、複数のクロックサイクルに亘って１つの並列データに対するＣＲＣ符号の演算が行われる。このため、先行して演算されたＣＲＣ符号を用いて後続するＣＲＣ符号の演算を開始することができない。
【００３０】
そこで、本実施では、ＣＲＣ演算部２は、初期値と並列データに基づいてＣＲＣ符号を演算する。このため、６４ｂｉｔ部分演算部２００は、入力される１２８ビットの並列データのうち上位データと、初期値に基づいてＣＲＣ符号を演算する。そして補正部３は、ＣＲＣ演算部２から出力されたＣＲＣ符号を、このＣＲＣ符号に先行して演算されたＣＲＣ符号と初期値とに基づいて補正する。
【００３１】
セレクタ５は、スタートパルスＳＰに従って、補正されていないＣＲＣ符号、すなわちＣＲＣ演算部２の最終パイプライン段の６４ｂｉｔ部分演算部２０１から出力されるＣＲＣ符号と、補正部３により補正されたＣＲＣ符号のうち一方を選択する。セレクタ５は、選択されたＣＲＣ符号をフリップフロップ１２に出力する。
【００３２】
並列データの先頭データに対して演算されたＣＲＣ符号は補正の必要がないので、セレクタ５は、並列データの先頭データに対して演算されたＣＲＣ符号として、６４ｂｉｔ部分演算部２０１から出力されるＣＲＣ符号を選択する。セレクタ５は、先頭データ以外のデータに対して演算されたＣＲＣ符号として、補正部３から出力される補正後のＣＲＣ符号を選択する。
【００３３】
図４は、図２に示す補正部３の構成例を示す図である。補正部３は、１２８ｂｉｔ部分演算部３００及び３０１と、ＸＯＲ回路３０２及び３０３を備える。補正部３は、ＣＲＣ演算部２の最終パイプライン段の６４ｂｉｔ部分演算部２０１から出力され、フリップフロップ２５５に保持されたＣＲＣ符号を、補正対象のＣＲＣ符号として入力する。
【００３４】
１２８ｂｉｔ部分演算部３００及び３０１は、入力線「Ｃ」に入力されたＣＲＣ符号又は初期値に基づいて、全てのビットの値が「０」である１２８ｂｉｔの並列データに対するＣＲＣ符号を演算する。１２８ｂｉｔ部分演算部３００の入力線「Ｃ」には初期値が入力され、１２８ｂｉｔ部分演算部３０１の入力線「Ｃ」には、フリップフロップ１２から出力されるＣＲＣ符号が入力される。フリップフロップ１２から出力されるＣＲＣ符号は、補正対象のＣＲＣ符号に対して１クロックサイクル先行して演算されたＣＲＣ符号である。
【００３５】
ＸＯＲ回路３０２は、１２８ｂｉｔ部分演算部３００及び３０１の出力同士の排他的論理和を出力することにより、補正対象のＣＲＣ符号に対する補正値を算出する。ＸＯＲ回路３０３は、この補正値と補正対象のＣＲＣ符号との排他的論理和を出力する。すなわち、ＸＯＲ回路３０３は、上記補正値によって補正対象のＣＲＣ符号を補正し、補正されたＣＲＣ符号を算出する。ＸＯＲ回路３０３の出力はセレクタ５の入力線「０」へ入力される。
【００３６】
以下、補正部３による補正処理について説明する。説明の簡単のため、並列データの桁数が４ビットであり、生成多項式が「１＋Ｘ2＋Ｘ5」である場合のＣＲＣ符号を補正する場合を例示する。補正対象のＣＲＣ符号に対して１クロックサイクル先行して演算されたＣＲＣ符号（以下、単に「先行ＣＲＣ符号」と表記することがある）に代えて、初期値を使ってＣＲＣ符号を演算した場合の誤差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の下位第１ビット〜第５ビットの値を示す。また、d(0)〜d(3)は、並列データの下位第１ビット〜第４ビットの値を示す。c1(0)〜c1(4)は、初期値の下位第１ビット〜第５ビットの値を示す。c2(0)〜c2(4)は、先行ＣＲＣ符号の下位第１ビット〜第５ビットの値を示す。
【００３９】
並列データに関する項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))
【００４０】
１２８ｂｉｔ部分演算部３００は、誤差DIFFを演算する論理式のうち、初期値に含まれるビット同士の排他的論理和により形成される項を演算する。１２８ｂｉｔ部分演算部３０１は、誤差DIFFを演算する論理式のうち、先行ＣＲＣ符号に含まれるビット同士の排他的論理和により形成される項を演算する。ＸＯＲ回路３０２は、これら２つの排他的論理和同士の排他的論理和を、誤差DIFFすなわち補正値として演算する。
【００４１】
誤差DIFFに関する上記の演算式は並列データに関する項を含まないため、補正部３の論理段数は並列データの値に依存しない。また、補正部３の論理段数は、生成多項式の項数の２倍を超えることはない。このため、補正部３にて使用される論理演算回路においても、状態論理要素から入力信号を読み出してから演算結果を状態論理要素に格納するまでの期間に与える、タイミングマージンが確保し易くなる。なお、初期値として固定値を使用すれば、１２８ｂｉｔ部分演算部３００による論理演算は不要になるため、論理段数を更に低減させ、回路規模を小さくすることができる。
【００４２】
図２を参照する。シフトレジスタ４は、フリップフロップ４００〜４０３を備える。シフトレジスタ４は、ＣＲＣ演算部２にて演算されるＣＲＣ符号や、ＣＲＣ演算部２の内部で遅延する並列データに対して、スタートパルスＳＰ及びエンドパルスＥＰを同期させる。
【００４３】
図２に示すＣＲＣ符号生成回路１は、図５に示すデータフォーマットを有する並列データに使用される。図５は、データフォーマットの第１例のタイミングチャートである。図５の第１段は、クロックのタイミングエッジの発生タイミングを示し、第２段は、スタ−トパルスＳＰを示し、第３段はエンドパルスＥＰを示す。
【００４４】
図５の第４段は、並列データを示す。データ中の「ヘッダ」は並列データの先頭に付加されたヘッダ情報を意味し、データ中の「ＣＲＣ３２」はＣＲＣ符号を意味する。このフォーマットの例では、ヘッダは上位データに挿入される。また、ＣＲＣ符号は並列データの下位データに挿入される。例えば、クロックサイクル９００において、ある並列データの入力が開始すると、クロックサイクル９００においてスタートパルスＳＰがアサートされる。クロックサイクル９００における上位データにはヘッダが挿入される。
【００４５】
クロックサイクル９０１においてエンドパルスＥＰがアサートされることにより、クロックサイクル９０１の並列データの下位データにはＣＲＣ符号が挿入されることが示される。
【００４６】
本実施例によれば、ＣＲＣ符号生成回路１に使用される論理演算回路が１クロックサイクルで行う論理演算の段数が低減される。これにより、ＣＲＣ符号演算回路１において、フリップフロップなどの状態論理要素から入力信号を読み出してから演算結果を状態論理要素に格納するまでの期間に与える、タイミングマージンを確保しやすくなる。
【００４７】
また、以下に説明するように、ＣＲＣ符号の論理演算の分割数は「２」に限定されない。ＣＲＣ演算部２は、ＣＲＣ符号の論理演算を３個以上の部分演算に分割してもよい。ＣＲＣ符号の論理演算の分割数を増やすと、フリッププロップなどの状態論理要素の数の増加などに起因して回路規模が大きくなる。しかし、この分割数は、設計条件に応じて容易に最適化することができる。
【００４８】
続いて、他のＣＲＣ符号生成回路の実施例について説明する。図２に示すＣＲＣ符号生成回路１は、１２８ビットの並列データを、半分ずつ分割してパイプライン処理を行ったが、並列データの分割数は３以上でもよい。また、各パイプライン段において、異なる桁数の並列データについてＣＲＣ符号が演算されてもよい。
【００４９】
図６は、ＣＲＣ符号生成回路における第２実施例の構成図である。別途説明する場合を除き、図２に示す構成要素と同様の構成要素には図２で使用した参照符号と同じ参照符号を付する。
【００５０】
ＣＲＣ演算部２は、１２８ビットの並列データに対するＣＲＣ符号の演算を、３つの部分演算に分割する。１つの部分演算は、並列データの第１〜第４３ビット（計４３ビット）に対するＣＲＣ符号の演算である。他のもう１つの部分演算は、並列データの第４４〜第８６ビット（計４３ビット）に対するＣＲＣ符号の演算である。残りの部分演算は、並列データの第８７〜第１２８ビット（計４２ビット）に対するＣＲＣ符号の演算である。以下の説明において、並列データの第８７〜第１２８ビットを「第１部分データ」と記載することがある。また並列データの第４４〜第８６ビットを「第２部分データ」と記載することがある。また並列データの第１〜第４３ビットを「第３部分データ」と記載することがある。
【００５１】
シフトレジスタ４は、フリップフロップ４００〜４０５を備える。シフトレジスタ４は、ＣＲＣ演算部２にて演算されるＣＲＣ符号や、ＣＲＣ演算部２の内部で遅延する並列データに対して、スタートパルスＳＰ及びエンドパルスＥＰを同期させる。
【００５２】
図７は、図６に示すＣＲＣ演算部２の構成例を示す図である。ＣＲＣ演算部２は、４２ｂｉｔ部分演算部２０２と、４３ｂｉｔ部分演算部２０３及び２０４と、フリップフロップ２６０〜２７１を備える。４２ｂｉｔ部分演算部２０２は、第１部分データに対するＣＲＣ符号の演算を行う。４３ｂｉｔ部分演算部２０３は、第２部分データに対するＣＲＣ符号の演算を行う。４３ｂｉｔ部分演算部２０４は、第３部分データに対するＣＲＣ符号の演算を行う。
【００５３】
同じクロックサイクルで入力された第１部分データ、第２部分データ及び第３部分データ、及びこの第１部分データに対して算出されたＣＲＣ符号は、それぞれフリップフロップ２６０、２６２、２６３及び２６１に保持される。４３ｂｉｔ部分演算部２０３は、次のクロックサイクルで、フリップフロップ２６２に保持された第２部分データと、フリップフロップ２６１に保持されたＣＲＣ符号に基づいて、第２部分データに対するＣＲＣ符号を計算する。
【００５４】
また、フリップフロップ２６４、２６５、２６７及び２６６には、同じクロックサイクルで入力された第１部分データ、第２部分データ及び第３部分データ、及びこの第２部分データに対して算出されたＣＲＣ符号が保持される。４３ｂｉｔ部分演算部２０４は、次のクロックサイクルで、フリップフロップ２６７に保持された第３部分データと、フリップフロップ２６６に保持されたＣＲＣ符号に基づいて、第３部分データに対するＣＲＣ符号を計算する。
【００５５】
すなわち、４２ｂｉｔ部分演算部２０２、並びに４３ｂｉｔ部分演算部２０３及び２０４は、１２８ビットの並列データに対するＣＲＣ符号を演算する論理演算を並列データの桁方向に分割した部分演算を、異なるパイプライン段において実行する。フリップフロップ２６０〜２６７は、パイプライン段の間を区切るパイプラインレジスタとして動作する。
【００５６】
本実施例によれば、ＣＲＣ符号の論理演算を３個以上に分割して、パイプライン処理によってＣＲＣ符号を演算することが可能となる。論理演算の分割数を増やすことによって、論理演算に使用される論理演算回路が１クロックサイクルで行う論理演算の段数がさらに低減される。
【００５７】
続いて、他のＣＲＣ符号生成回路の実施例について説明する。図８は、データフォーマットの第２例の説明図である。図８の第１段は、クロックのタイミングエッジの発生タイミングを示し、第２段は、第１スタ−トパルスＳＰ１を示し、第３段は、第２スタ−トパルスＳＰ２を示す。図８の第４段は、第１エンドパルスＥＰ１を示し、第５段は、第２エンドパルスＥＰ２を示す。
【００５８】
図８の第６段は、並列データを示す。データ中の「ヘッダ」は並列データの先頭に付加されたヘッダ情報を意味し、データ中の「ＣＲＣ３２」はＣＲＣ符号を意味する。このフォーマットの例では、上位データ及び下位データのどちらにもヘッダ及びＣＲＣ符号が挿入される場合がある。
【００５９】
第１スタ−トパルスＳＰ１は、上位データが並列データの先頭を含むクロックサイクルにてアサートされる。第２スタ−トパルスＳＰ２は、下位データが並列データの先頭を含むクロックサイクルにてアサートされる。第１エンドパルスＥＰ１は、上位データへＣＲＣ符号を挿入するクロックサイクルにてアサートされる。第２エンドパルスＥＰ２は、下位データへＣＲＣ符号を挿入するクロックサイクルにてアサートされる。
【００６０】
例えば、クロックサイクル９１０において、上位データが並列データの先頭を含むと、クロックサイクル９１０において第１スタートパルスＳＰ１がアサートされる。クロックサイクル９１０における上位データにヘッダが挿入される。クロックサイクル９１１において第２エンドパルスＥＰ２がアサートされることにより、クロックサイクル９１１の並列データの下位データにはＣＲＣ符号が挿入されることが示される。
【００６１】
また例えば、クロックサイクル９１２において、下位データが並列データの先頭を含むと、クロックサイクル９１２において第２スタートパルスＳＰ２がアサートされる。クロックサイクル９１２における下位データにはヘッダが挿入される。クロックサイクル９１３において第１エンドパルスＥＰ１がアサートされることにより、クロックサイクル９１３の上位データにはＣＲＣ符号が挿入されることが示される。
【００６２】
図９は、図８に示すフォーマットのデータについてＣＲＣ符号を演算するＣＲＣ符号生成回路の実施例の構成図である。別途説明する場合を除き、図２に示す構成要素と同様の構成要素には図２で使用した参照符号と同じ参照符号を付する。ＣＲＣ符号生成回路１は、ＣＲＣ演算部２と、補正部３と、シフトレジスタ４と、セレクタ５０及び５１と、セレクト信号生成部６と、フリップフロップ１０〜１９を備える。
【００６３】
シフトレジスタ４は、フリップフロップ４１０〜４１７を備える。シフトレジスタ４は、ＣＲＣ演算部２にて演算されるＣＲＣ符号や、ＣＲＣ演算部２の内部で遅延する並列データに対して、第１スタートパルスＳＰ１、第２スタートパルスＳＰ２、第１エンドパルスＥＰ１及び第２エンドパルスＥＰ２を同期させる。
【００６４】
ＣＲＣ演算部２は、上位データへの挿入用に生成される第１ＣＲＣ符号を、補正部３及びセレクタ５１へ出力する。またＣＲＣ演算部２は、下位データへの挿入用に生成される第２ＣＲＣ符号を、補正部３及びセレクタ５０へ出力する。
【００６５】
図１０は、図９に示すＣＲＣ演算部２の構成例を示す図である。図３に示す構成要素と同様の構成要素には図３で使用した参照符号と同じ参照符号を付する。ＣＲＣ演算部２は、６４ｂｉｔ部分演算部２００及び２０１と、フリップフロップ２５０〜２５６と、セレクタ２１０を備える。
【００６６】
６４ｂｉｔ部分演算部２００によって演算されるＣＲＣ符号が、フリップフロップ２５１及び２５６に順々に保持されたあと、第１ＣＲＣ符号として出力される。また、６４ｂｉｔ部分演算部２０１によって演算されるＣＲＣ符号が、フリップフロップ２５５に保持されたあと、第２ＣＲＣ符号として出力される。
【００６７】
セレクタ２１０は、フリップフロップ４１２によって遅延された第２スタートパルスＳＰ２をセレクト信号として受信する。フリップフロップ４１２は、フリップフロップ２５０〜２５２がデータ及び６４ｂｉｔ部分演算部２００の演算結果に与えた遅延と同じ遅延を、第２スタートパルスＳＰ２に与える。セレクタ２１０は、第２スタートパルスＳＰ２の値に従って、初期値及び６４ｂｉｔ部分演算部２００の演算結果のいずれかを選択して、６４ｂｉｔ部分演算部２０１へ入力する。セレクタ２１０は、特許請求の範囲に記載の第２セレクタの一例として挙げられる。
【００６８】
このため、第２スタートパルスＳＰ２がアサートされていないときは、ＣＲＣ演算部２は、図３に示すＣＲＣ演算部２と同様に動作する。第２スタートパルスＳＰ２がアサートされると、６４ｂｉｔ部分演算部２０１は、６４ｂｉｔ部分演算部２００が初期値と上位データを使用してＣＲＣ符号を演算するのと同じ様に、初期値と下位データを使用してＣＲＣ符号を演算する。このため、下位データが並列データの先頭を含んでいても、ＣＲＣ演算部２は、ＣＲＣ符号の演算を開始することが可能になる。
【００６９】
図９を参照する。第１ＣＲＣ符号及び第２ＣＲＣ符号は補正部３によって補正され、それぞれセレクタ５１及び５０へ入力される。セレクタ５１は、第１スタートパルスＳＰ１に従って、補正されていない第１ＣＲＣ符号、すなわち６４ｂｉｔ部分演算部２００から出力される第１ＣＲＣ符号と、補正部３により補正された第１ＣＲＣ符号のうち一方を選択する。
【００７０】
並列データの先頭を含む上位データに第１ＣＲＣを挿入する場合には、第１ＣＲＣ符号を補正しなくてよい。したがって、セレクタ５１は、第１スタートパルスＳＰ１がアサートされたとき、補正されていない第１ＣＲＣ符号を選択する。セレクタ５１は、第１スタートパルスＳＰ１がアサートされていないとき、補正された第１ＣＲＣ符号を選択する。セレクタ５１は、選択された第１ＣＲＣ符号をフリップフロップ１３へ出力する。
【００７１】
一方で、上位データ及び下位データのどちらかが並列データの先頭を含むクロックサイクルの下位データに挿入される第２ＣＲＣ符号は補正しなくてよい。このため、セレクト信号生成回路６は、第１スタートパルスＳＰ１及び第２スタートパルスＳＰ２の論理和を、セレクタ５０に対するセレクト信号として演算するＯＲ回路６００を備える。
【００７２】
セレクタ５０は、セレクト信号がアサートされたとき、補正されていない第２ＣＲＣ符号を選択する。セレクタ５０は、第１スタートパルスＳＰ１がアサートされていないとき、補正された第２ＣＲＣ符号を選択する。セレクタ５０は、選択された第２ＣＲＣ符号をフリップフロップ１２へ出力する。
【００７３】
図１１は、図９に示す補正部３の構成例を示す図である。図４に示す構成要素と同様の構成要素には図４で使用した参照符号と同じ参照符号を付する。補正部３は、１２８ｂｉｔ部分演算部３００及び３０１と、ＸＯＲ回路３０２及び３０３を備える。また、補正部３は、６４ｂｉｔ部分演算部３１０及び３１１と、ＸＯＲ回路３１２及び３１３を備える。
【００７４】
補正部３は、ＣＲＣ演算部２の６４ｂｉｔ部分演算部２００から出力され、フリップフロップ２５６に保持されたＣＲＣ符号を、補正対象の第１ＣＲＣ符号として入力する。補正部３は、ＣＲＣ演算部２の最終パイプライン段の６４ｂｉｔ部分演算部２０１から出力され、フリップフロップ２５５に保持されたＣＲＣ符号を、補正対象の第２ＣＲＣ符号として入力する。
【００７５】
１２８ｂｉｔ部分演算部３００及び３０１と、ＸＯＲ回路３０２及び３０３は、補正対象の第２ＣＲＣ符号を補正し、補正された第２ＣＲＣ符号を算出する。ＸＯＲ回路３０３の出力はセレクタ５０の入力線「０」へ入力される。１２８ｂｉｔ部分演算部３００及び３０１と、ＸＯＲ回路３０２及び３０３は、特許請求の範囲に記載の第２補正部の一例として挙げられる。
【００７６】
６４ｂｉｔ部分演算部３１０及び３１１の機能は、ＣＲＣ符号が演算される並列データのビット数が６４である点を除き、１２８ｂｉｔ部分演算部３００の機能と同様である。６４ｂｉｔ部分演算部３１０の入力線「Ｃ」には初期値が入力され、６４ｂｉｔ部分演算部３１１の入力線「Ｃ」にはフリップフロップ１２から出力される第２ＣＲＣ符号が入力される。フリップフロップ１２から出力される第２ＣＲＣ符号は、補正対象の第１ＣＲＣ符号に対して１クロックサイクル先行して演算された第２ＣＲＣ符号である。
【００７７】
ＸＯＲ回路３１２は、６４ｂｉｔ部分演算部３１０及び３１１の出力同士の排他的論理和を出力することにより、補正対象の第１ＣＲＣ符号に対する補正値を算出する。ＸＯＲ回路３１３は、この補正値と補正対象の第１ＣＲＣ符号との排他的論理和を出力する。すなわち、ＸＯＲ回路３１３は、上記補正値によって補正対象の第１ＣＲＣ符号を補正し、補正された第１ＣＲＣ符号を算出する。ＸＯＲ回路３１３の出力はセレクタ５１の入力線「０」へ入力される。６４ｂｉｔ部分演算部３１０及び３１１と、ＸＯＲ回路３１２及び３１３は、特許請求の範囲に記載の第１補正部の一例として挙げられる。
【００７８】
本実施例によれば、ヘッダ及びＣＲＣ符号が、上位データ及び下位データのいずれにも挿入されることがあるデータフォーマットに対しても、ＣＲＣ符号を生成することができる。
【００７９】
続いて、他のＣＲＣ符号生成回路の実施例について説明する。図１２は、ＣＲＣ符号生成回路における第４実施例の構成図である。図９に示すＣＲＣ符号生成回路１の場合、１２８ビットの並列データが半分ずつ分割され、パイプライン処理が実行されたが、並列データの分割数は３以上でもよい。また、各パイプライン段において、異なる桁数の並列データについてＣＲＣ符号が演算されてもよい。また分割されたデータのいずれの部分に、並列データの先頭やＣＲＣ符号を挿入してもよい。
【００８０】
別途説明する場合を除き、図９に示す構成要素と同様の構成要素には図９で使用した参照符号と同じ参照符号を付する。ＣＲＣ符号生成回路１は、ＣＲＣ演算部２と、補正部３と、シフトレジスタ４と、セレクタ５０〜５３と、セレクト信号生成部６と、フリップフロップ１０〜２３を備える。
【００８１】
ＣＲＣ演算部２は、１２８ビットの並列データに対するＣＲＣ符号の演算を、３つの部分演算に分割する。各部分演算は、第１部分データ〜第３部分データに対するＣＲＣ符号の演算を行う。
【００８２】
図１３は、図１２に示すシフトレジスタ４の構成例を示す図である。シフトレジスタ４は、フリップフロップ４２０〜４３７を備える。シフトレジスタ４は、ＣＲＣ演算部２にて演算されるＣＲＣ符号や、ＣＲＣ演算部２の内部で遅延する並列データに対して、第１スタートパルスＳＰ１、第２スタートパルスＳＰ２、第３スタートパルスＳＰ３、第１エンドパルスＥＰ１、第２エンドパルスＥＰ２及び第３エンドパルスＥＰ３を同期させる。
【００８３】
第１スタ−トパルスＳＰ１は、第１部分データが並列データの先頭が含むクロックサイクルにてアサートされる。第２スタ−トパルスＳＰ２は、第２部分データが並列データの先頭を含むクロックサイクルにてアサートされる。第３スタ−トパルスＳＰ３は、第３部分データが並列データの先頭を含むクロックサイクルにてアサートされる。
【００８４】
第１エンドパルスＥＰ１は、第１部分データへＣＲＣ符号を挿入するクロックサイクルにてアサートされる。第２エンドパルスＥＰ２は、第２部分データへＣＲＣ符号を挿入するクロックサイクルにてアサートされる。第３エンドパルスＥＰ３は、第３部分データへＣＲＣ符号を挿入するクロックサイクルにてアサートされる。
【００８５】
ＣＲＣ演算部２は、第１部分データへの挿入用に生成される第１ＣＲＣ符号を、補正部３及びセレクタ５２へ出力する。またＣＲＣ演算部２は、第２部分データへの挿入用に生成される第２ＣＲＣ符号を、補正部３及びセレクタ５１へ出力する。またＣＲＣ演算部２は、第３部分データへの挿入用に生成される第３ＣＲＣ符号を、補正部３及びセレクタ５０へ出力する。
【００８６】
図１４は、図１２に示すＣＲＣ演算部２の構成例を示す図である。図７に示す構成要素と同様の構成要素には図７で使用した参照符号と同じ参照符号を付する。ＣＲＣ演算部２は、４２ｂｉｔ部分演算部２０２と、４３ｂｉｔ部分演算部２０３及び２０４と、フリップフロップ２６０〜２７４と、セレクタ２１１及び２１２を備える。
【００８７】
４２ｂｉｔ部分演算部２０２によって演算されるＣＲＣ符号が、フリップフロップ２６１、２７２及び２７３に順々に保持されたあと、第１ＣＲＣ符号として出力される。また、４３ｂｉｔ部分演算部２０３によって演算されるＣＲＣ符号が、フリップフロップ２６６及び２７４に順々に保持されたあと、第２ＣＲＣ符号として出力される。また、４３ｂｉｔ部分演算部２０４によって演算されるＣＲＣ符号が、フリップフロップ２７１に保持されたあと、第３ＣＲＣ符号として出力される。
【００８８】
セレクタ２１１は、図１３のフリップフロップ４２３によって遅延された第２スタートパルスＳＰ２をセレクト信号として受信する。フリップフロップ４２３は、フリップフロップ２６０〜２６３がデータ及び４２ｂｉｔ部分演算部２０２の演算結果に与えた遅延と同じ遅延を、第２スタートパルスＳＰ２に与える。セレクタ２１１は、第２スタートパルスＳＰ２の値に従って、初期値及び４２ｂｉｔ部分演算部２０２の演算結果のいずれかを選択して、４３ｂｉｔ部分演算部２０３へ入力する。
【００８９】
セレクタ２１２は、図１３のフリップフロップ４２７から出力される第３スタートパルスＳＰ３をセレクト信号として受信する。フリップフロップ４２７から出力される第３スタートパルスＳＰ３には、フリップフロップ２６０〜２６７によってデータ及び４３ｂｉｔ部分演算部２０３の演算結果に与えられた遅延と同じ遅延が与えられる。セレクタ２１２は、第３スタートパルスＳＰ３の値に従って、初期値及び４３ｂｉｔ部分演算部２０３の演算結果のいずれかを選択して、４３ｂｉｔ部分演算部２０４へ入力する。
【００９０】
このため、第２スタートパルスＳＰ２及び第３スタートパルスＳＰ３がアサートされていないときは、ＣＲＣ演算部２は、図７に示すＣＲＣ演算部２と同様に動作する。第２スタートパルスＳＰ２がアサートされると、４３ｂｉｔ部分演算部２０３は、４２ｂｉｔ部分演算部２０２が初期値と第１部分データを使用してＣＲＣ符号を演算するのと同じ様に、初期値と第２部分データを使用してＣＲＣ符号を演算する。このため、第２部分データが並列データの先頭データを含んでいても、ＣＲＣ演算部２は、ＣＲＣ符号の演算を開始することが可能になる。
【００９１】
また、第３スタートパルスＳＰ３がアサートされると、４３ｂｉｔ部分演算部２０４は、初期値と第３部分データを使用してＣＲＣ符号を演算する。このため、第３部分データが並列データの先頭データを含んでいても、ＣＲＣ演算部２は、ＣＲＣ符号の演算を開始することが可能になる。
【００９２】
図１２を参照する。第１〜３ＣＲＣ符号は補正部３によって補正され、それぞれセレクタ５２〜５０へ入力される。セレクタ５２は、第１スタートパルスＳＰ１に従って、補正されていない第１ＣＲＣ符号、すなわち４２ｂｉｔ部分演算部２０２から出力される第１ＣＲＣ符号と、補正部３により補正された第１ＣＲＣ符号のうち一方を選択する。セレクタ５２は、第１スタートパルスＳＰ１がアサートされたとき、補正されていない第１ＣＲＣ符号を選択する。セレクタ５２は、第１スタートパルスＳＰ１がアサートされていないとき、補正された第１ＣＲＣ符号を選択する。セレクタ５２は、選択された第１ＣＲＣ符号をフリップフロップ１４に出力する。
【００９３】
また、セレクタ５１は、セレクト信号生成部６により生成されたセレクト信号に従って、補正されていない第２ＣＲＣ符号、すなわち４３ｂｉｔ部分演算部２０３から出力される第２ＣＲＣ符号と、補正部３により補正された第２ＣＲＣ符号のうち一方を選択する。セレクタ５１は、セレクト信号がアサートされたとき、補正されていない第２ＣＲＣ符号を選択する。セレクタ５１は、セレクト信号がアサートされていないとき、補正された第２ＣＲＣ符号を選択する。セレクタ５１は、選択された第２ＣＲＣ符号をフリップフロップ１３に出力する。
【００９４】
また、セレクタ５０は、セレクト信号生成部６により生成されたセレクト信号に従って、補正されていない第３ＣＲＣ符号、すなわち４３ｂｉｔ部分演算部２０４から出力される第３ＣＲＣ符号と、補正部３により補正された第３ＣＲＣ符号のうち一方を選択する。セレクタ５０は、セレクト信号がアサートされたとき、補正されていない第３ＣＲＣ符号を選択する。セレクタ５０は、セレクト信号がアサートされていないとき、補正された第３ＣＲＣ符号を選択する。セレクタ５０は、選択された第３ＣＲＣ符号をフリップフロップ１２に出力する。
【００９５】
図１５は、図１２に示すセレクト信号生成部６の構成例を示す図である。第１部分データ及び第２部分データのどちらかが並列データの先頭を含むクロックサイクルの第２部分データに挿入される第２ＣＲＣ符号は、補正しなくてよい。このため、セレクト信号生成回路６は、第１スタートパルスＳＰ１及び第２スタートパルスＳＰ２の論理和を、セレクタ５１に対するセレクト信号として演算するＯＲ回路６２を備える。
【００９６】
また、第１部分データ〜第３部分データのどれかが並列データの先頭を含むクロックサイクルの第３部分データに挿入される第３ＣＲＣ符号は、補正しなくてよい。このため、セレクト信号生成回路６は、第１スタートパルスＳＰ１、第２スタートパルスＳＰ２及び第３スタートパルスＳＰ３の論理和を、セレクタ５０に対するセレクト信号として演算するＯＲ回路６１を備える。
【００９７】
図１６は、図１２に示す補正部３の構成例を示す図である。図４に示す構成要素と同様の構成要素には図４で使用した参照符号と同じ参照符号を付する。補正部３は、１２８ｂｉｔ部分演算部３００及び３０１と、ＸＯＲ回路３０２及び３０３を備える。また、補正部３は、４２ｂｉｔ部分演算部３２０及び３２１と、ＸＯＲ回路３２２及び３２３を備える。また、補正部３は、８５ｂｉｔ部分演算部３３０及び３３１と、ＸＯＲ回路３３２及び３３３を備える。
【００９８】
補正部３は、ＣＲＣ演算部２の４２ｂｉｔ部分演算部２０２から出力され、フリップフロップ２７３に保持されたＣＲＣ符号を、補正対象の第１ＣＲＣ符号として入力する。補正部３は、４３ｂｉｔ部分演算部２０３から出力され、フリップフロップ２７４に保持されたＣＲＣ符号を、補正対象の第２ＣＲＣ符号として入力する。補正部３は、ＣＲＣ演算部２の最終パイプライン段の４３ｂｉｔ部分演算部２０４から出力され、フリップフロップ２７１に保持されたＣＲＣ符号を、補正対象の第３ＣＲＣ符号として入力する。
【００９９】
１２８ｂｉｔ部分演算部３００及び３０１と、ＸＯＲ回路３０２及び３０３は、補正対象の第３ＣＲＣ符号を補正し、補正された第３ＣＲＣ符号を算出する。ＸＯＲ回路３０３の出力はセレクタ５０の入力線「０」へ入力される。
【０１００】
４２ｂｉｔ部分演算部３２０及び３２１の機能は、ＣＲＣ符号が演算される並列データのビット数が４２である点を除き、１２８ｂｉｔ部分演算部３００の機能と同様である。また、８５ｂｉｔ部分演算部３３０及び３３１の機能は、ＣＲＣ符号が演算される並列データのビット数が８５である点を除き、１２８ｂｉｔ部分演算部３００の機能と同様である。
【０１０１】
４２ｂｉｔ部分演算部３２０の入力線「Ｃ」には初期値が入力され、４２ｂｉｔ部分演算部３２１の入力線「Ｃ」にはフリップフロップ１２から出力される第３ＣＲＣ符号が入力される。フリップフロップ１２から出力される第３ＣＲＣ符号は、補正対象の第１ＣＲＣ符号に対して１クロックサイクル先行して演算された第３ＣＲＣ符号である。
【０１０２】
８５ｂｉｔ部分演算部３３０の入力線「Ｃ」には初期値が入力され、８５ｂｉｔ部分演算部３３１の入力線「Ｃ」にはフリップフロップ１２から出力される第３ＣＲＣ符号が入力される。
【０１０３】
ＸＯＲ回路３２２は、４２ｂｉｔ部分演算部３２０及び３２１の出力同士の排他的論理和を出力することにより、補正対象の第１ＣＲＣ符号に対する補正値を算出する。ＸＯＲ回路３２３は、この補正値と補正対象の第１ＣＲＣ符号との排他的論理和を出力する。すなわち、ＸＯＲ回路３２３は、上記補正値によって補正対象の第１ＣＲＣ符号を補正し、補正された第１ＣＲＣ符号を算出する。ＸＯＲ回路３２３の出力はセレクタ５２の入力線「０」へ入力される。
【０１０４】
ＸＯＲ回路３３２は、８５ｂｉｔ部分演算部３３０及び３３１の出力同士の排他的論理和を出力することにより、補正対象の第２ＣＲＣ符号に対する補正値を算出する。ＸＯＲ回路３３３は、この補正値と補正対象の第２ＣＲＣ符号との排他的論理和を出力する。すなわち、ＸＯＲ回路３３３は、上記補正値によって補正対象の第２ＣＲＣ符号を補正し、補正された第２ＣＲＣ符号を算出する。ＸＯＲ回路３３３の出力はセレクタ５１の入力線「０」へ入力される。
【０１０５】
本実施例によれば、ヘッダ及びＣＲＣ符号が、第１〜第３部分データのいずれにも挿入されることがあるデータフォーマットに対しても、ＣＲＣ符号を生成することができる。
【０１０６】
続いて、他のＣＲＣ符号生成回路の実施例について説明する。図１７は、データフォーマットの第３例のタイミングチャートである。図１７の第１段は、クロックのタイミングエッジの発生タイミングを示し、第２段は、第１スタ−トパルスＳＰ１を示し、第３段は、第２スタ−トパルスＳＰ２を示す。図１７の第４段は、第１エンドパルスＥＰ１を示し、第５段は、第２エンドパルスＥＰ２を示す。
【０１０７】
図１７の第６段は、並列データを示す。データ中の「ヘッダ」は並列データの先頭に付加されたヘッダ情報を意味し、データ中の「ＣＲＣ３２」はＣＲＣ符号を意味する。このフォーマットの例では、上位データと下位データとが独立しており、それぞれのデータの先頭にヘッダが挿入され、末尾にＣＲＣ符号が挿入される。
【０１０８】
第１スタ−トパルスＳＰ１は、上位データの先頭が存在するクロックサイクルにてアサートされる。第２スタ−トパルスＳＰ２は、下位データの先頭が存在するクロックサイクルにてアサートされる。第１エンドパルスＥＰ１は、上位データへＣＲＣ符号を挿入するクロックサイクルにてアサートされる。第２エンドパルスＥＰ２は、下位データへＣＲＣ符号を挿入するクロックサイクルにてアサートされる。
【０１０９】
例えば、クロックサイクル９２０において上位データの先頭が存在すると、クロックサイクル９２０において第１スタートパルスＳＰ１がアサートされる。クロックサイクル９２０における上位データにはヘッダが挿入される。クロックサイクル９２１において第１エンドパルスＥＰ１がアサートされることにより、クロックサイクル９２１の上位データにはＣＲＣ符号が挿入されることが示される。
【０１１０】
また例えば、クロックサイクル９２２において下位データの先頭が存在すると、クロックサイクル９２２において第２スタートパルスＳＰ２がアサートされる。クロックサイクル９２２における下位データにはヘッダが挿入される。クロックサイクル９２３において第２エンドパルスＥＰ２がアサートされることにより、クロックサイクル９２３の下位データにはＣＲＣ符号が挿入されることが示される。
【０１１１】
図１８は、図１７に示すフォーマットのデータについてＣＲＣ符号を演算するＣＲＣ符号生成回路の実施例の構成図である。別途説明する場合を除き、図９に示す構成要素と同様の構成要素には図９で使用した参照符号と同じ参照符号を付する。ＣＲＣ符号生成回路１は、ＣＲＣ演算部２と、補正部３と、シフトレジスタ４と、セレクタ５０及び５１と、セレクト信号生成部６と、フリップフロップ１０〜１９を備える。シフトレジスタ４は、フリップフロップ４１０〜４１７を備える。
【０１１２】
ＣＲＣ符号生成回路１は、モード設定信号を受信する。モード設定信号がアサートされていないとき、ＣＲＣ符号生成回路１は、図９に示すＣＲＣ符号生成回路１と同様に動作する。モード設定信号がアサートされるとき、ＣＲＣ符号生成回路１は、図１７に示すフォーマットのデータの上位データ及び下位データにそれぞれ挿入するＣＲＣ符号を生成するように動作する。以下の説明において、モード設定信号がアサートされていない場合における動作モードを「第１モード」と表記することがある。モード設定信号がアサートされている場合における動作モードを「第２モード」と表記することがある。
【０１１３】
第１モードでは、上位データ及び下位データのどちらかが並列データの先頭を含むクロックサイクルの下位データに挿入される第２ＣＲＣ符号は補正しなくてよい。これに対し第２モードでは、並列データの先頭を含む下位データに挿入される第２ＣＲＣ符号のみ、補正しなくてよい。このため、セレクト信号生成回路６は、モード設定信号がアサートされている場合には、ＯＲ回路６００への第１スタートパルスＳＰ１の入力を阻止するＡＮＤ回路６０１とインバータ６０２を備える。
【０１１４】
図１９は、図１８に示すＣＲＣ演算部２の構成例を示す図である。図１０に示す構成要素と同様の構成要素には図１０で使用した参照符号と同じ参照符号を付する。ＣＲＣ演算部２は、６４ｂｉｔ部分演算部２００及び２０１と、フリップフロップ２５０〜２５６と、セレクタ２１０と、ＯＲ回路２２０を備える。
【０１１５】
第２モードでは、６４ｂｉｔ部分演算部２０１は、上位データに対して６４ｂｉｔ部分演算部２００により演算されたＣＲＣ符号と独立して、下位データに対するＣＲＣ符号を演算する。このためＯＲ回路２２０は、モード設定信号と、フリップフロップ４１２によって遅延された第２スタートパルスＳＰ２との論理和を、セレクタ２１０のセレクト信号として生成する。これによって第２モードでは、第２スタートパルスＳＰ２の値に関わらず、６４ｂｉｔ部分演算部２０１には初期値が入力される。
【０１１６】
図２０は、図１８に示す補正部３の構成例を示す図である。図１１に示す構成要素と同様の構成要素には図１１で使用した参照符号と同じ参照符号を付する。補正部３は、１２８ｂｉｔ部分演算部３００及び３０１と、ＸＯＲ回路３０２及び３０３を備える。また、補正部３は、６４ｂｉｔ部分演算部３１０及び３１１と、ＸＯＲ回路３１２及び３１３を備える。
【０１１７】
さらに、補正部３は、６４ｂｉｔ部分演算部３４０及び３４１と、ＸＯＲ回路３４２を備える。６４ｂｉｔ部分演算部３４０及び３４１の機能は、６４ｂｉｔ部分演算部３１０と同様である。また、補正部３は、セレクタ３５０及び３５１を備える。
【０１１８】
第１モードでは、６４ｂｉｔ部分演算部３１０及び３１１と、ＸＯＲ回路３１２は、初期値と、１クロックサイクル先行して演算された第２ＣＲＣ符号とに基づいて、第１ＣＲＣ符号に対する補正値を演算する。一方で第２モードでは、６４ｂｉｔ部分演算部３１０及び３１１と、ＸＯＲ回路３１２は、初期値と、１クロックサイクル先行して演算された第１ＣＲＣ符号とに基づいて、第１ＣＲＣ符号に対する補正値を演算する。
【０１１９】
セレクタ３５０は、モード設定信号に基づいて、６４ｂｉｔ部分演算部３１１の入力線「Ｃ」へ入力する信号として、フリップフロップ１３及び１２からそれぞれ出力される第１ＣＲＣ符号及び第２ＣＲＣ符号のいずれか一方を選択する。セレクタ３５０は、特許請求の範囲に記載の第３セレクタの一例として挙げられる。
【０１２０】
６４ｂｉｔ部分演算部３４０及び３４１と、ＸＯＲ回路３４２は、第２モードにおいて下位データに挿入されるＣＲＣ符号に対する補正値を演算する。６４ｂｉｔ部分演算部３４０の入力線「Ｃ」には初期値が入力され、６４ｂｉｔ部分演算部３４１の入力線「Ｃ」にはフリップフロップ１２から出力される第２ＣＲＣ符号が入力される。ＸＯＲ回路３４２は、６４ｂｉｔ部分演算部３４０及び３４１の出力同士の排他的論理和を出力することにより、第２モードにおける第２ＣＲＣ符号に対する補正値を算出する。セレクタ３５１は、モード設定信号に基づいて、第２ＣＲＣ符号に対する補正値として、ＸＯＲ回路３０２及び３４２のどちらかから出力される補正値を選択する。
【０１２１】
本実施例によれば、本実施例によれば、上位データと下位データとが独立しているデータフォーマットに対しても、ＣＲＣ符号を生成することができる。
【０１２２】
続いて、他のＣＲＣ符号生成回路の実施例について説明する。図２１は、ＣＲＣ符号生成回路における第６実施例の構成図である。図１８に示すＣＲＣ符号生成回路１の場合、１２８ビットの並列データが半分ずつ分割され、上位データと下位データとが独立しているデータフォーマットに対してＣＲＣ符号を生成した。しかし、並列データは３個以上の部分データに分割され、各部分データが独立していてもよい。いずれかの部分データの桁数は、他の部分データの桁数と異なっていてもよい。
【０１２３】
別途説明する場合を除き、図１２に示す構成要素と同様の構成要素には図１２で使用した参照符号と同じ参照符号を付する。ＣＲＣ符号生成回路１は、ＣＲＣ演算部２と、補正部３と、シフトレジスタ４と、セレクタ５０〜５２と、セレクト信号生成部６と、フリップフロップ１０〜２３を備える。図２２は、図２１に示すシフトレジスタ４の構成例を示す図である。図１３に示す構成要素と同様の構成要素には図１３で使用した参照符号と同じ参照符号を付する。シフトレジスタ４は、フリップフロップ４２０〜４３７を備える。
【０１２４】
図１８に示すＣＲＣ符号生成回路１と同様に、ＣＲＣ符号生成回路１は、モード設定信号を受信する。モード設定信号がアサートされていないとき、ＣＲＣ符号生成回路１は、図１２に示すＣＲＣ符号生成回路１と同様に動作する。モード設定信号がアサートされるとき、ＣＲＣ符号生成回路１は、第１部分データ〜第３部分データが独立しているデータフォーマットに対して、それぞれの部分データに挿入するＣＲＣ符号を生成するように動作する。
【０１２５】
図２３は、図２１に示すセレクト信号生成部６の構成例を示す図である。図１５に示す構成要素と同様の構成要素には図１５で使用した参照符号と同じ参照符号を付する。第２モードでは、並列データの先頭を含む第２部分データに挿入される第２ＣＲＣ符号のみ、補正しなくてよい。また第２モードでは、並列データの先頭を含む第３部分データに挿入される第３ＣＲＣ符号のみ、補正しなくてよい。
【０１２６】
このため、セレクト信号生成回路６は、モード設定信号がアサートされている場合には、ＯＲ回路６１及び６２への第１スタートパルスＳＰ１の入力を阻止するＡＮＤ回路６３とインバータ６４を備える。また、セレクト信号生成回路６は、モード設定信号がアサートされている場合には、ＯＲ回路６１への第２スタートパルスＳＰ２の入力を阻止するＡＮＤ回路６５とインバータ６６を備える。
【０１２７】
図２４は、図２１に示すＣＲＣ演算部２の構成例を示す図である。図１４に示す構成要素と同様の構成要素には図１４で使用した参照符号と同じ参照符号を付する。ＣＲＣ演算部２は、４２ｂｉｔ部分演算部２０２と、４３ｂｉｔ部分演算部２０３及び２０４と、フリップフロップ２６０〜２７４と、セレクタ２１１及び２１２と、ＯＲ回路２２１及び２２２を備える。
【０１２８】
第２モードでは、４３ｂｉｔ部分演算部２０３は、第１部分データに対して４２ｂｉｔ部分演算部２０２により演算されたＣＲＣ符号と独立して、第２部分データに対するＣＲＣ符号を演算する。このためＯＲ回路２２１は、モード設定信号と、フリップフロップ４２３によって遅延された第２スタートパルスＳＰ２との論理和を、セレクタ２１１のセレクト信号として生成する。これによって第２モードでは、第２スタートパルスＳＰ２の値に関わらず、４３ｂｉｔ部分演算部２０３には初期値が入力される。
【０１２９】
また第２モードでは、４３ｂｉｔ部分演算部２０４は、第２部分データに対して４３ｂｉｔ部分演算部２０３により演算されたＣＲＣ符号と独立して、第３部分データに対するＣＲＣ符号を演算する。このためＯＲ回路２２２は、モード設定信号と、フリップフロップ４２７から出力される第３スタートパルスＳＰ３との論理和を、セレクタ２１２のセレクト信号として生成する。これによって第２モードでは、第３スタートパルスＳＰ３の値に関わらず、４３ｂｉｔ部分演算部２０４には初期値が入力される。
【０１３０】
図２５は、図２１に示す補正部３の構成例を示す図である。図１６に示す構成要素と同様の構成要素には図１６で使用した参照符号と同じ参照符号を付する。補正部３は、１２８ｂｉｔ部分演算部３００及び３０１と、ＸＯＲ回路３０２及び３０３を備える。また、補正部３は、４２ｂｉｔ部分演算部３２０及び３２１と、ＸＯＲ回路３２２及び３２３を備える。また、補正部３は、８５ｂｉｔ部分演算部３３０及び３３１と、ＸＯＲ回路３３２及び３３３を備える。
【０１３１】
さらに補正部３は、４３ｂｉｔ部分演算部３６０及び３６１と、ＸＯＲ回路３６２を備える。また補正部３は、４３ｂｉｔ部分演算部３７０及び３７１と、ＸＯＲ回路３７２を備える。また、補正部３は、セレクタ３５２〜３５４を備える。４３ｂｉｔ部分演算部３６０、３６１、３７０及び３７１の機能は、ＣＲＣ符号が演算される並列データのビット数が４３である点を除き、１２８ｂｉｔ部分演算部３００の機能と同様である。
【０１３２】
第１モードでは、４２ｂｉｔ部分演算部３２０及び３２１と、ＸＯＲ回路３２２は、初期値と、１クロックサイクル先行して演算された第３ＣＲＣ符号とに基づいて、第１ＣＲＣ符号に対する補正値を演算する。一方で第２モードでは、４２ｂｉｔ部分演算部３２０及び３２１と、ＸＯＲ回路３２２は、初期値と、１クロックサイクル先行して演算された第１ＣＲＣ符号とに基づいて、第１ＣＲＣ符号に対する補正値を演算する。
【０１３３】
セレクタ３５２は、モード設定信号に基づいて、４２ｂｉｔ部分演算部３２１の入力線「Ｃ」へ入力する信号として、フリップフロップ１４及び１２からそれぞれ出力される第１ＣＲＣ符号及び第３ＣＲＣ符号のいずれか一方を選択する。
【０１３４】
４３ｂｉｔ部分演算部３７０及び３７１と、ＸＯＲ回路３７２は、第２モードにおいて第２部分データに挿入されるＣＲＣ符号に対する補正値を演算する。４３ｂｉｔ部分演算部３７０の入力線「Ｃ」には初期値が入力され、４３ｂｉｔ部分演算部３７１の入力線「Ｃ」にはフリップフロップ１３から出力される第２ＣＲＣ符号が入力される。ＸＯＲ回路３７２は、４３ｂｉｔ部分演算部３７０及び３７１の出力同士の排他的論理和を出力することにより、第２モードにおける第２ＣＲＣ符号に対する補正値を算出する。セレクタ３５４は、モード設定信号に基づいて、第２ＣＲＣ符号に対する補正値として、ＸＯＲ回路３３２及び３７２のどちらかから出力される補正値を選択する。
【０１３５】
４３ｂｉｔ部分演算部３６０及び３６１と、ＸＯＲ回路３６２は、第２モードにおいて第３部分データに挿入されるＣＲＣ符号に対する補正値を演算する。４３ｂｉｔ部分演算部３６０の入力線「Ｃ」には初期値が入力され、４３ｂｉｔ部分演算部３６１の入力線「Ｃ」にはフリップフロップ１２から出力される第３ＣＲＣ符号が入力される。ＸＯＲ回路３６２は、４３ｂｉｔ部分演算部３６０及び３６１の出力同士の排他的論理和を出力することにより、第２モードにおける第３ＣＲＣ符号に対する補正値を算出する。セレクタ３５３は、モード設定信号に基づいて、第３ＣＲＣ符号に対する補正値として、ＸＯＲ回路３０２及び３６２のどちらかから出力される補正値を選択する。
【０１３６】
本実施例によれば、本実施例によれば、独立した第１部分データ〜第３部分データを含むデータフォーマットに対しても、ＣＲＣ符号を生成することができる。
【０１３７】
以上の実施例を含む実施形態に関し、更に以下の付記を開示する。
【０１３８】
（付記１）
１個以上の並列データを逐次入力し、各前記並列データについて、該並列データと、初期値又は先行して演算された巡回冗長検査符号と、に基づいて巡回冗長検査符号を算出する所定演算を反復することにより、前記１個以上の並列データに対する巡回冗長検査符号を生成する巡回冗長検査符号生成回路であって、
前記所定演算を前記並列データの桁方向に分割した部分演算のそれぞれを、異なるパイプライン段において、前記初期値と前記並列データとに基づいて実行する複数の部分演算部と、
前記初期値と前記先行して演算された巡回冗長検査符号とに基づいて、前記部分演算部によって演算された巡回冗長検査符号を補正する補正部と、
を備える巡回冗長検査符号生成回路。
【０１３９】
（付記２）
入力される前記並列データが前記１個以上の並列データの先頭データであるか否かに応じて、前記補正部による補正前後の巡回冗長検査符号のいずれか一方を選択する第１セレクタを備える付記１に記載の巡回冗長検査符号生成回路。
【０１４０】
（付記３）
複数の前記パイプライン段の２段目以降のいずれかのパイプライン段の前記部分演算部に、前記初期値及び前記いずれかのパイプライン段の前段の前記部分演算部から出力される巡回冗長検査符号のいずれか一方を選択して入力する第２セレクタを備え、
前記補正部は、前記いずれかのパイプライン段の前段の前記部分演算部から出力される巡回冗長検査符号を補正する第１補正部と、最終段のパイプライン段の前記部分演算部から出力される巡回冗長検査符号を補正する第２補正部と、を少なくとも備える付記１又は２に記載の巡回冗長検査符号生成回路。
【０１４１】
（付記４）
前記先行して演算された巡回冗長検査符号として、前記第１補正部により補正された巡回冗長検査符号及び前記第２補正部により補正された巡回冗長検査符号のいずれか一方を選択して、前記第１補正部へ入力する第３セレクタを備える付記３に記載の巡回冗長検査符号生成回路。
【０１４２】
（付記５）
複数の前記パイプライン段の２段目以降のいずれかのパイプライン段の前記部分演算部に、前記初期値及び前記いずれかのパイプライン段の前段の前記部分演算部から出力される巡回冗長検査符号のいずれか一方を選択して入力する第４セレクタを備え、
前記補正部は、
前記いずれかのパイプライン段の前記部分演算部がその前段の前記部分演算部から出力される巡回冗長検査符号及び前記並列データに基づいて演算した巡回冗長検査符号を補正する第３補正部と、
前記いずれかのパイプライン段の前記部分演算部が前記初期値及び前記並列データに基づいて演算した巡回冗長検査符号を補正する第４補正部と、
前記第３補正部により補正された巡回冗長検査符号及び前記第４補正部により補正された巡回冗長検査符号のいずれか一方を選択して第５セレクタと、
を備える付記１又は２に記載の巡回冗長検査符号生成回路。
【０１４３】
（付記６）
前記部分演算部のうちのいずれかの部分演算部に入力される並列データの桁数が、前記部分演算部のうちの他の部分演算部に入力される並列データの桁数と異なる付記１〜５のいずれか一項に記載の巡回冗長検査符号生成回路。
【０１４４】
（付記７）
１個以上の並列データを逐次受信し、各前記並列データについて、該並列データと、初期値又は先行して演算された巡回冗長検査符号と、に基づいて巡回冗長検査符号を算出する所定演算を反復することにより、前記１個以上の並列データに対する巡回冗長検査符号を生成する巡回冗長検査符号生成方法であって、
前記所定演算を前記並列データの桁方向に分割した部分演算のそれぞれを、異なるパイプライン段において、前記初期値と前記並列データとに基づいて実行し、
前記初期値と前記先行して演算された巡回冗長検査符号とに基づいて、前記部分演算によって演算された巡回冗長検査符号を補正する、巡回冗長検査符号生成方法。
【符号の説明】
【０１４５】
１    ＣＲＣ符号生成回路
２    ＣＲＣ演算部
３    補正部
４    シフトレジスタ
５    セレクタ
１０〜１５、２５０〜２５５、４００〜４０３    フリップフロップ
２００、２０１    ６４ｂｉｔ部分演算部
【図１】
2011130333.tif 000003
【図２】
2011130333.tif 000004
【図３】
2011130333.tif 000005
【図４】
2011130333.tif 000006
【図５】
2011130333.tif 000007
【図６】
2011130333.tif 000008
【図７】
2011130333.tif 000009
【図８】
2011130333.tif 000010
【図９】
2011130333.tif 000011
【図１０】
2011130333.tif 000012
【図１１】
2011130333.tif 000013
【図１２】
2011130333.tif 000014
【図１３】
2011130333.tif 000015
【図１４】
2011130333.tif 000016
【図１５】
2011130333.tif 000017
【図１６】
2011130333.tif 000018
【図１７】
2011130333.tif 000019
【図１８】
2011130333.tif 000020
【図１９】
2011130333.tif 000021
【図２０】
2011130333.tif 000022
【図２１】
2011130333.tif 000023
【図２２】
2011130333.tif 000024
【図２３】
2011130333.tif 000025
【図２４】
2011130333.tif 000026
【図２５】
2011130333.tif 000027