(57)【要約】【課題】  システムの信頼性を低下することなく、半導体メモリのアクセス頻度を減らし、システムの性能を向上する。【解決手段】  データサーチ部は、半導体メモリの記憶領域に保持されるデータよりサイズの小さいライトデータを半導体メモリに書き込むときに、データが書き込まれていない空白の記憶領域を検索する。書き換えレジスタは、空白の記憶領域に対応するデータを保持するための複数の記憶部を有する。ライト制御部は、ライトデータを記憶部に順次に書き込み、書き換えレジスタの最後の記憶部へのライトデータの書き込みに応答して、書き換えレジスタに保持されているデータを対応する記憶領域に書き込む。状態フラグは、ライトデータが書き換えレジスタに書き込まれたときにセットされる。これにより、誤ったデータのアクセスを防止しながら、半導体メモリのアクセス頻度を減らすことができる。【選択図】    図１
2011090504.tif 000002
【特許請求の範囲】
【請求項１】
複数の記憶領域を有する半導体メモリに、前記各記憶領域に保持されるデータのビット数より少ないビット数のライトデータを書き込むときに、前記記憶領域のうちデータが書き込まれていない空白の記憶領域を検索するデータサーチ部と、
前記空白の記憶領域に対応するデータを保持するための複数の記憶部を有する書き換えレジスタと、
前記ライトデータを前記書き換えレジスタの前記記憶部に順次に書き込み、前記書き換えレジスタの最後の記憶部への前記ライトデータの書き込みに応答して、前記書き換えレジスタに保持されているデータを前記半導体メモリの対応する記憶領域に書き込むライト制御部と、
前記ライトデータが前記書き換えレジスタに書き込まれたときにセットされ、前記書き換えレジスタに保持されているデータが、対応する記憶領域に保持されているデータと異なることを示す状態フラグと
を備えていることを特徴とするメモリコントローラ。
【請求項２】
前記書き換えレジスタに前記ライトデータが書き込まれた状態で、前記書き換えレジスタに保持されているデータに対応する記憶領域に対するリード要求を受けたときに、不一致信号を出力するリード制御部を
備えていることを特徴とする請求項１記載のメモリコントローラ。
【請求項３】
前記半導体メモリからのデータの読み出し時にセットされるリード許可フラグを備え、
前記リード制御部は、前記リード許可フラグがセットされた状態で、前記書き換えレジスタに保持されているデータに対応する記憶領域に対するリード要求を受けたときに、前記不一致信号の出力を禁止し、前記半導体メモリからデータを読み出すために、リード要求の前記半導体メモリへの供給を許可すること
を特徴とする請求項１または請求項２記載のメモリコントローラ。
【請求項４】
前記書き換えレジスタに保持されているデータを前記半導体メモリの対応する記憶領域に強制的に書き戻すときにセットされるライトバックフラグを備え、
前記ライト制御部は、前記ライトバックフラグのセットに応答して、前記書き換えレジスタに保持されているデータを前記半導体メモリの対応する記憶領域に書き戻すライトバック動作を実行すること
を特徴とする請求項１ないし請求項３のいずれか１項記載のメモリコントローラ。
【請求項５】
複数の記憶領域を有する半導体メモリに、前記各記憶領域に保持されるデータのビット数より少ないビット数のライトデータを書き込むときに、前記記憶領域のうちデータが書き込まれていない空白の記憶領域を検索し、
前記ライトデータを書き換えレジスタの記憶部に順次に書き込み、前記書き換えレジスタの最後の記憶部への前記ライトデータの書き込みに応答して、前記書き換えレジスタに保持されているデータを前記半導体メモリの対応する記憶領域に書き込み、
前記書き換えレジスタに保持されているデータが、対応する記憶領域に保持されているデータと異なることを示すために、前記ライトデータが前記書き換えレジスタに書き込まれたときに状態フラグをセットすること
を特徴とする半導体メモリの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体メモリの動作を制御するメモリコントローラおよび半導体メモリの制御方法に関する。
【背景技術】
【０００２】
フラッシュメモリ等の半導体メモリは、所定のサイズを有する記憶領域毎にアクセスされる。例えば、記憶領域内の一部のデータを書き換えるとき、記憶領域からレジスタやセンスアンプ等のデータ保持回路に読み出されたデータに書き換えデータが上書きされる。その後、データ保持回路内のデータは、記憶領域に書き戻される(例えば、特許文献１−３参照。）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００６−２０９９６３号公報
【特許文献２】特開平１０−７９１９７号公報
【特許文献３】特開２０００−１４９５８１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
書き換えデータがデータ保持回路内に上書きされた場合、データ保持回路内のデータが半導体メモリの記憶領域に書き戻されるまで、記憶領域内のデータは、データ保持回路内のデータと相違する。記憶領域内のデータとデータ保持回路内のデータの一貫性がないときに、上位のシステムから半導体メモリに読み出し要求が発生したとき、システムは期待しない誤ったデータが読み出されるおそれがある。一方、データを半導体メモリに毎回書き込む場合、半導体メモリのアクセス頻度が増え、システムの性能は低下する。
【０００５】
本発明の目的は、システムの信頼性を低下することなく、半導体メモリのアクセス頻度を減らし、システムの性能を向上することである。
【課題を解決するための手段】
【０００６】
本発明の一形態によれば、メモリコントローラは、データ端子に供給されるデータをそれぞれ保持する複数の記憶領域を有する半導体メモリに、各記憶領域に保持されるデータのビット数より少ないビット数のライトデータを書き込むときに、記憶領域のうちデータが書き込まれていない空白の記憶領域を検索するデータサーチ部と、空白の記憶領域に対応するデータを保持するための複数の記憶部を有する書き換えレジスタと、ライトデータを書き換レジスタの記憶部に順次に書き込み、書き換えレジスタの最後の記憶部へのライトデータの書き込みに応答して、書き換えデータに保持されているデータを半導体メモリの対応する記憶領域に書き込むライト制御部と、ライトデータが書き換えデータに書き込まれたときにセットされ、書き換えレジスタに保持されているデータが、対応する記憶領域に保持されているデータと異なることを示す状態フラグとを備えている。
【発明の効果】
【０００７】
システムの信頼性を低下することなく、半導体メモリのアクセス頻度を減らすことができ、システムの性能を向上できる。
【図面の簡単な説明】
【０００８】
【図１】一実施形態におけるメモリコントローラの例を示す図である。
【図２】別の実施形態におけるメモリコントローラの例を示す図である。
【図３】図２に示したデータサーチ部の例を示す図である。
【図４】図２に示したライト制御部の例を示す図である。
【図５】図２に示した書き換えレジスタの例を示す図である。
【図６】図２に示したリード制御部の例を示す図である。
【図７】図２に示したフラッシュメモリの例を示す図である。
【図８】図２に示したメモリコントローラの動作の例を示す図である。
【図９】別の実施形態におけるメモリコントローラの例を示す図である。
【図１０】図９に示したデータサーチ部の例を示す図である。
【発明を実施するための形態】
【０００９】
以下、実施形態を図面を用いて説明する。信号が伝達される信号線には、信号名と同じ符号を使用する。
【００１０】
図１は、一実施形態におけるメモリコントローラＭＣＮＴの例を示している。メモリコントローラＭＣＮＴは、ＣＰＵ等のコントローラから供給されるアドレス信号ＣＡＤ、コマンド信号ＣＣＭＤに応答してフラッシュメモリＦＬＡＳＨ等の半導体メモリのアクセスを制御する。ＣＰＵ、メモリコントローラＭＣＮＴおよびフラッシュメモリＦＬＡＳＨにより、メモリシステムが形成されている。例えば、メモリシステムは、自動車のエンジン制御に関係する情報をフラッシュメモリＦＬＡＳＨに順次に格納するために使用される。例えば、エンジンの回転数または燃料の消費量等の情報がフラッシュメモリＦＬＡＳＨに格納され、その後のエンジン制御等に使用される。
【００１１】
ＣＰＵのデータ端子ＣＩ／Ｏのビット数は、例えば８ビットである。フラッシュメモリＦＬＡＳＨメのデータ端子ＦＩ／Ｏのビット数は、例えば４０ビット（３２ビットのデータと、８ビットの誤り訂正コード）である。フラッシュメモリＦＬＡＳＨは、３２ビットのデータをそれぞれ保持する複数の記憶領域ＭＡを有している。メモリコントローラＭＣＮＴは、データサーチ部ＤＳＵ、ライト制御部ＷＣＮＴ、状態フラグＳＴＡおよび書き換えレジスタＷＷＲを有している。
【００１２】
データサーチ部ＤＳＵは、ＣＰＵから供給されるライトコマンドＷＲＣ（ライト要求）に応答して、データを書き込むべきフラッシュメモリＦＬＡＳＨの記憶領域ＭＡをサーチする。具体的には、読み出し動作を実行させるためのリードコマンドＳＲＤとアドレスＦＡＤとを、フラッシュメモリＦＬＡＳＨに繰り返し出力する。データサーチ部ＤＳＵは、アドレスＦＡＤを順次に進めながらリードバスＲＢＳＵを介してフラッシュメモリＦＬＡＳＨからのリードデータを受け、記憶領域ＭＡのうちデータが書き込まれていない空白の記憶領域ＭＡを検索する。特に限定されないが、空白の記憶領域ＭＡは、１６進数で”Ｆ”のデータが書き込まれている。データサーチ部ＤＳＵは、空白の記憶領域ＭＡを見つけたときに、一致信号ＳＣＯＩＮを出力する。
【００１３】
書き換えレジスタＷＷＲは、空白の記憶領域ＭＡに対応するデータを保持するための複数の記憶部ＢＤ０−３を有する。特に限定されないが、記憶部ＢＤ０−３は、予め空白のデータが書き込まれている。なお、空白の記憶領域ＭＡが見つかったときに、記憶領域ＭＡから読み出したデータが記憶部ＢＤ０−３に書き込まれてもよい。ＣＰＵからライトバスＷＢＵＳを介して供給されるライトデータであるバイトデータＢＹＴＥは、ライトアドレスＣＡＤに応じて記憶部ＢＤ０−３のいずれかに書き込まれる。記憶部ＢＤ０−３に保持されているデータは、ライトデータＷＤＴ０として出力される。
【００１４】
ライト制御部ＷＣＮＴは、ＣＰＵから受けるライトデータをバイトデータＢＹＴＥとして書き換レジスタＷＷＲの記憶部ＤＢ０−３に順次に書き込む。ライト制御部ＷＣＮＴは、記憶部ＤＢ０−３のいずれかにライトデータを最初に書き込んだときに、状態フラグＳＴＡをセットする。状態フラグＳＴＡは、書き換えレジスタＷＷＲに保持されているデータが、対応する記憶領域ＭＡに保持されているデータと異なることを示す。ＣＰＵは、状態フラグＳＴＡを読むことにより、ライトデータがフラッシュメモリＦＬＡＳＨに書き込まれたのか、書き換えレジスタＷＷＲのみに保持されているのかを判断できる。すなわち、ＣＰＵは、書き換えレジスタＷＷＲと記憶領域ＭＡの同一性を常に確認できる。
【００１５】
例えば、ライト制御部ＷＣＮＴは、書き換えレジスタＷＷＲの最後の記憶部ＢＤ３へのライトデータの書き込みに応答して、ライトコマンドＷＢＣをフラッシュメモリＦＬＡＳＨに出力する。これにより、書き換えレジスタＷＲに保持されているデータは、フラッシュメモリＦＬＡＳＨの空白の記憶領域ＭＡに書き込まれる。ＣＰＵからのライトデータを一時的に書き換えレジスタＷＷＲに保持することで、フラッシュメモリＦＬＡＳＨのアクセス頻度を減らすことができる。ライトデータを空白の記憶領域ＭＡに書き込むことにより、データの書き換え回数に制限があるフラッシュメモリＦＬＡＳＨ等の不揮発性半導体メモリにおいて、書き換え回数の制限を緩和できる。
【００１６】
記憶領域ＭＡへのデータの書き込みにより、書き換えレジスタＷＷＲ内のデータと、対応する記憶領域ＭＡ内のデータとは互いに等しくなる。このため、ライト制御部ＷＣＮＴは、記憶領域ＭＡへのデータの書き込みに応答して状態フラグＳＴＡをリセットする。なお、メモリコントローラＭＣＮＴは、データサーチ部ＤＳＵにより見つけられた空白の記憶領域ＭＡのアドレスを保持するためのデータサーチレジスタを有していてもよい。
【００１７】
以上、この実施形態では、フラッシュメモリＦＬＡＳＨへのライトデータを一時的に書き換えレジスタＷＷＲに保持するとともに、書き換えレジスタＷＷＲと記憶領域ＭＡの同一性の情報を状態フラグＳＴＡに設定する。これにより、誤ったデータを扱うことによるメモリシステムの誤動作を防止しながら、フラッシュメモリＦＬＡＳＨのアクセス頻度を減らすことができる。この結果、メモリシステムの信頼性および性能を向上できる。
【００１８】
アクセス頻度が減るため、例えば、ＣＰＵが実行するプログラムコードが、フラッシュメモリＦＬＡＳＨの別の記憶領域に格納される場合にも、プログラムコードのフェッチ効率を低下させることなく、フラッシュメモリＦＬＡＳＨにデータを書き込むことができる。換言すれば、データとプログラムコードとを、１つのフラッシュメモリＦＬＡＳＨに格納できる。
【００１９】
状態フラグＳＴＡにより書き換えレジスタＷＷＲと記憶領域ＭＡの同一性を常に確認できる。このため、ＣＰＵが誤ったデータを扱うことを防止でき、メモリシステムが誤動作することを防止できる。
【００２０】
フラッシュメモリＦＬＡＳＨをアクセスするＣＰＵは、従来と同様に、例えば、１バイト毎にフラッシュメモリＦＬＡＳＨを書き込みアクセスできる。データのビット幅が大きい（例えば、６４ビットや、１２８ビット）フラッシュメモリＦＬＡＳＨを採用する場合にも、ＣＰＵが実行するプログラムを変更する必要はない。この結果、メモリシステムの開発コストを削減できる。
【００２１】
図２は、別の実施形態におけるメモリコントローラの例を示す図である。上述した実施形態で説明した要素と同一の要素については、同一の符号を付し、これ等については、詳細な説明は省略する。
【００２２】
メモリコントローラＭＣＮＴは、コマンドデコーダＣＤＥＣ、データ入出力制御部ＣＩＯＣＮＴ、データサーチ部ＤＳＵ、データサーチレジスタＤＳＲ、アドレス制御部ＡＤＣＮＴ、ライト制御部ＷＣＮＴ、リード制御部ＲＣＮＴ、コマンド制御部ＣＣＮＴ、書き換えレジスタＷＷＲ、誤り訂正コード生成部ＥＣＣＧ、データ入出力制御部ＦＩＯＣＮＴ、誤り訂正部ＥＣ、リードセレクタＲＳＥＬ、バイトセレクタＢＳＥＬおよび制御レジスタＣＮＴＲを有している。
【００２３】
メモリコントローラＭＣＮＴは、ＣＰＵ等のコントローラから供給されるアクセス要求ＲＤＣ、ＷＲＣに応答してフラッシュメモリＦＬＡＳＨ等の半導体メモリにアクセスする。特に限定されないが、フラッシュメモリＦＬＡＳＨは、ＮＯＲ型であり、４０ビット（４バイト＋１バイト）のデータ端子ＦＩ／Ｏを有している。ＣＰＵは、８ビットのデータ端子ＣＩ／Ｏを有している。ＣＰＵ、メモリコントローラＭＣＮＴおよびフラッシュメモリＦＬＡＳＨにより、メモリシステムが形成されている。
【００２４】
コマンドデコーダＣＤＥＣは、フラッシュメモリＦＬＡＳＨをアクセスするためにＣＰＵから供給されるコマンドＣＣＭＤをデコードし、リードコマンドＲＤＣ（リード要求）またはライトコマンドＷＲＣ（ライト要求）を生成する。なお、メモリコントローラＭＣＮＴは、フラッシュメモリＦＬＡＳＨをアクセスするためのコマンドＣＣＭＤ、アドレスＣＡＤおよび書き込みデータＣＩ／Ｏをパケット（トランザクション）としてＣＰＵから受けてもよい。
【００２５】
データ入出力制御部ＣＩＯＣＮＴは、ライトコマンドに応答して、ＣＰＵからのライトデータをライトバスＷＢＵＳに出力する。データ入出力制御部ＣＩＯＣＮＴは、リードコマンドに応答して、フラッシュメモリＦＬＡＳＨまたは書き換えデータＷＷＲからのリードデータをＣＰＵのデータ端子ＣＩ／Ｏに出力する。
【００２６】
データサーチ部ＤＳＵは、ライトコマンドに応答してデータを書き込むべきフラッシュメモリＦＬＡＳＨの記憶領域をサーチする。具体的には、データサーチ部ＤＳＵは、ライトコマンドＷＲＣとともにＣＰＵから供給されるライトアドレスが、データサーチレジスタＤＳＲに保持されている値と異なるときに、レジスタリード信号ＤＳＲＲＤを受け、サーチ動作を開始する。サーチ動作中、データサーチ部ＤＳＵは、サーチアドレスＳＡＤおよびサーチリードコマンドＳＲＤを繰り返し出力する。データサーチ部ＤＳＵの例は、図３に示す。
【００２７】
データサーチレジスタＤＳＲは、データサーチ部ＤＳＵからの一致信号ＳＣＯＩＮに応答して、受けているサーチアドレスＳＡＤを記憶する。これにより、ライトコマンドに応答してデータを書き込むべきフラッシュメモリＦＬＡＳＨの空白の記憶領域を示すアドレスが、データサーチレジスタＤＳＲに格納される。データサーチレジスタＤＳＲに保持されているアドレスは、データサーチレジスタアドレスＤＳＲＡＤとして出力される。また、データサーチレジスタＤＳＲは、ライトバック制御信号ＷＢＣに応答して、保持しているデータサーチレジスタアドレスＤＳＲＡＤを、フラッシュメモリＦＬＡＳＨの次の記憶領域を示す値に更新する。
【００２８】
アドレス制御部ＡＤＣＮＴは、フラッシュメモリＦＬＡＳＨのアドレス端子ＦＡＤに出力するアドレスを切り替えるアドレスセレクタＡＳＥＬを有している。アドレスセレクタＡＳＥＬは、レジスタリード信号ＤＳＲＲＤを受けたときに、サーチアドレスＳＡＤを選択し、フラッシュメモリＦＬＡＳＨに出力する。アドレスセレクタＡＳＥＬは、レジスタリード信号ＤＳＲＲＤを受けていないときに、ＣＰＵからのアドレスＣＡＤを選択し、フラッシュメモリＦＬＡＳＨに出力する。
【００２９】
ライト制御部ＷＣＮＴは、ライトコマンドＷＲＣとともにＣＰＵから供給されるアドレスＵＡＤが、データサーチレジスタＤＳＲに保持されている値と異なるときに、レジスタリード信号ＤＳＲＲＤを出力する。アドレスＵＡＤは、アドレスＣＡＤの上位ビットである。換言すれば、アドレスＵＡＤは、アドレスＣＡＤの下位２ビットを除いた値を示す。ライト制御部ＷＣＮＴは、ライトアドレスＵＡＤが、データサーチレジスタＤＳＲに保持されている値と同じときに、ライトバスＷＢＵＳから受ける８ビットのライトデータをバイトデータＢＹＴＥ０−３のいずれかとして書き換えレジスタＷＷＲに出力する。さらに、ライト制御部ＷＣＮＴは、最終のバイトデータＢＹＴＥ３を出力したとき、またはライトバックビットＷＢがセットされているとき、ライトバック制御信号ＷＢＣをコマンド制御部ＣＣＮＴに出力する。
【００３０】
リード制御部ＲＣＮＴは、リードコマンドＲＤＣとともにＣＰＵから供給されるリードアドレスＵＡＤが、データサーチレジスタＤＳＲに保持されている値と同じときに、レジスタリード信号ＲＥＧＲＤを出力する。但し、読み出し許可フラグＡＣＣがセットされているとき、レジスタリード信号ＲＥＧＲＤの出力は禁止される。リード制御部ＲＣＮＴの例は、図６に示す。
【００３１】
コマンド制御部ＣＣＮＴは、フラッシュメモリＦＬＡＳＨに読み出し動作または書き込み動作を実行させるためのシーケンサＳＥＱを有している。シーケンサＳＥＱは、リードコマンドＲＤＣまたはサーチリードコマンドＳＲＤに応答してフラッシュメモリＦＬＡＳＨに読み出し動作を実行させるためのコマンド信号ＦＣＭＤを生成し、フラッシュメモリＦＬＡＳＨに出力する。但し、シーケンサＳＥＱは、レジスタリード信号ＲＥＧＲＤを受けたとき、読み出し動作を実行するためのコマンド信号ＦＣＭＤの出力を禁止する。これにより、後述するように、レジスタリード信号ＤＳＲＲＤが出力されたとき、フラッシュメモリＦＬＡＳＨからではなく、書き換えデータＷＷＲからのデータがＣＰＵに読み出される。シーケンサＳＥＱは、ライトバック制御信号ＷＢＣに応答してフラッシュメモリＦＬＡＳＨに書き込み動作を実行させるためのコマンド信号ＦＣＭＤを生成し、フラッシュメモリＦＬＡＳＨに出力する。
【００３２】
書き換えレジスタＷＷＲは、新たにデータが書き込まれるフラッシュメモリＦＬＡＳＨの記憶領域（１バイト）を含む４バイトのデータと、この４バイトのデータの誤り訂正コードＥＣＣとを保持する記憶部を有している。書き換えレジスタＷＷＲは、ライトデータをバイトデータＢＹＴＥ０−３として受ける。書き換えレジスタＷＷＲに保持されている４バイトのデータと誤り訂正コードＥＣＣは、ライトデータＷＤＴ０としてライトレジスタＷＳＥＬ、リードレジスタＲＳＥＬおよび誤り訂正コード生成部ＥＣＣＧに出力される。フラッシュメモリＦＬＡＳＨへのデータの書き込みは、書き換えレジスタＷＷＲを介してのみ実行される。書き換えレジスタＷＷＲの例は、図５に示す。
【００３３】
誤り訂正コード生成部ＥＣＣＧは、ライトデータＷＤＴ０を用いて誤り訂正コードＥＣＣを生成し、書き換えレジスタＷＷＲの記憶部（ＥＣＣ領域）に書き込む。データ入出力制御部ＦＩＯＣＮＴは、ライトバック制御信号ＷＢＣに応答して、フラッシュメモリＦＬＡＳＨのデータ端子ＦＩ／ＯにライトデータＷＤＴ０を出力する。データ入出力制御部ＦＩＯＣＮＴは、リードコマンドＲＤＣに応答して、フラッシュメモリＦＬＡＳＨからのリードデータをリードバスＲＢＵＳに出力する。
【００３４】
誤り訂正部ＥＣは、フラッシュメモリＦＬＡＳＨから読み出されるデータの誤り訂正を実施し、誤りが訂正されたデータをリードセレクタＲＳＥＬに出力する。誤り訂正を実施するための誤り訂正コードＥＣＣは、データとともにフラッシュメモリＦＬＡＳＨから読み出される。なお、ＣＰＵにより実行されるプログラムがフラッシュメモリＦＬＡＳＨに格納されている場合、プログラムの誤り訂正を実施してもよい。
【００３５】
リードセレクタＲＳＥＬは、レジスタリード信号ＲＥＧＲＤが有効レベルのときに、書き換えレジスタＷＷＲからのライトデータＷＤＴ０（誤り訂正コードＥＣＣを除く）を選択し、バイトセレクタＢＳＥＬに出力する。リードセレクタＲＳＥＬは、レジスタリード信号ＲＥＧＲＤが無効レベルのときに、リードバスＲＢＵＳに読み出されたフラッシュメモリＦＬＡＳＨからのデータを選択し、バイトセレクタＢＳＥＬに出力する。
【００３６】
バイトセレクタＢＳＥＬは、リードコマンドＲＤＣとともにＣＰＵから供給されるアドレスＬＡＤに応じて、リードセレクタＲＳＥＬからの４バイトのデータのうち１バイトを選択し、データ入出力制御部ＣＩＯＣＮＴに出力する。アドレスＬＡＤは、アドレスＣＡＤの下位ビットである。換言すれば、アドレスＬＡＤは、アドレスＣＡＤの下位２ビットを示す。
【００３７】
制御レジスタＣＮＴＲは、ライトバックフラグＷＢ、リード許可フラグＡＡＣ、例外フラグＥＸＣ、状態フラグＳＴＡ、オフセットフラグＯＦＦおよびデータ長フラグＬＥＮを有している。制御レジスタＣＮＴＲは、ＣＰＵによりアクセス可能なＩ／Ｏ空間に割り当てられている。ライトバックフラグＷＢは、１ビットの書き込み専用フラグである。ＣＰＵは、フラッシュメモリＦＬＡＳＨに対して強制的に書き込み動作（ライトバック動作）を実行したいときに、ライトバックフラグＷＢを”１”にセットする。ライトバック動作の完了後、ライトバックフラグＷＢは自動的に”０”にリセットされる。
【００３８】
リード許可フラグＡＡＣは、１ビットの書き込み専用フラグである。ＣＰＵは、書き換えレジスタＷＷＲに保持されているデータに対応するフラッシュメモリＦＬＡＳＨの記憶領域からデータを直接読み出したいときに、リード許可フラグＡＡＣを”１”にセットする。読み出し動作の完了後、リード許可フラグＡＡＣは自動的に”０”にリセットされる。例外フラグＥＸＣは、１ビットの書き込み専用フラグである。
【００３９】
例外フラグＥＸＣは、書き換えレジスタＷＷＲに保持されているデータに対応するフラッシュメモリＦＬＡＳＨの記憶領域に対して読み出しコマンドＲＤＣが供給されたときに、”１”にセットされる。具体的には、読み出しコマンドＲＤＣとともにＣＰＵから供給されるアドレス信号ＣＡＤが、データサーチレジスタアドレスＤＳＲＡＤと同じとき、例外フラグＥＸＣがセットされる。データサーチレジスタアドレスＤＳＲＡＤは、書き換えレジスタＷＷＲに保持されているデータが、フラッシュメモリＦＬＡＳＨのどの記憶領域から読み出されたかを示す。なお、例外フラグＥＸＣの高レベル”１”は、例外フラグ信号ＥＸＣとしてＣＰＵの割り込み端子等に供給される。例外フラグ信号ＥＸＣは、書き換えレジスタＷＷＲ内のデータと、フラッシュメモリＦＬＡＳＨの対応する記憶領域内のデーが一致していないことを示す不一致信号として機能する。
【００４０】
状態フラグＳＴＡは、１ビットの読み出し専用フラグである。但し、状態フラグＳＴＡは、メモリコントローラＭＣＮＴにより書き換えられる。書き換えレジスタＷＷＲに保持されているデータが、対応するフラッシュメモリＦＬＡＳＨの記憶領域に保持されているデータと一致するとき、状態フラグＳＴＡは、”０”にリセットされる。書き換えレジスタＷＷＲに保持されているデータが、対応するフラッシュメモリＦＬＡＳＨの記憶領域に保持されているデータと一致しないとき、状態フラグＳＴＡは”１”にリセットされる。すなわち、状態フラグＳＴＡは、書き換えレジスタＷＷＲとフラッシュメモリＦＬＡＳＨの記憶領域との同一性がくずれたときにセットされる。
【００４１】
オフセットフラグＯＦＦは、２ビットの書き込み専用フラグである。オフセットフラグＯＦＦは、書き換えレジスタＷＷＲ内のライトデータのワード位置を示す。例えば、オフセットフラグＯＦＦが”０”のとき、ライトデータの１バイト目は、データサーチレジスタアドレスＤＳＲＡＤが示す書き換えレジスタＷＷＲ内の記憶部に書き込まれる。オフセットフラグＯＦＦが”１”のとき、ライトデータの１バイト目は、データサーチレジスタアドレスＤＳＲＡＤ＋１が示す書き換えレジスタＷＷＲ内の記憶部に書き込まれる。オフセットフラグＯＦＦが”２”のとき、ライトデータの１バイト目は、データサーチレジスタアドレスＤＳＲＡＤ＋２が示す書き換えレジスタＷＷＲ内の記憶部に書き込まれる。オフセットフラグＯＦＦが”３”のとき、ライトデータの１バイト目は、データサーチレジスタアドレスＤＳＲＡＤ＋３が示す書き換えレジスタＷＷＲ内の記憶部に書き込まれる。
【００４２】
データ長フラグＬＥＮは、５ビットの書き込み専用フラグである。データ長フラグＬＥＮは、ライトデータのビット長を示す。例えば、データ長フラグＬＥＮが”７（１６進数の０７）”を示すとき、ライトデータは８ビットである。データ長フラグＬＥＮが”１５（１６進数の０Ｆ）”を示すとき、ライトデータは１６ビットである。データ長フラグＬＥＮが”３１（１６進数の１Ｆ）”を示すとき、ライトデータは３２ビットである。
【００４３】
図３は、図２に示したデータサーチ部ＤＳＵの例を示す図である。データサーチ部ＤＳＵは、開始アドレス保持部ＢＥＧＩＮ、比較器ＣＭＰ１、アドレスカウンタＡＣＯＵＮＴ、アドレス範囲保持部ＲＡＮＧＥおよび比較器ＣＭＰ２を有している。開始アドレス保持部ＢＥＧＩＮは、フラッシュメモリＦＬＡＳＨの記憶領域のうち、データが保持される領域の開始アドレスを記憶する。開始アドレスは、ＣＰＵによって開始アドレス保持部ＢＥＧＩＮに書き込まれる。例えば、開始アドレス保持部ＢＥＧＩＮは、ＣＰＵによりアクセス可能なＩ／Ｏ空間に割り当てられている。
【００４４】
比較器ＣＭＰ１は、フラッシュメモリＦＬＡＳＨからリードバスＲＢＵＳに読み出されたデータが１６進数で全て”Ｆ”のときに、読み出された記憶領域が空き領域と判定され、一致信号ＳＣＯＩＮを高レベルに設定する。データの少なくとも一部が１６進数で”Ｆ”でないとき、読み出された記憶領域が使用中と判定され、一致信号ＳＣＯＩＮは低レベルに保持される。なお、比較器ＣＭＰ１は、読み出しデータとともにフラッシュメモリＦＬＡＳＨから読み出される誤り訂正コードＥＣＣを、読み出しデータとともに”Ｆ”と比較してもよい。
【００４５】
アドレスカウンタＡＣＯＵＮＴは、サーチ動作が開始される前の初期状態において、開始アドレス保持部ＢＥＧＩＮに保持されているアドレスがロード端子ＬＤを介して受ける。このとき、アドレスカウンタＡＣＯＵＮＴは、開始アドレス保持部ＢＥＧＩＮに保持されているアドレスをサーチアドレスＳＡＤとして出力する。アドレスカウンタＡＣＯＵＮＴは、比較器ＣＭＰ１が不一致（低レベルの一致信号ＳＣＯＩＮ）を検出するごとに、クロック端子ＣＫでカウントアップ信号を受け、サーチアドレスＳＡＤを１ずつ増加する。
【００４６】
アドレス範囲保持部ＲＡＮＧＥは、フラッシュメモリＦＬＡＳＨの記憶領域のうち、データが保持される領域のアドレス範囲を記憶する。アドレス範囲は、ＣＰＵによってアドレス範囲保持部ＲＡＮＧＥに書き込まれる。例えば、アドレス範囲保持部ＲＡＮＧＥは、ＣＰＵによりアクセス可能なＩ／Ｏ空間に割り当てられている。
【００４７】
比較器ＣＭＰ２は、サーチアドレスＳＡＤがアドレス範囲保持部ＲＡＮＧＥに保持されているアドレス範囲に含まれるとき、サーチアドレスＳＡＤが更新される毎に、サーチリードコマンドＳＲＤを出力する。比較器ＣＭＰ２は、レジスタリード信号ＤＳＲＲＤを受けてから一致信号ＳＣＯＩＮを受けるまでの間動作する。これにより、データサーチ部ＤＳＵは、フラッシュメモリＦＬＡＳＨの記憶領域に空き領域が現れるまで、フラッシュメモリＦＬＡＳＨからデータを読み出すためのサーチリードコマンドＳＲＤを繰り返し生成する。
【００４８】
図４は、図２に示したライト制御部ＷＣＮＴの例を示す図である。ライト制御部ＷＣＮＴは、比較器ＣＭＰ３、アンド回路ＡＮＤ１、ＡＮＤ２、カウンタＣＯＵＮＴ、データセレクタＤＴＳＥＬおよびオア回路ＯＲ１を有している。
【００４９】
比較器ＣＭＰ３は、書き込みコマンドＷＲＣとともにＣＰＵから供給された上位アドレスＵＡＤがデータサーチレジスタＤＳＲに保持されているデータサーチレジスタアドレスＤＳＲＡＤと同じときに、一致信号ＣＯＩＮを高レベルに設定する。比較器ＣＭＰ３は、上位アドレスＵＡＤがデータサーチレジスタアドレスＤＳＲＡＤと異なるとき、一致信号ＣＯＩＮを低レベルに設定する。
【００５０】
アンド回路ＡＮＤ１は、比較器ＣＭＰ３が不一致を検出したときに、高レベルの不一致信号ＩＣＯＩＮを受ける。このとき、アンド回路ＡＮＤ１は、ライトコマンドＷＲＣに応答してレジスタリード信号ＤＳＲＲＤを出力する。アンド回路ＡＮＤ２は、比較器ＣＭＰ３が一致を検出したときに、高レベルの一致信号ＣＯＩＮを受ける。このとき、アンド回路ＡＮＤ２は、ライトコマンドＷＲＣに応答して書き換えレジスタライト信号ＷＷＲＷＲを出力する。
【００５１】
カウンタＣＯＵＮＴは、ライトコマンドＷＲＣを受ける前の初期状態において、オフセットフラグＯＦＦおよびデータ長フラグＬＥＮの値をロード端子ＬＤを介して受ける。このとき、カウンタＣＯＵＮＴは、オフセットフラグＯＦＦおよびデータ長フラグＬＥＮの値に応じて、バイトセレクト信号ＢＳＥＬ０−３のいずれかを出力する。例えば、オフセットフラグＯＦＦの値が”１”で、データ長フラグＬＥＮの値が”８”のとき、下位から２バイト目のデータを選択するためのバイトセレクト信号ＢＳＥＬ１が出力される。
【００５２】
カウンタＣＯＵＮＴは、書き換えレジスタライト信号ＷＷＲＷＲを受ける毎に、数字の１つ大きいバイトセレクト信号ＢＳＥＬを出力する。例えば、バイトセレクト信号ＢＳＥＬ１が出力されているときに、書き換えレジスタライト信号ＷＷＲＷＲを受けたとき、バイトセレクト信号ＢＳＥＬ１の出力は停止し、バイトセレクト信号ＢＳＥＬ２が出力される。カウンタＣＯＵＮＴは、ライトバック制御信号ＷＢＣをリセット端子ＲＳＴで受けたときにリセットされ、ロード端子ＬＤで受ける情報に応じて初期化される。カウンタＣＯＵＮＴを、オフセットフラグＯＦＦおよびデータ長フラグＬＥＮに応じて動作させ、バイトセレクト信号ＢＳＥＬ０−３を生成することで、書き換えレジスタＷＷＲの正しい位置にデータを書き込むことができる。
【００５３】
データセレクタＤＴＳＥＬは、バイトセレクト信号ＢＳＥＬ０−３に応じて、ライトバスＷＢＵＳに供給されるライトデータをバイトデータＢＹＴＥ０−３のいずれかとして出力する。例えば、バイトセレクト信号ＢＳＥＬ１が出力されているとき、ライトデータは、バイトデータＢＹＴＥ１として出力される。バイトセレクト信号ＢＳＥＬ２が出力されているとき、ライトデータは、バイトデータＢＹＴＥ２として出力される。
【００５４】
オア回路ＯＲ１は、バイトセレクト信号ＢＳＥＬ３の出力またはライトバックフラグＷＢのセットに応答してライトバック制御信号ＷＢＣを出力する。
【００５５】
図５は、図２に示した書き換えレジスタＷＷＲの例を示す図である。書き換えレジスタＷＷＲは、バイトデータ（８ビット）をそれぞれ記憶する記憶部ＢＤ０−３と、記憶部ＢＤ０−３に保持されているデータの誤り訂正コードＥＣＣを記憶する記憶部ＥＣＣとを有している。記憶部ＢＤ０−３は、それぞれバイトデータＢＹＴＥ０−３を受ける。記憶部ＢＤ０−３に保持されているデータは、ライトデータＷＤＴ０として出力される。各記憶部ＢＤ０−３は、リセット端子ＲＳＴで受けるリセット信号に同期して、１６進数で”ＦＦ”にリセットされる。リセット信号は、一致信号ＳＣＯＩＮまたはライトバック制御信号ＷＢＣに応答して生成される。例えば、書き換えレジスタＷＷＲは、クロック端子ＣＫ受けるライトコマンドＷＲＣに同期してバイトデータＢＹＴＥ０−３のいずれかを、対応する記憶部ＢＤ（ＢＤ０−３のいずれか）に書き込む。
【００５６】
図６は、図２に示したリード制御部ＲＣＮＴの例を示す図である。リード制御部ＲＣＮＴは、比較器ＣＭＰ４およびアンド回路ＡＮＤ３を有している。比較器ＣＭＰ４は、リードコマンドＲＤＣとともにＣＰＵから供給された上位アドレスＵＡＤがデータサーチレジスタＤＳＲに保持されているデータサーチレジスタアドレスＤＳＲＡＤと同じときに、ヒット信号ＨＩＴＤＳＲを高レベルに設定する。比較器ＣＭＰ４は、上位アドレスＵＡＤがデータサーチレジスタアドレスＤＳＲＡＤと異なるとき、ヒット信号ＨＩＴＤＳＲを低レベルに設定する。
【００５７】
アンド回路ＡＮＤ３は、リード許可フラグＡＡＣが”０”にリセットされているときに、ヒット信号ＨＩＴＤＳＲを高レベルのレジスタリード信号ＲＥＧＲＤとして出力する。高レベルのレジスタリード信号ＲＥＧＲＤにより、フラッシュメモリＦＬＡＳＨからのデータの読み出しが禁止され、書き換えレジスタＷＷＲに保持されているデータが読み出しデータとしてＣＰＵに出力される。高レベルのレジスタリード信号ＲＥＦＲＤは、書き換えデータＷＷＲ内のデータと、対応するフラッシュメモリＦＬＡＳＨの記憶領域内のデータとが一致していることを示す不一致信号としても機能する。このとき、制御レジスタＣＮＴＲの例外フラグＥＸＣは”１”にセットされる。アンド回路ＡＮＤ３は、リード許可フラグＡＡＣが”１”にセットされているときに、ヒット信号ＨＩＴＤＳＲのレベルに拘らずレジスタリード信号ＲＥＧＲＤを低レベルに保持する。これにより、書き換えレジスタＷＷＲからではなく、フラッシュメモリＦＬＡＳＨからデータが強制的に読み出される。
【００５８】
図７は、図２に示したフラッシュメモリＦＬＡＳＨの例を示す図である。図７において、数字の後ろの”ｈ”は、１６進数を示している。フラッシュメモリＦＬＡＳＨは、例えば、３２ビット（４バイト）単位でデータが読み書きされる複数の記憶領域を有している。誤り訂正コードＥＣＣ（１バイト）のＸＸｈ（Ｖａｌｉｄ）は、対応する記憶領域にデータが書き込まれ、誤り訂正コードＥＣＣが生成され、有効であることを示す。誤り訂正コードＥＣＣのＦＦｈ（Ｉｎｖａｌｉｄ）は、対応する記憶領域にデータが書き込まれておらず、誤り訂正コードＥＣＣが無効であることを示す。３２ビットの記憶領域と８ビットの誤り訂正コードＥＣＣが全てＦＦｈのとき、データはこれら記憶領域に書き込まれていない。すなわち、記憶領域は空白である。フラッシュメモリＦＬＡＳＨは、ＣＰＵが実行するプログラムが格納される記憶領域も有している。
【００５９】
この例では、アドレスが１０００ｈから１００７ｈまでの記憶領域には、既にデータが書き込まれている。このため、次にメモリコントローラＭＣＮＴがライトコマンドＷＲＣを受けたとき、ライトデータは、アドレスが１００８ｈから１００Ｂｈのいずれかに書き込まれる。ライトデータが書き込まれる位置は、オフセットフラグＯＦＦおよびデータ長フラグＬＥＮの値に応じて決まる。但し、ｉ実際の書き込み動作では、まず、データは図５に示した書き換えデータＷＷＲに書き込まれる。
【００６０】
図８は、図２に示したメモリコントローラＭＣＮＴの動作の例を示す図である。フラッシュメモリＦＬＡＳＨの状態は、図７と同じである。オフセットフラグＯＦＦは”１”に設定され、データ長フラグＬＥＮは”８”に設定されている。書き換えレジスタＷＷＲの記憶部ＢＤ０−３は、初期状態において、００ｈ、１１ｈ、２２ｈ、３３ｈをそれぞれ保持している。データサーチレジスタＤＳＲは、１００４ｈを保持している（ＤＳＲＡＤ）。図８では、メモリコントローラＭＣＮＴの動作は、図の上から下に進んでいく。信号やフラグの空白部分は、その前の情報を維持していることを示す。
【００６１】
例えば、ＣＰＵは、ライトコマンドＷＲＣとともに７７ｈのライトデータと１０００ｈのアドレスＣＡＤをメモリコントローラＭＣＮＴに供給する（図８（ａ））。ＣＰＵからのアドレス（１０００ｈ）と、データサーチレジスタアドレスＤＳＲＡとが異なるため、レジスタリード信号ＤＳＲＲＤが高レベルＨに変化し、サーチ動作が開始される（図８（ｂ））。
【００６２】
データサーチ部ＤＳＵは、開始アドレスである１０００ｈをサーチアドレスＳＡＤとしてフラッシュメモリＦＬＡＳＨに出力する（図８（ｃ））。そして、読み出し動作が実行され、リードバスに読み出しデータ（００１１２２３３ｈ）が読み出される。データがＦＦｈでないため、一致信号ＳＣＯＩＮは低レベルＬに保持される。
【００６３】
サーチ動作は、サーチアドレスＳＡＤが１００８ｈになり、リードバスに読み出しデータ（ＦＦＦＦＦＦＦＦｈ）が読み出され、一致信号ＳＣＯＩＮが高レベルＨに変化するまで続けられる（図８（ｄ））。一致信号ＳＣＯＩＮの高レベルＨに応答して、データサーチレジスタＤＳＲ（ＤＳＲＡＤ）に１００８ｈが書き込まれ、書き換えレジスタＷＷＲがＦＦｈにリセットされる。（図８（ｅ））。書き換えレジスタＷＷＲを一致信号ＳＣＯＩＮに応答して強制的にＦＦｈにリセットすることで、リードバスに読み出されたデータ（ＦＦＦＦＦＦＦＦｈ）を書き換えレジスタＷＷＲにロードする回路を不要にできる。この結果、メモリコントローラＭＣＮＴの回路規模を小さくできる。
【００６４】
ライト制御部ＷＣＮＴは、一致信号ＳＣＯＩＮに応答して、書き換えレジスタＷＷＲの記憶部ＢＤ１にライトデータ７７ｈを書き込む（図８（ｆ））。ライトデータ７７ｈが書き込まれる記憶部ＢＤ１は、オフセットフラグＯＦＦおよびデータ長フラグＬＥＮに応じて決まる。書き換えレジスタＷＷＲに保持されているデータと、フラッシュメモリＦＬＡＳＨの対応する記憶領域に保持されているデータが一致しなくなるため、メモリコントローラＭＣＮＴは、状態フラグＳＴＡを”１”にセットする（図８（ｇ））。
【００６５】
次に、ＣＰＵは、ライトコマンドＷＲＣとともに８８ｈのライトデータと１００８ｈのアドレスＣＡＤをメモリコントローラＭＣＮＴに供給する（図８（ｈ））。アドレス１００８ｈは、データサーチレジスタＤＳＲをリードすることにより得られる。ＣＰＵからのアドレス（１００８ｈ）と、データサーチレジスタアドレスＤＳＲＡとが一致するため、サーチ動作は開始されない。ライト制御部ＷＣＮＴは、次の記憶部ＢＤ２にライトデータ８８ｈを書き込む（図８（ｉ））。
【００６６】
次に、ＣＰＵは、リードコマンドＲＤＣとともに１００９ｈのアドレスＣＡＤをメモリコントローラＭＣＮＴに供給する（図８（ｊ））。リード制御部ＲＣＮＴは、アドレスＣＡＤの上位がデータサーチレジスタアドレスＤＳＲＡ（１００８ｈ）と同じため、レジスタリード信号ＲＥＧＲＤを高レベルに設定し、フラッシュメモリＦＬＡＳＨへのリードアクセスを禁止する（図８（ｋ））。
【００６７】
リードセレクタＲＳＥＬは、高レベルＨのレジスタリード信号ＲＥＧＲＤを受けて、書き換えレジスタＷＷＲに保持されているデータをリードデータとして選択する。そして、記憶部ＢＤ１に保持されているデータ７７ｈがリードデータとしてＣＰＵに出力される。フラッシュメモリＦＬＡＳＨから読み出されていないデータがＣＰＵに出力されるため、例外フラグＥＸＣが”１”にセットされ、高レベルの例外フラグ信号ＥＸＣがＣＰＵに出力される（図８（ｌ））。ＣＰＵは、高レベルの例外フラグ信号ＥＸＣを受け、メモリコントローラＭＣＮＴから受けたリードデータがフラッシュメモリＦＬＡＳＨに保持されたデータでないことを認識する。すなわち、リードデータが最終的にフラッシュメモリＦＬＡＳＨに書き込まれたデータでなく、書き込み途中にある中間データであることを認識する。ＣＰＵは、例外フラグ信号ＥＸＣの値を考慮して、リードデータを採用すべきか否かを判断する。これにより、ＣＰＵが誤ったデータを扱うことを防止でき、メモリシステムが誤動作することを防止できる。
【００６８】
次に、ＣＰＵは、フラッシュメモリＦＬＡＳＨから強制的にデータを読み出すために制御レジスタＣＮＴＲをアクセスし、リード許可フラグＡＡＣを”１”にセットする（図８（ｍ））。制御レジスタＣＮＴＲは、アドレスＣＡＤを制御レジスタＣＮＴＲを示すＩ／Ｏアドレスに設定することでアクセスされる。この後、ＣＰＵは、リードコマンドＲＤＣとともに１００９ｈのアドレスＣＡＤをメモリコントローラＭＣＮＴに供給する（図８（ｎ））。リード許可フラグＡＡＣが”１”にセットされているため、リード制御部ＲＣＮＴは、レジスタリード信号ＲＥＧＲＤを低レベルに固定する（図８（ｏ））。これにより、フラッシュメモリＦＬＡＳＨの読み出し動作が実行される。
【００６９】
リードセレクタＲＳＥＬは、低レベルＬのレジスタリード信号ＲＥＧＲＤを受けて、フラッシュメモリＦＬＡＳＨからのデータをリードデータとして選択する（図８（ｐ））。そして、フラッシュメモリＦＬＡＳＨのアドレス１００９ｈに保持されているデータがリードデータとしてＣＰＵに出力される。なお、実際の動作では、フラッシュメモリＦＬＡＳＨからリードデータとともに誤り訂正コードも出力される。メモリコントローラＭＣＮＴのエラー訂正部ＥＣは、誤り訂正コードを用いてリードデータを誤り訂正し、訂正したデータをリードデータとしてリードセレクタＲＳＥＬに供給する。
【００７０】
フラッシュメモリＦＬＡＳＨからのデータの読み出しのため、例外フラグＥＸＣは”０”にリセットされる（図８（ｑ））。このため、例外フラグ信号ＥＸＣはＣＰＵに出力されない。リード許可フラグＡＡＣは、読み出し動作を実行後、”０”にリセットされる。
【００７１】
リード許可フラグＡＡＣにより、フラッシュメモリＦＬＡＳＨに保持されているデータを強制的に読み出すことで、ＣＰＵは、正しいデータを常に受け取ることができる。これにより、ＣＰＵが誤ったデータを扱うことを防止でき、メモリシステムが誤動作することを防止できる。なお、通常の動作では、上述したように、ＣＰＵは、読み出し要求に応答して高レベルの例外フラグ信号ＥＸＣを受け、フラッシュメモリＦＬＡＳＨからのデータが必要と判断したときに、リード許可フラグＡＡＣをセットし、再度読み出し要求をメモリコントローラＭＣＮＴに出力する。
【００７２】
次に、ＣＰＵは、ライトコマンドＷＲＣとともに９９ｈのライトデータと１００８ｈのアドレスＣＡＤをメモリコントローラＭＣＮＴに供給する（図８（ｒ））。ＣＰＵからのアドレス（１００８ｈ）と、データサーチレジスタアドレスＤＳＲＡとが一致するため、サーチ動作は開始されない。ライト制御部ＷＣＮＴは、次の記憶部ＢＤ３にライトデータ９９ｈを書き込む（図８（ｓ））。
【００７３】
記憶部ＢＤ３へのデータの書き込みに応答してライトバック制御信号ＷＢＣが高レベルＨに設定される（図８（ｔ））。これにより、書き換えレジスタＷＷＲに保持されているデータおよび誤り訂正コードＥＣＣは、データサーチレジスタアドレスＤＳＲＡＤにより選択されるフラッシュメモリＦＬＡＳＨの記憶領域に書き込まれる。すなわち、ライトバック動作が実行される。ライトバック動作により、書き換えレジスタＷＷＲの内容と、フラッシュメモリＦＬＡＳＨの対応する記憶領域の内容が一致する。このため、メモリコントローラＭＣＮＴは、状態フラグＳＴＡを”０”にリセットする（図８（ｕ））。また、書き換えレジスタＷＷＲの内容は、ライトバック制御信号ＷＢＣに応答してＦＦｈにリセットされる（図８（ｖ））。データサーチレジスタＤＳＲは、ライトバック制御信号ＷＢＣに応答して更新され、アドレス０００Ｃｈを保持する（図８（ｗ））。
【００７４】
状態フラグＳＴＡをライトバック動作に応答してリセットすることで、ＣＰＵは、書き換えレジスタＷＷＲ内のデータと、フラッシュメモリＦＬＡＳＨの対応する記憶領域内のデータが一致していると判断できる。これにより、ＣＰＵが誤ったデータを扱うことを防止でき、メモリシステムが誤動作することを防止できる。
【００７５】
この後、ＣＰＵは、ライトコマンドＷＲＣとともにＡＡｈ、ＢＢｈのライトデータと１００ＣｈのアドレスＣＡＤをメモリコントローラＭＣＮＴに順次に供給する（図８（ｘ））。そして、上述と同様に、書き換えレジスタＷＷＲにライトデータＡＡｈ、ＢＢｈが書き込まれる（図８（ｙ））。書き換えレジスタＷＷＲに保持されているデータと、フラッシュメモリＦＬＡＳＨの対応する記憶領域に保持されているデータが一致しなくなるため、メモリコントローラＭＣＮＴは、状態フラグＳＴＡを”１”にセットする（図８（ｚ））。
【００７６】
次に、ＣＰＵは、リードコマンドＲＤＣとともに１００４ｈのアドレスＣＡＤをメモリコントローラＭＣＮＴに供給する（図８（Ａ））。リード制御部ＲＣＮＴは、アドレスＣＡＤがデータサーチレジスタアドレスＤＳＲＡ（１００Ｃｈ）と異なるため、レジスタリード信号ＲＥＧＲＤを低レベルに維持する。これにより、フラッシュメモリＦＬＡＳＨの読み出し動作が実行され、フラッシュメモリＦＬＡＳＨからリードバスＲＢＵＳにデータ４４５５６６ＦＦｈが読み出される（図８（Ｂ））。メモリコントローラＭＣＮＴは、アドレス１００４ｈに対応するリードデータ４４ｈをＣＰＵに出力する。
【００７７】
次に、ＣＰＵは、ライトバック動作を強制的に実行するために、制御レジスタＣＮＴＲをアクセスし、ライトバックフラグＷＢを”１”にセットする（図８（Ｃ））。これにより、ライトバック制御信号ＷＢＣが高レベルＨに変化し、書き換えレジスタＷＷＲからフラッシュメモリＦＬＡＳＨへのライトバック動作が実行される（図８（Ｄ））。ライトバックフラグＷＢを採用することで、ＣＰＵは、書き換えレジスタＷＷＲ内のデータをフラッシュメモリＦＬＡＳＨに強制的に書き込むことができる。例えば、ＣＰＵは、メモリシステムの電源がオフされるときに、シャットダウンシーケンスでライトバック動作を実行する。これにより、書き換えレジスタＷＷＲに保持され、フラッシュメモリＦＬＡＳＨに保持されていない中間データが失われることを防止できる。これにより、ＣＰＵが誤ったデータを扱うことを防止でき、メモリシステムが誤動作することを防止できる。
【００７８】
上述した自動的なライトバック動作と同様に、メモリコントローラＭＣＮＴは、状態フラグＳＴＡを”０”にリセットする（図８（Ｅ））。書き換えレジスタＷＷＲの内容は、ライトバック制御信号ＷＢＣに応答してＦＦｈにリセットされる（図８（Ｆ））。データサーチレジスタＤＳＲは、ライトバック制御信号ＷＢＣに応答して更新され、アドレス００１０ｈを保持する（図８（Ｇ））。
【００７９】
書き換えレジスタＷＷＲをライトバック制御信号ＷＢＣに応答して強制的にＦＦｈにリセットすることで、フラッシュメモリＦＬＡＳＨから新たなデータを読み出して書き換えレジスタＷＷＲにロードする処理を不要にできる。この結果、強制ライトバック時のメモリコントローラＭＣＮＴの動作を簡易にでき、ライトバック動作に必要な時間を短縮できる。この結果、メモリシステムの性能を向上できる。例えば、シャットダウンシーケンスに必要な時間を短縮できる。
【００８０】
この後、ライトコマンドＷＲＣとともにＣＣｈのライトデータと１０１４ｈのアドレスＣＡＤをメモリコントローラＭＣＮＴに供給する（図８（Ｈ））。ＣＰＵからのアドレス（１０１４ｈ）と、データサーチレジスタアドレスＤＳＲＡ（１０１０ｈ）とが異なるため、レジスタリード信号ＤＳＲＲＤが高レベルＨに変化し、再びサーチ動作が開始される（図８（Ｉ））。
【００８１】
以上のように、ＣＰＵからのライトデータのビット数（８ビット）がフラッシュメモリＦＬＡＳＨに書き込まれるデータのビット数（３２ビット）より少ない場合にも、フラッシュメモリＦＬＡＳＨのアクセス頻度が増えることを防止できる。このため、ＣＰＵが実行するプログラムがフラッシュメモリＦＬＡＳＨに格納される場合にも、ＣＰＵによるプログラムのフェッチ効率が低下することを防止できる。また、ＣＰＵは、制御レジスタＣＮＴＲを参照することにより、あるいは、例外フラグ信号ＥＸＣをモニタすることにより、メモリコントローラＭＣＮＴから出力されるデータの信憑性を確かめることができる。以上、この実施形態においても、上述した実施形態と同様の効果を得ることができる。
【００８２】
図９は、別の実施形態におけるメモリコントローラの例を示す図である。上述した実施形態で説明した要素と同一の要素については、同一の符号を付し、これ等については、詳細な説明は省略する。この実施形態では、データサーチ部ＤＳＵａおよびエラー訂正部ＥＣａが、図２に示したデータサーチ部ＤＳＵおよびエラー訂正部ＥＣの代わりに配置されている。その他の構成は、図２と同じである。すなわち、ＣＰＵ、メモリコントローラＭＣＮＴおよびフラッシュメモリＦＬＡＳＨにより、メモリシステムが形成されている。なお、この実施形態では、誤り訂正コードは、ＣＰＵが扱うデータのみに付加され、ＣＰＵが実行するプログラムには付加されない。データおよびプログラムは、フラッシュメモリＦＬＡＳＨの記憶領域に格納されている。
【００８３】
データサーチ部ＤＳＵａは、ＣＰＵから供給されるアドレス信号ＣＡＤがフラッシュメモリＦＬＡＳＨにおけるデータを保持している記憶領域を示しているかを判定する機能を有している。データサーチ部ＤＳＵａは、アドレス信号ＣＡＤがデータを保持している記憶領域を示しているとき、アドレスマッチ信号ＡＤＭを活性化レベルに設定する。データサーチ部ＤＳＵａは、アドレス信号ＣＡＤがデータを保持している記憶領域を示していないとき、アドレスマッチ信号ＡＤＭを非活性化レベルに設定する。非活性化レベルのアドレスマッチ信号ＡＤＭは、フラッシュメモリＦＬＡＳＨにおいて、ＣＰＵにより実行されるプログラムが格納されている記憶領域のアクセスを示す。データサーチ部ＤＳＵａは、ＣＰＵから受けたアドレス信号ＣＡＤをアドレス信号ＤＡＤとしてアドレスセレクタＡＤＳＥＬに出力する。データサーチ部ＤＳＵａの例は、図１０に示す。
【００８４】
エラー訂正部ＥＣａは、ＣＰＵからのリード要求に応答して、活性化レベルのアドレスマッチ信号ＡＤＭを受けたときに、フラッシュメモリＦＬＡＳＨからの読み出しデータをエラー訂正する。エラー訂正部ＥＣａは、ＣＰＵからのリード要求に応答して、非活性化レベルのアドレスマッチ信号ＡＤＭを受けたときに、エラー訂正動作を実施しない。ＣＰＵがフラッシュメモリＦＬＡＳＨからプログラムをリードするときに、エラー訂正部ＥＣａの動作を停止することで、プログラムの読み出し時間を短縮できる。プログラムのフェッチ効率が向上するため、メモリシステムの性能を向上できる。
【００８５】
図１０は、図９に示したデータサーチ部ＤＳＵａの例を示す図である。図３と同じ要素については、詳細な説明は省略する。データサーチ部ＤＳＵａは、図３に示したデータサーチ部ＤＳＵに比較器ＣＭＰ５を追加している。比較器ＣＭＰ５は、開始アドレス保持部ＢＥＧＩおよびアドレス範囲保持部ＲＡＮＧＥからの情報を受け、データが格納されているフラッシュメモリＦＬＡＳＨの記憶領域の範囲を判断する。比較器ＣＭＰ５は、ＣＰＵからのアドレス信号ＣＡＤがデータが格納されている記憶領域を示すか否かを判定し、アドレスマッチ信号ＡＤＭを出力する。また、比較器ＣＭＰ５は、アドレス信号ＣＡＤをアドレス信号ＤＡＤとして出力する。
【００８６】
以上、この実施形態においても、上述した実施形態と同様の効果を得ることができる。さらに、プログラムがフラッシュメモリＦＬＡＳＨから読み出されるときに、誤り訂正動作を禁止することで、ＣＰＵによるプログラムのフェッチ効率を向上でき、メモリシステムの性能を向上できる。
【００８７】
なお、上述した実施形態は、フラッシュメモリＦＬＡＳＨのアクセスを制御するメモリコントローラＭＣＮＴの例について述べた。しかし、例えば、上述した実施形態は、ＥＥＰＲＯＭや強誘電体メモリなどの他の不揮発性半導体メモリ、あるいはＤＲＡＭ、ＳＲＡＭ、擬似ＳＲＡＭに適用してもよい。
【００８８】
上述した実施形態では、書き換えレジスタＷＷＲに４バイトのデータを保持する例について述べた。しかし、例えば、４バイトを超えるデータを書き換えレジスタＷＷＲに保持してよい。書き換えレジスタＷＷＲに形成する記憶部ＢＤ０−３の数を増やすことにより、フラッシュメモリＦＬＡＳＨのアクセス頻度をさらに減らすことができる。この結果、メモリシステムの性能をさらに向上できる。
【００８９】
以上の実施形態において説明した発明を整理して、付記として開示する。
（付記１）
複数の記憶領域を有する半導体メモリに、前記各記憶領域に保持されるデータのビット数より少ないビット数のライトデータを書き込むときに、前記記憶領域のうちデータが書き込まれていない空白の記憶領域を検索するデータサーチ部と、
前記空白の記憶領域に対応するデータを保持するための複数の記憶部を有する書き換えレジスタと、
前記ライトデータを前記書き換えレジスタの前記記憶部に順次に書き込み、前記書き換えレジスタの最後の記憶部への前記ライトデータの書き込みに応答して、前記書き換えレジスタに保持されているデータを前記半導体メモリの対応する記憶領域に書き込むライト制御部と、
前記ライトデータが前記書き換えレジスタに書き込まれたときにセットされ、前記書き換えレジスタに保持されているデータが、対応する記憶領域に保持されているデータと異なることを示す状態フラグと
を備えていることを特徴とするメモリコントローラ。
（付記２）
前記書き換えレジスタに前記ライトデータが書き込まれた状態で、前記書き換えレジスタに保持されているデータに対応する記憶領域に対するリード要求を受けたときに、不一致信号を出力するリード制御部を
備えていることを特徴とする付記１記載のメモリコントローラ。
（付記３）
前記半導体メモリからのデータの読み出し時にセットされるリード許可フラグを備え、
前記リード制御部は、前記リード許可フラグがセットされた状態で、前記書き換えレジスタに保持されているデータに対応する記憶領域に対するリード要求を受けたときに、前記不一致信号の出力を禁止し、前記半導体メモリからデータを読み出すために、リード要求の前記半導体メモリへの供給を許可すること
を特徴とする付記１または付記２記載のメモリコントローラ。
（付記４）
前記書き換えレジスタに保持されているデータを前記半導体メモリの対応する記憶領域に強制的に書き戻すときにセットされるライトバックフラグを備え、
前記ライト制御部は、前記ライトバックフラグのセットに応答して、前記書き換えレジスタに保持されているデータを前記半導体メモリの対応する記憶領域に書き戻すライトバック動作を実行すること
を特徴とする付記１ないし付記３のいずれか１項記載のメモリコントローラ。
（付記５）
前記書き換えレジスタは、前記ライトバック動作に応答して、空白データを設定するためにリセットされること
を特徴とする付記４記載のメモリコントローラ。
（付記６）
前記状態フラグは、前記ライトバック動作に応答してリセットされること
を特徴とする付記４または付記５記載のメモリコントローラ。
（付記７）
前記データサーチ部が前記空白の記憶領域を見つけたときに、前記書き換えレジスタは、空白データを設定するためにリセットされること
を特徴とする付記１ないし付記６のいずれか１項記載のメモリコントローラ。
（付記８）
前記ライトデータを書き込む前記記憶部を示す情報が設定されるオフセットフラグと、
前記ライトデータのビット幅を示す情報が設定されるデータ長フラグと
を備え、
前記ライト制御部は、前記ライトデータを書き込む前記記憶部を示すセレクト信号を生成するカウンタを備え、
前記カウンタは、最初のライトデータが前記書き換えレジスタに書き込まれる前に、前記オフセットフラグの値に対応するセレクト信号を生成し、前記ライトデータが書き込まれる毎に、前記データ長フラグの値に応じて、次のセレクト信号を生成すること
を特徴とする付記１ないし付記７のいずれか１項記載のメモリコントローラ。
（付記９）
前記記憶部に保持されているデータの誤り訂正コードを生成する誤り訂正コード生成部を備え、
前記書き換えレジスタは、前記誤り訂正コード生成部により生成された前記誤り訂正コードを保持する記憶部を備え、
前記半導体メモリは、前記書き換えレジスタに保持されている誤り訂正コードが書き込まれる記憶領域を備え、
前記書き換えレジスタに保持されている誤り訂正コードは、前記書き換えレジスタに保持されているデータとともに前記半導体メモリに書き込まれること
を特徴とする付記１ないし付記８のいずれか１項記載のメモリコントローラ。
（付記１０）
複数の記憶領域を有する半導体メモリに、前記各記憶領域に保持されるデータのビット数より少ないビット数のライトデータを書き込むときに、前記記憶領域のうちデータが書き込まれていない空白の記憶領域を検索し、
前記ライトデータを書き換えレジスタの記憶部に順次に書き込み、前記書き換えレジスタの最後の記憶部への前記ライトデータの書き込みに応答して、前記書き換えレジスタに保持されているデータを前記半導体メモリの対応する記憶領域に書き込み、
前記書き換えレジスタに保持されているデータが、対応する記憶領域に保持されているデータと異なることを示すために、前記ライトデータが前記書き換えレジスタに書き込まれたときに状態フラグをセットすること
を特徴とする半導体メモリの制御方法。
（付記１１）
前記書き換えレジスタに前記ライトデータが書き込まれた状態で、前記書き換えレジスタに保持されているデータに対応する記憶領域に対するリード要求を受けたときに、不一致信号を出力する
ことを特徴とする付記１０記載の半導体メモリの制御方法。
（付記１２）
前記半導体メモリからのデータの読み出し時にセットされるリード許可フラグがセットされた状態で、前記書き換えレジスタに保持されているデータに対応する記憶領域に対するリード要求を受けたときに、前記不一致信号の出力を禁止し、前記半導体メモリからデータを読み出すために、リード要求の前記半導体メモリへの供給を許可すること
を特徴とする付記１０または付記１１記載の半導体メモリの制御方法。
（付記１３）
前記書き換えレジスタに保持されているデータを前記半導体メモリの対応する記憶領域に強制的に書き戻すときにセットされるライトバックフラグのセットに応答して、前記書き換えレジスタに保持されているデータを前記半導体メモリの対応する記憶領域に書き戻すライトバック動作を実行すること
を特徴とする付記１０ないし付記１２のいずれか１項記載の半導体メモリの制御方法。
（付記１４）
前記書き換えレジスタを、前記ライトバック動作に応答して、空白データを設定するためにリセットすること
を特徴とする付記１３記載の半導体メモリの制御方法。
（付記１５）
前記状態フラグを、前記ライトバック動作に応答してリセットすること
を特徴とする付記１３または付記１４記載の半導体メモリの制御方法。
（付記１６）
前記検索により前記空白の記憶領域を見つけたときに、前記書き換えレジスタを、空白データを設定するためにリセットすること
を特徴とする付記１０ないし付記１５のいずれか１項記載の半導体メモリの制御方法。
【００９０】
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずであり、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
【符号の説明】
【００９１】
ＡＡＣ‥リード許可フラグ；ＡＤＣＮＴ‥アドレス制御部；ＡＳＥＬ‥アドレスセレクタ；ＢＤ０−３‥記憶部；ＢＳＥＬ‥バイトセレクタ；ＣＣＮＴ‥コマンド制御部；ＣＤＥＣ‥コマンドデコーダ；ＣＩＯＣＮＴ‥データ入出力制御部；ＣＮＴＲ‥制御レジスタ；ＤＳＲ‥データサーチレジスタ；ＤＳＵ、ＤＳＵａ‥データサーチ部；ＥＣ、ＥＣａ‥誤り訂正部；ＥＣＣＧ‥誤り訂正コード生成部；ＥＸＣ‥例外フラグ；ＦＬＡＳＨ‥フラッシュメモリ；ＦＩＯＣＮＴ‥データ入出力制御部；ＬＥＮ‥データ長フラグ；ＭＡ‥記憶領域；ＭＣＮＴ‥メモリコントローラ；ＯＦＦ‥オフセットフラグ；ＲＣＮＴ‥リード制御部；ＲＳＥＬ‥リードセレクタ；ＳＥＱ‥シーケンサ；ＳＴＡ‥状態フラグ；ＷＢ‥ライトバックフラグ；ＷＣＮＴ‥ライト制御部；ＷＷＲ‥書き換えレジスタ
【図１】
2011090504.tif 000003
【図２】
2011090504.tif 000004
【図３】
2011090504.tif 000005
【図４】
2011090504.tif 000006
【図５】
2011090504.tif 000007
【図６】
2011090504.tif 000008
【図７】
2011090504.tif 000009
【図８】
2011090504.tif 000010
【図９】
2011090504.tif 000011
【図１０】
2011090504.tif 000012