以下、図面を用いて実施形態が説明される。以下では、信号等の情報が伝達される信号線には、信号名と同じ符号を使用する。また、図中に単線で示す信号線が、複数ビットの場合もある。
図1は、一実施形態におけるメモリアクセスコントローラを含む演算処理装置の一例を示す。図1に示す演算処理装置1は、メモリアクセスコントローラ2を有する。メモリアクセスコントローラ2は、データの読み出しサイズが異なる複数のメモリアクセス要求MREQに基づいてメモリ6のアクセスを制御可能である。例えば、データの読み出しサイズは、1回のメモリアクセス要求MREQに応じてメモリ6から読み出されるデータDQのサイズまたはデータDQの出力回数である。
メモリアクセスコントローラ2は、アクセス制御部3、バッファ制御部4および複数のバッファ5(5a、5b)を有する。アクセス制御部3は、複数のメモリアクセス要求MREQを受けた場合、メモリ6にアクセスコマンドを出力する。例えば、メモリ6は、データを保持する複数のバンクグループBG(BG0、BG1)を有してもよい。
以下では、メモリアクセス要求MREQが読み出しアクセス要求であり、アクセス制御部3がメモリ6にリードコマンドRDを出力する例が説明される。なお、メモリ6がDRAM(Dynamic Random Access Memory)の場合、アクセス制御部3は、リードコマンドRDを出力する前にアクティブコマンドACTを出力してもよい。
アクセス制御部3は、複数もメモリアクセス要求MREQに対応してメモリ30から出力されるデータDQ(読み出しデータ)の競合を避けるタイミングで、複数のメモリアクセス要求MREQに対応するリードコマンドRDをメモリ30にそれぞれ出力する。アクセス制御部3は、リードコマンドRDに応答してメモリ6からデータDQが出力されるタイミングに合わせてデータ入力タイミング信号DQINをバッファ制御部4に出力する。
バッファ制御部4は、データ入力タイミング信号DQINに基づいてバッファ5a、5bのいずれかにライトポインタ値WP(WPa、WPb)を出力する。ライトポインタ値WPは、メモリ6から読み出されるデータDQを格納するバッファ5の格納位置を示す。そして、バッファ5a、5bには、リードコマンドRDにそれぞれ対応してメモリ6から読み出されるデータDQが、メモリアクセス要求MREQ毎に格納される。例えば、各バッファ5は、保持したデータDQの出力時にシフト動作するシフトレジスタの構造(すなわち、FIFO(First-In First-Out)の構造)を有する。
アクセス制御部3は、所定量のデータDQがバッファ5に格納されたタイミングで、バッファ5に保持されたデータDQの外部への出力開始タイミングを示すイネーブル信号ENを、バッファ5毎にバッファ制御部4に出力する。バッファ制御部4は、イネーブル信号ENに基づいて、対応するバッファ5にデータシフト信号DSFT(DSFTa、DSFTb)を出力する。例えば、データシフト信号DSFTは、パルス信号であり、バッファ5から出力するデータDQの数のパルスを含む。バッファ5は、データシフト信号DSFTに応じて、保持しているデータDQを出力データDOUTとして順次出力する。
ここで、アクセス制御部3が、先行のメモリアクセス要求MREQに対応するメモリアクセスの実行中に後続のメモリアクセス要求MREQを受けるとする。この場合、アクセス制御部3は、後続のメモリアクセス要求MREQに対応するイネーブル信号ENを、先行のメモリアクセス要求MREQに対応するイネーブル信号ENの後に出力する。すなわち、アクセス制御部3は、後続のメモリアクセス要求MREQに対応するバッファ5からの出力データDOUTの出力開始タイミングを、先行のメモリアクセス要求MREQに対応するバッファ5からの出力データDOUTの出力開始タイミングより遅らせる。
図2は、図1のメモリアクセスコントローラ2の動作の一例を示す。すなわち、図2は、メモリアクセスコントローラ2によるメモリアクセス方法の一例を示す。図2では、メモリアクセスコントローラ2は、バンクグループBG0に対するメモリアクセス要求MREQ0と、バンクグループBG1に対するメモリアクセス要求MREQ1とを順次受ける。メモリアクセスコントローラ2は、メモリアクセス要求MREQ0に対応するアクティブコマンドACT0をメモリ6に出力した後、メモリアクセス要求MREQ1に対応するアクティブコマンドACT1をメモリ6に出力する。
次に、メモリアクセスコントローラ2は、メモリアクセス要求MREQ0に対応する複数のリードコマンドRD0と、メモリアクセス要求MREQ1に対応する複数のリードコマンドRD1とをメモリ6に出力する。例えば、メモリアクセス要求MREQ0のデータの読み出しサイズに対応するデータの出力回数は"16"であり、メモリアクセス要求MREQ1のデータの読み出しサイズに対応するデータの出力回数は"8"である。また、1回のリードコマンドRDで4個のデータDQがメモリ6から出力される。このため、メモリアクセスコントローラ2は、メモリアクセス要求MREQ0に対応してリードコマンドRD0を4回出力し(バースト長="4")、メモリアクセス要求MREQ1に対応してリードコマンドRD1を2回出力する。
リードコマンドRD0に応答してメモリ6から読み出されるデータDQ0(DQ00、DQ01、DQ02、DQ03)は、バッファ5aに順次格納される。リードコマンドRD1に応答してメモリ6から読み出されるデータDQ1(DQ10、DQ11)は、バッファ5bに順次格納される。なお、各データDQ00、DQ01、DQ02、DQ03、DQ10、DQ11は、4個のデータDQを含む。
アクセス制御部3は、所定量のデータDQ0がバッファ5aに格納されたタイミングで、イネーブル信号EN0をバッファ制御部4に出力する。また、アクセス制御部3は、イネーブル信号EN0の出力後、所定量のデータDQ1がバッファ5bに格納されたタイミングで、イネーブル信号EN1をバッファ制御部4に出力する。
バッファ制御部4は、イネーブル信号EN0に基づいてバッファ5aを制御し、バッファ5aに保持されたデータをDQ00、DQ01、DQ02、DQ03を出力データDOUTとして順次出力させる。バッファ制御部4は、イネーブル信号EN1を受信したとき、バッファ5aからデータDQ01が出力中であるため、バッファ5bからのデータDQ10の出力制御を保留する。
そして、バッファ制御部4は、バッファ5aからのデータDQ03の出力完了タイミングに合わせてバッファ5bを制御し、バッファ5bに保持されたデータをDQ10、DQ11を出力データDOUTとして順次出力させる。すなわち、アクセス制御部3は、後続のメモリアクセス要求MREQに対応するバッファ5からの出力データDOUTの出力開始タイミングを、先行のメモリアクセス要求MREQに対応するバッファ5からの出力データDOUTの出力開始タイミングより遅らせる。これにより、メモリアクセスコントローラ2は、様々なデータの読み出しサイズのメモリアクセス要求MREQに応じてメモリ30からデータDQを読み出す場合にも、メモリアクセス要求MREQの受付順にしたがってデータDQを出力できる。
なお、かぎ括弧で示したイネーブル信号EN1は、先行のメモリアクセス要求MREQ0の有無にかかわりなく、最初のリードコマンドRD1から所定の期間後に出力するタイミングの例を示す。すなわち、かぎ括弧で示したイネーブル信号EN1は、メモリアクセスコントローラ2が、先行のメモリアクセス要求MREQ0の有無に応じてイネーブル信号EN1の出力タイミングを遅らせる機能を持たない場合の例を示す。
この場合、かぎ括弧で示すように、メモリアクセス要求MREQ1に対応するデータDQ1が、メモリアクセス要求MREQ0に対応するデータDQ0より先に出力される。すなわち、メモリアクセス要求MREQの受付順と逆の順序でデータDQ1、DQ0が順次出力されてしまう。
以上、この実施形態では、メモリアクセスコントローラ2は、データDQの読み出しサイズが異なる複数のメモリアクセス要求MREQに応じてメモリ6から出力されるデータDQをアクセス要求MREQの発行順にしたがって発行元のデバイスに出力できる。これにより、例えば、読み出しサイズの小さいメモリアクセス要求MREQ1の前に発行された読み出しサイズの大きいメモリアクセス要求MREQ0に対応する読み出しデータのデバイスへの応答の遅れを抑制することができる。この結果、メモリアクセス要求MREQの発行元のデバイスの処理性能が、他のメモリアクセス要求MREQのデータの読み出しサイズにより低下することを抑制することができる。
バッファ制御部4は、後続のメモリアクセス要求MREQ1に対応するデータDQの出力が、先行のメモリアクセス要求MREQ0に対応するデータDQの出力と重複する場合、イネーブル信号EN1の受信に基づくデータDQ1の出力の開始を遅らせる。これにより、2つのバッファ5a、5bからのデータDQ0、DQ1の衝突を抑止することができる。この結果、誤ったデータDQ(DOUT)がメモリアクセスコントローラ2から出力されることを抑止することができる。
図3は、別の実施形態におけるメモリアクセスコントローラを含む演算処理装置の一例を示す。図3に示す演算処理装置10は、例えば、CPU(Central Processing Unit)である。以下では、演算処理装置10をCPU10とも称する。
CPU10は、複数のコア12、キャッシュ14、ネットワーク制御部16、インタコネクト18およびメモリアクセスコントローラ20を有する。各コア12は、キャッシュ14に格納された命令を実行し、キャッシュ14に格納されたデータの演算を実行する。各コア12は、演算実行部の一例である。
例えば、キャッシュ14は、LLC(Last Level Cache)であり、複数のコア12に共通に接続される。キャッシュ14は、メインメモリ等のメモリ30に記憶されたデータおよび命令の一部および他のデバイスに接続されるメモリに記憶されたデータおよび命令の一部を記憶可能である。特に限定されないが、メモリ30は、DDR(Double Data Rate)4-SDRAMである。
ネットワーク制御部16は、キャッシュ14、インタコネクト18およびメモリアクセスコントローラ20を相互に接続する。インタコネクト18は、他のデバイス等に接続され、他のデバイスとの間で通信を実行する。ここで、他のデバイスは、CPU10に接続される外部デバイスである。他のデバイスは、CPU10とともに情報処理装置(システム)に搭載される他のCPU10でもよく、CPU10とともに情報処理装置に搭載されるDMAC(Direct Memory Access Controller)でもよい。インタコネクト18は、外部デバイスに接続されるインタフェース部の一例である。
メモリアクセスコントローラ20は、メモリ30に接続され、メモリ30のアクセスを制御する。例えば、メモリアクセスコントローラ20は、コア12またはインタコネクト18を介してCPU10の外部から発行されるメモリアクセス要求(図4のMREQ)に基づいてメモリ30のアクセスを制御する。
メモリアクセスコントローラ20がCPU10の内部および外部からメモリアクセス要求MREQを受ける場合、データの読み出しサイズ(後述するパケットサイズPS)が様々になる場合がある。後述するように、メモリアクセスコントローラ20は、データの読み出しサイズが互いに異なる複数のメモリアクセス要求MREQに応じて、メモリ30からデータを読み出し、読みだしたデータをデータバッファ280(図4)に保持できる。そして、メモリアクセスコントローラ20は、データバッファ280に保持したデータを、メモリアクセス要求MREQの受付順に出力できる。
例えば、メモリアクセス要求がリードアクセス要求の場合、メモリアクセスコントローラ20は、リードアクセス要求に基づいて、メモリ30にリードアクセスし、メモリ30に記憶されたデータをリードする。また、メモリアクセス要求がライトアクセス要求の場合、メモリアクセスコントローラ20は、ライトアクセス要求に基づいて、メモリ30にライトアクセスし、メモリ30にデータをライトする。
例えば、メモリアクセスコントローラ20は、1つのメモリアクセス要求に応じて、メモリアクセス要求に含まれる読み出しサイズのデータをメモリ30から読み出す。データの読み出しサイズは、CPU10とDMAC等の他のデバイスとで相違されてもよく、CPU10のグループ毎に相違されてもよい。
なお、CPU10に搭載されるコア12の数は、1つでもよい。また、CPU10は、キャッシュ14およびネットワーク制御部16を持たなくてもよい。その場合、各コア12がメモリアクセスコントローラ20に接続される。
図4は、図3のメモリアクセスコントローラ20の一例を示す。メモリアクセスコントローラ20は、リクエスト受信部210、スケジューリング部220、リクエスト保持パイプライン230、設定レジスタ240、複数の処理部25(250、251、252)およびセレクタ260を有する。また、メモリアクセスコントローラ20は、バッファ制御部270およびデータバッファ280を有する。スケジューリング部220、リクエスト保持パイプライン230および複数の処理部25は、アクセス制御部の一例である。
リクエスト受信部210は、ネットワーク制御部16(図3)から受けるメモリアクセス要求MREQに含まれるリクエスト情報REQINFをスケジューリング部220に出力する。例えば、リクエスト情報REQINFは、動作種別(ライトまたはリード)、バンクアドレス、ロウアドレス、カラムアドレス、バリッドフラグおよびパケットサイズPS等を含む。リクエスト受信部210は、有効レベルのバリッドフラグを含むメモリアクセス要求MREQを受け付け、無効レベルのバリッドフラグを含むメモリアクセス要求MREQを受け付けない。
スケジューリング部220は、メモリ30に供給するクロックであるメモリクロックMCLKに同期して動作する。なお、メモリクロックMCLKは、スケジューリング部220だけでなく、メモリアクセスコントローラ20内のクロック同期回路に供給される。スケジューリング部220は、設定レジスタ240に設定された並列度l(エル)、位相差mおよび平均リクエスト間隔nに基づいて、資源番号NXTRSCおよびシフト信号SFTOUT0をリクエスト情報REQINFとともにリクエスト保持パイプライン230に出力する。
また、スケジューリング部220は、設定レジスタ240に設定された最長パケットサイズMPSをリクエスト情報REQINFに含めてリクエスト保持パイプライン230に出力する。例えば、リクエスト情報REQINFに対応するメモリアクセスが実行されていないときに、スケジューリング部220が他のリクエスト情報REQINFを受信したとする。この場合、スケジューリング部220は、メモリアクセス要求を単独で受信したことを示す単独要求情報REQALNをリクエスト情報REQINFに含めてリクエスト保持パイプライン230に出力する。
並列度lは、メモリアクセスの並列度を示し、メモリ30のアクセスを制御する、並列に動作する処理部25(250、251、252)の数を示す。並列度lは、メモリ30の動作周波数に応じて変更されてもよい。以下では、メモリアクセスの並列度が"2"であるとして説明される。位相差mは、メモリ30に供給するアクティブコマンドACTの最小供給間隔(メモリクロックMCLKのサイクル数)を示し、並列度l(処理部25の動作数)に応じて異なる。
平均リクエスト間隔nは、アクティブコマンドACTの平均供給間隔(メモリクロックMCLKのサイクル数)を示す。最長パケットサイズMPSは、メモリアクセスコントローラ20に供給されるメモリアクセス要求MREQが示すパケットサイズPSのうち、最長のパケットサイズPSを示し、CPU10およびメモリ30が搭載されるシステムの仕様に応じて設定される。パケットサイズPSは、1回のメモリアクセス要求MREQに対応してメモリ30から読み出されるデータDQのサイズまたはデータDQの出力回数を示す。最長パケットサイズMPSは、最大のデータの読み出しサイズの一例である。
資源番号NXTRSCは、アクティブコマンドACTおよびリードコマンドRD等のアクセスコマンドを生成する処理部25を識別する番号であり、"0"が処理部250、"1"が処理部251、"2"が処理部252を示す。スケジューリング部220の例は、図5に示し、アクティブコマンドACTおよびリードコマンドRDの例は、図10以降に示す。例えば、アクティブコマンドACTは、メモリ30に含まれる複数のワード線のいずれかを選択するためにメモリ30に出力される。リードコマンドRDは、選択されたワード線に接続される複数のメモリセルのうちの所定数を選択するためにメモリ30に出力される。
リクエスト保持パイプライン230は、シフト信号SFTOUT0に基づいて動作する直列に接続された複数(この例では、j+1個)のステージSTG(STG0-STGj)を有する。"j"は、2以上の整数であり、例えば、"7"である。各ステージSTGは、資源番号NXTRSC(以下、単に資源番号RSCとも称する)と経過サイクルCYCとリクエスト情報REQINFとを保持する保持領域を有する。例えば、経過サイクルCYCは、メモリクロックMCLKのクロックサイクル数で示される。互いに隣接するステージSTG間での情報のシフトは、図7で説明するシフト入力信号SFTINに同期して実行される。
リクエスト保持パイプライン230は、動作モードに応じたタイミングで初段のステージSTG0から後段のステージSTG1-STGjに資源番号RSC、経過サイクルCYCおよびメモリアクセス要求REQINFをシフトするシフトレジスタとして動作する。但し、リクエスト保持パイプライン230は、並列度lと資源番号RSCとに応じて、ステージSTGが情報を保持する期間(サイクル数)が変化する点で、通常のシフトレジスタと異なる。リクエスト保持パイプライン230の各ステージSTGの例は、図7に示す。
設定レジスタ240は、並列度l、位相差m、平均リクエスト間隔n、最長パケットサイズMPS、ロウタイミングTROWおよびカラムタイミングTCOLがそれぞれ設定されるレジスタを有する。例えば、並列度l、位相差m、平均リクエスト間隔n、最長パケットサイズMPS、ロウタイミングTROWおよびカラムタイミングTCOLは、メモリ30およびCPU10等の仕様に応じて、設定レジスタ240に設定される。例えば、設定レジスタ240への設定は、CPU10の初期化プログラムにより実行される。並列度l、位相差m、平均リクエスト間隔nは、各処理部25とスケジューリング部220とに供給される。最長パケットサイズMPSは、スケジューリング部220に供給される。ロウタイミングTROWおよびカラムタイミングTCOLは、各処理部25に供給される。
各処理部25(250、251、252)は、リクエスト保持パイプライン230の各ステージSTGから出力されるリクエスト情報REQINF(メモリアクセス要求)を含む情報に基づいて、複数のアクセスコマンドをメモリ30に出力する。複数のアクセスコマンドは、ロウ制御信号ROWおよびカラム制御信号COLとしてメモリ30に出力される。ロウ制御信号ROWは、アクティブコマンドACT、バンクアドレスおよびロウアドレスを含む。カラム制御信号COLは、リードコマンドRD(またはライトコマンド)、バンクアドレスおよびカラムアドレスを含む。
例えば、各処理部25は、自処理部25を示す資源番号RSCを保持するステージSTGが出力する経過サイクルCYCに基づいて、リクエスト情報REQINFを使用してロウ制御信号ROWまたはカラム制御信号COLを出力する。例えば、並列度l=2の場合、処理部250、251が動作し、処理部252は動作を停止する。並列度l=3の場合、処理部250、251、252が動作する。
また、各処理部25は、データ入力タイミング信号DQINおよびイネーブル信号ENを生成するデータタイミング制御部255を有する。データタイミング制御部255は、リードコマンドRDに対応してメモリ30からデータDQが出力されるタイミングに合わせてデータ入力タイミング信号DQINを生成する。また、データタイミング制御部255は、メモリアクセス要求MREQ毎にデータバッファ290から出力データDOUTの出力が可能になったことに基づいてイネーブル信号ENを生成する。イネーブル信号ENは、データバッファ280に保持されたデータDQをメモリアクセスコントローラ20の外部に出力する出力開始タイミングを示す。
さらに、データタイミング制御部255は、カラム制御信号COLの出力に使用したリクエスト情報REQINFをバッファ制御部270に出力してもよい。なお、バッファ制御部270に出力するリクエスト情報REQINFは、処理部25内の別の要素から出力されてもよい。処理部25の例は、図8に示す。
セレクタ260は、各処理部25が出力するロウ制御信号ROWおよびカラム制御信号COLを選択してメモリ30に出力する。なお、セレクタ260は、オア回路の論理で設計されてもよい。
バッファ制御部270は、データ入力タイミング信号DQINに基づいて、メモリ30から読み出されたデータDQをデータバッファ280に格納する制御を実行する。また、バッファ制御部270は、イネーブル信号ENに基づいて、データバッファ280に保持されたデータDQを出力データDOUTとして出力する制御を実行する。データバッファ280は、メモリ30から読み出されるデータDQを保持する複数のバッファを有する。バッファ制御部270およびデータバッファ280の例は、図9に示す。
図5は、図4のスケジューリング部220の一例を示す。スケジューリング部220は、リクエスト情報出力部221、資源番号出力部222、クロックカウンタ223およびシフト信号生成部224を有する。
リクエスト情報出力部221は、リクエスト受信部210から受けるリクエスト情報REQINFと設定レジスタ240に保持された最長パケットサイズMPSを順次保持する。リクエスト情報出力部221は、保持した情報と単独要求情報REQALNとをリクエスト情報REQINFとして、シフト信号SFTOUT0に同期してリクエスト保持パイプライン230に順次出力する。
資源番号出力部222は、リクエスト情報REQINFを使用してメモリ30に出力するアクセスコマンドを生成する処理部25(250、251、252)を示す資源番号NXTRSCを順次生成して出力する。資源番号出力部222は、並列度l=2の場合、シフト信号SFTOUT0に同期して、例えば、処理部250、251を示す"0"、"1"を資源番号NXTRSCとして交互に出力する。資源番号出力部222は、並列度l=3の場合、シフト信号SFTOUT0に同期して、処理部250、251、252を示す"0"、"1"、"2"を資源番号NXTRSCとして交互に出力する。
これにより、資源番号出力部222を、"並列度l-1"を最大値として資源番号NXTRSCを交互に生成するカウンタとして動作させることができ、資源番号NXTRSCの総数を、並列度l(動作モード)に応じて相違させることができる。並列度lに応じて資源番号NXTRSCを交互に出力できるため、並列度lの設定にかかわりなく、リクエスト保持パイプライン230を動作させることができる。この結果、メモリアクセスコントローラ20は、並列度lに応じたタイミングでアクセスコマンドをメモリ30に出力することができる。
クロックカウンタ223は、メモリクロックMCLKに同期してカウンタ値CNTを生成し、生成したカウンタ値CNTをシフト信号生成部224に出力する。例えば、クロックカウンタ223は、シフト信号SFTOUT0が出力されていない間、メモリクロックMCLKに同期してカウンタ値CNTをインクリメントする。また、クロックカウンタ223は、シフト信号SFTOUT0の出力に応答してカウンタ値CNTを"1"にリセットする。
シフト信号生成部224は、資源番号NXTRSC、カウンタ値CNT、並列度l、位相差mおよび平均リクエスト間隔nに基づいて決定される時間間隔でシフト信号SFTOUT0を生成し、出力する。
シフト信号生成部224は、並列度l=2、資源番号NXTRSC=0の場合、カウンタ値CNT=mのときにシフト信号SFTOUT0を出力する。シフト信号生成部224は、並列度l=2で資源番号NXTRSC=1の場合、カウンタ値CNT="2n-m"のときにシフト信号SFTOUT0を出力する。シフト信号生成部224は、並列度l=3の場合、カウンタ値CNTが"n"になる毎にシフト信号SFTOUT0を出力する。
図6は、図5のスケジューリング部220の動作の一例を示す。図6は、並列度l=2、位相差m=4、平均リクエスト間隔n=8の例を示す。
スケジューリング部220は、並列度l=2の場合、資源番号NXTRSC=0のとき、クロックカウンタ223が"4"をカウントしたことに基づいてシフト信号SFTOUT0を出力する。また、スケジューリング部220は、並列度l=2の場合、資源番号NXTRSC=1のとき、クロックカウンタ223が"12"をカウントしたことに基づいてシフト信号SFTOUT0を出力する。
スケジューリング部220は、CPU10に接続されるメモリ30の仕様に応じて設定された並列度l、位相差mおよび平均リクエスト間隔nと、現在の資源番号NXTRSCとに基づいて、カウンタ値CNTの最大値を変更することができる。そして、スケジューリング部220は、最大値が可変なカウンタ値CNTに基づいて、所望のタイミングでシフト信号SFTOUT0を出力することができ、シフト信号SFTOUT0の出力に合わせて資源番号NXTRSCを更新することができる。
図7は、図4のリクエスト保持パイプライン230のステージSTGの一例を示す。各ステージSTGの構成は、互いに同じであるため、図7では、2段分(k-1段目とk段目(kは、1以上、8以下の整数)を示す。各ステージSTGは、資源番号保持部231、経過サイクル保持部232、リクエスト情報保持部233およびシフト信号生成部234を有する。
なお、初段のステージSTG0は、図5のスケジューリング部220から出力される資源番号RSC、リクエスト情報REQINFおよびシフト信号SFTOUT0を受ける。ステージSTG0は、スケジューリング部220からのシフト信号SFTOUT0をシフト入力信号SFTINとして受ける。ステージSTG0に供給される経過サイクルCYCは、スケジューリング部220からリクエスト情報REQINFを受けたときを基準(="0")として積算される経過サイクルであり、図示しないクロックカウンタにより生成される。また、初段のステージSTG0に入力される情報は、各処理部25に供給されない。
資源番号保持部231は、有効レベル(例えば、ハイレベル)のシフト入力信号SFTINをイネーブル端子EN1で受けている間、前段からの資源番号RSCを取り込んで保持し、保持した資源番号RSCを後段のステージSTGと各処理部25とに出力する。2段目以降のステージSTGは、前段のステージSTGが出力するシフト信号SFTOUT0をシフト入力信号SFTINとして受けて動作する。なお、初段のステージSTG0の資源番号保持部231は、図5のスケジューリング部220の資源番号出力部222が出力する資源番号NXTRSC(並列度l=2の場合、"0"、"1"の繰り返し)を順次受ける。
経過サイクル保持部232は、セレクタSEL、フリップフロップFFおよびインクリメンタINCを有する。セレクタSELは、シフト入力信号SFTINがハイレベルの間、前段からの経過サイクルCYCを選択し、シフト入力信号SFTINがロウレベルの間、インクリメンタINCからの経過サイクルCYCを選択する。そして、セレクタSELは、選択した経過サイクルCYCをフリップフロップFFに出力する。
フリップフロップFFは、セレクタSELから受ける経過サイクルCYCを図示しないメモリクロックMCLKに同期して取り込み、取り込んだ経過サイクルCYCをインクリメンタINCに出力する。インクリメンタINCは、経過サイクルCYCを"1"増加させ、増加させた経過サイクルCYCをセレクタSELの入力に戻すととともに、次段のステージSTGおよび各処理部25に出力する。
2段目以降の各ステージSTG1-STG8の経過サイクル保持部232は、前段のステージSTGの経過サイクル保持部232が保持する経過サイクルCYC(サイクル数)を、前段のステージSTGが出力するシフト信号SFTOUTに同期して保持する。また、各ステージSTG1-STGjの経過サイクル保持部232は、前段のステージSTGがシフト信号SFTOUTを出力しない間、保持しているサイクル数を順次更新する。これにより、各ステージSTGの経過サイクル保持部232は、初段のステージSTG0でリクエスト情報REQINFを受けてからのサイクル数を保持することができ、保持しているサイクル数を各処理部25に出力することができる。この結果、各処理部25は、各ステージSTGからのサイクル数に基づいて、メモリ30へのアクセスコマンドの出力タイミングを判断することができる。
シフト信号生成部234は、並列度l、位相差mおよび平均リクエスト間隔nと、経過サイクル保持部232が出力する経過サイクルCYCとに基づいてシフト信号SFTOUTを生成する。シフト信号生成部234が生成したシフト信号SFTOUTは、次段のステージSTGにシフト入力信号SFTINとして供給される。このように、各ステージSTGのシフト信号生成部234は、経過サイクルCYCが、並列度l、位相差mおよび平均リクエスト間隔nと自ステージSTGの位置(=k)とにより決定される値になった場合、シフト信号SFTOUTを出力する。
シフト信号生成部234は、並列度l=2で、資源番号保持部231が保持する資源番号RSCが"0"の場合、経過時刻が"k*n+m"のとき、シフト信号SFTOUTを1サイクルの期間、有効レベル(例えば、ハイレベル)に設定する。符号*は、積を示す。シフト信号生成部234は、並列度l=2で、資源番号保持部231が保持する資源番号RSCが"1"の場合、経過時刻が"(k+1)*n"のとき、シフト信号SFTOUTを1サイクルの期間、有効レベルに設定する。シフト信号生成部234は、並列度l=3の場合、経過時刻が"(k+1)*n"のとき、シフト信号SFTOUTを1サイクルの期間、有効レベルに設定する。
すなわち、シフト信号生成部234は、メモリ30の仕様に応じて予め設定された並列度l、位相差mおよび平均リクエスト間隔nと、現在の資源番号NXTRSCとに応じて、シフト信号SFTOUTの出力タイミングを変更することができる。この結果、アクティブコマンドACTの供給間隔が一定でない場合にも、各ステージSTGのシフト信号SFTOUTの出力タイミングを揃えることができ、リクエスト保持パイプライン230の誤動作を抑止することができる。
例えば、並列度l=2、位相差m=4、平均リクエスト間隔n=8であるとする。この場合、資源番号RSC=0を保持する初段のステージSTG0は、リクエスト情報REQINFを受けてから4サイクル後にシフト信号SFTOUTを出力する。資源番号RSC=0を保持する2段目のステージSTG1は、リクエスト情報REQINFを受けてから12サイクル後にシフト信号SFTOUTを出力する。資源番号RSC=0を保持する3段目のステージSTG2は、リクエスト情報REQINFを受けてから20サイクル後にシフト信号SFTOUTを出力する。
また、資源番号RSC=1を保持する初段のステージSTG0は、リクエスト情報REQINFを受けてから8サイクル後にシフト信号SFTOUTを出力する。資源番号RSC=1を保持する2段目のステージSTG1は、リクエスト情報REQINFを受けてから16サイクル後にシフト信号SFTOUTを出力する。資源番号RSC=1を保持する3段目のステージSTG2は、リクエスト情報REQINFを受けてから24サイクル後にシフト信号SFTOUTを出力する。
一方、並列度l=3、位相差m=8、平均リクエスト間隔n=8であるとする。この場合、初段のステージSTG0は、リクエスト情報REQINFを受けてから8サイクル後にシフト信号SFTOUTを出力する。2段目のステージSTG1は、リクエスト情報REQINFを受けてから16サイクル後にシフト信号SFTOUTを出力する。3段目のステージSTG2は、リクエスト情報REQINFを受けてから24サイクル後にシフト信号SFTOUTを出力する。
リクエスト情報保持部233は、有効レベルのシフト入力信号SFTINをイネーブル端子EN1で受けている間、前段からのリクエスト情報REQINFを取り込んで保持する。リクエスト情報保持部233は、取り込んだリクエスト情報REQINFを次段のステージSTGおよび各処理部25に出力する。初段のステージSTG0のリクエスト情報保持部233は、スケジューリング部220のリクエスト情報出力部221が出力するリクエスト情報REQINFを取り込む。
図8は、図4の処理部25(250、251、252)の一例を示す。図8では、リクエスト保持パイプライン230が9個のステージSTG0-STG8を有するとする。各処理部25は、データタイミング制御部255に加えて、セレクタ2531およびロウ情報出力部2532を有するロウ制御部253と、セレクタ2541、カラム情報出力部2542およびカウンタ2543を有するカラム制御部254とを有する。
セレクタ2531は、リクエスト保持パイプライン230の各ステージSTG0-STG8から資源番号RSC、経過サイクルCYCおよびリクエスト情報REQINFを受ける。また、セレクタ2531は、設定レジスタ240からロウタイミングTROWおよび並列度lを受ける。
セレクタ2531は、自処理部25の識別番号である自資源番号と一致する資源番号RSCと、ロウタイミングTROWで示されるサイクルと一致する経過サイクルCYCとを出力するステージSTGから出力されるリクエスト情報REQINFを選択する。そして、セレクタ2531は、選択したリクエスト情報REQINFをロウ情報出力部2532に出力する。ロウ情報出力部2532は、セレクタ2531から受けるリクエスト情報REQINFに応答して、リクエスト情報REQINFを使用してロウ制御信号ROWを生成し、メモリ30に出力する。
セレクタ2541は、リクエスト保持パイプライン230の各ステージSTG0-STG8からの資源番号RSC、経過サイクルCYCおよびリクエスト情報REQINFを受ける。また、セレクタ2541は、設定レジスタ240からカラムタイミングTCOLおよび並列度lを受ける。
セレクタ2541は、自処理部25の識別番号である自資源番号と一致する資源番号RSCと、カラムタイミングTCOLで示されるサイクルと一致する経過サイクルCYCとを出力するステージSTGから出力されるリクエスト情報REQINFを選択する。そして、セレクタ2541は、選択したリクエスト情報REQINFをカラム情報出力部2542に出力する。カウンタ2543は、カラム制御信号COLの出力回数を計数する。カラム情報出力部2542は、セレクタ2541から受けるリクエスト情報REQINFに応答して、リクエスト情報REQINFを使用してカラム制御信号COLを生成し、メモリ30に出力する。この際、カラム情報出力部2542は、カウンタ2543が計数する回数分のカラム制御信号COLを、所定数のサイクルの経過毎に出力する。
このように、各処理部25は、リクエスト保持パイプライン230の複数のステージSTGが保持する資源番号RSCと経過サイクルCYCとリクエスト情報REQINFとを受ける。そして、各処理部25は、受けた資源番号RSCが自資源番号と一致する場合、受けたリクエスト情報REQINFに対応するアクセスコマンド(アクティブコマンドACTまたはリードコマンドRDなど)をメモリ30に出力する。換言すれば、各処理部25は、自資源番号RSCを出力するステージSTGが保持する経過サイクルCYCが示すサイクル数が、並列度lに応じて決定されるアクセスコマンドの出力サイクルを示す場合、対応するアクセスコマンドをメモリ30に出力する。したがって、並列度lによってアクセスコマンドの出力サイクルが変更される場合にも、並列度lと資源番号RSCと経過サイクルCYCとに基づいて、正しいタイミングでアクセスコマンドをメモリ30に出力することができる。
データタイミング制御部255は、自資源番号と一致する資源番号RSCと、カラムタイミングTCOLで示されるサイクルと一致する経過サイクルCYCとを出力するステージSTGから出力されるリクエスト情報REQINFを受ける。リクエスト情報REQINFは、単独要求情報REQALNを含む。データタイミング制御部255は、受けた情報に基づいてデータ入力タイミング信号DQINおよびイネーブル信号ENを生成する。また、データタイミング制御部255は、図4で説明したように、カラム制御信号COLの出力に使用したリクエスト情報REQINFを出力する。
なお、データ入力タイミング信号DQINおよびイネーブル信号ENは、どのメモリアクセス要求MREQ(リードアクセス要求)に対応するかを識別する識別情報を含んでもよい。この場合、識別情報は、シーケンス番号でもよい。データ入力タイミング信号DQINに基づくライトポインタ値WPの生成タイミングおよびイネーブル信号ENの生成タイミングは、図13および図15等で説明される。
また、メモリアクセスコントローラ20は、設定レジスタ240に設定された並列度l、位相差mおよび平均リクエスト間隔nに基づいてメモリ30のアクセスを制御する。例えば、並列度lは、"2"または"3"である。並列度l、位相差mおよび平均リクエスト間隔nが可変であるため、図5、図7および図8に示すようにメモリアクセスのための制御回路が複雑になる。しかしながら、図5、図7および図8に示す制御回路は、一例であり、メモリアクセスコントローラ20は、他の制御回路を有してもよい。例えば、並列度l=2、位相差m=4、平均リクエスト間隔n=8に限定される場合、図6に示したように、シフト信号SFTOUT0の出力タイミングは、固定化される。このため、メモリアクセスのための制御回路を図5、図7および図8に比べて簡易にすることができる。
なお、メモリアクセスコントローラ20がメモリ30に発行するアクティブコマンドACTおよびリードコマンドRDのタイミングの例は、特願2020-097826号の図9-図17に記載されている。
図9は、図4のバッファ制御部270およびデータバッファ280の一例を示す。バッファ制御部270およびデータバッファ280の動作の例は、図11-図18で説明される。バッファ制御部270は、データ出力制御部DQCNTL、バッファセレクタBSEL、カウンタCONT(CONT0、CONT1)およびセレクタSEL(SEL0、SEL1、SEL2)を有する。また、バッファ制御部270は、オア回路OR、選択信号生成部SELGENおよび出力タイミング生成部OTGENを有する。
データバッファ280は、バッファBUF(BUF0、BUF1、BUF2)を有する。各バッファBUF0-BUF2は、メモリ30から読み出されるデータDQを保持するp+1個のエントリを有し、ライトポインタ値WPで指定されたエントリにデータDQを書き込む。各バッファBUF0-BUF2は、シフトレジスタの構造を有する。この例では、"p"は、"3"以上の整数である。
データ出力制御部DQCNTLは、各処理部25のデータタイミング制御部255からのデータ入力タイミング信号DQINに応答して、バッファBUF0-BUF2のいずれかを示す書き込み選択信号BWSELをバッファセレクタBSELに出力する。また、データ出力制御部DQCNTLは、データ入力タイミング信号DQINに応答して、カウンタCONT0、CONT1のいずれかにカウントアップ信号CUPを出力する。さらに、データ出力制御部DQCNTLは、あらかじめ設定された所定の条件にしたがって、カウンタCONT0(またはCONT1)にカウントダウン信号CDWNを出力する。データ出力制御部DQCNTLは、カウンタCONT0、CONT1の各々をカウントアップまたはカウントダウンするカウンタ制御部の一例である。
所定の条件は、カウンタCONT0(またはCONT1)のライトポインタ値WP0(またはWP1)がパケットサイズPSに対応する最大値になる前に、バッファBUFに保持されたデータDQの出力が開始される場合である。例えば、データ出力制御部DQCNTLは、カウントダウン信号CDWNを生成するタイミングを、図8のデータタイミング制御部255から受けるリクエスト情報REQINFに基づいて決定してもよい。
シフトレジスタの構造を有するバッファBUFに対して、データ出力制御部DQCNTLは、バッファBUFからデータDQを出力させるときにカウンタCONTをカウントダウンさせる。これにより、バッファBUFのシフト動作により新たなデータDQの格納位置がずれる場合にも、正しい位置にデータDQを格納することができる。
また、データ出力制御部DQCNTLは、バッファBUFへのデータDQの格納とバッファBUFからデータDQの出力とを同時に行うときにカウンタCONTのカウントアップおよびカウントダウンを停止する。これにより、バッファBUFのシフト動作にかかわりなく、バッファBUFの同じ位置に新たなデータDQを格納することができる。すなわち、バッファBUFへのデータDQの格納とバッファBUFからデータDQの出力とを同時に行うときにも、正しい位置に新たなデータDQを格納することができる。
なお、データ出力制御部DQCNTLは、メモリ30へのアクセスを実行していないアイドル状態において、データ入力タイミング信号DQINを受けた場合、"0"の書き込み選択信号BWSELを出力する。また、データ出力制御部DQCNTLは、アイドル状態において、カウンタCONT0にカウントアップ信号CUPを出力する。この後、データ出力制御部DQCNTLは、異なるメモリアクセス要求MREQに対応するデータ入力タイミング信号DQINを受けた場合、カウンタCONT1にカウントアップ信号CUPを出力する。
データ出力制御部DQCNTLは、アイドル状態を、リクエスト情報REQINFに含まれる、メモリアクセス要求MREQを単独で受信したことを示す単独要求情報REQALNに基づいて判定可能である。また、データ出力制御部DQCNTLは、リクエスト情報REQINFに単独要求情報REQALNが含まれない場合、アイドル状態でないことを判定可能である。
データ出力制御部DQCNTLは、同じメモリアクセス要求MREQに対応するデータ入力タイミング信号DQINを受ける毎に、同じカウンタCONTに所定数(例えば"4")のカウントアップ信号CUPを出力する。また、データ出力制御部DQCNTLは、データ入力タイミング信号DQINの出力元の処理部25が変わる毎に、カウンタCONT0、CONT1を交互に使用するためにカウントアップ信号CUPを出力するカウンタCONTを切り替える。
バッファセレクタBSELは、選択するバッファBUFを識別するバッファ選択値をそれぞれ保持する3つの保持部BSEL0、BSEL1、BSEL2を有する。保持部BSEL0-BSEL2に保持されたバッファ選択値は、各処理部25のデータタイミング制御部255からのデータ入力タイミング信号DQINに応答して、セレクタSEL0-SEL2に出力される。以下では、保持部BSEL0-BSEL2にそれぞれ保持されたバッファ選択値は、バッファ選択値BSEL0-BSEL2とも称される。
バッファセレクタBSELは、保持部BSEL0、BSEL1、BSEL2を、番号が小さい順に優先的に使用する。例えば、バッファセレクタBSELは、アイドル状態において、"0"の書き込み選択信号BWSELを受けた場合、受けた"0"を優先度が最も高い保持部BSEL0に保持する。バッファセレクタBSELは、この状態で"1"の書き込み選択信号BWSELを受けた場合、受けた"1"を優先度が次に高い保持部BSEL1に保持する。バッファセレクタBSELは、さらにこの状態で"2"の書き込み選択信号BWSELを受けた場合、受けた"2"を優先度が最も低い保持部BSEL2に保持する。
バッファセレクタBSELは、保持部BSEL0に保持しているバッファ選択値を選択信号生成部SELGENに出力する。そして、バッファセレクタBSELは、保持部BSEL1、BSEL2にそれぞれ保持したバッファ選択値を、シフト信号SFTに基づいて優先度が1つ低い保持部BSEL0、BSEL1に移動する。
カウンタCONT0は、カウントアップ信号CUPに応答してライトポインタ値WP0を"1"ずつ増加し、カウントダウン信号CDWNに応答してライトポインタ値WP0を"1"ずつ減少する。カウンタCONT1は、カウントアップ信号CUPに応答してライトポインタ値WP1を"1"ずつ増加し、カウントダウン信号CDWNに応答してライトポインタ値WP1を"1"ずつ減少する。
セレクタSEL0-SEL2は、カウンタCONT0、CONT1とバッファBUF0-BU2の間に配置される。セレクタSEL0は、データ出力制御部DQCNTLから"0"の書き込み選択信号BWSELが出力されたことに基づいてライトポインタ値WP0、WP1のいずれかをライトポインタ値WPとしてバッファBUF0に出力する。セレクタSEL1は、データ出力制御部DQCNTLから"1"の書き込み選択信号BWSELが出力されたことに基づいてライトポインタ値WP0、WP1のいずれかをライトポインタ値WPとしてバッファBUF1に出力する。
セレクタSEL2は、データ出力制御部DQCNTLから"2"の書き込み選択信号BWSELが出力されたことに基づいてライトポインタ値WP0、WP1のいずれかをライトポインタ値WPとしてバッファBUF2に出力する。上述したように、アイドル状態においてカウンタCONT0が使用された後、データ入力タイミング信号DQINの出力元の処理部25が変わる毎に、カウンタCONT1、CONT0が交互に使用される。そして、各セレクタSELは、対応するバッファBUFにメモリアクセス要求MREQに含まれるパケットサイズPSに対応する数のデータDQが格納されるまで、最初に選択したライトポインタ値WPを選択し続ける。例えば、各セレクタSELは、パケットサイズPSを、リクエスト情報REQINFに基づいて検出する。
カウンタCONT0、CONT1とバッファBUF0-BUF2との間にセレクタSEL0-SEL2を配置することで、任意のカウンタCONTが生成するライトポインタ値WPを任意のバッファBUFに供給することができる。この結果、カウンタCONTの数をバッファBUFの数より少なくすることができ、バッファBUFの数と同じ数のカウンタCONTを設ける場合に比べて、メモリアクセスコントローラ20の回路規模を削減することができる。
オア回路ORは、各処理部25のデータタイミング制御部255からのイネーブル信号ENを応答イネーブル信号RETENとして選択信号生成部SELGENに出力する。選択信号生成部SELGENは、応答イネーブル信号RETENを受けたときに保持部BSEL0で保持しているバッファ選択値を読み出し選択信号BRSELとして出力タイミング生成部OTGENに出力する。読み出し選択信号BRSELは、メモリアクセス要求MREQに対応してメモリ30から読み出されたデータDQを保持しているバッファBUFを示す。
出力タイミング生成部OTGENは、選択信号生成部SELGENからの読み出し選択信号BRSELをデコードし、読み出し選択信号BRSELの値が示すバッファBUFを選択する。出力タイミング生成部OTGENは、選択したバッファBUFにデータシフト信号DSFTを出力する。ここで、出力タイミング生成部OTGENは、メモリアクセス要求MREQに含まれるパケットサイズPSで示されるデータ数分のパルスを有するデータシフト信号DSFTを連続して出力する。なお、メモリ30がDDRタイプである場合、データシフト信号DSFTのパルスは、メモリクロックMCLKの1周期に2回出力される。
各バッファBUF0-BUF2は、シフト信号DSFTに応答して数値の大きいエントリから数値の小さいエントリに保持しているデータDQをシフトする。そして、各バッファBUF0-BUF2は、"0"番のエントリから取り出したデータDQを出力データDOUTとして、共通の出力データ線DOUTに出力する。なお、バッファ制御部270は、バッファBUF0-BUF2から出力する出力データDOUTが出力データ線DOUT上で衝突しないようにシフト信号DSFTを生成する。
図10は、図4のメモリアクセスコントローラ20によりメモリ30にリードアクセスする一例を示す。図10は、並列度l=2、位相差m=4、平均リクエスト間隔n=8に設定される場合の動作の例を示す。ロウ制御信号ROW0およびカラム制御信号COL0は、処理部250から出力され、ロウ制御信号ROW1およびカラム制御信号COL1は、処理部251から出力される。メモリ30は、2つのバンクグループBG0、BG1を有するとする。図10において、順次増加する数値は、経過サイクルCYC(メモリクロックMCLKのサイクル数の積算値)を示す。
まず、処理部250は、CYC1において、バンクグループBG0にアクティブコマンドACT0を出力する。例えば、アクティブコマンドACTは、2クロックサイクルを使用してメモリ30に供給される。処理部251は、処理部250がアクティブコマンドACT0を出力してからtRRDS(RAS to RAS Delay)後であるCYC5において、バンクグループBG1にアクティブコマンドACT1を出力する。tRRDSは、異なるバンクグループBG間でのアクティブコマンドACTの最小間隔の仕様である。
処理部250は、アクティブコマンドACT0を出力してからtRCDRD(RAS to CAS Delay)後であるCYC16において、バンクグループBG0に最初のリードコマンドRD0を出力する。処理部250は、リードコマンドRD0を出力してからtCCDL(CAS to CAS Delay Long)後であるCYC20において、バンクグループBG0に2番目のリードコマンドRD0を出力する。tCCDLは、同一のバンクグループBG間でのカラム系コマンド(リードコマンドRD等)の最小間隔の仕様である。
処理部251は、処理部250がリードコマンドRD0を出力してからtCCDS(CAS to CAS Delay Short)後であるCYC22において、バンクグループBG1に最初のリードコマンドRD1を出力する。tCCDSは、異なるバンクグループBG間でのカラム系コマンドの最小間隔の仕様である。
この後、処理部250、251は、2サイクル毎にリードコマンドRD(RD0またはRD1)を交互に出力する。各処理部250、251によるリードコマンドRDの出力間隔は4サイクルである。
処理部250が最初のリードコマンドRD0を出力してからリードレイテンシRLに対応するサイクル後、最初のリードコマンドRD0に対応する最初のリードデータD0がバンクグループBG0から出力される。この例では、バースト長が"4"に設定されているため、メモリクロックMCLKの立ち上がりエッジと立ち下がりエッジのそれぞれに同期して4つのデータが読み出される。さらに、各リードコマンドRDからリードレイテンシRLが経過後に、リードデータD(D0またはD1)が各バンクグループBGからそれぞれ読み出される。
図10に示す動作は、並列度l=2、位相差m=4および平均リクエスト間隔n=8に応じて、シフト信号SFTOUT0を出力するスケジューリング部220と、ステージSTGのシフト動作を実行するリクエスト保持パイプライン230とにより実現される。これにより、メモリアクセスコントローラ20は、複数の並列度lに共通のリクエスト保持パイプライン230のステージSTGに順次転送される情報を使用して、並列度l=2でのリードアクセス動作を実行することができる。
図11-図18は、メモリ30のリードアクセス時のバッファ制御部270およびデータバッファ280の動作の一例を示す。すなわち、図11-図18は、メモリアクセスコントローラ20によるメモリアクセス方法の一例を示す。図10と同様の動作については、詳細な説明は省略する。
図11-図18に示す動作は、図10と同様に、並列度l=2、位相差m=4、平均リクエスト間隔n=8に設定されて実行される。最長パケットサイズMPSは、1回のメモリアクセス要求MREQに応答してメモリ30からデータDQが32回読み出される"32"に設定される。
図11および図12は、同じサイクル期間での動作を示し、図13および図14は、同じサイクル期間での動作を示す。図15および図16は、同じサイクル期間での動作を示し、図17および図18は、同じサイクル期間での動作を示す。以下では、メモリクロックMCLKの経過サイクル数であるサイクルCYC1-CYC74は、符号のみで説明される。アクティブコマンドACT0の元となるメモリアクセス要求MREQのパケットサイズPSは、"32"であり、アクティブコマンドACT1の元となるメモリアクセス要求MREQのパケットサイズPSは、"16"である。
CYC37までのメモリ30に対するアクセスは、図10と同様である。例えば、図11-図18では、メモリアクセスコントローラ20の処理部250は、CYC16で最初のリードコマンドRD0を出力し、4サイクル毎に後続のリードコマンドRD0を7回出力する。メモリアクセスコントローラ20の処理部251は、CYC22で最初のリードコマンドRD1を出力し、4サイクル毎に後続のリードコマンドRD1を3回出力する。
処理部251は、図13のCYC38で、アクティブコマンドACT1に対応する2つめのパケットサイズPSのアクセスの最初のリードコマンドRD2を出力し、4サイクル毎に後続のリードコマンドRD2を3回出力する。2回目のアクセスの最初のリードコマンドRD2は、4番目のリードコマンドRD1の4サイクル後に発行される。
処理部250は、図15のCYC48で、アクティブコマンドACT1に対応する3つめのパケットサイズPSのアクセスの最初のリードコマンドRD3を出力し、4サイクル毎に後続のリードコマンドRD3を7回出力する。2回目のアクセスの最初のリードコマンドRD2は、4番目のリードコマンドRD1の4サイクル後に発行される。処理部251は、CYC54で最初のリードコマンドRD4を出力し、4サイクル毎に後続のリードコマンドRD4を7回出力する。
メモリアクセスコントローラ20は、アクティブコマンドACT0を出力するとき、メモリ30に対する他のアクティブコマンドACTによるアクセスを実行しておらず、図11の開始時、メモリ30は、動作していないアイドル状態である。すなわち、メモリアクセスコントローラ20は、アクティブコマンドACT0の契機となるメモリアクセス要求MREQを単独で受信する。上述したように、アイドル状態は、リクエスト情報REQINFに含まれる単独要求情報REQALNに基づいて判定される。
メモリ30がアイドル状態の場合、図9のデータ出力制御部DQCNTLは、アクティブコマンドACT0を発行した処理部250からのデータ入力タイミング信号DQINの受信に基づいて、図11のCYC21で"0"の書き込み選択信号BWSELを出力する。"0"の書き込み選択信号BWSELは、メモリ30から読み出されるデータDQをバッファBUF0に格納することを示す。なお、処理部250は、メモリ30からの4つの連続するデータDQの出力タイミング(例えば、CYC21、CYC22)に合わせて、図示しないデータ入力タイミング信号DQINを出力する。
データ出力制御部DQCNTLは、処理部250からのデータ入力タイミング信号DQINに基づいてカウンタCONT0にカウントアップ信号CUPを出力する。カウンタCONT0は、カウントアップ信号CUPに応答して、データDQの出力タイミングに合わせてライトポインタ値WP0を"1"ずつ増加させる。なお、カウンタCONT0、CONT1がそれぞれ出力するライトポインタ値WP0、WP1の初期値は、"0"である。
図9のバッファセレクタBSELは、CYC21において、書き込み選択信号BSSELの"0"を、優先度が最も高い保持部BSEL0に保持する。保持部BSEL0に保持された"0"によりセレクタSEL0が選択され、ライトポインタ値WP0は、セレクタSEL0を介してバッファBUF0に供給される。そして、バッファBUF0は、CYC21-CYC51に掛けてライトポインタ値WP0が示すエントリにリードコマンドRD0に対応するデータDQ0-DQ31を順次書き込む。
図13において、図11の2番目のリードコマンドRD0に応答して、CYC25、CYC26でメモリ30からデータDQ4-DQ7が順次読み出される。この後、リードコマンドRD1、RD0に対応してメモリから4つのデータDQが交互に読み出される。パケットサイズPSに対応する32個のデータDQ0-DQ31をメモリ30から読み出すために、リードコマンドRD0は8回発行される。パケットサイズPSに対応する16個のデータDQ0-DQ15をメモリ30から読み出すために、リードコマンドRD1は4回発行される。
データ出力制御部DQCNTLは、処理部250からのデータ入力タイミング信号DQINの受信に基づいて、"0"の書き込み選択信号BWSELを出力する。また、データ出力制御部DQCNTLは、処理部251からのデータ入力タイミング信号DQINの受信に基づいて、"1"の書き込み選択信号BWSELを出力する。"1"の書き込み選択信号BWSELは、メモリ30から読み出されるデータDQをバッファBUF1に格納することを示す。
なお、図11-図18において、各バッファBUF0-BUF2に付した"0"から"24"は、エントリ番号を示す。タイミング図上において、各バッファBUF0-BUF2のエントリに付した数値は、各エントリが保持するデータDQの番号を示す。
データ出力制御部DQCNTLは、処理部250、251の各々からのデータ入力タイミング信号DQINに基づいてカウンタCONT0、CONT1の各々にカウントアップ信号CUPを出力する。各カウントアップ信号CUPは、メモリ30からのデータDQの受信タイミングに合わせて出力される。これにより、カウンタCONT0、CONT1の各々は、ライトポインタ値WP0、WP1の各々を"1"ずつ増加する。
図11および図13において、保持部BSEL0は、バッファBUF0にデータDQ15が格納されるまで"0"を保持している。このため、セレクタSEL0を介してライトポインタ値WP0を受けるバッファBUF0は、ライトポインタ値WP0が示すエントリに、リードコマンドRD0に対応するデータDQを順次書き込む。
バッファセレクタBSELは、図13のCYC27において、"1"の書き込み選択信号BWSELの最初の受信に応答して、書き込み選択信号BSSELの"1"を、空いている保持部BSELのうち、優先度が最も高い保持部BSEL1に保持する。保持部BSEL1に保持された"1"によりセレクタSEL1が選択され、ライトポインタ値WP1はバッファBUF1に供給される。
保持部BSEL1は、CYC27-CYC35の間、"1"を保持し、"1"の保持部BSEL1によりセレクタSEL1が選択される。このため、CYC27-CYC35において、セレクタSEL1を介してライトポインタ値WP1を受けるバッファBUF1は、ライトポインタ値WP0が示すエントリに、リードコマンドRD1に対応するデータDQを順次書き込む。
アクティブコマンドACT0を出力した処理部250のデータタイミング制御部255は、図13のCYC35でイネーブル信号EN(RD0)を生成する。この例では、データタイミング制御部255は、最初のリードコマンドRD0の出力から18サイクル後(CYC35)にイネーブル信号EN(RD0)を生成する。18サイクルは、最初のリードコマンドRD0の出力から出力データDOUTの出力が完了するまでの34サイクルから32個の出力データDOUTの出力に掛かる16サイクルを引くことで求められる。CYC35でリードコマンドRD0に対応するイネーブル信号ENを出力することで、データDQ31がバッファBUF0に保持されたCYC51に、バッファBUF0からデータDQ31を出力データDOUTとして出力することができる。
処理部250からのイネーブル信号ENを応答イネーブル信号RETENとして受けた選択信号生成部SELGENは、図14のCYC35において、保持部BSEL0で保持しているバッファ選択値="0"を読み出し選択信号BRSELとして出力する。図9の出力タイミング生成部OTGENは、"0"の読み出し選択信号BRSELに基づいてバッファBUF0にデータシフト信号DSFTを順次出力する。これにより、メモリアクセスコントローラ20は、CYC34-CYC51に掛けて、バッファBUF0に保持されたデータDQ0-DQ31を出力データDOUTとして図3のネットワーク制御部16に連続して出力する(図14、図16)。
選択信号生成部SELGENは、"0"の読み出し選択信号BRSELの出力に応答してバッファセレクタBSELにシフト信号SFTを出力する。バッファセレクタBSELは、シフト信号SFTに応答してシフト動作し、図13のCYC36において、保持部BSEL1に保持しているバッファ選択値="1"を保持部BSEL0に移行する。これにより、バッファBUF0からの出力データDOUTを出力後、バッファBUF1から出力データDOUTを出力することが決定される。
保持部BSEL0は、CYC36-CYC51の間、"1"を保持し、"1"の保持部BSEL1によりセレクタSEL1が選択され続ける。CYC36-CYC41において、セレクタSEL1を介してライトポインタ値WP1を受けるバッファBUF1は、ライトポインタ値WP0が示すエントリに、リードコマンドRD1に対応するデータDQを順次書き込む。
データ出力制御部DQCNTLは、バッファBUF0からデータDQが出力されるタイミングに合わせてカウントダウン信号CDWNを出力する。これにより、ライトポインタ値WP0は、図13のCYC36から"1"ずつ減少する。但し、バッファBUF0からのデータDQの出力とメモリ30から読み出されたデータDQのバッファBUF0への格納とが同時に実行される場合、データ出力制御部DQCNTLは、カウントダウン信号CDWNおよびカウントアップ信号CUPの出力を停止する。このため、例えば、CYC37、CYC38とCYC39の前半とでは、バッファBUF0においてライトポインタ値WP0="12"で示されるエントリにデータDQ15-DQ19が順次格納される。
図15のCYC41において、リードコマンドRD1を出力する処理部251のデータタイミング制御部255は、イネーブル信号EN(RD1)を生成する。この例では、データタイミング制御部255は、最初のリードコマンドRD1の出力から18サイクル後にイネーブル信号ENを生成する。18サイクルは、最初のリードコマンドRD1の出力から出力データDOUTの出力が完了するまでの18サイクルから16個の出力データDOUTの出力に掛かる8サイクルを引き、さらに8サイクルを追加することで求められる。
図11に示したように、メモリアクセスコントローラ20は、アクティブコマンドACT1を発行するとき、メモリ30に対する他のアクティブコマンドACT0を発行している。このため、メモリ30はアイドル状態でない。メモリ30がアイドル状態でない場合、アクティブコマンドACT1に対応する出力データDOUTの出力を、先行するアクティブコマンドACT0に対応する出力データDOUTの出力後に行わせるために、8サイクルが追加される。
ここで、18サイクルは、メモリアクセスコントローラ20が受付可能なメモリアクセス要求MREQのうち、最長パケットサイズMPSのメモリアクセス要求MREQにおいて、最初のリードコマンドからイネーブル信号ENが出力されるまでの期間と等しい。すなわち、データタイミング制御部255は、メモリ30がアイドル状態でない場合、後続のメモリアクセス要求MREQに対応するデータの出力開始タイミングを、最長パケットサイズMPSのメモリアクセス要求を受けたときの出力開始タイミングに設定する。例えば、この実施形態では、最長パケットサイズMPSは、32個のデータDQに対応する。
これにより、メモリアクセス要求MREQのパケットサイズPSによらず、最初のリードコマンドRDからデータDQの出力開始タイミングまでの期間を一定にすることができる。したがって、先行するメモリアクセス要求MREQのパケットサイズPSに応じて出力開始タイミングを設定する場合に比べて、データタイミング制御部255によるイネーブル信号ENの出力制御を簡易にすることができる。なお、データタイミング制御部255は、先行のメモリアクセス要求MREQのパケットサイズPSに応じてイネーブル信号ENの出力タイミング(すなわち、出力開始タイミング)を設定してもよい。
なお、アクティブコマンドACT1の発行時に他のアクティブコマンドACTが発行されておらず、メモリ30がアイドル状態の場合、データタイミング制御部255は、最初のリードコマンドRD1の出力から10サイクル後にイネーブル信号ENを生成する。10サイクルは、メモリアクセス要求MREQ(ACT1)を発行するデバイスのアクセス仕様(例えば、パケットサイズPS=16個のデータDQ)に応じて設定されるイネーブル信号ENの出力タイミングである。これにより、メモリアクセスコントローラ20は、メモリアクセス要求MREQに対応するデータDOUTを最短のタイミングでメモリアクセス要求MREQの発行元のデバイスに出力することができる。
図15のCYC41において、選択信号生成部SELGENは、処理部251からのイネーブル信号EN(RD1)を応答イネーブル信号RETENとして受ける。バッファBUF0からデータDQを出力中であるため、選択信号生成部SELGENは、保持部BSEL1で保持しているバッファ選択値="1"の応答イネーブル信号RETENに応答するデータDQの出力を抑止する。
すなわち、選択信号生成部SELGENは、後続のメモリアクセス要求MREQのデータDOUTが、先行のメモリアクセス要求MREQに対応する最終データDOUTより早く出力されないように、後続のデータDOUTの出力開始タイミングを設定する。これにより、バッファBUF0、BUF1からのデータDQの出力が衝突することを抑止することができ、メモリアクセスコントローラ20の誤動作を抑止することができる。
バッファセレクタBSELは、図15のCYC43において、"2"の書き込み選択信号BWSELの最初の受信に応答して、書き込み選択信号BWSELの"2"を、空いている保持部BSELのうち、優先度が最も高い保持部BSEL1に保持する。保持部BSEL1に保持された"2"によりセレクタSEL2が選択され、ライトポインタ値WP1はバッファBUF2に供給される。そして、バッファBUF2は、順次増加するライトポインタ値WP1が示すエントリに、リードコマンドRD2に対応するデータDQを図16のCYC43から順次書き込む。
なお、ライトポインタ値WP0、WP1のいずれを使用するかは、データ出力制御部DQCNTLにより設定される。データ出力制御部DQCNTLは、メモリ30のアイドル状態が解除された後、ライトポインタ値WP0の使用を決定し、その後、空いているライトポインタ値WPの使用を順次決定する。
CYC51において、選択信号生成部SELGENは、バッファBUF0からのデータDQ31の出力完了に合わせて、保持部BSEL0で保持しているバッファ選択値="1"を読み出し、選択信号BRSEL(図16)として出力する。出力タイミング生成部OTGENは、"1"の読み出し選択信号BRSELに基づいてバッファBUF1にデータシフト信号DSFTを順次出力する。これにより、メモリアクセスコントローラ20は、CYC51-CYC59に掛けて、バッファBUF1に保持されたデータDQ0-DQ15を出力データDOUTとして図3のネットワーク制御部16に順次出力する(図16、図18)。
このように、メモリアクセスコントローラ20は、メモリ30がアイドル状態でない場合、アクティブコマンドACTに対応する出力データDOUTの出力を遅らせることで、メモリアクセス要求MREQの発行順に出力データDOUTを出力できる。したがって、出力データDOUTの遅れによりメモリアクセス要求MREQの発行元のデバイスによるデータ処理等が遅れることを抑制することができる。この結果、複数のパケットサイズPSのメモリアクセス要求MREQを処理可能なメモリアクセスコントローラ20の動作に依存して、出力データDOUTを受けるデバイスの処理性能が低下することを抑制することができる。
なお、バッファBUF1からデータDQを出力するときに、リードコマンドRD1に対応してメモリ30から読み出されたデータDQ0-DQ15は、バッファBUF1に既に保持されている。このため、データ出力制御部DQCNTLは、ライトポインタ値WP1を減少させるカウントダウン信号CDWNを生成せず、ライトポインタ値WP1は、"15"から減少されない(図13)。
選択信号生成部SELGENは、"1"の読み出し選択信号BRSELの出力に応答してバッファセレクタBSELにシフト信号SFTを出力する。バッファセレクタBSELは、シフト信号SFTに応答してシフト動作し、図15のCYC52において、保持部BSEL1に保持しているバッファ選択値="2"を保持部BSEL0に移行する。これにより、バッファBUF1からの出力データDOUTを出力後、バッファBUF2から出力データDOUTを出力することが決定される。
図15のCYC57おいて、リードコマンドRD2を出力する処理部251のデータタイミング制御部255は、バッファBUF2からのデータDQが、バッファBUF1からのデータDQの出力後に出力されるようにイネーブル信号EN(RD2)を生成する。リードコマンドRD2に対応するイネーブル信号ENは、リードコマンドRD1に対応するイネーブル信号ENと同様に、最初のリードコマンドRD2の出力から18サイクル後に生成される。
バッファセレクタBSELは、図15のCYC53において、リードコマンドRD3に対応する"0"の書き込み選択信号BWSELの最初の受信に応答して、書き込み選択信号BWSELの"0"を保持部BSEL1に保持する。書き込み選択信号BWSELの"0"が保持された保持部BSEL1は、空いている保持部BSELのうち、優先度が最も高い。保持部BSEL1に保持された"0"によりセレクタSEL0が選択され、ライトポインタ値WP0はバッファBUF0に供給される。そして、バッファBUF0は、順次増加するライトポインタ値WP0が示すエントリに、リードコマンドRD3に対応するデータDQをCYC53-CYC83(図示せず)に掛けてから順次書き込む。
選択信号生成部SELGENは、処理部251からのイネーブル信号EN(RD2)を応答イネーブル信号RETENとして受ける。バッファBUF1からデータDQを出力中であるため、選択信号生成部SELGENは、保持部BSEL0で保持しているバッファ選択値="2"の応答イネーブル信号RETENに応答するデータDQの出力を抑止する。そして、選択信号生成部SELGENは、バッファBUF1からのデータDQ15の出力完了に合わせて、保持部BSEL0で保持しているバッファ選択値="2"をCYC59で読み出し、選択信号BRSELとして出力する(図18)。
出力タイミング生成部OTGENは、"2"の読み出し選択信号BRSELに基づいてバッファBUF2にデータシフト信号DSFTを順次出力する。これにより、メモリアクセスコントローラ20は、図18のCYC59-CYC67に掛けて、バッファBUF2に保持されたデータDQ0-DQ15を出力データDOUTとして図3のネットワーク制御部16に順次出力する。
なお、バッファBUF2からデータDQを出力するときに、リードコマンドRD2に対応してメモリ30から読み出されたデータDQ0-DQ15は、バッファBUF2に既に保持されている。このため、データ出力制御部DQCNTLは、ライトポインタ値WP1を減少させるカウントダウン信号CDWNを生成せず、ライトポインタ値WP1は、"15"から減少されない(図15)。
バッファセレクタBSELは、図17のCYC59において、リードコマンドRD4に対応する"1"の書き込み選択信号BWSELの最初の受信に応答して、書き込み選択信号BWSELの"1"を空いている保持部BSEL2に保持する。保持部BSEL2に保持された"1"によりセレクタSEL1が選択され、ライトポインタ値WP1はバッファBUF1に供給される。そして、バッファBUF1は、順次増加するライトポインタ値WP1が示すエントリに、リードコマンドRD4に対応するデータDQを図18のCYC59から順次書き込む。
選択信号生成部SELGENは、図18のCYC59において、"2"の読み出し選択信号BRSELの出力に応答してバッファセレクタBSELにシフト信号SFTを出力する。バッファセレクタBSELは、シフト信号SFTに応答してシフト動作する。そして、バッファセレクタBSELは、図17のCYC60において、保持部BSEL1に保持しているバッファ選択値="0"を保持部BSEL0に移行し、保持部BSEL2に保持しているバッファ選択値="1"を保持部BSEL1に移行する。これにより、バッファBUF2から出力データDOUTを出力後、バッファBUF0から出力データDOUTを出力することが決定される。
図17のCYC67において、リードコマンドRD3を出力する処理部250のデータタイミング制御部255は、バッファBUF0からのデータDQが、バッファBUF2からのデータDQの出力後に出力されるようにイネーブル信号EN(RD3)を生成する。リードコマンドRD3に対応するイネーブル信号ENは、リードコマンドRD1に対応するイネーブル信号ENと同様に、最初のリードコマンドRD3の出力から18サイクル後に生成される。
選択信号生成部SELGENは、処理部250からのイネーブル信号EN(RD3)を応答イネーブル信号RETENとして受ける。選択信号生成部SELGENは、バッファBUF2からのデータDQ15の出力完了に合わせて、保持部BSEL0で保持しているバッファ選択値="0"をCYC67で読み出し、選択信号BRSELとして出力する(図18)。
出力タイミング生成部OTGENは、"0"の読み出し選択信号BRSELに基づいてバッファBUF0にデータシフト信号DSFTを順次出力する。これにより、メモリアクセスコントローラ20は、CYC67-CYC83(図示せず)に掛けて、バッファBUF0に保持されたデータDQ0-DQ31を出力データDOUTとして図3のネットワーク制御部16に順次出力する。
図17のCYC73において、リードコマンドRD4を出力する処理部251のデータタイミング制御部255は、バッファBUF2からのデータDQが、バッファBUF0からのデータDQの出力後に出力されるようにイネーブル信号EN(RD4)を生成する。イネーブル信号ENは、リードコマンドRD1に対応するイネーブル信号ENと同様に、最初のリードコマンドRD4の出力から18サイクル後に生成される。
選択信号生成部SELGENは、処理部251からのイネーブル信号ENを応答イネーブル信号RETENとして受ける。バッファBUF0からデータDQを出力中であるため、選択信号生成部SELGENは、保持部BSEL0で保持しているバッファ選択値="1"の応答イネーブル信号RETENに応答するデータDQの出力を抑止する。
その後、選択信号生成部SELGENは、バッファBUF0からのデータDQ31の出力完了に合わせて、保持部BSEL0で保持しているバッファ選択値="1"を読み出し、選択信号BRSELとして出力する。そして、図示は省略するが、メモリアクセスコントローラ20は、バッファBUF1に保持されたデータDQ0-DQ31を出力データDOUTとして図3のネットワーク制御部16に順次出力する
図19は、他のメモリアクセスコントローラの動作の一例を示す。図10-図18と同様の動作については、詳細な説明は省略する。メモリアクセスコントローラからメモリに出力されるアクティブコマンドACT0、ACT1およびリードコマンドRD0、RD1のタイミングは、図10、図11、図13および図15と同じである。なお、図19では、リードコマンドRD3、RD4は、発行されない。
図19の動作を実行するメモリアクセスコントローラは、アクティブコマンドACTの発行時に他のアクティブコマンドACTが発行されているか否かを判定する機能を持たない。換言すれば、図19の動作を実行するメモリアクセスコントローラは、メモリがアイドル状態でない場合に、バッファBUFからの出力データDOUTの出力を遅らせる機能を持たない。
このため、メモリアクセスコントローラは、最初のリードコマンドRD1の出力から10サイクル後であるCYC33にイネーブル信号EN(RD1)を生成する。メモリアクセスコントローラは、バッファBUFから他の出力データDOUTが出力されていないため、リードコマンドRD1に対応してバッファBUFに保持されるデータDQ0-DQ15を出力データDOUTとしてCYC33-CYC41に掛けて出力する。
メモリアクセスコントローラは、最初のリードコマンドRD0の出力から18サイクル後であるCYC35にイネーブル信号EN(RD0)を生成する。CYC35では、リードコマンドRD1に対応する出力データDOUTがバッファBUFから出力されている。このため、メモリアクセスコントローラは、リードコマンドRD1に対応する出力データDOUTがバッファBUFから出力された後、CYC41-CYC57に掛けて、リードコマンドRD0に対応する出力データDOUT出力する。
図19においてかぎ括弧で囲った破線の出力データDOUTは、バッファBUFから他の出力データDOUTが出力されていない場合のイネーブル信号EN(RD0)に応答する出力タイミングを示す。メモリアクセスコントローラは、メモリから読み出したデータDQを、コマンドを受けた順に出力することが好ましい。
しかしながら、図19に示すように、パケットサイズPSが異なるメモリアクセス要求MREQを処理可能なメモリアクセスコントローラは、メモリアクセス要求MREQの受付順により出力データDOUTのネットワーク制御部への出力順が逆になる場合がある。例えば、パケットサイズPSの大きいメモリアクセス要求MREQの後にパケットサイズPSの小さいメモリアクセス要求MREQが発行される場合、出力データDOUTの出力順が逆になるおそれがある。
出力データDOUTの出力順が逆になる場合、メモリアクセス要求MREQの発行元のデバイスによるメモリからの読み出しデータを使用したデータ処理等が遅れるおそれがあり、デバイスの処理性能が低下するおそれがある。また、メモリアクセス要求MREQの発行元のシステムが、メモリからの読み出しデータの受信の完了時刻を予測し、予測した完了時刻に基づいて投機的に動作する場合、投機的な動作が無駄になるおそれがある。
以上、この実施形態においても上述した実施形態と同様の効果を得ることができる。例えば、メモリアクセスコントローラ20は、CPU10の内部または外部から受けるパケットサイズPSが異なるメモリアクセス要求MREQに基づいてメモリ30から読み出されるデータDQを、メモリアクセス要求MREQの受付順に出力できる。
バッファ制御部270は、後続のリードコマンドRD1に対応するデータDQの出力が、先行のリードコマンドRD0に対応するデータDQの出力と重複する場合、イネーブル信号EN(RD1)に基づくデータDQの出力の開始を遅らせる。これにより、複数のバッファBUFからのデータDQの衝突を抑止することができ、誤ったデータDQ(DOUT)がメモリアクセスコントローラ20から出力されることを抑止することができる。
さらに、この実施形態では、以下に示す効果を得ることができる。例えば、データタイミング制御部255は、メモリ30がアイドル状態でない場合、後続のメモリアクセス要求MREQに対応するデータの出力開始タイミングを、最長パケットサイズMPSのメモリアクセス要求を受けたときの出力開始タイミングに設定する。これにより、メモリアクセス要求MREQのパケットサイズPSによらず、最初のリードコマンドRDからデータDQの出力開始タイミングまでの期間を一定にすることができる。したがって、先行するメモリアクセス要求MREQのパケットサイズPSに応じて出力開始タイミングを設定する場合に比べて、データタイミング制御部255によるイネーブル信号ENの出力制御を簡易にすることができる。
選択信号生成部SELGENは、後続のメモリアクセス要求MREQのデータDOUTが、先行のメモリアクセス要求MREQに対応する最終データDOUTより早く出力されないように、後続のデータDOUTの出力開始タイミングを設定する。これにより、バッファBUF0、BUF1からのデータDQの出力が衝突することを抑止することができ、メモリアクセスコントローラ20の誤動作を抑止することができる。
メモリ30がアイドル状態の場合、データタイミング制御部255は、メモリアクセス要求MREQを発行するデバイスのアクセス仕様(例えば、パケットサイズPS)に応じてイネーブル信号ENの出力タイミングを設定する。これにより、メモリアクセスコントローラ20は、メモリアクセス要求MREQに対応するデータDOUTを最短のタイミングでメモリアクセス要求MREQの発行元のデバイスに出力することができる。
シフトレジスタの構造を有するバッファBUFに対して、データ出力制御部DQCNTLは、バッファBUFからデータDQを出力させるときにカウンタCONTをカウントダウンさせる。これにより、バッファBUFのシフト動作により新たなデータDQの格納位置がずれる場合にも、正しい位置にデータDQを格納することができる。
また、データ出力制御部DQCNTLは、バッファBUFへのデータDQの格納とバッファBUFからデータDQの出力とを同時に行うときにカウンタCONTのカウントアップおよびカウントダウンを停止する。これにより、バッファBUFのシフト動作にかかわりなく、バッファBUFの同じ位置に新たなデータDQを格納することができる。
カウンタCONT0、CONT1とバッファBUF0-BUF2との間にセレクタSEL0-SEL2を配置することで、任意のカウンタCONTが生成するライトポインタ値WPを任意のバッファBUFに供給することができる。この結果、カウンタCONTの数をバッファBUFの数より少なくすることができ、バッファBUFの数と同じ数のカウンタCONTを設ける場合に比べて、メモリアクセスコントローラ20の回路規模を削減することができる。
図20は、別の実施形態におけるメモリアクセスコントローラの例を示す。メモリアクセスコントローラ21は、2つの処理部25と、各処理部25に対応するリクエスト保持パイプライン230を有し、並列度lは"2"である。メモリアクセスコントローラ22は、3つの処理部25と、各処理部25に対応するリクエスト保持パイプライン230を有し、並列度lは"3"である。
メモリアクセスコントローラ23は、3つの処理部25と、各処理部25に対応するリクエスト保持パイプライン230を有し、"2"または"3"の両方の並列度lに対応する。メモリアクセスコントローラ23は、並列度lが"2"の場合、4つのステージSTGに接続された2つの処理部25を使用し、並列度lが"3"の場合、3つの処理部25を使用する。各処理部25の構成は、接続されるステージSTGの数が少ないことを除き、図8に示す処理部25と同様の構成である。
各メモリアクセスコントローラ21、22、23は、各処理部25に接続されるバッファ制御部270およびデータバッファ280を有する。バッファ制御部270およびデータバッファ280の構成は、図9と同様である。これにより、各メモリアクセスコントローラ21、22、23は、上述した実施形態と同様の効果を得ることができる。例えば、各メモリアクセスコントローラ21、22、23は、パケットサイズPSが異なるメモリアクセス要求MREQに基づいてメモリ30から読み出されるデータDQを、メモリアクセス要求MREQの受付順に出力できる。
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。