(57)【特許請求の範囲】
【請求項１】
第１ビット長のパラレル信号として入力される信号フレームから、ＣＲＣ演算の対象となる演算対象パケットを抽出する抽出回路と、
前記演算対象パケットのビット長が前記第１ビット長の整数倍と一致しないときに、前記演算対象パケットの最終のビットが最下位ビットに位置するように前記演算対象パケットをシフトし、シフトされた前記演算対象パケットの先頭のビットの最上位ビット側に「０」を付加してビット長が前記第１ビット長の整数倍であるデータＡを生成するシフト回路と、
レジスタと、
前記レジスタに記憶される初期値「０」を元に、前記データＡをＣＲＣ演算してＣＲＣ符号を生成する演算回路と、を有し、
前記レジスタは、前記演算回路が前記ＣＲＣ符号を生成する前に前記初期値「０」を記憶し、前記演算回路が前記ＣＲＣ符号を生成した後に前記ＣＲＣ符号を記憶し、
前記抽出回路は、前記信号フレームのオーバヘッドの位置を示す信号フレームオーバヘッド位置情報、前記演算対象パケットのパケット長を示すパケットレングス情報及び前記信号フレームにおける前記演算対象パケットの先頭のビットの位置を示す先頭位置情報を使用して前記演算対象パケットをシフトするシフト量を決定するシフト量決定回路を有する、ＣＲＣ符号演算回路。
【請求項２】
第１ビット長のパラレル信号として入力される信号フレームから、演算の対象となる演算対象パケットを抽出する抽出回路と、
前記演算対象パケットのビット長が前記第１ビット長の整数倍と一致しないときに、前記演算対象パケットの最終のビットが最下位ビットに位置するように前記演算対象パケットをシフトし、シフトされた前記演算対象パケットの先頭のビットの最上位ビット側にシフト回路初期値を付加してビット長が前記第１ビット長の整数倍であるデータＡを生成するシフト回路と、
レジスタと、
前記レジスタが記憶するレジスタ初期値を元に、前記データＡをＣＲＣ演算してＣＲＣ符号を生成する演算回路と、
前記レジスタ初期値と、前記シフト回路初期値と記憶する初期値設定回路と、を有し、
前記レジスタは、前記演算回路が前記ＣＲＣ符号を生成する前に前記レジスタ初期値を記憶し、前記演算回路が前記ＣＲＣ符号を生成した後に前記ＣＲＣ符号を記憶し、
前記レジスタ初期値及び前記シフト回路初期値は、前記演算回路が前記レジスタ初期値を使用してシフトデータから生成したＣＲＣ符号が、ＣＲＣ初期値を元に、前記演算対象パケットをＣＲＣ演算して生成されるＣＲＣ符号と同一になるように規定され、
前記ＣＲＣ初期値は、前記ＣＲＣ符号を生成する演算で使用する初期値であり、
前記レジスタ初期値は、第２ビット長のデータであり、
前記ＣＲＣ初期値は、全てが「１」である第２ビット長のデータであり、
前記抽出回路は、前記信号フレームのオーバヘッドの位置を示す信号フレームオーバヘッド位置情報、前記演算対象パケットのパケット長を示すパケットレングス情報及び前記信号フレームにおける前記演算対象パケットの先頭のビットの位置を示す先頭位置情報を使用して前記演算対象パケットをシフトするシフト量を決定するシフト量決定回路を有する、ＣＲＣ符号演算回路。
【請求項３】
前記抽出回路は、前記信号フレームオーバヘッド位置情報、前記パケットレングス情報及び前記先頭位置情報を使用して前記信号フレームから前記演算対象パケットを抽出するパケット抽出回路を更に有する、請求項１または２に記載のＣＲＣ符号演算回路。
【請求項４】
シリアル伝送された信号フレームを第１ビット長のパラレル信号に変換する通信回路と、
パラレル信号に変換された前記信号フレームが前記通信回路から入力され、
入力された前記信号フレームから、ＣＲＣ演算の対象となる演算対象パケットを抽出する抽出回路と、
前記演算対象パケットのビット長が前記第１ビット長の整数倍と一致しないときに、前記演算対象パケットの最終のビットが最下位ビットに位置するように前記演算対象パケットをシフトし、シフトされた前記演算対象パケットの先頭のビットの最上位ビット側に「０」を付加してビット長が前記第１ビット長の整数倍であるデータＡを生成するシフト回路と、
レジスタと、
前記レジスタが記憶する初期値「０」を元に、前記データＡをＣＲＣ演算してＣＲＣ符号を生成する演算回路と、を有し、
前記レジスタは、前記演算回路が前記ＣＲＣ符号を生成する前に前記初期値「０」を記憶し、前記演算回路が前記ＣＲＣ符号を生成した後に前記ＣＲＣ符号を記憶し、
前記抽出回路は、前記信号フレームのオーバヘッドの位置を示す信号フレームオーバヘッド位置情報、前記演算対象パケットのパケット長を示すパケットレングス情報及び前記信号フレームにおける前記演算対象パケットの先頭のビットの位置を示す先頭位置情報を使用して前記演算対象パケットをシフトするシフト量を決定するシフト量決定回路を有する、ＣＲＣ符号演算回路と、
を有する半導体装置。
【請求項５】
第１ビット長のパラレル信号として入力された信号フレームから、ＣＲＣ演算の対象となる演算対象パケットを抽出し、
前記演算対象パケットのビット長が前記第１ビット長の整数倍と一致しないときに、前記演算対象パケットの最終のビットが最下位ビットに位置するように前記演算対象パケットをシフトし、シフトされた前記演算対象パケットの先頭のビットの最上位ビット側に「０」を付加してビット長が前記第１ビット長の整数倍であるデータＡを生成し、
レジスタに記憶される初期値「０」を元に、前記データＡを演算してＣＲＣ符号を生成し、
前記信号フレームのオーバヘッドの位置を示す信号フレームオーバヘッド位置情報、前記演算対象パケットのパケット長を示すパケットレングス情報及び前記信号フレームにおける前記演算対象パケットの先頭のビットの位置を示す先頭位置情報を使用して前記演算対象パケットをシフトするシフト量を決定し、
前記ＣＲＣ符号を出力する、
ことを有するＣＲＣ符号演算方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＣＲＣ符号演算回路、及びその方法並びに半導体装置に関する。
【背景技術】
【０００２】
データ伝送システム（伝送装置）では、受信したデータに誤りがあるか否かを判定するための方式として巡回冗長符号（Ｃｙｃｌｉｃ Ｒｅｄｕｎｄａｎｃｙ Ｃｈｅｃｋ、ＣＲＣ）方式が知られている（例えば、特許文献１及び２を参照）。ＣＲＣ方式では、送信器は、データを演算して生成されたＣＲＣ符号を埋め込んだフレームチェックシーケンス（Frame Check Sequence、ＦＣＳ）を付加したフレーム信号を送信する。一方、受信器は、受信したフレーム信号から抽出したデータを演算してＣＲＣ符号を生成し、生成したＣＲＣ符号がＦＣＳに埋め込まれたＣＲＣ符号と一致すれば、送信されたデータに誤りがないと判定する。
【０００３】
ＣＲＣ符号を生成するための演算を高速に行うために、受信したフレーム信号をシリアル―パラレル変換し、シリアル―パラレル変換されたデータを演算することが知られている（例えば、特許文献３〜５を参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００１−３０８７２０号公報
【特許文献２】特開２００１−３５８５９４号公報
【特許文献３】特開２００９−５５４０７号公報
【特許文献４】特開２００３−４６３９３号公報
【特許文献５】特開２００２−３５９５６１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ビット長が異なるパケットを含むフレーム信号をシリアル―パラレル変換して演算する場合、それぞれのパケットのビット長に応じたＣＲＣ符号演算回路を使用してＣＲＣ符号を生成していた。しかしながら、ビット長に応じたＣＲＣ符号演算回路を使用してＣＲＣ符号を生成すると、シリアル―パラレル変換されたパケットのビット長が長い場合、配置されるＣＲＣ符号演算回路の数が増加するため、回路規模が大きくなるという課題があった。
【０００６】
一実施形態では、比較的小規模の回路規模で、ビット長が異なるパラレル信号であるパケットを演算してＣＲＣ符号を生成可能なＣＲＣ符号演算回路を提供することを目的とする。
【課題を解決するための手段】
【０００７】
１つの態様では、ＣＲＣ符号演算回路は、抽出回路と、シフト回路と、演算回路と、レジスタとを有する。抽出回路は、第１ビット長のパラレル信号として入力される信号フレームから、ＣＲＣ演算の対象となる演算対象パケットを抽出する。シフト回路は、演算対象パケットのビット長が第１ビット長の整数倍と一致しないときに、演算対象パケットの最終のビットが最下位ビットに位置するように演算対象パケットをシフトする。そして、シフト回路は、シフトされた演算対象パケットの先頭のビットの最上位ビット側に「０」を付加してビット長が第１ビット長の整数倍であるデータを生成する。演算回路は、レジスタに記憶される初期値「０」を元に、データＡを演算してＣＲＣ符号を生成する。レジスタは、演算回路がＣＲＣ符号を生成する前に初期値「０」を記憶し、演算回路がＣＲＣ符号を生成した後にＣＲＣ符号を記憶する。抽出回路は、信号フレームのオーバヘッドの位置を示す信号フレームオーバヘッド位置情報、演算対象パケットのパケット長を示すパケットレングス情報及び信号フレームにおける演算対象パケットの先頭のビットの位置を示す先頭位置情報を使用して演算対象パケットをシフトするシフト量を決定するシフト量決定回路を有する。
【発明の効果】
【０００８】
一実施形態では、比較的小規模の回路規模で、ビット長が異なるパラレル信号であるパケットを演算してＣＲＣ符号を生成可能なＣＲＣ符号演算回路を提供することができる。
【図面の簡単な説明】
【０００９】
【図１】（ａ）はＣＲＣ符号演算回路が搭載される半導体装置を含むシステムの一例を示す図であり、（ｂ）は（ａ）に示すシステムで伝送されるシリアル信号の一例を示す図であり、（ｃ）は（ａ）に示す半導体装置で変換されたパラレル信号の一例を示す図であり、（ｄ）は（ａ）に示すシステムで伝送されるパケットフォーマットの一例を示す図である。
【図２】（ａ）は図１（ａ）に示す第１ＣＲＣ回路の回路ブロック図であり、（ｂ）は（ａ）に示すＣＲＣ符号演算回路の内部ブロック図である。
【図３】図２（ｂ）に示すＣＲＣ符号演算回路で誤ったＣＲＣ符号を生成するパラレル信号の例を示す図である。
【図４（ａ）−（ｂ）】（ａ）はＣＲＣ符号演算回路に入力されるパラレル信号の一例を示す図であり、（ｂ）はＣＲＣ符号演算回路で変換されたパラレル信号の一例を示す図であり、（ｃ）は（ａ）に示すパラレル信号のＣＲＣ符号を生成可能なＣＲＣ符号演算回路の回路ブロック図である。
【図４（ｃ）】図４（ａ）はＣＲＣ符号演算回路に入力されるパラレル信号の一例を示す図であり、（ｂ）はＣＲＣ符号演算回路で変換されたパラレル信号の一例を示す図であり、（ｃ）は（ａ）に示すパラレル信号のＣＲＣ符号を生成可能なＣＲＣ符号演算回路の回路ブロック図である。
【図５】１バイト長〜３２バイト長のパラレル信号を処理可能なＣＲＣ符号演算回路の回路ブロック図である。
【図６】第１実施形態に係るＣＲＣ符号演算回路が搭載される半導体装置を含むシステムの一例を示す図である。
【図７】（ａ）は図６に示す第１ＣＲＣ回路の回路ブロック図であり、（ｂ）は（ａ）に示すＣＲＣ符号演算回路の回路ブロック図である。
【図８】図７（ｂ）に示すＣＲＣ符号演算回路のより詳細な回路ブロック図である。
【図９】図８に示す抽出回路及びシフト回路によるパケットの処理によるデータの動きの一例を示す図である。
【図１０】（ａ）は演算する演算対象パケットの一例を示す図であり、（ｂ）は演算する演算対象パケットの他の例を示す図であり、（ｃ）は（ｂ）に示す演算対象パケットをシフトした例を示す図である。
【図１１】図６に示すＣＲＣ符号演算回路がＣＲＣ符号を生成する処理を示すフローチャートである。
【図１２】第２実施形態に係るＣＲＣ符号演算回路の回路ブロック図である。
【図１３】図１２に示すＣＲＣ符号演算回路のより詳細な回路ブロック図である。
【図１４】図１２に示すシフト回路で生成されるデータの一例を示す図である。
【発明を実施するための形態】
【００１０】
以下図面を参照して、本発明に係るＣＲＣ符号演算回路、及びその方法並びに半導体装置について説明する。但し、本発明の技術的範囲はそれらの実施の形態に限定されない。
【００１１】
実施形態に係るＣＲＣ符号演算回路は、パラレル信号として入力されるパケットの最終のビットがＬＳＢ（least significant bit）に位置するようにパケットをシフトし且つパケットのＭＳＢ（most significant bit）側に「０」を付加した所定ビット長のシフトデータからＣＲＣ符号を生成する。このようにパケットをＬＳＢ側にシフトし且つパケットのＭＳＢ側に「０」を付加しシフトデータのビット数をパラレル信号の整数倍にすることで、小規模な回路でビット長が異なるパケットのＣＲＣ符号を生成可能にする。
【００１２】
実施形態に係るＣＲＣ符号演算回路、及びその方法並びに半導体装置について説明する前に、ＣＲＣ符号演算回路の一例について説明する。
【００１３】
（ＣＲＣ符号演算回路が搭載される半導体装置を含むシステムの一例）
図１（ａ）は、ＣＲＣ符号演算回路が搭載される半導体装置を含むシステムの一例を示す図である。図１（ｂ）は図１（ａ）に示すシステムで伝送されるシリアル信号の一例を示す図であり、図１（ｃ）は図１（ａ）に示す半導体装置で変換されたパラレル信号の一例を示す図である。図１（ｄ）は、図１（ａ）に示すシステムで伝送されるパケットフォーマットの一例を示す図である。
【００１４】
システム９００は、一例ではフィールドプログラマブルゲートアレイ（Field-Programmable Gate Array、ＦＰＧＡ）である半導体装置９０１と、第１デバイス９０２と、第２デバイス９０３とを有する。半導体装置９０１、第１デバイス９０２及び第２デバイス９０３のそれぞれは、１００Ｇｂｐｓでシリアル伝送可能な半導体装置である。半導体装置９０１は、第１通信回路９１１と、第２通信回路９１２と、第１ＣＲＣ回路９１３と、第２ＣＲＣ回路９１４と、ロジック回路９１５とを有する。半導体装置９０１は、例えば、高速大容量の主信号データを扱う伝送装置におけるＦＰＧＡである。
【００１５】
第１通信回路９１１は、第１デバイス９０２から１００Ｇｂｐｓでシリアル伝送された信号を、伝送速度が３９０Ｍｂｐｓである２５６ビットのパラレル信号に変換する。なお、ここでは、２５６ビットのパラレル信号に変換される例を説明するが、パラレル信号のビット長は２５６ビット以外であってもよい。例えば、伝送速度が１９５Ｍｂｐｓである５１２ビットのパラレル信号に変換されてもよい。第１ＣＲＣ回路９１３は、パラレル信号に変換された信号を演算してＣＲＣ符号を生成する。ロジック回路９１５は、第１ＣＲＣ回路９１３でＣＲＣ符号が生成されたパラレル信号に所定の処理を施し、第２ＣＲＣ回路９１４に出力する。第２ＣＲＣ回路９１４は、ロジック回路９１５で所定の処理が施されたデータにＦＣＳを埋め込み、第２通信回路９１２に出力する。第２通信回路９１２は、ＦＣＳが埋め込まれたパラレル信号を１００Ｇｂｐｓのシリアル信号に変換して第２デバイス９０３に伝送する。一方、第２デバイス９０３から伝送された信号は、第２通信回路９１２でパラレル信号に変換される。次いで、パラレル信号に変換された信号は、第２ＣＲＣ回路９１４、ロジック回路９１５及び第１ＣＲＣ回路９１３で処理された後に、第１通信回路９１１でシリアル信号に変換されて、第１デバイス９０２に伝送される。
【００１６】
第１通信回路９１１及び第２通信回路９１２のそれぞれは、図１（ｂ）に示すシリアル信号である主信号フレームを受信すると、図１（ｃ）に示す２５６ビットのビット長を有するパラレル信号に変換する。主信号フレームは、オーバヘッドと、オーバヘッドに次いで受信される５１２ビットのパケットＡと、パケットＡに続いて受信される２５６ビットのパケットＢとを有する。パケットＡのビット長は変換後のパラレル信号のビット長の２倍なので、パラレル信号に変換されるとき、第２パラレル信号Ｐ２及び第３パラレル信号Ｐ３の２つパラレル信号に分割される。一方、パケットＢのビット長は変換後のパラレル信号のビット長と等しいので、第４パラレル信号Ｐ４に変換される。
【００１７】
図１（ｄ）に示すように、イーサネット（登録商標）のパケットは、プリアンブルと、宛先アドレスと、送信元アドレスと、長さ／タイプと、データと、ＦＣＳとを有する。第１ＣＲＣ回路９１３及び第２ＣＲＣ回路９１４は、図１（ｄ）に示すパケットの中で、宛先アドレス、送信元アドレス、長さ／タイプ及びデータを含む演算対象パケットを演算してＣＲＣ符号を生成する。生成されたＣＲＣ符号はＦＣＳに埋め込まれる。
【００１８】
図２（ａ）は第１ＣＲＣ回路９１３の回路ブロック図であり、図２（ｂ）は図２（ａ）に示すＣＲＣ符号演算回路の内部ブロック図である。
【００１９】
第１ＣＲＣ回路９１３は、ＣＲＣ送信部９２０と、ＣＲＣ受信部９２１とを有する。ＣＲＣ送信部９２０は、ＣＲＣ符号演算回路９２２と、ＦＣＳ埋め込み回路９２３とを有する。ＣＲＣ符号演算回路９２２は、ＣＲＣ符号を生成し、ＦＣＳ埋め込み回路９２３は、ＣＲＣ符号演算回路９２２が生成したＣＲＣ符号をパケットのＦＣＳに埋め込み、ＣＲＣ符号がＦＣＳに埋め込まれたパケットを第１通信回路９１１に出力する。ＣＲＣ受信部９２１は、ＣＲＣ符号演算回路９２２と同一の構成を有するＣＲＣ符号演算回路９２４と、ＦＣＳチェック回路９２５とを有する。ＣＲＣ符号演算回路９２４は、第１通信回路９１１から入力されるパケットを演算して、ＣＲＣ符号を生成して、ＦＣＳチェック回路に出力する。ＦＣＳチェック回路９２５は、第１通信回路９１１から入力されるパケットのＦＣＳに埋め込まれたＣＲＣ符号と、ＣＲＣ符号演算回路９２４が生成したＣＲＣ符号とを比較して、パケットの正常性を確認する。
【００２０】
ＣＲＣ符号演算回路９２２は、ＥｏＲ回路９２６と、レジスタ９２７とを有する。ＥｏＲ回路９２６は、レジスタに記憶される３２ビットの初期値と、入力される２５６ビットのパラレル信号とを使用して、式（１）に示すＣＲＣ３２生成多項式に基づく演算を実行する。
x32 +x26 +x23 +x22 +x16 +x12 +x11 +x10 +x8 +x7 +x5 +x4 +x2 +x +1      （１）
【００２１】
ＣＲＣ符号演算回路９２２は、パケットＡ及びＢのようにパケット長がパラレル信号のビット長の整数倍であり且つパケットの先頭のビットがパラレル信号の最上位ビット（most significant bit、ＭＳＢ）と一致する場合にはＣＲＣ符号を生成可能である。しかしながら、イーサネット等でビット長が可変のパケットが伝送される場合及びパケットの先頭のビットがパラレル信号のＭＳＢと一致しない場合等で、ＣＲＣ符号演算回路９２２は、誤ったＣＲＣ符号を生成する可能性がある。
【００２２】
図３は、ＣＲＣ符号演算回路９２２で誤ったＣＲＣ符号を生成するパラレル信号の例を示す図である。
【００２３】
パケットＣは、オーバヘッドにより２つの部分に分割されている。パケットＣの先頭のビット側は２５６ビットであり第１パラレル信号Ｐ１に含まれ、パケットＣの最終のビット側は、第２パラレル信号Ｐ２に含まれる。パケットＣは、先頭のビット側と最終のビット側との間にオーバヘッドが含まれているため、ＣＲＣ符号演算回路９２２で誤ったＣＲＣ符号が生成される可能性がある。
【００２４】
パケットＤは、先頭のビットが第３パラレル信号Ｐ３の０ビットに位置するが、ビット長が２５６ビットよりも短いため最終のビットが第３パラレル信号Ｐ３の最下位ビット（least significant bit、ＬＳＢ）に位置しない。パケットＤは、最終のビットが第３パラレル信号Ｐ３のＬＳＢと一致しないため、ＣＲＣ符号演算回路９２２で誤ったＣＲＣ符号が生成される可能性がある。
【００２５】
パケットＥは、先頭のビットが第４パラレル信号Ｐ４のＭＳＢに位置しない。また、パケットＥは、最終のビットが第５パラレル信号Ｐ５のＬＳＢに位置しない。第４パラレル信号Ｐ４に配置されるパケットＥの先頭側は、先頭のビットが第４パラレル信号Ｐ４のＭＳＢに位置しないため、ＣＲＣ符号演算回路９２２で誤ったＣＲＣ符号が生成される可能性がある。また、第３パラレル信号Ｐ５に配置されるパケットＥの最終側は、最終のビットが第５パラレル信号Ｐ５のＭＳＢに位置しないため、ＣＲＣ符号演算回路９２２で誤ったＣＲＣ符号が生成される可能性がある。
【００２６】
図４（ａ）はＣＲＣ符号演算回路に入力されるパラレル信号の一例を示す図であり、図４（ｂ）はＣＲＣ符号演算回路で変換されたパラレル信号の一例を示す図である。図４（ｃ）は、図４（ａ）に示すパラレル信号のＣＲＣ符号を生成可能なＣＲＣ符号演算回路の回路ブロック図である。
【００２７】
パケットＡは、ビット長が５１２ビットであり、先頭のビットが第１パラレル信号Ｐ１のＭＳＢに位置し、最終のビットが第２パラレル信号Ｐ２のＬＳＢに位置する。パケットＢは、ビット長が２５６ビットであり、先頭のビットが第４パラレル信号Ｐ４のＭＳＢに位置し、最終のビットが第４パラレル信号Ｐ４のＬＳＢに位置する。パケットＣは、オーバヘッドにより２つの部分に分割され、先頭のビット側のビット長は２５６ビットであり第６パラレル信号Ｐ６に含まれる。パケットＣの最終のビット側は、第７パラレル信号Ｐ７に含まれる。パケットＤは、先頭のビットが第８パラレル信号Ｐ８のＭＳＢに位置し、最終のビットが第８パラレル信号Ｐ８の中位に位置する。パケットＥは、先頭のビットが第９パラレル信号Ｐ９の中位に位置し、最終のビットが第１０パラレル信号Ｐ１０の中位に位置する。
【００２８】
ＣＲＣ符号演算回路９３０は、ＣＲＣ送信部９３１と、ＣＲＣ受信部９３２とを有する。ＣＲＣ送信部９３１は、第１ＣＲＣ符号演算回路９３３１〜第４ＣＲＣ符号演算回路９３３４と、ＦＣＳ埋め込み回路９３４とを有する。第１ＣＲＣ符号演算回路９３３１はパケットＡ及びＢのＣＲＣ符号を生成し、第２ＣＲＣ符号演算回路９３３２はパケットＣのＣＲＣ符号を生成する。第２ＣＲＣ符号演算回路９３３２は、パケットＣのＣＲＣ符号を生成するとき、第７パラレル信号Ｐ７に含まれるパケットＣを０ビットの方向、すなわちＭＳＢ方向にシフトする。第３ＣＲＣ符号演算回路９３３３はパケットＤのＣＲＣ符号を生成し、第４ＣＲＣ符号演算回路９３３４はパケットＥのＣＲＣ符号を生成する。第４ＣＲＣ符号演算回路９３３４は、パケットＥのＣＲＣ符号を生成するとき、第９パラレル信号に含まれるパケットＥをＭＳＢ方向にシフトし、第１０パラレル信号Ｐ１０に含まれるパケットＥのビットを第９パラレル信号Ｐ９にシフトする。ＦＣＳ埋め込み回路９３４は、第１ＣＲＣ符号演算回路９３３１〜第４ＣＲＣ符号演算回路９３３４のそれぞれが生成したＣＲＣ符号をパケットのＦＣＳに埋め込み、ＣＲＣ符号がＦＣＳに埋め込まれたパケットを出力する。ＣＲＣ受信部９２１は、第１ＣＲＣ符号演算回路９３３１〜第４ＣＲＣ符号演算回路９３３４のそれぞれと同一の構成を有する第１ＣＲＣ符号演算回路９３５１〜第４ＣＲＣ符号演算回路９３５４と、ＦＣＳチェック回路９３６とを有する。第１ＣＲＣ符号演算回路９３５１は、第１通信回路９１１から入力されるパケットＡ及びＢを演算してＣＲＣ符号を生成し、ＦＣＳチェック回路９３６に出力する。第２ＣＲＣ符号演算回路９３５２〜第４ＣＲＣ符号演算回路９３５４のそれぞれは、第１通信回路９１１から入力されるパケットＣ〜Ｅのそれぞれを演算してＣＲＣ符号を生成し、ＦＣＳチェック回路９３６に出力する。ＦＣＳチェック回路９３６は、入力されるパケットのＦＣＳに埋め込まれたＣＲＣ符号と、第１ＣＲＣ符号演算回路９３５１〜第４ＣＲＣ符号演算回路９３５４のそれぞれが生成したＣＲＣ符号とを比較する。
【００２９】
ＣＲＣ符号演算回路９３０は、図４（ａ）に示すパケットＡ〜Ｅの何れのパケットも演算することができるが、パケットＡ〜Ｅのそれぞれに対応するＣＲＣ符号演算回路を用意するので、回路規模が大きくなるという問題がある。
【００３０】
さらに、イーサネット等でビット長が可変のパケットが伝送される場合、例えばバイト単位でビット長が変化する可能性がある。最大で２５６ビット、すなわち３２バイトのパラレル信号が入力される場合、ＣＲＣ符号演算回路９３０は、１バイト長〜３２バイト長のパラレル信号をそれぞれが処理する３２個のＥｏＲ演算回路が配置されることになる。
【００３１】
図５は、１バイト長〜３２バイト長のパラレル信号を処理可能なＣＲＣ符号演算回路の回路ブロック図である。
【００３２】
ＣＲＣ符号演算回路９４０は、抽出回路９４１と、第１ＥｏＲ回路９４２−１〜第３２ＥｏＲ回路９４２−３２と、第１レジスタ９４３−１〜第３２レジスタ３２とを有する。抽出回路９４１は、パラレル信号に変換されたフレーム信号からパケットに含まれる一塊の演算対象パケットを抽出する。一塊の演算対象パケットのビット長は、２５６ビットよりも長くてもよく、２５６ビットよりも短くてもよい。また、抽出回路９４１が抽出したデータのビット長をカウントし、抽出したデータのビット長に応じて第１ＥｏＲ回路９４２−１〜第３２ＥｏＲ回路９４２−３２に抽出した演算対象パケットを出力する。第１レジスタ９４３−１〜第３２レジスタ９４３−３２のそれぞれは、抽出回路９４１から入力された演算対象パケットに対して式（１）に示すＣＲＣ３２生成多項式に基づく演算を実行する。抽出した演算対象パケットのビット長が３２バイトよりも長い場合、ＣＲＣ符号演算回路９４０は、３２バイト毎に第１ＥｏＲ回路４３２−１で演算を実行する。例えば、演算対象パケットのビット長が３５６ビットのとき、ＭＳＢから２５６ビットが第１ＥｏＲ回路４３２−１で演算されて、残りの１００ビットが他のＥｏＲ回路で演算される。ＣＲＣ符号演算回路９４０は、３２バイトより短い残りの演算対象パケットを残りの演算対象パケットのビット長に応じて第２レジスタ９４３−２〜第３２レジスタ９４３−３２の何れかで演算を実行する。
【００３３】
ＣＲＣ符号演算回路９４０は、１バイト長〜３２バイト長のパラレル信号のＣＲＣ符号を生成することができるが、ＥｏＲ回路及びレジスタを３２対配置するため、回路規模が大きくなるという課題がある。
【００３４】
上述の回路では、主信号フレームと非同期のパケット、主信号フレームのオーバヘッドを含むパケット及び主信号フレームのＬＳＢとに先頭のビットが一致しないパケット等からＣＲＣ符号を生成する演算回路の規模が大きくなるという課題がある。
【００３５】
（第１実施形態に係る半導体装置及びＣＲＣ符号演算回路の構成及び機能）
図６は、第１実施形態に係るＣＲＣ符号演算回路が搭載される半導体装置を含むシステムの一例を示す図である。
【００３６】
システム１００は、半導体装置１０１と、第１デバイス１０２と、第２デバイス１０３とを有する。半導体装置１０１、第１デバイス１０２及び第２デバイス１０３のそれぞれは、１００Ｇｂｐｓでシリアル伝送可能な半導体装置である。半導体装置１０１は、第１通信回路１１１と、第２通信回路１１２と、第１ＣＲＣ回路１１３と、第２ＣＲＣ回路１１４と、ロジック回路１１５とを有する。第１通信回路１１１、第２通信回路１１２及びロジック回路１１５は、第１通信回路９１１、第２通信回路９１２及びロジック回路９１５と同一の構成及び機能を有するので、ここでは詳細な説明は省略する。第２ＣＲＣ回路１１４は、第１ＣＲＣ回路１１３と同一の構成及び機能を有する。
【００３７】
図７（ａ）は第１ＣＲＣ回路１１３の回路ブロック図であり、（ｂ）は（ａ）に示すＣＲＣ符号演算回路の回路ブロック図である。
【００３８】
第１ＣＲＣ回路１１３は、ＣＲＣ送信部１２０と、ＣＲＣ受信部１２１とを有する。ＣＲＣ送信部１２０は、ＣＲＣ符号演算回路１と、ＦＣＳ埋め込み回路１２３とを有する。ＣＲＣ受信部９２１は、ＣＲＣ符号演算回路１と、ＦＣＳチェック回路１２５とを有する。ＦＣＳ埋め込み回路１２３及びＦＣＳチェック回路１２５は、ＦＣＳ埋め込み回路９２３及びＦＣＳチェック回路９２５と同一の構成及び機能を有するので、ここでは詳細な説明は省略する。
【００３９】
ＣＲＣ符号演算回路１は、抽出回路１０と、シフト回路２０と、ＥｏＲ回路３０と、レジスタ４０とを有する。抽出回路１０は、所定ビット長（例えば２５６ビット）のパラレル信号として入力される信号フレームから、演算の対象となる演算対象パケットを抽出する。シフト回路２０は、演算対象パケットのビット長が２５６ビットの整数倍と一致しないときに、演算対象パケットの最終のビットが最下位ビットに位置するように演算対象パケットをシフトする。次いで、シフト回路２０は、シフトされた演算対象パケットの先頭のビットの最上位ビット側に「０」を付加してビット長が２５６ビットの整数倍であるシフトデータを生成する。ＥｏＲ回路３０は、レジスタ４０に記憶されている初期値「０」を元に、シフトデータをＣＲＣ符号演算して第２ビット長（例えば３２ビット）のＣＲＣ符号を生成する。レジスタ４０は、演算回路がＣＲＣ符号を生成する前に初期値「０」を記憶し、演算回路がＣＲＣ符号を生成した後にＣＲＣ符号を記憶する。
【００４０】
図８は、ＣＲＣ符号演算回路１のより詳細な回路ブロック図である。
【００４１】
抽出回路１０は、オーバヘッド位置検出回路１１と、パケットプリアンブル検出回路１２と、パケットレングス値抽出回路１３と、シフト段数演算回路１４と、パケット抽出回路１５とを有する。
【００４２】
オーバヘッド位置検出回路１１は、２５６ビットのパラレル信号である主信号フレームの制御情報を格納しているオーバヘッド（Overhead）の位置を検出するためのカウンタを有する。オーバヘッドは、主信号フレームの先頭から所定のビット数離れた位置に周期的に現れるので、入力される主信号フレームのビット数をカウンタでカウントすることにより、オーバヘッド位置検出回路１１は、オーバヘッドの位置を検出する。オーバヘッド位置検出回路１１は、検出したオーバヘッドの位置を示す信号フレームオーバヘッド位置情報をシフト段数演算回路１４及びパケット抽出回路１５に出力する。
【００４３】
パケットプリアンブル検出回路１２は、主信号フレームからパケットの先頭を示す「1010101010b」のＳＦＤを含むプリアンブルを検出する。プリアンブルの次のバイト以降にパケットが存在するので、パケットプリアンブル検出回路１２は、プリアンブルの次のビットを示す情報をパケット先頭情報として生成する。パケットプリアンブル検出回路１２は、生成したパケット先頭情報をパケットレングス値抽出回路１３、シフト段数演算回路１４及びパケット抽出回路１５に出力する。また、パケットプリアンブル検出回路１２は、全てのフリップフロップを「０」にリセットすることを指示するＦＦ初期値指示をシフト回路２０及びレジスタ４０に出力する。なお、通信回路等のＣＲＣ符号演算回路１の前の回路でパケットのプリアンブルの位置を検出できる場合もある。ＣＲＣ符号演算回路１の前の回路でパケットのプリアンブルの位置を検出できる場合は、パケットプリアンブル検出回路１２を省略してもよい。
【００４４】
パケットレングス値抽出回路１３は、パケット内の所定の位置に配置されるパケットの長さを示すパケットレングス値を抽出する。パケットレングス値抽出回路１３は、抽出したパケットレングス値をシフト段数演算回路１４及びパケット抽出回路１５に出力する。
【００４５】
シフト段数演算回路１４は、信号フレームオーバヘッド位置情報、パケット先頭情報及びパケットレングス値からパケットをＬＳＢ側にシフトする段数を演算する。主信号フレームは２５６ビットのパラレル信号なので、シフト量の最大値は３２バイトになる。パケットレングス値の下位５ビットが示すバイト数から信号フレームオーバヘッド位置情報が示すバイト数を減算したバイト数であるシフト段数情報をシフト回路２０に出力する。
【００４６】
パケット抽出回路１５は、２５６ビットの並列接続された複数段のフリップフロップを有する。信号フレームオーバヘッド位置情報、パケット先頭情報及びパケットレングス値に基づいて、パケット抽出回路１５は、主信号フレームに含まれるパケットを抽出し、フリップフロップに順次ラッチする。パケット抽出回路１５は、ラッチしたパケットを２５６ビットのパラレル信号であるパケットとしてシフト回路２０に出力する。
【００４７】
シフト回路２０は、２５６ビットの並列接続された複数段のフリップフロップを有するＬＳＢシフト整列回路２１を有する。ＬＳＢシフト整列回路２１は、パケットプリアンブル検出回路１２からＦＦ初期値指示が入力されると、全てのフリップフロップを「０」にリセットする。ＬＳＢシフト整列回路２１は、パケット抽出回路１５から入力されたパケットを順次ラッチする。ＬＳＢシフト整列回路２１は、ラッチしたパケットをシフト段数情報に基づいてパケットのＬＳＢが、フリップフロップのＬＳＢに一致するようにパケットをシフトして整列させてシフトデータを生成する。
【００４８】
図９は、抽出回路１０及びシフト回路２０によるパケットの処理によるデータの動きの一例を示す図である。図９において、矢印９０で示される信号列は第１通信回路１１１で２５６ビットのパラレル信号に変換された主信号フレームを示し、矢印９１で示される信号列は矢印９０で示される信号列の矢印Ａで囲まれた部分の拡大した信号列を示す。矢印９２で示される信号列はパケット抽出回路１５が矢印９１で示される信号列から抽出した信号列を示し、矢印９３で示される信号列はシフト回路２０が矢印９１で示される信号列をシフトしたシフトデータを示す。
【００４９】
パケット抽出回路１５は、矢印９１で示される信号列で形成されるパケットが入力される。矢印９１で示される信号列は、プリアンブルpreambleと、宛先アドレスＤＡと、送信元アドレスＳＡと、長さ／タイプＬｅｎｇと、データdataと、ＦＣＳとを有する。矢印９１で示される信号列では、データdataは、第２パラレル信号Ｐ２から第５パラレル信号Ｐ５に亘って配置される。第３パラレル信号Ｐ３と第４パラレル信号Ｐ４との間にフレームの区切りがあり、第４パラレル信号Ｐ４のＭＳＢから所定のビット長に亘ってオーバヘッドoverheadが配置される。第４パラレル信号Ｐ４にオーバヘッドoverheadが配置されることにより、データdataは、分離される。
【００５０】
パケット抽出回路１５は、パケットプリアンブル検出回路１２から入力されるパケット先頭情報からプリアンブルPreambleの後端に続いて配置される演算の対象である一塊の演算対象パケットの先頭のビットの位置を決定する。パケット抽出回路１５は、パケットプリアンブル検出回路１２から入力されるパケット先頭情報及びパケットレングス値抽出回路１３から入力されるパケットレングス値から、演算対象パケットの最終ビットの位置を決定する。このとき、パケット抽出回路１５は、演算対象パケットの間に信号フレームのオーバヘッドoverheadが位置する場合は、オーバヘッドoverheadのビット長を勘案して演算対象パケットの最終ビットの位置を決定する。パケット抽出回路１５は、オーバヘッド位置検出回路１１から入力される信号フレームオーバヘッド位置情報から主信号フレームのオーバヘッドoverheadの位置を決定する。矢印９１で示される信号列では、オーバヘッドoverheadは、演算対象パケットのデータdataの間に位置するので、パケット抽出回路１５は、オーバヘッドoverheadのビット長を勘案して演算対象パケットの最終ビットの位置を決定する。パケット抽出回路１５は、パケット先頭情報、パケットレングス値及び信号フレームオーバヘッド位置情報を使用して、矢印９１で示される信号列から演算対象パケットを抽出し、矢印９２で示される信号列を生成する。矢印９２で示される信号列に含まれる演算対象パケットは、先頭のビットが第２パラレル信号Ｐ２のＭＳＢに位置する。矢印９２で示される信号列には、演算対象パケットでないプリアンブルPreamble及びオーバヘッドoverheadは含まれない。
【００５１】
シフト回路２０は、パケット抽出回路１５が抽出した演算対象パケットを、シフト段数演算回路１４から入力されるシフト段数情報を使用して、演算対象パケットの最終ビットがパラレル信号のＬＳＢに一致するようにシフトした演算対象パケットを生成する。シフト回路２０は、シフトした演算対象パケットを、「０」にリセットされたフリップフロップに記憶することにより、矢印９３で示される信号列であるシフトデータを生成する。矢印９３で示される信号列であるシフトデータに含まれる演算対象パケットは、最終ビットが第５パラレル信号のＬＳＢに位置する。また演算対象パケットの先頭に位置する宛先アドレスＤＡは第２パラレル信号のＬＳＢ側に位置する。シフト回路２０は、演算対象パケットの先頭のビットが位置する第２パラレル信号Ｐ２のＭＳＢ側を全て「０」にする。
【００５２】
シフト回路２０は、演算対象パケットのビット長が２５６ビットの整数倍と一致しないときに、演算対象パケットの最終ビットが最下位ビットに一致するように演算対象パケットをシフトする。また、シフト回路２０は、シフトされた演算対象パケットの最上位ビットの上位側に「０」を付加してビット長が２５６ビットの整数倍であるシフトデータを生成する。
【００５３】
ＥｏＲ回路３０は、シフト回路２０から入力される２５６ビットのパラレル信号を、式（１）に示すＣＲＣ３２生成多項式に基づいて演算してＣＲＣ符号を生成するパラレルＣＲＣ３２演算ＥｏＲ回路を有する。例えば、矢印９３で示されるシフトデータを演算してＣＲＣ符号を生成する。ＣＲＣ符号を生成する演算は、データを生成多項式で除算した剰余がＣＲＣ符号となる計算式で表すことができる。すなわち、データをＦ（ｘ）、生成多項式をＧ（ｘ）、割り算した商をＱ（ｘ）、剰余であるＣＲＣ符号をＲ（ｘ）とすると、
Ｆ（ｘ）／Ｇ（ｘ）  ＝  Ｑ（ｘ）  ＋  Ｒ（ｘ）      （２）
で示される。
【００５４】
図１０（ａ）は演算する演算対象パケットの一例を示す図であり、図１０（ｂ）は演算する演算対象パケットの他の例を示す図であり、図１０（ｃ）は図１０（ｂ）に示す演算対象パケットをシフトした例を示す図である。
【００５５】
ＥｏＲ回路３０は、図１０（ａ）に示すようにビット長が２５６ビットであるパケットを演算する場合は、ＥｏＲ回路３０の演算範囲Ａと演算対象パケットａの範囲とが一致しており、パケットをシフトすることなくＣＲＣを生成することが可能である。しかしながら、図１０（ｂ）に示すように２５６ビットよりもパケットを演算する場合は、ＥｏＲ回路３０がパケットをシフトしないと、誤ったＣＲＣ符号が生成されるおそれがある。
【００５６】
図１０（ｂ）に示す演算対象パケットｂは、最終ビットがＣＲＣ符号演算回路の演算範囲のＬＳＢに一致しておらず、ｎビットシフトしている。また、図１０（ｂ）に示す演算対象パケットｂの先頭のビットのＭＳＢ側には、ｍビットのデータｄが位置する。このため、図１０（ｂ）に示す例では、ＥｏＲ回路３０の演算範囲Ａは、
Ａ  ＝  ｂ  ×  ２n  ＋  ｄ      （３）
となり、ＥｏＲ回路３０は、演算対象パケットｂと相違するデータを演算して、演算対象パケットｂを演算したときと相違するＣＲＣ符号を生成する。式（３）を変形して得られる式（４）の処理を実施することにより、ＥｏＲ回路３０は、図１０（ｂ）に示す例に示される演算対象パケットｂから誤りなくＣＲＣ符号を生成できる。
ｂ  ＝  （Ａ  −  ｄ）／２n      （４）
ＥｏＲ回路３０は、演算対象パケットｂを２nで除算し且つ演算対象パケットｂの先頭のビットのＭＳＢ側に位置するｍビットのデータｄをＥｏＲ回路３０の演算範囲Ａから減算したパケットを演算して、誤りなくＣＲＣ符号を生成できる。言い換えると、ＥｏＲ回路３０は、演算対象パケットｂをＬＳＢ側にｎビットシフトし且つシフトされた演算対象パケットｂの先頭のビットのＭＳＢ側を「０」にした２５６ビットのシフトデータを演算してＣＲＣ符号を生成する。これにより、図１０（ｃ）に示すように、演算対象パケットｂの最終のビットをＥｏＲ回路３０の演算範囲ＡのＬＳＢに位置させ且つ演算対象パケットｂの先頭のビットのＭＳＢ側を「０」にしたものをＥｏＲ回路３０の演算範囲Ａにする。ＥｏＲ回路３０は、図１０（ｃ）に示すように演算範囲Ａを規定することにより、演算対象パケットｂを誤りなくＣＲＣ符号を生成することが可能になる。
【００５７】
なお、図１０（ａ）及び１０（ｂ）で示す演算対象パケットのビット長は一例であり、一塊の演算対象パケットのビット長は、２５６ビットよりも長くてもよく、２５６ビットよりも短くてもよい。演算対象パケットのビット長が２５６ビットよりも長いとき、演算対象パケットのビット長が２５６ビットよりも長い場合は、図９に示すように、演算対象パケットのビット長が２５６ビットよりも短い場合と同様に、演算対象パケットの最終ビットがパラレル信号のＬＳＢに一致するようにシフトされる。
【００５８】
レジスタ４０は、３２ビットの並列接続されたフリップフロップを有するパラレルＣＲＣ３２演算結果記憶回路４１を有する。パラレルＣＲＣ３２演算結果記憶回路４１は、パケットプリアンブル検出回路１２からパケット先頭情報が入力されると、全てのフリップフロップを「０」にリセットする。パラレルＣＲＣ３２演算結果記憶回路４１は、演算により生成されたＣＲＣ符号がＥｏＲ回路３０から入力されると、入力されたＣＲＣ符号を３２ビットの並列接続されたフリップフロップに記憶する。
【００５９】
図１１はＣＲＣ符号演算回路１がＣＲＣ符号を生成する処理を示すフローチャートである。
【００６０】
まず、シリアル―パラレル変換された主信号フレームがＣＲＣ符号演算回路１に入力される（Ｓ１０１）。オーバヘッド位置検出回路１１は、ＣＲＣ符号を演算中でないと判断する（Ｓ１０２）と、主信号フレームのオーバヘッドの位置を検出し、信号フレームオーバヘッド位置情報を生成する（Ｓ１０３）。次いで、パケットプリアンブル検出回路１２はプリアンブルの位置を検出し（Ｓ１０４）パケット先頭情報を生成し、パケットレングス値抽出回路１３はパケットレングス値を抽出する（Ｓ１０５）。シフト段数演算回路１４は、信号フレームオーバヘッド位置情報、パケット先頭情報及びパケットレングス値からパケットをＬＳＢ側にシフトする段数を演算する（Ｓ１０６）。パケット抽出回路１５は、信号フレームオーバヘッド位置情報、パケット先頭情報及びパケットレングス値に基づいて、主信号フレームに含まれるパケットを抽出する（Ｓ１０７）。オーバヘッド位置検出回路１１がＣＲＣ符号を演算中であると判断する（Ｓ１０２）と、Ｓ１０３〜Ｓ１０６の処理は省略される。
【００６１】
シフト回路２０は、抽出回路１０から入力されたパケットの先頭のビットが入力されたと判定する（Ｓ１０８）と、シフト段数を更新する（Ｓ１０９）。次いで、シフト回路２０は、全てのフリップフロップを「０」にリセットした後に、シフト段数情報に基づいてパケットのＬＳＢがフリップフロップのＬＳＢに一致するようにパケットをシフトして整列させてシフトデータを生成する（Ｓ１１０）。シフト回路２０は、シフトしたパケットをＭＳＢ側に「０」が付加されたシフトデータを出力する。シフト回路２０は、抽出回路１０から入力されたパケットの先頭のビットが入力されていないと判定する（Ｓ１０８）と、記憶されたパケットをＭＳＢ側から２５６ビットずつ出力する。
【００６２】
ＥｏＲ回路３０は、ＣＲＣ３２生成多項式に基づいて演算してＣＲＣ符号を生成する（Ｓ１１２）。
【００６３】
レジスタ４０は、パケットの先頭のビットを含むデータが演算されると判定する（Ｓ１１３）と、３２ビットの「０」を初期値として設定する（Ｓ１１４）。以降、レジスタはパケットの最終のビットが演算されたと判定する（Ｓ１１６）まで、ＥｏＲ回路３０の演算結果を順次記憶する（Ｓ１１５）。レジスタ４０は、レジスタはパケットの最終のビットが演算されたと判定する（Ｓ１１６）と、記憶された３２ビットのデータをＣＲＣ符号として出力する（Ｓ１１７）。
（第１実施形態に係るＣＲＣ符号演算回路の作用効果）
第１実施形態に係るＣＲＣ符号演算回路は、ＦＰＧＡ及び特定用途向けＩＣ（application specific integrated circuit、ＡＳＩＣ）等の半導体装置において、可変長のパケットを主信号フレームでカプセル化している場合等で使用される。第１実施形態に係るＣＲＣ符号演算回路は、演算対象パケットからＣＲＣ符号を生成する演算のためのＣＲＣ符号演算回路の回路規模を小さくすることを可能とする。
【００６４】
表１は、第１実施形態に係るＣＲＣ符号演算回路と、従来のＣＲＣ符号演算回路との回路規模を比較した表である。
【００６５】
【表１】
0006648412.tif 000002
【００６６】
従来ＣＲＣ符号演算回路では、1Gbps伝送 (62.5MHz x16パラレル)や10Gbps伝送 (156.25MHz x64パラレル、312.5MHz x32パラレル)など、ビット幅が大きくなることはなかった。このため、ＣＲＣ符号演算回路９４０のように、可変のパケットのビット長に合せてＥｏＲ回路を配置した場合でも回路規模の増加は大きくはなかった。しかしながら、近年の１００Ｇｂｐｓ伝送など高速大容量化したパケットからＣＲＣ符号を生成する場合、ビット幅も５１２ビット、又は２５６ビット等と大きくなる。このため、ＣＲＣ符号演算回路９４０のように、可変のパケットのビット長に合せてＥｏＲ回路を配置した場合に、回路規模が増大する。一方、第１実施形態に係るＣＲＣ符号演算回路では、１つのＥｏＲ回路でＣＲＣ符号を生成できるため、回路規模を小さくすることができる。
【００６７】
第１実施形態に係るＣＲＣ符号演算回路は、シフト回路が演算対象パケットをＬＳＢ側にシフトした後に、ＥｏＲ回路がシフトされた演算対象パケットからＣＲＣ符号を生成している。このため、第１実施形態に係るＣＲＣ符号演算回路は、図９に示すパケットのように１つのパケットが複数のパラレル信号に分割させる場合でも、１度のパケットシフトにより、誤りのないＣＲＣ符号が生成可能である。
【００６８】
（第２実施形態に係る半導体装置及びＣＲＣ符号演算回路の構成及び機能）
図１２は、第１実施形態に係るＣＲＣ符号演算回路１の代わりに半導体装置１０１に搭載可能な第２実施形態に係るＣＲＣ符号演算回路の回路ブロック図である。
【００６９】
ＣＲＣ符号演算回路２は、シフト回路２０の代わりにシフト回路５０が配置され且つレジスタ４０の代わりにレジスタ６０が配置されることがＣＲＣ符号演算回路１と相違する。また、ＣＲＣ符号演算回路２は、初期値設定回路７０が配置されることが、ＣＲＣ符号演算回路１と更に相違する。シフト回路５０、レジスタ６０及び初期値設定回路７０以外のＣＲＣ符号演算回路２の構成は、ＣＲＣ符号演算回路１と同様なので、ここでは詳細な説明は省略する。
【００７０】
図１３は、ＣＲＣ符号演算回路２のより詳細な回路ブロック図である。
【００７１】
シフト回路５０は、２５６ビットの並列接続された複数段のフリップフロップを有するＬＳＢシフト整列回路５１を有する。ＬＳＢシフト整列回路５１は、パケットプリアンブル検出回路１２からＦＦ初期値指示が入力されると、初期値設定回路７０から入力されるＦＦ初期値パターンに応じたシフト回路初期値をフリップフロップに設定する。ＬＳＢシフト整列回路５１は、ＦＦ初期値指示が入力されたとき以外の動作は、シフト回路２０と同様なので、ここでは詳細な説明は省略する。
【００７２】
レジスタ６０は、３２ビットの並列接続されたフリップフロップを有するパラレルＣＲＣ３２演算結果記憶回路６１を有する。パラレルＣＲＣ３２演算結果記憶回路６１は、パケットプリアンブル検出回路１２からＦＦ初期値指示が入力されると、初期値設定回路７０から入力されるＦＦ初期値パターンに応じたレジスタ初期値をフリップフロップに設定する。パラレルＣＲＣ３２演算結果記憶回路６１は、ＦＦ初期値指示が入力されたとき以外の動作は、パラレルＣＲＣ３２演算結果記憶回路４１と同様なので、ここでは詳細な説明は省略する。
【００７３】
初期値設定回路７０は、初期値テーブル７１を有する。初期値設定回路７０は、シフト段数演算回路１４からシフト段数情報が入力される。初期値設定回路７０は、シフト段数情報が入力されると、入力されたシフト段数情報に応じたシフト回路初期値及びレジスタ初期値を初期値テーブルから選択する。次いで、初期値設定回路７０は、選択されたシフト回路初期値をシフト回路５０に出力すると共に、選択されたレジスタ初期値をレジスタ６０に出力する。
【００７４】
表２は、初期値が全て「０」で演算されたＣＲＣ符号がＦＣＳに埋め込まれたパケットを演算する場合の初期値テーブル７１を示す表である。表３は、初期値が全て「１」で演算されたＣＲＣ符号がＦＣＳに埋め込まれたパケットを演算する場合の初期値テーブル７１を示す表である。
【００７５】
【表２】
0006648412.tif 000003
【００７６】
【表３】
0006648412.tif 000004
【００７７】
表２及び３において、ＣＲＣ初期値は、ＣＲＣ符号を生成する演算で使用する初期値であり、レジスタ初期値はレジスタ６０に出力される初期値であり、シフト回路初期値はシフト回路５０に出力される初期値である。レジスタ初期値及びシフト回路初期値は１６進法で記載される。
【００７８】
初期値が全て「０」で演算されたパケットの場合、初期値設定回路７０は、シフト段数演算回路１４から入力されるシフト段数情報にかかわらず、レジスタ初期値に全て「０」の３２ビットを選択し、シフト回路初期値に全て「０」の２５６ビットを選択する。
【００７９】
初期値が全て「１」で演算されたパケットの場合、初期値設定回路７０は、シフト段数演算回路１４から入力されるシフト段数情報に応じたレジスタ初期値及びシフト回路初期値を選択する。レジスタ初期値及びシフト回路初期値は、ＥｏＲ回路３０がレジスタ初期値を使用してシフトデータから生成したＣＲＣ符号が、３２ビットのビット長の「１」である初期値を使用して演算対象パケットから生成されるＣＲＣ符号と同一になるように規定される。シフト段数情報が１バイトのシフトを示すとき、初期値設定回路７０は、レジスタ初期値に１６進法「FFF1_A90F」を選択し、演算対象パケットの先頭のビットの１バイトＭＳＢ側のシフト回路初期値に１６進法「64」を選択する。シフト段数情報が２バイトのシフトを示すとき、初期値設定回路７０は、レジスタ初期値に１６進法「FFDD_3859」を選択し、演算対象パケットの先頭のビットの１バイト及び２バイトＭＳＢ側のシフト回路初期値に１６進法「64」及び「F6」を選択する。シフト段数情報が３バイトのシフトを示すとき、初期値設定回路７０は、レジスタ初期値に１６進法「FF92_10C5」を選択する。また、初期値設定回路７０は、演算対象パケットの先頭のビットの１バイト〜３バイトＭＳＢ側のシフト回路初期値のそれぞれに１６進法「64」、「F6」及び「7E」を選択する。シフト段数情報が４バイトのシフトを示すとき、初期値設定回路７０は、レジスタ初期値に１６進法「0000_0000」を選択する。また、初期値設定回路７０は、演算対象パケットの先頭のビットの１バイト〜４バイトＭＳＢ側のシフト回路初期値のそれぞれに１６進法「49」、「64」、「AF」及び「46」を選択する。シフト段数情報が５バイト以上のシフトを示すとき、初期値設定回路７０は、レジスタ初期値に１６進法「0000_0000」を選択する。また、初期値設定回路７０は、演算対象パケットの先頭のビットの１バイト〜４バイトＭＳＢ側のシフト回路初期値のそれぞれに１６進法「49」、「64」、「AF」及び「46」を選択し、５バイト以上のＭＳＢシフト量に応じて「00」を付加した値を選択する。
【００８０】
図１４は、初期値が全て「１」で演算されたパケットがシフト回路５０で３バイトシフトされた場合に生成されるシフトデータを示す図である。
【００８１】
信号列９４の第２パラレル信号Ｐ２のＭＳＢから３バイト下位のビットから第２パラレル信号Ｐ２のＭＳＢまでシフト回路初期値が配置される。第２パラレル信号Ｐ２のＭＳＢ側から順に１６進法で「7E」、「F6」及び「64」が配置される。
【００８２】
（第２実施形態に係るＣＲＣ符号演算回路の作用効果）
第２実施形態に係るＣＲＣ符号演算回路は、初期値テーブルに記憶されたシフト回路初期値及びレジスタ初期値を使用してＣＲＣ符号を生成できるので、全てが「１」である初期値を使用して生成されたＣＲＣ符号に対応するＣＲＣ符号が演算可能である。全てが「０」である初期値を使用してＣＲＣ符号を生成すると、式（２）を使用して演算したＣＲＣ符号が「０」になり、生成されたＣＲＣ符号が正しいか否かの判断が容易でない場合がある。第２実施形態に係るＣＲＣ符号演算回路は、全てが「１」である初期値を使用して生成されたＣＲＣ符号に対応するＣＲＣ符号が演算可能であるので、生成されたＣＲＣ符号が正しいか否かの判断が容易であるＣＲＣ符号を生成可能である。
【００８３】
また、第２実施形態に係るＣＲＣ符号演算回路は、シフト回路初期値及びレジスタ初期値は所望の値に設定可能なので、全てが「０」又は「１」以外の初期値を使用して生成されたＣＲＣ符号に対応するＣＲＣ符号が演算可能である。
【００８４】
（実施形態に係るＣＲＣ符号演算回路の変形例）
第１実施形態及び第２実施形態に係るＣＲＣ符号演算回路ではＥｏＲ回路３０はＣＲＣ３２を演算したが、実施形態に係るＣＲＣ符号演算回路では、ＦＣＳに埋め込まれたＣＲＣ符号に応じてＣＲＣ１６等の他の演算でＣＲＣ符号を生成してもよい。また、実施形態に係るＣＲＣ符号演算回路が搭載される半導体装置１０１の一例は、ＦＰＧＡであるが、実施形態に係るＣＲＣ符号演算回路は、ＡＳＩＣ等の他の半導体装置に搭載されてもよい。
【符号の説明】
【００８５】
１、２    ＣＲＣ符号演算回路
１０    抽出回路
１１    オーバヘッド位置検出回路
１２    パケットプリアンブル検出回路
１３    パケットレングス値抽出回路
１４    シフト段数演算回路
１５    パケット抽出回路
２０、５０    シフト回路
３０    ＥｏＲ回路（演算回路）
４０、６０    レジスタ
７０    初期値設定回路
７１    初期値テーブル
１０１    半導体装置
１１１、１１２    通信回路
１１３、１１４    ＣＲＣ回路
【図１】
0006648412.tif 000005
【図２】
0006648412.tif 000006
【図３】
0006648412.tif 000007
【図４（ａ）−（ｂ）】
0006648412.tif 000008
【図４（ｃ）】
0006648412.tif 000009
【図５】
0006648412.tif 000010
【図６】
0006648412.tif 000011
【図７】
0006648412.tif 000012
【図８】
0006648412.tif 000013
【図９】
0006648412.tif 000014
【図１０】
0006648412.tif 000015
【図１１】
0006648412.tif 000016
【図１２】
0006648412.tif 000017
【図１３】
0006648412.tif 000018
【図１４】
0006648412.tif 000019