(57)【要約】【課題】  システムＬＳＩ内部において、マスタが複数のスレーブに同時にアクセスするとき、スレーブの備えるべきリードリターンバッファを不要にする。【解決手段】  バスマスタからのメモリへのアクセス要求を受付けてメモリにアクセスするメモリコントローラであって、バスマスタからのメモリへのアクセス要求がリードの場合、メモリから読取ったデータをバスマスタに転送する際、コマンド発行制御部６０６'は、コマンド発行タイミング情報に基づいて、バスマスタに対する他のバススレーブからの読出し応答と衝突するか否かを判断し、衝突すると判断した場合には、メモリに対するアクセスを遅延させる。【選択図】  図１０
2007108882.tif 000002
【特許請求の範囲】
【請求項１】
バスマスタからのメモリへのアクセス要求を受付けて当該メモリにアクセスするメモリコントローラであって、
前記バスマスタからの前記メモリへのアクセス要求を受け付けると前記メモリに対してアクセスするアクセス手段と、
前記メモリへのアクセス要求がリードの場合、前記メモリから読取ったデータを前記バスマスタに転送する転送手段と、
前記転送手段による前記データの転送時、前記バスマスタに対する他のバススレーブからの読出し応答と衝突するか否かを判断する判断手段と、
前記判断手段により衝突すると判断した場合には、前記メモリに対する前記アクセス手段によるアクセスを遅延させる遅延手段と、
を有することを特徴とするメモリコントローラ。
【請求項２】
前記バスマスタから受け付けたアクセス要求を順に格納するコマンドキューと、
前記コマンドキューから取り出したコマンドに応じて前記アクセス手段によるアクセスを実行させる手段とを有し、
前記遅延手段は、前記コマンドキューからの前記コマンドの取り出しを禁止することにより前記メモリへのアクセスを遅延させることを特徴とする請求項１に記載のメモリコントローラ。
【請求項３】
前記転送手段は、読取ったデータを前記バスマスタに転送する際に当該バスマスタの識別子を付して転送することを特徴とする請求項１又は２に記載のメモリコントローラ。
【請求項４】
前記判断手段は、他のバススレーブからのリードアクセスタイミング情報に基づいて前記衝突するか否かを判断することを特徴とする請求項１乃至３のいずれか１項に記載のメモリコントローラ。
【請求項５】
バスマスタからのメモリへのアクセス要求を受付けて当該メモリにアクセスするメモリコントローラであって、
前記バスマスタからの前記メモリへのアクセス要求を受け付けると前記メモリに対してアクセスするアクセス手段と、
前記メモリへのアクセス要求を保存する保存手段と、
前記メモリへのアクセス要求がリードの場合に、前記メモリから読取ったデータを前記バスマスタに転送する転送手段と、
前記転送手段による前記データの転送時、前記バスマスタに対する他のバススレーブからの読出し応答と衝突した場合には、前記保存手段に保存されているアクセス要求に基づいて前記メモリに対する前記アクセス手段によるアクセスを実行させる再実行手段と、
を有することを特徴とするメモリコントローラ。
【請求項６】
前記転送手段は、読取ったデータを前記バスマスタに転送する際に当該バスマスタの識別子を付して転送することを特徴とする請求項５に記載のメモリコントローラ。
【請求項７】
前記バスマスタからのリード応答受領信号に応じて、前記保存手段に保存されているアクセス要求を削除する手段を更に有することを特徴とする請求項５又は６に記載のメモリコントローラ。
【請求項８】
少なくとも一つのバスマスタと、
請求項１乃至７のいずれか１項に記載のメモリコントローラをそれぞれ含む複数のバススレーブと、
少なくとも１系統のメモリと、
を有することを特徴とする情報処理装置。
【請求項９】
バスマスタからのメモリへのアクセス要求を受付けて当該メモリにアクセスするメモリ制御方法であって、
前記バスマスタからの前記メモリへのアクセス要求を受け付けると前記メモリに対してアクセスするアクセス工程と、
前記メモリへのアクセス要求がリードの場合、前記メモリから読取ったデータを前記バスマスタに転送する転送工程と、
前記転送工程による前記データの転送時、前記バスマスタに対する他のバススレーブからの読出し応答と衝突するか否かを判断する判断工程と、
前記判断工程で衝突すると判断した場合には、前記メモリに対する前記アクセス工程によるアクセスを遅延させる遅延工程と、
を有することを特徴とするメモリ制御方法。
【請求項１０】
前記バスマスタから受け付けたアクセス要求を順に格納するコマンドキューと、
前記コマンドキューから取り出したコマンドに応じて前記メモリにアクセスする工程とを有し、
前記遅延工程では、前記コマンドキューからの前記コマンドの取り出しを禁止することにより前記メモリへのアクセスを遅延させることを特徴とする請求項９に記載のメモリ制御方法。
【請求項１１】
前記転送工程では、読取ったデータを前記バスマスタに転送する際に当該バスマスタの識別子を付して転送することを特徴とする請求項９又は１０に記載のメモリ制御方法。
【請求項１２】
前記判断工程では、他のバススレーブからのリードアクセスタイミング情報に基づいて前記衝突するか否かを判断することを特徴とする請求項９乃至１１のいずれか１項に記載のメモリ制御方法。
【請求項１３】
バスマスタからのメモリへのアクセス要求を受付けて当該メモリにアクセスするメモリ制御方法であって、
前記バスマスタからの前記メモリへのアクセス要求を受け付けると前記メモリに対してアクセスするアクセス工程と、
前記メモリへのアクセス要求を保存する保存工程と、
前記メモリへのアクセス要求がリードの場合に、前記メモリから読取ったデータを前記バスマスタに転送する転送工程と、
前記転送工程による前記データの転送時、前記バスマスタに対する他のバススレーブからの読出し応答と衝突した場合には、前記保存工程で保存されているアクセス要求に基づいて前記メモリに対する前記アクセス工程によるアクセスを実行させる再実行工程と、
を有することを特徴とするメモリ制御方法。
【請求項１４】
前記転送工程では、読取ったデータを前記バスマスタに転送する際に当該バスマスタの識別子を付して転送することを特徴とする請求項１３に記載のメモリ制御方法。
【請求項１５】
前記バスマスタからのリード応答受領信号に応じて、前記保存工程で保存されているアクセス要求を削除する手段を更に有することを特徴とする請求項１３又は１４に記載のメモリ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、バスマスタからメモリへのアクセスを制御するメモリコントローラ及びそのメモリ制御方法と、このメモリコントローラを具備する情報処理装置に関するものである。
【背景技術】
【０００２】
半導体技術、マイクロプロセッサ技術の進歩により、プロセッサやメモリからなる組込みシステムの応用分野は拡大の一途を辿っており、例えば、家電製品、ＡＶ機器、ＯＡ機器、自動車、通信機器などに組込みシステムが使われている。近年特徴的なのは、ＬＳＩの集積度が向上した結果、組み込み機器のコントローラ機能が一つのＬＳＩに集積される、所謂、システムＬＳＩが一般的になってきていることである。このようなシステムＬＳＩを用いることにより、省面積、低コスト化、低消費電力化、高信頼化を実現可能になる。
【０００３】
図１は、特許文献１で開示されるシステムＬＳＩを用いて、ＯＡ機器の組み込みシステムを実現する構成の一例を示す図である。図１において、１１０は組み込みシステム基板であり、システムＬＳＩ１００、メモリ１０１、各種Ｉ／Ｏインターフェースが実装される。システムＬＳＩ１００は、より詳細にはプロセッサコア、プロセッサ周辺コントローラ、メモリコントローラ、スキャナコントローラ、プリンタコントローラ、ＰＣＩインターフェース、ＵＳＢデバイスインターフェース等を内蔵したシングルチップ・スキャニング・プリンティングエンジンである。
【０００４】
組み込み基板１１０に備えられるＩ／Ｏインターフェースは、スキャナＩ／Ｆ１３１，ＦＡＸＩ／Ｆ１３２，ＵＳＢＩ／Ｆ１３４、プリンタＩ／Ｆ１３３等がある。それぞれスキャナ１２１，ＦＡＸ１２２，ＰＣ１２４、プリンタ１２３と接続され、システム全体を構成している。更に、システムＬＳＩ１００にはＰＣＩバスＩ／Ｆ１３６が備えられている。これを用い、ＰＣＩ−ＩＤＥブリッジ１０２を介してＩＤＥバス１３５に接続されるハードディスク（ＨＤＤ）１２５を使用することができる。
【０００５】
図２は、このシステムＬＳＩ１００を、より詳細に説明するブロック図である。
【０００６】
プロセッサ２０１には、最大でインストラクション、データそれぞれ１６Ｋバイトの計３２Ｋバイトのキャッシュメモリ、ＦＰＵ（浮動小数点演算ユニット）、ＭＭＵ（メモリ管理ユニット）、ユーザ定義可能なコプロセッサ等を内蔵することが可能である。またＰＣＩバスインターフェース２３２を有するので、ＰＣＩバススロットを有するコンピュータシステムと共に用いることができる。また、ＰＣＩサテライト構成に加え、ＰＣＩホストバスブリッジ構成にてＰＣＩバスコンフィギュレーションを発行することが可能である。更に、安価なＰＣＩ周辺デバイスと組み合わせることにより、マルチファンクションペリフェラル（複合機能周辺機器）のメインエンジンとして使用することも可能である。更に、ＰＣＩバスインターフェースを有するレンダリングエンジン、圧縮・伸長エンジンと組み合わせることも可能である。
【０００７】
チップ内部に汎用ＩＯコアを接続するＩＯバス（Ｂバス）２２１、及び、画像データ転送に最適化したグラフィックバス（Ｇバス：Graphic Bus）２２０の２系統の独立したバスを有している。そして、メモリ２０４、プロセッサ２０１とこれらのバスをクロスバスイッチであるシステムバスブリッジ２０３を介して接続することにより、マルチファンクションシステムにおける同時動作に必須の、並列性の高い高速データ転送を実現している。また画像データに代表される、連続したデータ列のアクセスに対しコストパフォーマンスの高いシンクロナスＤＲＡＭ（ＳＤＲＡＭ）をサポートするメモリコントローラ２０２を内蔵している。その他には、スキャナコントローラ２０５、プリンタコントローラ２０６，ＰＣＩコントローラ２０７，ＵＳＢコントローラ２０８，ＵＡＲＴ２０９、タイマ・ＧＰＩＯ機能含むＭＩＳＣモジュール２１０、ＬＡＮコントローラ２１１等を内蔵している。２３０〜２３６はそれぞれ２０５〜２１１のＩ／Ｏインターフェースであり、図１の同名のインターフェースと同一のものである。
【０００８】
ここでメモリコントローラ２０２は、ＤＤＲ−ＳＤＲＡＭヘのオープンページポリシーでのアクセスをサポートしている。このオープンページポリシーでは、一旦あるページをオープン（ＲＡＳコマンド）すると、続くＣＡＳコマンドによるメモリアクセスが終了しても直ちにはクローズ（プリチャージ）しない。後続のメモリアクセスが同一ページへのアクセスであれば（ページヒット）、ＲＡＳコマンドを発行することなく、ＣＡＳコマンドだけで連続してアクセスすることができ、このときにメモリデバイスの供給するバンド幅は最大になる。
【０００９】
一方、後続のメモリアクセスが同一バンクで別のページ（ＲＡＳアドレス）に対するものであれば、一旦ページをクローズするためにプリチャージコマンドを発行し、その後、当該ページをオープンするためにＲＡＳコマンドを発行しなければならない。このような状況ではメモリデバイスの供給できるバンド幅は低下することになる。
【００１０】
クローズページポリシーを採用し、メモリアクセスが終了すると直ちにページをクローズ（プリチャージ）すれば、ページミスが頻発するようなアクセスパターンに対してはオープンページポリシーよりも高いバンド幅を供給できることが知られている。しかしページヒットが多いアクセスパターンでは、オープンページポリシーに比べて不利になる。
【００１１】
ここで典型的な複合動作のシーケンスを考える。スキャナ１２１で原稿をスキャンしながら、その読み取った原稿画像をプリンタ１２３により印刷する、所謂コピー動作を例に説明する。原稿をスキャンすることによって得られた画像データは、スキャナ１２１からスキャナインターフェース２３０（１３１）を介してシステムＬＳＩ１００が内蔵するスキャナコントローラ２０５に送られる。スキャナコントローラ２０５は、その受け取った画像データをＤＭＡによってメモリ２０４に格納する。次いでプリンタコントローラ２０６は、この画像データをＤＭＡによりメモリ２０４から読み出し、プリンタインターフェース２３１を介してプリンタ１２３に送出して印刷する。
【００１２】
このとき更に、ＰＣ１２４からＵＳＢインターフェース２３３（１３４）を介してＰＤＬデータが送信される。このＰＤＬデータはＵＳＢデバイスコントローラ２０８によって受信され、ＤＭＡによって一旦メモリ２０４に格納される。その後、システムＬＳＩ１００のプロセッサ２０１によって解釈され、展開された画像イメージが再度メモリ２０４に格納される。最後に、プリンタコントローラ２０６によりメモリ２０４から読み出され、プリンタインターフェース２３１を介してプリンタ１２３に送られて印刷される。
【００１３】
図３は、このときのプロセッサ２０１が扱うメモリの物理アドレス空間を説明する図である。
【００１４】
実際にはプロセッサ２０１は、ＭＩＰＳ−Ｒ４０００互換であり、プロセッサ２０１のソフトウェアは仮想アドレスを用いて動作している。プロセッサ２０１は常にカーネルモードで動作しており、物理アドレス「0x0000_0000」〜「0x1fff_ffff」番地が、仮想アドレス「0x8000_0000」〜「0x9fff_ffff」番地(kseg0: cached)及び「0xa000_0000」〜「0xbfff_ffff」番地(kseg1: uncached)に対応付けられている。
【００１５】
この従来例においては、メモリ２０４の容量は３２ＭＢであり、16bit×4bank×4M word構成の２５６ＭビットのＳＤＲＡＭが１個が実装されている。従って、ＲＡＭとして利用可能な物理アドレス空間は、「0x0000_0000」〜「0x01ff_ffff」番地までである。
【００１６】
複合動作が行われる場合、プロセッサ２０１上で動作するソフトウェアが各ハードウェアが利用するメモリ２０４のバッファ領域を管理する。通常はソフトウェアで動的にメモリ領域を確保する場合と同じように、Heap領域にメモリアロケート関数（OSが提供するシステム関数：malloc等）を用いて必要なサイズの領域を確保する。この例の場合では、スキャナコントローラ２０５がＤＭＡで書き込み、プリンタコントローラ２０６がＤＭＡで読み出すバッファ領域は同じである。もしこのバッファ領域が１つしかない場合、スキャナコントローラ２０５が書き込んだアドレスを後からプリンタコントローラ２０６が読み出す。しかし通常、スキャナ１２１から読み込む速度とプリンタ１２３が印刷する速度は異なるため、スキャナコントローラ２０５とプリンタコントローラ２０６との間で同期を取る仕組みが無い限り、途中で読み出しアドレスが書き込みアドレスを追い越す可能性がある。
【００１７】
これを避けるため、一般にバッファを二重に持つことが行われる。即ち、スキャナコントローラ２０５がＤＭＡで一方のバッファ領域に書き込んでいる間、プリンタコントローラ２０６はもう一方のバッファ領域からＤＭＡで読み出す。こうして双方のＤＭＡ転送が終了した時点で、それぞれの使用するバッファを入れ替え、次のＤＭＡを開始する。例えばスキャナ１２１からスキャナコントローラ２０５に対して１ＭＢのデータが連続して送られてくる場合、まずメモリアロケート関数を引数を１ＭＢにしてコールする。そして返されたアドレスを（仮想アドレスなので物理アドレスに変換して）スキャナコントローラ２０５のＤＭＡ開始アドレスとして設定する。ここでは「0x0080_0000」〜「0x008f_ffff」番地が確保され、先頭番地である「0x800_0000」番地がＤＭＡ開始アドレスとして設定される。次いでデータが到着するとスキャナコントローラ２０５は、ＤＭＡで当該開始アドレスから連続してデータを格納していく。このＤＭＡが終了すると、プリンタコントローラ２０６に「0x0080_0000」番地がＤＭＡ開始アドレスとして設定される。その後、ＤＭＡの開始がソフトウェアにより指示されると、プリンタインターフェース２３１の信号に従って設定された開始アドレスから順次データを読み出し、プリンタインターフェース２３１を介してプリンタ１２３にデータを転送する。それと同時に、スキャナコントローラ２０５に対して次のＤＭＡが設定される。そして再度メモリアロケート関数を引数を１ＭＢにしてコールし、「0x0090_0000」〜「0x009f_ffff」番地が確保されると、先頭番地である「0x0090_0000」番地がＤＭＡ開始アドレスとして設定される。これによりスキャナインターフェース２３０よりデータが到着すると、スキャナコントローラ２０５はＤＭＡにより当該開始アドレスから連続してデータを格納していく。このようにして、スキャナコントローラ２０５とプリンタコントローラ２０６との間で、２つの領域「0x0080_0000」〜「0x008f_ffff」番地と「0x0090_0000」〜「0x009f_ffff」番地を交互に使用しながら繰り返しＤＭＡ動作が行われる。
【００１８】
一方、ＵＳＢコントローラ２０８の場合は、「0x00b0_0000」〜「0x00bf_ffff」番地が確保され、先頭番地である「0x00b0_0000」番地がＤＭＡ開始アドレスとして設定される。ＰＣ（ＵＳＢホスト）１２４からＰＤＬデータが送られてくるとＵＳＢコントローラ２０８はＤＭＡにより当該開始アドレスから連続してデータを格納していく。全ての転送が終了すると、割り込みによりソフトウェアに通知され、次いでソフトウェアによってＰＤＬデータが解釈され、プリントイメージデータが生成される。この最終的に生成されたプリントイメージデータは、新たに確保されたバッファ領域に格納される。これには再びメモリアロケート関数が呼ばれ、３ＭＢの領域「0x00c0_0000」〜「0x00ef_ffff」番地が確保される。次に「0x00c0_0000」番地をＤＭＡの先頭アドレスとしてプリンタコントローラ２０６が起動される。このときのプリンタコントローラ２０６のＤＭＡ転送は、前述のスキャナプリンタ動作時のプリンタコントローラ２０６のＤＭＡ転送とは排他的に行われる。このように、スキャナ１２１とプリンタ１２３、ＨＤＤ１２５へのアクセスが同時に起こる場合、システムＬＳＩ１００の内部では複数のハードウェアがメモリ２０４に対して同時にＤＭＡアクセスを行っている。
【００１９】
この場合は、一つのハードウェアが単独でアクセスする場合に比べて、メモリデバイスにおいてページヒットする確率が低くなる。なぜなら、個別のハードウェアからのメモリ２０４アクセスが連続的なものであっても、複数のハードウェアが交互にメモリ２０４にアクセスすることにより、メモリコントローラ２０２からメモリに対するアクセスは連続していないからである。このように同時にメモリ２０４にアクセスするハードウェアが増加するに従い、メモリデバイスへのアクセスパターンはランダムアクセスに近づいていく。ランダムアクセスでは、アクセス毎にほぼ毎回ページミスが生じ、従ってメモリコントローラ２０２は、ページクローズ（プリチャージ）、ページオープン（ＲＡＳ）コマンドを発行しなければならない。これにより、メモリの供給できるバンド幅はピーク時（ページヒット時）に比べて大幅に低下してしまう。
【００２０】
スキャナコントローラ２０５、プリンタコントローラ２０６、ＵＳＢコントローラに割り当てられたバッファ領域が全て同一バンク内で、かつ全て別ページにある。従って各々が同時に交互にＤＭＡ転送を行った場合、それぞれのＤＭＡ転送はメモリにおいて必ずページミスを起こす。そのためメモリバンド幅が低下することによりシステム性能が低下してしまい、プリンタ１２３が必要とする速度で印刷データを供給できなくなり、印刷速度を制限してしまう可能性がある。
【００２１】
上述の例は、物理アドレス（Addr[31:0]）と、メモリ２０４のバンクアドレス・ロウアドレス・カラムアドレスの関係が図４に示すように、上位ビットからこの順番で連続的にアサインされている場合に生じる。
【００２２】
これを解決するため、図５に示すように、物理アドレスとメモリ２０４のバンクアドレス・ロウアドレス・カラムアドレスの関係を固定的に取り替える方法が取られる。図５のように物理アドレスとメモリ２０４のバンクアドレス・ロウアドレス・カラムアドレスの関係をアサインすると、バスマスタから連続する物理アドレスにＤＭＡアクセスするとき、ページ境界で必ずバンクが入れ替わる。このときページミスが起こるのは図５の場合と同様である。しかし、前述のように、複数のバスマスタが同時にＤＭＡアクセスを起こしている状態では、各バスマスタがアクセスするバンクはランダムに切り替わる。メモリ２０４の各バンクは独立にアクセス可能であるため、一つのバンクでページミスが生じ、ページクローズ、オープンの処理を行う際にも、別バンクに対してアクセスできるため、ページミスのオーバーヘッドを隠蔽することが可能となる。但し、メモリコントローラ２０２が、各バスマスタからのメモリアクセス要求を受け付けた順番で処理する場合は、同一バンクに対するアクセス要求が連続すると、先のアクセスの処理が終了するまで後続のアクセスを処理できない。この結果、ページミスが生じたときのオーバーヘッドを隠蔽することができない。これはバンク数が４つの場合は１／４の確率で生じ、ページミスの多い状況では性能に与える影響が大きい。
【００２３】
メモリデバイスに対して、オウトオブオーダーでアクセスする機能を備えたメモリコントローラであれば、この状況を改善することができる。
【００２４】
図６は、従来のメモリコントローラの構成の一例を示すブロック図である。
【００２５】
図６において、６０１はバスインターフェースであり、システムバス６１０と接続され、バスマスタからのリード・ライト要求を受け付ける。より具体的にはアドレスバス信号、リード・ライト信号等のコマンド信号を受け、コマンドキュー６０２にアドレス情報とリード・ライト情報を組にして格納する。更に、データの書込みの場合はデータバス信号にドライブされているデータをライトデータバッファ６０３に格納する。またデータの読出しの場合は、リードデータバッファ６０４に保持されているデータをデータバス信号にドライブする。メモリ制御回路６０５は、コマンドキュー６０２から必要なコマンドを読み出し、メモリデバイスに対して当該コマンドに応じＣＳ，ＲＡＳ，ＣＡＳ，ＷＥ信号を適当なタイミングでドライブする。データ書込みの場合は、ライトデータバッファ６０４から当該ライトコマンドに対応する書き込むデータを読み出し、メモリデバイスに対し書き込み動作を行う。データの読出しの場合は、メモリデバイスから読み出されたデータをリードデータバッファ６０４に格納する。このリードバッファはシステムＬＳＩ内部に複数のメモリコントローラを備える場合、後述の理由により必要である。
【００２６】
コマンドキュー６０２及びライトデータバッファ６０３は、バスインターフェース６０１がキューイングした順番に拘わらず、保持している情報を任意の順番で読み出すことができるように構成されている。コマンド発行制御部６０６は、メモリ２０４の４つのバンクが独立して動作可能であることを利用して、１乃至複数のバンクがアクセス中であっても、アクセスされていないバンクがある場合は、コマンドキュー６０２から当該バンクに対するコマンドを選別する。存在すれば他のバンクへのアクセスが終了するのを待たず、直ちに当該バンクへのアクセスを開始できるようにコマンドキュー６０２よりコマンドを選択してメモリ制御回路６０５に渡す。このようにして複数のバンクへコンカレントにアクセスすることにより、仮にページミスが続いた場合にも、一つのバンクがページクローズ、オープン動作を行っている間に他のバンクへのアクセスが可能となり、オーバーヘッドを隠蔽でき、メモリアクセス効率を向上させることができる。
【００２７】
上述のようにメモリアクセス効率を向上させるためコマンドの発行順をスケジューリングする手段としては、前述のバンクの衝突を回避する以外にもいくつかの方法が存在する。例えば、Sonics社のMemMaxTM（登録商標）ではコマンドのバンク間、スレッド間、チップセレクト間、リードライト間等の６つの条件に基づいたスケジューリングをサポートしている。
【００２８】
バンク間のスケジューリングは、上述したように連続して発行されるコマンドが異なるバンクにアクセスするものである。スレッド間のスケジューリングは、スレッド毎に優先度を設け、最も優先度の高いスレッドを先に発行する。チップセレクト間のスケジューリングは、連続して発行されるコマンドが異なるチップセレクトに割り当てられたメモリデバイスにアクセスする。リードライト間のスケジューリングは、連続して発行されるコマンドが、なるべくリード同士、ライト同士になるようにする。即ち、リードからライト、ライトからリードへの切り替わりを最小にするようにスケジューリングする。MemMaxTMにおいてはこれらのスケジューリングを組み合わせコマンドキューから最適な順にコマンドを取り出しメモリにアクセスできるようにする。
【００２９】
しかしながら、メモリコントローラにおいてメモリアクセスコマンドをリオーダリングし、メモリ利用効率を向上させたとしても、まだ必要なメモリバンド幅が得られない場合には、さらなる手段を講じる必要がある。一つの方法はメモリの動作周波数を上げることであるが、同じ半導体プロセス技術を用いて動作周波数を大幅に向上することは容易なことではない。より簡単な方法は、メモリの系統数を例えば２つに増やすことである。
【００３０】
図７は、メモリデバイスを２系統備えるシステムＬＳＩの構成例を示す図である。この図７では、図２との比較のため、同一の構成要素には数字に’をつけて示している。図７において図２と異なる点は、メモリコントローラ２４０及びメモリ２４１が追加されている点にある。このようにシステムにメモリを２系統備えることで簡単にシステムの総メモリバンド幅を倍増させることができ、システム性能を向上できる。
【特許文献１】特開２０００−２１１２１６号公報
【発明の開示】
【発明が解決しようとする課題】
【００３１】
このようにシステム内にメモリコントローラが複数ある場合、考慮しなければならない問題が存在する。それは１つのマスタから複数のメモリコントローラに対して同時にリードアクセスを行う場合、それぞれのメモリコントローラからのリード応答時間は固定でなく、ある時間範囲を取る。このため、複数のメモリコントローラからのリード応答が衝突する可能性がある。特に前述のように複雑なスケジューラを用いる場合には応答時間の予測はさらに困難になる。この問題に対処するため、従来から取られてきた手法が２つある。
【００３２】
第１の手法は、１つのマスタから複数のメモリコントローラに対し同時にリードアクセスを行うことを禁止する方法である。しかしながらこの方法では、マスタのメモリアクセスに対する自由度を著しく低下させてしまう。マスタはアクセスしようとするリードアドレスが、どのメモリコントローラに割り当てられているのかを常に意識していなければならない。もし次にリードするアドレスが現在リード中のメモリコントローラとは別のメモリコントローラに割り当てられているならば、現在のリードが完了するまで次のリードコマンドの発行を待たなければならない。
【００３３】
第２の手法は、それぞれのメモリコントローラに十分な容量のリードリターンバッファを備え、もしリード応答が衝突する場合はそれらの間を調停する。また、別のメモリコントローラがマスタに対して転送を行っている間は、リード応答をリードリターンバッファに滞留させる。更に、マスタに対する転送が許可された時点でリードリターンバッファからリード応答を取り出してマスタに対して転送する。この方法では、各々のメモリコントローラに保持すべきリードリターンバッファの回路規模が問題となる。
【００３４】
メモリコントローラは、メモリ利用効率を最大化するためにパイプライン動作している。いま、一つのリードコマンドがコマンドキューから取り出され、メモリデバイスに対するアクセスが行われると、その結果はリード応答としてマスタに転送されることになる。このとき、このリード応答が他のメモリコントローラのリード応答と衝突し、調停された結果、リードリターンバッファに滞留しなければならなくなったとする。この場合メモリコントローラは、パイプライン動作しているので、この時点で既に後続の複数のコマンドがコマンドキューから取り出されメモリデバイスに対してアクセスされていると考えられる。更に、これらは先行するリードコマンドと同一のマスタから発行されたリードコマンドであり得る。メモリデバイスに対するアクセスは途中で止めることができないため、これら後続のリードコマンドに対応するリード応答も同様にリードリターンバッファに滞留される必要がある。
【００３５】
従って、第２の手法を取る場合、必要なリードリターンバッファの容量は、一連の複数のリードコマンドにより読み出されるデータの最大数分だけ確保しなければならない。例えば、メモリバス幅が６４ビットのメモリデバイスを４ビート・バースト転送を用いてアクセスする場合、一度のアクセス当たりの６４ビット×４＝２５６ビットが転送される。メモリデバイスにＤＤＲ−ＳＤＲＡＭを用いる場合、１クロック当たり２ビートの転送が行われる。このため、この４ビート・バーストアクセスに必要なクロックサイクルは２クロックである。リードの場合を考えると、メモリバス上で４ビートの転送が行われるのに先立って、ＣＡＳレイテンシ・サイクル前にリードコマンドが発行される必要がある。ＣＡＳレイテンシは、一般的に２〜２．５〜３が用いられる。ＣＡＳレイテンシが３の場合を考えると、リードコマンドが発行されてからデータが読み出されるまでのサイクル数は、結局３＋２＝５サイクルとなる。このリードが終わるのを待って次のリードコマンドを発行していたのでは５サイクル当たりメモリバスは２クロックサイクルしか利用できない。そこで、メモリの利用効率を上げるためには、この間にも次のリードコマンドを発行し、パイプライン動作をさせるようにする。１つのコマンド当たりメモリバスは２クロック占有されるため、メモリ利用効率を最大にするためには、２クロックに一度リードコマンドを発行する必要がある。従って、５クロックサイクルの間に更に２つのリードコマンドを発行することができる。メモリデバイスからのリードが終了し、マスタに当該リードデータを転送できるようになるまで、通常更に数サイクルを必要とする。このため、この間パイプライン発行されるリードコマンドの数は更に多くなることがある。最初のリード応答が他のスレーブからのリード応答と衝突し、調停の結果リードリターンバッファに滞留することになったとき、これら後続のリードコマンドも全て同一のマスタからのコマンドであることがあり得る。よって、それら後続のリードコマンドのリード応答も全てリードリターンバッファに滞留されることが起こり得る。このような事態は実際にはほとんど起こらないとしても、完全な動作を保証するためにはこのような最悪の場合にも対処できなければならない。その結果、各メモリコントローラには少なくとも２５６ビット×４＝１０２４ビット分もの容量を持つリードリターンバッファを備える必要が生じる。
【００３６】
本発明の目的は上記従来の問題点を解決することにある。
【００３７】
本発明の特徴は、バスマスタに対するリードリターンバッファを不要にして、複数のバススレーブからのリード応答の衝突を防止する技術を提供することにある。
【課題を解決するための手段】
【００３８】
上記目的を達成するために本発明の一態様に係るメモリコントローラは以下のような構成を備える。即ち、
バスマスタからのメモリへのアクセス要求を受付けて当該メモリにアクセスするメモリコントローラであって、
前記バスマスタからの前記メモリへのアクセス要求を受け付けると前記メモリに対してアクセスするアクセス手段と、
前記メモリへのアクセス要求がリードの場合、前記メモリから読取ったデータを前記バスマスタに転送する転送手段と、
前記転送手段による前記データの転送時、前記バスマスタに対する他のバススレーブからの読出し応答と衝突するか否かを判断する判断手段と、
前記判断手段により衝突すると判断した場合には、前記メモリに対する前記アクセス手段によるアクセスを遅延させる遅延手段と、
を有することを特徴とする。
【００３９】
上記目的を達成するために本発明の一態様に係る情報処理装置は以下のような構成を備える。即ち、
少なくとも一つのバスマスタと、
請求項１乃至７のいずれか１項に記載のメモリコントローラをそれぞれ含む複数のバススレーブと、
少なくとも１系統のメモリと、
を有することを特徴とする。
【００４０】
更に上記目的を達成するために本発明の一態様に係るメモリ制御方法は以下のような工程を備える。即ち、
バスマスタからのメモリへのアクセス要求を受付けて当該メモリにアクセスするメモリ制御方法であって、
前記バスマスタからの前記メモリへのアクセス要求を受け付けると前記メモリに対してアクセスするアクセス工程と、
前記メモリへのアクセス要求がリードの場合、前記メモリから読取ったデータを前記バスマスタに転送する転送工程と、
前記転送工程による前記データの転送時、前記バスマスタに対する他のバススレーブからの読出し応答と衝突するか否かを判断する判断工程と、
前記判断工程で衝突すると判断した場合には、前記メモリに対する前記アクセス工程によるアクセスを遅延させる遅延工程と、
を有することを特徴とする。
【発明の効果】
【００４１】
本発明によれば、バスマスタに対するリード応答が他のスレーブからのリード応答と衝突することを防ぐことができ、従来のメモリコントローラに備えられていたリードリターンバッファを不要にできる。
【発明を実施するための最良の形態】
【００４２】
以下、添付図面を参照して本発明の好適な実施の形態を詳しく説明する。尚、以下の実施の形態は特許請求の範囲に係る本発明を限定するものでなく、また本実施の形態で説明されている特徴の組み合わせの全てが本発明の解決手段に必須のものとは限らない。
【００４３】
［実施の形態１］
図８は、本発明の実施の形態１に係るシステム構成を説明するブロック図である。
【００４４】
図において、８００はシステムＬＳＩであり、プロセッサ、メモリコントローラ、ＤＭＡ機能を備える複数のハードウェアエンジン、更には、説明の簡単のため図示されない複数の機能モジュールを内蔵している。メモリ８０１及び８０２は、このシステムＬＳＩ８００に内蔵されるメモリコントローラによって制御されるメモリで、４バンク構成の２５６Ｍビット４個が２組実装されている。８０３〜８０６は外部Ｉ／Ｏインターフェースである。ここで８０３はスキャナインターフェース、８０４はプリンタインターフェース、８０５はＰＣＩインターフェース、８０６がＵＳＢインターフェースであり、それぞれがシステムＬＳＩ８００の内部において複数のハードウェアエンジンと接続される。スキャナ８１０は、スキャナインターフェース８０２によってシステムＬＳＩ８００と接続される。プリンタエンジン８１１は、プリンタインターフェース８０４によってシステムＬＳＩ８００と接続されている。ＵＳＢホスト８１２は、ＵＳＢインターフェース８０６によってシステムＬＳＩ８００と接続される。ＰＣＩ拡張スロット８１３は、ＰＣＩインターフェース８０５によってシステムＬＳＩ８００と接続される。
【００４５】
このハードウェアエンジンは、より具体的には、スキャナコントローラ、プリンタコントローラ、ＰＣＩインターフェース、ＵＳＢデバイスインターフェース等である。しかし必ずしもＩ／Ｏインターフェースと関係しているものだけではなく、画像処理、画像符号化複合化、データ圧縮伸張等を行うハードウェアエンジンも含まれている。これらは、リード用のＤＭＡコントローラとライト用のＤＭＡコントローラの両方を備えている。これを図９を用いて詳細に説明する。
【００４６】
図９は、本実施の形態１に係るシステムＬＳＩ８００のより具体的な構成を説明する図である。
【００４７】
図９において、プロセッサ９０１は、ＭＩＰＳ−Ｒ４０００互換の機能を有する。スキャナコントローラ９０６は、スキャナインターフェース９３０を介して外部のスキャナと接続される。プリンタコントローラ９０７は、プリンタインターフェース９３１を介して外部のプリンタエンジンと接続される。ＵＳＢデバイスコントローラ９０９は、ＵＳＢインターフェース９３３を介し外部のＵＳＢホストと接続される。ＰＣＩコントローラ９０８は、ＰＣＩホストブリッジ機能を備え、ＰＣＩインターフェース９３２を介して外部の１乃至複数のＰＣＩターゲットデバイスと接続される。
【００４８】
メモリ９０４及び９０５は、それぞれ総容量は１２８ＭＢであり、１６ビット×４バンク×4Ｍワード構成の２５６ＭビットのＤＤＲＳＤＲＡＭ１個により構成されている。JPEG圧縮・伸張エンジン９１０は、メモリ９０４或は９０５上のＪＰＥＧ符号データをリードＤＭＡにより読み出し、復号した後、生画像データをライトＤＭＡによりメモリ９０４或は９０５に書き込む。またメモリ９０４，９０５上の生画像データをリードＤＭＡにより読み出し、符号化した後、符号データをライトＤＭＡによりメモリ９０４或は９０５に書き込むことができる。システムバス９２０は、バスマスタであるプロセッサ、各ハードウェアエンジンとバススレーブであるメモリコントローラ、その他とを接続する。共有バスではなく、複数のバスマスタと複数のバススレーブ間を多重に接続可能なマルチレイヤ構造をとっている。メモリコントローラ９０２及び９０３は、ＤＤＲ−ＳＤＲＡＭをサポートしており、これらは本実施の形態１においては全く同一の構成をとる。これらは図６に示されるメモリコントローラと構成はほぼ同一であるが本実施の形態では変更されている。
【００４９】
図１０は、本実施の形態１に係るメモリコントローラ９０２及び９０３をより詳細に説明する図である。ここでは図６との比較のため、同一の構成要素には数字に’を付加して示している。
【００５０】
図６と比較して図１０が大きく異なる点は、図１０では、リードデータバッファ６０４が除去されている点にある。またコマンド発行制御部６０６'にはコマンド発行タイミング情報６２０が入力され、またコマンド発行制御部６０６'からコマンド発行タイミング情報６２１が出力されている点が異なっている。これらの情報６２０，６２１は、メモリコントローラ９０２と９０３の間で互いにやりとりされる。その効果については後述する。
【００５１】
図１１及び図１２は、本実施の形態に係るシステムバス９２０のバスプロトコルを説明する図で、図１１はリード転送を示し、図1２はライト転送を示している。前述のようにシステムバス９２０はマルチレイヤ構成であり、バスマスタからみた場合に任意のバススレーブとの間で１対１で接続されているようにみなすことができる。このシステムバス９２０は以下の信号により構成される。
clk               システムバスクロック
ts                Bus Transaction Start    Master（マスタ）→Slave（スレーブ）
addr[31:2]        Address Bus              Master→Slave
mid[3:0]          Master ID                Master→Slave
rd_not_wr         Read(H)/Write(L)         Master→Slave
b_size[3:0]       Access Size              Master→Slave
rd_byteen[3:0]    Read Data Byte Enable    Master→Slave
wr_data[31:0]     Write Data Bus           Master→Slave
wr_byteen[3:0]    Write Data Byte Enable   Master→Slave
srdy              Slave Ready              Slave→Master
rrdy              Read Return Ready        Slave→Master
rmid[3:0]         Return Master ID         Slave→Master
rd_data[31:0]     Read Data Bus            Slave→Master
rd_error          Read Error               Slave→Master
clk            システムバスクロック
システムバス９２０は同期バスであり、システムバス９２０の全ての信号のアサート／デアサートは本信号の立ち上がりエッジに同期して行なわれる。
ts[slave_num-1:0]    Transaction Start      Master→Slave
各バスマスタがバス転送を開始したいときにアサートを開始し、srdy（スレーブ・レディ）がアサートされるまでアサートを続ける。そしてsrdyがアサートされた次のクロック（Clock）サイクルでデアサートする。ts（バストランザクション開始）とsrdyの両方がアサートされているサイクルでバス転送を開始する。バスマスタは次のバス転送のためにtsの１サイクルのデアサート期間の後、再びアサートすることができる。この信号はスレーブ毎に独立した信号である。
addr[31:2]        Address Bus（アドレスバス）    Master→Slave
tsと同時に確定させ、tsのデアサートの１サイクル後のサイクルまで保持する。
mid[3:0]          Master ID                      Master→Slave
アクセスを行なうバスマスタのＩＤである。tsと同時に確定させ、tsのデアサートの１サイクル後のサイクルまで保持する。
rd_not_wr          Read(H)/Write(L)              Master→Slave
バス転送のリード（Read）／ライト（Write）を示す。tsと同時に確定させ、tsのデアサートの１サイクル後のサイクルまで保持する。ハイレベル（High）はリードを示し、ロウレベルはライトを示す。
b_size[3:0]          Burst size                  Master→Slave
システムバス９２０上のバス転送のバースト数を示す。１から１６ビートまで指定可能である。tsと同時に確定させ、tsのデアサートの１サイクル後のサイクルまで保持する。「0000」は１ビート（beat）を示す。以下、「0001」は２beat、…「1111」は１６beatを示している。
rd_byteen[3:0]        Read Data Byte Enable        Master→Slave
リード時のバイトイネーブルを示す。b_size[3:0]がシングルを示している時、その３２ビットの中でどのバイト位置へのリードであるかを示す。b_sizeが２beat burst以上を示している時は、本信号は無効で、全てイネーブルとして扱われる。
wr_byteen[3:0]は、書込み時のData Phaseで有効であるが、本信号はリード時のAddress Phaseで有効である。tsと同時に確定させ、tsのデアサートの１サイクル後のサイクルまで保持する。
wr_data[31:0]        Write Data Bus                Master→Slave
３２ビットのデータバスに出力される、マスタからスレーブへの書込みデータである。tsとsrdyの両方がアサートされたサイクルの次のサイクルから有効となる。Single Transaction時は最初の１beat目のデータのみ、２beat Burst Transaction時は、１beat目と２beat目の両方のデータが有効である。どのバイトが有効かは、wr_byteen[3:0]によって示される。システムバス９２０は、Big Endian Busなので、ＭＳＢ側が０番地となる。
wr_byteen[3:0]        Write Data Byte Enable        Master→Slave
書込みデータのどのバイト位置が有効かを示す。wr_data[31:0]と同じく、tsとsrdyの両方がアサートされたサイクルの次のサイクルから有効となる。Single Transaction時は最初の１beat目のみ、２beat Burst 以上の転送時は全てのビートで有効である。
【００５２】
このwr_byteen[3:0]とwr_dataとの対応は以下の通りである。
wr_byteen[3]    wr_data[31:24]
wr_byteen[2]    wr_data[23:16]
wr_byteen[1]    wr_data[15:8]
wr_byteen[0]    wr_data[7:0]
srdy[slave_num-1:0]    Slave Ready            Slave→Master
スレーブのバッファがマスタからのバス転送を受け取る準備ができていることを示す。本信号がアサートされていれば、マスタはいつでもバス転送を始めることができ、スレーブは必ずそのバス転送を受け取らなければならない。この信号はtsに対応しスレーブ毎に独立した信号である。
rrdy            Read Return Ready              Slave→Master
スレーブからのリードリターン（Read Return）を示す信号である。スレーブはリードデータの準備ができたら本信号をアサートし、リードリターンを開始する。この信号はいつでもアサートしてよい。本信号のアサートと同じサイクルでリードデータが返される。２beat Burstの場合は、本信号が２サイクル期間アサートされ、２beat分のリードデータが返される。その際、本信号は連続してアサートされる必要は無く、間にウェイトサイクルを挟むことができる。
rmid[3:0]        Return Master ID        Slave→Master
リードリターンを受けるべきマスタのＩＤを示す。リード要求を受け付けた時にアサートされたmid[3:0]を保持しておき、同じＩＤを返す。マスタはtsのアサート時の本信号をデコードし、自分のマスタＩＤである場合に、そのリードリターンを自分へのリードリターンであると判断する。このrmid[3:0]は、rrdy（リードリターンレディ）と同時にアサートされる。
rd_data[31:0]        Read Data Bus            Slave→Master
３２ビットのデータバスで、スレーブからマスタへのリードデータである。rrdy がアサートされるサイクルで有効なデータが返される。
rd_error            Read Error                Slave→Master
スレーブからのエラーをマスタに通知する。エラーが発生した場合、スレーブは、リードリターン時に、rrdyと同じサイクルでアサートする。
Ｔｒａｎｓａｃｔｉｏｎ  ｔｙｐｅ
(a) write transaction
基本プロトコル
(1) サイクル-2：マスタはライト（書込み）バス転送を開始する際には、対象となるスレーブに対応したts（バストランザクション開始）をアサートする。同時に、b_size[3:0], rd_not_wr, mid[3:0], addr[31:2] をアサートする。
(2) サイクル-3：対象となるスレーブに対応したsrdyがアサートされているので、ライトバス転送の開始となり、tsをデアサートする。また、wr_data[31:0], wr_byteen[3:0]をアサートし、１Beat目のライトデータを出力する。
(3) サイクル-4： b_size[3:0], rd_not_wr, mid[3:0], addr[31:2] をデアサートする。また、wr_data[31:0], wr_byteen[3:0]を切り替え、２beat目のライトデータを出力する。
(4) サイクル-5,6：３beat目、４beat目の転送を行う。
(5) サイクル-7：ライトバス転送終了
(6) サイクル-7,8：マスタがtsをアサートしても、srdyがデアサートされていた場合は、マスタはtsをアサートし続ける。
(7) サイクル-10：srdyがアサートされると、tsをデアサートする。
(8) サイクル-11：マスタは次のバス転送を開始するために、tsの１サイクルのデアサート期間の後、再びアサートすることができる。
【００５３】
ライトバス転送が連続した場合で、もっとも各バス転送間が詰まった状態では、間隔を空けずにデータを書込み続けることができる。
(b) Read transaction
リードバス転送は、マスタからスレーブへのリードコマンドのバス転送と、スレーブからマスタへのリードデータのリードリターンに分かれている。それぞれは独立しており、信号線も独立したものとなっている。
基本Protocol
(1) サイクル-2：マスタはリードバス転送を開始する際には、対象となるスレーブに対応したtsをアサートする。同時に、b_size[3:0],rd_not_wr, rd_byteen[3:0], mid[3:0], addr[31:2] をアサートする。
(2) サイクル-3：対象となるスレーブに対応したsrdyがアサートされているので、リードバス転送の開始となり、tsをデアサートする。
(3) サイクル-4： b_size[3:0], rd_not_wr, rd_byteen[3:0], mid[3:0], addr[31:2] をデアサートする。
【００５４】
リードバス転送のリードコマンドバス転送終了
(4) サイクル-6：スレーブは、リードデータの準備ができたら、rrdyとrmid[3:0]をアサートしてリードリターンを開始する。rmid[3:0]には、リードコマンドでマスタから受けとったマスタＩＤをのせる。また、rd_data[31:0]をアサートし、１Beat目のリードデータを出力する。
(5) サイクル-7,8,9：２〜４beat目の転送を行う。
(6) サイクル-9：rrdyをデアサートする。rmid[3:0]をデアサートする。
(7) サイクル-10：リードリターン終了
マスタがtsをアサートしても、srdyがデアサートされていた場合(サイクル-8,9)は、マスタはtsをアサートし続ける。そして、srdyがアサートされるとtsをデアサートする(サイクル-10)。
(8) サイクル-11：マスタは、次のバス転送を開始するために、tsの１サイクルのデアサート期間の後、再びアサートすることができる。
(9) サイクル-13：rrdyは連続してアサートする必要はなく任意のウェイトサイクルを入れることができる。
(10) サイクル-16：スレーブは、更にリターンすべきデータがある場合は、次のリードリターンを開始するためにrrdyを連続してアサートすることができる。リードバス転送が連続した場合には、リードデータバス上で間隔を空けずにデータをリードし続けることができる。
【００５５】
次に、実際の動作を例に挙げて本発明の一実施の形態の説明を行う。
【００５６】
図１３は、図９においてプロセッサ９０１が同時にメモリコントローラ９０２及び９０３からリードを行う場合のタイミングチャートを示したものである。物理アドレスとメモリデバイスのバンクアドレス、ロウアドレス、カラムアドレスとの対応は図５と同様である。以下、プロセッサ９０１をマスタ、メモリコントローラ９０２をスレーブ１、メモリコントローラ９０３をスレーブ２と呼ぶ。
【００５７】
図１３において、初めにマスタがｔｓ信号をアサートして（１３００）データ転送を開始する（サイクル１）。これに対してスレーブ１はｓｒｄｙをアサートし（１３０１）、このコマンドを受け付ける（サイクル２）。この場合のアドレスは「0x00000400」番地である。紙面の都合で図示されないが、このコマンドはリード(rd_not_wr = 1)であり、かつ８ビート(b_size = 0１１１)である。引き続きマスタは再度ts信号をアサートし（１３０２）、２番目の転送を開始する（サイクル４）。これに対してスレーブ２は、ｓｒｄｙをアサートし（１３０３）、このコマンドを受け付ける(サイクル５)。このときのアドレスは「0x00037bfc」番地である。このコマンドも８ビートのリードコマンドである。
【００５８】
メモリコントローラ９０２は、プロセッサ９０１からのこれらリードコマンドを受け付けると、一旦、コマンドキュー（図１０の６０２'）に格納する。ここでバンク衝突の判定を行う。この例ではコマンドキュー６０２'にはコマンドが一つしかなく、かつバンク衝突も無い。よって、このリードコマンドは直ちにメモリ制御回路６０５'に送られ、メモリ９０４に対しリードアクセスを行う。もしこのコマンドがバンク衝突を起こしている場合は、当該バンクが再度アクセス可能になるまで、そのリードコマンドはコマンドキュー６０２'に滞留される。この間、コマンドキュー６０２'に他のコマンドが入力され、そのコマンドがバンク衝突を起こさなければ、そのコマンドが先に発行される。
【００５９】
メモリ９０４は、リードアクセスの結果、その読み出したデータを順次メモリコントローラ９０２に返す。メモリコントローラ９０２はこれを受け取ると直ちにマスタ（プロセッサ９０１）に対して転送する（サイクル９〜サイクル１６）。
【００６０】
本実施の形態では、システムバスは３２ビットで構成されているので、マスタはシステムバス上は３２ビット単位でのアクセスを行うことになる。ここでメモリ９０４のバス幅は１６ビットであるから、システムバス上の８ビート転送に対応してメモリコントローラ９０２及び９０３は、メモリ９０４又は９０５に対して１６ビートのリードアクセスを発行する。そして、その読み出した結果を３２ビット毎にマスタに返すように動作する。
【００６１】
ここでメモリ９０４がＤＤＲーＳＤＲＡＭにより構成されていることに注意する必要がある。即ち、メモリ９０４に対する２ビートのアクセスに対して、システムバスクロックの１クロックでデータが転送される。従って、システムバス９２０で８ビートのデータが転送されるのに要する時間と、メモリバスで１６ビートのデータが転送されるのに要する時間は等しい。
【００６２】
もし、メモリコントローラ９０２がメモリ９０４に対して行うように、メモリコントローラ９０３もリードコマンドを受け取ると直ちにメモリ９０５に対してリードアクセスを行うと、互いのリード応答は衝突することになる。これは図１３において明らかである。図１３において、スレーブ１がマスタからコマンドを受け取ってからリード応答の１ビート目をマスタに転送するまでに６クロックかかっている。これにより、同一の条件であれば、スレーブ２がマスタからコマンドを受け取ったサイクル５から数えて６クロック後のサイクル１２（１３０４）からスレーブ２がリード応答を返すことになる。しかし、これではリード応答が衝突することになる。
【００６３】
これを回避するため本実施の形態では、前述のようにメモリコントローラ９０２と９０３の間でコマンド発行タイミング情報をやりとりするように構成している。このコマンド発行タイミング情報には、一例として、マスタ毎のリードコマンド発行禁止期間情報が含まれている。
【００６４】
本実施の形態において、このリードコマンド発行禁止期間情報は、同一構成のメモリコントローラと同一タイプのメモリデバイスを用い、更に、クローズページポリシーを採用しているため、全てのタイミングが相似になることから容易に生成できる。即ち、データのバースト長の期間、コマンドの発行を禁止すれば良いことになる。
【００６５】
図１４は、これらの関係を説明するシーケンス図である。
【００６６】
スレーブ１は、マスタからリードコマンドを受け取ると、メモリ１に対しリードアクセスを開始すると同時に、スレーブ２に対しリードコマンド発行禁止期間情報を出力する。スレーブ２は、このコマンド発行禁止期間情報を受け取ると、内部のマスタ毎に保持するダウンカウンタに保持しサイクル毎にダウンカウントを行う。スレーブ２は、マスタからリードコマンドを受け取ると、このリードコマンド発行禁止期間の間、即ち、カウンタが減算されて「０」になるまでの間、メモリ２に対するリードアクセスの開始を遅らせる。このようにして２つのスレーブからのリード応答が衝突することを防ぐことができる。その結果、従来メモリコントローラに備えられていたリードリターンバッファを不要にすることが可能となる。
【００６７】
尚、ここでコマンド発行禁止期間を設けることにより直ちにメモリ利用効率が低下するわけではないことに注意すべきである。即ち、このコマンド発行禁止期間においても他のマスタからのコマンドや同一マスタからのライトコマンドが発行可能である。結局、順不同で発行可能なコマンドキューのスケジューリングの一条件としてコマンド発行禁止期間を用いれば良いことになる。
【００６８】
以上において、本発明が特定の実施の形態に関して図示されかつ説明されたが、さらに他の修正及び改善が可能であることは言うまでもない。
【００６９】
例えば、本実施の形態においては、システムＬＳＩ内に２つのメモリコントローラを備える場合で説明したが、メモリの系統数は、この数に限定されるものではなく、またスレーブとしてメモリコントローラに限定するものでもない。また例えば、本実施の形態においては、システムバスとして特定の信号、プロトコルを備えるバスを使用する場合について説明したが、本発明はもちろんこれに限定するものではなく、任意のバスをシステムバスとして利用し構成しても良い。
【００７０】
また例えば、本実施の形態においては、説明の簡単のため、マスタ間の優先度の設定方法については詳細には説明しなかったが、例えばプライオリティ信号を備えるシステムバスを利用して、転送単位で優先度を与えるようにしても良い。
【００７１】
また例えば、本実施の形態においては、メモリデバイスとしてＤＤＲ−ＳＤＲＡＭを用いる場合を例にとって説明したが、もちろんこれに限定されるものではないことは言うまでもない。
【００７２】
また例えば、本実施の形態においては、メモリデバイスにアクセスする際のビート長が８の場合で説明したが、任意のビート長について適用できることは言うまでもない。
【００７３】
以上説明したように本実施の形態１によれば、メモリコントローラがリードコマンドを発行するタイミングを必要に応じて遅延させる。これにより、バスマスタに対するメモリコントローラからのリード応答と、他のスレーブからのリード応答とが衝突することを防ぐことができる。これにより、従来のメモリコントローラに備えられていたリードリターンバッファを不要にでき、メモリコントローラを含むシステムＬＳＩの回路規模を削減し安価に実現することが可能となる。
【００７４】
［実施の形態２］
次に本発明の実施の形態２について説明する。尚、本実施の形態２に係るシステムのハードウェア構成は前述の実施の形態１の場合と同様であるため、その説明を省略する。
【００７５】
図１５は、本実施の形態２に係るメモリコントローラ９０２及び９０３をより詳細に説明する図である。ここでは前述の実施の形態１に係る図６との比較のため、同一の構成要素には数字に’を付加して示している。
【００７６】
この図１５が図６と大きく異なる点は、図１５では、リードリターンバッファ６０４が除去されている点にある。更に図１５では、リザーブキュー６０７が追加されている。その効果については後述する。
【００７７】
図１６及び図１７は、本実施の形態２に係るシステムバス９２０のバスプロトコルを説明する図である。ここで図１６はリード転送を示し、図１７はライト転送を示している。前述のようにシステムバス９２０はマルチレイヤ構成であり、バスマスタからみた場合に任意のバススレーブとの間で１対１に接続されているようにみなせる。このシステムバス９２０を構成する信号は、前述の実施の形態１の場合と同様であるため、その説明を省略する。但し、この実施の形態２では、
rd_accept              Read Accept                Master → Slave
が追加される。これはマスタがスレーブからのリードリターンを受け取り可能であることを示す。
【００７８】
この実施の形態２では、Read transactionが前述の実施の形態１と少し異なっているため、そのプロトコルを説明する。
【００７９】
Read transaction
リードバス転送は、マスタからスレーブへのリードコマンドのバス転送と、スレーブからマスタへのリードデータのリードリターンに分かれている。それぞれは独立しており、信号線も独立したものとなっている。
基本Protocol
(1) サイクル-2：マスタはリードバス転送を開始する際には、対象となるスレーブに対応したtsをアサートする。同時に、b_size[3:0],rd_not_wr, rd_byteen[3:0], mid[3:0], addr[31:2] をアサートする。
(2) サイクル-3：対象となるスレーブに対応したsrdyがアサートされているので、リードバス転送の開始となり、tsをデアサートする。
(3) サイクル-4： b_size[3:0], rd_not_wr, rd_byteen[3:0], mid[3:0], addr[31:2] をデアサートする。
【００８０】
リードバス転送のリードコマンドバス転送終了
(4) サイクル-5：スレーブはリードデータの準備ができたら、rrdy（リードリターンレディ）をアサートする。
(5) サイクル-6：rmid[3:0]をアサートして、リードリターンを開始する。rmid[3:0]にはリードコマンドでマスタから受けとったマスタＩＤをのせる。また、rd_data[31:0]をアサートし、１Beat目のリードデータを出力する。rd_acceptがアサートされているためこの転送はマスタに受領される。
(6) サイクル-7,8,9：２beat目、３beat目、４beat目の転送を行う。同様にrd_acceptがアサートされているため、これらの転送はマスタに受領される。
(7) サイクル-9：rrdyをデアサートする。
(8) サイクル-10:rmid[3:0]をデアサートする。転送終了。
【００８１】
マスタがtsをアサートしても、srdyがデアサートされていた場合(サイクル-7,8)は、マスタはtsをアサートし続ける。そして、srdyがアサートされるとtsをデアサートする(サイクル-10)
(9) マスタは、次のバス転送を開始するためにtsの１サイクルのデアサート期間の後、再びアサートすることができる。rrdyは連続してアサートする必要はなく、任意のウェイトサイクルを入れることができる（サイクル-13）
(10) サイクル-15：スレーブは、さらにリターンすべきデータがある場合は、次のリードリターンを開始するために、rrdyを連続してアサートすることができる。リードバス転送が連続した場合には、リードデータバス上で間隔を空けずにデータを読み込み続けることができる。
【００８２】
次にrd_accept信号がどのように生成されるかを説明する。
【００８３】
図１８は、リードリターン調停回路を示すブロック図である。
【００８４】
リードリターン調停回路は、システムバス９２０内にマスタの数分備えられている。これは各スレーブからマスタに対しリード応答が転送される経路上に配置され、複数のスレーブから返されるリード応答のうち一つを選択する。こうして選択したリード応答を発信したスレーブに対してはrd_acceptをアサートし、それ以外のスレーブに対してはrd_acceptをデアサートする。複数のリード応答が同時にリードリターン調停回路に到達した場合は、予め定められた優先度に従ってそれらの内の一つのみを選択する。
【００８５】
次に、実際の動作を例に挙げて本発明の実施の形態２を説明する。
【００８６】
図１９は、図９においてプロセッサ９０１が同時にメモリコントローラ９０２及び９０３からリードを行う場合のタイミングチャートである。物理アドレスとメモリデバイスのバンクアドレス、ロウアドレス、カラムアドレスとの対応は前述の図５と同様である。以下、プロセッサ９０１をマスタ、メモリコントローラ９０２をスレーブ１、メモリコントローラ９０３をスレーブ２と呼ぶ。
【００８７】
図１９において、初めにマスタがｔｓ信号をアサートし転送を開始する（１９０１）。これによりスレーブ１はｓｒｄｙをアサートし（１９０２）、このコマンドを受け付ける。このときのアドレスは「0x00000400」番地である。紙面の都合で図示されないが、このコマンドはリード(rd_not_wr = 1)であり、かつ８ビート(b_size = 0１１１)である。引き続きマスタは、再度ts信号をアサートして２番目の転送を開始する（１９０３）。これによりスレーブ２はｓｒｄｙをアサートし、このコマンドを受け付ける(１９０４)。このときのアドレスは「0x00037bfc」番地である。このコマンドも８ビートのリードコマンドである。
【００８８】
メモリコントローラ９０２は、このリードコマンドを受け付けると一旦コマンドキュー（図１５の６０２'）に格納する。ここでバンク衝突の判定を行う。この例ではコマンドキュー６０２'にはコマンドが一つしかなく、かつバンク衝突も無いため直ちにメモリ制御回路６０５'に送られメモリ９０４に対しリードアクセスを行う。このとき、当該リードコマンドをリザーブキュー６０７に格納しておく。もしこのコマンドがバンク衝突を起こしている場合は、このバンクが再度アクセス可能になるまで、そのコマンドはコマンドキュー６０２'内で滞留される。この間コマンドキュー６０２'内に他のコマンドが入力され、かつそのコマンドがバンク衝突を起こさなければ、そのコマンドが先に発行されることになる。メモリ９０４は、リードアクセスの結果読み出されたデータを順次メモリコントローラ９０２に返す。メモリコントローラ９０２はこれを受け取ると直ちにマスタに対し転送する（サイクル9〜サイクル16）。このときrd_acceptがアサートされているため、これらリード応答の転送はマスタによって受領される。これによりメモリコントローラ９０２は、リザーブキュー６０７から、そのリードコマンドを消去する。
【００８９】
本実施の形態２では、システムバスは３２ビットで構成されているので、マスタはシステムバス上は３２ビット単位でアクセスすることになる。これに対してメモリ９０４のバス幅は１６ビットであるから、システムバス上の８ビート転送に対応し、メモリコントローラ９０２及び９０３はメモリ９０４又は９０５に対して１６ビートリードアクセスを発行する。こうしてリードした結果を３２ビット毎にマスタに返すよう動作する。ここでメモリ９０４がＤＤＲーＳＤＲＡＭにより構成されていることに注意する必要がある。即ち、メモリ９０４に対する２ビートのアクセスは、システムバスクロックの１クロックでデータ転送される。従って、システムバス上で８ビートのデータが転送されるのに要する時間とメモリバス上で１６ビートのデータが転送されるのに要する時間が等しいなる。
【００９０】
メモリコントローラ９０２がメモリ９０４に対して行うように、メモリコントローラ９０３もリードコマンドを受け取ると直ちにメモリ９０５に対してリードアクセスを行う。このとき互いのリード応答は衝突することになることは図１９おいて明らかである。
【００９１】
図１９において、スレーブ１がマスタからコマンドを受け取ってからリード応答の１ビート目をマスタに転送するまでに６クロックを要している。従って、同一の条件であれば、スレーブ２がマスタからコマンドを受け取ったサイクル５から数えて６クロック後のサイクル１２からスレーブ２はリード応答を返すことになる。
【００９２】
しかしながら図１９において、サイクル１２ではrd_acceptが「０」になっている。このことからメモリコントローラ９０３はリード応答の衝突を認識し、メモリから読み出したデータはマスタに転送することなく破棄する。ＤＤＲ−ＳＤＲＡＭメモリは一度読み出しを開始すると途中で中断することができない性質を持っているので、これはサイクル１２〜１９の間続くことになる。
【００９３】
このときメモリコントローラ９０３は、この時のリードコマンドをリザーブキュー６０７に保持している。そこでメモリコントローラ９０３は、リード応答の衝突を認識した時点で再スケジューリングを行う。これにより、サイクル２０からリード応答をマスタに転送できるように、リザーブキュー６０７から当該リードコマンドを取り出してメモリ９０５に対して、サイクル２０で再度リードアクセスを行う。この場合、サイクル２０においてrd_acceptが「１」であるため、このリード応答はマスタに転送されることになる。
【００９４】
以上説明したように本実施の形態２では、メモリコントローラを含む複数のスレーブからのリード応答が衝突する場合であっても、メモリコントローラは、そのリード応答を一旦破棄し、メモリに対して同じリードアクセスを繰り返し行う。これにより、リード応答が衝突するタイミングをずらすことができる。その結果、従来のメモリコントローラに備えられていたリードリターンバッファを不要にすることが可能となる。
【００９５】
以上において、本発明が特定の実施の形態に関して図示されかつ説明されたが、さらに他の修正および改善が可能であることは言うまでもない。
【００９６】
例えば、本実施の形態２では、システムＬＳＩ内に２つのメモリコントローラを持つ場合について説明したが、メモリの系統数を限定するものではなく、またスレーブとしてメモリコントローラに限定するものでもない。また例えば、本実施の形態２では、システムバスとして特定の信号、プロトコルを備えるバスを使用する場合について説明したが、もちろんこれに限定するものではなく、任意のバスをシステムバスとして利用し構成しても良い。
【００９７】
また例えば、本実施の形態２では、説明の簡単のため、マスタ間の優先度の設定方法については詳細には説明しなかったが、例えばプライオリティ信号を備えるシステムバスを利用して、転送単位で優先度を与えるようにしても良い。
【００９８】
また例えば、本実施の形態２では、メモリデバイスとしてＤＤＲ−ＳＤＲＡＭを用いる場合を例にして説明したが、もちろんこれに限定されるものではないことは言うまでもない。
【００９９】
また例えば、本実施の形態２では、メモリデバイスにアクセスする際のビート長が８である場合について説明したが、任意のビート長について適用できる。
【０１００】
また本発明は、複数の機器（例えばホストコンピュータ、インタフェイス機器、リーダ、プリンタ等）から構成されるシステムに適用しても、一つの機器からなる装置（例えば、複写機、ファクシミリ装置等）に適用しても良い。
【０１０１】
また本発明の目的は、前述した実施形態の機能を実現するソフトウエアのプログラムコードを記録した記憶媒体をシステム或は装置に装着し、その記憶媒体からインストールされたプログラムコードを読み出して実行することによっても達成される。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコードを記憶した記憶媒体は本発明を構成することになる。また、コンピュータが読み出したプログラムコードを実行することにより、前述した実施形態の機能が実現される。またそのプログラムコードの指示に基づき、コンピュータ上で稼働しているオペレーティングシステム（ＯＳ）などが実際の処理の一部又は全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれる。
【０１０２】
更に、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張カードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれ、本体のＣＰＵが処理の一部又は全部を実行して本実施形態の機能が実現されても良い。
【０１０３】
またプログラムを供給するための記憶媒体としては、例えば、フロッピー（登録商標）ディスク、ハードディスク、光ディスク、光磁気ディスク、ＭＯ、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、ＣＤ−ＲＷ、磁気テープ、不揮発性のメモリカード等がある。更に、ＲＯＭ、ＤＶＤ（ＤＶＤ−ＲＯＭ，ＤＶＤ−Ｒ）も含まれる。
【０１０４】
またクライアントコンピュータのブラウザを用いてインターネットのホームページに接続し、該ホームページから本発明のコンピュータプログラムそのもの、或は圧縮され自動インストール機能を含むファイルを記憶媒体にダウンロードしても良い。また本発明のプログラムを構成するプログラムコードを複数のファイルに分割し、それぞれのファイルを異なるホームページからダウンロードすることによっても実現可能である。つまり本発明の機能処理をコンピュータで実現するためのプログラムファイルを複数のユーザに対してダウンロードさせるＷＷＷサーバも本発明のクレームに含まれるものである。
【０１０５】
以上、本発明を実施の形態に基づき具体的に説明したが、本発明は前述した実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更することが可能である。
【図面の簡単な説明】
【０１０６】
【図１】従来のシステムＬＳＩを用いて、ＯＡ機器の組み込みシステムを実現する構成の一例を示す図である。
【図２】従来例のシステムＬＳＩをより詳細に説明するブロック図である。
【図３】従来例におけるプロセッサが扱うメモリの物理アドレス空間を説明する図である。
【図４】従来例における物理アドレスとバンクアドレス、ロウアドレス、カラムアドレスの関係の一例を説明する図である。
【図５】従来例における物理アドレスとバンクアドレス、ロウアドレス、カラムアドレスの関係の別の一例を説明する図である。
【図６】従来のメモリコントローラの構成の一例を示すブロック図である。
【図７】メモリデバイスを２系統備えるシステムＬＳＩの構成例を示す図である。
【図８】本発明の実施の形態１に係るシステム構成を説明するブロック図である。
【図９】本実施の形態１に係るシステムＬＳＩのより具体的な構成を説明する図である。
【図１０】本実施の形態に係るメモリコントローラの構成をより詳細に説明する図である。
【図１１】、
【図１２】本実施の形態１に係るシステムバスのバスプロトコルを説明する図である。
【図１３】図９のプロセッサが同時にメモリコントローラからリードを行う場合のタイミングチャートである。
【図１４】本実施の形態１に係るマスタとスレーブの動作を説明するシーケンス図である。
【図１５】本実施の形態２に係るメモリコントローラの構成をより詳細に説明する図である。
【図１６】、
【図１７】本実施の形態２に係るシステムバスのバスプロトコルを説明する図である。
【図１８】本実施の形態２に係るリードリターン調停回路の構成を示すブロック図である。
【図１９】本実施の形態２に係るプロセッサが同時に２つのメモリコントローラからのリードを制御する場合を示すタイミングチャートである。
【図１】
2007108882.tif 000003
【図２】
2007108882.tif 000004
【図３】
2007108882.tif 000005
【図４】
2007108882.tif 000006
【図５】
2007108882.tif 000007
【図６】
2007108882.tif 000008
【図７】
2007108882.tif 000009
【図８】
2007108882.tif 000010
【図９】
2007108882.tif 000011
【図１０】
2007108882.tif 000012
【図１１】
2007108882.tif 000013
【図１２】
2007108882.tif 000014
【図１３】
2007108882.tif 000015
【図１４】
2007108882.tif 000016
【図１５】
2007108882.tif 000017
【図１６】
2007108882.tif 000018
【図１７】
2007108882.tif 000019
【図１８】
2007108882.tif 000020
【図１９】
2007108882.tif 000021