以下、本発明を実施するための形態(以下、実施の形態と称する)について説明する。説明は以下の順序により行う。
1.第1の実施の形態(FIFOメモリにバッファエントリ番号を保持する例)
2.第2の実施の形態(FIFOメモリをグループごとに設ける例)
3.第3の実施の形態(オーバーフローFIFOを設ける例)
<1.第1の実施の形態>
[バスシステムの構成]
図1は、本発明の第1の実施の形態におけるバスシステムの全体図の一例である。バスシステムは、M台のマスタ110と、AXIバス120および130と、N台のスレーブ140と、バスブリッジ200とを備える。MおよびNは、それぞれ、1以上の整数である。マスタ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ビットが割り当てられる。すなわち、[3:0]の値をiとすると、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、FIFOメモリ群400、バッファ450、トランザクション情報書込部500、エントリ番号書込部550、エントリ番号読出部600、および、トランザクション情報読出部650を備える。
相互接続部300は、リクエストおよびレスポンスをマスタ110およびスレーブ140間で転送するものである。詳細には、AXIバス120から信号線802を介してリクエストを受信した場合、相互接続部300は、信号線801を介してリクエストに係るバリッド信号を取得し、信号線817を介して対応するレディ信号を取得する。以下、バリッド信号およびレディ信号をハンドシェイク信号と称する。リクエストに係るレディ信号およびバリッド信号がアサートされていれば、相互接続部300は、そのリクエストをトランザクション情報書込部500に信号線804を介して出力する。トランザクション情報書込部500から信号線806を介してバッファフル通知を受け取った場合、相互接続部300は、リクエストに係るレディ信号をネゲートし、信号線801を介してAXIバス120へ出力する。ここで、バッファフル通知とは、バッファ450にデータを保持できないことを示す情報である。バッファフル通知を受け取らなかった場合、相互接続部300は、そのリクエストをAXIバス130に信号線818を介して転送する。
また、AXIバス130から信号線819を介してレスポンスを受信した場合、相互接続部300は、信号線817を介してレスポンスに係るバリッド信号を取得し、信号線801を介して対応するレディ信号を取得する。バリッド信号およびレディ信号がアサートされていれば、相互接続部300は、信号線811を介してレスポンスをエントリ番号読出部600およびトランザクション情報読出部650に出力する。そして、相互接続部300は、信号線816を介してトランザクション情報読出部650からレスポンスに対応するトランザクション情報を受け取る。ここで、トランザクション情報は、レスポンスの転送処理を制御するための情報である。トランザクション情報が含む情報の詳細については後述する。相互接続部300は、受け取ったトランザクション情報に基づき、信号線803を介してレスポンスをAXIバス120へ転送する。
FIFOメモリ群400は、先入れ先出し方式でデータを保持するものである。FIFOメモリ群400には、トランザクション識別子IDごとにFIFOメモリが設けられる。各FIFOメモリは、データを保持するための領域を1つ以上備える。以下、この領域をFIFOエントリと称する。各FIFOメモリのFIFOエントリ数は、バスシステムが許容する未解決なトランザクション数の最大値以上とされる。例えば、バスシステムが許容する未解決のトランザクション数の最大値が16個である場合、各FIFOメモリには、少なくとも16個のFIFOエントリが設けられる。また、各FIFOメモリは、データとしてバッファエントリ番号を保持する。ここで、バッファエントリは、バッファ450におけるデータを保持するための領域であり、バッファエントリ番号は、バッファエントリを識別するための番号である。
バッファ450は、トランザクション情報を保持するものである。バッファ450は、1つ以上のバッファエントリを備える。バッファ450に設けられるバッファエントリの数は、バスシステムが許容する未解決なトランザクションの最大値以上とされる。例えば、バスシステムが許容する未解決のトランザクションの最大数が16個である場合、少なくとも16個のバッファエントリが設けられる。各バッファエントリには、有効フラグ保持領域とトランザクション情報保持領域とが設けられる。有効フラグ保持領域には、有効フラグが保持される。有効フラグは、バッファエントリのトランザクション情報保持領域に保持されているデータが有効であることを示すビット情報である。例えば、データが有効である場合に有効フラグに「1」が設定され、無効である場合に「0」が設定される。トランザクション情報保持領域には、トランザクション情報が保持される。
トランザクション情報書込部500は、トランザクション情報をバッファ450に書き込むものである。詳細には、トランザクション情報書込部500は、相互接続部300からリクエストを受け取ると、信号線807を介してバッファ450の各バッファエントリの有効フラグを参照する。有効フラグが全て有効である場合、トランザクション情報書込部500は、バッファフル通知を発行して相互接続部300へ出力する。有効フラグのいずれかが無効である場合、トランザクション情報書込部500は、有効フラグが無効のバッファエントリのうちのいずれかを選択する。トランザクション情報書込部500は、リクエストに基づいてトランザクション情報を生成し、選択したバッファエントリに書き込む。トランザクション情報書込部500は、トランザクション情報を書き込んだバッファエントリの有効フラグを有効にする。また、トランザクション情報書込部500は、選択したバッファエントリ番号とリクエストに係るトランザクション識別子IDとをエントリ番号書込部550へ信号線808および信号線809を介して出力する。
エントリ番号書込部550は、トランザクション情報書込部500によって選択されたバッファエントリ番号を、トランザクション識別子IDに対応するFIFOメモリに信号線810を介して書き込むものである。
エントリ番号読出部600は、トランザクション識別子IDに対応するFIFOメモリからバッファエントリ番号を読み出すものである。詳細には、エントリ番号読出部600は、相互接続部300からレスポンスを受け取ると、そのレスポンスに係るトランザクション識別子IDを取得する。エントリ番号読出部600は、取得したトランザクション識別子IDに対応するFIFOメモリから信号線812を介してバッファエントリ番号を読み出す。エントリ番号読出部600は、読み出したバッファエントリ番号をトランザクション情報読出部650へ信号線813を介して出力する。
トランザクション情報読出部650は、エントリ番号読出部600によって読み出されたバッファエントリ番号のバッファエントリから、トランザクション情報を読み出すものである。詳細には、トランザクション情報読出部650は、エントリ番号読出部600によりバッファエントリ番号が読み出されると、そのバッファエントリ番号のバッファエントリから信号線814を介してトランザクション情報を読み出す。トランザクション情報読出部650は、読み出したトランザクション情報を相互接続部300へ信号線816を介して出力する。レスポンスがバースト転送における最終のデータである場合またはライトレスポンスである場合、トランザクション情報読出部650は、信号線815を介してエントリの有効フラグを無効にする情報をバッファ450へ出力する。レスポンスがバースト転送における最終のデータでない場合、トランザクション情報読出部650は、エントリにおけるトランザクション情報を更新する。例えば、トランザクション情報読出部650は、トランザクション情報におけるバーストカウントをカウントアップする。
なお、上述の実施の形態のFIFOメモリは、特許請求の範囲に記載の先入れ先出しメモリの一例である。上述の実施の形態のエントリ番号書込部は、特許請求の範囲に記載の領域情報書込部の一例であり、エントリ番号読出部は、特許請求の範囲に記載の領域情報読出部の一例である。上述の実施の形態のバッファエントリ番号は、特許請求の範囲に記載の領域情報の一例である。
図8は、本発明の第1の実施の形態における相互接続部300の一構成例を示すブロック図である。相互接続部300は、変換情報生成器310および330を備える。
変換情報生成器310は、AXIバス120から受信したリクエストをAXIバス130の仕様に基づき必要に応じて変換するものである。詳細には、変換情報生成器310は、AXIバス120からリクエストを受信した場合、リクエストに係るハンドシェイク信号を取得する。リクエストに係るバリッド信号およびレディ信号がアサートされたのであれば、変換情報生成器310は、リクエストをトランザクション情報書込部500へ出力する。トランザクション情報書込部500からバッファフル通知を受け取った場合、変換情報生成器310は、レディ信号をネゲートしてAXIバス120へ出力する。トランザクション情報書込部500からバッファフル通知を受け取らなかった場合、変換情報生成器310は、リクエストを必要に応じて変換してAXIバス130に出力する。
変換情報生成器330は、AXIバス130から受信したレスポンスをAXIバス120の仕様およびトランザクション情報に基づき必要に応じて変換するものである。詳細には、変換情報生成器330は、AXIバス130からレスポンスを受信した場合、レスポンスに係るレディ信号およびバリッド信号を取得する。レスポンスに係るバリッド信号およびレディ信号がアサートされたのであれば、変換情報生成器330は、レスポンスをエントリ番号読出部600およびトランザクション情報読出部650に出力する。そして、変換情報生成器330は、そのレスポンスに対応するトランザクション情報をトランザクション情報読出部650から受け取る。変換情報生成器330は、そのトランザクション情報に基づいて、必要に応じてレスポンスを変換してAXIバス120に出力する。例えば、変換情報生成器330は、トランザクション情報の示すバースト転送の方式や転送先のバスのバス幅等に応じて転送データを結合または分割する。
図9は、本発明の第1の実施の形態におけるFIFOメモリ群400の一構成例を示す図である。FIFOメモリ群400には、トランザクション識別子IDごとにFIFOメモリが設けられる。例えば、トランザクション識別子IDが0乃至255である場合、それらの識別子に対応させてF[0]乃至[255]のFIFOメモリが設けられる。
各FIFOメモリは、データ保持領域411、ライトポインタ保持領域412、および、フルフラグ保持領域413を備える。
データ保持領域411には、データを保持するための領域(FIFOエントリ)が1つ以上、設けられる。例えば、バスシステムが許容する未解決のトランザクション数の最大値が16である場合、少なくとも16個のFIFOエントリが設けられる。
ライトポインタ保持領域412は、ライトポインタを保持するための領域である。ライトポインタは、データを書き込むべき領域を示す情報である。図10における矢印は、ライトポインタの示す領域を指している。ライトポインタの初期値は0に設定される。先頭からi番目のFIFOエントリに末尾のデータが保持された場合、先頭からi+1番目を示すライトポインタが設定される。ただし、末尾のFIFOエントリに末尾のデータが保持された場合は、その末尾のFIFOエントリを示すライトポインタが設定される。
フルフラグ保持領域413は、フルフラグを保持するものである。フルフラグは、FIFOメモリにデータを保持できないことを示す1ビットの情報である。例えば、末尾のFIFOエントリにデータが保持されている場合、フルフラグに「1」のデータが設定され、末尾のFIFOエントリにデータが保持されていない場合、フルフラグに「0」が設定される。フルフラグが「0」である場合、ライトポインタの示すFIFOエントリ以降のFIFOエントリに保持されているデータは無効であることを意味する。無効なデータを保持するFIFOエントリは、空になっている状態であるものとする。このため、フルフラグが「1」である場合、全てのデータが有効な状態となっている。
バスブリッジ200のエントリ番号書込部550は、FIFOメモリ群400のうちのトランザクション識別子IDに対応するFIFOメモリにおいてライトポインタの示す領域にバッファエントリ番号を書き込む。書込み時に、そのFIFOメモリのライトポインタが最大値(例えば、15)でない場合、エントリ番号書込部550は、そのライトポインタをインクリメントする。書込み時に、そのFIFOメモリのライトポインタが最大値である場合、エントリ番号書込部550は、フルフラグに「1」を設定する。
例えば、FIFOメモリF[0]においてバッファエントリ番号0が書き込まれた場合、先頭のFIFOエントリにバッファエントリ番号0が保持され、ライトポインタは初期値0から1に更新される。次いで、FIFOメモリF[0]にバッファエントリ番号1が書き込まれた場合、2番目FIFOエントリにバッファエントリ番号1が保持され、ライトポインタは初期値1から2に更新される。
バスブリッジ200のエントリ番号読出部600は、FIFOメモリ群400のうちのトランザクション識別子IDに対応するFIFOメモリにおいて先頭のFIFOエントリからバッファエントリ番号を読み出す。先頭からの読み出しが行われると、エントリ番号読出部600は、そのFIFOメモリにおいて先頭から2番目以降のFIFOエントリに保持されているデータを先頭へ向けて順に1つずつシフトする。この結果、先頭のFIFOエントリに保持されていたデータは削除される。
具体的には、フルフラグが1である場合、エントリ番号読出部600は、そのFIFOメモリにおいて2番目から末尾までのFIFOエントリに保持されていたデータを先頭から末尾の直前までのFIFOエントリに書き込む。そして、エントリ番号読出部600は、フルフラグに「0」を設定する。一方、フルフラグが1である場合、エントリ番号読出部600は、ライトポインタの値をiとして、FIFOメモリにおいて2番目からi−1までのFIFOエントリに保持されていたデータを先頭からi番目までのFIFOエントリに書き込む。このようにして各データをシフトした後、エントリ番号読出部600は、ライトポインタをデクリメントする。
例えば、バッファエントリ番号0および1が書き込まれているFIFOメモリF[0]からデータが読み出される場合、先頭のFIFOエントリからバッファエントリ番号0が読み出される。2番目のFIFOエントリに保持されていたバッファエントリ番号1は先頭のFOFOエントリに書き込まれる。そしてライトポインタは、2から1に更新される。
図10は、本発明の第1の実施の形態におけるバッファ450の各バッファエントリに保持される有効フラグおよびトランザクション情報の一例を示す図である。有効フラグは、有効フラグ保持領域461に保持され、トランザクション情報は、トランザクション情報保持領域462に保持される。トランザクション情報は、例えば、パッキング実施フラグp、アドレス下位ビットaddr、バースト長len、バーストサイズsize、バーストタイプbtyp、および、バーストカウントbcntを含む。
パッキング実施フラグpは、パッキングを実施するか否かを示す1ビットの情報である。パッキングは、バスの仕様に基づいてバースト対象のデータをまとめることである。パッキングは、例えば、バス幅が32ビットのバスからのデータをバス幅が64ビットのバスへ転送する際に実行される。アドレス下位ビットaddrは、アクセス先の下位アドレスを特定するための4ビットの情報である。バースト長lenは、バースト転送のデータ数を示す4ビットの情報である。バーストサイズsizeは、バースト転送の各回における転送サイズを示す3ビットの情報である。バーストタイプbtypは、バースト転送のアドレス計算のタイプを示す2ビットの情報である。バーストカウントbcntは、バースト転送の回数を示す4ビットの情報である。
図11は、本発明の第1の実施の形態におけるバッファ450の一構成例を示す図である。バッファ450は、1つ以上のエントリを備える。例えば、バスシステムが許容する未解決のトランザクション数の最大値が16である場合、少なくとも16個のエントリ#0乃至15が設けられる。各エントリには、有効フラグ保持領域461およびトランザクション情報保持領域462が設けられる。トランザクション情報書込部500およびトランザクション情報読出部650は、各エントリに格納された有効フラグおよびトランザクション情報にビット単位でランダムにアクセス可能である。有効フラグが「0」のエントリは、トランザクション情報が無効であり、空の状態とされる。例えば、エントリ#0、1、および、15のみにトランザクション情報A、B、Cが保持された場合、それらのエントリの有効フラグは「1」に設定される。それ以外のエントリの有効フラグには「0」が設定され、空の状態である。
図12は、本発明の第1の実施の形態におけるトランザクション情報書込部500の一構成例を示すブロック図である。トランザクション情報書込部500は、バッファフル判断部510、エントリ番号選択部520、および、トランザクション情報生成部530を備える。
バッファフル判断部510は、バッファ450にデータを保持できるか否かを判断するものである。具体的には、バッファフル判断部510は、リクエストを相互接続部300から受け取ると、バッファ450の各有効フラグを参照する。全ての有効フラグが有効であれば、バッファフル判断部510は、バッファフル通知を発行して相互接続部300に出力する。
エントリ番号選択部520は、空いているバッファエントリのバッファエントリ番号のうちのいずれかを選択するものである。詳細には、エントリ番号選択部520は、有効フラグが無効のバッファエントリのバッファエントリ番号のうちのいずれかを選択する。例えば、エントリ番号選択部520は、バッファエントリごとに固定の優先度を設定しておき、優先度の最も高いバッファエントリのバッファエントリ番号を選択する。あるいは、エントリ番号選択部520は、最も使用頻度の少ないバッファエントリのバッファエントリ番号を選択する。エントリ番号選択部520は、選択したバッファエントリ番号をトランザクション情報生成部530およびエントリ番号書込部550へ出力する。
トランザクション情報生成部530は、リクエストに基づいてトランザクション情報を生成してバッファ450に書き込むものである。具体的には、相互接続部300からリクエストを受け取ると、トランザクション情報生成部530は、そのリクエストからトランザクション情報を生成する。トランザクション情報生成部530は、エントリ番号選択部520からバッファエントリ番号を受け取り、そのバッファエントリ番号のバッファエントリにトランザクション情報を書き込む。また、トランザクション情報生成部530は、リクエストからトランザクション識別子IDを取得してエントリ番号書込部550へ出力する。
図13は、本発明の第1の実施の形態におけるトランザクション情報読出部650の動作の一例を示す図である。レスポンスがバースト転送における最終のデータでない(例えば、RLAST=0である)場合、トランザクション情報読出部650は、エントリ番号読出部600が読み出したバッファエントリ番号のバッファエントリからトランザクション情報を読み出す。そして、トランザクション情報読出部650は、そのトランザクション情報のバーストカウントを更新する。レスポンスがバースト転送における最終のデータである(例えば、RLAST=1である)場合またはライトレスポンスである場合、トランザクション情報読出部650は、読み出されたバッファエントリ番号のバッファエントリからトランザクション情報を読み出す。そして、トランザクション情報読出部650は、そのトランザクション情報を無効にする。
[バスブリッジの動作]
次に、図14乃至16を参照してバスブリッジ200の動作について説明する。図14は、本発明の第1の実施の形態におけるバスブリッジ200の動作の一例を示すフローチャートである。この動作は、バスブリッジ200に電源が投入されたとき、または、FIFOメモリ群400およびバッファ450を初期化するときに開始する。
バスブリッジ200は、FIFOメモリ群400内の各FIFOメモリとバッファ450とを初期化する(ステップS905)。そして、バスブリッジ200は、リクエストが発行されたか否かを判断する(ステップS910)。リクエストが発行されたのであれば(ステップS910:Yes)、バスブリッジ200は、トランザクション情報をバッファ450に書き込むためのトランザクション情報書込処理を実行する(ステップS920)。バスブリッジ200は、リクエストに係るトランザクション識別子IDに対応するFIFOメモリに対して、トランザクション情報が書き込まれたバッファエントリ番号を書き込む(ステップS930)。
リクエストが発行されていない場合(ステップS910:No)、または、ステップS930の後、バスブリッジ200は、レスポンスが返送されたか否かを判断する(ステップS935)。レスポンスが返送されたのであれば(ステップS935:Yes)、バスブリッジ200は、レスポンスに係るトランザクション識別子IDに対応するFIFOメモリからバッファエントリ番号を読み出す(ステップS940)。バスブリッジ200は、読み出したバッファエントリ番号のバッファエントリからトランザクション情報を読み出すためのトランザクション情報読出処理を実行する(ステップS950)。レスポンスが返送されていない場合(ステップS935:No)、または、ステップS950の後、バスブリッジ200は、ステップS910に戻る。
図15は、本発明の第1の実施の形態におけるトランザクション情報書込処理の一例を示すフローチャートである。トランザクション情報書込部500は、バッファ450において有効フラグV=0の空きのエントリがあるか否かを判断する(ステップS921)。空きのバッファエントリがない場合(ステップS921:No)、トランザクション情報書込部500は、バッファフル通知を発行する(ステップS922)。空きのバッファエントリがある場合(ステップS921:Yes)、トランザクション情報書込部500は、いずれかの空き(有効フラグV=0)のバッファエントリを選択する(ステップS923)。トランザクション情報書込部500は、リクエストに基づいてトランザクション情報を生成し、選択したバッファエントリに書き込む(ステップS924)。相互接続部300は、リクエストをスレーブに転送する(ステップS925)。ステップS922またはS925の後、バスブリッジ200は、トランザクション情報書込処理を終了する。
図16は、本発明の第1の実施の形態におけるトランザクション情報読出処理の一例を示すフローチャートである。トランザクション情報読出部650は、エントリ番号読出部600により読み出されたバッファエントリ番号のバッファエントリからトランザクション情報を読み出す(ステップS951)。トランザクション情報読出部650は、レスポンスがバースト転送における最終のデータまたはライトレスポンスであるか否かを判断する(ステップS952)。
最終のデータまたはライトレスポンスである場合(ステップS952:Yes)、トランザクション情報読出部650は、バッファエントリ内のトランザクション情報を無効にする(ステップS953)。レスポンスが最終のデータでなく、かつ、ライトレスポンスでもない場合(ステップS952:No)、トランザクション情報読出部650は、バッファエントリ内のトランザクション情報においてバーストカウントを更新する(ステップS954)。ステップS953またはS954の後、相互接続部300は、トランザクション情報読出部650が読み出したトランザクション情報に基づいてレスポンスをマスタへ転送する(ステップS955)。ステップS955の後、バスブリッジ200は、トランザクション情報読出処理を終了する。
続いて、図17乃至22を参照してバスブリッジ200の動作結果の一例について説明する。図17は、本発明の第1の実施の形態におけるリクエスト発行時のバスブリッジ200の動作を説明するための図である。AXIバス120にマスタ#1を含むマスタ110が接続され、AXIバス130にスレーブ#2を含むスレーブ140が接続されている構成を想定する。マスタ#1が、スレーブ#2に対して、トランザクション識別子IDに「0」を設定したリクエストを2回発行したものとする。また、リクエスト発行前において、FIFOメモリ群400およびバッファ450は初期化されていたものとする。バスブリッジ200は、このリクエストをスレーブ#2へ転送する。
図18は、本発明の第1の実施の形態におけるリクエスト発行後のバッファ450の状態の一例を示す図である。図17に例示したように2回リクエストが発行されると、トランザクション情報書込部500は、それらのリクエストに基づいてトランザクション情報A,Bを生成し、バッファエントリ#0および#2に書き込む。そして、これらのバッファエントリの有効フラグは「1」に設定される。
図19は、本発明の第1の実施の形態におけるリクエスト発行後のFIFOメモリの状態の一例を示す図である。エントリ番号書込部550は、トランザクション情報書込部500から、トランザクション識別子ID=0と、書き込まれたバッファエントリのバッファエントリ番号0および2とを受け取る。エントリ番号書込部550は、トランザクション識別子ID=0に対応するFIFOメモリF[0]においてライトポインタに基づき、先頭のFIFOエントリと2番目のFIFOエントリとにバッファエントリ番号0および2を書き込む。ライトポインタは、初期値の0から2に更新される。
図20は、本発明の第1の実施の形態におけるレスポンス返送時のバスブリッジ200の動作を説明するための図である。スレーブ#2はマスタ#1に対してトランザクションID=0を設定したレスポンスを返送する。このレスポンスは、バースト転送における最終のデータ(RLAST=1)であるものとする。
図21は、本発明の第1の実施の形態におけるレスポンス返送時のバスブリッジ200の動作を説明するための図である。図19に例示したようにレスポンスが返送されると、エントリ番号読出部600は、そのレスポンスのトランザクション識別子ID=0に対応するFIFOメモリF[0]の先頭のFIFOエントリからバッファエントリ番号0を読み出す。FIFOメモリF[0]内の2番目のFIFOエントリに保持されていたバッファエントリ番号2は、シフトされて先頭のFIFOエントリに書き込まれる。また、ライトポインタは2から1に更新される。
図22は、本発明の第1の実施の形態におけるレスポンス返送後のバッファ450の状態の一例を示す図である。トランザクション情報読出部650は、読み出されたバッファエントリ番号0のバッファエントリに保持されていたトランザクション情報Aを読み出す。また、バッファエントリ番号0のバッファエントリの有効フラグは「0」に設定される。
このように、本発明の第1の実施の形態では、リクエストが発行されると、トランザクション情報書込部500がトランザクション情報をバッファ450内のいずれかのバッファエントリに書き込む。エントリ番号書込部550は、そのバッファエントリのバッファエントリ番号をトランザクション識別子IDに対応するFIFOメモリに書き込んでおく。そして、レスポンスが返送されると、エントリ番号読出部600は、トランザクション識別子IDに対応するFIFOメモリからバッファエントリ番号を読み出す。これにより、トランザクション情報読出部650は、そのバッファエントリ番号のバッファエントリからトランザクション情報を読み出すことができる。
この構成によれば、各FIFOメモリには、バッファエントリ番号を保持する領域を設けるだけで済むため、FIFOメモリにトランザクション情報を保持する場合と比較してFIFOメモリの記憶容量が小さくなる。すなわち、トランザクション数の最大値を増大する場合、バッファエントリ番号を保持するFIFOメモリを追加すればよいため、トランザクション情報を保持するFIFOメモリを追加する場合と比較して記憶容量の増大を抑えることができる。
なお、第1の実施の形態のバスシステムは、AXIプロトコルを使用しているが、スプリットトランザクションを許容するプロトコルであれば、AXIプロトコル以外のプロトコルを使用してもよい。
また、スプリットトランザクションを許容するインターコネクトであれば、バスブリッジ以外のインターコネクトに本発明を適用することができる。
また、図1においては、AXIバス120にマスタ110が接続され、AXIバス130にスレーブ140が接続される構成を例示したが、モジュールの接続形態は、図1に例示した構成に限定されない。例えば、AXIバス120にマスタに加えてスレーブを接続してもよいし、AXIバス130にスレーブに加えてマスタを接続してもよい。
また、図8において、トランザクション情報を例示したが、レスポンスの転送制御に必要な情報であれば、バッファ450は、図8に例示した情報と異なる情報をトランザクション情報として保持してもよい。
また、図10においてFIFOメモリごとにライトポインタおよびフルフラグを設ける構成を例示したが、先入れ先出し方式によりデータが保持されるものであれば、FIFOメモリは、図10に例示した構成に限定されない。例えば、リングバッファを使用するFIFOメモリであってもよい。
<2.第2の実施の形態>
[バスブリッジの構成]
次に図23乃至29を参照して、本発明の第2の実施の形態について説明する。第2の実施の形態のバスブリッジ201は、トランザクション識別子IDごとにFIFOメモリを備えるのでなく、グループ識別子ごとにFIFOメモリを備える点において第1の実施の形態のバスブリッジ200と異なる。グループ識別子は、トランザクションが属するグループを識別するための識別子である。例えば、トランザクション識別子IDが7ビットの場合、その上位5ビットであるgIDがグループ識別子として用いられる。
バスブリッジ201は、相互接続部301、FIFOメモリ群401、バッファ451、管理情報書込部501、エントリ番号書込部551、エントリ番号読出部601、および、管理情報読出部651を備える。
相互接続部301の構成は、トランザクション識別子を受け取り、リクエストおよびレスポンスにおいて受け取ったトランザクション識別子を設定する点以外は、第1の実施の形態の相互接続部300と同様の構成である。詳細には、相互接続部301は、リクエストが発行された場合、管理情報書込部501から信号線821を介してトランザクション識別子ID'をさらに受け取る。このトランザクション識別子ID'は、リクエストに係るトランザクション識別子IDにおいてグループ識別子以外のビット列に所定値(例えば、10進表記で「0」の値)が設定されたものである。例えば、7ビットのトランザクション識別子IDの上位5ビットをグループ識別子とする場合、下位2ビットに2進表記で「00」の値が設定されたものがトランザクション識別子ID'とされる。相互接続部301は、トランザクション識別子ID'をリクエストに設定してスレーブ140へ転送する。
また、相互接続部301は、レスポンスが返送された場合、管理情報読出部651から、信号線825を介してトランザクション識別子IDをさらに受け取る。相互接続部301は、そのトランザクション識別子IDをレスポンスに設定してマスタ110へ転送する。前述したように、リクエストにトランザクション識別子ID'が設定された場合、そのリクエストに対応するレスポンスには、スレーブ140により、同様にトランザクション識別子ID'が設定される。レスポンスに係るトランザクション識別子ID'を相互接続部301が元のトランザクション識別子IDに置き換えることにより、マスタ110は、自身が発行したリクエストに対応するレスポンスを受信することができる。
FIFOメモリ群401には、グループ識別子gIDごとにFIFOメモリが設けられる。各FIFOメモリの構成は、第1の実施の形態のFIFOメモリの構成と同様である。
バッファ451の構成は、トランザクション情報の代わりに管理情報を保持する点以外は第1の実施の形態のバッファ450の構成と同様である。管理情報は、トランザクション識別子IDからgIDを除いたビット列である部分ビット列idとトランザクション情報とを含む情報である。
管理情報書込部501の構成は、トランザクション情報の代わりに管理情報をバッファ451に書き込む点以外は、第1の実施の形態のトランザクション情報書込部500の構成と同様である。詳細には、管理情報書込部501は、リクエストを相互接続部301から受け取った場合、リクエストに係るトランザクション識別子IDの上位のビット列であるgIDをグループ識別子として取得する。管理情報書込部501は、トランザクション識別子IDにおいてグループ識別子以外のビット列を所定値に固定した識別子ID'を相互接続部301へ出力する。以下、このように、トランザクション識別子を置き換えることを「リネーム」と称する。そして、管理情報書込部501は、トランザクション識別子IDからgIDを除いた部分ビット列idを取得する。管理情報書込部501は、部分ビット列idおよびトランザクション情報を管理情報としてバッファ450に書き込む。部分ビット列idは、信号線822を介して出力される。また、管理情報書込部501は、トランザクション識別子IDの代わりにグループ識別子gIDをエントリ番号書込部551に信号線823を介して出力する。
エントリ番号書込部551は、グループ識別子gIDに対応するFIFOメモリにバッファエントリ番号を書き込むものである。
エントリ番号読出部601は、レスポンスに係るグループ識別子gIDに対応するFIFOメモリからバッファエントリ番号を読み出すものである。
管理情報読出部651の構成は、トランザクション情報の代わりに管理情報をバッファ451から読み出す点以外は、第1の実施の形態のトランザクション情報読出部650の構成と同様である。詳細には、管理情報読出部651は、レスポンスを相互接続部301から受け取った場合、エントリ番号読出部601により読み出されたバッファエントリ番号のバッファエントリから管理情報を読み出す。管理情報における部分ビット列idは、信号線824を介して読み出される。管理情報読出部651は、レスポンスに係るトランザクション識別子ID'においてグループ識別子gID以外のビット列を、読み出した部分ビット列idに置き換える(すなわち、リネームする)ことにより、トランザクション識別子IDを生成する。管理情報読出部651は、生成したトランザクション識別子IDを相互接続部301に信号線825を介して出力する。
図24は、本発明の第2の実施の形態におけるFIFOメモリ群401の一構成例を示す図である。FIFOメモリ群401には、グループ識別子gIDごとにFIFOメモリが設けられる。例えば、グループ識別子gIDがトランザクション識別子の上位5ビットである場合、64個のFIFOメモリF[0]乃至[63]が設けられる。
図25は、本発明の第2の実施の形態における有効フラグおよび管理情報の一例を示す図である。各バッファエントリには、有効フラグ保持領域461と管理情報保持領域463とが設けられる。有効フラグ保持領域461に保持される有効フラグは、管理情報が有効であるか否かを示す。管理情報保持領域463は、管理情報を保持するための領域である。管理情報は、部分ビット列idとトランザクション情報とを含む。
図26は、本発明の第2の実施の形態におけるバッファ451の一構成例を示す図である。有効フラグが「0」のバッファエントリにおける管理情報は無効とされ、有効フラグが「1」のバッファエントリにおける管理情報は無効とされる。例えば、バッファエントリ#0、1、および、15のみに管理情報が保持された場合、それらのバッファエントリの有効フラグは「1」に設定され、他のバッファエントリの有効フラグは「0」に設定される。
図27は、本発明の第2の実施の形態におけるバスブリッジ201の動作の一例を示すフローチャートである。この動作は、ステップS920、S930、S940、および、S950の代わりにステップS960、S931、S941、および、S970を実行する点以外は、第1の実施の形態のバスブリッジ200の動作と同様である。
リクエストが発行された場合(ステップS910:Yes)、バスブリッジ201は、管理情報をバッファエントリのいずれかに書き込むための管理情報書込処理を実行する(ステップS960)。バスブリッジ201は、リクエストに係るgIDに対応するFIFOメモリに、管理情報が書き込まれたバッファエントリのバッファエントリ番号を書き込む(ステップS931)。
レスポンスが返送された場合(ステップS935:Yes)、バスブリッジ201は、リクエストに係るgIDに対応するFIFOメモリからバッファエントリ番号を読み出す(ステップS941)。バスブリッジ201は、バッファエントリ番号の示すバッファエントリから管理情報を読み出すための管理情報読出処理を実行する(ステップS970)。
図28は、本発明の第2の実施の形態における管理情報書込処理の一構成例を示すブロック図である。この管理情報書込処理は、ステップS924の代わりにステップS961およびS962を実行する点以外は、第1の実施の形態におけるトランザクション情報書込処理と同様である。
管理情報書込部501は、いずれかの有効フラグV=0の空きのバッファエントリを選択し(ステップS923)、そのバッファエントリに管理情報を書き込む(ステップS961)。管理情報書込部501は、リクエストに係るトランザクション識別子IDをトランザクション識別子ID'にリネームする。トランザクション識別子ID'は、例えば、トランザクション識別子IDからgIDを除いたビット列(例えば、下位2ビット)を所定値(例えば、2進表記で「00」)に固定したものである(ステップS962)。
図29は、本発明の第2の実施の形態における管理情報読出処理の一例を示すフローチャートである。この管理情報読出処理は、ステップS951およびS953の代わりにステップS971、S972、および、S973を実行する点以外は、第1の実施の形態におけるトランザクション情報読出処理と同様である。
管理情報読出部651は、エントリ番号読出部601により読み出されたバッファエントリ番号のバッファエントリから管理情報を読み出す(ステップS971)。
レスポンスが最終のデータまたはライトレスポンスである場合(ステップS952)、管理情報読出部651は、バッファエントリ内の管理情報を無効にする(ステップS972)。ステップS972またはS954の後、管理情報読出部651は、レスポンスに係るトランザクションID'をIDにリネームする(ステップS973)。
このように、本発明の第2の実施の形態では、リクエストが発行されると、管理情報書込部501が管理情報をバッファ451内のいずれかのバッファエントリに書き込む。エントリ番号書込部551は、そのバッファエントリのバッファエントリ番号をグループ識別子gIDに対応するFIFOメモリに書き込んでおく。そして、レスポンスが返送されると、エントリ番号読出部601は、グループ識別子gIDに対応するFIFOメモリからバッファエントリ番号を読み出す。これにより、管理情報読出部651は、そのバッファエントリ番号のバッファエントリから管理情報を読み出すことができる。
この構成によれば、FIFOメモリをグループごとに設けるため、FIFOメモリをトランザクション識別子ごとに設ける場合と比較して、FIFOメモリの記憶容量の合計は、さらに小さくなる。
また、管理情報書込部501は、リクエストに係るトランザクション識別子IDから部分ビット列idを除いている。このため、スレーブ140は、部分ビット列idが除かれたグループ識別子gIDが設定されたリクエストを受信する。この結果、複数の異なるトランザクション識別子IDが、同じ値のグループ識別子gIDに置き換えられる。前述したように、AXIバスプロトコルにおいては、トランザクション識別子が同じトランザクション間では、順序性が保証される。したがって、グループ識別子への置換えにより、同一のグループ識別子が割り当てられた各レスポンスは、リクエストの発行順に返送されることになる。よって、FIFOメモリの記憶容量を削減しても、順序性が維持される。
さらに、管理情報読出部651は、部分ビット列idとグループ識別子gIDとからトランザクション識別子IDを生成している。このため、マスタ110は、自身が発行したリクエストに対応するレスポンスを受信することができる。
なお、グループ識別子をトランザクション識別子の上位5ビットとしているが、グループ識別子は、トランザクション識別子の一部のビット列であれば、上位5ビットに限定されない。
<3.第3の実施の形態>
[バスブリッジの構成]
次に図30乃至34を参照して、本発明の第3の実施の形態について説明する。第3の実施の形態のバスブリッジ202は、FIFOメモリのFIFOエントリ数を削減してオーバーフローFIFOメモリをさらに設けた点において第1の実施の形態のバスブリッジ200と異なる。具体的には、バスブリッジ202は、FIFOメモリ群400、エントリ番号書込部550、および、エントリ番号読出部600の代わりに、FIFOメモリ群402、エントリ番号書込部552、および、エントリ番号読出部602を備える。
FIFOメモリ群402には、トランザクション識別子IDごとにFIFOメモリが設けられる。各FIFOメモリの構成は、第1の実施の形態のFIFOメモリと同様である。ただし、FIFOメモリ群402における各FIFOメモリのFIFOエントリ数は、第1の実施の形態のFIFOメモリのFIFOエントリ数より少ない。具体的には、各FIFOメモリのFIFOエントリ数は、未解決なトランザクション数の最大値の半分以上の数とされる。例えば、未解決なトランザクション数の最大値が16である場合、FIFOメモリのFIFOエントリは、少なくとも8個とされる。各FIFOメモリの記憶容量を最小にするため、FIFOメモリのFIFOエントリの数は、未解決なトランザクション数の最大値の半分にするのが望ましい。
各FIFOメモリのFIFOエントリ数を未解決なトランザクション数の最大値の半分未満とすると、2つ以上のFIFOメモリから溢れたデータがオーバーフローFIFOメモリに保持される状態が生じうる。例えば、未解決なトランザクション数の最大値を16とし、各FIFOメモリのFIFOエントリを7個とした場合、未解決なトランザクションに係るバッファエントリ番号が2つのFIFOメモリに8個ずつ書き込まれることがある。この場合、これらの各FIFOメモリから溢れたデータがオーバーフローFIFOメモリに保持されることとなる。しかし、オーバーフローFIFOは、FIFOメモリに対応するトランザクション識別子IDを保持しない。このため、エントリ番号読出部602は、保持されているデータが、いずれのFIFOメモリから溢れたデータなのか判断できなくなってしまう。これに対して、各FIFOメモリのFIFOエントリ数を未解決なトランザクション数の最大値の半分以上とすると、2つ以上のFIFOメモリから溢れたデータがオーバーフローFIFOメモリに保持されることがなくなる。したがって、FIFOメモリが複数であっても、必要なオーバーフローFIFOメモリは1つで済む。
また、FIFOメモリ群402には、オーバーフローFIFOメモリが設けられる。オーバーフローFIFOメモリは、トランザクション識別子ごとに設けられたFIFOメモリから溢れたデータを保持するものである。オーバーフローFIFOメモリのFIFOエントリ数は、未解決なトランザクション数の最大値とFIFOメモリのFIFOエントリ数との差分である。例えば、未解決なトランザクション数の最大値が16個であり、FIFOメモリのFIFOエントリ数を8個とする場合、オーバーフローFIFOメモリのFIFOエントリ数は8個とされる。このオーバーフローFIFOには、オーバーフローFIFOにデータが保持されていないことを示す空フラグを保持する領域が設けられる。例えば、オーバーフローFIFOにデータが保持されていない場合に空フラグに「1」が設定され、1つ以上のデータが保持されている場合に「0」が設定される。
エントリ番号書込部552の構成は、FIFOメモリからデータが溢れる場合に、オーバーフローFIFOメモリにデータを書き込む点以外は、第1の実施の形態のエントリ番号書込部550と同様の構成である。具体的には、トランザクション識別子IDに対応するFIFOのフルフラグが「1」であれば、エントリ番号書込部552は、オーバーフローFIFOメモリにバッファエントリ番号を書き込む。
エントリ番号読出部602の構成は、FIFOまたはオーバーフローFIFOからバッファエントリ番号を読み出す点以外は第1の実施の形態のエントリ番号読出部600と同様の構成である。具体的には、トランザクション識別子IDに対応するFIFOのフルフラグが「1」であり、かつ、空フラグが「0」である場合、エントリ番号読出部602オーバーフローFIFOからバッファエントリ番号を読み出す。トランザクション識別子IDに対応するFIFOのフルフラグが「0」または空フラグが「1」である場合、トランザクション識別子IDに対応するFIFOからバッファエントリ番号を読み出す。
図31は、本発明の第3の実施の形態におけるFIFOメモリ群402の一構成例を示す図である。FIFOメモリ群402には、トランザクション識別子ごとにFIFOメモリが設けられる。また、オーバーフローFIFOメモリOvF1が設けられる。
オーバーフローFIFOメモリOvF1は、データ保持領域421、末尾ポインタ保持領域422、および、空フラグ保持領域423を備える。データ保持領域421は、トランザクションごとのFIFOメモリのデータ保持領域411と同様である。末尾ポインタ保持領域422は、末尾ポインタを保持する領域である。末尾ポインタは、末尾のデータが保持されているFIFOエントリを示す情報である。空フラグ保持領域423は、空フラグを保持するものである。
エントリ番号書込部552は、書込み時に空フラグが「1」である場合、空フラグに「0」を設定して、先頭のFIFOエントリにバッファエントリ番号を書き込む。書込み時に空フラグが「0」である場合、エントリ番号書込部552は、末尾ポインタの直前のFIFOエントリにバッファエントリ番号を書き込み、末尾ポインタをインクリメントする。
エントリ番号読出部602は、オーバーフローFIFOにおいて、先頭のFIFOエントリからバッファエントリ番号を読み出す。エントリ番号読出部602は、そのFIFOメモリにおいて2番目以降のFIFOエントリに保持されている各データを先頭へ1つずつシフトする。そして、読出時に末尾ポインタが最小値でない場合、エントリ番号読出部602は、末尾ポインタをデクリメントする。読出時に末尾ポインタが最小値である場合、エントリ番号読出部602は、空フラグに「1」を設定する。
なお、上述のオーバーフローFIFOメモリOvF1は、特許請求の範囲に記載の溢れ先入れ先出しメモリの一例である。
[バスブリッジの動作]
次に、図32乃至34を参照してバスブリッジ202の動作について説明する。この動作は、ステップS930およびS940の代わりにステップS980およびS990を実行する点以外は、第1の実施の形態のバスブリッジ200の動作と同様である。
リクエストが発行された場合(ステップS910:Yes)、バスブリッジ202は、トランザクション情報書込処理を実行し(ステップS920)、バッファエントリ番号をFIFOメモリに書き込むためのエントリ番号書込処理を実行する(ステップS980)。
レスポンスが返送された場合(ステップS935:Yes)、バスブリッジ202は、バッファエントリ番号をFIFOメモリから読み出すためのエントリ番号書込処理を実行し(ステップS990)、トランザクション情報読出処理を実行する(ステップS950)。
図33は、本発明の第3の実施の形態におけるエントリ番号書込処理の一例を示すフローチャートである。エントリ番号書込部552は、トランザクション識別子IDに対応するFIFOメモリのフルフラグが「0」であるか否かを判断する(ステップS981)。フルフラグが「0」である場合(ステップS981:Yes)、エントリ番号書込部552は、そのFIFOメモリにバッファエントリ番号を書き込む(ステップS982)。エントリ番号書込部552は、ライトポインタを参照して、そのFIFOメモリが満杯であるか否かを判断する(ステップS983)。満杯であれば(ステップS983:Yes)、エントリ番号書込部552は、そのFIFOメモリのフルフラグに「1」にセットする(ステップS984)。
トランザクション識別子IDに対応するFIFOメモリのフルフラグが「1」である場合(ステップS981:No)、エントリ番号書込部552は、オーバーフローFIFOメモリの空フラグが「1」であるか否かを判断する(ステップS985)。空フラグが「1」であれば(ステップS985:Yes)、エントリ番号書込部552は、空フラグに「0」をセットする(ステップS986)。空フラグが「0」である場合(ステップS985:No)、またはステップS986の後、エントリ番号書込部552は、オーバーフローFIFOメモリにバッファエントリ番号を書き込む(ステップS987)。
トランザクション識別子IDに対応するFIFOメモリが満杯でない場合(ステップS983:No)、または、ステップS984、もしくは、ステップS987の後、エントリ番号書込部552は、エントリ番号書込処理を終了する。
図34は、本発明の第3の実施の形態におけるエントリ番号書読出処理の一例を示すフローチャートである。エントリ番号読出部602は、トランザクション識別子IDに対応するFIFOメモリのフルフラグが「0」であるか否かを判断する(ステップS991)。フルフラグが「0」であれば(ステップS991:Yes)、エントリ番号読出部602は、そのFIFOメモリからバッファエントリ番号を読み出す(ステップS992)。
フルフラグが「1」である場合(ステップS991:No)、エントリ番号読出部602は、オーバーフローFIFOメモリの空フラグが「0」であるか否かを判断する(ステップS993)。空フラグが「1」である場合(ステップS993:No)、エントリ番号読出部602は、トランザクション識別子IDに対応するFIFOメモリからバッファエントリ番号を読み出す(ステップS994)。そして、エントリ番号読出部602は、そのFIFOメモリのフルフラグに「0」をセットする(ステップS995)。
空フラグが「0」である場合(ステップS993:Yes)、エントリ番号読出部602は、オーバーフローFIFOメモリからバッファエントリ番号を読み出す(ステップS996)。エントリ番号読出部602は、末尾ポインタを参照してオーバーフローFIFOメモリが空になったか否かを判断する(ステップS997)。オーバーフローFIFOメモリが空になったのであれば(ステップS997:Yes)、エントリ番号読出部602は、空フラグを「1」にセットする(ステップS998)。
オーバーフローFIFOメモリが空になったのでない場合(ステップS997:No)、または、ステップS992、S995、もしくは、S998の後、エントリ番号読出部602は、エントリ番号読出処理を終了する。
このように、本発明の第3の実施の形態によれば、バスブリッジ202は、FIFOメモリからデータが溢れる場合にオーバーフローFIFOメモリにデータを保持することにより、FIFOメモリの記憶容量をさらに小さくすることができる。具体的には、各FIFOメモリのFIFOエントリ数を、オーバーフローFIFOメモリのFIFOエントリ数の分、削減することができる。
また、バスブリッジ202は、各FIFOメモリにフルフラグを設定しておくため、フルフラグを参照することにより、FIFOメモリからデータが溢れるか否かを容易に判断することができる。
また、バスブリッジ202は、オーバーフローFIFOメモリに空フラグを設定しておくため、空フラグを参照することにより、レスポンスに係るバッファエントリ番号がオーバーフローFIFOメモリに保持されているか否かを容易に判断することができる。
さらに、FIFOメモリのFIFOエントリ数は、未解決の最大のトランザクション数の最大値の半分以上としている。このため、2つ以上のFIFOメモリから溢れたデータがオーバーフローFIFOメモリに保持されることがなくなる。したがってFIFOメモリが複数であっても、必要なオーバーフローFIFOメモリは1つで済む。
なお、本発明の実施の形態は本発明を具現化するための一例を示したものであり、本発明の実施の形態において明示したように、本発明の実施の形態における事項と、特許請求の範囲における発明特定事項とはそれぞれ対応関係を有する。同様に、特許請求の範囲における発明特定事項と、これと同一名称を付した本発明の実施の形態における事項とはそれぞれ対応関係を有する。ただし、本発明は実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲において実施の形態に種々の変形を施すことにより具現化することができる。