以下、図面を用いて実施形態を説明する。
図1は、データ送受信システム、データ送信装置およびデータ送受信システムの制御方法の一実施形態を示す。図1に示すデータ送受信システムSYS0は、データDTを送信するデータ送信装置TRSと、データ送信装置TRSから送信されるデータDTを受信するデータ受信装置RSVとを有する。
データ受信装置RSVは、データ送信装置TRSから受信したデータDTを保持するバッファ部BUFを有する。バッファ部BUFは、データ生成部DGEN1、DGEN2がそれぞれ生成するデータを保持する。また、データ受信装置RSVは、バッファ部BUFが保持するデータDTの保持量の減少を示す減少情報DECをデータ送信装置TRSに送信するバッファ管理部RCNTを有する。
データ送信装置TRSは、データ生成部DGEN1、DGEN2、調停部ARBおよび調停管理部ARBCNTを有する。各データ生成部DGEN1、DGEN2は、データDT1、DT2をそれぞれ生成し、生成したデータDT1、DT2を調停部ARBに出力する。
調停部ARBは、抑止情報STOPを受信していない期間中、データ生成部DGEN1、DGEN2からのデータDT1、DT2またはデータ生成部DGEN0からのデータDT0のいずれかを選択し、選択したデータDTをデータ受信装置RSVに出力する。調停部ARBは、抑止情報STOPを受信している期間、データ生成部DGEN1、DGEN2からのデータDT1、DT2の選択を抑止し、データ生成部DGEN0からのデータDT0を選択し、選択したデータDTをデータ受信装置RSVに出力する。なお、図1では、データ生成部DGEN0は、データ送信装置TRSの外部に設けられるが、データ送信装置TRSの内部に設けられてもよい。
調停管理部ARBCNTは、減少情報DECに基づき、バッファ部BUFが新たなデータDTを保持する余裕がない状態から、調停部ARBにより選択されるデータ生成部DGEN1、DGEN2からの複数のデータを保持可能な状態になったことを判定する。そして、調停管理部ARBCNTは、データ生成部DGEN1、DGEN2からの複数のデータDT1、DT2を保持可能な状態になった場合、抑止情報STOPの出力を停止する。抑止情報STOPの出力の停止により、調停部ARBは、データ生成部DGEN1、DGEN2からのデータDT1、DT2とデータ生成部DGEN0からのデータDT0とを調停する動作を再開する。
バッファ部BUFが複数のデータDT1、DT2を保持可能な状態になったことに基づいて、抑止情報STOPの出力を解除することで、データDT1、DT2のいずれかが調停部ARBにより選択されない状態が続くことを抑止することができる。これに対して、バッファ部BUFが1つのデータDT1(またはDT2)を保持可能な状態になったことに基づいて、抑止情報STOPの出力を解除する場合、以下の問題が発生する。すなわち、調停部ARBがデータ生成部DGEN1からのデータDT1を順次に選択し、抑止情報STOPの出力と出力の停止とが繰り返される場合、データDT2が選択されない状態が続くおそれがある。これにより、データ生成部DGEN2が生成するデータがデータ受信装置RSVに送信されない、いわゆるライブロック状態が発生する。
図2は、データ送受信システム、データ送信装置およびデータ送受信システムの制御方法の別の実施形態を示す。図2に示すデータ送受信システムSYSは、複数のCPU(CPU0、CPU1;Central Processing Unit)を有する。CPU0、CPU1は、互いに同一または同様の構成を有し、クレジット制御部CRCNTは、減少情報DEC3に基づき、パケットPKTを送信する機能と、パケットPKTを受信する機能を有する。なお、CPU0、CPU1は、互いに異なる構成を有してもよい。パケットPKTは、CPU0、CPU1間で送受信されるデータの一例である。各CPUが他の複数のCPUとの間でパケットPKTを送受信する場合、各CPUは、CPU間をつなぐネットワークであるインタコネクトを介して互いに接続されてもよい。CPU0は、データを送信するデータ送信装置の一例であり、CPU1は、データ送信装置から送信されるデータを受信するデータ受信装置の一例である。
図2では、説明を分かりやすくするために、パケットPKTを送信する主要な要素がCPU0に記載され、パケットPKTを受信する主要な要素がCPU1に記載される。パケットPKTの伝送は、CPU1からCPU0へも可能であり、CPU1は、図2に示すCPU0の要素を有し、CPU0は、図2に示すCPU1の要素を有する。
図2では、CPU0とCPU1とが、パケットPKTの伝送線とリリース情報RLSの伝送線とで直接接続されているが、CPU0、CPU1が共通の基板に搭載される場合、CPU0とCPU1とは、基板上の配線を介して互いに接続される。また、CPU0、CPU1が、互いに異なる基板に搭載される場合、CPU0とCPU1とは、基板上の配線および基板間を接続するケーブル等を介して互いに接続される。
CPU0は、複数の仮想チャネルVC(VC0、VC1、VC2、VC3)と、各仮想チャネルVCに対応する送信制御部TCNT(TCNT0、TCNT1、TCNT2、TCNT3)を有する。複数の仮想チャネルVCは、要求パケットおよび応答パケットなど、パケットPKTの種別に対応して設けられてもよく、CPU0が有する機能ブロックに対応して設けられてもよい。仮想チャネルVCの数は、2以上であればよく、4つに限定されない。
仮想チャネルVC0−VC3は、互いに同一または同様の構成を有するため、図2では、仮想チャネルVC3の構成が示され、仮想チャネルVC0−VC2の構成は省略される。同様に、送信制御部TCNT0−TCNT3は、互いに同一または同様の構成を有するため、図2では、送信制御部TCNT3の構成が示され、送信制御部TCNT0−TCNT2の構成は省略される。以下で説明する仮想チャネルVC3と送信制御部TCNT3とによる動作は、仮想チャネルVC0と送信制御部TCNT0、仮想チャネルVC1と送信制御部TCNT1、仮想チャネルVC2と送信制御部TCNT2とによっても実現される。そして、仮想チャネルVC0と送信制御部TCNT0、仮想チャネルVC1と送信制御部TCNT1、仮想チャネルVC2と送信制御部TCNT2とは、以下で説明する仮想チャネルVC3と送信制御部TCNT3による効果と、同様の効果を得ることができる。
CPU1は、CPU0からのパケットPKTを受信し、受信したパケットPKTを処理する受信制御部RCNTを有する。受信制御部RCNTは、仮想チャネルVC0、VC1、VC2、VC3のそれぞれに対応するバッファ部BUF0、BUF1、BUF2、BUF3を含む受信バッファBUFを有する。なお、受信バッファBUFは、受信制御部RCNTの外部に配置されてもよい。
受信制御部RCNTは、CPU0から受信したパケットPKTを、仮想チャネルVC毎にバッファ部BUF0−BUF3に格納する。図2に示す例では、バッファ部BUF0−BUF3の記憶容量は、矩形の大きさで示されており、互いに異なる。しかし、バッファ部BUF0−BUF3の記憶容量は、互いに同じでもよい。各バッファBUF0−BUF3が保持するパケットPKTの容量は、クレジットとも称され、CPU0は、各バッファBUF0−BUF3が保持するパケットPKTのクレジット量が、上限値を超えないように、パケットPKTをCPU1に送信する。
仮想チャネルVC0から出力されたパケットPKTは、バッファ部BUF0に保持され、仮想チャネルVC1から出力されたパケットPKTは、バッファ部BUF1に保持される。仮想チャネルVC2から出力されたパケットPKTは、バッファ部BUF2に保持され、仮想チャネルVC3から出力されたパケットPKTは、バッファ部BUF3に保持される。各バッファ部BUF0−BUF3は、FIFO(First-In First-Out)バッファでもよく、他のバッファでもよい。パケットPKTを保持している容量であるバッファBUFの保持量は、CPU0からのパケットPKTの受信により増加する。また、各バッファ部BUF0−BUF3の保持量は、各バッファ部BUF0−BUF3の出力に接続された回路へのパケットPKTの転送により減少する。
受信制御部RCNTは、各バッファ部BUF0−BUF3に格納したパケットPKTを後段の回路に転送した後、転送したパケットPKTを各バッファ部BUF0−BUF3から削除する。なお、バッファ部BUF0−BUF3からのパケットPKTの削除は、バッファ部BUFに接続された回路により実行されてもよい。受信制御部RCNTは、削除したパケットPKTのサイズ(削除したクレジット量)を示すリリース情報RLSをCPU0に送信する。リリース情報RLSは、バッファ部BUF0−BUF3毎に削除したパケットPKTのサイズを示す減少情報DEC(DEC0、DEC1、DEC2、DEC3)を含む。受信制御部RCNTは、バッファ部BUF0−BUF3から削除されるパケットPKTのサイズを示す減少情報DECをCPU0に送信するバッファ管理部の一例である。
減少情報DEC0は、仮想チャネルVC0に対応するバッファ部BUF0に保持されたパケットPKTの減少量を示し、減少情報DEC1は、仮想チャネルVC1に対応するバッファ部BUF1に保持されたパケットPKTの減少量を示す。減少情報DEC2は、仮想チャネルVC2に対応するバッファ部BUF2に保持されたパケットPKTの減少量を示し、減少情報DEC3は、仮想チャネルVC3に対応するバッファ部BUF3に保持されたパケットPKTの減少量を示す。
CPU0において、仮想チャネルVC3は、CPU1に送信するパケットPKTを生成し、生成したパケットPKTを調停部ARBに出力する複数のパケット送信部PT(PT1、PT2、PT3、PT4、PT5、PT6、PT7、PT8、PT9)を有する。パケット送信部PTは、パケットPKTを生成するデータ生成部の一例である。送信制御部TCNT3は、複数の調停部ARB(ARB1、ARB2、ARB3)、各調停部ARBの出力に接続されるフリップフロップFF(FF1、FF2、FF3)およびクレジット制御部CRCNTを有する。仮想チャネルVC3が有するパケット送信部PTの数は、調停部ARB毎に1以上あればよく、9個に限定されない。
送信制御部TCNT0−TCNT3に配置される調停部ARBは、フリップフロップFFを介して直列に接続される。送信制御部TCNT0の調停部ARBは、仮想チャネルVC0から出力されるパケットPKTを調停し、調停により選択したパケットPKTを送信制御部TCNT1に出力する。送信制御部TCNT1の調停部ARBは、仮想チャネルVC1から出力されるパケットPKTと、送信制御部TCNT0から出力されるパケットPKTとを調停し、調停により選択したパケットPKTを送信制御部TCNT2に出力する。
送信制御部TCNT2の調停部ARBは、仮想チャネルVC2から出力されるパケットPKTと、送信制御部TCNT1から出力されるパケットPKTとを調停し、調停により選択したパケットPKTを送信制御部TCNT3に出力する。送信制御部TCNT3の調停部ARB(ARB1−ARB3)は、仮想チャネルVC3から出力されるパケットPKTと、送信制御部TCNT2から出力されるパケットPKTとを調停し、調停により選択したパケットPKTをCPU1に送信する。
このように、仮想チャネルVC0−VC3が生成したパケットPKTは、各送信制御部TCNT0−TCNT3の調停部ARBにより順次に調停され、最終段である調停部ARB3が選択したパケットPKTが、伝送路を介してCPU1に送信される。これにより、1つの伝送路を用いて複数の仮想チャネルVC0−VC3が生成するパケットPKTをCPU0に送信することができる。換言すれば、複数の仮想チャネルVC0−VC3をCPU0内に搭載することができる。
送信制御部TCNT3において、各調停部ARB1−ARB3は、クレジット制御部CRCNTからビジー情報BUSYを受けている期間、仮想チャネルVC3からのパケットPKTの選択を抑止する。すなわち、各調停部ARB1−ARB3は、ビジー情報BUSYを受けている期間、仮想チャネルVC3からのパケットPKTを調停に参加させず、送信制御部TCNT0−TCNT2からのパケットPKTを選択する。調停動作の抑止により、バッファ部BUF3の保持量がオーバーフローすることを抑止することができる。また、調停動作の抑止により、図6−図8に示すように、パケット送信部PT1−PT9が生成するパケットPKTのいずれかが、調停部ARB1−ARB3により選択されない状態が続くことを回避することができる。ビジー情報BUSYは、各調停部ARB1−ARB3による仮想チャネルVC3からのパケットPKTの選択を抑止する抑止情報の一例である。
各調停部ARB1−ARB3は、クレジット制御部CRCNTからビジー情報BUSYを受けていない期間、仮想チャネルVC3からのパケットPKTと、送信制御部TCNT0−TCNT2からのパケットPKTとを調停する調停動作を実行する。クレジット制御部CRCNTは、ビジー情報BUSYを1ビットのビジー信号として各調停部ARB1−ARB3に出力してもよい。この場合、各調停部ARB1−ARB3は、ビジー信号が第1の論理の場合に調停動作を実行し、ビジー信号が第1の論理と反対の第2の論理の場合に仮想チャネルVC3からのパケットPKTの選択を抑止する。
調停部ARB1は、ビジー情報BUSYを受けていない場合、パケット送信部PT1、PT2、PT3からのパケットPKTと、前段の調停部ARB(送信制御部TCNT2の最終段の調停部ARB)で選択されたパケットPKTとを調停する。そして、調停部ARB1は、調停により選択したパケットPKTに含まれるヘッダ部をフリップフロップFF1に出力する。また、調停部ARB1は、調停により選択したパケットPKTがパケット送信部PT1、PT2、PT3からのパケットPKTである場合、パケットPKTのサイズ(クレジット)を示す増加情報INC1をクレジット制御部CRCNTに出力する。調停部ARB1は、ビジー情報BUSYを受けている間、パケット送信部PT1、PT2、PT3からのパケットPKTの調停動作を停止する。
パケットPKTは、ヘッダ部、データ部およびエンド部を含む。調停部ARB1は、フリップフロップFF1が保持したパケットPKTを次段以降の調停部ARB2、ARB3が選択した場合、ヘッダ部に続くデータ部およびエンド部をフリップフロップFF1に順次に出力する。
調停部ARB2は、ビジー情報BUSYを受けていない場合、パケット送信部PT4、PT5、PT6からのパケットPKTと、前段の調停部ARB1で選択されたパケットPKTとを調停する。調停部ARB2は、調停により選択したパケットPKTがパケット送信部PT4、PT5、PT6からのパケットPKTである場合、パケットPKTのサイズ(クレジット)を示す増加情報INC2をクレジット制御部CRCNTに出力する。調停部ARB2は、ビジー情報BUSYを受けている間、パケット送信部PT4、PT5、PT6からのパケットPKTの調停動作を停止する。調停部ARB2のその他の機能は、調停部ARB1と同様である。
調停部ARB3は、ビジー情報BUSYを受けていない場合、パケット送信部PT7、PT8、PT9からのパケットPKTと、前段の調停部ARB2で選択されたパケットPKTとを調停する。調停部ARB3での調停により選択されたパケットPKTは、フリップフロップFF3を介してCPU1に送信される。調停部ARB2は、調停により選択したパケットPKTがパケット送信部PT7、PT8、PT9からのパケットPKTである場合、パケットPKTのサイズ(クレジット)を示す増加情報INC3をクレジット制御部CRCNTに出力する。調停部ARB3は、ビジー情報BUSYを受けている間、パケット送信部PT7、PT8、PT9からのパケットPKTの調停動作を停止する。調停部ARB3のその他の機能は、調停部ARB0と同様である。
クレジット制御部CRCNTは、バッファ部BUF3が保持するパケットPKTの保持量を示すカウンタCOUNTを有する。カウンタCOUNTのカウンタ値は、増加情報INC1−INC3に基づいて、増加情報INC1−INC3が示すパケットPKTのサイズ分増加し、減少情報DEC3に基づいて、減少情報DEC3が示すパケットPKTのサイズ分減少する。図2において、カウンタCOUNT内の網掛けの領域は、カウンタ値を視覚的に表している。図2のカウンタCOUNTは、バッファ部BUF3に保持されたパケットPKTの保持量が、バッファ部BUF3の記憶容量の70%であることを示している。なお、クレジット制御部CRCNTは、カウンタCOUNTの代わりに、バッファ部BUF3が保持しているパケットPKTの保持量が格納されるレジスタを有してよい。
クレジット制御部CRCNTは、バッファ部BUFに新たなデータを保持する余裕がない場合、ビジー情報BUSYを出力する調停管理部の一例である。また、クレジット制御部CRCNTは、調停部ARB1−ARB3により選択されるパケット送信部PT1−PT9からの複数のパケットPKTを保持可能な状態になった場合、ビジー情報BUSYの出力を停止する調停管理部の一例である。カウンタCOUNTおよびレジスタは、バッファ部BUF3が保持するパケットPKTの保持量を示す保持量情報を記憶する保持量記憶部の一例である。カウンタCOUNTのカウンタ値およびレジスタに設定される値は、バッファ部BUF3が保持するデータの保持量を示す保持量情報の一例である。
クレジット制御部CRCNTは、カウンタCOUNTのカウンタ値が上限値(図3に示すCMAX)になった場合、ビジー情報BUSYを出力する。すなわち、クレジット制御部CRCNTは、バッファ部BUF3が新たなパケットPKTを保持する余裕がないことをカウンタ値が示す場合、ビジー情報BUSYを出力する。
一方、クレジット制御部CRCNTは、式(1)を満足する場合、ビジー情報BUSYの出力を停止する。すなわち、クレジット制御部CRCNTは、調停部ARB1−ARB3のそれぞれが選択する3つのパケットPKTをバッファ部BUF3が保持可能なことをカウンタ値が示す場合、ビジー情報BUSYの出力を停止する。
CV≦CMAX−(PMAX×n) …… (1)
式(1)において、符号CVは、カウンタCOUNTのカウンタ値を示し、符号CMAXは、カウンタCOUNTの上限値(バッファ部BUF3が保持可能な最大のクレジット量)を示す。符号PMAXは、パケットPKTの最大長を示し、符号nは、調停部ARB1−ARB3の数(図2では、n=3)を示す。カウンタCOUNTの上限値CMAXは、ビジー情報BUSYの出力を決定する第1の閾値の一例である。なお、パケットPKTの最大長は、図6等で説明するように、パケットPKTの転送サイクルを示す。
式(1)に示すように、クレジット制御部CRCNTは、カウンタCOUNTのカウンタ値CVが、上限値CMAXからパケットPKTの最大長PMAXと調停部ARBの数との積を減じた値以下になった場合、ビジー情報BUSYの出力を停止する。このように、ビジー情報BUSYが出力されるカウンタ値と、ビジー情報BUSYの出力が停止されるカウンタ値とは、互いに異なり、カウンタ値の差は、調停部ARBの数とパケット長に応じて決まる。
図3は、図2に示す送信制御部TCNT3と受信制御部RCNTとの動作の例を示す。カウンタCOUNTの網掛けの領域は、増加情報INC1、INC2、INC3および減少情報DEC3に基づいて増減するカウンタ値を視覚的に示す。バッファ部BUF3の網掛けの領域は、送信制御部TCNT3から受信したパケットPKTが保持されていることを視覚的に示す。図3において、ビジー情報BUSYを示す破線は、クレジット制御部CRCNTがビジー情報BUSYを出力せず、調停部ARB1−ARB3がパケット送信部PT1−PT9からのパケットPKTの調停動作を実行可能な期間を示す。ビジー情報BUSYを示す白抜きの矢印は、クレジット制御部CRCNTがビジー情報BUSYを出力し、調停部ARB1−ARB3がパケット送信部PT1−PT9からのパケットPKTの調停動作を停止する期間を示す。
図3は、CPU0からCPU1に送信されるパケットPKTのサイズ(すなわち、パケット長)が互いに等しい場合の動作を示す。バッファ部BUF3は、サイズが互いに等しいパケットPKTを5つまで保持可能であるとし、カウンタCOUNTは、バッファ部BUF3が保持可能なパケットPKTの総量に対応する値をカウント可能であるとする。なお、パケットPKTのサイズが可変である場合の例は、図4に示される。
まず、バッファ部BUF3にパケットPKTが2つ保持された状態で、調停部ARB1は、パケット送信部PT1−PT3のいずれかから出力されたパケットPKTのヘッダ部を調停により選択する。調停部ARB1は、増加情報INC1をクレジット制御部CRCNTに出力し、選択したヘッダ部をフリップフロップFF1に保持させる(図3(a))。カウンタCOUNTのカウンタ値は、増加情報INC1に基づいて、パケットPKTのサイズ分増加される(図3(b))。
この後、調停部ARB1が選択したパケットPKTは、調停部ARB2、ARB3により順次に調停され、CPU1の受信制御部RCNTに送信される(図3(c))。受信制御部RCNTは、受信したパケットPKTを、仮想チャネルVC3に対応するバッファ部BUF3に保持する(図3(d))。このように、カウンタCOUNTのカウンタ値は、バッファ部BUF3に保持されるパケットPKTの保持量が増加する前に、増加情報INC1(または、INC2、INC3)に基づいて増加する。
次に、調停部ARB2は、パケット送信部PT4−PT6のいずれかから出力されたパケットPKTのヘッダ部を調停により選択し、増加情報INC2をクレジット制御部CRCNTに出力する(図3(e))。調停部ARB2が選択したヘッダ部は、フリップフロップFF2に保持される。カウンタCOUNTのカウンタ値は、増加情報INC2に基づいて、パケットPKTのサイズ分増加される(図3(f))。
調停部ARB2が選択したパケットPKTは、調停部ARB3により調停され、CPU1の受信制御部RCNTに送信される(図3(g))。受信制御部RCNTは、受信したパケットPKTを、仮想チャネルVC3に対応するバッファ部BUF3に保持する(図3(h))。
この後、バッファ部BUF3に保持されたパケットPKTは、受信制御部RCNTによるパケットPKTの受信処理を実行するために他の回路に転送され、転送されたパケットPKTは、バッファ部BUF3から削除される(図3(i))。受信制御部RCNTは、バッファ部BUF3に保持するパケットPKTの保持量が減少したことに基づき、減少したパケットPKTの量を示す減少情報DEC3を含むリリース情報RLSをCPU0に送信する(図3(j))。
クレジット制御部CRCNTは、減少情報DEC3に基づき、バッファ部BUF3から削除されたパケットPKTのサイズ分、カウンタCOUNTのカウンタ値を減少させる(図3(k))。このように、カウンタCOUNTは、減少情報DEC3に基づいて、バッファ部BUF3の保持量の減少に追従してカウンタ値を減少する。
この後、上述と同様に、調停部ARB2、ARB3のそれぞれは、仮想チャネルVC3からのパケットPKTを順次に調停により選択し、増加情報INC2、INC3をクレジット制御部CRCNTに順次に出力する(図3(l)、(m))。カウンタCOUNTのカウンタ値は、増加情報INC2、INC3に基づいて順次に増加する(図3(n)、(o))。増加情報INC3に基づくカウンタCOUNTのカウントアップにより、カウンタ値は上限値CMAXになる。
カウンタCOUNTの上限値CMAXは、仮想チャネルVC3からのパケットPKTを受信制御部RCNTが受信することにより、バッファ部BUF3が満杯になることを示す。換言すれば、カウンタCOUNTの上限値CMAXは、調停部ARB1−ARB3のいずれかが、仮想チャネルVC3からのパケットPKTをさらに選択し、CPU1に送信する場合、バッファ部BUF3がオーバーフローすることを示す。このため、クレジット制御部CRCNTは、ビジー情報BUSYを出力し、調停部ARB1−ARB3による仮想チャネルVC3からのパケットPKTの調停を抑止する(図3(p))。
ビジー情報BUSYの出力期間、調停部ARB1−ARB3による仮想チャネルVC3からのパケットPKTの調停が抑止されるため、パケットPKTは、CPU0からバッファ部BUF3に送信されない。ビジー情報BUSYは、バッファ部BUF3が満杯になる前に出力される。これにより、調停部ARB1−ARB3が調停動作を続けることを、バッファ部BUF3が満杯になる前に予め抑止することができ、バッファ部BUF3がオーバーフローすることを抑止することができる。
一方、CPU1の受信制御部RCNTは、CPU0から順次に受信した仮想チャネルVC3からのパケットPKTをバッファ部BUF3に順次に保持する(図3(q)、(r))。そして、バッファ部BUF3は、満杯状態になる。この後、受信制御部RCNTは、バッファ部BUF3からのパケットPKTの削除に基づき、減少情報DEC3を含むリリース情報RLSをCPU0に順次に送信する(図3(s)、(t)、(u))。
クレジット制御部CRCNTは、減少情報DEC3に基づき、カウンタCOUNTのカウンタ値を順次に減少させる(図3(v)、(w)、(x))。この際、クレジット制御部CRCNTは、式(1)を満足しない間、ビジー情報BUSYの出力状態を維持する。クレジット制御部CRCNTは、バッファ部BUF3の空き容量が増加し、調停部ARB1−ARB3の数に対応する3つのパケットPKTをバッファ部BUF3が保持可能になったときに、ビジー情報BUSYの出力を停止する(図3(y))。
バッファ部BUF3の空き容量が、3つのパケットPKTを保持可能な容量まで増加し、式(1)を満足した場合、調停部ARB1−ARB3は、仮想チャネルVC3からのパケットPKTをそれぞれ調停により選択可能である。これにより、調停部ARB1−ARB3が動作しているにも拘わらず、調停部ARB1−ARB3のいずれかが仮想チャネルVCからのパケットPKTを選択しない、いわゆるライブロック状態になることを抑止することができる。ライブロック状態に陥る動作は、図10および図11で説明される。
図4は、図2に示す送信制御部TCNT3と受信制御部RCNTとの動作の別の例を示す。図3と同一または同様の動作については、同じ符号を付し、詳細な説明は省略する。図4は、送信制御部TCNT3から受信制御部RCNTに送信されるパケットPKTのサイズ(パケット長)が可変である例を示す。カウンタCOUNTおよびバッファ部BUF3において、斜線で示す枠は、最大長のパケットPKTを視覚的に示す。
増加情報INC3が出力されるまでの動作は、バッファ部BUF3に保持されるパケットPKTの数およびパケット長が異なることを除き、図3と同様である。カウンタCOUNTのカウンタ値は、増加情報INC3に基づき増加する(図4(a))。クレジット制御部CRCNTは、カウンタCOUNTのカウンタ値が上限値CMAXからパケットPKTの最大長に対応する値を引いた値V1を超えた場合、ビジー情報BUSYを出力する(図4(b))。これは、カウンタ値が値V1を超えた状態で、調停部ARB1−ARB3が仮想チャネルVC3から最大サイズのパケットPKTを新たに選択した場合、バッファ部BUF3がオーバーフローするためである。
この後、クレジット制御部CRCNTは、バッファ部BUF3の空き容量が増加し、カウンタCOUNTのカウンタ値が式(1)を満足した場合、ビジー情報BUSYの出力を停止する(図4(c))。すなわち、バッファ部BUF3が、調停部ARB1−ARB3の個数分の最大長のパケットPKTを保持可能になったときに、ビジー情報BUSYの出力は停止される。
図5は、図2に示すクレジット制御部CRCNTの動作の例を示す。図5に示す動作は、ハードウェアにより実行されてもよく、ソフトウェアにより実行されてもよい。
まず、ステップS10において、クレジット制御部CRCNTは、増加情報INC(INC1−INC3のいずれか)を受信したかを判定する。増加情報INC(INC1−INC3のいずれか)を受信した場合、動作はステップS12に移行され、増加情報INC(INC1−INC3のいずれか)を受信しない場合、動作はステップS20に移行される。すなわち、調停部ARB1−ARB3のいずれかが、調停動作により、仮想チャネルVC3から出力されたパケットPKTを選択した場合、動作はステップS12に移行される。調停部ARB1−ARB3のいずれかが、調停動作により、仮想チャネルVC0以外から出力されたパケットPKTを選択した場合、または調停動作を実行しない場合、動作はステップS20に移行される。
ステップS12において、クレジット制御部CRCNTは、増加情報INCに基づいて、カウンタCOUNTのカウンタ値CVを増加させる。カウンタ値CVの増加量は、調停部ARB1−ARB3のいずれかが調停動作により選択したパケットPKTのパケット長に対応する。
次に、ステップS14において、クレジット制御部CRCNTは、カウンタ値CVが上限値CMAXになった場合、動作をステップS16に移行し、カウンタCOUNTのカウンタ値CVが上限値CMAX未満の場合、動作をステップS10に戻す。なお、図4で説明したように、パケットPKTのサイズが可変である場合、ステップS14は、”CV=CMAX”の代わりに、”CV>V1”を判定とする。
ステップS16において、クレジット制御部CRCNTは、バッファ部BUF3がオーバーフローすることを抑止するため、ビジー情報BUSYを調停部ARB1−ARB3に出力する。ステップS16の後、動作は、ステップS10に戻る。
一方、ステップS20において、クレジット制御部CRCNTは、減少情報DEC3を受信した場合、動作をステップS22に移行し、減少情報DEC3を受信しない場合、動作をステップS10に戻す。ステップS22において、クレジット制御部CRCNTは、カウンタCOUNTのカウンタ値CVを減少する。カウンタ値CVの減少量は、CPU1の受信制御部RCNTの受信処理により、バッファ部BUF3から削除されたパケットPKTのパケット長に対応する。
次に、ステップS24において、クレジット制御部CRCNTは、カウンタCOUNTのカウンタ値CVが、式(1)を満足するかを判定する。カウンタ値CVが、式(1)を満足する場合、調停部ARB1−ARB3は、ライブロックすることなく仮想チャネルVC3からのパケットPKTを選択できる。このため、クレジット制御部CRCNTは、ステップS26において、ビジー情報BUSYの出力を停止し、動作をステップS10に戻す。ビジー情報BUSYの出力の停止により、各調停部ARB1−ARB3は、仮想チャネルVC0から出力されるパケットPKTの調停を再開する。
一方、カウンタ値CVが式(1)を満足しない場合、調停部ARB1−ARB3のいずれかがライブロックする可能性があるため、クレジット制御部CRCNTは、ビジー情報BUSYの出力を解除することなく、動作をステップS10に戻す。
図6は、図2に示す送信制御部TCNT3がパケットPKTを送信する例を示す。図6に示す例では、各パケットPKTは、ヘッダ部、データ部、エンド部を含み、転送および送信に3サイクル掛かるとする。すなわち、パケットPKTのパケット長は、図3に示すように固定である。なお、図4に示すように、パケットPKTのパケット長が可変である場合、送信するデータ量に応じてデータ部の数(サイクル数)が増減される。ヘッダ部は、先頭に”H”を付けた数字で示され、データ部は、先頭に”D”を付けた数字で示され、エンド部は、先頭に”E”を付けた数字で示される。なお、各パケットPKTのパケット長は、”3”に限定されない。
各パケットPKTのヘッダ部H、データ部Dおよびエンド部Eに続く数字は、パケットPKTを識別する番号を示す。すなわち、後に続く数字が互いに同じヘッダ部H、データ部Dおよびエンド部Eは、1つのパケットPKTを示す。ヘッダH0、データ部D0およびエンド部E0は、パケットPKT0とも称され、ヘッダH10、データ部D10およびエンド部E10は、パケットPKT10とも称される。
送信制御部TCNT3に示すカウンタCOUNTの上側と下側は、各状態になる直前のカウンタ値と、各状態になった後のカウンタ値とをそれぞれ示す。カウンタCOUNTに示す”BUSY”は、クレジット制御部CRCNTがビジー情報BUSYを出力中であることを示す。
まず、状態(a)では、送信制御部TCNT2の最終段のフリップフロップFF0がパケットPKT0のヘッダ部H0を保持し、フリップフロップFF2がパケット送信部PT6からのパケットPKT6のヘッダ部H6を保持している。パケット送信部PT4、PT5、PT6は、ヘッダ部H4、H5とヘッダ部H6に続くデータ部D6を調停部ARB2に出力している。
カウンタCOUNTのカウント値は、パケット送信部PT6からのパケットPKT6のヘッダ部H6を調停部ARB2が選択したことに基づいて増加し、上限値CMAXになる。これにより、クレジット制御部CRCNTからビジー情報BUSYが出力され、各調停部ARB1−ARB3は、仮想チャネルVC3からのパケットPKTの調停動作を停止する。状態(a)の次のサイクルで、調停部ARB1は、パケットPKT0(H0)を調停により選択し、フリップフロップFF1に保持する。
状態(a)から3サイクル後の状態(b)では、パケットPKT0のヘッダH0、データ部D0およびエンド部E0が、フリップフロップFF3、FF2、FF1にそれぞれ保持される。ビジー情報BUSYが出力されているため、各調停部ARB1、ARB2、ARB3は、仮想チャネルVC3からのパケットPKTの調停動作の停止を継続する。フリップフロップFF0は、パケットPKT10のヘッダ部H10を保持する。状態(b)の次のサイクルで、調停部ARB1は、パケットPKT10(H10)を調停により選択し、フリップフロップFF1に保持する。
状態(b)から3サイクル後の状態(c)では、パケットPKT10のヘッダH10、データ部D10およびエンド部E10が、フリップフロップFF3、FF2、FF1にそれぞれ保持される。クレジット制御部CRCNTは、CPU1からのリリース情報RLS(減少情報DEC3)に基づいて、カウンタCOUNTのカウンタ値を1パケット分減少させる。カウンタCOUNTのカウンタ値は、式(1)を満足しないため、クレジット制御部CRCNTは、ビジー情報BUSYの出力状態を維持する。このため、各調停部ARB1、ARB2、ARB3は、仮想チャネルVC3からのパケットPKTの調停動作の停止を継続する。状態(c)の次のサイクルで、調停部ARB1は、パケットPKT20(H20)を調停により選択し、フリップフロップFF1に保持する。
状態(c)から3サイクル後の状態(d)では、パケットPKT20のヘッダH20、データ部D20およびエンド部E20が、フリップフロップFF3、FF2、FF1にそれぞれ保持される。クレジット制御部CRCNTは、CPU1からのリリース情報RLS(減少情報DEC3)に基づいて、カウンタCOUNTのカウンタ値を1パケット分減少させる。カウンタCOUNTのカウンタ値は、式(1)を満足しないため、クレジット制御部CRCNTは、ビジー情報BUSYの出力状態を維持する。このため、各調停部ARB1、ARB2、ARB3は、仮想チャネルVC3からのパケットPKTの調停動作の停止を継続する。状態(d)の次のサイクルで、調停部ARB1は、パケットPKT40(H40)を調停により選択し、フリップフロップFF1に保持する。
図7は、図6に示す動作の続きの例を示す。状態(d)から4サイクル後の状態(e)では、パケットPKT30のデータ部D30およびエンド部E30が、フリップフロップFF3、FF2にそれぞれ保持される。また、状態(d)の後、状態(e)になる前に、CPU1からリリース情報RLS(減少情報DEC3)が出力される。クレジット制御部CRCNTは、減少情報DEC3に基づいて、カウンタCOUNTのカウンタ値を1パケット分減少させる。カウンタCOUNTのカウンタ値は、式(1)を満足するため、クレジット制御部CRCNTは、ビジー情報BUSYの出力を停止する。
状態(e)の1サイクル前、フリップフロップFF3、FF2、FF1は、パケットPKT30のヘッダ部H30、データ部D30およびエンド部E30をそれぞれ保持している。各調停部ARB1−ARB3は、誤動作を抑止するために、パケットPKT30の転送中に調停動作を停止する。このため、状態(e)において、パケットPKT30を転送中の調停部ARB2、ARB3は、パケット送信部PT4−PT9からのパケットPKTを調停しない。
一方、パケットPKT30のエンド部E30の転送を完了した調停部ARB1は、パケット送信部PT1−PT3からのパケットPKT1、PKT2、PKT3を調停可能である。そして、調停部ARB1は、パケット送信部PT1が出力するパケットPKT1のヘッダ部H1を調停により選択し、フリップフロップFF1に保持する。調停部ARB1は、パケットPKT1の選択に基づき増加情報INC1を出力し、カウンタCOUNTのカウンタ値は、1パケット分増加する。
状態(e)から1サイクル後の状態(f)では、調停部ARB2は、パケットPKTの転送が途切れたため、パケット送信部PT5からのパケットPKT5(H5)を調停により選択し、フリップフロップFF2に保持する。これにより、カウンタCOUNTのカウンタ値は、1パケット分増加する。調停部ARB2が、パケットPKT5(H5)を選択したため、フリップフロップFF1は、ヘッダ部H1を保持し続ける。
状態(f)から1サイクル後の状態(g)では、調停部ARB3は、パケットPKTの転送が途切れたため、パケット送信部PT9からのパケットPKT9(H9)を調停により選択し、フリップフロップFF3に保持する。これにより、カウンタCOUNTのカウンタ値は、1パケット分増加し、上限値CMAXになり、クレジット制御部CRCNTからビジー情報BUSYが出力される。各調停部ARB1−ARB3は、ビジー情報BUSYの出力に基づき、仮想チャネルVC3からのパケットPKTの調停動作を停止する。調停部ARB3が、パケットPKT9(H9)を調停により選択したため、フリップフロップFF1、FF2は、ヘッダ部H1、H5をそれぞれ保持し続ける。フリップフロップFF0は、パケットPKT40のヘッダ部H40を保持する。
状態(g)から2サイクル後の状態(h)では、フリップフロップFF3は、パケットPKT9のエンド部E9を保持する。フリップフロップFF1、FF2の状態は、状態(g)と同じである。
図8は、図7に示す動作の続きの例を示す。状態(h)から状態(i)までの3サイクルの間に、パケットPKT5(H5、D5、E5)がフリップフロップFF3に転送され、パケットPKT1(H1)がフリップフロップFF2に転送される。状態(i)では、CPU1のバッファ部BUF3に保持されたパケットPKTが削除されないため、ビジー情報BUSYの出力は維持される。
状態(i)から3サイクル後の状態(j)になる前、調停部ARB1は、パケットPKTの転送が途切れ、ビジー情報BUSYが出力中のため、送信制御部TCNT2からのパケットPKT40(H40)を調停により選択する。そして、状態(j)において、フリップフロップFF2、FF1は、パケットPKT40のヘッダ部H40およびデータ部D40を保持する。
状態(j)から3サイクル後の状態(k)では、クレジット制御部CRCNTは、減少情報DEC3に基づいて、カウンタCOUNTのカウンタ値を1パケット分減少させる。カウンタCOUNTのカウンタ値は、式(1)を満足しないため、クレジット制御部CRCNTは、ビジー情報BUSYの出力状態を維持する。このため、各調停部ARB1、ARB2、ARB3は、仮想チャネルVC3からのパケットPKTの調停動作の停止を継続する。状態(k)の次のサイクルで、調停部ARB1は、パケットPKT50(H50)を調停により選択し、フリップフロップFF1に保持する。
状態(k)から3サイクル後の状態(l)では、クレジット制御部CRCNTは、減少情報DEC3に基づいて、カウンタCOUNTのカウンタ値を1パケット分減少させる。カウンタCOUNTのカウンタ値は、式(1)を満足しないため、クレジット制御部CRCNTは、ビジー情報BUSYの出力状態を維持する。このため、各調停部ARB1、ARB2、ARB3は、仮想チャネルVC3からのパケットPKTの調停動作の停止を継続する。
なお、図6から図8では、パケット長が”3”のパケットPKTを送信する例について説明したが、図4に示したように、パケット長は可変でもよい。パケット長が可変の場合、カウンタCOUNTのカウンタ値は、図4に示すように変化する。
図9は、他のデータ送受信システムにおけるクレジット制御部の動作の例を示す。図4と同一または同様の動作については、同じ符号を付し、詳細な説明は省略する。他のデータ送受信システムは、ビジー情報BUSYの出力制御が異なることを除き、図2に示すデータ送受信システムSYSと同様である。
図9に示す動作は、図4のステップS24の代わりにステップS25を実行する。その他の動作は、図4と同様である。ステップS25では、クレジット制御部CRCNTは、カウンタCOUNTのカウンタ値CVが、上限値CMAXより小さいかを判定する。カウンタ値CVが上限値CMAXより小さい場合、クレジット制御部CRCNTは、ステップS26において、ビジー情報BUSYの出力を停止する。カウンタ値CVが上限値CMAX以上の場合、ビジー情報BUSYの出力を解除することなく、動作をステップS10に戻す。
図10は、図9に示すクレジット制御部を有する送信制御部がパケットPKTを送信する例を示す。図10の表記は、図6の表記と同様である。状態(a)、(b)は、図6に示す状態(a)、(b)と同じである。
状態(b)から1サイクル後の状態(c)では、クレジット制御部CRCNTは、CPU1からのリリース情報RLS(減少情報DEC3)に基づいて、カウンタCOUNTのカウンタ値を1パケット分減少させる。カウンタCOUNTのカウンタ値は、図9に示すステップS25の条件(CV<CMAX)を満足するため、クレジット制御部CRCNTは、ビジー情報BUSYの出力を停止する。
調停部ARB1は、パケットPKTの転送が途切れ、ビジー情報BUSYの出力が停止したため、パケット送信部PT3からのパケットPKT3(H3)を調停により選択し、フリップフロップFF1に保持する。これにより、カウンタCOUNTのカウンタ値は、1パケット分増加し、カウンタ値は上限値CMAXになり、ビジー情報BUSYが再び出力される。
状態(c)から2サイクル後の状態(d)では、パケットPKT3のヘッダH3、データ部D3およびエンド部E3が、フリップフロップFF3、FF2、FF1にそれぞれ保持される。ビジー情報BUSYが出力されているため、各調停部ARB1、ARB2、ARB3は、仮想チャネルVC3からのパケットPKTの調停動作の停止を継続する。
図11は、図10に示す動作の続きの例を示す。図10に示す状態(d)から1サイクル後の状態(e)では、調停部ARB1は、パケットPKT10(H10)を調停により選択し、フリップフロップFF1に保持する。
状態(e)から2サイクル後の状態(f)では、クレジット制御部CRCNTは、減少情報DEC3に基づいて、カウンタCOUNTのカウンタ値を1パケット分減少させる。カウンタCOUNTのカウンタ値は、図9に示すステップS25の条件(CV<CMAX)を満足するため、クレジット制御部CRCNTは、ビジー情報BUSYの出力を停止する。
調停部ARB2は、パケットPKTの転送が途切れ、ビジー情報BUSYの出力が停止しているため、パケット送信部PT4からのパケットPKT4(H4)を調停により選択し、フリップフロップFF2に保持する。これにより、カウンタCOUNTのカウンタ値は、1パケット分増加し、ビジー情報BUSYが再び出力される。調停部ARB1は、送信制御部TCNT2からのパケットPKT20(H20)を調停により選択し、フリップフロップFF1にヘッダ部H20を保持する。
状態(f)から2サイクル後の状態(g)では、フリップフロップFF3、FF2、FF1は、パケットPKT4のエンド部E4およびパケットPKT20のヘッダ部H20、データ部D20をそれぞれ保持する。クレジット制御部CRCNTは、ビジー情報BUSYの出力状態を維持するため、各調停部ARB1、ARB2、ARB3は、仮想チャネルVC3からのパケットPKTの調停動作の停止を継続する。
状態(g)から4サイクル後の状態(h)では、クレジット制御部CRCNTは、減少情報DEC3に基づいて、カウンタCOUNTのカウンタ値を1パケット分減少させる。カウンタCOUNTのカウンタ値は、図9に示すステップS25の条件(CV<CMAX)を満足するため、クレジット制御部CRCNTは、ビジー情報BUSYの出力を停止する。
調停部ARB1は、パケットPKTの転送が途切れ、ビジー情報BUSYの出力が停止しているため、パケット送信部PT2からのパケットPKT2(H2)を調停により選択し、フリップフロップFF1に保持する。これにより、カウンタCOUNTのカウンタ値は、1パケット分増加し、ビジー情報BUSYが再び出力される。
この後、状態(f)、(g)、(h)と同様の状態が繰り返される場合、調停部ARB3は、ビジー情報BUSYの出力の停止中に、パケットPKTの転送が途切れないため、パケット送信部PT7−PT9からのパケットPKTを調停に参加させられない。この結果、正常に動作している送信制御部TCNT3において、調停部ARB3がパケット送信部PT7−PT9からのパケットPKTを選択しない状態が続くライブロック状態に陥る。
以上、図2から図11に示した実施形態では、クレジット制御部CRCNTは、調停部ARB1−ARB3のそれぞれが選択するパケットPKTをバッファ部BUF3が保持可能なことをカウンタ値に基づいて判定した場合にビジー情報BUSYの出力を停止する。すなわち、カウンタCOUNTのカウンタ値が式(1)を満足しない間、調停部ARB1−ARB3による調停動作は抑止される。これにより、ビジー情報BUSYの出力が停止された場合に、各調停部ARB1−ARB3は、仮想チャネルVC3からのパケットを調停により選択することが可能になる。この結果、調停部ARB1−ARB3のいずれかが、仮想チャネルVC3からのパケットを選択しない状態が続くことを回避することができる。
CPU0が複数の仮想チャネルVCを有し、仮想チャネルVCにそれぞれ対応する調停部ARBが直列に接続される場合にも、調停部ARBのいずれかが、対応する仮想チャネルVCからのパケットを選択しない状態が続くことを回避することができる。各調停部ARB1−ARB3が、パケットPKTの選択に基づいて、増加情報INC1−INC3を出力することで、パケットPKTがバッファ部BUF3に保持される前に、カウンタCOUNTのカウンタ値を増加させることができる。これにより、バッファ部BUF3に保持されるパケットPKTの保持容量が上限に達する前に、ビジー情報BUSYを出力することができる。この結果、調停部ARB1−ARB3が調停動作を続けることを、バッファ部BUF3が満杯になる前に予め抑止することができ、バッファ部BUF3がオーバーフローすることを抑止することができる。
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。