(57)【要約】【課題】記憶素子に格納されたデータの書き換えにおいて、処理時間を短縮するメモリ制御回路を提供する。【解決手段】本発明の一態様に係るメモリ制御回路は、データの書き込み及び読み出しが可能なメモリに対する制御回路であって、メモリ１２０に対する書き込みデータと前記書き込みデータを書き込んだメモリアドレスからの読み出しデータとを比較する比較手段１０５と、比較手段１０５による比較結果を、前記メモリアドレスと対応して格納する比較結果格納手段１０７と、前記比較結果に基づいて、不一致と判定された前記メモリアドレスに対して、前記書き込みデータを再度書き込むリトライ処理を制御する制御手段１０８と、を備えている。【選択図】図２
2007334813.tif 000002
【特許請求の範囲】
【請求項１】
データの書き込み及び読み出しが可能なメモリに対する制御回路であって、
前記メモリに対する書き込みデータと前記書き込みデータを書き込んだメモリアドレスからの読み出しデータとを比較する比較手段と、
前記比較手段による比較結果を、前記メモリアドレスと対応して格納する比較結果格納手段と、
前記比較結果に基づいて、不一致と判定された前記メモリアドレスに対して、前記書き込みデータを再度書き込むリトライ処理を制御する制御手段と、を備えたメモリ制御回路。
【請求項２】
前記制御手段は、不一致と判定されたメモリアドレスに対して連続して前記リトライ処理を行うことを特徴とする請求項１に記載のメモリ制御回路。
【請求項３】
更に、前記書き込みデータを格納するデータ記憶手段を有し、
前記データ記憶手段は、不一致と判定された前記メモリアドレスに対応する書き込みデータを前記制御手段に出力することを特徴とする請求項１又は２に記載のメモリ制御回路。
【請求項４】
前記比較結果格納手段は、１つの書き込みデータに対して１ビットの情報格納領域を有し、前記書き込みデータの比較結果を格納することを特徴とする請求項１に記載のメモリ制御回路。
【請求項５】
前記比較結果格納手段は、１つの書き込みデータに対して複数ビットの情報格納領域を有し、前記複数ビットの情報格納領域には、前記書き込みデータの比較結果と、前記書き込みデータの各ビットに対応した比較結果を格納することを特徴とする請求項１に記載のメモリ制御回路。
【請求項６】
請求項１乃至５のいずれかに記載のメモリ制御回路を備えたマイクロコンピュータ。
【請求項７】
前記メモリは、不揮発性メモリであることを特徴とする請求項１乃至６のいずれかに記載のメモリ制御回路。
【請求項８】
データの書き込み及び読み出しが可能なメモリへのデータ書き換え方法であって、
前記メモリに対する書き込みデータと前記書き込みデータを書き込んだメモリアドレスからの読み出しデータとを比較し、
比較した結果を、前記メモリアドレスと対応して格納し、
格納された比較結果に基づいて、不一致と判定された前記メモリアドレスに対して、前記書き込みデータを再度書き込むリトライ処理を制御するデータ書き換え方法。
【請求項９】
不一致と判定されたメモリアドレスに対して連続して前記リトライ処理を行うことを特徴とする請求項８に記載のデータ書き換え方法。
【請求項１０】
前記書き込みデータを格納し、
不一致と判定された前記メモリアドレスに対応する書き込みデータを出力することを特徴とする請求項８又は９に記載のデータ書き換え方法。
【請求項１１】
１つの書き込みデータに対して、１ビットの前記比較結果情報を格納することを特徴とする請求項８に記載のデータ書き換え方法。
【請求項１２】
１つの書き込みデータに対して、前記書き込みデータの比較結果情報と、前記書き込みデータの各ビットに対応した比較結果情報を格納することを特徴とする請求項８に記載のデータ書き換え方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記憶素子に格納されたデータの書き換えにおいて、処理時間を短縮するメモリ制御回路及びデータ書き換え方法に関する。
【背景技術】
【０００２】
従来、メモリ等記憶素子に格納されたデータの書き換えについては、以下のような技術が用いられている。図９は、従来技術に係る書き換え処理のフローを示すフローチャートである。図９を用いて、従来技術について説明する。従来技術では、ＣＰＵからメモリ制御回路にデータ書き換え処理が要求された場合、書き込み処理（Ｓ７００）に続いて、ベリファイ処理及びリトライ処理（Ｓ８００）が実行される。
【０００３】
始めに、Ｓ７００の書き込み処理によって、ＣＰＵから出力された書き込みデータが記憶素子に書き込まれる。次に、Ｓ８００にて記憶素子に書き込まれたデータが正しく書き込まれたか否かを、本来の書き込みデータと比較する（ベリファイ処理）。以下の説明では、記憶素子に書き込むデータを書き込みデータと称す。記憶素子に書き込まれたデータをベリファイ処理のために読み出したデータを読み出しデータと称す。読み出しデータと書き込みデータが一致し、正しく書き込まれている場合、データ書き換え処理は終了する。読み出しデータと書き込みデータが一致せず、正しく書き込まれていない場合は、記憶素子に書き込まれた不一致データの位置に書き込みデータを再度書き込む処理（リトライ処理）を実施する。
【０００４】
図９に示した処理を更に詳述する。図１０は、図９に示す書き込み処理（Ｓ７００）を詳細に示したフローチャートである。図１０を用いて、書き込み処理の動作を説明する。図示しないが、従来技術に係るメモリ制御回路は、ＣＰＵから出力された書き込みデータを格納する第１のメモリと、ＣＰＵと第１のメモリとの間のデータ送受処理に用いる第２のメモリを有している。始めに、ＣＰＵからメモリ制御回路にデータ書き換え処理が要求されると、メモリ制御回路は書き込みモードに設定される（Ｓ７０１）。Ｓ７０２にて、書き込みデータを書き込む第１のメモリのアドレス情報を取得する。ここで処理される書き込みデータの単位は、書き込みに指定された領域（以下、指定領域と称す）全てでも、指定領域を所定の書き込み単位毎に分割してもよい。なお、第１のメモリにおいては、所定の書き込み単位毎に１つのアドレスが対応する。Ｓ７０３にて、第２のメモリに書き込みデータを格納する。Ｓ７０４にて、Ｓ７０２で取得した第１のメモリのアドレスに書き込みデータを格納する（書き込み制御処理）。Ｓ７０５にて、指定領域全ての書き込みが終了したか確認する。終了していれば書き込み処理は終了する。終了していなければ、次の書き込みデータを書き込むアドレス情報を取得し（Ｓ７０６）、次の書き込みデータを第２のメモリに格納し（Ｓ７０７）、Ｓ７０４からの処理を繰り返す。
【０００５】
図１１は、図９に示すベリファイ処理及びリトライ処理（Ｓ８００）を詳細に示したフローチャートである。図１１を用いて、従来技術に係るベリファイ／リトライ処理の動作について説明する。始めに、書き込み処理（Ｓ７００）において第１のメモリに格納されたデータが正しく書き込まれているか否かを確認するため、Ｓ８０１にてベリファイモードに設定する。Ｓ８０２にて、ベリファイするデータが格納された第１のメモリのアドレス情報を取得する。Ｓ８０３にて、第２のメモリに、Ｓ８０２にて取得したアドレスに格納されているデータに対応する書き込みデータを格納する。Ｓ８０４のベリファイ制御処理にて、Ｓ８０２で取得した第１のメモリのアドレスに格納されているデータを読み出し（読み出しデータ）、第２のメモリに格納されている書き込みデータと比較処理する。書き込みデータと読み出しデータが一致するか否かを判定し（Ｓ８０５）、一致した場合、指定領域全てにおいて確認が終了したか判定する（Ｓ８０６）。指定領域の確認が終了していなければ、次にベリファイするデータのアドレス情報を取得する（Ｓ８０７）。そして、そのデータに対応する書き込みデータを第２のメモリに格納し（Ｓ８０８）、Ｓ８０４からの処理を繰り返す。
【０００６】
Ｓ８０５にて、書き込みデータと読み出しデータが一致しなかった場合、即ちベリファイ不一致となった場合、Ｓ８０９からリトライ処理が実行される。まず、Ｓ８０９にて、メモリ制御回路を再度書き込みモードに設定する。次に、再度書き込み制御処理にてベリファイ不一致となったデータに対応する書き込みデータを第１のメモリのアドレスに書き込む（Ｓ８１０）。リトライ処理での再度書き込み制御処理にて第１のメモリに格納されたデータを再修正データと称す。Ｓ８１１にてベリファイモードに設定し、Ｓ８１２のベリファイ制御処理にて、再修正データを読み出し、それに対応する書き込みデータと比較処理する。Ｓ８１３にて、書き込みデータと再修正データが一致するか判定する。一致した場合は、次にベリファイするデータのアドレスを受け付ける（Ｓ８１４）。そして、そのベリファイデータに対応する書き込みデータを第２のメモリに格納し（Ｓ８１５）、Ｓ８０４の処理から開始する。Ｓ８１３にて、書き込みデータと再修正データが一致しなかった場合、Ｓ８１６にてリトライ処理を所定回数繰り返す。定められた閾値の回数繰り返す前にリトライ処理が正常に終了した場合、Ｓ８０９の処理から開始する。閾値の回数を繰り返してもベリファイ不一致となる場合、異常終了する。
【０００７】
なお、データの書き換えに関する技術の一例は、特許文献１にも開示されている。特許文献１では、第１のメモリにデータを書き込む際、第２のメモリに書いてから第１のメモリを読み出して比較し、一致しないときだけ書き込むことにより、不要な書き込み回数を抑制し、時間短縮を図っている。また、特許文献１には、特定の大きさに分割した読み出しデータと書き込みデータを比較し、データの一部に不一致があった場合は不一致フラグがセットされる技術についても記載されている。不一致フラグがセットされているデータのみを第１のメモリに書き込むことにより、不要な書き込みを削減することができる。
【特許文献１】特開２００３−２５６２６６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、発明者は従来技術には以下の課題があることを見出した。従来技術のベリファイ処理では、ベリファイ不一致が発生すると直ちに不一致データのリトライ処理が実行され、リトライ処理終了後ベリファイ処理に戻る。リトライ処理では、書き込み処理とベリファイ処理が実施されるため、メモリ制御回路を書き込みモードとベリファイモードに切り替える必要がある。従って、ベリファイ不一致データが発生する毎に、メモリ制御回路は書き込みモードとベリファイモードを切り替える。書き込みモードとベリファイモードの切り替えには、モードを安定させるためのセットアップ時間が必要となる。その結果、ベリファイ不一致データが発生する毎に、書き込みモードとベリファイモードの切り替え時間が必要となるため、データ書き換え処理速度が低下する。特に、ベリファイ不一致データが複数発生する場合等、処理速度の低下が顕著である。
【０００９】
また、特許文献１では、不一致フラグにより不要な書き込みを削減することは可能であるが、特定の大きさに分割したデータ単位内のどのアドレスが不一致であるかを記憶する手段がない。従って、比較処理が終了する毎に不一致アドレスを第１のメモリ等に書き込む必要がある。即ち、第１のメモリは、データを読み出して書き込みデータと比較した後、データが不一致となった場合不一致フラグを第１のメモリに書き込む必要がある。例えば、フラッシュメモリのように読み出しと書き込みの動作を切り替えて使用する記憶素子に不一致アドレスを書き込む場合、書き込みのためのモード切替や内部電圧を発生するため所定の時間を要することになる。そのため、切り替え回数の増加と共に、実際の書き込み時間以外のオーバヘッド時間が増大し、全体の書き込み時間が長くなるという問題がある。
【課題を解決するための手段】
【００１０】
本発明の第１の態様に示されるメモリ制御回路は、データの書き込み及び読み出しが可能なメモリに対する制御回路であって、前記メモリに対する書き込みデータと前記書き込みデータを書き込んだメモリアドレスからの読み出しデータとを比較する比較手段と、前記比較手段による比較結果を、前記メモリアドレスと対応して格納する比較結果格納手段と、前記比較結果に基づいて、不一致と判定された前記メモリアドレスに対して、前記書き込みデータを再度書き込むリトライ処理を制御する制御手段と、を備えたものである。
【００１１】
また、本発明の第２の態様に示されるデータ書き換え方法は、データの書き込み及び読み出しが可能なメモリへのデータ書き換え方法であって、前記メモリに対する書き込みデータと前記書き込みデータを書き込んだメモリアドレスからの読み出しデータとを比較し、比較した結果を、前記メモリアドレスと対応して格納し、格納された比較結果に基づいて、不一致と判定された前記メモリアドレスに対して、前記書き込みデータを再度書き込むリトライ処理を制御するものである。
【００１２】
このように、不一致と判定されたデータを纏めてリトライ処理することにより、リトライ処理では、不一致データの書き込み処理を繰り返した後、ベリファイ処理を実施する。従って、書き込みモードとベリファイモードへの切り替えは１回ずつとなるため、従来技術のようにベリファイ不一致データ毎にモード切り替えを繰り返す必要がない。その結果、データ書き換えの処理速度を向上させることが可能となる。
【発明の効果】
【００１３】
以上のような構成により、記憶素子に格納されたデータの書き換えにおいて、処理時間を短縮するメモリ制御回路及びデータ書き換え方法を提供することができる。
【発明を実施するための最良の形態】
【００１４】
以下に、本発明の好ましい実施の形態を説明する。説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。また、説明の明確化のため、必要に応じて重複説明は省略されている。
【００１５】
発明の実施の形態１．
図面を参照し、第１の実施形態に係るメモリ制御回路について説明する。第１の実施形態では、ＬＳＩ（大規模集積回路：Large Scale Integrated Circuit）等に形成された半導体装置に内蔵されるフラッシュメモリへのデータ書き換え処理を行うメモリ制御回路を例に説明する。図１は、第１の実施形態に係るメモリ制御回路を有する半導体装置の構成を示したブロック図である。
【００１６】
図１に示すように、半導体装置１００は、メモリ制御回路１１０、フラッシュメモリ１２０、ＣＰＵ１３０の他、ＲＡＭ１４０、ファームＲＯＭ１５０、及びシリアルインターフェース１６０を有している。また、外部に備えられたライタ１７０は、フラッシュメモリ１２０へのプログラムの書き込み等に使用される。ＣＰＵ１３０は、バス１８０を介して、メモリ制御回路１１０やシリアルインターフェース１６０等の周辺機器を制御する。各々の周辺機器には、入出力端子が設けられ、バス１８０やライタ１７０等の外部機器と接続することが可能である。
【００１７】
第１の実施形態に係るデータの書き換え処理では、ライタ１７０から送信される書き込みデータをシリアルインターフェース１６０を介して、ＣＰＵ１４０がＲＡＭ１４０に一旦格納する。ＣＰＵ１４０は、所定の書き込みデータ量分だけＲＡＭ１４０に格納した後、ＲＡＭ１４０からデータを読み出し、バス１８０を介してメモリ制御回路１１０に転送する。これらのＣＰＵ１３０の動作は、ファームＲＯＭ１５０に書き込まれたプログラムによって行われる。
【００１８】
次に、図２を用いて、第１の実施形態に係るメモリ制御回路について説明する。図２は、半導体装置１００におけるデータ書き換え処理に係る構成を示したブロック図である。半導体装置１００は、メモリ制御回路１１０、フラッシュメモリ１２０、及びＣＰＵ１３０を有している。メモリ制御回路１１０は、アドレスポインタ１０１、クロック制御レジスタ１０２、モード制御レジスタ１０３、ライトバッファ１０４、比較回路１０５、リードバッファ１０６、ステータスレジスタ１０７、シーケンサ１０８、及び書込レジスタ１０９を有している。第１の実施形態では、記憶素子にフラッシュメモリ１２０を用いているが、フラッシュメモリに限らず他の不揮発性の記憶素子を使用することも可能である。フラッシュメモリ１２０は、従来技術で示す第１のメモリと同様の機能を有す。
【００１９】
メモリ制御回路１１０は、ＣＰＵ１３０からの要求に従い、フラッシュメモリ１２０への書き換え処理等読み書きに関する処理を制御する機能を有する。フラッシュメモリ１２０への書き込みは、前述のようにＲＡＭ１４０に格納されたデータをＣＰＵ１３０が読み出し、メモリ制御回路１１０に転送する。転送された書き込みデータは、書込レジスタ１０９に格納される。ＣＰＵ１３０は、メモリ制御回路１１０に必要なデータを設定後、シーケンサ１０８に書き換え処理を指示する。以降のデータ書き換え処理は、シーケンサ１０８が制御する。
【００２０】
メモリ制御回路１１０の各要素について、以下に説明する。アドレスポインタ１０１は、シーケンサ１０８の指示に応じて、フラッシュメモリ１２０へデータを書き込む場合の書き込みアドレスを取得する。同様に、フラッシュメモリ１２０からデータを読み出す場合の読み出しアドレスを取得する。クロック制御レジスタ１０２は、シーケンサ１０８からの指示に基づいて、データ書き換えに対する処理をクロック制御している。
【００２１】
モード制御レジスタ１０３は、シーケンサ１０８の指示に応じて、メモリ制御回路１１０のモードの切り替えを制御する。メモリ制御回路１１０では、書き込み処理を実行する書き込みモードや、ベリファイ処理を実行するベリファイモード等が使用され、処理に応じて切り替えられる。書き込みモードでは、シーケンサ１０８が書込レジスタ１０９から取得した書き込みデータをフラッシュメモリ１２０に書き込む書き込み処理が行われる。ベリファイモードでは、フラッシュメモリ１２０に書き込まれたデータが正しく書き込まれたか否かを検査するベリファイ処理が行われる。具体的には、フラッシュメモリ１２０に書き込まれたデータをリードバッファ１０６に読み出し、ライトバッファ１０４にセットされた本来の書き込みデータ（期待値）と比較する。即ち、読み出したデータに誤りがないか検査することをベリファイ処理と称す。なお、以降の記述には、フラッシュメモリ１２０に書き込むデータを書き込みデータと称す。フラッシュメモリ１２０に書き込まれたデータをベリファイ処理のために読み出したデータを読み出しデータと称す。
【００２２】
ライトバッファ１０４は、ＣＰＵ１３０とフラッシュメモリ１２０の間に配設され、書き込み処理時にフラッシュメモリ１２０へ書き込みデータを出力し、ベリファイ処理時に比較回路１０５へベリファイデータ（書き込みデータ）を出力するための一時保存用のバッファである。ライトバッファ１０４への書き込みはシーケンサ１０８により実施される。第１の実施形態に係るライトバッファ１０４は、例えば３２ビット分（４バイト）のバッファ領域を有し、ＣＰＵ１３０から受信した書き込みデータの書き込み単位を３２ビットとする場合の例を示す。なお、バッファ領域は３２ビットに限らず設定でき、書き込み単位が３２ビットに限らないことはもちろんである。
【００２３】
リードバッファ１０６は、ＣＰＵ１３０とフラッシュメモリ１２０の間に配設され、フラッシュメモリ１２０から読み出された読み出しデータを一時保存し、ベリファイ処理時に比較回路１０５へ出力するバッファである。第１の実施形態では、例えば３２ビット分（４バイト）のバッファ領域を有し、読み出しデータの読み出し単位を３２ビットとする場合の例を示す。なお、バッファ領域は３２ビットに限らず設定でき、読み出し単位が３２ビットに限らないことはもちろんである。
【００２４】
比較回路１０５は、ライトバッファ１０４に格納された書き込みデータと、リードバッファ１０６に読み出された読み出しデータが一致するか否かを比較する回路である。比較回路１０５では、ライトバッファ１０４と、リードバッファ１０６に格納されたデータを単位領域毎に比較する。例えば、１書き込み単位が３２ビット分の領域である場合、３２ビット毎に書き込みデータと読み出しデータが一致するか否かを比較する。比較した結果は、ステータスレジスタ１０７に出力される。このように、比較回路１０５は、フラッシュメモリ１２０に対する書き込みデータと、この書き込みデータを書き込んだフラッシュメモリ１２０のアドレス（メモリアドレス）からの読み出しデータとを比較する比較手段である。ライトバッファ１０４に格納された３２ビット分のデータとリードバッファ１０６に格納された３２ビット分のデータが一致する場合は、例えば"１"を示すビット情報がステータスレジスタ１０７へ出力される。ライトバッファ１０４に格納されたデータとリードバッファ１０６に格納されたデータが不一致である場合は、例えば"０"を示すビット情報がステータスレジスタ１０７へ出力される。なお、ビット情報については、データが一致する場合を"０"とし、データ不一致の場合を"１"とすることも可能である。
【００２５】
ステータスレジスタ１０７は、比較回路１０５での比較結果を格納するレジスタである。ステータスレジスタ１０７には、比較した結果を、一致／不一致に係らず格納することができる。第１の実施形態に係るステータスレジスタ１０７は、１ビットのフラグを６４個分有している。従って、比較結果を６４個分格納することができる。例えば、１書き込み単位が３２ビット（４バイト）である場合、６４書き込み単位（２５６バイト）分のデータの比較結果を格納することができる。即ち、ステータスレジスタ１０７は、１つの書き込みデータに対して１ビットの情報格納領域を有し、その書き込みデータの比較結果を格納する比較結果格納手段である。比較結果に対して、ステータスレジスタ１０７のどのビットをセットするかについては、シーケンサ１０８からステータスレジスタ１０７への選択信号によって制御される。例えば比較結果がエラーとなった場合、シーケンサ１０８によって該当するステータスレジスタ１０７に不一致を示すビットがセットされる。なお、セットされたステータスレジスタ１０７のビットは、該当するデータが格納されている書込レジスタ１０９と対応している。
【００２６】
ステータスレジスタ１０７では、１書き込み単位分のデータに対応する比較結果が１ビットのフラグとしてセットされる。セットされたフラグは、比較に使用したデータが格納されているフラッシュメモリ１２０のアドレス（メモリアドレス）と対応している。例えば、比較回路１０５にて、書き込みデータと読み出しデータを比較し不一致となった場合、"０"を示すビット情報が図２に示すｂ０に格納される。ｂ０は、フラッシュメモリ１２０の所定のアドレス（メモリアドレス）と対応しており、そのメモリアドレスには上記で不一致となった読み出しデータが格納されている。即ち、ステータスレジスタ１０７は、比較回路１０５における比較結果と、比較に使用した書き込みデータが書き込まれるフラッシュメモリ１２０のアドレス（メモリアドレス）情報とを、関連付けて保持する比較結果格納手段である。フラッシュメモリ１２０のアドレスに対応したステータスレジスタ１０７の選択は、シーケンサ１０８が制御する。なお、ステータスレジスタ１０７の格納領域が６４ビットのフラグに限らないことはもちろんである。また、ステータスレジスタ１０７には、ＲＡＭ等の記憶素子を用いることが可能である。更に、ビット情報については、データが一致する場合を"０"とし、データ不一致の場合を"１"とすることも可能である。ステータスレジスタ１０７は、ベリファイ処理を行う前にシーケンサ１０８からの初期化信号により、全て"１"又は"０"に初期化しておき、不一致となったビットだけに"０"又は"１"を格納する。
【００２７】
シーケンサ１０８は、メモリ制御回路１１０の各要素を統括し、第１の実施形態に係る書き込み処理、ベリファイ処理、及びリトライ処理を制御する制御手段である。具体的に、シーケンサ１０８は、以下の動作を制御する。即ち、ＣＰＵ１３０によって書込レジスタ１０９に転送された書き込みデータをライトバッファ１０４にセットする。そして、フラッシュメモリ１２０へ書き込みデータを書き込む（書き込み処理）。その後、書き込みデータが正しく書き込まれたかを確認する。即ち、フラッシュメモリ１２０へ書き込まれた書き込みデータに対して読み出し動作を行い、読み出しデータをリードバッファ１０６に格納し、ライトバッファ１０４にセットされた書き込みデータと比較する（ベリファイ処理）。ベリファイ処理による比較の結果、不一致の場合、ステータスレジスタ１０７にエラー情報を格納する。そして、エラー情報に対応するアドレスに格納されるデータのみを纏めて、再度書き込み処理（リトライ処理）を実施する。シーケンサ１０８は、ベリファイ処理による比較結果に基づいて、不一致と判定されたメモリアドレスに対して、書き込みデータを再度書き込むリトライ処理を制御する制御手段である。なお、これらの処理は、シーケンサ１０８で実行する以外にも、ＣＰＵ１３０でのソフトウェア処理によって制御することも可能である。
【００２８】
ライトバッファ１０４の前段には、書込レジスタ１０９が配設されている。書込レジスタ１０９は、ライトバッファ１０４より記憶容量が多く、ＣＰＵ１３０から受信した書き込みデータを保持しておくことが可能である。例えば、ＣＰＵ１３０から要求されたデータ書き換え処理が発生した場合、書込レジスタ１０９に全ての書き込みデータが格納され、書き換え処理が完了するまで保持しておくことが可能である。書き換え処理において、データが不一致となった場合、不一致データに対応する本来の書き込みデータをライトバッファ１０４に出力する。書込レジスタ１０９に格納されたデータは、シーケンサ１０８を介してライトバッファ１０４に出力することが可能である。書込レジスタ１０９のどのレジスタの内容をライトバッファ１０４に出力するかの選択信号は、シーケンサ１０８から書き込みレジスタ１０９に出力される。前述したように、ステータスレジスタ１０７のビットは、該当するデータが格納される書込レジスタ１０９と対応する。また、ステータスレジスタ１０７のビットは、フラッシュメモリ１２０のメモリアドレスと対応する。即ち、書込レジスタ１０９は、メモリアドレスと対応してデータを格納するデータ記憶手段であり、不一致と判定されたメモリアドレスに対応する書き込みデータをシーケンサ１０８を介してライトバッファ１０４に出力する。なお、ライトバッファ１０４への書き込みはシーケンサ１０８により制御される。
【００２９】
第１の実施形態に係る書込レジスタ１０９は、３２ビット（４バイト）のデータを格納できる書込レジスタを６４個有している例について示す。従って、２５６バイト分の書き込みデータを保持することが可能である。なお、書込レジスタ１０９の有するレジスタが６４レジスタに限らないことはもちろんである。
【００３０】
次に、図３を用いて、第１の実施形態に係るデータ書き換え処理について詳述する。なお、必要に応じて図２を併用して説明する。図３は、第１の実施形態に係る書き換え処理の動作を示すフローチャートである。始めに、ＣＰＵ１３０からフラッシュメモリ１２０に格納されているデータの書き換え処理が要求されると、書き込み処理によって書き込みデータがフラッシュメモリ１２０に書き込まれる（Ｓ１００）。Ｓ１００の工程は従来技術の説明で用いた図９のＳ７００の工程と同様である。なお、ここで処理する書き込みデータの単位は、書き込みに指定された指定領域全てでも、指定領域を所定の書き込み単位毎に分割したものでもよい。また、フラッシュメモリ１２０には、書き込み単位毎に１つのアドレスが対応する。
【００３１】
次に、ベリファイ処理（Ｓ２００）では、フラッシュメモリ１２０に格納されたデータが正しく書き込まれたか否かを書き込みデータと比較する。比較した結果、書き込みデータとフラッシュメモリ１２０から読み出した読み出しデータがベリファイ不一致となるか否かを確認し、比較結果をステータスレジスタ１０７に格納する。Ｓ３００にて、ベリファイ不一致が生じた場合、ベリファイ不一致データのリトライ処理を実施する。ベリファイ不一致がない場合は、書き換え処理は終了する。
【００３２】
リトライ処理は、リトライ用書き込み処理（Ｓ４００）とリトライ用ベリファイ処理（Ｓ５００）から構成される。Ｓ４００のリトライ用書き込み処理では、Ｓ３００にてベリファイ不一致となったデータが再度書き込み処理され、フラッシュメモリ１２０に格納される。再度書き込み処理で修正されたデータを再修正データと称す。Ｓ５００のリトライ用ベリファイ処理では、フラッシュメモリ１２０に格納された再修正データが正しく書き込まれているか否か、対応する本来の書き込みデータと比較する。比較した結果、書き込みデータと再修正データが一致しないものがある場合は、定められた閾値の回数リトライ処理する。定められた閾値の回数を繰り返してもベリファイ不一致となる場合は、異常終了する。
【００３３】
図３に示した処理を更に個別に詳述する。Ｓ１００の書き込み処理のフローは、従来技術の図１０のフローと同じであるため説明を省略する。図４は、図３に示すベリファイ処理（Ｓ２００）を詳細に示したフローチャートである。図４を用いて、第１の実施形態に係るベリファイ処理（Ｓ２００）の動作を説明する。
【００３４】
ベリファイ処理（Ｓ２００）では、書き込み処理（Ｓ１００）においてフラッシュメモリ１２０に格納されたデータが正しく書き込まれているかを確認する。始めに、メモリ制御回路１１０は、シーケンサ１０８の要求に応じて、モード制御レジスタ１０３をベリファイモードに設定する（Ｓ２０１）。次に、アドレスポインタ１０１がフラッシュメモリ１２０に格納されているデータのアドレス情報を取得する（Ｓ２０２）。
【００３５】
次に、ライトバッファ１０４に、Ｓ２０２にて取得したアドレスに格納されているデータに対応する書き込みデータを格納する（Ｓ２０３）。書き込み処理（Ｓ１００）において使用した本来の書き込みデータは、書き換え処理が終了するまで書込レジスタ１０９にそのまま保持されている。従って、書込レジスタ１０９に保持されている書き込みデータをライトバッファ１０４に再度格納する。ここで処理するデータの単位は、書き込み処理（Ｓ１００）において書き込まれた指定領域全てでも、指定領域を所定の書き込み単位毎に分割したものでもよい。次に、Ｓ２０４のベリファイ制御処理にて、リードバッファ１０６にＳ２０２にて取得したアドレスに格納されているデータを読み出し（読み出しデータ）、ライトバッファ１０４に格納された書き込みデータと一致するか否か比較処理する。
【００３６】
Ｓ２０５にて、ライトバッファ１０４の書き込みデータとリードバッファ１０６の読み出しデータが一致するか否かを判定する。一致した場合、読み出しデータが格納されていたアドレスに対応するステータスレジスタ１０７に、一致したことを示すビット情報（例えば"１"）を格納する。次に、書き込み処理（Ｓ１００）において書き込まれた指定領域全てにおいて確認が終了したか判定する（Ｓ２０７）。終了していなければ、次の読み出しデータのベリファイ処理が実行される。即ち、アドレスポインタ１０１には、次にベリファイするデータのアドレスが設定される（Ｓ２０８）。そして、そのデータに対応する書き込みデータをライトバッファ１０４に格納し（Ｓ２０９）、Ｓ２０４からの処理を繰り返す。
【００３７】
Ｓ２０５にて、書き込みデータと読み出しデータが一致しなかった場合、即ちベリファイ不一致となった場合、不一致となったデータが格納されていたアドレスに対応するステータスレジスタ１０７に、不一致であることを示すビット情報（例えば"０"）を格納する（Ｓ２０６）。そして、Ｓ２０７からの処理を続ける。
【００３８】
第１の実施形態に係るベリファイ処理では、書き込み単位毎に分割されたデータを比較し、比較結果をステータスレジスタ１０７に格納することを、指定領域が全て比較されるまで繰り返すことに特徴を有している。即ち、第１の実施形態は、従来技術のようにベリファイ不一致データが生じても直ぐにリトライ処理を行わず、指定領域の全てのベリファイ処理を実行してからリトライ処理を実施する。その場合、ベリファイ結果を纏めて格納するステータスレジスタ１０７を有している。なお、第１の実施形態に係るベリファイ処理は、シーケンサ１０８によって制御される。但し、点線にて示すＳ２０４以降の処理においては、シーケンサ１０８に限らず、ＣＰＵ１３０によって制御することも可能である。
【００３９】
次に、図５を用いて、第１の実施形態に係るリトライ用書き込み処理（Ｓ４００）の動作を説明する。図５は、図３に示すリトライ用書き込み処理（Ｓ４００）を詳細に示したフローチャートである。
【００４０】
リトライ用書き込み処理（Ｓ４００）は、ベリファイ処理（Ｓ２００）でベリファイ不一致となったデータに対応する本来の書き込みデータを再度フラッシュメモリ１２０に書き込む処理である。始めに、シーケンサ１０８は、ステータスレジスタ１０７からベリファイ処理（Ｓ２００）にて不一致となったデータのアドレス情報を読み出す（Ｓ４１１）。また、メモリ制御回路１１０は、モード制御レジスタ１０３により、書き込みモードに設定される（Ｓ４１２）。
【００４１】
次に、ステータスレジスタ１０７から読み出したベリファイ不一致データのアドレス情報を、アドレスポインタ１０１が取得する（Ｓ４１３）。次に、取得したアドレス情報に対応する書き込みデータを、ライトバッファ１０４に格納する（Ｓ４１４）。この書き込みデータは、ＣＰＵ１３０から転送された本来のデータのことであり、フラッシュメモリ１２０に格納する必要のある期待値を示している。書き込み処理（Ｓ１００）やベリファイ処理（Ｓ２００）において使用した本来の書き込みデータは、書き換え処理が終了するまで、書込レジスタ１０９にそのまま保持される。従って、書込レジスタ１０９に保持されている書き込みデータが、シーケンサ１０８を介してライトバッファ１０４に再度格納される。次に、Ｓ４１５にて、ライトバッファ１０４に格納された書き込みデータを、Ｓ４１３にて取得したフラッシュメモリ１２０のアドレスに格納し、書き込み制御処理が行われる。このリトライ用書き込み処理にて、フラッシュメモリ１２０に格納されたデータは、再修正データと称される。
【００４２】
次に、Ｓ４１６では、ステータスレジスタ１０７に格納されている他のベリファイ不一致データのアドレス情報を読み出す。Ｓ４１７にて、ベリファイ不一致データのアドレス情報の有無を判定し、無い場合は、リトライ用書き込み処理が終了する。Ｓ４１７にて、ベリファイ不一致データのアドレス情報があった場合、次のベリファイ不一致データのアドレスがアドレスポインタ１０１に設定される（Ｓ４１８）。そして、そのアドレスに対応する本来の書き込みデータ（期待値）がライトバッファ１０４に格納され（Ｓ４１９）、Ｓ４１５からの処理を繰り返す。
【００４３】
第１の実施形態に係るリトライ用書き込み処理では、ベリファイ不一致となったデータの数だけ連続して書き込み処理を繰り返すことに特徴を有している。従って、従来技術のようにベリファイ不一致データ毎にリトライ用書き込み処理とリトライ用ベリファイ処理を切り替える必要がない。なお、第１の実施形態に係るリトライ用書き込み処理は、シーケンサ１０８によって制御される。但し、点線にて示すＳ４１５以降の処理においては、シーケンサ１０８に限らず、ＣＰＵによって制御することも可能である。
【００４４】
次に、図６を用いて、第１の実施形態に係るリトライ用ベリファイ処理（Ｓ５００）の動作を説明する。図６は、図３に示すリトライ用ベリファイ処理（Ｓ５００）を詳細に示したフローチャートである。
【００４５】
リトライ用ベリファイ処理（Ｓ５００）では、リトライ用書き込み処理（Ｓ４００）でフラッシュメモリ１２０に格納された再修正データが正しく書き込まれているかを確認する。始めに、シーケンサ１０８は、ステータスレジスタ１０７からベリファイ処理（Ｓ２００）にて不一致となったデータのアドレス情報を読み出す（Ｓ５０１）。なお、読み出したアドレスには、リトライ書き込み処理において書き込まれた再修正データが格納されている。また、メモリ制御回路１１０は、モード制御レジスタ１０３により、ベリファイモードに設定される（Ｓ５０２）。
【００４６】
次に、ステータスレジスタ１０７から読み出したベリファイ不一致データのアドレス情報を、アドレスポインタ１０１が取得する（Ｓ５０３）。次に、取得したアドレス情報に対応する書き込みデータを、ライトバッファ１０４に格納する（Ｓ５０４）。この書き込みデータは、ＣＰＵ１３０から転送された本来のデータのことであり、フラッシュメモリ１２０に格納する必要のある期待値を示している。書き込み処理（Ｓ１００）やベリファイ処理（Ｓ２００）において使用した本来の書き込みデータは、書き換え処理が終了するまで、書込レジスタ１０９にそのまま保持される。従って、書込レジスタ１０９に保持されている書き込みデータが、シーケンサ１０８を介してライトバッファ１０４に再度格納される。Ｓ５０５のベリファイ制御処理にて、Ｓ５０３にて取得されたアドレスに格納されている再修正データをリードバッファ１０６に読み出し、ライトバッファ１０４に格納された書き込みデータと一致するか否か比較処理する。
【００４７】
Ｓ５０６にて、ライトバッファ１０４の書き込みデータとリードバッファ１０６の再修正データとが一致するか否かを判定する。一致した場合、ステータスレジスタ１０７のベリファイ不一致データに対応するアドレスに格納されているビット情報をシーケンサ１０８が初期化する（Ｓ５０７）。ステータスレジスタ１０７は、ベリファイ処理を行う前にシーケンサ１０８からの初期化信号により、全て"１"又は"０"に初期化しておき、不一致データに対応するビット情報に"０"又は"１"を格納する。従って、不一致データが格納されているアドレスに対応するステータスレジスタ１０７の内容が"０"である場合、初期化によって"１"が格納される。なお、不一致のときのステータスレジスタ１０７の内容が"１"である場合は、初期化によって"０"が格納されることも可能である。一致しなかった場合、ステータスレジスタ１０７に格納されている次のベリファイ不一致データのアドレス情報を読み出す（Ｓ５０８）。
【００４８】
Ｓ５０９にて、ベリファイ不一致データのアドレス情報の有無を判定し、無い場合は、リトライ用ベリファイ処理が終了する。ベリファイ不一致データのアドレス情報があった場合は、次のベリファイ不一致データのアドレス情報がアドレスポインタ１０１に取得される（Ｓ５１０）。そして、そのアドレスに対応する書き込みデータが書込レジスタ１０９からライトバッファ１０４に格納され（Ｓ５１１）、Ｓ５０５からの処理を繰り返す。
【００４９】
第１の実施形態に係るリトライ用ベリファイ処理では、リトライ用書き込み処理で書き込まれた再修正データのベリファイ処理を再修正データの数だけ繰り返すことに特徴を有している。従って、従来技術のように、ベリファイ不一致データ毎にリトライ用書き込み処理とリトライ用ベリファイ処理を切り替える必要がない。なお、第１の実施形態に係るリトライ用ベリファイ処理は、シーケンサ１０８によって制御される。但し、点線にて示すＳ５０５以降の処理においては、シーケンサ１０８に限らず、ＣＰＵ１３０によって制御することも可能である。
【００５０】
以上のように、第１の実施形態では、ベリファイ処理（Ｓ２００）によって発生したベリファイ不一致データ情報を集約して保存するステータスレジスタ１０７を有している。そして、リトライ処理では、ステータスレジスタ１０７に格納されたベリファイ不一致データの書き込み処理を繰り返し、更にリトライ書き込みした再修正データのベリファイ処理を繰り返す。従って、従来技術のように、ベリファイ処理中にベリファイ不一致データが発生した場合、その都度ベリファイ処理を中断し、ベリファイ不一致データ毎にリトライ処理をする必要がない。その結果、ベリファイ不一致データが生じる毎に書き込みモードとベリファイモードに切り替える必要がなくなる。
【００５１】
例えば、第１の実施形態に係る処理時間を数１、従来技術に係る処理時間を数２に示す。Ｄは、書き込まれた指定領域を書き込み単位毎に分割した場合の分割数を示し、Ｎは、ベリファイ不一致データのアドレス数を示す。
【００５２】
処理時間＝Ｄ×ベリファイ処理時間＋Ｎ×書き込み処理時間＋モード変更処理時間・・・・・（数１）
【００５３】
処理時間＝Ｄ×ベリファイ処理時間＋Ｎ×（書き込み処理時間＋２×モード変更処理時間）・・・・・（数２）
【００５４】
数１及び数２を比較すると、第１の実施形態に係る処理時間（数１）は、従来技術の処理時間（数２）に比べ、ベリファイ不一致データ毎に生じる２つのモード変更処理時間がない。即ち、ベリファイ不一致データ数毎に生じる書き込みモードとベリファイモードの切り替え時間分が短縮される。その結果、データ書き換え処理の処理速度が向上するという効果が得られる。
【００５５】
このような構成は、多段階書き込み処理のようにリトライ処理を前提とした書き込み処理を実施する場合や、書き込みデータを分割し、ベリファイ不一致データが複数発生する場合等に特に有効である。
【００５６】
また、メモリアドレスと対応したステータスレジスタ１０７に不一致データの情報を格納することにより、不一致データが格納されているアドレスを簡単に検出することが可能となる。即ち、特許文献１のように書き込み／読み出しモード切替等に時間を要する記憶素子に不一致フラグを立てる必要がなくなり、データ書き換え処理の処理速度が向上する効果が得られる。
【００５７】
発明の実施の形態２．
次に、本発明の実施の形態２について説明する。第２の実施形態においても、ＬＳＩ等に形成された半導体装置に内蔵されるフラッシュメモリへの書き換え処理を行うメモリ制御回路を例に説明することは第１の実施形態と同様である。半導体装置の構成要素や動作等、第１の実施形態と同様のものは省略する。図７を用いて、第２の実施形態に係るメモリ制御回路について説明する。図７は、第２の実施形態に係るメモリ制御回路を有する半導体装置の構成図を示したものである。
【００５８】
図７は、半導体装置２００におけるデータ書き換え処理を制御する構成を示したブロック図である。第２の実施形態におけるメモリ制御回路２１０の構成及びその機能については、比較回路２０５、ステータスレジスタ２０７を除いて、図２に示す第１の実施形態に係るメモリ制御回路１１０と同様である。また、メモリ制御回路２１０とフラッシュメモリ１２０及びＣＰＵ１３０との間の構成についても第１の実施形態と同様であるため、説明を省略する。
【００５９】
ステータスレジスタ２０７は、比較回路２０５での比較結果を格納するレジスタであることは、第１の実施形態と同様である。第２の実施形態に係るステータスレジスタ２０７も、比較結果の一致／不一致に係らず、比較した結果を格納することができる。また、第２の実施形態に係るステータスレジスタ２０７は、６４個分のレジスタを有している。そして、１書き込み単位分のデータに対応する比較結果が１レジスタにセットされる。そのレジスタは、比較に使用したデータが格納されているフラッシュメモリ１２０のアドレスと対応している。
【００６０】
第２の実施形態では、６４個のレジスタの各々に比較回路２０５での比較結果だけでなく、所定のデータ領域を備えることに特徴を有している。第２の実施形態では、ステータスレジスタ２０７の各々のレジスタは、１書き込み単位及び１読み出し単位の３２ビットデータに対応して、ｂ０〜ｂ３１の３２ビットで構成される。比較回路２０５は、比較動作は第１の実施形態と同様にライトバッファ２０４の各ビットとリードバッファ２０６の各ビットが比較されるが、第１の実施形態では３２ビットのうち、全てのビットが一致したか否かだけを示す判定結果がステータスレジスタ２０７に出力するのに対し、第２の実施形態では、各ビットの一致／不一致情報を出力する。例えば、各ビット毎に、一致の場合は"１"、不一致の場合は"０"として３２ビットの情報をステータスレジスタ２０７へ出力する。また、ステータスレジスタ２０７の格納領域が６４レジスタに限らず、１レジスタに格納される領域が３２ビットに限らないことはもちろんである。１レジスタに格納される領域は書き込み単位に応じて変更することができる。また、ステータスレジスタ２０７は、ＲＡＭ等の記憶素子を用いることが可能である。更に、比較回路２０５における比較結果が不一致となった場合、ステータスレジスタ２０７に格納される内容は"０"に限らず、"１"とすることも可能である。ステータスレジスタ２０７は、ベリファイ処理を行う前にシーケンサ１０８からの初期化信号により、全て"１"又は"０"に初期化しておき、不一致となったビットだけに"０"又は"１"を格納する。
【００６１】
例えば、比較回路２０５にて、１書き込み単位である３２ビット分の書き込みデータと読み出しデータのそれぞれ対応するビットを比較し、最下位ビットだけが不一致となった場合、"０"がステータスレジスタ２０７のレジスタＲ０のｂ０部に格納される。同時に、レジスタＲ０の他のビットｂ１〜ｂ３１には、夫々のビットの一致結果である"１"が格納される。Ｒ１〜Ｒ６３についても同様に比較の結果、不一致となったビットに対応したビットだけが"０"にセットされる。比較回路２０５による比較動作は、書き込みデータと読み出しデータとの否定排他的論理和（exclusive NOR：ＥＮＯＲ）処理により行うことができる。その結果、ステータスレジスタ２０７の"０"が格納されたレジスタに対応したフラッシュメモリ１２０のデータ領域で不一致が発生したこと、及び不一致のビット位置情報を得ることが可能である。
【００６２】
その後、フラッシュメモリ１２０の不一致となったアドレスに対してリトライ処理により再書き込みを行うが、ステータスレジスタ２０７の内容に基づいて、不一致となったビットに対してだけ書き込みするためのデータを書き込みデータとして書き込み処理を行う。例えば、最初の書き込みデータを書き込み後に読み出した読み出しデータとの比較で不一致があったメモリアドレスに再度書き込みを行う際に、ステータスレジスタ２０７の内容を元に、既に正常に書き込まれたビットに対しては不要な上書きをせずに、正常に書き込まれなかったビットに対してだけ書き込み処理を行う。フラッシュメモリ１２０では不要な書き込みをしないことで、正常に書き込まれているメモリセル（メモリビット）に必要以上のストレスをかけずに済む効果がある。この場合、実際に書き込み動作を行う場合のメモリセルには"０"を書くようなメモリ構成の場合には、比較後のステータスレジスタ２０７の内容をそのまま再書き込みデータとすることが可能となる。ベリファイ処理を行う前にステータスレジスタ２０７をシーケンサ１０８からの初期化信号により、全て"１"に初期化しておき、不一致となったビットだけ "０"を格納するようにしておけばよい。また、上記は不一致となったビットに対してだけ書き込みするためのデータを書き込みデータとして書き込み処理を行う例を説明したが、一致したビットも含めて最初の書き込みデータと同一のデータを書き込むようにしてもよい。また、メモリセルへの実際の書き込みデータを"０"とするか"１"とするかは回路設計で適宜成し得ることであり、ステータスレジスタ２０７へ格納する不一致情報についても"１"とすることもできるし、ベリファイ前に"０"に初期化することも可能である。
【００６３】
以上のように、レジスタＲ０〜Ｒ６３は、フラッシュメモリ１２０の所定のアドレスと対応しており、ベリファイ処理にて一致／不一致となった各々のデータが格納されている。即ち、ステータスレジスタ２０７は、１つの書き込みデータに対して複数ビットの情報格納領域を有し、その情報格納領域には、書き込みデータの各ビットに対応した比較結果を格納する比較結果格納手段である。
【００６４】
次に、第２の実施形態に係るデータ書き換え処理について説明する。第２の実施形態に係るデータ書き換え処理は、図３に示すフローチャートのＳ２００におけるベリファイ処理の一部と、Ｓ４００及びＳ５００におけるリトライ処理を除いて第１の実施形態と同じである。以下では、第２の実施形態に特有のベリファイ処理と、リトライ処理についてのみ説明し、その他は第１の実施形態と同様であるため省略する。
【００６５】
第２の実施形態におけるベリファイ処理については、図４に示したフローチャートを用いて説明する。図４に示すＳ２０４のベリファイ制御処理では、１書き込み単位毎に比較するだけでなく、１書き込み単位及び１読み出し単位の３２ビットデータに対応する各ビット毎に一致するか否かを比較処理する。従って、Ｓ２０６の処理では、ステータスレジスタ２０７には、１書き込み単位及び１読み出し単位の３２ビットデータに対応する各ビット毎に一致するか否かを比較した結果（以下、読み出し結果と称す）が格納されている。その他の処理については、第１の実施形態と同様であるため、説明を省略する。
【００６６】
次に、図８を用いて、第２の実施形態に係るリトライ用書き込み処理について説明する。第２の実施形態に係るリトライ用書き込み処理は、ベリファイ処理でベリファイ不一致となったデータを再度フラッシュメモリ１２０に書き込む処理である。始めに、シーケンサ２０８は、ステータスレジスタ２０７からベリファイ処理にて不一致となったデータのアドレス情報と読み出し結果を読み出す（Ｓ４２１）。また、メモリ制御回路２１０は、モード制御レジスタ２０３により、書き込みモードに設定される（Ｓ４２２）。
【００６７】
次に、ステータスレジスタ２０７から読み出したベリファイ不一致となったビットのアドレス情報を、アドレスポインタ２０１が取得する（Ｓ４２３）。Ｓ４２４では、取得したアドレスに対応する書き込みデータが、ライトバッファ２０４に格納される。Ｓ４２４で示される書き込みデータは、ＣＰＵ１３０から転送された本来の書き込みデータ（期待値）と、読み出し結果との否定排他的論理和処理を行い、不一致となったビットに対応する書き込みデータのことを示している。そして、ライトバッファ２０４に格納された比較結果が不一致となっている箇所のみ、書き込み制御処理が行われる（Ｓ４２５）。
【００６８】
Ｓ４２６では、ステータスレジスタ２０７に格納されている次のベリファイ不一致データのアドレス情報と読み出し結果を読み出す。Ｓ４２７にて、ベリファイ不一致となったデータのアドレス情報の有無を判定し、無い場合は、リトライ用書き込み処理が終了する。Ｓ４２７にて、ベリファイ不一致となったデータのアドレス情報があった場合は、そのアドレスがアドレスポインタ２０１に取得される（Ｓ４２８）。そして、取得したアドレスに対応する書き込みデータがライトバッファ２０４に格納され（Ｓ４２９）、Ｓ４２５からの処理を繰り返す。なお、Ｓ４２９で示される書き込みデータについても、Ｓ４２４にて示された書き込みデータと同様である。即ち、ＣＰＵ１３０から転送された本来の書き込みデータ（期待値）と、読み出し結果との否定排他的論理和処理を行い、不一致となったビットに対応する書き込みデータのことを示している。
【００６９】
第２の実施形態に係るリトライ用書き込み処理は、シーケンサ２０８によって制御される。但し、点線にて示すＳ４２５以降の処理においては、シーケンサ２０８に限らず、ＣＰＵ１３０によって制御することも可能である。また、シーケンサ２０８は、ＣＰＵ１３０以外の別のＣＰＵを用いて構成されることも可能である。
【００７０】
次に、第２の実施形態に係るリトライ用ベリファイ処理動作を説明する。第２の実施形態に係るリトライ用ベリファイ処理動作は、図６に示したフローチャートと同様である。但し、Ｓ５０７の処理では、ステータスレジスタ２０７には、１書き込み単位毎に比較した結果だけでなく、読み出し結果も格納されている。
【００７１】
以上のように、ステータスレジスタ２０７に読み出し結果を格納することにより、ベリファイ不一致となる領域を更に絞りこむことができる。その結果、リトライの必要のない領域において書き込み処理をすることなく、書き込み処理時間を短縮することができる。
【００７２】
また、ベリファイ不一致となった箇所のみを書き込むことにより、メモリセルへの不要な書き込みよるストレスをかける必要がなくなる。
【００７３】
なお、本発明は上記に示す実施形態に限定されるものではない。本発明の範囲において、上記実施形態の各要素を、当業者であれば容易に考えうる内容に変更、追加、変換することが可能である。例えば、上述した半導体装置は、フラッシュ内蔵シングルチップマイクロコンピュータであることが望ましいが、それに限定されるものではない。
【図面の簡単な説明】
【００７４】
【図１】第１の実施形態に係る半導体装置の構成を示すブロック図である。
【図２】第１の実施形態に係るメモリ制御回路の構成を示すブロック図である。
【図３】第１の実施形態に係る書き換え処理動作を示すフローチャート図である。
【図４】第１の実施形態に係るベリファイ処理動作を示す詳細フローチャート図である。
【図５】第１の実施形態に係るリトライ用書き込み処理動作を示す詳細フローチャート図である。
【図６】第１の実施形態に係るリトライ用ベリファイ処理動作を示す詳細フローチャート図である。
【図７】第２の実施形態に係るメモリ制御回路の構成を示すブロック図である。
【図８】第２の実施形態に係るリトライ用書き込み処理動作を示す詳細フローチャート図である。
【図９】従来技術に係る書き換え処理動作を示すフローチャート図である。
【図１０】従来技術に係る書き込み処理動作を示す詳細フローチャート図である。
【図１１】従来技術に係るベリファイ処理＋リトライ処理動作を示す詳細フローチャート図である。
【符号の説明】
【００７５】
１００  半導体装置
１０１  アドレスポインタ、  １０２  クロック制御レジスタ、
１０３  モード制御レジスタ、  １０４  ライトバッファ、
１０５  比較回路、  １０６  リードバッファ、
１０７  ステータスレジスタ、
１０８  シーケンサ、  １０９  書込レジスタ、
１１０  メモリ制御回路、  １２０  フラッシュメモリ、
１３０  ＣＰＵ、  １４０  ＲＡＭ、  １５０  ファームＲＯＭ、
１６０  シリアルマクロ、  １７０  ライタ、  １８０  周辺バス、
１９０  ＣＰＵ  Ｉ／Ｆ
２００  半導体装置、
２０１  アドレスポインタ、  ２０２  クロック制御レジスタ、
２０３  モード制御レジスタ、  ２０４  ライトバッファ、
２０５  比較回路、  ２０６  リードバッファ、
２０７  ステータスレジスタ、
２０８  シーケンサ、  ２０９  書込レジスタ、
【図１】
2007334813.tif 000003
【図２】
2007334813.tif 000004
【図３】
2007334813.tif 000005
【図４】
2007334813.tif 000006
【図５】
2007334813.tif 000007
【図６】
2007334813.tif 000008
【図７】
2007334813.tif 000009
【図８】
2007334813.tif 000010
【図９】
2007334813.tif 000011
【図１０】
2007334813.tif 000012
【図１１】
2007334813.tif 000013