(57)【要約】【課題】ＦＩＦＯモジュールが出力すべき順序でレスポンスを出力できるようにする。【解決手段】レスポンス出力ルーチンが実行されると、ＦＩＦＯモジュール最先に格納したレスポンスである先頭レスポンスの順序情報が予め記憶した順序ガイド値と一致するか否かを判定することで、先頭レスポンスが次に出力すべきレスポンスであるか否かを判定する（ステップＳ１００）。そして、肯定的な判定をしたときには、順序ガイド値を１インクリメントして（ステップＳ１１０）、先頭レスポンスを出力する（ステップＳ１２０）。一方、否定的な判定をしたときには、新たなレスポンスをＦＩＦＯモジュールが格納するレスポンス入力処理中であればレスポンス入力処理が終了するまで待ち（ステップＳ１３０）、ＦＩＦＯモジュールの先頭レスポンスを出力して再格納する（ステップＳ１４０）。このルーチンを繰り返すことにより、レスポンスを出力すべき順序で出力できる。【選択図】図２
2010055170.tif 000002
【特許請求の範囲】
【請求項１】
出力する順序に関する順序情報を有するデータを入力側デバイスから入力して保持し、出力側デバイスへ出力するデータ入出力装置であって、
ＦＩＦＯモジュールと、
前記ＦＩＦＯモジュールから該ＦＩＦＯモジュールに最先に格納されたデータである先頭データを出力するときの出力先を前記出力側デバイスと該ＦＩＦＯモジュール自身とのいずれかに設定する設定手段と、
前記入力側デバイスから新たなデータを入力したときには、該新たなデータを前記ＦＩＦＯモジュールに格納する格納処理を実行する入力制御手段と、
前記ＦＩＦＯモジュールの前記先頭データが有する順序情報に基づいて、該先頭データが次に前記出力側デバイスへ出力すべきデータか否かを判定する判定処理を実行し、前記判定処理で肯定的な判定をしたときには前記出力先を前記出力側デバイスに設定するよう前記設定手段を制御して前記先頭データを前記出力側デバイスへ出力する出力処理を実行し、前記判定処理で否定的な判定をしたときには前記出力先を前記ＦＩＦＯモジュールに設定するよう前記設定手段を制御して前記先頭データを前記ＦＩＦＯモジュールに新たなデータとして再度格納する再格納処理を実行する出力制御手段と、
を備えたデータ入出力装置。
【請求項２】
前記入力制御手段は、前記出力制御手段によって実行される前記再格納処理よりも優先して前記格納処理を行う手段である、
請求項１に記載のデータ入出力装置。
【請求項３】
請求項１又は２に記載のデータ入出力装置であって、
前記ＦＩＦＯモジュールを複数備え、
前記設定手段は、前記複数のＦＩＦＯモジュールから該複数のＦＩＦＯモジュールの各先頭データを出力するときの各先頭データの出力先をそれぞれ前記出力側デバイスと該先頭データを格納しているＦＩＦＯモジュール自身とのいずれかに設定する手段であり、
前記入力制御手段は、前記入力側デバイスから新たなデータを入力したときには、該新たなデータを前記複数のＦＩＦＯモジュールのいずれか１つに格納する格納処理を実行する手段であり、
前記出力制御手段は、前記複数のＦＩＦＯモジュールの各先頭データが有する順序情報に基づいて、各先頭データのいずれかが次に前記出力側デバイスへ出力すべきデータか否かを判定する判定処理を実行し、前記判定処理で肯定的な判定をしたときには前記次に出力すべきデータと判定された先頭データを格納するＦＩＦＯモジュールの出力先を前記出力側デバイスに設定するよう前記設定手段を制御して前記次に出力すべきデータと判定された先頭データを前記出力側デバイスへ出力する出力処理を実行し、前記判定処理で否定的な判定をしたときには前記複数のＦＩＦＯモジュールの各出力先をそれぞれ該ＦＩＦＯモジュール自身に設定するよう前記設定手段を制御して前記複数のＦＩＦＯモジュールの各先頭データを該ＦＩＦＯモジュール自身に新たなデータとして再度格納する再格納処理を実行する手段である、
データ入出力装置。
【請求項４】
請求項３に記載のデータ入出力装置であって、
前記出力制御手段が前記出力処理を行っている間に、該出力処理を行っていないＦＩＦＯモジュールの各先頭データが有する順序情報に基づいて、各先頭データのいずれかが該出力処理で出力している先頭データの次に出力すべきデータか否かを判定する予備判定処理を実行し、前記予備判定処理で否定的な判定をしたときには、該出力処理を行っていないＦＩＦＯモジュールの各出力先をそれぞれ該ＦＩＦＯモジュール自身に設定するよう前記設定手段を制御して該出力処理を行っていないＦＩＦＯモジュールの各先頭データを該ＦＩＦＯモジュール自身に新たなデータとして再度格納する予備再格納処理を実行する予備出力制御手段、
を備えたデータ入出力装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ入出力装置に関する。
【背景技術】
【０００２】
プロセッサシステムにおいて、デバイス間でデータのやり取りを行うにあたり、デバイス毎のデータの入出力タイミングや処理速度の違いを吸収するため、データを一時的に格納する複数のバッファを備え、各デバイスはバッファを介してデータのやり取りをする構成が知られている。しかし、この構成では、複数のバッファのいずれもがデバイス間でやりとりされる最大データ長以上の格納領域を有している必要があり、バッファの利用効率が低下するという問題がある。そこで、複数のバッファの代わりに、入力したデータを入力した順に出力するＦＩＦＯ（Ｆｉｒｓｔ  ｉｎ  Ｆｉｒｓｔ  ｏｕｔ）方式でデータを格納するＦＩＦＯモジュールを用いることが知られている（例えば、特許文献１参照）。
【特許文献１】特開２００８−３６８８４号公報（図６）
【発明の開示】
【発明が解決しようとする課題】
【０００３】
ところで、プロセッサがメモリを制御するメモリコントローラなどのデバイスに対して複数のリクエストを出力して、デバイスからリクエストに対するレスポンスを受け取る場合に、プロセッサがリクエストを出力した順序でしかレスポンスを受け付けない場合がある。しかし、プロセッサが複数のデバイスにリクエストを出力した場合には、リクエストに対するレスポンスが返るまでの時間であるレイテンシがデバイス毎に異なることで、リクエストを出力した順序でレスポンスが返らないことがある。また、マルチバンクアクセス方式のメモリでは、処理速度を向上させるためにリクエストの順序を入れ替えて処理することがあるため、この場合もリクエストを出力した順序でレスポンスが返らないことがある。このような場合にレスポンスをＦＩＦＯモジュールが格納すると、プロセッサがリクエストを出力した順序でレスポンスを返すことができなくなってしまう。
【０００４】
本発明は、上述した課題に鑑みなされたものであり、ＦＩＦＯモジュールがデータを格納する順序とデータを出力すべき順序とが異なる場合に、出力すべき順序でデータを出力することを主目的とする。
【課題を解決するための手段】
【０００５】
本発明は、上述の主目的を達成するために以下の手段を採った。
【０００６】
本発明のデータ入出力装置は、
出力する順序に関する順序情報を有するデータを入力側デバイスから入力して保持し、出力側デバイスへ出力するデータ入出力装置であって、
ＦＩＦＯモジュールと、
前記ＦＩＦＯモジュールから該ＦＩＦＯモジュールに最先に格納されたデータである先頭データを出力するときの出力先を前記出力側デバイスと該ＦＩＦＯモジュール自身とのいずれかに設定する設定手段と、
前記入力側デバイスから新たなデータを入力したときには、該新たなデータを前記ＦＩＦＯモジュールに格納する格納処理を実行する入力制御手段と、
前記ＦＩＦＯモジュールの前記先頭データが有する順序情報に基づいて、該先頭データが次に前記出力側デバイスへ出力すべきデータか否かを判定する判定処理を実行し、前記判定処理で肯定的な判定をしたときには前記出力先を前記出力側デバイスに設定するよう前記設定手段を制御して前記先頭データを前記出力側デバイスへ出力する出力処理を実行し、前記判定処理で否定的な判定をしたときには前記出力先を前記ＦＩＦＯモジュールに設定するよう前記設定手段を制御して前記先頭データを前記ＦＩＦＯモジュールに新たなデータとして再度格納する再格納処理を実行する出力制御手段と、
を備えたものである。
【０００７】
本発明のデータ入出力装置では、出力する順序に関する順序情報を有するデータを入力側デバイスから入力して保持し出力側デバイスへ出力するにあたり、入力側デバイスから新たなデータを入力したときには、新たなデータをＦＩＦＯモジュールに格納する格納処理を実行する。また、ＦＩＦＯモジュールの先頭データが有する順序情報に基づいて、先頭データが次に出力側デバイスへ出力すべきデータか否かを判定する判定処理を実行し、判定処理で肯定的な判定をしたときには出力先を出力側デバイスに設定して先頭データを出力側デバイスへ出力する出力処理を実行し、判定処理で否定的な判定をしたときには出力先をＦＩＦＯモジュールに設定して先頭データをＦＩＦＯモジュールに新たなデータとして再度格納する再格納処理を実行する。こうすることにより、ＦＩＦＯモジュールの先頭データが次に出力すべきデータでないときにはＦＩＦＯモジュールが先頭データを新たなデータとして再格納し、先頭データが次に出力すべきデータとなるまでは出力処理が実行されず再格納処理が繰り返される。したがって、ＦＩＦＯモジュールがデータを格納する順序が出力側デバイスへ出力すべき順序とは異なる場合でも、出力すべき順序で出力側デバイスへデータを出力できる。
【０００８】
本発明のデータ入出力装置において、前記入力制御手段は、前記出力制御手段によって実行される前記再格納処理よりも優先して前記格納処理を行う手段としてもよい。こうすることにより、新たなデータを出力しようとしている入力側デバイスを待たせることがなくなり、入力側デバイスの処理速度の低下を防止できる。
【０００９】
本発明のデータ入出力装置において、前記ＦＩＦＯモジュールを複数備え、前記設定手段は、前記複数のＦＩＦＯモジュールから該複数のＦＩＦＯモジュールの各先頭データを出力するときの各先頭データの出力先をそれぞれ前記出力側デバイスと該先頭データを格納しているＦＩＦＯモジュール自身とのいずれかに設定する手段とし、前記入力制御手段は、前記入力側デバイスから新たなデータを入力したときには、該新たなデータを前記複数のＦＩＦＯモジュールのいずれか１つに格納する格納処理を実行する手段とし、前記出力制御手段は、前記複数のＦＩＦＯモジュールの各先頭データが有する順序情報に基づいて、各先頭データのいずれかが次に前記出力側デバイスへ出力すべきデータか否かを判定する判定処理を実行し、前記判定処理で肯定的な判定をしたときには前記次に出力すべきデータと判定された先頭データを格納するＦＩＦＯモジュールの出力先を前記出力側デバイスに設定するよう前記設定手段を制御して前記次に出力すべきデータと判定された先頭データを前記出力側デバイスへ出力する出力処理を実行し、前記判定処理で否定的な判定をしたときには前記複数のＦＩＦＯモジュールの各出力先をそれぞれ該ＦＩＦＯモジュール自身に設定するよう前記設定手段を制御して前記複数のＦＩＦＯモジュールの各先頭データを該ＦＩＦＯモジュール自身に新たなデータとして再度格納する再格納処理を実行する手段としてもよい。こうすることにより、同時に複数の先頭データに対して判定処理や再格納処理を実行することができるため、出力すべき順序で出力側デバイスへデータをより早く出力することができる。
【００１０】
上述したＦＩＦＯモジュールを複数備える構成のデータ入出力装置において、前記出力制御手段が前記出力処理を行っている間に、該出力処理を行っていないＦＩＦＯモジュールの各先頭データが有する順序情報に基づいて、各先頭データのいずれかが該出力処理で出力している先頭データの次に出力すべきデータか否かを判定する予備判定処理を実行し、前記予備判定処理で否定的な判定をしたときには、該出力処理を行っていないＦＩＦＯモジュールの各出力先をそれぞれ該ＦＩＦＯモジュール自身に設定するよう前記設定手段を制御して該出力処理を行っていないＦＩＦＯモジュールの各先頭データを該ＦＩＦＯモジュール自身に新たなデータとして再度格納する予備再格納処理を実行する予備出力制御手段を備えるものとしてもよい。こうすることにより、出力処理を行っている間に、出力処理で出力しているＦＩＦＯモジュールの先頭データの次に出力すべきデータが他のＦＩＦＯモジュールの先頭データになる可能性が高くなり、出力処理が終了した後の次の判定処理で肯定的な判定がなされる可能性を高くすることができる。
【発明を実施するための最良の形態】
【００１１】
次に、本発明の実施の形態を図面に基づいて説明する。図１は本発明の実施形態であるプロセッサシステム１０の構成の概略を示す構成図である。
【００１２】
プロセッサシステム１０は、図１に示すように、プロセッサ２０がバス７０を介してバスコントローラユニット３０と接続されている。また、バスコントローラユニット３０はバス８０を介してメモリ６１のデータの入出力を制御するメモリコントローラ６０と接続されている。
【００１３】
プロセッサ２０は、メモリ６１に記憶された画像データの印刷に関する処理を行うプロセッサである。具体的には、メモリ６１から読み出した印刷対象の画像データを印刷イメージデータに変換してメモリ６１に記憶するデータ変換処理や、メモリ６１から読み出した印刷イメージデータに基づいて図示しない印刷装置が印刷する場合に必要なインク量をカウントするインク量カウント処理や、カウントしたインク量に基づいて決定した１走査分の印刷イメージデータをメモリ６１から読み出して印刷イメージデータに基づく画像を印刷するよう図示しない印刷装置を制御する印刷処理を行う。プロセッサ２０は、これらの処理を行うにあたり、メモリコントローラ６０に対するデータの入出力要求であるリクエストをバス７０に出力する。このリクエストは、データの読み出し又は書き込みのいずれかを指定するコントロール情報と、データの読み出し又は書き込みを行うメモリ６１のアドレスを指定するアドレス情報とを有しており、リクエストが書き込みを要求する場合には書き込むデータも有している。また、リクエストはプロセッサが定めた順序“１”〜“８”までの順序情報を有している。この順序情報はプロセッサがリクエストを出力した順に順序“１”から順番に値１ずつ大きい値となり、順序“８”の次は再び順序“１”になる。また、メモリコントローラ６０がリクエストに対応してバス８０に出力するレスポンスも同じ順序情報を有しており、プロセッサ２０は、リクエストを出力した順序でレスポンスを入力することを前提として動作している。なお、レスポンスが返ってきていないリクエストが９個以上存在すると同じ順序情報を有するレスポンスが複数返ってくることになってしまうため、レスポンスが返ってきていないリクエストが８個存在するときには、それ以上リクエストを行わない。
【００１４】
バスコントローラユニット３０は、バス７０，８０におけるデータの入出力を調停する装置であり、バスコントローラユニット３０の全体の制御を司るコントローラ３１と、バス７０から入力したリクエストを保持するリクエスト保持部４０と、バス８０から入力したレスポンスを保持するレスポンス保持部５０と、を備えている。
【００１５】
コントローラ３１は、リクエスト保持部４０及びレスポンス保持部５０を制御して、バス７０を介してプロセッサ２０が出力したリクエストを順番にリクエスト保持部４０に入力するリクエスト入力処理や、バス８０を介してリクエスト保持部４０が保持するリクエストを順番にメモリコントローラ６０に出力するリクエスト出力処理や、バス８０を介してメモリコントローラ６０が出力したレスポンスを順番にレスポンス保持部５０に入力するレスポンス入力処理や、バス７０を介してレスポンス保持部５０が保持するレスポンスを順序情報で定められた順序通りにプロセッサ２０に出力するための後述する判定処理，レスポンス出力処理，レスポンス再格納処理などを行う。
【００１６】
リクエスト保持部４０は、リクエストを先入れ先出し（ＦＩＦＯ）の形式で格納する第１ＦＩＦＯモジュール４１を備えており、コントローラ３１がリクエスト入力処理を行うとバス７０からリクエストを入力して第１ＦＩＦＯモジュール４１に格納し、コントローラ３１がリクエスト出力処理を行うと格納したリクエストをバス８０に出力する。
【００１７】
レスポンス保持部５０は、レスポンスを格納する第２ＦＩＦＯモジュール５１と、出力先を選択する出力先セレクタ５２と、入力元を選択する入力元セレクタ５３とを備えている。出力先セレクタ５２は、コントローラ３１がレスポンス出力処理及びレスポンス再格納処理を行うときに出力する制御信号によって、第２ＦＩＦＯモジュール５１から出力されるレスポンスの出力先を入力元セレクタ５３とバス７０とのいずれかに設定するものである。入力元セレクタ５３は、コントローラ３１がレスポンス入力処理及びレスポンス再格納処理を行うときに出力する制御信号によって、第２ＦＩＦＯモジュール５１に入力するレスポンスの入力元を出力先セレクタ５２とバス８０とのいずれかに設定するものである。
【００１８】
第２ＦＩＦＯモジュール５１は、レスポンスを格納するメモリ領域５１ａと、メモリ領域５１ａの読み出しポインタ及び書き込みポインタを設定するポインタ設定部５１ｂと、メモリ領域５１ａに格納しているレスポンスの数を記憶するレスポンス数記憶部５１ｃと、を備えている。メモリ領域５１ａは、読み出しポインタ及び書き込みポインタによって領域内の位置を指定できるようになっており、コントローラ３１がレスポンスを出力するよう制御すると、読み出しポインタで指定された位置からレスポンスが読み出され、コントローラ３１がレスポンスを格納するよう制御すると、書き込みポインタで指定された位置からレスポンスが書き込まれる。なお、レスポンスの読み出しと書き込みとを同時に行うことも可能である。ポインタ設定部５１ｂは、メモリ領域５１ａに最先に格納されたレスポンスすなわち先頭レスポンスの位置を読み出しポインタが指定し、メモリ領域５１ａに最後に格納されたレスポンスすなわち後尾レスポンスの次の位置を書き込みポインタが指定するように、読み出しポインタ及び書き込みポインタを設定する。レスポンス数記憶部５１ｃは、レスポンスを入出力する毎に記憶しているレスポンス数を増減させて、現在メモリ領域５１ａが格納しているレスポンスの数を記憶する。なお、第１ＦＩＦＯモジュール４１も、レスポンスの代わりにリクエストを格納する点以外は第２ＦＩＦＯモジュール５１と同様である。ここで、コントローラ３１は、第１，第２ＦＩＦＯモジュール４１，５１のそれぞれの読み出しポインタ，書き込みポインタ，レスポンス数に基づいて、メモリ領域５１ａの空き状態を把握している。
【００１９】
メモリコントローラ６０は、複数のバンクで構成されたマルチバンクメモリであるメモリ６１へのデータの入出力を制御する装置である。このメモリコントローラ６０は、バス８０からリクエストを入力すると、入力したリクエストのアドレス情報，コントロール情報に基づいてデータの入出力を行うようメモリ６１を制御し、リクエストに対応する順序情報と書き込み完了通知又は読み出したデータとを有するレスポンスをバス８０に出力する。なお、メモリコントローラ６０は、データの読み出しや書き込みの処理時間をなるべく短くするため、入力したリクエストを処理する順序を入れ替えることがある。そのため、メモリコントローラ６０から出力されるレスポンスの順序は、レスポンスが有する順序情報の順番通りにならない場合がある。例えば、順序“２”のレスポンスが順序“１”のレスポンスよりも早くメモリコントローラ６０から出力される場合がある。
【００２０】
次に、こうして構成された実施形態のプロセッサシステム１０の動作、特に、メモリコントローラ６０から入力したレスポンスを順序情報で定められた順序通りにプロセッサ２０に出力するときのバスコントローラユニット３０の動作について説明する。
【００２１】
図２は、バスコントローラユニット３０のコントローラ３１が実行するレスポンス出力ルーチンの一例を示すフローチャートである。このレスポンス出力ルーチンは、例えばプロセッサ２０がリクエストを出力しておらずバス７０が使用可能な状態にあるときなどの、レスポンス出力タイミングで実行される。
【００２２】
このレスポンス出力ルーチンが実行されると、コントローラ３１は、まず、第２ＦＩＦＯモジュール５１が格納している先頭レスポンスの順序情報が順序ガイド値と一致するか否かを判定する判定処理を行う（ステップＳ１００）。ここで、コントローラ３１は、プロセッサ２０に次に出力すべきレスポンスの順序情報を順序ガイド値として記憶している。この順序ガイド値は初期値が“１”であり、レスポンスがプロセッサ２０に出力される毎に１インクリメントされる。プロセッサ２０はリクエストを順序“１”から順に出力するため、レスポンスも順序“１”から順にプロセッサ２０に出力する必要があるが、この順序ガイド値と先頭レスポンスの順序情報とが一致するか否かを判定することで、先頭レスポンスが次に出力すべきレスポンスであるか否かを判定することができる。
【００２３】
そして、ステップＳ１００で肯定的な判定をしたときには、順序ガイド値を１インクリメントして（ステップＳ１１０）、第２ＦＩＦＯモジュール５１の先頭レスポンスが出力先セレクタ５２を経由してバス７０に出力されるよう第２ＦＩＦＯモジュール５１及び出力先セレクタ５２を制御するレスポンス出力処理を行い（ステップＳ１２０）、本ルーチンを終了する。
【００２４】
一方、ステップＳ１００で否定的な判定をしたときには、レスポンス入力処理を実行中であればレスポンス入力処理が終了するまで待ってから（ステップＳ１３０）、第２ＦＩＦＯモジュール５１の先頭レスポンスが出力先セレクタ５２及び入力元セレクタ５３を経由して第２ＦＩＦＯモジュール５２に再度格納されるよう第２ＦＩＦＯモジュール５１，出力先セレクタ５２，入力元セレクタ５３を制御するレスポンス再格納処理を行い（ステップＳ１４０）、本ルーチンを終了する。このレスポンス再格納処理によって、第２ＦＩＦＯモジュール５１の先頭レスポンスが再度入力されて第２ＦＩＦＯモジュール５１の後尾レスポンスとなり、第２ＦＩＦＯモジュール５１の先頭レスポンスの次に格納されていたレスポンスが新たな先頭レスポンスとなる。そして、次のレスポンス出力タイミングで再びレスポンス出力ルーチンが実行されると、新たな先頭レスポンスについてステップＳ１００の判定を行うのである。このようにレスポンス出力ルーチンをレスポンス出力タイミングの度に実行することで、次に出力すべき順序のレスポンスのみがバス８０に出力されるため、プロセッサ２０は順序情報で定められた順序通りにレスポンスを入力することができる。
【００２５】
次に、レスポンス入力処理について説明する。レスポンス入力処理は、レスポンス出力ルーチンとは独立して実行可能であり、例えばメモリコントローラ６０が出力したバス８０の使用要求を図示しない信号線を介して入力したときなどの、レスポンス入力タイミングで実行される。このレスポンス入力処理は、コントローラ３１が、第２ＦＩＦＯモジュール５１にバス８０からのレスポンスを入力元セレクタ５３を経由して格納するよう、第２ＦＩＦＯモジュール５１及び入力元セレクタ５３を制御する処理である。なお、上述したステップＳ１３０でレスポンス入力処理が終了するのを待つのは、レスポンス入力処理とステップＳ１４０のレスポンス再格納処理とを同時には実行できないためである。そのため、このステップＳ１３０により、レスポンス入力処理がレスポンス再格納処理よりも優先して実行されるようにしているのである。
【００２６】
上述したレスポンス出力ルーチンによって第２ＦＩＦＯモジュール５１が格納しているレスポンスをバス７０に出力するときの様子を図３を用いて説明する。図３（ａ）は、レスポンス入力処理によって、メモリコントローラ６０が出力した順序“３”のレスポンスＡ，順序“１”のレスポンスＢをこの順に第２ＦＩＦＯモジュール５１が格納した状態を示している。この図３（ａ）の状態で初めてレスポンス出力タイミングになったとすると、コントローラ３１は、上述したレスポンス出力ルーチンを実行する。そして、第２ＦＩＦＯモジュール５１の先頭レスポンスであるレスポンスＡは順序ガイド値の初期値“１”とは異なる順序情報を有しているためステップＳ１００で否定的な判定をして、ステップＳ１３０の処理を実行する。ここで、ステップＳ１３０の処理を実行したときに、メモリコントローラ６０がバス８０の使用要求を出力して順序“２”のレスポンスＣを出力しようとしていたとすると、レスポンス入力タイミングとなってコントローラ３１はレスポンス出力ルーチンと独立してレスポンス入力処理を実行するため、ステップＳ１３０で否定的な判定が繰り返され、図３（ｂ）に示すように第２ＦＩＦＯモジュール５１がレスポンスＣを格納した後に、ステップＳ１４０の処理を実行してレスポンス出力ルーチンを終了する。このステップＳ１４０の処理により、図３（ｃ）に示すように、第２ＦＩＦＯモジュール５１の先頭レスポンスであるレスポンスＡが再格納されて後尾レスポンスとなり、代わりにレスポンスＡの次に格納したレスポンスＢが先頭レスポンスとなる。
【００２７】
そして、図３（ｃ）の状態で２回目のレスポンス出力タイミングになったとすると、２回目のレスポンス出力ルーチンが実行され、ステップＳ１００で肯定的な判定がなされる。そして、ステップＳ１１０で順序ガイド値が１インクリメントされて“２”となり、図３（ｄ）に示すようにステップＳ１２０で順序“１”のレスポンスＢを出力するレスポンス出力処理を行い、図３（ｅ）に示すようにレスポンスＣが先頭レスポンスとなる。さらに、この状態で３回目のレスポンス出力タイミングとなったとすると、３回目のレスポンス出力ルーチンのステップＳ１００で肯定的な判定がなされて、ステップＳ１２０で順序“２”のレスポンスＣが出力される。このように、レスポンス出力ルーチンを実行することで、順序情報で定められた順序通りにレスポンスを出力することができる。
【００２８】
ここで、本実施形態の構成要素と本発明の構成要素との対応関係を明らかにする。実施形態の第２ＦＩＦＯモジュール５１が本発明のＦＩＦＯモジュールに相当し、出力先セレクタ５２と入力元セレクタ５３とが設定手段に相当し、コントローラ３１が入力制御手段及び出力制御手段に相当する。
【００２９】
以上詳述した本実施形態では、レスポンス出力ルーチンを繰り返し実行することで、第２ＦＩＦＯモジュール５１に格納されたレスポンスが出力すべき順序と異なる順序で格納されていても、出力すべき順序通りにレスポンスを出力することができる。また、レスポンス入力処理をレスポンス再格納処理よりも優先して実行するため、バス８０にレスポンスを出力しようとしているメモリコントローラ６０を待たせることがなくなり、メモリコントローラ６０の処理速度の低下を防止できる。
【００３０】
なお、本発明は上述した実施形態に何ら限定されることはなく、本発明の技術的範囲に属する限り種々の態様で実施し得ることはいうまでもない。
【００３１】
例えば、上述した実施形態では、レスポンスは第２ＦＩＦＯモジュール５１にのみ格納されるが、バスコントローラユニット３０がレスポンス保持部５０と同様の構成のレスポンス保持部を複数備えており、複数のＦＩＦＯモジュールにレスポンスが格納されるものとしてもよい。この場合、上述した図２のレスポンス出力ルーチンのＳ１００，Ｓ１４０を複数のＦＩＦＯモジュールに対して行うこととしてもよい。例えば、バスコントローラユニット３０がレスポンス保持部５０と同様の構成である第２レスポンス保持部５５を備えており、この第２レスポンス保持部５５が第３ＦＩＦＯモジュール５６を備えている場合に、レスポンスをバス７０に出力するときの様子を図４を用いて説明する。図４（ａ）は、レスポンス入力処理によって、メモリコントローラ６０が出力した順序“３”のレスポンスＤ，順序“１”のレスポンスＦをこの順に第２ＦＩＦＯモジュール５１が格納し、順序“４”のレスポンスＥ，順序“５”のレスポンスＧ，順序“２”のレスポンスＨをこの順に第３ＦＩＦＯモジュール５６が格納した状態を示している。なお、レスポンス入力処理によって第２，第３ＦＩＦＯモジュール５１，５６のいずれにレスポンスを入力するかはどのように決定してもよく、例えば空き領域の大きい方に入力するものとしてもよいし、格納するデータ数の少ない方に入力するものとしてもよい。この状態で初めてレスポンス出力ルーチンを実行すると、ステップＳ１００では、第２，第３ＦＩＦＯモジュール５１，５６のいずれの先頭レスポンスの順序情報も順序ガイド値“１”とは一致しないため否定的な判定をする。そして、ステップＳ１３０でレスポンス入力処理中でなければ、ステップＳ１４０で、第２，第３ＦＩＦＯモジュール５１，５６の両方に対して上述したレスポンス再格納処理を行い、レスポンス出力ルーチンを終了する。これにより、図４（ｂ）に示すようにレスポンスＦ，Ｇがそれぞれ第２，第３ＦＩＦＯモジュール５１，５６の先頭レスポンスとなる。そして、２回目のレスポンス出力ルーチンでは、第２ＦＩＦＯモジュール５１の先頭レスポンスＦが順序“１”であるためステップＳ１００で肯定的な判定をして、ステップＳ１１０で順序ガイド値を１インクリメントし、図４（ｃ）に示すようにステップＳ１２０でレスポンスＦがバス７０に出力される。このように、複数のＦＩＦＯモジュールに対してレスポンス出力ルーチンを実行することで、同時に複数の先頭レスポンスに対して判定処理や再格納処理を実行することができるため、出力すべき順序通りにレスポンスをより早く出力することができる。
【００３２】
また、上述した複数のＦＩＦＯモジュールにレスポンスを格納する構成において、レスポンス出力ルーチンのステップＳ１２０を実行している間に、図５に示すレスポンス出力予備ルーチンを実行するものとしてもよい。なお、レスポンス出力予備ルーチンのステップＳ２００，Ｓ２２０，Ｓ２３０では、ステップＳ１２０のレスポンス出力処理を行っていないＦＩＦＯモジュールに対してのみ行う点以外は、レスポンス出力ルーチンのステップＳ１００，Ｓ１３０，Ｓ１４０と同様である。このレスポンス出力予備ルーチンを実行する様子を図６を用いて説明する。図６（ａ），（ｂ）は前出の図４（ａ），（ｂ）と同じであるため、図６（ｂ）に至るまでの説明は省略する。図６（ｂ）の状態で上述した２回目のレスポンス出力ルーチンが実行されると、コントローラ３１は、ステップＳ１２０でレスポンスＦを出力するレスポンス出力処理を実行するとともに、これと平行してレスポンス出力予備ルーチンを実行する。このルーチンが実行されると、まず、ステップＳ１２０でレスポンス出力処理を行っていないＦＩＦＯモジュールに対してステップＳ１００と同様の処理である予備判定処理を行う（ステップＳ２００）。したがって、図６（ｂ）では第２ＦＩＦＯモジュール５１はレスポンス出力処理を行っているので、ステップＳ２００では、第３ＦＩＦＯモジュール５６の先頭レスポンスすなわちレスポンスＧの順序情報が順序ガイド値“２”と一致するか否かを判定する。そして、レスポンスＧは順序情報が“５”であるため否定的な判定をすると、ステップＳ１２０のレスポンス出力処理が終了したか否かを判定し（ステップＳ２１０）、終了していなければレスポンス入力処理中であるか否かを判定する（ステップＳ２２０）。そして、レスポンス入力処理中でなければステップＳ１２０でレスポンス出力処理を行っていないＦＩＦＯモジュールに対してステップＳ１４０と同様の処理であるレスポンス予備再格納処理を行う（ステップＳ２３０）。なお、ステップＳ２２０でレスポンス入力処理中と判定したときには、レスポンス入力処理を優先するためステップＳ２１０に戻る。まだステップＳ１２０のレスポンス出力処理中でありレスポンス入力処理は行っていないとすると、ステップＳ２３０が実行されて、図６（ｃ）に示すように、第３ＦＩＦＯモジュール５６の先頭レスポンスであるレスポンスＧが再格納されてレスポンスＨが新たな先頭レスポンスとなる。そして、ステップＳ２３０の処理を実行するとステップＳ２００に戻り、以降はステップＳ２００又はステップＳ２１０で肯定的な判定をするまでステップＳ２００〜Ｓ２３０の処理を繰り返す。したがって、図６（ｃ）の場合であれば、ステップＳ２３０の後のステップＳ２００で肯定的な判定をするため、そこでレスポンス出力予備ルーチンを終了する。このようにすることで、レスポンス出力処理を行っているレスポンスの次に出力すべきレスポンスが先頭レスポンスになるか又はレスポンス出力処理が終了するまで他のＦＩＦＯモジュールについてレスポンス予備再格納処理が繰り返される。したがって、次のレスポンス出力ルーチンの実行時に、次に出力すべきレスポンスがすでに先頭レスポンスになっている可能性が高くなり、出力すべき順序通りにレスポンスをより早く出力することができる可能性が高くなる。
【００３３】
上述した実施形態では、レスポンスを出力すべき順序で出力しているが、出力する順序に関する順序情報を有するデータであれば、どのようなデータを出力すべき順序で出力するものとしてもよい。例えばリクエストであってもよい。
【００３４】
上述した実施形態では、バスコントローラユニット３０にリクエストを出力するのはプロセッサ２０のみであり、バスコントローラユニット３０にレスポンスを出力するのはメモリコントローラ６０のみであるが、複数の他のデバイスがバス７０及びバス８０に接続されているものとしてもよい。この場合は、レスポンスの出力先毎に順序ガイド値を記憶しておけばよい。
【００３５】
上述した実施形態では、出力先セレクタ５２及び入力元セレクタ５３が第２ＦＩＦＯモジュール５１のレスポンスの出力先及び入力元を設定するものとしたが、他の構成で出力先及び入力元を設定するものとしてもよい。例えば、入力元セレクタ５３を備えていない構成として、レスポンス入力処理を行うときにはレスポンス出力処理やレスポンス再格納処理を行わないこととし、レスポンス再格納処理を行うときにはリクエスト出力処理を行わずバス８０にメモリコントローラ６０がレスポンスを出力することを禁止するものとしてもよい。また、コントローラ３１がバス８０及び第２ＦＩＦＯモジュールからレスポンスを入力して保持したりバス７０及び第２ＦＩＦＯモジュールにレスポンスを出力したりできる構成としておいて、コントローラ３１がレスポンスの出力先及び入力元を設定するものとしてもよい。
【図面の簡単な説明】
【００３６】
【図１】実施形態であるプロセッサシステム１０の構成の概略を示す構成図。
【図２】レスポンス出力ルーチンの一例を示すフローチャート。
【図３】レスポンス出力ルーチンによる処理の様子を説明する説明図。
【図４】ＦＩＦＯモジュールが複数の場合の処理の様子を説明する説明図。
【図５】レスポンス出力予備ルーチンの一例を示すフローチャート。
【図６】ＦＩＦＯモジュールが複数の場合の処理の様子を説明する説明図。
【符号の説明】
【００３７】
１０  プロセッサシステム、２０  プロセッサ、３０  バスコントローラユニット、３１  コントローラ、４０  リクエスト保持部、４１  第１ＦＩＦＯモジュール、５０  レスポンス保持部、５１  第２ＦＩＦＯモジュール、５２  出力先セレクタ、５３  入力元セレクタ、５５  第２レスポンス保持部、５６  第３ＦＩＦＯモジュール、６０  メモリコントローラ、６１  メモリ、７０，８０  バス。
【図１】
2010055170.tif 000003
【図２】
2010055170.tif 000004
【図３】
2010055170.tif 000005
【図４】
2010055170.tif 000006
【図５】
2010055170.tif 000007
【図６】
2010055170.tif 000008