(57)【要約】【課題】メモリに格納されたデータを素早く利用することができる技術を提供することを目的とする。【解決手段】リード要求によって要求されたデータをメモリから取得した後に、次のリード要求の受信に先だって、リードコマンドの供給と、クロック信号の供給停止とが行い、次リード要求の受信に応答して、クロック信号の供給を再開し、対象アドレスをメモリに供給し、そして、次リード要求に対応するデータをメモリから取得し、取得されたデータを外部装置に供給する。【選択図】図６
2008204258.tif 000002
【特許請求の範囲】
【請求項１】
クロック信号に同期して動作するメモリを制御するメモリコントローラであって、
前記メモリは、リードコマンドと対象アドレスとを受信した後に、前記対象アドレスのデータを出力するメモリであり、
前記メモリコントローラは、外部装置からの要求アドレスを指定するリード要求に応答して前記メモリ内の前記要求アドレスに対応するデータを前記外部装置に供給する供給処理を実行する供給制御モジュールを備え、
前記供給処理は、ランダムモードによる供給処理を含み、
前記ランダムモードによる供給処理は、
受信したリード要求によって要求されたデータを前記メモリから取得した後に、前記リード要求の次のリード要求の受信に先立って、前記メモリへ前記リードコマンドを供給し、前記メモリへの前記クロック信号の供給を停止する処理と、
前記次リード要求を受信したことに応答して、前記クロック信号の供給を再開し、前記次リード要求で指定された要求アドレスに対応する対象アドレスを前記メモリに供給し、前記次リード要求によって要求されたデータを前記メモリから取得し、取得したデータを前記外部装置へ供給する処理と、
を含む、メモリコントローラ。
【請求項２】
請求項１に記載のメモリコントローラであって、
前記メモリは、与えられたチップセレクト信号がアクティブな状態に維持されている間に、１つの前記リードコマンドの開始から終了までの処理を実行するメモリであり、
前記ランダムモードによる供給処理は、さらに、
前記次リード要求の受信に先立つ前記リードコマンドの前記メモリへの供給の開始から、前記次リード要求によって要求されたデータの前記メモリからの取得完了までの間、前記チップセレクト信号をアクティブな状態に維持する処理を含む、
メモリコントローラ。
【請求項３】
請求項２に記載のメモリコントローラであって、
前記メモリは、前記チップセレクト信号がインアクティブな状態からアクティブな状態に切り換えられることに応答して、新たなリードコマンドの受信が可能となるメモリであり、
前記ランダムモードによる供給処理は、さらに、
前記次リード要求の受信に先立つ前記リードコマンドの前記メモリへの供給の前に、前記チップセレクト信号をインアクティブな状態に設定し、続けて、前記チップセレクト信号をアクティブな状態に設定する処理を含む、
メモリコントローラ。
【請求項４】
請求項１ないし請求項３のいずれかに記載のメモリコントローラと、
前記メモリと、
を備える、メモリモジュール。
【請求項５】
クロック信号に同期して動作するメモリを制御する方法であって、
前記メモリは、リードコマンドと対象アドレスとを受信した後に、前記対象アドレスのデータを出力するメモリであり、
前記方法は、外部装置からの要求アドレスを指定するリード要求に応答して前記メモリ内の前記要求アドレスに対応するデータを前記外部装置に供給する供給処理を実行する工程を備え、
前記供給処理は、ランダムモードによる供給処理を含み、
前記ランダムモードによる供給処理は、
受信したリード要求によって要求されたデータを前記メモリから取得した後に、前記リード要求の次のリード要求の受信に先立って、前記メモリへ前記リードコマンドを供給し、前記メモリへの前記クロック信号の供給を停止する処理と、
前記次リード要求を受信したことに応答して、前記クロック信号の供給を再開し、前記次リード要求で指定された要求アドレスに対応する対象アドレスを前記メモリに供給し、前記次リード要求によって要求されたデータを前記メモリから取得し、取得したデータを前記外部装置へ供給する処理と、
を含む、方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリを制御するメモリコントローラ、メモリの制御方法に関するものである。
【背景技術】
【０００２】
データを格納するメモリが、種々の技術で利用されている。そして、メモリに格納されたデータを素早く利用するために、種々の工夫がなされている。例えば、並列結合される複数のフラッシュメモリ等を用いて、フラッシュメモリ等の記憶データの直並列変換に関与する信号経路の伝達遅延時間を実質的に見えなくする技術が提案されている。
【０００３】
【特許文献１】特開２０００−２８５６８５号公報
【特許文献２】特開２００６−１５５３０３号公報
【０００４】
ところで、近年では、メモリとして、クロック信号に同期して動作するメモリが多く利用されている。このようなメモリの中には、リードコマンドと対象アドレスとを受信した後に、対象アドレスのデータを出力するメモリがある（例えば、シリアルフラッシュメモリ）。ところが、従来は、このようなメモリに格納されたデータを素早く利用することに関しては十分な工夫がなされていないのが実情であった。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
本発明は、上記の課題を解決するためになされたものであり、メモリに格納されたデータを素早く利用することができる技術を提供することを目的とする。
【課題を解決するための手段】
【０００６】
上述の課題の少なくとも一部を解決するため、本発明のメモリコントローラは、クロック信号に同期して動作するメモリを制御するメモリコントローラであって、前記メモリは、リードコマンドと対象アドレスとを受信した後に、前記対象アドレスのデータを出力するメモリであり、前記メモリコントローラは、外部装置からの要求アドレスを指定するリード要求に応答して前記メモリ内の前記要求アドレスに対応するデータを前記外部装置に供給する供給処理を実行する供給制御モジュールを備え、前記供給処理は、ランダムモードによる供給処理を含み、前記ランダムモードによる供給処理は、受信したリード要求によって要求されたデータを前記メモリから取得した後に、前記リード要求の次のリード要求の受信に先立って、前記メモリへ前記リードコマンドを供給し、前記メモリへの前記クロック信号の供給を停止する処理と、前記次リード要求を受信したことに応答して、前記クロック信号の供給を再開し、前記次リード要求で指定された要求アドレスに対応する対象アドレスを前記メモリに供給し、前記次リード要求によって要求されたデータを前記メモリから取得し、取得したデータを前記外部装置へ供給する処理と、を含む。
【０００７】
このメモリコントローラによれば、リード要求によって要求されたデータをメモリから取得した後に、次のリード要求の受信に先だって、リードコマンドの供給と、クロック信号の供給停止とが行われ、次リード要求の受信に応答して、クロック信号の供給が再開され、対象アドレスがメモリに供給され、そして、次リード要求に対応するデータがメモリから取得され、取得されたデータが外部装置に供給されるので、メモリに格納されたデータを素早く利用することができる。
【０００８】
上記各メモリコントローラにおいて、前記メモリは、与えられたチップセレクト信号がアクティブな状態に維持されている間に、１つの前記リードコマンドの開始から終了までの処理を実行するメモリであり、前記ランダムモードによる供給処理は、さらに、前記次リード要求の受信に先立つ前記リードコマンドの前記メモリへの供給の開始から、前記次リード要求によって要求されたデータの前記メモリからの取得完了までの間、前記チップセレクト信号をアクティブな状態に維持する処理を含むこととしてもよい。
【０００９】
この構成によれば、ランダムモードによる供給処理において、メモリから適切にデータを取得することができる。
【００１０】
上記メモリコントローラにおいて、前記メモリは、前記チップセレクト信号がインアクティブな状態からアクティブな状態に切り換えられることに応答して、新たなリードコマンドの受信が可能となるメモリであり、前記ランダムモードによる供給処理は、さらに、前記次リード要求の受信に先立つ前記リードコマンドの前記メモリへの供給の前に、前記チップセレクト信号をインアクティブな状態に設定し、続けて、前記チップセレクト信号をアクティブな状態に設定する処理を含むこととしてもよい。
【００１１】
この構成によれば、ランダムモードによる供給処理において、メモリに適切にリードコマンドを供給することができる。
【００１２】
なお、本発明は、種々の形態で実現することが可能であり、例えば、メモリの制御方法およびメモリを制御するメモリコントローラ、そのメモリコントローラとメモリとを備えるメモリモジュール、それらの方法または装置の機能を実現するためのコンピュータプログラム、そのコンピュータプログラムを記録した記録媒体、そのコンピュータプログラムを含み搬送波内に具現化されたデータ信号、等の形態で実現することができる。
【発明を実施するための最良の形態】
【００１３】
次に、この発明の実施の形態を実施例に基づいて以下の順序で説明する。
Ａ．第１実施例：
Ｂ．第２実施例：
Ｃ，第３実施例：
Ｄ．第４実施例：
Ｅ．変形例：
【００１４】
Ａ．第１実施例：
図１は、本発明の一実施例としてのデータ処理装置を示す概略図である。このデータ処理装置９００は、バス５００と、バス５００に接続された中央処理装置７００（以下「ＣＰＵ７００」と呼ぶ）と、バス５００に接続されたメモリモジュール１００と、を有している。メモリモジュール１００は、メモリコントローラ２００とシリアルフラッシュメモリ３００（以下「シリアルメモリ３００」とも呼ぶ）とを有している。ＣＰＵ７００は、バス５００を介して、メモリモジュール１００に対してリード要求を送信する。メモリコントローラ２００は、リード要求に応答して、リード要求で指定されたアドレス（以下「要求アドレス」と呼ぶ）に対応するデータを、バス５００を介してＣＰＵ７００に供給する。メモリコントローラ２００は、供給すべきデータを、シリアルメモリ３００から読み出す。
【００１５】
バス５００からメモリコントローラ２００へは、リード要求信号／ＲＤと、アドレス信号ＡＤと、を含む種々の信号が送信される。これらの信号／ＲＤ、ＡＤは、ＣＰＵ７００の命令に従って送信される。メモリコントローラ２００からバス５００へは、ウェイト信号／ＷＡＩＴと、データ信号ＤＡＴＡとを含む種々の信号が送信される。これらの信号／ＷＡＩＴ、ＤＡＴＡは、バス５００を介して、ＣＰＵ７００に供給される。本実施例では、リード要求信号／ＲＤは１本の信号線で表され（１ビット）、アドレス信号ＡＤは２４本の信号線で表され（２４ビット）、ウェイト信号／ＷＡＩＴは１本の信号線で表され（１ビット）、データ信号ＤＡＴＡは１６本の信号線で表されている（１６ビット）。ただし、各信号のビット数は、任意に設定可能である。なお、信号を表す符号の先頭の符号「／」は、その信号が負論理の信号であることを意味している。これは、後述する他の信号についても同様である。
【００１６】
メモリコントローラ２００からシリアルメモリ３００へは、チップセレクト信号／Ｓと、クロック信号Ｃと、入力データ信号Ｄと、を含む種々の信号が送信される。シリアルメモリ３００は、このクロック信号Ｃに同期して動作する。シリアルメモリ３００からメモリコントローラ２００へは、出力データ信号Ｑを含む種々の信号が送信される。本実施例では、これらの信号／Ｓ、Ｃ、Ｄ、Ｑのそれぞれは、１本の信号線で表されている（１ビット）。ただし、各信号のビット数は、任意に設定可能である。
【００１７】
メモリコントローラ２００は、モジュールコントローラ２１０と、チップセレクトモジュール２２０と、クロックモジュール２３０と、入力モジュール２４０と、出力モジュール２５０と、タイミングパルス制御モジュール２８０と、を有している。メモリコントローラ２００の各構成要素は、各構成要素の機能を実現する電子回路によって構成されている。このような電子回路としては、例えば、ＡＳＩＣ（Application Specific Integrated Circuits）のような専用の電子回路を採用可能である。
【００１８】
チップセレクトモジュール２２０は、チップセレクト信号／Ｓを制御する。クロックモジュール２３０は、クロック信号Ｃを制御する。入力モジュール２４０は、入力データ信号Ｄを制御する。出力モジュール２５０は、出力データ信号Ｑを受信し、受信したデータをデータ信号ＤＡＴＡとしてバス５００に供給する。タイミングパルス制御モジュール２８０は、各モジュール２２０、２３０、２４０、２５０の動作用のクロック信号を制御する。
【００１９】
モジュールコントローラ２１０は、メモリコントローラ２００の各モジュールの動作を制御することによって、メモリコントローラ２００の全体の動作を制御する。メモリコントローラ２００から出力される信号／ＷＡＩＴ、ＤＡＴＡ、／Ｓ、Ｃ、Ｄは、モジュールコントローラ２１０によって、直接的にあるいは間接的に、制御される。具体的には、モジュールコントローラ２１０は、ウェイト信号／ＷＡＩＴを、直接的に制御する。チップセレクトモジュール２２０とクロックモジュール２３０と入力モジュール２４０とは、モジュールコントローラ２１０の指示に従って、信号／Ｓ、Ｃ、Ｄを、それぞれ制御する。そして、出力モジュール２５０は、モジュールコントローラ２１０の指示に従って、出力データ信号Ｑの受信と、データ信号ＤＡＴＡの制御とを、行う。すなわち、メモリコントローラ２００から出力される信号／Ｓ、Ｃ、Ｄ、ＤＡＴＡは、間接的に、モジュールコントローラ２１０によって制御される。そこで、以下の説明では、間接的な制御に関しても、「モジュールコントローラ２１０が、これらの信号／Ｓ、Ｃ、Ｄ、ＤＡＴＡを制御する」という表現を用いる。
【００２０】
モジュールコントローラ２１０は、メモリコントローラ２００の各モジュールの動作を制御することによって、供給処理を実行する。供給処理は、ＣＰＵ７００からのアドレスを指定するリード要求に応答して、シリアルメモリ３００内のそのアドレスに対応するデータをＣＰＵ７００に供給する処理である。このように、モジュールコントローラ２１０は、特許請求の範囲における「供給制御モジュール」に相当する。モジュールコントローラ２１０は、「シーケンシャルモード」による供給処理と、「ランダムモード」による供給処理とを、実行可能である。モジュールコントローラ２１０は、供給処理のモードに関する情報を格納するモードメモリＭＭを有している。
【００２１】
図２は、シリアルメモリ３００の動作を示すタイミングチャートである。このタイミングチャートは、基本的なリードを示している。まず、チップセレクト信号／Ｓがアサートされる。ここで、「信号をアサートする」とは、その信号をアクティブな状態に切り換えることを意味している。通常は、正論理の信号は、アサートによって、ＬレベルからＨレベルに切り換えられ、負論理の信号は、アサートによって、ＨレベルからＬレベルに切り換えられる。また、「信号をネゲートする」とは、アサートとは逆に、信号をインアクティブな状態に切り換えることを意味している。本実施例では、アサートによってチップセレクト信号／Ｓが、ＨレベルからＬレベルに切り替えられる。
【００２２】
チップセレクト信号／Ｓのアサートに続いて、入力データ信号Ｄを利用して、リードコマンドとアドレスとが入力される。図２の例では、リードコマンドは８ビットで表されており、その値は「０３ｈ（ｈは１６進法を意味している）」である。また、アドレスは２４ビットで表されている。まず、リードコマンドが１ビットずつ入力され、続けて、アドレスが１ビットずつ入力される。これらのデータはクロック信号Ｃに同期して入力される。なお、このアドレスは、特許請求の範囲の「対象アドレス」に相当する。
【００２３】
アドレス入力の完了に続けて、出力データ信号Ｑを利用してデータが出力される。まず、上述の対象アドレスのデータ（第１データ）が出力される。図２の例では、１つのアドレスに対応付けられるデータは、１６ビットで表されている。１６ビットのデータは、クロック信号Ｃに同期して１ビットずつ出力される。第１データに続けて第２データが出力される。第２データは、第１データの次のアドレスのデータである。さらに、第２データに続けて第３データが出力される。第３データは、第２データの次のアドレスのデータである。このように、シリアルメモリ３００は、クロック信号Ｃに同期して、アドレスを１つずつ増加させながら、データをシーケンシャルに出力する。
【００２４】
リードコマンドは、チップセレクト信号／Ｓのネゲートによって終了する（図示省略）。また、本実施例では、このネゲートによるリードコマンドの終了は、任意のタイミングで実行可能である。
【００２５】
新たなリードコマンドを実行するためには、チップセレクト信号／Ｓのアサートから始まる上述の手順が繰り返される。対象アドレスは任意に設定され得るので、任意のアドレスのデータを読み出すことができる。
【００２６】
図３は、シーケンシャルモードによる供給処理を示すタイミングチャートである。このタイミングチャートは、メモリコントローラ２００による送信と受信とのタイミングを示している。このタイミングチャートには、信号／ＲＤ、／ＷＡＩＴ、ＡＤ、ＤＡＴＡ、／Ｓ、Ｃ、Ｄ、Ｑが示されている。この例では、３つのリード要求Ｒａ、Ｒｂ、Ｒｃがこの順番にメモリコントローラ２００によって受信されている。後述するように、これらのリード要求Ｒａ、Ｒｂ、Ｒｃでは、アドレスが１ずつインクリメントされている。
【００２７】
まず、ＣＰＵ７００（図１）は、バス５００を介して第１リード要求Ｒａをメモリコントローラ２００に送信する。具体的には、ＣＰＵ７００は、リード要求信号／ＲＤをアサートする（タイミングＴａ）。この際、ＣＰＵ７００は、アドレス信号ＡＤを利用して、アドレスを指定する（第１アドレスＡＤａ）。このアドレスは、特許請求の範囲の「要求アドレス」に相当する。
【００２８】
なお、アドレスを表す符号に添えられた括弧内の数字は、同じタイミングチャート内の他のアドレスに対する相対的なアドレスを表している。例えば、後述する第３アドレスＡＤｃ（２）は、第１アドレスＡＤａ（０）に「２」を加えたアドレスを示している。このタイミングチャートでは、同様の数字が、データを表す符号（Ｄａ、Ｄｂ、Ｄｃ）にも添えられている。これらは、後述する他のタイミングチャートについても同様である。
【００２９】
第１リード要求Ｒａに応答して、モジュールコントローラ２１０は、ウェイト信号／ＷＡＩＴとチップセレクト信号／Ｓとをアサートする（タイミングＴｂ）。ウェイト信号／ＷＡＩＴのアサートによって、ＣＰＵ７００は、処理の進行を中断する。
【００３０】
次に、モジュールコントローラ２１０は、入力データ信号Ｄを利用して、リードコマンド（０３ｈ）とアドレス（ＡＤａ）とを、シリアルメモリ３００に供給する（タイミングＴｂ〜Ｔｃ）。シリアルメモリ３００に供給されるアドレスは、ＣＰＵ７００によって指定された要求アドレスと同じである。
【００３１】
アドレス供給の完了に続いて、シリアルメモリ３００は、出力データ信号Ｑを利用して、第１アドレスＡＤａの第１データＤａを１ビットずつ出力する（タイミングＴｃ〜Ｔｄ）。
【００３２】
第１データＤａの出力が完了したことに応答して、モジュールコントローラ２１０は、ウェイト信号／ＷＡＩＴをネゲートし、そして、データ信号ＤＡＴＡを利用して第１データＤａをＣＰＵ７００に供給する（タイミングＴｄ）。ＣＰＵ７００は、ウェイト信号／ＷＡＩＴがネゲートされたことに応答して、データ信号ＤＡＴＡによって表された第１データＤａを取得する。
【００３３】
また、モジュールコントローラ２１０は、第１データＤａの出力が完了したことに応答して、クロック信号Ｃの供給を停止する（タイミングＴｄ）。チップセレクト信号／Ｓは、ネゲートされること無くアサートされたまま維持される。これらの結果、シリアルメモリ３００の動作は、次のアドレスのデータを出力可能な状態で、停止する。
【００３４】
その後、ＣＰＵ７００は、任意のタイミングで次の第２リード要求Ｒｂをメモリコントローラ２００に送信する（タイミングＴｅ）。図３の例では、第２リード要求Ｒｂで指定される第２アドレスＡＤｂは、第１アドレスＡＤａの次のアドレスである。このように、前回のリードの次のアドレスのデータをリードすることは、しばしば、行われる。例えば、プログラムコードがメモリからリードされる場合や、画像データのような大きなサイズのデータがメモリからリードされる場合がある。
【００３５】
第２リード要求Ｒｂに応答して、モジュールコントローラ２１０は、ウェイト信号／ＷＡＩＴをアサートし、クロック信号Ｃの供給を再開する（タイミングＴｆ）。クロック信号Ｃが供給に応答して、シリアルメモリ３００は、次のアドレス（ＡＤｂ）の第２データＤｂを１ビットずつ出力する（タイミングＴｆ〜Ｔｇ）。
【００３６】
第２データＤｂの出力完了に応答する処理は、第１データＤａの出力完了に応答する処理と同じである。その結果、ＣＰＵ７００は、データ信号ＤＡＴＡによって表された第２データＤｂを取得し、シリアルメモリ３００の動作は、次のアドレスのデータを出力可能な状態で、停止する。
【００３７】
以後、モジュールコントローラ２１０は、リードコマンドとアドレスとをシリアルメモリ３００に供給せずに、クロック信号Ｃの供給再開と停止とを繰り返す。図３の例では、第２リード要求Ｒｂに対応する第２データＤｂと同様に、次の第３リード要求Ｒｃに対応する第３データＤｃが供給される。このように、シーケンシャルモードでは、最初にリードコマンドとアドレスとがシリアルメモリ３００に供給された後は、リードコマンドとアドレスとはシリアルメモリ３００には供給されない。図３の例では、第１リード要求Ｒａが、シーケンシャルモードにおける最初のリード要求である。
【００３８】
図４は、供給処理の比較例を示すタイミングチャートである。この比較例では、モジュールコントローラ２１０は、任意のアドレスに対応するために、アドレスを指定するリード要求を受信する毎に、リードコマンドとアドレスとをシリアルメモリ３００に供給する。
【００３９】
メモリコントローラ２００による第１リード要求Ｒａの受信から、シリアルメモリ３００による第１データＤａの出力の完了までの処理は、図３のシーケンシャルモードと同じである（タイミングＴａ〜Ｔｄ）。
【００４０】
次に、第１データＤａの出力が完了したことに応答して、モジュールコントローラ２１０は、ウェイト信号／ＷＡＩＴをネゲートする。そして、データ信号ＤＡＴＡを利用して第１データＤａをＣＰＵ７００に供給する（タイミングＴｄ）。さらに、モジュールコントローラ２１０は、チップセレクト信号／Ｓをネゲートすることによって、リードコマンドを終了する。
【００４１】
次の第２リード要求Ｒｂを受信した場合には、モジュールコントローラ２１０は、第１リード要求Ｒａを受信した場合と同様に、供給処理を実行する。すなわち、リードコマンド（０３ｈ）とアドレス（ＡＤｂ）とがシリアルメモリ３００に供給され、そして、シリアルメモリ３００から出力されたデータがＣＰＵ７００に供給される。
【００４２】
この比較例では、モジュールコントローラ２１０は、アドレスを指定するリード要求を受信する毎に、リードコマンド（０３ｈ）とアドレスとをシリアルメモリ３００に供給する。一方、図３に示すシーケンシャルモードでは、モジュールコントローラ２１０は、リードコマンドとアドレスとをシリアルメモリ３００に供給せずに、クロック信号Ｃを制御することによって要求アドレスのデータをシリアルメモリ３００から取得する。その結果、シーケンシャルモードでは、リード要求を受信してから、要求されたアドレスのデータをＣＰＵ７００に供給するまでの時間が、短縮される。その結果、シリアルメモリ３００に格納されたデータを素早く利用することができる。
【００４３】
具体的には、図３に示すシーケンシャルモードでは、１回のリード要求に関して、リードコマンド（８ビット）とアドレス（２４ビット）とのための３２クロックの時間が短縮される。２回目以降のリード要求に関しては、１回のリード要求のためのウェイト時間は１６クロックである（例えば、タイミングＴｆ〜Ｔｇ）。一方、図４の比較例では、１回のリード要求のためのウェイト時間は、少なくとも４８クロックである（例えば、タイミングＴｅ２〜Ｔｇ）。このように、シーケンシャルモードでは、ウェイト時間を大幅に短縮することができる。また、連続する複数のアドレスから１つずつシーケンシャルにリードされるデータは、シーケンシャルモードに適している。なお、比較例でのウェイト時間は、チップセレクト信号／Ｓのアサートからリードコマンド（０３ｈ）の供給開始までに要する時間に応じて変化し得る。この時間は、シリアルメモリ３００の設計に応じて予め決まっている。
【００４４】
図５は、シーケンシャルモードで、不連続なアドレスのリード要求を受信した場合の処理を示すタイミングチャートである。リード要求で指定されたアドレスが、前回のリード要求で指定されたアドレスの次のアドレスとは異なっている場合には、クロック供給を再開したとしても、直ぐには要求アドレスのデータがシリアルメモリ３００から出力されない。そこで、モジュールコントローラ２１０は、再度、リードコマンドとアドレスとをシリアルメモリ３００に供給する。
【００４５】
図５の例では、第２アドレスＡＤｂが第１アドレスＡＤａの次のアドレスとは異なっている。そこで、モジュールコントローラ２１０は、第２リード要求Ｒｂに応答して、ウェイト信号／ＷＡＩＴをアサートし、そして、チップセレクト信号／Ｓをネゲートする。その結果、リードコマンドは終了する（タイミングＴｅ）。その後、モジュールコントローラ２１０は、チップセレクト信号／Ｓをアサートする（タイミングＴｆ）。チップセレクト信号／Ｓがインアクティブな状態に維持される時間は、シリアルメモリ３００の設計に合わせて予め決まっている（タイミングＴｅ〜Ｔｆ）。この時間は「ディセレクト時間（Deselect time）」とも呼ばれる。
【００４６】
チップセレクト信号／Ｓがアサートされた後の処理は、図３でチップセレクト信号／Ｓがアサートされた後の処理と同様に、実行される。すなわち、リードコマンド（０３ｈ）とアドレス（ＡＤｂ）とがシリアルメモリ３００に供給され、シリアルメモリ３００から出力されたデータがＣＰＵ７００に供給される。その後、クロック信号Ｃの供給が止められる。
【００４７】
以上のように、シーケンシャルモードにおいて不連続なアドレスのリード要求を受信した場合には、チップセレクト信号／Ｓのネゲートによってリードコマンドが終了する。その後、チップセレクト信号／Ｓが再びアサートされ、シリアルメモリ３００に対するリードコマンドとアドレスとの供給によって、新たなリードコマンドが開始する。その結果、適切なデータの供給が可能である。
【００４８】
図６は、ランダムモードによる供給処理を示すタイミングチャートである。ランダムモードは、要求アドレスが任意に設定された複数のリード要求が続けて受信される場合に特化したモードである。
【００４９】
第１リード要求Ｒａの受信から、この第１リード要求Ｒａに対応する第１データＤａの出力完了までの処理は、図３に示すシーケンシャルモードと同じである（タイミングＴａ〜Ｔｄ）。第１データＤａの出力が完了したことに応答して、モジュールコントローラ２１０は、ウェイト信号／ＷＡＩＴをネゲートし、そして、データ信号ＤＡＴＡを利用して第１データＤａをＣＰＵ７００に供給する（タイミングＴｄ）。次に、モジュールコントローラ２１０は、チップセレクト信号／Ｓをネゲートすることによって、リードコマンドを終了する（タイミングＴｅ）。
【００５０】
次に、モジュールコントローラ２１０は、次のリード要求の受信に先立って、チップセレクト信号／Ｓをアサートする（タイミングＴｆ）。チップセレクト信号／Ｓのアサートに続いて、モジュールコントローラ２１０は、リードコマンド（０３ｈ）をシリアルメモリ３００に供給する（タイミングＴｇ〜Ｔｈ）。
【００５１】
リードコマンド（０３ｈ）の供給が完了したことに応答して、モジュールコントローラ２１０は、クロック信号Ｃの供給を停止する（タイミングＴｈ）。ただし、チップセレクト信号／Ｓはアクティブな状態に維持される。これらの結果、シリアルメモリ３００の動作は、アドレスを受信可能な状態で、停止する。
【００５２】
その後、ＣＰＵ７００は、任意のタイミングで次の第２リード要求Ｒｂをメモリコントローラ２００に送信する（タイミングＴｉ）。この第２リード要求Ｒｂで指定されるアドレスは、１つ前のリード要求のアドレス（第１アドレスＡＤａ）の次のアドレスに限らず、任意に設定され得る（図６の例では、第１アドレスＡＤａから１２だけ離れたアドレスが採用されている）。このように、任意のアドレスのデータをリードすることは、しばしば、行われる。例えば、メモリに格納されたルックアップテーブルから特定のデータをリードする場合やメモリに格納された画像データの画素値の特定の色成分のみをリードする場合がある。
【００５３】
第２リード要求Ｒｂに応答して、モジュールコントローラ２１０は、ウェイト信号／ＷＡＩＴをアサートし、クロック信号Ｃの供給を再開し、入力データ信号Ｄを利用して第２アドレスＡＤｂを供給する（タイミングＴｊ）。第２アドレスＡＤｂの供給に応答して、シリアルメモリ３００は、そのアドレスＡＤｂに対応する第２データＤｂを１ビットずつ出力する（タイミングＴｋ〜Ｔｌ）。
【００５４】
第２データＤｂの出力完了に応答する処理は、第１データＤａの出力完了に応答する処理と同じである。その結果、ＣＰＵ７００はデータ信号ＤＡＴＡによって表された第２データＤｂを取得し、シリアルメモリ３００の動作は、新たなアドレスを受信可能な状態で、停止する。
【００５５】
以後、モジュールコントローラ２１０は、要求されたデータのＣＰＵ７００への供給が完了する毎に、チップセレクト信号／Ｓのネゲート−アサートを実行し、そして、新たなリードコマンドを事前にシリアルメモリ３００に供給し、クロック信号Ｃの供給を停止する。その結果、図４に示す比較例と比べて、ランダムモードでは、リード要求を受信してから、要求されたアドレスのデータを供給するまでの時間が、短縮される。その結果、シリアルメモリ３００に格納されたデータを素早く利用することができる。
【００５６】
具体的には、図６に示すランダムモードでは、１回のリード要求に関して、リードコマンド（８ビット）のための８クロック以上の時間が短縮される。２回目以降のリード要求に関しては、１回のリード要求のためのウェイト時間は、４０クロックである（２４クロック（アドレス）＋１６クロック（データ）。例えば、タイミングＴｊ〜Ｔｌ）。一方、図４の比較例では、１回のリード要求のためのウェイト時間は、少なくとも４８クロックである（例えば、タイミングＴｅ２〜Ｔｇ）。このようにランダムにリードされるデータは、ランダムモードに適している。
【００５７】
なお、シリアルメモリ３００へのリードコマンド（０３ｈ）の供給の完了前に、次のリード要求を受信した場合には、モジュールコントローラ２１０は、以下のように処理を実行する。すなわち、モジュールコントローラ２１０は、ウェイト信号／ＷＡＩＴをアサートし、そして、クロック信号Ｃを止めずに、リードコマンドに続けてアドレスをシリアルメモリ３００に供給する。
【００５８】
図７は、メモリコントロール処理の手順を示すフローチャートである。第１実施例では、モジュールコントローラ２１０は、この手順に従って、シーケンシャルモードとランダムモードとを選択的に利用する。
【００５９】
最初のステップＳ１００では、モジュールコントローラ２１０は、ＣＰＵ７００からモード選択要求を受信したか否かを判断する。このような要求の形式としては、任意の形式を採用可能である。第１実施例では、所定のアドレスに対するライト要求が、モード選択要求として利用される。書き込むべきデータとしては、シーケンシャルモードとランダムモードとのいずれか一方を示すデータが、ＣＰＵ７００によって供給される。このようなモード選択要求は、ライト要求信号（図示せず）と、アドレス信号ＡＤと、データ信号ＤＡＴＡと、を利用して、ＣＰＵ７００からバス５００を介してメモリコントローラ２００へ送信される。
【００６０】
モード選択要求を受信した場合には、モジュールコントローラ２１０は、次のステップＳ１１０で、モードメモリＭＭ（「レジスタＭＭ」とも呼ぶ）に、選択されたモードを示すデータを格納する。
【００６１】
次のステップＳ１２０では、モジュールコントローラ２１０は、ＣＰＵ７００からリード要求を受信したか否かを判断する。リード要求を受信した場合には、モジュールコントローラ２１０は、次のステップＳ１３０で、レジスタＭＭに格納されたレジスタデータを参照する。
【００６２】
レジスタデータがシーケンシャルモードを示している場合には、モジュールコントローラ２１０は、ステップＳ１４０で、シーケンシャルモードによる供給処理を実行する。前回のリード要求に対してシーケンシャルモードが選択された場合には、モジュールコントローラ２１０は、図３で説明したように、クロック信号Ｃを制御することによって、データを取得する。前回のリード要求に対してランダムモードが選択された場合には、シリアルメモリ３００の動作は、アドレスを受信可能な状態で、停止している。そこで、モジュールコントローラ２１０は、クロック信号Ｃの供給を再開し、アドレスをシリアルメモリ３００に供給し、そして、シリアルメモリ３００からデータを取得する。いずれの場合も、シリアルメモリ３００からのデータ取得後の処理は、図３で説明した処理と同様に実行される。
【００６３】
レジスタデータがランダムモードを示している場合には、モジュールコントローラ２１０は、ステップＳ１５０で、ランダムモードによる供給処理を実行する。前回のリード要求に対してランダムモードが選択された場合には、モジュールコントローラ２１０は、図６で説明したように、アドレスを供給することによってデータを取得する。前回のリード要求に対してシーケンシャルモードが選択された場合には、モジュールコントローラ２１０は、チップセレクト信号／Ｓのネゲート−アサートを実行し、そして、リードコマンドとアドレスとをシリアルメモリ３００に供給することによってデータを取得する。いずれの場合も、シリアルメモリ３００からのデータ取得後の処理は、図６で説明した処理と同様に実行される。
【００６４】
供給処理が完了した後、モジュールコントローラ２１０は、再び、ステップＳ１００に戻る。そして、図７の処理を繰り返し実行する。
【００６５】
以上のように、図７のメモリコントロール処理では、モジュールコントローラ２１０は、ＣＰＵ７００の指示に従って、供給処理のモードを選択する。その結果、ＣＰＵ７００による処理の内容に合わせて、メモリに格納されたデータを素早く利用することができる。ここで、ＣＰＵ７００は、以下のように供給処理のモードを指定することが好ましい。すなわち、連続する複数のアドレスのデータを１つずつシーケンシャルにリードする場合には、シーケンシャルモードを指定し、そして、不連続なアドレスのデータをリードする場合には、ランダムモードを指定することが好ましい。こうすれば、ＣＰＵ７００による処理内容に合わせて、メモリコントローラ２００によるリード要求の受信からデータの供給まで時間を短縮することができる。ＣＰＵ７００にこのようなモード選択をさせる方法としては、任意の方法を採用可能である。例えば、ＣＰＵ７００によって実行されるプログラムを、予め、このような選択を実行するように構成しておけばよい。
【００６６】
ところで、シリアルフラッシュメモリ３００のような比較的遅い不揮発性メモリにプログラムコードを格納する場合には、以下のような技術（「コードシャドウ」とも呼ばれる）が、しばしば利用される。コードシャドウとは、より高速なＲＡＭにプログラムの全体をコピーし、コピー完了の後にＲＡＭに格納されたプログラムコードをＣＰＵ７００が実行する技術である。一方、本実施例では、シリアルメモリ３００に格納されたデータを素早く利用することが可能である。その結果、このようなＲＡＭ（コードシャドウ）を利用せずにＣＰＵ７００がシリアルメモリ３００に格納されたプログラムコードを直接に実行する場合であっても、ＣＰＵ７００による処理速度の低下を抑制することができる。ただし、コードシャドウを利用してもよい。この場合も、データのコピーを高速に行うことができる。
【００６７】
Ｂ．第２実施例：
図８は、メモリコントロール処理の別の例の手順を示すフローチャートである。図７に示すメモリコントロール処理との差違は、ステップＳ１００、Ｓ１１０が省略され、そして、ステップＳ１３０がステップＳ１３２に置換されている点だけである。他のステップの処理は、図７と同じである。このメモリコントロール処理では、モジュールコントローラ２１０は、ＣＰＵ７００からの指示の代わりに、要求アドレスに従って、供給処理のモードを選択する。
【００６８】
ステップＳ１３２では、モジュールコントローラ２１０は、要求アドレスが所定のシーケンシャル範囲内か否かを判断する。要求アドレスがシーケンシャル範囲内である場合には、モジュールコントローラ２１０は、ステップＳ１４０に移行し、シーケンシャルモードによる供給処理を実行する。一方、要求アドレスがシーケンシャル範囲外である場合には、モジュールコントローラ２１０は、ステップＳ１５０に移行し、ランダムモードによる供給処理を実行する。
【００６９】
図９は、シーケンシャル範囲の例を示す概略図である。図９の例では、要求アドレスの範囲は、００００００ｈ〜ＦＦＦＦＦＦｈである。そして、００００００ｈ〜００ＦＦＦＦｈの範囲がシーケンシャル範囲に設定されている。他のアドレスには、ランダムモードが対応付けられている（以下、「ランダム範囲」とも呼ぶ）。
【００７０】
また、図９には、アドレス範囲とデータの種類との一例が示されている。シーケンシャル範囲には、プログラムコードが格納され、ランダム範囲には、ルックアップテーブルが格納されている。このデータ種類の例は、データ処理装置９００がプリンタに組み込まれた場合の例を示している。例えば、ＣＰＵ７００は、シーケンシャル範囲に格納されたプログラムを実行することによって、データ処理装置９００に入力された入力画像データから印刷データを生成する。ＣＰＵ７００がメモリモジュール１００からプログラムを取得する場合には、要求アドレスがシーケンシャル範囲内であるので、シーケンシャルモードが選択される。その結果、速やかにメモリモジュール１００からＣＰＵ７００へデータ（プログラムコード）を供給することができる。
【００７１】
また、印刷データは、入力画像データの画素値（「入力画素値」とも呼ぶ）からインク量への変換によって、生成される。ランダム範囲に格納されたルックアップテーブルは、入力画素値とインク量との対応関係を表している。ＣＰＵ７００は、入力画素値に対応付けられたインク量を、ルックアップテーブルから取得する。この際、要求アドレスがシーケンシャル範囲外（すなわち、ランダム範囲内）であるので、ランダムモードが選択される。その結果、ルックアップテーブルの中の入力画素値に対応する特定のデータ（インク量）を、速やかにメモリモジュール１００からＣＰＵ７００へ供給することができる。
【００７２】
以上のように、図８のメモリコントロール処理では、モジュールコントローラ２１０は、要求アドレスに従って、供給処理のモードを選択する。そこで、上述のように、シーケンシャルモードに適したデータ（例えば、プログラム）をシーケンシャル範囲に格納し、ランダムモードに適したデータ（例えば、ルックアップテーブル）をランダム範囲に格納することが好ましい。こうすれば、それぞれのデータを、速やかにメモリモジュール１００からＣＰＵ７００へ供給することができる。
【００７３】
なお、シーケンシャル範囲とランダム範囲とを特定する情報は、予め、モジュールコントローラ２１０のモードメモリＭＭに格納されている。このような情報の形式としては、アドレスの範囲を特定可能な任意の形式を採用可能である。例えば、開始アドレスと終了アドレスとの組み合わせによって各アドレス範囲を特定してもよい。また、開始アドレスと範囲サイズとの組み合わせによって各アドレス範囲を特定してもよい。また、シーケンシャル範囲とランダム範囲との境界を示すアドレスによって、各アドレス範囲を特定してもよい。
【００７４】
また、図９の例では、シーケンシャル範囲が１つの連続な範囲であるが、互いに離れた複数の範囲の全体をシーケンシャル範囲として利用してもよい。これは、ランダム範囲についても同様である。
【００７５】
ところで、第２実施例のメモリコントロール処理を採用する場合には、シーケンシャル範囲のリードを続けて行う第１ステージと、ランダム範囲のリードを続けて行う第２ステージとを、利用してもよい。例えば、ＣＰＵ７００は、以下のような２つのステージを利用することによって、メモリモジュール１００にアクセスすることが可能である。第１ステージでは、プログラムコードの全体（あるいは一部）をメモリモジュール１００から図示しないＲＡＭにコピーする。第２ステージでは、そのＲＡＭに格納されたプログラムコードに従って、プログラムを実行する。この第２ステージでは、ランダム範囲のルックアップテーブルを参照することによって、入力画素値からインク量への変換を行う。これらによれば、シーケンシャルモードとランダムモードとの間の切り換えに起因してデータ供給が遅れることを抑制できる。
【００７６】
Ｃ．第３実施例：
図１０は、データ処理装置の別の例を示す概略図である。図１に示すデータ処理装置９００との差違は、２つある。第１の差違は、ＣＰＵ７００ａが、プリフェッチモジュール７１０と、実行モジュール７２０とを有している点である。第２の差違は、モジュールコントローラ２１０が、プリフェッチモジュール７１０（判断モジュール７１２）の判断結果に従って、供給処理のモードを選択する点である。なお、図１０のデータ処理装置９００ａでは、メモリモジュール１００の構成は図１に示すメモリモジュール１００と同じであり、メモリコントローラ２００のモジュールコントローラ２１０以外の要素は図示が省略されている。
【００７７】
実行モジュール７２０は、プログラムコードに従った処理を実行する。本実施例では、プログラムコードは、メモリモジュール１００（シリアルメモリ３００）に格納されている。プリフェッチモジュール７１０は、実行モジュール７２０による実行に先立って、プログラムコードをメモリモジュール１００から取得する。プログラムコードは、上述の各実施例と同様に、バス５００を介してメモリモジュール１００へリード要求を送信することによって、取得される。
【００７８】
プリフェッチモジュール７１０は、判断モジュール７１２を有している。判断モジュール７１２は、いわゆる分岐予測を実行する。具体的には、判断モジュール７１２は、プリフェッチアドレス（新たに取得すべきプログラムコードに対応する要求アドレス）を、次連続アドレスに設定するか否かを判断する（「次連続アドレス」とは、最後に取得したプログラムコードに対応する要求アドレスの次のアドレスを意味している）。換言すれば、判断モジュール７１２は、次連続アドレスのプログラムコードを取得すべきか（「not taken」とも呼ばれる）、あるいは、分岐先のプログラムコードを取得すべきか（「taken」とも呼ばれる）、を判断する。最後に取得されたプログラムコードが条件判断による分岐を伴わないコマンドである場合には、次連続アドレスから取得すべきと判断される。プリフェッチモジュール７１０は、判断結果が「not taken」である場合には、プリフェッチアドレス（要求アドレス）を次連続アドレスに設定する。判断結果が「taken」である場合には、プリフェッチアドレスを分岐先アドレスに設定する。なお、このような分岐予測の方法としては、周知の種々の方法を採用可能である。
【００７９】
この判断結果を示す情報は、バス５００を介さずに直接、判断モジュール７１２からメモリコントローラ２００に供給される。ただし、バス５００を介して判断結果がメモリコントローラ２００に供給されてもよい。
【００８０】
図１１は、第３実施例におけるメモリコントロール処理の手順を示すフローチャートである。図８に示すメモリコントロール処理との差違は、ステップＳ１３２がステップＳ１３４に置換されている点だけである。他のステップの処理は、図８と同じである。このメモリコントロール処理では、モジュールコントローラ２１０は、分岐予測の判断結果に従って、供給処理のモードを選択する。
【００８１】
ステップＳ１３４では、判断モジュール７１２から供給された判断結果が、次連続アドレスからの取得を示しているか否かを、モジュールコントローラ２１０が判断する。判断結果が次連続アドレスからの取得を示す場合には、モジュールコントローラ２１０は、ステップＳ１４０に移行し、シーケンシャルモードによる供給処理を実行する。一方、判断結果が次連続アドレスからの取得を示していない場合には、モジュールコントローラ２１０は、ステップＳ１５０に移行し、ランダムモードによる供給処理を実行する。
【００８２】
以上のように、図１１のメモリコントロール処理では、モジュールコントローラ２１０は、ＣＰＵ７００ａ（判断モジュール７１２）の判断結果（分岐予測結果）に従って、供給処理のモードを選択する。その結果、次連続アドレスに対するリード要求が続けて発行される場合には、シーケンシャルモードによる素早いデータ供給が可能である。そして、分岐先アドレス（すなわち、不連続なアドレス）に対するリード要求が続けて発行される場合には、ランダムモードによる素早いデータ供給が可能である。なお、図１１のメモリコントロール処理では、モードメモリＭＭを利用せずに済む。従って、モードメモリＭＭを省略してもよい。
【００８３】
Ｄ．第４実施例：
図１２は、データ処理装置の別の例を示す概略図である。図１に示すデータ処理装置９００との差違は、２点ある。第１の差違は、メモリモジュール１００ｂのメモリコントローラ２００ｂに、バッファメモリ２６０とセレクタ２７０とが追加されている点である。第２の差違は、出力モジュール２５０ｂが、２つのアドレスメモリＴＡＧ０、ＴＡＧ１を有している点である。各アドレスメモリＴＡＧ０、ＴＡＧ１は、それぞれ、１つのアドレスを表すデータを格納する。データ処理装置９００ｂの他の構成は、図１に示すデータ処理装置９００と同じである。
【００８４】
バッファメモリ２６０は、２つのバッファ領域ＢＦ０、ＢＦ１を有している。各バッファ領域ＢＦ０、ＢＦ１は、それぞれ、１アドレスのデータを格納する。また、バッファメモリ２６０は、シリアルメモリ３００から出力されたデータを、出力モジュール２５０ｂ（すなわち、モジュールコントローラ２１０）によって選択された一方のバッファ領域に格納する。セレクタ２７０は、出力モジュール２５０ｂ（すなわち、モジュールコントローラ２１０）によって選択された一方のバッファ領域のデータを、データ信号ＤＡＴＡを利用してバス５００に供給する。第０アドレスメモリＴＡＧ０は、第０バッファ領域ＢＦ０に格納されたデータのアドレスを格納する。第１アドレスメモリＴＡＧ１は、第１バッファ領域ＢＦ１に格納されたデータのアドレスを格納する。
【００８５】
図１３は、シーケンシャルモードによる供給処理を示すタイミングチャートである。このタイミングチャートでは、図３の例と同じ３つのリード要求Ｒａ、Ｒｂ、Ｒｃが受信される。ただし、図１３の手順では、図３の手順とは異なり、２つのバッファ領域ＢＦ０、ＢＦ１を利用したデータの先読みが行われる。このタイミングチャートには、バッファ領域ＢＦ０、ＢＦ１に格納されるデータも示されている。
【００８６】
第１リード要求Ｒａの受信から、この第１リード要求Ｒａに対応する第１データＤａの出力完了までの処理は、図３に示す手順と同様に実行される（タイミングＴａ〜Ｔｄ）。なお、シリアルメモリ３００から出力された第１データＤａは、第０バッファ領域ＢＦ０に格納される。そして、第０アドレスメモリＴＡＧ０には、第１アドレスＡＤａを示すデータが格納される（図示せず）。
【００８７】
第１データＤａの出力が完了したことに応答して、モジュールコントローラ２１０は、ウェイト信号／ＷＡＩＴをネゲートし、そして、データ信号ＤＡＴＡを利用して第１データＤａをＣＰＵ７００に供給する（タイミングＴｄ）。この時点では、第１バッファ領域ＢＦ１が空いている。そこで、モジュールコントローラ２１０は、クロック信号Ｃを停止せずに、次のアドレスの第２データＤｂを取得する。取得された第２データＤｂは、第１バッファ領域ＢＦ１に格納される。第１アドレスメモリＴＡＧ１には、第２アドレスＡＤｂを示すデータが格納される（図示せず）。
【００８８】
第２データＤｂの出力が完了したことに応答して、モジュールコントローラ２１０は、クロック信号Ｃの供給を停止する（タイミングＴｅ）。チップセレクト信号／Ｓは、ネゲートされること無くアサートされたまま維持される。これらの結果、シリアルメモリ３００の動作は、第１アドレスＡＤａ（０）に「２」を加えた第３アドレスＡＤｃ（２）のデータ（第３データＤｃ（２））を出力可能な状態で、停止する。
【００８９】
その後、ＣＰＵ７００は、任意のタイミングで次の第２リード要求Ｒｂをメモリコントローラ２００ｂに送信する（タイミングＴｆ）。この時点で、第２データＤｂは既に第１バッファ領域ＢＦ１に格納されている。そこで、モジュールコントローラ２１０は、第２リード要求Ｒｂに応答して、ウェイト信号／ＷＡＩＴをアサートせずに、データ信号ＤＡＴＡを利用して第２データＤｂをＣＰＵ７００に供給する（タイミングＴｇ）。なお、出力モジュール２５０ｂは、アドレスメモリＴＡＧ０、ＴＡＧ１を参照することによって、２つのバッファ領域ＢＦ０、ＢＦ１の内の要求されたデータを格納するバッファ領域を特定する。この特定は、モジュールコントローラ２１０によって行われても良い。
【００９０】
第２データＤｂの供給は、前の第１データＤａを格納する第０バッファ領域ＢＦ０が空いていることを意味する。そこで、モジュールコントローラ２１０は、第２リード要求Ｒｂに応答して、クロック信号Ｃの供給を開始する（タイミングＴｇ）。クロック信号Ｃの供給に応答して、シリアルメモリ３００は、次のアドレス（ＡＤｃ）の第３データＤｃを出力する（タイミングＴｇ〜Ｔｈ）。出力された第３データＤｃは、第０バッファ領域ＢＦ０に格納される。第０アドレスメモリＴＡＧ０には、第３アドレスＡＤｃを示すデータが格納される（図示省略）。
【００９１】
第３データＤｃの出力が完了したことに応答して、モジュールコントローラ２１０は、クロック信号Ｃの供給を停止する（タイミングＴｈ）。シリアルメモリ３００の動作は、第２アドレスＡＤｂ（１）に「２」を加えた第４アドレスのデータを出力可能な状態で、停止する。
【００９２】
以後、モジュールコントローラ２１０は、クロック信号Ｃの供給再開と停止とを繰り返すことによって、将来にリード要求されると推定されるデータを事前にシリアルメモリ３００から取得し、取得したデータをバッファメモリ２６０に格納する。そして、次のリード要求に応答して、バッファメモリ２６０に格納されたデータをＣＰＵ７００に供給する。これらの結果、リード要求に応答して、ＣＰＵ７００を待たせずに、要求されたアドレスのデータをＣＰＵ７００に供給することが可能となる。図３の例では、第２リード要求Ｒｂに対応する第２データＤｂと同様に、第３リード要求Ｒｃに対応する第３データＤｃが供給される。
【００９３】
図１４は、シーケンシャルモードで、リード要求が早いタイミングで受信された場合の処理を示すタイミングチャートである。図１４の例では、第１リード要求Ｒａに対応する第１データＤａは、図１３で説明したシーケンシャルモードの手順に従って、既に、第０バッファ領域ＢＦ０に格納されている。そして、第１リード要求Ｒａに応答して、第０バッファ領域ＢＦ０から第１データＤａがＣＰＵ７００へ供給される（タイミングＴａ）。また、クロック信号Ｃの供給が再開されることによって、シリアルメモリ３００からの次の第２データＤｂの出力が開始される（タイミングＴａ）。
【００９４】
図１４の例では、次の第２リード要求Ｒｂが、第２データＤｂの出力完了（タイミングＴｄ）よりも早いタイミングＴｂで、受信されている。この場合には、モジュールコントローラ２１０は、第２リード要求Ｒｂに応答してウェイト信号／ＷＡＩＴをアサートする（タイミングＴｃ）。そして、モジュールコントローラ２１０は、要求された第２データＤｂの出力が完了したことに応答して、ウェイト信号／ＷＡＩＴをネゲートし、そして、データ信号ＤＡＴＡを利用して第２データＤｂをＣＰＵ７００に供給する（タイミングＴｄ）。
【００９５】
第２データＤｂの供給の時点で第０バッファ領域ＢＦ０が空いているので、モジュールコントローラ２１０は、クロック信号Ｃを停止せずに、次のアドレスの第３データＤｃを取得する。第３データＤｃの出力が完了したことに応答して、モジュールコントローラ２１０は、クロック信号Ｃの供給を停止する（タイミングＴｅ）。
【００９６】
以上のように、リード要求が早いタイミングで受信された場合には、モジュールコントローラ２１０は、要求されたデータの供給が可能となるまで、ウェイト信号／ＷＡＩＴをアサートする。その結果、適切なデータをＣＰＵ７００に供給することができる。
【００９７】
図１５は、シーケンシャルモードで、不連続なアドレスのリード要求が受信された場合の処理を示すタイミングチャートである。このタイミングチャートでは、図５の例と同じ２つのリード要求Ｒａ、Ｒｂが受信されている。第１リード要求Ｒａに応答する処理は、図１３の例と同様に実行される（タイミングＴａ〜Ｔｃ）。
【００９８】
次の第２リード要求Ｒｂでは、第１アドレスＡＤａ（０）の次のアドレスとは異なるアドレスＡＤｂ（１２）が指定されている。そこで、モジュールコントローラ２１０は、第２リード要求Ｒｂに応答して、ウェイト信号／ＷＡＩＴをアサートし、そして、チップセレクト信号／Ｓをネゲートする（タイミングＴｅ）。その結果、リードコマンドが終了する。その後、モジュールコントローラ２１０は、チップセレクト信号／Ｓをアサートする（タイミングＴｆ）。
【００９９】
チップセレクト信号／Ｓがアサートされた後の処理は、図１３でチップセレクト信号／Ｓがアサートされた後の処理と同様に実行される。図１５の例では、チップセレクト信号／Ｓがアサートされた後、モジュールコントローラ２１０は、クロック信号Ｃの供給を再開し、リードコマンド（０３ｈ）と第２アドレスＡＤｂとをシリアルメモリ３００に供給する。そして、シリアルメモリ３００からの第２データＤｂの出力が完了したことに応答して、モジュールコントローラ２１０は、第２データＤｂをＣＰＵ７００に供給する（タイミングＴｈ）。また、モジュールコントローラ２１０は、クロック信号Ｃの供給を続けることによって、次のアドレスの第３データＤｃを取得する（タイミングＴｈ〜Ｔｉ）。第３データＤｃの取得が完了したことに応答して、モジュールコントローラ２１０は、クロック信号Ｃの供給を停止する（タイミングＴｉ）。
【０１００】
以上のように、シーケンシャルモードにおいて不連続なアドレスのリード要求が受信された場合には、再度、リードコマンドと要求アドレスとがシリアルメモリ３００に供給される。その結果、適切なデータの供給が可能である。
【０１０１】
また、シリアルメモリ３００からのデータ出力の途中で、不連続なアドレスのリード要求が受信される場合もあり得る。この場合には、モジュールコントローラ２１０は、そのリード要求に応答してチップセレクト信号／Ｓをネゲートすることによって、そのデータ出力を中断する。そして、モジュールコントローラ２１０は、新たなリードコマンドを開始することによって、要求されたデータを取得する。
【０１０２】
なお、図１２に示すメモリコントローラ２００ｂは、ランダムモードによる供給処理として、図６に示す処理と同様の処理を実行する。そして、このメモリコントローラ２００ｂによって実行されるメモリコントロール処理としては、上述の各実施例のメモリコントロール処理（図７、図８、図１１）の中の任意の処理を採用可能である。
【０１０３】
Ｅ．変形例：
なお、上記各実施例における構成要素の中の、独立クレームでクレームされた要素以外の要素は、付加的な要素であり、適宜省略可能である。また、この発明は上記の実施例や実施形態に限られるものではなく、その要旨を逸脱しない範囲において種々の態様において実施することが可能であり、例えば次のような変形も可能である。
【０１０４】
変形例１：
上述の各実施例において、ＣＰＵ７００、７００ａのデータ長と、シリアルメモリ３００のデータ長とが、互いに異なっていても良い（ここで、データ長とは、１つのアドレスに対応付けられたデータのサイズを意味している）。この場合には、要求アドレスと対象アドレスとの対応関係を予め決定し、メモリコントローラ２００、２００ｂは、その対応関係に従って、要求アドレスに対応付けられた対象アドレスを特定すればよい。例えば、ＣＰＵ７００、７００ａのデータ長が、シリアルメモリ３００のデータ長の２倍である場合には、１つの要求アドレスに２つの対象アドレスが対応付けられる。そして、メモリコントローラ２００、２００ｂは、１つのリード要求に応答して、２つの対象アドレスのデータを、ＣＰＵ７００、７００ａに供給する。
【０１０５】
また、ＣＰＵ７００、７００ａのデータ長と、シリアルメモリ３００のデータ長とが、同じ場合であっても、要求アドレスに対応付けられた対象アドレスが、その要求アドレスからシフトしていてもよい。
【０１０６】
いずれの場合も、要求アドレスをシーケンシャルに辿ったときに、その要求アドレスに対応付けられた対象アドレスもシーケンシャルに辿られるように、対応関係を決定することが好ましい。これにより、連続な複数の要求アドレスには、同じ順番で連続な複数の対象アドレスが対応付けられる。その結果、メモリコントローラ２００、２００ｂは、シーケンシャルモードにおいて、要求アドレスに対応する適切なデータをシリアルメモリ３００から取得することができる。
【０１０７】
変形例２：
上述の各実施例において、供給処理の実行のためのモードをシーケンシャルモードとランダムモードとから選択する選択処理としては、図７、図８、図１１に示した処理に限らず、任意の処理を採用可能である。例えば、モジュールコントローラ２１０が、ユーザの指示に従って供給処理のモードを選択してもよい。具体的には、メモリコントローラ２００に指示信号線を接続すればよい。そして、その指示信号線がＨレベルに設定された場合にはシーケンシャルモードが選択され、その信号線がＬレベルに設定された場合にはランダムモードが選択されてもよい。
【０１０８】
また、上述の各実施例において、モジュールコントローラ２１０は、選択処理の複数のモードを有していても良い。例えば、モジュールコントローラ２１０は、図７に示す第１選択モードと、図８に示す第２選択モードと、図１１に示す第３選択モードとの中から任意に選択された複数の選択モードを含む複数の選択モードを、有してもよい。ここで、複数の選択モードの中から１つを選択する処理としては、任意の処理を採用可能である。例えば、モジュールコントローラ２１０が、与えられた指示に従って、選択モードを選択してもよい。このような指示としては、ユーザの指示や外部装置からの指示等の任意の指示を採用可能である。
【０１０９】
変形例３：
上述の各実施例において、メモリコントローラ２００、２００ｂが、シーケンシャルモードとランダムモードとの内のいずれか一方のみの機能を有していても良い。一般には、メモリコントローラ２００、２００ｂは、シーケンシャルモードとランダムモードとの少なくとも一方による供給処理を実行可能であればよい。
【０１１０】
変形例４：
上述の各実施例のシーケンシャルモードにおいて、クロック信号Ｃの供給を再開するための条件（以下「再開条件」とも呼ぶ）としては、シリアルメモリ３００から出力されるデータをメモリコントローラ２００が失わずに受信可能であることを示す任意の条件を採用可能である。例えば、シリアルメモリ３００から取得したデータをバス５００（より一般的には、外部装置）に直ぐに供給可能であることを採用してもよく、また、バッファメモリが空いたことを採用してもよい。いずれの場合も、モジュールコントローラ２１０は、所定の再開条件が成立したことに応答して、クロック信号Ｃの供給を再開すればよい。
【０１１１】
変形例５：
上述の各実施例において、メモリコントローラ２００、２００ｂによって制御されるメモリとしては、シリアルフラッシュメモリ３００に限らず、種々のメモリ（例えば、種々の半導体メモリ）を採用可能である。例えば、出力データ信号Ｑが複数の信号線で表されていても良い。
【０１１２】
一般には、シーケンシャルモードを適用するメモリとしては、リードコマンドと対象アドレスとを受信した後に、クロック信号に同期して対象アドレスからシーケンシャルにデータを出力する任意のメモリを採用可能である。例えば、リードコマンドのための信号線と対象アドレスのための信号線とが互いに異なっていてもよい。また、データの出力順番は、アドレスの昇順に限らず、アドレスの降順であってもよい。この場合には、上述の各実施例において、「次のアドレス」として「１つだけデクリメントされたアドレス」を採用すればよい。
【０１１３】
また、ランダムモードを適用するメモリとしては、リードコマンドと対象アドレスとを受信した後に、対象アドレスのデータを出力する任意のメモリを採用可能である。シーケンシャルモードを適用しない場合には、クロック信号に同期して対象アドレスからシーケンシャルにデータを出力する機能を有していないメモリを採用してもよい。また、リードコマンドを受信した後に対象アドレスを受信するメモリを利用する場合には、事前にリードコマンドをメモリに供給するランダムモードの効果が顕著である。
【０１１４】
変形例６：
上述の各実施例において、シーケンシャルモードによる供給処理としては、図３、５、１３、１４、１５に示す処理に限らず、種々の処理を採用可能である。また、ランダムモードによる供給処理としては、図６に示す処理に限らず、種々の処理を採用可能である。例えば、モジュールコントローラ２１０は、メモリコントローラ２００、２００ｂの起動後の最初のリードコマンドの供給を、最初のリード要求の受信に先立って、自動的に実行してもよい。また、チップセレクト信号／Ｓ無しで動作可能なメモリを利用する場合には、チップセレクト信号／Ｓの制御を省略してもよい。また、リードコマンドの形式としては、メモリの設計に応じた任意の形式を採用可能である。例えば、所定の１つの信号のアサートがリードコマンドとして扱われてもよい。
【０１１５】
変形例７：
図１２に示すメモリコントローラ２００ｂにおいて、バッファメモリ２６０の容量は、任意に設定可能である。例えば、１つのアドレスのデータ量に相当する容量を採用してもよい。この場合には、モジュールコントローラ２１０は、シーケンシャルモードにおいて、リード要求を受信し、かつ、そのリード要求で要求されたデータのＣＰＵ７００、７００ａへの供給が完了したことに応答して、クロック信号の供給を再開すればよい。こうすれば、メモリから取得したデータを失わずに、次のリード要求を受信する前に、次のアドレスのデータをバッファメモリ２６０に格納することができる。また、３以上のアドレスのデータ量に相当する容量を採用してもよい。
【０１１６】
いずれの場合も、モジュールコントローラ２１０は、シーケンシャルモードによる供給処理として、以下の様な処理を実行することが好ましい。すなわち、シーケンシャルモードによる供給処理における最初のリード要求に応答して、最初のリード要求で指定された要求アドレスから始まる所定のＮ個（Ｎは１以上の整数）の連続なアドレスのそれぞれに対応付けられたデータをシリアルメモリ３００から取得し、取得したデータをバッファメモリ２６０に格納し、クロック信号Ｃの供給を停止する処理と、次に所定のＭ個（Ｍは１以上、かつ、Ｎ以下の整数）のリード要求を受信したことを含む所定の条件の成立に応答して、クロック信号Ｃの供給を再開する処理と、を実行することが好ましい。こうすれば、バッファを利用したシーケンシャルモードによる供給処理を適切に開始することができる。例えば、図１３の例では、数Ｎが２に設定されており、数Ｍが１に設定されている。また、第１リード要求Ｒａが、シーケンシャルモードによる供給処理における最初のリード要求に相当する。そして、所定の条件としては、１つのリード要求を受信したことが採用されている。
【０１１７】
なお、数Ｎは、アドレスの数で表されたバッファメモリ２６０の容量を示している。例えば、バッファメモリ２６０が、５つのアドレスのデータ量に相当する容量を有している場合には、数Ｎは５に設定される。また、数Ｍは、１以上Ｎ以下の任意の整数に設定され得る。そして、クロック信号Ｃの供給を再開するための所定の条件としては、クロック信号Ｃの供給停止後にＭ個のリード要求を受信したことを含む任意の条件を採用可能である。いずれの場合も、シリアルメモリ３００から出力されるデータをメモリコントローラ２００が失わずに受信可能であるような条件を採用することが好ましい。また、この条件は、最初の再開に限らず、供給停止と供給再開との繰り返しの任意のサイクルにも適用可能である。ただし、サイクル毎に条件が異なっていても良い。また、クロック信号Ｃの供給再開によって取得されるデータ量、すなわち、供給再開から供給停止までの時間長は、バッファメモリ２６０が溢れないように予め決定される。このような供給処理は、Ｎが３以上の値に設定される場合にも、同様に、実行され得る。
【０１１８】
変形例８：
上述の各実施例において、データ処理装置の構成としては、図１、図１０、図１２に示す構成に限らず、種々の構成を採用可能である。例えば、ＣＰＵ７００、７００ａとメモリコントローラ２００、２００ｂとがバス５００を介さずに直接に接続されてもよい。
【０１１９】
また、供給処理を実行する供給制御モジュールの構成としては、図１や図１２に示す構成に限らず、種々の構成を採用可能である。例えば、複数のモジュールの全体が、「供給制御モジュール」として機能してもよい。
【０１２０】
また、メモリコントローラ２００、２００ｂに対してリード要求を送信する外部装置としては、ＣＰＵ７００、７００ａに限らず、任意の装置を採用可能である。例えば、予め決定された手順に従ってデータ処理を実行する専用のデータ処理回路を採用してもよい。
【０１２１】
変形例９：
上述の各実施例のメモリモジュール１００、１００ｂは、任意の装置に適用可能である。例えば、プリンタにおける入力画像データから印刷データを生成するデータ処理装置を採用してもよい。また、プロジェクタにおける入力画像データから表示用画像データを生成するデータ処理装置を採用してもよい。また、デジタルカメラにおける画像データを生成するデータ処理装置を採用してもよい。また、汎用のコンピュータを採用してもよい。
【０１２２】
変形例１０：
上記各実施例において、ハードウェアによって実現されていた構成の一部をソフトウェアに置き換えるようにしてもよく、逆に、ソフトウェアによって実現されていた構成の一部をハードウェアに置き換えるようにしてもよい。例えば、図１のモジュールコントローラ２１０の機能を、ＣＰＵとメモリとを有するコンピュータにプログラムを実行させることによって実現してもよい。
【０１２３】
また、本発明の機能の一部または全部がソフトウェアで実現される場合には、そのソフトウェア（コンピュータプログラム）は、コンピュータ読み取り可能な記録媒体に格納された形で提供することができる。この発明において、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスクやＣＤ−ＲＯＭのような携帯型の記録媒体に限らず、各種のＲＡＭやＲＯＭ等のコンピュータ内の内部記憶装置や、ハードディスク等のコンピュータに固定されている外部記憶装置も含んでいる。
【図面の簡単な説明】
【０１２４】
【図１】本発明の一実施例としてのデータ処理装置を示す概略図である。
【図２】シリアルメモリ３００の動作を示すタイミングチャートである。
【図３】シーケンシャルモードによる供給処理を示すタイミングチャートである。
【図４】供給処理の比較例を示すタイミングチャートである。
【図５】シーケンシャルモードで不連続なアドレスのリード要求を受信した場合の処理を示すタイミングチャートである。
【図６】ランダムモードによる供給処理を示すタイミングチャートである。
【図７】メモリコントロール処理の手順を示すフローチャートである。
【図８】メモリコントロール処理の別の例の手順を示すフローチャートである。
【図９】シーケンシャル範囲の例を示す概略図である。
【図１０】データ処理装置の別の例を示す概略図である。
【図１１】第３実施例におけるメモリコントロール処理の手順を示すフローチャートである。
【図１２】データ処理装置の別の例を示す概略図である。
【図１３】シーケンシャルモードによる供給処理を示すタイミングチャートである。
【図１４】シーケンシャルモードでリード要求が早いタイミングで受信された場合の処理を示すタイミングチャートである。
【図１５】シーケンシャルモードで不連続なアドレスのリード要求が受信された場合の処理を示すタイミングチャートである。
【符号の説明】
【０１２５】
１００、１００ｂ…メモリモジュール
２００、２００ｂ…メモリコントローラ
２１０…モジュールコントローラ
２２０…チップセレクトモジュール
２３０…クロックモジュール
２４０…入力モジュール
２５０、２５０ｂ…出力モジュール
２６０…バッファメモリ
２７０…セレクタ
２８０…タイミングパルス制御モジュール
３００…シリアルフラッシュメモリ
５００…バス
７００、７００ａ…中央処理装置（ＣＰＵ）
７１０…プリフェッチモジュール
７１２…判断モジュール
７２０…実行モジュール
９００、９００ａ、９００ｂ…データ処理装置
ＴＡＧ０…第０アドレスメモリ
ＴＡＧ１…第１アドレスメモリ
ＭＭ…モードメモリ（レジスタ）
ＢＦ０…第０バッファ領域
ＢＦ１…第１バッファ領域
【図１】
2008204258.tif 000003
【図２】
2008204258.tif 000004
【図３】
2008204258.tif 000005
【図４】
2008204258.tif 000006
【図５】
2008204258.tif 000007
【図６】
2008204258.tif 000008
【図７】
2008204258.tif 000009
【図８】
2008204258.tif 000010
【図９】
2008204258.tif 000011
【図１０】
2008204258.tif 000012
【図１１】
2008204258.tif 000013
【図１２】
2008204258.tif 000014
【図１３】
2008204258.tif 000015
【図１４】
2008204258.tif 000016
【図１５】
2008204258.tif 000017