(57)【要約】【課題】より効率的なバスアクセスを可能とする制御技術を提供する。【解決手段】第１のプロトコルでバスにアクセスする情報処理装置は、外部装置から受信した第２のプロトコルによる第２のアクセス要求を、第１のプロトコルによる第１のアクセス要求に変換し、第１のアクセス要求に関連付けた識別情報でバスにアクセスし第１のアクセス要求を送信し、第１のアクセス要求に対応する識別情報を記憶部に入力する。情報処理装置は、第１のアクセス要求に対するバスからの応答である第１のアクセス応答を受信し応答情報として格納し、記憶部から出力される識別情報に基づいて応答情報を引き抜き、第２のプロトコルによる第２のアクセス応答に変換し外部装置に送信する。【選択図】図３
2018173856.tif 000002
【特許請求の範囲】
【請求項１】
第１のプロトコルでバスにアクセスする情報処理装置であって、
外部装置から受信した前記第１のプロトコルとは異なる第２のプロトコルによる第２のアクセス要求を、前記第１のプロトコルによる第１のアクセス要求に変換する第１の変換手段と、
前記第１のアクセス要求に関連付けた識別情報で前記バスにアクセスし、該第１のアクセス要求を送信する送信手段と、
前記第１のアクセス要求に対応する識別情報をＦＩＦＯとして構成された記憶部に入力する格納制御手段と、
前記第１のアクセス要求に対する前記バスからの応答であって該第１のアクセス要求に対応する識別情報を含む第１のアクセス応答を受信し、該識別情報に対応する領域に応答情報として格納する格納手段と、
前記記憶部から出力される識別情報に基づいて、前記格納手段における該識別情報に対応する領域から応答情報を引き抜く引き抜き手段と、
前記引き抜き手段が引き抜いた応答情報を、前記第２のプロトコルによる第２のアクセス応答に変換し前記外部装置に送信する第２の変換手段と、
を有し、
前記引き抜き手段は、前記識別情報に対応する領域に格納された応答情報に前記第１のアクセス要求に対する最後の応答情報が含まれていない場合であっても、該応答情報を引き抜く
ことを特徴とする情報処理装置。
【請求項２】
前記引き抜き手段は、前記記憶部から出力される識別情報の順序に基づいて、前記格納手段から前記応答情報を引き抜く
ことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記バスは、最大アウトスタンド数がＮ個のバスであり、
前記格納手段は、Ｎ個の格納領域を有する
ことを特徴とする請求項１又は２に記載の情報処理装置。
【請求項４】
前記格納領域の各々は、
前記第１のアクセス要求に対する応答情報の格納の有無を示す第１のエリアと、
前記第１のアクセス要求に対する最後の応答情報の格納の有無を示す第２のエリアと、
前記第１のアクセス要求に対する応答情報を格納する第３のエリアと、
を含むことを特徴とする請求項３に記載の情報処理装置。
【請求項５】
前記第１のエリアのサイズは、前記バスでサポートされる最大バーストサイズであり、
前記第２のエリアのサイズは、前記最後の応答情報を示す値のサイズであり、
前記第３のエリアのサイズは、前記最大バーストサイズと前記バスのバス幅との積と同一のサイズである
ことを特徴とする請求項４に記載の情報処理装置。
【請求項６】
前記格納領域の各々は、ＦＩＦＯとして構成され、
前記第１のアクセス要求に対する最後の応答情報であるか否かを示すラスト応答領域と、
前記第１のアクセス要求に対する応答情報を格納するリードデータ領域と、
を含むことを特徴とする請求項３に記載の情報処理装置。
【請求項７】
前記格納領域の各々を構成するＦＩＦＯの段数は、前記バスでサポートされる最大バーストサイズと等しい
ことを特徴とする請求項６に記載の情報処理装置。
【請求項８】
前記記憶部は、該記憶部が満杯の場合にはＦＵＬＬ信号を出力するよう構成されており、
前記送信手段は、前記ＦＵＬＬ信号の出力を検出した場合、前記バスへのアクセスを抑止する
ことを特徴とする請求項１乃至７の何れか１項に記載の情報処理装置。
【請求項９】
前記識別情報は、カウンタから出力された値を所与の対応テーブルを参照して変換した値として得られる
ことを特徴とする請求項１乃至７の何れか１項に記載の情報処理装置。
【請求項１０】
第１のプロトコルでバスにアクセスする情報処理装置の制御方法であって、
外部装置から受信した前記第１のプロトコルとは異なる第２のプロトコルによる第２のアクセス要求を、前記第１のプロトコルによる第１のアクセス要求に変換する第１の変換工程と、
前記第１のアクセス要求に関連付けた識別情報で前記バスにアクセスし、該第１のアクセス要求を送信する送信工程と、
前記第１のアクセス要求に対応する識別情報をＦＩＦＯとして構成された記憶部に入力する格納制御工程と、
前記第１のアクセス要求に対する前記バスからの応答であって該第１のアクセス要求に対応する識別情報を含む第１のアクセス応答を受信し、メモリ上の該識別情報に対応する領域に応答情報として格納する格納工程と、
前記記憶部から出力される識別情報に基づいて、前記メモリにおける該識別情報に対応する領域から応答情報を引き抜く引き抜き工程と、
前記引き抜き工程で引き抜いた応答情報を、前記第２のプロトコルによる第２のアクセス応答に変換し前記外部装置に送信する第２の変換工程と、
を含み、
前記引き抜き工程では、前記識別情報に対応する領域に格納された応答情報に前記第１のアクセス要求に対する最後の応答情報が含まれていない場合であっても、該応答情報を引き抜く
ことを特徴とする制御方法。
【請求項１１】
コンピュータを、請求項１乃至９の何れか１項に記載の情報処理装置の各手段として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、効率的なバスアクセスのための制御技術に関するものである。
【背景技術】
【０００２】
近年、システムＬＳＩの内部で使用されるオンチップバスにおいて、トランザクションの要求フェーズとトランザクションの実行フェーズとを分離して要求／実行可能なスプリットトランザクションバスが広く使用されている。要求フェーズと実行フェーズとを分離することにより、バス帯域の利用効率の向上や、マスターデバイス／スレーブデバイスそれぞれの処理効率の向上が図られている。
【０００３】
トランザクションの要求フェーズでは、要求信号（Ｒｅｑｕｅｓｔ）と応答信号（Ｒｅａｄｙ）を用いたマスターデバイス／スレーブデバイス間のハンドシェイクを行う方法が一般的に使用されている。さらに１回のアクセスからなるシングルアクセスや、複数回のアクセスからなるバーストアクセスといった複数のアクセス形態を持つバスプロトコルがあり、そのアクセスの種類によりアクセス要求の形態も様々なものが存在する。例えば、バーストアクセス要求を行うために、アクセス要求する回数に相当する情報を通知し、一回の要求フェーズでバーストアクセス要求を完了させるバスプロトコルがある。また、複数の要求フェーズを実施し、バーストアクセス要求の最後の要求フェーズ時に、最後の要求であることを示す信号を別途具備するバスプロトコルもある。
【０００４】
バスプロトコルによってはマスターデバイスがアクセス要求を発行しスレーブデバイスから応答が帰ってくる前に別のアクセス要求を発行するアウトスタンドを許容するものがある。アウトスタンドにより、レイテンシの高いデバイスに対して応答を待たずに複数のアクセス要求を発行できるため、処理性能を向上することが可能である。またアウトスタンド状況下において、スレーブデバイスのレイテンシの差が原因で、発行したアクセス要求の順番で応答を受け取れるとは限らない。そのため、マスターデバイスはトランザクションを識別するためのＩＤを付与し、スレーブデバイスはトランザクションに付与されているＩＤを応答に使用することで、マスターデバイスは応答受け取り時にどの要求に対するものか判断できる。アウトスタンドに対応するバスプロトコルには、マスターデバイスが要求発行の順番に関係なくトランザクションを完了することができるアウトオブオーダ転送に対応しているものも広く知られている。
【０００５】
ところで、マスターデバイスとスレーブデバイスとの間で使用するプロトコルと、マスターデバイス内で使用するプロトコルと、は必ずしも一致しているとは限らない。例えば、マスターデバイス内のモジュール間では、より簡略化したプロトコルを用いることでトランザクション制御をシンプルにしている構成が存在している。また、順番を問わないアウトオブオーダ転送に対して、インオーダ転送では複数のコマンドを同時に受け付けた場合に、その順番を保ったままトランザクションを完了しなければならない。
【０００６】
特許文献１では、複数のマスターデバイスからのライトデータを一時的格納するインターリーブ対応のバッファを具備するバスシステムが開示されている。具体的には、複数のマスタからのリード要求に対応するデータがバッファに格納されている場合に、スレーブへリード要求を発行せず当該バッファのデータをマスタに送ることで処理を高速化している。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００７−１３３６３３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
ところで、バーストアクセス要求が発行された場合には、１クロックサイクルですべての応答情報を受け取ることができるとは限らない。また、バーストアクセス要求に対する応答は、最初の応答情報を受け取ってから連続して受け取ることができるとは限らない。そのため、特許文献１を含む従来技術においては、バーストアクセス要求に対する全ての応答情報を受け取るまでアクセス要求元にデータを返すことが出来ず、効率性に問題が存在する。
【０００９】
本発明はこのような問題を鑑みてなされたものであり、より効率的なバスアクセスを可能とする制御技術を提供することを目的とする。
【課題を解決するための手段】
【００１０】
上述の問題点を解決するため、本発明に係る情報処理装置は以下の構成を備える。すなわち、第１のプロトコルでバスにアクセスする情報処理装置は、
外部装置から受信した前記第１のプロトコルとは異なる第２のプロトコルによる第２のアクセス要求を、前記第１のプロトコルによる第１のアクセス要求に変換する第１の変換手段と、
前記第１のアクセス要求に関連付けた識別情報で前記バスにアクセスし、該第１のアクセス要求を送信する送信手段と、
前記第１のアクセス要求に対応する識別情報をＦＩＦＯとして構成された記憶部に入力する格納制御手段と、
前記第１のアクセス要求に対する前記バスからの応答であって該第１のアクセス要求に対応する識別情報を含む第１のアクセス応答を受信し、該識別情報に対応する領域に応答情報として格納する格納手段と、
前記記憶部から出力される識別情報に基づいて、前記格納手段における該識別情報に対応する領域から応答情報を引き抜く引き抜き手段と、
前記引き抜き手段が引き抜いた応答情報を、前記第２のプロトコルによる第２のアクセス応答に変換し前記外部装置に送信する第２の変換手段と、
を有し、
前記引き抜き手段は、前記識別情報に対応する領域に格納された応答情報に前記第１のアクセス要求に対する最後の応答情報が含まれていない場合であっても、該応答情報を引き抜く。
【発明の効果】
【００１１】
本発明によれば、より効率的なバスアクセスを可能とする制御技術を提供することができる。
【図面の簡単な説明】
【００１２】
【図１】第１実施形態に係る通信装置の全体構成を示すブロック図である。
【図２】データ転送部の構成を示すブロック図である。
【図３】リード処理部の構成を示すブロック図である。
【図４】一時格納メモリの構成の一例を示す図である。
【図５】リード処理部の動作を示すフローチャートである。
【図６】振り分け部の動作を示すフローチャートである。
【図７】引き抜き部の動作を示すフローチャートである。
【図８】プロトコル変換部の動作を示すフローチャートである。
【図９】第２実施形態におけるリード処理部の構成を示すブロック図である。
【図１０】第２実施形態における振り分け部の動作を示すフローチャートである。
【図１１】第２実施形態における引き抜き部の動作を示すフローチャートである。
【発明を実施するための形態】
【００１３】
以下に、図面を参照して、この発明の好適な実施の形態を詳しく説明する。なお、以下の実施の形態はあくまで例示であり、本発明の範囲を限定する趣旨のものではない。
【００１４】
（第１実施形態）
本発明に係る情報処理装置の第１実施形態として、ネットワークと接続された通信装置を例に挙げて以下に説明する。
【００１５】
＜装置構成＞
図１は、第１実施形態に係る通信装置１０１の全体構成を示すブロック図である。
【００１６】
通信装置１０１の内部のシステムバス１０２には、ＣＰＵ１０３、システムプログラムが格納されているＲＯＭ１０４、システムプログラム実行時に使用される一次記憶装置であるＲＡＭ１０５、バスブリッジ１０６が接続されている。なお、ＲＯＭ１０４からＲＡＭ１０５にシステムプログラムが読み込まれ、ＣＰＵ１０３によって実行される。バスブリッジ１０６はシステムバス１０２とローカルバス１０７のプロトコル変換やバス幅変換などを行う。通信装置１０１の内部のローカルバス１０７には、バスブリッジ１０６、フレームの送受信を行うデータ転送部１０８、ＴＣＰ／ＩＰ通信処理を実行するプロトコル処理部１０９が接続している。通信装置１０１が接続するネットワーク１１２は、例えばイーサネット（登録商標）が想定できるが、無線ネットワークであってもよい。例えばネットワーク１１２がイーサネット（登録商標）の場合、データ転送部１０８はイーサネット（登録商標）のＭＡＣ処理（伝送メディア制御処理）を行うネットワークＩ／Ｆ部１１１に対して伝送フレームの送受信を行う。また、データ転送部１０８は割り込み信号を使用することでプロトコル処理部１０９に転送終了の通知を行うことができるものとする。
【００１７】
ローカルＲＡＭ１１０は、データ転送部１０８やプロトコル処理部１０９の一次記憶領域として使用される。図１では、通信装置１０１は１つのネットワーク１１０にのみ接続している状況を示しているが、データ転送部１０８とネットワークＩ／Ｆ部１１１を複数備え、同時に複数のネットワークに接続する構成としてもよい。また、ネットワークＩ／Ｆ部１１１は、データ転送部に接続するのではなく、ローカルバス１０７に接続する構成であってもよい。その場合は、ネットワークＩ／Ｆ部１１１に内蔵されるＤＭＡ処理部を使用して、ローカルＲＡＭ１１０やＲＡＭ１０５とネットワーク１１２間のフレームの送受信を行い、データ転送部１０８はＲＡＭ１０５とローカルＲＡＭ１１０間のデータ転送処理を行う。
【００１８】
プロトコル処理部１０９は、通信プロトコル処理専用のハードウェア回路装置、あるいは通信プロトコル処理用に設計されたマイクロプロセッサである。例えば、汎用的なＴＣＰ／ＩＰプロトコルの通信処理を行う。より具体的には、プロトコル処理部１０９は、ＩＰｖ４（ＩＰバージョン４）、ＩＰｖ６（ＩＰバージョン６）、ＩＣＭＰ、ＵＤＰ、ＴＣＰの各通信プロトコル処理や、送信シーケンス制御や輻輳制御、通信エラー制御等を行う。またプロトコル処理部１０８は１つの機能ブロックとして構成してもよいし、複数のマイクロプロセッサによるマルチプロセッサ構成としてもよい。さらに、マイクロプロセッサによる処理と一部の機能をハードウェアによるアクセラレーションを行う構成としてもよい。
【００１９】
図２は、データ転送部１０８の構成を示すブロック図である。ＣＰＵ１０３やプロトコル処理部１０９は、データ転送部１０８のレジスタアクセス１／Ｆ２０１を介してレジスタ２０２にライトアクセスやリードアクセスを行うことでデータ転送の指示やデータ転送部の設定を行う。データ転送の指示にはディスクリプタと呼ばれるデータフォーマットを用いてもよいし、あらかじめ用意されたレジスタ２０２に転送情報を設定する方法でもよい。ディスクリプタのフォーマットは転送元の先頭アドレス、転送長、転送先の情報、その他のオプション設定について記載されているものである。オプション設定の例として、たとえばデータ転送中にチェックサム演算を行うかどうか、連続してデータ転送を行うために次のディスクリプタの先頭アドレスを指定しているかどうかなどがある。
【００２０】
レジスタ２０２に対してリードアクセスやライトアクセスが発生すると、レジスタ情報２０３が転送制御部２０４に通知される。転送制御部２０４はレジスタ情報２０３を用いて転送処理を行う。転送制御部２０４は、データ転送部１０８内にある転送用メモリ２１９、データ転送部１０８外にあるネットワークＩ／Ｆ部１１２、ローカルバス１０７を介してローカルＲＡＭ１１０やＲＡＭ１０５に対してアクセスできるものとする。例えば、ローカルＲＡＭ１１０から転送データをリードする場合はリード処理部２０６へリード要求２０５（メモリ読取りのアクセス要求）を発行する。その後、リード処理部２０６でローカルバス１０７のバスプロトコルに変換後データリードＩ／Ｆ２０７を介してローカルバス１０７へとリード要求が発行される。同様にしてＲＡＭ１０５へ転送データをライトする場合はライト処理部２０９へライト要求２０８（メモリ書き込みのアクセス要求）を発行する。その後、ライト処理部２０９でローカルバス１０７のバスプロトコルに変換後データライトＩ／Ｆ２０７を介してローカルバス１０７へとライト要求が発行される。
【００２１】
ここでは、ＴＣＰ／ＩＰ通信に使用するＴＣＰヘッダやＩＰヘッダの解析と生成は転送用メモリ２１９にて行うものとする。ネットワーク１１２へＴＣＰ／ＩＰ通信パケットを送信する場合、プロトコル処理部１０９の指示によりＴＣＰ／ＩＰ通信パケットのペイロードをデータ転送部１０８がＲＡＭ１０５から転送用メモリ２１９へ一度転送する。転送完了後、プロトコル処理部１０９はＴＣＰヘッダとＩＰヘッダを転送用メモリ２１９に直接ライトし、データ転送部１０８にヘッダとペイロードをネットワークＩ／Ｆ部へ転送するように指示する。転送処理部２０４は転送用メモリ２１９にあるペイロードとヘッダのリード要求を発行し、順次ネットワークＩ／Ｆ部１１１へライト要求２１６を発行する。そして、ネットワークＩ／Ｆ部１１１がネットワーク１１２へ送信する。プロトコル処理部１０９が発行する転送用メモリ２１９へのライト要求は、データライトＩ／Ｆ２１２が使用される。データライトＩ／Ｆ２１２に到達したライト要求は、アクセス処理部２１４によりデータ転送部１０８内で使用するプロトコルへ変換され、転送用メモリ２１９へと書き込まれる。また、転送制御部２０４は複数のライト転送およびリード転送を同時に実行できるものとしている。そのため、調停部２１７を設けて転送制御部２０４からのリード要求／ライト要求２１６とアクセス処理部２１５のリード要求／ライト要求２１６を調停後、転送用メモリ２１８へリード要求／ライト要求２１８を発行する構成としている。
【００２２】
ネットワーク１１２からＴＣＰ／ＩＰ通信パケットを受信する場合、プロトコル処理部１０９の指示によりデータ転送部１０８は、ネットワークＩ／Ｆ部へリード要求２１６を発行し、最終的にデータライトＩ／Ｆ２１０を介してＲＡＭ１０５へ転送する。転送完了後、プロトコル処理部１０９はＲＡＭ１０５に転送したＴＣＰ／ＩＰパケットを転送用メモリ２１９へ転送指示をする。そして、転送用メモリ２１９においてＩＰヘッダとＴＣＰヘッダの解析後、上位のアプリケーションが使用できるように転送用メモリ２１９にあるペイロードをもう一度ＲＡＭ１０５へ転送するようにデータ転送部１０８へ指示する。プロトコル処理部１０９がＩＰヘッダやＴＣＰヘッダを解析する際に発行する転送用メモリ２１９へのリード要求は、データリードＩ／Ｆ２１３からアクセス処理部２１４によりデータ転送部１０８内で使用するプロトコルへ変換される。そして、転送用メモリ２１９にライトする場合と同じように、リード要求は調停部２１７を介して転送用メモリ２１９に伝達され、ヘッダ情報を読み取ることができる。また、データ転送部１０８は指示されたデータ転送が終了すると、レジスタ２０２にある転送状況を表示するステータスレジスタを更新する。それとともに、転送終了信号２２０をプロトコル処理部１０９へアサートして転送が終了したことを通知することができるものとする。転送終了信号２２０はデータ転送指示を行うプロトコル処理部１０９へ接続されているものとする。転送終了信号２２０は１クロックサイクルのみアサートされるような信号でもよいし、解除指示されるまでアサートし続けるような信号でもよい。
【００２３】
前者の場合、プロトコル処理部１０９は、転送終了信号２２０を捕捉できるようにフリップフロップやその他の仕組みが必要になる。また、後者の場合、レジスタ２０２に転送終了信号２２０を解除するためのレジスタを用意する必要がある。どちらの構成を利用してもよい。
【００２４】
データ転送部１０８は、指示された転送が完了すると、転送終了信号をアサートする前に転送指示内容が書き込まれているディスクリプタに終了状況をライトする。終了状況には少なくとも正常終了および異常終了が判断できるものとする。異常終了の中には例えばディスクリプタのフォーマットに準拠していないことを通知したり、データ転送部１０８の判断により指示された転送を行わずに終了したことを通知したり、データ転送中に強制終了されたことを通知できたりするものとする。データ転送部１０８の判断の例として例えばチェックサムエラー検出がある。ＴＣＰ／ＩＰ通信では通信パケットの誤りを検出するためにＴＣＰヘッダおよびＩＰヘッダにチェックサム値のフィールドがある。本実施形態におけるデータ転送部１０８はＩＰヘッダとＴＣＰヘッダおよびペイロードから転送処理中にチェックサム演算を行うことができるものとする。そしてチェックサムエラーを検知したタイミングで指示された転送を中止し、ディスクリプタに異常終了を書き込み、転送終了信号２２０をアサートする。指示された転送を最後まで行わずに途中で終了することで、無駄となるトランザクションがバスに発生することがなくなり、バスの帯域を抑えることができる効果がある。ＩＰヘッダのチェックサムはＩＰヘッダの領域のみを使用して計算ができるため有効である。チェックサム演算は一度ＲＡＭ１０５へ転送したＴＣＰ／ＩＰパケットをＲＡＭ１０５から転送用メモリ２１９へ転送する際に行うものとする。また、チェックサム演算は転送制御部２０４の内部で行う。リード処理部２０６から受け取る応答（読取りアクセス要求に対するアクセス応答）を逐次利用することで、発行したリード要求２０５に対する応答をすべて受信せずとも、チェックサム演算を行うことができるものとする。
【００２５】
図３は、リード処理部２０６の構成を示すブロック図である。転送処理部２０４から受け取るリード要求２０５をプロトコル変換部３０１によりローカルバス１０７で使用されるプロトコルに変換する。変換されたリード要求３０２はデータリードＩ／Ｆ２０７を介して目的のスレーブデバイスに伝達される。
【００２６】
カウンタ３０４は、カウンタ値３０５を出力する。所与の対応テーブル３１９によりカウンタ値３０５は変換値３２０に変換される。変換値３２０は、プロトコル変換部３０１と及び記憶部である要求ＩＤＦＩＦＯ３０６へ出力されるよう格納制御を行う。変換値３２０がリード要求３０２の識別情報である要求ＩＤとして使われるとカウンタ３０４が出力するカウンタ値３０５は変化する。変換値３２０が要求のＩＤとして使われるタイミングと、変換値３２０が要求ＩＤＦＩＦＯ３０６へ格納されるタイミングは同期する。
【００２７】
ここでは、要求ＩＤＦＩＦＯ３０６は、ＦＩＦＯが満杯の場合にアサートするＦＵＬＬ信号３０７、及び、空の場合にアサートするＥＭＰＴＹ信号３０８を出力できるものとする。また、要求ＩＤＦＩＦＯ３０６のＦＩＦＯのビット幅は、リード処理部２０６がローカルバスへ発行する最大アウトスタンド数と同じビット幅とする。更に、要求ＩＤＦＩＦＯ３０６のＦＩＦＯの段数はリード処理部２０６がローカルバスへ発行するアウトスタンドの値とする。つまり、リード処理部２０６の最大アウトスタンド数を"１６"とした場合は、要求ＩＤＦＩＦＯ３０６のＦＩＦＯのビット幅は１６ビットで段数は１６段である。また、最大アウトスタンド数を"４"とした場合は、要求ＩＤＦＩＦＯ３０６のビット幅は４ビットで段数は４段である。そして、カウンタ３０４は、カウンタ値３０５が常にワンホット（すなわち、１つのビットのみ"１"であり残りは"０"）となるように構成されるものとする。
【００２８】
プロトコル変換部３０１は、受け取った変換値３２０を要求のＩＤとして使用する。要求ＩＤＦＩＦＯ３０６もカウンタ値３０５から変換された変換値３２０を格納する。そして、プロトコル変換部３０１はＦＵＬＬ信号３０７がアサートされている場合は、新しくリード要求３０２を発行しない。対応テーブル３１９では、発行できるすべてのＩＤ値に対して要求ＩＤＦＩＦＯ３０６へ格納するべき変換値が示されているものとする。
【００２９】
対応テーブル３１９でカウンタ値３０５を変換値３２０に変換する具体例について説明する。ここでは、カウンタ値３０５は４ビット（つまり最大アウトスタンド数が"４"）とする。カウンタ３０４が出力するカウンタ値は"０００１"、"００１０"、"０１００"、"１０００"の順番で変化し、次のカウントアップで"０００１"へと戻りまたもう一巡する。対応テーブル３１９は"０００１"を受け取った時の変換値３２０は"１"、"００１０"の変換値３２０は"２"、"０１００"の変換値３２０は"３"、"１０００"の変換値３２０は"４"とする。つまり、対応テーブル３１９ではビットが立っている（"１"である）ビットの数字プラス１へ変換する。これは、一般的に、Ｎビットの信号が、０ビットからＮ−１ビットと定義されることが多いからである。
【００３０】
リード処理部２０６が、データリードＩ／Ｆ２０７を介してスレーブデバイスからの応答３１０を受け取ると、振り分け部３１１は、対応テーブル３１９を参照して、応答３１０を適切な一時格納メモリ３１３のアドレス位置（メモリ上の格納領域）へ格納する。先ほどの例でいえば、応答のＩＤは"０"、"１"、"２"、"３"のいずれかであるので、振り分け部３１１では"０００１"、"００１０"、"０１００"、"１０００"のいずれかのアドレスへ格納することになる。（１０進表記ではそれぞれ"１"、"２"、"４"、"８"のアドレスとなる。）バスへの要求発行時とバスからの応答受信時に同一の対応テーブル３１９を利用することにより、発行した要求に対応する応答を適切な場所へ格納することが可能となる。
【００３１】
図４は、一時格納メモリ３１３の構成の一例を示す図である。なお、一時格納メモリ３１３は１つのメモリブロックから構成されてもよいし、複数のメモリブロックから構成されてもよいし、後述する３つのエリアをそれぞれの独立したメモリブロックとしてもかまわない。少なくとも各メモリに対してアドレス４０１を振ることで独立して目的のメモリへのライトおよびリードができるものとする。また、一時格納メモリ３１３は全部で最大アウトスタンド数だけアドレスで管理されており、最大アウトスタンド数がＮ個の例を図４には表記している。たとえば、最大アウトスタンド数が"８"である場合、アドレスは、ワンホットな値である"０００００００１"から"１０００００００"の８つで管理している。そして応答３１０のＩＤが"６"を受け取った時には対応テーブル３１９を参照し、"００１０００００"のアドレスの格納領域へ格納する。
【００３２】
一時格納メモリ３１３は３つのエリアで管理構成される。１つ目のエリアは、応答受信ビット４０２である。図４では４ビットで構成している。応答受信ビット４０２はリード処理部２０６がサポートする最大バーストサイズ（最大バースト数）と同じにする必要がある。つまり、最大バーストサイズが"８"であれば、応答受信ビット４０２は８ビットで構成する必要がある。応答受信ビット４０２の各ビットの値は、当該各ビットに対応する応答データ領域４０４内の格納領域における応答の格納の有無を示している。ここでは、"１"は応答が格納されていることを示し、"０"は格納されていないことを示している。２つ目のエリアは、ラスト応答受信ビット４０３である。ラスト応答受信ビット４０３は１ビットで構成され、応答３１０に含まれる信号値を利用して制御する。バスのプロトコルにはバーストリード要求やシングルリード要求に対する応答において、最後の応答情報（ラスト応答）かどうかを示す信号を規定しているものがあり、最後の応答情報である場合はその信号値は"１"となっている。この信号値をそのままラスト応答受信ビット４０３に格納して、最後の応答情報の格納の有無を示している。すなわち、リード要求に対する応答をすべて受け取ったかを示している。３つ目のエリアは、応答データ領域４０４である。この領域はデータ転送部１０８が接続するローカルバス１０７のバス幅とリード処理部２０６がサポートする最大バーストサイズの積の値と同一である必要がある。つまり、ローカルバスが６４ビット、最大バーストサイズが"４"であれば、応答データ領域４０４は６４×４＝２５６ビットとなる。
【００３３】
応答データ４０４の領域において、斜線領域４０６、４０８、４１０、４１２には応答受信ビット４０２が示すようにスレーブデバイスからの応答を格納している。一方で４０５、４０７、４０９、４１１、４１３の領域にはスレーブデバイスからの応答を格納していない。
【００３４】
ここで、データ転送部１０８が接続するローカルバス１０７のバス幅とリード処理部２０６がサポートする最大バーストサイズが"４"である構成において、アドレス４０１が"４"の列と"１"の列を例に、一時格納メモリ３１３の詳細説明をする。アドレス４０１が"４"の列は応答受信ビット４０２が"０１１１"であるので、応答情報は４１０が示すように６４ビットの応答情報を計３つ格納している。また、アドレス４０１が"４"の列はラスト応答受信ビット４０３が"０"であるのでまだ応答情報をすべて受信していない。最後の応答情報を受信した場合は、位置４１１に応答情報を格納すると同時にラスト応答受信ビット４０３を"１"に変更する。一方、アドレス４０１が"１"の列は応答受信ビット４０２が"００１０"であるので、応答情報は４０６が示すように６４ビットの応答情報を１つ格納している。図４では、バーストアクセス要求に対する最初の応答情報は、位置４０５や位置４０８などに格納されものとしている。もちろん位置４１１などから（つまり反対側から）順番に格納されるように制御してもかまわない。図４に示してある状態では、一度、位置４０５に格納された応答情報を引き抜いているため、応答受信ビット４０２の最下位ビットは"０"となっている。アドレス４０１が"１"の列はラスト応答受信ビット４０３が"１"であるため、位置４０６に格納されている応答情報が最後の応答情報である。以上のように、一時格納メモリ３１３を構成することで、リード要求３０２で使用したカウンタ値３０５に対応した応答をそれぞれ区別して一時格納することができる。
【００３５】
引き抜き部３１５では、要求ＩＤＦＩＦＯ３０６が出力するＥＭＰＴＹ信号３０８が"０"であればアドレス３０９に該当する一時格納メモリ３１３に応答情報が格納されているかどうかを確認する。もし、"１"となっているビットがあれば、そのビットに対応する場所の応答データ領域から応答情報を引き抜き、"１"となっていた応答受信ビット４０２を"０"に変更する。変更する際に、応答受信ビット４０２がワンホットかつラスト応答受信ビット４０３が"１"であれば、引き抜いた応答情報が最後であるためラスト応答受信ビット４０３も"０"に変更する。そして、引き抜き部３１５は最後の応答情報を引き抜いたときに要求ＩＤＦＩＦＯ３０６に対して次のアドレスを出力するように要請する。プロトコル変換部３１７は引き抜き部３１５から応答３１６を受け取るとリード要求情報３０３をもとにプロトコル変換を行って、応答３１８を転送制御部２０４へ返す。
【００３６】
＜装置の動作＞
図５は、リード処理部２０６の動作を示すフローチャートである。具体的には、外部装置である転送制御部２０４から要求を受け取るときの動作を示している。本実施形態において、転送制御部２０４が発行するバーストアクセス要求は、１クロックサイクルでトランザクションが完了せず、少なくともバースト数以上のクロックサイクルにまたがるものとする。本フローチャートで示されるシーケンスは要求リード処理部２０６にクロックが入力されているときに動作する（Ｓ５０１）。
【００３７】
Ｓ５０２では、リード処理部２０６は、要求ＩＤＦＩＦＯ３０６が出力するＦＵＬＬ信号３０７の値を判定する。ＦＵＬＬ信号３０７が"０"（つまりアサートされていない）の場合はＳ５０３に進み、"１"の場合はＳ５０９に進む（この場合、リード要求の発行は抑止される）。Ｓ５０３では、リード処理部２０６は、転送制御部２０４からリード要求２０５を受信したかどうかを判定する。受信した場合はＳ５０４へ進み、受信していない場合はＳ５０９に進む。
【００３８】
Ｓ５０４では、リード処理部２０６は、受信したリード要求２０５がバーストアクセス要求かどうかを判定する。バーストアクセス要求の場合はＳ５０５に進み、そうでない場合はＳ５０７へ進む。Ｓ５０５では、リード処理部２０６は、受信したリード要求２０５の情報を内部のバッファに保存する。保存後Ｓ５０６へ進む。Ｓ５０６では、リード処理部２０６は、受信したバーストアクセス要求が最後であるかどうかを判定する。最後である場合はＳ５０７に進み、最後でない場合はＳ５０９へ進む。なお、最後でない場合は、最後のバーストアクセス要求を受け取るまでリード要求２０５の情報をバッファに保存し続ける。ここでは、バッファはプロトコル変換部３０１の内部にあるものとするが、リード処理部２０６がアクセスできるバッファであれば、バッファの場所はどこであってもかまわない。
【００３９】
Ｓ５０７では、リード処理部２０６は、受け取ったリード要求２０５のプロトコル変換を行う。ここで、変換値３２０を受け取ってプロトコル変換に使用する。プロトコル変換後Ｓ５０８へ進む。Ｓ５０８では、リード処理部２０６は、データリードＩ／Ｆ２０７へリード要求３０２を発行する。リード要求３０２はＳ５０７においてプロトコル変換されたものを指している。発行後Ｓ５０９へ進む。
【００４０】
Ｓ５０９では、リード処理部２０６は、プロトコル変換部からバッファクリアの要求を受信したかどうかを判定する。受信した場合はＳ５１０に進み、そうでない場合はＳ５１１に進む。Ｓ５１０では、リード処理部２０６は、Ｓ５０５で保存した最古の１バースト分の情報を削除してバッファに空き領域を生成する。削除後Ｓ５１１に進む。
【００４１】
なお、上述のシーケンスはＳ５１１で終了することになるが、リード処理部２０６にクロックが供給され続ける限り、Ｓ５１１に到達したあとＳ５０１からもう一度開始される。
【００４２】
図６は、振り分け部３１１の動作を示すフローチャートである。振り分け部３１１は、クロック供給されているときに動作する（Ｓ６０１）。
【００４３】
Ｓ６０２では、振り分け部３１１は、データリードＩ／Ｆ２０７から応答３１０を受信したかどうかを判定する。受信した場合はＳ６０３に進み、受信していない場合はＳ６０４に進む。Ｓ６０３では、振り分け部３１１は、受信した応答３１０に付加されているＩＤに応じて、一時格納メモリ３１３へ応答情報を格納する。格納後Ｓ６０４へ進む。
【００４４】
なお、上述のシーケンスはＳ６０４で終了することになるが、振り分け部３１１にクロックが供給され続ける限り、Ｓ６０４に到達したしたあとＳ６０１からもう一度開始される。
【００４５】
図７は、引き抜き部３１５の動作を示すフローチャートである。引き抜き部３１５は、クロックが供給されている場合に動作する（Ｓ７０１）。
【００４６】
Ｓ７０２では、引き抜き部３１５は、ＥＭＰＴＹ信号３０８の値を判定する。信号値が"０"であればＳ７０３に進み、信号値が"１"であればＳ７１１に進む。Ｓ７０３では、引き抜き部３１５は、アドレス３０９の応答受信ビット４０２の値を判定する。値が"０"である場合は、Ｓ７１１に進み、それ以外の値である場合は、Ｓ７０４に進む。
【００４７】
Ｓ７０４では、引き抜き部３１５は、アドレス３０９の応答受信ビット４０２の値から、対応する応答データ領域４０４から応答情報を引き抜く。具体的には、応答受信ビット４０２の下位ビットから順番に"１"となっているビットを検索し、最初にヒットしたビットに対応する領域から応答情報を引き抜く。すなわち、対応する応答データ領域４０４に存在する応答情報が最後の応答情報では無い（＝ラスト応答受信ビット４０３の値が"０"である）場合であっても引き抜きを行う。引き抜き後、Ｓ７０５へ進む。
【００４８】
Ｓ７０５では、引き抜き部３１５は、アドレス３０９のラスト応答受信ビット４０３の値とアドレス３０９の応答受信ビット４０２の値とを判定する。アドレス３０９のラスト応答受信ビット４０３の値が"１"、かつ、アドレス３０９の応答受信ビット４０２の値がワンホットである場合はＳ７０６へ進む。そうでない場合はＳ７０９へ進む。
【００４９】
Ｓ７０６では、引き抜き部３１５は、アドレス３０９のラスト応答受信ビット４０３を０に変更し、アドレス３０９の応答受信ビット４０２を"０"に変更する。変更後Ｓ７０７へ進む。Ｓ７０７では、引き抜き部３１５は、バッファクリアフラグを"１"に変更する。変更後Ｓ７０８に進む。バッファクリアフラグはプロトコル変換部３１７と引き抜き部３１５ともにアクセスできるものとする。Ｓ７０８では、引き抜き部３１５は、要求ＩＤＦＩＦＯ３０６に次のアドレス３０９を出力するように要求する。要求後Ｓ７１０に進む。
【００５０】
Ｓ７０９では、引き抜き部３１５は、Ｓ７０４で引き抜いた応答情報の領域に対応する応答受信ビット４０２のビットを"０"に変更する。変更後Ｓ７１０に進む。Ｓ７１０では、引き抜き部３１５は、Ｓ７０４で引き抜いた応答情報を応答３１６としてプロトコル変換部３１７へ渡し、Ｓ７１１に進む。
【００５１】
なお、上述のシーケンスはＳ７１１で終了することになるが、引き抜き部３１５にクロックが供給され続ける限り、Ｓ７１１に到達したあとＳ７０１からもう一度開始される。
【００５２】
図８は、プロトコル変換部３１７の動作を示すフローチャートである。プロトコル変換部３１７は、クロックが供給されているときに動作する（Ｓ８０１）。
【００５３】
Ｓ８０２では、プロトコル変換部３１７は、引き抜き部３１５から応答３１６を受信したかどうかを判定する。受信した場合はＳ８０３に進み、そうでない場合はＳ８０６に進む。Ｓ８０３では、プロトコル変換部３１７は、リード要求情報３０３を使用してプロトコル変換を行い、転送制御部２０４へ応答３１８を返す。そしてＳ８０４へ進む。
【００５４】
Ｓ８０４では、プロトコル変換部３１７は、バッファクリアフラグの値を判定する。バッファクリアフラグが"１"であればＳ８０５へ進み、そうでない場合はＳ８０６に進む。Ｓ８０５では、プロトコル変換部３１７は、リード要求に対する応答をすべて受信したので、Ｓ５０５にて保存していたバッファをクリアし、バッファクリアフラグを"０"に変更し、Ｓ８０６に進む。
【００５５】
なお、上述のシーケンスはＳ８０６で終了することになるが、プロトコル変換部３１７にクロックが供給され続ける限り、Ｓ８０６に到達したあとＳ８０１からもう一度開始される。
【００５６】
上述の動作により、第１実施形態では、転送制御部２０４が発行したリード要求２０５はプロトコル変換部３０１によりリード要求３０２へ変換され、データリードＩ／Ｆ２０７に渡される。データリードＩ／Ｆ２０７は、受け取ったリード要求３０２を、自身が接続するローカルバス１０７に渡すことでリード要求は適切なスレーブデバイスへと到達する。また、リード要求２０５をプロトコル変換するたびに、リード要求に関連付けたＩＤ値（変換値３２０）を要求ＩＤＦＩＦＯ３０６に格納することで、リード要求の順番を参照できるようになる。また、スレーブデバイスからの応答をデータリードＩ／Ｆ２０７から受け取る際に、応答３１０に付加されているＩＤ値から一時格納メモリ３１３の適切なアドレスに対して応答情報を格納する。リード要求を発行した際に使用した変換値３２０の値と、データリードＩ／Ｆ２０７から受け取る際に応答３１０に付加されているＩＤ値は一致している。そのため、要求ＩＤＦＩＦＯ３０６の出力値であるアドレス３０９に格納されている応答情報を一時格納メモリ３１３から引き抜くことが出来る。
【００５７】
以上説明したとおり第１実施形態によれば、バスに発行する要求のＩＤ値をＦＩＦＯに格納し、当該要求に対する応答を当該ＩＤ値に応じたバッファに一時格納する。そして、ＦＩＦＯに格納された順序でＩＤ値に対応する応答をバッファから順次を引き抜く。この構成により、転送制御部２０４が発行したリード要求２０５の順番で応答情報を受け取ることができる。また、各機能ブロックを供給されるクロックに同期するように制御しておけば、データリードＩ／Ｆ２０７から受け取る応答３１０は途中の機能ブロックで滞ることなく、リード要求の発行元である転送制御部２０４へ渡すことができる。
【００５８】
なお、上述のリード処理部２０６の構造をライト処理部２０９に対しても適用することが可能である。これにより、転送制御部２０８が発行するライト要求２０８の順番で応答を返すことができる。なお、ライト要求はリード要求と異なり、シングルアクセスであろうとバーストアクセスであろうと、スレーブデバイスからはライト完了通知の１ビットとライト要求に付与されていたＩＤ値が返ってくる。したがって、ライト処理部２０９に同様の構造を適用する際には、一時格納メモリ３１３のラスト応答受信ビット４０３にスレーブデバイスからの書き込み完了通知の１ビットを書き込むようにするとよい。そして、一時格納メモリ３１３をラスト応答受信ビットのみで構成することでより好適な設計とすることができる。
【００５９】
（第２実施形態）
第２実施形態では、第１実施形態における一時格納メモリ３１３を複数のＦＩＦＯとして構成する形態について説明する。
【００６０】
＜装置の構成＞
図９は、第２実施形態におけるリード処理部２０６の構成を示すブロック図である。図９においては、第１実施形態（図３）と異なるものについては新しく符号を付与しており、同様の機能や構成に対しては図３と同一の符号を付与している。第２実施形態のリード処理部２０６は、第１実施形態のデータ転送部１０８に組み込むことが可能である。
【００６１】
ここで、一時格納ＦＩＦＯ９０３の構成について説明する。一時格納ＦＩＦＯ９０３はリード処理部２０６が発行できる最大アウトスタンド数と同じ数のＦＩＦＯで構成される。それぞれのＦＩＦＯにおいて、ＦＩＦＯ幅はローカルバス１０７の"バス幅＋１"と等しく、ＦＩＦＯの段数はリード処理部２０６がサポートする最大バーストサイズと等しい。また、それぞれのＦＩＦＯには自身のＦＩＦＯに情報が格納されていない（つまり空である）場合にアサートするＥＭＰＴＹ信号９０４を出力できるものとする。
【００６２】
たとえば、リード処理部２０６の最大バーストサイズが"４"、最大アウトスタンド数が"８"、ローカルバスのバス幅が６４ビットであれば、一時格納ＦＩＦＯ９０３は８つの独立した６５ビット４段ＦＩＦＯで構成される。また、ＥＭＰＴＹ信号９０４は合計８つとなる。これらの独立したＦＩＦＯにはそれぞれアドレスが付与されており、これらのアドレスは要求ＩＤＦＩＦＯ３０６が出力するアドレス３０９と対応している。
【００６３】
第１実施形態と同じように、振り分け部９０１は、対応テーブル３１９を利用して一時格納ＦＩＦＯ９０３に応答９０２を格納する。一時格納ＦＩＦＯ９０３に格納される応答９０２はデータリードＩ／Ｆから受け取るリードデータ（ビット数はローカルバス１０７のバス幅と等しい）とラスト応答通知信号値（ビット数は１ビット）である。便宜上、このリードデータが格納されるビットをリードデータ領域、ラスト応答通知信号値が格納されるビットをラスト応答領域と呼び、一時格納ＦＩＦＯ９０３の出力においても同じ領域名を使用して説明する。引き抜き部９０６は、一時格納ＦＩＦＯ９０３から応答情報を引き抜く際、一時格納ＦＩＦＯ９０３が出力するラスト応答領域を参照することにより、要求に対する最後の応答情報かどうかを判断することができる。
【００６４】
＜装置の動作＞
図１０は、第２実施形態における振り分け部９０１の動作を示すフローチャートである。振り分け部９０１は、クロックが供給されている場合に動作する（Ｓ１００１）。
【００６５】
Ｓ１００２では、振り分け部９０１は、データリードＩ／Ｆ２０７から応答３１０を受信したかどうかを判定する。受信した場合はＳ１００３に進み、受信していない場合はＳ１００４に進む。Ｓ１００３では、振り分け部９０１は、受信した応答３１０に付加されているＩＤに応じて、一時格納ＦＩＦＯ９０３へ応答情報を格納する。格納後Ｓ１００４へ進む。
【００６６】
なお、上述のシーケンスはＳ１００４で終了することになるが、振り分け部９０１にクロックが供給され続ける限り、Ｓ１００４に到達したしたあとＳ１００１からもう一度開始される。
【００６７】
図１１は、第２実施形態における引き抜き部９０６の動作を示すフローチャートである。引き抜き部９０６は、クロックが供給されている場合に動作する（Ｓ１１０１）。
【００６８】
Ｓ１１０２では、引き抜き部９０６は、ＥＭＰＴＹ信号３０８の値を判定する。信号値が"０"であればＳ１１０３に進み、信号値が"１"であればＳ１１０９に進む。Ｓ１１０３では、引き抜き部９０６は、アドレス３０９のＦＩＦＯが出力するＥＭＰＴＹ信号の値を判定する。値が"０"である場合はＳ１１０４に進み、そうでない場合はＳ１１０９に進む。
【００６９】
Ｓ１１０４では、引き抜き部９０６は、アドレス３０９のＦＩＦＯから応答情報を引き抜く。ここで引く抜く応答情報は、リードデータ領域とラスト応答領域との両方である。その後、Ｓ１１０５へ進む。
【００７０】
Ｓ１１０５では、引き抜き部９０６は、Ｓ１１０４で応答情報を引き抜くときにラスト応答領域の値を判定する。ラスト応答領域の値が"１"である場合はＳ１１０６へ進み、そうでない場合はＳ１１０８へ進む。Ｓ１１０６では、引き抜き部９０６は、バッファクリアフラグを"１"に変更する。変更後Ｓ７０８に進む。第１実施形態と同様にバッファクリアフラグはプロトコル変換部３１７及び引き抜き部９０６ともにアクセスできるものとする。Ｓ１１０７では、引き抜き部９０６は、要求ＩＤＦＩＦＯ３０６に次のアドレス３０９を出力するように要求する。要求後Ｓ１１０８に進む。
【００７１】
Ｓ１１０８では、引き抜き部９０６は、Ｓ１１０４で引き抜いた応答情報を応答３１６としてプロトコル変換部３１７へ渡し、Ｓ１１０９に進む。
【００７２】
なお、上述のシーケンスはＳ１１０９で終了することになるが、引き抜き部９０６にクロックが供給され続ける限り、Ｓ１１０９に到達したしたあとＳ１１０１からもう一度開始される。
【００７３】
以上説明したとおり第２実施形態によれば、複数のＦＩＦＯに応答情報を格納する。この構成であっても、リード処理部２０６は、転送制御部２０４から受け取ったリード要求の順番で応答３１８を転送制御部２０４に返すことができる。
【００７４】
（その他の実施例）
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【符号の説明】
【００７５】
１０７  ローカルバス；  １０８  データ転送部；  ２０４  転送制御部；  ２０６  リード処理部；  ３０１  プロトコル変換部；  ３０４  カウンタ；  ３０６  要求ＩＤＦＩＦＯ；  ３１１  振り分け部；  ３１３  一時格納メモリ；  ３１５  引き抜き部；  ３１７  プロトコル変換部；  ３１９  対応テーブル
【図１】
2018173856.tif 000003
【図２】
2018173856.tif 000004
【図３】
2018173856.tif 000005
【図４】
2018173856.tif 000006
【図５】
2018173856.tif 000007
【図６】
2018173856.tif 000008
【図７】
2018173856.tif 000009
【図８】
2018173856.tif 000010
【図９】
2018173856.tif 000011
【図１０】
2018173856.tif 000012
【図１１】
2018173856.tif 000013