(57)【要約】      （修正有）【課題】メモリアクセスのスループットを向上させる。【解決手段】メモリコントローラは，リクエスト保持部３１が保持する送出待ちのライトリクエストとリードリクエストのうち，ライトリクエストとライトデータをリードリクエストより先に送信バスに送出したときにリードリクエストに対応するリードデータをメモリから受信バスを介して受信開始する第１の受信時間が，リードリクエストをライトリクエストとライトデータより先に送信バスに送出したときにおける第２の受信時間より遅くならない場合，ライトリクエストとライトデータをリードリクエストより先に送信部から送信バスに送出する第１の処理を行い，第１の受信時間が第２の受信時間より遅くなる場合，リードリクエストをライトリクエストとライトデータより先に送信部から送信バスに送出する第２の処理を行うリクエスト調停部３２を有する。【選択図】図４
2015103008.tif 000002
【特許請求の範囲】
【請求項１】
受信したライトリクエストとリードリクエストを保持するリクエスト保持部と，
前記ライトリクエストとライトデータ又は前記リードリクエストを，送信バスを介してメモリに送出する送信部と，
前記リードリクエストに対応するリードデータを，受信バスを介して前記メモリから受信する受信部と，
前記リクエスト保持部が保持する送出待ちのライトリクエストとリードリクエストのうち，
前記ライトリクエストとライトデータを前記リードリクエストより先に前記送信バスに送出したときに前記リードリクエストに対応するリードデータを前記メモリから前記受信バスを介して受信開始する第１の受信時間が，前記リードリクエストを前記ライトリクエストとライトデータより先に前記送信バスに送出したときにおける第２の受信時間より遅くならない場合，前記ライトリクエストとライトデータを前記リードリクエストより先に前記送信部から送信バスに送出する第１の処理を行い，
前記第１の受信時間が前記第２の受信時間より遅くなる場合，前記リードリクエストを前記ライトリクエストとライトデータより先に前記送信部から送信バスに送出する第２の処理を行うリクエスト調停部と有するメモリコントローラ。
【請求項２】
請求項１において，
前記送信部は，クロックに同期して，前記ライトリクエストとライトバースト長のライトデータ又は前記リードリクエストを前記送信バスを介して前記メモリに送出し，
前記受信部は，前記クロックに同期して，前記メモリから前記受信バスを介してリードバースト長の前記リードデータを受信し，
前記リクエスト調停部は，前記リードリクエストを前記送信部から送出するたびに，前記送出するリードリクエストに対応するリードデータ受信時に前記リードデータが前記受信バスを占有するリードデータ受信サイクル数を加算し，カウント値が０でない場合に前記クロックのサイクル毎に１減算するカウンタを有し，
前記リクエスト調停部は，
前記カウンタのカウント値が，前記ライトリクエストとライトバースト長のライトデータを前記送信部から送出するときの前記送信バスを占有するライト送信サイクル数以上の場合，前記第１の処理を行い，
前記カウンタのカウント値が前記ライト送信サイクル数未満の場合，前記第２の処理を行うメモリコントローラ。
【請求項３】
受信したライトリクエストとリードリクエストを保持するリクエスト保持部と，
前記ライトリクエストとライトデータ又は前記リードリクエストを送信バスを介してメモリに送出する送信部と，
前記リードリクエストに対応するリードデータを受信バスを介して前記メモリから受信する受信部と，
前記リクエスト保持部が保持する送出待ちのライトリクエストとリードリクエストのうち，
前記ライトリクエストとライトデータを前記リードリクエストより先に前記送信バスに送出したときに前記リードリクエストに対応するリードデータを前記メモリから前記受信バスを介して受信開始する第１の受信時間が，前記リードリクエストを前記ライトリクエストとライトデータより先に前記送信バスに送出したときにおける第２の受信時間より基準時間以上遅くならない場合，前記ライトリクエストとライトデータを前記リードリクエストより先に前記送信部から送信バスに送出する第１の処理を行い，
前記第１の受信時間が前記第２の受信時間より前記基準時間以上遅くなる場合，前記リードリクエストを前記ライトリクエストとライトデータより先に前記送信部から送信バスに送出する第２の処理を行うリクエスト調停部とを有するメモリコントローラ。
【請求項４】
メモリへのライトリクエスト及びリードリクエストを発行するプロセッサコアと，
前記プロセッサコアが発行する前記ライトリクエスト及びリードリクエストを受信して，前記ライトリクエストまたはリードリクエストを送信バスに送出するメモリコントローラとを有し，
前記メモリコントローラは，
受信したライトリクエストとリードリクエストを保持するリクエスト保持部と，
前記ライトリクエストとライトデータ又は前記リードリクエストを送信バスを介してメモリに送出する送信部と，
前記リードリクエストに対応するリードデータを受信バスを介して前記メモリから受信する受信部と，
前記リクエスト保持部が保持する送出待ちのライトリクエストとリードリクエストのうち，
前記ライトリクエストとライトデータを前記リードリクエストより先に前記送信バスに送出したときに前記リードリクエストに対応するリードデータを前記メモリから前記受信バスを介して受信開始する第１の受信時間が，前記リードリクエストを前記ライトリクエストとライトデータより先に前記送信バスに送出したときにおける第２の受信時間より遅くならない場合，前記ライトリクエストとライトデータを前記リードリクエストより先に前記送信部から前記送信バスに送出する第１の処理を行い，
前記第１の受信時間が前記第２の受信時間より遅くなる場合，前記リードリクエストを前記ライトリクエストとライトデータより先に前記送信部から前記送信バスに送出する第２の処理を行うリクエスト調停部とを有する
情報処理装置。
【請求項５】
受信したライトリクエストとリードリクエストを保持するリクエスト保持部と，前記ライトリクエストとライトデータ又は前記リードリクエストを送信バスを介してメモリに送出する送信部と，前記リードリクエストに対応するリードデータを受信バスを介して前記メモリから受信する受信部とを有するメモリコントローラの制御方法であって，
前記リクエスト保持部が保持する送出待ちのライトリクエストとリードリクエストのうち，
前記ライトリクエストとライトデータを前記リードリクエストより先に前記送信バスに送出したときに前記リードリクエストに対応するリードデータを前記メモリから前記受信バスを介して受信開始する第１の受信時間が，前記リードリクエストを前記ライトリクエストとライトデータより先に前記送信バスに送出したときにおける第２の受信時間より遅くならない場合，前記ライトリクエストとライトデータを前記リードリクエストより先に前記送信部から送信バスに送出する第１の処理を行い，
前記第１の受信時間が前記第２の受信時間より遅くなる場合，前記リードリクエストを前記ライトリクエストとライトデータより先に前記送信部から送信バスに送出する第２の処理を行うメモリコントローラの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，メモリコントローラ，情報処理装置及びメモリコントローラの制御方法に関する。
【背景技術】
【０００２】
メモリコントローラは，プロセッサなどの演算処理装置内に内蔵され，または演算処理装置の外部に設けられ，DRAM（Dynamic Random Access Memory)などのメインメモリへのアクセスを制御する。
【０００３】
情報処理装置のメインメモリとして，従来のDRAMモジュールに代わる素子として，HMC(Hybrid Memory Cube)等に代表されるような，DRAMコントローラチップを内蔵したメモリモジュールの開発が行われている。このようなメモリモジュールは，プロセッサ側のメモリコントローラと高速シリアルバスで接続されている。高速シリアルバスは，送信シリアルバスと受信シリアルバスとを有し，プロセッサ側からのアクセスを要求するリクエストコマンドが送信シリアルバスを介してメモリモジュールに送信される。ライトリクエストの場合は，そのライトリクエストコマンドに加えてライトデータが送信シリアルバスを介して送出される。一方，リードリクエストの場合は，リードリクエストコマンドが送信シリアルバスを介して送出され，レイテンシ後に，メモリモジュールから読み出されたリードデータが受信シリアルバスを介してプロセッサ側に返信される。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１１−１８０６５６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上記の高速シリアルバスの構成においてメモリアクセスを理論的に最大スループットに近づけるためには，プロセッサ側のメモリコントローラが，送信シリアルバスと受信シリアルバスを効率的に占有するようにリクエストコマンドを発行することが望ましい。
【０００６】
しかしながら，上記の高速シリアルバスは，送信シリアルバスには，リードコマンドと，ライトデータ付きのライトコマンドとが混在して送出され，一方，受信シリアルバスにはリードデータが返信されるという制約を有する。そのため，メモリコントローラがライトコマンドを優先して送出するとリードコマンドを送出することができず，逆に，リードコマンドを優先して送出するとライトコマンドの送出が行われず，理論的に最大スループットで制御することは容易ではない。
【０００７】
そこで，本発明の目的は，メモリアクセスのスループットを向上させたメモリコントローラ，情報処理装置及びメモリコントローラの制御方法を提供することにある。
【課題を解決するための手段】
【０００８】
本実施の形態の第１の側面は，受信したライトリクエストとリードリクエストを保持するリクエスト保持部と，
前記ライトリクエストとライトデータ又は前記リードリクエストを送信バスを介してメモリに送出する送信部と，
前記リードリクエストに対応するリードデータを受信バスを介して前記メモリから受信する受信部と，
前記リクエスト保持部が保持する送出待ちのライトリクエストとリードリクエストのうち，
前記ライトリクエストとライトデータを前記リードリクエストより先に前記送信バスに送出したときに前記リードリクエストに対応するリードデータを前記メモリから前記受信バスを介して受信開始する第１の受信時間が，前記リードリクエストを前記ライトリクエストとライトデータより先に前記送信バスに送出したときにおける第２の受信時間より遅くならない場合，前記ライトリクエストとライトデータを前記リードリクエストより先に前記送信部から送信バスに送出する第１の処理を行い，
前記第１の受信時間が前記第２の受信時間より遅くなる場合，前記リードリクエストを前記ライトリクエストとライトデータより先に前記送信部から送信バスに送出する第２の処理を行うリクエスト調停部と有するメモリコントローラである。
【発明の効果】
【０００９】
第１の側面によれば，メモリアクセスのスループットを向上させることができる。
【図面の簡単な説明】
【００１０】
【図１】本実施の形態におけるメモリコントローラとプロセッサとメインメモリの構成を示す図である。
【図２】本実施の形態におけるライトリクエスト時のメモリコントローラの動作を示す図である。
【図３】本実施の形態におけるリードリクエスト時のメモリコントローラの動作を示す図である。
【図４】本実施の形態におけるメモリコントローラ３０の構成図である。
【図５】本実施の形態におけるリクエスト調停部の調停制御を示すフローチャート図である。
【図６】リクエスト受信順に送出する場合のメモリコントローラの動作を示す図である。
【図７】リードリクエストをライトリクエストに優先して送出する場合のメモリコントローラの動作を示す図である。
【図８】本実施の形態におけるメモリコントローラのリクエスト調停動作を示す図である。
【図９】本実施の形態におけるメモリコントローラのリクエスト調停を説明する図である。
【図１０】本実施の形態におけるメモリコントローラのリクエスト調停を説明する図である。
【図１１】カウンタCnがリセットされる場合を説明する図である。
【発明を実施するための形態】
【００１１】
図１は，本実施の形態におけるメモリコントローラとプロセッサとメインメモリの構成を示す図である。図１の例では，プロセッサ１は，プロセッサコア１０と，キャッシュユニット２０と，メモリコントローラ３０とを有する。
【００１２】
プロセッサコア１０は，例えば，命令フェッチ回路１１と，フェッチした命令をデコードするデコーダ１２と，デコードした命令を実行する実行部１３とを有する。一般に，命令の実行時には，プロセッサコア１０は，メインメモリ２からデータをフェッチしてレジスタに格納し，命令に対応する演算を実行し，演算結果をメインメモリ２に書き込む。
【００１３】
キャッシュユニット２０は，キャッシュコントローラ２１とキャッシュメモリ２２とを有する。キャッシュコントローラ２１は，プロセッサコア１０からのメインメモリへのアクセスリクエスト，即ち，ライトリクエストまたはリードリクエストに応答して，キャッシュヒットするか否か判定し，キャッシュヒットミスした場合に，メモリコントローラ３０にライトリクエストまたはリードリクエストを発行する。
【００１４】
メモリコントローラ３０は，発行されたライトリクエストまたはリードリクエストを受信して，図示しないリクエスト保持部で保持し，メインメモリ２に送信シリアルバス（送信バス）T-BUSを介してライトリクエストまたはリードリクエストを送出する。そして，メモリコントローラ３０は，メインメモリから受信シリアルバス（受信バス）R-BUSを介してリードリクエストに対応するリードデータを受信する。メモリコントローラ３０は，ライトリクエストを送出する場合は，後述するとおり，ライトリクエストにライトデータを付加して送出する。
【００１５】
図２は，本実施の形態におけるライトリクエスト時のメモリコントローラの動作を示す図である。メインメモリ２は，例えばDRAMモジュールであり，DRAMコントローラ３と，DRAMメモリと，それらを接続するアドレス及びデータ配線５とを有する。
【００１６】
メモリコントローラ３０は，ライトリクエストをメインメモリ２に送出する場合，ライトリクエストのヘッダW-REQと，そのライトリクエストでライトするデータ群WDATAとからなる９個のライトパケット群４０を，送信シリアルバス（送信バス）T-BUSに送出する。
【００１７】
ライトリクエストのヘッダW-REQは，例えば，メモリアドレスと，バースト長と，ライトリクエストとを有するパケットである。ライトリクエストのヘッダW-REQとライトデータ群WDATAのパケットは，例えば６４ビット長である。図２の例では，バースト長が８であり，それに伴い，８個のデータのパケットWDATAがヘッダW-REQに続いてシリアルに送出される。
【００１８】
送信シリアルバス（送信バス）T-BUSは６４ビット幅を有し，６４ビットのパケットがクロックに同期して送出される。したがって，図２の９個のライトパケット群４０は，９クロックサイクルの間，送信シリアルバスT-BUSを占有する。また，ライトリクエスト時は，受信シリアルバス（受信バス）R-BUSは占有されない。
【００１９】
メインメモリ２内のDRAMコントローラ３は，ライトリクエストのヘッダW-REQに応答して，DRAM４に，例えばアクティブコマンドとロウアドレスを供給し，その後ライトコマンドとコラムアドレス及びライトデータを供給する。
【００２０】
図３は，本実施の形態におけるリードリクエスト時のメモリコントローラの動作を示す図である。メモリコントローラ３０は，リードリクエストをメインメモリ２に送出する場合，リードリクエストのヘッダR-REQを，送信シリアルバス（送信バス）T-BUSに送出する。リードリクエストのヘッダR-REQは，ライトリクエストのヘッダと同様に，メモリアドレスと，バースト長と，リードリクエストとを有する６４ビットのパケットである。したがって，リードリクエストのヘッダのパケットR-REQは，１クロックサイクルの間，送信シリアルバスT-BUSを占有する。
【００２１】
一方，メモリコントローラ３０は，リードリクエストのヘッダR-REQを送出してからレイテンシLa経過後に，リード応答ヘッダR-RESとそれに後続するメインメモリ２から読み出された８バースト長のリードデータ群RDATAを有する９個のリード応答パケット群４２を，受信シリアルバス（受信バス）R-BUSを介して受信開始する。リードデータ群RDATAも６４ビットのパケットである。メインメモリ２内のDRAMコントローラ３は，クロックに同期してリード応答パケット群４２を送信するので，９個のリード応答パケット群４２は，９クロックサイクルの間，受信シリアルバスR-BUSを占有する。
【００２２】
以上のとおり，ライトリクエストなら，そのライトリクエストのヘッダW-REQと８個のライトデータWDATAのパケット群４０が，送信シリアルバス（送信バス）T-BUSを占有する。一方，リードリクエストなら，そのリードリクエストのヘッダR-REQのパケット４１が送信シリアルバスT-BUSを１クロックサイクル占有し，レイテンシ経過後に８個のリードデータRDATAのパケット群４２が受信シリアルバスR-BUSを占有する。なお，上記のバースト長８は一例であり，バースト長は固定であっても変動であってもよい。
【００２３】
そこで，ライトリクエスト発行時に送信バスT-BUSを占有するクロックサイクル数をTw，リードリクエスト発行後リードデータ受信時に受信バスR-BUSを占有するクロックサイクル数をTr,リードリクエスト発行時のリードリクエスト送出からリードデータを受信開始するまでの平均レイテンシをLaとそれぞれ定義する。上記の例では，バースト長が８であるので，Tw=9，Tr=9であり，リードリクエストのヘッダR-REQが送信バスT-BUSを占有するクロックサイクル数は１である。また，平均レイテンシLaは，一例としてLa=20とする。
【００２４】
メインメモリ２は，図２，３で説明したとおり，DRAMメモリコントローラ３が，DRAM４内の図示しない複数のメモリブロックに，リードリクエストに対応するアクティブコマンドとリードコマンドを出力する。したがって，連続する複数のリードリクエストのアドレスが同じメモリブロックに重なると，レイテンシは長くなる傾向になり，重ならないと短くなる傾向になる。そこで，本実施の形態では，平均レイテンシLaを利用してリクエスト調停を行う。但し，リードリクエストのレイテンシが正確に判定できる場合は，そのレイテンシを利用してリクエスト調停を行っても良い。
【００２５】
図４は，本実施の形態におけるメモリコントローラ３０の構成図である。メモリコントローラ３０は，受信したライトリクエストとリードリクエストを保持するリクエスト保持部３１と，ライトリクエストとライトデータ又は前記リードリクエストを送信バス（送信シリアルバス）T-BUSを介してメモリ２に送出する送信部（リクエスト送信部）TXと，リードリクエストに対応するリードデータを受信バス（受信シリアルバス）R-BUSを介してメモリ２から受信する受信部（リクエスト受信部）RXと，ライトリクエストとリードリクエストのいずれを先に送出するかを調停するリクエスト調停部３２とを有する。
【００２６】
リクエスト調停部３２は，例えば，リクエスト保持部３１が保持する送出待ちのライトリクエストとリードリクエストのうち，ライトリクエストを先に送出してもその後に送出されるリードリクエストに対応するリードデータの受信開始時間が，リードリクエストを先に送出した場合と同じ場合は，ライトリクエストを優先して送出する。一方，リクエスト調停部３２は，ライトリクエストを先に送出してその後リードリクエストを送出した場合に，そのリードリクエストに対応するリードデータの受信開始時間が，リードリクエストを先に送出した場合より遅れる場合は，リードリクエストを優先して送出する。
【００２７】
別の言い方をすれば，リクエスト調停部３２は，原則としてリードリクエストが送出待ち状態であればライトリクエストに優先して送出するよう調停する。但し，複数のリードリクエストを送出した結果，受信バスR-BUSがそれらリードリクエストのリードデータのパケット群４２により受信バスR-BUSが長時間にわたり占有されてしまい，次のリードリクエストより先にライトリクエストを送出しても，次のリードリクエストのリードデータの受信開始時間がライトリクエストを優先したことにより遅れることがない場合は，ライトリクエストを優先して送出するよう調停する。これにより，原則リードリクエストを優先して送出することで受信バスをR−BUSの占有状態を最適化でき，更にライトリクエストを先に送出してもリードデータの受信時間が同じ場合はライトリクエストを先に送出することで，ライトリクエストの送出が遅れることを回避できる。
【００２８】
図５は，本実施の形態におけるリクエスト調停部の調停制御を示すフローチャート図である。リクエスト調停部３２は，リクエスト保持部３１がライトリクエストとリードリクエストを同時に保持していずれのリクエストも送出対象になっているかを判定する（S10）。リクエスト調停部３２は，リードリクエストのみが送出対象であれば（S10のRのみ），そのリードリクエストを選択してリクエスト送信部TXから送出させる（S11）。一方，リクエスト調停部３２は，ライトリクエストのみが送出対象であれば（S10のWのみ），そのライトリクエストを選択してリクエスト送信部TXから送出させる（S12）。
【００２９】
リードリクエストとライトリクエストがいずれも送出対象としてリクエスト保持部３１に保持されている場合は（S10のYES），リクエスト調停部３２は，ライトリクエストを先に送出してもリードリクエストに対応するリードデータの受信開始時間が，リードリクエストを先に送出した場合と同じであるか否か，別の言い方をすれば，ライトリクエストを先に送出してもリードリクエストに対応するリードデータの受信開始時間が遅くならないか否かを判定する（S13）。
【００３０】
ライトリクエストを先に送出してもリードリクエストに対応するリードデータの受信開始時間が，リードリクエストを先に送出した場合と同じである場合は（S13のYES），リクエスト調停部３２は，ライトリクエストを選択して，リードリクエストに優先して先にライトリクエストをリクエスト送信部TXに出力し，送信バスT-BUSに送出させる（S14）。受信開始時間が同じではなく（S13のNO），リードデータの受信開始時間が遅くなる場合は，リクエスト調停部３２は，リードリクエストを選択して，ライトリクエストに優先して先にリードリクエストをリクエスト送信部TXに出力し，送信婆T-BUSに送出させる（S15）。
【００３１】
以上のように，リクエスト調停部による調停制御では，リードリクエスト間及びライトリクエスト間それぞれでは，ファーストインファーストアウトで送出し，リードリクエストとライトリクエストが競合する場合は，原則リードリクエストを優先して送出し，ライトリクエストを先に送出してもリードデータの受信開始時間が遅れない場合にライトリクエストを優先して先に送出する。
【００３２】
より具体的にリクエスト調停制御を説明すると，次のとおりである。
【００３３】
すなわち，リクエスト調停部３２は，リクエスト保持部３１が保持する送出待ちのライトリクエストとリードリクエストのうち，ライトリクエストとライトデータをリードリクエストより先に送信バスT-BUSに送出した場合にリードリクエストに対応するリードデータをメモリ２から受信バスR-BUSを介して受信する第１の受信時間が，リードリクエストをライトリクエストとライトデータより先に送信バスT-BUSに送出する場合における第２の受信時間より遅くならない場合に，ライトリクエストとライトデータをリードリクエストより先にリクエスト送信部TXから送信バスT-BUSに送出する第１の処理を行う。また，リクエスト調停部３２は，第１の受信時間が第２の受信時間より遅くなる場合に，リードリクエストをライトリクエストとライトデータより先にリクエスト送信部TXから送信バスT-BUSに送出する第２の処理を行う。
【００３４】
図４に示されたメモリコントローラ３０のより具体的な構成は以下のとおりである。
【００３５】
メモリコントローラ３０内のリクエスト保持部３１は，プロセッサコア側から受信するライトリクエストまたはリードリクエストを受信してライトリクエストとリードリクエストの種別を判別して，ライトリクエストならライトキュー保持部WQに保持させ，リードリクエストならリードキュー保持部RQに保持させるリクエスト処理部３１を有する。
【００３６】
更に，リクエスト保持部３１は，ライトキュー保持部WQとリードキュー保持部RQとを有し，それらは，共に，FIFO(First-In-First-Out)方式で記憶するバッファである。したがって，ライトリクエスト間では，プロセッサコア側から受信した順番にメインメモリ２に送出され，同様に，リードリクエスト間では，プロセッサコア側から受信した順番にメインメモリ２に送出される。
【００３７】
リクエスト調停部３２は，ライトキュー保持部WQとリードキュー保持部RQそれぞれの先頭のライトリクエストとリードリクエストを調停して，いずれを先に送信バスT-BUSから送出するかを選択する。リクエスト調停部３２で選択されたリクエストは，リクエスト送信部TXから，送信シリアルバスT-BUSに，ライトリクエストのパケット群４０として送出されるか，またはリードリクエストのヘッダR-REQのパケット４１として送出される。
【００３８】
リクエスト調停部３２は，ライトキュー保持部WQとリードキュー保持部RQそれぞれの先頭のライトリクエストとリードリクエストのうちいずれかを先に送出すべきかを判定する調停制御部３４と，調整制御部３４が先に送出すると判定したライトリクエストまたはリードリクエストを選択してリクエスト送信部TXに出力するリクエストセレクタ３３とを有する。図中，R/Wは選択信号である。
【００３９】
リクエスト調停部３２の調停制御部３４は，前述した方法でライトリクエストとリードリクエストのいずれを先に送出するかを調停する。調整制御部３４の具体的な構成は，リードリクエストを送出した時に，リクエスト送信部TXからのリードリクエスト送出信号Routに応答して，受信バス占有サイクル数Trを加算し，カウンタ値Cnが０でないときにクロックCLKに同期してクロックサイクル毎に１減算するCnカウンタ３５を有すると共に，Cnカウンタ３５のカウンタ値Cnと送信バス占有サイクル数Twとを比較する比較器３６とを有する。
【００４０】
そして，比較器３６は，カウント値Cnが送信バス占有サイクル数Tw以上（Cn≧Tw）であれば，ライトリクエストをリードリクエストに優先して選択し，Cn≧Twが成立しない場合は，リードリクエストをライトリクエストに優先して選択する。比較器３６がライトリクエストを選択したら，リクエストセレクタ３３がライトキュー保持部WQ内のライトリクエストを選択して，リクエスト送信部TXにライトリクエストのパケット群４０を送信バスT-BUSに送出させる。一方，比較器３６がリードリクエストを選択したら，リクエストセレクタ３３がリードキュー保持部RQ内のリードリクエストを選択して，リクエスト送信部TXにリードリクエストのヘッダパケット４１を送信バスT-BUSに送出させる。リクエスト送信部TXがリードリクエストのヘッダパケット４１を送出するタイミングで出力するリードリクエスト送出信号Routに応答して，アンドゲート３７を介してCnカウンタ３５にTrが加算される。
【００４１】
次に，メモリコントローラ３０によるリクエスト調停について図を参照して説明する。この説明により，上記のCn≧Trによるリクエスト調停の原理が理解される。
【００４２】
図６は，リクエスト受信順に送出する場合のメモリコントローラの動作を示す図である。前提として，リードリクエストを送出してからリードデータの受信開始までの時間であるレイテンシLaの平均時間をLa=20，ライトリクエストのパケット群が送信バスを占有する時間TwをTw=9，リードリクエストに対応するリードデータのパケット群が受信バスを占有する時間TrをTr=9とする。つまり，ライトリクエストもリードリクエストもバースト長が８の例である。そして，リクエスト保持部３１には，R1,W1,W2,R2,R3,R4の順番でリクエストを既に受信し保持しているものとする。なお，Rは受信リクエスト，Wはライトリクエストである。
【００４３】
図６の例では，メモリコントローラ３０のリクエスト調停部３２が，リクエストを受信順に送信バスT-BUSに送出する調停を行う。したがって，（１）クロックCLK=1でリードリクエストR1のヘッダ４１が送信バスT-BUSに送出され，レイテンシLa_R1=20のクロックCLK=21から９サイクル（Tr=9）の間，リードデータが受信バスを占有する。そして，（２）クロックCLK=2でライトリクエストW1が送信バスT-BUSに送出され，クロックCLK=2から９サイクル（Tw=9）の間，ライトリクエストのヘッダとライトデータのパケット群が送信バスT-BUSを占有する。
【００４４】
さらに，（３）クロックCLK=11から９サイクル，次のライトリクエストW2のパケット群が，送信バスT-BUSを占有する。その後，（４）クロックCLK=20からリードリクエストR2,R3,R4が連続して送信バスT-BUSに送出され，リードレイテンシLa=20後のクロックCLK=40からリードリクエストR2のリードデータが９サイクルの間受信バスR-BUSを占有し，クロックCLK=49,58からリードリクエストR3,R4のリードデータがそれぞれ９サイクルの間受信バスR-BUSを占有する。
【００４５】
図６のようにリクエストを受信順に送出すると，クロックCLK=2〜19において，ライトリクエストW1,W2を送出する１８サイクルの間リードリクエストを送出できないので，リードリクエストR2,R3,R4の送出がCLK=20-22と遅れて，それぞれのレイテンシLa_R2,La_R3,La_R4後にならないとリードデータを受信できない。
【００４６】
プロセッサコアは，一般に，データをメインメモリからフェッチし，演算し，演算結果をメインメモリにライトバックする。したがって，データのライトよりもデータのリード（データフェッチ）を優先して実行させ，できるだけ遅延なくリードデータを取得することが望ましい。そのため，図６の例では，CLK=30-39の期間５０で受信バスR-BUSに空きが発生しているので，スループットが低下している。
【００４７】
図７は，リードリクエストをライトリクエストに優先して送出する場合のメモリコントローラの動作を示す図である。前提条件は，図６と同じである。プロセッサコアのデータフェッチ，演算，演算結果のライトバックという一般的な処理の順番を考慮すると，図７のようにリードリクエストをライトリクエストに優先して送出して受信バッファに空きサイクルが発生しないようにするのが望ましい。
【００４８】
リードリクエスト優先にすると，図７に示されるとおり，CLK=1-4でリードリクエストR1,R2,R3,R4が先に送出され，その後，クロックCLK=5からライトリクエストW1のパケット群が送出され，CLK=14からライトリクエストW2のパケット群が送出される。そして，リードリクエストR1のレイテンシLa_R1後のクロックCLK=21から４つのリードリクエストに対するリードデータ群が連続して受信バスR-BUSを占有する。したがって，受信バスR-BUSには空きサイクルは発生しない。
【００４９】
ただし，リードリクエストを優先したため，ライトリクエストW1,W2がいつまでも送出されないことになる。
【００５０】
しかも，リードリクエストR1に対するリードデータは，レイテンシLa_R1後のCLK=21から受信開始するが，R2に対するリードデータはレイテンシLa_R2に８サイクル加えたクロックCLK=30から受信開始し，R3の場合はLa_R3に１６サイクル加えたクロックCLK=39から受信開始し，R4の場合はLa_R4に２４サイクル加えたクロックCLK=47から受信開始している。このことは，たとえリードリクエストを優先して送出しても，複数のリードリクエストを連続して送出すると，受信バスR-BUSの占有状態が長期化して，受信開始まで長い時間待たされることを意味する。したがって，そのリードデータの長い待ち時間の間にライトリクエストを先に送出しても，リードリクエストの受信開始時間は同じになる場合があることを意味する。
【００５１】
図８は，本実施の形態におけるメモリコントローラのリクエスト調停動作を示す図である。また，図９，１０は，本実施の形態におけるメモリコントローラのリクエスト調停を説明する図である。前提条件は，図６，７と同じである。
【００５２】
図５に示したとおり，本実施の形態でのリクエスト調停では，リードリクエストとライトリクエストがリクエスト保持部３１に保持され送出を待っている場合は，リードリクエストを優先して送出した場合のリードデータの受信開始時間と，ライトリクエストを優先して送出しその後リードリクエストを送出した場合のリードデータの受信開始時とを比較し，ライトリクエストを優先して送出してもリードデータの受信開始時間が同じである場合は，ライトリクエストを先に送出した後にリードリクエストを送出する。この原理に基づいて，リクエスト調停動作を説明する。
【００５３】
[CLK=1でR1かW1かの調停]
リクエスト調停部３２は，まず，リードリクエストR1とライトリクエストW1のいずれを先に送出するかについて判定する。この段階では，リードリクエストR1をCLK=1で送出するとそのレイテンシLa_R1=20後のCLK=21からリードデータを受信開始できるので，当然にリードリクエストR1をライトリクエストW1より先に送出するよう調停する。すなわち，図８では，CLK=1でリードリクエストR1が送出されている。
【００５４】
[CLK=2でR2かW1かの調停]
次に，リクエスト調停部３２は，CLK=2において，リードリクエストR2とライトリクエストW1のいずれを先に送出するかについて判定する。この判定方法が，図９に示されている。図９には，リードリクエストR2を先に送出する場合R2と，ライトリクエストW1を先に送出した後にリードリクエストR2を送出する場合W1/R2とが示されている。
【００５５】
リードリクエストR2を先に送出する場合R2は，クロックCLK=2でリードリクエストR2のヘッダ４１を送信バスT-BUSに送出すると，レイテンシLa_R2にCLK=22-29の８サイクルを加えたCLK=30から受信バスR-BUSにリードデータが受信開始する。このCLK=22-29の８サイクルは，クロックCLK=2でのカウンタCnのカウント値に等しい。つまり，このCLK=22-29の８サイクルは，リードリクエストR1のリードデータが受信バスR-BUSの占有を完了するまでのクロックサイクル（La_R1＋Tr）と，CLK=2で送出したリードリクエストR2のレイテンシLa_R2からCLK=1からCLK=2までの経過クロック数CLK（１）を加えたクロックサイクル（La_R2＋CLK(1)）との差分であり，次のとおりである。
（La_R1＋Tr）−（La_R2＋CLK(1)）    （式１）
リードリクエストR1のレイテンシLa_R1とR2のLa_R2とが等しい(La_R1=La_R2=20)とすると，上記の式１は，次の通りである。
（La_R1＋Tr）−（La_R2＋CLK(1)）＝Tr-CLK(1)    （式２）
この式２は，リードリクエストR1のリードデータが受信バスR-BUSを占有するサイクルTr=9から，リードリクエストR1送出後次のリードリクエストR2を送出するまでに経過したクロックサイクル１を減じたカウンタCnのカウント値に等しい。
Cn＝Tr-CLK(1)    （式３）
このカウント値Cnは，図９中の破線５１（CLK=22-28)のクロックサイクルを意味する。
【００５６】
一方，ライトリクエストW1を先に送出した後にリードリクエストR2を送出する場合W1/R2は，CLK=2でライトリクエストW1のパケット群４０を送出するとリードリクエストR2はCLK=11で送出されるので，それからレイテンシLa_R2後のCLK=31からリードデータを受信開始することになる。この受信開始時間CLK=31は，リードリクエストR2を先に送出した場合の受信開始時間CLK=30より遅れる。それに伴い，受信バスR-BUSには１サイクルの空サイクルが発生することになる。つまり，R2を先に送出する場合は，R1,R2が連続して送出されるため，R2に対するリードデータの受信開始は，R1のリードデータの受信が完了した後になる。
【００５７】
そこで，リクエスト調停部３２は，図９中破線５１で示した，R2を先に送出した場合のR2のレイテンシLa_R2経過後からR1のリードデータの受信が完了する時間までのサイクル数Cnが，ライトリクエストW1による送信バスT-BUSの占有サイクルTw以上（Cn≧Tw）か否かを判定する。Cn≧TwがYESであればライトリクエストW1を先に送出してリードリクエストR2の送出がサイクルTw遅くなってもリードデータ受信開始は遅れない。一方，NOであればライトリクエストW1を挿入するとリードデータ受信開始が遅れるので，リードリクエストR2を先に送出する。
【００５８】
図９の例では，カウンタCnは，CLK=1でR1の送出によりCn=9になり，CLK=2でCn=8になっているので，Cn≧TwがNOとなり，リードリクエストR2が先に送出される。すなわち，図８に示されるとおり，CLK=2ではリードリクエストR2がW1より先に送出される。
【００５９】
このように，カウンタCnは，リードリクエストが送出されるとTr追加され，カウント値が０でなければクロックCLKに同期して１ずつ減算する。よって，カウンタCnのカウント値は，La_R1=La_R2とすれば，判定時CLK=2からレイテンシLa_R2経過時（CLK=20)と，判定時CLK=2で送出済みリードリクエストのリードデータによる受信バスR-BUS占有状態が終了する時（CLK=29)との間のサイクル数（図９中破線矢印５１のサイクル数）を意味する。
【００６０】
[CLK=3でR3かW1かの調停]
次に，リクエスト調停部３２は，CLK=3において，リードリクエストR3とライトリクエストW1のいずれを先に送出するかについて判定する。この判定方法が，図１０に示されている。図１０には，リードリクエストR3を先に送出する場合R3と，ライトリクエストW1を先に送出した後にリードリクエストR3を送出する場合W1/R3とが示されている。
【００６１】
リードリクエストR3を先に送出する場合は，クロックCLK=3でリードリクエストR3のヘッダ４１を送信バスT-BUSに送出すると，レイテンシLa_R3に矢印５２で示す１６サイクルを加えたCLK=39から受信バスR-BUSにリードデータが受信開始する。この１６サイクルは，リードリクエストR1,R2のレイテンシLa_R1,La_R2とR3のLa_R3とが等しい(La_R1=La_R2=La_R3=20)とすると，リードリクエストR1,R2のリードデータが受信バスR-BUSを占有するサイクル2Tr=18から，リードリクエストR1後R3を送出するまでに経過したクロックサイクル２を減じたカウンタCnのカウント値に等しい。
【００６２】
一方，ライトリクエストW1を先に送出した後にリードリクエストR3を送出する場合W1/R3は，CLK=3でライトリクエストW1のパケット群４０を送出することにより，リードリクエストR3はCLK=12で送出され，それからレイテンシLa_R3経過後であってR1,R2のリードデータの受信バスR-BUS占有状態が完了した後のCLK=39からR3のリードデータを受信開始することになる。この受信開始時間CLK=39は，リードリクエストR3を先に送出した場合の受信開始時間CLK=39と同じであり，遅れることはない。したがって，図８に示したように，リクエスト調停部３１は，ライトリクエストW1を先に送出するよう調停する。
【００６３】
上記の調停を，カウンタCnのカウント値で説明すると，図１０に示されるとおり，CLK=3でのカウンタCnのカウント値はCn=16に減じられている。したがって，CLK=3の判定時では，Cn=16≧Tr=9はYESとなる。つまり，リードリクエストR3を先に送出した場合は，CLK=3からレイテンシLa_R3=20経過後さらにサイクルCn=16後のCLK=39からしかR3に対するリードデータを受信開始できないので，R3の前にW1を送出しても，リードデータの受信開始時間はCLK=39と同じであることを意味している。したがって，ライトリクエストW1が先に送出される。
【００６４】
[CLK=12でR3かW2かの調停]
次に，図８に示されるように，リクエスト調停部３２は，CLK=12でR3かW2かの判定を行う。CLK=12ではカウント値がCn=7に減っているので，Cn=7≧Tr=9はNOとなり，リードリクエストR3が先に送出される。
【００６５】
[CLK=13でR4かW2かの調停]
次に，図８に示されるように，リクエスト調停部３２は，CLK=13で，R4かW2かの判定を行う。CLK=13ではカウント値がCn=15に増加しているので，Cn=15≧Tr=9はYESとなり，ライトリクエストW2が先に送出される。
【００６６】
図８に示されるように，本実施の形態のリクエスト調停方法によれば，受信バスR-BUSにできるだけ空きサイクルが生じないように，リードリクエストの送出を優先的に行うが，連続してリードリクエストが送出されると受信バスR-BUSを占有する時間が長くなり送出するリードリクエストのリードデータ受信開始時間が遅くなる。したがって，この遅れのサイクル数Cnがライトリクエスト送出による送信バスT-BUSの占有サイクルTw以上であれば，ライトリクエストをリードリクエストに優先して送出する。この判断は，カウンタCnのカウント値が占有サイクルTw以上か否かによって行うことができる。
【００６７】
図１１は，カウンタCnがリセットされる場合を説明する図である。図１１の例は，リクエスト保持部３１が，CLK=1の時にリードリクエストR1のみを保持し，その後一定のクロックサイクル後のCLK=11でR2,R3,W1,W1,R4を保持する場合を前提にしている。
【００６８】
リクエスト調停部３２は，CLK=1で送出待ちの唯一のリードリクエストR1を送出する。したがって，Cn=9になる。そして，カウント値Cnはクロックサイクル毎に減じられCLK=10で０になる。したがって，それ以上カウント値が減じられることはない。
【００６９】
その後，CLK=11でリードリクエストR2が送出されると，カウント値Cnが新たにTr=9加算されて，新たにクロックサイクル毎に減じられることになる。
【００７０】
このように，リードリクエストが連続して送出されない場合でも，カウンタCnのカウント値は０になるとリセットされ，後続するリードリクエストの送出で再度Tr=9が加算されて新たにカウントダウンを開始するので，カウンタCnのカウント値は適切にリクエスト調停の判定のために維持される。
【００７１】
［第２の実施の形態］
第２の実施の形態でのリクエスト調停部３１の調停方法では，Cn+D≧Tw (Dは許容できるリードデータ受信遅延量)がYESならライトリクエストWを先に送出し，NOならリードリクエストRを先に送出する。ここで，Dは許容できるリードデータ受信遅延量に設定され，例えばD=2などである。Cn+D≧TwがYESの場合はリードデータの受信開始時間の遅れが許容遅延時間D以内になるので，ライトリクエストWの送出を行い，NOなら遅れが許容遅延時間Dを超えるのでリードリクエストRの送出を行う。
【００７２】
リクエスト調停部３２がこの許容可能遅延時間Dを適応制御することで，リードリクエストの優先度の度合いまたはライトリクエストの遅延の度合いを適応制御することができる。つまり，リクエスト調停部３２は，受信バスR-BUSにリードデータの占有状態が空き状態になる許容遅延時間Dを適切に設定することで，上記の適応制御を行う。
【００７３】
［第３の実施の形態］
第１の実施の形態では，リードリクエストとライトリクエストのバースト長が８と固定であることを前提にして，Tr=9,Tw=9で判定した。それに対して，第３の実施の形態では，選択対象のリードリクエストのバースト長が固定でなく変動する場合，及び／又はライトリクエストのバースト長が固定でなく変動する場合にも対応できるようにする。
【００７４】
すなわち，第３の実施の形態では，Tr=バースト長＋１，Tw=バースト長＋１で，リードリクエスト送出時にカウンタCnにTrを加算し，Cn≧Twの判定を行うようにする。このようにすることで，バースト長が可変の場合にも，本実施の形態のリクエスト調停の判定を行うことができる。
【００７５】
第３の実施の形態においても，第２の実施の形態のように許容遅延時間Dを考慮してリクエスト調停の判定をおこなってもよい。
【００７６】
以上説明したとおり，本実施の形態によれば，メモリコントローラとメインメモリとの間を送信シリアルバスT-BUSと受信シリアルバスR-BUSで接続する構成において，理論上最大のスループットでリードリクエストとライトリクエストの送出制御を行うことができる。
【００７７】
以上の実施の形態をまとめると，次の付記のとおりである。
【００７８】
（付記１）
受信したライトリクエストとリードリクエストを保持するリクエスト保持部と，
前記ライトリクエストとライトデータ又は前記リードリクエストを，送信バスを介してメモリに送出する送信部と，
前記リードリクエストに対応するリードデータを，受信バスを介して前記メモリから受信する受信部と，
前記リクエスト保持部が保持する送出待ちのライトリクエストとリードリクエストのうち，
前記ライトリクエストとライトデータを前記リードリクエストより先に前記送信バスに送出したときに前記リードリクエストに対応するリードデータを前記メモリから前記受信バスを介して受信開始する第１の受信時間が，前記リードリクエストを前記ライトリクエストとライトデータより先に前記送信バスに送出したときにおける第２の受信時間より遅くならない場合，前記ライトリクエストとライトデータを前記リードリクエストより先に前記送信部から送信バスに送出する第１の処理を行い，
前記第１の受信時間が前記第２の受信時間より遅くなる場合，前記リードリクエストを前記ライトリクエストとライトデータより先に前記送信部から送信バスに送出する第２の処理を行うリクエスト調停部と有するメモリコントローラ。
【００７９】
（付記２）
付記１において，
前記送信部は，クロックに同期して，前記ライトリクエストとライトバースト長のライトデータ又は前記リードリクエストを前記送信バスを介して前記メモリに送出し，
前記受信部は，前記クロックに同期して，前記メモリから前記受信バスを介してリードバースト長の前記リードデータを受信し，
前記リクエスト調停部は，前記リードリクエストを前記送信部から送出するたびに，前記送出するリードリクエストに対応するリードデータ受信時に前記リードデータが前記受信バスを占有するリードデータ受信サイクル数を加算し，カウント値が０でない場合に前記クロックのサイクル毎に１減算するカウンタを有し，
前記リクエスト調停部は，
前記カウンタのカウント値が，前記ライトリクエストとライトバースト長のライトデータを前記送信部から送出するときの前記送信バスを占有するライト送信サイクル数以上の場合，前記第１の処理を行い，
前記カウンタのカウント値が前記ライト送信サイクル数未満の場合，前記第２の処理を行うメモリコントローラ。
【００８０】
（付記３）
付記１または２において，
前記リクエスト保持部は，前記ライトリクエストを受信順に保持し前記受信順に出力するライトリクエストキュー保持部と，前記リードリクエストを受信順に保持し前記受信順に出力するリードリクエストキュー保持部とを有し，
前記リクエスト調停部は，前記ライトリクエストキュー保持部の先頭のライトリクエストと，前記リードリクエストキュー保持部の先頭のリードリクエストのいずれを先に送出するかを調停するメモリコントローラ。
【００８１】
（付記４）
受信したライトリクエストとリードリクエストを保持するリクエスト保持部と，
前記ライトリクエストとライトデータ又は前記リードリクエストを送信バスを介してメモリに送出する送信部と，
前記リードリクエストに対応するリードデータを受信バスを介して前記メモリから受信する受信部と，
前記リクエスト保持部が保持する送出待ちのライトリクエストとリードリクエストのうち，
前記ライトリクエストとライトデータを前記リードリクエストより先に前記送信バスに送出したときに前記リードリクエストに対応するリードデータを前記メモリから前記受信バスを介して受信開始する第１の受信時間が，前記リードリクエストを前記ライトリクエストとライトデータより先に前記送信バスに送出したときにおける第２の受信時間より基準時間以上遅くならない場合，前記ライトリクエストとライトデータを前記リードリクエストより先に前記送信部から送信バスに送出する第１の処理を行い，
前記第１の受信時間が前記第２の受信時間より前記基準時間以上遅くなる場合，前記リードリクエストを前記ライトリクエストとライトデータより先に前記送信部から送信バスに送出する第２の処理を行うリクエスト調停部とを有するメモリコントローラ。
【００８２】
（付記５）
付記４において，
前記送信部は，クロックに同期して，前記ライトリクエストとライトバースト長のライトデータ又は前記リードリクエストを前記送信バスを介して前記メモリに送出し，
前記受信部は，前記クロックに同期して，前記メモリから前記受信バスを介してリードバースト長の前記リードデータを受信し，
前記リクエスト調停部は，前記リードリクエストを前記送信部から送出するたびに，前記送出するリードリクエストに対応するリードデータ受信時に前記リードデータが前記受信バスを占有するリードデータ受信サイクル数を加算し，カウント値が０でない場合に前記クロックのサイクル毎に１減算するカウンタを有し，
前記リクエスト調停部は，前記カウンタのカウント値に前記基準時間のクロックサイクル数を加算した値が，前記ライトリクエストとライトバースト長のライトデータを前記送信部から送出するときの前記送信バスを占有するライト送信サイクル数以上の場合に，前記第１の処理を行い，
前記カウンタのカウント値に前記基準時間のクロックサイクル数を加算した値が前記ライト送信サイクル数未満の場合に，前記第２の処理を行うメモリコントローラ。
【００８３】
（付記６）
メモリへのライトリクエスト及びリードリクエストを発行するプロセッサコアと，
前記プロセッサコアが発行する前記ライトリクエスト及びリードリクエストを受信して，前記ライトリクエストまたはリードリクエストを送信バスに送出するメモリコントローラとを有し，
前記メモリコントローラは，
受信したライトリクエストとリードリクエストを保持するリクエスト保持部と，
前記ライトリクエストとライトデータ又は前記リードリクエストを送信バスを介してメモリに送出する送信部と，
前記リードリクエストに対応するリードデータを受信バスを介して前記メモリから受信する受信部と，
前記リクエスト保持部が保持する送出待ちのライトリクエストとリードリクエストのうち，
前記ライトリクエストとライトデータを前記リードリクエストより先に前記送信バスに送出したときに前記リードリクエストに対応するリードデータを前記メモリから前記受信バスを介して受信開始する第１の受信時間が，前記リードリクエストを前記ライトリクエストとライトデータより先に前記送信バスに送出したときにおける第２の受信時間より遅くならない場合，前記ライトリクエストとライトデータを前記リードリクエストより先に前記送信部から前記送信バスに送出する第１の処理を行い，
前記第１の受信時間が前記第２の受信時間より遅くなる場合，前記リードリクエストを前記ライトリクエストとライトデータより先に前記送信部から前記送信バスに送出する第２の処理を行うリクエスト調停部とを有する
情報処理装置。
【００８４】
（付記７）
受信したライトリクエストとリードリクエストを保持するリクエスト保持部と，前記ライトリクエストとライトデータ又は前記リードリクエストを送信バスを介してメモリに送出する送信部と，前記リードリクエストに対応するリードデータを受信バスを介して前記メモリから受信する受信部とを有するメモリコントローラの制御方法であって，
前記リクエスト保持部が保持する送出待ちのライトリクエストとリードリクエストのうち，
前記ライトリクエストとライトデータを前記リードリクエストより先に前記送信バスに送出したときに前記リードリクエストに対応するリードデータを前記メモリから前記受信バスを介して受信開始する第１の受信時間が，前記リードリクエストを前記ライトリクエストとライトデータより先に前記送信バスに送出したときにおける第２の受信時間より遅くならない場合，前記ライトリクエストとライトデータを前記リードリクエストより先に前記送信部から送信バスに送出する第１の処理を行い，
前記第１の受信時間が前記第２の受信時間より遅くなる場合，前記リードリクエストを前記ライトリクエストとライトデータより先に前記送信部から送信バスに送出する第２の処理を行うメモリコントローラの制御方法。
【００８５】
（付記８）
受信したライトリクエストとリードリクエストを保持するリクエスト保持部と，前記ライトリクエストとライトデータ又は前記リードリクエストを送信バスを介してメモリに送出する送信部と，前記リードリクエストに対応するリードデータを受信バスを介して前記メモリから受信する受信部とを有するメモリコントローラの制御方法であって，
前記リクエスト保持部が保持する送出待ちのライトリクエストとリードリクエストのうち，
前記ライトリクエストとライトデータを前記リードリクエストより先に前記送信バスに送出したときに前記リードリクエストに対応するリードデータを前記メモリから前記受信バスを介して受信開始する第１の受信時間が，前記リードリクエストを前記ライトリクエストとライトデータより先に前記送信バスに送出したときにおける第２の受信時間より基準時間以上遅くならない場合，前記ライトリクエストとライトデータを前記リードリクエストより先に前記送信バスに送出する第１の処理を行い，
前記第１の受信時間が前記第２の受信時間より前記基準時間以上遅くなる場合，前記リードリクエストを前記ライトリクエストとライトデータより先に前記送信バスに送出する第２の処理を行うメモリコントローラの制御方法。
【符号の説明】
【００８６】
１：プロセッサ（情報処理装置）
１０：プロセッサコア
３０：メモリコントローラ
Ｔ−ＢＵＳ：送信シリアルバス（送信バス）
Ｒ−ＢＵＳ：受信シリアルバス（受信バス）
３１：リクエスト保持部
３２：リクエスト調停部
３５：Ｃｎカウンタ
Ｃｎ：カウント値
Ｔｗ：ライトリクエスト及びライトデータの送信バス占有クロックサイクル数
Ｔｒ：リードデータの受信バス占有クロックサイクル数
【図１】
2015103008.tif 000003
【図２】
2015103008.tif 000004
【図３】
2015103008.tif 000005
【図４】
2015103008.tif 000006
【図５】
2015103008.tif 000007
【図６】
2015103008.tif 000008
【図７】
2015103008.tif 000009
【図８】
2015103008.tif 000010
【図９】
2015103008.tif 000011
【図１０】
2015103008.tif 000012
【図１１】
2015103008.tif 000013