(57)【特許請求の範囲】
【請求項１】
第４のデータに対してＣＲＣ演算するＣＲＣ演算回路であって、
生成多項式の最大次数が最上位ビットになるように前記生成多項式を表すデータをシフトすることにより複数ビットの第１のデータを生成する第１の入力シフト回路と、
前記生成多項式の最大次数のビット位置を基に規定値をシフトすることにより複数ビットの第２のデータを生成する第２の入力シフト回路と、
ＣＲＣ演算の状態を表すデータをシフトすることにより複数ビットの第３のデータを生成する第３の入力シフト回路と、
前記複数ビットの第３のデータのうちの最上位ビットのデータと、前記第４のデータとの排他的論理和を演算する第１の排他的論理和回路と、
前記複数ビットの第３のデータのうちの最上位ビットのデータと、前記複数ビットの第１のデータとの論理積を演算する複数の第１の論理積回路と、
前記複数の第１の論理積回路の出力データと、前記複数ビットの第３のデータのうちの最上位ビット以外の複数ビットのデータとの排他的論理和を演算する複数の第２の排他的論理和回路と、
前記第１の排他的論理和回路の出力データと、前記複数ビットの第２のデータとの論理積を演算する複数の第２の論理積回路と、
前記複数の第２の排他的論理和回路のうちの一部の出力データと、前記複数の第２の論理積回路のうちの一部の出力データとの論理和を演算する複数の論理和回路と、
前記複数の論理和回路の出力データを、前記第１の入力シフト回路に対して逆方向にシフトすることによりＣＲＣ演算の結果データを生成する出力シフト回路と
を有することを特徴とするＣＲＣ演算回路。
【請求項２】
前記第１の排他的論理和回路、前記複数の第１の論理積回路、前記複数の第２の排他的論理和回路、前記複数の第２の論理積回路、及び前記複数の論理和回路を演算ユニットとし、前記演算ユニットを複数接続し、前記複数の演算ユニットに複数ビットの前記第４のデータをそれぞれ１ビットずつ入力することを特徴とする請求項１記載のＣＲＣ演算回路。
【請求項３】
請求項１又は２記載のＣＲＣ演算回路を有することを特徴とするプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＣＲＣ（巡回冗長検査：Cyclic Redundancy Check）演算回路及びプロセッサに関する。
【背景技術】
【０００２】
ソフトウェアにて無線通信処理を行うＳＤＲ（Software Defined Radio）は、ハードウェアによる無線通信処理と比較して、ソフトウェアによる処理のため、規格の変更や複数方式への対応という点において、優位な方式である。しかし、複雑で演算量の多い無線通信処理を行うためには、汎用のデジタルシグナルプロセッサ（ＤＳＰ）だけでは無理があり、無線通信処理に適した専用の命令及び専用の命令処理ユニットを設ける必要がある。今後も通信データ転送量の増加が予想されており、短時間でより多くの処理を行うことが求められている。
【０００３】
また、生成多項式を示すデータ保持し、生成多項式を示すデータと、全ビットの値が０であるゼロデータとを選択的に出力する生成多項式供給手段と、ＣＲＣ演算を行う演算データを出力する演算データ供給手段と、生成多項式を示すデータまたはゼロデータと、演算データとの排他的論理和演算を行う算術論理演算手段とを備えるＣＲＣ演算装置が知られている（例えば、特許文献１参照）。
【０００４】
また、第１及び第２の入力信号に信号処理を施す演算回路と、第１の入力信号又は演算回路の出力信号を選択的に出力する第１の選択回路と、第２の入力信号又は演算回路の出力信号を選択的に出力する第２の選択回路とをそれぞれ有する基本回路を直列に複数接続し、第１及び第２の選択回路によりいずれの信号を出力するかを適宜選択することで、回路全体での動作を変更可能にして、その選択に応じて異なる信号処理を１つの回路で実現することができるようにする信号処理回路が知られている（例えば、特許文献２参照）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００１−３５８５９４号公報
【特許文献２】特開２００５−３４１２９９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明の目的は、少ない処理段数でＣＲＣ演算を行うことができるＣＲＣ演算回路及びプロセッサを提供することである。
【課題を解決するための手段】
【０００７】
ＣＲＣ演算回路は、第４のデータに対してＣＲＣ演算するＣＲＣ演算回路であって、生成多項式の最大次数が最上位ビットになるように前記生成多項式を表すデータをシフトすることにより複数ビットの第１のデータを生成する第１の入力シフト回路と、前記生成多項式の最大次数のビット位置を基に規定値をシフトすることにより複数ビットの第２のデータを生成する第２の入力シフト回路と、ＣＲＣ演算の状態を表すデータをシフトすることにより複数ビットの第３のデータを生成する第３の入力シフト回路と、前記複数ビットの第３のデータのうちの最上位ビットのデータと、前記第４のデータとの排他的論理和を演算する第１の排他的論理和回路と、前記複数ビットの第３のデータのうちの最上位ビットのデータと、前記複数ビットの第１のデータとの論理積を演算する複数の第１の論理積回路と、前記複数の第１の論理積回路の出力データと、前記複数ビットの第３のデータのうちの最上位ビット以外の複数ビットのデータとの排他的論理和を演算する複数の第２の排他的論理和回路と、前記第１の排他的論理和回路の出力データと、前記複数ビットの第２のデータとの論理積を演算する複数の第２の論理積回路と、前記複数の第２の排他的論理和回路のうちの一部の出力データと、前記複数の第２の論理積回路のうちの一部の出力データとの論理和を演算する複数の論理和回路と、前記複数の論理和回路の出力データを、前記第１の入力シフト回路に対して逆方向にシフトすることによりＣＲＣ演算の結果データを生成する出力シフト回路とを有する。
【発明の効果】
【０００８】
ＣＲＣ演算回路は、生成多項式の最大次数が最上位ビットになるように配置され、生成多項式を表す複数ビットの第１のデータを用いることにより、少ない処理段数でＣＲＣ演算を行うことができる。
【図面の簡単な説明】
【０００９】
【図１】実施形態によるデジタルシグナルプロセッサ（ＤＳＰ）の構成例を示すブロック図である。
【図２】実施形態による通信システムの構成例を示す図である。
【図３】図２のＣＲＣ付加部及びＣＲＣ確認部の構成例を示す図である。
【図４】図１の専用命令回路（ＣＲＣ演算回路）の構成例を示す図である。
【図５】図４のデータｓ１の生成方法を説明するための図である。
【図６】図４のデータｓ０の生成方法を説明するための図である。
【図７】図４の入力データの構成例を示す図である。
【図８】図１の専用命令回路（ＣＲＣ演算回路）の他の構成例を示す図である。
【図９】実施形態による図１の専用命令回路（ＣＲＣ演算回路）の構成例を示す図である。
【図１０】図９の事前処理部内のシフト量演算回路の構成例を示す図である。
【図１１】図９の事前処理部内の第１の入力シフト回路の構成例を示す図である。
【図１２】図９の事前処理部内の第２の入力シフト回路の構成例を示す図である。
【図１３】図９の事前処理部内の第３の入力シフト回路の構成例を示す図である。
【図１４】図９のＣＲＣ演算ユニットの構成例を示す図である。
【図１５】図９の事後処理部内の出力シフト回路の構成例を示す図である。
【図１６】他の実施形態による図１の専用命令回路（ＣＲＣ演算回路）の構成例を示す図である。
【発明を実施するための形態】
【００１０】
図２は、実施形態による通信システムの構成例を示す図である。通信システムは、送信装置及び受信装置を有する。送信装置は、ＭＡＣ層２０１、ＣＲＣ付加部２０２、符号化・変調部２０３、デジタル／アナログ変換部２０４、ＲＦ（Radio Frequency）部２０５及びアンテナ２０６を有する。ＭＡＣ層２０１は、送信データを出力する。ＣＲＣ付加部２０２は、送信データに対してＣＲＣ演算を行い、誤り検出符号（剰余）を付加した送信データを出力する。ＣＲＣ付加部２０２の詳細は、後に図３を参照しながら説明する。符号化・変調部２０３は、ＣＲＣ付加部２０２の出力データに対して誤り訂正の符号化又はインターリーブ処理、及びＯＦＤＭ方式又はＣＤＭＡ方式等の変調を行い、出力する。デジタル／アナログ変換部２０４は、符号化・変調部２０３の出力データをデジタルからアナログに変換して出力する。ＲＦ部２０５は、デジタル／アナログ変換部２０４の出力データを低周波数信号（ベースバンド周波数信号）から所定の高周波数信号に変換し、アンテナ２０６を介して、無線送信する。
【００１１】
受信装置は、アンテナ２１６、ＲＦ部２１５、アナログ／デジタル変換部２１４、復調・復号部２１３、ＣＲＣ確認部２１２及びＭＡＣ層２１１を有する。ＲＦ部２１５は、アンテナ２１６を介して受信データを無線受信し、受信データを高周波数信号から低周波数信号（ベースバンド周波数信号）に変換して出力する。アナログ／デジタル変換部２１４は、ＲＦ部２１５の出力データをアナログからデジタルに変換して出力する。復調・復号部２１３は、アナログ／デジタル変換部２１４の出力データに対してＯＦＤＭ方式又はＣＤＭＡ方式等の復調、及び逆インターリーブ処理又は誤り訂正処理の復号を行い、出力する。ＣＲＣ確認部２１２は、誤り検出部であり、復調・復号部２１３の出力データに対してＣＲＣ演算を行い、受信データに誤りがないか否かを検出する。ＭＡＣ層２１１は、誤りの有無に応じて受信データの処理を行う。
【００１２】
図３は、図２のＣＲＣ付加部２０２の構成例を示す図である。ＣＲＣ付加部２０２は、送信データを先頭から１ビットずつ入力データｒとして入力する。排他的論理和回路３０１は、入力データｒとレジスタｄ４の出力データとの排他的論理和データを出力する。レジスタｄ０は、排他的論理和回路３０１の出力データを記憶する。排他的論理和回路３０２は、レジスタｄ０の出力データとレジスタｄ４の出力データとの排他的論理和データを出力する。レジスタｄ１は、排他的論理和回路３０２の出力データを記憶する。レジスタｄ２は、レジスタｄ１の出力データを記憶する。排他的論理和回路３０３は、レジスタｄ２の出力データとレジスタｄ４の出力データとの排他的論理和データを出力する。レジスタｄ３は、排他的論理和回路３０３の出力データを記憶する。レジスタｄ４は、レジスタｄ３の出力データを記憶する。レジスタｄ０〜ｄ４は、シフトレジスタを構成し、入力データｒのビット入力毎にデータをシフトして記憶する。
【００１３】
ＣＲＣ付加部２０２は、ＣＲＣ演算を行う。具体的には、ＣＲＣ付加部２０２は、入力データｒに対して所定の生成多項式Ｇでモジュロー２の除算を行い、剰余ＲＳを入力データｒの後ろに付加することにより送信データを生成し、出力する。図３の場合、生成多項式Ｇは、Ｇ＝１＋ｘ＋ｘ3＋ｘ5である。ここで、ｘの演算はモジュロー２である。すなわち、ＣＲＣ演算は、ｒ÷Ｇ＝Ｑ・・・ＲＳの演算を行う。ここで、Ｑは商である。書き換えると、ｒ＝Ｇ×Ｑ＋ＲＳで表される。入力データｒの全ビットの入力が終了した時点において、５個のレジスタｄ０〜ｄ４に記憶されている５ビットのデータが剰余ＲＳである。ＣＲＣ付加部２０２は、剰余ＲＳを入力データｒの後ろに付加することにより送信データを生成する。送信データは、ｒ＋ＲＳのビット列である。
【００１４】
次に、図２のＣＲＣ確認部２１２について説明する。ＣＲＣ確認部２１２は、図３のＣＲＣ付加部２０２と同じ構成を有する。すなわち、ＣＲＣ確認部２１２は、ＣＲＣ付加部２０２と同じＣＲＣ演算を行う。ＣＲＣ確認部２１２は、上記のように、ＣＲＣ付加部２０２が生成したｒ＋ＲＳの送信データを入力する。その入力データは、シリアルデータのビット列である。ＣＲＣ確認部２１２は、ＣＲＣ付加部２０２と同様のＣＲＣ演算を行う。具体的には、ＣＲＣ確認部２１２は、入力データｒに対して所定の生成多項式Ｇでモジュロー２の除算を行う。この生成多項式Ｇは、ＣＲＣ付加部２０２で用いた生成多項式Ｇと同じである。入力データｒに誤りがなければ、ＣＲＣ演算の剰余ＲＳは、送信データＲＳと同じである。ＣＲＣ確認部２１２は、入力データｒを先頭から１ビットずつ入力し、入力データｒの全ビットの入力が終わった時点でレジスタｄ０〜ｄ４に記憶されている５ビットの剰余が送信データＲＳと同じであれば誤りなしの結果を出力し、同じでなければ誤りありの結果を出力する。
【００１５】
図１は、実施形態によるデジタルシグナルプロセッサ（ＤＳＰ）の構成例を示すブロック図である。デジタルシグナルプロセッサ１０１は、図２のＣＲＣ付加部２０２及びＣＲＣ確認部２１２に用いることができる。デジタルプロセッサ１０１は、プログラムカウンタ１０４、デコーダ１０５、レジスタファイル１０６、ロード・ストアユニット１０７、専用命令回路１０８及び算術論理演算ユニット（ＡＬＵ）１０９を有し、命令ＲＡＭ１０２及びデータＲＡＭ１０３に接続され、ＣＲＣ演算を行うことができる。命令ＲＡＭ１０２は、ＣＲＣ演算命令及びパラメータ設定命令等を記憶する。プログラムカウンタ１０４は、現在の実行命令アドレスを示すプログラムカウンタ値を記憶する。デジタルシグナルプロセッサ１０１は、プログラムカウンタ１０４のプログラムカウンタ値が示すアドレスの命令を命令ＲＡＭ１０２から読み出す。デコーダ１０５は、命令ＲＡＭ１０２から読み出された命令をデコードし、レジスタファイル１０６内のレジスタにパラメータ等を記憶させる。例えば、デコーダ１０５は、パラメータ設定命令をデコードすることにより、ＣＲＣ演算の生成多項式等のパラメータをレジスタファイル１０６に記憶させる。また、デコーダ１０５は、ＣＲＣ演算命令をデコードすることにより、ＣＲＣ演算開始を指示するためのフラグをレジスタファイル１０６に記憶させる。ロード・ストアユニット１０７は、データＲＡＭ１０３からパラメータ等のデータをロードしてレジスタファイル１０６に記憶させる。また、ロード・ストアユニット１０７は、レジスタファイル１０６からＣＲＣ演算結果等のデータを読み出してデータＲＡＭ１０３にストアする。専用命令回路（ＣＲＣ演算回路）１０８は、レジスタファイル１０６内のパラメータを入力し、レジスタファイル１０６内のフラグに応じてＣＲＣ演算を開始し、ＣＲＣ演算結果をレジスタファイル１０６に書き込む。算術論理演算ユニット１０９は、レジスタファイル１０６内のパラメータ等のデータに対して算術論理演算を行い、その演算結果をレジスタファイル１０６に書き込む。
【００１６】
無線通信で使用する規格として、ＬＴＥ（Long Term Evolution）やＷＣＤＭＡ（Wideband Code Division Multiple Access）等のように様々な規格が提案され、使用されている。各規格に対応したシステムＬＳＩは、設計時に対応する規格を決めるため、他の規格へ対応することは難しい。この問題に対応するために、図１のデジタルシグナルプロセッサのソフトウェアを用いて無線通信処理を行うＳＤＲの方式が有利である。ＳＤＲでは、各種の無線通信処理をソフトウェアにて行うため、様々な規格に対応することができる。加えて、設計上において発生した問題に対しても、ソフトウェアの更新によって問題を解決することが可能になる。
【００１７】
以上のように、ＳＤＲはその柔軟性でハードウェアによる無線通信処理に対して優位性がある。しかし、無線通信処理では非常に多くの演算処理を要求するものが多く、汎用のデジタルシグナルプロセッサを用いたＳＤＲでは、規格で要求されている処理を満たすことが難しい。そのため、無線通信の規格で頻繁に使用されている処理等においては、図１のようにデジタルシグナルプロセッサに専用命令回路１０８を持たせることにより高速化を実現することができる。
【００１８】
図４は、図１の専用命令回路（ＣＲＣ演算回路）１０８の構成例を示す図である。専用命令回路１０８は、データｓ０及びｓ１を設定することにより、種々の生成多項式Ｇを用いたＣＲＣ演算を行うことができる。レジスタｄ０〜ｄ３１は、３２ビットレジスタの各ビットデータを示し、図３のレジスタｄ０〜ｄ４に対応し、初期値は例えば０である。入力データｒは、図３の入力データｒに対応する。複数の排他的論理和回路４０５は、図３の排他的論理和回路３０１〜３０３に対応する。
【００１９】
図５は、図４のデータｓ１の生成方法を説明するための図である。例として、図３のＣＲＣ演算回路を構成するためのデータｓ１の生成方法を説明する。図３のＣＲＣ演算回路の生成多項式Ｇは、Ｇ＝１＋ｘ＋ｘ3＋ｘ5である。データｓ１は、生成多項式Ｇを表すデータである。生成多項式Ｇは、ｘ、ｘ3及びｘ5を含み、ｘ2、ｘ4、ｘ6〜ｘ30を含まない。含む項を「１」で表し、含まない項を「０」で表すと、３１ビットデータｓ１は、「ｘ、ｘ2、ｘ3、ｘ4、ｘ5、ｘ6、・・・、ｘ30」＝「１、０、１、０、１、０、・・・、０」で表される。なお、ｘ0＝１の項は、必ず存在するので、データｓ１からは削除する。図５の回路に対応させると、排他的論理和回路３０２，３０３及びレジスタｄ４のフィードバック出力部に対応する位置は、データｓ１上で「１」になる。
【００２０】
図６は、図４のデータｓ０の生成方法を説明するための図である。例として、図３のＣＲＣ演算回路を構成するためのデータｓ０の生成方法を説明する。図３のＣＲＣ演算回路の生成多項式Ｇは、Ｇ＝１＋ｘ＋ｘ3＋ｘ5である。データｓ０は、生成多項式Ｇの最大次数を表すデータである。生成多項式Ｇの最大次数は、例えばｘ5である。したがって、データｓ０は、最大次数であるｘ5のビットのみが「１」になり、それ以外のビットが０になる。なお、ｘ0＝１の項は、必ず存在するので、データｓ０からは削除する。すると、３２ビットデータｓ０は、「ｘ、ｘ2、ｘ3、ｘ4、ｘ5、ｘ6、・・・、ｘ31」＝「０、０、０、０、１、０、・・・、０」で表される。図６の回路に対応させると、最後段のレジスタｄ４のフィードバック出力部に対応する位置は、データｓ０上で「１」になる。なお、データｓ０は、データｓ１を基に生成してもよい。
【００２１】
図７は、図４の入力データｒの構成例を示す図である。入力データｒは、３２ビットレジスタｒ０〜ｒ３１に記憶される。レジスタｒ０〜ｒ３１は、それぞれ３２個のシリアルビットデータを示す。レジスタｒ３１が先頭のビットデータであり、レジスタｒ０が最後のビットデータである。図５及び図６のＣＲＣ演算回路では、レジスタｒ３１のビットデータが先頭データとして入力される。レジスタｄ０〜ｄ３１の３２ビットデータは、レジスタｄ３１のデータを先頭として、シリアルに入力される。レジスタｒ３１のデータは１回目のＣＲＣ演算で使用する入力データであり、レジスタｒ３０のデータは２回目のＣＲＣ演算で使用する入力データであり、レジスタｒ０のデータは３２回目のＣＲＣ演算で使用する入力データである。
【００２２】
図４において、３２個の論理積（ＡＮＤ）回路４０１は、それぞれ、３２ビットレジスタｄ０〜ｄ３１のデータと３２ビットデータｓ０との論理積データを出力する。例えば、３２ビットデータｓ０は、図６の場合、「０、０、０、０、１、０、・・・、０」である。したがって、レジスタｄ４のデータを入力した論積回路４０１のみがレジスタｄ４のデータを出力し、その他の論理積回路４０１は「０」を出力する。複数の論理和（ＯＲ）回路４０２は、３２個の論理積回路４０１の出力データの論理和を演算し、最終段の論理和回路４０２は３２個の論理積回路４０１の出力データの論理和データ４０６を出力する。その結果、最終段の論理和回路４０２は、例えば図３の最後段のレジスタｄ４のフィードバック出力部に対応し、例えばレジスタｄ４のデータを出力する。
【００２３】
排他的論理和回路４０３は、例えば図３の排他的論理和回路３０１に対応し、１ビット入力データｒと論理和データ４０６との排他的論理和データをレジスタｄ０に出力する。レジスタｄ０は、そのデータを記憶する。
【００２４】
３１個の論理積回路４０４は、それぞれ、３１ビットデータｓ１と論理和データ４０６との論理積データを出力する。例えば、３１ビットデータｓ１は、図５の場合、「１、０、１、０、１、０、・・・、０」である。その場合、左から１番目、３番目及び５番目の論理積回路４０４のみが論理和データ４０６を出力し、その他の論理積回路４０４は「０」を出力する。
【００２５】
３１個の排他的論理和回路４０５は、それぞれ、３１個の論理積回路４０４の出力データと３１ビットのレジスタｄ０〜ｄ３０のデータとの排他的論理和データを出力する。例えば、左から１番目、３番目及び５番目の論理積回路４０４のみが論理和データ４０６を出力するので、左から１番目、３番目及び５番目の排他的論理和回路４０４のみが論理和データ４０６とレジスタｄ０、ｄ２、ｄ４との排他的論理和データをレジスタｄ１、ｄ３、ｄ５に出力し、その他の排他的論理和回路４０４はレジスタｄ１、ｄ３、ｄ５〜ｄ３０のデータをそのままレジスタｄ２、ｄ４、ｄ６〜ｄ３１に出力する。
【００２６】
以上の処理により、１回目のＣＲＣ演算を行うことができる。図４の最上部のレジスタｄ０〜ｄ３１と最下部のレジスタｄ０〜ｄ３１は同じレジスタである。２回目のＣＲＣ演算を行う場合には、最下部のレジスタｄ０〜ｄ３１のデータが最上部のレジスタｄ０〜ｄ３１のデータになり、入力データｒとしてレジスタｒ３０のデータが入力される。この処理を入力データｒのビット数分繰り返すことにより、ＣＲＣ演算が完了する。以上のように、データｓ０及びｓ１を設定することにより、種々の生成多項式ＧのＣＲＣ演算を行うことができる。
【００２７】
図８は、図１の専用命令回路（ＣＲＣ演算回路）１０８の他の構成例を示す図であり、入力データレジスタｒ１６〜ｒ３１のデータに対してＣＲＣ演算を行う例を示す。複数個のＣＲＣ演算ユニット８０１は、直列に接続される。各ＣＲＣ演算ユニット８０１は、図４の構成を有する。ただし、レジスタｄ０〜ｄ３１は、各ＣＲＣ演算ユニット８０１内には設けられず、初段のＣＲＣ演算ユニット８０１の入力端子にデータを出力し、セレクタ８０２の出力データを入力する。複数個のＣＲＣ演算ユニット８０１は、レジスタｄ０〜ｄ３１を介さずに配線により接続され、直接データの伝達を行う。
【００２８】
例えば、入力データレジスタｒ１６〜ｒ３１を使用する場合を例に説明する。１６個のＣＲＣ演算ユニット８０１は、それぞれ、１６個のレジスタｒ１６〜ｒ３１のデータを入力し、ＣＲＣ演算を行う。ＣＲＣ演算回数レジスタ８０３は、ＣＲＣ演算を行う回数を記憶する。ＣＲＣ演算回数は、入力データｒのビット数に対応する。３２個のセレクタ８０２は、ＣＲＣ演算回数レジスタ８０３に記憶されているＣＲＣ演算回数に応じて、１６個のＣＲＣ演算ユニット８０１の出力データのうちの１個のＣＲＣ演算ユニット８０１の出力データを選択し、３２個のレジスタｄ０〜ｄ３１に出力する。例えば、ＣＲＣ演算回数が８回の場合には、上から８個目のＣＲＣ演算ユニット８０１の出力データをＣＲＣ演算結果として選択して出力する。
【００２９】
以上説明したように、ＳＤＲ用デジタルシグナルプロセッサ１０１の命令で処理するＣＲＣ演算において、その生成多項式Ｇを表すデータｓ１及び生成多項式Ｇの最大次数を表すデータｓ０を設定することにより、様々な生成多項式ＧのＣＲＣ演算に対応することができる。
【００３０】
ＣＲＣ演算用の専用命令を設けることにより、対応する無線通信処理を効率化することが可能である。しかし、高い周波数で動作するプロセッサ速度においては、ＣＲＣ演算回路によってはクリティカルパスにおけるタイミングエラーが発生する可能性が大きくなり、問題になることがある。
【００３１】
ここで、図４の回路の処理段数を計算する。論理積回路４０１は１段分の処理段数、論理和回路４０２は３２個のデータの論理和演算をするために５段分の処理段数、論理積回路４０４は１段分の処理段数、排他的論理和回路４０５は１段分の処理段数が必要である。したがって、図４の回路は、１＋５＋１＋１＝８段分の処理段数が必要である。
【００３２】
次に、図８の回路の処理段数を計算する。１個のＣＲＣ演算ユニット８０１は、図４の回路と同じく８段分の処理段数が必要である。したがって、１６個のＣＲＣ演算ユニット８０１は、８段×１６個＝１２８段分の処理段数が必要である。また、セレクタ８０２は、１６個のデータの中から１個のデータを選択するため８段分の処理段数が必要になる。したがって、図８の回路は、１２８＋８＝１３６段分の処理段数が必要になる。
【００３３】
以下、処理段数がより少ないＣＲＣ演算回路の実施形態を説明する。処理段数を少なくすることにより、ＣＲＣ演算を高速化することができる。また、クリティカルパスの段数を減らすことができるので、タイミング余裕時間が長くなり、高速なプロセッサの使用が可能になる。
【００３４】
図９は、実施形態による図１の専用命令回路（ＣＲＣ演算回路）１０８の構成例を示す図である。専用命令回路１０８は、状態レジスタｄ０〜ｄ３１、入力データレジスタ９０４、事前処理部９０１、ＣＲＣ演算ユニット９０２及び事後処理部９０３を有するＣＲＣ演算回路である。入力データレジスタ９０４は、図７の３２ビットレジスタｒ０〜ｒ３１に対応し、例えばレジスタｒ３１である。事前処理部９０１は、図１０のシフト量演算回路、図１１の第１の入力シフト回路、図１２の第２の入力シフト回路、及び図１３の第３の入力シフト回路を有する。ＣＲＣ演算ユニット９０２は、図１４の回路構成を有する。事後処理部９０３は、図１５の出力シフト回路を有する。
【００３５】
図１０は、図９の事前処理部９０１内のシフト量演算回路の構成例を示す図である。３２個の論理積回路１００１は、それぞれ、３２ビットデータｓ０と定数「０」〜「３１」との論理積データを出力する。例えば、３２ビットデータｓ０は、図６に示した通り、「０、０、０、０、１、０、・・・、０」である。したがって、左から５番目の論理積回路１００１は定数「２７」を出力し、その他の論理積回路１００１は「０」を出力する。論理和回路１００２は、３２個の論理積回路１００１の出力データの論理和を演算する。最終段の論理和回路１００２は、３２個の論理積回路１００１の出力データの論理和データをシフト量レジスタ１００３に出力する。例えば、３２ビットデータｓ０が「０、０、０、０、１、０、・・・、０」の場合、シフト量レジスタ１００３には定数「２７」が記憶される。３２ビットデータｓ０が「０、０、０、０、１、０、・・・、０」の場合、「１」のビット位置は左から５番目なので、３２−５＝２７より、シフト量が「２７」になる。すなわち、図１０のシフト量演算回路は、生成多項式Ｇの最大次数のビット位置を表すデータｓ０を基にシフト量を演算し、シフト量レジスタ１００３に書き込む。
【００３６】
図１１は、図９の事前処理部９０１内の第１の入力シフト回路の構成例を示す図である。５段バレルシフタ１１０１は、シフト量レジスタ１００３に記憶されているシフト量に応じて、３２ビットデータｓ１を右にビットシフトする。ビットシフトされた３２ビットデータのうち、下位３１ビットが第１のデータｓ１’になる。例えば、シフト量レジスタ１００３のシフト量が「２７」の場合、５段バレルシフタ１１０１は、３２ビットデータｓ１の「１、０、１、０、１、０、・・・、０」を２７ビット右にシフトし、データ「０、・・・、１、０、１、０、１」を出力する。出力データ「０、・・・、１、０、１、０、１」のうち、最上位ビットは必ず１になるので、下位３１ビットのデータ「０、・・・、１、０、１、０」を第１のデータｓ１’とする。すなわち、図１１の第１の入力シフト回路は、生成多項式Ｇの最大次数が最上位ビットになるように生成多項式Ｇを表すデータｓ１をシフトすることにより複数ビットの第１のデータｓ１’を生成する。第１のデータｓ１’は、生成多項式Ｇの最大次数が最上位ビットになるように配置され、生成多項式Ｇを表すデータである。
【００３７】
図１２は、図９の事前処理部９０１内の第２の入力シフト回路の構成例を示す図である。５段バレルシフタ１２０２は、シフト量レジスタ１００３に記憶されているシフト量に応じて、３２ビット規定値１２０１を右にビットシフトする。ビットシフトされた３２ビットデータが第２のデータｓ０’になる。３２ビット規定値１２０１は、最下位ビットのみが「１」のデータ「１、０、０、・・・、０、０」である。例えば、シフト量レジスタ１００３のシフト量が「２７」の場合、５段バレルシフタ１２０２は、３２ビット規定値１２０１の「１、０、０、・・・、０、０」を２７ビット右にシフトし、データ「０、０、・・・、０、１、０、０、０、０」を出力する。その出力データのうちの下位３１ビットデータ「０、・・・、０、１、０、０、０、０」が、第２のデータｓ０’となる。すなわち、図１２の第２の入力シフト回路は、シフト量レジスタ１００３に記憶されているシフト量を基に規定値１２０１をシフトすることにより複数ビットの第２のデータｓ０’を生成する。第２のデータｓ０’は、生成多項式Ｇの開始ビット位置を示すデータである。
【００３８】
図１３は、図９の事前処理部９０１内の第３の入力シフト回路の構成例を示す図である。５段バレルシフタ１３０１は、シフト量レジスタ１００３に記憶されているシフト量に応じて、３２ビット状態レジスタｄ０〜ｄ３１のデータを右にビットシフトする。ビットシフトされた３２ビットデータが第３のデータｄ０’〜ｄ３１’になる。例えば、シフト量レジスタ１００３のシフト量が「２７」の場合、５段バレルシフタ１３０１は、３２ビット状態レジスタｄ０〜ｄ３１のデータ「ｄ０、ｄ１、ｄ２、・・・、ｄ２９、ｄ３０、ｄ３１」を２７ビット右にシフトし、データ「０、０、・・・、０、ｄ０、ｄ１、ｄ２、ｄ３、ｄ４」を出力する。出力データ「０、０、・・・、０、ｄ０、ｄ１、ｄ２、ｄ３、ｄ４」は、第３のデータ「ｄ０’、ｄ１’、・・・、ｄ２６’、ｄ２７’、ｄ２８’、ｄ２９’、ｄ３０’ｄ３１’」となる。すなわち、図１３の第３の入力シフト回路は、ＣＲＣ演算の状態を表すレジスタｄ０〜ｄ３１のデータをシフトすることにより複数ビットの第３のデータｄ０’〜ｄ３１’を生成する。
【００３９】
図１４は、図９のＣＲＣ演算ユニット９０２の構成例を示す図である。ＣＲＣ演算ユニット９０２は、第１のデータｓ１’と、第２のデータｓ０’と、第３のデータｄ０’〜ｄ３１’とを入力し、第４のデータｒに対してＣＲＣ演算する。第４のデータｒは、入力データレジスタｒ０〜ｒ３１のデータであり、例えばレジスタｒ３１のデータである。
【００４０】
第１の排他的論理和回路１４０３は、３２ビットの第３のデータｄ０’〜ｄ３１’のうちの最上位ビットのデータｄ３１’と、第４のデータｒとの排他的論理和を演算して出力する。例えば、第１の排他的論理和回路１４０３は図３の排他的論理和回路３０１に対応し、最上位ビットデータｄ３１’は図３の最後段のレジスタｄ４の出力フィードバックデータに対応し、第４のデータｒは図３の入力データｒに対応する。
【００４１】
３１個の第１の論理積回路１４０１は、それぞれ、３２ビットの第３のデータｄ０’〜ｄ３１’のうちの最上位ビットのデータｄ３１’と、３１ビットの第１のデータｓ１’との論理積を演算して出力する。例えば、図１１の回路の場合、第１のデータｓ１’は、「０、・・・、１、０、１、０」である。その場合、右から２番目及び４番目の第１の論理積回路１４０１はそれぞれ第３のデータｄ３１’を出力し、その他の第１の論理積回路１４０１は「０」を出力する。これにより、図３の場合、排他的論理和回路３０２及び３０３のみに、レジスタｄ４のデータを入力させることができる。
【００４２】
３１個の第２の排他的論理和回路１４０２は、それぞれ、３１個の第１の論理積回路１４０１の出力データと、３２ビットの第３のデータｄ０’〜ｄ３１’のうちの最上位ビット以外の３１ビットのデータｄ０’〜ｄ３０’との排他的論理和を演算して出力する。例えば、図１１の回路の場合、第１のデータｓ１’は、「０、・・・、１、０、１、０」である。その場合、右から２番目の第２の排他的論理和回路１４０２は第３のデータｄ３１’と第３のデータｄ２９’との排他的論理和データを出力し、右から４番目の第２の排他的論理和回路１４０２は第３のデータｄ３１’と第３のデータｄ２７’との排他的論理和データを出力し、その他の第２の排他的論理和回路１４０２は第３のデータｄ０’〜ｄ２６’、ｄ２８’、ｄ３０’をそのまま出力する。右から２番目の第２の排他的論理和回路１４０２は図３の排他的論理和回路３０３に対応し、右から４番目の第２の排他的論理和回路１４０２は図３の排他的論理和回路３０２に対応する。
【００４３】
３１個の第２の論理積回路１４０４は、それぞれ、第１の排他的論理和回路１４０３の出力データと、３１ビットの第２のデータｓ０’との論理積を演算して出力する。例えば、図１２の回路の場合、第２のデータｓ０’は、「０、・・・、０、１、０、０、０、０」である。その場合、右から５番目の第２の論理積回路１４０４は第１の排他的論理和回路１４０３の出力データを出力し、その他の第２の論理積回路１４０４は「０」を出力する。
【００４４】
３０個の論理和回路１４０５は、それぞれ、３１個の第２の排他的論理和回路１４０２のうちの左側の３０個の第２の排他的論理和回路１４０２の出力データと、３１個の第２の論理積回路１４０４のうちの右側の３０個の第２の論積回路１４０４の出力データとの論理和を演算して出力する。
【００４５】
新たな第３のデータｄ０’は、３１個の第２の論理積回路１４０４のうちの最左端の第２の論理積回路１４０４の出力データである。また、新たな第３のデータｄ１’〜ｄ３０’は、３０個の論理和回路１４０５の出力データである。また、新たな第３のデータｄ３１’は、３１個の第２の排他的論理和回路１４０２のうちの最右端の第２の排他的論理和回路１４０２の出力データである。新たな第３のデータｄ０’〜ｄ３１’は、１回分のＣＲＣ演算の演算結果データを右にシフトしたデータに相当する。
【００４６】
図１５は、図９の事後処理部９０３内の出力シフト回路の構成例を示す図である。５段バレルシフタ１５０１は、シフト量レジスタ１００３に記憶されているシフト量に応じて、図１４のＣＲＣ演算ユニット９０２が出力する新たな第３のデータｄ０’〜ｄ３１’を左にビットシフトする。例えば、シフト量レジスタ１００３のシフト量が「２７」の場合、５段バレルシフタ１５０１は、新たな第３のデータｄ０’〜ｄ３１’を２７ビット左にシフトし、データ「ｄ２７’、ｄ２８’、ｄ２９’、ｄ３０’、ｄ３１’、０、・・・、０」を出力する。３２ビット出力データ「ｄ２７’、ｄ２８’、ｄ２９’、ｄ３０’、ｄ３１’、０、・・・、０」は、３２ビットＣＲＣ演算結果データとしてレジスタｄ０〜ｄ３１に出力される。すなわち、図１５の出力シフト回路は、図１４の３０個の論理和回路１４０５の出力データ、３１個の第２の論理積回路１４０４のうちの最左端の第２の論理積回路１４０４の出力データ、及び３１個の第２の排他的論理和回路１４０２のうちの最右端の第２の排他的論理和回路１４０２の出力データを、図１１の第１の入力シフト回路、図１２の第２の入力シフト回路及び図１３の第３の入力シフト回路に対して逆方向にシフトすることによりレジスタｄ０〜ｄ３１のＣＲＣ演算結果データを生成する。
【００４７】
以上のように、図９において、事前処理部９０１内の第１の入力シフト回路（図１１）、第２の入力シフト回路（図１２）及び第３の入力シフト回路（図１３）は、右へのビットシフト処理を行う。ＣＲＣ演算ユニット９０２は、事前処理部９０１により右にビットシフトされたデータを用いてＣＲＣ演算を行う。事後処理部９０３内の出力シフト回路（図１５）は、ＣＲＣ演算ユニット９０２の出力演算結果データに対して、事前処理部９０１のビットシフト方向とは逆に、左にビットすることにより、元のビット位置に戻す。これにより、正常なビット位置のレジスタｄ０〜ｄ３１のＣＲＣ演算結果データを得ることができる。
【００４８】
図１４のＣＲＣ演算ユニット９０２の処理段数を計算する。第１の排他的論理和回路１４０３及び第１の論理積回路１４０１は処理段数が１段分、第２の排他的論理和回路１４０２及び第２の論理積回路１４０４は処理段数が１段分、論理和回路１４０５は処理段数が１段分である。したがって、図１４のＣＲＣ演算ユニット９０２の処理段数の合計は、１＋１＋１＝３段分である。図１４のＣＲＣ演算ユニット９０２は処理段数が３段分であるので、図４のＣＲＣ演算回路（８段分の処理段数）よりも少なくなり、ＣＲＣ演算に必要な処理段数を低減することができる。
【００４９】
図１６は、他の実施形態による図１の専用命令回路（ＣＲＣ演算回路）１０８の構成例を示す図であり、入力データレジスタｒ１６〜ｒ３１のデータに対してＣＲＣ演算を行う例を示す。複数個のＣＲＣ演算ユニット９０２は、直列に接続される。各ＣＲＣ演算ユニット９０２は、図１４の構成を有する。事前処理部９０１、複数個のＣＲＣ演算ユニット９０２、セレクタ１６０１及び事後処理部９０３のそれぞれの間は、レジスタを介さずに配線により接続され、直接データの伝達を行う。
【００５０】
例えば、入力データレジスタｒ１６〜ｒ３１を使用する場合を例に説明する。事前処理部９０１は、図１１の第１の入力シフト回路、図１２の第２の入力シフト回路及び図１３の第３の入力シフト回路を有し、シフト量に応じてデータを右ビットシフトを行う。図１６のＣＲＣ演算回路は、ＣＲＣ演算ユニット９０２を複数接続し、複数のＣＲＣ演算ユニット９０２にレジスタｒ１６〜ｒ３１の複数ビットの第４のデータをそれぞれ１ビットずつ入力する。１６個のＣＲＣ演算ユニット９０２は、それぞれ、事前処理部９０１の出力データを基に、１６個のレジスタｒ１６〜ｒ３１のデータを入力し、ＣＲＣ演算を行う。ＣＲＣ演算回数レジスタ１６０２は、ＣＲＣ演算を行う回数を記憶する。ＣＲＣ演算回数は、入力データｒのビット数に対応する。３２個のセレクタ１６０１は、ＣＲＣ演算回数レジスタ１６０２に記憶されているＣＲＣ演算回数に応じて、１６個のＣＲＣ演算ユニット９０２の出力データのうちの１個のＣＲＣ演算ユニット９０２の出力データを選択し、事後処理部９０３に出力する。例えば、ＣＲＣ演算回数が８回の場合には、上から８個目のＣＲＣ演算ユニット９０２の出力データをＣＲＣ演算結果として選択して出力する。事後処理部９０３は、上記の図１５の構成を有し、シフト量に応じて、３２個のセレクタ１６０１が出力するデータｄ０’〜ｄ３１’を左ビットシフトすることにより、ＣＲＣ演算結果データをレジスタｄ０〜ｄ３１に出力する。
【００５１】
以上のように、事前処理部９０１がＣＲＣ演算に使用する生成多項式Ｇを表すデータｓ１の最大次数が最上位ビットに位置するようにシフトしてから、ＣＲＣ演算ユニット９０２がＣＲＣ演算を行う。生成多項式Ｇの最大次数を最上位ビット位置に固定することにより、フィードバックされるデータのビット位置を固定することができるので、図１６のように、１度に複数回のＣＲＣ演算を行う場合において、処理段数を少なくし、演算時間を短くすることができる。
【００５２】
次に、図１６のＣＲＣ演算回路の処理段数を計算する。事前処理部９０１内のシフト量演算回路は、図１０に示すように、論理積回路１００１の１段分、３２個のデータの論理和を演算する論理和回路１００２の５段分を必要とする。シフト量演算回路の処理段数の合計は、６段分である。また、事前処理部９０１内の第３の入力シフト回路は、図１３に示すように、５段バレルシフタ１３０１が１０段分の処理段数を必要とする。また、ＣＲＣ演算ユニット９０２は、図１４を参照しながら上記で説明したように、３段分の処理段数を必要とする。したがって、１６個のＣＲＣ演算ユニット９０２は、３段×１６個＝４８段分の処理段数を必要とする。また、セレクタ１６０１は、１６個のデータの中から１個のデータを選択するので８段分の処理段数を必要とする。また、事後処理部９０３は、図１５に示すように、５段バレルシフタ１５０１が１０段分の処理段数を必要とする。したがって、図１６のＣＲＣ演算回路の処理段数の合計は、６＋１０＋４８＋８＋１０＝８２段分である。
【００５３】
図１６のＣＲＣ演算回路は、処理段数が８２段分であるので、処理段数が１３６段分である図８のＣＲＣ演算回路よりも、処理段数が少なく、ＣＲＣ演算時間を短くすることができる。また、タイミング余裕時間が長くなるので、高速なプロセッサの使用が可能になる。
【００５４】
なお、上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【００５５】
９０１  事前処理部
９０２  ＣＲＣ演算ユニット
９０３  事後処理部
９０４  入力データレジスタ
１６０１  セレクタ
１６０２  ＣＲＣ演算回数レジスタ
１４０１  第１の論理積回路
１４０２  第２の排他的論理和回路
１４０３  第１の排他的論理和回路
１４０４  第２の論理積回路
１４０５  論理和回路
【図１】
0005724601.tif 000002
【図２】
0005724601.tif 000003
【図３】
0005724601.tif 000004
【図４】
0005724601.tif 000005
【図５】
0005724601.tif 000006
【図６】
0005724601.tif 000007
【図７】
0005724601.tif 000008
【図８】
0005724601.tif 000009
【図９】
0005724601.tif 000010
【図１０】
0005724601.tif 000011
【図１１】
0005724601.tif 000012
【図１２】
0005724601.tif 000013
【図１３】
0005724601.tif 000014
【図１４】
0005724601.tif 000015
【図１５】
0005724601.tif 000016
【図１６】
0005724601.tif 000017