(57)【要約】【課題】高速にＣＲＣ演算を行うことができるＣＲＣ演算回路を提供することを課題とする。【解決手段】ＣＲＣ演算回路は、データの末尾から複数ビット単位で入力データを同時処理するＣＲＣ演算回路であって、複数のレジスタ（Ｄ０〜Ｄ３）と、前記複数のレジスタの出力データ又はそれに応じたデータと複数ビットの入力データとの排他的論理和データを出力する複数の第１の排他的論理和回路（４１１〜４１５）とを有し、前記複数のレジスタは、前記複数の第１の排他的論理和回路の出力データ又はそれに応じたデータを記憶する。【選択図】図４
2012169926.tif 000002
【特許請求の範囲】
【請求項１】
データの末尾から複数ビット単位で入力データを同時処理するＣＲＣ演算回路であって、
複数のレジスタと、
前記複数のレジスタの出力データ又はそれに応じたデータと複数ビットの入力データとの排他的論理和データを出力する複数の第１の排他的論理和回路とを有し、
前記複数のレジスタは、前記複数の第１の排他的論理和回路の出力データ又はそれに応じたデータを記憶することを特徴とするＣＲＣ演算回路。
【請求項２】
さらに、前記複数の第１の排他的論理和回路の出力データと複数の係数との論理積データを出力する複数の論理積回路と、
前記複数の論理積回路の中の一部の論理積回路の出力データと前記複数のレジスタの中の一部のレジスタの出力データとの排他的論理和データを出力する複数の第２の排他的論理和回路とを有し、
前記複数の第１の排他的論理和回路の中の一部の複数の第１の排他的論理和回路は、複数の前記第２の排他的論理和回路の出力データと複数ビットの入力データとの排他的論理和データを出力し、
前記複数の係数に応じて複数種類の生成多項式のＣＲＣ演算を行うことを特徴とする請求項１記載のＣＲＣ演算回路。
【請求項３】
さらに、少なくとも前記第２の排他的論理和回路の出力データを入力し、最終回の同時処理については、前記同時処理するビット数で前記入力データの全ビット数を割った剰余に応じて、前記入力したデータの中の１個のデータを選択して前記複数のレジスタに出力するセレクタを有し、
前記同時処理するビット数で前記入力データの全ビット数が割り切れる場合と割り切れない場合の両方の場合でＣＲＣ演算をすることができることを特徴とする請求項２記載のＣＲＣ演算回路。
【請求項４】
データの末尾から１ビットずつ入力データを処理するＣＲＣ演算回路であって、
複数のレジスタと、
前記複数のレジスタの中の一のレジスタの出力データと入力データとの排他的論理和データを出力する第１の排他的論理和回路と、
前記第１の排他的論理和回路の出力データと複数の係数との論理積データを出力する複数の論理積回路と、
前記複数の論理積回路の中の一部の複数の論理積回路の出力データと前記複数のレジスタの中の一部の複数のレジスタの出力データとの排他的論理和データを出力し、次段の複数のレジスタに記憶させる複数の第２の排他的論理和回路とを有し、
前記複数の係数に応じて複数種類の生成多項式のＣＲＣ演算を行うことを特徴とするＣＲＣ演算回路。
【請求項５】
データの先頭から複数ビット単位で入力データを同時処理するＣＲＣ演算回路であって、
複数のレジスタと、
複数ビットの入力データと複数のフィードバックデータとの排他的論理和データを出力する複数の第１の排他的論理和回路と、
前記複数のフィードバックデータ及び係数の論理積データを出力する複数の論理積回路と、
前記複数の論理積回路の出力データと前記第１の排他的論理和回路の出力データとの排他的論理和データを出力する複数の第２の排他的論理和回路と、
前記論理積回路の出力データと前記レジスタの出力データとの排他的論理和データを出力する第３の排他的論理和回路と、
前記複数の第１の排他的論理和回路の出力データを入力し、最終回の同時処理については、前記同時処理するビット数で前記入力データの全ビット数を割った剰余に応じて、前記入力したデータの中の１個のデータを選択して前記レジスタに出力する第１のセレクタと、
前記第２の排他的論理和回路及び前記第３の排他的論理和回路の出力データを入力し、最終回の同時処理については、前記同時処理するビット数で前記入力データの全ビット数を割った剰余に応じて、前記入力したデータの中の１個のデータを選択して前記レジスタに出力する第２のセレクタとを有し、
前記係数に応じて複数種類の生成多項式のＣＲＣ演算を行い、
同時処理するビット数で前記入力データの全ビット数が割り切れる場合と割り切れない場合の両方の場合でＣＲＣ演算をすることができることを特徴とするＣＲＣ演算回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＣＲＣ（巡回冗長検査：Cyclic Redundancy Check）演算回路に関する。
【背景技術】
【０００２】
携帯電話通信方式は、ＷＣＤＭＡ（Wideband Code Division Multiple Access：静止時２Ｍｂｐｓ）からＨＳＰＡ（High Speed Packet Access：下り１４．４Ｍｂｐｓ，上り５．７６Ｍｂｐｓ）へ、更にはＬＴＥ（Long Term Evolution）へと発展している。これに伴い、伝送レートが加速度的に高くなり、誤り検出処理も伝送レートに比例して高速化する必要がある。下記の特許文献１によれば、誤り検出の前段がビタビ復号である場合には、ビタビ復号は結果をデータの末尾から出力するため、通常はデータの先頭から行う誤り検出をデータの末尾から逆方向に行う装置が提案されている。それによれば、ビタビ復号と誤り検出の間にバッファを設けて待つ必要が無く高速化が可能である。
【０００３】
また、下記の特許文献２には、ビタビ復号を改良して一度に２ビット以上のデータを出力し、高速化する手法が提案されている。特許文献１では、この高速化と併用することができない。また、下記の特許文献３には、ビタビ復号の結果出力がデータの先頭からとなる手法が提案されている。
【０００４】
また、データの先頭から順方向に複数ビット一括処理するＣＲＣ演算回路が知られている（例えば、下記の特許文献４及び５参照）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０００−２６９８２６号公報
【特許文献２】特開２０１０−２１３２２５号公報
【特許文献３】特開２０１０−１１８７８２号公報
【特許文献４】特許第４４１６５７２号公報
【特許文献５】特許第４３０３５４８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明の目的は、高速にＣＲＣ演算を行うことができるＣＲＣ演算回路を提供することである。本発明の他の目的は、複数種類の生成多項式のＣＲＣ演算を行うことができるＣＲＣ演算回路を提供することである。
【課題を解決するための手段】
【０００７】
ＣＲＣ演算回路は、データの末尾から複数ビット単位で入力データを同時処理するＣＲＣ演算回路であって、複数のレジスタと、前記複数のレジスタの出力データ又はそれに応じたデータと複数ビットの入力データとの排他的論理和データを出力する複数の第１の排他的論理和回路とを有し、前記複数のレジスタは、前記複数の第１の排他的論理和回路の出力データ又はそれに応じたデータを記憶する。
また、ＣＲＣ演算回路は、データの末尾から１ビットずつ入力データを処理するＣＲＣ演算回路であって、複数のレジスタと、前記複数のレジスタの中の一のレジスタの出力データと入力データとの排他的論理和データを出力する第１の排他的論理和回路と、前記第１の排他的論理和回路の出力データと複数の係数との論理積データを出力する複数の論理積回路と、前記複数の論理積回路の中の一部の複数の論理積回路の出力データと前記複数のレジスタの中の一部の複数のレジスタの出力データとの排他的論理和データを出力し、次段の複数のレジスタに記憶させる複数の第２の排他的論理和回路とを有し、前記複数の係数に応じて複数種類の生成多項式のＣＲＣ演算を行う。
また、ＣＲＣ演算回路は、データの先頭から複数ビット単位で入力データを同時処理するＣＲＣ演算回路であって、複数のレジスタと、複数ビットの入力データと複数のフィードバックデータとの排他的論理和データを出力する複数の第１の排他的論理和回路と、前記複数のフィードバックデータ及び係数の論理積データを出力する複数の論理積回路と、前記複数の論理積回路の出力データと前記第１の排他的論理和回路の出力データとの排他的論理和データを出力する複数の第２の排他的論理和回路と、前記論理積回路の出力データと前記レジスタの出力データとの排他的論理和データを出力する第３の排他的論理和回路と、前記複数の第１の排他的論理和回路の出力データを入力し、最終回の同時処理については、前記同時処理するビット数で前記入力データの全ビット数を割った剰余に応じて、前記入力したデータの中の１個のデータを選択して前記レジスタに出力する第１のセレクタと、前記第２の排他的論理和回路及び前記第３の排他的論理和回路の出力データを入力し、最終回の同時処理については、前記同時処理するビット数で前記入力データの全ビット数を割った剰余に応じて、前記入力したデータの中の１個のデータを選択して前記レジスタに出力する第２のセレクタとを有し、前記係数に応じて複数種類の生成多項式のＣＲＣ演算を行い、同時処理するビット数で前記入力データの全ビット数が割り切れる場合と割り切れない場合の両方の場合でＣＲＣ演算をすることができる。
【発明の効果】
【０００８】
複数ビット単位で入力データを同時処理することにより、高速にＣＲＣ演算を行うことができる。また、複数の係数に応じて複数種類の生成多項式のＣＲＣ演算を行うことができる。
【図面の簡単な説明】
【０００９】
【図１】第１の実施形態による無線通信システムの構成例を示す図である。
【図２】図１のＣＲＣ付加部の構成例を示す図である。
【図３】図３（Ａ）は図１のＣＲＣ確認部の構成例を示す図であり、図３（Ｂ）は図１のＣＲＣ確認部の他の構成例を示す図である。
【図４】図４（Ａ）は図１のＣＲＣ確認部の他の構成例を示す図であり、図４（Ｂ）は第１の実施形態によるＣＲＣ確認部の構成例を示す図である。
【図５】図４（Ｂ）のＣＲＣ確認部を含む受信回路の一部の構成例を示す図である。
【図６】図５の回路の動作例を示すタイミングチャートである。
【図７】第２の実施形態によるＣＲＣ確認部の構成例を示す図である。
【図８】図８（Ａ）はデータの末尾から１ビットずつ入力データを処理するＣＲＣ演算回路の構成例を示す図であり、図８（Ｂ）は図７（Ａ）の回路を用いて図８（Ａ）の回路を実現するための説明図である。
【図９】第２の実施形態によるＣＲＣ確認部の他の構成例を示す図である。
【図１０】第３の実施形態によるＣＲＣ確認部の構成例を示す図である。
【図１１】第４の実施形態によるＣＲＣ確認部の構成例を示す図である。
【図１２】第５の実施形態によるＣＲＣ確認部の構成例を示す図である。
【図１３】第６の実施形態による演算回路の左部の構成例を示す図である。
【図１４】第６の実施形態による演算回路の右部の構成例を示す図である。
【図１５】図１２のＣＲＣ確認部の処理例を示すフローチャートである。
【図１６】図１２の演算回路の構成例を示す図である。
【発明を実施するための形態】
【００１０】
（第１の実施形態）
図１は、第１の実施形態による無線通信システムの構成例を示す図である。無線通信システムは、送信装置１０１及び受信装置１０２を有する。送信装置１０１は、ＭＡＣ（Media Access Control）部１１１、ＣＲＣ付加部１１２、符号化部１１３、変調部１１４、デジタル／アナログ変換部１１５、ＲＦ（Radio Frequency）部１１６及びアンテナ１１７を有する。ＭＡＣ部１１１は、送信データを出力する。ＣＲＣ付加部１１２は、送信データに対してＣＲＣ演算を行い、誤り検出符号（剰余）を付加した送信データを出力する。ＣＲＣ付加部１１２の詳細は、後に図２を参照しながら説明する。符号化部１１３は、ＣＲＣ付加部１１２の出力データに対して誤り訂正の符号化又はインターリーブ処理を行い、出力する。変調部１１４は、符号化部１１３の出力データに対してＯＦＤＭ方式又はＣＤＭＡ方式等の変調を行い、出力する。デジタル／アナログ変換部１１５は、変調部１１４の出力データをデジタルからアナログに変換して出力する。ＲＦ部１１６は、デジタル／アナログ変換部１１５の出力データを低周波数信号（ベースバンド周波数信号）から所定の高周波数信号に変換し、アンテナ１１７を介して、無線送信する。
【００１１】
受信装置１０２は、アンテナ１２１、ＲＦ部１２２、アナログ／デジタル変換部１２３、復調部１２４、復号部１２５、ＣＲＣ確認部１２６及びＭＡＣ部１２７を有する。ＲＦ部１２２は、アンテナ１２１を介して受信データを無線受信し、受信データを高周波数信号から低周波数信号（ベースバンド周波数信号）に変換して出力する。アナログ／デジタル変換部１２３は、ＲＦ部１２２の出力データをアナログからデジタルに変換して出力する。復調部１２４は、アナログ／デジタル変換部１２３の出力データに対してＯＦＤＭ方式又はＣＤＭＡ方式等の復調を行い、出力する。復号部１２５は、復調部１２４の出力データに対して逆インターリーブ処理又は誤り訂正処理の復号を行い、出力する。ＣＲＣ確認部１２６は、誤り検出部であり、復号部１２５の出力データに対してＣＲＣ演算を行い、受信データに誤りがないか否かを検出する。ＭＡＣ部１２７は、誤りの有無に応じて受信データの処理を行う。
【００１２】
図２は、図１のＣＲＣ付加部１１２の構成例を示す図である。ＣＲＣ付加部１１２は、送信データを先頭から１ビットずつ入力データＤＴとして入力する。排他的論理和回路２０１は、入力データＤＴとレジスタＤ３の出力データとの排他的論理和データを出力する。レジスタＤ０は、排他的論理和回路２０１の出力データを記憶する。レジスタＤ１は、レジスタＤ０の出力データを記憶する。排他的論理和回路２０２は、レジスタＤ１の出力データとレジスタＤ３の出力データとの排他的論理和データを出力する。レジスタＤ２は、排他的論理和回路２０２の出力データを記憶する。レジスタＤ３は、レジスタＤ２の出力データを記憶する。レジスタＤ０〜Ｄ３は、シフトレジスタを構成し、入力データＤＴのビット入力毎にデータをシフトして記憶する。
【００１３】
ＣＲＣ付加部１１２は、ＣＲＣ演算を行う。具体的には、ＣＲＣ付加部１１２は、入力データＤＴに対して所定の生成多項式Ｇでモジュロー２の除算を行い、剰余ＲＳを入力データＤＴの後ろに付加することにより送信データ２０３を生成し、出力する。図２の場合、生成多項式Ｇは、Ｇ＝１＋Ｄ2＋Ｄ4である。ここで、Ｄ＝２である。すなわち、ＣＲＣ演算は、ＤＴ÷Ｇ＝Ｑ・・・ＲＳの演算を行う。ここで、Ｑは商である。書き換えると、ＤＴ＝Ｇ×Ｑ＋ＲＳで表される。入力データＤＴの全ビットの入力が終了した時点において、４個のレジスタＤ０〜Ｄ３に記憶されている４ビットのデータが剰余ＲＳである。ＣＲＣ付加部１１２は、剰余ＲＳを入力データＤＴの後ろに付加することにより送信データ２０３を生成する。送信データ２０３は、ＤＴ＋ＲＳのビット列である。
【００１４】
図３（Ａ）は、図１のＣＲＣ確認部１２６の構成例を示す図であり、データの先頭から１ビットずつ入力データを処理するＣＲＣ演算回路を示す。図３（Ａ）のＣＲＣ確認部１２６は、図２のＣＲＣ付加部１１２と同じ構成を有する。すなわち、ＣＲＣ確認部１２６は、ＣＲＣ付加部１１２と同じＣＲＣ演算を行う。ＣＲＣ確認部１２６は、上記のように、ＣＲＣ付加部１１２からＤＴ＋ＲＳの送信データ２０３を入力データＩＮとして入力する。入力データＩＮは、シリアルデータのビット列である。ＣＲＣ確認部１２６は、ＣＲＣ付加部１１２と同様のＣＲＣ演算を行う。具体的には、ＣＲＣ確認部１２６は、入力データＩＮに対して所定の生成多項式Ｇでモジュロー２の除算を行う。この生成多項式Ｇは、ＣＲＣ付加部１１２で用いた生成多項式Ｇと同じである。モジュロー２の演算の場合、ＩＮ＝ＤＴ＋ＲＳ＝ＤＴ−ＲＳである。したがって、ＤＴ＋ＲＳ＝ＤＴ−ＲＳ＝Ｇ×Ｑになり、ＩＮ÷Ｇ＝Ｑ・・・０になる。入力データＩＮに誤りがなければ、ＣＲＣ演算の剰余は０になる。ＣＲＣ確認部１２６は、入力データＩＮを先頭から１ビットずつ入力し、入力データＩＮの全ビットの入力が終わった時点でレジスタＤ０〜Ｄ３に記憶されている４ビットの剰余が０であれば誤りなしの結果を出力し、４ビットの剰余が０でなければ誤りありの結果を出力する。
【００１５】
図３（Ｂ）は、図１のＣＲＣ確認部１２６の他の構成例を示す図であり、データの先頭から複数ビット（例えば４ビット）単位で入力データを同時処理するＣＲＣ演算回路を示す。図３（Ｂ）の回路は、図３（Ａ）と同様に、Ｇ＝１＋Ｄ2＋Ｄ4の生成多項式Ｇを用いたＣＲＣ演算を行う例を示す。ＣＲＣ確認部１２６は、データの先頭から４ビット単位で入力データＩＮ［０］〜ＩＮ［３］を同時処理する例を示す。入力データＩＮ［０］は、１番目、５番目、９番目・・・のビットデータである。入力データＩＮ［１］は、２番目、６番目、１０番目・・・のビットデータである。入力データＩＮ［２］は、３番目、７番目、１１番目・・・のビットデータである。入力データＩＮ［３］は、４番目、８番目、１２番目・・・のビットデータである。まず、１番目〜４番目の４ビットデータＩＮ［０］〜ＩＮ［３］をパラレル入力し、次に、５番目〜８番目の入力データＩＮ［０］〜ＩＮ［３］をパラレル入力する。
【００１６】
排他的論理和回路３０１は、入力データＩＮ［１］とレジスタＤ０の出力データとの排他的論理和データを出力する。排他的論理和回路３０２は、入力データＩＮ［３］とレジスタＤ０の出力データとの排他的論理和データを出力する。排他的論理和回路３０３は、入力データＩＮ［０］とレジスタＤ１の出力データとの排他的論理和データを出力する。排他的論理和回路３０４は、入力データＩＮ［２］とレジスタＤ１の出力データとの排他的論理和データを出力する。排他的論理和回路３０５は、排他的論理和回路３０２の出力データとレジスタＤ２の出力データとの排他的論理和データを出力する。排他的論理和回路３０６は、排他的論理和回路３０４の出力データとレジスタＤ３の出力データとの排他的論理和データを出力する。レジスタＤ０は、排他的論理和回路３０５の出力データを記憶する。レジスタＤ１は、排他的論理和回路３０６の出力データを記憶する。レジスタＤ２は、排他的論理和回路３０１の出力データを記憶する。レジスタＤ３は、排他的論理和回路３０３の出力データを記憶する。入力データＩＮ［０］〜ＩＮ［３］の全パラレルビットの入力が終了した時点で、レジスタＤ０〜Ｄ３に記憶されている４ビットデータが剰余である。剰余が０であれば誤りなし、剰余が０でなければ誤りありになる。入力データを４ビットずつ同時処理することにより、高速にＣＲＣ演算を行うことができる。
【００１７】
次に、図１の復号部１２５がビタビ復号を行う場合を説明する。復号部１２５は、ビタビ復号を行い、復号結果をデータの末尾から出力する。ＣＲＣ確認部１２６は、復号部１２５からデータを末尾から入力するので、データの末尾から入力データをＣＲＣ演算することが好ましい。以下、そのようなＣＲＣ確認部１２６の構成例を説明する。
【００１８】
図４（Ａ）は、図１のＣＲＣ確認部１２６の他の構成例を示す図であり、データの末尾から１ビットずつ入力データを処理するＣＲＣ演算回路を示す。ＣＲＣ確認部１２６は、データの末尾から１ビットずつ入力データＩＮを入力する。すなわち、剰余ＲＳを入力し、その後にデータＤＴを入力する。ＣＲＣ確認部１２６は、上記と同様に、Ｇ＝１＋Ｄ2＋Ｄ4の生成多項式Ｇを用いたＣＲＣ演算を行う例を示す。
【００１９】
排他的論理和回路４０１は、入力データＩＮとレジスタＤ０の出力データとの排他的論理和データを出力する。排他的論理和回路４０２は、排他的論理和回路４０１の出力データとレジスタＤ２の出力データとの排他的論理和データを出力する。レジスタＤ０は、レジスタＤ１の出力データを記憶する。レジスタＤ１は、排他的論理和回路４０２の出力データを記憶する。レジスタＤ２は、レジスタＤ３の出力データを記憶する。レジスタＤ３は、排他的論理和回路４０１の出力データを記憶する。入力データＩＮの全ビットの入力が終了した時点で、レジスタＤ０〜Ｄ３に記憶されている４ビットデータが剰余である。剰余が０であれば誤りなし、剰余が０でなければ誤りありになる。ＣＲＣ確認部１２６は、復号部１２５からデータを末尾から入力し、データの末尾からデータを効率的にＣＲＣ演算することができる。
【００２０】
図４（Ｂ）は、第１の実施形態によるＣＲＣ確認部１２６の構成例を示す図であり、データの末尾から複数ビット（例えば４ビット）単位で入力データを同時処理するＣＲＣ演算回路を示す。図４（Ｂ）の回路は、上記と同様に、Ｇ＝１＋Ｄ2＋Ｄ4の生成多項式Ｇを用いたＣＲＣ演算を行う例を示す。ＣＲＣ確認部１２６は、データの末尾から４ビット単位で入力データＩＮ［０］〜ＩＮ［３］を同時処理する例を示す。
【００２１】
排他的論理和回路４１１は、入力データＩＮ［０］とレジスタＤ０の出力データとの排他的論理和データを出力する。排他的論理和回路４１２は、入力データＩＮ［１］とレジスタＤ１の出力データとの排他的論理和データを出力する。排他的論理和回路４１３は、入力データＩＮ［２］とレジスタＤ２の出力データとの排他的論理和データを出力する。排他的論理和回路４１４は、排他的論理和回路４１１の出力データと排他的論理和回路４１３の出力データとの排他的論理和データを出力する。排他的論理和回路４１５は、入力データＩＮ［３］とレジスタＤ３の出力データとの排他的論理和データを出力する。排他的論理和回路４１６は、排他的論理和回路４１２の出力データと排他的論理和回路４１５の出力データとの排他的論理和データを出力する。レジスタＤ０は、排他的論理和回路４１３の出力データを記憶する。レジスタＤ１は、排他的論理和回路４１５の出力データを記憶する。レジスタＤ２は、排他的論理和回路４１４の出力データを記憶する。レジスタＤ３は、排他的論理和回路４１６の出力データを記憶する。
【００２２】
入力データＩＮ［０］〜ＩＮ［３］の全パラレルビットの入力が終了した時点で、レジスタＤ０〜Ｄ３に記憶されている４ビットデータが剰余である。剰余が０であれば誤りなし、剰余が０でなければ誤りありになる。図４（Ｂ）の回路は、図４（Ａ）の回路の４サイクル分の処理を１サイクルで行うことができる。ＣＲＣ確認部１２６は、入力データを４ビットずつ同時処理することにより、高速にＣＲＣ演算を行うことができる。また、ＣＲＣ確認部１２６は、復号部１２５からデータを末尾から入力し、データの末尾からデータを効率的にＣＲＣ演算することができる。
【００２３】
図５は、図４（Ｂ）のＣＲＣ確認部１２６を含む受信回路１０２（図１）の一部の構成例を示す図であり、図１の復号部１２５及びＣＲＣ確認部１２６に対応する。図６は、図５の回路の動作例を示すタイミングチャートである。復号部１２５は、復号を終了すると、全体制御部５０１にハイレベルパルスの復号終了信号ＥＮＤを出力する。全体制御部５０１は、ハイレベルパルスの復号終了信号ＥＮＤを入力すると、ハイレベルの出力開始信号ＥＮ１を復号部１２５及びＣＲＣ演算回路５０２に出力し、ハイレベルパルスのカウント開始信号ＥＮ２をカウンタ５０４及びＣＲＣ演算回路５０２に出力する。復号部１２５は、ハイレベルの出力開始信号ＥＮ１を入力すると、データの末尾からサイクル毎に４ビットずつデータＩＮ［０］〜ＩＮ［３］をＣＲＣ演算回路５０２に出力する。ＣＲＣ演算回路５０２は、図４（Ｂ）の回路である。カウンタ５０４は、ハイレベルパルスのカウント開始信号ＥＮ２を入力すると、カウント値ＣＮＴを０にクリアし、サイクル毎にカウント値ＣＮＴを４ずつ増加させる。カウンタ５０４は、入力データＩＮ［０］〜ＩＮ［３］のビット数をカウント値ＣＮＴとしてカウントする。ＣＲＣ演算回路５０２は、ハイレベルパルスのカウント開始信号ＥＮ２を入力すると、図４の内部レジスタＤ０〜Ｄ３を０にクリアする。その後、サイクル毎に、復号部１２５はデータＩＮ［０］〜ＩＮ［３］を４ビットずつＣＲＣ演算回路５０２に出力し、カウンタ５０４はカウント値ＣＮＴを４ずつカウントアップし、ＣＲＣ演算回路５０２は４ビットずつＣＲＣ演算を行う。全体制御部５０１は、データのビット数を管理し、カウンタ５０４が全ビット数Ｍをカウントし終えると、カウンタ５０４及びＣＲＣ演算回路５０２は動作を停止し、全体制御部５０１はローレベルの出力開始信号ＥＮ１を出力する。ＣＲＣ演算回路５０２は、レジスタＤ０〜Ｄ３に記憶されている４ビットの剰余（演算結果）を結果判定部５０３に出力する。全体制御部５０１は、ハイレベルパルスの判定指示信号ＩＮＳを結果判定部５０３に出力する。結果判定部５０３は、ハイレベルパルスの判定指示信号ＩＮＳを入力すると、ＣＲＣ演算回路５０２が出力する剰余が０か否かを判定し、０であれば誤りなしの結果信号ＲＬＴを全体制御部５０１に出力し、０でなければ誤りありの結果信号ＲＬＴを全体制御部５０１に出力する。
【００２４】
（第２の実施形態）
図７は、第２の実施形態によるＣＲＣ確認部１２６の構成例を示す図であり、データの末尾から１ビットずつ入力データを処理するＣＲＣ演算回路を示す。このＣＲＣ演算回路は、複数種類の生成多項式ＧのＣＲＣ演算を行うことができる。ＣＲＣ演算回路は、設定レジスタ７２０、ｎ＋１個のレジスタＤ０〜Ｄｎ、ｎ＋１個の排他的論理和回路７００〜７０ｎ及びｎ＋１個の論理積回路７１０〜７１ｎを有する。ユーザは、バス等を介して設定レジスタ７２０に複数の係数α０〜αｎを設定することができる。設定レジスタ７２０は、複数の係数α０〜αｎを出力する。複数の係数α０〜αｎは、ＣＲＣ演算に使用する生成多項式Ｇを決定するための係数である。入力データＩＮは、シリアルビット列である。排他的論理和回路７００は、入力データＩＮとレジスタＤ０の出力データとの排他的論理和データを出力する。論理積（ＡＮＤ）回路７１０は、排他的論理和回路７００の出力データと係数α０との論理積データを出力する。論理積回路７１１は、排他的論理和回路７００の出力データと係数α１との論理積データを出力する。同様に、論理積回路７１ｎ−１は、排他的論理和回路７００の出力データと係数αｎ−１との論理積データを出力する。論理積回路７１ｎは、排他的論理和回路７００の出力データと係数αｎとの論理積データを出力する。排他的論理和回路７０１は、レジスタＤ１の出力データと論理積回路７１０の出力データとの排他的論理和データを出力する。排他的論理和回路７０２は、レジスタＤ２の出力データと論理積回路７１１の出力データとの排他的論理和データを出力する。同様に、排他的論理和回路７０ｎは、レジスタＤｎの出力データと論理積回路７１ｎ−１の出力データとの排他的論理和データを出力する。レジスタＤ０は、排他的論理和回路７０１の出力データを記憶する。レジスタＤ１は、排他的論理和回路７０２の出力データを記憶する。同様に、レジスタＤｎ−１は、排他的論理和回路７０ｎの出力データを記憶する。レジスタＤｎは、論理積回路７１ｎの出力データを記憶する。
【００２５】
ＣＲＣ演算回路は、単位ブロック７３０が繰り返し接続される。複数の係数α０〜αｎは、ユーザが設定可能である。排他的論理和回路７０１〜７０ｎを有効にするための係数α０〜αｎを１にし、無効にするための係数α０〜αｎを０にする。係数α０〜αｎを１にすると、論理積回路７１０〜７１ｎは排他的論理和回路７００の出力データを出力し、排他的論理和回路７０１〜７０ｎはそれぞれレジスタＤ１〜Ｄｎの出力データと排他的論理和回路７００の出力データとの排他的論理和データを出力する。これに対し、係数α０〜αｎを０にすると、論理積回路７１０〜７１ｎは０を出力し、排他的論理和回路７０１〜７０ｎはそれぞれレジスタＤ１〜Ｄｎの出力データをそのまま出力する。これにより、所望の生成多項式ＧのＣＲＣ演算を行うことができる。
【００２６】
以上のように、第１の排他的論理和回路７００は、複数のレジスタＤ０〜Ｄｎの中の一のレジスタＤ０の出力データと入力データＩＮとの排他的論理和データを出力する。複数の論理積回路７１０〜７１ｎは、第１の排他的論理和回路７００の出力データと複数の係数α０〜αｎとの論理積データを出力する。複数の第２の排他的論理和回路７０１〜７０ｎは、複数の論理積回路７１０〜７１ｎの中の一部の複数の論理積回路７１０〜７１ｎ−１の出力データと複数のレジスタＤ０〜Ｄｎの中の一部の複数のレジスタＤ１〜Ｄｎの出力データとの排他的論理和データを出力し、次段の複数のレジスタＤ０〜Ｄｎ−１に記憶させる。ＣＲＣ演算回路は、複数の係数α０〜αｎに応じて複数種類の生成多項式ＧのＣＲＣ演算を行うことができる。
【００２７】
図８（Ａ）は、図４と同じく、データの末尾から１ビットずつ入力データを処理するＣＲＣ演算回路の構成例を示す図である。このＣＲＣ演算回路の生成多項式Ｇは、Ｇ＝１＋Ｄ2＋Ｄ4である。図８（Ｂ）は、図７（Ａ）の回路を用いて、図８（Ａ）の回路を実現するための説明図である。図８（Ｂ）の回路は、図７（Ｂ）の回路の係数α０〜αｎを設定した回路である。係数α０〜αｎのうち、係数α１及びα３が１に設定され、その他の係数α０、α２、α４〜αｎが０に設定される。係数α０及びα２は、図８（Ａ）のレジスタＤ０，Ｄ１間及びレジスタＤ２，Ｄ３間に排他的論理和回路が無いため０を設定する。係数α２は、図８（Ａ）のレジスタＤ１，Ｄ２間に排他的論理和回路４０２があるため１を設定する。係数α３は、図８（Ａ）のレジスタＤ３が最後段であるため１を設定する。係数α４以降は０を設定する。使用する際は、レジスタＤ０〜Ｄｎをすべて０に初期化する。すると、レジスタＤ０にはレジスタＤ１の出力データが記憶され、レジスタＤ１には排他的論理和回路４０２の出力データが記憶され、レジスタＤ２にはレジスタＤ３の出力データが記憶され、レジスタＤ３には排他的論理和回路４０１の出力データが記憶される。これは、レジスタＤ４からのパスはレジスタＤ４〜Ｄｎがすべて０であり、フィードバックデータもすべてマスクされているため、排他的論理和回路７０４は論理積回路７１３の出力データをそのまま出力することになるためである。係数α０〜αｎを上記のように設定することにより、図８（Ａ）のＧ＝１＋Ｄ2＋Ｄ4の生成多項式ＧのＣＲＣ演算を行うことができる。
【００２８】
以上のように、第１の排他的論理和回路７００は、複数のレジスタＤ０〜Ｄｎの中の一のレジスタＤ０の出力データと入力データＩＮとの排他的論理和データを出力する。複数の論理積回路７１０〜７１ｎは、第１の排他的論理和回路７００の出力データと複数の係数α０〜αｎとの論理積データを出力する。複数の第２の排他的論理和回路７０１〜７０ｎは、複数の論理積回路７１０〜７１ｎの中の一部の複数の論理積回路７１０〜７１ｎ−１の出力データと複数のレジスタＤ０〜Ｄｎの中の一部の複数のレジスタＤ１〜Ｄｎの出力データとの排他的論理和データを出力し、次段の複数のレジスタＤ０〜Ｄｎ−１に記憶させる。ＣＲＣ演算回路は、複数の係数α０〜αｎに応じて複数種類の生成多項式ＧのＣＲＣ演算を行うことができる。
【００２９】
図９は、第２の実施形態によるＣＲＣ確認部１２６の他の構成例を示す図であり、データの末尾から１ビットずつ入力データを処理するＣＲＣ演算回路を示す。図９の回路は、図７の回路に対して、設定レジスタ９１０及びｎ個の論理積回路９００〜９０ｎ−１を追加したものである。以下、図９の回路が図７の回路と異なる点を説明する。設定レジスタ９１０は、複数の係数β０〜βｎ−１を記憶する。ｎ個の論理積回路９００〜９０ｎ−１は、それぞれｎ個のレジスタＤ１〜Ｄｎの出力データとｎ個の係数β０〜βｎ−１との論理積データをｎ個の排他的論理和回路７０１〜７０ｎに出力する。ｎ個の排他的論理和回路７０１〜７０ｎは、それぞれｎ個の論理積回路９００〜９０ｎ−１の出力データとｎ個の論理積回路７１０〜７１ｎ−１の出力データとの排他的論理和データを出力する。使用するレジスタＤ１〜Ｄｎに対応する係数β０〜βｎ−１を１にし、使用しないレジスタＤ１〜Ｄｎに対応する係数β０〜βｎ−１を０にする。例えば、図８（Ｂ）の回路を実現する場合には、係数β０〜β２が１に設定され、係数β３〜βｎ−１が０に設定される。レジスタＤ３が終端であるため、係数β３〜βｎ−１が０に設定される。係数β０〜βｎ−１は、マスクするための係数である。係数α０〜αｎ及び係数β０〜βｎ−１を設定することにより、所望の生成多項式ＧのＣＲＣ演算を行わせることができる。
【００３０】
（第３の実施形態）
図１０は、第３の実施形態によるＣＲＣ確認部１２６の構成例を示す図であり、データの末尾から複数ビット（例えば４ビット）単位で入力データを同時処理するＣＲＣ演算回路を示す。このＣＲＣ演算回路は、第２の実施形態と同様に、係数α０〜αｎを設定することにより、複数種類の生成多項式ＧのＣＲＣ演算を行うことができる。
【００３１】
排他的論理和回路１００１は、入力データＩＮ［０］とレジスタＤ０の出力データとの排他的論理和データＦ１を１周目のフィードバックデータとして出力する。排他的論理和回路１００２は、入力データＩＮ［１］と排他的論理和回路１００６の出力データとの排他的論理和データＦ２を２周目のフィードバックデータとして出力する。排他的論理和回路１００３は、入力データＩＮ［２］と排他的論理和回路１００９の出力データとの排他的論理和データＦ３を３周目のフィードバックデータとして出力する。排他的論理和回路１００４は、入力データＩＮ［３］と排他的論理和回路１０１３の出力データとの排他的論理和データＦ４を４周目のフィードバックデータとして出力する。
【００３２】
レジスタＤ０は、排他的論理和回路１００５の出力データを記憶する。レジスタＤ１は、排他的論理和回路１００７の出力データを記憶する。レジスタＤ２は、排他的論理和回路１０１０の出力データを記憶する。レジスタＤ３は、排他的論理和回路１０１４の出力データを記憶する。
【００３３】
設定レジスタ７２０は、図７と同様に、係数α０〜αｎを記憶する。論理積回路１０５１は、排他的論理和データＦ４と係数α０との論理積データを出力する。論理積回路１０５２は、排他的論理和データＦ１と係数α０との論理積データを出力する。排他的論理和回路１００５は、論理積回路１０５１の出力データと排他的論理和回路１００８の出力データとの排他的論理和データを出力する。排他的論理和回路１００６は、論理積回路１０５２の出力データとレジスタＤ１の出力データとの排他的論理和データを出力する。
【００３４】
論理積回路１０５３は、排他的論理和データＦ４と係数α１との論理積データを出力する。論理積回路１０５４は、排他的論理和データＦ３と係数α１との論理積データを出力する。論理積回路１０５５は、排他的論理和データＦ１と係数α１との論理積データを出力する。排他的論理和回路１００７は、論理積回路１０５３の出力データと排他的論理和回路１０１１の出力データとの排他的論理和データを出力する。排他的論理和回路１００８は、論理積回路１０５４の出力データと排他的論理和回路１０１２の出力データとの排他的論理和データを出力する。排他的論理和回路１００９は、論理積回路１０５５の出力データとレジスタＤ２の出力データとの排他的論理和データを出力する。
【００３５】
論理積回路１０５６は、排他的論理和データＦ４と係数α２との論理積データを出力する。論理積回路１０５７は、排他的論理和データＦ３と係数α２との論理積データを出力する。論理積回路１０５８は、排他的論理和データＦ２と係数α２との論理積データを出力する。論理積回路１０５９は、排他的論理和データＦ１と係数α２との論理積データを出力する。排他的論理和回路１０１０は、論理積回路１０５６の出力データと排他的論理和回路１０１５の出力データとの排他的論理和データを出力する。排他的論理和回路１０１１は、論理積回路１０５７の出力データと排他的論理和回路１０１６の出力データとの排他的論理和データを出力する。排他的論理和回路１０１２は、論理積回路１０５８の出力データと排他的論理和回路１０１７の出力データとの排他的論理和データを出力する。排他的論理和回路１０１３は、論理積回路１０５９の出力データとレジスタＤ３の出力データとの排他的論理和データを出力する。
【００３６】
以上のように、複数の第１の排他的論理和回路１００１〜１００４は、複数のレジスタＤ０〜Ｄ３の出力データ又はそれに応じたデータと複数ビットの入力データＩＮ［０］〜ＩＮ［３］との排他的論理和データＦ１〜Ｆ４を出力する。複数のレジスタＤ０〜Ｄｎは、複数の第１の排他的論理和回路１００１〜１００３の出力データ又はそれに応じたデータを記憶する。複数の論理積回路１０５１〜１０５９等は、複数の第１の排他的論理和回路１００１〜１００４の出力データと複数の係数α０〜αｎとの論理積データを出力する。複数の第２の排他的論理和回路１００６，１００９，１０１３，１０１７等は、複数の論理積回路１０５１〜１０５９等の中の一部の論理積回路１０５２，１０５５，１０５９等の出力データと複数のレジスタＤ０〜Ｄｎの中の一部のレジスタＤ１〜Ｄｎの出力データとの排他的論理和データを出力する。複数の第１の排他的論理和回路１００１〜１００４の中の一部の複数の第１の排他的論理和回路１００２〜１００４は、複数の第２の排他的論理和回路１００６，１００９，１０１３の出力データと複数ビットの入力データＩＮ［１］〜ＩＮ［３］との排他的論理和データを出力する。ＣＲＣ演算回路は、複数の係数α０〜αｎに応じて複数種類の生成多項式ＧのＣＲＣ演算を行うことができる。
【００３７】
本実施形態は、４ビット単位で入力データＩＮ［０］〜ＩＮ［３］を同時処理する例を示したが、４ビット以外にも適用することができる。１周目のフィードバックデータＦ１は、１ビット処理を行ったときのフィードバックデータを表している。２周目のフィードバックデータＦ２は、２ビット処理を行ったときのフィードバックデータを表しており、１周目のフィードバックデータＦ１とレジスタＤ１の出力データと入力データＩＮ［１］とを基に生成される。以下、３周目フィードバックデータＦ３及び４周目フィードバックデータＦ４も同様である。例えば、レジスタＤ０に記憶されるデータを説明する。排他的論理和回路１０１７は、レジスタＤ４の出力データと１周目フィードバックデータＦ１との排他的論理和データ（係数α３でマスクされたデータ）との排他的論理和データを１周目の結果として生成する。次に、排他的論理和回路１０１２は、排他的論理和回路１０１７の出力データと２周目フィードバックデータＦ２（係数α２でマスクされたデータ）との排他的論理和データを２周目の結果として生成する。次に、排他的論理和回路１００８は、排他的論理和回路１０１２の出力データと３周目フィードバックデータＦ３（係数α１でマスクされたデータ）との排他的論理和データを３周目の結果として生成する。最後に、排他的論理和回路１００５は、排他的論理和回路１００８の出力データと４周目フィードバックデータＦ４（係数α０でマスクされたデータ）との排他的論理和データを４周目の結果として生成し、レジスタＤ０に記憶させる。他のレジスタＤ１〜Ｄｎに記憶させるデータも同様である。このように見た場合、最後の４個のレジスタを考えると、４個先のレジスタの値が取れなくなってしまう。しかし、そこに問題は無く、４個先のレジスタの値は、例えばレジスタＤｎ−３ならば１周目フィードバックデータＦ１が仮にレジスタＤｎ＋１があったとしたら、そこに入るデータに対応する。このように見ていくと、レジスタＤｎ＋２に相当するデータが３周目フィードバックデータＦ３となり、レジスタＤｎ＋３に相当するデータが４周目フィードバックデータＦ４となる。また、レジスタＤｎ＋１以降は、レジスタ自体が無いため、常に０と同じと考えると、排他的論理和回路は必要なくなる。
【００３８】
（第４の実施形態）
図１１は、第４の実施形態によるＣＲＣ確認部１２６の構成例を示す図であり、データの末尾から複数ビット（例えば４ビット）単位で入力データを同時処理するＣＲＣ演算回路を示す。第３の実施形態（図１０）の回路では、同時処理するビット数（例えば４ビット）で入力データの全ビット数が割り切れる場合のＣＲＣ演算回路である。第４の実施形態のＣＲＣ演算回路は、同時処理するビット数（例えば４ビット）で入力データの全ビット数が割り切れる場合と割り切れない場合の両方の場合でＣＲＣ演算をすることができる。図１１の回路は、図１０の回路に対して、ｎ＋１個のセレクタ１１００〜１１０ｎを追加したものである。以下、本実施形態が第３の実施形態と異なる点を説明する。ｎ＋１個のセレクタ１１００〜１１０ｎは、それぞれ剰余情報ｓ２に応じてデータを選択し、ｎ＋１個のレジスタＤ０〜Ｄｎに出力する。ｎ＋１個のレジスタＤ０〜Ｄｎは、それぞれｎ＋１個のセレクタ１１００〜１１０ｎの出力データを記憶する。同時処理するビット数（例えば４ビット）で入力データの全ビット数が割り切れない場合、ＣＲＣ演算回路は、通常、４ビット同時処理を行い、最終回の同時処理のみ３ビット以下のビット数の同時処理を行う。それに対応し、剰余情報ｓ２は、通常時は０であり、最終回の処理時のみ、同時処理するビット数で入力データの全ビット数を割った剰余の値になる。
【００３９】
セレクタ１１００は、剰余情報ｓ２が０のときには排他的論理和回路１００５の出力データを選択し、剰余情報ｓ２が１のときには排他的論理和回路１００６の出力データを選択し、剰余情報ｓ２が２のときには排他的論理和回路１００９の出力データを選択し、剰余情報ｓ２が３のときには排他的論理和回路排他的論理和回路１０１３の出力データを選択し、出力する。
【００４０】
セレクタ１１０１は、剰余情報ｓ２が０のときには排他的論理和回路１００７の出力データを選択し、剰余情報ｓ２が３のときには排他的論理和回路１００８の出力データを選択し、剰余情報ｓ２が２のときには排他的論理和回路１００９の出力データを選択し、剰余情報ｓ２が１のときには排他的論理和回路排他的論理和回路１０１３の出力データを選択し、出力する。
【００４１】
セレクタ１１０２〜１１０ｎは、図１１の左から順に第１の信号、第２の信号、第３の信号、第４の信号を入力する。セレクタ１１０２〜１１０ｎは、セレクタ１１０１と同様に、剰余情報ｓ２が０のときには第１の信号を選択し、剰余情報ｓ２が３のときには第２の信号を選択し、剰余情報ｓ２が２のときには第３の信号を選択し、剰余情報ｓ２が１のときには第４の信号を選択し、出力する。
【００４２】
セレクタ１１００〜１１０ｎ−１は、少なくとも第２の排他的論理和回路１００６，１００９，１０１３，１０１７等の出力データを入力し、最終回の同時処理については、同時処理するビット数で入力データの全ビット数を割った剰余情報ｓ２に応じて、入力したデータの中の１個のデータを選択して複数のレジスタＤ０〜Ｄｎ−１に出力する。これにより、ＣＲＣ演算回路は、同時処理するビット数で入力データの全ビット数が割り切れる場合と割り切れない場合の両方の場合でＣＲＣ演算をすることができる。
【００４３】
本実施形態のＣＲＣ演算回路は、同時処理するビット数（例えば４ビット）で入力データの全ビット数が割り切れない場合のデータ長でもＣＲＣ演算を行うことができる。本実施形態は、第３の実施形態に対して、各レジスタＤ０〜Ｄｎの入力端子に４ｔｏ１セレクタ１１００〜１１０ｎを設ける。セレクタ１１００〜１１０ｎには、入力データのデータ長を４で割ったときの剰余情報ｓ２（０，１，２，３）が入力される。剰余情報ｓ２が０の場合は、図１０と同じデータを選択する。剰余情報ｓ２が３の場合には、レジスタＤ３は１つ前のレジスタＤ２が図１０で入力すべきレジスタＤ６のデータを選択する。剰余情報ｓ２が２の場合には、レジスタＤ３は２つ前のレジスタＤ１が図１０で入力すべきレジスタＤ５のデータを選択する。剰余情報ｓ２が１の場合には、レジスタＤ３は３つ前のレジスタＤ０が図１０で入力すべきレジスタＤ４のデータを選択する。
【００４４】
また、本実施形態は、第３の実施形態と同様に、例えばデータの末尾から４ビット単位で入力データを同時処理することができ、係数α０〜αｎに応じて複数種類の生成多項式ＧのＣＲＣ演算を行うことができる。本実施形態は、４ビット単位で処理する場合を例に示したが、４ビット以外のビット数であってもよい。
【００４５】
（第５の実施形態）
図１２は、第５の実施形態によるＣＲＣ確認部１２６の構成例を示す図である。ＣＲＣ確認部１２６は、プロセッサ１２０１、命令メモリ１２０２及びデータメモリ１２０３を有するＣＲＣ演算回路である。プロセッサ１２０１は、ＣＲＣ演算命令を処理することにより、第４の実施形態のＣＲＣ演算回路（図１１）の演算を実現する。ＣＲＣ演算命令内のオペランドは、生成多項式Ｇを決定するための係数α０〜αｎ及び剰余情報ｓ２を有する。ＣＲＣ演算命令は、下記のニーモニックで表現され、命令メモリ１２０２に格納される。
ＲＣＲＣ  ｓ０，ｓ１，ｓ２，ｄ３
【００４６】
ここで、「ＲＣＲＣ」は、データの末尾から処理する図１１のＣＲＣ演算回路を実現するＣＲＣ演算命令のオペコードである。「ｓ０，ｓ１，ｓ２，ｄ３」は、ＣＲＣ演算命令のオペランドである。「ｓ０」は、入力データを示す。「ｓ１」は、係数α０〜αｎを示す。「ｓ２」は、剰余情報を示す。「ｄ３」は、レジスタＤ０〜Ｄｎを示す。なお、「ｓ０，ｓ１，ｓ２，ｄ３」は、オペランドで記述したが、専用レジスタを別途持たせるようにしてもよい。
【００４７】
図１６は、図１２の演算回路１２１５の構成例を示す図である。演算回路１２１５は、図１１のＣＲＣ演算回路と同じ構成を有し、図１１のＣＲＣ演算回路に対して、入力データＩＮ［０］〜ＩＮ［３］の代わりに入力データｓ０［０］〜ｓ０［３］を設け、係数α０〜αｎの代わりに係数ｓ１［０］〜ｓ１［ｎ］を設け、剰余情報ｓ２の代わりに剰余情報ｓ２［１：０］を設け、レジスタＤ０〜Ｄｎの代わりにレジスタｄ３［０］〜ｄ３［ｎ］を設けたものである。入力データｓ０［０］〜ｓ０［３］は、ＣＲＣ演算命令のオペランドの「ｓ０」に対応する。係数ｓ１［０］〜ｓ１［ｎ］は、ＣＲＣ演算命令のオペランドの「ｓ１」に対応する。２ビットの剰余情報ｓ２［１：０］は、ＣＲＣ演算命令のオペランドの「ｓ２」に対応する。
【００４８】
図１２において、プログラムカウンタ制御部１２１１は、図５の全体制御部５０１の指示により、プログラムカウンタ値のアドレスのＣＲＣ演算命令を命令メモリ１２０２から読み出し、命令デコード部１２１２に出力する。命令デコード部１２１２は、ＣＲＣ演算命令をデコードし、命令情報を汎用レジスタ１２１３に記憶させる。汎用レジスタ１２１３は、命令情報を演算回路１２１５、算術論理ユニット（ＡＬＵ）１２１６及びロードストアアドレス制御部１２１４に出力する。演算回路１２１５は、図１６のＣＲＣ演算回路であり、汎用レジスタ１２１３から入力データｓ１［０］〜ｓ１［３］、係数ｓ１［０］〜ｓ１［ｎ］及び剰余情報ｓ２［１：０］を入力し、図１１のＣＲＣ演算回路と同じ処理を行い、演算結果を汎用レジスタ１２１３に書き込む。汎用レジスタ１２１３は、レジスタｄ３［０］〜ｄ３［ｎ］（レジスタＤ０〜Ｄｎ）を有する。演算回路１２１５は、汎用レジスタ１２１３からレジスタｄ３［０］〜ｄ３［ｎ］のデータを入力し、演算を繰り返す。算術論理ユニット１２１６は、図５のカウンタ５０４及び結果判定部５０３を含み、処理結果を汎用レジスタ１２１３に書き込む。最後に、汎用レジスタ１２１３内のレジスタｄ３［０］〜ｄ３［ｎ］には、ＣＲＣ演算の剰余が格納される。算術論理ユニット１２１６内の結果判定部５０３は、上記の剰余が０であれば誤りなし、０でなければ誤りありの結果を汎用レジスタ１２１３に書き込む。ロードストアアドレス制御部１２１４は、誤りあり／なしの結果を汎用レジスタ１２１３から読み出し、データメモリ１２０３に書き込む。
【００４９】
図１５は、図１２のＣＲＣ確認部１２６の処理例を示すフローチャートである。ステップＳ１５０１では、命令デコード部１２１２は、ＣＲＣ演算命令をデコードすることにより、ＣＲＣ演算回路の制御情報を取得し、汎用レジスタ１２１３に記憶させる。制御情報は、入力データｓ０、係数ｓ１及び剰余情報ｓ２を含む。入力データのデータ長、入力データのアドレス等は、図５の全体制御部５０１により設定される。ＣＲＣ演算命令のオペランドは、制御情報のアドレスを示す。ロードストアアドレス制御部１２１４は、汎用レジスタ１２１３のアドレスを基にデータメモリ１２０３から入力データｓ０、係数ｓ１及び剰余情報ｓ２を読み出し、汎用レジスタ１２１３に書き込む。
【００５０】
次に、ステップＳ１５０２では、算術論理ユニット１２１６は、汎用レジスタ１２１３内にレジスタｄ３［０］〜ｄ３［ｎ］を割り当て、レジスタｄ３［０］〜ｄ３［ｎ］（Ｄ０〜Ｄｎ）を０に初期化する。演算回路１２１５は、汎用レジスタ１２１３から係数ｓ１（α０〜αｎ）を入力し、生成多項式Ｇの設定を行う。演算回路１２１５は、初期時に、汎用レジスタ１２１３から剰余情報ｓ２として０を入力する。
【００５１】
その後、ステップＳ１５２１で、データの末尾から４ビット単位で入力データを同時処理する繰り返し処理を行い、ステップＳ１５２２で、剰余情報ｓ２に応じて最終回の同時処理を行う。
【００５２】
ステップＳ１５０２の後、ステップＳ１５０３では、算術論理ユニット１２１６は、未処理の入力データのデータサイズが４以上であるか否かを判定する。４以上であればステップＳ１５０４に進み、４未満であればステップＳ１５０７に進む。
【００５３】
ステップＳ１５０４では、ロードストアアドレス制御部１２１４は、汎用レジスタ１２１３内のアドレスを基にデータメモリ１２０３から、次に処理すべき入力データを読み出し、汎用レジスタ１２１３に書き込む。
【００５４】
次に、ステップＳ１５０５では、演算回路１２１５は、汎用レジスタ１２１５から入力データｓ０及びレジスタｄ３のデータを入力し、図１６のＣＲＣ演算回路の処理を行う。
【００５５】
次に、ステップＳ１５０６では、算術論理ユニット１２１６は、未処理の入力データのデータサイズを４減算する。その後、ステップＳ１５０３に戻り、上記の処理を繰り返す。
【００５６】
ステップＳ１５０７では、算術論理ユニット１２１６は、汎用レジスタ１２１３から入力データのデータ長を入力し、同時処理するビット数（例えば４）で入力データのデータ長の割った剰余情報ｓ２を汎用レジスタ１２１３に書き込む。なお、ＣＲＣ演算命令内の剰余情報ｓ２をそのまま使用してもよいし、上記のように入力データのデータ長を基に剰余情報ｓ２を計算してもよい。
【００５７】
次に、ステップＳ１５０８では、演算回路１２１５は、汎用レジスタ１２１３から剰余情報ｓ２を入力し、図１６のＣＲＣ演算回路の処理を行う。
【００５８】
次に、ステップＳ１５０９では、算術論理ユニット１２１６は、汎用レジスタ１２１３内のレジスタｄ３［０］〜ｄ３［ｎ］の値が０であるか否かを判定する。０であればステップＳ１５１０に進み、０でなければステップＳ１５１１に進む。
【００５９】
ステップＳ１５１０では、算術論理ユニット１２１６は、ＣＲＣ演算の結果として誤りなしの情報を汎用レジスタ１２１３に書き込む。ステップＳ１５１１では、算術論理ユニット１２１６は、ＣＲＣ演算の結果として誤りありの情報を汎用レジスタ１２１３に書き込む。
【００６０】
（第６の実施形態）
第６の実施形態は、第５の実施形態に対して、図１２の演算回路１２１５が異なる。以下、本実施形態が第５の実施形態と異なる点を説明する。
【００６１】
図１３及び図１４は、第６の実施形態による演算回路１２１５（図１２）の構成例を示す図であり、データの先頭から複数ビット（例えば４ビット）単位で入力データを同時処理するＣＲＣ演算回路を示す。図１３はＣＲＣ演算回路の左部を示し、図１４はＣＲＣ演算回路の右部を示す。図３（Ｂ）の回路も、データの先頭から複数ビット（例えば４ビット）単位で入力データを同時処理するＣＲＣ演算回路である。図１３及び図１４の回路は、複数の係数ｓ１［０］〜ｓ１［ｎ−１］に応じて複数種類の生成多項式ＧのＣＲＣ演算を行うことができ、同時処理するビット数で入力データの全ビット数が割り切れる場合と割り切れない場合の両方の場合でＣＲＣ演算を行うことができる。
【００６２】
図１２のプロセッサ１２０１は、ＣＲＣ演算命令を処理することにより、図１３及び図１４のＣＲＣ演算回路の演算を実現する。ＣＲＣ演算命令は、下記のニーモニックで表現され、命令メモリ１２０２に格納される。
ＣＲＣ  ｓ０，ｓ１，ｓ２，ｄ３
【００６３】
ここで、「ＣＲＣ」は、データの先頭から処理する図１３及び図１４のＣＲＣ演算回路を実現するＣＲＣ演算命令のオペコードである。「ｓ０，ｓ１，ｓ２，ｄ３」は、ＣＲＣ演算命令のオペランドである。「ｓ０」は、入力データを示す。「ｓ１」は、係数α０〜αｎを示す。「ｓ２」は、剰余情報を示す。「ｄ３」は、レジスタＤ０〜Ｄｎを示す。なお、「ｓ０，ｓ１，ｓ２，ｄ３」は、オペランドで記述したが、専用レジスタを別途持たせるようにしてもよい。
【００６４】
命令デコード部１２１２は、オペランド「ｓ０，ｓ１，ｓ２，ｄ３」を含むＣＲＣ演算命令をデコードし、オペランド「ｓ０，ｓ１，ｓ２，ｄ３」の情報を汎用レジスタ１２１３に記憶させる。演算回路１２１５は、汎用レジスタ１２１３内のオペランド「ｓ０，ｓ１，ｓ２，ｄ３」の情報を基にＣＲＣ演算を行う。
【００６５】
図１３において、最上位ビット検出部１３００は、係数ｓ１［０］〜ｓ１［ｎ−１］の中で１になっている最上位ビットを検出し、図９と同様に、その最上位ビットのみを１にした係数β［０］〜β［ｎ］を生成する。例えば、図３（Ｂ）の回路構成に設定する場合、ｓ１＝０１０１＿００００（２進数）となる。このとき、βは１がある最上位ビットのみ１にするためβ＝０００１＿００００（２進数）となる。図１３では、係数βはｎビット分存在すると仮定している。
【００６６】
排他的論理和回路１３０１は、入力データｓ０［０］と論理和（ＯＲ）回路１３２１の出力データとの排他的論理和データを出力する。論理積回路１３１１は、係数β［０］とレジスタｄ３［０］の出力データとの論理積データを出力する。論理和回路１３２１は、前段の論理和回路１３２１の出力データと論理積回路１３１１の出力データとの論理和データを出力する。論理積回路１３３１は、論理和回路１３２１の出力データと係数ｓ１［０］との論理積データを出力する。排他的論理和回路１３４１は、論理積回路１３３１の出力データとレジスタｄ３［０］の出力データとの排他的論理和データを出力する。
【００６７】
排他的論理和回路１３０２は、入力データｓ０［１］と論理和回路１３２２の出力データとの排他的論理和データを出力する。論理積回路１３１２は、係数β［０］と排他的論理和回路１３０１の出力データとの論理積データを出力する。論理和回路１３２２は、前段の論理和回路１３２２の出力データと論理積回路１３１２の出力データとの論理和データを出力する。論理積回路１３３２は、論理和回路１３２２の出力データと係数ｓ１［０］との論理積データを出力する。排他的論理和回路１３４２は、論理積回路１３３２の出力データと排他的論理和回路１３０１の出力データとの排他的論理和データを出力する。
【００６８】
排他的論理和回路１３０３は、入力データｓ０［２］と論理和回路１３２３の出力データとの排他的論理和データを出力する。論理積回路１３１３は、係数β［０］と排他的論理和回路１３０２の出力データとの論理積データを出力する。論理和回路１３２３は、前段の論理和回路１３２３の出力データと論理積回路１３１３の出力データとの論理和データを出力する。論理積回路１３３３は、論理和回路１３２３の出力データと係数ｓ１［０］との論理積データを出力する。排他的論理和回路１３４３は、論理積回路１３３３の出力データと排他的論理和回路１３０２の出力データとの排他的論理和データを出力する。
【００６９】
排他的論理和回路１３０４は、入力データｓ０［３］と論理和回路１３２４の出力データとの排他的論理和データを出力する。論理積回路１３１４は、係数β［０］と排他的論理和回路１３０３の出力データとの論理積データを出力する。論理和回路１３２４は、前段の論理和回路１３２４の出力データと論理積回路１３１４の出力データとの論理和データを出力する。論理積回路１３３４は、論理和回路１３２４の出力データと係数ｓ１［０］との論理積データを出力する。排他的論理和回路１３４４は、論理積回路１３３４の出力データと排他的論理和回路１３０３の出力データとの排他的論理和データを出力する。
【００７０】
セレクタ１３５０は、剰余情報ｓ２が０のときには排他的論理和回路１３０４の出力データを選択し、剰余情報ｓ２が３のときには排他的論理和回路１３０３の出力データを選択し、剰余情報ｓ２が２のときには排他的論理和回路１３０２の出力データを選択し、剰余情報ｓ２が１のときには排他的論理和回路１３０１の出力データを選択し、レジスタｄ３［０］（Ｄ０）に記憶させる。
【００７１】
セレクタ１３５１は、剰余情報ｓ２が０のときには排他的論理和回路１３４４の出力データを選択し、剰余情報ｓ２が３のときには排他的論理和回路１３４３の出力データを選択し、剰余情報ｓ２が２のときには排他的論理和回路１３４２の出力データを選択し、剰余情報ｓ２が１のときには排他的論理和回路１３４１の出力データを選択し、レジスタｄ３［１］（Ｄ１）に記憶させる。
【００７２】
セレクタ１３５０及び１３５１は、剰余情報ｓ２が０のときには左から１番目の入力信号を選択し、剰余情報ｓ２が３のときには左から２番目の入力信号を選択し、剰余情報ｓ２が２のときには左から３番目の入力信号を選択し、剰余情報ｓ２が１のときには左から４番目の入力信号を選択する。
【００７３】
まず、論理和回路１３２１等は、レジスタｄ３の最上位ビットから順に係数βでマスクした値の論理和を演算する。これは、図３（Ｂ）の回路のレジスタＤ３からのフィードバックの信号線を作成しているものである。ｎビットまでの任意の生成多項式Ｇの長さに対応可能であるため、どこからフィードバックしたものかを選択している回路である。論理積回路１３３１で、そのフィードバックデータを係数ｓ１でマスクし、排他的論理和回路１３４１で、それと各レジスタｄ３の値との排他的論理和を演算したものを１ビットシフトさせた結果を１段下に送っている。また、０ビット目だけは、排他的論理和回路１３０１〜１３０４で、フィードバックデータを入力データとの排他的論理和の演算をしたものを結果としている。ここに、１サイクル分の処理した結果が生成される。以降は、同じ処理を行い、順次２サイクル目分、３サイクル目分、４サイクル目分を生成している。最後に、セレクタ１３５０及び１３５１が剰余情報ｓ２に応じて選択し、レジスタｄ３に記憶させる。これは、同時処理するビット数で入力データの全ビット数が割り切れない場合に対応可能にするものである。
【００７４】
このＣＲＣ演算回路は、データの先頭から複数ビット（例えば４ビット）単位で入力データを同時処理する。４ビットに限定されず、８ビット等の他のビット数であってもよい。第１の排他的論理和回路１３０１〜１３０４は、複数ビットの入力データＩＮ［０］〜ＩＮ［３］と複数のフィードバックデータとの排他的論理和データを出力する。複数の論理積回路１３３１〜１３３４は、複数のフィードバックデータ及び係数ｓ１［０］の論理積データを出力する。複数の第２の排他的論理和回路１３４２〜１３４４は、複数の論理積回路１３３２〜１３３４の出力データと第１の排他的論理和回路１３０１〜１３０３の出力データとの排他的論理和データを出力する。第３の排他的論理和回路１３４１は、論理積回路１３３１の出力データとレジスタｄ３［０］の出力データとの排他的論理和データを出力する。第１のセレクタ１３５０は、複数の第１の排他的論理和回路１３０１〜１３０４の出力データを入力し、最終回の同時処理については、同時処理するビット数で入力データの全ビット数を割った剰余情報ｓ２に応じて、入力したデータの中の１個のデータを選択してレジスタｄ３［０］に出力する。第２のセレクタ１３５１は、第２の排他的論理和回路１３４２〜１３４４及び第３の排他的論理和回路１３４１の出力データを入力し、最終回の同時処理については、同時処理するビット数で入力データの全ビット数を割った剰余情報ｓ２に応じて、入力したデータの中の１個のデータを選択してレジスタｄ３［１］に出力する。
【００７５】
ＣＲＣ演算回路は、複数の係数ｓ１［０］〜ｓ１［ｎ−１］及び係数β［０］〜β［ｎ］に応じて複数種類の生成多項式ＧのＣＲＣ演算を行うことができ、剰余情報ｓ２を用いることにより、同時処理するビット数で入力データの全ビット数が割り切れる場合と割り切れない場合の両方の場合でＣＲＣ演算をすることができる。
【００７６】
なお、第５の実施形態及び第６の実施形態の両方の回路を含んだＣＲＣ演算回路を構成するようにしてもよい。また、ソフトウェア無線に対応したＣＲＣ演算回路では、複数ビット単位で高速に同時処理するＣＲＣ演算回路のメリットは大きい。
【００７７】
なお、上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。
【００７８】
以上の実施形態に関し、さらに以下の付記を開示する。
【００７９】
（付記１）
データの末尾から複数ビット単位で入力データを同時処理するＣＲＣ演算回路であって、
複数のレジスタと、
前記複数のレジスタの出力データ又はそれに応じたデータと複数ビットの入力データとの排他的論理和データを出力する複数の第１の排他的論理和回路とを有し、
前記複数のレジスタは、前記複数の第１の排他的論理和回路の出力データ又はそれに応じたデータを記憶することを特徴とするＣＲＣ演算回路。
（付記２）
さらに、前記複数の第１の排他的論理和回路の出力データと複数の係数との論理積データを出力する複数の論理積回路と、
前記複数の論理積回路の中の一部の論理積回路の出力データと前記複数のレジスタの中の一部のレジスタの出力データとの排他的論理和データを出力する複数の第２の排他的論理和回路とを有し、
前記複数の第１の排他的論理和回路の中の一部の複数の第１の排他的論理和回路は、複数の前記第２の排他的論理和回路の出力データと複数ビットの入力データとの排他的論理和データを出力し、
前記複数の係数に応じて複数種類の生成多項式のＣＲＣ演算を行うことを特徴とする付記１記載のＣＲＣ演算回路。
（付記３）
さらに、少なくとも前記第２の排他的論理和回路の出力データを入力し、最終回の同時処理については、前記同時処理するビット数で前記入力データの全ビット数を割った剰余に応じて、前記入力したデータの中の１個のデータを選択して前記複数のレジスタに出力するセレクタを有し、
前記同時処理するビット数で前記入力データの全ビット数が割り切れる場合と割り切れない場合の両方の場合でＣＲＣ演算をすることができることを特徴とする付記２記載のＣＲＣ演算回路。
（付記４）
さらに、前記複数の係数を含むＣＲＣ演算命令をデコードすることにより、前記複数の係数を出力する命令デコード部を有することを特徴とする付記２又は３記載のＣＲＣ演算回路。
（付記５）
付記１〜４のいずれか１項に記載のＣＲＣ演算回路を有することを特徴とするプロセッサ。
（付記６）
データの末尾から１ビットずつ入力データを処理するＣＲＣ演算回路であって、
複数のレジスタと、
前記複数のレジスタの中の一のレジスタの出力データと入力データとの排他的論理和データを出力する第１の排他的論理和回路と、
前記第１の排他的論理和回路の出力データと複数の係数との論理積データを出力する複数の論理積回路と、
前記複数の論理積回路の中の一部の複数の論理積回路の出力データと前記複数のレジスタの中の一部の複数のレジスタの出力データとの排他的論理和データを出力し、次段の複数のレジスタに記憶させる複数の第２の排他的論理和回路とを有し、
前記複数の係数に応じて複数種類の生成多項式のＣＲＣ演算を行うことを特徴とするＣＲＣ演算回路。
（付記７）
データの先頭から複数ビット単位で入力データを同時処理するＣＲＣ演算回路であって、
複数のレジスタと、
複数ビットの入力データと複数のフィードバックデータとの排他的論理和データを出力する複数の第１の排他的論理和回路と、
前記複数のフィードバックデータ及び係数の論理積データを出力する複数の論理積回路と、
前記複数の論理積回路の出力データと前記第１の排他的論理和回路の出力データとの排他的論理和データを出力する複数の第２の排他的論理和回路と、
前記論理積回路の出力データと前記レジスタの出力データとの排他的論理和データを出力する第３の排他的論理和回路と、
前記複数の第１の排他的論理和回路の出力データを入力し、最終回の同時処理については、前記同時処理するビット数で前記入力データの全ビット数を割った剰余に応じて、前記入力したデータの中の１個のデータを選択して前記レジスタに出力する第１のセレクタと、
前記第２の排他的論理和回路及び前記第３の排他的論理和回路の出力データを入力し、最終回の同時処理については、前記同時処理するビット数で前記入力データの全ビット数を割った剰余に応じて、前記入力したデータの中の１個のデータを選択して前記レジスタに出力する第２のセレクタとを有し、
前記係数に応じて複数種類の生成多項式のＣＲＣ演算を行い、
同時処理するビット数で前記入力データの全ビット数が割り切れる場合と割り切れない場合の両方の場合でＣＲＣ演算をすることができることを特徴とするＣＲＣ演算回路。
（付記８）
さらに、前記係数を含むＣＲＣ演算命令をデコードすることにより、前記係数を出力する命令デコード部を有することを特徴とする付記７記載のＣＲＣ演算回路。
（付記９）
付記７又は８記載のＣＲＣ演算回路を有することを特徴とするプロセッサ。
【符号の説明】
【００８０】
Ｄ０〜Ｄｎ  レジスタ
１２５  復号部
４１１〜４１６  排他的論理和回路
５０１  全体制御部
５０２  ＣＲＣ演算回路
５０３  結果判定部
５０４  カウンタ
１２０１  プロセッサ
１２０２  命令メモリ
１２０３  データメモリ
１２１１  プログラムカウンタ制御部
１２１２  命令デコード部
１２１３  汎用レジスタ
１２１４  ロードストアアドレス制御部
１２１５  演算回路
１２１６  算術論理回路
【図１】
2012169926.tif 000003
【図２】
2012169926.tif 000004
【図３】
2012169926.tif 000005
【図４】
2012169926.tif 000006
【図５】
2012169926.tif 000007
【図６】
2012169926.tif 000008
【図７】
2012169926.tif 000009
【図８】
2012169926.tif 000010
【図９】
2012169926.tif 000011
【図１０】
2012169926.tif 000012
【図１１】
2012169926.tif 000013
【図１２】
2012169926.tif 000014
【図１３】
2012169926.tif 000015
【図１４】
2012169926.tif 000016
【図１５】
2012169926.tif 000017
【図１６】
2012169926.tif 000018