(57)【要約】【課題】８Ｂ／１０Ｂ伝送コードを高速に符号化および復号化する方法を提供すること。【解決手段】復号化および符号化の際に、先行する参照ポイントでのディスパリティと、その参照ポイントから現在ブロックの境界までのバイトのディスパリティ特性とを用いて、現在ブロックのスターティング・ディスパリティを計算する。バイトの特性とは、バイトが不平衡符号化ベクトルかどうか、および不平衡ベクトルの数が偶数か奇数かをいう。あるいは、バイトの特性とは、バイトが平衡しているかどうか、平衡符号化ベクトルがいくつ存在しているかをいう。３Ｂ／４Ｂおよび５Ｂ／６Ｂ伝送コードの符号化および復号化を行うための新しい分類が作り出された。ディスパリティ方面を特に取り扱う独立した関数が作り出された。バイト直前でのディスパリティ違反が、実際のランニング・ディスパリティは２つ先行するディスパリティ依存バイト（thenextprecedingbytethatisdisparitydependent）のエグジット・ディスパリティに等しいと想定して、バイトの必要フロントエンド・ディスパリティと実際のランニング・ディスパリティとを比較することによって、復号化の際に検出される。
2005513823.tif 000002
【特許請求の範囲】
【請求項１】
任意のベクトルの境界でプラス１またはマイナス１のランニング・ディスパリティをもつ平衡２進コードについて、現在のベクトルの境界でのランニング・ディスパリティを決定するための方法であって、
先行する参照ポイントと前記現在のベクトルの境界の間にある不平衡ベクトルの数が奇数である場合、前記ランニング・ディスパリティを前記先行する参照ポイントでのディスパリティの相補的なディスパリティに設定するステップと、
前記先行する参照ポイントと前記現在のベクトルの境界の間にある不平衡ベクトルの数が偶数である場合、前記ランニング・ディスパリティを前記先行する参照ポイントでの前記ディスパリティに設定するステップとを含む方法。
【請求項２】
前記先行する参照ポイントと前記現在のベクトルの境界の間にあるベクトルの数が偶数であるか奇数であるかを判定するステップをさらに含む、請求項１に記載の方法。
【請求項３】
前記方法の前記ステップの各々が複数のサブステップを含み、前記方法のステップの１つまたは複数に含まれる前記サブステップの少なくとも１つが、次の符号化サイクル内で実行され、現在の符号化サイクルで保存された前記参照ポイントでの前記ディスパリティの保存値と、前記参照ポイントと前記現在のベクトルの境界の間にあるベクトルのディスパリティ特性の保存値とに基づいて実行される、請求項２に記載の方法。
【請求項４】
前記先行する参照ポイントと前記現在のベクトルの境界の間にあるベクトルの数が偶数である場合に、
前記先行する参照ポイントと前記現在のベクトルの境界の間にある平衡ベクトルの数が偶数であるか奇数であるかを判定するステップと、
平衡ベクトルの数が偶数である場合、前記参照ポイントでの前記ディスパリティと一致する前記ランニング・ディスパリティを設定するステップと、
平衡ベクトルの数が奇数である場合、前記ランニング・ディスパリティを前記参照ポイントでの前記ディスパリティの補数に設定するステップとをさらに含む、請求項２に記載の方法。
【請求項５】
前記方法の前記ステップの少なくとも１つが、次の符号化サイクル内で実行され、現在の符号化サイクルで保存された前記参照ポイントでの前記ディスパリティの保存値と、前記参照ポイントと前記現在のベクトルの境界の間にあるベクトルのディスパリティ特性の保存値とに基づいて実行される、請求項４に記載の方法。
【請求項６】
前記方法の前記ステップのすべてが次の符号化サイクル内で実行される、請求項５に記載の方法。
【請求項７】
前記先行する参照ポイントと前記現在のベクトルの境界の間にあるベクトルの数が奇数である場合に、
前記先行する参照ポイントと前記現在のベクトルの境界の間にある平衡ベクトルの数が偶数であるか奇数であるかを判定するステップと、
平衡ベクトルの数が奇数である場合、前記参照ポイントでの前記ディスパリティと一致する前記ランニング・ディスパリティを設定するステップと、
平衡ベクトルの数が偶数である場合、前記参照ポイントでの前記ディスパリティの補数に前記ランニング・ディスパリティを設定するステップとをさらに含む、請求項２に記載の方法。
【請求項８】
前記方法の前記ステップの少なくとも１つが、次の符号化サイクル内で実行され、現在の符号化サイクルで保存された前記参照ポイントでの前記ディスパリティの保存値と、前記参照ポイントと前記現在のベクトルの境界の間にあるベクトルのディスパリティ特性の保存値とに基づいて実行される、請求項７に記載の方法。
【請求項９】
前記方法の前記ステップのすべてが次の符号化サイクル内で実行される、請求項８に記載の方法。
【請求項１０】
５ビットのソース・ベクトルを６ビットの符号化ベクトルに符号化するとともに３ビットのソース・ベクトルを４ビットの符号化ベクトルに符号化することによって、８ビットの入力から１０ビットの符号化バイトを生成するように適合された８Ｂ／１０Ｂ符号器と、
先行符号化バイトの直前でのランニング・ディスパリティと前記先行符号化バイトが平衡しているかどうかを表す１ビットのパラメータの値とに基づいて、符号化バイトの直前でのスターティング・ディスパリティを決定するように適合されたディスパリティ回路とを含む符号化回路。
【請求項１１】
前記８Ｂ／１０Ｂ符号器が５Ｂ／６Ｂ符号化回路をさらに含み、前記５Ｂ／６Ｂ符号化回路が、５ビットのソース・ベクトルについて、第３ビットが１であること、または先頭４ビットが値０であること、または先頭３ビットは値０であり末尾ビットは１であることを検出した場合に、６ビット符号化ベクトルの第３符号化ビットを１に設定するように適合される、請求項１０に記載の回路。
【請求項１２】
前記５Ｂ／６Ｂ符号化回路が、５ビットのソース・ベクトルについて、末尾ビットは値１であるが先頭４ビットは３個の０に１が続く形でないこと、または後方２ビットは共に値０であり先頭３ビット中の１ビットは値１であること、または先頭３ビットは値０であり第４ビットは値１で末尾ビットは値０であることを検出した場合に、６ビット符号化ベクトルの第５符号化ビットを１に設定するように適合される、請求項１１に記載の回路。
【請求項１３】
前記５Ｂ／６Ｂ符号化回路が、５ビットのソース・ベクトルについて、末尾２ビットは値０であり先頭３ビット中の１ビットは値０であること、または制御入力が値１であるか、１対の末尾ビットが互いに等しくなくかつ先頭３ビット中の１ビットが値１であるかのいずれかであること、または先頭４ビットは値０であり末尾ビットは値１であること、または５ビットすべてが値１であることを検出した場合に、６ビット符号化ベクトルの末尾符号化ビットを値１に設定するように適合される、請求項１２に記載の回路。
【請求項１４】
前記５Ｂ／６Ｂ符号化回路が、５ビットのソース・ベクトルについて、先頭３ビットは値０であり末尾ビットは値０であること、先頭３ビットは値０であり第４ビットは値１であること、先頭４ビットは値１であり末尾ビットは値０であること、末尾２ビットは値０であり先頭３ビット中の１ビットは値１であることを検出した場合に、６ビット符号化ベクトルのフロントエンドで正のランニング・ディスパリティが必要とされていると判定するように適合される、請求項１３に記載の回路。
【請求項１５】
前記５Ｂ／６Ｂ符号化回路が、５ビットのソース・ベクトルについて、先頭３ビットと末尾ビットが値１であること、先頭３ビットは値１であり第４ビットは値０であること、先頭４ビットは値０であり末尾ビットは値１であること、末尾２ビットは値１であり先頭３ビット中の１ビットは値０であること、または制御線が値１であることを検出した場合に、６ビット符号化ベクトルのフロントエンドで負のランニング・ディスパリティが必要とされていると判定するように適合される、請求項１４に記載の回路。
【請求項１６】
前記５Ｂ／６Ｂ符号化回路が、５ビットのソース・ベクトルについて、先頭３ビット中の１ビットは値０であり末尾２ビットの少なくとも一方は値０であること、先頭３ビット中の１ビットは値１であり末尾２ビットの少なくとも一方は値１であり制御入力は値０であること、先頭３ビットは値１であり１対の末尾ビットは値０であることを検出した場合に、６ビット符号化ベクトルが平衡していると判定するように適合される、請求項１５に記載の回路。
【請求項１７】
前記８Ｂ／１０Ｂ符号器が３Ｂ／４Ｂ符号化回路をさらに含み、前記３Ｂ／４Ｂ符号化回路が、３ビットのソース・ベクトルの先頭２ビットの値が等しくないこと、または先頭２ビットが共に値１であり末尾ビットが値０であることを検出した場合に、４ビット符号化ベクトルが平衡していると判定するように適合される、請求項１０に記載の回路。
【請求項１８】
並列で動作する複数の８Ｂ／１０Ｂ符号器であって、その各々が、５ビットのソース・ベクトルを６ビットの符号化ベクトルに符号化するとともに３ビットのソース・ベクトルを４ビットの符号化ベクトルに符号化することによって、８ビットの入力から１０ビットの符号化バイトを生成する８Ｂ／１０Ｂ符号器と、
参照ポイントでのランニング・ディスパリティと、前記参照ポイントと１つの１０ビット符号化バイトとの間にある符号化バイトの数が奇数であるか偶数であるかと、前記参照ポイントと前記１つの１０ビット符号化バイトとの間にある平衡バイトの数が奇数であるか偶数であるかとに基づいて、前記１つの１０ビット符号化バイトの直前でのスターティング・ディスパリティを決定するように適合されるディスパリティ回路とを含むブロック符号器。
【請求項１９】
前記ディスパリティ回路が、前記参照ポイントと前記１つの１０ビット符号化バイトとの間にあるバイトの数が奇数であり、前記参照ポイントと前記１つの１０ビット符号化バイトとの間にある平衡ベクトルの数も奇数である場合、前記ランニング・ディスパリティを前記参照ポイントでのディスパリティに等しく設定するように適合され、平衡ベクトルの数が偶数である場合、前記ランニング・ディスパリティを前記参照ポイントでのディスパリティの補数に設定するように適合される、請求項１８に記載のブロック符号器。
【請求項２０】
前記ディスパリティ回路が、前記参照ポイントと前記１つの１０ビット符号化バイトとの間にあるバイトの数が偶数であり、前記参照ポイントと前記１つの１０ビット符号化バイトとの間にある平衡ベクトルの数も偶数である場合、前記ランニング・ディスパリティを前記参照ポイントでのディスパリティに等しく設定するように適合され、平衡ベクトルの数が奇数である場合、前記ランニング・ディスパリティを前記参照ポイントでのディスパリティの補数に設定するように適合される、請求項１８に記載のブロック符号器。
【請求項２１】
任意のバイトの境界でプラス１またはマイナス１のランニング・ディスパリティをもつ平衡２進コードについて、バイトの直前でのディスパリティ違反を検出するための方法であって、
前記バイトの必要フロントエンド・ディスパリティを決定するステップと、
実際のランニング・ディスパリティを２つ先行するディスパリティ依存バイトのエグジット・ディスパリティに等しく設定することによって、前記バイトの前記必要フロントエンド・ディスパリティを前記実際のランニング・ディスパリティと比較するステップとを含む方法。
【請求項２２】
１０Ｂ／８Ｂ符号化コードを復号化するための回路であって、
６ビットの符号化ベクトルを５ビットのソース・ベクトルに復号化するとともに４ビットの符号化ベクトルを３ビットのソース・ベクトルに復号化することによって、１０ビットの符号化バイトから８ビットの復号化バイトを生成するように適合される１０Ｂ／８Ｂ復号器と、
実際のランニング・ディスパリティを２つ先行するディスパリティ依存バイトのエグジット・ディスパリティに等しく設定することによって、１０ビット符号化バイトの必要フロントエンド・ディスパリティを前記実際のランニング・ディスパリティと比較するように適合されるディスパリティ回路とを含む回路。
【請求項２３】
前記１０Ｂ／８Ｂ復号器が６Ｂ／５Ｂ復号化回路をさらに含み、前記６Ｂ／５Ｂ復号化回路が、６ビット符号化ベクトルについて、以下の５種のビットの構成のいずれか、すなわち（１）１対の末尾ビットの値が互いに等しく、第４ビットは値１であり、第３ビットは値０であり、１対の先頭ビットの少なくとも一方は値０であること、または（２）先頭４ビットの３個または４個のビットは値１であり、末尾ビットは値１であること、または（３）先頭４ビットの３個または４個のビットは値０であって、第５ビットが値０であるか、または第４および末尾位置が値１であること、または（４）１対の先頭および末尾ビットがすべて値１であること、または（５）末尾４ビットがすべて値０であることを検出した場合に、前記６Ｂ／５Ｂ復号化回路が、６ビット符号化ベクトルの先頭符号化ビットの補数をとるように適合される、請求項２２に記載の回路。
【請求項２４】
前記６Ｂ／５Ｂ復号化回路が、６ビット符号化ベクトルについて、以下の５種のビットの構成のいずれか、すなわち（１）１対の末尾ビットの値が互いに等しく、１対の先頭ビットの値が互いに等しくなく、第３ビットは値１であり、第４ビットは値０であること、または（２）先頭４ビットの３個または４個のビットは値１であり、末尾ビットは値１であること、または（３）先頭４ビットの３個または４個のビットは値０であって、第５ビットが値０であるか、または第４および末尾位置が値１であること、または（４）１対の先頭および末尾ビットがすべて値１であること、または（５）末尾４ビットがすべて値０であることを検出した場合に、６ビット符号化ベクトルの第２符号化ビットの補数をとるように適合される、請求項２３に記載の回路。
【請求項２５】
前記６Ｂ／５Ｂ復号化回路が、６ビット符号化ベクトルについて、以下の５種のビットの構成のいずれか、すなわち（１）１対の末尾ビットの値が互いに等しく、第３および第４ビットの値が互いに等しくなく、先頭ビットは値０であり、第２ビットは値１であること、または（２）先頭４ビットの３個または４個のビットは値１であり、末尾ビットは値１であること、または（３）先頭４ビットの３個または４個のビットは値０であって、第５ビットが値０であるか、または第４および末尾位置が値１であること、または（４）１対の先頭および末尾ビットがすべて値０であること、または（５）末尾４ビットがすべて値０であることを検出した場合に、６ビット符号化ベクトルの第３符号化ビットの補数をとるように適合される、請求項２４に記載の回路。
【請求項２６】
前記６Ｂ／５Ｂ復号化回路が、６ビット符号化ベクトルについて、以下の５種のビットの構成のいずれか、すなわち（１）１対の末尾ビットの値が互いに等しく、第３および第４ビットの値が互いに等しくなく、第１ビットは値１であり、第２ビットは値０であること、または（２）先頭４ビットの３個または４個のビットは値０であり、末尾ビットは値１であること、または（３）先頭４ビットの３個または４個のビットは値０であって、第５ビットが値０であるか、または第４および末尾位置が値１であること、または（４）１対の先頭および末尾ビットがすべて値１であること、または（５）末尾４ビットがすべて値０であることを検出した場合に、６ビット符号化ベクトルの第４符号化ビットの補数をとるように適合される、請求項２５に記載の回路。
【請求項２７】
前記６Ｂ／５Ｂ復号化回路が、６ビット符号化ベクトルについて、以下の４種のビットの構成のいずれか、すなわち（１）１対の末尾ビットの値が互いに等しく、第４ビットは値１であり、第３ビットは値０であり、１対の先頭ビットの少なくとも一方が０であること、または（２）先頭４ビットの３個または４個のビットは値０であり、１対の末尾ビットの少なくとも一方が０であること、または（３）１対の先頭および末尾ビットがすべて値０であること、または（４）末尾４ビットがすべて値０であることを検出した場合に、６ビット符号化ベクトルの第５符号化ビットの補数をとるように適合される、請求項２６に記載の回路。
【請求項２８】
前記４Ｂ／３Ｂ復号化回路が３Ｂ／４Ｂ復号器をさらに含み、前記３Ｂ／４Ｂ復号化回路が、４ビット符号化ベクトルについて、以下の３種のビットの構成のいずれか、すなわち（１）１対の先頭ビットの値が互いに等しくなく、１対の末尾ビットは値１であること、または（２）１対の先頭ビットの値が互いに等しく、末尾ビットは値１であること、または（３）１対の末尾ビットの値が互いに等しくなく、先行する６ビット・ベクトルの末尾４ビットがすべて値０であることを検出した場合に、４ビット符号化ベクトルの先頭符号化ビットの補数をとるように適合される、請求項２２に記載の回路。
【請求項２９】
前記３Ｂ／４Ｂ復号化回路が、４ビット符号化ベクトルについて、以下の３種のビットの構成のいずれか、すなわち（１）１対の先頭ビットの値が互いに等しくなく、１対の末尾ビットは値０であること、または（２）１対の先頭ビットの値が互いに等しく、末尾ビットは値１であること、または（３）１対の末尾ビットの値が互いに等しくなく、先行する６ビット・ベクトルの末尾４ビットがすべて値０であることを検出した場合に、４ビット符号化ベクトルの第２符号化ビットの補数をとるように適合される、請求項２８に記載の回路。
【請求項３０】
前記３Ｂ／４Ｂ復号化回路が、４ビット符号化ベクトルについて、以下の３種のビットの構成のいずれか、すなわち（１）１対の末尾ビットの値が互いに等しく、先頭ビットは値１であり、第２ビットは値０であること、または（２）１対の先頭ビットの値が互いに等しく、末尾ビットは値１であること、または（３）１対の末尾ビットの値が互いに等しくなく、先行する６ビット・ベクトルの末尾４ビットがすべて値０であることを検出した場合に、４ビット符号化ベクトルの第３符号化ビットの補数をとるように適合される、請求項２９に記載の回路。
【請求項３１】
前記１０Ｂ／８Ｂ復号化回路が６Ｂディスパリティ・エラー検出回路をさらに含み、前記６Ｂディスパリティ・エラー検出回路が、６ビット符号化ベクトルについて、以下の４種のビットの構成のいずれか、すなわち（１）先頭４ビットの３個または４個のビットは値０であり、１対の末尾ビットの少なくとも一方が０であること、または（２）先頭３ビットがすべて値０であること、または（３）先頭３ビットの２個または３個のビットは値０であり、１対の末尾ビットが値０であること、または（４）末尾３ビットはすべて値０であり、先頭３ビットはすべてが１にはならないことを検出した場合に、任意の６ビット符号化ベクトルに正の必要フロントエンド・ディスパリティを割り当てるように適合される、請求項２２に記載の回路。
【請求項３２】
前記６Ｂディスパリティ・エラー検出回路が、６ビット符号化ベクトルについて、以下の４種のビットの構成のいずれか、すなわち（１）先頭４ビットの３個または４個のビットは値１であり、１対の末尾ビットの少なくとも一方が１であること、または（２）先頭３ビットがすべて値１であること、または（３）先頭３ビットの２個または３個のビットは値１であり、１対の末尾ビットが値１であること、または（４）末尾３ビットはすべて値１であり、先頭３ビットはすべてが０にはならないことを検出した場合に、任意の６ビット符号化ベクトルに負の必要フロントエンド・ディスパリティを割り当てるように適合される、請求項３１に記載の回路。
【請求項３３】
前記６Ｂディスパリティ・エラー検出回路が、６ビット符号化ベクトルについて、以下の３種のビットの構成のいずれか、すなわち（１）先頭４ビットの３個または４個のビットは値１であり、１対の末尾ビットの少なくとも一方が値１であること、または（２）末尾３ビットがすべて値１であること、または（３）先頭３ビットの２個または３個のビットは値１であり、１対の末尾ビットが値１であることを検出した場合に、任意の６ビット符号化ベクトルに正のエグジット・ディスパリティを割り当てるように適合される、請求項３２に記載の回路。
【請求項３４】
前記６Ｂディスパリティ・エラー検出回路が、６ビット符号化ベクトルについて、以下の３種のビットの構成のいずれか、すなわち（１）先頭４ビットの３個または４個のビットは値０であり、１対の末尾位置の少なくとも一方が値０であること、または（２）末尾３ビットがすべて値０であること、または（３）先頭３ビットの２個または３個のビットは値０であり、１対の末尾ビットが値０であることを検出した場合に、任意の６ビット符号化ベクトルに負のエグジット・ディスパリティを割り当てるように適合される、請求項３３に記載の回路。
【請求項３５】
前記１０Ｂ／８Ｂ復号化回路が４Ｂディスパリティ・エラー検出回路をさらに含み、前記４Ｂディスパリティ・エラー検出回路が、４ビット符号化ベクトルについて、以下の２種のビットの構成のいずれか、すなわち（１）１対の先頭ビットが値０であること、または（２）１対の末尾ビットが値０であり、１対の先頭ビットの値が互いに等しくないことを検出した場合に、任意の４ビット符号化ベクトルに正の必要フロントエンド・ディスパリティを割り当てるように適合される、請求項２２に記載の回路。
【請求項３６】
前記４Ｂディスパリティ・エラー検出回路が、４ビット符号化ベクトルについて、以下の２種のビットの構成のいずれか、すなわち（１）１対の先頭ビットが値１であること、または（２）１対の末尾ビットが値１であり、１対の先頭ビットの値が互いに等しくないことを検出した場合に、任意の４ビット符号化ベクトルに負の必要フロントエンド・ディスパリティを割り当てるように適合される、請求項３５に記載の回路。
【請求項３７】
前記４Ｂディスパリティ・エラー検出回路が、４ビット符号化ベクトルについて、以下の２種のビットの構成のいずれか、すなわち（１）１対の末尾ビットが値１であること、または（２）１対の先頭ビットが値１であり、１対の末尾ビットの値が互いに等しくないことを検出した場合に、任意の４ビット符号化ベクトルに正のエグジット・ディスパリティを割り当てるように適合される、請求項３６に記載の回路。
【請求項３８】
前記４Ｂディスパリティ・エラー検出回路が、４ビット符号化ベクトルについて、以下の２種のビットの構成のいずれか、すなわち（１）１対の末尾ビットが値０であること、または（２）１対の先頭ビットが値０であり、１対の末尾ビットの値が互いに等しくないことを検出した場合に、任意の４ビット符号化ベクトルに負のエグジット・ディスパリティを割り当てるように適合される、請求項３７に記載の回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、伝送コードに関し、より詳細には、高速アプリケーション向けの８Ｂ／１０Ｂ符号化および復号化に関する。
【背景技術】
【０００２】
本出願は、参照によりその開示が本明細書に組み込まれている、２００１年５月８日に出願した米国仮出願第６０／２８９，５５６号の恩典を主張するものである。
【０００３】
直列化された自己同期式のチップ入出力（Ｉ／Ｏ）が趨勢となっている。広い双方向共用バスの多くを個別の高速シリアル通信レーンを設けることによって置き換えることが期待されている。参照によりその開示が本明細書に組み込まれている、「バイト指向直流平衡（０，４）８Ｂ／１０Ｂパーティション・ブロック伝送コード（Byte Oriented DC Balanced (0,4) 8B/10B Partition Block TransmissionCode）」と題する、フラナシェク（Franaszek）およびウィドマー（Widmer）による米国特許第４，４８６，７３９号に記載の８Ｂ／１０Ｂ伝送コードが、その容易な実装と伝送特性のために、当業界内でこの種の応用例向けによく定着している。
【０００４】
８Ｂ／１０Ｂ伝送コードの詳細な議論については、米国特許第４，４８６，７３９号を参照されたい。８Ｂ／１０Ｂ伝送コードでは一般に、１０ビットのベクトルは６ビットの符号化ベクトルと４ビットの符号化ベクトルから生成される。６ビットの符号化ベクトルは５ビットのソース・ベクトルから生成される。同様に４ビットの符号化ベクトルは３ビットのソース・ベクトルから生成される。符号化ベクトルは、符号化ベクトルのストリーム中の直流（ＤＣ）成分を削減または除去するような方法で生成され結合される。符号化（およびソース）ベクトルはディスパリティを有する。データ・ブロックのディスパリティは、そのブロック中の０の数と１の数との差である。正のディスパリティ数は１の超過を表し、負のディスパリティ数は０の超過を表す。ディスパリティは、どのような符号化ベクトルを伝送するかを決定するために使用される。例えば、不平衡符号化ベクトルは一次および代替符号化ベクトルを有し、一次符号化ベクトルと代替符号化ベクトルのどちらを選択して伝送するかは、ディスパリティによって決定される。不平衡符号化ベクトルは０でないディスパリティを有する。例えば、３ビットのソース・ベクトルを０００とする。このソース・ベクトルに対応する３Ｂ／４Ｂ伝送コードの一次符号化ベクトルは０１００である。このソース・ベクトルに対応する３Ｂ／４Ｂ伝送コードの代替符号化ベクトルは１０１１（すなわち、０１００をビット反転したもの）である。符号化ベクトルの直前のディスパリティが正数ならば、一次ベクトルが選択され、符号化ベクトルの直前のディスパリティが負数ならば、代替ベクトルが選択される。ディスパリティおよびディスパリティ規則に関するさらなる詳細については、米国特許第５，２４５，３３９号に記載されている。
【０００５】
より高速な伝送速度を求める明白な傾向があり、従来は複数の符号器−復号器（コーデック）回路による並列処理によって対処されていた。例えば、参照によりその開示が本明細書に組み込まれている、「高速データ伝送およびストレージのための柔軟な符号化方法およびアーキテクチャ（Flexible Encoding Method and Architecture for High Speed DataTransmission and Storage）」と題する、シデシヤン（Cideciyan）による米国特許第５，２４５，３３９号は、複数の符号器の並列動作に関する改良方法を教示している。
【特許文献１】米国仮出願第６０／２８９，５５６号
【特許文献２】米国特許第４，４８６，７３９号
【特許文献３】米国特許第５，２４５，３３９号
【非特許文献１】「ＩＢＭマイクロエレクトロニクスＡＳＩＣ  ＳＡ−２７データブック  ＳＡ１４−２２１４−０１」（１９９８）（「IBM Microelectronics ASIC SA-27 Databook, SA14-2214-01」(1998)）
【非特許文献２】ウィドマー、「ＡＮＳＩファイバ・チャネル伝送コード」、ＩＢＭリサーチ・レポート１８８５５（１９９３）（Widmer、「The ANSI Fiber Channel Transmission Code」、IBM ResearchReport 18855 (1993)）
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかし、８Ｂ／１０Ｂ伝送コードを使用する際の符号化および復号化をさらに高速化することが依然として必要とされている。
【課題を解決するための手段】
【０００７】
本発明は、８Ｂ／１０Ｂ伝送コードを使用して符号化および復号化をそれぞれ行う際に、符号化および復号化を高速化する技法を提供する。本発明の一態様では、８Ｂ／１０Ｂ伝送コードの符号化の際に、先行する参照ポイントでのディスパリティとその参照ポイントから現在ブロックの境界までのバイトのディスパリティ特性とを用いて、現在ブロックのスターティング・ディスパリティを計算する。８Ｂ／１０Ｂ伝送コードにおけるブロックは通常バイトであり、したがって使用されるブロック境界は一般にバイト境界である。しかし、複数のバイトからブロックを生成してもよい。一実施形態では、バイトが不平衡符号化ベクトルかどうか、および不平衡ベクトルの数が偶数か奇数かを、バイトの特性と言う。別の実施形態では、バイトが平衡しているかどうか、および平衡符号化ベクトルがいくつ存在しているかを、バイトの特性と言う。この態様には少なくとも、従来の設計と比べて、単一の８Ｂ／１０Ｂ符号器を用いる符号化では遅延が短縮され、複数の８Ｂ／１０Ｂ符号器を並列動作させる符号化ではさらに遅延が短縮される利点が存在する。
【０００８】
本発明の第２および第３の態様では、３Ｂ／４Ｂおよび５Ｂ／６Ｂ伝送コードを符号化および復号化するにあたり、従来の分類よりも遅延を短縮する新しい分類が作り出される。さらに、伝送コードのディスパリティ方面を特に取り扱う独立した関数が作り出される。
【０００９】
本発明の第４の態様では、復号化する際に、ブロック先頭での現在の参照ディスパリティを先行ブロックの保存されたディスパリティ属性に基づいて決定する。一実施形態では、先行ブロックの保存されたディスパリティ属性とは、先行ブロックのエグジット・ディスパリティおよび先行ブロックの参照極性のことを言う。別の実施形態では、ブロック先頭での現在の参照ディスパリティは、以下の２条件のうち少なくとも一方を満足すれば正である。（１）先行ブロックのエグジット・ディスパリティが正である。（２）先行ブロック先頭での参照ディスパリティが正であり、かつ先行ブロックのエグジット極性が非負である。別の実施形態では、実際のランニング・ディスパリティは２つ先行するディスパリティ依存バイト（the next preceding byte that is disparity dependent）のエグジット・ディスパリティに等しいと想定して、バイトの必要フロントエンド・ディスパリティを実際のランニング・ディスパリティと比較することによって、復号化の際にバイト直前でのディスパリティ違反が検出される。
【００１０】
本発明ならびに本発明のさらなる特徴および利点は、以下の詳細な説明および図面を参照することにより、より完全に理解されるであろう。
【発明を実施するための最良の形態】
【００１１】
本発明は、少なくとも以下の改良によって、米国特許第５，２４５，３３９号および米国特許第４，４８６，７３９号の開示を超えるものである。符号化ドメインへのマッピングおよび符号化ドメインからのマッピングのための新しいベクトル分類が開発されたことによって、一般により短い遅延を有する符号化式および復号化式が得られる。８Ｂ／１０Ｂコード自体は変更されない。符号化および復号化処理のためのディスパリティは、共通の分類によってではなく別々の分類によって処理されるが、必要となる追加回路の数は僅かである。米国特許第４，４８６，７３９号では、共通の分類が用いられている。従来の回路は、符号化データまたは復号化データと共にバイト末尾またはバイト・ブロックの末尾でのランニング・ディスパリティを提示するが、本発明の諸態様は、符号化または復号化処理およびエラー・チェック処理の開始時点でのランニング・ディスパリティの極性を直ちに知る必要がないことをうまく利用している。そのため、エンディング・ディスパリティの代りに、現在バイトのスターティング・ディスパリティが、現在バイトのある種の特性と共に、ラッチまたは遅延素子を介して次のバイト間隔に伝えられる。次に、次のサイクルの初期段階で、新しいバイトのビット・マッピング、エラー・チェック、ディスパリティ分類と並行して、次のバイトのスターティング・ディスパリティを計算する。これら２つの革新によって、応用例の多くは、２または４回路ではなく単一のコーデック回路を用いて、または４回路の代りに２回路を用いて動作できるようになる。レンジが非常に短い応用例（very short range application）では、回路を節約するよりも、単一のコーデックの待ち時間を減らすほうが重要なことがある。複数のコーデック回路を用いることによる待ち時間の増加は、単一のバイト・レーンと関係があるが、それは、他の理由で必要でないならば、いくつかのバイトを並行して組み立てたり分解したりするには余分な時間がかかるためである。
【００１２】
複数のコーデック回路を用いて並列処理を実施する場合、本発明の態様を用いる際に、複数のバイト・ブロック各々のエンディング・ディスパリティを獲得する必要もない。その代わりに、現在ブロックのスターティング・ディスパリティを、先行する参照ポイントでのディスパリティ値と新しい参照ポイントまでのバイトのある種の特性とから導出することができる。
【００１３】
符号化処理では、先行する参照ポイントからのランニング・ディスパリティは、新しい参照ポイントまでの不平衡符号化ベクトルの数が奇数である場合に変更され、偶数である場合は変更されない。参照ポイントまで遡って数えたベクトルの総数（the total number of vectors back to the reference）が偶数の場合、平衡ベクトルの数についても同じことが言える。
【００１４】
米国特許第５，２４５，３３９号は、復号化処理については明示的に対処していないように見える。復号化のためのビット・マッピングにおいてディスパリティは何の役割も果たしていないが、エラーを検出するためにディスパリティ規則との一致がチェックされ、従来の設計のいくつかではこのロジック・パスがボトルネックの１つになることがある。本発明のディスパリティ・チェック回路は、平衡バイトまたは不平衡バイトとは異なる、ディスパリティ依存バイトまたはディスパリティ独立バイトに符号化バイトを分類する。ディスパリティ独立バイトは無視される。ディスパリティ依存バイトは、バイト先頭でのランニング・ディスパリティとは無関係にバイト内のビット・パターンのみに依存して、正または負のエグジット・ディスパリティを有する。任意のポイントでのランニング・ディスパリティは最も新しいディスパリティ依存バイトのエグジット・ディスパリティに等しいことを、エラー・チェックに利用する。例えば４列の並列バイトがあるとすると、これは４組の独立した組合せ論理によって同時に判定することができる。すなわち、第３のバイト直前でのディスパリティを獲得するには、より長い遅延を伴ういくつかの設計で必要とされるように先行バイト直前でのディスパリティを知る必要はない。４バイト・ブロック直前でのディスパリティは、先行ブロックの末尾バイト（回路１７１３）直前でのディスパリティ値とそのバイトのディスパリティ特性とから導出される。この評価を次のブロック・サイクルまで延期することにより、遅延余裕の改善が実現できる。
【００１５】
本明細書で提示される８Ｂ／１０Ｂコーデック回路設計は、可能な限り速い速度を実現することと、ＩＢＭ  ＣＭＯＳ−７Ｓ用の標準セル・ライブラリまたは同様の技術を最大限利用することを試みている。ＩＢＭ  ＣＭＯＳ−７Ｓは、参照によりその開示が本明細書に組み込まれている、「ＩＢＭマイクロエレクトロニクスＡＳＩＣ  ＳＡ−２７データブック  ＳＡ１４−２２１４−０１」（１９９８）に記載されている。単一のコーデック回路および並列回路を用いる実施を本明細書に示す。
【００１６】
従来技法を超える速度の改善は、以下のステップによって実現される。
【００１７】
１．新しい符号化表および復号化表が新しい分類を用いて生成された。（米国特許第４，４８６，７３９号で用いられたような）旧分類では４変数関数を多用したが、新分類は３変数関数をより多く使用し、より短い遅延で実施することができる。
【００１８】
２．ディスパリティ方面を特に取り扱う独立の関数を定義した。こうすることによって速度が向上するが、それは、ディスパリティ方面を取り扱う関数を符号化方面と一まとめにしなければ、高速化のために変更できるからである。符号化バイトが平衡しているかどうかは、正または負の６Ｂベクトルあるいは正または負の４Ｂベクトルがないことから間接に判定するのではなく、入力ビットから直接判定する。換言すれば、これまでは、正の符号化ベクトルまたは負の符号化ベクトルがなければバイトは平衡していると見なすことによって平衡を判定していた。ディスパリティおよび補数演算を制御する原規則の設計においては、回路を節約するために、ビット符号化および復号化を支援するのに使用されたのと同じ旧分類が利用されていた。本発明の態様は、時には回路面積を犠牲にして速度を向上させる。
【００１９】
３．符号化の場合、任意のベクトルの直前でのディスパリティは、スターティング参照と、現在位置とその参照との間の不平衡ベクトルの数が奇数か偶数かによって、または平衡ベクトルの数が奇数か偶数かによって判定される。別の手法では、ディスパリティのベクトルからベクトルへの伝播およびバイトからバイトへの伝播に依存するが、より長い時間を必要とする。
【００２０】
４．復号化の場合、現在のディスパリティは、２つ先行するディスパリティ依存バイト（thenext previous disparity dependent byte）のエグジット・ディスパリティに等しいと想定される。換言すれば、バイト前後での現在のディスパリティは、先行ディスパリティ依存バイトのエグジット・ディスパリティとして定義される。
【００２１】
５．また符号化および復号化の場合、バイトまたはブロックのエンディング・ディスパリティを計算して、次にそれを隣のブロックにスターティング・ディスパリティとして渡すのではなく、先行ブロック内の参照ポイントでのディスパリティと間にあるバイトのディスパリティ特性とに基づいて、現在のバイトまたはブロックのスターティング・ディスパリティを計算することができる。
【００２２】
６．Ｓ関数（S-Function）および補数関数（complementfunctions）についてのクリティカル・パスに特に注意を払った。Ｓ関数については以下でさらに詳細に定義する。大まかに言えば、Ｓ関数は不正なカンマを回避するために用いられる。複数の非クリティカル・パスにおいてアップストリームをゲーティングすることにより、クリティカル・パスにおける直列ゲーティングおよび多数の論理入力数を回避する。
【００２３】
７．論理を実装する場合、ＮＡＮＤゲートは遅延が短いため、様々なゲートの中でＮＡＮＤゲートが第１の選択肢となる。第２の選択肢はＮＯＲゲートである。同様の理由で、ＸＮＯＲゲートのほうがＸＯＲゲートよりも好ましい。好ましい回路を最良に利用するために、論理極性を生成または変更する。
【００２４】
８．よりクリティカルな信号は、シンボルの上部入力であるＡ入力に配線する。ただし、ＸＯＲまたはＸＮＯＲゲートでは、下部入力のほうが遅延が短いこともある。
【００２５】
９．本発明の設計では、基本論理素子および中間の関数（intermediatefunctions）は、それらが逐次ステップを必要とする場合、あまり共用しない。例えば、入力において、Ａ≠Ｂ関数は、複数の用途がある中間の論理表現（intermediatelogic expressions）からではなく、Ａ入力およびＢ入力から直接生成される。
【００２６】
本発明のさらなる詳細に進む前に、表記法について論じておくのが有益であろう。本明細書の式内で使用される信号名は、いかなる論理レベルをも反映していない。したがって、それらは抽象的な論理表現（logic statements）として解釈すべきである。しかし、回路図では、信号名には接頭辞ＰまたはＮが付されることがあり、それぞれその関数が高レベルで真となること、または低レベルで真となることを表す。接頭辞ＰおよびＮは通常、混乱や誤解を招かないかぎり、ＰおよびＮで始まる接頭辞なしの名称（netnames）については使用されない（例えば、ＮＮＤＦＳ６＝ＰＰＤＦＳ６は、ＮＤＦＳ６＝ＰＤＦＳ６のような明らかな矛盾を回避するために切り詰めない）。ｎまたはｍで始まる接頭辞なしの数（netnumbers）は低レベルで真となり、接頭辞Ｐが付くと高レベルで真となる。
【００２７】
参照を容易にするために、詳細な説明を２つのセクション、（Ｉ）８Ｂ／１０Ｂ符号器と（ＩＩ）１０Ｂ／８Ｂ復号器とに分けて行う。各セクションは複数のサブセクションを含む。
【００２８】
Ｉ．８Ｂ／１０Ｂ符号器
５Ｂ／６Ｂおよび３Ｂ／４Ｂ伝送コードの符号化を高速化するために、符号化クラスが開発された。旧分類（例えば、米国特許第４，４８６，７３９号など）では４変数関数を多用するが、新分類では短い遅延で実施できる３変数関数をより多く使用し、個々の関数は、３Ｂ／４Ｂおよび５Ｂ／６Ｂコードのディスパリティ方面を特に取り扱うように定義されている。
【００２９】
図１には、５Ｂ／６Ｂソース・ベクトルを符号化するために使用する表が示されている。図１に示すように、より効率的にソース・ベクトルをクラスに分割するために、「符号化クラス」が追加された。これらのクラスは符号化を高速化し、以下に説明するように作り出される。図１のさらなる分析の前に、ここで表記法について説明する。５Ｂ／６Ｂベクトル集合Ｌ０３およびＬ３０はそれぞれ、ビットＡ、Ｂ、Ｃに３個の論理０または３個の論理１をもつ５ビットのソース・ベクトル（Ｓ５）をすべて含む。換言すれば、表記「Ｌ０３」は、最初の３ビットＡ、Ｂ、Ｃに１が０個、０が３個含まれることを意味する。データ値が通常の書き方とは「反対向き」に表記されること、すなわち、「１」は００００１ではなく１００００であることに留意されたい。しかし、これは便宜的にしたことにすぎず、他の表現を使用してもよい。記号Ｌ１２およびＬ２１はそれぞれ、ビットＡ、Ｂ、Ｃに１個の論理１と２個の論理０が含まれること、またはその反対を表す。新しい記号を以下に正式に定義する。以下の論理式において、記号（・）および（＋）はそれぞれブール関数のＡＮＤまたはＯＲを表す。アポストロフィ（’）は否定を表す。
【００３０】
ベクトル集合Ｌ０３およびＬ３０はそれぞれ、ビットＡＢＣが０を３個含むＳ５ベクトルまたは１を３個含むＳ５ベクトルをすべて含む。
Ｌ０３＝Ａ’・Ｂ’・Ｃ’
Ｌ３０＝Ａ・Ｂ・Ｃ
【００３１】
ベクトル集合Ｌ１２およびＬ２１はそれぞれ、ビットＡＢＣが１を１個と０を２個含むＳ５ベクトル、または１を２個と０を１個含むＳ５ベクトルをすべて含む。
Ｌ１２＝Ａ・Ｂ’・Ｃ’＋Ａ’・Ｂ・Ｃ’＋Ａ’・Ｂ’・Ｃ
Ｌ２１＝Ａ’・Ｂ・Ｃ＋Ａ・Ｂ’・Ｃ＋Ａ・Ｂ・Ｃ’
【００３２】
Ａ．符号器式および表
概念的には、符号化は２ステップで実行される。最初に、一次ベクトルへの変換が行われる。ディスパリティ依存符号化ベクトルの部分集合についての第２のステップでは、ディスパリティ規則を満足させるために、補数化した代替ベクトルを使用しなければならないかどうか判断する。ディスパリティ依存ベクトルは、表のＤＲ欄がプラスまたはマイナスになっている。ＤＲは必要エントリ・ディスパリティである。必要エントリ・ディスパリティは、ディスパリティ依存ベクトルについて、一次符号化ベクトルを使用するか、それとも代替符号化ベクトルを使用するかを表す。例えば、必要エントリ・ディスパリティＤＲが「＋」の場合、エントリ・ディスパリティが正であれば、一次符号化ベクトルを使用し、エントリ・ディスパリティが負であれば、代替符号化ベクトルを使用する。これらのコードはベクトル境界でプラス１またはマイナス１のランニング・ディスパリティを有しており、そのため、ベクトル境界でランニング・ディスパリティが０であってはならないことに留意されたい。エントリ・ディスパリティは、これから符号化する現在のソース・ベクトルの直前のランニング・ディスパリティである。ランニング・ディスパリティは、一連の符号化ベクトル内のビット値について累積和を取ったものである。
【００３３】
一次ベクトルの生成  一次ベクトルへの変換に必要な論理式をそれぞれ、図１の「符号化クラス」および「一次ａｂｃｄｅｉ」、または図２の「一次ｆｇｈｊ」から直接読み取ることができる。図２には、３Ｂ／４Ｂ伝送コードについて、３ビットのソース・ベクトルを４ビットの符号化ベクトルに符号化する際に使用される表が示されている。図１において、文字列「ＡＢＣＤＥ」はソース・ベクトルを表し、文字列「ａｂｃｄｅｉ」は符号化ベクトルを表す。「Ｋ」は制御文字を表すために使用される。図２において、文字列「ＦＧＨ」はソース・ベクトルを表し、文字列「ｆｇｈｊ」は符号化ベクトルを表す。ここでも「Ｋ」は制御文字を表す。以下の説明のために、図１および図２を参照する。「一次」欄において、プレーン書体のビットはすべて、入力ビット値ＡＢＣＤＥまたはＦＧＨの対応するビットと同じである。ボールド書体のビットは補数値を表すようになっている。ｉビットとｊビットは通常、０であると見なされる。１つの行にカンマで分けられた２つの分類エントリがある場合、第２の表現は一次欄の最後のボールド書体の０または１に適用する。
【００３４】
図１において、Ｄ１１、Ｄ１３、Ｄ１４はＬ２１・ＰＤＦＳ６・Ｄ・Ｅ’についてＳ１＝１であり、Ｄ１７、Ｄ１８、Ｄ２０はＬ１２・ＮＤＦＳ６・Ｄ’・ＥについてＳ２＝１であることに留意されたい。Ｓ１またはＳ２がアクティブであり、ビットＦ、Ｇ、Ｈがすべて１である場合、図２の表のＤｘ．Ａ７行に示すように、それらは０１１１または１０００に符号化される。これによって、カンマ・シーケンスのずれが防止される。
【００３５】
図１および図２の表から抜き出した論理式を以下に記載する。これらの論理式は、以下で説明する図３の回路によって実行される。
ａ＝Ａ
ｂ＝Ｂ・（Ｌ３０・Ｄ）’＋Ｌ０３・Ｄ’
ｃ＝Ｃ＋Ｌ０３・Ｄ’＋Ｌ０３・Ｄ・Ｅ＝Ｃ＋Ｌ０３・（Ｄ’＋Ｄ・Ｅ）＝Ｃ＋Ｌ０３・（Ｄ’＋Ｅ）
ｄ＝Ｄ・（Ｌ３０・Ｄ）’
ｅ＝Ｅ・（Ｌ０３・Ｄ）’＋Ｌ１２・Ｄ’・Ｅ’＋Ｌ０３・Ｄ・Ｅ’
ｉ＝Ｌ２１・Ｄ’・Ｅ’＋Ｌ１２・［（Ｄ≠Ｅ）＋Ｋ］＋Ｌ０３・Ｄ’・Ｅ＋Ｌ３０・Ｄ・Ｅ
ｆ＝Ｆ・［Ｆ・Ｇ・Ｈ・（Ｓ＋Ｋ）］’
ｇ＝Ｇ＋Ｆ’・Ｇ’・Ｈ’＝Ｇ＋Ｆ’・Ｈ’
ｈ＝Ｈ
ｊ＝（Ｆ≠Ｇ）・Ｈ’＋Ｆ・Ｇ・Ｈ・（Ｓ＋Ｋ）
【００３６】
Ｂ．８Ｂ／１０Ｂ符号化の実装
上記の表、式、設計原理に従う実装が、図３の８Ｂ／１０Ｂ符号化の回路図に示されている。符号化回路図に記された接頭辞なしの名称についての表記法は以下のとおりである。接頭辞なしの名称の中の文字「ａ」および「ｏ」はそれぞれ、ブール関数のＡＮＤまたはＯＲを表す。名称の中の文字「ｎ」は先行するパラメータの否定を取る。文字「ｅ」および「ｕｅ」はそれぞれ、記号「＝」または「≠」を表す。大文字ＡＢＣＤＥＦＧＨＫは、符号化されていない入力ビットを表し、小文字ａｂｃｄｅｉｆｇｈｊは、符号化形式を表す。
【００３７】
図３と図４は単一の回路を表しており、便宜的に２図に分けて示したにすぎない。回路全体の入力および出力には、図３左上のＰＡおよび右上のＰＣａのように、ポート記号が添えられている。図３右上の信号ＮＣＭＰＬＳ６のように、この記号が添えられていない場合、その信号は線の名称であり、その出所は２図のいずれかにある全く同じ名称の線である。例えば、ＮＣＭＰＬＳ６は、図４右上のゲートの出力であり、図３右上で使用されている。図４には入力ポート記号は示されておらず、信号はすべて図３から直接来ることに留意されたい。
【００３８】
図３には、５Ｂ／６Ｂ伝送コードと３Ｂ／４Ｂ伝送コードの両方を符号化するのに使用される符号化回路３００Ａが示されている。符号化回路３００Ａは、インバータ３０１Ａ〜３１１Ａ、ＮＡＮＤゲート３１５Ａ〜３３９Ａ、ＮＯＲゲート３４５Ａ〜３５４Ａ、ＡＮＤＮ１（１入力にインバータを有するＡＮＤゲート）３７５Ａ、ＸＮＯＲゲート３５５Ａ〜３５９Ａ、ＸＯＲゲート３６５Ａ〜３７０Ａ、ＡＮＤ−ＯＲ（ＡＯ）ブロック３８５Ａ、ＡＮＤ−ＯＲ−ＩＮＶＥＲＴ（ＡＯＩ）ブロック３８０Ａ、３８１Ａを含む。ＡＯＩブロック３８０Ａについては、図５を参照して以下で論じる。図３を始めとする図において、同一素子に複数の記号が使用されていることに留意されたい。例えば、素子３２３ＡはＮＡＮＤゲートであるが、インバータ付き入力と出力とを有するＯＲゲートとして示されている。これら２ゲートは機能的に等価である。同様に、素子３５１ＡはＮＯＲゲートと機能的に等価であり、図１９の素子１７４０はＯＡＩブロックと機能的に等価である。
【００３９】
紙面の制限から、図３では、以下の略記法を使用する。ｎ０＝ＮＡＢｎＣｎ、ｎ１＝ＮＡｎＢＣｎ、ｎ２＝ＮＡｎＢｎＣ、ｎ３＝ＮＡＢＣｎ、ｎ４＝ＮＡＢｎＣ、ｎ５＝ＮＡｎＢＣ、ｎ６＝ＮＥＬ０３ｎｏＤｎ、ｎ８＝ＮＬ１２ＮＤＦＳ６ＤｎＥＦＧＨ、ｎ９＝ＮＬ２１ＰＤＦＳ６ＤＥｎＦＧＨ、ｎ１０＝ＰＨｎＦｕｅＧ。
【００４０】
信号ＮＣＭＰＬＳ６は、以下図４に示すディスパリティ制御回路から来る。この信号は、一次符号化ベクトルａｂｃｄｅｉを反転させて、代替符号化ベクトル（ａｂｃｄｅｉ）’を生成するのに使用する。この反転は、ディスパリティ規則に従って実行される。同様に、信号ＮＣＭＰＬＳ４も、以下図４に示すディスパリティ制御回路から来る。この信号は、ディスパリティ規則に従い、一次符号化ベクトルｆｇｈｊを反転させて、代替符号化ベクトル（ｆｇｈｊ）’を生成するのに使用する。
【００４１】
信号ＰＮＤＦＳ６は、ディスパリティ判定の際に使用される信号であり、図６〜図９を参照してより詳しく説明する。この信号もＳ関数の成分（component）である。
【００４２】
次に図５を参照すると、ＡＯＩブロック３８０Ａが示されている。ＡＯＩブロック３８０Ａは、２つのＡＮＤゲート４１０、４２０、ＯＲゲート４３０、インバータ４４０を含む。本例では、ＮＬ３０ＤとＰＢの両方が高レベルの場合、またはＰＬ０３とＮＤの両方が高レベルの場合に、Ｎｂｂは低レベルとなる。本例のＡＯＩブロックには、入力が４つある。以下で論じる図中では、これとは異なるＡＯＩブロックが使用される。入力を追加する場合、一般に入力グループ毎にＡＮＤゲートを１つ追加する。しかし、ＡＯＩブロックの中には、グループの一部ではない単一の入力をもつものもある。こうしたブロックの場合、その単一の入力は一般に、ＡＮＤゲートを経由することなく、ＯＲゲート４３０などのＯＲゲートに直接入力される。図３のＡＯブロック３８５ＡなどのＡＯブロックにはインバータ４４０がない。以下の図中で使用されるＯＡブロックには、１つのＡＮＤと複数のＯＲがあり、ＯＲは入力に接続され、ＡＮＤは出力に接続される。例えば、４入力のＯＡブロックは、ＡＮＤ４１０、４２０をＯＲで置き換え、ＯＲ４３０をＡＮＤで置き換え、インバータ４４０を取り除いたものである。
【００４３】
Ｃ．８Ｂ／１０Ｂディスパリティ制御
図１および図２の表中の「ＤＲクラス」欄は、ＤＲ欄のプラス符号およびマイナス符号エントリに従ってベクトルを分類する。ＤＲ欄のエントリは、一次符号化ベクトルの直前での必要ディスパリティを表す。表記ＰＤＲＳ６およびＰＤＲＳ４はそれぞれ、６Ｂまたは４Ｂベクトル先頭での正の必要ディスパリティを、表記ＮＤＲＳ６およびＮＤＲＳ４はそれぞれ、６Ｂまたは４Ｂベクトル先頭での負の必要ディスパリティを表す。これらの表記については、以下でより詳しく説明する。
【００４４】
ＰＤＲＳ６  ＤＲ欄が正符号である６Ｂベクトルの集合をＰＤＲＳ６と表記する。
ＰＤＲＳ６＝Ｌ０３・（Ｄ＋Ｅ’）＋Ｌ３０・Ｄ・Ｅ’＋Ｌ１２・Ｄ’・Ｅ’
【００４５】
ＮＤＲＳ６  ＤＲ欄が負符号である６Ｂベクトルの集合をＮＤＲＳ６と表記する。
ＮＤＲＳ６＝Ｌ３０・（Ｄ’＋Ｅ）＋Ｌ０３・Ｄ’・Ｅ＋Ｌ２１・Ｄ・Ｅ＋Ｋ
【００４６】
ＰＤＲＳ４
ＰＤＲＳ４＝Ｆ’・Ｇ’＋（Ｆ≠Ｇ）・Ｋ
【００４７】
ＮＤＲＳ４
ＮＤＲＳ４＝Ｆ・Ｇ
【００４８】
回路図において、信号名ＰＤＦＳ６、ＰＤＦＳ４、およびＮＤＦＳ６、ＮＤＦＳ４はそれぞれ、６Ｂまたは４Ｂベクトル直前での実際のランニング・ディスパリティを表す。
【００４９】
ＤＦとＤＲとの極性が一致しない場合、代替ベクトルを選択するための補数信号が生成される。例えば、ＰＤＦＳ６とＮＤＲＳ６がともに真の場合、補数化が実行される。
ＣＭＰＬＳ６＝ＮＤＦＳ６・ＰＤＲＳ６＋ＰＤＦＳ６・ＮＤＲＳ６
ＣＭＰＬＳ４＝ＮＤＦＳ４・ＰＤＲＳ４＋ＰＤＦＳ４・ＮＤＲＳ４
【００５０】
「ＤＢクラス」（ブロック・ディスパリティ）欄は、ＤＢ欄の０によって識別される平衡しているすべての符号化ベクトルを識別する。
【００５１】
ＢＡＬＳ６  ＤＢ欄が０である６Ｂベクトルの集合をＢＡＬＳ６と表記する。
ＢＡＬＳ６＝Ｌ２１・（Ｄ’＋Ｅ’）＋Ｌ１２・Ｋ’・（Ｄ＋Ｅ）＋Ｌ３０・Ｄ’・Ｅ’
【００５２】
ＢＡＬＳ４  ＤＢ欄が０である４Ｂベクトルの集合をＢＡＬＳ４と表記する。
ＢＡＬＳ４＝（Ｆ≠Ｇ）＋Ｆ・Ｇ・Ｈ’
【００５３】
信号ＢＡＬＳ６とＢＡＬＳ４によって制御される追加の回路が、信号ＰＢＡＬＢＹによってバイトの平衡を表す。ＰＢＡＬＢＹが高レベルのとき、平衡バイトと見なす。
【００５４】
上記の表記を、図４のディスパリティ制御回路３００Ｂによって実施する。ディスパリティ制御回路３００Ｂは、インバータ３０１Ｂ、３０２Ｂ、ＮＡＮＤゲート３１０Ｂ、ＮＯＲゲート３２０Ｂ〜３３１Ｂ、ＸＯＲゲート３４０Ｂ、ＡＯブロック３５０Ｂ〜３５３Ｂ、ＡＯＩブロック３６０Ｂ、３６１Ｂ、ＯＡブロック３７０Ｂを含む。
【００５５】
任意のベクトル境界でのディスパリティを判定するのに使用される方法によって、５Ｂ／６Ｂ符号器と３Ｂ／４Ｂ符号器との結合遅延、または並行動作する複数の８Ｂ／１０Ｂ符号器の結合遅延が短縮される。これは、図４の回路図の下部、および図６に示す図（以下でより詳しく論じる）に示されている。ＮＤＦＢＹ（Negative Disparity in Front of a Byte、バイト直前の負のディスパリティ）などのスターティング・ディスパリティが与えられた場合、後続の任意のベクトル境界でのランニング・ディスパリティは、その２ポイント間の平衡Ｓ６ベクトルと平衡Ｓ４ベクトルとを合せた数が偶数であれば変わらず、奇数であれば極性が反転すると見なされる。これは、ディスパリティがベクトルからベクトルへ伝搬するのを観察する従来技法とは対照的である。表記ＮＤＦＳ４は、４Ｂベクトル直前の負のランニング・ディスパリティを表す。
【００５６】
図３の回路３００Ａおよび図４の回路３００Ｂを含む８Ｂ／１０Ｂ符号器は、１０ビットの符号化バイトが平衡しているかどうかを表す出力（すなわち、ＰＢＡＬＢＹ）をもつが、エンディング・ディスパリティを表す出力はもたない。一般に、ベクトルのスターティング・ディスパリティは、先行する参照ポイントでのディスパリティと、間にある平衡ベクトルの数が奇数か偶数かとによって決定される。
【００５７】
Ｄ．１バイト符号器用のディスパリティ回路、高速版
この回路は、符号化処理のためにスターティング・ディスパリティを直ちに知る必要がないことを利用する。バイト末尾でのランニング・ディスパリティの評価はクリティカルな遅延パス中にある場合があるので、最初のビットの符号化はランニング・ディスパリティとは無関係に実行するが、次のバイトのスターティング・ディスパリティＰＮＤＦＳ６を決定するための最終処理を実行するのを次のバイト間隔まで延期する。これを行うことのコストは、タイミングの余裕をＸＮＯＲ２ゲート（「２」は２入力ゲートであることを表す）の遅延に等しい時間量だけ増やすために、次のバイト間隔にパラメータをただ１つではなく２つ渡すことである。
【００５８】
図６には、先行バイトから持ち越されたこれら同一の２パラメータ（theseidentical two parameters）に基づいて、スターティング・ディスパリティＰＮＤＦＢＹと現在バイトについての符号化バイトのディスパリティ「ＰＢＡＬＢＹ」とを提供するディスパリティ回路５００が示されている。回路５００は、８Ｂ／１０Ｂ符号器５１０、ＸＮＯＲゲート５１２を含む。８Ｂ／１０Ｂ符号器５１０は、回路３００Ａ、３００Ｂを含む。各バイト・サイクルの終りで、信号ＰＮＤＦＢＹとＰＢＡＬＢＹをそれぞれ、出力ＰＮＤＦＢＹ＿ＬＡＳＴとＰＢＡＬＢＹ＿ＬＡＳＴをもつ２つのラッチ（図示せず）に保存する。各々のラッチのタイミングはデータ出力ラッチ（これも図示せず）のタイミングと同じかまたは近い関係があるので、各々のラッチは示されていない。これらのパラメータは、次のバイトのスターティング・ディスパリティを計算するのに使用される。信号ＰＮＤＦＢＹは、新しいバイトの直前のランニング・ディスパリティが負の場合に高レベルとなる。
【００５９】
ソース・データのバイト毎に２つの符号化ベクトル（６Ｂ、４Ｂ）がある。そのため、現在バイトの先頭と先のバイト境界の間にある平衡ベクトルまたは不平衡ベクトルの数が奇数の場合、現在のバイトのスターティング・ディスパリティは、先行する参照ポイントでのディスパリティの補数になり、その他の場合は、先行する参照ポイントでのディスパリティと同じである。
【００６０】
ディスパリティ回路５００が高速である理由の１つは、以下のことにある。先のスターティング・ディスパリティＰＮＤＦＢＹ＿ＬＡＳＴと先の符号化バイトのディスパリティＰＢＡＬＢＹ＿ＬＡＳＴとが分かっているので、ＰＮＤＦＳ６は１つのＸＮＯＲゲート５１２の遅延である短い遅延の後で決定することができる。図４に見られるように、ＰＮＤＦＳ６はディスパリティ制御回路３００Ｂへの入力である。次にディスパリティ制御回路３００Ｂは、ほんの僅かな遅延の後でＰＮＤＦＳ６信号を使用することができ、次にディスパリティ制御回路３００Ｂは、信号ＮＣＭＰＬＳ６とＮＣＭＰＬＳ４を生成する。これらの信号は、６ビットの符号化ベクトルと４ビットの符号化ベクトルとをそれぞれ必要に応じて反転させるために、図３の符号化回路３００Ａによって使用される。６ビットの符号化ベクトルＰＣａ、ＰＣｂ、ＰＣｃ、ＰＣｄ、ＰＣｅ、ＰＣｉが符号化されるときまでに、信号ＮＣＭＰＬＳ６が利用可能でなければならず、これは、８Ｂ／１０Ｂ伝送コードの１バイトの符号化が１サイクルで行えることを意味する。
【００６１】
Ｅ．１バイト符号器用のディスパリティ回路、低速版
ディスパリティ処理の高速手法をよりよく説明するために、従来の方法も図７に示す。従来の方法は、図６の回路５００のより高いパフォーマンスが必要でないケースで適用可能である。図７には、８Ｂ／１０Ｂ符号器６１０、ＸＮＯＲゲート６１２を含むディスパリティ回路６００が示されている。符号器６１０は基本的に符号器５１０と等価であるが、符号器６１０に関するタイミングと符号器５１０に関するタイミングは異なっている。従来の回路においては、エンディング・ディスパリティＰＮＤＥＢＹは同じ１つの符号化サイクル内で導出される。次にただ１つのパラメータを単一のラッチを用いて次のサイクルに渡さなければならない。このラッチのデータ入力はＰＮＤＥＢＹであり、次のバイト直前のディスパリティとなる出力はＰＮＤＦＢＹである。
【００６２】
ディスパリティ回路６００がディスパリティ回路５００より低速な理由の１つを以下に説明する。ディスパリティ回路６００が現在バイトのエンディング・ディスパリティを決定する場合、現在バイトについての符号化バイトのディスパリティＰＢＡＬＢＹが分からなければならず、これは、符号器６１０についてのサイクルが終了しなければならないことを意味する。次に、現在バイトについてのエンディング・ディスパリティＰＮＤＥＢＹが同じサイクル内でＸＮＯＲ６１２によって計算される。
【００６３】
単一バイトへの適用でディスパリティ回路５００はディスパリティ回路６００に比べて速度が向上するが、複数バイトを並列に符号化する複数バイトの適用例でディスパリティ回路５００を使用する場合には、さらに大きな速度の向上が実現される。
【００６４】
Ｆ．４バイト符号器用のディスパリティ回路、高速版
次に図８を参照すると、４バイト符号器用のディスパリティ回路７００が示されている。このディスパリティ回路７００は、４バイト・ワード（これも「ブロック」と呼ぶ）ＰＤ０、ＰＤ１、ＰＤ２、ＰＤ３を並列に処理する４つの８Ｂ／１０Ｂ符号器７１１、７１２、７１３、７１４を含む。さらに、ディスパリティ回路７００の部分として、３つのＸＮＯＲゲート７２１、７２２、７２３、２つのＸＯＲゲート７３１、７３２が含まれる。
【００６５】
この回路もやはり、符号化処理のためにスターティング・ディスパリティを直ちに知る必要がないことを利用する。この用途のために、図４の回路を以下のように変更することができる。信号ＰＮＤＦＳ６とＰＤＦＳ６によるゲーティングをロジック・チェーン中に移すことができる。例えば、ゲートおよび相互接続の遅延特性によっては、各々のゲーティングをＡＯブロック３５０Ｂと３５１Ｂに、またはゲート３３０Ｂにも移すことが有利になるかもしれず、その場合、それらはＡＯＩゲートに変る。次の４バイト・ブロックのスターティング・ディスパリティＰＮＤＦＷを決定するための最終処理は、次のバイト間隔まで延期される。図８の右上にある２つのパラメータＰＢＡＬＢＹ３＿ＬＡＳＴとＰＮＤＦ３＿ＬＡＳＴは、図８下方の先行ブロック間隔から持ち越される。現在ブロックのスターティング・ディスパリティ（または先行ブロックのエンディング・ディスパリティ）は、入力ＰＮＤＦＷ（Negative Disparity in Front of the Word、ワード直前の負のディスパリティ）によって与えられる。残り３バイト（すなわち、ＰＤ１、ＰＤ２、ＰＤ３）各々のスターティング・ディスパリティは、この参照ポイントと間にある平衡バイトの数とから、並列に動作する回路によってＸＯＲおよびＸＮＯＲゲート７２０〜７２４のセットを使用して獲得される。
【００６６】
この信号ＰＢＡＬ０１２は、ブロックに含まれる最初の３バイト（すなわち、ＰＤ０、ＰＤ１、ＰＤ２）が平衡していれば、高レベルとなる。ワードのエンディング・ディスパリティＰＮＤＥＷは、ラッチ（図示せず）を介して次のワード・サイクルに渡され、このラッチの出力が次のサイクルのスターティング・ディスパリティＰＮＤＦＷとなる。１バイトのケースとして図６に示したように、ＰＮＤＥＷ信号の生成を次のワード・サイクルまで延期させれば、符号化遅延はこの場合も、ＸＮＯＲゲート１つの遅延の分だけ短縮することができる。
【００６７】
設計者の中には、バイトからバイトへディスパリティを伝播させるディジー・チェーンを実施した者もあったが、その結果、深刻な遅延を招いた。例えば、現在バイトのエンディング・ディスパリティを使用する図７のディスパリティ回路６００を、ディスパリティ回路７００中で使用した場合、第２の符号器７１２は、第１の符号器７１１からのＰＢＡＬＢＹ０が決まるまで待たなければならなくなる。同様に、第３の符号器７１３は、第１の符号器７１１からのＰＢＡＬＢＹ０と第２の符号器７１２からのＰＢＡＬＢＹ１とが決まるまで待たなければならなくなる。これは、各符号器は、その符号器が符号化サイクルを終了させる前に、先行する符号器がそのサイクルを完了させるのを待たなければならないことを意味する。図８の回路は、処理の並列化がより進んでおり、従来設計に比べて高速に処理を行える。
【００６８】
広くいえば、図８には、複数の並列８Ｂ／１０Ｂ符号器を含み、ブロック直前または任意の他の参照ポイントのランニング・ディスパリティ、参照ポイントと当該バイトとの間にある符号化バイトの数、または同じ間隔内の平衡バイトの数が奇数か偶数かに基づいて、複数の符号化１０ビット・バイト各々の直前でのスターティング・ディスパリティを決定するブロック符号器が示されている。その間隔内のバイトの数が奇数であり、平衡ベクトルの数も奇数である場合、ランニング・ディスパリティは、参照ポイントでのディスパリティと同じであり、その他の場合は、その補数となる。
【００６９】
Ｇ．４バイト符号器用のディスパリティ回路、低速版
次に図９を参照すると、４バイト符号器用のディスパリティ回路８００が示されている。このディスパリティ回路８００は、４バイト・ワードＰＤ０、ＰＤ１、ＰＤ２、ＰＤ３を並列に処理する４つの８Ｂ／１０Ｂ符号器８１１、８１２、８１３、８１４を含む。さらに、ディスパリティ回路８００の部分として、３つのＸＮＯＲゲート８２１、８２２、８２３、２つのＸＯＲゲート８３１、８３２が含まれる。
【００７０】
上で論じたように、従来の回路においては、エンディング・ディスパリティＰＮＤＥＷは１つの同じ符号化サイクル内で導出される。次にただ１つのパラメータを単一のラッチを用いて次のサイクルに渡さなければならない。このラッチのデータ入力はＰＮＤＥＷであり、次のワード直前でのディスパリティとなる出力はＰＮＤＦＷである。以下に説明するように、ディスパリティ回路８００はディスパリティ回路７００に比べて低速である。現在の４バイト・ブロックのエンディング・ディスパリティを決定するディスパリティ回路８００の場合、現在ブロックの符号化バイトのディスパリティＰＢＡＬＢＹ（０、１、２、３）が分からなければならず、これは、符号器８１１〜８１４のサイクルが終了しなければならないことを意味する。その後、現在ブロックのエンディング・ディスパリティＰＮＤＥＷが、ＸＮＯＲ８２３によって計算される。
【００７１】
例示的な８Ｂ／１０Ｂ符号器について説明した。次に対応する復号器について説明する。
【００７２】
ＩＩ．１０Ｂ／８Ｂ復号器
復号器は、元のバイトＡＢＣＤＥＦＧＨ  Ｋを復元する回路と、伝送コードによって検出可能であるかぎりのすべての伝送エラーを通知する回路とを含む。６Ｂ／５Ｂ復号化規則が図１０に示す表に、４Ｂ／３Ｂ復号化規則が図１３に示す表にまとめられており、それらについて以下に説明する。数個の回路を追加するという犠牲を払って処理をより高速化できるように、分類にいくつかの変更が行われた。
【００７３】
バイトを復号化するのに必要なビットの変換を、図１０および図１３に示す表から抜き出し、要約した形式で図１４に示す表にまとめる。符号化ビットが、図１４の表に記された分類の１つに属し、そのクラスの各々のビット欄に偽を意味する「Ｆ」が記されている場合を除いて、復号化ビット「ＡＢＣＤＥ  ＦＧＨ」の値はそれぞれ、符号化ビット「ａｂｃｄｅ  ｆｇｈ」に等しい。
【００７４】
米国特許第４４８６７３９号（上で参照により組み込んだ）、および参照によりその開示を本明細書に組み込むウィドマーによる「ＡＮＳＩファイバ・チャネル伝送コード」、ＩＢＭリサーチ・レポート１８８５５（１９９３）に記載の復号器の論理実装は、必要とされる回路面積を最小に抑える試みである。これは、これらの引例では、復号化やエラー・チェックなど様々な目的のために基本論理定義を再使用することによって実現された。その手法では回路遅延が増大し、非常に高速な応用例向けに最適化されていない。本明細書で説明する高速な実装は、ビット復号化のための個々の分類、ディスパリティ分類ＤＲおよびＤＵを使用し、これらセットの各々は、ＩＢＭ  ＣＭＯＳ−７Ｓまたはその他の適切な技術によって遅延を最小に抑えて実施される。
【００７５】
６Ｂベクトル集合のいくつかは、現在の設計では、集合内の無効ベクトルを許容するようにより大まかに定義され、遅延のより短いより単純な論理項（logic terms）がもたらされる。６Ｂ／５Ｂ符号化ベクトルは４８個であるのに、６ビットでは最大６４個の異なるベクトルを有することができるので、無効ベクトルが生成される場合がある。例えば、伝送中に発生したエラーが、無効符号化ベクトルを生じることがある。有効入力については、新しい定義でもこれまで通りに処理するが、無効入力については、異なる結果を生じることがあり、論理モデリングおよび検証においてこのことを考慮に入れるべきである。無効符号化ベクトルを明示的に追加する必要はないので、これらのより包括的なカテゴリも、ディスパリティ規則チェックのクリティカル・パスにおける遅延を短縮する。より包括的な分類を使用することには、利点が２つある。すなわち、実装がより単純になることと、論理項がより少なくなることである。無効バイトが有効バイトに復号化されることがあり得るとしても、それらは無効バイトを判定するのに使用される特別の信号線（すなわち、ＰＩＮＶＢＹ）によってマークされることに留意されたい。
【００７６】
ベクトル集合Ｐ３ｘおよびＰｘ３はそれぞれ、１が３個または４個で０が３個または４個の４ビット・ベクトル「ａｂｃｄ」をすべて含む。これは旧い集合Ｐ１３およびＰ３１を置き換えたものである。集合Ｐ２２、Ｐ０４、Ｐ４０は、エラー・チェック回路内でのみ使用される。Ｐ２２はエラー・チェック回路内でＰ３ｘおよびＰｘ３から導出される。以下の式は、図１０および図１３を参照して決定される式であり、図１１および図１２に記載の復号回路によって実装される。
Ｐ４０＝ａ・ｂ・ｃ・ｄ
Ｐ０４＝ａ’・ｂ’・ｃ’・ｄ’
Ｐ３ｘ＝Ｐ３１＋Ｐ４０＋ａ・ｂ・ｃ＋ａ・ｂ・ｄ＋ａ・ｃ・ｄ＋ｂ・ｃ・ｄ
Ｐｘ３＝Ｐ１３＋Ｐ０４＋ａ’・ｂ’・ｃ’＋ａ’・ｂ’・ｄ’＋ａ’・ｃ’・ｄ’＋ｂ’・ｃ’・ｄ’
Ｐ２２＝Ｐ３ｘ’・Ｐｘ３’
【００７７】
ベクトル集合Ｐ２ｘおよびＰｘ２は、ディスパリティ・クラスを定義するのに使用され、それぞれ、１が２個または３個で０が２個または３個の３ビット・ベクトル「ａｂｃ」をすべて含む。
Ｐ２ｘ＝Ｐ２１＋Ｐ３０＋ａ・ｂ＋ａ・ｃ＋ｂ・ｃ
Ｐｘ２＝Ｐ１２＋Ｐ０３＋ａ’・ｂ’＋ａ’・ｃ’＋ｂ’・ｃ’
【００７８】
図１０に示す６Ｂ／５Ｂ復号化表および図１３に示す４Ｂ／３Ｂ復号化表は、これらの変更を反映するように変更してある。図１０および図１３において、Ｋ＝（Ｋ２８＋Ｋｘ．７）＝（ｃ＝ｄ＝ｅ＝ｉ）＋（ｅ≠ｉ）・（ｉ＝ｇ＝ｈ＝ｊ）であることに留意されたい。
【００７９】
Ａ．６Ｂ／５Ｂ復号器、有効性チェック
復号化ビットＡ、Ｂ、Ｃ、Ｄ、Ｅを生成するための論理式は、以下のようにして決定される。一般に、Ａ＝ａ、Ｂ＝ｂ、Ｃ＝ｃ、Ｄ＝ｄ、Ｅ＝ｅであるが、図１４に示す表に記された条件（「Ｆ」によって示す）の場合は、各々の符号化ビットの補数が生成され、Ａ＝ａ’のようになる。
【００８０】
図１１および図１２には、単一の回路が示されており、図３および図４についてなされた、入力、出力、共用線名に関する説明が、この場合も同様に適用される。
【００８１】
次に図１１を参照すると、復号化／有効性チェック回路１０００Ａが示されている。復号化／有効性チェック回路１０００Ａは、インバータ１００１Ａ〜１００６Ａ、ＮＡＮＤゲート１０１０Ａ〜１０２６Ａ、ＮＯＲゲート１０３０Ａ〜１０３２Ａ、ＡＮＤゲート１０５０Ａ〜１０５２Ａ、ＸＮＯＲゲート１０３５Ａ〜１０４０Ａ、ＸＯＲゲート１０４５Ａ、１０４６Ａ、ＡＯブロック１０６５Ａ、ＡＯＩブロック１０６０Ａ〜１０６２Ａ、ＯＡＩブロック１０７０Ａを含む。
【００８２】
以下の復号化式は、図１４に示す表から抜き出したものであり、図１１に示す回路によって実装される。
【００８３】
１．Ａ＝ａ’となる場合の必要十分条件
ａ・ｂ’・ｃ’・ｄ・（ｅ＝ｉ）＋Ｐ３ｘ・ｉ＋ａ’・ｂ・ｃ’・ｄ・（ｅ＝ｉ）＋ａ・ｂ・ｅ・ｉ＋Ｐｘ３・（ｄ・ｉ＋ｅ’）＋ｃ’・ｄ’・ｅ’・ｉ’
ブール式の操作を用いて、この論理表現は以下のように変形できる。
（ａ≠ｂ）・ｃ’・ｄ・（ｅ＝ｉ）＋Ｐ３ｘ・ｉ＋Ｐｘ３・（ｄ・ｉ＋ｅ’）＋ａ・ｂ・ｅ・ｉ＋ｃ’・ｄ’・ｅ’・ｉ’
図１０に示す表を調べると、上式の第１項［（ａ≠ｂ）・ｃ’・ｄ・（ｅ＝ｉ）］は、（ａ’＋ｂ’）・ｃ’・ｄ・（ｅ＝ｉ）と変形できる。この変形表現は、やはりビット「ａ」の補数化を必要とするＤ７（「１０００１１１」＝Ｐｘ３・ｄ・ｉ）とオーバラップする。そのため、ビット「ａ＝０」を「Ａ＝１」に復号化するのに、項Ｐｘ３・ｄ・ｉは取り除くことが可能であり、したがって、非クリティカル・パスにおける遅延が短縮できる。しかし、ここに示す例では、ゲートを節約するために、この項を含めてある。図１１の回路図に実装されている式は以下のものである。
（ａ’＋ｂ’）・ｃ’・ｄ・（ｅ＝ｉ）＋Ｐ３ｘ・ｉ＋Ｐｘ３・（ｄ・ｉ＋ｅ’）＋ａ・ｂ・ｅ・ｉ＋ｃ’・ｄ’・ｅ’・ｉ’
図１１の論理図では、以下の省略形が使用されている。
ｎ０＝（ａ’＋ｂ’）・ｃ’・ｄ・（ｅ＝ｉ）＝ｃ’・ｄ・（ｅ＝ｉ）・ｎ８
ｎ１＝Ｐｘ３・（ｄ・ｉ＋ｅ’）
ｎ２＝ａ・ｂ・ｅ・ｉ＋ｃ’・ｄ’・ｅ’・ｉ’
ｎ８＝（ａ’＋ｂ’）
ＣＰＬａ＝ｎ０＋ｎ１＋Ｐ３ｘ・ｉ＋ｎ２、ここで、ＣＰＬは補数を表す。
【００８４】
２．Ｂ＝ｂ’となる場合の必要十分条件
ａ’・ｂ・ｃ・ｄ’・（ｅ＝ｉ）＋Ｐ３ｘ・ｉ＋ａ・ｂ’・ｃ・ｄ’・（ｅ＝ｉ）＋ａ・ｂ・ｅ・ｉ＋Ｐｘ３・（ｄ・ｉ＋ｅ’）＋ｃ’・ｄ’・ｅ’・ｉ’
このブール式を変形すると、
（ａ≠ｂ）・ｃ・ｄ’・（ｅ＝ｉ）＋Ｐ３ｘ・ｉ＋Ｐｘ３・（ｄ・ｉ＋ｅ’）＋ａ・ｂ・ｅ・ｉ＋ｃ’・ｄ’・ｅ’・ｉ’
図１０に示す表を調べると、第１項（ａ≠ｂ）・ｃ・ｄ’・（ｅ＝ｉ）はやはり、（ａ＋ｂ）・ｃ・ｄ’・（ｅ＝ｉ）と簡略化できることが検証できる。しかし、（ａ≠ｂ）のほうが（ａ＋ｂ）よりも短い遅延で生成できるので、前の表現を使用する。
論理図では、以下の省略形が使用されている。
ｎ３＝ｃ・ｄ’・（ｅ＝ｉ）・（ａ≠ｂ）
ＣＰＬｂ＝ｎ３＋ｎ１＋Ｐ３ｘ・ｉ＋ｎ２
【００８５】
３．Ｃ＝ｃ’となる場合の必要十分条件
ａ’・ｂ・ｃ・ｄ’・（ｅ＝ｉ）＋Ｐ３ｘ・ｉ＋ａ’・ｂ・ｃ’・ｄ・（ｅ＝ｉ）＋ａ’・ｂ’・ｅ’・ｉ’＋Ｐｘ３・（ｄ・ｉ＋ｅ’）＋ｃ’・ｄ’・ｅ’・ｉ’
この論理表現は以下のように変形できる。
ａ’・ｂ・（ｃ≠ｄ）・（ｅ＝ｉ）＋Ｐ３ｘ・ｉ＋Ｐｘ３・（ｄ・ｉ＋ｅ’）＋ｅ’・ｉ’・（ａ’・ｂ’・ｃ’・ｄ’）
論理図では、以下の省略形が使用されている。
ｎ４＝ａ’・ｂ・（ｃ≠ｄ）・（ｅ＝ｉ）
ｎ５＝ｅ’・ｉ’・（ａ’・ｂ’・ｃ’・ｄ’）
ＣＰＬｃ＝ｎ４＋ｎ１＋Ｐ３ｘ・ｉ＋ｎ５
【００８６】
４．Ｄ＝ｄ’となる場合の必要十分条件
ａ・ｂ’・ｃ’・ｄ・（ｅ＝ｉ）＋Ｐ３ｘ・ｉ＋ａ・ｂ’・ｃ・ｄ’・（ｅ＝ｉ）＋ａ・ｂ・ｅ・ｉ＋Ｐｘ３・（ｄ・ｉ＋ｅ’）＋ｃ’・ｄ’・ｅ’・ｉ’
この論理表現は以下のように変形できる。
ａ・ｂ’・（ｃ≠ｄ）・（ｅ＝ｉ）＋Ｐ３ｘ・ｉ＋ａ・ｂ・ｅ・ｉ＋Ｐｘ３・（ｄ・ｉ＋ｅ’）＋ｃ’・ｄ’・ｅ’・ｉ’
論理図では、以下の省略形が使用されている。
ｎ６＝ａ・ｂ’・（ｃ≠ｄ）・（ｅ＝ｉ）
ＣＰＬｄ＝ｎ６＋ｎ１＋Ｐ３ｘ・ｉ＋ｎ２
【００８７】
５．Ｅ＝ｅ’となる場合の必要十分条件
ａ・ｂ’・ｃ’・ｄ・（ｅ＝ｉ）＋Ｐｘ３・ｉ’＋ａ’・ｂ・ｃ’・ｄ・（ｅ＝ｉ）＋ａ’・ｂ’・ｅ’・ｉ’＋Ｐｘ３・（ｄ・ｉ＋ｅ’）＋ｃ’・ｄ’・ｅ’・ｉ’
これをブール式の変形によって以下のように変形する。
（ａ≠ｂ）・ｃ’・ｄ・（ｅ＝ｉ）＋Ｐｘ３・（ｄ・ｉ＋ｅ’＋ｉ’）＋ｅ’・ｉ’・（ａ’・ｂ’＋ｃ’・ｄ’）
図１０の表を調べると、ビット「ａ」の「Ａ」への復号化に関して上記で説明したのと同様のオーバラップが見られる。このケースでは、オーバラップを利用して、項Ｐｘ３・ｄ・ｉを取り除くことにより、ゲートを節約することができる。したがって、等式は以下のように変形できる。
（ａ’＋ｂ’）・ｃ’・ｄ・（ｅ＝ｉ）＋Ｐｘ３・（ｅ’＋ｉ’）＋ｅ’・ｉ’・（ａ’・ｂ’＋ｃ’・ｄ’）
論理図では、以下の省略形が使用されている。
ｎ７＝Ｐｘ３・（ｅ’＋ｉ’）
ＣＰＬｅ＝ｎ０＋ｎ７＋ｎ５
【００８８】
無効ベクトルＲ６、ＩＮＶＲ６の論理式  全部で１６個の無効ベクトルＲ６がある。
ＩＮＶＲ６＝Ｐ４０＋Ｐ０４＋Ｐ３ｘ・ｅ・ｉ＋Ｐｘ３・ｅ’・ｉ’
【００８９】
復号化回路図における接頭辞なしの名称の表記法についての注記。ブール演算子には、符号化図の場合と同じ文字を使用するが、符号化ビットを表すいくつかの小文字ａｄｃｄｅｉｆｇｈｊとの混乱を避けるため、大文字（Ａ、Ｏ、Ｎ、Ｅ、ＵＥ）で表記する。
【００９０】
Ｂ．６Ｂ／５Ｂディスパリティ・チェック
図１２には、６Ｂ／５Ｂディスパリティ・チェックを実行するための回路１０００Ｂが示されている。ディスパリティ・チェック回路１０００Ｂは、ＮＡＮＤゲート１００１Ｂ〜１０２７Ｂ、ＮＯＲゲート１０３０Ｂ、ＡＯＩブロック１０４０Ｂ〜１０４４Ｂを含む。
【００９１】
図１０の表の「ＤＲ」欄には、各６Ｂベクトルの先頭での必要ディスパリティが記されており、「ＤＲクラス」欄は、各入力ビット・パターンを識別する。上で参照により組み込んだ「ＡＮＳＩファイバ・チャネル伝送コード」にある従来のＤＢ欄は、ＤＵに変更され、今のところ、ディスパリティ依存ベクトルについてのみエグジット・ディスパリティが正になるか負になるか記されている。ディスパリティ独立ベクトルは、ＤＵ欄に何も記されていない。「ＡＮＳＩファイバ・チャネル伝送コード」の従来の設計では、ディスパリティ独立ベクトルは、入力ディスパリティを出力に渡していた。換言すれば、現在ベクトルがディスパリティ独立ベクトルである場合、現在ベクトルの出力ディスパリティが、入力ディスパリティに設定されていた。本明細書で開示する新しい設計では、ディスパリティ独立ベクトルは、遅延をより短くするために、ディスパリティの目的では無視されバイパスされる。図１２に示すＤＵ出力ＰＤＵＲ６およびＮＤＵＲ６（ＮＰＤＵＲ６はＰＤＵＲ６を反転させたもの）はクリティカル・パス内にあるので、それらについての短い遅延は特に重要である。この目的を達成するために、受信ベクトルを最も効率的な方法でＤＵクラスに振り分ける専用の「ＤＵクラス」欄が追加され、したがって、ディスパリティ転送またはディスパリティ独立ベクトルの判定は実行されない。
【００９２】
必要入力ディスパリティＤＲＲ６の論理式  項ＰＤＲＲ６および項ＮＤＲＲ６はそれぞれ、ベクトル先頭で正または負のランニング・ディスパリティが必要とされるＲ６ベクトル（すなわち、６ビットの受信ベクトル）を表す。従来の実装とは反対に、Ｐ４０またはＰ０４で始まるすべての無効ベクトルは、エラー・チェック方式全体でそれらが冗長となるために等式から除外された。換言すれば、Ｐ４０またはＰ０４で始まるベクトルは無効であるので、それらをディスパリティ決定で使用する理由はない。
ＰＤＲＲ６＝Ｐｘ３・（ｅ’＋ｉ’）＋ａ’・ｂ’・ｃ’＋（ａ・ｂ・ｃ）・ｄ’・ｅ’・ｉ’＋Ｐｘ２・ｅ’・ｉ’
ＮＤＲＲ６＝Ｐ３ｘ・（ｅ＋ｉ）＋ａ・ｂ・ｃ＋（ａ’・ｂ’・ｃ’）・ｄ・ｅ・ｉ＋Ｐ２ｘ・ｅ・ｉ
ブール演算を行い、これを変形する。
ＰＤＲＲ６＝Ｐｘ３・（ｅ’＋ｉ’）＋ａ’・ｂ’・ｃ’＋ｅ’・ｉ’・［Ｐｘ２＋ｄ’・（ａ・ｂ・ｃ）’］
ＮＤＲＲ６＝Ｐ３ｘ・（ｅ＋ｉ）＋ａ・ｂ・ｃ＋ｅ・ｉ・［Ｐ２ｘ＋ｄ・（ａ’・ｂ’・ｃ’）’］
図１２では、接頭辞なしの名称について以下の省略形が使用されている。
ｎ２０＝（ａ・ｂ・ｃ）’・ｄ’
ｎ２１＝（ａ’・ｂ’・ｃ’）’・ｄ
ｎ２２＝ＰＤＲＲ４・ＮＤＲＲ６’
ｎ２３＝ＮＤＲＲ４・ＰＤＲＲ６’
【００９３】
バイト・ディスパリティ違反の監視のための論理式  ディスパリティ独立ベクトルＲ６およびＲ４のみを有するバイトは、ディスパリティ・チェックの目的では無視される。以下の条件下で、特定のバイトでディスパリティ違反ＤＶＢＹが発生する。
【００９４】
１．Ｒ６ベクトルの必要エントリ・ディスパリティがバイト直前のランニング・ディスパリティと一致しない。
【００９５】
２．Ｒ６ベクトルがディスパリティ独立であり、Ｒ４ベクトルの必要エントリ・ディスパリティがバイト直前のランニング・ディスパリティと一致しない。
【００９６】
クリティカル・パスでの遅延を短縮させる実装では、ベクトルＲ６の独立性は判定されない。その代りに、ベクトルＲ６がランニング・ディスパリティと一致する必要エントリ・ディスパリティを有する場合以外は、ベクトルＲ４のエントリ・ディスパリティがバイト直前のディスパリティと比較され、一致しない場合、エラーにフラグが立てられる。
【００９７】
ディスパリティ依存Ｒ４ベクトルがディスパリティ依存Ｒ６ベクトルと一致しないことによる、バイトに内在するディスパリティ違反は、無効バイトの集合中に含まれ、ＤＶＢＹ中には含まれない。したがって、バイトでのディスパリティ違反ＤＶＢＹは、次式によって与えられる。
ＤＶＢＹ＝ＮＤＦＢＹ・（ＰＤＲＲ６＋ＰＤＲＲ４・ＮＤＲＲ６’）＋ＰＤＦＢＹ・（ＮＤＲＲ６＋ＮＤＲＲ４・ＰＤＲＲ６’）
【００９８】
ＰＤＦＢＹ項およびＮＤＦＢＹ項はそれぞれ、バイト直前でのランニング・ディスパリティが正または負であることを表す。
【００９９】
必要に応じて、ＡＮＤゲート１０２５Ｂ、１０２４Ｂと、ＮＤＲＲ６、ＰＤＲＲ６関数とを結合することによって、上式中の１レベルのゲーティング（図１２のＮＡＮＤゲート１０２７Ｂ、１０２６Ｂ）を取り除くことができる。次に２つのＡＯＩ２２２ゲート１０４３Ｂ、１０４４Ｂをまず複製し、インバータのない形に変更し、ＡＯ２２２２（すなわち、４つの２入力ＡＮＤゲートに、１つの４入力ＯＲゲートが続いたもの）に拡張して、ＰＮＤＲとＰＤＲを直接生成する。
【０１００】
想定エンディング・ディスパリティＰＤＵＲ６およびＮＤＵＲ６の論理式  無効ベクトルＰＩＮＶＲ６用およびディスパリティ違反用のエグジット・ディスパリティＰＤＵＲ６およびＮＤＵＲ６を生成するための論理式は、上で参照により組み込んだ「ＡＮＳＩファイバ・チャネル伝送コード」の１９ページに記載があり、説明されている。本明細書では、それに単純化を施した。表現ＰＤＢＲ６およびＮＤＢＲ６については、項Ｐ４０および項Ｐ０４をそれぞれ、Ｐ４０・（ｅ＋ｉ）およびＰ０４・（ｅ’＋ｉ’）で置き換えた。符号化ドメイン中の項Ｐ４０および項Ｐ０４は、少なくとも１つのエラーがあるだけで生成され得る。エラーが１つでかつｅ＝ｉの場合、Ｒ６ベクトルは明らかに最初は平衡していたので、実際のエラー箇所での無効ベクトルの他に、次のディスパリティ依存ベクトルで過剰なコード違反を生成するＰＤＵＲ６またはＮＤＵＲ６を生成すべきでない。したがって、
ＰＤＵＲ６＝Ｐ３ｘ・（ｅ＋ｉ）＋ｄ・ｅ・ｉ＋Ｐ２ｘ・ｅ・ｉ＝Ｐ３ｘ・（ｅ＋ｉ）＋ｅ・ｉ・（ｄ＋Ｐ２ｘ）
ＮＤＵＲ６＝Ｐｘ３・（ｅ’＋ｉ’）＋ｄ’・ｅ’・ｉ’＋Ｐｘ２・ｅ’・ｉ’＝Ｐｘ３・（ｅ’＋ｉ’）＋ｅ’・ｉ’・（ｄ’＋Ｐｘ２）
【０１０１】
Ｃ．４Ｂ／３Ｂ復号器、エラー・チェック
図１５には、４Ｂ／３Ｂ伝送コードの復号化およびエラー・チェックを行うための復号化／エラー・チェック回路１３００が示されている。復号化およびエラー・チェック回路１３００は、インバータ１３０１〜１３０８、ＮＡＮＤゲート１３１０〜１３２７、ＮＡＮＤＮ１ゲート１３５５〜１３５７、ＸＮＯＲゲート１３４０〜１３４６、ＸＯＲゲート１３５０、ＡＯブロック１３６０、ＡＯＩブロック１３６５、ＯＡＩブロック１３７０、１３７１を含む。
【０１０２】
復号化ビットＦＧＨＫの生成のための論理式  一般に、Ｆ＝ｆ、Ｇ＝ｇ、Ｈ＝ｈであるが、図１４の表のエントリにＦ（偽）とある条件の場合は、各々の符号化ビットの補数が生成され、Ｈ＝ｈ’のようになる。
【０１０３】
図１３に示す表では、ラインＤ／Ｋｘ．３（００１１）、Ｄ／Ｋｘ．４（１１０１）、Ｄｘ．７（０００１）のすべてについて、符号化クラスが、（ｆ＝ｇ）・ｊに変更された。同様な変更がその他のベクトル分類についても行われた。これによって、図１４に示す表にある分類欄の最後の５行の等式が単純化された。この変更により、以下の復号化式が、図１４に示す表から抜き出され、図１５の復号化／エラー・チェック回路１３００によって実施される。
【０１０４】
１．Ｆ＝ｆ’となる場合の必要十分条件
（ｆ≠ｇ）・ｈ・ｊ＋（ｆ＝ｇ）・ｊ＋ｃ’・ｄ’・ｅ’・ｉ’・（ｈ≠ｊ）
論理図では、以下の省略形が使用されている。
ｍ０＝ｆ≠ｇ）・ｈ・ｊ
ｍ７＝ｃ’・ｄ’・ｅ’・ｉ’・（ｈ≠ｊ）
ＣＰＬｆ＝ｍ０＋（ｆ＝ｇ）・ｊ＋ｍ７
【０１０５】
２．Ｇ＝ｇ’となる場合の必要十分条件
（ｆ≠ｇ）・ｈ’・ｊ’＋（ｆ＝ｇ）・ｊ＋ｃ’・ｄ’・ｅ’・ｉ’・（ｈ≠ｊ）
ＣＰＬｇ＝（ｆ≠ｇ）・ｈ’・ｊ’＋（ｆ＝ｇ）・ｊ＋ｍ７
【０１０６】
３．Ｈ＝ｈ’となる場合の必要十分条件
ｆ・ｇ’・（ｈ＝ｊ）＋（ｆ＝ｇ）・ｊ＋ｃ’・ｄ’・ｅ’・ｉ’・（ｈ≠ｊ）
定義。
ｍ２＝ｆ・ｇ’・（ｈ＝ｊ）
ＣＰＬｈ＝ｍ２＋（ｆ＝ｇ）・ｊ＋ｍ７
【０１０７】
制御ビットＫの論理式
Ｋ＝（Ｋ２８＋Ｋｘ．７）＝（ｃ＝ｄ＝ｅ＝ｉ）＋（ｅ≠ｉ）・（ｉ＝ｇ＝ｈ＝ｊ）
遅延を短縮するために、上式を以下のように実施する。
Ｋ＝ｃ・ｄ・ｅ・ｉ＋ｃ’・ｄ’・ｅ’・ｉ’＋（ｅ≠ｉ）・（ｉ・ｇ・ｈ・ｊ＋ｉ’・ｇ’・ｈ’・ｊ’）
論理図では、以下の省略形が使用されている。
ｍ１０＝ｉ・ｇ・ｈ・ｊ＋ｉ’・ｇ’・ｈ’・ｊ’
Ｋｘ７＝ｍ１０・（ｅ≠ｉ）
【０１０８】
Ｒ４ベクトル直前での必要ディスパリティの論理式  項ＰＤＲＲ４および項ＮＤＲＲ４はそれぞれ、Ｒ４ベクトル直前での正または負の必要ディスパリティを表す。
ＰＤＲＲ４＝ｆ・ｇ’＋（ｆ≠ｇ）・ｈ’・ｊ’
ＮＤＲＲ４＝ｆ・ｇ＋（ｆ≠ｇ）・ｈ・ｊ＝ｆ・ｇ＋ｍ０
【０１０９】
想定エンディング・ディスパリティＰＤＵＲ４およびＮＤＵＲ４の論理式
ＰＤＵＲ４＝ｈ・ｊ＋ｆ・ｇ・（ｈ≠ｊ）
ＮＤＵＲ４＝ｈ’・ｊ’＋ｆ・ｇ’・（ｈ≠ｊ）
【０１１０】
無効ベクトルＲ４、ＩＮＶＲ４の論理式  本質的に無効なＲ４ベクトルが全部で２つある。すなわち、すべて０またはすべて１（ｆ＝ｇ＝ｈ＝ｊ）のものである。Ｓ関数規則違反（ｅ＝ｉ＝ｆ＝ｇ＝ｈ）やＰ２２クラスのＲ６ベクトルをもつＫｘ．７制御文字といった、Ｒ６ベクトルとＲ４ベクトルとの無効な組合せも、この回路複合体（circuit complex）によって検出され、信号ＩＮＶＲ４にまとめられる。従来の設計では、これら不適切なＲ６ベクトルは平衡ベクトルに分類していたため、回路がより複雑になっていた。Ｋ２８・（ｆ＝ｇ＝ｈ）文字は、符号化制約から見て有効な制御文字であるが、特殊な符号化回路を必要とするために８Ｂ／１０Ｂアルファベットには含まれていない。この文字は無効文字のグループに含まれている。
【０１１１】
以下の条件が満たされる場合、無効Ｋｘ．７制御文字が受信された。
ＶＫｘ７＝（ｉ・ｇ・ｈ・ｊ＋ｉ’・ｇ’・ｈ’・ｊ’）・（ｅ≠ｉ）・Ｐ２２＝ｍ１０・（ｅ≠ｉ）・Ｐ２２
その他の無効Ｒ４ベクトルは、信号ＩＮＶＲ４にまとめられる。
ＩＮＶＲ４＝（ｆ＝ｇ＝ｈ＝ｊ）＋（ｅ＝ｉ＝ｆ＝ｇ＝ｈ）＋Ｋ２８・（ｆ＝ｇ＝ｈ）＋Ｋ２８’・（ｉ≠ｇ＝ｈ＝ｊ）
定義。
ｍ５＝Ｋ２８・（ｆ＝ｇ＝ｈ）
ｍ６＝Ｋ２８’・（ｉ≠ｇ＝ｈ＝ｊ）
ＩＮＶＲ４＝（ｆ＝ｇ＝ｈ＝ｊ）＋（ｅ＝ｉ＝ｆ＝ｇ＝ｈ）＋ｍ５＋ｍ６
【０１１２】
Ｄ．１０Ｂ／８Ｂ復号器、エラー・チェック
図１６には、１０Ｂ／８Ｂ伝送コードの復号化およびエラー・チェックを行うための回路１４００が示されている。回路１４００は、６Ｂ／５Ｂ復号ブロック１４１０、４Ｂ／３Ｂ復号ブロック１４２０、インバータ１４３０、１４３１、ＮＡＮＤゲート１４４０、１４４１、ＮＯＲゲート１４５０、ＯＡＩブロック１４６０、１４６１を含む。６Ｂ／５Ｂ復号ブロック１４１０は、図１１および図１２にそれぞれ示す回路１０００Ａおよび１０００Ｂである。４Ｂ／３Ｂ復号ブロック１４２０は、図１５に示す回路である。
【０１１３】
エラー・レポーティング
この回路１４００は、６Ｂ／５Ｂ復号器１４１０、４Ｂ／３Ｂ復号器１４２０を結合して１バイト復号器としたものであり、本質的に無効なバイトを通知する信号ＰＩＮＶＢＹを生成する。これには、現在バイトの１０個の符号化ビットを検査するたけで明らかとなるディスパリティ違反ＮＤＶ６４が含まれる。信号ＰＶＩＯＬは、現在バイトまたは先行バイトでのエラーに起因することがある現在位置で検出される無効バイトまたはディスパリティ違反ＮＤＶＢＹのいずれかを通知する。
【０１１４】
ディスパリティ・モニタリング
一方または両方のベクトルがディスパリティ依存である場合、バイト末尾での正または負のランニング・ディスパリティを設定するために、ＰＤＵＢＹまたはＰＮＤＵＢＹがそれぞれアサートされる。
ＰＤＵＢＹ＝ＰＤＵＲ４＋ＰＤＵＲ６・ＮＤＵＲ４’
ＮＤＵＢＹ＝ＮＤＵＲ４＋ＮＤＵＲ６・ＰＤＵＲ４’
【０１１５】
Ｅ．バイト・ディスパリティ、高速版
表記法
信号名ＰＤＦＢＹおよびＮＤＦＢＹはそれぞれ、バイト直前での正および負のランニング・ディスパリティを指す。信号名ＰＤＵＢＹおよびＮＤＵＢＹはそれぞれ、バイトの正または負の想定エグジット・ディスパリティを指し、フロントエンドでのスターティング・ディスパリティとは無関係である。バイトの６Ｂベクトルと４Ｂベクトルのどちらもディスパリティ依存でない場合、２つの出力はどちらもアサートされない。
【０１１６】
図１７には、１０Ｂ／８Ｂ復号ブロック１５１０、インバータ１５２０、１５２１、ＯＡＩブロック１５３０を含む、バイト・ディスパリティ回路１５００が示されている。１０Ｂ／８Ｂ復号ブロック１５１０は、図１６に回路１４００として示した回路である。
【０１１７】
出力ＮＤＦＢＹ、ＰＤＵＢＹ、ＰＮＤＵＢＹの値は、復号化データ出力と同じクロックで動作する３つのラッチ（図には図示せず）に保存される。ラッチの出力はそれぞれ、ＮＤＦＢＹ＿ＬＡＳＴ、ＰＤＵＢＹ＿ＬＡＳＴ、ＰＮＤＵＢＹ＿ＬＡＳＴと命名されており、次のバイトのスターティング・ディスパリティＮＤＦＢＹを計算するために使用される。
【０１１８】
バイト先頭でのディスパリティを決定するための論理式
ＰＤＦＢＹ＝ＰＤＵＢＹ＿ＬＡＳＴ＋ＰＤＦＢＹ＿ＬＡＳＴ・ＮＤＵＢＹ＿ＬＡＳＴ’
ＮＤＦＢＹとＰＤＦＢＹとは相補的であること、すなわち、ＮＤＦＢＹ＝ＰＤＦＢＹ’であることに留意されたい。
【０１１９】
ＰＤＵＢＹとＮＤＵＢＹとは排他的な関係にあり、共に真でないか、一方のみが真であるかである。
【０１２０】
図１７の回路は、先行バイト先頭でのランニング・ディスパリティおよび先行バイトのエグジット・ディスパリティが、現在のサイクルの計算中に使用されるという点で、図６の回路と同じであり、これによって、処理が高速化している。
【０１２１】
Ｆ．バイト・ディスパリティ、低速版
図１８には、バイト末尾でのランニング・ディスパリティを生成するための、低速版の回路１６００が示されている。回路１６００は、１０Ｂ／８Ｂ復号器１６１０（基本的に復号器１５１０と同等）、インバータ１６２０、１６２１、ＯＡＩブロック１６３０を含む。
【０１２２】
低速版を使用する動機は、２つのラッチを節約することにある。タイミングがあまり重要でない場合、復号化およびエラー・チェックと同じサイクル内で、エンディング・ディスパリティＰＤＥＢＹを生成する。そのため、このただ１つのパラメータを、従来の方式で次のサイクルに渡さなければならない。このラッチの出力（ラッチは図示せず）は、新しいバイトの直前でのディスパリティである信号ＰＤＦＢＹである。最長の遅延パスがＰＤＥＢＹ出力へのパスである場合、１個のインバータと１個のＯＡＩ２１ゲートに伴う遅延がクリティカル・パスに追加される。
【０１２３】
回路１６００は、現在バイト末尾でのディスパリティと共に先行バイト末尾でのランニング・ディスパリティを使用するので、より低速になる。
【０１２４】
Ｇ．４バイト・ワード復号器
図１９には、４バイト・ワード復号器が示されている。４バイト・ワード復号器１７００は、１０Ｂ／８Ｂ復号ブロック１７１０、１７１１、１７１２、１７１３、インバータ１７２０〜１７２７、ＮＯＲゲート１７３０〜１７３４、ＯＡＩブロック１７４０〜１７４２、ＡＯブロック１７５０〜１７５２を含む。
【０１２５】
表記法
信号名ＰＤＦＢＹ０およびＮＤＦＢＹ０はそれぞれ、バイト＃０の直前での正および負のディスパリティを指す。
【０１２６】
信号名ＰＤＵＢＹ０およびＮＤＵＢＹ０はそれぞれ、バイト＃０の正または負の想定エグジット・ディスパリティを指す。バイトの６Ｂベクトルと４Ｂベクトルのどちらもディスパリティ依存でない場合、２つの出力のどちらもアサートされない。
【０１２７】
出力ＰＤＦＢＹ３、ＰＮＤＦＢＹ３、ＰＤＵＢＹ３の値はそれぞれ、信号ＰＤＦＢＹ３＿ＬＡＳＴ、ＰＮＤＦＢＹ３＿ＬＡＳＴ、ＰＤＵＢＹ３＿ＬＡＳＴ、ＰＮＤＵＢＹ３を提供するラッチ（図示せず）に保存され、これらの信号は、図の上部で、次のワード・サイクルのためのスターティング・ディスパリティＰＤＦＢＹ０およびＰＮＤＦＢＹ０を計算するために使用される。
【０１２８】
バイト先頭でのディスパリティを決定するための論理式
ＰＤＦＢＹ０＝ＰＤＵＢＹ３＿ＬＡＳＴ＋ＰＤＦＢＹ３＿ＬＡＳＴ・ＮＤＵＢＹ３＿ＬＡＳＴ’
ＮＤＦＢＹ０＝ＮＤＵＢＹ３＿ＬＡＳＴ＋ＮＤＦＢＹ３＿ＬＡＳＴ・ＰＤＵＢＹ３＿ＬＡＳＴ’
ＰＤＦＢＹ０とＮＤＦＢＹ０とは相補的であるが、ＰＤＵＢＹ３とＮＤＵＢＹ３とは排他的な関係にあり、共に真でないか、一方のみが真であるかである。
【０１２９】
回路遅延を最小に抑えるため、バイト＃１、バイト＃２、バイト＃３の直前でのディスパリティ値は、バイトからバイトへ順次決定されるのではなく、バイト＃０直前のディスパリティと間にあるバイトによって引き起こされたディスパリティの変化とに基づいて決定される。
ＰＤＦＢＹ１＝ＰＤＵＢＹ０＋ＰＤＦＢＹ０・ＮＤＵＢＹ０’
ＮＤＦＢＹ１＝ＮＤＵＢＹ０＋ＮＤＦＢＹ０・ＰＤＵＢＹ０’
ＰＤＦＢＹ２＝ＰＤＵＢＹ１＋ＰＤＵＢＹ０・ＮＤＵＢＹ１’＋ＰＤＦＢＹ０・ＮＤＵＢＹ０’・ＮＤＵＢＹ１’
ｎ０＝ＮＤＵＢＹ０＋ＮＤＵＢＹ１
ＰＤＦＢＹ２＝ＰＤＵＢＹ１＋ＰＤＵＢＹ０・ＮＤＵＢＹ１’＋ＰＤＦＢＹ０・ｎ０’
ＮＤＦＢＹ２＝ＮＤＵＢＹ１＋ＮＤＵＢＹ０・ＰＤＵＢＹ１’＋ＮＤＦＢＹ０・ＰＤＵＢＹ０’・ＰＤＵＢＹ１’
ｎ１＝ＰＤＵＢＹ０＋ＰＤＵＢＹ１
ＮＤＦＢＹ２＝ＮＤＵＢＹ１＋ＮＤＵＢＹ０・ＰＤＵＢＹ１’＋ＮＤＦＢＹ０・ｎ１’
ＰＤＦＢＹ３＝ＰＤＵＢＹ２＋ＰＤＵＢＹ１・ＮＤＵＢＹ２’＋ＰＤＵＢＹ０・ＮＤＵＢＹ１’・ＮＤＵＢＹ２’・ＰＤＦＢＹ０・ＮＤＵＢＹ０’・ＮＤＵＢＹ１’・ＮＤＵＢＹ２’
ｎ２＝ＮＤＵＢＹ０＋ＮＤＵＢＹ１＋ＮＤＵＢＹ２
ｎ３＝ＮＤＵＢＹ１＋ＮＤＵＢＹ２
ＰＤＦＢＹ３＝ＰＤＵＢＹ２＋ＰＤＵＢＹ１・ＮＤＵＢＹ２’＋ＰＤＵＢＹ０・ｎ３’・ＰＤＦＢＹ０・ｎ２’
ＮＤＦＢＹ３＝ＮＤＵＢＹ２＋ＮＤＵＢＹ１・ＰＤＵＢＹ２’＋ＮＤＵＢＹ０・ＰＤＵＢＹ１’・ＰＤＵＢＹ２’・ＮＤＦＢＹ０・ＰＤＵＢＹ０’・ＰＤＵＢＹ１’・ＰＤＵＢＹ２’
ｎ４＝ＰＤＵＢＹ０＋ＰＤＵＢＹ１＋ＰＤＵＢＹ２
ｎ５＝ＰＤＵＢＹ１＋ＰＤＵＢＹ２
ＮＤＦＢＹ３＝ＮＤＵＢＹ２＋ＮＤＵＢＹ１  ＰＤＵＢＹ２’＋ＮＤＵＢＹ０・ｎ５’・ＮＤＦＢＹ０・ｎ４’
【０１３０】
図１９の回路１７００の実装において、以下の関係を有利に使用する。
ＰＮＤＦＢＹ１＝ＰＤＦＢＹ１’
ＰＮＤＦＢＹ２＝ＰＤＦＢＹ２’
【０１３１】
これらの信号はクリティカル・パス内にはなく、反転を追加しても、最大速度は低下しない。タイミングに十分な余裕がある応用例では、信号ＰＮＤＦＢＹ３とおそらくＰＤＦＢＹ３’についても、それら２つの信号の各々について反転を１回行うという犠牲を払うことによって、同様の単純化が利用できる。
【０１３２】
本明細書に示し説明した実施形態および変形例は、本発明の原理を説明するためのものにすぎず、本発明の範囲および趣旨から逸脱することなく、様々な変更が実施できることは当業者であれば理解できよう。
【図面の簡単な説明】
【０１３３】
【図１】本発明の一実施形態により、８Ｂ／１０Ｂ伝送コードを用いて５ビットのソース・ベクトルを６ビットの符号化ベクトルに符号化するための表である。
【図２】本発明の一実施形態により、８Ｂ／１０Ｂ伝送コードを用いて３ビットのソース・ベクトルを４ビットの符号化ベクトルに符号化するための表である。
【図３】本発明の一実施形態により、８Ｂ／１０Ｂ伝送コードを用いて符号化を行うための例示的な回路の図である。
【図４】本発明の一実施形態により、８Ｂ／１０Ｂ伝送コードを用いて符号化を行う際のディスパリティ制御のための例示的な回路の図である。
【図５】本発明の一実施形態により、図３の符号化回路で用いられるＡＮＤ−ＯＲ−ＩＮＶＥＲＴ論理記号の図である。
【図６】本発明の一実施形態により、１バイト符号器用のディスパリティ決定を比較的高速に行うための例示的な回路の図である。
【図７】本発明の一実施形態により、１バイト符号器用のディスパリティ決定を比較的低速に行うための例示的な回路の図である。
【図８】本発明の一実施形態により、８Ｂ／１０Ｂ伝送コードを符号化する際に、４列並列の符号化処理を比較的高速に行うための例示的な回路の図である。
【図９】本発明の一実施形態により、８Ｂ／１０Ｂ伝送コードを符号化する際に、４列並列の符号化処理を比較的低速に行うための例示的な回路の図である。
【図１０】本発明の一実施形態により、１０Ｂ／８Ｂ伝送コードの６Ｂ／５Ｂ部分を復号化するために用いる表である。
【図１１】本発明の一実施形態により、１０Ｂ／８Ｂ伝送コードの６Ｂ／５Ｂ部分を復号化する際に、６Ｂ／５Ｂ復号化および有効性チェックを行うための例示的な回路の図である。
【図１２】本発明の一実施形態により、１０Ｂ／８Ｂ伝送コードの６Ｂ／５Ｂ部分を復号化する際に、ディスパリティ・チェックを行うための例示的な回路の図である。
【図１３】本発明の一実施形態により、１０Ｂ／８Ｂ伝送コードの４Ｂ／３Ｂ部分を復号化するために用いる表である。
【図１４】本発明の一実施形態により、１０Ｂ／８Ｂ伝送コードのクラス毎に特定のビットを反転させるかどうか判定するために用いる表である。
【図１５】本発明の一実施形態により、１０Ｂ／８Ｂ伝送コードの４Ｂ／３Ｂ部分を復号化する際に、４Ｂ／３Ｂ復号化および関連エラーのチェックを行うための例示的な回路の図である。
【図１６】本発明の一実施形態により、１０Ｂ／８Ｂ伝送コードの４Ｂ／３Ｂ部分と６Ｂ／５Ｂ部分とを復号化する際に、エラーのチェックを行うための例示的な回路の図である。
【図１７】本発明の一実施形態により、１バイト復号器用のディスパリティ決定を比較的高速に行う例示的な回路の図である。
【図１８】本発明の一実施形態により、１バイト復号器用のディスパリティ決定を比較的低速に行う例示的な回路の図である。
【図１９】本発明の一実施形態により、８Ｂ／１０Ｂ伝送コードを復号化する際に、４列並列の復号化処理を行うための例示的な回路の図である。
【符号の説明】
【０１３４】
３００Ａ  符号化回路
３００Ｂ  ディスパリティ制御回路
３８０Ａ  ＡＮＤ−ＯＲ−ＩＮＶＥＲＴ（ＡＯＩ）ブロック
５００  ディスパリティ回路
５１０  ８Ｂ／１０Ｂ符号器
６００  ディスパリティ回路
６１０  ８Ｂ／１０Ｂ符号器
７００  ディスパリティ回路
７１１  ８Ｂ／１０Ｂ符号器
７１２  ８Ｂ／１０Ｂ符号器
７１３  ８Ｂ／１０Ｂ符号器
７１４  ８Ｂ／１０Ｂ符号器
８００  ディスパリティ回路
８１１  ８Ｂ／１０Ｂ符号器
８１２  ８Ｂ／１０Ｂ符号器
８１３  ８Ｂ／１０Ｂ符号器
８１４  ８Ｂ／１０Ｂ符号器
１０００Ａ  復号化および有効性チェック回路
１０００Ｂ  ディスパリティ・チェック回路
１３００  復号化およびエラー・チェック回路
１４００  復号化およびエラー・チェック回路
１４１０  ６Ｂ／５Ｂ復号ブロック
１４２０  ４Ｂ／３Ｂ復号ブロック
１５００  バイト・ディスパリティ回路
１５１０  １０Ｂ／８Ｂ復号ブロック
１６００  ランニング・ディスパリティ生成回路（低速版）
１６１０  １０Ｂ／８Ｂ復号器
１７００  ４バイト・ワード復号器
１７１０  １０Ｂ／８Ｂ復号ブロック
１７１１  １０Ｂ／８Ｂ復号ブロック
１７１２  １０Ｂ／８Ｂ復号ブロック
１７１３  １０Ｂ／８Ｂ復号ブロック
【図１】
2005513823.tif 000003
【図２】
2005513823.tif 000004
【図３】
2005513823.tif 000005
【図４】
2005513823.tif 000006
【図５】
2005513823.tif 000007
【図６】
2005513823.tif 000008
【図７】
2005513823.tif 000009
【図８】
2005513823.tif 000010
【図９】
2005513823.tif 000011
【図１０】
2005513823.tif 000012
【図１１】
2005513823.tif 000013
【図１２】
2005513823.tif 000014
【図１３】
2005513823.tif 000015
【図１４】
2005513823.tif 000016
【図１５】
2005513823.tif 000017
【図１６】
2005513823.tif 000018
【図１７】
2005513823.tif 000019
【図１８】
2005513823.tif 000020
【図１９】
2005513823.tif 000021
【国際調査報告】
2005513823.tif 000022
2005513823.tif 000023
2005513823.tif 000024