以下、本発明を実施するための形態(以下、実施の形態と称する)について説明する。説明は以下の順序により行う。
1.第1の実施の形態(管理テーブルにタイムスロットを割り当てる例)
2.第2の実施の形態(ポインタテーブルの記憶容量を削減する例)
3.第3の実施の形態(管理テーブルの記憶容量を削減する例)
4.第4の実施の形態(管理テーブルにシリアルナンバーを保持する例)
5.第5の実施の形態(管理テーブルにネクストエントリを保持する例)
<1.第1の実施の形態>
[バスシステムの構成]
図1は、本発明の第1の実施の形態におけるバスシステムの全体図の一例である。バスシステムは、M+1台のマスタ110(マスタ#0乃至M)と、AXIバス120および130と、N+1台のスレーブ140(スレーブ#0乃至N)と、バスブリッジ200とを備える。MおよびNは、それぞれ、0以上の整数である。マスタ110はAXIバス120に接続されており、スレーブ140はAXIバス130に接続されている。また、AXIバス120および130は、バスブリッジ200に接続されている。
マスタ110はデータ転送を主導する接続機器であり、スレーブ140は受動的に動作する接続機器である。マスタ110としては、例えばプロセッサが想定される。スレーブ140としては、例えばメモリが想定される。
AXIバス120および130は、AXIプロトコルに従ってデータを転送するバスである。バスブリッジ200は、AXIプロトコルに従ってデータを転送し、そのデータ転送において必要に応じてデータ変換を行うものである。例えば、バスブリッジ200は、AXIバス120および130のそれぞれのバス幅やエンディアン方式が異なる場合に、転送先のバスのバス幅等に合わせてデータ変換を行う。
ここで、AXIプロトコルでは、リード動作のためのパスとして、リードアドレスチャネルおよびリードデータチャネルが用意されている。マスタ110からリードアドレスチャネルを介してスレーブ140にリードアドレスを含むリクエストが転送されると、これに応答してリードデータチャネルを介してスレーブ140からマスタ110にリードデータが転送される。また、AXIプロトコルでは、ライト動作のためのパスとして、ライトアドレスチャネル、ライトデータチャネルおよびライトレスポンスチャネルが用意されている。マスタ110からライトアドレスチャネルおよびライトデータチャネルを介してスレーブ140にリクエストが転送されると、これに応答してスレーブ140においてライト動作が行われる。そして、そのライト動作の結果が、ライトレスポンスチャネルを介してスレーブ140からマスタ110に転送される。
以下、マスタからスレーブへリードアドレスチャネルおよびライトアドレスチャネルを介して転送される信号をリクエストと称する。また、スレーブからマスタへリードデータチャネルおよびライトレスポンスチャネルを介して転送される信号をレスポンスと称する。
AXIプロトコルにおいては、リクエストの転送処理と、そのリクエストに対応するレスポンスの転送処理とが1つのトランザクションの処理を形成する。1つのトランザクションに含まれるリクエストおよびレスポンスには同じ識別子が付与されるのがAXIプロトコルにおける原則である。また、異なるトランザクション間で同じ識別子を付与した場合には、それらのトランザクション間において順序保証が行われる。
なお、上述の実施の形態のバスブリッジ200は、特許請求の範囲に記載の相互接続装置の一例である。
[AXIプロトコルにおけるチャネル構成]
図2は、AXIプロトコルにおけるリードアドレスチャネルを構成する信号を示す図である。リードアドレスチャネルは、リードアドレスをマスタ110からスレーブ140に伝達するためのチャネルである。このリードアドレスチャネルは、リードアドレス識別子、リードアドレス、バースト長、バーストサイズ、バーストタイプ、ロックタイプ、キャッシュタイプ、プロテクションタイプ、リードアドレスバリッド、リードアドレスレディの各信号からなる。これらの信号のうち、リードアドレスレディのみがスレーブ140からの信号であり、これ以外はマスタ110からの信号である。
リードアドレス識別子ARID[3:0]は、信号のリードアドレスグループを識別するための4ビットのタグである。AXIプロトコルでは、マスタがトランザクションを発行する際に、スレーブに対して順序関係を維持することを要求する場合には、同じ識別子を付与することとされている。換言すれば、識別子が異なるトランザクション間では順序関係が維持される保証はない。
リードアドレスARADDR[31:0]は、リード対象となる32ビットのアドレスであり、バースト転送における初期アドレスを示す信号である。
バースト長ARLEN[3:0]は、バースト転送のデータ数を示す4ビットの信号である。「1」から「16」の何れかのデータ数が4ビットにエンコードされて示される。
バーストサイズARSIZE[2:0]は、バースト転送の各回における転送サイズを示す3ビットの信号である。「20」、「21」、「22」、「23」、「24」、「25」、「26」、「27」の何れかの転送サイズが3ビットにエンコードされて示される。
バーストタイプARBURST[1:0]は、バースト転送のアドレス計算のタイプを示す2ビットの信号である。具体的には、FIFO型、連続アクセス、キャッシュラインの何れかのタイプを指定することができるようになっている。
ロックタイプARLOCK[1:0]は、アトミックアクセスのための情報を示す2ビットの信号である。具体的には、ノーマルアクセス、排他的アクセス、ロック付きアクセスの何れかのタイプを指定することができるようになっている。
キャッシュタイプARCACHE[3:0]は、キャッシュメモリ制御に必要な情報を示す4ビットの信号である。具体的には、キャッシュ可能か否か、ライトスルーかライトバックか等の制御情報が示される。
プロテクションタイプARPROT[2:0]は、プロテクション制御に必要な情報を示す3ビットの信号である。具体的には、特権アクセス、非セキュアアクセス、インストラクションアクセスの各プロテクションレベルを指定することができるようになっている。
リードアドレスバリッドARVALIDは、アドレスおよび制御信号の有効性を示すバリッド信号である。リードアドレスレディARREADYは、スレーブ140がアドレスおよび制御信号を受け取ることができる状態にあるか否かを示すレディ信号である。前述のように、リードアドレスバリッドARVALIDおよびリードアドレスレディARREADYがともにアサートされているときに、アドレスおよび制御信号の転送が行われる。
図3は、AXIプロトコルにおけるリードデータチャネルを構成する信号を示す図である。リードデータチャネルは、リードデータをスレーブ140からマスタ110に転送するためのチャネルである。このリードデータチャネルは、リード識別子タグ、リードデータ、リードレスポンス、リードラスト、リードバリッド、リードレディの各信号からなる。これらの信号のうち、リードレディのみがマスタ110からの信号であり、これ以外はスレーブ140からの信号である。
リード識別子タグRID[3:0]は、信号のリードデータグループを識別するための4ビットのタグである。このリード識別子タグRID[3:0]はスレーブにおいて生成されるものであり、同一のトランザクションにおいてリードアドレス識別子ARID[3:0]と一致していなければならない。
リードデータRDATA[31:0]は、リードトランザクションによるスレーブ140からのリードデータである。ここでは32ビット幅のリードデータバスを想定したが、RDATAのビット幅はリードデータバス幅に応じて変化する。リードデータバスは、8、16、32、64、128、256、512および1024の何れかのビット幅を有する。
リードレスポンスRRESP[1:0]は、リードトランザクションによるデータ転送の状態を示す2ビットの信号である。例えば、リードレスポンスには、リードアクセスの成功または失敗を示す信号が含まれる。
リードラストRLASTは、当該データがリードトランザクションにおける最終のデータ転送である旨を示す信号である。
リードバリッドRVALIDは、要求されたリードデータの有効性を示すバリッド信号である。リードレディRREADYは、マスタ110がリードデータを受け取ることができる状態にあるか否かを示すレディ信号である。前述のように、リードバリッドRVALIDおよびリードレディRREADYがともにアサートされているときに、リードデータの転送が行われる。
図4は、AXIプロトコルにおけるライトアドレスチャネルを構成する信号を示す図である。ライトアドレスチャネルは、ライトアドレスをマスタ110からスレーブ140に伝達するためのチャネルである。このライトアドレスチャネルは、ライトアドレス識別子、ライトアドレス、バースト長、バーストサイズ、バーストタイプ、ロックタイプ、キャッシュタイプ、プロテクションタイプ、ライトアドレスバリッド、ライトアドレスレディの各信号からなる。これらの信号のうち、ライトアドレスレディのみがスレーブ140からの信号であり、これ以外はマスタ110からの信号である。
ライトアドレス識別子AWID[3:0]は、信号のライトアドレスグループを識別するための4ビットのタグである。ライトアドレスAWADDR[31:0]は、ライト対象となる32ビットのアドレスであり、バースト転送における初期アドレスを示す信号である。
バースト長AWLEN[3:0]は、バースト転送のデータ数を示す4ビットの信号である。バーストサイズAWSIZE[2:0]は、バースト転送の各回における転送サイズを示す3ビットの信号である。バーストタイプAWBURST[1:0]は、バースト転送のアドレス計算のタイプを示す2ビットの信号である。ロックタイプAWLOCK[1:0]は、アトミックアクセスのための情報を示す2ビットの信号である。キャッシュタイプAWCACHE[3:0]は、キャッシュメモリ制御に必要な情報を示す4ビットの信号である。プロテクションタイプAWPROT[2:0]は、プロテクション制御に必要な情報を示す3ビットの信号である。これらは基本的にリードアドレスチャネルの場合と同様である。
ライトアドレスバリッドAWVALIDは、アドレスおよび制御信号の有効性を示すバリッド信号である。ライトアドレスレディAWREADYは、スレーブ140がアドレスおよび制御信号を受け取ることができる状態にあるか否かを示すレディ信号である。前述のように、ライトアドレスバリッドAWVALIDおよびライトアドレスレディAWREADYがともにアサートされているときに、アドレスおよび制御信号の転送が行われる。
図5は、AXIプロトコルにおけるライトデータチャネルを構成する信号を示す図である。ライトデータチャネルは、ライトデータをマスタ110からスレーブ140に転送するためのチャネルである。このライトデータチャネルは、ライト識別子タグ、ライトデータ、ライトストローブ、ライトラスト、ライトバリッド、ライトレディの各信号からなる。これらの信号のうち、ライトレディのみがスレーブ140からの信号であり、これ以外はマスタ110からの信号である。
ライト識別子タグWID[3:0]は、信号のライトデータグループを識別するための4ビットのタグである。このライト識別子タグWID[3:0]は、同一のトランザクションにおいてライトアドレス識別子AWID[3:0]と一致していなければならない。
ライトデータWDATA[31:0]は、ライトトランザクションによるスレーブ140へのライトデータである。ここでは32ビット幅のライトデータバスを想定したが、WDATAのビット幅はリードデータバス幅に応じて変化する。ライトデータバスは、8、16、32、64、128、256、512および1024の何れかのビット幅を有する。
ライトストローブWSTRB[3:0]は、スレーブ140のメモリにおいて更新されるべきバイト位置を示す4ビットの信号である。ライトデータバスの8ビット毎にライトストローブWSTRB[3:0]の1ビットが割り当てられる。すなわち、WSTRB[i]は、WDATA[(8×i)+7:(8×i)]に対応する。
ライトラストWLASTは、当該データがライトトランザクションにおける最終のデータ転送である旨を示す信号である。
ライトバリッドWVALIDは、ライトデータの有効性を示すバリッド信号である。ライトレディWREADYは、スレーブ140がライトデータを受け取ることができる状態にあるか否かを示すレディ信号である。前述のように、ライトバリッドWVALIDおよびライトレディWREADYがともにアサートされているときに、ライトデータの転送が行われる。
図6は、AXIプロトコルにおけるライトレスポンスチャネルを構成する信号を示す図である。ライトレスポンスチャネルは、ライトトランザクションの結果をスレーブ140からマスタ110に伝達するためのチャネルである。このライトレスポンスチャネルは、レスポンス識別子、ライトレスポンス、ライトレスポンスバリッド、レスポンスレディの各信号からなる。これらの信号のうち、レスポンスレディのみがマスタ110からの信号であり、これ以外はスレーブ140からの信号である。
レスポンス識別子BID[3:0]は、ライトレスポンスを識別するための4ビットのタグである。このレスポンス識別子BID[3:0]は、同一のトランザクションにおいてライトアドレス識別子AWID[3:0]と一致していなければならない。
ライトレスポンスBRESP[1:0]は、ライトトランザクションによるデータ転送の状態を示す2ビットの信号である。例えば、ライトレスポンスには、ライトアクセスの成功または失敗を示す信号が含まれる。
ライトレスポンスバリッドBVALIDは、ライトレスポンスの有効性を示すバリッド信号である。レスポンスレディBREADYは、マスタ110がライトレスポンスを受け取ることができる状態にあるか否かを示すレディ信号である。前述のように、ライトレスポンスバリッドBVALIDおよびレスポンスレディBREADYがともにアサートされているときに、ライトレスポンスの伝達が行われる。
[バスブリッジの構成]
図7は、本発明の第1の実施の形態におけるバスブリッジ200の一構成例を示すブロック図である。バスブリッジ200は、相互接続部300、バッファ400、リクエスト処理部500、および、レスポンス処理部600を備える。
相互接続部300は、リクエストおよびレスポンスをマスタ110およびスレーブ140間で転送するものである。詳細には、AXIバス120から信号線802を介してリクエストを受信した場合、相互接続部300は、そのリクエストに係るバリッド信号を取得し、信号線816を介して対応するレディ信号を取得する。以下、バリッド信号およびレディ信号をハンドシェイク信号と称する。相互接続部300は、信号線804を介してリクエスト処理部500へハンドシェイク信号を出力し、信号線805を介してリクエスト処理部500へリクエストを出力する。そして、相互接続部300は、リクエスト処理部500から信号線804を介してレディ信号を受け取り、そのレディ信号をAXIバス120へ信号線801を介して出力する。バリッド信号およびレディ信号がアサートされているのであれば、相互接続部300は、そのリクエストをAXIバス130へ信号線817を介して転送する。
AXIバス130から信号線818を介してレスポンスを受信した場合、相互接続部300は、そのレスポンスに係るバリッド信号を取得し、信号線801を介して対応するレディ信号を取得する。相互接続部300は、信号線810を介してレスポンス処理部600へハンドシェイク信号を出力し、信号線811を介してレスポンス処理部600へレスポンスを出力する。そして、相互接続部300は、レスポンス処理部600から信号線812を介してレスポンスに対応するトランザクション情報を受け取る。ここで、トランザクション情報は、レスポンスの転送処理を制御するための情報である。トランザクション情報に含まれる情報の詳細については、図8を参照して後述する。バリッド信号およびレディ信号がアサートされているのであれば、相互接続部300は、受け取ったトランザクション情報に基づき、レスポンスをAXIバス120へ信号線803を介して転送する。
バッファ400は、未解決な転送に係るトランザクション情報を保持するものである。具体的には、バッファ400は、トランザクション情報を含む管理情報と、読み出す管理情報を特定するための空フラグおよびポインタを保持する。管理情報は、トランザクション識別子IDを示すビット列のうちの上位のビット列(以下、「uID」と称する)をトランザクション情報に対応付けた情報である。トランザクション識別子IDは、トランザクションを識別するための情報である。また、ポインタは、管理情報を保持するための領域を示す変数である。空フラグは、ポインタの示す領域に有効な管理情報が保持されているか否かを示す1ビットの情報である。また、バスシステムには複数のタイムスロットが設定されており、空フラグ、ポインタ、および、管理情報を保持するための領域は、タイムスロットごとに分割されている。タイムスロットの詳細については後述する。
バッファ400は、信号線807を介してリクエスト処理部500から管理情報を受け取った場合、その管理情報を保持する。また、バッファ400は、信号線808を介してリクエスト処理部500からライトイネーブル信号を受け取った場合、または、信号線815を介してリクエスト処理部500からリードイネーブル信号を受け取った場合、空フラグを更新する。ライトイネーブル信号は、空フラグが1つ無効になるように更新することを指示する信号である。リードイネーブル信号は、空フラグが1つ有効になるように更新することを指示する信号である。
リクエスト処理部500は、リクエストに基づいてバッファ400に管理情報を格納するものである。リクエスト処理部500は、相互接続部300からリクエストを受け取った場合、そのリクエストに係るトランザクション識別子IDを示すビット列の一部から複数のタイムスロットのうちのいずれかを特定する。ここで、バスブリッジ200には、一定周期で動作するカウンタなどにより、各リクエストを転送するための複数のタイムスロットのいずれかが周期的に割り当てられる。そして、リクエストに基づいて、それらのタイムスロットのうちのいずれかが特定される。例えば、バスブリッジ200に4つのタイムスロットのいずれかが割り当てられる場合、リクエスト処理部500は、トランザクション識別子IDの下位2ビットによって、それら4つのタイムスロットのうちのいずれかを特定する。そして、リクエスト処理部500は、特定されたタイムスロットが、バスブリッジ200に割り当てられたタイムスロットであるか否かを判断する。特定されたタイムスロットが、割り当てられたタイムスロットでない場合、リクエスト処理部500は、レディ信号をネゲートすることにより、そのリクエストを相互接続部300に転送させない。特定されたタイムスロットが、割り当てられたタイムスロットである場合、リクエスト処理部500は、信号線809を介してバッファ400が保持する空フラグの値を取得し、バッファ400に管理情報を保持させることができるか否かを判断する。
バッファ400に管理情報を保持させることができる場合、リクエスト処理部500は、レディ信号をアサートして相互接続部300に出力する。そして、リクエスト処理部500は、信号線806を介してバッファ400からポインタを取得する。リクエスト処理部500は、リクエストに基づいて管理情報を生成し、信号線807を介してポインタの示す領域に格納し、信号線808を介してバッファ400にライトイネーブル信号を出力する。
バッファ400に管理情報を保持させることができない場合、リクエスト処理部500は、レディ信号をネゲートして相互接続部300に出力する。
レスポンス処理部600は、レスポンスに対応するトランザクション情報をバッファ400から読み出すものである。レスポンスを相互接続部300から受け取った場合、レスポンス処理部600は、信号線813を介してバッファ400からポインタを取得する。レスポンス処理部600は、信号線814を介して、ポインタの示す領域から、そのレスポンスに対応するトランザクション情報を読み出す。また、レスポンス処理部600は、信号線815を介してバッファ400に、リードイネーブル信号を出力する。そして、レスポンス処理部600は、空フラグの更新に基づいてポインタを更新する。ポインタの更新内容の詳細については、後述する。
図8は、本発明の第1の実施の形態における各管理情報の一例を示す図である。各管理情報は、uIDおよびトランザクション情報を含む。
uIDは、トランザクション識別子IDを示すビット列から、タイムスロットを特定するためのビット列(以下、「スロット特定ビット列」と称する)を除いたものである。uIDのビット数は、トランザクション識別子IDのビット数と、スロット特定ビット列のビット数とにより定められる。トランザクション識別子IDのビット数は、バスシステムが許容するトランザクション数の最大値に基づいて定められる。例えば、最大256個のトランザクションが許容される場合、トランザクション識別子IDのビット数は少なくとも8ビットである。スロット特定ビット列のビット数は、タイムスロットの数により定められる。例えば、4個のタイムスロットを設定する場合、スロット特定ビット列のビット数は少なくとも2ビットである。トランザクション識別子IDを8ビットとし、その下位2ビットをスロット特定ビット列とする場合、uIDは、トランザクション識別子IDの上位6ビットである。
トランザクション情報は、レスポンスの転送処理を制御するための情報である。トランザクション情報は、例えば、パッキング実施フラグp、アドレス下位ビットaddr、バースト長len、バーストサイズsize、バーストタイプbtyp、および、バーストカウントbcntを含む。
パッキング実施フラグpは、バスの仕様に基づいてバースト対象のデータをまとめる(パッキング)か否かを示す1ビットの情報である。パッキングは、例えば、バス幅が32ビットのバスからのデータをバス幅が64ビットのバスへ転送する際に実行される。アドレス下位ビットaddrは、アクセス先の下位アドレスを特定するための4ビットの情報である。バースト長lenは、バースト転送のデータ数を示す4ビットの情報である。バーストサイズsizeは、バースト転送の各回における転送サイズを示す3ビットの情報である。バーストタイプbtypは、バースト転送のアドレス計算のタイプを示す2ビットの情報である。バーストカウントbcntは、バースト転送の回数を示す4ビットの情報である。
なお、上述の実施の形態のuIDは、特許請求の範囲に記載の部分ビット列の一例である。
図9は、本発明の第1の実施の形態における相互接続部300の一構成例を示すブロック図である。相互接続部300は、変換情報生成器310および330を備える。
変換情報生成器310は、AXIバス120から受信したリクエストをAXIバス130の仕様に基づき必要に応じて変換するものである。変換情報生成器310は、AXIバス120からリクエストを受信した場合、リクエストに係るハンドシェイク信号を取得し、ハンドシェイク信号およびリクエストをリクエスト処理部500に出力する。そして、変換情報生成器310は、リクエスト処理部500からレディ信号を受け取り、そのレディ信号をAXIバス120へ出力する。リクエストに係るバリッド信号およびレディ信号がアサートされたのであれば、変換情報生成器310は、AXIバス120から受信したリクエストを必要に応じて変換してAXIバス130に出力する。
変換情報生成器330は、AXIバス130から受信したレスポンスをAXIバス120の仕様およびトランザクション情報に基づき必要に応じて変換するものである。変換情報生成器330は、AXIバス130からレスポンスを受信した場合、レスポンスに係るハンドシェイク信号を取得し、ハンドシェイク信号およびレスポンスをレスポンス処理部600に出力する。そして、変換情報生成器330は、そのレスポンスに対応するトランザクション情報をレスポンス処理部600から受け取る。レスポンスに係るバリッド信号およびレディ信号がアサートされたのであれば、変換情報生成器330は、必要に応じてレスポンスを変換してAXIバス120に出力する。例えば、変換情報生成器330は、トランザクション情報の示すバースト転送の方式や転送先のバスのバス幅等に応じて転送データを結合または分割する。
図10は、本発明の第1の実施の形態におけるバッファ400の一構成例を示す図である。バッファ400は、Eレジスタ更新部410、空フラグ保持部420、ポインタ保持部430、および、管理情報保持部440を備える。Eレジスタ更新部410は、Eレジスタ更新回路#0乃至#3を備える。空フラグ保持部420は、Eレジスタ#0乃至#3を備える。ポインタ保持部430は、ポインタテーブル#0乃至#3を備える。管理情報保持部440は、管理テーブル#0乃至#3を備える。Eレジスタ更新回路、Eレジスタ、ポインタテーブル、および、管理テーブルのそれぞれには、互いに異なるタイムスロットが割り当てられている。例えば、4つのタイムスロット#i(iは、0乃至3の整数)が設定される。そして、4組のEレジスタ更新回路#i、Eレジスタ#i、ポインタテーブル#i、および、管理テーブル#iが設けられ、iの値が同一の各組にタイムスロット#iが割り当てられる。
管理テーブル#iは、複数の管理情報を保持するものである。管理テーブル#iは、管理情報を保持するための複数の領域を備える。以下、管理テーブルにおける各領域をエントリと称する。管理テーブル#iのそれぞれが備えるエントリの数の合計は、バスシステムが許容する未解決のトランザクションの最大数以上とされる。例えば、バスシステムが許容する未解決のトランザクションの最大数が16個である場合、4つの管理テーブル#iのそれぞれが4個のエントリを少なくとも備える。
ポインタテーブル#iは、複数のポインタを保持するものである。各ポインタテーブル#iには、対応する管理テーブル#iが備えるエントリの数(例えば、4個)と同一数のポインタが設けられる。ポインタは、対応する管理テーブル#iにおける、管理情報を保持させるべきエントリを示す変数である。各ポインタには、それぞれ異なる値が設定される。
Eレジスタ#iは、複数の空フラグの値を保持するものである。空フラグは、対応するポインタテーブル#iが備えるポインタごとに設けられる。空フラグは、対応するポインタの示すエントリに、有効な管理情報が格納されているか否かを示す1ビットの情報である。ここで、管理情報が有効とは、当該管理情報内のトランザクション情報が読み出す対象としてエントリに格納されている状態である。管理情報が無効とは、当該管理情報内のトランザクション情報が読み出す対象とされていない状態である。より具体的には、管理情報が格納されてから、その管理情報内に対応するレスポンスの転送が解決するまでの間、管理情報は有効となる。有効な管理情報が格納されていないエントリは空いているものとされる。例えば、対応するポインタの示すエントリが空いている場合、空フラグの値に「1」が設定され、そうでない場合、空フラグの値に「0」が設定される。
Eレジスタ更新回路#iは、ライトイネーブル信号およびリードイネーブル信号に基づいて対応するEレジスタ#iが保持する空フラグを更新するものである。Eレジスタ更新回路#iの構成の詳細については、図12を参照して後述する。
なお、上述の実施の形態のポインタは、特許請求の範囲に記載の保持順序情報の一例である。
図11は、本発明の第1の実施の形態におけるEレジスタ更新部410および空フラグ保持部420の一構成例を示すブロック図である。Eレジスタ更新回路#0乃至3には、それぞれ、信号線808−1乃至808−4を介して、リクエスト処理部500からのライトイネーブル信号WE[0]乃至[3]が入力される。ライトイネーブル信号WE[0]乃至[3]は、それぞれ、Eレジスタ更新回路#0乃至3にEレジスタ#0乃至3の更新を指示する1ビットの信号である。また、Eレジスタ更新回路#0乃至3には、それぞれ、信号線815−1乃至815−4を介して、レスポンス処理部600からのリードイネーブル信号RE[0]乃至[3]が入力される。リードイネーブル信号RE[0]乃至[3]は、それぞれ、Eレジスタ更新回路#0乃至3にEレジスタ#0乃至3の更新を指示する1ビットの信号である。例えば、ライトイネーブル信号WE[i]およびリードイネーブル信号RE[i]には、更新を指示する場合に「1」が設定され、そうでない場合に「0」が設定される。この場合、ライトイネーブル信号WE[0]乃至[3]のうちの2つ以上が同時に「1」に設定されることはなく、リードイネーブル信号RE[0]乃至[3]のうちの2つ以上が同時に「1」に設定されることもないものとする。
Eレジスタ#0乃至3は、信号線809−1〜809−4を介してリクエスト処理部500およびレスポンス処理部600に空フラグを出力する。
図12は、本発明の第1の実施の形態におけるEレジスタ更新回路#0およびEレジスタ#0の一構成例を示すブロック図である。Eレジスタ更新回路#0は、無効値出力部411、セレクタ412乃至415と、有効値出力部416と、OR(論理和)ゲート417を備える。Eレジスタ#0は、フリップフロップ421乃至424を備える。
無効値出力部411は、空フラグを無効にする値(例えば、「0」)をセレクタ412へ出力するものである。
セレクタ412乃至415は、ライトイネーブル信号WE[0]の値に応じて、入力値のいずれかを選択するものである。セレクタ412乃至415は、それぞれ2つの入力端子と1つの出力端子とを備える。各セレクタの動作の詳細については、図13を参照して後述する。
有効値出力部416は、空フラグを有効にする値(例えば、「1」)をセレクタ415へ出力するものである。
ORゲート417は、入力値の論理和を出力するものである。ORゲートは、2つの入力端子を備える。一方の入力端子には、リクエスト処理部500からのライトイネーブル信号WE[0]が入力され、他方の入力端子には、レスポンス処理部600からのリードイネーブル信号RE[0]が入力される。ORゲート417は、これらの入力値の論理和をフリップフロップ421乃至424の各イネーブルEN端子に出力する。
フリップフロップ421乃至424は、それぞれ、1つ(すなわち、1ビット)の空フラグの値を保持するものである。各フリップフロップは、イネーブルEN端子の入力値が「1」である場合に、入力端子の入力値により現在値を更新する。また、イネーブルEN端子の入力値が「0」である場合、各フリップフロップは、入力端子の入力値の値に関わらず、現在値を保持する。各フリップフロップは、現在値をリクエスト処理部500およびレスポンス処理部600へ出力する。さらに、フリップフロップ421は、セレクタ413へ現在値を出力する。フリップフロップ422は、セレクタ412およびセレクタ414へ現在値を出力する。フリップフロップ423は、セレクタ413およびセレクタ415へ現在値を出力する。フリップフロップ424は、セレクタ414へ現在値を出力する。
図13(a)は、本発明の第1の実施の形態におけるセレクタ412の動作の一例を示す図である。セレクタ412の一方の入力端子には無効値出力部411の出力が入力され、他方の入力端子には後段のフリップフロップ422の出力が入力される。ライトイネーブル信号WE[0]の値が「1」である場合、セレクタ412は、無効値出力部411の出力を選択する。ライトイネーブル信号WE[0]の値が「0」である場合、セレクタ412は、後段のフリップフロップの出力を選択する。セレクタ412は選択した値をフリップフロップ421へ出力する。
図13(b)は、本発明の第1の実施の形態におけるセレクタ413およびセレクタ414の動作の一例を示す図である。セレクタ413の一方の入力端子には前段のフリップフロップ421の出力が入力され、他方の入力端子には、後段のフリップフロップ423の出力が入力される。また、セレクタ414の一方の入力端子には前段のフリップフロップ422の出力が入力され、他方の入力端子には、後段のフリップフロップ424の出力が入力される。ライトイネーブル信号WE[0]の値が「1」である場合にセレクタ413およびセレクタ414は、前段のフリップフロップの出力を選択する。ライトイネーブル信号WE[0]の値が「0」である場合にセレクタ412は、後段のフリップフロップの出力を選択する。セレクタ413およびセレクタ414は、それぞれ、選択した値をフリップフロップ422および423へ出力する。
図13(c)は、本発明の第1の実施の形態におけるセレクタ415の動作の一例を示す図である。セレクタ415の一方の入力端子には前段のフリップフロップ423の出力が入力され、他方の入力端子には有効値出力部416の出力が入力される。ライトイネーブル信号WE[0]の値が「1」である場合にセレクタ415は、前段のフリップフロップの出力を選択する。ライトイネーブル信号WE[0]の値が「0」である場合にセレクタ415は、有効値出力部416の出力を選択する。セレクタ415は選択した値をフリップフロップ424へ出力する。
このように、Eレジスタ更新回路#0は、「1」の値のライトイネーブル信号WE[0]が入力されるたびに、有効な空フラグ(「1」)のうち、番号が最も若いフリップフロップに保持された空フラグを無効(「0」)に更新する。また、Eレジスタ更新回路#0は、「1」の値のリードイネーブル信号RE[0]が入力されるたびに、無効な空フラグ(「0」)のうち、番号が最も大きいフリップフロップに保持された空フラグを有効(「1」)に更新する。
Eレジスタ更新回路#1乃至3およびEレジスタ#1乃至3の構成は、図12に例示したEレジスタ更新回路#0およびEレジスタ#0の構成と同様である。
図14は、本発明の第1の実施の形態におけるポインタ保持部430および管理情報保持部440の一構成例を示すブロック図である。ポインタテーブル#0乃至3が保持するポインタは、リクエスト処理部500により、信号線806−1乃至806−4を介して読み出される。また、ポインタテーブル#0乃至3が保持するポインタは、レスポンス処理部600により、信号線813−1乃至813−4を介してアクセスされる。
管理テーブル#0乃至3は、それぞれ、信号線807−1乃至807−4を介して、リクエスト処理部500からの管理情報を受け取る。また、管理テーブル#0乃至3が保持する管理情報は、レスポンス処理部600により、信号線814−1乃至814−4を介して読み出される。
図15は、本発明の第1の実施の形態におけるポインタテーブル#0の一構成例を示す図である。ポインタテーブル#0は、ポインタPTR#00、PTR#01、PTR#02、および、PTR#03の4つのポインタを保持する。ポインタPTR#00をポインタの並び順における先頭とし、ポインタPTR#03をポインタの並び順における末尾とする。この並び順に従って、各ポインタの示すエントリに管理情報が保持される。各ポインタは2ビットの変数であり、互いに異なる値が保持される。例えば、先頭から順に、「00」、「11」、「01」、および、「10」のポインタが保持される。この場合、管理テーブル#0において1番目のエントリ、4番目のエントリ、2番目のエントリ、3番目のエントリの順に、管理情報が保持される。ポインタテーブル#1乃至3の構成は、ポインタテーブル#0の構成と同様である。
図16は、本発明の第1の実施の形態における管理テーブル#0の一構成例を示す図である。管理テーブル#0は、エントリENT#00、ENT#01、ENT#02、および、ENT#03の4つのエントリを備える。リクエスト処理部500およびレスポンス処理部600は、管理情報の保持順序に関らず、各エントリに格納された管理情報にビット単位でランダムにアクセス可能である。
ここで、管理情報が保持される場合、空いているエントリを示すポインタのうち、ポインタの並び順における先頭のポインタの示すエントリから順にuIDおよびトランザクション情報(すなわち、管理情報)が保持される。また、管理情報が保持された順にトランザクション情報が読み出される。トランザクション情報が読み出されたエントリは、空の状態となる。
例えば、図15に例示したようにポインタPTR#00乃至03の値が「00」、「11」、「01」、および、「10」であり、図16に例示したように管理テーブル#0においてENT#01およびENT#03のみが空いている状態を想定する。空いているエントリを示すポインタPTR#02および#PTR03のうち、ポインタの並び順における先頭のポインタはPTR#02である。このポインタの示すエントリはエントリENT#01であるため、エントリENT#01に管理情報が保持される。保持された管理情報は、保持された順番に従って読み出される。管理テーブル#1乃至3の構成は、管理テーブル#0の構成と同様である。
図17は、本発明の第1の実施の形態におけるリクエスト処理部500の一構成例を示すブロック図である。リクエスト処理部500は、ライト先決定部510および管理情報登録部560を備える。
ライト先決定部510は、管理情報を保持させる管理テーブルおよびエントリを決定するものである。ライト先決定部510は、リクエストを相互接続部300から受け取った場合、そのリクエストに係るスロット特定ビット列からタイムスロットを特定する。各タイムスロットには、互いに異なるスロット番号が割り当てられているものとする。例えば、ライト先決定部510は、トランザクションIDの下位2ビットをスロット特定ビット列とし、その2ビットからスロット番号を取得してタイムスロットを特定する。ライト先決定部510は、特定したタイムスロットに対応する管理テーブルの空フラグをバッファ400から取得する。
タイムスロット内にリクエストが発行されていない場合、または、全ての空フラグが無効である場合、ライト先決定部510は、レディ信号をネゲートして相互接続部300に出力する。
タイムスロット内にリクエストが発行され、かつ、有効な空フラグが1つ以上ある場合、ライト先決定部510は、バッファ400からポインタを取得する。ライト先決定部510は有効な空フラグに対応するポインタの示すエントリのうちのいずれかを選択する。ライト先決定部510は、選択したエントリを示すライト先エントリインデックスIDX_W[j](jは、0乃至3の整数)を生成する。
ライト先エントリインデックスIDX_W[j]は、選択されたエントリを示す信号である。例えば、管理テーブル内のエントリ数が4つの場合、各エントリに対応させた、それぞれ1ビットのライト先エントリインデックスIDX_W[0]乃至[3]からなる4ビットの情報が生成される。そして、選択されたエントリに対応するビットのみが「1」に設定され、他のビットに「0」が設定される。
ライト先決定部510は、信号線851を介して管理情報登録部560にスロット番号を通知し、信号線852を介して管理情報登録部560にライト先エントリインデックスIDX_W[j]を通知する。また、ライト先決定部510は、スロット番号に基づいてライトイネーブル信号WE[i]を生成してバッファ400へ出力する。
ライトイネーブル信号WE[i]は、いずれかの管理テーブルに対応する空フラグの更新を指示する信号である。例えば、管理テーブルが4つの場合、各管理テーブルに対応させた、それぞれ1ビットのライトイネーブル信号WE[0]乃至[3]からなる4ビットの情報が生成される。そして、特定されたスロット番号が割り当てられた管理テーブルに対応するビットのみが「1」に設定され、他のビットに「0」が設定される。
管理情報登録部560は、管理情報を管理テーブルに登録するものである。管理情報登録部560は、スロット番号およびライト先エントリインデックスIDX_W[j]を受け取った場合、リクエストから管理情報を生成し、スロット番号に対応する管理テーブルを選択する。管理情報登録部560は、選択した管理テーブルにおいてライト先エントリインデックスIDX_W[j]の示すエントリに管理情報を保持させる。
図18は、本発明の第1の実施の形態におけるライト先決定部510の一構成例を示すブロック図である。ライト先決定部510は、スロット番号取得部520と、ワンホットステートカウンタ521と、4つのテーブル空き判断部530と、ライト先エントリ選択部540と、Eレジスタ更新指示部550とを備える。テーブル空き判断部530は、タイムスロットごとに設けられ、それぞれをテーブル空き判断部#0乃至3とする。
スロット番号取得部520は、リクエストに係るトランザクション識別子IDから、タイムスロットのスロット番号を取得するものである。スロット番号取得部520は、取得したスロット番号を各テーブル空き判断部530と、Eレジスタ更新指示部550と、管理情報登録部560とに信号線851を介して通知する。
ワンホットステートカウンタ521は、タイムスロット数と等しいビット数の情報を保持し、タイムスロットが経過するたびに値を計数して計数値に対応するビットのみを有効にするものである。4つのタイムスロットを設定する場合、ワンホットステートカウンタ521は、各タイムスロットに対応するビットからなる4ビットの情報を保持する。そして、ワンホットステートカウンタ521は、タイムスロットが経過するたびに値を計数し、計数値に対応するビットのみを「1」にし、他のビットは「0」にする。ワンホットステートカウンタ521は、保持している4ビットの情報の現在のステートをテーブル空き判断部530のそれぞれに信号線867を介して出力する。
テーブル空き判断部530は、通知されたスロット番号に対応する管理テーブル内のエントリに空きがあるか否かを判断するものである。テーブル空き判断部530は、スロット番号取得部520からのスロット番号とワンホットステートカウンタ521からのステートとを受け取る。テーブル空き判断部530は、スロット番号の示すタイムスロットとステートの示すタイムスロットとが一致するか否かを判断する。一致するのであれば、テーブル空き判断部530は、リクエストに係るタイムスロットにおいて当該リクエストが発行されたと判断し、バッファ400にアクセスして、一致したタイムスロットに対応する管理テーブルの空フラグを取得する。テーブル空き判断部530は、空フラグの値に基づいて、その管理テーブルに空きのエントリがあるか否かを判断する。テーブル空き判断部530は、空きがあるか否かについての判断結果を信号線861乃至864を介してライト先エントリ選択部540へ出力する。
ライト先エントリ選択部540は、空いているエントリのうちのいずれかを選択するものである。ライト先エントリ選択部540は、テーブル空き判断部530から判断結果を受け取る。全ての判断結果において空いているエントリがないと判断された場合、ライト先エントリ選択部540は、レディ信号をネゲートして相互接続部300およびEレジスタ更新指示部550へ出力する。いずれかの判断結果において空いているエントリが1つ以上ある場合、ライト先エントリ選択部540は、レディ信号をアサートして相互接続部300およびEレジスタ更新指示部550へ出力する。Eレジスタ更新指示部550へのレディ信号は信号線865を介して出力される。また、空いているエントリが1つ以上ある場合、ライト先エントリ選択部540は、ポインタを参照して、それらのエントリのうちのいずれかを選択する。例えば、ライト先エントリ選択部540は、ポインタの並び順における先頭から順に高く設定した固定の優先度をポインタごとに設定しておく。ライト先エントリ選択部540は、空いているエントリのうちの優先度の最も高いポインタの示すエントリを選択する。そして、ライト先エントリ選択部540は、エントリの選択に基づいてライト先エントリインデックスIDX_W[j]を生成して管理情報登録部560に通知する。
Eレジスタ更新指示部550は、Eレジスタの更新を指示するものである。Eレジスタ更新指示部550は、スロット番号取得部520からのスロット番号と、相互接続部300からのバリッド信号と、ライト先エントリ選択部540からのレディ信号とを受け取る。バリッド信号およびレディ信号がアサートされている場合、Eレジスタ更新指示部550は、受け取ったスロット番号に対応するEレジスタ#iの更新を指示するライトイネーブル信号WE[i]を生成してバッファ400に出力する。
図19は、本発明の第1の実施の形態におけるテーブル空き判断部530の一構成例を示すブロック図である。テーブル空き判断部530は、スロット番号一致判断部531と、ステート一致判断部532と、AND(論理積)ゲート533乃至537とを備える。
スロット番号一致判断部531は、スロット番号が所定の番号と一致するか否かを判断するものである。管理テーブル#0乃至3に対応するテーブル空き判断部#0乃至3のそれぞれに「0」乃至「3」の番号が予め割り当てられている。スロット番号一致判断部531は、スロット番号取得部520からスロット番号を受け取り、受け取ったスロット番号と予め割り当てられた番号とが一致するか否かを判断する。スロット番号一致判断部531は、判断結果をANDゲート533に出力する。例えば、判断結果において、一致する場合に「1」、一致しない場合に「0」の値が設定される。
ステート一致判断部532は、ワンホットステートカウンタ521のステートと所定のステートとが一致するか否かを判断するものである。管理テーブル#0乃至3に対応するテーブル空き判断部#0乃至3のそれぞれには、2進表記で「1000」、「0100」、「0010」、「0001」のステートが予め割り当てられている。ステート一致判断部532は、ワンホットステートカウンタ521からステートを受け取り、受け取ったステートと、テーブル空き判断部530に予め割り当てられたステートとが一致するか否かを判断する。ステート一致判断部532は、判断結果をANDゲート533に出力する。例えば、判断結果において、一致する場合に「1」、一致しない場合に「0」の値が設定される。
ANDゲート533乃至537は、入力値の論理積を出力するものである。ANDゲート533乃至537は、それぞれ、2つの入力端子を備える。
ANDゲート533の一方の入力端子には、スロット番号一致判断部531による判断結果が入力され、他方の入力端子には、ステート一致判断部532による判断結果が入力される。ANDゲート533は、これらの入力値の論理積をANDゲート534乃至537に出力する。
ANDゲート534乃至537の一方の入力端子には、ANDゲート533の出力が入力され、他方の入力端子には、管理テーブルに対応するEレジスタの各フリップフロップの現在値が入力される。例えば、管理テーブル#0に対応するテーブル空き判断部530において、レジスタ#0におけるフリップフロップ421乃至424の現在値が入力される。ANDゲート534乃至537は、これらの入力値の論理積を判断結果フラグD#i[0]乃至[3]としてライト先エントリ選択部540に出力する。
判断結果フラグD#i[0]乃至[3]は、リクエストに係るスロット特定ビット列の示すタイムスロット#iにおいて当該リクエストが発行され、かつ、管理テーブル#iにおけるエントリ#0乃至3が空いているか否かを示す1ビットの情報である。
図20は、本発明の第1の実施の形態におけるライト先エントリ選択部540の動作の一例を示す図である。ライト先エントリ選択部540は、テーブル空き判断部530から判断結果フラグD#i[j]を受け取る。判断結果フラグD#i[j]の全てが「0」である場合、ライト先エントリ選択部540は、レディ信号をネゲートして出力する。
判断結果フラグD#i[j]のいずれかが「1」である場合、ライト先エントリ選択部540は、レディ信号をアサートして出力する。また、ライト先エントリ選択部540は、ポインタに基づいて、判断結果フラグD#i[j]=1に対応するエントリのうちのいずれかを選択してライト先エントリインデックスWE[j]を生成する。
図21は、本発明の第1の実施の形態におけるEレジスタ更新指示部550の一構成例を示すブロック図である。Eレジスタ更新指示部550は、ANDゲート551と、スロット番号一致判断部552乃至555と、ANDゲート556乃至559とを備える。
ANDゲート551および556乃至559は、入力値の論理積を出力するものである。ANDゲート551および556乃至559は、2つの入力端子を備える。
ANDゲート551の一方の入力端子には、相互接続部300からのバリッド信号が入力され、他方の入力端子には、ライト先エントリ選択部540からのレディ信号が入力される。ANDゲート551は、これらの入力値の論理積をANDゲート556乃至559に出力する。
スロット番号一致判断部552乃至555は、スロット番号が所定の番号と一致するか否かを判断するものである。スロット番号一致判断部552乃至555のそれぞれには、「0」乃至「3」の番号が予め割り当てられている。スロット番号一致判断部552乃至555は、スロット番号取得部520からスロット番号を受け取り、受け取ったスロット番号と予め割り当てられた番号とが一致するか否かを判断する。スロット番号一致判断部552乃至555は、それぞれの判断結果をANDゲート556乃至559に出力する。例えば、判断結果において、一致する場合に「1」、一致しない場合に「0」の値が設定される。
ANDゲート556乃至559の一方の入力端子には、ANDゲート551からの出力が入力され、他方の入力端子にはスロット番号一致判断部552乃至555のそれぞれの判断結果が入力される。ANDゲート556乃至559は、これらの入力値の論理積を、ライトイネーブルWE[0]乃至[3]として信号線808−1乃至808−4を介してバッファ400に出力する。
図22は、本発明の第1の実施の形態におけるレスポンス処理部600の一構成例を示すブロック図である。レスポンス処理部600は、トランザクション情報取得部610と、Eレジスタ更新指示部650と、ポインタ更新部660とを備える。
トランザクション情報取得部610は、レスポンスが返送された場合に、そのレスポンスに対応するトランザクション情報をバッファ400から読み出すものである。トランザクション情報取得部610は、相互接続部300からレスポンスを受け取った場合、そのレスポンスのトランザクション識別子IDからスロット番号とuIDとを取得する。トランザクション情報取得部610は、そのスロット番号をEレジスタ更新指示部650に信号線871を介して通知する。
また、トランザクション情報取得部610は、スロット番号に対応する空フラグ、管理情報、および、ポインタをバッファ400から読み出す。トランザクション情報取得部610は、空フラグ、管理情報、および、ポインタに基づいてリクエストに係るuIDに対応するトランザクション情報をバッファ400から読み出す。トランザクション情報取得部610は、読み出したトランザクション情報を相互接続部300に出力する。
そして、トランザクション情報取得部610は、トランザクション情報を読み出したエントリを示すリード元エントリインデックスIDX_R[j]を生成する。トランザクション情報取得部610は、リード元エントリインデックスIDX_R[j]をポインタ更新部660に信号線872を介して出力する。
リード元エントリインデックスIDX_R[j]は、トランザクション情報が読み出されたエントリを示す信号である。例えば、管理テーブル内のエントリ数が4つの場合、各管理テーブルに対応させた、それぞれ1ビットのリード元エントリインデックスIDX_RRE[0]乃至[3]からなる4ビットの情報が生成される。そして、トランザクション情報が読み出されたエントリに対応するビットのみが「1」に設定され、他のビットに「0」が設定される。
Eレジスタ更新指示部650は、Eレジスタの更新を指示するものである。Eレジスタ更新指示部650は、レスポンスに係るバリッド信号およびレディ信号を相互接続部300から受け取り、スロット番号をトランザクション情報取得部610から受け取る。バリッド信号およびレディ信号がアサートされている場合、Eレジスタ更新指示部650は、受け取ったスロット番号に対応するEレジスタ#iの更新を指示するリードイネーブル信号RE[i]を生成してバッファ400およびポインタ更新部660に出力する。
リードイネーブル信号WE[i]は、いずれかの管理テーブルに対応する空フラグの更新を指示する信号である。例えば、管理テーブルが4つの場合、それぞれ1ビットのリードイネーブル信号RE[0]乃至[3]からなる4ビットの情報が生成される。そして、特定されたスロット番号が割り当てられた管理テーブルに対応するビットのみが「1」に設定され、他のビットに「0」が設定される。
ポインタ更新部660は、Eレジスタ#iの更新に基づいて、対応するポインタテーブル#iを更新するものである。具体的には、ポインタ更新部660は、リードイネーブル信号RE[i]をEレジスタ更新指示部650から受け取る。ポインタ更新部660は、リードイネーブル信号RE[i]に対応する管理テーブルにおいて、有効な管理情報が保持されているエントリが先頭から連続して配列されるように、各ポインタを更新する。
図23は、本発明の第1の実施の形態におけるトランザクション情報取得部610の一構成例を示すブロック図である。トランザクション情報取得部610は、スロット番号取得部611と、uID取得部612と、4つのリード元エントリ選択部620とを備える。
スロット番号取得部611は、レスポンスに係るトランザクション識別子IDから、タイムスロットのスロット番号を取得するものである。スロット番号取得部611は、取得したスロット番号を各リード元エントリ選択部620と、Eレジスタ更新指示部650とに通知する。
uID取得部612は、レスポンスに係るトランザクション識別子IDから、uIDを取得するものである。uID取得部612は、取得したuIDを各リード元エントリ選択部620に通知する。
各リード元エントリ選択部620は、レスポンスに対応するトランザクション情報が格納されたエントリを選択して、そのトランザクション情報を読み出すものである。リード元エントリ選択部620は、読み出したトランザクション情報を相互接続部300に出力し、読み出したエントリを示すリード元エントリインデックスIDX_R[j]をポインタ更新部660に出力する。
図24は、本発明の第1の実施の形態におけるリード元エントリ選択部620の一構成例を示すブロック図である。リード元エントリ選択部620は、スロット番号一致判断部621と、ANDゲート622乃至625と、uID一致判断部626乃至629と、ANDゲート630乃至633とを備える。また、リード元エントリ選択部620は、リード元エントリ選択回路634およびトランザクション情報取得回路635を備える。
スロット番号一致判断部621は、スロット番号が所定の番号と一致するか否かを判断するものである。管理テーブル#0乃至3に対応するリード元エントリ選択部620のそれぞれに「0」乃至「3」の番号が予め割り当てられている。スロット番号一致判断部621は、スロット番号取得部611からスロット番号を受け取り、受け取ったスロット番号と予め割り当てられた番号とが一致するか否かを判断する。スロット番号一致判断部621は、判断結果をANDゲート622乃至625に出力する。例えば、判断結果において、一致する場合に「1」、一致しない場合に「0」の値が設定される。
ANDゲート622乃至625および630乃至633は、入力値の論理積を出力するものである。これらのANDゲートは、2つの入力端子を備える。
ANDゲート622乃至625の一方の入力端子には、スロット番号一致判断部621の判断結果が入力され、それぞれの他方の出力端子には、対応する管理テーブルにおける各フリップフロップに保持された空フラグの値が入力される。ANDゲート622乃至625は、それぞれ、これらの入力値の論理積をANDゲート630乃至633に出力する。
uID一致判断部626乃至629は、リクエストに係るuIDが各エントリに保持されているuIDと一致するか否かを判断するものである。uID一致判断部626乃至629は、uID取得部612からuIDを受け取り、受け取ったuIDが各エントリに保持されているuIDと一致するか否かを判断する。uID一致判断部626乃至629は、判断結果をANDゲート630乃至633に出力する。例えば、判断結果において、一致する場合に「1」、一致しない場合に「0」の値が設定される。
ANDゲート630乃至633の一方の入力端子には、ANDゲート622乃至625の出力が入力され、他方の出力端子には、uID一致判断部626乃至629の判断結果が入力される。ANDゲート630乃至633は、それぞれ、これらの入力値の論理積を判断結果フラグR#i[0]乃至[3]としてリード元エントリ選択回路634に出力する。
判断結果フラグR#i[0]乃至[3]は、管理テーブル#iにおける各エントリに、レスポンスに対応するトランザクション情報が格納されているか否かを示す信号である。レスポンスに係るスロット番号に対応する管理テーブル#iにおいて、レスポンスに係るuIDがエントリ#jに保持されている場合、判断結果フラグR#i[j]に「1」が設定される。そうでない場合に、判断結果フラグR#i[j]に「0」が設定される。
ここで、AXIプロトコルでは、前述したように、マスタがトランザクションを発行する際に、スレーブに対して順序関係を維持することを要求する場合には、同じトランザクション識別子IDを付与することが許容される。このため、トランザクション識別子IDが同じトランザクションが複数回、発行されている場合、2つ以上の判断結果フラグR#i[j]に「1」が設定されることが想定される。
リード元エントリ選択回路634は、トランザクション情報を読み出すエントリを選択するものである。リード元エントリ選択回路634は、ANDゲート630乃至633から判断結果フラグR#i[j]を受け取る。リード元エントリ選択回路634は、判断結果フラグR#i[j]=1に対応するエントリのうちのいずれかを選択する。例えば、リード元エントリ選択回路634は、ポインタごとに固定の優先度を予め設定しておき、判断結果フラグR#i[j]=1に対応するエントリのうち、最も優先度の高いポインタの示すエントリを選択する。リード元エントリ選択回路634は、選択したエントリを示すリード元エントリインデックスIDX_R[j]を生成してトランザクション情報取得回路635およびポインタ更新部660に出力する。
トランザクション情報取得回路635は、リード元エントリ選択回路634からリード元エントリインデックスIDX_R[j]を受け取る。トランザクション情報取得回路635は、バッファ400にアクセスし、リード元エントリインデックスIDX_R[j]の示すエントリからトランザクション情報を読み出して相互接続部300に出力する。
図25は、本発明の第1の実施の形態におけるEレジスタ更新指示部650の一構成例を示すブロック図である。Eレジスタ更新指示部650は、ANDゲート651と、スロット番号一致判断部652乃至655と、ANDゲート656乃至659とを備える。
ANDゲート651および656乃至659は、入力値の論理積を出力するものである。ANDゲート651および656乃至659は、2つの入力端子を備える。
ANDゲート651の各入力端子には、相互接続部300からのバリッド信号およびレディ信号が入力される。ANDゲート651は、これらの入力値の論理積をANDゲート656乃至659に出力する。
スロット番号一致判断部652乃至655は、スロット番号が所定の番号と一致するか否かを判断するものである。スロット番号一致判断部652乃至655のそれぞれには、「0」乃至「3」の番号が予め割り当てられている。スロット番号一致判断部652乃至655は、スロット番号取得部611からスロット番号を受け取り、受け取ったスロット番号と予め割り当てられた番号とが一致するか否かを判断する。スロット番号一致判断部652乃至655は、それぞれの判断結果をANDゲート656乃至659に出力する。例えば、判断結果において、一致する場合に「1」、一致しない場合に「0」の値が設定される。
ANDゲート656乃至659の一方の入力端子には、ANDゲート651からの出力が入力され、他方の入力端子にはスロット番号一致判断部652乃至655のそれぞれの判断結果が入力される。ANDゲート656乃至659は、これらの入力値の論理積を、リードイネーブルRE[0]乃至[3]としてバッファ400に出力する。
[バスブリッジの動作]
図26乃至28を参照してバスブリッジ200の動作について説明する。図26は、本発明の第1の実施の形態におけるバスブリッジ200の動作の一例を示すフローチャートである。この動作は、バスブリッジ200に電源が投入されたときや、バッファ400を初期化するときなどに開始する。
バスブリッジ200は、バッファ400を初期化する(ステップS910)。初期化においては、例えば、バスブリッジ200は、全ての空フラグを「1」にすることにより全ての管理情報を無効にする。また、例えば、バスブリッジ200は、各管理テーブルにおいて、各ポインタの値を先頭から順に「00」、「01」、「10」、および、「11」に設定する。
バスブリッジ200は、マスタからリクエストが発行されたか否かを判断する(ステップS920)。リクエストが発行されたのであれば(ステップS920:Yes)、バスブリッジ200内のリクエスト処理部500は、管理情報を保持するためのリクエスト処理を実行する(ステップS930)。
リクエストが発行されていない場合(ステップS920:No)、または、ステップS950の後、バスブリッジ200は、スレーブからレスポンスが返送されたか否かを判断する(ステップS950)。レスポンスが返送されたのであれば(ステップS950:Yes)、バスブリッジ200内のレスポンス処理部600は、レスポンスに対応するトランザクション情報を読み出すためのレスポンス処理を実行する(ステップS960)。
レスポンスが返送されていない場合(ステップS950:No)、または、ステップS960の後、バスブリッジ200は、ステップS920に戻る。
図27は、本発明の第1の実施の形態におけるリクエスト処理の一例を示すフローチャートである。リクエスト処理部500は、トランザクション識別子IDの下位2ビットと一致するスロット番号の管理テーブルを選択する(ステップS931)。レスポンス処理部600は、リクエストに係るスロット番号の示すタイムスロットが、バスブリッジ200に割り当てられたタイムスロットであるか否かを判断する(ステップS932)。
割り当てられたタイムスロットであれば(ステップS932:Yes)、リクエスト処理部500は、選択した管理テーブルに空きがあるか否かを判断する(ステップS933)。管理テーブルに空きがない場合(ステップS933:No)、または、割り当てられたタイムスロットでない場合(ステップS932:No)、リクエスト処理部500は、レディ信号をネゲートする(ステップS934)。
管理テーブルに空きがあれば(ステップS933:Yes)、リクエスト処理部500は、レディ信号をアサートし、いずれかの空きのエントリを選択する(ステップS935)。リクエスト処理部500は、選択したエントリに管理情報を登録する(ステップS936)。そして、リクエスト処理部500は、選択した管理テーブルに対応する空フラグをバッファ400に更新させる(ステップS937)。
ステップS934、あるいは、ステップS937の後、リクエスト処理部500は、リクエスト処理を終了する。
図28は、本発明の第1の実施の形態におけるレスポンス処理の一例を示すフローチャートである。レスポンス処理部600は、レスポンスに係るトランザクション識別子IDの下位2ビットに基づいて管理テーブルを選択する(ステップS961)。レスポンス処理部600は、選択した管理テーブルにおいて、トランザクション識別子IDの上位6ビットに基づいて、いずれかのエントリを選択する(ステップS962)。レスポンス処理部600は、選択したエントリからトランザクション情報を読み出す(ステップ963)。
レスポンス処理部600は、選択した管理テーブルに対応する空フラグをバッファ400に更新させる(ステップS964)。レスポンス処理部600は、選択した管理テーブルに対応するポインタテーブルを更新する(ステップS965)。ステップS965の後、レスポンス処理部600は、レスポンス処理を終了する。
続いて、図29乃至32を参照して、第1の実施の形態のバスブリッジ200の動作結果の一例について説明する。図29に示すように、マスタ#0からスレーブ#1へリクエストが2回発行され、次にマスタ#1からスレーブ#0へ1回リクエストが発行された場合について想定する。マスタ#0は、トランザクション識別子IDの値を2進表記の「00000100」にしてリクエストを発行したものとする。一方、マスタ#1は、トランザクション識別子IDの値を2進表記の「00001000」にしてリクエストを発行したものとする。これらのリクエストは、トランザクション識別子IDの下位2ビット「00」に対応するタイムスロット内に発行されている。また、バスブリッジ200が、最初のリクエストを受け取った時点においてバッファ400は初期化されている。
これらのリクエストに係るトランザクション識別子IDの下位2ビットは全て「00」であるため、リクエスト処理部500は、管理テーブル#0を選択する。リクエスト処理部500は、マスタ#0からの2回のリクエストと、マスタ#1からの1回のリクエストとに係る管理情報をポインタの並び順に基づいて、エントリENT#00、#01、#02に順に保持させる。図30は、これらの管理情報が保持されたバッファ400の一例を示す図である。マスタ#0が2回発行したトランザクション識別子IDの上位6ビット「000001」がトランザクション情報とともにエントリENT#00および#01に保持されている。また、マスタ#1が1回発行したトランザクション識別子IDの上位6ビット「000010」がトランザクション情報とともにエントリENT#02に保持されている。
管理情報が保持された後、図31に示すようにスレーブ#1からマスタ#0へレスポンスが返送されたものとする。このレスポンスは、マスタ#0が発行したリクエストに対応するものであるため、スレーブ#1は、マスタ#0が発行したリクエストに係るトランザクション識別子IDと同一の「00000100」を発行する。
レスポンス処理部600は、レスポンスに係るトランザクション識別子IDの下位2ビット「00」から管理テーブル#0を選択する。そして、レスポンス処理部600は、レスポンスに係るトランザクション識別子IDの上位6ビット「000001」に対応するトランザクション情報が保持されたエントリENT#00および#01を取得する。レスポンス処理部600は、ポインタの並び順に基づいてエントリ#00を選択し、そのエントリからトランザクション情報を読み出す。この結果、エントリENT#00は空いた状態になる。レスポンス処理部600は、有効な管理情報が保持されたエントリが先頭詰めになるようにポインタテーブルを更新する。この場合、エントリENT#01および#02を先頭に詰めて、空いたエントリ#00は、これらの後に配列されるようにポインタテーブルが更新される。この結果、図32に示すように、ポインタは、先頭から順に「01」、「10」、「00」、および、「11」に更新される。
なお、第1の実施の形態のバスシステムは、AXIプロトコルを使用しているが、スプリットトランザクションを許容するプロトコルであれば、AXIプロトコル以外のプロトコルを使用してもよいのは勿論である。
また、図1においては、AXIバス120にマスタ110が接続され、AXIバス130にスレーブ140が接続される構成を例示したが、モジュールの接続形態は、図1に例示した構成に限定されない。例えば、AXIバス120にマスタに加えてスレーブを接続してもよいし、AXIバス130にスレーブに加えてマスタを接続してもよい。
また、トランザクション識別子IDの下位2ビットをスロット特定ビットとしているが、トランザクション識別子IDの一部であれば、下位2ビット以外の部分をスロット特定ビットとしてもよいのは勿論である。
また、図8において、バースト長やバーストサイズなどをトランザクション情報として保持する構成を例示した。しかし、レスポンスの転送制御に必要な情報であれば、管理テーブルは、図8に例示した情報と異なる情報をトランザクション情報として保持してもよい。
また、リクエスト処理部500およびレスポンス処理部600は、ポインタを参照して、管理情報の保持順序を特定している。しかし、管理情報の保持順序を特定することができる情報であれば、ポインタ以外の情報を使用してもよい。
このように、本発明の第1の実施の形態によれば、リクエスト処理部500は、リクエストに係るスロット特定ビット列から特定されたタイムスロットが、バスブリッジ200に割り当てられたタイムスロットであるか否かを判断する。割り当てられたタイムスロットである場合、レスポンス処理部600は、そのリクエストに係る部分ビット列をトランザクション情報に対応付けて、タイムスロットに対応する管理テーブルに保持させる。この構成においては、管理テーブルの容量の合計は、バスシステムが許容する未解決の転送数の最大値(例えば、16個)の管理情報を保持する分しか必要とされない。このため、バスシステムが許容するトランザクション数の最大値が増大した場合であっても、管理情報の部分ビット列の幅、または、管理テーブルの数を必要に応じて増大するだけで対応することができる。
例えば、許容するトランザクション数の最大値を256個から512個に増やす場合、部分ビット列の幅を6ビットから7ビットに増やすだけで対応することができる。または、エントリ数が2個の管理テーブルを9つ設けることにより対応することができる。管理テーブルの数を増やすときは、管理テーブルのエントリ数の合計が未解決のトランザクション数の最大値(例えば、16個)以上であればよいため、各管理テーブルのエントリ数は削減することができる。したがって、バッファ400のサイズ、すなわち記憶容量の増大を抑制することができる。
また、タイムスロットのそれぞれに対応させた複数の管理テーブルに管理情報を保持するため、管理テーブルは、トランザクション識別子ID全体でなく、部分ビット列を保持すればよい。このため、管理テーブルを1つしか設けない場合よりも、バッファ400の容量を削減することができる。
また、リクエスト処理部500は、タイムスロットにおいてリクエストが発行された場合に管理情報を保持する。このため、多数の管理情報を各管理テーブルに分散して保持させて、いずれかの管理テーブルに管理情報が集中することを防止することができる。
さらに、バスブリッジ200は、ポインタから管理情報の保持順序を特定して、その保持順序に従って管理情報を保持している。このため、リクエストの発行順序に従ってトランザクション情報を読み出すことができる。
<2.第2の実施の形態>
[バスシステムの構成]
次に図33乃至35を参照して本発明の第2の実施の形態のバスブリッジについて説明する。本発明の第2の実施の形態のバスブリッジは、ポインタテーブルの容量を削減した点において、第1の実施の形態のバスブリッジと異なる。以下、第1の実施の形態と異なる部分について説明し、第1の実施の形態と同様の構成については説明を省略する。図33は、本発明の第2の実施の形態におけるバッファ401の一構成例を示す図である。同図において、Eレジスタ更新部410、空フラグ保持部420、管理情報保持部440.および、レスポンス処理部600は省略されている。バッファ401は、ポインタ保持部430の代わりにポインタ保持部710を備える点以外は、第1の実施の形態のバッファ400と同様である。ポインタ保持部710は、ポインタテーブル720−1乃至720−4と、残りエントリ取得部730−1乃至730−4とを備える。
ポインタテーブル720−1乃至720−4は、複数のポインタを保持するものである。残りエントリ取得部730−1乃至730−4は、管理テーブルのエントリのうち、その管理テーブルに対応するポインタの示すエントリに含まれないエントリを取得するものである。リクエスト処理部500は、ポインタテーブルの各ポインタの示す各エントリと、残りエントリ取得部が取得したエントリとを信号線806を介して参照する。図33において省略したレスポンス処理部600も同様に、ポインタテーブルの各ポインタの示す各エントリと、残りエントリ取得部が取得したエントリとを参照する。リクエスト処理部500およびレスポンス処理部600は、これらのポインタおよびエントリを参照することにより、管理テーブルの全てのエントリにアクセスできる。このため、ポインタテーブルには、エントリ数と同じ数のポインタを保持する必要がなくなる。そこで、この第2の実施の形態では、ポインタテーブル720−1乃至720−4は、対応する管理テーブル内のエントリ数より1つ少ない数のポインタしか保持しないように構成する。
図34は、本発明の第2の実施の形態におけるポインタテーブル720−1の一構成例を示す図である。ポインタテーブル720−1には、3つのポインタPTR#00乃至#02を保持する。ポインタテーブル720−2乃至720−4の構成は、ポインタテーブル720−1と同様である。
ここで、第2の実施の形態のバスシステムが許容する未解決のトランザクション数の最大値は、第1の実施の形態と同様に16個であるものとする。この場合、第1の実施の形態と同様に、4つの管理テーブルそれぞれは、4個のエントリを備える必要がある。従って、第1の実施の形態においては、各ポインタテーブルは図15に例示したように4個のポインタを保持する必要があった。これに対して、第2の実施の形態のポインタテーブル720−1乃至720−4は、それぞれ3つしかポインタを保持していない。これは、残りエントリ取得部730−1乃至730−4が、残りのエントリを取得するためである。
図35は、本発明の第2の実施の形態における残りエントリ取得部730−1の一構成例を示す回路図である。残りエントリ取得部730−1は、XOR(排他的論理和)ゲート731乃至734を備える。
XORゲート731乃至734は、入力値の排他的論理和を出力するものである。XORゲート731乃至734は、2つの入力端子を備える。XORゲート731の一方の入力端子にはポインタPTR#01の下位ビットの値が入力され、他方の入力端子にはポインタPTR#02の下位ビットの値が入力される。XORゲート731は、これらの入力値の排他的論理和をXORゲート733へ出力する。
XORゲート732の一方の入力端子にはポインタPTR#01の上位ビットの値が入力され、他方の入力端子にはポインタPTR#02の上位ビットの値が入力される。XORゲート732は、これらの入力値の排他的論理和をXORゲート734へ出力する。
XORゲート733の一方の入力端子にはポインタPTR#00の下位ビットの値が入力され、他方の入力端子にはXORゲート731の出力が入力される。XORゲート733は、これらの入力値の排他的論理和をポインタPTR#03の下位ビットとしてリクエスト処理部500に出力する。
XORゲート734の一方の入力端子にはポインタPTR#00の上位ビットの値が入力され、他方の入力端子にはXORゲート732の出力が入力される。XORゲート734は、これらの入力値の排他的論理和をポインタPTR#03の上位ビットとしてリクエスト処理部500に出力する。残りエントリ取得部730−2乃至730−4の構成は、残りエントリ取得部720−1の構成と同様である。
ポインタテーブルが保持するポインタPTR#00乃至03には、それぞれ異なる値が保持される。このため、PTR#03をポインタテーブルから削減しても、残りエントリ取得部730−1は、ポインタPTR#00乃至02の値のいずれとも異なる値を求めることにより、ポインタPTR#03の示す残りのエントリを取得することができる。
このように、本発明の第2の実施の形態によれば、残りエントリ取得部730−1乃至730−4が、管理テーブルのエントリのうち、ポインタの示すエントリに含まれないエントリを取得する。このため、ポインタテーブルが保持するポインタを1つ削減してポインタテーブルの容量を小さくすることができる。
<3.第3の実施の形態>
[バスシステムの構成]
次に図36乃至38を参照して本発明の第3の実施の形態のバスブリッジについて説明する。本発明の第3の実施の形態のバスブリッジは、管理テーブルの容量を削減した点において、第1の実施の形態のバスブリッジと異なる。以下、第1の実施の形態と異なる部分について説明し、第1の実施の形態と同様の構成については説明を省略する。図36は、本発明の第3の実施の形態における管理テーブル441−1の一構成例を示す図である。管理テーブル441−1は、ENT#03においてuIDを保持するための領域を備えていない点以外は、第1の実施の形態の管理テーブル440−1と同様の構成である。本発明の第3の実施の形態における管理テーブル441−1以外の管理テーブルの構成は、管理テーブル441−1と同様である。
なお、上述の実施の形態のエントリENT#00乃至02は、特許請求の範囲に記載の管理情報保持エントリの一例である。上述の実施の形態のエントリENT#03は、特許請求の範囲に記載のトランザクション情報保持エントリの一例である。
図37は、本発明の第3の実施の形態における管理情報登録部560の動作の一例を示す図である。ライト先エントリインデックスIDX_W[0]乃至[2]のうちのいずれかが「1」であった場合、管理情報登録部560は、ライト先エントリインデックスIDX_W[j]=1に対応するエントリにuIDおよびトランザクション情報を保持させる。ライト先エントリインデックスIDX_W[3]=1であった場合、管理情報登録部560は、エントリENT#03にトランザクション情報を保持させる。
図38は、本発明の第3の実施の形態におけるリード元エントリ選択部641の一構成例を示すブロック図である。リード元エントリ選択部641は、uID一致判断部629の代わりに、インバータ741乃至743およびANDゲート744を備える点において第1の実施の形態のリード元エントリ選択部620と異なる。
インバータ741乃至743は、入力値を反転して出力するものである。インバータ741、742、および、743には、それぞれ、ANDゲート630、631、および、632の出力が入力される。インバータ741乃至743は、入力値を反転してANDゲート744へ出力する。
ANDゲート744は、入力値の論理積を出力するものである。ANDゲート744は、4つの入力端子を備える。ANDゲート744の入力端子のうちの1つにはANDゲート625の出力が入力される。残りの入力端子には、インバータ741乃至743の出力が入力される。ANDゲート744は、これらの入力値の論理積を判断結果フラグR#[3]としてリード元エントリ選択回路634へ出力する。
このように、リード元エントリ選択部641は、エントリ#00乃至#02のいずれかに保持されたuIDとレスポンスに係るuIDとが一致する場合、一致するuIDに対応するトランザクション情報を読み出す。一方、エントリ#00乃至#02のいずれのuIDとも、レスポンスに係るuIDが一致しない場合、リード元エントリ選択部641は、エントリ#03に有効な管理情報が保持されていれば、そのトランザクション情報を読み出す。このように、レスポンス処理部600は、レスポンスに係るuIDと、エントリ#03に対応するuIDとを比較することなく、エントリ#03からトランザクション情報を読み出している。
レスポンスに係るuIDとエントリENT#03に対応するuIDとを比較する必要がない理由について説明する。図1を参照して前述したようにAXIプロトコルにおいて、同じトランザクション内であれば、スレーブは、マスタが発行したトランザクション識別子IDと同一の識別子を発行する。このため、管理テーブルに登録されたトランザクション情報に対応するuID以外のuIDがスレーブにより発行されることはない。従って、バスブリッジ200は、エントリENT#03にuIDを保持しておかなくとも、エントリENT#00乃至#02のいずれのuIDとも一致しないuIDは、残りのエントリENT#03のトランザクション情報に対応するuIDであると判断することができる。このため、エントリENT#03のトランザクション情報の読出しにおいて、レスポンス処理部600は、レスポンスに係るuIDと、エントリENT#03に対応するuIDとを比較する必要がなく、管理テーブルには、uIDを保持させるための領域を設ける必要がない。
このように、本発明の第3の実施の形態によれば、リクエスト処理部500は、エントリENT#00乃至#02が空いていない場合にエントリENT#03にトランザクション情報を保持させる。そして、レスポンス処理部600は、エントリENT#00乃至#02のいずれのuIDとも、レスポンスに係るuIDが一致しない場合、エントリENT#03からトランザクション情報を読み出す。このため、レスポンス処理部600は、レスポンスに係るuIDと、エントリENT#03に対応するuIDとを比較しなくとも、エントリENT#03からトランザクション情報を読み出すことができる。したがって、管理テーブルのエントリENT#03には、uIDを保持させるための領域を設ける必要がなくなる。この結果、管理テーブルの容量を削減することができる。
<4.第4の実施の形態>
[バスシステムの構成]
次に図39乃至43を参照して本発明の第4の実施の形態のバスブリッジについて説明する。本発明の第4の実施の形態のバスブリッジは、管理テーブルに発行順序情報をさらに保持させる点において、第1の実施の形態のバスブリッジと異なる。以下、第1の実施の形態と異なる部分について説明し、第1の実施の形態と同様の構成については説明を省略する。図39は、本発明の第4の実施の形態における各管理情報の一例を示す図である。各管理情報は、発行順序情報をさらに含む点以外は、第1の実施の形態の管理情報と同様である。
発行順序情報は、リクエストの発行順序を特定するための情報である。発行順序情報は、シリアルナンバーSN、先頭フラグF、および、末尾フラグLを含む。シリアルナンバーSNは、リクエストの発行順序を示す管理番号である。シリアルナンバーSNがとりうる値の個数は、管理テーブルの備えるエントリ数以上とされる。例えば、管理テーブルが4つのエントリを備える場合、少なくとも2ビットの情報がシリアルナンバーSNとして設定される。
先頭フラグFは、当該管理情報が管理テーブル内のuIDが同一の管理情報のうちの発行順序における先頭であることを示す1ビットの情報である。例えば、先頭フラグFは、管理情報が先頭である場合に「1」が設定されて有効となり、そうでない場合に「0」が設定されて無効となる。
末尾フラグLは、当該管理情報が管理テーブル内のuIDが同一の管理情報のうちの発行順序における末尾であることを示す1ビットの情報である。例えば、末尾フラグLは、管理情報が末尾である場合に「1」が設定されて有効となり、そうでない場合に「0」が設定されて無効となる。
図40は、本発明の第4の実施の形態におけるバッファ402の一構成例を示す図である。バッファ402は、管理情報保持部440の代わりに管理情報保持部441を備え、ポインタ保持部430を備えない点以外は、第1の実施の形態のバッファ400と同様の構成である。管理情報保持部441は、uIDおよびトランザクション情報に加えて発行順序情報を含む管理情報を保持する。
図41は、本発明の第4の実施の形態におけるリクエスト処理部501の一構成例を示すブロック図である。リクエスト処理部501の構成は、管理情報登録部560の代わりに管理情報登録部561を備える点以外は第1の実施の形態のリクエスト処理部500と同様の構成である。
管理情報登録部561は、発行順序情報をさらに含む管理情報を登録するものである。詳細には、管理情報登録部561は、タイムスロットに対応する管理テーブルに、リクエストに係るuIDと同一のuIDを含む管理情報が保持されているか否かを判断する。そのuIDが保持されていない場合、そのリクエストは、発行順序において先頭かつ末尾のリクエストである。このため、管理情報登録部561は、シリアルナンバーSNに「0」、先頭フラグFおよび末尾フラグLに「1」を設定して管理情報を登録する。リクエストに係るuIDと同一のuIDが保持されている場合、そのリクエストは発行順序において末尾のリクエストである。このため、管理情報登録部561は、保持されていた同じuIDの管理情報のうち、末尾フラグL=1が設定された管理情報からシリアルナンバーSNを取得する。管理情報登録部561は、そのシリアルナンバーSNをインクリメントした値を新しく登録する管理情報に設定し、先頭フラグFに「0」、末尾フラグLに「1」を設定する。そして、管理情報登録部561は、保持されていた同じuIDの管理情報において末尾フラグLを「0」に更新する。
図42は、本発明の第4の実施の形態におけるレスポンス処理部601の一構成例を示すブロック図である。レスポンス処理部601は、トランザクション情報取得部610およびポインタ更新部660の代わりにトランザクション情報取得部642および順序情報更新部661を備える点以外は、第1の実施の形態のレスポンス処理部600と同様である。
トランザクション情報取得部642は、レスポンスに対応するトランザクション情報を取得するものである。トランザクション情報取得部642は、レスポンスに係るスロット特定ビット列に対応する管理テーブルにおいて、レスポンスに係るuIDと一致するuIDを保持するエントリを求める。トランザクション情報取得部642は、求めたエントリのうち、先頭フラグF=1が保持されたエントリからトランザクション情報を読み出す。トランザクション情報取得部642は、そのエントリに保持されたシリアルナンバーSNを先頭ナンバーSN_Fとして信号線876を介して順序情報更新部661に通知する。
順序情報更新部661は、発行順序情報を更新するものである。順序情報更新部661は、相互接続部300からのレスポンスと、トランザクション情報取得部642からの先頭ナンバーSN_FおよびリードイネーブルRE[i]とを受け取る。順序情報更新部661は、リードイネーブルRE[i]の示す管理テーブルを選択する。順序情報更新部661は、その管理テーブルにおいて、リクエストに係るuIDと同一のuIDと、先頭ナンバーSN_Fをインクリメントした番号と同じシリアルナンバーSNが保持されたエントリを求める。順序情報更新部661は、求めたエントリにおいて先頭フラグFを「1」に更新する。
図43は、本発明の第4の実施の形態におけるリード元エントリ選択部643の一構成例を示すブロック図である。リード元エントリ選択部643の構成は、リード元エントリ選択回路634の代わりにリード元エントリ選択回路644を備える点以外は、第1の実施の形態のリード元エントリ選択部620と同様の構成である。
リード元エントリ選択回路644は、トランザクション情報を読み出すエントリを選択するものである。リード元エントリ選択回路644は、R[j]=1のエントリのうち、先頭フラグF=1が保持されたエントリを選択してリード元エントリインデックスIDX_W[j]を生成する。また、リード元エントリ選択回路644は、選択したエントリに保持されたシリアルナンバーSNを先頭ナンバーSN_Fとして順序情報更新部661に通知する。
なお、本発明の第4の実施の形態において、シリアルナンバーSNを順序情報として格納しているが、発行順序に従って増減する番号であればよく、連番(SN)に限定されない。
また、発行順序情報は先頭フラグFおよび末尾フラグLを含むこととしているが、これらの少なくとも一方を含まない構成とすることもできる。
発行順序情報に先頭フラグFを含むが末尾フラグLを含めない構成とする場合、リクエスト処理部501は、先頭フラグFに基づいて末尾の管理情報を取得する。例えば、リクエスト処理部は、先頭フラグF=1の管理情報のシリアルナンバーSNをデクリメントしていき、同一のuIDの管理情報のうち、最初に一致するシリアルナンバーSNの管理情報を末尾として取得する。発行順序情報に末尾フラグLを含むが先頭フラグFを含めない構成とする場合、レスポンス処理部601は、末尾フラグLに基づいて先頭の管理情報を取得する。例えば、レスポンス処理部601は、末尾フラグL=1の管理情報のシリアルナンバーSNをインクリメントしていき、同一のuIDの管理情報のうち、最初に一致するシリアルナンバーSNの管理情報を先頭として取得する。
発行順序情報に先頭フラグFおよび末尾フラグLを含めない構成とする場合、リクエスト処理部501は、リクエストに係るuIDと同一のuIDを保持するエントリのうち、最大のシリアルナンバーSNを保持するエントリを末尾として選択する。また、レスポンス処理部601は、リクエストに係るuIDと同一のuIDを保持するエントリのうち、最小のシリアルナンバーSNを保持するエントリを先頭として選択する。そして、レスポンス処理部601は、トランザクション情報を読み出した後に、レスポンスに係るuIDと同一のuIDを保持する全てのエントリにおいて、シリアルナンバーSNをデクリメントする。
このように、本発明の第4の実施の形態によれば、バスブリッジ200は、発行順序情報をトランザクション情報に対応付けて保持するため、リクエストの発行順序に従って、レスポンスに対応するトランザクション情報を読み出すことができる。
<5.第5の実施の形態>
[バスシステムの構成]
次に図44乃至45を参照して本発明の第5の実施の形態のバスブリッジについて説明する。本発明の第5の実施の形態のバスブリッジは、管理テーブルにネクストエントリNextを保持させる点において、第4の実施の形態のバスブリッジと異なる。以下、第4の実施の形態と異なる部分について説明し、第4の実施の形態と同様の構成については説明を省略する。図44は、本発明の第5の実施の形態における各管理情報の一例を示す図である。各管理情報は、シリアルナンバーSNおよび末尾フラグLの代わりにネクストエントリNextを含む点以外は、第4の実施の形態の管理情報と同様である。
ネクストエントリNextは、発行順序における当該管理情報の次の管理情報が格納されているエントリの位置を示す情報である。発行順序における末尾の管理情報の場合、その管理情報自身を格納したエントリの位置を示す情報がネクストエントリNextとして設定される。ネクストエントリNextのとりうる値の個数は、管理テーブル内のエントリ数以上とされる。例えば、各管理テーブルエントリ数が4個の場合、少なくとも2ビットのネクストエントリNextが設定される。
なお、上述の実施の形態のネクストエントリNextは、特許請求の範囲に記載の次位置情報の一例である。
本発明の第5の実施の形態のリクエスト処理部の構成は、シリアルナンバーSNおよび末尾フラグLの代わりにネクストエントリNextを設定する点以外は、第4の実施の形態のレスポンス処理部501と同様である。なお、第5の実施の形態のリクエスト処理部は、管理情報が末尾であるか否かを、ネクストエントリNextの示すエントリが、その管理情報自身を格納したエントリの位置を示すか否かにより判断する。
図45は、本発明の第5の実施の形態におけるリード元エントリ選択部645の一構成例を示すブロック図である。リード元エントリ選択部645の構成は、リード元エントリ選択回路644の代わりにリード元エントリ選択回路646を備える点以外は、図43に例示した第4の実施の形態のリード元エントリ選択部643と同様の構成である。
リード元エントリ選択回路646は、トランザクション情報を読み出すエントリを選択するものである。リード元エントリ選択回路646は、先頭ナンバーSN_Fの代わりに、選択したエントリに保持されたネクストエントリNextを順序情報更新部662に通知する点以外は、第4の実施の形態のリード元エントリ選択回路644と同様である。
順序情報更新部662は、通知されたネクストエントリNextの示すエントリにおいて、先頭フラグFを「1」に更新するものである。
なお、本発明の第5の実施の形態において、発行順序情報は先頭フラグFを含むこととしているが、先頭フラグFを含まない構成とすることもできる。
先頭フラグFを含めない構成とする場合、レスポンス処理部は、レスポンスに係るuIDと同一のuIDを保持するエントリを全て取得する。レスポンス処理部は、それらのエントリのうち、他のネクストエントリNextにより参照されていないネクストエントリNextが保持されたエントリを先頭として選択する。
このように、本発明の第5の実施の形態によれば、バスブリッジ200は、ネクストエントリNextを設定しておくことにより、リクエストに対応する管理情報のうちの末尾の管理情報を容易に取得することができる。
なお、本発明の実施の形態は本発明を具現化するための一例を示したものであり、本発明の実施の形態において明示したように、本発明の実施の形態における事項と、特許請求の範囲における発明特定事項とはそれぞれ対応関係を有する。同様に、特許請求の範囲における発明特定事項と、これと同一名称を付した本発明の実施の形態における事項とはそれぞれ対応関係を有する。ただし、本発明は実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲において実施の形態に種々の変形を施すことにより具現化することができる。
また、本発明の実施の形態において説明した処理手順は、これら一連の手順を有する方法として捉えてもよく、また、これら一連の手順をコンピュータに実行させるためのプログラム乃至そのプログラムを記憶する記録媒体として捉えてもよい。この記録媒体として、例えば、CD(Compact Disc)、MD(MiniDisc)、DVD(Digital Versatile Disk)、メモリカード、ブルーレイディスク(Blu-ray Disc(登録商標))等を用いることができる。