図1は、実施形態による入出力インタフェース回路の構成例を示す図である。以下、入出力インタフェース回路の例として、PCI Express規格の高速入出力インタフェース回路の例を説明するが、他の入出力インタフェース回路に適用することもできる。
入出力インタフェース回路は、物理層111、ブリッジ回路112及びリンク層113を有する。例えば、物理層111はシリコン101により構成され、ブリッジ回路112及びリンク層113はFPGA102により構成される。入出力インタフェース回路は、高速クロックドメイン121及び低速クロックドメイン122を有する。シリコン101は、高速動作可能である。FPGA102は、シリコン101と同じ高速度で動作することが困難であり、シリコン101よりも低速で動作可能である。物理層111の一部及びブリッジ回路112の一部は、高速クロックドメイン121に属する。リンク層113及びブリッジ回路112の他の一部は、低速クロックドメイン122に属する。高速クロックドメイン121は、第1のクロック信号に同期して動作する。低速クロックドメイン122は、第1のクロック信号より周波数が低い第2のクロック信号に同期して動作する。ブリッジ回路112は、リンク層113から入力した第2のクロック信号に同期した送信データtxを、第1のクロック信号に同期した送信データtxに変換して物理層111に出力する。また、ブリッジ回路112は、物理層111から入力した第1のクロック信号に同期した受信データrxを、第2のクロック信号に同期した受信データrxに変換してリンク層113に出力する。
ブリッジ回路112は、リンク層113の論理を変えずに(バス幅を変更せずに)、リンク層113が第2のクロック信号の低周波数でデータtx,rxを送受信できるようにすることにより、リンク層113の動作周波数を低速にすることができる。ここで、データtx,rxの送受信は、待ち時間がなく、連続で送受信しなければならないため、単純にデータtx,rxを受け渡す制御では、受信動作(高速クロックドメイン121から低速クロックドメイン122への受け渡し)では受信データrxが溢れ、送信動作(低速クロックドメイン122から高速クロックドメイン121への受け渡し)では送信データtxが不足することになる。そこで、ブリッジ回路112は、クロック周波数の変換を行い、さらに、データtx及びrxの特性を利用し、データtx及びrxの溢れや不足が発生しないように制御する。
図2は、図1のブリッジ回路112の構成例を示す図である。ブリッジ回路112は、第1のクロックドメイン(高速クロックドメイン)121、第2のクロックドメイン(低速クロックドメイン)122、第1のクロックドメイン変換部202及び第2のクロックドメイン変換部235を有する。第1のクロックドメイン121は、第1のクロック信号に同期して動作する。第2のクロックドメイン122は、第1のクロック信号より周波数が低い第2のクロック信号に同期して動作する。
第1のクロックドメイン121は、第1のスクランブラ219、第1のデスクランブラ220、第1のバッファ204、第2のバッファ222及びセレクタ218,203,221,234を有する。第2のクロックドメイン122は、第2のデスクランブラ201及び第2のスクランブラ236を有する。
図3は、図2のスクランブラ219及び236の構成例を示す図である。スクランブラ219及び236は、それぞれ、D型フリップフロップD0〜D15,D20〜D27、バッファ301及び排他的論理和回路302〜305を有し、クロック信号CKに同期して、入力データDiを暗号化し、暗号化した出力データDoを出力する。排他的論理和回路302は、フリップフロップD0〜D15のシフトレジスタにより生成されたデータと、フリップフロップD20〜D27のシフトレジスタのデータとの排他的論理和データを出力データDoとして出力する。スクランブラ219及び236は、EMC(電磁両立性:Electro-Magnetic Compatibility)対策のため、同じデータ列を繰り返し転送する場合でも、暗号化により、違うデータ列として転送できるため、シリアルバス上から発生される電磁ノイズの周波数成分を平坦化できる。
なお、図1のデスクランブラ201及び220は、スクランブラ219及び236による暗号化データを復号することにより、元のデータに戻す。デスクランブラ201及び220は、スクランブラ219及び236と同じアルゴリズムで排他的論理和演算することにより、アルゴリズム論理が打ち消されることになる。
図2の送信データtx及び受信データrxは、スクランブラにより暗号化されている。そのため、送信データtxの入口には第2のデスクランブラ201を設け、送信データtxの出口には第1のスクランブラ219を設ける。また、受信データrxの入口には第1のデスクランブラ220を設け、受信データrxの出口には第2のスクランブラ236を設ける。
まず、送信データtxについて説明する。図2において、第2のデスクランブラ201は、図1のリンク層113からの送信データtxを復号して第1のクロックドメイン変換部202に出力する。第1のクロックドメイン変換部202は、第2のデスクランブラ201から入力した送信データを第2のクロック信号に同期した状態から第1のクロック信号に同期した状態に変換してセレクタ203に出力する。例えば、第1のクロックドメイン変換部202は、同期化バッファを有し、第2のデスクランブラ201からの送信データを第2のクロック信号に同期して同期化バッファに書き込み、その同期化バッファから第1のクロック信号に同期して読み出してセレクタ203に出力する。
セレクタ203は、送信データ(パケット)の種類に応じて、第1のクロックドメイン変換部202から入力した送信データを、第1のバッファ204内の10個のバッファ205〜214のいずれかに書き込む。ただし、セレクタ203は、第1のクロックドメイン変換部202から入力した送信データがロジカルアイドルデータであるときには、そのロジカルアイドルデータを第1のバッファ204に書き込まずに廃棄する。ロジカルアイドルデータは、0値データであり、意味がある通信を行っていない期間に送受信されるデータ(無効データ)である。
第1のバッファ204は、送信データ(パケット)の種類毎のバッファ205〜214を有し、セレクタ203から入力したデータをバッファリングしてセレクタ218に出力する。送信動作では、低周波数の第2のクロック信号から高周波数の第1のクロック信号へデータを受け渡す。そのため、第1のバッファ204は、出力データが入力データより多いデータ量となる。第1のバッファ204は、入力データをそのまま出力すると、出力するデータが不足するため、次のような制御でデータを追加する。
バッファ205〜207は、PLP(物理層パケット:Physical Layer Packet)のバッファである。図4(A)は、PLPのフォーマット例を示す図である。PLPは、1バイトの開始フレーム401及び3バイトの制御コード402を有し、物理層111の基本制御に必要なパケットである。開始フレーム401は、8B10BエンコードのK28.5(COM)で表される。制御コード402は、KコードのK28.1で表されるFTSと、K28.0で表されるSKPと、K28.3で表されるIDLとのうちのいずれかのコードを示す。PLPのFTSは、バッファ205によりバッファリングされる。PLPのSKPは、バッファ206によりバッファリングされる。PLPのIDLは、バッファ207によりバッファリングされる。
バッファ205は、セレクタ203からPLPのFTSを入力してバッファリングする。FTSは、シリアルバスのビットを識別するためのビットロック、及びシンボルを識別するためのシンボルロックに使用されるパケットである。FTSは、ビットロック及びシンボルロックするまで連続転送が必要である。そのため、バッファ205は、図5(A)に示すように、セレクタ203からPLPのFTS(第1のデータ)を入力すると、その入力した同じPLPのFTS215を繰り返してセレクタ218に出力する。
図5(A)は、PLPのFTSのバッファ205の入力データ及び出力データの例を示す図である。バッファ205の入力データは、低周波数の第2のクロック信号の周期で入力される。バッファ205は、その入力データが入力される度にバッファリングデータを更新する。バッファ205の出力データは、バッファ205内のデータが更新されると、高周波数の第1のクロック信号に同期して、バッファ205内の同じデータを所定回数(例えば4回)繰り返して出力される。同じデータを繰り返し出力することにより、連続転送が可能になる。これにより、ビットロック及びシンボルロックを確実に行うことができる。
図2において、バッファ206は、セレクタ203からPLPのSKPを入力してバッファリングする。SKPは、通信デバイス間の周波数偏差を吸収しデータの過不足の調整するために送受信されるパケットである。バッファ206は、セレクタ203からPLPのSKP(第3のデータ)を入力すると、その入力したPLPのSKPを繰り返さずにセレクタ218に出力する。
バッファ207は、セレクタ203からPLPのIDLを入力してバッファリングする。IDLは、パワーセーブ時にバスの振幅を停止する際に使用され、以降は送受信データがないことを示すパケットである。バッファ207は、セレクタ203からPLPのIDLを入力すると、その入力したPLPのIDLを繰り返さずにセレクタ218に出力する。
バッファ208〜212は、DLLP(データリンク層パケット:Data Link Layer Packet)のバッファである。図4(B)は、DLLPのフォーマット例を示す図である。DLLPは、1バイトの開始フレーム411、4バイトの制御コード412、2バイト(16ビット)のCRC(巡回冗長検査:Cyclic Redundancy Check)コード413及び1バイトの終了フレーム414を有し、リンク層113の情報伝達用のパケットである。開始フレーム411は、8B10BエンコードのK28.2(SDP)で表される。制御コード412は、Ack/Nac、FC(Flow Control)のPosted、FCのNon−Posted、FCのCompletion、及びPM(Power Management)のいずれかのコードで表される。
DLLPのAck/Nacは、バッファ208によりバッファリングされる。DLLPのFCのPostedは、バッファ209によりバッファリングされる。DLLPのFCのNon−Postedは、バッファ210によりバッファリングされる。DLLPのFCのCompletionは、バッファ211によりバッファリングされる。DLLPのPMは、バッファ212によりバッファリングされる。
バッファ208は、セレクタ203からDLLPのAck/Nacを入力してバッファリングする。DLLPのAck/Nacは、受信した後述のTLP(図4(D))が正しいことを示すときにはAck、又は受信したTLPにエラーがあったことを示すときにはNakで表される。制御コード412内にて、受領できたところまでのTLPのシーケンス番号が示される。TLPの通信が進行することにより、処理されているTLPのシーケンス番号も更新されていくため、最新のシーケンス番号が把握できていれば、古い情報は必要なくなる。したがって、バッファ208は、セレクタ203からDLLPのAck/Nacを入力すると、その入力したDLLPのAck/Nacを繰り返さずにセレクタ218に出力する。
バッファ209〜211は、セレクタ203からDLLPのFCを入力してバッファリングする。DLLPのFCは、後述のTLPについて受信用バッファのオーバーフローを抑制するためのパケットである。
バッファ209は、セレクタ203からDLLPのFCのPostedを入力してバッファリングする。DLLPのFCのPostedは、応答なしで完了するパケットである。
バッファ210は、セレクタ203からDLLPのFCのNon−Postedを入力してバッファリングする。DLLPのFCのNon−Postedは、応答を待って完了するパケットである。
バッファ211は、セレクタ203からDLLPのFCのCompletionを入力してバッファリングする。DLLPのFCのCompletionは、応答(完了通知)のパケットである。
DLLPのFCは、制御コード412内にてTLPの「受信総量+受信バッファの空き量」を通知する。これにより、TLPの送信側は自己が送信した総量と、上記の通知された値との差分により、受信側のバッファの空き量を判断することが可能となる。これを使って、受信バッファのオーバーフローを防止するための制御が行われる。TLPの通信が進行することにより値が更新されていくが、最新のFCにより最新の受信バッファの情報が得られるため古い情報は必要なくなる。したがって、バッファ209〜211は、それぞれ、セレクタ203からDLLPのFCを入力すると、その入力したDLLPのFCを繰り返さずにセレクタ218に出力する。
バッファ212は、セレクタ203からDLLPのPMを入力してバッファリングする。DLLPのPMは、電力の状態を制御するためのパケットであり、連続転送する必要はない。したがって、バッファ212は、セレクタ203からDLLPのPMを入力すると、その入力したDLLPのPMを繰り返さずにセレクタ218に出力する。
バッファ213は、TS(トレーニングシーケンス:Training Sequence)のバッファである。図4(C)は、TSのフォーマット例を示す図である。TSは、1バイトの開始フレーム421及び15バイトの制御コード422を有し、物理層111の基本情報の交換や制御に必要なパケットである。開始フレーム421は、8B10BエンコードのK28.5(COM)で表される。制御コード422は、KコードのK23.7(PAD)又はDコードで表される。TSは、図4(A)のPLPに対して、開始フレーム421が同じだが、制御コード422が異なる。
バッファ213は、セレクタ203からTSを入力してバッファリングする。TSは、PCI Express規格の2個のデバイス間が正しく通信できることの確認や調整を行い、物理層111の制御(レート変更やリセットなど)をコントロールするためのパケットであり、連続転送が必要なパケットである。連続転送の期間は、送信データtxの入力状態が連続していると判断できる期間となる。したがって、バッファ213は、図5(A)に示すように、セレクタ203からTSを入力すると、その入力した同じTS216を繰り返してセレクタ218に出力する。
図5(A)に示すように、バッファ213の入力データは、低周波数の第2のクロック信号の周期で入力される。バッファ213は、その入力データが入力される度にバッファリングデータを更新する。バッファ213の出力データは、バッファ213内のデータが更新されると、高周波数の第1のクロック信号に同期して、バッファ213内の同じデータを所定回数(例えば4回)繰り返して出力される。
バッファ214は、TLP(トランザクション層パケット:Transaction Layer Packet)のバッファである。図4(D)は、TLPのフォーマット例を示す図である。TLPは、1バイトの開始フレーム431、2バイトのシーケンス番号432、12又は16バイトのヘッダ部433、0〜4096バイトのデータ部434、0又は4バイトのECRCコード435、4バイトのLCRCコード436及び1バイトの終了フレーム437を有し、上位層であるトランザクション層でデータを送受信するためのパケットである。開始フレーム431は、8B10BエンコードのK27.7(STP)である。ヘッダ部433は、データの種別として、メモリリード/ライト、入出力回路リード/ライト、コンフィグレーションリード/ライト、完了通知(Completion)、又はメッセージを表す。
データの種類に応じて、上記のFCによる転送制御が異なり、Posted、Non−Posted、Completionに分類される。Postedは、メモリライト及びメッセージである。Non−Postedは、メモリリード、入出力回路リード/ライト、コンフィグレーションリード/ライトである。Completionは、完了通知である。
シーケンス番号432は、TLPの送信毎に1増加されるフィールドであり、DLLPのAck/Nakにて受領できたTLPのシーケンス番号と対応付けることにより、転送が正しく行われたことを確認することができる。
ECRCコード435は、データ部434のCRCコードである。LCRCコード436は、シーケンス番号432からECRCコード435までのCRCコードである。
図2のバッファ214は、セレクタ203からTLPを入力すると、その入力したTLPを繰り返さずにセレクタ218に出力する。
上記のように、セレクタ203は、第1のクロックドメイン変換部202から入力した送信データがロジカルアイドルデータであるときには、そのロジカルアイドルデータを第1のバッファ204に書き込まずに廃棄する。ロジカルアイドルデータは、0値データであり、意味がある通信を行っていない期間に送受信されるデータ(無効データ)である。第1のクロックドメイン121は、セレクタ203の入力データがロジカルアイドルデータであるときには、そのロジカルアイドルデータを第1のバッファ204にバッファリングせず、第1のバッファ204の出力データがないときにはロジカルアイドルデータ(0値データ)217をセレクタ218に出力する。
セレクタ218は、プロトコルの優先順位に従い、バッファ205〜214からの出力データ及びロジカルアイドルデータ217を、PLP>DLLP>TS>TLP>ロジカルアイドルデータ(0値データ)の優先順位で選択し、第1のスクランブラ219に出力する。すなわち、セレクタ218は、バッファ205〜214のデータ、ロジカルアイドルデータ217の順の優先順位で選択する。バッファ205のデータの優先順位が最も高く、ロジカルアイドルデータ217の優先順位が最も低い。バッファ205〜214間のデータ切り替えは、PLP/TS/DLLP/TLP単位の切れ目で行う。例えば、TLPの出力期間中にPLPのバッファ205〜207にデータが格納されたとしても、出力中の1つのTLPが出力を完了するまで新たなPLPは出力しない。
第1のスクランブラ219は、図3の構成を有し、上記と同様に、セレクタ218からのデータを暗号化して図1の物理層111に送信データtxを出力する。
次に、受信データrxについて説明する。第1のデスクランブラ220は、第2のスクランブラ201と同様に、図1の物理層111からの受信データrxを復号してセレクタ221に出力する。セレクタ221は、上記のセレクタ203と同様に、入力データ(パケット)の種類に応じて、入力データを第2のバッファ222内の10個のバッファ223〜232のいずれかに書き込む。ただし、セレクタ221は、入力データがロジカルアイドルデータ(0値データ)であるときには、そのロジカルアイドルデータを第2のバッファ222に書き込まずに廃棄する。
第2のバッファ222は、第1のバッファ204と同様に、受信データ(パケット)の種類毎のバッファ223〜232を有し、セレクタ221から入力したデータをバッファリングしてセレクタ234に出力する。受信動作では、高周波数の第1のクロック信号から低周波数の第2のクロック信号へデータを受け渡す。そのため、第2のバッファ222は、出力データが入力データよりも少ないデータ量となる。第2のバッファ222は、入力データを全てバッファリングすると、データが溢れる状況となるため、次のような制御を行う。
バッファ223は、バッファ205と同様に、セレクタ221からPLPのFTSを入力してバッファリングする。バッファ223は、図5(B)に示すように、セレクタ221からPLPのFTS(第2のデータ)を入力すると、そのPLPのFTSを間引いてセレクタ234に出力する。
図5(B)は、PLPのFTSのバッファ223の入力データ及び出力データの例を示す図である。バッファ223の入力データは、高周波数の第1のクロック信号の周期で入力される。バッファ223は、その入力データが入力される度にバッファリングデータを更新(上書き)する。バッファ205の出力データは、低周波数の第2のクロック信号の周期でバッファ205のデータが出力される。例えば、「1」、「2」、「3」、「5」、「6」、「7」のデータが間引かれ、「0」、「4」、「8」のデータが出力される。これにより、バッファ223は、入力されたPLPのFTSを間引いて出力することができる。
バッファ224は、バッファ206と同様に、セレクタ221からPLPのSKPを入力してバッファリングする。バッファ224は、図5(B)と同様に、セレクタ221からPLPのSKPを入力すると、そのPLPのSKPを間引いてセレクタ234に出力する。
バッファ225は、バッファ207と同様に、セレクタ221からPLPのIDLを入力してバッファリングする。バッファ225は、図5(B)と同様に、セレクタ221からPLPのIDLを入力すると、そのPLPのIDLを間引いてセレクタ234に出力する。
バッファ226は、バッファ208と同様に、セレクタ221からDLLPのAck/Nakを入力してバッファリングする。バッファ226は、図5(B)と同様に、セレクタ221からDLLPのAck/Nakを入力すると、そのDLLPのAck/Nakを間引いてセレクタ234に出力する。
バッファ227は、バッファ209と同様に、セレクタ221からDLLPのFCのPostedを入力してバッファリングする。バッファ227は、図5(B)と同様に、セレクタ221からDLLPのFCのPostedを入力すると、そのDLLPのFCのPostedを間引いてセレクタ234に出力する。
バッファ228は、バッファ210と同様に、セレクタ221からDLLPのFCのNon−Postedを入力してバッファリングする。バッファ228は、図5(B)と同様に、セレクタ221からDLLPのFCのNon−Postedを入力すると、そのDLLPのFCのNon−Postedを間引いてセレクタ234に出力する。
バッファ229は、バッファ211と同様に、セレクタ221からDLLPのFCのCompletionを入力してバッファリングする。バッファ229は、図5(B)と同様に、セレクタ221からDLLPのFCのCompletionを入力すると、そのDLLPのFCのCompletionを間引いてセレクタ234に出力する。
バッファ230は、バッファ212と同様に、セレクタ221からDLLPのPMを入力してバッファリングする。バッファ230は、図5(B)と同様に、セレクタ221からDLLPのPMを入力すると、そのDLLPのPMを間引いてセレクタ234に出力する。
バッファ231は、バッファ213と同様に、セレクタ221からTSを入力してバッファリングする。バッファ231は、図5(B)と同様に、セレクタ221からTSを入力すると、そのTSを間引いてセレクタ234に出力する。
バッファ232は、バッファ214と同様に、セレクタ221からTLPを入力してバッファリングする。TLPのバッファ232は、受信側のリンク層113(図1)にある受信バッファ以上のバッファサイズを用意すれば、オーバーフローしない。したがって、バッファ232は、セレクタ221からTLPを入力すると、そのTLPを間引かずにセレクタ234に出力する。
上記のように、セレクタ221は、第1のデスクランブラ220から入力した受信データrxがロジカルアイドルデータであるときには、そのロジカルアイドルデータを第2のバッファ222に書き込まずに廃棄する。ロジカルアイドルデータは、0値データであり、意味がある通信を行っていない期間に送受信されるデータ(無効データ)である。第1のクロックドメイン121は、セレクタ221の入力データがロジカルアイドルデータであるときには、ロジカルアイドルデータを第2のバッファ222にバッファリングせず、第2のバッファ222の出力データがないときにはロジカルアイドルデータ(0値データ)233をセレクタ234に出力する。
セレクタ234は、プロトコルの優先順位に従い、バッファ223〜232からの出力データ及びロジカルアイドルデータ233を、PLP>DLLP>TS>TLP>ロジカルアイドルデータ(0値データ)の優先順位で選択し、第2のクロックドメイン変換部235に出力する。すなわち、セレクタ234は、バッファ223〜232のデータ、ロジカルアイドルデータ233の順の優先順位で選択する。バッファ223のデータの優先順位が最も高く、ロジカルアイドルデータ233の優先順位が最も低い。バッファ223〜232間のデータ切り替えは、PLP/TS/DLLP/TLP単位の切れ目で行う。例えば、TLPの出力期間中にPLPのバッファ223〜225にデータが格納されたとしても、出力中の1つのTLPが出力を完了するまで新たなPLPは出力しない。
第2のクロックドメイン変換部235は、第1のクロックドメイン変換部202と同様に、セレクタ234から入力したデータを第1のクロック信号に同期した状態から第2のクロック信号に同期した状態に変換して第2のスクランブラ236に出力する。
第2のスクランブラ236は、図3の構成を有し、上記と同様に、第2のクロックドメイン変換部235からの受信データを暗号化して受信データrxを図1のリンク層113に出力する。
以上のように、PLPのFTSの送信バッファ205及びTSの送信バッファ213については、データの連続性が必要であるが、送信バッファ205及び213への入力が遅いため、連続で入力する状況でもバッファ205及び213が空になる状態が発生する。送信する情報が無いことで、データの連続性が損なわれるため、バッファ205及び213が空になった状態では、次の入力データが格納されるまでの一定期間、同じデータを繰り返し出力することで連続性を維持する。
また、バッファ205〜214に格納されているデータが無く、繰り返し出力も行っていない場合は、ロジカルアイドルデータ217を出力することにより、データが途切れることなく、データ転送することが可能となる。
PLPのFTSのバッファ205のパケットは、すべて内容が同じデータであり、シリアルバスのビットロック及びシンボルロックのために連続性と転送期間が必要なパケットである。また、TSのバッファ213のパケットは、通信デバイス間でハンドシェークを行いながら同じデータを繰り返し転送する性質があり、対向側のデータが変化するまでは同じデータを連続で転送し続ける。以上から、連続転送が必要なパケットについては、同じデータ送信しているため、バッファ205及び213内において同じデータを繰り返し転送しても送信動作として影響はない。
なお、PCI Express規格以外の高速入出力インタフェース回路でも同様に、データ(パケット)の種別毎にバッファリングし、連続転送が必要なものについては繰り返し転送し、無データ時にはロジカルアイドルデータ217を転送することにより、送信動作を確立させることができる。
次に、第2のバッファ222について説明する。PLP(FTS/SKP/IDL)の受信バッファ223〜225のデータは、バッファ223〜225の内容を間引いても問題はない。PLPのFTSについては、データの連続性が必要であるが、受信動作については、出力するよりも入力が速いため、繰り返すことなく、そのままの制御で連続性を保つことができる。
TSの受信バッファ231は、通信デバイス間でハンドシェークを行いながら、同じデータを繰り返し転送する性質があり、対向側のデータが変化するまでは同じデータを連続で転送し続ける。バッファ231の内容を上書きして出力しても、最終的にハンドシェークされたことが判断できれば良いので、間引いても影響はない。連続性については、受信動作では、出力するよりも入力が速いため、そのままの制御で連続性を保つことができる。
DLLPのAck/Nakの受信バッファ226のパケットは、シーケンス番号の管理により、TLPの受領状況を判断するためにある。このシーケンス番号は、TLPの送信毎に1増加する番号であり、この番号を利用して、どのTLPまでが受領できたのかを判断することに利用される。最新のDLLPのAck/Nakを参照することにより、今現在のTLPの受領状況が判断できるので、古い情報を上書きしたとしても、受信動作として影響はない。
DLLPのFCの受信バッファ227〜229についても同様で、更新された「受信総量+受信バッファの空き量」を通知するので、最新の受信バッファの空き量が判断できれば良く、古い情報を上書きしたとしても、受信動作として影響はない。
DLLPのPMの受信バッファ230のパケットについては、連続性もなく、転送間隔がバッファの制御時間に対して十分に長いため、バッファに入力できたことを通知できれば良い。
TLPの受信バッファ232は、全ての入力データをバッファリングし、データを出力する。TLPの受信バッファ232は、リンク層113の受信バッファがオーバーフローしない原理を利用し、リンク層113と同じ量の受信バッファ容量を持たせることで、オーバーフローを回避する。TLPの受信バッファがオーバーフローしない制御は、DLLPのFCを利用して行われ、受信バッファの空き容量を送信側で判断し、受信バッファが溢れない範囲で新たなTLPを送信する。ブリッジ回路112内でTLPをバッファリングすることにより、遅れて受信バッファへ転送されたとしても、DLLPのFCの値が更新されず、送信側にとっては受信バッファに空きがない状況として判断できるため、必要以上のTLP送信が発生することは無く、受信動作としても影響はない。
また、各バッファ223〜232に格納されているデータが無い場合は、ロジカルアイドルデータ(0値データ)233を出力することにより、データが途切れることなく、データ転送することが可能となる。
なお、PCI Express規格以外の高速入出力インタフェース回路でも同様に、データ(パケット)の種別毎にバッファリングし、最新の情報のみが必要なものについてはバッファへの上書きし、無データ時にはロジカルアイドルデータ233を転送することにより、受信動作を確立させることができる。
本実施形態によれば、クロックドメイン変換部202および235は、第1のクロック信号に同期する第1のクロックドメイン121と第2のクロック信号に同期する第2のクロックドメイン122との間でクロックドメイン変換をすることができる。また、リンク層113の論理を変更することなく(バス幅を変更することなく)、リンク層113をFPGA102へ実装(低速クロックの動作)することが可能になる。また、リンク層113をシリコン基板に実装した場合でも、リンク層113の動作クロックを低速にすることができ、低消費電力化が可能になる。
なお、上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。