(57)【要約】【目的】本発明は、プロセッサが生成、収集した情報のチェックビットを生成して付加するチェックコード生成回路に関し、ストレージ装置のプロセッサの負荷の軽減を図って高速データアクセスが実現することを目的とする。【構成】  生成あるいは収集された情報を受信する受信バッファと、受信バッファで受信した情報を連続域に格納および当該格納した次の連続域にチェックコードを格納することを必要に応じて繰り返し、先頭から順に受信した情報を格納して最後部がこれら情報のチェックコードとなるバッファと、受信バッファで受信した情報と、バッファの連続域の最後部から読み出したチェックコード（あるいは前回に当該演算回路で生成したチェックコード）とをもとに受信した情報全てのチェックコードを生成することを繰り返す演算回路とを備えるチェックコード生成回路である。【選択図】        図１
2005141469.tif 000002
【特許請求の範囲】
【請求項１】
生成あるいは収集された情報のチェックビットを生成して付加するチェックコード生成回路において、
生成あるいは収集された情報を受信する受信バッファと、
前記受信バッファで受信した情報を連続域に格納および当該格納した次の連続域にチェックコードを格納することを必要に応じて繰り返し、先頭から順に受信した情報を格納して最後部がこれら情報のチェックコードとなるバッファと、
前記受信バッファで受信した情報と、前記バッファの連続域の最後部から読み出したチェックコード（あるいは前回に当該演算回路で生成したチェックコード）とをもとに受信した情報全てのチェックコードを生成することを繰り返す演算回路と
を備えたことを特徴とするチェックコード生成回路。
【請求項２】
前記受信バッファで連続して情報を受信したときは、連続した最後の情報のチェックコードのみを前記バッファの連続域の最後部に格納し、それ以外は次のチェックコード生成に使用し、前記バッファの連続域に格納し読み出すことを省略して高速化したことを特徴とする請求項１記載のチェックコード生成回路。
【請求項３】
前記受信バッファで連続して情報を受信して最後の情報のとき、あるいは情報が連続して受信されないとき、当該情報について生成したチェックコードを前記バッファ内の当該情報を格納した次の領域に格納することを特徴とする請求項１あるいは請求項２記載のチェックコード生成回路。
【請求項４】
前記生成あるいは収集された情報として、プロセッサによって作成あるいは収集された情報としたことを特徴とする請求項１から請求項３のいずれかに記載のチェックコード生成回路。
【請求項５】
前記バッファをライトおよびリードが同時並列に可能なバッファとしたことを特徴とする請求項１から請求項４のいずれかに記載のチェックコード生成回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、生成あるいは収集された情報のチェックビットを生成して付加するチェックコード生成回路に関するものである。
【背景技術】
【０００２】
従来、ホストコンピュータとストレージ装置間で高速、大容量のデータ転送を行なうための手段として、ファイバチャネルの利用が一般的になっている。送信側のホストコンピュータのデータはファイバチャネルのリンク上では２Ｋバイトまでのフレームに分割されて転送され、受信側のストレージ装置側で再び元のデータに組み上げられる。この際、転送されるそれぞれのフレームはＣＲＣによってエラー保護されていて、信頼性の高いデータ転送を行なうことが可能である。
【０００３】
用途によっては更に高い信頼性が求められることがあり、このような要求を満たすために、フレーム毎のＣＲＣによるエラー保護に加えて、ストレージ装置の用意したデータ全体をホストコンピュータへ転送する際にチェックコードで保護する方法が利用される。このチェックコードには一般的にＣＲＣなどの巡回符号が利用される。
【０００４】
この方法は図６に示すように、ストレージ装置がデータにチェックコードを付加したものを1つのデータブロックとして送信する。ファイバチャネルのリンク上では上記のデータブロックは２ＫＢまでのフレームに分割し、フレーム毎にＣＲＣで保護されてホストコンピュータに転送される。ホストコンピュータ側で分割されたフレームのＣＲＣチェックを行い、元のデータブロックに組み上げた後、ストレージ装置側で送信時にしたのと同じアルゴリズムの計算をデータに対して行なう。得られた計算結果はストレージ装置が付加したチェックコードと同じになるはずなので、比較することでデータの正当性を判定することができる。
【０００５】
上記のようなストレージ装置がホストコンピュータに転送するデータとしては、ユーザデータとセンス情報とに分けられる。ユーザデータはディスクドライブに格納されており、ストレージ装置がホストコンピュータからの要求に応じて読み出す。これに対してセンス情報はディスクドライブやストレージ装置自身の状態を表す情報で、ストレージ装置に搭載されたプロセッサがホストコンピュータからの要求に応じて作成するという違いがある。
【０００６】
このように異なる２つのデータに上記のチェックコードを付加してデータブロックを生成することを考えると、ユーザデータは専用のハードウェアによってディスクドライブから読み出されるので、ハードウェアによってチェックコードを付加するのが容易である（例えば特許文献１）。
【０００７】
これに対してセンス情報などのプロセッサが生成、収集する必要のある情報は当該プロセッサがストレージ装置のメモリ上にその都度、作成するため、専用のハードウェアを経由することがなく、チェックコードもプロセッサが生成していた。
【特許文献１】特開昭５７−２００４９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
上記のセンス情報などの情報のチェックコードをプロセッサが生成、付加するとき、情報のデータ長が小さければそれほど問題にはならない。しかし場合によってはストレージ装置が生成しなくてはならない情報は数キロバイトの大きさになる場合があり、このような情報（データ）に対するチェックコードを生成するのはプロセッサにとって大きな負担であり、ストレージ装置全体の性能低下を招くという問題があった。
【課題を解決するための手段】
【０００９】
本発明は、これらの問題を解決するため、プロセッサが生成、収集した情報についてＣＲＣなどのチェックコード生成という複雑な処理をするのではなく、簡単なハードウェア回路で迅速にチェックコードの付加を行うようにしている。
【００１０】
従って、プロセッサが生成、収集した情報のチェックコードを簡易なハードウェア回路で高速に生成して付加することが可能となる。
【発明の効果】
【００１１】
本願発明は、プロセッサが生成、収集した情報のチェックコードを簡易なハードウェア回路で高速に生成して付加し、ストレージ装置のプロセッサの負荷の軽減を図って高速データアクセスが可能となる。
【発明を実施するための最良の形態】
【００１２】
本発明、プロセッサが生成、収集した情報のチェックコードを簡易なハードウェア回路で高速に生成して付加することを実現した。
【実施例１】
【００１３】
図１は、本発明の回路例を示す。
【００１４】
図１において、データ受信バッファ１は、図示外のプロセッサが生成、収集した情報であるライトデータ（センス情報などのプロセッサが生成したデータ）を受信して一時的に保持するものである。
【００１５】
セレクタ２、４、９は、入力された複数のデータのうちいずれか１つを選択して出力するものである。
【００１６】
バッファ３は、データあるいは当該データから生成したチェックコードを順次格納して記憶したり、読み出したりするものであって、同時にＷ／Ｒ可能なメモリ（２ポート−ＲＡＭ）である。
【００１７】
アドレスレジスタ（Ｄ−ＦＦ）４は、アドレス加算器６で加算されたアドレスを保持するものである。
【００１８】
ＣＲＣ演算回路７は、受信されたデータと、バッファ３から読み出した前回のチェックコード（あるいはＣＲＣ演算回路７で演算された前回のチェックコード、あるいは初期値）とを演算してチェックコードを生成する回路である。
【００１９】
演算結果受信バッファ８は、ＣＲＣ演算回路７で演算されたチェックコードを一時的に保持するものである。
【００２０】
データ送信バッファ（Ｄ−ＦＦ）１０は、バッファ３から読み出された送信するためのデータあるいはチェックコードを一時的に保持するものである。
【００２１】
次に、図１の回路の動作を説明する。
【００２２】
（１）  左端のライトデータがプロセッサによって生成、収集された情報（例えばセンス情報）としてデータ受信バッファ１に書き込まれる。
【００２３】
（２）  データ受信バッファ１で保持されたデータと、バッファ３から読み出された前回のチェックコード（あるいは初回は初期値Ｓｅｅｄなど）とをＣＲＣ演算回路７に入力し、チェックコード（ここでは、ＣＲＣ）を演算して演算結果受信バッファ８に格納する。この際、データ受信バッファ１で保持されたデータは、バッファ３に格納する（後述する図３の３を参照）。
【００２４】
（３）  （２）で演算結果受信バッファ８に保持されたチェックコードをバッファ３に格納する（例えば後述する図３の４を参照）。
【００２５】
（４）  次のデータが連続して受信された場合には、（２）と（３）を繰り返し、連続したデータの処理行う。
【００２６】
（５）  （４）で連像したデータの処理を終了した後、バッファ３から読み出したデータ、チェックコードをデータ送信バッファ１０を介して順次送信（出力）する（後述する図５のディスクコントローラ１５内のチェックコード生成回路５１からファイバーチャネルコントローラ１６に送信（出力）する）。
【００２７】
以上のように、プロセッサが生成、収集したセンス情報などの情報を、ライトデータとしてデータ受信バッファ１に書き込むのみで、ハードウェアにより自動的にチェックコードが生成されて当該ライトデータ（センス情報などの情報）の最後に付加され、データ送信バッファ１０から出力されることとなる。以下順次詳細に説明する。
【００２８】
図２は、本発明の動作説明図を示す。ここで、バッファ３の下段に記載した１から１０は、図示外のプロセッサが生成、収集したセンス情報などの情報である連続したデータＤ００，Ｄ０１，Ｄ０２，Ｄ０３について、ハードウェア回路でチェックコードを生成して付加する様子を示したものである。
【００２９】
図２において、１は、データＤ００，Ｄ０１，Ｄ０２，Ｄ０３を格納する前に、チェックコードの規格で決まった、受信した初期値Ｓｅｅｄを、バッファ３の先頭に図示のように格納する。
【００３０】
２は、元のデータ（ここでは、ゴミ）とＳｅｅｄとの演算結果（図１のＣＲＣ演算回路７の演算結果）を、バッファ３のＳｅｅｄの次の連続領域に図示の××××として格納する。
【００３１】
３は、受信した最初のデータＤ００をバッファ３の先頭に図示のように格納すると共に当該先頭から読み出したＳｅｅｄと、受信した最初のデータＤ００とをＣＲＣ演算回路７で演算する。
【００３２】
４は、３で演算したチェックコードをバッファ３に格納したデータＤ００の次の連続領域に図示のＣＲＣ−０として格納する。
【００３３】
５と６は、３と４と同様に、次に受信したデータＤ０１について繰り返してバッファ３の２番目の領域に当該データＤ０１を格納、および、その次の連続領域に当該データＤ０１と前回生成したチェックコード（ＣＲＣ−０）とを演算して生成したチェックコード（ＣＲＣ−１）を格納する。
【００３４】
７と８、９と１０は、３と４と同様に繰り返し、図示のように格納する。
【００３５】
１０は、Ｄ０３のチェックコード（ＣＲＣ−３）を格納して一連のチェックコード生成および付加を終了した状態であって、バッファ３には、データＤ００、Ｄ０１、Ｄ０２，Ｄ０３、チェックコード（ＣＲＣ−３）が連続した領域に格納されている。
【００３６】
以上のようにして、プロセッサが生成、収集したセンス情報などの情報（ここでは、Ｄ００，Ｄ０１，Ｄ０２，Ｄ０３）等を図１の受信バッファ１に順次格納するのみで、ハードウェア回路により自動的に情報（Ｄ００，Ｄ０１，Ｄ０２，Ｄ０３）にチェックコードが付加されて送信バッファ１０から順次送信することが可能となる。
【００３７】
図３は、本発明の回路の動作説明図を示す。
【００３８】
図３の（ａ）は、データ（１）Ｓｅｅｄをバッファ３の先頭領域に格納するルートを点線で示す。これは、既述した図２の１のデータＳｅｅｄ（規格により決まっている所定データ、例えばチェックコードと同じ長さであって、ビットを全て１にセットしたデータ）を、プロセッサがデータ受信バッファ１にセットしたことに対応し、点線のルートでバッファ３の先頭領域（アドレスレジスタ５に先頭領域のアドレスをセット）に格納する様子を示す。
【００３９】
図３の（ｂ）は、データ（２）Ｄ００をＣＲＣ演算回路７の一方に入力、およびバッファ３の先頭に格納されているデータＳｅｅｄを読み出してＣＲＣ演算回路７の他方に入力し、両者をもとにチェックコード（ここでは、ＣＲＣ）を演算して生成し、演算結果受信バッファ８に格納するルートを点線で示す。これにより、受信したデータ（２）Ｄ００と、バッファ３に格納されているデータＳｅｅｄとをもとにチェックコード（ＣＲＣ）を生成することが可能となる。
【００４０】
図３の（ｃ）は、データ（２）Ｄ００をバッファ３の次の領域（ここでは、先頭領域）に格納するルートを点線で示す。
【００４１】
図３の（ｄ）は、演算結果受信バッファ８から出力したチェックコードをバッファ３のデータＤ００の次の連続領域に格納するルートを点線で示す。
【００４２】
以上の図３の（ｂ），（ｃ），（ｄ）により、プロセッサがデータＤ００をデータ受信バッファ１に格納すると、当該データ受信バッファ１に格納されているデータＤ００とバッファ３から読み出したデータ（ここでは、Ｓｅｅｄ）とをもとにチェックコードを生成、およびデータＤ００をバッファ３の読み出したデータＳｅｅｄの領域に格納した後、生成したチェックコードをデータＤ００の次の領域に格納し、結果として、データＤ００，チェックコードをバッファ３に格納することが可能となる。以下同様に、データＤ０１，Ｄ０２，Ｄ０３について図３の（ｂ）から（ｄ）と同様に繰り返すことにより、既述した図２の１０のバッファ３の状態（Ｄ００，Ｄ０１，Ｄ０２，Ｄ０３，チェックコード（Ｄ００からＤ０３の全体のチェックコードをバッファ３に格納した状態））にすることが可能となる。そして、先頭から順にデータＤ００，Ｄ０１，Ｄ０２，Ｄ０３，チェックコードを読み出し、後述する図５のファイバチャネルコントローラ１６に渡して所定ブロック（ブロック毎にＣＲＣを付加）にしてホストコンピュータなどに送信することが可能となる。
【００４３】
図４は、本発明のタイムチャートを示す。
【００４４】
図４の（ａ）は、データが分割されてきた場合のタイムチャートを示す。この場合には、データＳｅｅｄ，Ｄ００，Ｄ０１・・・などが分割して受信バッファ１にセットされたときのタイムチャートを示す。
【００４５】
図４の（ａ）において、図示外のプロセッサがデータ受信バッファ１にデータＳｅｅｄをセットすると、矢印で示すように、ＲＡＭ（アドレス０、先頭アドレス）に当該データＳｅｅｄを格納すると共にデータＳｅｅｄをＣＲＣ演算回路７の演算回路入力ー１に入力および演算回路入力ー２に元のデータ（ここでは、ゴミのデータ）を入力してチェックコードを演算し、演算結果受信バッファ８を経由してバッファ３のＲＡＭ（アドレス１
）に当該チェックコードを格納する。
【００４６】
同様に、分割されて受信バッファ１にセットされたデータＤ００，Ｄ０１・・・についても図示のように処理することを繰り返す。
【００４７】
以上のように、データが分割されて連続でなく受信バッファ１にセットされたときは図示のように、データ毎にバッファ３に格納およびチェックコードを生成して当該データの次の領域に格納することを繰り返す。
【００４８】
図４の（ｂ）は、データが連続できた場合のタイムチャートを示す。この場合には、データＳｅｅｄ，Ｄ００，Ｄ０１・・・などが分割されることなく連続して受信バッファ１にセットされたときのタイムチャートを示す。
【００４９】
図４の（ｂ）において、図示外のプロセッサがデータ受信バッファ１に最初のデータＳｅｅｄをセットすると、矢印で示すように、ＲＡＭ（アドレス０、先頭アドレス）に当該データＳｅｅｄを格納すると共にデータＳｅｅｄをＣＲＣ演算回路７の演算回路入力ー１に入力および演算回路入力ー２に元のデータ（ここでは、ゴミのデータ）を入力してチェックコードを演算し、演算結果受信バッファ８を経由してバッファ３のＲＡＭ（アドレス１）に当該チェックコードを格納することは、図４の（ａ）と同じである。
【００５０】
しかし、続く、次のデータＤ００が連続して受信バッファ１にセットされると、データＤ００、Ｄ０１・・・は順次バッファ３のＲＡＭ（アドレス０）、ＲＡＭ（アドレス１）、ＲＡＭ（アドレス２）・・・に格納されると同時並列にそのチェックコードはバッファ３に格納されることなく、演算結果受信バッファ８に保持されているこれらチェックコードは直接にＣＲＣ演算回路７の演算回路入力ー２に入力し、演算回路入力ー１に入力されたデータＤ００、Ｄ０１・・・と演算してチェックコードを順次生成し、最後のデータ、例えば図４の（ｂ）の例ではデータＤ０２（ここでは、連続する最後のデータＤ０２）のときにバッファ３の当該データＤ０２の次の連続領域に格納し、データＤ００、Ｄ０１、Ｄ０２、チェックコードをバッファ３の連続領域に格納することが可能となる。これにより、生成したチェックコード（演算結果受信レジスタ７に保持されているチェックコード）を連続したデータのうちの途中のデータ（図４の（ｂ）の例では、Ｓｅｅｄ，Ｄ００、Ｄ０１）のチェックコードをバッファ３に格納するステップ（クロック）を省略して高速にチェックコードを生成してデータに付加することが可能となる。
【００５１】
図５は、本発明の応用システム構成図を示す。
【００５２】
図５において、ストレージ装置１１は、複数のディスクドライブ１７にデータを格納したり、読み出したり、ホストコンピュータとの間でデータの送受信したりするものであって、プロセッサ１２、メモリコントローラ１３、メモリ１４、ディスクコントローラ１５、ファイバチャネルコントローラ１６などから構成されるものである。
【００５３】
ホストコンピュータがユーザデータを要求すると、プロセッサ１２はディスク・コントローラ１５にディスクドライブ１７からデータを読み出すよう指示を出す。ディスク・コントローラ１５はディスクドライブ１７からユーザデータを読み出すと同時にＣＲＣを計算、付加して、ディスクコントローラ１５の内部のバッファに格納した後、プロセッサ１２に読み出し終了の通知を行なう。プロセッサ１２はディスク・コントローラ１５からの通知を受けると、ファイバチャネル・コントローラ１６に対してホストコンピュータへのデータ転送を指示する。ファイバチャネル・コントローラ１６はディスク・コントローラ１５内のデータブロックを読み出し、ファイバチャネルのフレームに分割してホストコンピュータへ転送する。
【００５４】
この際、ホストコンピュータがセンス情報を要求した時は、プロセッサ１２がディスクドライブ１７の状態を調べて予め決められたフォーマットに従ってセンス情報をメモリ上に作成し、メモリ上のセンス情報をディスク・コントローラ１５内の予め決められた領域（データ受信バッファ３）へライトすると、図１のチェックコード生成回路５１がセンス情報をバッファ３へ格納すると共にチェックコード（例えばＣＲＣ）を作成して同じバッファ３内の連続領域へ格納する。その後、プロセッサ１２がファイバチャネル・コントローラ１６に対してホストコンピュータへのセンス情報の転送を指示すると、ファイバチャネル・コントローラ１６はディスク・コントローラ１５内のセンス情報とチェックコード（ＣＲＣ）からなるデータブロックを読み出してホストコンピュータへ転送する。
【産業上の利用可能性】
【００５５】
本発明は、プロセッサがＣＲＣなどのチェックコード生成という複雑な処理をするのではなく、プロセッサが生成、収集した情報にチェックコードを付加するための簡単なハードウェア回路を提供し、プロセッサが生成、収集した情報のチェックコードを簡易なハードウェア回路で高速に生成して付加することが可能となる。
【図面の簡単な説明】
【００５６】
【図１】本発明の回路例である。
【図２】本発明の動作説明図である。
【図３】本発明の回路の動作説明図である。
【図４】本発明のタイムチャートである。
【図５】本発明の応用システム構成図である。
【図６】従来技術の説明図である。
【符号の説明】
【００５７】
１：データ受信バッファ
２，４，９：セレクタ
３：バッファ
５：アドレスレジスタ
６：アドレス加算器
７：ＣＲＣ演算回路
８：演算結果受信バッファ
１０：データ送信バッファ
１１：ストレージ装置
１５：ディスクコントローラ
５１：チェックコード生成回路
１７：ディスクドライブ
【図１】
2005141469.tif 000003
【図２】
2005141469.tif 000004
【図３】
2005141469.tif 000005
【図４】
2005141469.tif 000006
【図５】
2005141469.tif 000007
【図６】
2005141469.tif 000008