(57)【特許請求の範囲】
【請求項１】
データ経路によって伝送されるデータブロックの論理ブロックアドレスを検証する方法であって、
前記データ経路には、エンコーダおよび検出器が配置され、
前記データブロックは、前記エンコーダから前記検出器に向けて伝送され、
前記方法は、
（ａ）  前記エンコーダがデータインテグリティコードに従ってデータ経路における第１の点でデータブロックを符号化して、データブロックに関連した第１の冗長記号を発生するステップと、
（ｂ）  前記エンコーダがデータブロックの第１の論理ブロックアドレスを前記第１の冗長記号に組入れて、第１のデータインテグリティブロック記号を発生するステップと、
（ｃ）  前記エンコーダが前記第１のデータインテグリティブロック記号をデータブロックに付与するステップと、
（ｄ）  前記エンコーダが前記付与された第１のデータインテグリティブロック記号を備えるデータブロックをデータ経路における第２の点に伝送するステップと、
（ｅ）  前記検出器が、前記エンコーダにおいてデータブロックの符号化に用いられるデータインテグリティコードと同じデータインテグリティコードに従ってデータ経路における前記第２の点でデータブロックを符号化して、データブロックに関連した第２の冗長記号を発生するステップと、
（ｆ）  前記検出器が第２の論理ブロックアドレスを前記第２の冗長記号に組入れて、第２のデータインテグリティブロック記号を発生するステップとを含み、前記第２の論理ブロックアドレスは論理ブロックアドレスエラーがないときは前記第１の論理ブロックアドレスと同じであり、さらに、
（ｇ）  前記検出器が前記第１のデータインテグリティブロック記号と前記第２のデータインテグリティブロック記号とを比較して、データ経路による伝送後にデータブロックの論理ブロックアドレスを検証するステップを含む、方法。
【請求項２】
バッファメモリを介して渡されるデータブロックを保護する方法であって、
前記バッファメモリは、エンコーダと検出器との間に配置され、
前記データブロックは、前記エンコーダから前記バッファメモリを介して前記検出器に向けて渡され、
前記方法は、
（ａ）  前記エンコーダがデータブロックを第１のクロスチェックエンコーダおよびバッファメモリに伝送するステップと、
（ｂ）  前記エンコーダがクロスチェックコードに従って前記第１のクロスチェックエンコーダにおけるデータブロックを符号化して、データブロックに関連した第１の冗長記号を発生するステップと、
（ｃ）  前記エンコーダがデータブロックの第１の論理ブロックアドレスを前記第１の冗長記号に組入れて、第１のデータインテグリティブロック記号を発生するステップと、
（ｄ）  前記エンコーダが前記第１のデータインテグリティブロック記号をバッファにおけるデータブロックに付与するステップと、
（ｅ）  前記検出器がデータブロックおよび前記付与されたデータインテグリティブロック記号をバッファから第２のクロスチェックエンコーダに伝送するステップと、
（ｆ）  前記検出器が前記クロスチェックコードに従って前記第２のクロスチェックエンコーダにおけるデータブロックを符号化するステップとを含み、前記第２のクロスチェックエンコーダはデータブロックのための第２の冗長記号を発生し、さらに、
（ｇ）  前記検出器が第２の論理ブロックアドレスを前記第２の冗長記号に組入れて、第２のデータインテグリティブロック記号を発生するステップを含み、前記第２の論理ブロックアドレスは論理ブロックアドレスエラーがないときは前記第１の論理ブロックアドレスと等価であり、さらに、
（ｈ）  前記検出器が前記付与された第１のデータインテグリティブロック記号と前記第２のデータインテグリティブロック記号とを比較して、データ伝送エラーが生じたかを判断するステップを含む、方法。
【請求項３】
データチャネルにおいてデータソースと受取り側との間で伝送される符号化データに論理ブロックアドレス情報を含めるための装置であって、
前記符号化データは、前記データソースが発生するデータブロックを含み、
前記データソースからデータブロックを受取り、前記データブロックのための第１の冗長語を出力する第１のエンコーダと、
カウンタ回路を含む第１の論理ブロックアドレスソースとを含み、前記第１の論理ブロックアドレスソースは前記データブロックのための第１の論理ブロックアドレスを発生し、さらに、
前記第１のエンコーダおよび前記第１の論理ブロックアドレスソースに電気的に接続され、前記第１の論理ブロックアドレスと前記第１の冗長語とを組合せるための第１の組合せ手段と、
前記データブロックに前記第１の組合せ手段によって組合わされた前記第１の論理ブロックアドレスを含む前記第１の冗長語を付与し、前記データチャネルへ送出するための手段と、
前記データチャネルを介して前記第１のエンコーダに接続される第２のエンコーダとを含み、前記第２のエンコーダは前記第１のエンコーダから前記データチャネルを介して伝送されるデータブロックのための第２の冗長語を発生し、さらに、
第２のカウンタ回路を含む第２の論理ブロックアドレスソースを含み、前記第２の論理ブロックアドレスソースは前記データブロックのための第２の論理ブロックアドレスを発生し、さらに、
前記第２のエンコーダおよび前記第２の論理ブロックアドレスソースに電気的に接続され、前記第２の論理ブロックアドレスと前記第２の冗長語とを組合せるための第２の組合せ手段と、
前記第１のエンコーダから前記データチャネルを介して伝送される前記第１の論理ブロックアドレスを含む前記第１の冗長語と、前記第２の組合せ手段によって組合わされた前記第２の論理ブロックアドレスを含む前記第２の冗長語とを比較するための手段とを含む、装置。
【請求項４】
前記第１のエンコーダと前記第２のエンコーダとの間のデータチャネルに配置されるバッファをさらに含み、前記バッファは前記第１のエンコーダから送出される前記データブロックを選択的に受取り、記憶し、伝送する、請求項３に記載の装置。
【請求項５】
前記第１のエンコーダおよび前記第２のエンコーダは各々同一のコードに従って処理を実行し、前記コードはクロスチェックコードとしても用いられる、請求項３に記載の装置。
【請求項６】
前記コードはさらにデータインテグリティコードとしても利用される、請求項５に記載の装置。
【発明の詳細な説明】
発明の分野
この発明は一般にデータ通信および記憶システムで用いられるデータ符号化の方法および装置の分野に関する。特に、この発明は論理ブロックアドレス（“ＬＰＡ”）情報を組入れたデータインレグリティコードを実現してデータパス内のバッファメモリを通過するデータを保護し、かつブロック転送および検索プロセスの間にデータブロックＬＰＡの検証を可能にするシステムアーキテクチャに関する。
発明の背景
過去において、たとえばディスクドライブ記憶装置等を含む周辺記憶装置のデータフォーマットは、ブロックに関連したデータ記録内に埋込まれたデータブロックアドレス情報を利用して、記憶媒体上の個々のデータブロックの物理的位置を判断していた。個々のブロック位置はそれから、記憶媒体に書込まれるデータの各ブロックのためのオーバヘッドの一部を形成する多ビットブロック識別コードを復号することによって判断することができた。
最近では、データブロック位置情報を各データブロックに関連するデータ記録内の識別フィールドに埋込まない、データ記憶および転送フォーマットが開発されている。代わりに、通常は監視マイクロプロセッサに制御される内部カウンタおよびタイマが、埋込まれた識別情報を必要とすることなく、データ記録の位置を追跡するのに用いられる。加えて、たとえば小型機用システムインターフェイス（Small Computer System Interface、“ＳＣＳＩ”)等のあるインターフェイスプロトコルが周辺記憶ユニットに論理ブロックアドレス情報を提供し、これがカウンタ回路によって用いられてデータブロック位置の追跡を支援する場合もある。バッファされたデータパスを利用するディスク記憶ドライブでは、ユーザのデータはホストからインターフェイスを介して、たとえばダイナミックランダムアクセスメモリ（“ＤＲＡＭ”）等のバッファメモリへ転送され、ここでユーザデータは一時的に記憶されその後記録チャネルを介して伝送されて記憶媒体に書込まれる。このようなシステムでは、データブロックのＬＰＡを、それらがホストからバッファメモリを介して記憶媒体に渡される間に、さらに、逆経路でバッファを介してホストに戻される間に、検証を行なうメカニズムを提供することが望ましいであろう。
「ディスクドライブバッファ内のデータを保護するための方法および装置」（“Method and Apparatus to Protect Data Within a Disk Drive Buffer”）と題された、共通に譲り受けられた同時係属中の特許出願連続番号第          号では、クロスチェックコードをデータインテグリティコードとして利用してバッファメモリを保護するシステムが開示されている。しかしながらこの出願はデータインテグリティコードに従って生成された冗長情報にＬＰＡ情報を組入れることは開示していない。さらに、ＬＢＡが組入れられた付与されたクロスチェックおよびデータインテグリティコードの冗長度がデータブロックとともに、記憶バッファに、さらにまた記憶媒体に転送されるデータパス内の一時的データ記憶としてブロックバッファを利用するシステムにおいて、クロスチェックコードとしても機能するデータインテグリティコード内にＬＰＡ情報は組入れられていない。
したがって生成された冗長度の中にＬＢＡ情報を含むデータインテグリティコードを提供してブロックバッファを保護するとともに、ＬＢＡエラーに対するさらなる保護を提供してデータパスと記憶媒体との回路構成要素間で正しいデータブロックが転送される可能性を高めることが望ましいであろう。また、クロスチェックコードとしても働くＬＢＡ情報を組入れたデータインテグリティコードを提供してエラー訂正コード（“ＥＣＣ”）に従って行なわれるエラー訂正の間違いの可能性を低くすることも望ましいであろう。
発明の要約
この発明はブロックバッファ内に一時的に記憶されたデータを保護するために用いられるデータインテグリティコードによって生成される冗長度内にＬＰＡ情報を組入れる。データインテグリティコードがＥＣＣに従って行なわれるエラー訂正プロセスにおける誤訂正の可能性を減じるためのクロスチェックコードとしても働くことが有利である。
この発明の一般的な目的は、データインテグリティコードに従って生成された冗長度にＬＢＡ情報を組入れて、データパス中のバッファメモリを通るデータブロックのインテグリティを保護するデータインテグリティブロック（“ＤＩＢ”）と、データパス中の個別の点で転送されるブロックのＬＢＡを検証するメカニズムとを提供することである。
この発明の別の目的はエンコーダブロックによって生成された冗長シンボル内にＬＢＡ情報が組込まれたデータインテグリティコードであって、生成された冗長度シンボルが、ＥＣＣによる誤訂正を検出するのに用いられるクロスチェック冗長度の一部として随意に働くものを提供することである。
この発明のより具体的な目的はデータインテグリティ／クロスチェックコードであって、コードに従って生成された冗長度内にＬＢＡ情報が組込まれたものを提供し、さらにこれをホストインターフェイスと多機能シーケンサ回路とでともに実現するためのエンコーダ／検出器ブロックを提供してデータ記憶システム内のブロックバッファメモリを通るデータブロックを保護し、ここでエンコーダブロックが、各ブロックのＬＢＡがそこに組込まれる１語（２バイト）の冗長情報を生成するものを提供することである。
この発明の別のより具体的な目的はデータインテグリティ／クロスチェックコードであってＬＰＡ情報の１６ビットが単一の冗長語と排他的論理和を取られて（“ＸＯＲｅｄ”）データインテグリティブロック語（“ＤＩＢ語”）を生成し、これがデータブロックに付加される、コードを提供することである。発明のこの目的によれば、ＤＩＢ語は３つの別個の機能を果たす。すなわち（１）データチャネル内のパス上の異なる点でデータブロックのＬＢＡを検証する機能と、（２）バッファ内に一時的に記憶されるデータブロックを保護する機能と、（３）ＥＣＣ誤訂正に対する保護のためのクロスチェック冗長度としての機能、である。
この発明のこれらのおよび他の目的、特徴および局面によれば、ＬＢＡ情報はデータインテグリティブロックによって生成された冗長度情報内に組入れられてブロックデータ転送システム内のデータブロックの誤認識に対するさらなる保護を提供する。
好ましい実施例では、データインテグリティブロック（“ＤＩＢ”）は全体のデータインテグリティ戦略の一部として提供されるが、これはホストインターフェイス内の所与のデータブロックに関連したＬＢＡが、バッファメモリ内のおよびデータパス内のデータシーケンサ内の同じデータブロックに関連したＬＢＡと一致するか否かを検証することを含む。ＬＢＡを備えたデータインテグリティ冗長度がバッファ内に一時的に記憶されるデータブロックに付与されて、データブロックがデータパス内のバッファより下流の点で受取られた後にＬＢＡの検証を可能にする。この検証の後に、ＬＢＡを備えた冗長度は好ましくは記憶媒体上のそれが関連するデータブロックに付与され、データブロックのクロスチェック冗長度の一部をなすとともに、後にブロックが記憶媒体から読み戻される際のＬＢＡ検証を可能とする。
開示されたディスクドライブの例では、ＤＩＢ語が２個のクロスチェック語の１つとして利用される。ＤＩＢ語は第１のクロスチェックコードに従って生成され、ホストインターフェイスにおいてＬＢＡ情報と組合される。ＤＩＢ語はその後それが生成されたデータブロックに付与され、バッファされたデータブロックに対するデータインテグリティを与えるとともに、データパス内の異なった点でのＬＢＡ検証の手段を提供する。ブロックのデータのインテグリティとＬＢＡの妥当性とは、ブロックがバッファの下流の点（この場合はシーケンサ）と通信した後に冗長語を再生し、再生された語とデータブロックに関連するＬＢＡとのビットごとの論理和をシーケンサ内で取り、この結果をバッファから直接受取られたＤＩＢ語と比較することによってチェックできる。このテストと同時に、ＤＩＢ語とシーケンサ内で生成された第２のクロスチェック語とが記憶媒体に書込まれ、媒体上のデータブロックに付与されて、２個の別個のクロスチェックコード語を形成する。データブロックが記憶媒体から検索されてシーケンサへ転送されるときに、データ回復プロセスは回復されたデータブロックのＬＢＡをシーケンサによって求められたデータブロックのＬＢＡと比較することによってテストすることができる。
クロスチェックコードは各データブロックのＬＢＡをブロックとともにバッファへ、さらに記憶媒体へ運ぶための便利な運搬手段を提供し、こうしてデータパス内の異なる点でブロックのＬＢＡ検証を可能にし、データの正しいブロックがシステムによって処理されることを確実にする。発明のこの局面の特に望ましい特徴は、既存のクロスチェックコードを全体的なデータインテグリティおよびＬＢＡ検証戦略に使用できる能力である。この方策により、記憶装置は別個のデータオーバヘッドを付け加えることなしに、またさらなる大量のハードウェアを必要とすることなしに、ＬＢＡをモニタする能力を付加される。
現在好ましい実施例では、２個のクロスチェック語が異なるエンコーダ多項式に従って作られる。第１のクロスチェックコード語はリードソロモンコード語であって以下の生成多項式によって定義される。
Ｇ（ｚ）＝ｚ−β、
ここでβは６５５３６個の体要素（ＧＦ（２16））を有する有限ガロア体の特定の表現における原始元であり、１６進数０ｘ１０１と等しい。第２のクロスチェック多項式は以下の生成多項式によって定義されるリードソロモンコード語である。
Ｇ（ｚ）＝ｚ−β2、
ここでβ2はＧＦ（２16）の算術を用いてβを２乗することによって得られ、１６進数０ｘ１８０に等しい。この好ましい実施例では、ガロア体数学演算は以下で説明される拡大体理論に従って行なわれる。
ＬＢＡ値間の不一致の主な原因はシステムソフトウェアの符号化の誤りであり、これは記憶媒体内のおよびバッファ内の個々のデータブロックの位置を判断するポインタの誤整列の原因であり得る。システムソフトウェアは通常これらのデータポインタを維持する責任を負うため、ソフトウェアエラーはデータポインタが誤整列される原因となり、この結果データブロックの誤った認識と転送を生じさせることがある。したがって、ＬＢＡをデータインテグリティ／クロスチェックコードに組入れることはデータ転送プロセスの信頼性を増し、同時にシステム設計者、または技術分野の障害追跡者に、誤ったデータブロックの認識の原因となるシステムソフトウェアエラーを分離するのに用いるためのハードウェア手段を提供する。
この発明のこれらのおよび他の局面、特徴、目的および利点はこの発明の好ましい実施例の以下の詳細な説明を考慮することでより完全に理解されかつ評価されるであろう。この説明は添付の図に関連してなされ、ここでいくつかの図において同じ番号は対応の部分を指す。
【図面の簡単な説明】
図１はバッファメモリを利用したデータ記憶装置内の書込パスの上面ブロック図であって、書込パスは発明に従ったＬＢＡ情報を組入れたデータインテグリティ／クロスチェックコードを実現する回路を含む。
図２は図１と同様の機能的ブロック図であって、ＬＢＡ情報がこの発明に従ったデータインテグリティ／クロスチェックコード冗長度に組入れられた、データ記憶装置の読出パスを示す。
図３はこの発明の局面に従った記憶媒体に書込まれるデータブロックのフォーマットを示す。ブロックは５１２バイトのデータを含み、これに２対のクロスチェックバイト、ＸＣ［５１３］ないしＸＣ［５１６］が続き、これらはそれぞれＸＣＨＫ0およびＸＣＨＫ1のクロスチェック語を形成し、これに１８のエラー訂正バイト、ＥＣＣ［５１７］ないしＥＣＣ［５３４］が続く。
図４は図１および２に示されたＤＩＢ、ＤＩＢ／ＸＣＨＫ0およびＸＣＨＫ1機能ブロックを実現するのに用いることのできる、組合されたシンドローマおよびチェッカの現在好ましい実現例の回路図である。
好ましい実施例の詳細な説明
１．書込パス
図１を参照して、たとえばコンピュータ等のホスト１００からのデータブロックはホストインターフェイス１０１（破線の箱で示される）に入力され、インターフェイス１０１内の２個の別個の並列パス上を一時的記憶装置、好ましくは先入れ先出し（“ＦＩＦＯ”）バッファ１０２へ、さらにデータインテグリティブロック（“ＤＩＢ”）１１８（破線の箱）に伝送される。ＤＩＢ１１８はＤＩＢエンコーダ１０４、ＬＢＡカウンタ１０５、およびビットごとのモジュロ２加算器１０３として示される比較回路を含む。図１に示されるように、ＤＩＢ１１８は好ましくは単一の用途特定集積回路（“ＡＳＩＣ”）の一部としてホストインターフェイス１０１の他の要素とともに実現される。インターフェイス１０１へのデータパスは、インターフェイス１０１内のデータパスと同様に、ホスト１００からのデータのバイトサイズのまたは語サイズのフォーマットに対処できるよう、８ビットと１６ビットとの切換が可能である。重要なことに、ここで説明されるデータブロックは２５６語データセクタ（５１２バイト）としてフォーマットされているが、特定の用途に依存して多くのさまざまなブロックフォーマットの選択肢が利用可能である。
好ましい実施例では、ホスト１００はＮ個の１６ビットデータ語｛ｕ0，ｕ1，…ｕN-1｝のセクタとしてフォーマットされたデータブロックを出力し、ここで５１２バイトデータセクタについてＮ＝２５６である。ホスト１００からのデータ語は、ホストインターフェイス１０１内の回路要素に与えられる語クロック信号に応答して、ＤＩＢエンコーダ１０４と、ＦＩＦＯ１０２を介してバッファ１０８とに、同時にクロックされて入力される。ＦＩＦＯ１０２はホスト１００とブロックバッファ１０８との間の転送速度のばらつきに対処するために、入来するデータ語をバッファするのに用いられ、ブロックバッファ１０８は転送されたデータセクタのシーケンスをシーケンサ１０９のセクタにさらに転送するに先立って一時的に記憶するためのキャッシュメモリとして機能する。いくつかのデータセクタを記憶するのに十分なサイズのダイナミックランダムアクセスメモリ（“ＤＲＡＭ”）、たとえば１６×６４Ｋ  ＤＲＡＭがバッファ１０８として好ましく利用される。バッファ１０８へのおよびそこからのデータ転送はバッファコントローラ１１０によって制御され、これはオンボードのマイクロコントローラ１１２によって監視される。図１および２に示されるように、バッファコントローラ１１０は好ましくは多機能シーケンサ１０９アーキテクチャ内に含まれる。
この特定の例では、ＤＩＢエンコーダ１０４にクロックされるデータセクタは拡大体として表わされる、６５，５３６個の要素（ＧＦ（６５，５３６）またはＧＦ（２16））を有する有限ガロア体で動作する１６ビットのリードソロモンコードに従って符号化され、入来するデータ語のセクタ、｛ｕ0，ｕ1，…ｕ255｝に応答して単一の冗長語ｄ0を生成する。セクタ内のすべてのデータ語がＤＩＢエンコーダ１０４を介してクロックされると、エンコーダ１０４はｄ0をビットごとのモジュロ２加算器回路１０３の入力に出力し、これは実際には１６個のＸＯＲゲートの並列アレイとして実現されてもよい。冗長語、ｄ0はその後ＬＢＡカウンタ１０５により加算器１０３の入力に与えられるＬＢＡ値の下位１６ビットとビットごとに論理和を取られる。この動作の結果はＬＢＡ情報を含む単一の冗長語ｘNである。明瞭にするために、ｘNはまたＤＩＢエンコーダ回路１０４の出力で与えられＬＢＡ情報を含んでいない冗長語ｄ0と区別するために、ＤＩＢ語とも呼ばれる。以下でさらに説明するように、ｘNはデータインテグリティおよびＬＢＡチェックのためのＤＩＢ語として、さらにＥＣＣ１１４によって行なわれるデータ訂正のクロスチェックのための第１のクロスチェック語、ＸＣＨＫ0として、二重の機能を果たす。（ＤＩＢ語はクロスチェック機能と関連する場合にはＤＩＢ／ＸＣＨＫ0と、または単にＸＣＨＫ0と呼ばれる）。
データインテグリティコードおよびクロックチェックコードの両者を実現するために、ＤＩＢエンコーダ１０４はシーケンサ１０９内に位置付けられたＤＩＢ／ＸＣＨＫ0エンコーダ１１３において実現されるのと同じクロスチェックコードに従って、入来するデータセクタを符号化する。ホストインターフェイス１０１内のＤＩＢエンコーダ１０４とシーケンサ１０９内のＤＩＢ／ＸＣＨＫ0エンコーダ１１３とが同じコードを実現するため、両方の場所で同じエンコーダ回路を利用することができる。データ語｛ｕ0，ｕ1，…ｕ255｝がバッファ１０８に転送されるクロック期間の間に、マルチプレクサ１０６の選択線１０７がデータパスをＦＩＦＯ１０２からバッファ１０８に接続する論理レベルに設定される。転送されるデータセクタのすべてのデータ語がマルチプレクサ１０６を介してバッファ１０８にわたった後に、選択線１０７の論理レベルは加算器１０３の出力をバッファ１０８に接続するよう切換えられる。これによって、例ではＤＩＢ語ｘNである、加算器１０３の出力がバッファ１０８内のデータのセクタに付与され、長さＮ＋１のＤＩＢコード語Ｂ＝｛ｂ0，ｂ1，…ｂN｝が生成され、ここでｂ1＝ｕ1であってｉ＝０ないしＮ−１であり、ｂN＝ｘNである．
ＬＢＡブロック１１８は記憶レジスタ（図示せず）からの初期化値を受けるシーケンシャルカウンタ回路１０５を含む。ＳＣＳＩホストと関連して動作するＳＣＳＩインターフェイスの場合には、たとえば、記憶レジスタは読出または書込コマンドが起動されるときにＳＣＳＩホスト１００から送られるコマンド記述ブロック（Command Description Block（“ＣＤＢ”））を通して初期ＬＢＡ値を受ける。これに代えて、記憶レジスタはマイクロコントローラ１１２からアクセスされ初期化されてもよい。ＬＢＡカウンタ１０５はレジスタからの初期化値を読み、ホスト１００からデータの各セクタが受取られバッファ１０８に転送されるごとにＬＢＡカウントを増分する。
単一の冗長語ｘNがバッファ１０８に記憶されたデータセクタに付与された後に、ＤＩＢコード語がバッファ１０８からバッファコントローラ１１０を介してシーケンサ回路１０９に転送される。シーケンサ１０９に入ると、バッファ１０８からのＤＩＢコード語はマルチプレクサ１２０を通り、従来の態様でデータトランスデューサヘッドにより記憶媒体１２２にシリアルに書込まれる。記憶媒体１２２に書込まれると、ＤＩＢコード語は第１のクロスチェックコード語、Ｃ＝｛Ｃ0，Ｃ1，…ＣN-1，ＣN｝を形成し、ここでｃi＝ｂi、ｉ＝０ないしＮであり、ＣNはクロスチェック語ＸＣＨＫ0である。
バッファ１０８から媒体１２２へ転送されたユーザデータはまたシーケンサ１０９内の並列データパス上をＥＣＣエンコーダ回路１１４、ＸＣＨＫ1１１６およびＤＩＢ／ＸＣＨＫ0エンコーダ１１３にも伝送される。ＥＣＣエンコーダ１１４はまた、データセクタ語が受取られ符号化された後にバッファ１０８からのＤＩＢ語、ｘN点を受取り、これを符号化する。ＸＣＨＫ1１１６エンコーダは、ＸＣＨＫ1（Ｘ）生成多項式に従って受取られたデータセクタ語のみに応答して（ｘN語に応答せずに）、第２のクロスチェック語、ＸＣＨＫ1（図１ではｘN+1で示される）を生成する。データセクタの最後の語、ｂN-1がＸＣＨＫ1回路を通ってクロックされると、冗長ＸＣＨＫ1語、ＸN+1がマルチプレクサ１１５を介してＥＣＣ回路１１４に出力され、ＥＣＣ１１４によって符号化される。同時に、マルチプレクサ１２０は選択線１２３によって切換えられて、ｘN+1が通過しかつ記憶媒体１２２に書込まれることを可能にし、ここでこれはデータセクタ語｛ｃ0，ｃ1，…ｃN-1｝とともに、記憶媒体１２２上に第２の別個のクロスチェックコードを形成する。すなわち｛ｃ0，ｃ1，…ｃN-1，ｃN+1＝ｘN+1＝ＸＣＨＫ1｝である。
ＤＩＢ／ＸＣＨＫ0エンコーダ１１３は、ＬＢＡカウンタ１１１と第１および第２のビットごとのモジュロ２加算器１２５および１２６とを含む、ＤＩＢ／ＸＣＨＫ0機能ブロック１１９内に含まれる。ＤＩＢ／ＸＣＨＫ0エンコーダ１１３はバッファから受取られたデータ語ｂiに応答して冗長語ｄ0’を生成する。シーケンサ１０９内のＤＩＢ／ＸＣＨＫ0エンコーダ１１３がホストインターフェイス１０１内のＤＩＢエンコーダ１０４と同じコードを利用するので、バッファ１０８を介するデータ伝送の間にデ−タエラーが生じていなければ、ｄ0’はｄ0と一致するはずである。しかしながらこのアーキテクチャでは、バッファ１０８からのデータのデータインテグリティチェックを行なうために、シーケンサ１０９内のＬＢＡカウンタ１１１によって保持されるＬＢＡ値はまず初めに第１の加算器１２５においてｄ0’とビットごとに論理和を取って冗長語ｘN’を生成しなければならない。ｘN’語はその後データセクタのすべての語ｂ1がＤＩＢ／ＸＣＨＫ0エンコーダ１１３を介してクロックされ、ＸN’が第２の加算器１２６によってバッファ１０３から受取られた後に、第２の加算器１２６内でバッファ１０８からの冗長語ｘNと比較される。この比較はｘN’とｘNとのビットごとの排他的論理和を取ることによって行なわれる。もしｘN’とｘNとが同じであれば、データはエラーがないと仮定され、データセクタのＬＢＡもまた正しいと仮定される。他方で、もしｘN’とｘNとが同じでなければ、ＤＩＢエラーがマイクロコントローラ１１２に報告され、ホスト１００にデータセクタの再送信を求める等の、適切な訂正活動が行なわれるであろう。
ＬＢＡ情報が冗長語ｘN’およびｘN内に含まれているので、バッファ１０８を介するデータ伝送に関するデータインテグリティエラーに加えて、報告されたＤＩＢエラーはまたＤＩＢ語、ｘNに含まれるＬＢＡと、ある特定のデータセクタのためにシーケンサ１０９においてＬＢＡカウンタ１１１によって供給されるＬＢＡとの不一致によって引起こされたかもしれない。先に延べたように、ＬＢＡエラーはバッファ１０８へのポインタが所望のデータセクタに対し誤ったメモリ位置を指摘することを引起こすソフトウェア符号化エラーによって生じる場合がある。これが生じると、誤ったセクタがバッファ１０８からシーケンサ１０９に転送され、ＬＢＡエラーが起こる。したがってデータインテグリティコード内にＬＢＡ情報を含めることは、システムソフトウェアのデバッグのための便利な鍵を与え、データ転送プロセス全体の信頼性を高める。
シーケンサ１０９内でデータインテグリティおよびＬＢＡ検証テストが行なわれている間に、ＥＣＣエンコーダ回路１１４は｛ｂ0，ｂ1，…ｂN-1，ｂN＝ｘN＝ＸＣＨＫ0，ｂN+1＝ｘN+1＝ＸＣＨＫ1｝のデータ入力を受け、これに応答して予め定められた数のＥＣＣチェックバイト（図１および２では“ＥＣＣ”と示される）を出力する。クロスチェック語ＸＣＨＫ0およびＸＣＨＫ1はともにＥＣＣエンコーダ１１４に入力され、入来するデータセクタともに符号化されるので、ＥＣＣエンコーダ１１４によって生成されたＥＣＣチェックバイトは媒体１２２上に付与されたクロスチェック語とデータ語の両者を保護する。これによってＥＣＣ１１４は記憶媒体１２２から回復されるときにデータ語に生じる。また同様にクロスチェック語に生じるエラーを訂正する能力を得る。
現在好ましい実施例では、ＥＣＣ１１４は各データセクタに応答して１８ＥＣＣチェックバイト（図３ではＥＣＣ［５１７］ないしＥＣＣ［５３４］と示される）と、２個の関連のクロスチェック語とを生成する。これら１８のＥＣＣチェックバイトはマルチプレクサ１２０を通り、すべてのデータ語と２個のクロスチェック語、ＸＣＨＫ0およびＸＣＨＫ1がＥＣＣ１１４によって符号化された後に、図３に示されるようにＸＣＨＫ1語にすぐ続くデータセクタに付与され、シーケンサ１０９内の別個の並列パス上を記憶媒体１２２へ出力される。ＥＣＣチェックバイトがＥＣＣ１１４からクロックされて出ると、マルチプレクサ１２０の選択線１２３の論理状態はＥＣＣチェックバイトが通過し慣用の態様で記憶媒体１２２に書込まれるのが可能となるように切換えられる。
簡単に図３に戻ると、１８のＥＣＣチェックバイトと先に書込まれたデータ語およびクロスチェック語とは記憶媒体１２２上に単一のリードソロモンＥＣＣコードを形成する：｛ｃ0，ｃ1，…ｃN-1，ｃN＝ｘN，ｃN+1＝ｘN+1，ＥＣＣ｝。図３に示されるように、例示の５３４バイトＥＣＣコード語の構造は、５１２バイトのデータ、すなわち１セクタと、これに続くＸＣＨＫ0（ＸＣ［５１３］およびＸＣ［５１４］）ならびにＸＣＨＫ1（ＸＣ［５１５］およびＸＣ［５１６］）と、これに続く１８ＥＣＣバイト、ＥＣＣ［５１７］ないし［５３４］とを含む。
２．読出経路
ここで図２を参照して、読出モ−ドでは、記憶媒体１２２に予め書込まれたＥＣＣコード語を再びリードバックコード語ｃ1’＝｛ｃ0’，ｃ1’，…ｃN-1’，ｃN’＝ＸＣＨＫ0’，ｃN+1’＝ＸＣＨＫ1’，ＥＣＣ’｝として読出し、シーケンサ１０９へ入力する。シーケンサ１０９では、回復されたデータ語ｃ0’、ｃ1’、…ｃN-1’と、ＸＣＨＫ0’語ＸN’が、バッファ１０８へある経路により直接的に伝えられ、その先の転送に備えて一時的に記憶される。この転送と同時に、第２のクロスチェックコード語｛ｃ0’，ｃ1’，…ｃN-1’，ｃN+1’＝ＸＣＨＫ1’｝が、ＸＣＨＫ1ブロック１１６へ入力され、かつＥＣＣコード語ｃi’全体がＥＣＣ１１４へ入力されて、ＥＣＣの残りの部分を回復しかつシンドロームを発生させる。ＸＣＨＫ1ブロック１１６は、ＥＣＣ１１４により行なわれた訂正が適正に実行されているという統計的確率を増やすために使用される、回復された第２のクロスチェックコード語に基づきクロスチェックシンドロームを発生する。
媒体１２２から回復された第１のクロスチェックコード語、｛ｃ0’，ｃ1’，…ｃN-1’，ｃN’＝ＸＣＨＫ0’｝は、ＤＩＢ／ＸＣＨＫ0ブロック１１９内のＤＩＢ／ＸＣＨＫ0エンコーダ１１３において入力として受取られ、同ブロックはＬＢＡカウンタ１１１並びに第１および第２のビット毎のモジュロ２加算器１２５および１２６を含む。ＤＩＢ／ＸＣＨＫ0エンコーダ１１３はホストインターフェイス１０１内のＤＩＢエンコーダ１０４において冗長語ｄ0を発生するために使用するのと同じコードに従い、受取ったデータ語ｃ0’，ｃ1’，…ｃN-1’を再符号化することによって復号化する。第１の加算器１２５は、シーケンサ１０９の特定のデータセクタに関連するＬＢＡ値のうちの下位１６ビットでｄ0”をビット毎にＸＯＲしてｘN”を生成する。その目的は以下に間もなく明らかになるが、ＸＣＨＫ0ブロック１１３も受取った第１のクロスチェックコード語｛ｃ0’，ｃ1’，…ｃN-1’，ｃN’｝全体に基づいてクロスチェックシンドローム値を発生する。
ＬＢＡカウンタ１１１は、媒体１２２からシーケンサ１０９が受けたデータセクタについて増分ＩＢＡカウントを維持し、かつマイクロコントローラ１２２により初期設定値を付与され得る。書込経路におけるＬＢＡカウンタ１０５の場合と同様、その初期設定値は、ＳＣＳＩ読出コマンドの設定の際にＣＤＢを介して受取ることが可能である。再発生された冗長語ｘN”は、第１の加算器１２５から第２の加算器１２６の入力へ出力され、そこで同時に記憶媒体１２２から第２の加算器１２６により受取られたｘN’と比較される。加算器１２６は、ｘN’をｘN”とを、ビット毎にＸＯＲすることによって比較する。ノンゼロの結果は、１以上のデータエラーが発生したかまたはＬＢＡエラーが発生したことを示す。
データエラーが検出された際には、クロスチェック機能を正しく行なうため、クロスチェックシンドロームを更新するかまたは再構築する必要がある（これは、これらがＥＣＣ１１４が誤ったデータであると判別したものに基づいているためである）が、このことはバッファ１０８ｘN’内のＤＩＢ語には当てはまらない。これは、ｘN’が誤ったデータに基づいている可能性がある、ＤＩＢ／ＸＣＨＫ0エンコーダ１１３の冗長出力として取り込まれるのではなく、記憶媒体１２２から直接バッファ１０８へ書込まれることが好ましいためである。この構造上の特徴と、以下に説明するようなバッファ１０８内のＤＩＢ語に対してエラーを検出して訂正するＥＣＣ１１４の能力とによって、ｘN’は記憶媒体１２２から直接的にバッファ１０８へ運ばれかつバッファ１０８を介するホストインターフェイス１０１への戻りデータ経路のためのＤＩＢ語として使用されることが可能となる。重要なことは、ＤＩＢ語をシーケンサ１０９内の読出経路で再発生してｘN’と比較する必要があるのはこのコードのＬＢＡ検証に関する局面のみであるという点である。このコードは、データインテグリティコードとしてのみ作用し、ＬＢＡ検証についてはさらに役割を果たさないのであれば、このテストを省くことができる。
ＥＣＣ１１４保護データエラーが検出されると、ＥＣＣ１１４は、データエラーがコードの訂正能力の範囲内にあることを条件として、バッファ１０８内のこれらデータエラーを訂正しようとする。訂正プロセスを開始するために、ＥＣＣ１１４は、記憶媒体１２２から回復したコード語に基づきシンドローム値を計算する。ＥＣＣ１１４は、それからこのシンドロームを解いて、データエラーのエラー場所およびパターン値を決定する。これに関しては、クロスチェック語ＸＣＨＫ0およびＸＣＨＫ1がＥＣＣ１１４によりコードされているため、ＥＣＣ１１４がクロスチェック内およびデータ内のエラーを訂正する能力を有している点を想起されたい。この能力は、記憶媒体１２２からのＸＣＨＫ0’語がホストインターフェイスへの戻り経路のためのＤＩＢ語ｘN’としてバッファ１０８へ転送されるため重要であり、かつシステムが適正に作動していれば、この語が、保護するよう設計されているデータセクタおよびセクタＬＢＡを正確に特徴づける必要がある。
ここで再び、データエラーが検出されたと想定して、ＥＣＣモジュール１１４は、エラー場所およびパターン値を計算し、２つの個別のクロスチェックコードを用いてＥＣＣ訂正が適正であるかどうかを決定する。このプロセスには、ＸＣＨＫ0１１３およびＸＣＨＫ1１１６が発生したシンドロームを更新して、ＥＣＣ１１４が決定した訂正値を適正に反映するようにする工程が含まれる。ＸＣＨＫ0およびＸＣＨＫ1が再計算したシンドロームがいずれも０に等しい場合、ＥＣＣ１１４は、バッファ１０８内のデータ語（および必要であればＤＩＢ語ｘN’）を適正に訂正したと仮定する。実際には、この訂正を、マイクロコントローラ１１２により行なうことが可能で、同コントローラはＥＣＣ１１４からエラー場所およびエラー値を受取った後、バッファ１０８内の誤ったデータバイト（または場合に応じてＤＩＢバイトｘN’）にアクセスし、かつ誤ったバイトを訂正値でＸＯＲしてこのバイトを訂正することによって、バイトエラーを訂正する。バイトを訂正するという意味でこのエラー訂正の仕組みを説明すれば、バイト毎のリード・ソロモンＥＣＣコードを使用することになると仮定されている。しかしながら、たとえば１６ビット記号コード等の異なる記号長ＥＣＣコードを使用してもよい。
一方、ＸＣＨＫ1シンドロームのみが０に等しく、ＸＣＨＫ0シンドロームが０でなければ、ＥＣＣ１１４がエラー訂正値を適正に決定しかつ比較誤りの原因がＥＣＣエラーではなくＬＢＡである可能性が高い。この場合、ＤＩＢエラーがマイクロコントローラ１１２へ報告された後、システムソフトウェアにより適当な訂正動作がとられ得る。
図２に示す読出経路をさらに参照して、先程の説明では、ＥＣＣ１１４が記憶媒体１２２からシーケンサ１０９へ転送されたデータ内に１以上のエラーを検出したと仮定していた。記憶媒体１２２からバッファ１０８へ転送されるデータセクタまたはクロスチェック／ＤＩＢ冗長度内にＥＣＣが検出したエラーがなく、かつＤＩＢエラーが、ＤＩＢ／ＸＣＨＫ0ブロック１１９により検出された場合には、記憶媒体１２２から読出されたデータセレクタのＬＢＡとシーケンサ１０９内のＬＢＡカウンタ１１１により維持されるこのセクタに関するＬＢＡとの間に不一致が発生したと仮定することができる。これは、データの誤ったセクタが記憶媒体１２２から読出されたかまたはＬＢＡカウンタ１１１からのＬＢＡが誤っていることを示す。このエラーから回復を図るため、マイクロコントローラ１１２が実行するファームウェアにより、ＤＩＢエラーが報告されなくなるかまたは回復不能なＬＢＡエラーが発生したと決定されるまで、記憶媒体１２２からのセクタの１またはそれ以上の再読出を開始することが可能である。
データおよびＤＩＢ冗長度がバッファ１０８へ転送されかつ上に述べたようないずれかの必要なエラー訂正または再読出が行なわれた後、データセクタ語ｂ0’、ｂ1’、…ｂN-1’、次に添付されたＤＩＢ語ｘN’と、バッファコントローラ１１０を介してバッファ１０８からホストインターフェイス１０１へ順次クロックされる。ホストインターフェイス１０１内で、データセクタ語は、ホスト１００へ伝えられ（ＦＩＦＯ１０２を介して）、かつｘN’の前のデータ語が並列な経路により直接ＤＩＢエンコーダ１０４へ伝えられる。ホストインターフェイス１０１内のデータセクタのＬＢＡおよびデータインテグリティは、上に述べたプロセスと実質的に類似する態様でＤＩＢ１０４により検証され得る。
ＤＩＢエンコーダ１０４は、シーケンサ１０９内のＤＩＢ／ＸＣＨＫ0エンコーダ１１３において使用される同じクロスチェック符号化アルゴリズムを用いて、データ語｛ｂ0’，ｂ1’，…ｂN-1’｝に基づき、語ｄ0”を再発生する。再発生した語ｄ0”は、ビット毎モジュロ２加算器１０３におけるＬＢＡカウンタ１０５により付与されるＬＢＡの下位１６ビットで、ビット毎にＸＯＲされて、ＬＢＡ、ｘN”を含む冗長語が生成される。ＬＢＡカウンタ１０５は、上に説明したのと同様の態様でマイクロコントローラ１１２により初期化され、バッファ１０８からホストインターフェイス１０１へエントリする特定のデータセクタについてＬＢＡの増分カウントを維持する。ｘN”語は、第２のビット毎モジュロ２加算器１２７へ入力されて、同じクロックサイクルの間に加算器１２７の入力としてバッファ１０８から到着するｘN’とビット毎に比較される。ｘN”とｘN’が等しければ、データは正しいと仮定されかつデータセクタのＬＢＡも正確であると仮定される。一方、ｘN”とｘN’が等しくなければ、ＤＩＢエラーがマイクロコントローラ１１２に報告され、データの再読出を要求する等の適切な訂正動作がとられ得る。
３．ＤＩＢエンコーダ／クロスチェックシンドローマ組合せ回路の実現
図４は、現在好ましいエンコーダ／シンドローマ・チェッカ組合せ回路２００を示し、同回路は、ホストインターフェイス１０１内にＤＩＢブロック１１８を、かつシーケンサ１０９内にＤＩＢ／ＸＣＨＫ0およびＸＣＨＫ1ブロック１１９および１１６をそれぞれ実現するのに必要な回路系を含む。検分することによって明らかであるが、この特定の実施例の回路２００は、実際には、２つの個別のクロスチェックコード語を構成する２つの個別の符号化式を実現するのに使用される２つの別個の回路である。
ホストインターフェイス１０１内のＤＩＢブロック１１８により行なわれるＤＩＢ符号化／復号化およびチェック動作を実現するために、好ましくは回路２００のうち図４の点線「Ａ」より上の部分（「上半分」）のみが使用される。逆に、２つの個別のクロスチェックコード語に基づきＥＣＣプロセスにおいて使用されるクロスチェックシンドロームを発生しかつ本件において教示されるホストインターフェイス１０９においてＬＢＡ検証を行なうために、回路２００の全体を、ＤＩＢ／ＸＣＨＫ0ブロック１１９およびＸＣＨＫ1ブロック１１６としてシーケンサ１０９内に実現する。
シーケンサ１０９またはホストインターフェイス１０１のいずれに実現されるかに拘わらず、本例の回路２００は、１６ビットにより、すなわちワード毎にＧＦ（２16）によるリード・ソロモンコードに従い語長データを処理する一方で、バイトクロッキング信号を受けるようになっている。バイトクロック信号を付与された際に受取ったデータセクタを適当に処理するために、回路２００内の記憶レジスタ２１７、２１８、２１９および２２０は、対応する入力マルチプレクサ２３５、２３６、２３７および２３８を有する構成になっている。動作の際に、レジスタ２１７、２１８、２１９および２２０は、共通のクロック信号線２２６上をバイトクロック信号（byteclk）を受ける。１つおきのbyteclk毎に、対応する入力マルチプレクサ２３５、２３６、２３７および２３８がそれぞれの選択線を介して能動化され、２つのバイトクロックサイクルの後データのうちの１語（すなわち２バイト）がそれぞれの記憶レジスタに保持されるようになっている。たとえば、ｘｃｋ０ｅｎａｂおよびｘｃｋ１ｅｎａｂ信号がマルチプレクサ２３５および２３７のそれぞれの選択入力として線２０９および２１０上を供給されることによって、実現されている特定の１６ビットコードに従いデータ語をレジスタ２１７および２１９を介してクロックすることができる。
ホストインターフェイス１０１内のＤＩＢブロック１１８としての回路２００の動作について、ここでエンコーダとしてのその書込経路動作およびデコーダおよびチェッカとしてのその読出経路動作を参照しながら、別個に説明することにする。
書込モ−ドの際に、ホスト１０１からのユーザデータｕiは、wordinptバス２０２上で受けられ、ＸＯＲゲートアレイ２０３の入力へ付与される（図４の太い線は語の幅、すなわち１６ビットデータバスを示し、細い線は１本の信号線を示す）。データセクタの始めおよびそのセクタの符号化プロセスの始めは、線２０１上のｗｏｒｄｚｅｒｏ信号のアサート（論理レベル「１」への立上がり）により示される。この信号はＡＮＤゲートアレイ２１５の反転入力に供給され（図示を簡単にするためにＡＮＤゲートは１つしか図示していない）、第１の受取られたデータ語ｕ0に、記憶レジスタ２１７を初期化する。ｗｏｒｄｚｅｒｏのアサートによって、ＡＮＤゲートアレイ２１５はフィードバック経路２１２を不能化して、記憶レジスタ２１７をｕ0に初期化するゼロ出力を生成する。
次のＮ−１語については、線２０１上のｗｏｒｄｚｅｒｏ信号がデアサートされてフィードバック乗算が可能となる。この間、線２０８上のｌａｓｔｗｏｒｄ信号についてもデアサートされ、ユーザデータｕiがＸＯＲゲートアレイ２０３の入力へ伝えられて、そこでこれらはモジュロ２で、フィードバック経路２１２上の値に加算される。このモジュロ２の加算結果は、レジスタ２１７を介してクロックされ（線２０９上をマルチプレクサ２３５の選択線まで供給されるｘｃｋ０ｅｎａｂ信号に従い）、かつガロア体乗算器２２５において固定の値βで乗算されて、以下のようになる。
0003904237.tif 000002
これはｘｃｋ０ｗｏｒｋバス２１１上に得られる。
符号化されるユーザデータのうち最後の語、すなわちｕN-1がＸＯＲゲートアレイ２０３に入力されると、ｌａｓｔｗｏｒｄ信号が線２０８を介してＮＡＮＤゲートアレイ２３１の入力へアサートされる。これによって、ＬＢＡ＿ｗｏｒｄ信号バス２０７上のＬＢＡ語がＸＯＲゲートアレイ２３２の入力へ伝えられて、そこでデβ乗算器２２５の出力とビット毎にＸＯＲ（モジュロ２で加算）され、これによりｘｃｋ０ｗｏｒｋバス２１１上に以下のものが得られる。
0003904237.tif 000003
（この明細書中において式にある「＋」は、モジュロ２の加算を示す）。こうして、データのうちＮ語すべてが処理されると、ＬＢＡ、ｘNを含む冗長語がｘｃｋ０ｗｏｒｋ信号バス２１１上に発生されかつ出力される。先程も説明したとおり、ｘNはマルチプレクサ１０８を介して伝えられ、バッファ１０８に予め記憶されたデータ語ｕi（ｉ＝０からＮ−１）に添付され、それでＤＩＢコード語を生成する。
ＬＢＡが０の場合、ｘNの選択は、バッファ１０８のデータの符号化されたブロック、すなわち
｛ｂ0’，ｂ1’，…ｂN-1’，ｂN｝＝｛ｕ0，ｕ1，…ｕN-1，ｘN｝
が、以下の形式の生成多項式を伴うＧＦ（６５５３６）のリード・ソロモンコード語である。
Ｇ（ｚ）DIB/XCHKO＝ｚ−β
ここでβは６５５３６フィールド要素（ＧＦ（２16））を有する有限ガロア体の原始元でありかつ０ｘ１０１に等しい。
読出モ−ドの際に、ホストインターフェイス１０１内のＤＩＢブロック１１８としての回路２００の動作は、ｗｏｒｄｉｎｐｔデータバス２０２がバッファ１０８からのリードバック語ｂi’（ｂi’＝｛ｂ0’，ｂ1’，…ｂN-1，ｂN＝ｘN’｝およびＬＢＡを含みかつデータインテグリティチェックが行なわれる点を除いて同じである。ＤＩＢ語のうちのユーザデータ部分、すなわちバッファされたデータｂi’の最初のＮ語が回路２００の上半分によりクロックされた後、バッファ１０８からのＤＩＢ語ｘN’＝ｂN’がｗｏｒｄｉｎｐｔバス２０２上のＸＯＲゲートアレイ２０３へ入力される。同じ語クロックサイクル内で、ＬＢＡ＿５バス２０７上のＬＢＡ語が線２０８上のｌａｓｔｗｏｒｄ信号のアサートに従いＡＮＤゲートアレイ２３１を介してＸＯＲゲートアレイ２０２の入力へ伝えられる。ＬＢＡ語はβ乗算器２２５の出力とモジュロ２で加算され、バッファされたコード語の最初のＮ語（データ部分）に基づき再発生ＤＩＢ語ｘN”を創出する。
ｘN’がＸＯＲゲートアレイ２０３に入力されかつフィードバック経路２１２上に供給される、再発生ＤＩＢ語ｘN”を、モジュロ２で加算されると、この同じ最後の語クロックサイクルにわたって、リードバックバッファードコード語ｂiについてＬＢＡおよびデータインテグリティテストが行なわれる。バッファ１０８から入来のＤＩＢ語ｘN’をｘN”にモジュロ２で加算することによって、正しく受取られたコード語が安全に仮定される、２つの値が等価な場合に、０の結果を生じる。ノンゼロ検出器２２２を用いてノンゼロの結果についてＸＯＲゲートアレイ２０３の出力をテストし、ノンゼロの結果は、発生が希な、ＬＢＡエラーまたはデータインテグリティエラーいずれかであることを示す。ノンゼロの結果はマルチプレクサ２３６の入力と記憶レジスタ２１８へ線２４０を介してｄｉｃｅｒｒｏｒ信号として報告されるが、これらマルチプレクサと記憶レジスタとは組合せられて選択線２３３を介してマルチプレクサ２３６へ供給されるｘｃ０ｃｈｅｃｋ信号に従いｄｉｃｅｒｒｏｒ信号を保持するためのラッチを構成する。ｄｉｃｅｒｒｏｒ信号は、記憶レジスタ２１８の出力でｘｃ０ｅｒｒｏｒ線２２８上でシーケンサ１０９およびマイクロコントローラ１１２に対して入手可能にされる。マイクロコントローラ１１２は、たとえばシーケンサ１０９にデータセクタの再読出を要求する等の、適切な訂正動作をとる能力を持つようプログラムされていることが好ましい。シーケンサ１０９もマイクロコントローラ１１２とは無関係に、訂正動作をとる能力を備え得る。
シーケンサ１０９内に実現される回路２００の動作についてここで説明することにする。先程も指摘したとおり、回路２００の上半分と下半分は両方ともシーケンサ１０９内に含まれることが好ましく、上半分がＤＩＢ／ＸＣＨＫ0ブロック１１９として機能しかつ下半分がＸＣＨＫ1ブロック１１６として機能する。回路２００の上半分下半分共にシーケンサ１０９内に実現されているため、ｗｏｒｄｉｎｐｔバス２０２はＸＯＲゲートアレイ２０３および２０５両方に接続されており、これらゲートアレイが回路２００の上半分および下半分それぞれのための入力を構成する。
書込モ−ドの間、バッファ１０８からのＤＩＢコード語ｂ1全部がｗｏｒｄｉｎｐｔバス２０２を介して回路２０２へクロックされる。回路２０２の上半分のＤＩＢ／ＸＣＨＫ0は、ホストインターフェイス１０１内のＤＩＢ／ＸＣＨＫ0ブロック１１８において実現されるのと同じ符号化式に従うｂ1のＮ個の語すべてを有しかつｘN’としてＤＩＢ語を再発生させる。ＬＢＡおよびデータインテグリティテストを、ホストインターフェイス１０１の読出経路における回路２００の上半分の動作に関して先程説明したのと同じやり方で、バッファ１０８からのＤＩＢ語ｘNと再発生させたＤＩＢ語ｘN’との比較に基づき実行する。比較誤りにより生じるエラー信号を、記憶レジスタ２１８にラッチして、先程と同様マイクロコントローラ１１２およびシーケンサ１０９が入手できるようにしてもよい。
シーケンサ１０９の書込経路におけるＸＣＨＫ1エンコーダ１１６としての回路２００の下半分の動作は、異なる符号化式が使用されるという点を除いて、インターフェイス１０１における書込モ−ドの際のＤＩＢ／ＸＣＨＫ0エンコーダ１０４としての回路２００の上半分の動作と同じである。チェッカとしての機能も果たししたがってこの機能を行なう冗長語ｘNを受ける必要がある、回路２００の上半分により受取られる入力とは対照的に、バッファされたコード語のデータ部分のみ、すなわちｂiの最初のＮ語のみが好ましくはｗｏｒｄｉｎｐｔバス２０２を介して入力ＸＯＲゲートアレイ２０５へ入力される。
バッファからの最初の語すなわちｂ0がＸＯＲゲートアレイ２０５の入力へ付与されると、符号化動作が開始される。ｂ0が到着すると同時に、ｗｏｒｄｚｅｒｏ信号がＡＮＤゲートアレイ２１６の反転入力に対し線２０１上でアサートされて、フィードバック線２１３を０にしかつ記憶レジスタ２１９をｂ0に初期化する。次のＮ−１語については、線２０１上のｗｏｒｄｚｅｒｏ信号がデアサートされかつ各入来データ語ｂIがＸＯＲゲートアレイ２０５内にクロックされ、マルチプレクサ２３７の選択入力への線２１０介して付与されるｘｃｋｌｅｎａｂ信号に従いフィードバック経路２１３の内容および記憶レジスタ２１９に記憶された値にモジュロ２で加算される。各クロックサイクル毎に、フィードバック経路２１３の内容は、ガロア体乗算器２２７においてβ2を乗算された後の記憶レジスタ２１９のクロックアウトされた以前の内容を含む。
Ｎ語クロックサイクルすべてが完了すると、第２のクロスチェック語ＸＣＨＫ1＝ｘN-1が発生され、ｘｃｋｌｗｏｒｋバス２１４上に入手可能とされる。
0003904237.tif 000004
このＸＣＨＫ1値は、ＥＣＣブロック１１４の入力にスティアされかつ媒体１２２上に記憶されたデータセクタｃiにも添付されて第２の個別のクロスチェックコード語を構成する。ｘN+1の選択は、媒体上に記憶された第２のクロスチェックコード語、すなわち
｛ｃ0’，ｃ1’，…ｃN-1，ｃN+1｝＝｛ｂ0，ｂ1，…ｂN-1，ｘN+1｝
が、以下の形式の生成多項式を伴うＧＦ（６５５３６）のリード・ソロモンコード語であることを想定し、
Ｇ（２）XCHK1＝ｚ−β2
ここでβ2はＧＦ（２16）の原始元でありかつ０ｘ１８０に等しい。
シーケンサ１０９の読出経路における回路２００の動作についてここで説明することにする。読出モ−ドの際に、媒体１２２からの２つのクロスチェックコード語が入力ＸＯＲゲートアレイ２０３および２０５のそれぞれの入力に向けられ、ＸＯＲゲートアレイ２０３が第１のリードバッククロスチェック語｛ｃ0’，ｃ1’，…ｃN-1，ｃN’＝ＸＣＨＫ0’｝を受け、かつＸＯＲゲートアレイ２０５が第２のリードバッククロスチェックコード語｛ｃ0’，ｃ1’，…ｃN-1，ｃN+1’＝ＸＣＨＫ1’｝を受ける。これら２つの個別のクロスチェックコード語を含む回復されたデータ語および冗長度は、先程説明したのと同じ態様で、回路２００のそれぞれ上部および下部を介してクロックされる。
最後の入力語に続く語クロックサイクルで、回路２００のそれぞれ上下半分ずつによりフィードバック乗算が行なわれてｘｃｋ０ｓｙｎｄバス２０４上に第１のクロスチェックシンドローム値Ｓ0が生成される。
0003904237.tif 000005
およびｘｃｋ０ｓｙｎｄバス２０６上に以下の第２のクロスチェックシンドローム値Ｓ1が生成される。
0003904237.tif 000006
ノンゼロ検出器２２２が検出する、Ｓ1シンドロームについてのノンゼロシンドローム値は、記憶の際に１以上のデータエラーが発生したことを示しており、かつノンゼロデテクタ２２４が検出する。Ｓ0シンドロームについてのノンゼロ値は、１以上のデータエラーおよび／またはＬＢＡエラーが発生したことを示す。これは、Ｓ0シンドロームがフィードバックＤＩＢ／ＸＣＨＫ0’語に基づき計算され、この語がＬＢＡ情報を含んでいることが好ましく、それによりシーケンサ１０９におけるＬＢＡエラーが、計算されたＳ0シンドローム値において自明となるようになっている。
ノンゼロＳ0シンドロームがノンゼロ検出器２２２により検出されると、エラー信号は記憶レジスタ２１８にラッチされかつｘｃ０ｅｒｒｏｒ線２２８上を報告されることが可能である。同様に、ノンゼロ検出器２２４により検出されたノンゼロＳ1シンドロームがマルチプレクサ２３８の選択線２３４上を供給されかつ線２３０上をｘｃｌｅｒｒｏｒ信号として報告されるｘｃｌｃｈｅｃｋ信号に従いマルチプレクサ２３８とシフトレジスタ２２０とを組合せたものによりラッチされ得る。
シーケンサ１０９内の回路２００の上半分は随意に読出経路ＬＢＡ検証テストを行なう。回路２００の上半分および下半分は各々符号器およびシンドローマ双方の機能を果たすので、入来の第１のクロスチェック語のデータ部分に基づくＤＩＢ語を、回路２００がクロスチェックシンドロームを発生する同じ時期に、発生させてかつ媒体１２２からのＤＩＢ／ＸＣＨＫ0’と比較することができる。
実現されると、このＬＢＡチェックは、乗算器２２５の出力が図２に示す冗長度ｄ0’に対応すると最後のワードクロックサイクルで実行される。ｄ0”冗長度はＸＯＲゲートアレイ２３２によりＬＢＡ＿語バス２０７上を付与されるＬＢＡ語にモジュロ２で加算されて、再発生ＤＩＢ語ｘN”を創出する。再発生語ｘN”はその後フィードバックバス２１２上を入力ＸＯＲゲートアレイ２０３へフィードバックされて、ビット毎に語ｘN’＝ＸＣＨＫ0’と比較されるが、このｘN’＝ＸＣＨＫ0’は同時にｗｏｒｄｉｎｐｔバス２０３上をＸＯＲゲートアレイ２０３へ入力されるものである。ノンゼロ検出器２２２が検出するこの比較の結果がノンゼロであれば、エラー信号が、先程も説明したとおり、シーケンサ１０９および／またはマイクロコントローラ１１２へ報告され得る。
回路２００へのデータ経路論理は、シンドロームＳ0が媒体１２２から再び読出される第１のクロスチェックコード語に基づいて計算されることを規定する。
｛ｃ0’，ｃ1’，…ｃN-1’，ｃN’｝
また、シンドロームＳ1が媒体１２２から再び読出された第２のクロスチェックコード語に基づき計算されることを規定する。
｛ｃ0’，ｃ1’，…ｃN-1’，ｃN+1’｝
４．ガロア体拡大体演算
回路２００のガロア体乗算器２２５および２２７とガロア体加算器とによって行なわれる乗算および加算はＧＦ（２16）のＧＦ（２8）部分体に対して拡大体ごとに行なわれる。たとえば、ここで教示されるような乗算を行なうためにガロア体のより小さい部分体を用いると、必要とされる論理を簡略化し、非拡大体直接乗算器設計に対する実行ゲートカウントを低減するという点で著しい利点が与えられる。目下好ましいＧＦ（２16）は以下の部分体の拡大体として説明される。
ＧＦ（２4）はＧＦ（２）の拡大体であり、γ1＝０ｘ０２をＧＦ（２4）の原始元として用いて、ＧＦ（２）で既約の、多項式Ｐ（Ｘ）＝Ｘ4＋Ｘ＋１によって生成される。
ＧＦ（２8）は、ＧＦ（２4）で既約の、多項式Ｐ（Ｚ）＝Ｙ2＋Ｙ＋ｆ0を用いて規定されるＧＦ（２4）の拡大体であり、ここで、ｆ0＝８であり、α1＝０ｘ１２がＧＦ（２8）の原始元である。
拡大体ＧＦ（２16）はＰ（Ｚ）＝Ｚ2＋Ｚ＋ｇ0によって規定される。ここで、ｇ0＝０ｘ８１であり、β1＝０ｘ１０１がＧＦ（２16）の原始元である。ガロア体拡大体理論の機構のさらなる検討のためには、その開示が全体として引用によりここに援用される「１０ビットリードソロモンエラー訂正モジュールのための専用ＧＦ−ＡＬＵアーキテクチャ」（“Dedicated GF-ALU Architecture for 10-bit Reed-Solomon Error Correction Module”）と題された、同時係属中で共通の譲受人に譲渡された出願連続番号第                    号を参照されたい。
Verilogコードリスト
以下のVerilogプログラムは、図４において機能レベルで示されたエンコーダ／シンドローマ・チェッカ組合せ回路２００を統合するために必要なプログラムコードを示す。このコードリストでは、「ｘ」が１６進法（基底１６）を意味し、「ｂ」が２進法（基底２）を意味し、「ｄ」が１０進法（基底１０）を意味し、「！」がノット（not）を意味し、「＆」が論理ＡＮＤを意味し、「−」が論理ＮＯＴまたは反転演算を意味するという慣行が用いられる。
0003904237.tif 000007
0003904237.tif 000008
0003904237.tif 000009
0003904237.tif 000010
0003904237.tif 000011
この発明の実施例をこのように説明したので、この発明の目的が十分に達成されたことがここで認識され、この発明の構成上の多くの変化と大きく異なる実施例および応用とがこの発明の精神および範疇から逸脱しないことが当業者には理解されるであろう。ここにおける開示および説明は純粋に例示的なものであり、いかなる意味合いにおいても限定的であるとはみなされない。
【図１】
0003904237.tif 000012
【図２】
0003904237.tif 000013
【図３】
0003904237.tif 000014
【図４】
0003904237.tif 000015