(57)【要約】【課題】  埋め込みパリティ行列生成器を提供する。【解決手段】  任意のデータ幅のデータワードに対するパリティ行列を生成するように構成された埋め込みパリティ行列生成器と、パリティ行列に基づいてデータワードに冗長ワードを追加するように構成されたエンコーダと、エンコーダと結合されて、エンコーダからデータワード及び冗長ワードを受け取るように構成された副回路と、副回路と結合されて、副回路からデータワード及び冗長ワードを受け取ることと、パリティ行列に基づいて、データワード内にエラーがあれば検出することと、を行うように構成されたデコーダと、を含む回路。【選択図】図１Ａ
2017216677.tif 000002
【特許請求の範囲】
【請求項１】
任意のデータ幅のデータワードに対するパリティ行列を生成するように構成された埋め込みパリティ行列生成器と、
前記パリティ行列に基づいて前記データワードに冗長ワードを追加するように構成されたエンコーダと、
前記エンコーダと結合されて、前記エンコーダから前記データワード及び前記冗長ワードを受け取るように構成された副回路と、
前記副回路と結合されて、前記副回路から前記データワード及び前記冗長ワードを受け取ることと、前記パリティ行列に基づいて、前記データワード内にエラーがあれば検出することと、を行うように構成されたデコーダと、
を含む回路。
【請求項２】
前記副回路は、メモリ、レジスタ、バス、及びインタフェースからなる副回路群から選択される、請求項１に記載の回路。
【請求項３】
前記パリティ行列生成器は、前記エンコーダ及び前記デコーダの両方に埋め込まれる、請求項１に記載の回路。
【請求項４】
前記デコーダは更に、前記パリティ行列に基づいて前記データワードを訂正するように構成されている、請求項１に記載の回路。
【請求項５】
前記パリティ行列生成器は更に、前記パリティ行列を生成することにより、前記デコーダが、前記データワード内にシングルビットエラーがあれば訂正することと、前記データワード内にダブルビットエラーがあれば検出することと、最大３ビットのエラーを検出するが訂正しないことと、を可能にするように構成されている、請求項１に記載の回路。
【請求項６】
前記パリティ行列生成器は更に、前記パリティ行列を、前記データワードと前記冗長ワードとを合わせた幅が、バランシングされて非対称であるパリティ行列と等しくなることを可能にする最小個数の変更ビットとともに生成するように構成されている、請求項１に記載の回路。
【請求項７】
前記パリティ行列生成器は更に、バランシングベクトルに従ってバランシングされた列合計を含む前記パリティ行列を生成するように構成されている、請求項１に記載の回路。
【請求項８】
前記パリティ行列生成器は更に、前記パリティ行列の列合計に対するバランシング又はディスバランシングの指定が実行可能かどうかの高速試験を実施するように構成されている、請求項１に記載の回路。
【請求項９】
前記パリティ行列生成器は更に、バランシングベクトルに従ってバランシングされた列合計を含む前記パリティ行列を生成して、列合計の差が１より大きくなるようにディスバランシングするように構成されている、請求項１に記載の回路。
【請求項１０】
前記パリティ行列生成器は更に、前記冗長ワードの必要最小限の幅を自動的に計算するように構成されている、請求項１に記載の回路。
【請求項１１】
前記パリティ行列生成器は更に、前記パリティ行列を、対称であるように生成するように構成されている、請求項１に記載の回路。
【請求項１２】
前記パリティ行列生成器は更に、奇数及び偶数の行ハミング重みを有し、非対称形の場合には前記パリティ行列と同じコードワード幅を有する、制約される部分行列に対して対称であるように前記パリティ行列を生成するように構成されている、請求項１に記載の回路。
【請求項１３】
前記パリティ行列生成器は更に、データ幅を保全しながら非対称パリティ行列に最小限の数の「１」を追加することによって、前記パリティ行列を、対称であるように生成するように構成されている、請求項１に記載の回路。
【請求項１４】
前記パリティ行列生成器は更に、前記パリティ行列のＸＯＲツリー深さが所定の限界値より小さくなるまで前記パリティ行列に「１」を追加することにより、前記パリティ行列のバランシングを行うように構成されている、請求項１３に記載の回路。
【請求項１５】
前記パリティ行列生成器は更に、ＸＯＲツリー深さが所定値を下回るように、ちょうど十分な量だけ前記冗長ワードの幅を増やすように構成されている、請求項１４に記載の回路。
【請求項１６】
前記パリティ行列生成器は更に、所定の行ハミング重みのセットを有する前記パリティ行列を生成するように構成されている、請求項１に記載の回路。
【請求項１７】
埋め込みパリティ行列生成器により、任意のデータ幅のデータワードに対するパリティ行列を生成するステップと、
エンコーダにより、前記パリティ行列に基づいて前記データワードに冗長ワードを追加するステップと、
前記エンコーダと結合された副回路により、前記エンコーダから前記データワード及び前記冗長ワードを受け取るステップと、
前記副回路と結合されたデコーダにより、前記副回路から前記データワード及び前記冗長ワードを受け取るステップと、
前記デコーダにより、前記パリティ行列に基づいて、前記データワード内にエラーがあれば検出するステップと、
を含む方法。
【請求項１８】
前記パリティ行列生成器により、先頭が「１」である行と先頭が「０」である行とを有する２つの部分行列を生成するステップと、
前記パリティ行列生成器により、前記パリティ行列を再帰的にバランシングして、バランシングされたパリティ行列にするステップと、
を更に含む、請求項１７に記載の方法。
【請求項１９】
前記パリティ行列を生成する前記ステップは、
個別のサブデータ幅、行ハミング重み、バランシングベクトル、及び制約パターンを有する、制約される副構成を再帰的に生成するステップ
を含む、請求項１７に記載の方法。
【請求項２０】
前記パリティ行列を生成する前記ステップは、
様々な行ハミング重み及び／又は制約パターンを有する部分行列を再区画するステップと、
前記部分行列をマルチバランシングするステップと、を含み、
最初の非対称なパリティ行列が対称なパリティ行列に変換される、
請求項１７に記載の方法。
【発明の詳細な説明】
【背景技術】
【０００１】
内容がセーフティクリティカルであるメモリ及びレジスタは、エラーの検出及び訂正により保護される。パリティ行列は、コードワードが満たすべき線形関係を記述するものであり、個別のメモリ及びレジスタだけに関して導出されてきた。従って、新たなデータ幅を有するメモリが必要になると、必ず新しいパリティ行列が導出されてチップ設計に追加される。チップ設計には、メモリサイズごとにあらかじめ設計されたパリティ行列の集合体が含まれる。
【０００２】
別のアプローチでは、あらかじめ設計されたパリティ行列が、データ幅に対応する部分行列を有する。このアプローチは、あらかじめ設計されたパリティ行列が１つだけである点でシンプルであるが、実際に使用される部分行列は、幾つかの固定ワード長を除き、最適にバランシングされていない。更に、これらの部分行列は、一般に、対称コード生成が不可能である。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】米国特許出願第１４／１６６，３６０号明細書
【特許文献２】米国特許出願第１４／４４７，８０６号明細書
【図面の簡単な説明】
【０００４】
【図１Ａ】本開示の一態様による回路の概略図を示す。
【図１Ｂ】本開示の別の態様による回路の概略図を示す。
【図２】本開示の別の態様による回路の概略図を示す。
【図３】本開示の別の態様による回路の概略図を示す。
【発明を実施するための形態】
【０００５】
本開示は、任意のコードワード幅のパリティ行列生成器に関する。本パリティ行列生成器は、エンコーダ及びデコーダに直接埋め込まれるか、より上位の階層に埋め込まれるのに十分な速度を有する。
【０００６】
図１Ａは、本開示の一態様による回路１００Ａの概略図を示す。図１Ｂは、本開示の別の態様による回路１００Ｂの概略図を示す。これらの回路１００（１００Ａ及び１００Ｂ）はよく似ており、異なるのは、後述される埋め込みパリティ行列生成器１４０の場所である。
【０００７】
回路１００は、埋め込みパリティ行列生成器１４０（図１Ａに示される１４０ａ及び１４０ｂ、又は図１Ｂに示されるような１４０ｃを含む）と、エンコーダ１１０と、副回路１２０と、デコーダ１３０と、を含む。回路１００は、マイクロコントローラ、又は任意の、保護される副回路を有するコンピュータシステムに内蔵されてよい。エンコーダ１１０及びデコーダ１３０は、チップの同じ領域、或いは別々の領域にあってよい。大まかに言うと、セーフティクリティカルなメモリ１２０が、エンコーダ１１０及びデコーダ１３０を有するラッパーに埋め込まれており、エンコーダ１１０及びデコーダ１３０は、両方とも、同じパリティ行列とともに構成されている。以下の説明では、タイミングについては考慮しない。
【０００８】
埋め込みパリティ行列生成器１４０は、任意のデータ幅（ｄｗ）のデータワードｄ＿ｉに対してパリティ行列を生成するように構成されている。埋め込みパリティ行列生成器１４０により、これまでの保護方式では必要であった、副回路１２０ごとにパリティ行列をあらかじめ定義することが不要になる。埋め込みパリティ行列生成器１４０は、図１Ａに示されるように、二重に、即ち、エンコーダ１１０及びデコーダ１３０のそれぞれに埋め込まれてよい。或いは、パリティ行列生成器１４０は、ラッパーアーキテクチャに埋め込まれるか、一度だけラッパーアーキテクチャに入れられてよく、結果として得られるパリティ行列がエンコーダ１１０及びデコーダ１３０に送り込まれる。パリティ行列は、一般に、その行数がデータワード幅と対応し、その列数が冗長ワード幅と対応するように定義される。埋め込みパリティ行列生成器１４０は、後で詳述される基準に従ってパリティ行列を動的に生成するように構成される。
【０００９】
エンコーダ１１０は、パリティ行列生成器１４０によって生成されるパリティ行列を使用して、データワード（ｄ＿ｉ）をコードワードにエンコードするように構成されている。コードワードは、エンコード済みデータワード（ｄ＿ｉ’）及び冗長ワード（ｒ＿ｉ）を含む。データワード（ｄ＿ｉ）は、プログラムデータ、ユーザデータ、構成データ、又は他の任意の適切なタイプのデータであってよい。冗長ワード（ｒ＿ｉ）は、例えば、エラー訂正コード（ＥＣＣ）ワードであってよい。パリティ行列（Ｐ）は、データワード（ｄ）の関数、即ち、Ｐ＝ｇｐ（ｄｗ）として生成され、ｄｗはデータ幅であり、ｇｐは生成関数である。
【００１０】
副回路１２０は、データワード（ｄ＿ｉ’）及び冗長ワード（ｒ＿ｉ）を記憶するように構成されているが、本開示はこの点に限定されない。エンコーダ１１０及びデコーダ１３０は、介在する副回路１２０がない状態で、又は副回路１２０がバスとして存在する状態で、あるポイントから別のポイントに送信されたデータワード（ｄ＿ｉ）をエンコード及びデコードするように構成されてよい。副回路１２０は、任意のタイプの適切な副回路であってよく、例えば、メモリ、レジスタ、バス、インタフェースなどであってよい。図中の「Ｎ」は、副回路１２０の深さを表す。深さがＮとは、Ｎ段の同期段階が直列接続されていることであり、各段は、ｄｗ＋ｒｗ信号を次段に渡し、最終段は副回路１２０の出力（即ち、Ｎ×（ｄｗ＋ｒｗ））に渡す。
【００１１】
デコーダ１３０は、エンコーダ１１０とデコーダ１３０とで同じである生成済みパリティ行列を使用して、コードワードをデータワード（ｄ’＿ｏ）及び冗長ワード（ｒ＿ｏ）にデコードするように構成されている。そして、デコーダ１３０は、パリティ行列に基づいて、データワード（ｄ’＿ｏ）にエラーがあれば検出することと、任意選択で、エラーが検出されれば訂正することと、を行うように構成されている。デコーダ１３０は、パリティ行列を使用して、シングルビットエラーを訂正し、ダブルビットエラーを検出する。データワードのトリプルビットエラーは、検出可能だが訂正されない。
【００１２】
埋め込みパリティ行列生成器１４０があれば、パリティ行列のあらかじめ定義されたセットは与えられなくてよい。このことが特に有利であるのは、保護されるべきデータビットの数が製品派生物が異なれば変動する場合や、周波数要件が変動することでエンコード方式のＸＯＲツリー深さの変更を強いられる場合である。
【００１３】
図２は、本開示の別の態様による回路２００の概略図を示す。
【００１４】
回路２００は、図１Ａ及び図１Ｂの回路１００と似ており、エンコーダ２１０はエンコーダ１１０に対応し、副回路２２０は副回路１２０に対応し、デコーダ２３０はデコーダ１３０に対応し、埋め込みパリティ行列生成器２４０は埋め込みパリティ行列生成器１４０に対応する。
【００１５】
回路２００は更に、コードワード（データワード＋冗長ワード）を反転するように構成されたインバータ２５０ａ、２５０ｂ及びマルチプレクサ２６０ａ、２６０ｂを含む。これらの追加インバータ構造は、対称冗長コードを使用して自己縮退試験を行う為のものである。シングルビットエラー訂正及びダブルビットエラー検出（ＳＥＣＤＥＤ）エラー訂正コード（ＥＣＣ）が使用される場合、この縮退試験では、最大３件の縮退故障を、いかなる組み合わせであっても検出することが可能である。縮退試験中は通常のメモリアクセスがブロックされるが、試験後には元のデータが利用可能になる。縮退試験は、最初に元のデータを副回路２２０から読み出し、データを反転してからメモリ１２０に書き込み、そのデータを再度読み出し、反転し、書き込むことによって行われ、従って、データは最終的には２回反転されている。反転は、マルチプレクサ２６０ａ、２６０ｂと結合された制御信号によってオンにされ、反転によって、副回路２２０に書き込まれ、読み出された全てのデータ値及び冗長コード値が否定されるか、元のデータが書き込まれる。冗長コードが対称である場合、デコーダ２３０及びエンコーダ２１０は、コードワードの現在の極性を知る必要がない。冗長コードが非対称である場合、行列の、合計が偶数である列に対応するコードビットを、書き込み前にエンコーダ２１０で、且つ、読み出し後にデコーダ２３０で、更に反転しなければならない。従って、可能であれば、対称コードを使用することが好ましい。
【００１６】
この回路２００については、参照により全内容が本明細書に組み込まれている、２０１４年１月２８日に出願された（特許文献１）に詳述されている。
【００１７】
図３は、本開示の別の態様による回路３００の概略図を示す。
【００１８】
回路３００は、図２の回路２００と似ており、エンコーダ３１０はエンコーダ２１０に対応し、副回路３２０は副回路２２０に対応し、デコーダ３３０はデコーダ２３０に対応し、インバータ３５０はインバータ２５０に対応し、マルチプレクサ３６０はマルチプレクサ２６０に対応し、埋め込みパリティ行列生成器３４０は埋め込みパリティ行列生成器２４０に対応する。
【００１９】
回路３００は更に、変更ビットを追加する為の反転制御信号を含み、これは、この信号がエンコーダ３１０及びデコーダ３３０に接続されることで示されている。この変更が有利であるのは、パリティ行列の全ての列合計が奇数とは限らない場合、即ち、パリティ行列が対称でない場合である。より具体的には、行列の偶数列は、変更ビットによって調節される。変更ビットは、これらの偶数列を人為的に奇数にするものであり、これによって、パリティ行列が対称であった場合と同じ挙動が得られる。
【００２０】
この回路３００については、参照により全内容が本明細書に組み込まれている、２０１４年７月３１日に出願された（特許文献２）に詳述されている。
【００２１】
本明細書に開示のパリティ行列生成器は、様々な構成パラメータに対して最適なパリティ行列を素早く生成するように構成されている。パリティ行列生成器は、メモリ又はレジスタのサイズに従うどのような必要データワード幅に対しても均質で汎用的なエンコーダコンポーネント及びデコーダコンポーネントを自動的に生成するように構成されている。データ幅は別として、パリティ行列生成器は、対称ＳＥＣＤＥＤ及びＤＥＤ冗長コード、変更可能な非対称ＳＥＣＤＥＤ／ＤＥＤコード、完全に等化又は最小化されたＸＯＲゲートカウント、最小化又はユーザ定義の限定がなされたＸＯＲツリー深さ、並びに、インクリメントされたコード幅によって増えた複数ビットのエラー検出に対して構成可能である。
【００２２】
対称行列は、その全ての列合計が奇数であり、このことは、変更ビットを使用しない非破壊反転試験の為の前提条件である。非対称行列は、少なくとも１つの列合計が偶数である。
【００２３】
パリティ行列生成アルゴリズムは、以下のいずれかの条件に基づいている。
ａ）パリティ行列の各列における「１」のバランシング：
パリティ行列の列合計は、何らかの必要且つ実施可能な方法でバランシングされる。例えば、目的が対称コード生成の為のパリティ行列を生成することであって、初期パリティ行列の２つの列の列合計が偶数である場合、１つの列の合計がインクリメントされ、別の列の合計がデクリメントされるように、行列の行における「１」の代替並べ替えが計算される。パリティ行列の各列における「１」の数に関連する、ＸＯＲツリーの最大深さの、コード生成の為の最小化の為に、列合計の差が最小になるように「１」が分散される。このバランシングは、完全行列を基準とし、個々の相互依存の列合計が必ずしも最適にバランシングされていない幾つかの部分行列で構成されてよい。
【００２４】
ｂ）対称コード生成の為のパリティ行列：
パリティ行列は、その全ての列合計が奇数である場合には、 （特許文献１）に記載のように、メモリの非破壊縮退試験に使用される対称コードを生成する。必要なエラー検出能力を達成する為に必要なハミング距離（ｈｄ）（ｈｄ≧２×ＢＥｃ（但し、ＢＥｃは安全に訂正可能なビットエラーの数）、且つ、ｈｄ≧ＢＥ７ｄ−１（但し、ＢＥｄは安全に検出可能なビットエラーの数））、所与のデータワード幅、及び任意選択で、所与のコードワード幅との組み合わせで、適切なパリティチェック行列の為の可能な解の空間が測られる。更に、エンコーダ１１０／２１０／３１０及びデコーダ１３０／２３０／３３０の回路の面積及び消費電力、並びに結合伝搬遅延を減らす為に、行列中の「１」の数に関連するＸＯＲゲートの総数と、行列の列中の「１」の数に関連するＸＯＲツリーのサイズとが最小化されるように、パリティ行列が構築される。更に、１００％の検出が不要である検出可能なマルチビットエラーのパーセンテージを最大化することが望ましいが必須ではない。
【００２５】
ｃ）汎用レジスタ転送レベル（ＲＴＬ）コンポーネント：
検証環境における行列生成アルゴリズムの実施は、任意の環境及び任意のプログラミング言語（ＶＨＤＬのようなハードウェア記述言語、又はＳｙｓｔｅｍＣやＳｙｓｔｅｍＶｅｒｉｌｏｇのような検証言語を含む）において可能である。生成は、エンコーダ１１０／２１０／３１０及びデコーダ１３０／２３０／３３０コンポーネントの構成可能なＲＴＬコンポーネントの形で行われ、設計の精緻化時に汎用パラメータ生成の直接指定又は間接派生に従って自動的に生成される。そのような汎用コンポーネントのうちの１つのコンポーネントは、全ての構成済み特性が汎用ＲＴＬ設計に直接埋め込まれている、適切に生成されたパリティ行列を生成する関数である。検証試験ベンチでは、パリティ行列生成器は、現在必要な行列を動的に、即ち、オンザフライで生成することにより、必要な全てのインスタンスの為の行列のライブラリを保持することを不要にする。パリティ行列生成器は、固定の、あらかじめ生成された行列に比べて設計の精緻化の減速が目立たない程度に高速である。取得される生成時間は、いかなる実際の需要よりはるかに大きなコードワード幅に対してもわずか数秒である為、無視してかまわない。
【００２６】
ｄ）パリティ行列の構成
パリティ行列の動的生成は、未だ全ての要件を満たしているわけではない中間解の一連の繰り返し変換に基づく。これらの中間解を明示的な行列として与えて操作することは、効率が悪すぎる。代わりに、１つの単一行列を一意指定するのではなく、全ての行列が特定の特性を共有する、行列の集合を一意指定する行列構成が存在する。行列構成は、３要素のタプルの並びＣ：＝｛｛ｄｗ０  ｋ０  ｂｖ０｝…｛ｄｗｉ  ｋｉ  ｂｖｉ｝…｝として定義され、各タプルＣｉ：＝｛ｄｗｉ  ｋｉ  ｂｖｉ｝はパリティチェック行列の行区画を指定し、
ｄｗｉは、区画ｉの行数であり、
ｋｉは、区画ｉの各行における「１」の数（行ハミング重み）であり、
ｂｖｉは、Ｃｉに対応する部分行列の列合計に対するバランシングベクトルである。
【００２７】
バランシングベクトルは、部分行列の各列合計Ｃ１の相対的な差を指定し、バランシングベクトル要素が小さいほど、対応する列の要素のより大きな合計に対応する。従って、各行列における「１」は、ｂｖｉｊ値が最小である列ｊの列合計が最大になるように、バランシングされる。バランシングベクトルの全ての要素に定数が追加されている場合には、副構成に違いはない。
【００２８】
任意選択で、副構成の指定に列合計ベクトルが追加されてよく、（あくまで本明細書における例示として）｛ｄｗｉｋｉｂｖｉ｝：ｓｖｉであってよい。
【００２９】
列合計ベクトルとバランシングベクトルとが追加されると、結果ベクトルの全ての要素が等しくなる。
【００３０】
従って、列合計の指定は、追加制約を全く追加するものではなく、バランシングベクトル∃ｃ∀ｉｃ＝ｓｖｉｊ＋ｂｖｉｊから一意導出されてよく、ｃはバランシングベクトルの最小値である。ｃ＝０であれば、バランシングベクトルは正規化されていると言う。列合計の合計は、常にｄｗｉ×ｋｉ＝Σｉｓｖｉｊとして与えられる。
【００３１】
副構成の並びに対応する、任意に選択された部分行列を連結することにより、全体構成に適合する行列が構成される。
【００３２】
例えば、（副）構成｛３  ３｛０  ０  ０  ０  １  １｝｝：｛２  ２  ２  １  １  １｝は、行｛｛１  １  １  ０  ０  ０｝｛１  ０  ０  １  １  ０｝｛０  １  １  ０  ０  １｝｝又は｛｛１  １  １  ０  ０  ０｝｛１  １  ０  １  ０  ０｝｛０  ０  １  ０  １  １｝｝、或いは他の行を有する行列によって実施可能である。バランシングベクトルの全ての要素が定数だけインクリメントされる場合、構成に適合する行列の集合に違いはなく、例えば、｛３  ３｛１  １  １  １  ２  ２｝｝：｛２  ２  ２  １  １  １｝である。このインクリメントは、後述されるように、ディスバランシングに用いられてよい。副構成の全ての行列解は、各行に「１」が３つあって、それらの列合計が｛２  ２  ２  ２  １｝に等しいことが共通している。副構成｛３  ５｛０  ０  ０  １  １  １｝｝：｛３  ３  ３  ２  ２  ２｝は、解｛｛１  １  １  ０  １  １｝｛１  １  １  １  ０  １｝｛１  １  １  １  １  ０｝｝を有する。従って、組み合わせ構成｛｛３  ３｛０  ０  ０  ０  １  １｝｝：｛２  ２  ２  １  １  １｝｝｛３  ５｛０  ０  ０  １  １  １｝｝：｛３  ３  ３  ２  ２  ２｝｝｝は、解｛｛１  １  １  ０  ０  ０｝｛１  ０  ０  １  １  ０｝｛０  １  １  ０  ０  １｝｛１  １  １  ０  １  １｝｛１  １  １  １  ０  １｝｛１  １  １  １  １  ０｝｝、｛｛１  １  １  ０  ０  ０｝｛１  １  ０  １  ０  ０｝｛０  ０  １  ０  １  １｝｛１  １  １  ０  １  １｝｛１  １  １  １  ０  １｝｛１  １  １  １  １  ０｝｝などを有する。
【００３３】
これらの組み合わせ解はいずれも、列合計ベクトル｛５  ５  ５  ３  ３  ３｝と、対応するグローバルバランシングベクトル｛０  ０  ０  ２  ２  ２｝とを有する。この小さな例から明らかなように、行列構成を操作することは、行列を使用することより、はるかに効率的である。例えば、データ幅２６７のパリティ行列の集合の場合でも、その構成は｛｛１２０  ３｛０  ０  ０  ０  ０  ０  ０  ０  ０  ０｝｝｛１４７  ５｛０  ０  ０  ０  ０  １  １  １  １  １｝｝｝となり、非常に操作しやすい。これに対し、１０×２６７個の要素を有する明示的な行列を伝達することは、非常に効率が悪いであろう。
【００３４】
バランシングベクトルが任意に選択可能であるとは限らない。バランシングベクトルが無効な副構成の場合には解は存在せず、例えば、｛３  ３｛０  ０  ０  ０  １  １｝｝又は｛３  ３｛０  ２  ０  ０  ０  ０｝｝或いは｛３  ３｛０  ０  １  ２  ３  ３｝｝の場合には解は存在しない。これに対し、｛３  ３｛０  ０  ３  ２  ２  ２｝｝の場合には、解｛｛１  １  ０  １  ０  ０｝｛１  １  ０  ０  １  ０｝｛１  １  ０  ０  ０  １｝｝が得られる。列合計ベクトル要素｛３  ２  １  １  １  １｝の合計は、ｄｗｉ×ｋｉ＝３×３＝９となる。
【００３５】
コード幅は、バランシングベクトルの長さ、即ち、任意のｉに対するｒｗ＝ｌｅｎｇｔｈ（ｂｖｉ）によって反映され、これは、パリティチェック行列の列数に直接対応する。部分行列の行数は、副構成ごとに、不等式
【数１】
2017216677.tif 000003
によって制限される。
【００３６】
例えば、｛ｄｗｍａｘ（５），３｛０  ０  ０  ０  ０｝｝は、３つの「１」の位置の並びが全て異なる、
【数２】
2017216677.tif 000004
個の異なる行を有する完全部分行列を構成する。
【００３７】
ｅ）パリティ行列の制約される構成
パリティ行列の制約される構成は、各副構成に追加制約パターンを含み、４要素のタプル｛ｄｗｉ  ｐａｔｉ  ｋｉ  ｂｖｉ｝の並びとして指定される。制約パターンは、副構成の全ての行がパターンに適合することを指定する。バランシングベクトルは、ここでは、制約されない位置だけを参照し、従って、ｌｅｎｇｔｈ（ｂｖｉ）＝ｒｗ−ｒｗｌｉを有し、ｒｗｌｉはｎｕｍｂｅｒ（ｃｏｎｓｔｒａｉｎｅｄ  ｃｏｌｕｍｎｓ）（制約される列の数）であり、これはもちろん、バランシングが不可能な、固定の制約される位置を含むことが意味をなさないと考えられる為である。制約パターンがｒｗｌｉ個の行位置を制約する場合、部分行列の行数は、ｄｗｉ≦（ｒｗ−ｒｗｌｉｋｉ）である。
【００３８】
例えば、｛３，｛＊  ＊  ＊  ０  ＊｝，３，｛１  ０  １  １｝｝構成には行列｛｛１  １  １  ０  ０｝｛１  １  ０  ０  １｝｛０  １  １  ０  １｝｝が適合し、最大構成は、１つの追加行列行｛１  ０  １  ０  １｝を有する｛４，｛＊  ＊  ＊  ０  ＊｝，３，｛０  ０  ０  ０｝｝として与えられることになる。
【００３９】
ｃ）に従う制約されない構成は、非制約パターン｛＊｝を有する制約される構成と見なされてよい。
【００４０】
制約される副構成の妥当性は、制約パターンがないタプル要素に対応する制約されない構成の妥当性から直接得られる。
【００４１】
制約が、制約されない位置に関するワイルドカードを有するパターンによって指定される場合、副構成の妥当性は、制約されない副構成が妥当であれば、自動的に与えられる。
【００４２】
代替として、制約は、行ビットの論理関数として指定されてよい（例えば、「ビット１＝１であればビット３＝０」）。この場合、副構成は、パターン｛＊  ＊  ＊  １  ０｝、｛＊  ＊  ＊  ０  ＊｝、又は代替として｛＊  ＊  ＊  １  ０｝、｛＊  ＊  ＊  ０  ０｝、｛＊  ＊  ＊  ０  １｝を有する、幾つかのパターン制約される副構成に分割されてよい。
【００４３】
簡単の為に、右端のコヒーレントワイルドカード位置は省略してよく、即ち、｛＊  ０  ＊  ＊  ＊｝は｛＊  ０｝としてよく、｛１  ＊  ＊｝は｛１｝としてよい。長さの異なる制約パターンを有する制約される副構成が組み合わされて制約される構成になった場合、長さがより短い制約を有する構成がそれらのワイルドカード位置において、全てのパターンの長さが同じになるまで（例えば、｛１  ＊｝が｛１  ０｝｛１  １｝になるまで）分割され、結果として得られるデータ幅ｄｗｉ０及びｄｗｉ１、並びにバランシングベクトルｂｖｉ０及びｂｖｉ１が、後述の適切な方法で計算される。
【００４４】
ｆ）バランシングとディスバランシング
最小要素と最大要素との差がせいぜい１であるバランシングベクトルを有する副構成は、バランシングされた副構成である。バランシングベクトルを並べ替えたものも全て、結果として、バランシングされた副構成になる。バランシングされた副構成は、タプル内のバランシングベクトルをコード幅で置き換えることにより、即ち、｛ｄｗｉ  ｐａｔｉ  ｋｉ  ｒｗ｝とすることにより、等価的に指定することが可能である。
【００４５】
最小要素０を有するバランシングベクトルは、正規化されたバランシングベクトルである。
【００４６】
最小要素と最大要素との差が１より大きいバランシングベクトルは、ディスバランシングベクトルである。この差が２であれば、ディスバランシングレベルは１であり、一般に、差ｎに対してｎ−１である。更に、ディスバランシングインデックスは、ディスバランシングの為に実施されるインクリメント／デクリメントのステップ数を意味する。これは、正規化されたバランシングベクトル及びディスバランシングベクトルをソートし、要素ごとの絶対差を有するベクトルを計算することにより、計算可能である。ｄｉｓｂａｌａｎｃｅ（ｂｖ，ｎ，ｍ）は、バランシングベクトル（又は対応する列合計）の最大要素と最小要素との最大差がｎであって、ｍ回のディスバランシングステップが実施された場合に、デフォルトのバランシングされた構成を変換する為に書かれている。ｄｉｓｂａｌａｎｃｅ（ｂｖ，ｎ，ｍ，ｃ）は、正規化されたバランシングベクトルの全ての要素に定数ｃが追加されて、その最小要素と最大要素との差がｎ＋１であって、バランシングベクトルとディスバランシングされたベクトルとの差ベクトルの全ての正の要素の合計がｍである場合に書かれる。
【００４７】
以下は幾つかの例である。
ｄｉｓｂａｌａｎｃｅ（｛１  １  １  １  １  ０  ０｝，０，０，０）＝｛１  １  １  １  １  ０  ０｝
ｄｉｓｂａｌａｎｃｅ（｛１  １  １  １  １  ０  ０｝，０，０，１）＝｛２  ２  ２  ２  ２  １  １｝
ｄｉｓｂａｌａｎｃｅ（｛１  １  １  １  １  ０  ０｝，０，０，２）＝｛３  ３  ３  ３  ３  ２  ２｝
ｄｉｓｂａｌａｎｃｅ（｛１  １  １  １  １  ０  ０｝，１，１，０）＝｛２  １  １  １  ０  ０  ０｝
ｄｉｓｂａｌａｎｃｅ（｛１  １  １  １  １  ０  ０｝，１，２，０）＝｛２  ２  １  ０  ０  ０  ０｝
ｄｉｓｂａｌａｎｃｅ（｛１  １  １  １  １  ０  ０｝，１，１，１）＝｛２  ２  ２  ２  ２  ２  ０｝
ｄｉｓｂａｌａｎｃｅ（｛１  １  １  １  １  ０  ０｝，２，１，１）＝｛３  ２  ２  ２  ２  １  ０｝
ｄｉｓｂａｌａｎｃｅ（｛１  １  １  １  １  ０  ０｝，２，２，１）＝｛３  ３  ２  ２  １  １  ０｝
【００４８】
バランシングされた構成が十分なコード幅に対する解を持つのに対して、ディスバランシングされた構成は、解を持たない場合がある。ディスバランシングされた構成が解を持たない場合、更に一層ディスバランシングされた構成も解を持たない。この関係性は、必要であれば、妥当な、バランシングされた構成から始めてディスバランシングを反復的に強めることを示唆する。
【００４９】
ｇ）マルチバランシング
全体構成に関してグローバルバランシングベクトルに適合する為には、副構成のバランシングベクトルは、それらの合同の列合計がグローバルバランシングベクトルと一致するように決定される。個々のそれぞれのバランシングベクトルのディスバランシングレベルが、グローバルバランシングベクトルのディスバランシングレベルより高くなることはない。多くの場合、グローバルディスバランシングは、ディスバランシングなしで達成可能である。マルチバランシングにより、完全な構成の所与のグローバルバランシングベクトルに適合する為に、その構成の副構成に対するバランシングベクトルを生成することが可能である。例えば、並び｛｛ｄｗ０  ｋ０｝｛ｄｗ１  ｋ１｝｝：＝｛｛２  ２｝｛５  ３｝｝と、グローバルバランシングベクトルｂｖｇ：＝｛０  ０  ３  ０  ３｝とに対して、構成｛｛２  ２｛０  １  ２  １  ２｝｝：２  １  ０  １  ０｛５  ３｛０  ０  ２  １  ２｝｝：４  ４  ２  ３  ２｝が取得される。
【００５０】
以下では、汎用のエンコーダコンポーネント及びデコーダコンポーネントに挿入された埋め込み行列生成機能のシステムを全体として構成する機能の集合の概要を示す。
【００５１】
ｈ）行列生成器の集合の機能：
・制約されない副構成｛ｄｗｉ  ｋｉ  ｂｖｉ｝を、ｄｗｉ個の行を有するパリティチェック行列に変換する。これらの全てがハミング重みｋｉを有し、その列合計のベクトルがそのバランシングベクトルｂｖｉに追加された結果として、同じ要素を有するベクトルが得られる。
・制約される副構成｛ｄｗｉ  ｐａｔｉ  ｋｉ  ｂｖｉ｝を、制約される列が制約パターンに応じて「０」のみ又は「１」のみを含むパリティチェック行列に変換する。実際には、この関数は、制約されない列に対する前の関数を最初に呼び出し、制約パターンに従って「０」列及び「１」列を追加する。
・副構成を有する構成をパリティチェック行列に変換する。これは、第１の関数を副構成に適用することによって与えられる部分行列を単純に連結することにより、行う。
・制約される副構成を有する制約される構成をパリティチェック行列に変換する。これは、第２の関数を制約される副構成に適用することによって与えられる部分行列を単純に連結することにより、行う。
【００５２】
ｉ）構成生成器の集合の機能：
・所与のペイロードデータ幅、行列行ハミング距離、及び任意選択の（必要最低限以上の）コード幅について、デフォルト構成を計算する。例えば、ＳＥＣＤＥＤの場合の（Ｈｓｉａｏ−）パリティ行列は、各行に「１」が少なくとも３つあって行ハミング距離が２以上であることを必要とする。
・３以上である奇数のｋについて、副構成を有する構成を計算する。
・３以上である奇数及び偶数のｋについて、副構成を有する構成を計算する。
・３以上である奇数のｋについて、副構成を有する可逆構成を計算する。これは、最初の非可逆構成を可逆構成に変換することによって行い、これは、コード幅を増やさない場合には常に可能とは限らない。
・３以上である奇数及び偶数のｋについて、副構成を有する可逆構成を計算する。これにより、多くの場合に、コード幅のインクリメントを回避できる。
【００５３】
ｊ）構成変換関数の集合の機能：
・副構成ｉのｄｗｉをδ＋ｄｗｉだけ増やし、副構成ｊのｄｗｊをδ−ｄｗｉだけ減らして、
【数３】
2017216677.tif 000005
となるようにする。そのような変換は、完全構成のグローバルバランシングベクトルを変更するものであり、これが意図されるのは、例えば、個々の副構成を、それらのデータ幅にさわらずに、バランシング又はディスバランシングするだけでは、偶数である列合計の数を、必要とされる様式で変更できない場合である。
・グローバルバランシングベクトル
【数４】
2017216677.tif 000006
が特定の必要とされる様式で
【数５】
2017216677.tif 000007
に変更されるように、
【数６】
2017216677.tif 000008
である変換仕様｛δ＋ｄｗｉ０，…，δ＋ｄｗｉｍ，δ−ｄｗｊ０，…δ−ｄｗｊｎ｝を計算する。例えば、構成｛｛ｄｗｉ，ｋｉ，ｂｖｉ，｛０｝｝，｛ｄｗｊ，ｋｊ，ｂｖｊ，｛１｝｝を｛ｄｗｉ−１，ｋｉ，ｂｖｉ，｛０｝｝，｛ｄｗｊ＋１，ｋｊ，ｂｖｊ，｛１｝｝に変更することにより、最左の列合計が１だけ増え、これによって、結果として得られるグローバルバランシングベクトルの最左成分が１だけ減って
【数７】
2017216677.tif 000009
になり、新しいグローバルバランシング副ベクトルの右側成分を再計算しなければならない。
【００５４】
ｋ）補助関数の集合の機能：
・（制約される）行列構成に関連する（左右に区画された）列合計のベクトルを計算する。
・行列構成の並びに関連する（左右に区画された）列合計のベクトルを計算する。
・列合計ベクトルをバランシングベクトルに変換する。
・構成のグローバルバランシングベクトルをその副構成から計算する。
・列合計ベクトルに関連する偶奇インジケータのベクトルと（区画された）偶数の列合計の数とを計算する。
・所与のコード幅及び行ハミング距離に対する（ペイロード）データビットの最大数、又は所与のデータ幅に対する最小コード幅を計算する。
・以下のレンマに従う解が存在しない場合の構成を試験する。
１．（十分なコード幅を有する）バランシングされたデフォルト構成に対する解が常に存在する。
２．バランシングベクトルの１つの選択された場所を反復的に小さくし、同じ差だけ別の場所を大きくすることによって、バランシングされた構成に変換することができない構成に対する解が存在しない。例えば、バランシングベクトル｛０  ０  ０  ０  １｝が構成に関係する場合、｛０  ２  ０  ２  ２｝に対する解が存在しない場合があるが、｛１  ０  ０  ０  １｝に対する解は間違いなく存在しない。
３．ｎ＋ｍ＞ｄｗである場合、或いは、コード幅に対応する最大データ幅と所与のデータ幅との差がｎより小さい場合、即ち、ｎ＋ｍ＞ｄｗｍａｘ（ｒｗ）−ｄｗである場合に、ｄｉｓｂａｌａｎｃｅ（ｎ，ｍ，ｃ）に対する解が存在しない。例えば、構成｛３，３，｛０  ０  ０  ０  １｝｝を｛３，３，｛０  ４  ０  ２  ０｝｝に変換することができない。
４．ある構成に対する解が存在する場合、任意の並びのバランシングベクトルを有する任意の構成が解を有する。
５．偶数の列合計の数が奇数である場合、奇数行にのみハミング重みを有する、解くことが可能な可逆構成が存在しない。これは、奇偶行列行重みの生成器を呼び出すかどうかを決定する為の強力且つシンプルな基準である。
６．ｄｉｓｂａｌａｎｃｅ（ｎ０，ｍ０，ｃ０）の解が存在しない場合、ｎ１＋ｍ１＞ｎ０＋ｍ０であれば、ｄｉｓｂａｌａｎｃｅ（ｎ１，ｍ１，ｃ１）も解を持たない。
【００５５】
これらのレンマは、副構成の解が存在するかどうかについての高速試験を提供する。別の、より高コストになる可能性がある試験は、構成の解が存在するかどうかを、構成｛ｄｗｉ，ｋｉ，ｂｖｉ，｛＊｝｝を、制約パターン｛ｄｗｉ０｛０｝ｋｉ０  ｂｖｉ０｝及び｛ｄｗｉ１｛１｝ｋｉ１  ｂｖｉ１｝を有する２つの制約される部分に分割することによって得られる２つの副構成に対する解が存在するかどうか、から再帰的に導出する。この目的の為に、構成を妥当な副構成に分割するマルチバランシング機能が提供されている。構成の妥当性検査に使用される場合、構成の妥当性の再帰的調査は、その全ての副構成が０−１のみを有するバランシングベクトルを有する場合には停止され、それらは、レンマ１によれば妥当である。
【００５６】
複数の試験を、それらの複雑さに応じて順序付けることは、必要とされる特性を有する少なくとも１つの解を有する構成の効率的な構築手順において非常に重要である。
【００５７】
ｌ）構成変換関数の集合の機能：
・副構成ｉのｄｗｉをδ＋ｄｗｉだけ増やし、副構成ｊのｄｗｊをδ−ｄｗｉだけ減らして、
【数８】
2017216677.tif 000010
となるようにする。そのような変換は、完全構成のグローバルバランシングベクトルを変更するものであり、これが意図されるのは、例えば、個々の副構成を、それらのデータ幅にさわらずに、バランシング又はディスバランシングするだけでは、偶数である列合計の数を、必要とされる様式で変更できない場合である。
・グローバルバランシングベクトル
【数９】
2017216677.tif 000011
が特定の必要とされる様式で
【数１０】
2017216677.tif 000012
に変更されるように、
【数１１】
2017216677.tif 000013
である変換仕様｛δ＋ｄｗｉ０，…，δ＋ｄｗｉｍ，δ−ｄｗｊ０，…δ−ｄｗｊｎ｝を計算する。例えば、構成｛｛ｄｗｉ，ｋｉ，ｂｖｉ，｛０｝｝，｛ｄｗｊ，ｋｊ，ｂｖｊ，｛１｝｝を｛ｄｗｉ−１，ｋｉ，ｂｖ’ｉ，｛０｝｝，｛ｄｗｊ＋１，ｋｊ，ｂｖ’ｊ，｛１｝｝に変換することにより、最左の列合計が１だけ増え（これによって、その列合計が奇数になってよく）、これによって、結果として得られるグローバルバランシングベクトルの最左成分が１だけ減って
【数１２】
2017216677.tif 000014
になり、新しいグローバルバランシング副ベクトルの右側成分を再計算しなければならない。
【００５８】
ｍ）構成生成器の集合の機能：
・所与のペイロードデータ幅、行列行ハミング距離、及び任意選択の（必要最低限以上の）コード幅について、デフォルト構成を計算する。例えば、ＳＥＣＤＥＤの場合の（Ｈｓｉａｏ−）パリティ行列は、各行に「１」が少なくとも３つあって行ハミング距離が２以上であることを必要とする。
・３以上である奇数のｋについて、副構成を有する構成を計算する。
・３以上である奇数及び偶数のｋについて、副構成を有する構成を計算する。
・３以上である奇数のｋについて、副構成を有する可逆構成を計算する。これは、最初の非可逆構成を可逆構成に変換することによって行い、これは、コード幅を増やさない場合には常に可能とは限らない。
・３以上である奇数及び偶数のｋについて、副構成を有する可逆構成を計算する。これにより、多くの場合に、コード幅のインクリメントを回避できる。
【００５９】
ｎ）構成の妥当性についての完全な決定手順
副構成は、少なくとも１つの適合する部分行列が存在すれば妥当であるとされ、幾つかの副構成からなる構成は、その全ての副構成が妥当であれば妥当である。
【００６０】
従って、ある構成の妥当性は、最左の「１」行及び最左の「０」行についての副構成の妥当性、即ち、Ｖ｛ｄｗｉ  ｋｉ  ｂｖｉ｝：＝Ｖ｛ｄｗ１ｉ｛１｝ｋ１ｉ  ｂｖ１ｉ｝∧Ｖ｛ｄｗ０ｉ｛０｝ｋ０ｉ  ｂｖ０ｉ  ｐａｔ０ｉ｝から再帰的に導出され、
ｄｗ１ｉ：＝Ｃ１ｓ（｛ｄｗｉ，ｋｉ，ｂｖｉ｝，ｒｗ−１）（即ち、最左の列（インデックスｒｗ−１）の合計）であり、
ｄｗ０ｉ：＝ｄｗｉ−ｄｗ１ｉ；ｋ１ｉ：＝ｋｉ−１；ｋ０ｉ：＝ｋｉｐａｔ１ｉ：＝｛１｝，ｐａｔ０ｉ：＝｛０｝である。
【００６１】
バランシングベクトルｂｖ１ｉ及びｂｖ０ｉは、｛ｄｗｉ，ｋｉ｝ペアの所与の並びとグローバルバランシングベクトルとから妥当な副構成を計算するマルチバランシング手順ｃｆｇｄｂｖｓによって生成され、これは、この特殊なケースでは、その最左要素がない状態での元のバランシングベクトルに対応し、従って、ｃｆｇｄｂｖｓ｛｛ｄｗ１ｉ  ｋ１ｉ｝｛ｄｗ０ｉ  ｋ０ｉ｝｝ｂｖｉ（ｒｗ−２．．０）＝｛｛ｄｗ１ｉ  ｋ１ｉ  ｂｖ１ｉ｝｛ｄｗ０ｉ  ｋ０ｉ  ｂｖ０ｉ｝｝が得られる。
【００６２】
構成｛３，３，｛０  ０  ０  ０  １｝｝の妥当性は、｛２，２，｛０  ０  ０  ０｝｝とともに２行を有する「１」の副構成、並びに、｛１  ３｛０  ０  ０  １｝｝の１行を有する「０」の副構成の妥当性から得られる。
【００６３】
本開示の有利な点は多くある。概説された手順により、任意のデータワード及びコード幅に対する任意選択の反転機能を有するパリティチェック行列が生成される。
【００６４】
様々な最適化基準、例えば、ＸＯＲゲート数、ＸＯＲツリー深さ、コード幅、複数ビット検出などによれば、最適であることが実証可能な解が生成される。このことは、最初から全ての要件を満たすわけではない最低限の解から始めて、必要最小限のステップ数だけで行列構成を徐々に変換して、全ての制約を満たす解を生成することによって保証される。
【００６５】
この、行列構成及び優先的な妥当性検査の概念により、最終の明示的な行列解が生成される前に、バックトラッキングによる非常に簡潔且つ高速な変換を実施することが可能になる。
【００６６】
（デフォルトの設定が使用されていない場合のみ）パラメータの選択後は、人間による対話が不要であり、メモリ又はレジスタのサイズから直接導出可能な任意のパラメータセットに対して、全ての生成が自動的に行われる。
【００６７】
様々な要件に対して、多種多様なアプローチのセットではなく、均一で包括的な、汎用の関数、エンコーダコンポーネント、及びデコーダコンポーネントが提供される。
【００６８】
中間タスクを、既に基本関数によってカバーされているサブタスクまで縮小することにより、再帰的な生成アルゴリズムが簡潔に保たれる。例えば、制約されない副構成の妥当性を検査する関数は、副構成が、全てが「１」である列が先頭である副副構成と、全てが「０」である列が先頭である副構成とに分割されている場合には、再帰的に適用される。
【００６９】
この目的の為に、グローバルバランシングベクトルに適合するように、任意の数の副構成の（ディス）バランシングベクトルを計算する、より一般的な関数が考案されている。
【００７０】
モジュール設計者は、モジュールレベルでの面積及び静的タイミング分析を根拠として判定されるべき様々な基準に応じて生成エラー処理回路を最適化する為に、様々な選択肢に直接アクセスすることが可能であり、内蔵されている事前定義済みＲＴＬコンポーネントの様々な汎用パラメータを選択するだけでよい。モジュールが高い周波数で動作する場合、モジュール設計者は、例えば、１クロックサイクル内で処理可能である最大遅延を連結経路が超えないことを保証する限界値に、最大ＸＯＲ深さを設定してよい。面積が課題である場合は、「１」の総数が最小である行列が最良の選択肢である。安全分析を行うと、結果として新たな要件が発生する可能性があるが、これは、単に様々なパラメータセットを選択すること以上の余分な作業を必要としない、同等の再構成によって対応可能である。
【００７１】
以下では、ＳＥＣＤＥＤ保護の為のパリティ行列の生成方法を、より詳細に示す。パリティ行列は、必要な全ての特性を有する構成が決定された後にのみ、生成される。以下の構築ステップを実施することにより、データ幅１２８及びＥＣＣ幅９の可逆行列が生成される。
【００７２】
ステップａ）
構成の構築では、まず、３から始まる奇数行重みを有する初期デフォルト（Ｈｓｉａｏ）構成がはたして可逆解を持ちうるかどうかを判定するクイック試験を行う。以下の場合には解は存在しない。
【数１３】
2017216677.tif 000015
ただし、ｋｉ：＝２×ｉ＋３  （ｋｉ≦ｒｗ）、
【数１４】
2017216677.tif 000016
更に、ここでのｘ％ｎは、モジュロｎ関数、即ち、ｎによる整数除算ｘ／ｎを表す。
【００７３】
例えば、次のように、ＥＣＣ幅９を有する１２８データビットについては、解が存在しない。
【数１５】
2017216677.tif 000017
これらのうちの５つが偶数である為、この非可逆解は可逆解に変換できない。これは、「３」の行のそれぞれが「５」の行で置き換えられ、２つの「１」が追加されて、偶数である列合計の数が奇数のままである為である。初期解は、最大でも、奇数である列合計を８個有する解に変換可能であるが、奇数である列合計を９個有する解には変換できない。これは、例えば、以下の構成を有する場合である。
｛｛８４  ３｛０  ０  ０  ０  ０  ０  ０  ０  ０｝：｛２８  ２８  ２８  ２８  ２８  ２８  ２８  ２８  ２８｝
｛４４  ５｛０  ０  ０  ０  ０  ０  １  ２  ２｝：｛２５  ２５  ２５  ２５  ２５  ２５  ２４  ２３  ２３｝｝、これは列合計｛５３  ５３  ５３  ５３  ５３  ５３  ５２  ５１  ５１｝を生成する。
【００７４】
これに対し、データワード長が１２７の場合、デフォルト構成
【数１６】
2017216677.tif 000018
は、偶数個の、偶数である列合計｛５２  ５２  ５２  ５２  ５２  ５２  ５２  ５２  ５１｝を有し、従って、ディスバランシングベクトル｛０  ０  ０  ０  ２  ２  ２  ２  ２｝を有する第２の副構成をディスバランシングすることによって可逆にされることが可能であり、結果として、列合計｛５３  ５３  ５３  ５３  ５１  ５１  ５１  ５１  ５１｝を有するＣｆｇ１＿１２７＿９：＝｛｛８４，３，｛０  ０  ０  ０  ０  ０  ０  ０  ０｝｛４３，５，｛０  ０  ０  ０  ２  ２  ２  ２  ２｝｝｝が得られる。一般には、ディスバランシングを行うことにより、行列中の「１」の総数は変更されない。代替として、５つの「３」の行を５つの「５」の行で置き換え、従って、「１」の総数を５×２＝１０だけ増やしたとしても、列合計｛５４  ５４  ５４  ５３  ５３  ５３  ５２  ５２  ５２｝に対応する可逆構成Ｃｆｇ２＿１２７＿９：＝｛｛７９  ３｛０  ０  ０  １  １  １  １  １  １｝｛４８  ５｛０  ０  ０  ０  ０  ０  １  １  １｝｝｝が得られたであろう。この構成はまだ可逆ではないけれども、ここではディスバランシングは不要であり、相互の再バランシングで十分であり、これによって、Ｃｆｇ２＿１２７＿９：＝｛｛７９  ３｛０  ０  ０  １  １  １  １  １  １｝：｛２７  ２７  ２７  ２６  ２６  ２６  ２６  ２６  ２６｝｛４８  ５｛１  １  １  ０  ０  ０  ０  ０  ０｝：｛２６  ２６  ２６  ２７  ２７  ２７  ２７  ２７  ２７｝｝が得られ、各列合計が等しく５３になる。
【００７５】
構成Ｃｆｇｏ＿１２８＿９の評価は、ＥＣＣビットで保護されるデータ幅１２８に対して、奇数行重みを有する対称解が存在しないことを示している。
【００７６】
ステップｂ）
この理由により、行に偶数重みを追加する別のアルゴリズムが存在する。しかしながら、奇数重み解の場合と同等のエラーの訂正及び検出の機能の為に必要な最小限の、行列行のハミング距離を維持する為に、更なる制約が課せられる。本アプローチの普遍性に影響を及ぼすものではないが、理解がより容易になるように、３つの最左行列列に対する制約が例示されている。
【００７７】
奇数の、３以上の行重みを有する行が、それらの最左位置にある組み合わせ｛０  ０  ０｝、｛０  ０  １｝、｛０  １  ０｝、｛１  ０  ０｝により、制約される。偶数の、４以上の行重みを有する行が、それらの最左位置に｛１  １  １｝を有する。このように構築することにより、ハミング重みｋを有する全ての行が、ハミング重みｋ−１を有する全ての行と、ハミング重みｋ＋１を有する全ての行とから、少なくともハミング距離２を有することが保証され、これは、２ビットエラー検出／１ビットエラー訂正には十分である。偶数のｋについては、ｋ個の「１」を有する行とｋ＋２個の「１」を有する行との間のハミング距離が１より大きいことも保証され、これは、３つの最右行位置がｋ−３個の「１」とｋ−１個の「１」とを有する為である。奇数のｋについては、最悪の場合、ｋ行が、ｋ個の「１」をｅｗ−３個の最右位置に有し、ｋ＋２−１＝ｋ＋１個の「１」をｅｗ−３個の最右位置に有することになる。右の副行のハミング距離が１しかないことになるが、これは、このシナリオの発現が、ｋ行が制約パターン｛０  ０  ０｝を有し、ｋ＋２行が制約パターン｛０  ０  １｝、｛０  １  ０｝、又は｛１  ０  ０｝を有する場合に限られるという事実を以て補償される。従って、この場合、左の副行は、ハミング距離を必要最小限の２まで延ばす。
【００７８】
ステップｃ）偶数解を生成するアルゴリズムが以下のステップを実施する。
ステップｃ１）以下のように、制約の奇数及び偶数のｋ個の重み区画を有する初期最小解を生成する。
２ｋ＋１＝３から始めて、制約される奇数の副構成
｛ｄｗ２ｋ＋１，｛０  ０  １｝｛０  ０  １｝２ｋ＋１  ｂｖ２ｋ＋１，｛０  ０  １｝｝、
｛ｄｗ２ｋ＋１，｛０  １  ０｝｛０  １  ０｝２ｋ＋１  ｂｖ２ｋ＋１，｛０  １  ０｝｝、
｛ｄｗ２ｋ＋１，｛１  ０  ０｝｛１  ０  ０｝２ｋ＋１  ｂｖ２ｋ＋１，｛１  ０  ０｝｝、
｛ｄｗ２ｋ＋１，｛０  ０  ０｝｛０  ０  ０｝２ｋ＋１  ｂｖ２ｋ＋１，｛０  ０  ０｝｝
を、それぞれ、
【数１７】
2017216677.tif 000019
、並びにｄｗ２ｋ＋１｛０  １  ０｝、及びｄｗ２ｋ＋１｛１  ０  ０｝によって生成する。
【００７９】
２ｋ＋２＝４から始めて、制約される副構成
｛ｄｗ２ｋ＋２，｛１  １  １｝｛１  １  １｝２ｋ＋２  ｂｖ２ｋ＋２，｛１  １  １｝｝を、
【数１８】
2017216677.tif 000020
により、
全てのｄｗｋの合計が、必要とされる総データ幅ｄｗに等しくなるまで、生成する。
【００８０】
この構築により、「１」の総数が最小である行列の構成が生成され、これは、通常では、まだ対称ではない。
【００８１】
ステップｃ２）必要に応じて、初期構成を、最良の場合は既に０である、偶数である列合計を少なくとも偶数個有するように変換する。純粋な奇数のｋの構成ではそのような変換が不可能である場合、ここでは、幾つかのｄｗｋｉをインクリメントし、幾つかのｄｗｋｊをデクリメントすることにより（ｋｉは奇数でｋｊは偶数、又はその逆）、必要とされる効果が達成される。更に、全ての制約される列（本願発明者らの設定では３つの最左の「１」）の合計が全て奇数になるように、交換ペアを選択する。特定のサブルーチンがインクリメント可能な副構成とデクリメント可能な別の副構成とを選択し、これによって、全ての副構成の全てのデータ幅の必要とされる全合計ｄｗが保全されるように、インクリメントの合計とデクリメントの合計が厳密に等しくなる。
【００８２】
ステップｃ３）次に、飽和していない副構成同士の（ディス）バランシングを行うことにより、２．から得られた左対称構成を完全対称構成に変換する。この為には、純粋に奇数である副構成に既に使用された手順を再使用する。
【００８３】
そのような全面的に対称な解が存在しない場合は、同じ制約パターンを有する、対応するｄｗｋ及びｄｗｋ＋ｎ×２のペアをインクリメント／デクリメントする。これにより、制約される列の対称性が保全される。そして、結果として得られる構成は完全対称である。
【００８４】
ステップｃ４）最大の列合計を最小化する為に、任意選択の追加変換を実施する。これにより、全体対称性が保全されるように左部分の列合計を増やすことで、右部分の列合計が減る。この効果は、偶数個の｛０  ０  ０｝−、｛０  ０  １｝−、｛０  １  ０｝−、又は｛１  ０  ０｝−行を、一段階高い行重みを有する同じ数の｛１  １  １｝行で置き換えることにより、達成される。各２＊｛０  ０  ０｝，２ｋ＋１を２＊｛１  １  １｝，２ｋ＋２に交換することにより、全ての左列の合計が全部で６だけインクリメントされ、全ての右列の合計が全部で４だけデクリメントされる。
【００８５】
各２＊｛０  ０  １｝，２ｋ＋１を２＊｛１  １  １｝，２ｋ＋２に交換することにより、全ての左列の合計が全部で４だけインクリメントされ、全ての右列の合計が全部で２だけデクリメントされる。
【００８６】
等しい奇数重み行２＊｛０  ０  ０｝，２ｋ＋１だけを２＊｛０  ０  １｝，２ｋ＋１、２＊｛０  １  ０｝，２ｋ＋１、又は２＊｛１  ０  ０｝，２ｋ＋１に交換することにより、全ての左列の合計が全部で２だけインクリメントされ、全ての右列の合計が全部で２だけデクリメントされる。
【００８７】
ステップｄ）次の表は、最小ＥＣＣ幅（ｅｗ）で保護可能な最大データワード幅を示す。
【００８８】
【表１】
2017216677.tif 000021
【００８９】
データ幅ｄｗの範囲がｄｗｍａｘ（ｅｗ−１）≦ｄｗ≦ｄｗｅｖｍａｘ（ｅｗ）である場合、奇数の可逆解が存在しないのであれば、偶数の可逆解に対してであっても、ｅｃｃ幅ｅｗは、理論的には十分である。
【００９０】
しかしながら、ディスバランシングに関する他の制約の為に、場合によっては、偶数の可逆解さえも存在しない可能性がある。逆に、データ幅の範囲がｄｗｅｖｍａｘ（ｅｗ）＜ｄｗ≦ｄｗｍａｘ（ｅｗ）である場合、奇数の可逆解が存在しないのであれば、ｅｗを有するＥＣＣとともに存在する偶数の可逆解はない。この場合には、ｅｗを１だけインクリメントしなければならず、これによって可逆解が常に有効になる。
【００９１】
列ｄｗｅｖ０では、奇数（ハミング重み）解が存在しない場合に偶数解が使用される実際の最小ｄｗが与えられている。列ｄｗｅｖ１では、実際の最大ｄｗが示されており、即ち、奇数解が存在しない全てのより大きなｄｗに対して、ｅｗは、必然的に１だけインクリメントされなければならない。
【００９２】
上述の説明は例示的実施形態に関連して行われてきたが、当然のことながら、「例示的」という語は、最良又は最適という意味ではなく、一例という意味に過ぎない。従って、本開示は、代替形態、修正形態、及び等価形態を包含するものとし、これらは本開示の範囲に包含されてよい。
【００９３】
本明細書では特定の実施形態が図解及び説明されてきたが、当業者であれば理解されるように、本開示の範囲から逸脱しない限り、その、図解及び説明された特定の実施形態は、様々な代替且つ／又は等価な実施態様で置き換えられてよい。本開示は、本明細書に記載の特定の実施形態のあらゆる適応又は変形を包含するものとする。
【符号の説明】
【００９４】
１００Ａ、１００Ｂ、２００  回路
１１０、２１０、３１０  エンコーダ
１２０、２２０、３２０  副回路
１３０、２３０、３３０  デコーダ
１４０ａ、１４０ｂ、１４０ｃ、２４０、３４０  埋め込みパリティ行列生成器
２５０ａ、２５０ｂ  インバータ
２６０ａ、２６０ｂ  マルチプレクサ
【図１Ａ】
2017216677.tif 000022
【図１Ｂ】
2017216677.tif 000023
【図２】
2017216677.tif 000024
【図３】
2017216677.tif 000025
【外国語明細書】
2017216677000001.pdf
2017216677000002.pdf
2017216677000003.pdf
2017216677000004.pdf