(57)【要約】【課題】  複数のマスタからのメモリアクセスが競合した場合にも、それぞれのマスタが蒙るメモリアクセスレイテンシの増加を抑制し、緩衝ＦＩＦＯの容量を削減できるようにすることを課題とする。【解決手段】  メモリ制御装置は、転送単位がメモリアクセス要求の転送単位より小さい複数のコマンドを生成し、メモリアクセス要求が複数の要求元から行われている場合、前記複数のコマンドをメモリに対し要求元毎に交互に発行する。複数のメモリアクセス要求は時分割並列的に実行される。【選択図】  図１
2007048274.tif 000002
【特許請求の範囲】
【請求項１】
転送単位がメモリアクセス要求の転送単位より小さい複数のコマンドを生成する生成手段と、
メモリアクセス要求が複数の要求元から行われている場合、前記複数のコマンドをメモリに対し要求元毎に交互に発行する発行手段を有し、
複数のメモリアクセス要求が時分割並列的に実行されることを特徴とするメモリ制御装置。
【請求項２】
前記発行手段は、前記メモリアクセス要求がメモリ読み出し要求である場合にのみ、前記複数のコマンドを前記メモリに対し要求元毎に交互に発行することを特徴とする請求項１のメモリ制御装置。
【請求項３】
前記発行手段は、受け付けたメモリアクセス要求を順に格納するコマンドキューを備え、前記コマンドキューの先頭および２番目のアクセス要求についてのみ、前記複数のコマンドを交互に発行する候補とすることを特徴とする請求項１のメモリ制御装置。
【請求項４】
転送単位がメモリアクセス要求の転送単位より小さい複数のコマンドを生成し、
メモリアクセス要求が複数の要求元から行われている場合、前記複数のコマンドをメモリに対し要求元毎に交互に発行し、
複数のメモリアクセス要求が時分割並列的に実行されることを特徴とするメモリ制御方法。
【請求項５】
前記発行工程は、前記メモリアクセス要求がメモリ読み出し要求である場合にのみ、前記複数のコマンドを前記メモリに対し要求元毎に交互に発行することを特徴とする請求項４のメモリ制御方法。
【請求項６】
メモリコントローラと、システムバスと、メモリとを備える組み込み機器であって、
前記メモリコントローラは、転送単位がメモリアクセス要求の転送単位より小さい複数のコマンドを生成し、メモリアクセス要求が複数の要求元から行われている場合、前記複数のコマンドを前記メモリに対し要求元ごとに交互に発行し、
複数のメモリアクセス要求が時分割並列的に実行されることを特徴とする組み込み機器。
【請求項７】
前記メモリアクセス要求がメモリ読み出し要求である場合にのみ、前記複数のコマンドを前記メモリに対し要求元毎に交互に発行することを特徴とする請求項６の組み込み機器。
【請求項８】
前記メモリコントローラは受け付けたメモリアクセス要求を順に格納するコマンドキューを備え、前記コマンドキューの先頭および２番目のアクセス要求についてのみ、前記複数のコマンドを交互に発行する候補とすることを特徴とする請求項６の組み込み機器。
【請求項９】
前記システムバスは、バスマスタの識別子をスレーブに転送し、スレーブはバスマスタにリードデータを返す際に前記バスマスタの識別子とともに返すことを特徴とする請求項６の組み込み機器。
【請求項１０】
前記システムバスは、マルチレイヤ構造であることを特徴とする請求項６の組み込み機器。
【請求項１１】
前記メモリコントローラおよびシステムバスは一つのシステムＬＳＩに内蔵されていることを特徴とする請求項６の組み込み機器。
【請求項１２】
複数の要求元からのリード要求に従ってメモリにアクセスした結果のリードデータを格納する格納手段と、
前記格納手段から前記リードデータを前記複数の要求元に設定された優先度に従った順番で転送する転送手段とを有することを特徴とするメモリ制御装置。
【請求項１３】
受け付けたリード要求を順に格納するコマンドキューをさらに備え、前記コマンドキューからバンク衝突を回避するようにコマンドを取り出し前記メモリにアクセスすることを特徴とする請求項１２のメモリ制御装置。
【請求項１４】
複数の要求元からのリード要求に従ってメモリにアクセスした結果のリードデータを格納し、
前記格納されたリードデータを前記複数の要求元に設定された優先度に従った順番で転送することを特徴とするメモリ制御方法。
【請求項１５】
メモリコントローラと、システムバスと、メモリとを備える組み込み機器であって、
前記メモリコントローラは、複数の要求元からのリード要求に従って前記メモリにアクセスした結果のリードデータを一時格納するバッファ手段を備え、前記バッファ手段から前記リードデータを前記複数の要求元に設定された優先度に従った順番で転送することを特徴とする組み込み機器。
【請求項１６】
前記メモリコントローラは受け付けたリード要求を順に格納するコマンドキューを備え、前記コマンドキューからバンク衝突を回避するようにコマンドを取り出し前記メモリにアクセスすることを特徴とする請求項１５の組み込み機器。
【請求項１７】
前記システムバスは、バスマスタの識別子をスレーブに転送し、スレーブはバスマスタにリードデータを返す際に前記バスマスタの識別子とともに返すことを特徴とする請求項１５の組み込み機器。
【請求項１８】
前記メモリがＤＤＲ  ＳＤＲＡＭにより構成されることを特徴とする請求項１５の組み込み機器。
【請求項１９】
前記システムバスは、マルチレイヤ構造であることを特徴とする請求項１５の組み込み機器。
【請求項２０】
前記メモリコントローラおよびシステムバスは一つのシステムＬＳＩに内蔵されていることを特徴とする請求項１５の組み込み機器。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はメモリ制御装置および方法に関する。
【背景技術】
【０００２】
半導体技術・マイクロプロセッサ技術の進歩により、組込みシステムの応用分野は拡大の一途をたどっており、身の回りの電子機器・電気機器のほとんどに組込みシステムが使われるようになっている。また、近年、ＬＳＩの集積度が向上した結果、組み込み機器のコントローラ機能が一つのＬＳＩの中に集積される、いわゆるシステムＬＳＩが一般的になってきた。
【０００３】
図７は例えば特許文献１において開示されるシステムＬＳＩを用いて、ＯＡ機器の組み込みシステムを実現する構成の一例を示す図である。
【０００４】
図７において１１０は組み込みシステム基板であり、システムＬＳＩ１００、メモリ１０１、各種ＩＯインターフェースが実装される。システムＬＳＩ１００はシングル  チップ・スキャニング・プリンティング  エンジンである。システムＬＳＩ１００は、より詳細にはプロセッサコア、プロセッサ周辺コントローラ、メモリコントローラ、スキャナコントローラ、プリンタコントローラ、ＰＣＩインターフェース、ＵＳＢデバイスインターフェースなどを内蔵する。
【０００５】
組み込み基板１１０に備えられるＩＯインターフェースは、スキャナＩＦ１３１、ＦＡＸ  ＩＦ１３２、ＵＳＢ  ＩＦ１３４、プリンタＩＦ１３３等がある。これらのＩＯインターフェースは、それぞれスキャナ１２１、ＦＡＸ１２２、ＰＣ１２４、プリンタエンジン１２３と接続され全体システムを構成する。さらにシステムＬＳＩ１００にはＰＣＩバスＩＦ１３６が備えられている。これを用い、ＰＣＩ−ＩＤＥブリッジ１０２を介してＩＤＥバス１３５に接続されるＨＤＤ１２５を使用することができる。
【０００６】
図２はシステムＬＳＩ１００をより詳細に説明する図である。
【０００７】
プロセッサ２０１内には最大でインストラクション、データそれぞれ１６Ｋバイトの計３２Ｋバイトのキャッシュメモリ、ＦＰＵ（浮動小数点演算ユニット）、ＭＭＵ（メモリ管理ユニット）、ユーザー定義可能なコプロセッサなどを内蔵することが可能である。
【０００８】
ＰＣＩバスインターフェース２３２を有するので、ＰＣＩバススロットを有するコンピュータシステムと共に用いることができる。また、ＰＣＩサテライト構成に加え、ＰＣＩホストバスブリッジ構成にてＰＣＩバスコンフィギュレーションを発行することが可能である。したがって、安価なＰＣＩ周辺デバイスと組み合わせることにより、マルチファンクションペリフェラル（複合機能周辺機器）のメインエンジンとして使用することも可能である。さらにＰＣＩバスインターフェースを有するレンダリング  エンジン、圧縮・伸長エンジンと組み合わせることも可能である。
【０００９】
チップ内部に汎用ＩＯコアを接続するＩＯバス（Ｂバス）２２１、及び、画像データ転送に最適化したグラフィックバス（Ｇバス：Ｇｒａｐｈｉｃｓ  Ｂｕｓ）２２０の２系統の独立したバスを有する。そして、メモリ２０４（１０１）、プロセッサ２０１と、これらのバスを、クロスバスイッチであるシステムバスブリッジ２０３を介して接続する。このように構成することにより、マルチファンクションシステムにおける同時動作に必要な、並列性の高い高速データ転送を実現している。
【００１０】
また画像データに代表される、連続したデータ列のアクセスに対しコストパフォーマンスの高いシンクロナスＤＲＡＭ（ＳＤＲＡＭ）をサポートするメモリコントローラ２０２を内蔵している。
【００１１】
その他には、スキャナコントローラ２０５、プリンタコントローラ２０６、ＰＣＩコントローラ２０７、ＵＳＢコントローラ２０８、ＵＡＲＴ２０９、タイマ・ＧＰＩＯ機能含むＭＩＳＣモジュール２１０、ＬＡＮコントローラ２１１等を内蔵している。２３０〜２３３はそれぞれ２０５〜２０８のＩＯインターフェースであり、図７の同名のインターフェース１３１、１３３、１３４、１３６とは同一のものである。
【００１２】
さて、図３は典型的な複合動作のシーケンスを説明する図である。ここではスキャナ１２１で原稿をスキャンしつつ、読み取った原稿をプリンタエンジン１２３からプリントするいわゆるコピー動作を行っている。原稿をスキャンすることによって得られた画像データは、スキャナ１２１からスキャナインターフェース１３１（２３０）を介してシステムＬＳＩ１００が内蔵するスキャナコントローラ２０５に送られる（３０１）。スキャナコントローラ２０５は受け取った画像データをＤＭＡによってメモリ２０４（１０１）に格納する（３０２）。次いでプリンタコントローラ２０６はこのデータをＤＭＡによりメモリ２０４から読み出し（３０３）、プリンタインターフェース２３１（１３３）を介してプリンタエンジン１２３に送る（３０４）。プリンタエンジン１２３はこれを印刷する。
【００１３】
このとき、さらにＰＣ１２４からＵＳＢインターフェース１３４（２３３）を介してＰＤＬデータが送信されている（３１１）。このＰＤＬデータはＵＳＢデバイスコントローラ２０８によって受信され、ＤＭＡによって一旦メモリ２０４に格納される（３１２）。その後システムＬＳＩ１００内のプロセッサ２０１によって解釈され、展開された画像イメージが再度メモリ２０４に格納される（３１３）。最後にプリンタコントローラ２０６によりメモリ２０４から読み出され（３１４）、プリンタインターフェース２３１（１３３）を介してプリンタエンジン１２３に送られ（３１５）、印刷される。
【００１４】
図４はこのときのプロセッサ２０１が扱う物理アドレス空間を示す。実際にはプロセッサ２０１はＭＩＰＳ  Ｒ４０００互換であり、プロセッサ２０１上のソフトウェアは仮想アドレスを用いて動作している。プロセッサ２０１は常にカーネルモードで動作しており、物理アドレス０ｘ００００＿００００〜０ｘ１ｆｆｆ＿ｆｆｆｆ番地が、仮想アドレス０ｘ８０００＿００００〜０ｘ９ｆｆｆ＿ｆｆｆｆ番地（ｋｓｅｇ０：ｃａｃｈｅｄ）および０ｘａ０００＿００００〜０ｘｂｆｆｆ＿ｆｆｆｆ番地（ｋｓｅｇ１：ｕｎｃａｃｈｅｄ）に対応づけられている。
【００１５】
この従来例においては、メモリ２０４の容量は３２ＭＢであり、１６ｂｉｔ×４ｂａｎｋ×４Ｍ  ｗｏｒｄ構成の  ２５６Ｍｂｉｔ  ＳＤＲＡＭ１個が実装されている。したがってＲＡＭとして利用可能な物理アドレス空間は０ｘ００００＿００００〜０ｘ０１ｆｆ＿ｆｆｆｆ番地までである。
【００１６】
図３の複合動作が行われる場合、プロセッサ２０１上で動作するソフトウェアが、各ハードウェアが利用するメモリ２０４上のバッファ領域を管理する。通常はソフトウェアで動的にメモリ領域を確保する場合と同じように、Ｈｅａｐ領域にメモリアロケート関数（ＯＳが提供するシステム関数：ｍａｌｌｏｃ等）を用いて必要なサイズの領域を確保する。
【００１７】
図３の複合動作の場合では、スキャナコントローラ２０５がＤＭＡにより書き込むバッファ領域と、プリンタコントローラ２０６がＤＭＡにより読み出すバッファ領域は同じである。もしこのバッファ領域が１つしかない場合、スキャナコントローラ２０５が書いたアドレスを後からプリンタコントローラ２０６が読み出す。しかしながら、通常スキャナから読み込む速度とプリンタが印刷する速度は異なる。したがって、スキャナコントローラ２０５とプリンタコントローラ２０６との間で同期を取る仕組みが無い限り、途中で読み出しアドレスが書き込みアドレスを追い越す可能性がある。
【００１８】
これを避けるため、一般にバッファを２重に持つことが行われる。すなわち、スキャナコントローラ２０５がＤＭＡにより一方のバッファ領域に書き込んでいる間、プリンタコントローラ２０６はもう一方のバッファ領域からＤＭＡで読み出しを行う。双方のＤＭＡ転送が終了した時点で、それぞれの使用するバッファを入れ替え、次のＤＭＡを開始する。
【００１９】
例えばスキャナ１２１からスキャナコントローラ２０５に対して１ＭＢのデータが連続して送られてくる場合、まずメモリアロケート関数を、引数を１ＭＢにしてコールする。そして、返されたアドレスを（仮想アドレスなので物理アドレスに変換して）スキャナコントローラ２０５のＤＭＡ開始アドレスとして設定する。ここでは０ｘ００８０＿００００〜０ｘ００８ｆ＿ｆｆｆｆ番地が確保され、先頭番地である０ｘ８００＿００００番地がＤＭＡ開始アドレスとして設定される。次いでデータが到着するとスキャナコントローラ２０５はＤＭＡにより当該開始アドレスから連続してデータを格納していく。このＤＭＡが終了すると、プリンタコントローラ２０６に０ｘ００８０＿００００番地がＤＭＡ開始アドレスとして設定される。その後ＤＭＡ開始をソフトウェアにより指示されると、プリンタインターフェース２３１の信号に従って、設定された開始アドレスから順次データを読み出し、プリンタインターフェース２３１を介してプリンタエンジン１２３にデータを転送する。
【００２０】
それと同時に、スキャナコントローラ２０５に対しては次のＤＭＡの設定が行われる。再度メモリアロケート関数を、引数を１ＭＢにしてコールし、０ｘ００９０＿００００〜０ｘ００９ｆ＿ｆｆｆｆ番地が確保されると、先頭番地である０ｘ００９０＿００００番地がＤＭＡ開始アドレスとして設定される。スキャナインターフェース２３０よりデータが到着するとスキャナコントローラ２０５はＤＭＡにより当該開始アドレスから連続してデータを格納していく。
【００２１】
このようにして、スキャナコントローラ２０５とプリンタコントローラ２０６との間で、２つの領域０ｘ００８０＿００００〜０ｘ００８ｆ＿ｆｆｆｆ番地と０ｘ００９０＿００００〜０ｘ００９ｆ＿ｆｆｆｆ番地を交互に使用しながら繰り返しＤＭＡ動作が行われる。
【００２２】
一方、ＵＳＢコントローラ２０８の場合は、０ｘ００ｂ０＿００００〜０ｘ００ｂｆ＿ｆｆｆｆ番地が確保され、先頭番地である０ｘ００ｂ０＿００００番地がＤＭＡ開始アドレスとして設定される。ＰＣ（ＵＳＢホスト）１２４からＰＤＬデータが送られてくると、ＵＳＢコントローラ２０８はＤＭＡにより当該開始アドレスから連続してデータを格納していく。全ての転送が終了すると、割り込みによりソフトウェアに通知され、次いでソフトウェアによってＰＤＬデータが解釈され、プリントイメージデータが生成される。この最終的に生成されたプリントイメージデータは、新たに確保されたバッファ領域に格納される。これには再びメモリアロケート関数が呼ばれ、３ＭＢの領域０ｘ００ｃ０＿００００〜０ｘ００ｅｆ＿ｆｆｆｆ番地が確保される。次に０ｘ００ｃ０＿００００番地をＤＭＡの先頭アドレスとしてプリンタコントローラ２０６が起動される。このときのプリンタコントローラ２０６のＤＭＡ転送は前述のスキャナープリンタ動作時のプリンタコントローラ２０６のＤＭＡ転送とは排他的に行われる。
【００２３】
このように、スキャナとプリンタ、ＨＤＤへのアクセスが同時に起こる場合、システムＬＳＩの内部では複数のハードウェアがメモリに対して同時にＤＭＡアクセスを行っている。
【特許文献１】特開２０００−２１１２１６号公報
【発明の開示】
【発明が解決しようとする課題】
【００２４】
このように、システムＬＳＩ内部に一つしか存在しないメモリリソースに対し、複数マスタがアクセス要求を出す場合、必ずある確率でアクセス要求が重なることがある。プリンタコントローラのように、プリンタエンジンに対して連続してデータを供給しなければならない場合には、アクセスが競合した場合のレイテンシの増大を見込まなければならない。したがって、データレートを緩衝するためのＦＩＦＯの容量を、遅延値の最悪ケースを想定しても大丈夫なように大きくとっておく必要が生じる。このため回路規模が増大し、チップ価格が上昇するだけでなく、発熱量の増加や信頼性の低下等さまざまな悪影響を与えている。
【００２５】
例えば、あるＤＭＡ転送では１転送あたり３２バイトを転送するとする。このとき、ＦＩＦＯメモリが３２バイトしかないと、ＦＩＦＯが空になって初めて次の転送を開始することができる。前述のプリンタコントローラのように、一度プリンタ動作が開始されるとプリンタエンジンにデータを間断なく供給することが必要な場合には、この構成は適用できない。ＦＩＦＯには必ず複数のＤＭＡ転送分格納できるだけの容量が要求される。最低でもＤＭＡ転送２回分の容量、すなわち６４バイトは必要となる。
【００２６】
いま、プリンタインターフェースが６４バイトの容量のＦＩＦＯを備えているとする。ＦＩＦＯの内容が３２バイト以下になると、プリンタインターフェースは次のＤＭＡ転送要求をメモリコントローラに対して出すことができる。ＦＩＦＯが空になるまでに、次のデータがメモリから読み出され、ＤＭＡ転送によってＦＩＦＯに書き込まれれば、プリンタエンジンに切れ間なくデータを供給することができる。
【００２７】
プリンタインターフェースがＤＭＡ転送要求をメモリコントローラに出したとき、同時にメモリアクセスを要求しているマスタが他になければ、ＦＩＦＯが空になる前にデータをリードしＦＩＦＯに格納することができる。しかしこの時、直前に他のマスタがメモリコントローラに対しアクセス要求を出していた場合、そのメモリアクセス要求が処理されるまでプリンタコントローラはメモリからデータを読みＦＩＦＯに格納することができない。
【００２８】
条件によっては、この遅延時間の増加によって、プリンタコントローラのデータ読み出しが間に合わず、この間にＦＩＦＯが空になってしまう事態が生じてしまう。
【００２９】
そのような場合を回避するために、プリンタコントローラの備えるＦＩＦＯ容量は最悪のケースでも問題がないように、例えば１２８バイトの容量が備えられることになる。メモリの競合が少なければ、実際にはほとんどの場合６４バイト、ないしは、せいぜい９６バイトの容量を持てば間に合うのであるが、稀なケースにも対応できるようにするため回路規模が増大している。
【００３０】
本発明は、複数のマスタからのメモリアクセスが競合した場合にも、それぞれのマスタが蒙るメモリアクセスレイテンシの増加を抑制し、緩衝ＦＩＦＯの容量を削減できるようにすることを目的とする。
【課題を解決するための手段】
【００３１】
本発明は、複数のマスタから同時に生じるメモリアクセス要求に対し、転送単位を分割し交互にメモリアクセスを行うメモリ制御装置、方法を提供することを目的とする。
【００３２】
また、本発明におけるメモリ制御装置は、転送単位がメモリアクセス要求の転送単位より小さい複数のコマンドを生成する生成手段と、メモリアクセス要求が複数の要求元から行われている場合、前記複数のコマンドをメモリに対し要求元毎に交互に発行する発行手段を備え、複数のメモリアクセス要求が時分割並列的に実行される。
【００３３】
また、本発明の他のメモリ制御装置は、複数の要求元からのリード要求に従ってメモリにアクセスした結果のリードデータを格納する格納手段と、前記格納手段から前記リードデータを前記複数の要求元に設定された優先度に従った順番で転送する転送手段を備える。
【発明の効果】
【００３４】
本発明によれば、複数のマスタからのメモリアクセスが競合した場合にも、それぞれのマスタが蒙るメモリアクセスレイテンシの増加を抑制し、緩衝ＦＩＦＯの容量を削減できる。
【００３５】
また、本発明によれば、システムＬＳＩ内部の複数のマスタからメモリアクセス要求が競合した場合にも、メモリのアクセス効率を低下させることなく、それと同時に優先度の高いマスタのメモリアクセスレイテンシの増加を抑えることが可能となる。
【発明を実施するための最良の形態】
【００３６】
以下本発明の第１の実施例について、図を用いて詳細に説明する。
【００３７】
図８は本発明の第１の実施例のブロック図を説明する図である。図８において８００はシステムＬＳＩであり、プロセッサ、メモリコントローラ、ＤＭＡ機能を備える複数のハードウェアエンジン、さらには説明の簡単のため図示されない複数の機能モジュールを内蔵している。８０１は前記システムＬＳＩ８００に内蔵されるメモリコントローラによって制御されるメモリであり、４バンク構成の２５６Ｍｂｉｔ  ４個が実装される。８０２〜８０５は外部ＩＯインターフェースであり、８０２がスキャナインターフェース、８０３がプリンタインターフェース、８０４がＰＣＩインターフェース、８０５がＵＳＢインターフェースである。外部ＩＯインターフェース８０２〜８０５は、それぞれが前記システムＬＳＩ８００の内部において前記複数のハードウェアエンジンと接続される。８１０はスキャナインターフェース８０２によってシステムＬＳＩ８００と接続されるスキャナ、８１１はプリンタインターフェース８０３によってシステムＬＳＩ８００と接続されるプリンタエンジンである。８１２はＵＳＢインターフェース８０５によってシステムＬＳＩ８００と接続されるＵＳＢホスト、８１３はＰＣＩインターフェース８０４によってシステムＬＳＩ８００と接続されるＰＣＩ拡張スロットである。
【００３８】
前記ハードウェアエンジンは、より具体的には、スキャナコントローラ、プリンタコントローラ、ＰＣＩインターフェース、ＵＳＢデバイスインターフェースなどである。しかしながら、このハードウェアエンジンは、必ずしもＩＯインターフェースと関係しているものだけではなく、画像処理、画像符号化複合化、データ圧縮伸張などを行うハードウェアエンジンも含まれている。これらは、リード用のＤＭＡコントローラとライト用のＤＭＡコントローラの両方を備えている。これを次の図９を用いて詳細に説明する。
【００３９】
図９は本実施例における図９のシステムＬＳＩ８００のより具体的な構成を説明する図である。
【００４０】
図９において、９０１はプロセッサでありＭＩＰＳ  Ｒ４０００互換の機能を有する。９０５はスキャナコントローラであり、スキャナインターフェース９３０を介して外部のスキャナ８１０と接続される。９０６はプリンタコントローラであり、プリンタインターフェース９３１を介して外部のプリンタエンジン８１１と接続される。９０７はＰＣＩホストブリッジ機能を備えるＰＣＩコントローラであり、ＰＣＩインターフェース９３２を介し外部の１ないし複数のＰＣＩターゲットデバイスと接続される。９０８はＵＳＢデバイスコントローラであり、ＵＳＢインターフェース９３３を介し外部のＵＳＢホスト８１２と接続さる。
【００４１】
９０４はメモリであり、総容量は１２８ＭＢであり、１６ｂｉｔ×４ｂａｎｋ×４Ｍ  ｗｏｒｄ構成の２５６ＭｂｉｔＤＤＲＳＤＲＡＭ４個により構成されるメモリである。メモリ９０４は、図８のメモリ８０１に相当する。
【００４２】
９０９はＪＰＥＧ圧縮・伸張エンジンであり、メモリ９０４上のＪＰＥＧ符号データをリードＤＭＡにより読み出し、復号したのち、生画像データをライトＤＭＡによりメモリ９０４に書き込む機能を備える。また、ＪＰＥＧ圧縮・伸張エンジン９０９は、メモリ９０４上の生画像データをリードＤＭＡにより読み出し、符号化したのち、符号データをライトＤＭＡによりメモリ９０４に書き込む機能も備える。
【００４３】
９２０はシステムバスであり、バスマスタであるプロセッサ９０１、各ハードウェアエンジンと、バススレーブであるメモリコントローラ９０２、その他とを接続する。共有バスではなく、複数のバスマスタと複数のバススレーブ間を多重に接続可能なマルチレイヤ構造をとっている。
【００４４】
９０２はＤＤＲ  ＳＤＲＡＭをサポートするメモリコントローラであり、図１に詳細に示される。
【００４５】
図５および図６は本発明の第１の実施例におけるシステムバス９２０のバスプロトコルを説明する図である。図５はリード転送を示し、図６はライト転送を示す。前述のようにシステムバス９２０はマルチレイヤ構成であり、バスマスタから見た場合に任意のバススレーブとの間で１対１に接続されているようにみなすことができる。
【００４６】
本実施例において、システムバス９２０は以下の信号により構成される。
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
one＿not＿two    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[３: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
【００４７】
以下、それぞれの信号を説明する。
【００４８】
システムバス９２０は同期バスであり、システムバス９２０のすべての信号のアサート／デアサートは、システムバスクロックｃｌｋの立ち上がりエッジに同期して行なわれる。
【００４９】
各バスマスタがバス転送をＳｔａｒｔしたいときにＴｒａｎｓａｃｔｉｏｎ  Ｓｔａｒｔ（ｔｓ）のアサートを開始し、ｓｒｄｙがアサートされるまでＴｒａｎｓａｃｔｉｏｎ  Ｓｔａｒｔ（ｔｓ）のアサートを続ける。Ｔｒａｎｓａｃｔｉｏｎ  Ｓｔａｒｔ（ｔｓ）は、ｓｒｄｙがアサートされた次のＣｌｏｃｋ  サイクルでデアサートする。ｔｓとｓｒｄｙの両方がアサートされているサイクルでバス転送が開始する。バスマスタは次のバス転送のためにｔｓの１サイクルのデアサート期間の後、Ｔｒａｎｓａｃｔｉｏｎ  Ｓｔａｒｔ（ｔｓ）を再びアサートすることができる。
【００５０】
Ａｄｄｒｅｓｓ  Ｂｕｓ（ａｄｄｒ［３１：２］）（Ｍａｓｔｅｒ→Ｓｌａｖｅ）は、ｔｓと同時に確定され、ｔｓのデアサートの１サイクル後のサイクルまで保持される。
【００５１】
Ｍａｓｔｅｒ  ＩＤ（ｍｉｄ［３：０］）（Ｍａｓｔｅｒ→Ｓｌａｖｅ）は、アクセスを行なうバスマスタのＩＤである。Ｍａｓｔｅｒ  ＩＤ  （ｍｉｄ［３：０］）は、ｔｓと同時に確定され、ｔｓのデアサートの１サイクル後のサイクルまで保持される。
【００５２】
Ｒｅａｄ（Ｈ）／Ｗｒｉｔｅ（Ｌ）（ｒｄ＿ｎｏｔ＿ｗｒ）（Ｍａｓｔｅｒ→Ｓｌａｖｅ）は、バス転送のＲｅａｄ／Ｗｒｉｔｅを示す。Ｒｅａｄ（Ｈ）／Ｗｒｉｔｅ（Ｌ）は、ｔｓと同時に確定され、ｔｓのデアサートの１サイクル後のサイクルまで保持される。Ｈｉｇｈ：Ｒｅａｄであり、Ｌｏｗ：Ｗｒｉｔｅである。
【００５３】
Ｓｉｎｇｌｅ  ｏｒ  ２  ｂｅａｔ  Ｂｕｒｓｔ（ｏｎｅ＿ｎｏｔ＿ｔｗｏ）（Ｍａｓｔｅｒ→Ｓｌａｖｅ）は、システムバス９２０上のバス転送がＳｉｎｇｌｅ  Ｔｒａｎｓａｃｔｉｏｎか２ｂｅａｔ  Ｂｕｒｓｔ  Ｔｒａｎｓａｃｔｉｏｎかを示す。Ｓｉｎｇｌｅの時は最初の１ｂｅａｔ目のＤａｔａのみが有効である。Ｓｉｎｇｌｅ  ｏｒ  ２  ｂｅａｔ  Ｂｕｒｓｔ（ｏｎｅ＿ｎｏｔ＿ｔｗｏ）は、ｔｓと同時に確定され、ｔｓのデアサートの１サイクル後のサイクルまで保持される。Ｈｉｇｈ：Ｓｉｎｇｌｅであり、Ｌｏｗ：２  ｂｅａｔ  Ｂｕｒｓｔである。
【００５４】
Ｒｅａｄ  Ｄａｔａ  Ｂｙｔｅ  Ｅｎａｂｌｅ（ｒｄ＿ｂｙｔｅｅｎ［３：０］）（Ｍａｓｔｅｒ→Ｓｌａｖｅ）は、Ｒｅａｄ時のＢｙｔｅ  Ｅｎａｂｌｅを示す。Ｒｅａｄ  Ｄａｔａ  Ｂｙｔｅ  Ｅｎａｂｌｅ（ｒｄ＿ｂｙｔｅｅｎ［３：０］）は、ｏｎｅ＿ｎｏｔ＿ｔｗｏがＳｉｎｇｌｅを示している時、その３２ｂｉｔの中でどのバイト位置へのＲｅａｄであるかを示す。ｏｎｅ＿ｎｏｔ＿ｔｗｏが２  ｂｅａｔ  ｂｕｒｓｔを示している時は、Ｒｅａｄ  Ｄａｔａ  Ｂｙｔｅ  Ｅｎａｂｌｅ（ｒｄ＿ｂｙｔｅｅｎ［３：０］）はすべてＥｎａｂｌｅにしておかなければならない。ｗｒ＿ｂｙｔｅｅｎ［３：０］はＷｒｉｔｅ時のＤａｔａ  Ｐｈａｓｅで有効であるが、Ｒｅａｄ  Ｄａｔａ  Ｂｙｔｅ  Ｅｎａｂｌｅ（ｒｄ＿ｂｙｔｅｅｎ［３：０］）はＲｅａｄ時のＡｄｄｒｅｓｓ  Ｐｈａｓｅで有効である。Ｒｅａｄ  Ｄａｔａ  Ｂｙｔｅ  Ｅｎａｂｌｅ（ｒｄ＿ｂｙｔｅｅｎ［３：０］）は、ｔｓと同時に確定され、ｔｓのデアサートの１サイクル後のサイクルまで保持される。
【００５５】
３２ｂｉｔのＤａｔａ  Ｂｕｓで、Ｗｒｉｔｅ  Ｄａｔａ  Ｂｕｓ（ｗｒ＿ｄａｔａ［３１：０］）（Ｍａｓｔｅｒ→Ｓｌａｖｅ）は、マスタからスレーブへのＷｒｉｔｅ  Ｄａｔａである。Ｗｒｉｔｅ  Ｄａｔａ  Ｂｕｓ（ｗｒ＿ｄａｔａ［３１：０］）は、ｔｓとｓｒｄｙの両方がアサートされたサイクルの次のサイクルから有効である。更に、Ｗｒｉｔｅ  Ｄａｔａ  Ｂｕｓ（ｗｒ＿ｄａｔａ［３１：０］）は、Ｓｉｎｇｌｅ  Ｔｒａｎｓａｃｔｉｏｎ時は最初の１ｂｅａｔ目のＤａｔａのみが、２ｂｅａｔ  Ｂｕｒｓｔ  Ｔｒａｎｓａｃｔｉｏｎ時は１ｂｅａｔ目と２ｂｅａｔ目の両方のＤａｔａが有効である。どのＢｙｔｅが有効かはｗｒ＿ｂｙｔｅｅｎ［３：０］によって示される。システムバス９２０はＢｉｇ  Ｅｎｄｉａｎ  Ｂｕｓなので、ＭＳＢ側が０番地となる。
【００５６】
Ｗｒｉｔｅ  Ｄａｔａ  Ｂｙｔｅ  Ｅｎａｂｌｅ（ｗｒ＿ｂｙｔｅｅｎ［３：０］）（Ｍａｓｔｅｒ  →  Ｓｌａｖｅ）は、Ｗｒｉｔｅ  Ｄａｔａのどのバイト位置が有効かを示す。Ｗｒｉｔｅ  Ｄａｔａ  Ｂｙｔｅ  Ｅｎａｂｌｅ（ｗｒ＿ｂｙｔｅｅｎ［３：０］）は、ｗｒ＿ｄａｔａ［３１：０］と同じく、ｔｓとｓｒｄｙの両方がアサートされたサイクルの次のサイクルから有効である。更に、Ｗｒｉｔｅ  Ｄａｔａ  Ｂｙｔｅ  Ｅｎａｂｌｅ（ｗｒ＿ｂｙｔｅｅｎ［３：０］）は、Ｓｉｎｇｌｅ  Ｔｒａｎｓａｃｔｉｏｎ時は最初の１ｂｅａｔ目のみで、２ｂｅａｔ  Ｂｕｒｓｔ  Ｔｒａｎｓａｃｔｉｏｎ時は１ｂｅａｔ目と２ｂｅａｔ目の両方で有効である。
【００５７】
ｗｒ＿ｄａｔａとの対応は以下の通りである。
ｗｒ＿ｂｙｔｅｅｎ［３］    ｗｒ＿ｄａｔａ［３１：２４］
ｗｒ＿ｂｙｔｅｅｎ［２］    ｗｒ＿ｄａｔａ［２３：１６］
ｗｒ＿ｂｙｔｅｅｎ［１］    ｗｒ＿ｄａｔａ［１５：８］
ｗｒ＿ｂｙｔｅｅｎ［０］    ｗｒ＿ｄａｔａ［７：０］
Ｓｌａｖｅ  Ｒｅａｄｙ（ｓｒｄｙ）（Ｓｌａｖｅ→Ｍａｓｔｅｒ）は、スレーブのＢｕｆｆｅｒがマスタからのバス転送を受け取る準備ができていることを示す。Ｓｌａｖｅ  Ｒｅａｄｙ（ｓｒｄｙ）がアサートされていれば、マスタはいつでもバス転送を始めることができ、スレーブは必ずそのバス転送を受け取らなければならない。
【００５８】
Ｒｅａｄ  Ｒｅｔｕｒｎ  Ｒｅａｄｙ（ｒｒｄｙ）（Ｓｌａｖｅ→Ｍａｓｔｅｒ）は、スレーブからのＲｅａｄ  Ｒｅｔｕｒｎを示す信号である。スレーブはＲｅａｄ  Ｄａｔａの準備ができたらＲｅａｄ  Ｒｅｔｕｒｎ  Ｒｅａｄｙ（ｒｒｄｙ）をアサートし、Ｒｅａｄ  ＲｅｔｕｒｎをＳｔａｒｔする。Ｒｅａｄ  Ｒｅｔｕｒｎ  Ｒｅａｄｙ（ｒｒｄｙ）はいつでもアサートしてよい。Ｒｅａｄ  Ｒｅｔｕｒｎ  Ｒｅａｄｙ（ｒｒｄｙ）のアサートと同じサイクルでＲｅａｄ  Ｄａｔａが返される。２ｂｅａｔ  Ｂｕｒｓｔであった場合は、Ｒｅａｄ  Ｒｅｔｕｒｎ  Ｒｅａｄｙ（ｒｒｄｙ）が２サイクル期間アサートされ、２ｂｅａｔ分の  Ｒｅａｄ  Ｄａｔａが返される。その際、Ｒｅａｄ  Ｒｅｔｕｒｎ  Ｒｅａｄｙ（ｒｒｄｙ）は連続してアサートされる必要は無く、間にウェイトサイクルをはさむことができる。
【００５９】
Ｒｅｔｕｒｎ  Ｍａｓｔｅｒ  ＩＤ（ｒｍｉｄ［３：０］）（Ｓｌａｖｅ→Ｍａｓｔｅｒ）は、Ｒｅａｄ  Ｒｅｔｕｒｎを受けるべきマスタのＩＤである。Ｒｅａｄ  Ｒｅｑｕｅｓｔを受け付けた時にアサートされたｍｉｄ［３：０］を保持しておき、同じＩＤを返す。マスタはｒｓのアサート時のＲｅｔｕｒｎ  Ｍａｓｔｅｒ  ＩＤ（ｒｍｉｄ［３：０］）をデコードし、自分のＭａｓｔｅｒ  ＩＤである場合にそのＲｅａｄ  Ｒｅｔｕｒｎを自分へのＲｅａｄ  Ｒｅｔｕｒｎだと判断する。Ｒｅｔｕｒｎ  Ｍａｓｔｅｒ  ＩＤ  （ｒｍｉｄ［３：０］）は、ｒｒｄｙと同時にアサートする。
【００６０】
３２ｂｉｔのＤａｔａ  Ｂｕｓで、Ｒｅａｄ  Ｄａｔａ  Ｂｕｓ（ｒｄ＿ｄａｔａ［３１：０］）（Ｓｌａｖｅ→Ｍａｓｔｅｒ）は、スレーブからマスタへのＲｅａｄ  Ｄａｔａである。ｒｒｄｙがアサートされるサイクルで有効なデータが返される。
【００６１】
Ｒｅａｄ  Ｅｒｒｏｒ（ｒｄ＿ｅｒｒｏｒ）（Ｓｌａｖｅ→Ｍａｓｔｅｒ）は、スレーブからのエラーをＭａｓｔｅｒに通知する。エラーが発生した場合、スレーブはＲｅａｄ  Ｒｅｔｕｒｎ時にｒｒｄｙと同じサイクルでＲｅａｄ  Ｅｒｒｏｒ（ｒｄ＿ｅｒｒｏｒ）をアサートする。
【００６２】
以上が、信号の説明である。
【００６３】
次に、Ｔｒａｎｓａｃｔｉｏｎ  ｔｙｐｅを説明する。
【００６４】
システムバス９２０では、Ｒｅａｄ  Ｗｒｉｔｅとも、Ｓｉｎｇｌｅ  Ｔｒａｎｓａｃｔｉｏｎと２  ｂｅａｔ  Ｔｒａｎｓａｃｔｉｏｎとが存在する。
【００６５】
Ｓｉｎｇｌｅ  Ｔｒａｎｓａｃｔｉｏｎと２  ｂｅａｔ  Ｔｒａｎｓａｃｔｉｏｎの切り替えはｏｎｅ＿ｎｏｔ＿ｔｗｏによって行なう。
【００６６】
ｏｎｅ＿ｎｏｔ＿ｔｗｏ  Ａｃｃｅｓｓ  Ｓｉｚｅ
０          ２  ｂｅａｔ
１          ｓｉｎｇｌｅ
また、３２ｂｉｔ（４ｂｙｔｅ）以下のバス転送（ｂｙｔｅ，ｈａｌｆ  ｗｏｒｄ）は、すべてＳｉｎｇｌｅ  バス転送で行い、Ｗｒｉｔｅの場合はｗｒ＿ｂｙｔｅｅｎ［３：０］において、Ｒｅａｄの場合はｒｄ＿ｂｙｔｅｅｎ［３：０］において制御を行う。
２  ｂｅａｔのＢｕｒｓｔ  Ｒｅａｄ時は、ｒｄ＿ｂｙｔｅｅｎ［３：０］をすべてＥｎａｂｌｅにしなければならない。
また、２  ｂｅａｔのＢｕｒｓｔ  Ａｃｃｅｓｓ時、Ａｄｄｒｅｓｓは必ず６４ｂｉｔの境界に合わせなければならない。つまりａｄｄｒ［２］は０となる。
【００６７】
次に、図６を参照しながら、ｗｒｉｔｅ  ｔｒａｎｓａｃｔｉｏｎを説明する。
【００６８】
基本Ｐｒｏｔｏｃｏｌは、以下のとおりである。
【００６９】
サイクル−２において、マスタはＷｒｉｔｅ  バス転送を開始する際に、対象となるスレーブに対応したｔｓをアサートする。同時にｏｎｅ＿ｎｏｔ＿ｔｗｏ，ｍｉｄ［３：０］，ａｄｄｒ［３１：２］をアサートする。
【００７０】
サイクル−３において、対象となるスレーブに対応したｓｒｄｙがアサートされているので、Ｗｒｉｔｅ  バス転送の開始となり、マスタは、ｔｓをデアサートする。また、マスタは、ｗｒ＿ｄａｔａ［３１：０］，ｗｒ＿ｂｙｔｅｅｎ［３：０］をアサートし、１Ｂｅａｔ目のＷｒｉｔｅ  Ｄａｔａを出力する。
【００７１】
サイクル−４において、マスタは、ｏｎｅ＿ｎｏｔ＿ｔｗｏ，ｍｉｄ［３：０］，ａｄｄｒ［３１：２］をデアサートする。また、マスタは、ｗｒ＿ｄａｔａ［３１：０］，ｗｒ＿ｂｙｔｅｅｎ［３：０］を切り替え、２  ｂｅａｔ目のＷｒｉｔｅ  Ｄａｔａを出力する。
【００７２】
サイクル−５において、Ｗｒｉｔｅ  バス転送は、終了する。
【００７３】
なお、マスタがｔｓをアサートしても、ｓｒｄｙがデアサートされていた場合（サイクル−８）、マスタはｔｓをアサートし続ける。そして、ｓｒｄｙがアサートされると（サイクル−９）、ｔｓをデアサートする（サイクル−１０）。
【００７４】
マスタは次のバス転送を開始するためにｔｓの１サイクルのデアサート期間の後、再びアサートすることができる。（サイクル−１１）
Ｗｒｉｔｅ  バス転送が連続した場合で、もっとも各バス転送間が詰まった状態では、間隔を空けずにＤａｔａをＷｒｉｔｅし続けることができる。
【００７５】
次に、図５を参照しながら、Ｒｅａｄ  ｔｒａｎｓａｃｔｉｏｎを説明する。
【００７６】
Ｒｅａｄ  バス転送はマスタからスレーブへのＲｅａｄ  Ｃｏｍｍａｎｄのバス転送と、スレーブからマスタへのＲｅａｄ  ＤａｔａのＲｅａｄ  Ｒｅｔｕｒｎに分かれている。それぞれは独立しており、信号線も独立したものとなっている。
【００７７】
基本Ｐｒｏｔｏｃｏｌは、以下のとおりである。
【００７８】
サイクル−２において、マスタはＲｅａｄ  バス転送を開始する際に、対象となるスレーブに対応したｔｓをアサートする。同時にｏｎｅ＿ｎｏｔ＿ｔｗｏ，ｒｄ＿ｎｏｔ＿ｗｒ，ｒｄ＿ｂｙｔｅｅｎ［３：０］，ｍｉｄ［３：０］，ａｄｄｒ［３１：２］をアサートする。
【００７９】
サイクル−３において、対象となるスレーブに対応したｓｒｄｙがアサートされているので、Ｒｅａｄ  バス転送の開始となり、ｔｓをデアサートする。
【００８０】
サイクル−４において、マスタは、ｏｎｅ＿ｎｏｔ＿ｔｗｏ，ｒｄ＿ｎｏｔ＿ｗｒ，ｒｄ＿ｂｙｔｅｅｎ［３：０］，ｍｉｄ［３：０］，ａｄｄｒ［３１：２］をデアサートする。
【００８１】
Ｒｅａｄ  バス転送のＲｅａｄ  Ｃｏｍｍａｎｄバス転送終了は、以下のとおりである。
【００８２】
サイクル−６において、スレーブはＲｅａｄ  Ｄａｔａの準備ができたら、ｒｒｄｙとｒｍｉｄ［３：０］をアサートしてＲｅａｄ  Ｒｅｔｕｒｎを開始する。ｒｍｉｄ［３：０］にはＲｅａｄ  Ｃｏｍｍａｎｄでマスタから受け取ったＭａｓｔｅｒ  ＩＤをのせる。
【００８３】
また、  ｒｄ＿ｄａｔａ［３１：０］をアサートし、１Ｂｅａｔ目のＲｅａｄ  Ｄａｔａを出力する。
【００８４】
次に、サイクル−７において、スレーブは、ｒｒｄｙをデアサートする。ｒｍｉｄ［３：０］をデアサートする。
【００８５】
サイクル−８において、スレーブは、再度ｒｒｄｙをアサートとする。ここでは１サイクルのウェイトが入っているが、任意のウェイトサイクルを入れることができる。また、ｒｄ＿ｄａｔａ［３１：０］に２  ｂｅａｔ目のＲｅａｄ  Ｄａｔａを出力する。
【００８６】
サイクル−９において、スレーブは、ｒｒｄｙをデアサートする。また、スレーブは、ｒｍｉｄ［３：０］をデアサートする。
【００８７】
サイクル−１０において、Ｒｅａｄ  Ｒｅｔｕｒｎは終了する。
【００８８】
なお、マスタがｔｓをアサートしても、ｓｒｄｙがデアサートされていた場合（サイクル−８，９）、マスタはｔｓをアサートし続ける。そして、ｓｒｄｙがアサートされると、ｔｓをデアサートする。（サイクル−１０）
マスタは、次のバス転送を開始するためにｔｓの１サイクルのデアサート期間の後、再びアサートすることができる。（サイクル−１１）
スレーブは、さらにＲｅｔｕｒｎすべきＤａｔａがある場合は、次のＲｅａｄ  Ｒｅｔｕｒｎを開始するためにｒｒｄｙを連続してアサートすることができる。（サイクル−１６）
Ｒｅａｄ  バス転送が連続した場合には、リードデータバス上で間隔を空けずにＤａｔａをＲｅａｄし続けることができる。
【００８９】
次に、実際の動作を例に挙げて本発明の第１の実施例の説明を行う。
【００９０】
図１０は図９においてプロセッサ９０１、プリンタコントローラ９０６が同時にメモリコントローラ９０２からリードを行う場合のタイミングチャートを示したものである。物理アドレスとメモリデバイスのバンクアドレス、ロウアドレス、カラムアドレスとの対応は図１５に示すとおりである。
【００９１】
以下、プロセッサ９０１をマスタ１、プリンタコントローラ９０６をマスタ２、メモリコントローラ９０２をスレーブと呼ぶ。
【００９２】
図１０において、初めにマスタ１が転送を開始する（サイクル１）。スレーブはｓｒｄｙをアサートし、このコマンドを受け付ける。アドレスは０ｘ０００００４００番地である。紙面の都合で図示されないが、このコマンドはリード（ｒｄ＿ｎｏｔ＿ｗｒ＝１）であり、かつ２ビート（ｏｎｅ＿ｎｏｔ＿ｔｗｏ＝０）である。
【００９３】
同時にマスタ２が転送を開始する（サイクル２）。スレーブはｓｒｄｙをアサートし、このコマンドを受け付ける（サイクル４）。アドレスは０ｘ０００３７ｂｆｃ番地である。このコマンドも２ビートのリードコマンドである。
【００９４】
この後同様にして、スレーブはマスタ２、マスタ１からそれぞれアドレス０ｘ０００３７ｃ００番地、アドレス０ｘ０００００４１０番地への２ビート・リードコマンドを受け付ける。
【００９５】
メモリコントローラ９０２は、前記リードコマンドを受け付けると一旦コマンドキュー（図１の７０２）に格納し、受け付けた順にメモリ９０４に対しアクセスを行うのであるが、このときシステムバスの１ビート分を単位としてアクセスを行う。本実施例においては、システムバスは３２ビットで構成されているので、３２ビット単位でのアクセスを行うことになる。メモリ９０４のバス幅は１６ビットであるから、メモリに対して２ビートリードアクセスを発行し、そのリード結果を３２ビットにまとめてマスタに返すよう動作する。ここでメモリ９０４がＤＤＲ  ＳＤＲＡＭにより構成されていることに注意する必要がある。
【００９６】
すなわち、メモリ９０４に対する２ビートのアクセスは、システムバスクロックの１クロックでデータが転送される。
【００９７】
また、ＤＤＲメモリは同一デバイスの同一ページ、あるいは同一デバイスの別バンクに存在するページに対するアクセスは連続したサイクルで行うことができる。
【００９８】
いま、マスタ１の最初のリード要求のアドレスである０ｘ０００００４００番地とマスタ２の最初のリード要求のアドレスである０ｘ０００３７ｂｆｃ番地は同一デバイス（同一チップセレクト）でかつ別のバンクに存在するページに存在する。
【００９９】
従って、これらのページへのアクセスは連続したサイクルで行うことができる。
【０１００】
そこで、本発明の第１の実施例に係るメモリコントローラ９０２においては、マスタ１およびマスタ２からの各々２ビート（３２ビット×２＝６４ビット）のアクセスを、３２ビット単位のアクセスに分割し、それらを交互に行うように動作する。このようにしても各メモリアクセスは連続したサイクルで行えるため、無駄な待ちサイクルが生じない。
【０１０１】
このときのシステムバスとメモリバス上でのタイミングの関係を図１１に示す。ここに示されるように、メモリコントローラ９０２は、転送単位がメモリアクセス要求の転送単位（６４ビット）より小さい複数のコマンドを生成する。メモリコントローラ９０２は、メモリアクセス要求が複数の要求元（マスタ１、２）から行われている場合、複数のコマンドをメモリ９０４に対し要求元毎に交互に発行する。このようにして、複数のメモリアクセス要求が時分割並列的に実行される。なお、メモリコントローラ９０２は、メモリアクセス要求がメモリ読み出し要求である場合にのみ、このように、複数のコマンドをメモリ９０４に対し要求元毎に交互に発行する。なお、コマンドキュー７０１（図１）は、受け付けたメモリアクセス要求を順に格納し、コマンドキュー７０１の先頭および２番目のアクセス要求についてのみ、前記複数のコマンドを交互に発行する候補とする。
【０１０２】
前述のように動作した結果、サイクル１１において、スレーブはｒｒｄｙをアサートし、１ビートのリードリターンを返す。このときＭＩＤ＝１であり、マスタ１がこのリードリターンを受け取る。次いでサイクル１２において、スレーブはｒｒｄｙをアサートし、１ビートのリードリターンを返す。このときＭＩＤ＝２であり、マスタ２がこのリードリターンを受け取る。
【０１０３】
次のサイクル１３には１サイクルのウェイトサイクルが入るが、これは本実施例におけるメモリコントローラの実装上の内部タイミングの生成方法に依存しているが、本発明の説明には直接関係がないため説明は省略する。もちろんメモリコントローラの実装方法によってはこのサイクルは不要である。
【０１０４】
さらにサイクル１４においては、スレーブはｒｒｄｙをアサートし、１ビートのリードリターンを返す。このときＭＩＤ＝１であり、マスタ１がこのリードリターンを受け取るが、これはマスタ１が発行した最初のリードアクセス要求に対する２ビート目のデータである。次いでサイクル１５において、スレーブはｒｒｄｙをアサートし、１ビートのリードリターンを返す。このときＭＩＤ＝２であり、マスタ２がこのリードリターンを受け取る。これはマスタ２が発行した最初のリードアクセス要求に対する２ビート目のデータである。
【０１０５】
すなわち、従来例においては、マスタ２に対する最初のリードリターンデータはマスタ１のアクセス要求に対する全てのリードリターンが完了した後、すなわち１３サイクルないし１４サイクル目になる。これに対し、本発明の第１の実施例においてはそれよりも早いサイクルでマスタ２に対し最初のリードリターンデータが返されることになる。
【０１０６】
以降、同様にして、マスタ１，２の２番目のリードアクセス要求に対しても、サイクル２２、２３，２５，２６において１ビートのデータがマスタ毎に交互に返される。
【０１０７】
このようにして、本発明の第１の実施例においては、システムＬＳＩ内部の複数のマスタからメモリアクセス要求が同時に生じた場合、それらの転送単位を分割し、交互にメモリアクセスを行う。これにより、各マスタに対する最初のリターンデータの平均レイテンシを小さくすることができる。
【０１０８】
そのため各々が必要とするＦＩＦＯの容量を削減することが可能となり、回路規模を抑えることができる。
【０１０９】
以上において、本発明が特定の実施例に関して図示されかつ説明されたが、さらに他の修正および改善が可能である。
【０１１０】
例えば、本発明の第１の実施例においては、説明の簡単のため、システムバスのバースト転送は１ビートないし２ビートの場合について説明したが、これに限定されるものではない。実際には、ビート長が長くなる程、本発明の効果が顕著になることが理解されるべきである。
【０１１１】
また例えば、本発明の第１の実施例においては、メモリデバイスにアクセスする際のビート長が２である場合について説明したが、任意のビート長について適用できる。
【０１１２】
次の本発明の第２の実施例を説明する。本実施例のブロック図、システムＬＳＩ８００の構成を説明する図、メモリコントローラ詳細は、それぞれ、図８、図９、図１と共通である。
【０１１３】
図１２および図１３は本発明の第２の実施例におけるシステムバス９２０のバスプロトコルを説明する図である。図１２はリード転送を示し、図１３はライト転送を示す。前述のようにシステムバス９２０はマルチレイヤ構成であり、バスマスタから見た場合に任意のバススレーブとの間で１対１に接続されているようにみなすことができる。
【０１１４】
以下、システムバス９０２を構成する信号を説明する。ただし、本実施例において、システムバス９２０を構成する信号の説明は、第１の実施例と共通する信号については、省略する。
b＿size[3:0]      Access Size              Master → Slave 
Ｂｕｒｓｔ  ｓｉｚｅ（ｂ＿ｓｉｚｅ［３：０］）（Ｍａｓｔｅｒ→Ｓｌａｖｅ）は、システムバス９２０上のバス転送のバースト数を示す。１から１６ビートまで指定可能である。ｔｓと同時に確定させ、ｔｓのデアサートの１サイクル後のサイクルまで保持する。
【０１１５】
００００は１  ｂｅａｔ、０００１は、２  ｂｅａｔ、、、１１１１は、１６  ｂｅａｔである。
【０１１６】
Ｒｅａｄ  Ｄａｔａ  Ｂｙｔｅ  Ｅｎａｂｌｅ（ｒｄ＿ｂｙｔｅｅｎ［３：０］）（（Ｍａｓｔｅｒ→Ｓｌａｖｅ）は、Ｒｅａｄ時のＢｙｔｅ  Ｅｎａｂｌｅを示す。
【０１１７】
ｂ＿ｓｉｚｅ［３：０］がＳｉｎｇｌｅを示している時、その３２ｂｉｔの中でどのバイト位置へのＲｅａｄであるかを示す。ｂ＿ｓｉｚｅが２  ｂｅａｔ  ｂｕｒｓｔ以上を示している時は、本信号は無効ですべてＥｎａｂｌｅとして扱われる。ｗｒ＿ｂｙｔｅｅｎ［３：０］はＷｒｉｔｅ時のＤａｔａ  Ｐｈａｓｅで有効であるが、Ｒｅａｄ  Ｄａｔａ  Ｂｙｔｅ  Ｅｎａｂｌｅ（ｒｄ＿ｂｙｔｅｅｎ［３：０］）はＲｅａｄ時のＡｄｄｒｅｓｓ  Ｐｈａｓｅで有効である。Ｒｅａｄ  Ｄａｔａ  Ｂｙｔｅ  Ｅｎａｂｌｅ（ｒｄ＿ｂｙｔｅｅｎ［３：０］）は、ｔｓと同時に確定させ、ｔｓのデアサートの１サイクル後のサイクルまで保持する。
【０１１８】
次に、図１３を参照しながら、ｗｒｉｔｅ  ｔｒａｎｓａｃｔｉｏｎを説明する。
【０１１９】
基本Ｐｒｏｔｏｃｏｌは、以下のとおりである。
【０１２０】
サイクル−２において、マスタはＷｒｉｔｅ  バス転送を開始する際に、対象となるスレーブに対応したｔｓをアサートする。同時にｂ＿ｓｉｚｅ［３：０］，ｒｄ＿ｎｏｔ＿ｗｒ，ｍｉｄ［３：０］，ａｄｄｒ［３１：２］をアサートする。
【０１２１】
サイクル−３において、対象となるスレーブに対応したｓｒｄｙがアサートされているので、Ｗｒｉｔｅ  バス転送の開始となり、マスタはｔｓをデアサートする。また、マスタはｗｒ＿ｄａｔａ［３１：０］，ｗｒ＿ｂｙｔｅｅｎ［３：０］をアサートし、１Ｂｅａｔ目のＷｒｉｔｅ  Ｄａｔａを出力する。
【０１２２】
サイクル−４において、マスタはｂ＿ｓｉｚｅ［３：０］，ｒｄ＿ｎｏｔ＿ｗｒ，ｍｉｄ［３：０］，ａｄｄｒ［３１：２］をデアサートする。また、マスタはｗｒ＿ｄａｔａ［３１：０］，ｗｒ＿ｂｙｔｅｅｎ［３：０］を切り替え、２  ｂｅａｔ目のＷｒｉｔｅ  Ｄａｔａを出力する。
【０１２３】
サイクル−５において、Ｗｒｉｔｅ  バス転送は終了する。
【０１２４】
マスタがｔｓをアサートしても、ｓｒｄｙがデアサートされていた場合（サイクル−８，９）はマスタはｔｓをアサートし続ける。そして、ｓｒｄｙがアサートされると、ｔｓをデアサートする。（サイクル−１０）
マスタは次のバス転送を開始するためにｔｓの１サイクルのデアサート期間の後、再びアサートすることができる。（サイクル−１１）
Ｗｒｉｔｅ  バス転送が連続した場合で、もっとも各バス転送間が詰まった状態では、間隔を空けずにＤａｔａをＷｒｉｔｅし続けることができる。
【０１２５】
次に、図１２を参照しながら、Ｒｅａｄ  ｔｒａｎｓａｃｔｉｏｎを説明する。
【０１２６】
Ｒｅａｄ  バス転送はマスタからスレーブへのＲｅａｄ  Ｃｏｍｍａｎｄのバス転送と、スレーブからマスタへのＲｅａｄ  ＤａｔａのＲｅａｄ  Ｒｅｔｕｒｎに分かれている。それぞれは独立しており、信号線も独立したものとなっている。
【０１２７】
基本Ｐｒｏｔｏｃｏｌは、以下のとおりである。
【０１２８】
サイクル−２において、マスタはＲｅａｄ  バス転送を開始する際には、対象となるスレーブに対応したｔｓをアサートする。また、マスタは、同時にｂ＿ｓｉｚｅ［３：０］，ｒｄ＿ｎｏｔ＿ｗｒ，ｒｄ＿ｂｙｔｅｅｎ［３：０］，ｍｉｄ［３：０］，ａｄｄｒ［３１：２］をアサートする。
【０１２９】
サイクル−３において、対象となるスレーブに対応したｓｒｄｙがアサートされているので、Ｒｅａｄ  バス転送の開始となり、マスタは、ｔｓをデアサートする。
【０１３０】
サイクル−４：において、マスタは、ｂ＿ｓｉｚｅ［３：０］，ｒｄ＿ｎｏｔ＿ｗｒ，ｒｄ＿ｂｙｔｅｅｎ［３：０］，ｍｉｄ［３：０］，ａｄｄｒ［３１：２］をデアサートする。
【０１３１】
Ｒｅａｄ  バス転送のＲｅａｄ  Ｃｏｍｍａｎｄバス転送終了は、以下のとおりである。
【０１３２】
サイクル−６において、スレーブはＲｅａｄ  Ｄａｔａの準備ができたら、ｒｒｄｙとｒｍｉｄ［３：０］をアサートしてＲｅａｄ  Ｒｅｔｕｒｎを開始する。ｒｍｉｄ［３：０］にはＲｅａｄ  Ｃｏｍｍａｎｄでマスタから受けとったＭａｓｔｅｒ  ＩＤをのせる。
【０１３３】
また、スレーブは、ｒｄ＿ｄａｔａ［３１：０］をアサートし、１Ｂｅａｔ目のＲｅａｄ  Ｄａｔａを出力する。
【０１３４】
サイクル−７において、ｒｄ＿ｄａｔａ［３１：０］に２  ｂｅａｔ目のＲｅａｄ  Ｄａｔａを出力する。
【０１３５】
サイクル−１０において、スレーブはｒｒｄｙをデアサートする。また、スレーブはｒｍｉｄ［３：０］をデアサートする。
【０１３６】
サイクル−１０において、Ｒｅａｄ  Ｒｅｔｕｒｎは終了する。
【０１３７】
マスタがｔｓをアサートしても、ｓｒｄｙがデアサートされていた場合（サイクル−８，９）はマスタはｔｓをアサートし続ける。そして、ｓｒｄｙがアサートされると、ｔｓをデアサートする。（サイクル−１０）
マスタは、次のバス転送を開始するためにｔｓの１サイクルのデアサート期間の後、再びアサートすることができる。（サイクル−１１）
スレーブは、さらにＲｅｔｕｒｎすべきＤａｔａがある場合は、次のＲｅａｄ  Ｒｅｔｕｒｎを開始するためにｒｒｄｙを連続してアサートすることができる。（サイクル−１６）
Ｒｅａｄバス転送が連続した場合には、リードデータバス上で間隔を空けずにＤａｔａをＲｅａｄし続けることができる。
【０１３８】
次に、実際の動作を例に挙げて本発明の一実施例の説明を行う。
【０１３９】
図１４は図９においてプロセッサ９０１、プリンタコントローラ９０６が同時にメモリコントローラ９０２からリードを行う場合のタイミングチャートを示したものである。物理アドレスとメモリデバイスのバンクアドレス、ロウアドレス、カラムアドレスとの対応は図１５に示すとおりである。
【０１４０】
以下、プロセッサ９０１をマスタ１、プリンタコントローラ９０６をマスタ２、メモリコントローラ９０２をスレーブと呼ぶ。
【０１４１】
また本実施例においては、マスタ２に対しマスタ１より高いプライオリティが与えられている。本実施例においては、このプライオリティの与え方について詳細には説明しないが、予め固定で設定されても良いし、実行時に動的に指定できるように構成しても良い。
【０１４２】
図１４において、初めにマスタ１が転送を開始する（サイクル１）。スレーブはｓｒｄｙをアサートし、このコマンドを受け付ける。アドレスは０ｘ０００００４００番地である。紙面の都合で図示されないが、このコマンドはリード（ｒｄ＿ｎｏｔ＿ｗｒ＝１）であり、かつ８ビート（ｂ＿ｓｉｚｅ＝０１１１）である。同時にマスタ２が転送を開始する（サイクル２）。スレーブはｓｒｄｙをアサートし、このコマンドを受け付ける（サイクル４）。アドレスは０ｘ０００３７ｂｆｃ番地である。このコマンドも８ビートのリードコマンドである。
【０１４３】
メモリコントローラ９０２は、前記リードコマンドを受け付けると一旦コマンドキュー（図１の７０２）に格納する。ここでバンク衝突の判定を行う。この例ではマスタ１、マスタ２のメモリアクセスともバンク衝突がないので受け付けた順にメモリ９０４に対しアクセスを行う。もしマスタ１のメモリアクセスがバンク衝突を起こしており、マスタ２のメモリアクセスがバンク衝突を起こさないのであれば、マスタ２のメモリアクセス要求が先に処理される。
【０１４４】
さて、本実施例においては、システムバスは３２ビットで構成されているので、マスタはシステムバス上では３２ビット単位でのアクセスを行う。メモリ９０４のバス幅は６４ビットであるから、システムバス上の８ビート転送に対応し、メモリコントローラ９０２はメモリ９０４に対して４ビートリードアクセスを発行し、そのリード結果を３２ビット毎にマスタに返すよう動作する。
【０１４５】
ここでメモリ９０４がＤＤＲ  ＳＤＲＡＭにより構成されていることに注意する必要がある。すなわちメモリ９０４に対する２ビートのアクセスはシステムバスクロックの１クロックでデータが転送される。
【０１４６】
また、ＤＤＲメモリは同一デバイスの同一ページ、あるいは同一デバイスの別バンクに存在するページに対するアクセスは連続したサイクルで行うことができる。
【０１４７】
いま、マスタ１の最初のリード要求のアドレスである０ｘ０００００４００番地とマスタ２の最初のリード要求のアドレスである０ｘ０００３７ｂｆｃ番地は同一デバイス（同一チップセレクト）でかつ別のバンクに存在するページに存在する。従って、これらのページへのアクセスは連続したサイクルで行うことができる。
【０１４８】
図１６にこのときのシステムバスとメモリバス上でのタイミングの関係を示す。
【０１４９】
図１６において本発明の一実施例に係るメモリコントローラ９０２は、最初にマスタ１からの８ビート（３２ビット×８＝２５６ビット）のアクセスに対し、サイクル４においてメモリ９０４に対しリードコマンドを発行する。メモリバス上では６４ビット×４ビートの転送が行われ、読み出されたデータは一旦前記リードデータバッファ７０４（図１）に格納される（サイクル８〜サイクル１１）。それと共に準備のできたデータから３２ビットづつ順にマスタ１に返される（サイクル９〜サイクル１２）。
【０１５０】
この間、メモリコントローラ９０２は後続のマスタ２からの８ビート（３２ビット×８＝２５６ビット）のアクセスを処理するため、サイクル８においてメモリ９０４に対し再度リードコマンドを発行する。これにより、メモリバス上では前回の転送に引き続き６４ビット×４ビートの転送が行われる（サイクル１２〜サイクル１５）。このとき、マスタ１に対しマスタ２の優先度が高いため、サイクル１２において最初のリードデータが読み出されると、メモリコントローラ９０２はマスタ１へのリードリターンを中断し、サイクル１３からマスタ２に対してリードデータを返すように動作する。マスタ２に対する８ビートのリードリターンが全て終了すると、メモリコントローラ９０２はサイクル２１よりマスタ１へのリードリターンを再開する。すなわち、本実施例では、複数の要求元（マスタ１、２）からのリード要求に従ってメモリ９０４にアクセスした結果のリードデータをリードデータバッファ７０４に格納し、リードバッファ７０４からリードデータを複数の要求元（マスタ１、２）に設定された優先度に従った順番で転送する。また、コマンドキュー７０２には、受け付けたリード要求を順に格納し、コマンドキュー７０２からバンク衝突を回避するようにコマンドを取り出しメモリ９０４にアクセスする。
【０１５１】
以上に示される通り、マスタ２に対する最初のリードリターンデータは、マスタ１のアクセス要求に対する全てのリードリターンが完了する前に（サイクル１７以前）、最初のリードリターンデータが返されることになる。
【０１５２】
このようにして、本発明の第２の実施例においては、システムＬＳＩ内部の複数のマスタからメモリアクセス要求が競合した場合にも、メモリのアクセス効率を低下させることなく、それと同時に優先度の高いマスタのメモリアクセスレイテンシの増加を抑えることが可能となる。
【０１５３】
以上において、本発明が特定の実施例に関して図示されかつ説明されたが、さらに他の修正および改善が可能である。
【０１５４】
例えば、本発明の第２の実施例においては、システムバスとして特定の信号、プロトコルを備えるバスを使用する場合について説明したが、もちろんこれに限定するものではなく、任意のバスをシステムバスとして利用し構成しても良い。また、必要に応じてメモリコントローラのバスインターフェースを複数持つように構成しても良い。
【０１５５】
また例えば、本発明の第２の実施例においては、説明の簡単のため、マスタ間の優先度の設定方法については詳細には説明しなかったが、例えばプライオリティ信号を備えるシステムバスを利用して、転送単位で優先度を与えるようにしても良い。
【０１５６】
また例えば、本発明の第１、第２の実施例においては、メモリデバイスとしてＤＤＲ  ＳＤＲＡＭを用いる場合を例にとって説明したが、もちろんこれに限定されるものではない。
【０１５７】
また例えば、本発明の第２の実施例においては、メモリデバイスにアクセスする際のビート長が８である場合について説明したが、任意のビート長について適用できる。
【０１５８】
したがって、本発明は前述の実施例に示された特定の形式に限定されるものではなく、かつ添付の特許請求の範囲において本発明の精神および範囲から離れることのない全ての修正をカバーすることを考えていることが理解されるべきである。
【図面の簡単な説明】
【０１５９】
【図１】本発明の第１の実施例におけるメモリコントローラの構成を説明する図である。
【図２】従来例の一構成例を説明する図である。
【図３】組み込み機器の複合動作シーケンスを説明する図である。
【図４】従来例におけるメモリの使用法を説明する図である。
【図５】本発明の第１の実施例におけるシステムバスのプロトコルを説明する図である。
【図６】本発明の第１の実施例におけるシステムバスのプロトコルを説明する図である。
【図７】従来例の一構成例を説明する図である。
【図８】本発明の第１の実施例のシステム構成を説明する図である。
【図９】本発明の第１の実施例のシステムＬＳＩを説明する図である。
【図１０】本発明の第１の実施例におけるシステムバス上の動作タイミングを説明する図である。
【図１１】本発明の第１の実施例におけるシステムバス上およびメモリバス上の動作タイミングを説明する図である。
【図１２】本発明の一実施例におけるシステムバスのプロトコルを説明する図である。
【図１３】本発明の一実施例におけるシステムバスのプロトコルを説明する図である。
【図１４】本発明の一実施例におけるシステムバス上の動作タイミングを説明する図である。
【図１５】物理アドレスとバンクアドレス、ロウアドレス、カラムアドレスの関係の一例を説明する図である。
【図１６】本発明の一実施例におけるシステムバス上およびメモリバス上の動作タイミングを説明する図である。
【図１】
2007048274.tif 000003
【図２】
2007048274.tif 000004
【図３】
2007048274.tif 000005
【図４】
2007048274.tif 000006
【図５】
2007048274.tif 000007
【図６】
2007048274.tif 000008
【図７】
2007048274.tif 000009
【図８】
2007048274.tif 000010
【図９】
2007048274.tif 000011
【図１０】
2007048274.tif 000012
【図１１】
2007048274.tif 000013
【図１２】
2007048274.tif 000014
【図１３】
2007048274.tif 000015
【図１４】
2007048274.tif 000016
【図１５】
2007048274.tif 000017
【図１６】
2007048274.tif 000018