PCIe(Peripheral Component Interconnect Express)は、ポイント・トゥ・ポイントのシリアルリンクであり、マザーボードレベルでの相互接続及び拡張カードインターフェース等に用いられる。1,2,4,8,12,16,又は32レーンでの2点間の相互接続が可能であり、1レーンは、送信及び受信の各々に一対の差動ペアが割り当てられた4本の信号線からなる。PCIeでは情報伝送の制御・管理のために、ソフトウェア層、トランザクション層、テータリンク層、及び物理層からなる階層構造が規定されている。
送信側のソフトウェア層では、読み出しや書き込みをリクエストするために、TLP(Transaction Layer Packet)の生成に必要な情報(トランザクションタイプ、アドレス、送信データ量等)をトランザクション層に送信する。受信側のソフトウェア層では、トランザクション層が受信したTLPに含まれる情報(トランザクションタイプ、アドレス、受信データ量等)をトランザクション層から受けとる。
トランザクション層では、ソフトウェア層から受け取った情報に基づいて、ヘッダ、ペイロード(書き込みリクエストの場合)、及び必要に応じてECRC(End to End CRC)を含むTLPを生成し、生成したTLPをデータリンク層に送信する。ヘッダは、アドレス、TLPタイプ、転送サイズ、リクエスターID又はコンプリーターID、タグ等を含む。ここでリクエスターIDは要求側が送信するリクエストTLPに含まれ、コンプリーターIDは要求に応答する側が送信するコンプリーションTLPに含まれる。タグはリクエストTLPとコンプリーションTLPとで同じものが用いられる。受信側のトランザクション層では、データリンク層から受信したTLPに対してECRCエラーをチェックし、エラーが無く且つその他の不備も無ければヘッダに含まれる情報及びペイロードをソフトウェア層に送信する。送信側のトランザクション層においては、要求送信時のリクエストTLPのタグと応答受信時のコンプリーションTLPのタグとを照合することにより、期待した応答が返ってきたかのチェック(コンプリーションチェック)が行われる。
送信側のデータリンク層では、シーケンス番号とLCRC(Link CRC)とをTLPに付加し、これらが付加されたTLPを物理層に送信する。また当該TLPのコピーが再送バッファ(Retry Buffer)に保存される。受信側のデータリンク層では、物理層を介して受信したTLPに対してパケットの抜けや多重受信チェックをシーケンス番号に基づいて行うと共に、LCRCエラーをチェックする。受信側のデータリンク層は、エラーがなければACK-DLLP(Data Link Layer Packet)を生成して送信側に送信すると共に、シーケンス番号とLCRCとを取り除いたTLPをトランザクション層に送信する。送信側のデータリンク層では、ACK-DLLPを受信側から受け取ることによりTLPの送信完了を確認し、再送バッファをクリアする。一方、エラー発生を示すNAK-DLLPを受信側から受け取った場合には、送信側のデータリンク層は、再送バッファに保存されているTLPを再送信する。
物理層では、データリンク層から受け取ったTLP又はDLLPに対してスタートとエンドとを示すフレーミングキャラクタ(即ちフレーミングシンボル又はフレーミングトークン)を付加する。仕様及び条件によってはスタートを示すフレーミングキャラクタのみが付加され、エンドを示すフレーミングキャラクタは付加されない。フレーミングキャラクタの付加されたパケットはリンクを介して相手側に送信される。物理層がリンクからパケットを受信すると、当該パケットはデータリンク層に送信される。フレーミングキャラクタは、パケットの開始と終了を検出するために用いられる。リンクに複数のレーンが存在する場合、物理層からリンクに送信されるパケットは、複数のレーンに対して順番にバイト毎に割り振られる。
PCIeのリンクを介しての情報の送受信に関しては、クレジット管理によるフロー制御が行われる。フロー制御はトランザクション層においてフロー制御のためのDLLPを定期的に送信することにより実行され、受信側のバッファにTLPを受信するスペースが存在しない限り送信側からTLPを送信しないように制御する。
図1は、8レーンでのデータ伝送におけるパケット配置の一例を示す図である。パケット配置201は、物理層における8個のレーンLane0乃至Lane7に対して割り当てられたパケットの配置の一例を示す。1レーンには1バイト(8ビット)の情報が割り当てられ、伝送するパケットが8個のレーンLane0乃至Lane7の各々に対して1バイト毎に順番に割り当てられる。図1に示されるパケット配置201では、4個のレーンが1つの枠に纏めて示されており、図示される枠の1つが4バイト長の情報を示す。パケット配置201における1行(横一列)が1シンボルのサイクルに対応する。
TLPを送信する場合、例えばPCIe-Gen3ならばstpトークン(TLPのスタートを示すフレーミングトークン)に続き、データリンク層から供給されたTLPの情報が各レーンに配置される。stpトークンは4バイト長であり、TLPの情報は、3又は4ダブルワード(12又は16バイト)に亘るヘッダHDRとペイロードDT0乃至DTPx(xは正の整数)とを含む。ペイロードはDT0のみである場合もある。各レーンでは、128ビットの情報を128b/130b符号化により130ビットに変換し、変換後の情報をシリアルに送信する。
パケット配置202は、物理層においてパケット配置201に示される複数のパケットを受信した場合に、各パケットからフレーミングトークンstpを取り除き、残りの情報(データリンク層で用いる情報)を8バイト幅のパラレルバスに配置した配置例を示す。8レーンのリンクを介して情報の送受信を行う場合、データリンク層以上の層では8バイト幅のパラレルバスを用いて、上記の1シンボルを1クロックサイクルで転送する。図1では、パケット配置201が4バイト幅のグループ2つに分けて示されているのに合わせて、パケット配置202も4バイトずつ纏めて上位4バイト[63:32]と下位4バイト[31:0]とに分けて示している。
データリンク層においては、その後の処理のしやすさを考慮して、各パケットの先頭は上位4バイト[63:32]側に詰めて配置(即ち図1において左詰で配置)し、且つ1つのパケットに含まれる情報は隙間を空けずに連続して配置する。そのようにしてパケットをデータリンク層に配置した結果、パケットの末尾が上位4バイト[63:32]側に位置する場合には、下位4バイト[31:0]側は空とする。
図1に示す第1のクロックサイクルでは、パケット配置201においてstpとHDR203とを受信しているが、このHDR203をパケット配置202の第1のクロックサイクルで左詰に配置してしまうと、下位4バイトが空いてしまう。従って、パケット配置202においてはHDR203を第2のクロックサイクルで左詰に配置し、パケット配置201において第2クロックサイクルで受信したHDR204をパケット配置202において第2クロックサイクルの下位4バイト側に配置している。以下同様にして、物理層で受信したパケット配置201の各パケットをデータリンク層において8バイトのパラレルバスに配置すると、図1にパケット配置202として示される配置が得られる。
データリンク層におけるパケット配置202のパラレルデータを生成する際には、物理層で受信した各パケットからstpトークンの4バイト分を取り除いている。上記のようにパケットの先頭を左詰にすることにより生じる空白は最大で4バイトであるので、この空白を設けることにより生じる遅延は、4バイトのstpトークンを除去することにより埋め合わせされる。従って、物理層において8レーンに割り当てられたパケットをデータリンク層において8バイトのパラレルバスに配置する際に、徐々にタイミングが遅れてしまうことはない。即ち、受信側において、相手側から送信されてくる情報を受信できなくなることはない。
図2は、16レーンでのデータ伝送におけるパケット配置の一例を示す図である。パケット配置211は、物理層における16個のレーンLane0乃至Lane15に対して割り当てられたパケットの配置の一例を示す。1レーンには1バイト(8ビット)の情報が割り当てられ、伝送するパケットが16個のレーンLane0乃至Lane15の各々に対して1バイト毎に順番に割り当てられる。図2に示されるパケット配置211では、4個のレーンが1つの枠に纏めて示されており、図示される枠の1つが4バイト長の情報を示す。パケット配置211における1行(横一列)が1シンボルのサイクルに対応する。各パケットの構成及びリンクを介しての情報伝送の態様は図1の場合と同様である。またデータリンク層において、各パケットの先頭は上位4バイト側に詰めて配置し、且つ1つのパケットに含まれる情報は隙間を空けずに連続して配置するという原則も、図1の場合と同様である。
物理層で受信したパケット配置211からデータリンク層におけるパラレルデータを生成する際には、受信した各パケットからstpトークンの4バイト分を取り除くことになる。しかしながら、16レーン構成の場合、パケットの先頭を左詰にすることにより生じる空白は最大で12バイト(4バイト×3個)であるので、この空白を設けることにより生じる遅延は、4バイトのstpトークンを除去しても埋め合わせることはできない。従って、物理層において16レーンに割り当てられたパケットをデータリンク層において16バイト幅の一本のパラレルバスに配置したのでは、徐々にタイミングが遅れていってしまう。
図2の右側に示すパケット配置212及び213は、パケット配置211で受信した複数のパケットをパラレルデータとしてデータリンク層に配置した場合の配置の一例である。パケット配置212及び213は各々が16バイト幅である2個のパラレルバス(2個のチャネル)に対応している。パケット配置211に示される各パケットからフレーミングトークンstpを取り除いた残りの情報(データリンク層で用いる情報)が、これら2個のチャネルに配置されている。
図1に示す8レーン構成の場合には、データリンク層において8バイト幅のパラレルバス一本で充分であった。しかし図2に示す16レーン構成の場合には、前述のように最大で12バイトの空白が生成されるので、データリンク層において16バイト幅のパラレルバス一本では不十分である。即ち、物理層において16レーンに割り当てられたパケットをデータリンク層において16バイトのパラレルバス一本に配置したのでは、徐々にタイミングが遅れ、相手側から送信されてくる情報を受信できなくなってしまう。そこで図2に示すパケット配置212及び213のように、各々が16バイト幅である2個のチャネルにパケットを配置することにより、相手側から送信されてくる情報を漏れなく受信することが可能となる。
図2から分かるように、パケット配置212とパケット配置213との間では、殆どのクロックサイクルにおいてパケット同士の重なりがない。2つのチャネル間でパケット同士が重なるのは、あるパケットの末尾と次のパケットの先頭とが同一のクロックサイクルに位置する場合のみである。一般に、受信側においてパケットの先頭で実行する処理とパケットの末尾で実行する処理とは異なるので、あるパケットの末尾と次のパケットの先頭とが重なっても、受信処理のための資源を二重に設ける必要はない。しかしながらパケットのなかには、1クロックサイクルの長さのパケットも存在する。そのような1サイクルパケットの先頭と末尾とは同一のクロックサイクルにおいて受信される。
先行パケットの末尾と後続パケットの先頭とが重なり、且つ当該後続パケットが1サイクルパケットであった場合、先行パケットの末尾と後続パケットの末尾とが同一クロックサイクルで重なることになる。この場合、パケット末尾で実行する処理のための受信側の資源を二重に設けないと処理が間に合わなくなる可能性がある。
LCRCが確定するのはパケットの末尾であるから、パケットの末尾でLCRCチェックが行われる。またパケットが正常であることが確定するのがパケットの末尾であるから、シーケンス番号のチェック結果の確定も必然的に末尾で行うことが必要になる。またパケットの末尾においてパケットの長さが確定するので、パケットの長さのチェックも末尾で行われることになる。更に、ECRCが確定するのはパケットの末尾であるから、パケットの末尾でECRCチェックが行われる。このように、パケット末尾で行う処理量が非常に多いため、パケット末尾で実行する処理の資源を二重に設けると、大量の資源が重複して設けられることになりコストが増大する。
以下に、本発明の実施例を添付の図面を用いて詳細に説明する。以下の図面において、同一又は対応する構成要素は同一又は対応する番号で参照し、その説明は適宜省略する。
図3は、PCIeの送受信システムの構成の一例を示す図である。図3及び以降の同様の図において、各ボックスで示される各回路又は機能ブロックと他の回路又は機能ブロックとの境界は、基本的には機能的な境界を示すものであり、物理的な位置の分離、電気的な信号の分離、制御論理的な分離等に対応するとは限らない。各回路又は機能ブロックは、他のブロックと物理的にある程度分離された1つのハードウェアモジュールであってもよいし、或いは他のブロックと物理的に一体となったハードウェアモジュール中の1つの機能を示したものであってもよい。
図3に示す送受信システムは、着目コンポーネント10及び対向コンポーネント300とを含み、両者の間が16レーンのリンクで結合されている。着目コンポーネント10は、送信回路11、PCIe受信回路12、及びデータ処理部13とを含む。
送信回路11は、着目コンポーネント10から対向コンポーネント300へ伝送する情報を送信する。PCIe受信回路12は、対向コンポーネント300から着目コンポーネント10へ伝送する情報を受信する。データ処理部13は、PCIe受信回路12から受信通知を受け取ると、PCIe受信回路12に制御信号を印加することによりPCIe受信回路12から受信データを受け取る。
図4は、PCIe受信回路12の構成の一例を示す図である。PCIe受信回路12は、物理層ユニット21、データリンク層ユニット22、トランザクション層ユニット23、及び受信バッファ24を含む。PCIe受信回路12は、受信したパケットに対して種々の処理を施す処理装置として機能する。物理層ユニット21は、16レーンからなるリンクを介してTLPやDLLP等のパケットを受信する。物理層ユニット21は、各々が16バイトのパラレルバスである2つのチャネルCH0及びCH1を介し、受信パケットのうちデータリンク層で必要な情報(例えばシーケンス番号やLCRCが付加されたTLP)をデータリンク層ユニット22に供給する。
物理層ユニット21は、各レーンにおいて受信したデータからフレーミングキャラクタを検出することにより、パケットの先頭や末尾を検出し、検出したパケットを2つのチャネルCH0及びCH1に送信する。この際、物理層ユニット21は、例えば図2を用いて説明した配置の仕方と同様にして、16レーンのリンクから受信したパケットをデータリンク層における2つのチャネルに配置すればよい。図4に示される例では、16個のレーンを有するリンクと各々が16バイト幅である2つのチャネルとを想定しているが、レーンの数やチャネルの幅等に関する構成は、この例に示された構成に限定されるものではない。シリアルで受信したパケットをパラレルバスに配置する際に、複数本のチャネルが用いられ、複数本のチャネル間でパケットの先頭と末尾とが重複する構成であればよい。
データリンク層ユニット22は、受信したTLPに対してパケットの抜けや多重受信チェックをシーケンス番号に基づいて行うと共に、LCRCエラーをチェックする。データリンク層ユニット22は、シーケンス番号とLCRCとを取り除いたTLPを、各々が16バイトのパラレルバスである2つのチャネルCH0及びCH1を介し、トランザクション層ユニット23に送信する。データリンク層ユニット22は、ACK-DLLPを受け取った場合にはTLPの送信完了を確認し、送信回路11に含まれるデータリンク層(送信側)の再送バッファ(図示されない)をクリアする。データリンク層ユニット(送信側)は、エラー発生を示すNAK-DLLPを受け取った場合には、再送バッファに保存されているTLPを再送信する。
トランザクション層ユニット23は、データリンク層から受信したTLPに対して必要に応じ、ECRCエラーをチェックする。また、TLPのヘッダ情報およびヘッダ情報とデータの整合性などをチェックする。トランザクション層ユニット23は、エラーが無ければヘッダに含まれる情報及び受信通知をソフトウェア層に相当するデータ処理部13(図1)に送信すると共に、ペイロードを受信バッファ24に格納する。受信TLPがコンプリーションTLPである場合、トランザクション層ユニット23は、要求送信時のリクエストTLPのタグと応答受信時のコンプリーションTLPのタグとを照合することにより、期待した応答が返ってきたかのコンプリーションチェックを行う。ヘッダは、アドレス、TLPタイプ、転送サイズ、リクエスターID又はコンプリーターID、タグ等を含む。
図5は、データリンク層ユニット22の構成の一例を示す図である。図5に示すデータリンク層ユニット22は、遅延交換処理部31、チャネル選択部32、シーケンス番号チェック部33、比較部34、LCRC計算部35-1及び35-2、チャネル選択部36、及びチェック結果確認部37を含む。データリンク層ユニット22は、チャネルCH0及びCH1の各々において、シーケンス番号SQN、TLP、LCRC、及び(必要に応じて)消去指示DELを、物理層ユニット21から受け取る。消去指示DEL(EDB:EnD Bad)は、送信中のデータにおいてエラーを検出したとき等に対向コンポーネント300が当該送信データを取り消すために送信する指示である。この消去指示DELはパケット末尾に同期して送られてくるので、当該パケットを受信して次段に送るかどうかは末尾で確定する。
遅延交換処理部31は、後段においてパケット受信処理資源のコストを抑えながら2つのチャネル間での重複するパケット処理を可能にするために、一方のチャネルのデータタイミングを遅延させると共に、必要に応じて2つのチャネル間でのデータ交換を行う。この遅延交換処理については後述する。
図2において説明したように、2つのチャネル間でパケットが重複する状況としては、先行パケットの末尾と後続パケットの先頭とが同一クロックサイクルで重なる場合のみである。更に後続パケットが1サイクルパケットである場合には、2つのチャネル間でパケットの末尾が重複することになる。なお、2つのチャネル間でパケットの先頭が重複することはない。即ち、先行パケットの末尾と後続パケットの先頭とが重複している状況において、先行パケットは常に複数サイクル長を有するパケットである。
遅延交換処理部31は、2つのチャネル間でパケットの末尾が重複する状態を解消するような処理を実行する。即ち、遅延交換処理部31から出力される2つのチャネルにおいては、一方のチャネルにおけるパケットの末尾と他方のチャネルにおけるパケットの末尾とが重複しないようにタイミング調整がされている。またチャネル間でパケットの先頭同士が重複することもない。先頭同士及び末尾同士は重複しないが、先頭と末尾とが互いに重複する状態は存在する。
遅延交換処理部31を設けたことにより、PCIe受信回路12において遅延交換処理部31より後段でパケットを処理するパケット処理部(トランザクション層ユニット23等)は、2つのチャネル間で末尾同士が重複するパケットを処理する必要がなくなる。従って、パケット処理部における処理資源の二重化や処理の複雑化を避けながらも、2つのチャネル間で重複するパケットを処理可能となる。
チャネル選択部32は、遅延交換処理部31から出力される2つのチャネルのうちいずれかのチャネルにおいてパケットの先頭を検出すると、当該パケットのシーケンス番号SQNをシーケンス番号チェック部33に送信する。チャネル選択部32は更に、遅延交換処理部31から出力される2つのチャネルのうちいずれかのチャネルにおいてパケットの末尾を検出すると、当該パケットのLCRCを比較部34に送信する。
シーケンス番号チェック部33は、現在保持しているシーケンス番号と今回受領したシーケンス番号とを比較することにより、パケットの受信に抜けがないか及びパケットを多重受信していないか等をチェックする。シーケンス番号チェック部33が保持するシーケンス番号は、チェック結果確認部37からの指示によりパケット末尾のタイミングにおいてパケットひとつ正常受信する毎に1増加されて更新される。
比較部34は、チャネル選択部32から受領するLCRCとチャネル選択部36から受領するLCRC計算値とを比較し、チェック結果確認部37に比較結果を通知する。チャネル選択部36が出力するLCRC計算値は、LCRC計算部35-1及び35-2により計算される。LCRC計算部35-1及び35-2は、パケットを構成する各バイト(或いは複数バイト長のデータ部分)に対してCRCを順次計算していくため、両チャネルで並行してLCRC計算を実行する。遅延交換処理部31の出力において、両チャネル間でのパケット重複は完全には解消されていないので、LCRC計算部35-1及び35-2は並列に設けられることになる。チャネル選択部36は、比較対象となるチャネルに対するLCRC計算値を選択して出力する。
チェック結果確認部37は、比較部34からの比較結果に基づいて、LCRCエラーの有無を確認する。比較部34からの比較結果がLCRC一致を示す場合、チェック結果確認部37はLCRCエラー無しと判断する。シーケンス番号チェックに問題なく、LCRCチェックに問題なく、且つパケット消去指示DELを受信していないならば、チェック結果確認部37は、シーケンス番号の増加を指示するとともに、遅延交換処理部31から供給されるTLPからLCRCを除去したもの、及び消去指示DELを値を変化させずに出力する。エラーしていた場合は消去指示DELが消去を示す値となる。これらの確認処理及び出力処理は、2つのチャネルCH0及びCH1に対して独立に実行される。
データリンク層ユニット22においては、遅延交換処理部31が設けられることにより、2つのチャネル間でパケット末尾が重複する状態が発生しないようになっている。仮にパケット末尾が重複してしまうと、LCRC計算部35-1及び35-2だけでなく比較部34も二重に設ける必要がある。また更に、シーケンス番号チェック部33におけるシーケンス番号更新処理が複雑になる。例えば、同一のクロックサイクルにおいて2つの末尾を同時に受信した場合に、通常とは異なる制御として、シーケンス番号の更新処理において1増加ではなく2増加することが必要になったりする。また後段のトランザクション層ユニット23においても同様に処理資源の二重化や処理の複雑化が必要になる。図5の構成のように遅延交換処理部31を設けることにより、データリンク層ユニット22及び後段におけるパケット処理部における処理資源の二重化や処理の複雑化を避けながらも、2つのチャネル間で重複するパケットを処理可能となる。
図6は、トランザクション層ユニット23の構成の一例を示す図である。図6に示すトランザクション層ユニット23は、チャネル選択部41、ヘッダ保持部42、ヘッダ情報チェック部43、コンプリーションチェック部44、及び選択確認部45を含む。トランザクション層ユニット23は、チャネルCH0及びCH1の各々において、TLP及び(必要に応じて)消去指示DELをデータリンク層ユニット22から受け取る。
チャネル選択部41は、遅延交換処理部31から出力される2つのチャネルのうちいずれかのチャネルにおいてパケットの先頭を検出すると、当該パケットのヘッダをヘッダ保持部42及びコンプリーションチェック部44に送信する。また更にチャネル選択部41は、遅延交換処理部31から出力される2つのチャネルのうちいずれかのチャネルにおいてパケットの末尾を検出すると、当該末尾に関する情報をコンプリーションチェック部44に送信する。
ヘッダ情報チェック部43は、ヘッダ保持部42に保持されたヘッダの情報に基づいて種々のチェックを行う。コンプリーションチェック部44は、受信パケットがリードリクエストに対するコンプリーションであった場合には、送信したリクエストと受信したコンプリーションとの対応確認を行う。ヘッダ情報には、ヘッダ長、データ付きか否かを示すフォーマット情報、リクエスト種別を示すタイプ情報、パケット長情報等が含まれる。受信パケットがリードリクエストに対するコンプリーションであった場合には、コンプリーションステータス情報等もヘッダに含まれる。受信パケットとリクエストとの対応が取れなかったり、パケット長情報が実際のパケット長と異なっていたり、コンプリーションステータス情報とフォーマット情報が問題のある組合せであったりする等、何らかの不整合があった場合にはエラー報告される。また、サポートしないリクエスト種別であった場合にもその旨がエラー報告される。エラー報告は、ヘッダ情報チェック部43又はコンプリーションチェック部44から選択確認部45に送信される。
選択確認部45は、チェック結果に問題が無い場合には、パケットの末尾が検出された方のチャネルに同期して受信通知を送出する。選択確認部45は更に、受信バッファ24に書き込み指示WEを印加すると共に、データリンク層ユニット22から受け取ったTLPのペイロードDTを受信バッファ24に書き込む。
図5において遅延交換処理部31が仮に設けられていないとすると、図6のトランザクション層ユニット23において、ヘッダ保持部42、ヘッダ情報チェック部43、コンプリーションチェック部44、及び選択確認部45を二重化することが必要になってしまう。図5に示される構成のようにデータリンク層ユニット22において遅延交換処理部31を設けることにより、トランザクション層ユニット23においても、処理資源の二重化や処理の複雑化を避けながら、2つのチャネル間で重複するパケットを処理可能となる。
以上に説明した構成においては、遅延交換処理部31をデータリンク層ユニット22に設けたが、遅延交換処理部を設ける位置はトランザクション層ユニット23であってもよい。以下に、遅延交換処理部をトランザクション層ユニットに設けた構成について説明する。
図7は、遅延交換処理部を設けたトランザクション層ユニットの構成の一例を示す図である。図7に示すトランザクション層ユニット23Aは、遅延交換処理部31A、ヘッダ保持部42、ヘッダ情報チェック部43、コンプリーションチェック部44、及び選択確認部45を含む。トランザクション層ユニット23は、チャネルCH0及びCH1の各々において、TLP及び(必要に応じて)消去指示DELをデータリンク層ユニット22から受け取る。
遅延交換処理部31Aは、後段においてパケット受信処理資源のコストを抑えながら2つのチャネル間での重複するパケット処理を可能にするために、一方のチャネルのデータタイミングを遅延させると共に、必要に応じて2つのチャネル間でのデータ交換を行う。遅延交換処理部31Aの構成及び動作は、前述の遅延交換処理部31の構成及び動作と同様である。この遅延交換処理部31Aから出力される2つのチャネルにおいては、一方のチャネルにおけるパケットの末尾と他方のチャネルにおけるパケットの末尾とが重複しないようにタイミング調整がされている。またチャネル間でパケットの先頭同士が重複することもない。先頭同士及び末尾同士は重複しないが、先頭と末尾とが互いに重複する状態は存在してよい。図7に示されるヘッダ保持部42、ヘッダ情報チェック部43、コンプリーションチェック部44、及び選択確認部45の構成及び動作は、図6に示される対応各部の構成及び動作と同一であってよい。
遅延交換処理部31Aが仮に設けられていないとすると、ヘッダ保持部42、ヘッダ情報チェック部43、コンプリーションチェック部44、及び選択確認部45を二重化することが必要になってしまう。図7に示される構成のようにトランザクション層ユニット23Aにおいて遅延交換処理部31Aを設けることにより、処理資源の二重化や処理の複雑化を避けながら、2つのチャネル間で重複するパケットを処理可能となる。
図8は、トランザクション層ユニットに遅延交換処理部を設けた場合のデータリンク層ユニットの構成の一例を示す図である。図8に示すデータリンク層ユニット22Aは、チャネル選択部32A、シーケンス番号チェック部33A、比較部34-1及び34-2、LCRC計算部35-1及び35-2、及びチェック結果確認部37Aを含む。
図8に示されるデータリンク層ユニット22においては、図5に示される遅延交換処理部31が設けられていないので、2つのチャネル間でパケット末尾が重複する状態が発生することになる。パケット末尾が重複してしまうと、LCRC計算部35-1及び35-2だけでなく比較部も二重に設ける必要があり、図8に示される構成では比較部34-1及び34-2が並列に設けられている。
チャネル選択部32Aは、受信パケットの先頭を検出すると、当該パケットのシーケンス番号SQNをシーケンス番号チェック部33Aに送信する。シーケンス番号チェック部33Aは、現在保持しているシーケンス番号と今回受領したシーケンス番号とを比較することにより、パケットの受信に抜けがないか及びパケットを多重受信していないか等をチェックする。シーケンス番号チェック部33Aが保持するシーケンス番号は、チェック結果確認部37Aからの指示により、パケット末尾のタイミングにおいて1増加されて更新される。但し、2つのチャネルで同時に受信パケットの末尾が検出された場合には通常とは異なる制御が実行され、シーケンス番号チェック部33Aは、保持しているシーケンス番号を更新時に1増加させるのではなく2増加させる。
比較部34-1及び34-2は、2つのチャネルCH0及びCH1にそれぞれ対応して設けられる。比較部34-1及び34-2の各々は、対応チャネルにおける受信パケットに含まれるLCRCとLCRC計算部35-1及び35-2の対応する一方から受領するLCRC計算値とを比較し、チェック結果確認部37Aに比較結果を通知する。チェック結果確認部37Aは、比較部34-1又は34-2からの比較結果に基づいて、対応チャネルにおけるLCRCエラーの有無を確認する。比較部34-1又は34-2からの比較結果がLCRC一致を示す場合、チェック結果確認部37Aは対応チャネルにおいてLCRCエラー無しと判断する。シーケンス番号チェックに問題なく、LCRCチェックに問題なく、且つパケット消去指示DELを受信していないならば、チェック結果確認部37Aは、物理層ユニット21から供給されるTLPからLCRCを除去したもの、及び消去指示DELを値を変化させずに出力する。これらの比較処理、確認処理、及び出力処理は、2つのチャネルCH0及びCH1に対して独立に実行される。
以下に、遅延交換処理部31が実行する遅延処理及び交換処理について説明する。図2を用いて説明したように、2つのチャネル間でパケット同士が重なるのは、あるパケットの末尾と次のパケットの先頭とが同一のクロックサイクルに位置する場合のみである。先行パケットの末尾と後続パケットの先頭とが重なり、且つ当該後続パケットが1サイクルパケットであった場合、先行パケットの末尾と後続パケットの末尾とが同一クロックサイクルで重なることになる。この場合、パケット末尾で実行する処理のための受信側の資源を二重に設けないと処理が間に合わなくなる可能性がある。
遅延交換処理部31は、2つのチャネルの入力側において複数サイクル長である第1のパケットの末尾と1サイクル長である第2のパケットの末尾とが重複した場合、第2のパケット側のチャネルの出力側においてデータを1サイクル遅延させる状態を開始する。これにより、先行パケットの末尾と後続パケットの末尾とが同一クロックサイクルで重複する状態を出力側において解消することができる。
遅延交換処理部31は、チャネルの出力側において一方のチャネルが1サイクル遅延している遅延状態において、チャネルの入力側においていずれのチャネルにもパケットが存在しないサイクルが発生すると、チャネルの遅延状態を終了する。これにより、遅延状態を終了して元のタイミングに戻すことができる。遅延状態が継続している状態においてパケットの末尾同士が再び重複する事象が生起すると、その度に更に遅延量が増加していく結果となるので、適切な機会を逃さずに遅延状態を終了させることが好ましい。
図9は、遅延交換処理の第1の例を示すタイミングチャートである。図9(a)は、遅延交換処理部31へ入力される2つのチャネルCH0及びCH1におけるパケットを示す。図9(b)は、遅延交換処理部31から出力される2つのチャネルCH0及びCH1におけるパケットを示す。
図9(a)に示す例では、サイクルT1において、第1のチャネルCH0における複数サイクル長であるパケット51の末尾と第2のチャネルCH1における1サイクル長であるパケット52の末尾とが重複している。遅延交換処理部31は、パケット52側のチャネルCH1のデータを1サイクル遅延させる状態をこのサイクルT1から開始する。その結果、図9(b)に示すように、1サイクル長のパケット52は1サイクル遅延されてサイクルT1からサイクルT2に移されている。
図9(a)に示すように、サイクルT2において、入力側のいずれのチャネルにもパケットが存在しないサイクルが発生している。図9(b)に示すように、チャネルCH1が遅延している状態において、このサイクルT2が到来すると、チャネルCH1の遅延状態を当該サイクルT2で終了する。
図10は、遅延交換処理の第2の例を示すタイミングチャートである。図10(a)は、遅延交換処理部31へ入力される2つのチャネルCH0及びCH1におけるパケットを示す。図10(b)は、遅延交換処理部31から出力される2つのチャネルCH0及びCH1におけるパケットを示す。
図10(a)に示す例では、サイクルT3において、第1のチャネルCH0における複数サイクル長であるパケット53の末尾と第2のチャネルCH1における1サイクル長であるパケット54の末尾とが重複している。遅延交換処理部31は、パケット54側のチャネルCH1のデータを1サイクル遅延させる状態をこのサイクルT3から開始する。その結果、図10(b)に示すように、1サイクル長のパケット54並びに後続する複数サイクル長のパケット55及び1サイクル長のパケット56が1サイクル遅延されている。
図10(a)に示すように、サイクルT4において、いずれのチャネルにもパケットが存在しないサイクルが発生している。図10(b)に示すように、チャネルが遅延している状態において、このサイクルT4が到来すると、チャネルの遅延状態を当該サイクルT4で終了する。
また更なる制御動作として、遅延交換処理部31は以下の動作を実行する。遅延交換処理部31は、遅延状態にあるチャネルにおいて複数サイクル長である第3のパケットの末尾と複数サイクル長である第4のパケットの先頭とが入力側で連続すると、チャネルの遅延状態を終了すると共に、出力側でチャネル間のデータ交換を開始する。このようにして、データ交換により空きのある側のチャネルに第4のパケットを逃すことにより、出力側において第4のパケットを遅延のない状態に保ちながら、遅延状態を終了して元のタイミングに戻すことができる。なおチャネル間でのデータ交換は、複数チャネル長パケットの末尾と複数サイクル長パケットの先頭とが入力側でチャネル間において重複していないとき、当該単独末尾の発生により終了させる。これにより、適切なタイミングでチャネル間のデータ交換を終了して元の状態に戻すことができる。
図11は、遅延交換処理の第3の例を示すタイミングチャートである。図11(a)は、遅延交換処理部31へ入力される2つのチャネルCH0及びCH1におけるパケットを示す。図11(b)は、遅延交換処理部31から出力される2つのチャネルCH0及びCH1におけるパケットを示す。
図11(a)に示す例では、サイクルT5において、第1のチャネルCH0における複数サイクル長であるパケット57の末尾と第2のチャネルCH1における1サイクル長であるパケット58の末尾とが重複している。遅延交換処理部31は、パケット58側のチャネルCH1のデータを1サイクル遅延させる状態をこのサイクルT5から開始する。その結果、図11(b)に示すように、1サイクル長のパケット58並びに後続する複数サイクル長のパケット59が1サイクル遅延されている。
図11(a)に示すように、サイクルT6において、複数サイクル長であるパケット59の末尾と複数サイクル長であるパケット60の先頭とが入力側で連続している。図11(b)に示すように、チャネルCH1が遅延している状態において、このサイクルT6が到来すると、チャネルCH1の遅延状態を終了すると共にチャネル間でのデータ交換を開始する。このチャネル間のデータ交換により、パケット60が元のタイミングから遅延されることとなく、チャネルCH1からチャネルCH0に移動される。またチャネルCH1における遅延状態は終了する。またチャネル間でのデータ交換は、複数サイクル長パケット60の末尾が複数サイクル長パケットの先頭と入力側で重複していないので、当該単独末尾の発生により終了させる。このようにして、パケット60を遅延のない状態に保ちながら、チャネルCH1での遅延状態を終了して元のタイミングに戻すことができる。
図12は、遅延交換処理の第4の例を示すタイミングチャートである。図12(a)は、遅延交換処理部31へ入力される2つのチャネルCH0及びCH1におけるパケットを示す。図12(b)は、遅延交換処理部31から出力される2つのチャネルCH0及びCH1におけるパケットを示す。
図12(a)に示す例では、サイクルT7において、第1のチャネルCH0における複数サイクル長であるパケット61の末尾と第2のチャネルCH1における1サイクル長であるパケット62の末尾とが重複している。遅延交換処理部31は、パケット62側のチャネルCH1のデータを1サイクル遅延させる状態をこのサイクルT7から開始する。その結果、図12(b)に示すように、1サイクル長のパケット62並びに後続する複数サイクル長のパケット63が1サイクル遅延されている。
また図12(a)のサイクルT9において、第2のチャネルCH1における複数サイクル長であるパケット64の末尾と第1のチャネルCH0における1サイクル長であるパケット65の末尾とが重複している。遅延交換処理部31は、パケット64側のチャネルCH0のデータを1サイクル遅延させる状態をこのサイクルT9から開始する。その結果、図12(b)に示すように、1サイクル長のパケット65が1サイクル遅延されている。
図12(a)に示すように、サイクルT8において、複数サイクル長であるパケット63の末尾と複数サイクル長であるパケット64の先頭とが入力側で連続している。図12(b)に示すように、チャネルCH1が遅延している状態において、このサイクルT8が到来すると、チャネルCH1の遅延状態を終了すると共にチャネル間でのデータ交換を開始する。このチャネル間のデータ交換により、パケット64が元のタイミングから遅延されることなく、チャネルCH1からチャネルCH0に移動される。またチャネルCH1における遅延状態は終了する。またチャネル間でのデータ交換は、複数サイクル長パケット64の末尾が複数サイクル長パケットの先頭と入力側で重複していないので、当該単独末尾の発生により終了させる。このようにして、パケット64を遅延のない状態に保ちながら、チャネルCH1での遅延状態を終了して元のタイミングに戻すことができる。
図12(a)に示すように、サイクルT10において、入力側のいずれのチャネルにもパケットが存在しないサイクルが発生している。図12(b)に示すように、チャネルCH0が遅延している状態において、このサイクルT10が到来すると、チャネルCH0の遅延状態を当該サイクルT10で終了する。
図13は、遅延交換処理の第5の例を示すタイミングチャートである。図13(a)は、遅延交換処理部31へ入力される2つのチャネルCH0及びCH1におけるパケットを示す。図13(b)は、遅延交換処理部31から出力される2つのチャネルCH0及びCH1におけるパケットを示す。
図13(a)に示す例では、サイクルT11において、第1のチャネルCH0における複数サイクル長であるパケット71の末尾と第2のチャネルCH1における1サイクル長であるパケット72の末尾とが重複している。遅延交換処理部31は、パケット72側のチャネルCH1のデータを1サイクル遅延させる状態をこのサイクルT11から開始する。その結果、図13(b)に示すように、1サイクル長のパケット72並びに後続する複数サイクル長のパケット73が1サイクル遅延されている。
図13(a)に示すように、サイクルT12において、複数サイクル長であるパケット73の末尾と複数サイクル長であるパケット74の先頭とが入力側で連続している。図13(b)に示すように、チャネルCH1が遅延している状態において、このサイクルT12が到来すると、チャネルCH1の遅延状態を終了すると共にチャネル間でのデータ交換を開始する。このチャネル間のデータ交換により、パケット74が元のタイミングから遅延されることなく、チャネルCH1からチャネルCH0に移動される。またチャネルCH1における遅延状態は終了する。
上記チャネル間でのデータ交換は、パケット74の末尾が複数サイクル長パケット75の先頭と入力側で重複しているので、パケット74の末尾において終了することなく継続される。このチャネル間のデータ交換により、パケット75が元のタイミングから遅延されることなく、チャネルCH0からチャネルCH1に移動される。
チャネル間でのデータ交換は、サイクルT13において、複数サイクル長パケット75の末尾が複数サイクル長パケットの先頭と入力側で重複していないので、当該単独末尾の発生により終了させる。このようにして、パケット74及び75を遅延のない状態に保ちながら、チャネルCH1での遅延状態を終了して元のタイミングに戻すことができる。
以上、図9乃至図13に示される例を用いて説明したようにして、遅延交換処理部31は2つのチャネル間におけるパケット末尾同士の重複を解消する処理を実行する。これらの処理は、パケットに同期するコマンドを用いて論理回路によりパケットデータの遅延及びチャネル間の交換を制御することにより実現することができる。
図14は、パケットに同期するコマンドの一例を示す図である。チャネルCH0のパケットに同期してコマンドCmd0が供給され、チャネルCH1のパケットに同期してコマンドCmd1が供給される。図14に示すパケット及びコマンドの時間変化は、図13(a)に示されるパケットの時間変化に対応する。
コマンド「ST」は複数サイクル長パケットの先頭サイクル(第1サイクル)を示す。コマンド「MID」は複数サイクル長パケットの中間サイクル(第2サイクルから末尾サイクルの1つ前のサイクル迄)を示す。コマンド「END」は複数サイクル長パケットの末尾サイクルを示す。コマンド「1CY」は1サイクル長パケットが配置されたサイクルを示す。これらのコマンドが、TLPやDLLP等のパケットに同期して物理層ユニット21からデータリンク層ユニット22に供給されてよい。具体的には、物理層ユニット21が、2つのチャネルにパケットを配置する際にこれらのコマンドを生成し、各チャネルにおいてパケットデータに同期してコマンドを送信してよい。即ち、チャネルCH0に同期してコマンドCmd0が送信され、チャネルCH1に同期してコマンドCmd1が送信される。
図15は、遅延交換処理部31の処理を実行する論理回路の第1の部分を示す図である。図15に示す論理回路は、デコーダ81、デコーダ82、AND回路83、AND回路84、一方の入力が負論理のAND回路85、及び一方の入力が負論理のAND回路86を含む。デコーダ81は、第1のチャネルCH0の状態を示すコマンドCmd0をデコードし、デコード結果に一致する一本の出力信号線をハイにする。例えば、コマンドCmd0が複数サイクル長パケットの末尾サイクルを示す「END」である場合、デコーダ81は「END」に対応する出力信号線をハイに設定し、その他の出力信号線をローに設定する。同様に、デコーダ82は、第2のチャネルCH1の状態を示すコマンドCmd1をデコードし、デコード結果に一致する一本の出力信号線をハイにする。
AND回路83は、現在のサイクルにおいてチャネルCH0が1サイクルパケットであり且つチャネルCH1がパケット末尾である場合に、出力set_delay0をハイに設定する。それ以外の場合は出力はローに設定される。AND回路84は、現在のサイクルにおいてチャネルCH0がパケット末尾であり且つチャネルCH1が1サイクルパケットである場合に、出力set_delay1をハイに設定する。それ以外の場合は出力はローに設定される。これらの出力set_delay0及びset_delay1が、それぞれチャネルCH0及びCH1において、遅延状態を設定(開始)するために用いられる。
一方の入力が負論理のAND回路85は、チャネルCH0が1サイクルパケットであり且つチャネルCH1がパケット末尾であるサイクルにおいてローであり、それ以外でコマンドCmd0に等しいCmd_mod0を生成する。一方の入力が負論理のAND回路86は、チャネルCH0がパケット末尾であり且つチャネルCH1が1サイクルパケットであるサイクルにおいてローであり、それ以外でコマンドCmd1に等しいCmd_mod1を生成する。
図16は、遅延交換処理部31の処理を実行する論理回路の第2の部分を示す図である。図15に示す論理回路は、Dフリップフロップ87-0、87-1、88-0、及び88-1を含む。各Dフリップフロップは、チャネルCH0及びCH1が同期しているクロック信号に同期して入力データを取り込む。
これにより、Dフリップフロップ87-0及び87-1は、コマンドCmd0及びCmd1をそれぞれ1クロック遅延させる。1クロック遅延されたコマンドはコマンドCmd0_t1及びCmd1_t1と表記される。またDフリップフロップ88-0及び88-1は、チャネルCH0のトランザクションレイヤーパケットTLP0及びチャネルCH1のトランザクションレイヤーパケットTLP1をそれぞれ1クロック遅延させる。1クロック遅延されたそれぞれのパケットはTLP0_t1及びTLP1_t1と表記される。後述するように、所定条件が満たされたときにTLP0及びTLP1をそれぞれTLP0_t1及びTLP1_t1で置き換えることにより、1クロック遅れた遅延状態を設定することができる。
図17は、遅延交換処理部31の処理を実行する論理回路の第3の部分を示す図である。図17に示す論理回路は、デコーダ81及び82、負論理入力AND回路90、OR回路91及び92、Dフリップフロップ93、一方の入力が負論理のAND回路94、OR回路95及び96、Dフリップフロップ97、及び一方の入力が負論理のAND回路98を含む。
デコーダ81の出力「valid」は、図15に示される4つの出力ST,MID,END,及び1CYのOR演算に相当する。デコーダ82の出力「valid」は、図15に示される4つの出力ST,MID,END,及び1CYのOR演算に相当する。従って負論理入力AND回路90(即ちNOR回路)は、デコーダ81の4つの出力信号及びデコーダ82の4つの出力信号の全てがローのときにハイになる出力を生成する。前述のように、遅延交換処理部31は、チャネルが遅延している状態において、入力側のいずれのチャネルにもパケットが存在しないサイクルが発生すると、チャネルの遅延状態を終了する。負論理入力AND回路90の出力は、この「いずれのチャネルにもパケットが存在しないサイクル」を検出した検出信号である。
図15に示した遅延設定信号set_delay0があるサイクルでハイになると、次のクロックサイクルから、Dフリップフロップ93の出力である遅延状態信号delay0がハイとなる。遅延状態信号delay0のハイ状態はDフリップフロップ93がリセットされるまで継続する。このリセットが起こり遅延状態が終了するための1つの条件は、負論理入力AND回路90の出力がハイになること、即ち「いずれのチャネルにもパケットが存在しないサイクル」が発生したことである。
同様に、図15に示した遅延設定信号set_delay1があるサイクルでハイになると、次のクロックサイクルから、Dフリップフロップ97の出力である遅延状態信号delay1がハイとなる。遅延状態信号delay1のハイ状態はDフリップフロップ97がリセットされるまで継続する。このリセットが起こり遅延状態が終了するための1つの条件は、負論理入力AND回路90の出力がハイになること、即ち「いずれのチャネルにもパケットが存在しないサイクル」が発生したことである。
図18は、遅延交換処理部31の処理を実行する論理回路の第4の部分を示す図である。図18に示す論理回路は、デコーダ81及び82、一方の入力が負論理のAND回路100及び101、OR回路102及び103、Dフリップフロップ104、及び一方の入力が負論理のAND回路105を含む。この論理回路は更に、デコーダ106、AND回路107、デコーダ106、及びAND回路107を含む。
デコーダ106は、第1のチャネルCH0における1サイクル遅れたコマンドCmd0_t1をデコードし、デコード結果を出力する。AND回路107は、チャネルCH0におけるコマンドCmd0のデコード結果STと、チャネルCH0における1サイクル遅れたコマンドCmd0_t1のデコード結果ENDと、チャネルCH0における遅延状態信号delay0とのANDを演算する。このAND回路107の出力は、遅延状態にあるチャネルCH0において複数サイクル長であるパケットの末尾と複数サイクル長であるパケットの先頭とが連続するとハイになり、チャネル間データ交換を設定する信号set_crossline0をハイにする。またその次のクロックサイクルにおいて、チャネル間データ交換状態であることを示す信号crosslineがハイになる。
デコーダ108は、第2のチャネルCH1における1サイクル遅れたコマンドCmd1_t1をデコードし、デコード結果を出力する。AND回路109は、チャネルCH1におけるコマンドCmd1のデコード結果STと、チャネルCH1における1サイクル遅れたコマンドCmd1_t1のデコード結果ENDと、チャネルCH1における遅延状態信号delay1とのANDを演算する。このAND回路109の出力は、遅延状態にあるチャネルCH1において複数サイクル長であるパケットの末尾と複数サイクル長であるパケットの先頭とが連続するとハイになり、チャネル間データ交換を設定する信号set_crossline1をハイにする。またその次のクロックサイクルにおいて、チャネル間データ交換状態であることを示す信号crosslineがハイになる。
一方の入力が負論理のAND回路100の出力は、第1のチャネルCH0において複数サイクル長であるパケットの末尾が検出されたサイクルで、第2のチャネルCH1において複数サイクル長であるパケットの先頭が検出されていない場合、ハイに設定される。同様に一方の入力が負論理のAND回路101の出力は、第2のチャネルCH1において複数サイクル長であるパケットの末尾が検出されたサイクルで、第1のチャネルCH0において複数サイクル長であるパケットの先頭が検出されていない場合、ハイに設定される。これらのAND回路100又は101の出力のハイ設定により、データ交換リセット信号reset_crosslineがハイになり、チャネル間データ交換状態であることを示す信号crosslineがリセットされる。即ち、複数チャネル長パケットの末尾と複数サイクル長パケットの先頭とが入力側でチャネル間において重複していないとき、チャネル間データ交換状態は終了される。
なおチャネル間データ交換を設定する信号set_crossline0は、図17に示されるOR回路91の一方の入力に印加される。これにより、遅延状態にあるチャネルCH0において複数サイクル長パケットの末尾と複数サイクル長パケットの先頭とが連続すると、チャネルCH0の遅延状態を終了する遅延状態リセット信号reset_delay0がハイに設定される。遅延状態リセット信号reset_delay0のハイへの設定に応じて、チャネルCH0の遅延状態が終了される。
同様に、チャネル間データ交換を設定する信号set_crossline1は、図17に示されるOR回路95の一方の入力に印加される。これにより、遅延状態にあるチャネルCH1において複数サイクル長パケットの末尾と複数サイクル長パケットの先頭とが連続すると、チャネルCH1の遅延状態を終了する遅延状態リセット信号reset_delay1がハイに設定される。遅延状態リセット信号reset_delay1のハイへの設定に応じて、チャネルCH1の遅延状態が終了される。
図19は、遅延交換処理部31の処理を実行する論理回路の第5の部分を示す図である。図19に示す論理回路は、セレクタ回路110乃至115を含む。
セレクタ回路110は、遅延状態信号delay0がローであるときに遅延のないパケットTLP0を選択し、遅延状態信号delay0がハイであるときに1サイクル遅延したパケットTLP0_t1を選択し、選択したパケットを出力する。同様に、セレクタ回路113は、遅延状態信号delay1がローであるときに遅延のないパケットTLP1を選択し、遅延状態信号delay1がハイであるときに1サイクル遅延したパケットTLP1_t1を選択し、選択したパケットを出力する。このようにセレクタ回路110及び113を制御することにより、遅延交換処理部31によるチャネルCH0及びCH1に対する遅延動作が実行される。
セレクタ回路111及び112にそれぞれ印加される選択制御信号であるデータ交換設定信号set_crossline1及びデータ交換状態信号crosslineは、チャネル間でデータ交換する期間において一方のみがハイになる。具体的には、チャネル間データ交換を開始(設定)するサイクルでのみset_crossline1がハイになり、その後のサイクルにおいてはcrosslineがハイに維持される。これらの信号がハイである期間において、セレクタ回路111及び112が、チャネルCH0側ではなくチャネルCH1側のパケットを選択し、選択したパケットを出力する。これにより、出力TLP_out0は、チャネル間でのデータ交換が行われたパケットとなる。
セレクタ回路114及び115にそれぞれ印加される選択制御信号であるデータ交換設定信号set_crossline0及びデータ交換状態信号crosslineは、チャネル間でデータ交換する期間において一方のみがハイになる。具体的には、チャネル間データ交換を開始(設定)するサイクルでのみset_crossline0がハイになり、その後のサイクルにおいてはcrosslineがハイに維持される。これらの信号がハイである期間において、セレクタ回路114及び115が、チャネルCH1側ではなくチャネルCH0側のパケットを選択し、選択したパケットを出力する。これにより、出力TLP_out1は、チャネル間でのデータ交換が行われたパケットとなる。
図20は、遅延交換処理部31の処理を実行する論理回路の第6の部分を示す図である。図20に示す論理回路は、セレクタ回路120乃至125を含む。図20に示す回路の構成及び印加されるセレクタ制御信号は、図19に示される回路の構成及び印加されるセレクタ制御信号と同一であり、各セレクタ回路に入力される選択対象の信号がパケットではなくコマンドである点のみが異なる。図20に示す論理回路は図19に示す論理回路と同様に動作し、セレクタ回路120乃至125により、各チャネルにおけるコマンドの遅延、及びチャネル間でのコマンドの交換が適宜実行される。
図21は、図15乃至図20に示される各信号の状態の変化を示すタイミングチャートである。チャネルCH0及びCH1におけるコマンドの時間変化が、コマンドCmd0及びCmd1として図21の最上段に示される。このコマンドCmd0及びCmd1に示されるコマンドが与えられたときに、図15乃至図20に示される回路の各信号部分が変化する様子が、図21の他の部分に示される。
例えばサイクルT11において、チャネルCH1における複数サイクル長であるパケットの末尾(コマンドCmd1の「END」)とチャネルCH0における1サイクル長であるパケットの末尾(コマンドCmd0の「1CY」)とが重複している。その結果、遅延設定信号set_delay0がこのサイクルT11においてハイになる(図21において線の入っている区間が信号値がハイであるサイクルを示す)。この遅延設定信号set_delay0のハイ設定に応じて、遅延状態信号delay0がその後の暫くの期間(この例では4サイクルの期間)においてハイを維持する。この期間、コマンドCmd_out0に示されるように、チャネルCH0のコマンドが1サイクルだけ遅延される。
またサイクルT12において、複数サイクル長であるパケットの末尾(Cmd0の「END」)と複数サイクル長であるパケットの先頭(Cmd0の「ST」)とが入力側で連続している。その結果、このサイクルT12において、遅延状態リセット信号reset_delay0がハイになり、それに応じて遅延状態信号delay0のハイ状態が終了する。またこのサイクルT12において、データ交換設定信号set_crossline0がハイになり、それに応じてその後の暫くの期間(この例では3サイクルの期間)においてデータ交換状態信号crosslineがハイを維持する。この期間、コマンドCmd_out0及びCmd_out1に示されるように、チャネル間で交換されたコマンドが出力される。
更にサイクルT13において、複数サイクル長パケットの末尾(Cmd1の「END」)が複数サイクル長パケットの先頭と入力側で重複していない。その結果、このサイクルT13において、データ交換リセット信号reset_crosslineがハイになり、データ交換状態信号crosslineがリセットされる。これにより、チャネル間でのデータ交換状態が終了される。
以上説明したように、図15乃至図21に示されるデコーダ、論理回路、遅延回路、及びセレクタ回路を用い、パケットに同期するコマンドに基づき動作する論理回路を実現することにより、パケットデータの遅延及びチャネル間の交換を制御することができる。これにより、簡潔な構成で、効率的且つ高速に、遅延交換処理を実現することが可能となる。
図22は、遅延交換処理部31による遅延交換動作の処理の流れを示すフローチャートである。図22において、フローチャートに記載された各ステップの実行順序は一例にすぎず、本願の意図する技術範囲が、記載された実行順番に限定されるものではない。例えば、Aステップの次にBステップが実行されるように本願に説明されていたとしても、Aステップの次にBステップを実行することが可能なだけでなく、Bステップの次にAステップを実行することが、物理的且つ論理的に可能である場合がある。この場合、どちらの順番でステップを実行しても、当該フローチャートの処理に影響する全ての結果が同一であるならば、本願に開示の技術の目的のためには、Bステップの次にAステップが実行されてもよいことは自明である。Aステップの次にBステップが実行されるように本願に説明されていたとしても、上記のような自明な場合を本願の意図する技術範囲から除外することを意図するものではなく、そのような自明な場合は、当然に本願の意図する技術範囲内に属する。
ステップS1で、遅延交換処理部31は、複数サイクル長であるパケットの末尾と1サイクルパケットとを同時に受信したか否かを判定する。判定結果がNOの場合、遅延交換処理部31は図22に示す手順の処理を終了する。判定結果がYESの場合、処理はステップS2に進む。
ステップS2で、遅延交換処理部31は、上記の1サイクルパケットが発生した側のチャネルにおいて遅延を開始する。ステップS3で、遅延交換処理部31は、上記の1サイクルパケットが発生したサイクルCYL1において、1サイクルパケットが発生した側のチャネルのコマンド出力を抑止する。ステップS4で、遅延交換処理部31は、サイクルCYL1の次のサイクルから、1サイクルパケットが発生した側のチャネルにおいて1サイクル遅延された信号(コマンド及びパケット)を選択する。
ステップS5で、遅延交換処理部31は、両方のチャネルにパケットの存在しないサイクルが発生したか否かを判定する。判定結果がYESの場合、遅延交換処理部31はステップS6において遅延状態を終了させ、その後図22に示す手順の処理を終了する。判定結果がNOの場合、処理はステップS7に進む。
ステップS7で、遅延交換処理部31は、遅延設定されているチャネルにおいて複数サイクル長であるパケットの先頭を受信したか否かを判定する。判定結果がNOの場合、遅延交換処理部31はステップS5に戻り以降の処理を継続する。判定結果がYESの場合、処理はステップS8に進む。
ステップS8で、遅延交換処理部31は、遅延が設定されているチャネルにおいて、上記複数サイクル長であるパケットの先頭を受信したサイクルCYL2で遅延状態を終了させる。ステップS9で、遅延交換処理部31は、サイクルCYL2において、チャネル間でのデータ交換を設定する信号をアサートする。ステップS10で、遅延交換処理部31は、上記複数サイクル長であるパケットの先頭を、サイクルCYL2において、遅延が設定されていたチャネルとは反対側のチャネルから出力する。ステップS10で、遅延交換処理部31は、サイクルCYL2の次のサイクルから、チャネル間におけるデータ交換状態を維持する。
ステップS12で、遅延交換処理部31は、複数サイクル長であるパケットの単独末尾を受信したか否かを判定する。判定結果がNOの場合、遅延交換処理部31はステップS5に戻り以降の処理を継続する。判定結果がYESの場合、処理はステップS13に進む。ステップS13で、遅延交換処理部31は、チャネル間データ交換状態を終了させる。以上で、遅延交換処理部31によるパケットの遅延交換を制御する手順を終了する。
以上、本発明を実施例に基づいて説明したが、本発明は上記実施例に限定されるものではなく、特許請求の範囲に記載の範囲内で様々な変形が可能である。
例えば上記実施例の説明では、PCTeを例に用いて説明したが、前述と同様の問題が発生するパケット受信システムであれば、本願の構成を適用することが可能である。即ち、2チャネル間において先行パケットの末尾と後続の1サイクルパケットの末尾とが同一のサイクルで重複する状態を解消することが望まれる状況であれば、上記の実施例で説明した遅延交換処理を適用することができる。