次に、この発明の実施の形態を実施例に基づいて以下の順序で説明する。
A.第1実施例:
B.第2実施例:
C,第3実施例:
D.第4実施例:
E.変形例:
A.第1実施例:
図1は、本発明の一実施例としてのデータ処理装置を示す概略図である。このデータ処理装置900は、バス500と、バス500に接続された中央処理装置700(以下「CPU700」と呼ぶ)と、バス500に接続されたメモリモジュール100と、を有している。メモリモジュール100は、メモリコントローラ200とシリアルフラッシュメモリ300(以下「シリアルメモリ300」とも呼ぶ)とを有している。CPU700は、バス500を介して、メモリモジュール100に対してリード要求を送信する。メモリコントローラ200は、リード要求に応答して、リード要求で指定されたアドレス(以下「要求アドレス」と呼ぶ)に対応するデータを、バス500を介してCPU700に供給する。メモリコントローラ200は、供給すべきデータを、シリアルメモリ300から読み出す。
バス500からメモリコントローラ200へは、リード要求信号/RDと、アドレス信号ADと、を含む種々の信号が送信される。これらの信号/RD、ADは、CPU700の命令に従って送信される。メモリコントローラ200からバス500へは、ウェイト信号/WAITと、データ信号DATAとを含む種々の信号が送信される。これらの信号/WAIT、DATAは、バス500を介して、CPU700に供給される。本実施例では、リード要求信号/RDは1本の信号線で表され(1ビット)、アドレス信号ADは24本の信号線で表され(24ビット)、ウェイト信号/WAITは1本の信号線で表され(1ビット)、データ信号DATAは16本の信号線で表されている(16ビット)。ただし、各信号のビット数は、任意に設定可能である。なお、信号を表す符号の先頭の符号「/」は、その信号が負論理の信号であることを意味している。これは、後述する他の信号についても同様である。
メモリコントローラ200からシリアルメモリ300へは、チップセレクト信号/Sと、クロック信号Cと、入力データ信号Dと、を含む種々の信号が送信される。シリアルメモリ300は、このクロック信号Cに同期して動作する。シリアルメモリ300からメモリコントローラ200へは、出力データ信号Qを含む種々の信号が送信される。本実施例では、これらの信号/S、C、D、Qのそれぞれは、1本の信号線で表されている(1ビット)。ただし、各信号のビット数は、任意に設定可能である。
メモリコントローラ200は、モジュールコントローラ210と、チップセレクトモジュール220と、クロックモジュール230と、入力モジュール240と、出力モジュール250と、タイミングパルス制御モジュール280と、を有している。メモリコントローラ200の各構成要素は、各構成要素の機能を実現する電子回路によって構成されている。このような電子回路としては、例えば、ASIC(Application Specific Integrated Circuits)のような専用の電子回路を採用可能である。
チップセレクトモジュール220は、チップセレクト信号/Sを制御する。クロックモジュール230は、クロック信号Cを制御する。入力モジュール240は、入力データ信号Dを制御する。出力モジュール250は、出力データ信号Qを受信し、受信したデータをデータ信号DATAとしてバス500に供給する。タイミングパルス制御モジュール280は、各モジュール220、230、240、250の動作用のクロック信号を制御する。
モジュールコントローラ210は、メモリコントローラ200の各モジュールの動作を制御することによって、メモリコントローラ200の全体の動作を制御する。メモリコントローラ200から出力される信号/WAIT、DATA、/S、C、Dは、モジュールコントローラ210によって、直接的にあるいは間接的に、制御される。具体的には、モジュールコントローラ210は、ウェイト信号/WAITを、直接的に制御する。チップセレクトモジュール220とクロックモジュール230と入力モジュール240とは、モジュールコントローラ210の指示に従って、信号/S、C、Dを、それぞれ制御する。そして、出力モジュール250は、モジュールコントローラ210の指示に従って、出力データ信号Qの受信と、データ信号DATAの制御とを、行う。すなわち、メモリコントローラ200から出力される信号/S、C、D、DATAは、間接的に、モジュールコントローラ210によって制御される。そこで、以下の説明では、間接的な制御に関しても、「モジュールコントローラ210が、これらの信号/S、C、D、DATAを制御する」という表現を用いる。
モジュールコントローラ210は、メモリコントローラ200の各モジュールの動作を制御することによって、供給処理を実行する。供給処理は、CPU700からのアドレスを指定するリード要求に応答して、シリアルメモリ300内のそのアドレスに対応するデータをCPU700に供給する処理である。このように、モジュールコントローラ210は、特許請求の範囲における「供給制御モジュール」に相当する。モジュールコントローラ210は、「シーケンシャルモード」による供給処理と、「ランダムモード」による供給処理とを、実行可能である。モジュールコントローラ210は、供給処理のモードに関する情報を格納するモードメモリMMを有している。
図2は、シリアルメモリ300の動作を示すタイミングチャートである。このタイミングチャートは、基本的なリードを示している。まず、チップセレクト信号/Sがアサートされる。ここで、「信号をアサートする」とは、その信号をアクティブな状態に切り換えることを意味している。通常は、正論理の信号は、アサートによって、LレベルからHレベルに切り換えられ、負論理の信号は、アサートによって、HレベルからLレベルに切り換えられる。また、「信号をネゲートする」とは、アサートとは逆に、信号をインアクティブな状態に切り換えることを意味している。本実施例では、アサートによってチップセレクト信号/Sが、HレベルからLレベルに切り替えられる。
チップセレクト信号/Sのアサートに続いて、入力データ信号Dを利用して、リードコマンドとアドレスとが入力される。図2の例では、リードコマンドは8ビットで表されており、その値は「03h(hは16進法を意味している)」である。また、アドレスは24ビットで表されている。まず、リードコマンドが1ビットずつ入力され、続けて、アドレスが1ビットずつ入力される。これらのデータはクロック信号Cに同期して入力される。なお、このアドレスは、特許請求の範囲の「対象アドレス」に相当する。
アドレス入力の完了に続けて、出力データ信号Qを利用してデータが出力される。まず、上述の対象アドレスのデータ(第1データ)が出力される。図2の例では、1つのアドレスに対応付けられるデータは、16ビットで表されている。16ビットのデータは、クロック信号Cに同期して1ビットずつ出力される。第1データに続けて第2データが出力される。第2データは、第1データの次のアドレスのデータである。さらに、第2データに続けて第3データが出力される。第3データは、第2データの次のアドレスのデータである。このように、シリアルメモリ300は、クロック信号Cに同期して、アドレスを1つずつ増加させながら、データをシーケンシャルに出力する。
リードコマンドは、チップセレクト信号/Sのネゲートによって終了する(図示省略)。また、本実施例では、このネゲートによるリードコマンドの終了は、任意のタイミングで実行可能である。
新たなリードコマンドを実行するためには、チップセレクト信号/Sのアサートから始まる上述の手順が繰り返される。対象アドレスは任意に設定され得るので、任意のアドレスのデータを読み出すことができる。
図3は、シーケンシャルモードによる供給処理を示すタイミングチャートである。このタイミングチャートは、メモリコントローラ200による送信と受信とのタイミングを示している。このタイミングチャートには、信号/RD、/WAIT、AD、DATA、/S、C、D、Qが示されている。この例では、3つのリード要求Ra、Rb、Rcがこの順番にメモリコントローラ200によって受信されている。後述するように、これらのリード要求Ra、Rb、Rcでは、アドレスが1ずつインクリメントされている。
まず、CPU700(図1)は、バス500を介して第1リード要求Raをメモリコントローラ200に送信する。具体的には、CPU700は、リード要求信号/RDをアサートする(タイミングTa)。この際、CPU700は、アドレス信号ADを利用して、アドレスを指定する(第1アドレスADa)。このアドレスは、特許請求の範囲の「要求アドレス」に相当する。
なお、アドレスを表す符号に添えられた括弧内の数字は、同じタイミングチャート内の他のアドレスに対する相対的なアドレスを表している。例えば、後述する第3アドレスADc(2)は、第1アドレスADa(0)に「2」を加えたアドレスを示している。このタイミングチャートでは、同様の数字が、データを表す符号(Da、Db、Dc)にも添えられている。これらは、後述する他のタイミングチャートについても同様である。
第1リード要求Raに応答して、モジュールコントローラ210は、ウェイト信号/WAITとチップセレクト信号/Sとをアサートする(タイミングTb)。ウェイト信号/WAITのアサートによって、CPU700は、処理の進行を中断する。
次に、モジュールコントローラ210は、入力データ信号Dを利用して、リードコマンド(03h)とアドレス(ADa)とを、シリアルメモリ300に供給する(タイミングTb〜Tc)。シリアルメモリ300に供給されるアドレスは、CPU700によって指定された要求アドレスと同じである。
アドレス供給の完了に続いて、シリアルメモリ300は、出力データ信号Qを利用して、第1アドレスADaの第1データDaを1ビットずつ出力する(タイミングTc〜Td)。
第1データDaの出力が完了したことに応答して、モジュールコントローラ210は、ウェイト信号/WAITをネゲートし、そして、データ信号DATAを利用して第1データDaをCPU700に供給する(タイミングTd)。CPU700は、ウェイト信号/WAITがネゲートされたことに応答して、データ信号DATAによって表された第1データDaを取得する。
また、モジュールコントローラ210は、第1データDaの出力が完了したことに応答して、クロック信号Cの供給を停止する(タイミングTd)。チップセレクト信号/Sは、ネゲートされること無くアサートされたまま維持される。これらの結果、シリアルメモリ300の動作は、次のアドレスのデータを出力可能な状態で、停止する。
その後、CPU700は、任意のタイミングで次の第2リード要求Rbをメモリコントローラ200に送信する(タイミングTe)。図3の例では、第2リード要求Rbで指定される第2アドレスADbは、第1アドレスADaの次のアドレスである。このように、前回のリードの次のアドレスのデータをリードすることは、しばしば、行われる。例えば、プログラムコードがメモリからリードされる場合や、画像データのような大きなサイズのデータがメモリからリードされる場合がある。
第2リード要求Rbに応答して、モジュールコントローラ210は、ウェイト信号/WAITをアサートし、クロック信号Cの供給を再開する(タイミングTf)。クロック信号Cが供給に応答して、シリアルメモリ300は、次のアドレス(ADb)の第2データDbを1ビットずつ出力する(タイミングTf〜Tg)。
第2データDbの出力完了に応答する処理は、第1データDaの出力完了に応答する処理と同じである。その結果、CPU700は、データ信号DATAによって表された第2データDbを取得し、シリアルメモリ300の動作は、次のアドレスのデータを出力可能な状態で、停止する。
以後、モジュールコントローラ210は、リードコマンドとアドレスとをシリアルメモリ300に供給せずに、クロック信号Cの供給再開と停止とを繰り返す。図3の例では、第2リード要求Rbに対応する第2データDbと同様に、次の第3リード要求Rcに対応する第3データDcが供給される。このように、シーケンシャルモードでは、最初にリードコマンドとアドレスとがシリアルメモリ300に供給された後は、リードコマンドとアドレスとはシリアルメモリ300には供給されない。図3の例では、第1リード要求Raが、シーケンシャルモードにおける最初のリード要求である。
図4は、供給処理の比較例を示すタイミングチャートである。この比較例では、モジュールコントローラ210は、任意のアドレスに対応するために、アドレスを指定するリード要求を受信する毎に、リードコマンドとアドレスとをシリアルメモリ300に供給する。
メモリコントローラ200による第1リード要求Raの受信から、シリアルメモリ300による第1データDaの出力の完了までの処理は、図3のシーケンシャルモードと同じである(タイミングTa〜Td)。
次に、第1データDaの出力が完了したことに応答して、モジュールコントローラ210は、ウェイト信号/WAITをネゲートする。そして、データ信号DATAを利用して第1データDaをCPU700に供給する(タイミングTd)。さらに、モジュールコントローラ210は、チップセレクト信号/Sをネゲートすることによって、リードコマンドを終了する。
次の第2リード要求Rbを受信した場合には、モジュールコントローラ210は、第1リード要求Raを受信した場合と同様に、供給処理を実行する。すなわち、リードコマンド(03h)とアドレス(ADb)とがシリアルメモリ300に供給され、そして、シリアルメモリ300から出力されたデータがCPU700に供給される。
この比較例では、モジュールコントローラ210は、アドレスを指定するリード要求を受信する毎に、リードコマンド(03h)とアドレスとをシリアルメモリ300に供給する。一方、図3に示すシーケンシャルモードでは、モジュールコントローラ210は、リードコマンドとアドレスとをシリアルメモリ300に供給せずに、クロック信号Cを制御することによって要求アドレスのデータをシリアルメモリ300から取得する。その結果、シーケンシャルモードでは、リード要求を受信してから、要求されたアドレスのデータをCPU700に供給するまでの時間が、短縮される。その結果、シリアルメモリ300に格納されたデータを素早く利用することができる。
具体的には、図3に示すシーケンシャルモードでは、1回のリード要求に関して、リードコマンド(8ビット)とアドレス(24ビット)とのための32クロックの時間が短縮される。2回目以降のリード要求に関しては、1回のリード要求のためのウェイト時間は16クロックである(例えば、タイミングTf〜Tg)。一方、図4の比較例では、1回のリード要求のためのウェイト時間は、少なくとも48クロックである(例えば、タイミングTe2〜Tg)。このように、シーケンシャルモードでは、ウェイト時間を大幅に短縮することができる。また、連続する複数のアドレスから1つずつシーケンシャルにリードされるデータは、シーケンシャルモードに適している。なお、比較例でのウェイト時間は、チップセレクト信号/Sのアサートからリードコマンド(03h)の供給開始までに要する時間に応じて変化し得る。この時間は、シリアルメモリ300の設計に応じて予め決まっている。
図5は、シーケンシャルモードで、不連続なアドレスのリード要求を受信した場合の処理を示すタイミングチャートである。リード要求で指定されたアドレスが、前回のリード要求で指定されたアドレスの次のアドレスとは異なっている場合には、クロック供給を再開したとしても、直ぐには要求アドレスのデータがシリアルメモリ300から出力されない。そこで、モジュールコントローラ210は、再度、リードコマンドとアドレスとをシリアルメモリ300に供給する。
図5の例では、第2アドレスADbが第1アドレスADaの次のアドレスとは異なっている。そこで、モジュールコントローラ210は、第2リード要求Rbに応答して、ウェイト信号/WAITをアサートし、そして、チップセレクト信号/Sをネゲートする。その結果、リードコマンドは終了する(タイミングTe)。その後、モジュールコントローラ210は、チップセレクト信号/Sをアサートする(タイミングTf)。チップセレクト信号/Sがインアクティブな状態に維持される時間は、シリアルメモリ300の設計に合わせて予め決まっている(タイミングTe〜Tf)。この時間は「ディセレクト時間(Deselect time)」とも呼ばれる。
チップセレクト信号/Sがアサートされた後の処理は、図3でチップセレクト信号/Sがアサートされた後の処理と同様に、実行される。すなわち、リードコマンド(03h)とアドレス(ADb)とがシリアルメモリ300に供給され、シリアルメモリ300から出力されたデータがCPU700に供給される。その後、クロック信号Cの供給が止められる。
以上のように、シーケンシャルモードにおいて不連続なアドレスのリード要求を受信した場合には、チップセレクト信号/Sのネゲートによってリードコマンドが終了する。その後、チップセレクト信号/Sが再びアサートされ、シリアルメモリ300に対するリードコマンドとアドレスとの供給によって、新たなリードコマンドが開始する。その結果、適切なデータの供給が可能である。
図6は、ランダムモードによる供給処理を示すタイミングチャートである。ランダムモードは、要求アドレスが任意に設定された複数のリード要求が続けて受信される場合に特化したモードである。
第1リード要求Raの受信から、この第1リード要求Raに対応する第1データDaの出力完了までの処理は、図3に示すシーケンシャルモードと同じである(タイミングTa〜Td)。第1データDaの出力が完了したことに応答して、モジュールコントローラ210は、ウェイト信号/WAITをネゲートし、そして、データ信号DATAを利用して第1データDaをCPU700に供給する(タイミングTd)。次に、モジュールコントローラ210は、チップセレクト信号/Sをネゲートすることによって、リードコマンドを終了する(タイミングTe)。
次に、モジュールコントローラ210は、次のリード要求の受信に先立って、チップセレクト信号/Sをアサートする(タイミングTf)。チップセレクト信号/Sのアサートに続いて、モジュールコントローラ210は、リードコマンド(03h)をシリアルメモリ300に供給する(タイミングTg〜Th)。
リードコマンド(03h)の供給が完了したことに応答して、モジュールコントローラ210は、クロック信号Cの供給を停止する(タイミングTh)。ただし、チップセレクト信号/Sはアクティブな状態に維持される。これらの結果、シリアルメモリ300の動作は、アドレスを受信可能な状態で、停止する。
その後、CPU700は、任意のタイミングで次の第2リード要求Rbをメモリコントローラ200に送信する(タイミングTi)。この第2リード要求Rbで指定されるアドレスは、1つ前のリード要求のアドレス(第1アドレスADa)の次のアドレスに限らず、任意に設定され得る(図6の例では、第1アドレスADaから12だけ離れたアドレスが採用されている)。このように、任意のアドレスのデータをリードすることは、しばしば、行われる。例えば、メモリに格納されたルックアップテーブルから特定のデータをリードする場合やメモリに格納された画像データの画素値の特定の色成分のみをリードする場合がある。
第2リード要求Rbに応答して、モジュールコントローラ210は、ウェイト信号/WAITをアサートし、クロック信号Cの供給を再開し、入力データ信号Dを利用して第2アドレスADbを供給する(タイミングTj)。第2アドレスADbの供給に応答して、シリアルメモリ300は、そのアドレスADbに対応する第2データDbを1ビットずつ出力する(タイミングTk〜Tl)。
第2データDbの出力完了に応答する処理は、第1データDaの出力完了に応答する処理と同じである。その結果、CPU700はデータ信号DATAによって表された第2データDbを取得し、シリアルメモリ300の動作は、新たなアドレスを受信可能な状態で、停止する。
以後、モジュールコントローラ210は、要求されたデータのCPU700への供給が完了する毎に、チップセレクト信号/Sのネゲート−アサートを実行し、そして、新たなリードコマンドを事前にシリアルメモリ300に供給し、クロック信号Cの供給を停止する。その結果、図4に示す比較例と比べて、ランダムモードでは、リード要求を受信してから、要求されたアドレスのデータを供給するまでの時間が、短縮される。その結果、シリアルメモリ300に格納されたデータを素早く利用することができる。
具体的には、図6に示すランダムモードでは、1回のリード要求に関して、リードコマンド(8ビット)のための8クロック以上の時間が短縮される。2回目以降のリード要求に関しては、1回のリード要求のためのウェイト時間は、40クロックである(24クロック(アドレス)+16クロック(データ)。例えば、タイミングTj〜Tl)。一方、図4の比較例では、1回のリード要求のためのウェイト時間は、少なくとも48クロックである(例えば、タイミングTe2〜Tg)。このようにランダムにリードされるデータは、ランダムモードに適している。
なお、シリアルメモリ300へのリードコマンド(03h)の供給の完了前に、次のリード要求を受信した場合には、モジュールコントローラ210は、以下のように処理を実行する。すなわち、モジュールコントローラ210は、ウェイト信号/WAITをアサートし、そして、クロック信号Cを止めずに、リードコマンドに続けてアドレスをシリアルメモリ300に供給する。
図7は、メモリコントロール処理の手順を示すフローチャートである。第1実施例では、モジュールコントローラ210は、この手順に従って、シーケンシャルモードとランダムモードとを選択的に利用する。
最初のステップS100では、モジュールコントローラ210は、CPU700からモード選択要求を受信したか否かを判断する。このような要求の形式としては、任意の形式を採用可能である。第1実施例では、所定のアドレスに対するライト要求が、モード選択要求として利用される。書き込むべきデータとしては、シーケンシャルモードとランダムモードとのいずれか一方を示すデータが、CPU700によって供給される。このようなモード選択要求は、ライト要求信号(図示せず)と、アドレス信号ADと、データ信号DATAと、を利用して、CPU700からバス500を介してメモリコントローラ200へ送信される。
モード選択要求を受信した場合には、モジュールコントローラ210は、次のステップS110で、モードメモリMM(「レジスタMM」とも呼ぶ)に、選択されたモードを示すデータを格納する。
次のステップS120では、モジュールコントローラ210は、CPU700からリード要求を受信したか否かを判断する。リード要求を受信した場合には、モジュールコントローラ210は、次のステップS130で、レジスタMMに格納されたレジスタデータを参照する。
レジスタデータがシーケンシャルモードを示している場合には、モジュールコントローラ210は、ステップS140で、シーケンシャルモードによる供給処理を実行する。前回のリード要求に対してシーケンシャルモードが選択された場合には、モジュールコントローラ210は、図3で説明したように、クロック信号Cを制御することによって、データを取得する。前回のリード要求に対してランダムモードが選択された場合には、シリアルメモリ300の動作は、アドレスを受信可能な状態で、停止している。そこで、モジュールコントローラ210は、クロック信号Cの供給を再開し、アドレスをシリアルメモリ300に供給し、そして、シリアルメモリ300からデータを取得する。いずれの場合も、シリアルメモリ300からのデータ取得後の処理は、図3で説明した処理と同様に実行される。
レジスタデータがランダムモードを示している場合には、モジュールコントローラ210は、ステップS150で、ランダムモードによる供給処理を実行する。前回のリード要求に対してランダムモードが選択された場合には、モジュールコントローラ210は、図6で説明したように、アドレスを供給することによってデータを取得する。前回のリード要求に対してシーケンシャルモードが選択された場合には、モジュールコントローラ210は、チップセレクト信号/Sのネゲート−アサートを実行し、そして、リードコマンドとアドレスとをシリアルメモリ300に供給することによってデータを取得する。いずれの場合も、シリアルメモリ300からのデータ取得後の処理は、図6で説明した処理と同様に実行される。
供給処理が完了した後、モジュールコントローラ210は、再び、ステップS100に戻る。そして、図7の処理を繰り返し実行する。
以上のように、図7のメモリコントロール処理では、モジュールコントローラ210は、CPU700の指示に従って、供給処理のモードを選択する。その結果、CPU700による処理の内容に合わせて、メモリに格納されたデータを素早く利用することができる。ここで、CPU700は、以下のように供給処理のモードを指定することが好ましい。すなわち、連続する複数のアドレスのデータを1つずつシーケンシャルにリードする場合には、シーケンシャルモードを指定し、そして、不連続なアドレスのデータをリードする場合には、ランダムモードを指定することが好ましい。こうすれば、CPU700による処理内容に合わせて、メモリコントローラ200によるリード要求の受信からデータの供給まで時間を短縮することができる。CPU700にこのようなモード選択をさせる方法としては、任意の方法を採用可能である。例えば、CPU700によって実行されるプログラムを、予め、このような選択を実行するように構成しておけばよい。
ところで、シリアルフラッシュメモリ300のような比較的遅い不揮発性メモリにプログラムコードを格納する場合には、以下のような技術(「コードシャドウ」とも呼ばれる)が、しばしば利用される。コードシャドウとは、より高速なRAMにプログラムの全体をコピーし、コピー完了の後にRAMに格納されたプログラムコードをCPU700が実行する技術である。一方、本実施例では、シリアルメモリ300に格納されたデータを素早く利用することが可能である。その結果、このようなRAM(コードシャドウ)を利用せずにCPU700がシリアルメモリ300に格納されたプログラムコードを直接に実行する場合であっても、CPU700による処理速度の低下を抑制することができる。ただし、コードシャドウを利用してもよい。この場合も、データのコピーを高速に行うことができる。
B.第2実施例:
図8は、メモリコントロール処理の別の例の手順を示すフローチャートである。図7に示すメモリコントロール処理との差違は、ステップS100、S110が省略され、そして、ステップS130がステップS132に置換されている点だけである。他のステップの処理は、図7と同じである。このメモリコントロール処理では、モジュールコントローラ210は、CPU700からの指示の代わりに、要求アドレスに従って、供給処理のモードを選択する。
ステップS132では、モジュールコントローラ210は、要求アドレスが所定のシーケンシャル範囲内か否かを判断する。要求アドレスがシーケンシャル範囲内である場合には、モジュールコントローラ210は、ステップS140に移行し、シーケンシャルモードによる供給処理を実行する。一方、要求アドレスがシーケンシャル範囲外である場合には、モジュールコントローラ210は、ステップS150に移行し、ランダムモードによる供給処理を実行する。
図9は、シーケンシャル範囲の例を示す概略図である。図9の例では、要求アドレスの範囲は、000000h〜FFFFFFhである。そして、000000h〜00FFFFhの範囲がシーケンシャル範囲に設定されている。他のアドレスには、ランダムモードが対応付けられている(以下、「ランダム範囲」とも呼ぶ)。
また、図9には、アドレス範囲とデータの種類との一例が示されている。シーケンシャル範囲には、プログラムコードが格納され、ランダム範囲には、ルックアップテーブルが格納されている。このデータ種類の例は、データ処理装置900がプリンタに組み込まれた場合の例を示している。例えば、CPU700は、シーケンシャル範囲に格納されたプログラムを実行することによって、データ処理装置900に入力された入力画像データから印刷データを生成する。CPU700がメモリモジュール100からプログラムを取得する場合には、要求アドレスがシーケンシャル範囲内であるので、シーケンシャルモードが選択される。その結果、速やかにメモリモジュール100からCPU700へデータ(プログラムコード)を供給することができる。
また、印刷データは、入力画像データの画素値(「入力画素値」とも呼ぶ)からインク量への変換によって、生成される。ランダム範囲に格納されたルックアップテーブルは、入力画素値とインク量との対応関係を表している。CPU700は、入力画素値に対応付けられたインク量を、ルックアップテーブルから取得する。この際、要求アドレスがシーケンシャル範囲外(すなわち、ランダム範囲内)であるので、ランダムモードが選択される。その結果、ルックアップテーブルの中の入力画素値に対応する特定のデータ(インク量)を、速やかにメモリモジュール100からCPU700へ供給することができる。
以上のように、図8のメモリコントロール処理では、モジュールコントローラ210は、要求アドレスに従って、供給処理のモードを選択する。そこで、上述のように、シーケンシャルモードに適したデータ(例えば、プログラム)をシーケンシャル範囲に格納し、ランダムモードに適したデータ(例えば、ルックアップテーブル)をランダム範囲に格納することが好ましい。こうすれば、それぞれのデータを、速やかにメモリモジュール100からCPU700へ供給することができる。
なお、シーケンシャル範囲とランダム範囲とを特定する情報は、予め、モジュールコントローラ210のモードメモリMMに格納されている。このような情報の形式としては、アドレスの範囲を特定可能な任意の形式を採用可能である。例えば、開始アドレスと終了アドレスとの組み合わせによって各アドレス範囲を特定してもよい。また、開始アドレスと範囲サイズとの組み合わせによって各アドレス範囲を特定してもよい。また、シーケンシャル範囲とランダム範囲との境界を示すアドレスによって、各アドレス範囲を特定してもよい。
また、図9の例では、シーケンシャル範囲が1つの連続な範囲であるが、互いに離れた複数の範囲の全体をシーケンシャル範囲として利用してもよい。これは、ランダム範囲についても同様である。
ところで、第2実施例のメモリコントロール処理を採用する場合には、シーケンシャル範囲のリードを続けて行う第1ステージと、ランダム範囲のリードを続けて行う第2ステージとを、利用してもよい。例えば、CPU700は、以下のような2つのステージを利用することによって、メモリモジュール100にアクセスすることが可能である。第1ステージでは、プログラムコードの全体(あるいは一部)をメモリモジュール100から図示しないRAMにコピーする。第2ステージでは、そのRAMに格納されたプログラムコードに従って、プログラムを実行する。この第2ステージでは、ランダム範囲のルックアップテーブルを参照することによって、入力画素値からインク量への変換を行う。これらによれば、シーケンシャルモードとランダムモードとの間の切り換えに起因してデータ供給が遅れることを抑制できる。
C.第3実施例:
図10は、データ処理装置の別の例を示す概略図である。図1に示すデータ処理装置900との差違は、2つある。第1の差違は、CPU700aが、プリフェッチモジュール710と、実行モジュール720とを有している点である。第2の差違は、モジュールコントローラ210が、プリフェッチモジュール710(判断モジュール712)の判断結果に従って、供給処理のモードを選択する点である。なお、図10のデータ処理装置900aでは、メモリモジュール100の構成は図1に示すメモリモジュール100と同じであり、メモリコントローラ200のモジュールコントローラ210以外の要素は図示が省略されている。
実行モジュール720は、プログラムコードに従った処理を実行する。本実施例では、プログラムコードは、メモリモジュール100(シリアルメモリ300)に格納されている。プリフェッチモジュール710は、実行モジュール720による実行に先立って、プログラムコードをメモリモジュール100から取得する。プログラムコードは、上述の各実施例と同様に、バス500を介してメモリモジュール100へリード要求を送信することによって、取得される。
プリフェッチモジュール710は、判断モジュール712を有している。判断モジュール712は、いわゆる分岐予測を実行する。具体的には、判断モジュール712は、プリフェッチアドレス(新たに取得すべきプログラムコードに対応する要求アドレス)を、次連続アドレスに設定するか否かを判断する(「次連続アドレス」とは、最後に取得したプログラムコードに対応する要求アドレスの次のアドレスを意味している)。換言すれば、判断モジュール712は、次連続アドレスのプログラムコードを取得すべきか(「not taken」とも呼ばれる)、あるいは、分岐先のプログラムコードを取得すべきか(「taken」とも呼ばれる)、を判断する。最後に取得されたプログラムコードが条件判断による分岐を伴わないコマンドである場合には、次連続アドレスから取得すべきと判断される。プリフェッチモジュール710は、判断結果が「not taken」である場合には、プリフェッチアドレス(要求アドレス)を次連続アドレスに設定する。判断結果が「taken」である場合には、プリフェッチアドレスを分岐先アドレスに設定する。なお、このような分岐予測の方法としては、周知の種々の方法を採用可能である。
この判断結果を示す情報は、バス500を介さずに直接、判断モジュール712からメモリコントローラ200に供給される。ただし、バス500を介して判断結果がメモリコントローラ200に供給されてもよい。
図11は、第3実施例におけるメモリコントロール処理の手順を示すフローチャートである。図8に示すメモリコントロール処理との差違は、ステップS132がステップS134に置換されている点だけである。他のステップの処理は、図8と同じである。このメモリコントロール処理では、モジュールコントローラ210は、分岐予測の判断結果に従って、供給処理のモードを選択する。
ステップS134では、判断モジュール712から供給された判断結果が、次連続アドレスからの取得を示しているか否かを、モジュールコントローラ210が判断する。判断結果が次連続アドレスからの取得を示す場合には、モジュールコントローラ210は、ステップS140に移行し、シーケンシャルモードによる供給処理を実行する。一方、判断結果が次連続アドレスからの取得を示していない場合には、モジュールコントローラ210は、ステップS150に移行し、ランダムモードによる供給処理を実行する。
以上のように、図11のメモリコントロール処理では、モジュールコントローラ210は、CPU700a(判断モジュール712)の判断結果(分岐予測結果)に従って、供給処理のモードを選択する。その結果、次連続アドレスに対するリード要求が続けて発行される場合には、シーケンシャルモードによる素早いデータ供給が可能である。そして、分岐先アドレス(すなわち、不連続なアドレス)に対するリード要求が続けて発行される場合には、ランダムモードによる素早いデータ供給が可能である。なお、図11のメモリコントロール処理では、モードメモリMMを利用せずに済む。従って、モードメモリMMを省略してもよい。
D.第4実施例:
図12は、データ処理装置の別の例を示す概略図である。図1に示すデータ処理装置900との差違は、2点ある。第1の差違は、メモリモジュール100bのメモリコントローラ200bに、バッファメモリ260とセレクタ270とが追加されている点である。第2の差違は、出力モジュール250bが、2つのアドレスメモリTAG0、TAG1を有している点である。各アドレスメモリTAG0、TAG1は、それぞれ、1つのアドレスを表すデータを格納する。データ処理装置900bの他の構成は、図1に示すデータ処理装置900と同じである。
バッファメモリ260は、2つのバッファ領域BF0、BF1を有している。各バッファ領域BF0、BF1は、それぞれ、1アドレスのデータを格納する。また、バッファメモリ260は、シリアルメモリ300から出力されたデータを、出力モジュール250b(すなわち、モジュールコントローラ210)によって選択された一方のバッファ領域に格納する。セレクタ270は、出力モジュール250b(すなわち、モジュールコントローラ210)によって選択された一方のバッファ領域のデータを、データ信号DATAを利用してバス500に供給する。第0アドレスメモリTAG0は、第0バッファ領域BF0に格納されたデータのアドレスを格納する。第1アドレスメモリTAG1は、第1バッファ領域BF1に格納されたデータのアドレスを格納する。
図13は、シーケンシャルモードによる供給処理を示すタイミングチャートである。このタイミングチャートでは、図3の例と同じ3つのリード要求Ra、Rb、Rcが受信される。ただし、図13の手順では、図3の手順とは異なり、2つのバッファ領域BF0、BF1を利用したデータの先読みが行われる。このタイミングチャートには、バッファ領域BF0、BF1に格納されるデータも示されている。
第1リード要求Raの受信から、この第1リード要求Raに対応する第1データDaの出力完了までの処理は、図3に示す手順と同様に実行される(タイミングTa〜Td)。なお、シリアルメモリ300から出力された第1データDaは、第0バッファ領域BF0に格納される。そして、第0アドレスメモリTAG0には、第1アドレスADaを示すデータが格納される(図示せず)。
第1データDaの出力が完了したことに応答して、モジュールコントローラ210は、ウェイト信号/WAITをネゲートし、そして、データ信号DATAを利用して第1データDaをCPU700に供給する(タイミングTd)。この時点では、第1バッファ領域BF1が空いている。そこで、モジュールコントローラ210は、クロック信号Cを停止せずに、次のアドレスの第2データDbを取得する。取得された第2データDbは、第1バッファ領域BF1に格納される。第1アドレスメモリTAG1には、第2アドレスADbを示すデータが格納される(図示せず)。
第2データDbの出力が完了したことに応答して、モジュールコントローラ210は、クロック信号Cの供給を停止する(タイミングTe)。チップセレクト信号/Sは、ネゲートされること無くアサートされたまま維持される。これらの結果、シリアルメモリ300の動作は、第1アドレスADa(0)に「2」を加えた第3アドレスADc(2)のデータ(第3データDc(2))を出力可能な状態で、停止する。
その後、CPU700は、任意のタイミングで次の第2リード要求Rbをメモリコントローラ200bに送信する(タイミングTf)。この時点で、第2データDbは既に第1バッファ領域BF1に格納されている。そこで、モジュールコントローラ210は、第2リード要求Rbに応答して、ウェイト信号/WAITをアサートせずに、データ信号DATAを利用して第2データDbをCPU700に供給する(タイミングTg)。なお、出力モジュール250bは、アドレスメモリTAG0、TAG1を参照することによって、2つのバッファ領域BF0、BF1の内の要求されたデータを格納するバッファ領域を特定する。この特定は、モジュールコントローラ210によって行われても良い。
第2データDbの供給は、前の第1データDaを格納する第0バッファ領域BF0が空いていることを意味する。そこで、モジュールコントローラ210は、第2リード要求Rbに応答して、クロック信号Cの供給を開始する(タイミングTg)。クロック信号Cの供給に応答して、シリアルメモリ300は、次のアドレス(ADc)の第3データDcを出力する(タイミングTg〜Th)。出力された第3データDcは、第0バッファ領域BF0に格納される。第0アドレスメモリTAG0には、第3アドレスADcを示すデータが格納される(図示省略)。
第3データDcの出力が完了したことに応答して、モジュールコントローラ210は、クロック信号Cの供給を停止する(タイミングTh)。シリアルメモリ300の動作は、第2アドレスADb(1)に「2」を加えた第4アドレスのデータを出力可能な状態で、停止する。
以後、モジュールコントローラ210は、クロック信号Cの供給再開と停止とを繰り返すことによって、将来にリード要求されると推定されるデータを事前にシリアルメモリ300から取得し、取得したデータをバッファメモリ260に格納する。そして、次のリード要求に応答して、バッファメモリ260に格納されたデータをCPU700に供給する。これらの結果、リード要求に応答して、CPU700を待たせずに、要求されたアドレスのデータをCPU700に供給することが可能となる。図3の例では、第2リード要求Rbに対応する第2データDbと同様に、第3リード要求Rcに対応する第3データDcが供給される。
図14は、シーケンシャルモードで、リード要求が早いタイミングで受信された場合の処理を示すタイミングチャートである。図14の例では、第1リード要求Raに対応する第1データDaは、図13で説明したシーケンシャルモードの手順に従って、既に、第0バッファ領域BF0に格納されている。そして、第1リード要求Raに応答して、第0バッファ領域BF0から第1データDaがCPU700へ供給される(タイミングTa)。また、クロック信号Cの供給が再開されることによって、シリアルメモリ300からの次の第2データDbの出力が開始される(タイミングTa)。
図14の例では、次の第2リード要求Rbが、第2データDbの出力完了(タイミングTd)よりも早いタイミングTbで、受信されている。この場合には、モジュールコントローラ210は、第2リード要求Rbに応答してウェイト信号/WAITをアサートする(タイミングTc)。そして、モジュールコントローラ210は、要求された第2データDbの出力が完了したことに応答して、ウェイト信号/WAITをネゲートし、そして、データ信号DATAを利用して第2データDbをCPU700に供給する(タイミングTd)。
第2データDbの供給の時点で第0バッファ領域BF0が空いているので、モジュールコントローラ210は、クロック信号Cを停止せずに、次のアドレスの第3データDcを取得する。第3データDcの出力が完了したことに応答して、モジュールコントローラ210は、クロック信号Cの供給を停止する(タイミングTe)。
以上のように、リード要求が早いタイミングで受信された場合には、モジュールコントローラ210は、要求されたデータの供給が可能となるまで、ウェイト信号/WAITをアサートする。その結果、適切なデータをCPU700に供給することができる。
図15は、シーケンシャルモードで、不連続なアドレスのリード要求が受信された場合の処理を示すタイミングチャートである。このタイミングチャートでは、図5の例と同じ2つのリード要求Ra、Rbが受信されている。第1リード要求Raに応答する処理は、図13の例と同様に実行される(タイミングTa〜Tc)。
次の第2リード要求Rbでは、第1アドレスADa(0)の次のアドレスとは異なるアドレスADb(12)が指定されている。そこで、モジュールコントローラ210は、第2リード要求Rbに応答して、ウェイト信号/WAITをアサートし、そして、チップセレクト信号/Sをネゲートする(タイミングTe)。その結果、リードコマンドが終了する。その後、モジュールコントローラ210は、チップセレクト信号/Sをアサートする(タイミングTf)。
チップセレクト信号/Sがアサートされた後の処理は、図13でチップセレクト信号/Sがアサートされた後の処理と同様に実行される。図15の例では、チップセレクト信号/Sがアサートされた後、モジュールコントローラ210は、クロック信号Cの供給を再開し、リードコマンド(03h)と第2アドレスADbとをシリアルメモリ300に供給する。そして、シリアルメモリ300からの第2データDbの出力が完了したことに応答して、モジュールコントローラ210は、第2データDbをCPU700に供給する(タイミングTh)。また、モジュールコントローラ210は、クロック信号Cの供給を続けることによって、次のアドレスの第3データDcを取得する(タイミングTh〜Ti)。第3データDcの取得が完了したことに応答して、モジュールコントローラ210は、クロック信号Cの供給を停止する(タイミングTi)。
以上のように、シーケンシャルモードにおいて不連続なアドレスのリード要求が受信された場合には、再度、リードコマンドと要求アドレスとがシリアルメモリ300に供給される。その結果、適切なデータの供給が可能である。
また、シリアルメモリ300からのデータ出力の途中で、不連続なアドレスのリード要求が受信される場合もあり得る。この場合には、モジュールコントローラ210は、そのリード要求に応答してチップセレクト信号/Sをネゲートすることによって、そのデータ出力を中断する。そして、モジュールコントローラ210は、新たなリードコマンドを開始することによって、要求されたデータを取得する。
なお、図12に示すメモリコントローラ200bは、ランダムモードによる供給処理として、図6に示す処理と同様の処理を実行する。そして、このメモリコントローラ200bによって実行されるメモリコントロール処理としては、上述の各実施例のメモリコントロール処理(図7、図8、図11)の中の任意の処理を採用可能である。
E.変形例:
なお、上記各実施例における構成要素の中の、独立クレームでクレームされた要素以外の要素は、付加的な要素であり、適宜省略可能である。また、この発明は上記の実施例や実施形態に限られるものではなく、その要旨を逸脱しない範囲において種々の態様において実施することが可能であり、例えば次のような変形も可能である。
変形例1:
上述の各実施例において、CPU700、700aのデータ長と、シリアルメモリ300のデータ長とが、互いに異なっていても良い(ここで、データ長とは、1つのアドレスに対応付けられたデータのサイズを意味している)。この場合には、要求アドレスと対象アドレスとの対応関係を予め決定し、メモリコントローラ200、200bは、その対応関係に従って、要求アドレスに対応付けられた対象アドレスを特定すればよい。例えば、CPU700、700aのデータ長が、シリアルメモリ300のデータ長の2倍である場合には、1つの要求アドレスに2つの対象アドレスが対応付けられる。そして、メモリコントローラ200、200bは、1つのリード要求に応答して、2つの対象アドレスのデータを、CPU700、700aに供給する。
また、CPU700、700aのデータ長と、シリアルメモリ300のデータ長とが、同じ場合であっても、要求アドレスに対応付けられた対象アドレスが、その要求アドレスからシフトしていてもよい。
いずれの場合も、要求アドレスをシーケンシャルに辿ったときに、その要求アドレスに対応付けられた対象アドレスもシーケンシャルに辿られるように、対応関係を決定することが好ましい。これにより、連続な複数の要求アドレスには、同じ順番で連続な複数の対象アドレスが対応付けられる。その結果、メモリコントローラ200、200bは、シーケンシャルモードにおいて、要求アドレスに対応する適切なデータをシリアルメモリ300から取得することができる。
変形例2:
上述の各実施例において、供給処理の実行のためのモードをシーケンシャルモードとランダムモードとから選択する選択処理としては、図7、図8、図11に示した処理に限らず、任意の処理を採用可能である。例えば、モジュールコントローラ210が、ユーザの指示に従って供給処理のモードを選択してもよい。具体的には、メモリコントローラ200に指示信号線を接続すればよい。そして、その指示信号線がHレベルに設定された場合にはシーケンシャルモードが選択され、その信号線がLレベルに設定された場合にはランダムモードが選択されてもよい。
また、上述の各実施例において、モジュールコントローラ210は、選択処理の複数のモードを有していても良い。例えば、モジュールコントローラ210は、図7に示す第1選択モードと、図8に示す第2選択モードと、図11に示す第3選択モードとの中から任意に選択された複数の選択モードを含む複数の選択モードを、有してもよい。ここで、複数の選択モードの中から1つを選択する処理としては、任意の処理を採用可能である。例えば、モジュールコントローラ210が、与えられた指示に従って、選択モードを選択してもよい。このような指示としては、ユーザの指示や外部装置からの指示等の任意の指示を採用可能である。
変形例3:
上述の各実施例において、メモリコントローラ200、200bが、シーケンシャルモードとランダムモードとの内のいずれか一方のみの機能を有していても良い。一般には、メモリコントローラ200、200bは、シーケンシャルモードとランダムモードとの少なくとも一方による供給処理を実行可能であればよい。
変形例4:
上述の各実施例のシーケンシャルモードにおいて、クロック信号Cの供給を再開するための条件(以下「再開条件」とも呼ぶ)としては、シリアルメモリ300から出力されるデータをメモリコントローラ200が失わずに受信可能であることを示す任意の条件を採用可能である。例えば、シリアルメモリ300から取得したデータをバス500(より一般的には、外部装置)に直ぐに供給可能であることを採用してもよく、また、バッファメモリが空いたことを採用してもよい。いずれの場合も、モジュールコントローラ210は、所定の再開条件が成立したことに応答して、クロック信号Cの供給を再開すればよい。
変形例5:
上述の各実施例において、メモリコントローラ200、200bによって制御されるメモリとしては、シリアルフラッシュメモリ300に限らず、種々のメモリ(例えば、種々の半導体メモリ)を採用可能である。例えば、出力データ信号Qが複数の信号線で表されていても良い。
一般には、シーケンシャルモードを適用するメモリとしては、リードコマンドと対象アドレスとを受信した後に、クロック信号に同期して対象アドレスからシーケンシャルにデータを出力する任意のメモリを採用可能である。例えば、リードコマンドのための信号線と対象アドレスのための信号線とが互いに異なっていてもよい。また、データの出力順番は、アドレスの昇順に限らず、アドレスの降順であってもよい。この場合には、上述の各実施例において、「次のアドレス」として「1つだけデクリメントされたアドレス」を採用すればよい。
また、ランダムモードを適用するメモリとしては、リードコマンドと対象アドレスとを受信した後に、対象アドレスのデータを出力する任意のメモリを採用可能である。シーケンシャルモードを適用しない場合には、クロック信号に同期して対象アドレスからシーケンシャルにデータを出力する機能を有していないメモリを採用してもよい。また、リードコマンドを受信した後に対象アドレスを受信するメモリを利用する場合には、事前にリードコマンドをメモリに供給するランダムモードの効果が顕著である。
変形例6:
上述の各実施例において、シーケンシャルモードによる供給処理としては、図3、5、13、14、15に示す処理に限らず、種々の処理を採用可能である。また、ランダムモードによる供給処理としては、図6に示す処理に限らず、種々の処理を採用可能である。例えば、モジュールコントローラ210は、メモリコントローラ200、200bの起動後の最初のリードコマンドの供給を、最初のリード要求の受信に先立って、自動的に実行してもよい。また、チップセレクト信号/S無しで動作可能なメモリを利用する場合には、チップセレクト信号/Sの制御を省略してもよい。また、リードコマンドの形式としては、メモリの設計に応じた任意の形式を採用可能である。例えば、所定の1つの信号のアサートがリードコマンドとして扱われてもよい。
変形例7:
図12に示すメモリコントローラ200bにおいて、バッファメモリ260の容量は、任意に設定可能である。例えば、1つのアドレスのデータ量に相当する容量を採用してもよい。この場合には、モジュールコントローラ210は、シーケンシャルモードにおいて、リード要求を受信し、かつ、そのリード要求で要求されたデータのCPU700、700aへの供給が完了したことに応答して、クロック信号の供給を再開すればよい。こうすれば、メモリから取得したデータを失わずに、次のリード要求を受信する前に、次のアドレスのデータをバッファメモリ260に格納することができる。また、3以上のアドレスのデータ量に相当する容量を採用してもよい。
いずれの場合も、モジュールコントローラ210は、シーケンシャルモードによる供給処理として、以下の様な処理を実行することが好ましい。すなわち、シーケンシャルモードによる供給処理における最初のリード要求に応答して、最初のリード要求で指定された要求アドレスから始まる所定のN個(Nは1以上の整数)の連続なアドレスのそれぞれに対応付けられたデータをシリアルメモリ300から取得し、取得したデータをバッファメモリ260に格納し、クロック信号Cの供給を停止する処理と、次に所定のM個(Mは1以上、かつ、N以下の整数)のリード要求を受信したことを含む所定の条件の成立に応答して、クロック信号Cの供給を再開する処理と、を実行することが好ましい。こうすれば、バッファを利用したシーケンシャルモードによる供給処理を適切に開始することができる。例えば、図13の例では、数Nが2に設定されており、数Mが1に設定されている。また、第1リード要求Raが、シーケンシャルモードによる供給処理における最初のリード要求に相当する。そして、所定の条件としては、1つのリード要求を受信したことが採用されている。
なお、数Nは、アドレスの数で表されたバッファメモリ260の容量を示している。例えば、バッファメモリ260が、5つのアドレスのデータ量に相当する容量を有している場合には、数Nは5に設定される。また、数Mは、1以上N以下の任意の整数に設定され得る。そして、クロック信号Cの供給を再開するための所定の条件としては、クロック信号Cの供給停止後にM個のリード要求を受信したことを含む任意の条件を採用可能である。いずれの場合も、シリアルメモリ300から出力されるデータをメモリコントローラ200が失わずに受信可能であるような条件を採用することが好ましい。また、この条件は、最初の再開に限らず、供給停止と供給再開との繰り返しの任意のサイクルにも適用可能である。ただし、サイクル毎に条件が異なっていても良い。また、クロック信号Cの供給再開によって取得されるデータ量、すなわち、供給再開から供給停止までの時間長は、バッファメモリ260が溢れないように予め決定される。このような供給処理は、Nが3以上の値に設定される場合にも、同様に、実行され得る。
変形例8:
上述の各実施例において、データ処理装置の構成としては、図1、図10、図12に示す構成に限らず、種々の構成を採用可能である。例えば、CPU700、700aとメモリコントローラ200、200bとがバス500を介さずに直接に接続されてもよい。
また、供給処理を実行する供給制御モジュールの構成としては、図1や図12に示す構成に限らず、種々の構成を採用可能である。例えば、複数のモジュールの全体が、「供給制御モジュール」として機能してもよい。
また、メモリコントローラ200、200bに対してリード要求を送信する外部装置としては、CPU700、700aに限らず、任意の装置を採用可能である。例えば、予め決定された手順に従ってデータ処理を実行する専用のデータ処理回路を採用してもよい。
変形例9:
上述の各実施例のメモリモジュール100、100bは、任意の装置に適用可能である。例えば、プリンタにおける入力画像データから印刷データを生成するデータ処理装置を採用してもよい。また、プロジェクタにおける入力画像データから表示用画像データを生成するデータ処理装置を採用してもよい。また、デジタルカメラにおける画像データを生成するデータ処理装置を採用してもよい。また、汎用のコンピュータを採用してもよい。
変形例10:
上記各実施例において、ハードウェアによって実現されていた構成の一部をソフトウェアに置き換えるようにしてもよく、逆に、ソフトウェアによって実現されていた構成の一部をハードウェアに置き換えるようにしてもよい。例えば、図1のモジュールコントローラ210の機能を、CPUとメモリとを有するコンピュータにプログラムを実行させることによって実現してもよい。
また、本発明の機能の一部または全部がソフトウェアで実現される場合には、そのソフトウェア(コンピュータプログラム)は、コンピュータ読み取り可能な記録媒体に格納された形で提供することができる。この発明において、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスクやCD−ROMのような携帯型の記録媒体に限らず、各種のRAMやROM等のコンピュータ内の内部記憶装置や、ハードディスク等のコンピュータに固定されている外部記憶装置も含んでいる。