まず、実施例1に係るデータ伝送装置が有する効果を明確にするため、従来の8B10B方式が有する問題点について説明する。まず、従来の8B10B方式を用いてデータを伝送するシリアル伝送技術の一例として、PCIe(Peripheral Component Interconnect Express)の技術について説明する。
以下、図面を用いて、PCIeの技術でデータの伝送を行うLSI(Large Scale Integrated circuit)について説明する。なお、以下の例では、データ送信側LSIとデータ受信側LSIとを複数のシリアルバスを束ねた複数レーンで接続し、複数レーンを介してデータの伝送を行う例について説明する。
図31は、複数レーンで構成された高速シリアルバスを説明するための図である。図31に示す例では、データ送信側LSI77とデータ受信側LSI84とは、複数のレーン#0〜#nで接続されており、各レーン#0〜#nを介して、シリアル伝送によるデータの送受信を行う。
図31に示す例では、データ送信側LSI77は、データ送信バッファ78、制御文字生成部79、バイトストライピング回路80、複数の送信回路81〜83を有する。また、送信回路81は、スクランブラ81a、8B10Bエンコーダ81b、シリアライザ81c、ドライバ81dを有する。なお、送信回路82および送信回路83は、送信回路81と同様の機能を発揮するものとして、説明を省略する。
一方、データ受信側LSI84は、複数の受信回路85〜87、バイトアンストライピング回路88、データ受信バッファ89、制御文字受信部90を有する。また、受信回路85は、レシーバ85a、デシリアライザ85b、8B10Bデコーダ85c、デスクランブラ85dを有する。なお、受信回路86および受信回路87は、受信回路85と同様の機能を発揮するものとして、説明を省略する。
データ送信バッファ78は、データ送信側LSI77が送信するデータを記憶するバッファである。また、制御文字生成部79は、初期化、エラーデータ操作、送信側対受信側のクロックジッタの調整等の制御を実行するためのKキャラクタを生成する。また、バイトストライピング回路80は、データ送信バッファ78および制御文字生成部79から受信したデータを、各レーン#0〜#nに対して1バイトごとに振り分けるバイトストライピング処理を実行する。
また、スクランブラ81aは、バイトストライピング回路80がレーン#0に割り当てたデータを乱数変換する。そして、8B10Bエンコーダ81bは、予め定義されたルックアップテーブルに従って、スクランブラ81aが乱数変換した8ビットのデータを10ビットに変換する。また、シリアライザ81cは、8B10Bエンコーダ81bが変換した10ビットのデータをシリアル変換する。そして、ドライバ81dは、シリアル変換されたデータを、レーン#0を介してデータ受信側LSI84へ送信する。
一方、レシーバ85aは、レーン#0を介して、ドライバ81dが送信したデータを受信する。また、デシリアライザ85bは、レシーバ85aが受信したデータを10ビットのデータにパラレル変換する。また、8B10Bデコーダ85cは、8B10Bエンコーダ81bと同様のルックアップテーブルを用いて、デシリアライザ85bが変換した10ビットのデータを元の8ビットのデータに変換する。また、デスクランブラ85dは、スクランブラ81aによる乱数変換の逆変換を行う。
また、バイトアンストライピング回路88は、バイトストライピング回路80とは逆の処理を行うことで、各受信回路85〜87が各レーン#0〜#nを介して受信したデータを元の順序に戻す。そして、バイトアンストライピング回路88は、元の順序に戻したデータをデータ受信バッファ89、または制御文字受信部90に出力する。
次に、図32を用いて、データ送信バッファ78が記憶する送信対象のデータについて説明する。図32は、従来のパケットの一例を説明するための図である。なお、図32には、データ送信バッファ78がデータリンク層から受信するパケットの一例を記載した。
例えば、データ送信バッファ78が受信するパケットは、Byte#0〜Byte#Nを含むN+1バイトのパケットであり、TLP(Transaction Layer Packet)である。詳細には、データ送信バッファ78が受信するパケットは、TLPパケット本体にTLPシーケンス番号とTLPヘッダとがデータリンク層において付加されたパケットである。また、パケットには、パケット送信時に発生するエラーの検査を行うため、32ビットのLink CRC(Cyclic Redundancy Check)が付加されており、32ビット以下の連続するエラー(バーストエラー)を検出できる。
次に、図33を用いて、制御文字生成部79が生成するKキャラクタについて説明する。図33は、Kキャラクタの一例を説明するための図である。ここで、図33に示すコードとは、各Kキャラクタを一意に示すコードである。例えば、制御文字生成部79は、レーンとリンクの初期化と管理を行う「COM」(Comma)シンボルや、トランザクション・レイヤ・パケットの開始を示す「STP」(Start TLP)シンボルを生成する。そして、制御文字生成部79は、生成した「COM」シンボルや「STP」シンボルをバイトストライピング回路80に出力する。
次に、図34を用いて、バイトストライピング回路80およびバイトアンストライピング回路88が実行する処理について説明する。図34は、バイトストライピング回路が実行する処理の一例を説明するための図である。なお、図34には、バイトストライピング回路80が、Byte#00〜Byte#31までの32バイトのデータを8つのレーン#0〜#7に振り分ける処理について記載する。
例えば、バイトストライピング回路80は、図34に示すように、データ送信バッファ78が出力するデータを1バイトごとに、ラウンドロビン方式で各レーンに振り分ける。この結果、例えば、バイトストライピング回路80は、レーン#0に対してByte#00、Byte#08、Byte#16、Byte#24を振り分ける。
また、バイトアンストライピング回路80は、各受信回路85〜87が各レーン#0〜#7を介して受信したデータを元の順序に並び替え、その後、元の順序に並び変えたデータをデータ受信バッファ89に出力する。この結果、データ受信バッファ89は、データ送信バッファ78が送信したデータを受信する。
次に、図35を用いて、8B10Bエンコーダ81bが8ビットのデータを10ビットのデータに変換する処理について説明する、図35は、8B10Bコード変換回路の原理を説明するための図である。例えば、図35に示すように、8B10Bエンコーダ81bは、3ビットのデータを4ビットに変換する3Bitルックアップテーブルと、5ビットのデータを6ビットのデータに変換するルックアップテーブルとを有する。
そして、8B10Bエンコーダ81bは、ルックアップテーブルを用いて、8ビットのDキャラクタ、またはKキャラクタを10ビットのデータに変換し、変換後のデータを10ビットのシンボルコードとして出力する。また、8B10Bエンコーダ81bは、制御キャラクタ制御信号が入力されると、ルックアップテーブルを用いて、制御文字生成部79が生成した制御キャラクタを10ビットのシンボルコードに変換する。また、8B10Bエンコーダ81bは、ランニングディスパリティの値に応じて、異なるシンボルコードを出力する。
図36は、8B10Bコード変換の一例を説明するための図である。8B10Bエンコーダ81bは、図36に例示するように、ランニングディスパリティの値に応じて、8ビットの送信データを10ビットのデータに変換する。ここで、図36には、データキャラクタ名として、8B10Bエンコーダ81bが出力する10ビットのデータに付与されるコードを記載した。
また、図36には、データキャラクタ値として、変換前の8ビットのデータを16進数で表した値と、変換前の8ビットのデータとを記載した。なお、図36に示す例では、8ビットのデータを送信順に右から記載した。また、図36には、各データキャラクタが、ランニングディスパリティが正の場合と負の場合とで、どのようなデータに変換されるかを記載した。例えば、図36に示す例では、8B10Bエンコーダ81bは、ランニングディスパリティが負である場合には、8ビットのデータキャラクタ値「6C」のデータを、「00_1101_1100」に変換する。
上述したように、データ送信側LSI77は、バイトストライピング回路80を用いて、送信するデータを各レーン#0〜#7に振り分ける。そして、データ送信側LSI77は、8ビットのデータ、またはKキャラクタを10ビットのシンボルコードに変換して、10ビットのデータをデータ受信側LSI84に送信する。
しかし、データ送信側LSI77は、8ビットのデータを10ビットのデータに変換して送信するので、伝送効率を悪化させてしまう。また、データ送信側LSI77は、ルックアップテーブルを用いてデータの変換を行うので、データの伝送時に発生する遅延時間を増加させてしまう。
また、データ送信側LSI77は、バイトストライピング処理によって各レーン#0〜#7に振り分けたデータを8B10B変換してからデータ受信側LSI84に送信する。このため、データ受信側LSI84は、1つのレーンでバーストエラーが発生した場合には、エラーの検出を行うことができない場合がある。
以下、図面を用いて、1つのレーンでバーストエラーが発生した場合にエラーの検出を行うことができない例について説明する。図37は、バーストエラーが発生した際のビット化けを説明するための図である。例えば、図37中(A)に示すように、データ送信側LSI77は、16進数で「6C、00、00、00、00、00、00、00、5F、00、00、00、00、00、00、00」のデータを送信対象とする。
すると、データ送信側LSI77は、バイトストライピング回路80を用いて、データのバイトストライピングを行い、8B10Bエンコーダ81bを用いて10ビットのデータに変換する。この結果、ランニングディスパリティが負である場合には、図37中(B)に示すように、ドライバ81dは、キャラクタ「0DC」を送信し、キャラクタ「2B5」を出力する。
ここで、図37中(C)に示すように、レーン#0においてバーストエラーが発生し、ドライバ81dが最初に送信したキャラクタの最後のビットと、次に送信したキャラクタの最初のビットとが反転したものとする。すると、図37中(D)に示すように、レシーバ85aは、キャラクタ「0DD」を受信し、次にキャラクタ「0B5」を受信する。
そして、8B10Bデコーダ85cは、レシーバ85aが受信したキャラクタ「0DD」と「0B5」とを8ビットのデータに変換する。そして、バイトアンストライピング回路88は、各レーン#0〜#7が受信したデータを元の順序に並び替えてデータ受信バッファ89に出力する。この結果、データ受信バッファ89は、図37中(E)に示すように、「8C、00、00、00、00、00、00、00、54、00、00、00、00、00、00、00、」を受信する。
ここで、図38は、バーストエラーが発生した場合のエラーデータを説明するための図である。なお、図38には、図37に示すデータ送信バッファ78が送信したデータと、データ受信バッファ89が受信したデータとを記載した。図38中の網掛けに示すように、データ受信バッファ89は、Byte#00とByte#08とにエラーが生じたデータを受信する。
すると、データ受信側LSI84は、Byte#00においてビットデータが最初に不一致となる箇所から、Byte#08においてビットデータが最後に不一致となる箇所までを異常なデータとみなす。このため、図38中(F)に示すように、データ受信バッファ89が受信したデータには、63ビット長の異常データが含まれる。すると、データ受信側LSI84は、データ送信側LSI77が送信したパケットに含まれる32ビットのLCRCでは、図38中(F)に示すエラーを検出できない場合がある。
なお、図37および図38では、8本のレーンを介したシリアル伝送において、2ビットのバーストエラーが63ビット長の異常データを発生させる例について説明した。しかし、レーンの数がさらに多い場合には、さらに離れた位置のビットが各レーンに割り当てられるので、バイトアンストライピング処理を行った後のデータのうち、異常とみなされる部分のビット長が長くなる。この結果、データ受信側LSI84は、エラーを検出することができなくなる。
本実施例に開示の技術は、1つの側面では、シリアル伝送の効率を向上させる。また、本実施例に開示の技術は、1つの側面では、伝送路上で発生したバーストエラーを検出できる。
次に、図を用いて、本願のデータ伝送システムを有する情報処理システムの一例について説明する。図1は、実施例1に係る情報処理システムの一例を説明するための図である。図1に示すように、情報処理システム1は、複数のCPU(Central Processing Unit)10〜10c、複数のメモリ15〜15c、複数のIO(Input Output)装置16〜16cを有する。
また、各CPU10〜10cは、情報処理システム1の処理能力の向上を目的とし、ccNUMA(Cash Coherence Non-Uniform Memory Access)等の技術が適用されている。なお、図1に示す例では、情報処理システム1は、4つのCPU10〜10cを有するが、実施例はこれに限定されるものではなく、任意の数のCPUを有することとしてもよい。
メモリ15およびIO装置16は、CPU10に接続され、メモリ15aおよびIO装置16aは、CPU10aに接続されている。また、メモリ15bおよびIO装置16bは、CPU10bに接続され、メモリ15cおよびIO装置16cは、CPU10cに接続されている。
また、CPU10は、命令処理部11、記憶制御部12、IO制御部13、シリアルインタフェース部14を有する。また、CPU10aは、CPU10と同様に、命令処理部11a、記憶制御部12a、IO制御部13a、シリアルインタフェース部14aを有する。また、CPU10bは、CPU10と同様に、命令処理部11b、記憶制御部12b、IO制御部13b、シリアルインタフェース部14cを有する。また、CPU10cは、CPU10と同様に、命令処理部11c、記憶制御部12c、IO制御部13c、シリアルインタフェース部14cを有する。
ここで、各シリアルインタフェース部14〜14cは、シリアル伝送経路で相互に接続されており、各シリアル伝送経路を介して、データの送受信を行う。なお、図1に示す例では、各CPU10〜10c間をシリアル伝送経路で相互に接続することとしたが、実施例はこれに限定されるものではなく、例えば、クロスバ装置等によって段階的に接続することとしてもよい。なお、各CPU10a〜10cは、CPU10と同様の機能を発揮するものとして、以下の説明を省略する。
命令処理部11は、各種演算処理を実行する処理部であり、例えば、メモリ15に格納されたデータを用いて演算処理を実行する複数のコアを有する。記憶制御部12は、メモリ15が記憶するデータの制御を実行する制御部であり、メモリコントローラの機能や、キャッシュコヒーレンシを保持する機能を有する。IO制御部13は、IO装置に対するアクセスを行う。
次に、図2を用いて、CPU10の機能構成について説明する。図2は、実施例1に係るCPUの機能構成を説明するための図である。図2に示す例では、CPU10は、複数のコア20、21、メモリインタフェース部22、キャッシュコヒーレンシ制御部23、パケットルーティング部24、複数のシリアルインタフェースポート30〜32を有する。
ここで、各コア20、21は、図1に示す命令処理部11に含まれ、メモリインタフェース部22およびキャッシュコヒーレンシ制御部23は、図1に示す記憶制御部12に含まれる。また、パケットルーティング部24および複数のシリアルインタフェースポート30〜32は、図1に示すシリアルインタフェース部14に含まれる。
また、シリアルインタフェースポート30は、CPU10aと接続され、シリアルインタフェースポート31は、CPU10bと接続され、シリアルインタフェースポート32は、CPU10cと接続される。なお、図2に示す例では、コア20、21以外のコアについては記載を省略したが、CPU10は、任意の数のコアを有することができる。また、図2に示す例では、シリアルインタフェースポート30〜32以外のシリアルインタフェースポートについては、記載を省略したが、CPU10は、任意の数のシリアルインタフェースポートを有することができる。
コア20、21は、各種演算処理を実行するコアである。例えば、コア20は、キャッシュ機能を有し、パケットルーティング部24、キャッシュコヒーレンシ制御部23、メモリインタフェース部22を介してメモリ15が記憶するデータをキャッシュし、キャッシュしたデータを用いて演算処理を実行する。
メモリインタフェース部22は、メモリアクセスを行う制御部である。例えば、メモリアクセス装置である。キャッシュコヒーレンシ制御部23は、メモリ15が記憶するデータとコア20、21や、他のCPU10a〜10cがキャッシュしたデータとの同一性を保持する処理を実行する。例えば、キャッシュコヒーレンシ制御部23は、イリノイプロトコルやccNUMA等の手法を用いて、キャッシュデータのコヒーレンスを保持する処理を実行する。
パケットルーティング部24は、コア20、コア21、キャッシュコヒーレンシ制御部23、IO制御部13、シリアルインタフェースポート30〜32が相互に交換するパケットを中継する。シリアルインタフェースポート30〜32は、それぞれ異なるCPU10a〜10cと接続されており、他のCPU10a〜10cとの間でシリアル伝送経路を介したシリアル伝送を行うポートである。
以下、各シリアルインタフェースポート30〜32が実行する処理について説明する。なお、以下の説明においては、シリアルインタフェースポート31、シリアルインタフェースポート32は、シリアルインタフェースポート30と同様の機能を発揮するものとして、説明を省略する。
図3は、実施例1に係るシリアルインタフェースポートの機能構成を説明するための図である。図3に示す例では、シリアルインタフェースポート30は、トランザクション層機能部33、データリンク層機能部34、物理層機能部35を有する。また、物理層機能部35は、物理層論理サブブロック36と物理層電気サブブロック37を有する。
トランザクション層機能部33は、トランザクション層パケットの生成機能、バーチャルチャネル(VC:Virtual Channel)の管理機能、VCクレジットによるデータフローの制御機能等を有する。例えば、トランザクション層機能部33は、パケットルーティング部25からCPU10aに送信するパケットを受信すると、受信したパケットからトランザクション層パケットを生成し、生成したパケットをデータリンク層機能部34に出力する。
データリンク層機能部34は、物理層を経由して接続されたリモート・コンポーネント間でのパケット配送制御機能、データリンクレイヤパケット(DLLP:Data Link Layer Packet)の生成機能、DLLPの解読機能を有する。また、データリンク層機能部34は、リトライバッファによるデータ再送機能、ACKやNACKによるデータフロー制御機能、冗長ビットであるCRCの生成機能、CRCを用いたエラーの検出機能を有する。
例えば、データリンク層機能部34は、CPU10aに送信するパケットをトランザクション層機能部33から受信すると、受信したパケットからDLLPを生成する。また、データリンク層機能部34は、生成したDLLPからエラーを検出するためのCRCを生成し、生成したCRCをDLLPに付加する。そして、データリンク層機能部34は、CRCを付加したDLLPを物理層機能部35に出力する。
ここで、図4、図5を用いて、データリンク層機能部34が生成するパケットの一例を説明する。図4は、データリンク層におけるパケットを説明するための図である。図4に示すように、データリンク層機能部34は、ビット#0〜#75までの76ビットのパケットを生成する。ここで、データリンク層機能部34が生成するパケットのビット#74〜#75は、タグT1〜T0を格納するフィールドであり、2ビットの制御コードが格納される。
また、データリンク層機能部34が生成するパケットのビット#73〜#10は、ペイロードD63〜D00を格納するフィールドであり、8バイトのデータを格納するペイロードである。また、データリンク層機能部34が生成するパケットのビット#9〜#0は、CRCC9〜C0とを格納するフィールドであり、10ビットのCRCを格納するフィールドである。この10ビットのCRCは、最大で10ビットのバーストエラーを検出する事ができる。
ここで、タグT1〜T0に格納される2ビットの制御コード信号は、8バイトのペイロードデータD63〜D00の属性を表す信号である。CPU10〜CPU10cは、タグT1〜T0に格納した制御コード信号およびペイロードデータD63〜D00の一部のビットを用いて、Kキャラクタの機能を実現する。
図5は、データリンク層でのパケットフォーマットを説明するための図である。なお、図5には、タグT1〜T0に格納するデータとペイロードD63〜00に格納するデータの一例を記載した。例えば、タグT0〜T1が「00」である場合には、各種Kキャラクタの代わりとなるパケットが発行される。
例えば、ペイロードD63〜00のすべてに「0」が格納されている場合、すなわちALL0であるパケットは、PADと呼ばれるパケットである。PADは、図33に示すKキャラクタのPADの代わりに使用されるパケットであり、Logical IDLE時に使用するパケットであり、データリンク層として発行するべきデータが存在しないことを示す。
また、ペイロードD63が「0」であり、D62が「1」である場合には、D61〜D00に62ビットのペイロードが格納されたDLLPと呼ばれるパケットである。DLLPは、図33に示すKキャラクタのSDPの代わりに使用されるパケットであり、データリンク層パケットの発行を示すパケットである。なお、DLLPのペイロードは、必ず62ビットのサイズとなる。
また、ペイロードD63が「1」であり、D62が「0」である場合は、D61〜D00に62ビットのペイロードが格納されたSTPと呼ばれるパケットである。STPは、図33に示すKキャラクタのSTPの代わりに使用されるパケットであり、トランザクションレイヤパケットの開始を示すパケットである。なお、STPのペイロードには必ずヘッダ部が含まれ、パケットが連続して送信される事を示す。
一方、タグT1〜T0が「01」である場合には、以下のデータとなる。例えば、ペイロードD63が「0」であり、D62が「0」である場合は、D61〜D00に62ビットのペイロードが格納されたMKUEと呼ばれるパケットである、MKUEは、ペイロードD1〜00に格納されたパケットがMarked−UEデータであることを示す。なお、MKUEのペイロードの特定位置には、Uncorrectable Errorを検出したユニット番号が挿入され、また、パケットが連続して送信されることを示す。
一方、ペイロードD63が「0」であり、D62が「1」である場合には、D61〜D00に62ビットのペイロードが格納されたMKUEEと呼ばれるパケットである。MKUEEは、MKUEと同様の情報が格納されたパケットであるが、以降のパケットが存在せず、同様の情報が格納されたパケット(MKUE)の送信が正常終了することを示す。
また、ペイロードD63が「1」であり、D62が「1」であるパケットは、D61〜D00に無効データ(ALL0)が格納されたEDBと呼ばれるパケットである。EDBは、図33に示すKキャラクタのEDBの代わりに使用されるパケットであり、トランザクションレイヤパケット(TLP)の異常終了を示すパケットである。
また、タグT1〜T0に「10」が格納されたパケットは、D63〜D00に64ビットのペイロードを有するDATAと呼ばれるパケットである。DATAは、プロトコル層パケット(PLP:Protocol Layer Packet)において2番目以降に送信される8バイトのデータパケット、またはCMD(コマンド)であり、以降に同様のパケットが連続することを示す。なお、DATA内に何バイトのデータが含まれているかを示す情報は、パケットヘッダに格納される。
また、タグT1〜T0に「11」が格納されたパケットは、D63〜D00に64ビットのペイロードを有するENDと呼ばれるパケットである。ENDは、プロトコル層パケットにおいて2番目以降に送信される8バイトのデータパケット、またはCMD(コマンド)であり、同様の情報が格納されたパケットの送信が正常終了することを示す。
なお、図5に示す例では、ペイロードD63が「1」であり、D62が「1」であるパケットは、使用されず、予備のパケットとして設定されている。また、図5に示す例では、ペイロードD63が「1」であり、D62が「0」であるパケットは、使用されず、予備のパケットとして設定される。
図3に戻って、物理層機能部35は、初期化ステートマシン機能、レーン構成制御機能、バイト順序生成機能、バイト順序再生機能、スクランブル化機能、デスクランブル機能、コード変換器能、Kキャラクタ生成機能を有する。また、物理層機能部35は、エラスティックバッファ、クロック生成機能、クロック再生機能、並列直列変換器能、直列並列変換機能、差動伝送路の送信回路、イコライザ等を含む作動伝送路の受信回路等を有する。
以下、図6を用いて、物理層機能部35が有する機能について説明する。図6は、実施例1に係る物理層機能部の機能構成を説明するための図である。図6に示す例では、物理層機能部35の物理層論理サブブロック36は、バイトストライピング回路38、レーン#0〜#7送信部39〜39b、レーン#0〜#7受信部46〜46b、バイトアンストライピング回路51を有する。
また、物理層論理サブブロック36は、LTSSM(Link Training and Status State Machine)52、DV/RV(Driver/Receiver)制御部53、オーダーセット生成部54、オーダーセット判定部56を有する。また、物理層論理サブブロック36は、送信タイミング生成回路57、ストライピングタイミング生成回路58、受信タイミング生成回路59、アンストライピングタイミング生成回路60を有する。
また、レーン#0の送信部39は、スクランブラ40、セレクタ41、19B20Bエンコーダ42、シリアライザ43を有する。また、レーン#0受信部46は、シンボルロックデシリアライザ47、エラスティックバッファ48、19B20Bデコーダ49、デスクランブラ50、オーダーセット検出部55を有する。
なお、レーン#1〜レーン#7の送信部39a〜39bについては、レーン#0の送信部39と同様の機能を発揮するものとして、説明を省略する。また、レーン#1〜レーン#7の受信部46a〜46bについては、レーン#0の受信部46と同様の機能を発揮するものとして、説明を省略する。
また、物理層電気サブブロック37は、複数のレーン#0〜#7のドライバ44〜44b、複数のレーン#0〜#7のレシーバ45〜45bを有する。なお、レーン#0〜#7は、差動伝送路である。また、各ドライバ44〜44bが差動伝送路である各レーン#0〜#7にシリアル信号を出力し、各ドライバ44〜44bが差動伝送路からシリアル信号を受信することで、シリアル伝送を行う。例えば、ドライバ44がレーン#0の差動伝送路70、70aにシリアル信号を出力し、レシーバ45がレーン#0の差動伝送路71、71aからシリアル信号を受信することで、シリアル伝送を行う。
なお、レーン#1〜#7のドライバ44a〜44bは、レーン#0のドライバ44と同様の機能を発揮するものとして、説明を省略する。また、レーン#1〜#7のレシーバ45a〜45bは、レーン#0のレシーバ45と同様の機能を発揮するものとして、説明を省略する。また、以下の説明では、データ送信側の機能について説明した後に、データ受信側の機能について説明する。
まず、データ送信側の機能について説明する。バイトストライピング回路38は、ストライピングタイミング生成回路58から受信するストライピングタイミング信号に従って、データリンク層機能部34から受信したパケットのデータを、レーン#0〜#7に振り分ける。例えば、バイトストライピング回路38は、レーン#0〜#3に9ビットのデータを振り分け、レーン#4〜#7に10ビットのデータを振り分ける。
スクランブラ40は、バイトストライピング回路38がレーン#0に振り分けたデータの擬似乱数化を行う回路である。すなわち、スクランブラ40は、送信するデータを擬似乱数化することによって、回路内の電磁波ノイズを低減する。セレクタ41は、スクランブラ40が擬似乱数化したデータ、または後述するオーダーセット生成部54が生成したKキャラクタを19B20Bエンコーダ42に出力する選択回路である。
19B20Bエンコーダ42は、セレクタ41から取得したデータをコード化する。具体的には、19B20Bエンコーダ42は、セレクタ41からデータを受信するとともに、受信したデータがDキャラクタであるかKキャラクタであるかを示す信号をオーダーセット生成部54から受信する。さらに、19B20Bエンコーダ42は、送信タイミング生成回路57より、第1のシンボルと、第2のシンボルのシンボルのいずれかを出力するかを識別する送信シンボルサイクル識別信号を受信する。
そして、19B20Bエンコーダ42は、受信した信号に応じて、以下の処理を実行する。すなわち、19B20Bエンコーダ42は、第1のシンボルと第2のシンボルを識別する信号が、第1のシンボルを指定していて、データがDキャラクタである信号を受信した場合には、9ビットのデータをセレクタ41から受け取る。そして、9ビットのデータに1ビットの制御ビットを付加した第1のシンボルを生成する。または、第1のシンボルと第2のシンボルを識別する信号が、第2のシンボルを指定している場合には、19B20Bエンコーダ42は、10ビットのデータをセレクタ41から受け取る。そして、10ビットのデータをそのまま第2のシンボルとする。そして、19B20Bエンコーダ42は、生成した第1のシンボル、または第2のシンボルをシリアライザ43に出力する。
一方、19B20Bエンコーダ42は、第1のシンボルと第2のシンボルを識別する信号が、第1のシンボルを指定していて、データがKキャラクタである信号を受信した場合には、Kキャラクタに1ビットの制御データと、さらに制御データと同じ値の先頭ビットを付加した第1のシンボルを生成する。すなわち、第1のシンボルとは、制御ビットが付加されたDキャラクタ、または制御ビットが付加されたKキャラクタである。そして、10B20Bエンコーダ42は、生成した第1のシンボルをシリアライザ43に出力する。
ここで、19B20Bエンコーダ42は、Dキャラクタを含む第1のシンボルを生成する場合には、Dキャラクタの先頭ビットとは異なる値の制御ビットを付加する。このため、19B20Bエンコーダ42は、Dキャラクタを含む第1のシンボルに、少なくとも1回のビット遷移を含める。
例えば、図7は、実施例1に係る19B20B変換を説明するための図である。なお、図7には、19B20Bエンコーダ42が実行する19B20B変換の原理について記載した。例えば、19B20Bエンコーダ42は、セレクタ41からDキャラクタ、またはKキャラクタを受信する。また、19B20Bエンコーダ42は、オーダーセット生成部54から、データがKキャラクタであるかDキャラクタであるかを示すK/D識別信号を受信する。
そして、19B20Bエンコーダ42は、19ビットのデータを9ビットのデータ、すなわち、Dキャラクタと10ビットのデータとに分割し、10ビットのデータを第2のシンボルとしてそのまま出力する。また、19B20Bエンコーダ42は、8ビットのKキャラクタと9ビットのDキャラクタをK/D判別信号に応じて選択する。
また、19B20Bエンコーダ42は、K/D識別信号と、9ビットデータの先頭ビット(図7中a)であるDキャラクタの先頭ビットとをデコードし、制御ビット(図7中C)とDキャラクタの先頭ビットとを生成する。具体的には、19B20Bエンコーダ42は、K/D識別番号がDキャラクタを示す場合には、9ビットデータの先頭ビットaの反転ビットを制御ビットとし、先頭ビットaを制御ビットに続くビット0とする。そして、19B20Bエンコーダ42は、9ビットデータのビットb〜iをビット1〜8とする10ビットのデータを生成する。また、19B20Bエンコーダ42は、19ビットデータのうち、10ビットのデータをそのままビット0〜9とする10ビットのデータを生成する。
また、19B20Bエンコーダ42は、K/D識別信号がKキャラクタを示す場合には、20ビットアウトプットの制御ビットと続くビット0とを同じビット値とする。そして、19B20Bエンコーダ42は、ビット1〜8にKキャラクタを格納した10ビットのデータを生成する。
そして、19B20Bエンコーダ42は、Dキャラクタに1ビットの制御ビットを付加した10ビットのデータ、またはKキャラクタに1ビットの制御ビットと1ビットの先頭ビットとを付加した10ビットのデータを第1のシンボルとして出力する。すなわち、19B20Bエンコーダ42は、1ビットの制御ビットを含む10ビットのデータを第1のシンボルとして出力する。
ここで、図8を用いて、第1のシンボルの先頭2ビットと、続く8ビットのデータとの関係について説明する。なお、以下の説明では、第1のシンボルの先頭2ビットを10ビットシンボルコードとして説明する。図8は、実施例1に係る10ビットシンボルコードを説明するための図である。例えば、19B20Bエンコーダ42は、Dキャラクタを第1のシンボルとして出力する場合には、Dキャラクタの先頭ビットの値を反転させた値のコントロールビットを付加する。
すなわち、19B20Bエンコーダ42は、Dキャラクタの先頭ビットが0である場合は、コントロールビットとして「1」を付加する。また、19B20Bエンコーダ42は、Dキャラクタの先頭ビットが1である場合は、コントロールビットとして「0」を付加する。また、19B20Bエンコーダ42は、Kキャラクタを第1のシンボルとして出力する場合は、コントロールビット「1」と先頭ビット「1」を付加する。
なお、Kキャラクタには、DCバランスを考慮して、1種類を除いて、「0」と「1」が5個ずつで構成される値が選択される。また、第1のシンボルの10ビットのうち、コントロールビットと先頭ビットとを除いた8ビットがKキャラクタを示すビットとなるので、最大で56種類のKキャラクタを表現する。なお、コントロールビットが「0」で先頭ビットが「0」である場合には、ALL0等の場合を除き、インバリッド(無効)シンボルとなる。
ここで、図9は、実施例1に係るKキャラクタのビットコードを説明するための図である。19B20Bエンコーダ42は、Kキャラクタである「COM」を含む第1のシンボルとしてビットコード「11_0011_0010」を出力する。ここで、「COM」とは、スキップオーダーセット(SKPOS)や、EIOS(Electrical Idle Ordered State)の開始を示すシンボルである。
また、19B20Bエンコーダ42は、Kキャラクタである「LONG1」を示す第1のシンボルとして、ビットコード「11_1111_1111」を出力する。ここで、「LONG1」とは、トレーニングオーダーセット(TSOS:Training Ordered Set)やEIEOS(Electrical Idle Exit Ordered Set)の開始を示すシンボルである。
また、19B20Bエンコーダ42は、Kキャラクタである「LONG0」を示す第1のシンボルとして、ビットコード「00_0000_0000」を出力する。ここで、「LONG0」とは、トレーニングシーケンスで使用する「LONG1」と組み合わせて低周波信号を生成するために用いるシンボルである。
また、19B20Bエンコーダ42は、Kキャラクタである「SKP」を示す第1のシンボルとして、ビットコード「11_0101_0100」を出力する。ここで、「SKP」とは、「COM」に続くことでスキップオーダーセット(SKP OS)を表すスキュー調整で増減対象となるシンボルである。
また、19B20Bエンコーダ42は、Kキャラクタである「IDL」を示す第1のシンボルとして、ビットコード「11_1100_1000」を出力する。ここで、「IDL」とは、「COM」に続くことでEI OSを表すシンボルである。なお、図9に例示した以外のコードは、無効なコードとなる。
このように、19B20Bエンコーダ42は、Dキャラクタと制御ビット、もしくはKキャラクタと制御ビットを含む10ビットの第1のシンボル、および、10ビットのDキャラクタを含む第2のシンボルを生成する。なお、19B20Bエンコーダ42は、第1のシンボルと第2のシンボルとを同時に出力するのではなく、第1のシンボルと第2のシンボルとを所定の周期で切り換えながら生成する。例えば、19b20Bエンコーダ42は、第1のシンボルと第2のシンボルとを交互に生成する。
次に、図10を用いて、19B20Bエンコーダ42の具体例について説明する。図10は、19B20Bエンコーダの具体例を説明するための図である。図10に示すように、19B20Bエンコーダ42は、オーダーセット生成部54から、K/D識別信号を受信し、送信タイミング生成回路57から送信シンボルサイクル識別信号を受信する。また、18B20Bエンコーダ42は、セレクタ41からa〜jまでの10ビットのデータを受信する。
ここで、送信シンボルサイクル識別信号とは、19B20Bエンコーダ42に出力させるシンボルが第1のシンボルであるか、第2のシンボルであるかを示す信号である。また、他の側面では、送信シンボルサイクル識別信号は、各レーン#0〜#7が1つのシンボルを送信する際に要するシンボル時間ごとに切り替わる信号である。例えば、送信シンボルサイクル識別信号は、各レーン#0〜#7がDキャラクタを格納した第1のシンボルを送信した回数が偶数であるか奇数であるかを示す。
例えば、19B20Bエンコーダ42は、送信シンボルサイクル識別信号が、第2のシンボルを送信する旨を指示する場合には、受信したa〜jまでのビットをそのまま第2のシンボルとする。また、19B20Bエンコーダ42は、送信シンボルサイクル識別信号が第1のシンボルを送信する旨を指示し、かつ、K/D識別信号がDキャラクタを示す場合には、以下の処理を行う。すなわち、19B20Bエンコーダ42は、受信したビットbの反転値を第1のシンボルの先頭ビットとし、受信したビットb〜jをそのまま第1のシンボルに格納する。
一方、19B20Bエンコーダ42は、送信シンボルサイクル識別信号が第1のシンボルを送信する旨を指示し、K/D識別信号がKキャラクタを示す場合には、以下の処理を行う。すなわち、19B20Bエンコーダ42は、セレクタから供給されるKキャラクタのコードをそのまま第1のシンボルとする。
なお、後述するように、オーダーセット生成部54は、Kキャラクタとして先頭の2ビットが「00」または「11」となるKキャラクタを生成する。このため、19B20Bエンコーダ42は、Dキャラクタの先頭にDキャラクタの先頭ビットを反転させた制御ビットを付加した第1のシンボル、またはKキャラクタの先頭にKキャラクタの先頭ビットと同じ制御ビットを付加した第1のシンボルを生成する。
図11は、実施例1に係る19B20Bエンコーダの動作を説明するための図である。図11に示す例では、送信シンボルサイクル識別信号は、第2のシンボルを送信する旨を指示する場合には「1」となり、第1のシンボルを送信する旨を指示する場合には「0」となる。また、図11に示す例では、K/D識別信号は、Dキャラクタを示す場合には「0」となり、Kキャラクタを示す場合には「1」となる。
この結果、図11に示す例では、19B20Bエンコーダ42は、送信シンボルサイクル識別信号が「1」の場合には、シンボル中にセレクタ41から受信したビットa〜jを格納する。また、19B20Bエンコーダ42は、送信シンボルサイクル識別信号が「0」であり、K/D識別信号が「0」の場合には、シンボルの先頭ビット0にセレクタ41から受信したビットbの反転ビット^bを格納し、他のビット1〜9にビットb〜jを格納する。また、19B20Bエンコーダ42は、送信シンボルサイクル識別信号が「0」であり、K/D識別信号が「1」の場合には、シンボル中の先頭の0〜1ビットに「00」または「11」を格納し、他のビット2〜9にKキャラクタのコード値を格納する。
図6に戻って、シリアライザ43は、19B20Bエンコーダ42から10ビットのパラレルデータとして第1のシンボル、または第2のシンボルを受信する。そして、シリアライザ43は、受信した第1のシンボル、または第2のシンボルをシンボル時間ごとに、シリアルデータに変換し、変換後のシリアルデータをレーン#0ドライバ44に出力する。
ここで、シンボル時間とは、1つのシンボルを送信するために必要な時間であり、詳細には、レーン#0ドライバ44が差動伝送路70、70aを介して10ビットのデータをシリアル伝送する際に要する時間である。レーン#0ドライバ44は、シリアライザ43からシリアルデータを受信すると、受信したデータを差動伝送路70、70a、すなわち、レーン#0に出力し、対向するCPU10aに送信する。
ここで、後述する送信タイミング生成回路57は、各レーン#0〜#7の送信部39〜39bに供給する送信シンボルサイクル識別信号を所定の周期で切り換える。また、送信タイミング生成回路57は、少なくとも1つの送信部に対して、第1のシンボルを送信する旨を指示する送信シンボルサイクル識別信号を出力し、他の送信部に対して、第2のシンボルを送信する旨を指示する送信シンボルサイクル識別信号を出力する。
このため、例えば、あるシンボル時間において、レーン#0〜レーン#3の送信部は、第1のシンボルを出力し、レーン#4〜レーン#7の送信部は、第2のシンボルを出力する。また、次のシンボル時間において、レーン#0〜#3の送信部は、第2のシンボルを出力し、レーン#4〜#7の送信部は、第1のシンボルを出力する。
以下、図12、図13を用いて、各レーン#0〜#7に出力されるシンボルについて説明する。なお、以下の説明においては、第1のシンボルがレーン#0〜#3に出力されるシンボル時間を偶数サイクルとし、第1のシンボルがレーン#4〜#7に出力されるシンボル時間を奇数サイクルとする。
図12は、偶数サイクル時に各レーン#0〜#7に出力されるデータを説明するための図である。また、図13は、奇数サイクル時に各レーン#0〜#7に出力されるデータを説明するための図である。なお、図12および図13に示す例では、バイトストライピング回路38が図4に示すパケットを1バイトごとに各レーン#0〜#7に振り分けした際に、各送信部39〜39bが各レーン#0〜#7に出力するデータを記載した。すなわち、図12および図13中には、図4に示すパケットのT1〜T0、D63〜D00、C9〜C0が、どのように各レーンに振り分けられるかを示した。
図12に示す例では、バイトストライピング回路38は、Ctrl(コントロールビット)以外のT1〜T0、D63〜D00、C9〜C0の先頭から9ビットずつを各レーン#0〜#3に振り分け、その後、10ビットずつを各レーン#4〜#7に振り分ける。このため、各レーン#0〜#3の送信部は、1ビットのCtrlを9ビットのデータに付加した10ビットのデータを第1のシンボルとする。また、各レーン#4〜#7の送信部は、10ビットのデータをそのまま第2のシンボルとする。
このため、各レーン#0〜#3は、9ビットのデータと、1ビットのコントロールビットとを含む第1のシンボルを送信し、各レーン#4〜#7は、10ビットのデータを含む第2のシンボルを送信する。
また、図13に示す例では、バイトストライピング回路38は、Ctrl以外のT1〜T0、D63〜D00、C9〜C0の先頭から9ビットずつを各レーン#7〜#4に振り分け、その後、10ビットずつを各レーン#3〜#0に振り分ける。すなわち、バイトストライピング回路38は、各レーン#0〜#7に対し、偶数サイクル時と奇数サイクル時で逆の順番で振り分ける。このため、各レーン#0〜#3は、10ビットのデータを含む第2のシンボルを送信することとなり、各レーン#4〜#7は、9ビットのデータと、1ビットのコントロールビットとを含む第1のシンボルを送信する。
なお、各レーン#0〜#7のドライバ44〜44bは、図12および図13に示すデータを、ビット0から順にCPU10aへ送信する。例えば、レーン#0ドライバ44は、偶数サイクル時には、Ctrl、D57〜D63、T0、T1の順にデータを送信する。また、レーン#0ドライバ44は、奇数サイクル時には、C0〜C9の順にデータを送信する。
このように、各送信部39〜39bは、各レーン#0〜#7を介して、図12に示すビットおよび図13に示すビットを交互に送信する。このため、対向するCPU10aは、各レーン#0〜#7を介して受信するデータのうち、20ビットに1回は、必ず1回のビット遷移が含まれるため、クロックの再生を容易に行える。
ここで、図14は、実施例1に係る各レーン#0〜#7が第1のシンボルを出力する順序を説明するための図である。図14に示すように、レーン#0〜#3は、第1グループに組み分けられ、レーン#4〜#7は、第2グループに組み分けられている。そして、偶数サイクルの際には、レーン#0〜#3が第1のシンボルを送信し、奇数サイクルの際には、レーン#4〜#7が第1のシンボルを送信する。
ここで、第1のシンボルにDキャラクタが格納される場合には、Dキャラクタの先頭ビットを反転させた制御ビットが付加されるため、第1のシンボル中には、ビット値の遷移が必ず存在する。このため、各レーン#0〜#7がDキャラクタを送信する場合には、20ビットに1回は、必ずビット値の遷移が含まれる。このため、各送信部39〜39bは、8B10B変換を行わずとも、CPU10aにクロックの再生を容易に実行させることができる。
また、各送信部39〜39bは、19ビットのデータを20ビットに変換して送信することとなる。この結果、各送信部39〜39bは、伝送経路の帯域を浪費することなく、効率的にシリアル伝送を行うことができる。また、各送信部39〜39bは、第1のシンボル中に、任意のKキャラクタを格納するので、シリアル伝送を行う際に実行する各種制御を行なえる。
また、図12および図13に示すように、各送信部39〜39bは、少なくとも1つのレーンにおいて、10ビットのCRCを送信することとなる。ここで、各送信部39〜39bは、図12および図13に示すように、データリンク層機能部34から受信した1つのパケットを同一のシンボル時間中に送信することとなる。
ここで、各送信部39〜39bがいずれか1つのレーンを介して送信するCRCには、同一のシンボル時間中に送信されるデータから10ビットのデータを検出することができるCRCである。また、各送信部39〜39bは、1回のシンボル時間中に最大で10ビットのデータを出力する。この結果、いずれかのレーンにおいてバーストエラーが発生し、全てのビット化け、すなわち、10ビットの連続するビット化けが発生したとしても、受信側のCPU10aは、同一のシンボル時間中に送信されたCRCを用いてエラーの検出を行うことができる。
次に、データ受信側の機能について説明する。レーン#0のレシーバ45は、対向するCPU10aから差動伝送路71、71aを介してシリアルデータを受信する。すると、レーン#0のレシーバ45は、受信したデータをビットデータ列に変換する。また、レシーバ45は、クロック再生回路を用いて、送信データのビット遷移タイミングを基準として受信クロックを生成する。また、レーン#0のレシーバ45は、変換後のビットデータ列と、クロック再生回路が再生したクロックとをシンボルロックデシリアライザ47に出力する。
ここで、レーン#0のレシーバ45は、CPU10aから送信された第1のシンボルに含まれるビット遷移を用いて、クロックの生成を行う。また、上述したように、19B20Bエンコーダ42は、Dキャラクタを含む第1のシンボルに、少なくとも1回のビット遷移を含める。このため、レーン#0のレシーバ45は、CPU10aが19B20Bエンコーダ42と同様のシンボルを生成した場合には、第1のシンボルに含まれる制御ビットを用いて、クロックの再生を適切に行うことができる。
シンボルロックデシリアライザ47は、レーン#0のレシーバ45から受信したビット列を10ビットのパラレルデータに変換する。具体的には、シンボルロックデシリアライザ47は、レーン#0のレシーバ45から受信するクロックに従って、初期化時に基準ビットを検出してシンボルをロックし、再度初期化が行われるまでの間、1シンボル時間毎に、10ビットのシリアルデータを識別する。そして、シンボルロックデシリアライザ47は、識別したシリアルデータをパラレルデータに変換し、エラスティックバッファ48に変換後のパラレルデータを格納する。
エラスティックバッファ48は、内部クロックへの乗り換えを行うためのバッファである。例えば、シンボルロックデシリアライザ47は、レーン#0のレシーバ45のクロック再生回路が再生するクロックでエラスティックバッファ48にパラレルデータの書込みを行う。そして19B20Bデコーダ49は、エラスティックバッファ48から内部クロック、すなわち、受信タイミング生成回路59が生成するタイミング信号でパラレルデータの読み出しを行うことで、クロックジッタを吸収する。
詳細には、送信側のCPU10aは定期的に固定長のスキップオーダーセット(Skip Ordered Set:以下、SKPOSと記載する)を発行する。そして、受信側のCPU10は、クロックタイミングを観測し、エラスティックバッファ48から受信するSKPOSの削除等を行うことで、クロックの同期調整を行う。
19B20Bデコーダ49は、エラスティックバッファ48が記憶するパラレルデータの読み出しを行う。そして、19B20Bデコーダ49は、19B20Bエンコーダ42とは逆の処理を実行することによって、読み出したデータから元のデータにデコードし、デコードしたデータをデスクランブラ50に出力する。
ここで、図15は、実施例1に係る19B20Bデコーダの具体例を説明するための図である。図15に示すように、19B20Bデコーダ49は、受信タイミング生成回路59から、受信シンボルサイクル識別信号を受信する。ここで、受信シンボルサイクル識別信号とは、送信シンボルサイクル識別信号と同様の信号であり、19B20Bデコーダ49がエラスティックバッファ48から読み出す10ビットのデータが第1のシンボルであるか第2のシンボルであるかを示す信号である。
例えば、受信タイミング生成回路59は、送信シンボルサイクル識別信号として「0」または「1」をトレーニングシーケンスの終了を起点とし、所定の周期で切り換えながら出力する。ここで、送信シンボルサイクル識別信号「1」は、受信するデータが第2のシンボルであることを示し、送信シンボルサイクル識別信号「0」は、受信するデータが第1のシンボルであることを示す。
詳細な例を挙げると、受信タイミング生成回路59は、トレーニングシーケンスの終了後に最初に送信されるデータが第2のシンボルである場合には、送信シンボルサイクル識別信号として「1」を出力する。また、受信タイミング生成回路59は、トレーニングシーケンスの終了後に最初に送信されるデータが第1のシンボルである場合には、送信シンボルサイクル識別信号として「0」を出力する。
そして、例えば、CPU10aが、トレーニングシーケンスの終了後にレーン#0を介して第1のシンボルと第2のシンボルとを交互に送信する場合には、受信タイミング生成回路59は、受信シンボルサイクル識別信号「0」と「1」とを交互に19B20Bデコーダ49に入力する。また、受信タイミング生成回路59は、送信タイミング生成回路57と同様に、各受信回路46〜46bに対して、各レーン#0〜#7を介して送信されるシンボルを示す信号を出力する。
例えば、受信タイミング生成回路59は、レーン#0〜#3が第1のシンボルを受信し、レーン#4〜#7が第2のシンボルを受信するシンボル時間においては、以下の受信シンボルサイクル識別信号を出力する。すなわち、受信タイミング生成回路59は、レーン#0〜#3の受信部に受信シンボルサイクル識別信号「0」を出力し、レーン#4〜#7の受信部に受信シンボルサイクル識別信号「1」を出力する。
19B20Bデコーダ49は、受信シンボルサイクル識別信号が「1」であるか「0」であるかを判別し、受信シンボルサイクル識別信号が「1」である場合には、以下の処理を実行する。すなわち、19B20Bデコーダ49は、エラスティックバッファ48から受信した10ビットのデータa〜jに対してビットマスクをかけることなく、そのまま10ビットのデータとしてデスクランブラ50に出力する。
一方、19B20Bデコーダ49は、受信シンボルサイクル識別信号の値が「0」である場合は、読み出したデータのビットa〜jのうち、ビットa、bをデコードすることで、データがDキャラクタであるかKキャラクタであるかを判別する。詳細には、19B20bデコーダ49は、ビットa、bが「01」若しくは「10」である場合には、読み出したデータがDキャラクタであると判別する。そして、19B20Bデコーダ49は、ビットマスクを用いて、ビットb〜jをそのままビット1〜9として出力し、ビット1の値を「0」としてデスクランブラ50に出力する。
また、19B20Bデコーダ49は、ビットa、bが「00」または「11」である場合には、読み出したデータがKキャラクタであると判別する。そして、19B20Bデコーダ49は、K/D識別信号として「1」をオーダーセット検出部55に出力し、ビットa〜jをそのままKキャラクタとしてデスクランブラ50に出力する。また、19B20Bデコーダ49は、読み出したデータがKキャラクタである場合には、ビットa〜jからエラーパターンのチェックを行い、ビットa〜jが無効コードである場合には、エラー信号として「1」をオーダーセット検出部55に出力する。
ここで、図16は、実施例1に係る19B20Bデコーダの動作を説明するための図である。図16には、19B20Bデコーダ49が受信シンボルサイクル識別信号と読み出したビットa、bの値に応じて、どのようなデータを出力するかを示した。例えば、19B20Bデコーダ49は、受信シンボルサイクル識別信号が「1」である場合には、ビットa〜jを出力データ0〜9として出力する。
また、19B20Bデコーダ49は、受信シンボルサイクル識別信号が「0」であり、ビットa、bが「01」または「10」である場合には、ビットc〜jがDキャラクタであると判別する。このため、19B20Bデコーダ49は、先頭のデータ0を「0」とし、ビットb〜jをデータ1〜9としたデータを出力する。
また、19B20Bデコーダ49は、受信シンボルサイクル識別信号が「0」であり、ビットa、bが「00」または「11」である場合には、ビットc〜jがKキャラクタであると判別する。このため、19B20Bデコーダ49は、ビットa〜jが無効コードでない場合には、K/D識別信号「1」を出力し、エラー信号「0」を出力する。また、19B20Bデコーダ49は、ビットa〜j、すなわちKキャラクタを出力データ0〜9として出力する。一方、19B20Bデコーダ49は、ビットa〜jが無効コードである場合には、K/D識別信号「0」を出力し、エラー信号「1」を出力する。
図6に戻って、デスクランブラ50は、19B20Bデコーダ49からデータを受信すると、スクランブラ40と逆の処理を実行することで、擬似乱数化されたデータを元のデータに変換する。そして、デスクランブラ50は、変換後の元のデータをバイトアンストライピング回路51に出力する。なお、スクランブラ40とデスクランブラ50とはPCIeの仕様として開示された技術をそのまま利用することができる。
バイトアンストライピング回路51は、アンストライピングタイミング生成回路60からのアンストライピングタイミング信号に従って、バイトストライピング回路38と逆の処理を行う。すなわち、バイトアンストライピング回路51は、各レーン#0受信部46〜レーン#7受信部46bが受信したデータの並び替えを行う。そして、バイトアンストライピング回路51は、並び替えを行ったデータをデータリンク層機能部34に出力する。
例えば、バイトアンストライピング回路51は、バイトストライピング回路38が図12、図13に示した振り分けとは逆の処理を実行する。すなわち、バイトアンストライピング回路51は、偶数サイクル時には、レーン#0〜#3から9ビットずつのデータを取得し、その後、レーン#4〜#7から10ビットずつのデータを取得して、データの組み立てを行う。また、バイトアンストライピング回路51は、奇数サイクル時には、レーン#7〜#4から9ビットずつのデータを取得し、その後、レーン#3〜#0から10ビットずつのデータを取得して、データの組み立てを行う。
続いて、Kキャラクタを生成するための機能について説明する。LTSSM52は、各レーン#0〜#7の初期化やリンクの構成制御を行うためのステートマシンである。例えば、LTSSM52は、データリンク装置機能部34からの指示に応じて、リンクの初期化指示待ちのステートや、リンクの初期化、再トレーニングの実行、省電力モード等のステートに遷移する。
そして、LTSSM52は、遷移したステートに応じた指示を、ストライピングタイミング生成回路58、オーダーセット生成部54に出力する。また、LTSSM52は、遷移したステートに応じた指示を、送信タイミング生成回路57、オーダーセット判定部56、受信タイミング生成回路59、アンストライピングタイミング生成回路60に出力する。
図17は、実施例1に係るLTSSMの状態遷移を説明するための図である。LTSSM52は、リセット解除後にPORTDISステートに遷移し、その後、データリンク制御機能部34からの指示に応じて、図17に示す各ステートに遷移する。
ここで、図18を用いて、図17に示す各ステートの状態について説明する。図18は、LTSSMの各状態を説明するための図である。PORTDISステートとは、リンク初期化指示待ちステートであり、LTSSM52は、電源投入直後、またはリセット信号が解除された際にPORTDISステートに遷移する。また、LTSSM52は、PORTDISステートの際に、物理層機能部35の外部からの指示によって、POLLステートに遷移する。
POLLステートとは、接続先ポートとトレーニングオーダーセット(TS OS)を送受信し、通信可能かを確認するステートである。また、LTSSM52は、POLLステートの際に、接続先ポートと通信可能である場合は、CONFIGステートに遷移する。
CONFIGステートとは、リンクの初期化時、または再トレーニングを行う際に接続先ポートとTS OSを送受信を行い、リンクの構成を行うステートである。そして、LTSSM52は、CONFIGステートの際に、リンクの構成が終了した場合には、LZ(L0、L0s)ステートに遷移する。
L0ステートとは、上位層であるデータリンク層のパケットを送受信可能なステートであり、データリンク層から受け取ったデータを差動伝送路に出力し、または差動伝送路から受信したデータをデータリンク層に出力する通常運転状態を示す。なお、L0sは省電力ステートである。
また、RECOVERYステートとは、再トレーニングを行うステートである。また、L1ステートとは、浅い省電力上体のステートであり、再トレーニングを行うことによりLTSSM52は、L0ステートに遷移する。また、LOOPBACKステートとは、ループバックのテストを行うステートである。また、PreConfigreステートとは、再トレーニング中にマルチビットリンクエラーが発生した場合に、再度、再トレーニングを行うステートである。
図6に戻って、DV/RV制御部53は、LTSSM52が示す状態に応じて、各レーン#0〜#7のドライバ44〜44bおよびレシーバ45〜45bの動作を制御する制御回路である。
オーダーセット生成部54は、対向するCPU10aに対して送信するオーダーセットを生成する。具体的には、オーダーセット生成部54は、LTSSM52からの指示に従って、オーダーセットを生成し、生成したオーダーセットをセレクタ41に出力する。また、オーダーセット生成部54は、LTSSM52からの指示とは別に、所定の時間間隔で、スキップオーダーセット(SKPOS)をセレクタ41に出力する。
以下、図面を用いて、オーダーセット生成部54の機能構成について説明する。図19は、実施例1に係るオーダーセット生成部の機能構成を説明するための図である。例えば、図19に示す例では、オーダーセット生成部54は、送信間隔生成回路54a、送信OS(Ordered Set)選択制御部54b、セレクタ54c、シンボルカウンタ部54dを有する。また、オーダーセット生成部54は、回数判別部54e、送信OS数カウンタ部54f、規定送信数判別部54g、OS送信完了フラグ54hを有する。
また、オーダーセット生成部54は、オーダーセットである「TS1OS」、「TS2OS」、「EIEOS」、「EIOS」、「SKPOS」のパターンを記憶する。送信間隔生成回路54aは、所定の時間間隔で、送信OS選択制御部54bに、OSの送信を指示する。また、送信OS選択制御部54bは、LTSSM52からOSの送信を指示された場合は、セレクタ54cを制御し、送信を指示されたOSを出力させる。
シンボルカウンタ部54dは、各OSごとに送信したシンボルの数をカウントする。また、回数判別部54eは、シンボルカウンタ部54dがカウントした各OSのシンボル数が所定の値となった場合は、1セットのOSの出力が完了したと判別し、送信OS数カウンタ部54fがOSごとにカウントする値を1インクリメントする。つまり、送信OS数カウンタ部54fは、各OSを送信したセット数をカウントする。
ここで、リンクの初期化を行う場合は、複数セットのOSが送信される。そこで、規定送信数判別部54gは、送信したOSのセット数が規定数に達した場合には、OS送信完了フラグ54hをセットすることで、LTSSM52にOSの送信が完了した旨を通知する。
なお、オーダーセット生成部54は、セレクタ54cが出力したオーダーセットを、オーダーセット有効信号と共に、全てのレーン#0〜#7の送信部39〜39bに送信する。なお、レーン#0の送信部39は、オーダーセット有効信号を受信した場合には、セレクタ41によってオーダーセット生成部54から受信したオーダーセットを選択し、オーダーセットを19B20Bエンコーダ42に入力する。また、他のレーン#1〜#7の送信部39a、39bも、送信部39と同様に、オーダーセットを19B20Bエンコーダ42に入力する。
図6に戻り、オーダーセット検出部55は、レーン#0の受信部46が受信したオーダーセットの検出を行う。また、オーダーセット判定部56は、各レーン#0〜#7の受信部46〜46bがオーダーセットを受信したか否かを判別する。
以下、図20を用いて、オーダーセット検出部55およびオーダーセット判定部56の機能構成について説明する。図20は、実施例1に係るオーダーセット検出部の機能構成を説明するための図である。図20に示す例では、オーダーセット検出部55は、期待値算出部55a、一致チェック部55b、シンボルカウンタ56c、OS長判定部56d、受信OS数カウンタ56eを有する。また、オーダーセット検出部55は、規定受信数判定部56f、OS受信完了フラグ55g、SKPOS検出回路55hを有する。また、オーダーセット判定部56は、ANDマスク56aと、ORマスク56bを有する。
例えば、オーダーセット検出部55は、19B20Bデコーダ49から、Kキャラクタを受信する。また、期待値算出部55aは、LTSSM52のステート毎に、受信が期待されるオーダーセットの指示、すなわち、受信が期待されるオーダーセットの期待値をLTSSM52から受信する。そして、一致チェック部55bは、期待値算出部55aが受信した期待値が、受信したオーダーセットと一致するか否かを判別する。そして、一致チェック部55bは、期待値とオーダーセットが一致した場合は、シンボルカウンタ56cの値をインクリメントする。
また、OS長判定部55dは、シンボルカウンタ55cの値が所定の値に達したかを判別し、所定の値に達した場合には、1セットのOSを受信したものとして、受信OS数カウンタ55eをインクリメントする。また、規定受信数判定部55fは、受信OS数カウンタ55eの値が所定の値に達した場合には、所定の数のオーダーセットを受信したと判別し、OS受信完了フラグ55gをセットすることで、オーダーセットを受信した旨をオーダーセット判定部56に通知する。
また、オーダーセット判定部56は、ANDマスク56aを用いて、各レーン#0〜#7の受信部46〜46bからのOS受信完了フラグの論理和を算出する。そして、オーダーセット判定部56は、全ての受信部46〜46bのOS受信完了フラグが有効となった場合は、LTSSM52にオーダーセットの受信が完了した旨を通知する。
一方、送信側からは、定期的にSKPOSが送信される。このため、SKPOS検出回路55hは、一致チェック部55bおよびOS長判定部55dによる判定結果から、SKPOSの受信を検出した場合には、SKPOS検出信号をオーダーセット判定部56に送信する。すると、オーダーセット判定部56は、ORマスク56bを用いて、多数決判定を行う。
詳細には、オーダーセット判定部56は、受信シンボルサイクル識別信号に従って、各レーン#0〜#7のうち、Kキャラクタを受信するレーン、すなわち、第1のシンボルを受信するレーンを判別し、判別したレーンの過半数からSKPOS検出信号を受信したかを判別する。そして、オーダーセット判定部56は、判別したレーンの過半数からSKPOS検出信号を受信した場合には、SKPOSの検出をLTSSM52に通知する。
ここで、図21は、実施例1に係る送信部が出力するデータのシーケンスを説明するための図である。例えば、物理層機能部35の外部からリンクの初期化が指示された場合には、LTSSM52の状態が遷移し、トレーニングシーケンスが開始する。トレーニングシーケンス中は、図21中(G)に示すように、全てのレーン#0〜#7で制御ビットを含むシンボル、すなわち、第1のシンボルが出力される。この際に、各送信部39〜39bは、出力したKキャラクタによって、リンクの初期化処理に必要なオーダーセットを指定する。
次に、トレーニングシーケンスが終了すると、LTSSM52は、L0ステートに遷移する。このため、図21中(H)に示すように、各送信部39〜39bは、データリンク層から受信したデータの転送を開始する。すなわち、各送信部39〜39bは、通常運転を行う。すなわち、各送信部39〜39bは、通常運転時には、バイトストライピング処理によりデータリンク層から受信したデータを各レーン#0〜#7に分割する。
そして、各送信部39〜39bは、19B20B変換を行い、変換後のデータをシリアル伝送する。ここで、各送信部39〜39bは、通常運転時には、第1のシンボルと第2のシンボルとを周期的に切り換えながら出力するとともに、少なくとも1つの送信部が第1のシンボルを送信する。また、図21に示すように、各送信部39〜39bは、トレーニングシーケンスが終了し、次のシンボルを送信するシンボル時間を偶数サイクルとなるよう設定する。その後、各送信部39〜39bは、偶数サイクルと奇数サイクルとを1シンボル時間毎に切り換えて、処理を実行する。
図22は、実施例1に係るスキップオーダーセットを説明するための図である。例えば、図22中(I)に示すように、各送信部39〜39aは、定期的にSKPOSとして、COMシンボルと複数のSKPシンボルとを示すKキャラクタを送信する。
ここで、図22中(J)に示すタイミングは、本来は奇数サイクルとなるタイミングであるため、レーン#4〜レーン#7の受信部は、SKPOSのKキャラクタ検出をオーダーセット判定部56に通知する。このため、オーダーセット判定部56は、レーン#4〜#7の過半数がCOMシンボルのKキャラクタを受信したか否かを判別し、過半数がCOMシンボルのKキャラクタを受信した場合には、オーダーセットが開始した旨をLTSSM52に通知する。
ここで、各受信部46〜46bは、SKPOSの送受信が行われる間は、通常運転時ではなく、データリンク層に送信されるデータを無効とする。そして、各受信部46〜46bは、SKPOSの所定のシンボル数を受信すると、状態を通常運転時に切り替えるとともに、図22中(K)に示すように、シンボル時間を偶数サイクルから開始する。
図6に戻り、送信タイミング生成回路57は、LTSSM52およびオーダーセット生成部54の出力に応じて、送信シンボルサイクル識別信号を生成し、各レーン#0〜#7の送信部39〜39bの19B20Bエンコーダに入力する。また、ストライピングタイミング生成回路58は、LTSSM52およびオーダーセット生成部54の出力に応じて、ストライピングタイミング信号を生成し、生成したストライピングタイミング信号をバイトストライピング回路38に入力する。
ここで、図23を用いて、送信タイミング生成回路57とストライピングタイミング生成回路58の一例について説明する。図23は、実施例1に係る送信タイミング生成回路を説明するための図である。なお、図23は、送信タイミング生成回路57の動作原理を示した図であるが、動作タイミングが論理的に同じになるのであれば、他の論理回路構成で実現してもよい。また、図23は、送信タイミング生成回路57の一例を示した図であるが、ストライピングタイミング生成回路58についても、入力信号、出力信号は異なる回路と接続されるものの、同様の動作原理にて実現することができる。
図23に示す入力信号SMBOL_CLOCKとは、1シンボル時間の基準となるクロックであり、第1のシンボル、または第2のシンボルを受信、または送信する度にトグルされる信号である。ACTIVE_L0_inとは、LTSSM52で生成される信号であり、LTSSM52がL0ステート状態であることを示す信号である。また、ACTIVE_SKPOS_inとは、オーダーセット生成部54で生成される信号であり、SKPOSを送信中であることを示す信号である。
図23に示す例では、送信タイミング生成回路57は、SMBOL_CLOCK、ACTIVE_L0_in、ACTIVE_SKPOS_inの値に応じて、値「0」または値「1」の送信シンボルサイクル識別信号をレーン#0〜#3の送信部に出力する。また、送信タイミング生成回路57は、レーン#0〜#3の送信部とは逆の値の送信シンボルサイクル識別信号を、レーン#4〜#7の送信部に出力する。
例えば、送信タイミング生成回路57は、トレーニングシーケンスが終了した次のシンボル時間で、レーン#4〜#7の送信部に送信シンボルサイクル識別信号「1」を出力し、その後、「0」および「1」を交互に出力する。また、送信タイミング生成回路57は、トレーニングシーケンスが終了した次のシンボル時間で、レーン#0〜#3の送信部に送信シンボルサイクル識別信号「0」を出力し、その後、「1」および「0」を交互に出力する。
ここで、図24を用いて、図23に示す送信タイミング生成回路57の動作について説明する。図24は、実施例1に係る送信タイミング生成回路の動作を説明するためのタイミングチャートである。なお、図24中には、SYMBOL_CLOCK、LTSSMのステート、ACTIVE_L0_in、ACTIVE_SKPOS_inを記載した。
また、図24中には、中間信号a、中間信号^a、中間信号b、送信シンボルサイクルフラグ、各レーン#0〜#7に出力する送信シンボルサイクル識別信号、各レーン#0〜#7に出力されるデータを記載した。なお、図24に示す各信号のうち、中間信号a、中間信号^a、中間信号bとは、図23中のa、^a、bに流れる信号を示す。
例えば、図24に示す例では、シンボル時間が「0」の際にLTSSM52のステートが「PORTDIS」となる。このため、各送信部39〜39bは、トレーニングシーケンスを開始する。ここで、トレーニングシーケンスにおいては、シンボルサイクル識別信号は、全て「0」となり、レーン#0〜#7には、Dキャラクタ又はKキャラクタのいずれかが選択されて出力される。
ここで、シンボル時間mにおいてリンクの初期化が終了し、LTSSM52の状態がCONFIGステートからL0ステートに遷移する。このため、ACTIVE_L0_in信号が「1」に遷移し、送信シンボルサイクルフラグがトグルを開始し、送信シンボルサイクル識別信号が出力される。すなわち、各送信部39〜39bは、通常運転状態となる。
ここで、シンボル時間nにおいて、定期的なSKPOSが送信される。ここで、SKPOSは、LTSSM52のステートがL0ステートである最中に、定期的に出力される。このため、ACTIVE_L0_in信号とACTIVE_SKPOS_in信号が同時に値「1」となる。この状態は、スキップ調整オーダーセットの出力状態であるため、通常運転とは異なる状態である。
ここで、シンボル時間nにおいては、SKPOSの送信が指示されるため、送信シンボルサイクル識別信号は全て「0」に遷移し、各レーン#0〜#7には、SKPOSの最初のKキャラクタである「COM」が出力される。その後、各レーン#0〜#7には、所定のサイクル数だけ「SKP」キャラクタが出力される。
その後、所定のサイクル数だけ「SKP」キャラクタが出力されると、シンボル時間n+4において、通常運転状態に遷移し、シンボル時間mにおける際と同様に、偶数サイクルからシンボル時間が開始される。以降、各送信部39〜39bは、通常運転状態である限り、偶数サイクルと奇数サイクルとを切り替えながら、データのシリアル伝送を行う。
図6に戻って、受信タイミング生成回路59は、オーダーセット判定部56およびLTSSM52からの出力に応じて、各レーン#0〜#7の各受信部46〜46bがデータを受信するタイミングを示す受信シンボルサイクル識別信号を生成する。また、アンストライピングタイミング生成回路60は、オーダーセット判定部56およびLTSSM52からの出力に応じて、アンストライピングタイミング信号を生成する。
ここで、図25を用いて、受信タイミング生成回路59とアンストライピングタイミング生成回路60の一例について説明する。図25は、実施例1に係る受信タイミング生成回路を説明するための図である。なお、図25は、受信タイミング生成回路59の動作原理を示した図であるが、動作タイミングが論理的に同じになるのであれば、他の論理回路構成で実現してもよい。
また、図25は、受信タイミング生成回路59の一例を示した図であるが、アンストライピングタイミング生成回路60についても、入力信号、出力信号は異なる回路と接続されるものの、同様の動作原理にて実現することができる。
なお、図25に示すように、受信タイミング生成回路59は、送信タイミング生成回路57と同様の回路構成を有する。すなわち、受信タイミング生成回路59は、ACTIVE_SKPOS_inに変えてDETECT_SKPOS_inを受信する以外は、送信タイミング生成回路57と同様の機能を有する。つまり、受信タイミング生成回路59は、トレーニングシーケンスが終了した次のシンボル時間で、レーン#4〜#7の送信部に受信シンボルサイクル識別信号「1」を出力し、その後、「0」および「1」を交互に出力する。また、受信タイミング生成回路59は、トレーニングシーケンスが終了した次のシンボル時間で、レーン#0〜#3の送信部に送信シンボルサイクル識別信号「0」を出力し、その後、「1」および「0」を交互に出力する。
ここで、DETECT_SKPOS_inとは、SKPOSを検出した際に、オーダーセット判定部56が出力する信号である。また、アンストライピングタイミング生成回路60も同様に、ストライピングタイミング生成回路58と同様の回路構成を有し、同様の機能を有する。
図26は、実施例1に係る受信タイミング生成回路の動作を説明するためのタイミングチャートである。なお、図26には、図24に示した送信シンボルサイクルフラグ、送信シンボルサイクル識別信号に変えて、受信シンボルサイクルフラグ、受信シンボルサイクル識別信号を記載した。
例えば、図26に示す例では、シンボル時間が「0」の際にLTSSM52のステートが「PORTDIS」となる。すると受信シンボルサイクル識別信号は、全て「0」となるため、各受信部46〜46bは、Dキャラクタ又はKキャラクタのいずれかを受信する。
ここで、シンボル時間mにおいてリンクの初期化が終了し、LTSSM52の状態がCONFIGステートからL0ステートに遷移する。このため、ACTIVE_L0_in信号が「1」に遷移し、受信シンボルサイクルフラグがトグルを開始し、受信シンボルサイクル識別信号が出力される。すなわち、各受信部46〜46bは、通常運転状態となり、各レーン#0〜#7から受信するデータをデータリンク層へ出力する。
ここで、シンボル時間mにおいて、サイクル時間が偶数サイクルであるため、レーン#0〜#3の受信部は、9ビットのDキャラクタ、またはKキャラクタを受信し、レーン#4〜#7の受信部は、10ビットのDキャラクタを受信する。そして、シンボル時間m+1においては、受信シンボルサイクルフラグが反転し、奇数サイクルとなるため、レーン#0〜#3の受信部は、10ビットのDキャラクタを受信し、レーン#4〜#7の受信部は、9ビットのDキャラクタ、またはKキャラクタを受信する。
ここで、シンボル時間nにおいて、各レーン#0〜#7の受信部46〜46bは、SKPOSの先頭キャラクタである「COM」シンボルを受信する。このため、ACTIVE_L0_in信号とDETECT_SKPOS_in信号が同時に値「1」となる。
ここで、シンボル時間nにおいては、オーダーセット検出部55は、SKPOSの受信を認識しておらず、シンボル時間n+1において、「COM」に続く「SKP」シンボルを受信した際に、SKPOの受信である旨を検知する。このため、シンボル時間nにおいては、奇数サイクルであるため、オーダーセット判定部56は、レーン#4〜#7の受信部からの信号による多数決判定によりCOMキャラクタである旨を判断する。
その後、所定のサイクル数だけ「SKP」キャラクタが出力されると、シンボル時間n+4において、通常運転状態に遷移し、シンボル時間mにおける際と同様に、偶数サイクルからシンボル時間が開始される。以降、各受信部46〜46bは、通常運転状態である限り、偶数サイクルと奇数サイクルとを切り替えながら、データを受信し、データリンク装置に出力する。
例えば、シリアルインタフェースポート30〜32、トランザクション層機能部33、データリンク層機能部34、物理層機能部35、物理層論理サブブロック36、物理層電気サブブロック37とは、電子回路である。また、バイトストライピング回路38、送信部39〜39b、スクランブラ40、セレクタ41、19B20Bエンコーダ42、シリアライザ43、ドライバ44〜44bとは、電子回路である。
また、レシーバ45〜45b、受信部46〜46b、シンボルロックデシリアライザ47、19B20Bデコーダ49、デスクランブラ50、バイトアンストライピング回路51とは、電子回路である。また、LTSSM52、DV/RV制御部53、オーダーセット生成部54、オーダーセット検出部55、オーダーセット判定部56、送信タイミング生成回路57、ストライピングタイミング生成回路58とは、電子回路である。
また、受信タイミング生成回路59、アンストライピングタイミング生成回路60とは、電子回路である。ここで、電子回路の例として、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの集積回路、またはCPU(Central Processing Unit)やMPU(Micro Processing Unit)などを適用する。また、エラスティックバッファ48とは、RAM(Random Access Memory)などの半導体メモリ素子である。
[実施例1の効果]
上述したように、CPU10は、1ビットずつデータを伝送する複数のレーン#0〜#7を有する。また、CPU10は、9ビットのDキャラクタ、またはKキャラクタに1ビットの制御ビットを付加した10ビットの第1のシンボル、または10ビットのDキャラクタである第2のシンボルを生成する複数の送信部39〜39bを有する。
ここで、各送信部39〜39bは、第1のシンボルと第2のシンボルとを所定の周期で切り換えながら生成するとともに、各シンボル時間において、少なくとも1つの送信部が第1のシンボルを生成する。そして、CPU10は、各送信部39〜39bが生成した第1のシンボルおよび第2のシンボルを、それぞれ異なるレーン#0〜#7を介して、CPU10aに送信する。
このため、CPU10は、シリアル伝送の効率を向上させることができる。例えば、CPU10は、各シンボル時間において、9ビットのDキャラクタ4つと、10ビットのDキャラクタ4つの計76ビットのDキャラクタを伝送することができる。このため、CPU10は、制御ビットを含め、各シンボル時間において80ビットのデータを送信する結果、帯域を5パーセントほどしか浪費しない。
また、CPU10は、各レーン#0〜#7に対して、制御ビットを含む第1のシンボルを所定の周期で送信する。このため、CPU10は、20ビット中に少なくとも1回のビット遷移が含まれるデータを各レーン#0〜#7に伝送し続ける。また、CPU10は、各シンボル時間において、Kキャラクタを含むことができる第1のシンボルを少なくとも1つ伝送する。
このため、CPU10は、各レーン#0〜#7が適切にシリアル伝送を行うための機能を損なうことなく、シリアル伝送の効率を向上させることができる。すなわち、CPU10は、第1のシンボル中にKキャラクタを格納することで、リンクの初期化動作や、送信側対受信側のクロックジッタの調整等を行うシリアル伝送の機能を発揮することができる。このため、CPU10は、シリアル伝送を行うための機能を損なうことなく、シリアル伝送の効率を向上させることができる。また、CPU10は、制御ビットを含む第1のシンボルを各レーン#0〜#7に対して所定の周期で出力するので、対向装置でのクロックの再生を容易にできる。
また、CPU10は、第2のシンボルを送信するいずれかの送信部に、同じシンボル時間に送信するデータから、10ビットのエラーを検出するためのCRCを格納した第2のシンボルを生成させ、他のデータと同じシンボル時間内にCPU10aに送信する。このため、CPU10は、いずれか1つのレーンにおいて発生したバーストエラーの検出を保障することができる。以下、図27、図28を用いて、CPU10が、1つのレーンにおけるバーストエラーの検出を保障する点について説明する。
図27は、レーン#2におけるバーストエラーを説明するための図である。例えば、図27中の網掛けで示すように、レーン#2を介して送信したビット全てにエラーが発生したものとする。この結果、CPU10aは、図27に示すデータのアンバイトストライピングを行い、データの組み立てを行うことで、図28に示すデータをデータリンク層に出力することとなる。
図28は、バーストエラーが発生した際に受信するデータを説明するための図である。例えば、図28中には、図27中の網掛けで示したデータ、すなわち、エラーとなったデータを網掛けで示した。図28に示すように、CPU10aは、各シンボル時間毎に受信するデータのうち、10ビットの連続する範囲にエラーのビットを含むパケットを受信することとなる。このため、CPU10aは、おなじシンボル時間毎に受信する10ビットのCRCを用いて、エラーの検出を行うことができる。
すなわち、CPU10は、各レーン#1〜#7を介して送信するシンボルと同じ長さのエラーを検出できるCRCを生成し、生成したCRCを他のシンボルと同じシンボル時間内に伝送した場合には、いずれか1つのレーンにおけるバーストエラーを必ず検出できる。このため、CPU10は、いずれか1つのレーンにおいて無限にバーストエラーが発生した場合にも、対向装置においてエラーを必ず検出することができる。
なお、シリアル伝送において信号を受信する側にDFE(Decision Feed Back Equalizer)技術を用いて信号品質を向上させる技術が知られている。しかし、DFE技術においては、レシーバにおける過去の信号論理に基づいて現在の閾値を決定する原理で動作するため、一度エラーが発生した場合、長期にわたってエラーが連続する傾向がある。この結果、DFE技術が適用されたレシーバでは、バーストエラーが発生する可能性が高い。
しかし、CPU10は、いずれか1つのレーンにおいて無限にバーストエラーが発生するような場合にも、エラーを検出することができる。このため、対向装置にDFE技術が適用されている際にも、CPU10は、対向装置におけるエラーの検出を保障できる。
また、各送信部39〜39bは、Dキャラクタを含む第1のシンボルを送信する場合には、Dキャラクタの先頭ビットの値を反転させた値の制御ビットをDキャラクタに付加した第1のシンボルを生成する。このため、CPU10は、Dキャラクタを含む第1のシンボル内に、少なくとも1回のビット遷移を含める結果、対向装置のクロック再生を容易にすることができる。
また、各送信部39〜39bは、Kキャラクタを送信する場合は、Kキャラクタの先頭ビットと同じ値の制御ビットを付加した第1のシンボルを生成する。このため、CPU10は、対向装置によるKキャラクタの識別を容易にすることができる。また、CPU10は、あらかじめ設定するKキャラクタ内に少なくとも1回のビット遷移を含めた場合には、対向装置のクロック再生をさらに容易にすることができる。
また、各送信部39〜39bは、2つの組に組み分けられており、各組ごとに、第1のシンボルおよび第2のシンボルを切り替えながら生成する。このため、CPU10は、対向装置のクロック再生を容易にすることができる。また、CPU10は、第2のシンボルを生成するいずれかの送信部に、第1のシンボル、または第2のシンボルからエラーを検出するCRCを第2のシンボルとして出力させるので、いずれか1つのレーンにおけるバーストエラーの検出を保障できる。