(57)【要約】【課題】ソフトウェアによるＥＣＣ処理を能率的に行うための技術を提供する。【解決手段】ｎビットのデータに対してＥＣＣコードをｍビットとするとき、ｍビットの相互に異なる２進数をｍ＋ｎ列に並べた行列テーブルをフラッシュメモリの記憶領域（２０Ｂｂ）に固定データとして形成し、ＥＣＣコード生成プログラムの処理にその行列テーブルを参照させる。ＥＣＣコードの生成において、データの論理値“１”のビット位置に対応する前記行列テーブルの列の値を行方向のビット毎に排他的論理和を採り、これによって得られたｍビットの値をＥＣＣコードとし、データにＥＣＣコードを付加してｍ＋ｎビットの符号語を生成する。【選択図】図３
2007104708.tif 000002
【特許請求の範囲】
【請求項１】
ｎビットのデータに対してＥＣＣコードをｍビットとするとき、ｍビットの相互に異なる２進数をｍ＋ｎ列に並べた行列テーブルを用いるデータ処理方法であって、ＥＣＣコードの生成では、データの論理値“１”のビット位置に対応する前記行列テーブルの列の値を行方向のビット毎に排他的論理和を採り、これによって得られたｍビットの値をＥＣＣコードとし、データにＥＣＣコードを付加してｍ＋ｎビットの符号語を生成することを特徴とするデータ処理方法。
【請求項２】
前記符号語の論理値“１”のビット位置に対応する前記行列テーブルの列の値を行方向のビット毎に排他的論理和を採り、これによって得られたｍビットの値が全ビット論理値“０”のときはエラー無と判定して前記符号語のｎビットのデータを正規データとし、前記排他的論理和によって得られたｍビットの値が1ビットでも論理値“１”のときはエラー有りと判定して、前記行列テーブルの列から、前記排他的論理和によって得られたｍビットの２進数に一致する列を検索し、検索された列に対応される位置の符号語のビットを論理値反転して訂正し、訂正された符号語のｎビットのデータを正規データとする、ことを特徴とする請求項２記載のデータ処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、不揮発性メモリに対する書換え保証回数を改善する技術に関し、例えば電気的に書き換え可能なフラッシュメモリを内蔵するマイクロコンピュータに適用して有効な技術に関する。
【背景技術】
【０００２】
フラッシュメモリなどの電気的に書き換え可能な不揮発性メモリ（以下単にフラッシュメモリとも称する）はメモリセルにプログラムされる閾値電圧の相違に応じて情報を記憶する。閾値電圧の相違はフローティングゲートが保有する電子又は正孔の量の違いによって得られる。斯くフラッシュメモリセルの電子又は正孔の保持性能は書換え回数の増加と共に劣化する。したがって、記憶情報の信頼性という観点から、通常、フラッシュメモリの使用には有限の書換え保証回数が考慮される。
【０００３】
例えば１００回程度の書換え保証回数に対してそれを上回る書換えを可能にするには、１００回の書換え回数毎に、フラッシュメモリの記憶エリアを順次切換え制御して対処することが可能であるが、そのためには、実使用容量に対して数１０〜数１０００倍にも及ぶ大きな記憶容量が必要になってしまう。
【０００４】
フラッシュメモリの書換え保証回数を改善するには、デバイス的手法として、ゲート酸化膜を厚くして電子又は正孔の保持性能を上げることが可能である。また、回路的な手法としてＥＣＣ（エラー・チェック・アンド・コレクト）回路を採用することが可能である。特許文献１には、１チップマイクロコンピュータに内蔵のＥＥＰＲＯＭにＥＣＣを適用した技術が示される。
【０００５】
【特許文献１】特開平１１−２９６３９２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、前記ゲート酸化膜を厚くすることによる書換え保証回数の改善には限界が有り、しかも書き込み時間の大幅な増大が予想される。
【０００７】
また、フラッシュメモリにハードウェアでＥＣＣ機能を付加する場合には、ＥＣＣコードの生成回路と、ＥＣＣコード付加データに対する誤り判定及び訂正の回路が設けられる。しかしながら、その場合には、ＥＣＣ用のハードウェアによってチップ面積が増える。その上、必然的に全てのデータに対してＥＣＣコードを付加してデータ記憶を行なうことになるので、それに応じてフラッシュメモリ自体の記憶容量も大きくされることになる。特開平１１−２９６３９２号公報記載の技術はＥＣＣコードの生成をＣＰＵのファームＲＯＭを用いてソフトウェアで行なうことにより、その分の専用ハードウェアは削減されている。一方、ＥＣＣコード付加データに対する誤り判定及び訂正を行なうハードウェア回路は依然設けられている。しかも、全ての記憶データに対してＥＣＣコードを付加してデータ記憶が行なわれるようになっている。
【０００８】
特に本発明者は、組込み機器制御用途のマイクロコンピュータ等におけるフラッシュッメモリの利用形態を考慮した。例えば、フラッシュメモリには、比較的書換え回数の少ないデータとして例えば、回路特性調整用のトリミングデータ、参照用のテーブルデータ、プログラムデータが記憶される。さらにその他に、機器の状態に応じたパラメータデータのような頻繁に書き換えることが必要なデータもフラッシュメモリに記憶されることがある。一つのフラッシュメモリにそれらデータを混在させようとするとき、従来の技術では全てのデータに対してＥＣＣコードが付加されるため、記憶エリアの利用効率が著しく悪化してしまう。頻繁に書き換えるべきデータ量が少ない場合には特に記憶エリアの利用効率の低下が顕著となるであろう。不揮発性メモリの記憶容量が増大する傾向にあるとき、本発明者は一部の記憶領域だけをＥＣＣの対象にするという観点の有用性を見出した。
【０００９】
また、フラッシュメモリのメモリセル特性はプロセスばらつきの影響を受けるので、同じ書換え回数でも読み出しエラーを生じ易いメモリセルと生じ難いメモリセルがある。本発明者は、そのメモリセル特性の個体差に着目して、データビット数に対するＥＣＣコードのビット数をフラッシュメモリの特性に応じて決定できるようにすることの有用性を見出した。要するに、一定の書換え保証回数を得るのに、メモリセルのデバイス特性に合ったＥＣＣ方式を選択できるようにして、データに対するＥＣＣコードのオーバヘッドを小さくして記憶領域の利用効率を最大限とすることの有用性を見出した。本発明者の検討によれば、このＥＣＣ方式の選択という融通性は、ＥＣＣコードの生成又は誤り検出及び訂正をハードウェアで行なう場合には容易に実現し難いということが明らかにされた。
【００１０】
本発明の目的は、誤り訂正情報例えばＥＣＣコードによる記憶領域の利用の無駄を省いて記憶情報の信頼性を向上させることが可能なデータ処理システムを提供することにある。
【００１１】
本発明の別の目的は、ＥＣＣコードによる記憶領域の利用の無駄を省いて記憶情報の書換え保証回数を向上させることが可能なデータ処理システムを提供することにある。
【００１２】
本発明の更に別の目的は、デバイスの特性に合ったＥＣＣ方式を選択できるようにして、データに対するＥＣＣコードのオーバヘッドを小さくして記憶領域の利用効率を最大限とすることが可能なデータ処理システムを提供することにある。
【００１３】
本発明の更に別の目的は、ＥＣＣコードが付加されたデータに対する誤り判定及び訂正の処理によるデータリード動作の遅延を最小限にすることが可能なデータ処理システムを提供することにある。
【００１４】
本発明のその他の目的は、ＥＣＣコードの生成を効率的に行なうことができるデータ処理方法を提供することにある。
【００１５】
本発明のその他の目的は、ＥＣＣコードが付加されたデータの誤り判定を効率的に行なうことができるデータ処理方法を提供することにある。
【００１６】
本発明のその他の目的は、電気的に消去及びプログラム可能な不揮発性メモリのアドレス空間の一部のアドレス領域の書き換え回数をソフトウェア的処理によって向上することが可能なデータ処理システムないしデータ処理方法を提供することにある。
【００１７】
本発明の前記並びにその他の目的と新規な特徴は本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１８】
本願において開示される発明のうち代表的なものについて簡単に説明すれば下記のとおりである。
【００１９】
〔１〕データ処理システムは、書き換え可能な不揮発性メモリ（フラッシュメモリ）と、中央処理装置（ＣＰＵ）とを有し、前記中央処理装置は、所定の処理（プログラム）を実行し、前記不揮発性メモリのアドレス空間内の指定された一部の記憶領域（２０Ｂａ）の書換え保証回数を当該不揮発性メモリのアドレス空間内のその他の記憶領域の書換え保証回数よりも向上させる処理が可能である。前記所定のプログラムの実行による処理は、前記指定された一部の記憶領域に対するライトデータに誤り訂正情報（ＥＣＣコード）を生成して付加する処理であり、前記不揮発性メモリの指定された一部の記憶領域からのリードデータに対しＥＣＣコードによる誤り判定と誤り訂正を行なう処理である。前記一部の記憶領域の指定は例えばユーザプログラムによって行なわれる。
【００２０】
上記より、不揮発性メモリの指定された一部の記憶領域に格納されたデータに対するアクセスだけを対象として、ＥＣＣコードの付加や誤り訂正を行なって書換え保証回数を向上させる。前記指定された一部の記憶領域には書換えの頻繁なパラメータデータが格納され、他の記憶領域には書換え頻度の低いプログラムデータなどが格納される。したがって、当該他の記憶領域に格納されるデータにはＥＣＣコードが付加されない。この構成は、記憶領域に拘わらず全てのライトデータに対して区別なくＥＣＣコードを付加する構成に比べて、実質的に無用のＥＣＣコードによる記憶領域の無駄な利用を省きながら記憶情報の信頼性を向上、若しくは記憶情報の書換え保証回数の向上を実現する。
【００２１】
ライトデータに対するＥＣＣコードの付加、並びにＥＣＣコードによる誤り判定及び訂正の処理を中央処理装置によるプログラム実行で実現するから、データビット数に対するＥＣＣコードのビット数の割合を定義するＥＣＣ方式はプログラムの記述内容で選択できる。そのため、メモリセルのデバイス特性に合ったＥＣＣ方式の選択が容易であり、データに対するＥＣＣコードのオーバヘッドを小さくできる。その結果記憶領域の利用効率を最大限とすることが可能になる。要するに、ソフトウェアによりエラー訂正効率を容易に変えることができるから、デバイスの能力に合ったエラー訂正方式を容易に選択することができる。観点を変えれば、これはＥＣＣコードのビット数から無駄を排除し、記憶エリアの有効利用を保証する。
【００２２】
前記データ処理システムは、１個の半導体チップに前記不揮発性メモリ及び中央処理装置が形成されたシングルチップのマイクロコンピュータとして実現することが可能である。一方、前記データ処理システムは、前記不揮発性メモリ及び中央処理装置が夫々別々の半導体チップに形成されたマルチチップ形態で実現してもよい。
【００２３】
中央処理装置が実行する前記所定のプログラムは、例えば、前記不揮発性メモリの指定された一部の記憶領域への書き込みデータに対してＥＣＣコードを生成するＥＣＣコード生成プログラムと、前記不揮発性メモリの指定された一部の記憶領域から読み出されたＥＣＣコード付加データに対するエラー判定とエラーの訂正を行なうエラー訂正プログラムである。
【００２４】
ＥＣＣによる符号化や誤り訂正の公知の手法では例えばハミングコードの検査行列を用い、誤り訂正ではリードデータとハミングコードの行列演算を積和演算などを用いて行なうことができる。ここでは、データをｎビットとし、ｎビットのデータに対するＥＣＣコードをｍビットとするとき、ｍビットの相互に異なる２進数をｍ＋ｎ列に並べた行列テーブルを記憶領域に形成し、前記ＥＣＣコード生成プログラム及びエラー訂正プログラムの処理にその行列テーブルを参照させる。
【００２５】
例えば、ＥＣＣコードの生成では、データの論理値“１”のビット位置に対応する前記行列テーブルの列の値を行方向のビット毎に排他的論理和を採り、これによって得られたｍビットの値をＥＣＣコードとし、データにＥＣＣコードを付加してｍ＋ｎビットの符号語を生成する。エラー判定及びエラー訂正では、前記符号語の論理値“１”のビット位置に対応する前記行列テーブルの列の値を行方向のビット毎に排他的論理和を採り、これによって得られたｍビットの値が全ビット論理値“０”のときはエラー無と判定して前記符号語のｎビットのデータを正規データとし、前記排他的論理和によって得られたｍビットの値が１ビットでも論理値“１”のときはエラー有りと判定して、前記行列テーブルの列から、前記排他的論理和によって得られたｍビットの２進数に一致する列を検索し、検索された列に対応される位置の符号語のビットを論理値反転して訂正し、訂正された符号語のｎビットのデータを正規データとする。このエラー判定では積和演算と除算演算のような処理を要せず、積和演算器及び除算器を備えずともソフトウェアによるＥＣＣ処理を能率的に行なうことが可能になる。
【００２６】
前記前記ＥＣＣコード生成プログラム及びエラー訂正プログラムは前記中央処理装置によってアクセス可能なマスクＲＯＭに保持させてよい。それらプログラムの保持に前記不揮発性メモリを利用する場合には、その他の記憶領域に保持させればよい。パラメータに比べてプログラムの書換え頻度は少ないから相対的に書換え保証回数の小さなその他の記憶領域に保持させれば充分である。要するに、劣悪な使用条件を除けば、書換え頻度の低い情報にＥＣＣコードを付加する実益は殆ど無いということである。
【００２７】
前記不揮発性メモリのその他の記憶領域に、消去動作が禁止された消去禁止領域（２０Ａ）と消去及び書き込みが許容された書換え許容領域（２０Ｂ）とを割当てるとき、消去禁止領域に前記ＥＣＣコード生成プログラム及びエラー訂正プログラムを格納してよい。その場合には、一旦書き込まれたプログラムの書換えは原則不可能であるから、望ましくは、半導体集積回路化されたマイクロコンピュータのようなデータ処理装置の製造メーカが書き込むのがよい。そうであるなら、データとＥＣＣコードとのフォーマットは予め固定的に決定された方が望ましく、前記ＥＣＣコード生成プログラムは、ＥＣＣコードを生成した後、生成したＥＣＣコードとそれに対応するデータとを規定のフォーマットに従いＥＣＣコード付加データとして前記不揮発性メモリの一部の記憶領域に格納し、エラー訂正プログラムは前記規定のフォーマットに従ってＥＣＣコード付加データを認識すればよい。
【００２８】
また、前記ＥＣＣコード生成プログラム及びエラー訂正プログラムを前記書換え許容領域に保持させてもよい。この場合は、ユーザによるそれらプログラムの書き込みを想定する。したがって、データとＥＣＣコードとのフォーマットについてはユーザが作成したプログラムに依存した任意フォーマットであってもよい。製造メーカーがそれらプログラムを提供しようとする場合にもユーザの使い勝手を考慮すれば、Ｃ言語のような高級言語で記載されたソースプログラムで与えるのがよい。データとＥＣＣコードとを別々の配列として把握することも可能になる。
【００２９】
ＥＣＣ処理速度を向上させる一つの手段として、ランダムアクセスメモリ（ＲＡＭ）のアクセスサイクルが前記不揮発性メモリのアクセスサイクルより速い場合、前記不揮発性メモリから前記ＥＣＣコード生成プログラム及びエラー訂正プログラムをＲＡＭ転送し、前記中央処理装置には前記ＲＡＭに転送された前記ＥＣＣコード生成プログラム及びエラー訂正プログラムを実行させればよい。このとき、前記中央処理装置はリセットの指示に応答して前記不揮発性メモリから前記ＲＡＭに前記ＥＣＣコード生成プログラム及びエラー訂正プログラムを転送するとよい。
【００３０】
ＥＣＣ処理速度を向上させる第２の手段として、前記中央処理装置によってアクセス可能なＲＡＭを有し、前記中央処理装置はリセットの指示に応答して、前記不揮発性メモリの一部の記憶領域から順次ＥＣＣコード付加データを読み出し、読み出したＥＣＣコード付加データに対し、前記エラー訂正プログラムの実行により前記エラー判定とエラーの訂正を行い、前記エラー判定とエラーの訂正処理を経たデータを前記ＲＡＭに初期的にストアするとよい。その後、ＣＰＵはＲＡＭから必要なデータをリードすればよく、リード動作に際してその都度エラー判定を行なうことを要しない。尚、ＣＰＵによる上記エラー訂正プログラムの実行する方法としては、上記不揮発性メモリから直接上記エラー訂正プログラムを読み込んで実行する方法又はＲＡＭに転送された上記エラー訂正プログラムを読み込んで実行する方法のいずれかを採用することが可能である。
【００３１】
前記エラー訂正プログラムの実行による前記エラー判定処理において訂正不能なエラーが発生したき、誤動作防止の観点より、前記中央処理装置は、前記エラー訂正プログラムの実行による前記エラー判定処理において訂正不能なエラーの発生を示す情報を外部から認識可能にレジスタ（ＲＥＲ）、或いはメモリのフラグ領域（３０）に保持させるとよい。ユーザプログラムを介してその領域を所定インターバル毎に参照すれば、訂正不能なエラー発生を認識でき、例えば、訂正不能なエラーを発生したデータブロックの書換え等を実行して対処することが可能になる。
【００３２】
また、前記中央処理装置は前記エラー訂正プログラムの実行によりエラー訂正可能なデータを検出した場合にも、それを示す情報を外部から認識可能に汎用レジスタやメモリのフラグ領域に保持させてよい。そのような情報は上記と同じくワーニング情報として利用すればよい。これにより、ユーザシステムは、データが壊れかけている、ということを逸早く認識することができ、壊れかけているデータの書換え（再書込み）を促してデータの信頼性を更に向上させることが可能になる。
【００３３】
〔２〕本発明の別の観点によるデータ処理システムは、演算制御装置のアドレス空間に書換え保証回数の低い第１記憶領域（２０Ｂｂ）と、書換え保証回数の高い第２記憶領域（２０Ｂａ）とを有し、前記第１記憶領域は、前記第２記憶領域への書き込みデータに対してＥＣＣコードを生成するＥＣＣコード生成プログラムと、前記第２記憶領域から読み出されたＥＣＣコード付加データに対するエラー判定とエラーの訂正を行なうエラー訂正プログラムとを有し、前記演算制御装置は、前記第２記憶領域にデータを格納するとき、前記ＥＣＣコード生成プログラムを実行する。
【００３４】
この観点では、第２記憶領域に対する書き込み動作に対してだけＥＣＣコードをソフトウェアで生成するから、上記同様に、実質的に無用のＥＣＣコードによる記憶領域の無駄な利用を省きながら記憶情報の信頼性を向上、若しくは記憶情報の書換え保証回数の向上を実現することができる。更に、ライトデータに対するＥＣＣコードの付加をプログラム実行で実現するから、やはり、不揮発性メモリのメモリセルのデバイスの特性に合ったＥＣＣ方式の選択が容易であり、データに対するＥＣＣコードのオーバヘッドが小さくでき、記憶領域の利用効率を最大限とすることが可能にある。
【００３５】
前記演算制御装置は、前記第２記憶領域からデータを読み出すとき、前記エラー訂正プログラムを実行する。
【００３６】
前記演算制御装置は、所定の動作モードに応答して前記エラー訂正プログラムを実行して前記第２記憶領域のデータを予めＲＡＭに順次転送可能である。
【００３７】
前記第１記憶領域及び第２記憶領域は例えば電気的に書換え可能なフラッシュメモリである。ＥＣＣコード生成プログラム及びエラー訂正プログラムの書換えを考慮すると、書き込み消去プログラムを前記フラッシュメモリに予め格納し、所定の動作モードに応答してこれをＲＡＭに内部転送し、ＲＡＭ上の書き込み消去プログラムを実行してＥＣＣコード生成プログラム及びエラー訂正プログラムの書換えを行なうようにしてよい。或いは、所定の動作モードに応答して外部からＲＡＭに書き込み消去プログラムを転送し、ＲＡＭ上の書き込み消去プログラムを実行してＥＣＣコード生成プログラム及びエラー訂正プログラムの書換えを行なうようにしてよい。
【００３８】
〔３〕ＥＣＣコードを用いた符号語を生成するデータ処理方法では、ｎビットのデータに対してＥＣＣコードをｍビットとするとき、ｍビットの相互に異なる２進数をｍ＋ｎ列に並べた行列テーブルを利用し、ＥＣＣコードの生成では、データの論理値“１”のビット位置に対応する前記行列テーブルの列の値を行方向のビット毎に排他的論理和を採り、これによって得られたｍビットの値をＥＣＣコードとし、データにＥＣＣコードを付加してｍ＋ｎビットの符号語を生成する。
【００３９】
上記符号語に対するエラー判定を行なうデータ処理方法では、前記符号語の論理値“１”のビット位置に対応する前記行列テーブルの列の値を行方向のビット毎に排他的論理和を採り、これによって得られたｍビットの値が全ビット論理値“０”のときはエラー無と判定して前記符号語のｎビットのデータを正規データとし、前記排他的論理和によって得られたｍビットの値が1ビットでも論理値“１”のときはエラー有りと判定して、前記行列テーブルの列から、前記排他的論理和によって得られたｍビットの２進数に一致する列を検索し、検索された列に対応される位置の符号語のビットを論理値反転して訂正し、訂正された符号語のｎビットのデータを正規データとする。このエラー判定では積和演算ないし除算演算のような処理を要せず、算術論理演算器やシフタなどの演算器及び除算器を有し積和演算器を備えていないＣＰＵを用いてもソフトウェアによるＥＣＣ処理を能率的に行なうことが可能になる。
【発明の効果】
【００４０】
本願において開示される発明のうち代表的なものによって得られる効果を簡単に説明すれば下記の通りである。
【００４１】
すなわち、一部の記憶領域にだけＥＣＣコードの付加や誤り訂正を行なって書換え保証回数を向上させるから、記憶領域に拘わらず全てのライトデータに対して区別なくＥＣＣコードを付加する構成に比べて、実質的に無用のＥＣＣコードによる記憶領域の無駄を省くことができる。更に、ＥＣＣ処理をソフトウェアで対処するから不揮発性メモリのデバイス特性に合ったＥＣＣ訂正能力を容易に選択することができる。このように、データ処理システムにおいてＥＣＣコードによる記憶領域の利用の無駄を省いて不揮発性メモリに記憶された情報の信頼性を向上させることができ、また、ＥＣＣコードによる記憶領域の利用の無駄を省いて不揮発性メモリにおける記憶情報の書換え保証回数を向上させることができる。更に、デバイスの特性に合ったＥＣＣ方式を選択でき、データに対するＥＣＣコードのオーバヘッドを小さくして記憶領域の利用効率を最大限とすることが可能である。
【００４２】
ＥＣＣコードが付加されたデータに対する誤り判定及び訂正の処理によるデータリード動作の遅延を抑えることが可能である。
【００４３】
積和演算などを行うことなくＥＣＣコードの生成を効率的に行なうことができ、ＥＣＣコードが付加されたデータの誤り判定を効率的に行なうことができる。
【発明を実施するための最良の形態】
【００４４】
《マイクロコンピュータ》
図１には本発明の一例に係るシングルチップのマイクロコンピュータが示される。同図に示されるマイクロコンピュータ１は、特に制限されないが、単結晶シリコンのような１個の半導体基板（半導体チップ）にＣＭＯＳ集積回路製造技術により形成される。
【００４５】
マイクロコンピュータ１は、演算制御装置としての中央処理装置（ＣＰＵ）２、ＲＡＭ３、バスステートコントローラ（ＢＳＣ）４、電気的に書き換え可能な不揮発性メモリとしてのフラッシュメモリ５、フラッシュコントロールモジュール６、及びその他の内蔵回路を総称するその他モジュール７を有する。その他モジュール７としてマスクＲＯＭ８、割り込みコントローラ（ＩＮＴＣ）９、タイマ（ＴＭＲ）１０、入出力ポート（Ｉ／Ｏ）１１及びシリアルインタフェースコントローラ（ＳＣＩ）１２等を有する。それら回路モジュールはバスＩＡＢ，ＩＤＢ，ＰＡＢ，ＰＤＢ，ＣＯＮＴを介してインタフェースされる。
【００４６】
前記バスＩＡＢ，ＩＤＢは情報伝送速度の比較的速い内部アドレスバス、内部データバスである。前記バスＰＡＢ，ＰＤＢは情報伝送速度が比較的遅い周辺アドレスバス、周辺データバスである。バスＣＯＮＴはバスアクセス制御信号やタイミング制御信号等を伝達する制御信号線を総称する。内部バスＩＤＢ，ＩＡＢと周辺バスＰＤＢ，ＰＡＢとの動作速度の相違若しくはアクセス対象に固有のアクセス形態の相違に対して前記ＢＳＣ４がアクセス動作タイミング等を最適制御すると共に、前記ＢＳＣ４はアクセスアドレスに応じたチップ選択若しくはモジュール選択制御等も行なう。
【００４７】
前記ＣＰＵ２は、特に制限されないが、マスクＲＯＭ８又はＲＡＭ３から命令をフェッチし、フェッチした命令を解読して実行する。ＲＡＭ３はＣＰＵ２のワーク領域若しくはデータ又はプログラムの一時記憶領域とされる。前記マスクＲＯＭ８はプログラム又はデータテーブルなどの記憶領域とされる。割り込みコントローラ１０はマイクロコンピュータ１の外部から与えられる割込要求又はマイクロコンピュータ１内部の状態に応じて内蔵回路モジュールから発生される割込要求を受け、割り込み優先度及び割り込みマスク等に従って割込要求の受付を調停する。割込要求が受付けられると、ＣＰＵ２に割込み信号ＩＲＱが与えられ、割り込みベクタによって割り込み要因がＣＰＵ２に与えられる。ＣＰＵ２は割り込みベクタによって指示されるプログラムに処理を分岐する。Ｉ／Ｏ１１は外部アドレスバス及び外部データバスへの接続、ＳＣＩ１２の外部インタフェース、ＴＭＲ１０の外部イベント信号入力等に用いられる。
【００４８】
前記ＣＰＵ２の具体例は図２に示される。ＣＰＵ２は、特に制限されないが、シフタＳＦＴ及び算術論理演算器ＡＬＵ等の演算器と、３２ビットの汎用レジスタＲ０〜Ｒ３１、プログラムカウンタＰＣ、コンディションコードレジスタＣＣＲ及びテンポラリレジスタＴＲ等のレジスタ群、そしてリードデータバッファＲＤＢ、ライトデータバッファＷＤＢ及びアドレスバッファＡＢなどのバッファ回路を実行部に有する。命令制御部は命令レジスタＩＲ、命令デコーダＩＤＥＣ、命令シーケンスロジックＩＮＴＬを有する。
【００４９】
前記プログラムカウンタＰＣは次に実行すべき命令アドレスを保有し、その命令アドレスがアドレスバッファＡＢから内部アドレスバスＩＡＢに出力されると、ＲＡＭ３等の対応アドレスからリードされた命令が内部データバスＩＤＢを介して命令レジスタＩＲにフェッチされる。命令デコーダＩＤＥＣは命令レジスタＩＲの命令を解読して、ＣＰＵ２内部の制御信号を生成して、前記実行部による演算処理を制御する。命令シーケンスロジックＩＮＴＬは割込み信号ＩＲＱ等に応答して命令実行順序を変更する制御を行なう。
【００５０】
図１においてフラッシュメモリ５は、メモリセルアレイ２０、Ｘデコーダ・ドライバ（ＸＤＥ・ＤＶ）２１、センスアンプアレイ（ＳＡＡ）２２、Ｙスイッチアレイ（ＹＳＷ）２３、Ｙデコーダ（ＹＤＥ）２４、入出力回路（ＩＦＢ）２５、電源回路（ＶＧＮ）２６、及びタイミングジェネレータ（ＴＧＮ）２７を有する。メモリセルアレイ２０はマトリクス配置されたフラッシュッメモリセル（図示せず）を有する。フラッシュメモリセルは、特に制限されないが、半導体基板若しくはウェル領域にソース、ドレインを有し、チャネルの上方に夫々絶縁膜を介してフローティングゲート及びコントロールゲートが形成されたスタック構造を有し、ソースをソース線に、ドレインをビット線に、コントロールゲートをワード線に接続して構成される。
【００５１】
フラッシュメモリセルは閾値電圧がプログラム可能にされ、プログラムされた閾値電圧に応じて情報を保持する。例えば、１個のフラッシュメモリセルが１ビットの情報を保持する場合に、相対的に高い閾値電圧状態を書き込み状態、相対的に低い閾値電圧状態を消去状態と称する。書き込み状態を得る為の書き込み動作は、特に制限されないが、コントロールゲートに１０Ｖ、ドレインに例えば５Ｖ、ソースおよび基板に例えば０Ｖを印加して、ドレイン・ソース間に電流を流し、これによってホットエレクトロン注入が起こり、フローティングゲートに電子が蓄積され、メモリセルの閾値電圧が高くなる。前記消去状態を得る為の消去動作は、特に制限されないが、コントロールゲートに１０Ｖ、ソース及び基板に例えば−１０Ｖを印加し、さらにドレインを例えば開放（フローティング）にして、フローティングゲートに蓄積された電子を基板に放出させ、これによってメモリセルの閾値電圧が低くなる。
【００５２】
前記入出力回路２５はバスＩＡＢ，ＩＤＢ，ＰＡＢ，ＰＤＢ，ＣＯＮＴとの間でアドレス、制御信号及びコマンドを入力すると共にデータの入出力を行なう。入出力回路２５に入力されたアドレス信号はＸＤＥＣ・ＤＶ２１及びＹＤＥ２４に入力されて夫々デコードされる。ＸＤＥＣ・ＤＶ２１はそのデコード結果に従ってワード線を選択する。ＹＤＥ２４はそのデコード結果に従ってＹＳＷ２３を介してビット線を選択する。ワード線選択及びビット線選択によってフラッシュメモリセルが選択される。読み出し動作では、前記選択されたフラッシュメモリセルの読み出しデータは、ＳＡＡ２２にて検出され、入出力回路２５を経てバスＰＤＢまたはＩＤＢに出力される。書き込み動作では、バスＰＤＢ又はＩＤＢから入出力回路２５に与えられる書き込みデータが入出力回路２５内の書き込みラッチ回路にラッチされ、ワード線選択されたメモリセルに対し、ラッチデータに従って書き込み・書き込み阻止が制御される。書き込み処理の前には予めブロック単位でフラッシュメモリセルに対する消去が行なわれる。
【００５３】
前記電源回路２６はクランプ回路やチャージポンプ回路などを有し、フラッシュメモリの書き込み・消去・読み出しなどの動作で使用する様々な電圧を供給する。前記タイミングジェネレータ２７は、制御バスＣＯＮＴを介して供給されるストローブ信号及びデータバスＰＤＢ，ＩＤＢを介して入力されるコマンドに基づいてフラッシュメモリの内部タイミング信号を生成する。
【００５４】
図１において前記フラッシュコントロールモジュール６は、フラッシュメモリ５に対する書き込み及び消去のためのシーケンス制御並びにＥＣＣ処理に利用される回路ブロックである。このフラッシュコントロールモジュール６は、ＣＰＵ２によってアクセス可能な夫々３２ビットの、書き込み／消去制御レジスタＦＬＭＣＲ、消去ブロック指定レジスタＥＢＲ、データレジスタＦＭＰＤＲ０，ＦＭＰＡＲ０、及びリザルトレジスタＦＰＦＲ等の制御レジスタを備え、更に、フラッシュメモリに対する書き込み及び消去のシーケンス動作を制御するシーケンス制御回路２９を有する。
【００５５】
前記書き込み／消去制御レジスタＦＬＭＣＲはフラッシュメモリ５の動作モードを制御するレジスタであり、書き込みの有効／無効を指示するライトイネーブルビットＷＥ、消去動作を指示するイレーズビットＥ、消去ベリファイ動作を指示するイレーズベリファイビットＥＶ、書き込み動作を指示するプログラムビットＰ、書き込みベリファイ動作を指示するプログラムベリファイビットＰＶ、フラッシュメモリの書き込み動作中にエラーの発生したことを示す書き込みエラービットＰＥＲ、消去動作中にエラーの発生したことを示す消去エラービットＥＥＲ、フラッシュメモリのリード動作時にエラーの発生したことを示すリードエラービットＲＥＲ等を有する。消去ブロック指定レジスタＥＢＲはフラッシュッメモリセルアレイ２０の消去エリアをブロック毎に設定するレジスタであり、ブロック毎にイレーズブロックビットＥＢ０〜ＥＢ９を有する。データレジスタＦＭＰＤＲ及びリザルトレジスタＦＰＦＲ等は後述のＥＣＣ処理で利用されるレジスタである。尚、レジスタＦＭＰＤＲ及びＦＰＦＲは、汎用レジスタ（Ｒ０−Ｒ３１）内のレジスタを利用しても良い。
【００５６】
《一部のエリアに対するソフトウェアＥＣＣ処理》
次にマイクロコンピュータ１のＥＣＣ機能について説明する。フラッシュメモリ５のメモリセルアレイ２０は、特に制限されないが、図３の（Ａ）に例示されるようにブート領域２０Ａとユーザ領域２０Ｂに大別される。特に制限されないが、ブート領域２０Ａはマイクロコンピュータ１のユーザによる自由な書換えが禁止される領域であり、ユーザ領域２０Ｂはユーザによる自由な書換えが許容される領域である。要するに、前記消去ブロック指定レジスタＥＢＲのイレーズブロックビットＥＢ０〜ＥＢ９の設定によって消去可能なエリアはユーザ領域２０Ｂに限られる。ブート領域に格納されたプログラムはユーザが所定の動作モードを設定することにより実行可能である。尚、フラッシュメモリに対する書換えシーケンスの具体例についてここでは詳述しないが、書き込みデータにしたがった書き込み動作は先に消去動作が完了されることを条件とするものであり、消去ブロックによる消去が指示されなければ当然書き込みデータに従った書き込み動作も行なわれないようになっている。そのような書き込み・消去制御は前記シーケンス制御回路２９が行なう。
【００５７】
マイクロコンピュータ１のＥＣＣ機能は、図３の（Ｂ）に例示されるように、前記ユーザ領域２０Ｂに指定された一部の領域２０Ｂａのデータに向けられている。即ち、ＥＣＣ機能は、ＣＰＵ２が、所定のプログラムを実行することにより、ユーザ領域２０Ｂの一部の記憶領域（第１領域）２０Ｂａの書換え保証回数を当該ユーザ領域２０Ｂのその他の記憶領域（第２領域）２０Ｂｂの書換え保証回数よりも向上させる機能である。この所定のプログラム実行によるＥＣＣ機能は、前記指定された一部の記憶領域２０Ｂａに対するライトデータにＥＣＣコードを生成して付加する処理（ＥＣＣコード生成処理）と、前記指定された一部の記憶領域２０Ｂａからのリードデータに対しＥＣＣコードによるエラー判定とエラー訂正を行なう処理（ＥＣＣエラー判定訂正処理）とによって実現される。前者の処理はＣＰＵ２がＥＣＣ生成プログラム２１を実行することにより行なわれ、後者の処理はＣＰＵ２がエラー訂正プログラム２２を実行することにより行なわれる。
【００５８】
前記領域２０Ｂａには頻繁に書き換えられる制御用パラメータなどのデータの記憶に利用される。頻繁に書き換えられる制御用パラメータとは、たとえばマイクロコンピュータ１が自動車のエンジン制御に用いられる場合、エンジン停止時の各ピストンの相対位置、エンジン停止直前までの燃費情報等の情報とされる。頻繁に書換えられるデータにＥＣＣ処理を施せば、仮に、書換え回数の増加によるフラッシュメモリセルの特性劣化に起因して読み出しデータに誤りを生じても、ＥＣＣコードによる誤り訂正能力の範囲で、その誤りを訂正することができる。換言すれば、ＥＣＣ処理により実質的に書き換え保証回数を改善若しくは向上させることができる。
【００５９】
前記領域２０Ｂｂは、図３の（Ｂ）では、頻繁に書き換えられることのない情報として、テーブルデータなどの固定データ、前記ＥＣＣ生成プログラム２１、エラー訂正プログラム２２及び他のユーザプログラム等の記憶領域として利用される。前記ＥＣＣ生成プログラム２１及びエラー訂正プログラム２２は、図３の（Ｃ）に例示されるようにブート領域２０Ａに格納し、或いは図３の（Ｄ）に例示されるようにマスクＲＯＭ８に格納してもよい。
【００６０】
上記より、ユーザ領域２０Ｂの一部の記憶領域２０Ｂａに対するアクセスだけを対象として、ＥＣＣコードの付加や誤り訂正を行なって書換え保証回数を向上させるから、前記一部の記憶領域２０Ｂａには書換えの頻繁なパラメータデータ等を格納すればよい。他の記憶領域２０Ｂｂには書換え頻度の低いプログラムデータなどを格納しても、当該他の記憶領域にはＥＣＣコードが付加されないから、記憶領域に拘わらず全てのライトデータに対して区別なくＥＣＣコードを付加する構成に比べて、実質的に無用のＥＣＣコードによる記憶領域の無駄な利用を省きながらフラッシュメモリセルの記憶情報の信頼性向上、換言すれば記憶情報の書換え保証回数の向上を実現することができる。
【００６１】
ライトデータに対するＥＣＣコードの付加、並びにＥＣＣコードによる誤り判定及び訂正の処理をＣＰＵ２によるプログラム実行で実現するから、ユーザデータビット数に対するＥＣＣコードのビット数の割合を定義するＥＣＣ方式はＥＣＣコード生成プログラム及びエラー訂正プログラムの記述内容で選択でき、フラッシュメモリのメモリセルのデバイス特性に合ったＥＣＣ方式の選択が容易である。例えば、図４に例示されるようにユーザデータビット数に対するＥＣＣコードのビット数が減るほど訂正能力は低くなるがＥＣＣコードによって費やされるメモリセルの割合（オーバヘッド）は少なくなる。したがって、ＥＣＣ処理のソフトウェアによりエラー訂正効率を容易に変えることができるから、マイクロコンピュータのデバイス能力に合ったエラー訂正方式を容易に選択することができ、これはＥＣＣコードのビット数から無駄を排除することを意味し、フラッシュメモリの記憶エリアの有効利用を保証する。要するに、ユーザデータに対するＥＣＣコードのオーバヘッドを小さくしてフラッシュメモリの利用効率を最大限とすることが可能になる。
【００６２】
《ＥＣＣ処理領域の規定》
前記ユーザ領域２０Ｂの一部の記憶領域２０ＢａをＥＣＣ処理対象とするとき、その記憶領域２０Ｂａを規定するのは、例えば記憶領域２０Ｂｂに格納されたユーザプログラムである。前記記憶領域２０Ｂａにパラメータを格納するとき、例えばユーザプログラムは、パラメータデータのソースアドレスと領域２０Ｂａのストア先アドレスを指定し、ＣＰＵの処理をＥＣＣコード生成プログラムにジャンプさせる。ＥＣＣコード生成プログラムが実行されることにより、ソースアドレスのパラメータデータに対してＥＣＣコードが生成され、パラメータデータとしてのユーザデータにＥＣＣコードを付加したＥＣＣ付きデータが前記ストア先アドレスに格納される。パラメータデータをリードするときは、ユーザプログラムは領域２０Ｂａのソースアドレスと任意のディスティネーションアドレスを指定し、ＣＰＵの処理をエラー判定プログラムにジャンプさる。エラー判定プログラムが実行されることにより、ソースアドレスのＥＣＣ付きデータがリードされ、これに対する誤り判定が行なわれ、必要な訂正が行なわれてパラメータデータとしてのユーザデータがディスティネーションアドレスにセットされる。ＥＣＣ処理を伴った上記パラメータデータの格納及びパラメータデータのリードにおいて、ユーザプログラムとＥＣＣコード生成プログラム及びエラー訂正プログラムとの間で行なわれるべきアクセスアドレス及びリードデータの受け渡しは、ＣＰＵ２の汎用レジスタ或いはＲＡＭ３の領域を介して行なわれる。この詳細は、ソフトウェアＥＣＣ処理の具体例で説明する。
【００６３】
《ユーザデータとＥＣＣコードとの対応》
上記処理において、ユーザデータとＥＣＣコードとの対応はユーザプログラム、ＥＣＣコード生成プログラム及びエラー訂正プログラムにおいて統一的に把握されていることが望ましい。例えば、図５に例示されるように、ＥＣＣコード生成対象とされるユーザデータの配列ＤＡ１に対し、ユーザデータと対応するＥＣＣコードを一つのレコードとするように一つの配列データＤＡ２としてフォーマット化し、或いは、ユーザデータの配列ＤＡ１に対してＥＣＣコードを別のデータ配列ＤＡ３として規定してよい。後者の場合は当然、ユーザデータの配列ＤＡ１とＥＣＣコードの配列ＤＡ３は先頭アドレスなどによって配列相互の対応付けが必要であることは言うまでもない。
【００６４】
図６にはユーザデータとＥＣＣコードとを一つの配列データ中に対応付けて領域２０Ｂａに書き込むときの処理手順が例示される。先ず、書き込み対象とされるユーザデータの配列が指定されてＥＣＣコード付きデータの書き込み処理が指示されると、ユーザデータの読み込みと展開が行なわれる（Ｓ１）。即ち、（Ｂ）に例示されるように、ユーザデータの配列ＤＡ１がワークメモリに読み込まれ、そこで、読み込まれたユーザデータは規定のデータフォーマットにしたがって、（Ｂ）の配列ＥＸＴで例示されるように、ユーザデータの隣にＥＣＣコード領域を有するレコード形式に拡張される。次いで、（Ａ）に例示されるようにユーザデータに対してＥＣＣコードを生成し、これを対応レコードのＥＣＣコード領域にストアして、レコード配列ＤＡ２が形成される。このレコード配列ＤＡ２のデータに対して前記フラッシュメモリの領域２０Ｂａへの書き込みが行なわれる（Ｓ３〜Ｓ７）。書き込み処理は、書き込みパルスの印加（Ｓ４）、書き込みデータのベリファイ（Ｓ５）、ベリファイ結果に基づく書き込み終了判定（Ｓ６）を行ない、所望の書き込み状態に到達していなければ再書き込みデータを演算してステップＳ４からの処理を繰り返し、規定回数繰り返してもステップＳ６の終了判定が満足できなければ書き込み異常終了とされ、ステップＳ６で規定の書き込み状態に到達すれば書き込み正常終了とされる。書き込みパルス印加の前には書き込みエリアに対する消去が終了されているものとする。
【００６５】
図７にはユーザデータとＥＣＣコードとを別の配列データとして対応付けて領域２０Ｂａに書き込むときの処理手順が例示される。先ず、書き込み対象とされるユーザデータの配列が指定されてＥＣＣコード付きデータの書き込み処理が指示されると、ユーザデータの読み込みが行なわれる（Ｓ１１）。即ち、（Ｂ）に例示されるように、ユーザデータの配列ＤＡ１がワークメモリに読み込まれる。次いで、（Ａ）に例示されるようにユーザデータに対してＥＣＣコードを生成し、これを別のデータ配列ＤＡ３としてストアする（Ｓ１２）。双方のデータ配列ＤＡ１，ＤＡ３に対して前記フラッシュメモリの領域２０Ｂａへの書き込みが行なわれる（Ｓ１３〜Ｓ１７）。書き込み処理は前記ステップＳ４〜Ｓ７の処置と同様である。
【００６６】
図８には図６で説明したレコード配列を有するＥＣＣコード付きデータをリードするときの処理手順が例示される。先ず、リード対象とされるＥＣＣコード付きデータのレコード先頭アドレスが設定され（Ｓ２１）、これに対応するＥＣＣコード付きデータがフラッシュメモリの領域２０Ｂａからワークメモリに読み込まれる（Ｓ２２）。読み込まれたデータに対してエラー判定が行なわれる（Ｓ２３）。このとき、図６で説明したようにエラー判定の為に読み込まれた配列データは一定のフォーマット、即ち、ユーザデータとＥＣＣコードの所定ビット数単位のペアを単一レコードとする配列のフォーマットを有しているから、エラー訂正プログラムは、その規定のフォーマットであることを前提に、各レコードからユーザデータとＥＣＣコードを参照して誤りの判定を行なうことができる。訂正可能な誤りに対してはエラー訂正が実行され（Ｓ２４）、必要な訂正が実行されたリードデータがＲＡＭ３などの所定のエリアにストアされる（Ｓ２５）。
【００６７】
図９には図７で説明したユーザデータとＥＣＣコードが別々の配列データとされるＥＣＣコード付きデータをリードするときの処理手順が例示される。先ず、リード対象とされるＥＣＣコードの配列データの先頭アドレスとユーザデータの先頭アドレスが設定され（Ｓ３１）、これに対応するＥＣＣコードとユーザデータがフラッシュメモリの領域２０Ｂａからワークメモリに読み込まれ（Ｓ３２）、読み込まれたデータに対してエラー判定が行なわれる（Ｓ３３）。エラー判定において、対応するユーザデータとＥＣＣコードを参照する場合にも夫々の配列の構造を指定する情報がユーザプログラムを介して与えられなければならない。要するに、図７で説明したＥＣＣコード用配列データＤＡ３の生成に際して、当該配列データＤＡ３の先頭アドレス及び構造はユーザプログラムを介して与えられているから、その配列を利用する場合にも同じようにユーザプログラムから必要なアドレス情報及び配列の構造情報が与えられなければ、それを利用する事はできない。訂正可能な誤りに対してはエラー訂正が実行され（Ｓ３４）、必要な訂正が実行されたリードデータがＲＡＭ３などの所定のエリアにストアされる（Ｓ３５）。
【００６８】
図３の（Ｂ）で説明したように、前記ＥＣＣコード生成プログラム及びエラー訂正プログラムを前記書換え許容領域としてのユーザ領域２０Ｂに保持させれば、それらプログラムをユーザが開発して書き込むことができるという自由度を得る。したがって、ユーザデータとＥＣＣコードとのフォーマットについてはユーザ作成のプログラムに依存した任意フォーマットにする方がユーザにとって都合がよい場合もある。このとき、マイクロコンピュータ１のメーカーがそれらＥＣＣコード生成プログラム及びエラー訂正プログラムを提供しようとする場合にもユーザの使い勝手を考慮すれば、Ｃ言語のような高級言語で記載されたソースプログラムで与えるのがよい。そのような任意フォーマットを考慮したとき、ＥＣＣコードの付加及びＥＣＣコード付きデータを用いたエラー訂正処理方式には、例えば図７及び図９で説明した手順を採用してよい。
【００６９】
一方、図３の（Ｃ）で説明したように、消去禁止領域としてのブート領域２０Ａに前記ＥＣＣコード生成プログラム及びエラー訂正プログラムを格納することを想定する。この場合には、ブート領域２０Ａに一旦書き込まれたプログラムの書換えは原則不可能であるから、望ましくは、それらプログラムはマイクロコンピュータ１のメーカが書き込むのがよい。そうであるなら、ユーザデータとＥＣＣコードとのフォーマットに関しても、ユーザに対する自由度の保証という観点は低く、逆にユーザの負担軽減という観点より、固定フォーマットを採用する方が得策であると考えられる。前記ＥＣＣコード生成プログラムは、ＥＣＣコードを生成した後、生成したＥＣＣコードとそれに対応するデータとを規定のフォーマットに従いＥＣＣコード付加データとして前記不揮発性メモリの一部の記憶領域に格納し、エラー訂正プログラムは前記規定のフォーマットに従ってＥＣＣコード付加データを認識すればよい。そのような固定フォーマットを考慮したとき、ＥＣＣコードの付加及びＥＣＣコード付きデータを用いたエラー訂正処理方式として、例えば図６及び図８で説明した手順を採用すればよい。前記ＥＣＣコード生成プログラム及びエラー訂正プログラムを図３の（Ｄ）で説明したマスクＲＯＭ８に格納する場合も同様に考えてよい。
【００７０】
《オンボードプログラムモード》
オンボードプログラムモードについて説明する。この動作モードは、図３の（Ｂ）で説明したように前記ＥＣＣコード生成プログラム及びエラー訂正プログラム等をユーザ領域２０Ｂに保持させる時に必要な動作モードの一例である。
【００７１】
先ず、ブートモードによるオンボードプログラムの手順を説明する。パーソナルコンピュータ又はＥＰＲＯＭライタ等のホスト装置に書き込み制御プログラムと、前記ＥＣＣコード生成プログラム及びエラー訂正プログラムを用意し、Ｉ／Ｏ１１の所定のポートに接続する。所定の外部端子を規定の状態にしてマイクロコンピュータ１をブートモードに遷移させる。ブートモードに遷移すると、マイクロコンピュータ１はブート領域のブートプログラムを実行し、ＳＣＩ１２による通信を可能とし、ブート領域からＲＡＭ３に、フラッシュメモリ５のユーザ領域２０Ｂに対する消去プログラムと、ＳＣＩ１２を介する通信制御プログラムをロードする。ついで、ロードされた消去プログラムが実行されてユーザ領域２０Ｂが全面消去され、前記通信制御プログラムによってホストから書き込み制御プログラムがＲＡＭ３にロードされる。その後、書き込み制御プログラムが実行され、ホストが保有する前記ＥＣＣコード生成プログラム及びエラー訂正プログラム等がユーザ領域２０Ｂに書き込まれる。
【００７２】
次に、ユーザプログラムモードによるオンボードプログラムの手順を説明する。パーソナルコンピュータのようなホスト装置に書き込み・消去制御プログラムと、前記ＥＣＣコード生成プログラム及びエラー訂正プログラムを用意し、また、ユーザ領域２０Ｂにはホスト装置と間の転送制御プログラムを予め格納しておく。先ず、ＣＰＵ２は割込みに応答し或いはジャン命令を実行することにより前記転送制御プログラムを実行し、ホスト装置から書き込み・消去制御プログラムをＲＡＭ３に転送する。次に、ＲＡＭ３上で書き込み・消去制御プログラムを実行し、ユーザ領域２０Ｂの必要なエリアを消去し、そこに、ホストが保有する前記ＥＣＣコード生成プログラム及びエラー訂正プログラムを書き込む。
【００７３】
《ＥＣＣ処理速度の向上》
図１０には前記ＥＣＣコード生成プログラム及びエラー訂正プログラムの実行速度を向上させる為の一例が示される。即ち、前記フラッシュメモリ５のブート領域２０Ａ（図３の（Ｃ））又はユーザ領域２０Ｂ（図３の（Ｂ））から前記ＥＣＣコード生成プログラム及びエラー訂正プログラムをＲＡＭ３の所定のアドレス領域へ転送し、前記ＣＰＵ２には前記ＲＡＭ３に転送された前記ＥＣＣコード生成プログラム及びエラー訂正プログラムを実行させればよい。このとき、前記ＣＰＵ２はリセットの指示に応答して前記フラッシュメモリ５から前記ＲＡＭ３への転送制御プログラムを実行すればよい。そのような転送制御プログラムは例えばユーザ領域２０Ｂｂにおけるユーザプログラムとして、或いはブート領域２０Ａのプログラムとして所定のアドレス領域に格納しておけばよい。この方法は、ＲＡＭ３のアクセスサイクルがフラッシュメモリ５のアクセスサイクルより速い場合において、上記ＥＣＣコード生成プログラム及びエラー訂正プログラムのＣＰＵによる実行速度を高速にすることができる。
【００７４】
図１１にはエラー判定によるオーバヘッドを見掛け上解消するための一例が示される。即ち、前記ＣＰＵ２はリセットの指示に応答して、所定のリセット処理ユーザプログラムを実行し、前記フラッシュメモリ５の一部の記憶領域２０Ｂａから順次ＥＣＣコード付加パラメータデータＤＡＴＡ１を読み出し、読み出したＥＣＣコード付加パラメータデータＤＡＴＡ１に対し、前記エラー訂正プログラム２２の実行により前記エラー判定とエラーの訂正を行い、前記エラー判定とエラー訂正処理を経たパラメータデータＤＡＴＡ２を前記ＲＡＭ３に初期的にストアする。その後、ＣＰＵ２は制御用ユーザプログラムにしたがってＲＡＭ３から必要なデータをリードすればよく、リード動作に際してその都度エラー判定を行なうことを要しない。
【００７５】
なお、図１１の前記エラー訂正プログラム２２は、図１０で示されるように、フラッシュメモリ５の所定のアドレス領域からＲＡＭ３の所定のアドレス領域へ転送された状態を示しているしている。
【００７６】
図１２は、エラー判定によるオーバーヘッドを見掛け上解消する為の第２の方法の一例が示される。上記図１１は前記エラー訂正プログラム２２をＲＡＭ３のアドレス空間上でＣＰＵ２により実行する場合を示したが、図１２はＲＡＭ３のリードアクセスサイクルがフラッシュメモリ５のリードアクセスサイクルより速くない（短くない）場合に有効な方法が示される。
【００７７】
フラッシュメモリ５のアクセスサイクルとＲＡＭ３のアクセルサイクルとが同一の場合、エラー訂正プログラム２２のＣＰＵ２による実行速度は、ＲＡＭ３の記憶領域上からエラー訂正プログラムをＣＰＵ２で実行しても、フラッシュメモリの記憶領域上からエラー訂正プログラムをＣＰＵ２で実行しても、その実行速度はそれほど変わらないと考えられる。
【００７８】
したがって、図１２に示されるように、フラッシュメモリ５の一部の記憶領域上にエラー訂正プログラム２２を格納し、そのプログラム２２をＲＡＭ３へ転送することなくフラッシュメモリ５の上記一部の記憶領域からＣＰＵ２で実行し、フラッシュメモリ５に一部の記憶領域２０Ｂａに格納されたＥＣＣコード付加パラメータＤＡＴＡ１１に対してエラー判定及びエラー訂正を行ない、エラー判定及びエラー訂正処理の施されたパラメータデータＤＡＴＡ２２をＲＡＭ３の所定の記憶領域に格納する。上記エラー訂正プログラムの処理は、上記図１１で説明されたように、フラッシュメモリ５の一部の領域２０Ｂｂに格納されたリセット処理ユーザープログラムが、リセットに応答するＣＰＵ２によって実行される事によって実行される。
【００７９】
《ソフトウェアＥＣＣ処理の原理的手法》
次にソフトウェアＥＣＣ処理の原理的な手法を説明する。ＥＣＣによる符号化や誤り訂正の公知の手法では例えばハミングコードの検査行列を用い、誤り訂正ではリードデータとハミングコードの行列演算を積和演算などを用いて行なうことができる。マイクロコンピュータ１におけるソフトウェアＥＣＣ処理では、データをｎビットとし、ｎビットのデータに対するＥＣＣコードをｍビットとするとき、ｍビットの相互に異なる２進数をｍ＋ｎ列に並べた行列テーブルを例えば図３の（Ｃ）に例示されるフラッシュメモリ５の記憶領域２０Ｂｂに固定データとして形成し、前記ＥＣＣコード生成プログラム及びエラー訂正プログラムの処理にその行列テーブルを参照させる。
【００８０】
図１３には１６ビットデータに対する１ビット訂正のための行列テーブル４０の一例が示される。同図の行列テーブルは便宜上生成行列４１と検査行列４２に分けて図示されている。生成行列４１における行番号１〜２１、列番号１〜１６は、１〜１６が１６ビットデータに関する番号、１７〜２１が５ビットのＥＣＣコードに関する番号であると理解されたい。検査行列４２における行番号１〜２１は生成行列と同意義、列番号１〜５は５ビットのＥＣＣコードに関する番号であると理解されたい。
【００８１】
ＥＣＣコード付加データ、即ち符号語の生成は次のように行なう。例えば１６ビットのデータをＭ＝ｍ１５，ｍ１４，…，ｍ１，ｍ０に対して５ビットのＥＣＣコード（検査ビット）Ｐ＝ｐ４，ｐ３，ｐ２，ｐ１，ｐ０を生成して２１ビットの符号語を生成する。この符号語を生成するには生成行列４１とデータＭとの行列演算を行なえばよい。要するに、図１４のように生成行列４１とデータＭを並べ、データＭのビットが“１”に対応する生成行列４１の行を加算すれば良い。ここで行なう加算は２進数の加算であり、各ビット毎の排他的論理和（Ｅｘ−ＯＲ）を計算すればよい。この演算手法において、元の１６ビットのデータＭはそのまま残るから、生成行列４１におけるＥＣＣコード５ビット相当部分に関して排他的論理和を演算すればよい。例えば、Ｈ’８０４１（ｂ’１０００＿００００＿０１００＿０００１）の１６ビットデータに対してＥＣＣコードを生成するには、図１５に例示されるように、１６ビットデータＭに対して、前記生成行列４１の内、ＥＣＣコード５ビット相当部分に関する行列を抜き出した行列４１Ａを並べ、データの論理値“１”のビット位置に対応する前記行列テーブルの列の値を行方向のビット毎に排他的論理和を演算してＥＣＣコードを生成すればよい。図１６にはここで行う排他的論理和演算のための演算手段をＥＣＣコード１ビット分の構成を代表として例示する。図１６の構成では、２ビットの排他的論理和演算器４３の出力をディスティネーションレジスタ（Ｄｒｅｇ）４５が受け、排他的論理和演算器４３の一方の入力にはＤｒｅｇ４３の出力が帰還され、他方の入力にはソースレジスタ（Ｓｒｅｇ）４５の出力が与えられる。前記排他的論理和演算においてＤｒｅｇ４３の初期値は“０”であり、Ｓｒｅｇ４３には順次、データの論理値“１”のビット位置に対応する前記行列テーブルの列の値が行方向のビット毎に入力され、排他的論理和演算器４３は双方の入力に対する排他的論理和演算結果をＤｒｅｇ４４にラッチし、これをＳｒｅｇ４３の次の出力との排他的論理和に用いる。最終的にＤｒｅｇ４４に得られた結果が、ＥＣＣコードの対応ビットの値になる。
【００８２】
尚、図１５、図１６の説明より明らかなように、生成行列４１は少なくとも図１４の列番号１７〜２１の部分だけあればよい。
【００８３】
図１７には図１５の場合の排他的論理和演算結果が示される。同図のＸｅ−ＯＲ結果が演算されたＥＣＣコードである。Ｈ’８０４１の場合には、Ｍ＝ｂ’１０００＿００００＿０１００＿０００１にＰ＝ｂ’１１１０１を付加したデータＣ＝１０００＿００００＿０１００＿０００１，１１１０１が、２１ビットの符号語になる。
【００８４】
フラッシュメモリから読み出された符号語に対するエラー判定は、前記検査行列４２と２１ビットの符号語との積を計算する。実際に積を計算しようとすれば積和演算による行列演算を行なわなければならない。ここでは、図１８に例示されるように、検査行列４２に対して符号語Ｃを並べ、前記符号語の論理値“１”のビット位置に対応する前記検査行列４２の列の値を行方向のビット毎に排他的論理和を採る。この排他的論理和演算は図１６で説明したのと同じ手法で行えばよい。図１８の例はフラッシュメモリ５から読み出された符号語に誤りの無い場合を示しており、上記生成された符号語Ｃ＝１０００＿００００＿０１００＿０００１，１１１０１と同じ符号語が読み出された状態が示されている。
【００８５】
図１９には図１８の例において前記排他的論理和による演算結果が示される。図１９の結果の欄に示された５ビットの値Ｒｌｔが全ビット論理値“０”のときはエラー無と判定され、前記符号語Ｃに含まれる１６ビットのデータＭが正規データとされる。
【００８６】
図２０にはフラッシュメモリ５から読み出した符号語Ｃｅｒに１ビットの誤りを含む場合が例示される。図２０の結果の欄に示された５ビットの値Ｒｌｔが１ビットでも論理値“１”のときはエラー有りと判定される。誤りのあるビット位置は、前記検査行列４２の列から、前記排他的論理和によって得られた５ビットの２進数Ｒｌｔに一致する列に対応される位置の符号語ＣｅｒのビットＢｅｒである。この誤りビットＢｅｒに対し、その論理値を反転してエラー訂正を行えばよい。訂正された符号語に含まれる１６ビットのデータＭが、訂正後の正規データとされる。
【００８７】
図２０の説明より明らかなように訂正可能な１ビットの誤りを生じているとき、エラー判定の演算結果Ｒｌｔは検査行列４２の何れかの列のビットパターンに一致することになる。エラー判定の演算結果Ｒｌｔにそれ以外のビットパターンが現れたときは２ビット以上の訂正不能な誤りが発生していることになる。図２１にはそのような訂正不能を意味する１０種類のビットパターンが示される。検査行列４２によるこの例では、それら訂正不能を意味する１０種類のビットパターンの値は１０進数で２２以上の値にされるようになっているから、訂正不能の判定も容易である。
【００８８】
以上で説明したソフトウェアＥＣＣ処理では積和演算を要する行列演算を直接行わないから、ＣＰＵ２若しくはマイクロコンピュータ１は積和演算器を備えなくとも、ソフトウェアによるＥＣＣ処理を能率的に行なうことが可能になる。また、行列テーブルを用いるから、その都度生成行列や検査行列を生成しなくてもよい。
【００８９】
図２２には訂正不能エラーに対して例外処理を実行可能にする例が示される。前記エラー訂正プログラムの実行による前記エラー判定処理において訂正不能なエラーが発生したき、誤動作防止の観点より、前記ＣＰＵ２は、前記エラー訂正プログラムの実行による前記エラー判定処理において訂正不能なエラーの発生を示す情報を外部から認識可能にＲＡＭ３のフラグ領域ＦＬＧ３０（或いはフラッシュコントロールモジュール６内のレジスタＦＭＬＣＲのリードエラービットＲＥＲ）に保持させる。例外処理プログラムのようなユーザプログラムを介してそのフラグ領域ＦＬＧを所定インターバル毎に参照させ、訂正不能なエラー発生を認識したとき、訂正不能なエラーを発生したデータブロック或いは全てのデータの書換え、即ち、新たなユーザデータに、ＥＣＣコードを生成し、これを付加して、領域２０Ｂａの所定エリアに書き込む処理を実行させる。
【００９０】
更にデータ破壊による誤動作防止を更に推し進める場合には、前記ＣＰＵ２は前記エラー訂正プログラムの実行によりエラー訂正可能なデータを検出した場合にも、それを示す情報を外部から認識可能にＲＡＭ３の所定記憶領域又は所定の汎用レジスタに保持させるとよい。そのような情報はワーニング情報として利用すればよく、例えば所定のユーザプログラムを介してその情報エリアを定期的に参照させればよい。これにより、ユーザシステムは、データが壊れかけている、ということを逸早く認識することができ、壊れかけているデータの書換え（再書込み）を促してデータの信頼性を更に向上させることが可能になる。要するに実際にデータエラーを生ずる事態の発生を未然に防止することができる。
【００９１】
《ＥＣＣコード生成処理の具体例》
ここでは図１７で説明した固定フォーマットのユーザデータを用意してＥＣＣコードを生成する処理を具体的に説明する。ＥＣＣコードの生成前に例えばユーザプログラムにしたがってユーザデータの読み込みとフォーマット展開が行なわれる。展開されたデータは図２３に例示されるように、ユーザデータ１６ビットに対して１６ビットの拡張ビットを割り当て、合計３２ビットが一つのＥＣＣデータブロックとして符号語領域になる。前記１６ビットの拡張ビットには５ビットのＥＣＣコード領域の他に１１ビットのワークビット領域が設けられているが、これは、必要なデータブロックをワード境界を単位にアクセスして得られるようにする実用的な観点を考慮したものである。
【００９２】
図２４には一つのＥＣＣデータブロックの構成が更に詳細に示される。同図において符号化検査ビットとはＥＣＣコードを意味する。同図においてＥＣＣデータブロックのビット番号に対応して機能名が割当てられる。機能名Ｄ００〜Ｄ１５はユーザデータであり、機能名Ｐ００〜Ｐ０４はＥＣＣコードである。
【００９３】
図２５には行列テーブルのデータ（生成用データ）例が示される。同図に示される生成用データは前記機能名に対応され、夫々テーブル検索アドレス（検索アドレス）Ｘ〜Ｘ＋１４が割当てられている。図２５の生成用データは、要するに図１８の検査行列４２と実質的に等しく、この検査行列４２の一部が図１５で説明した実質的な生成行列４１Ａになっている。図２５の機能名Ｄ００〜Ｄ１５の生成用データは図１８の列番号１６〜１のビット列に対応され、図２５の機能名Ｐ００〜Ｐ０４の生成用データは図１８の列番号２１〜１７のビット列に対応されている。図２５のテーブルを便宜上ＥＣＣテーブル（ＥＣＣＴＬＢ）とも記す。
【００９４】
図２６にはＥＣＣコード生成プログラムによる処理手順が例示される。ＥＣＣコード生成プログラムとそれに先立って実行されるユーザプログラムとの間のデータ及びアドレスの受け渡しにはＣＰＵ２の汎用レジスタ及びフラッシュコントロールモジュール６内のレジスタが利用される。即ち、ユーザプログラムは、フラッシュコントロールモジュール６内のレジスタＦＭＰＡＲ０に書き込みデータエリアの先頭アドレスをセットする。要するに、図２３に例示されるところのＲＡＭ３に展開されたデータの先頭アドレスがセットされる。汎用レジスタＲ０はユーザ書き込みデータレジスタ、Ｒ１は行列テーブル検索アドレスポインタ、Ｒ２は行列テーブル検索ストップ値、Ｒ３はユーザ書き込みデータ保存アドレスポインタ、Ｒ４はユーザ書き込みデータ保存アドレスストップ値、Ｒ５はビットマスク用データ、Ｒ６は検査ビット生成用変数、Ｒ７は論理値“１”のビットがあるかを検出するための変数、Ｒ８はビットに対応するテーブル値を格納する変数、として利用される。
【００９５】
図２６において、先ず、レジスタＦＭＰＤＲ０の値をレジスタＲ３にセットしてＲＡＭ３上に展開されたユーザデータの先頭アドレスをストアする（Ｓ４０）。次に、レジスタＲ３の値にｈ’８０を加算してＲＡＭ上に展開されたユーザデータのストップアドレスをレジスタＲ４にストアする（Ｓ４１）。そして、レジスタＲ３の値がレジスタＲ４の値に到達するまで、以下の処理を行う（Ｓ４２）。すなわち、レジスタＲ３の値を利用して先頭１６ビットユーザデータをリードしてレジスタＲ０にロードする（Ｓ４３）。レジスタＲ１にはＥＣＣＴＬＢの先頭の検索アドレスＸをセットし、レジスタＲ２にはそのストップアドレスＸ＋ｈ’１０をセットする（Ｓ４４）。レジスタＲ５にビットマスクデータｈ’０００１をセットし、レジスタＲ６にデフォルトデータｈ’００００をセットする（Ｓ４６）。そしてレジスタＲ１の値がレジスタＲ２の値に到達するまで次の処理を繰り返す（Ｓ４７）。要するに、レジスタＲ７にレジスタＲ５の値をロードし、レジスタＲ７とレジスタＲ０の値に対して論理積をとり、その結果をレジスタＲ７に返す（Ｓ４８）。レジスタＲ７の値が０より大きいかを判定する（Ｓ４９）。ステップＳ４９の判定結果が０より大きければ、その時のマスクデータＲ５の論理値“１”のビット位置と等しいビット位置にＲ０のユーザデータも論理値“１”のビットも持つことになる。その場合にはＥＣＣテーブルの生成用データ（Ｙ）をレジスタＲ８にストアし（Ｓ５０）、レジスタＲ６とＲ８の値に対して前記排他的論理和処理を行って、その値をレジスタスＲ６に返す。ステップＳ４９においてＲ７の値が０であれば、レジスタＲ５の値を１ビット左シフトしてマスクビット位置を次のビット位置とし（Ｓ５２）、レジスタＲ１にｈ’０１を加算して、ＥＣＣＴＬＢの検索アドレスを次アドレスに進める（Ｓ５３）。そして再度ステップＳ４８の処理に戻る。ステップＳ４８〜Ｓ５３の処理はＥＣＣＴＬＢの検索アドレスがストップアドレスになるまで繰り返され（Ｓ４７）、ここまでの処理により、図１７で説明したようなＥＣＣコードＰがレジスタＲ６に保持される。そして、次にレジスタＲ３の値を１ワード分だけインクリメントし（Ｓ５４）、レジスタＲ３の値が指すアドレス（ＲＡＭ３上に展開された図２３のデータフォーマットの拡張領域）に、レジスタＲ６が保有するＥＣＣコードをストアする（Ｓ５５）。そして次のユーザデータに対して同様の処理を行う為にレジスタＲ３のアドレスを１ワード分インクリメントする。上記ステップＳ４３〜Ｓ５６までの処理をＲ３＜Ｒ４になるまで繰り返すことによって、ＲＡＭ３上に展開された一群のユーザデータに対してＥＣＣコードが付加される。この後、ＥＣＣコード生成プログラムの実行を終えて、直前のユーザプログラムにリターンする。特に図示はしないが、リターンされたユーザプログラムは、ＲＡＭ３上に展開されたＥＣＣコード付加データを、フラッシュメモリ５の所定の領域２０Ｂａに書き込む。
【００９６】
《エラー判定処理の具体例》
図２７には図２６の手順で生成されたＥＣＣコード付加データをリードしたときのエラー判定処理の詳細が示される。エラー判定処理プログラムとそれに先立って実行されるユーザプログラムとの間のデータ及びアドレスの受け渡しにはＣＰＵ２の汎用レジスタ及びフラッシュコントロールモジュール６内のレジスタが利用される。即ち、ユーザプログラムは、フラッシュコントロールモジュール６内のレジスタＦＭＰＡＲ０にユーザリードアドレスをセットする。要するに、図３の領域２０Ｂａ中のリードアドレスがセットされる。汎用レジスタＲ０はエラー訂正前のリードアドレス、Ｒ１は検査ビット保存変数、Ｒ２はエラー検出用レジスタ、Ｒ３はユーザリードアドレス、Ｒ４はＥＣＣ計算用中間テーブル、Ｒ５はＥＣＣＴＬＢ検索アドレス、Ｒ６はＥＣＣＴＬＢ検索ストップアドレス、Ｒ７はビットマスクデータ、Ｒ８は論理値“１”検出用変数、Ｒ９はＥＣＣＴＬＢデータ保存用変数、として利用される。
【００９７】
図２７において、先ず、レジスタＦＭＰＡＲ０のユーザリードアドレスをレジスタＲ３にセットし（Ｓ６０）、このレジスタＲ３のリードアドレスを利用してユーザデータをレジスタＲ０にストアする（Ｓ６１）。更にアドレスを１ワード分インクリメントし（Ｓ６２）、後続のＥＣＣコードのデータをレジスタＲ１にストアし、且つレジスタＲ１のデータをレジスタＲ４にコピーする（Ｓ６３）。前記レジスタＲ４を左に１６ビットシフトを行い、そのシフト結果に対してｈ’００１Ｆ００００との論理積を採る。これによってレジスタＲ４には、その第１７ビット目から第２１ビットにＥＣＣコードが配置され、その他のビットを“０”としたデータを得る（Ｓ６４）。更に、レジスタＲ０の値に対してｈ’０００００ＦＦＦＦとの論理積を採り、その結果をレジスタＲ０に返し、レジスタＲ４の値にレジスタレジスタＲ０の値を加えてその演算結果をレジスタＲ４に返す（Ｓ６５）。これにより図示の“１”ビット検索テーブルがレジスタＲ４に得られる。“１”ビット検索テーブルにおける未使用エリアは論理値“０”になっている。次にレジスタＲ２を論理値“０”に初期化し（Ｓ６６）、レジスタＲ５にＥＣＣＴＬＢの検索アドレスＸをセットし、レジスタＲ６に検索ストップアドレスＸ＋ｈ’１６をセットする（Ｓ６７）。レジスタＲ７にはビットマスクデータｈ’０００００００１をセットする（Ｓ６８）。そしてＲ５の値がＲ６の値になるまで以下の処理を繰り返す。即ち、レジスタＲ８にレジスタＲ４の値をセットし、Ｒ７とＲ８の論理積をＲ８に返し、Ｒ８が０より大きいかを判定する（Ｓ７１）。ステップＳ７１の判定結果が０より大きければ、その時のＲ７のマスクデータの論理値“１”のビット位置と等しいビット位置にＲ４の符号化データも論理値“１”のビットも持つことになる。その場合にはＥＣＣテーブルＥＣＣＴＬＢの生成用データ（Ｙ）をレジスタＲ９にストアし（Ｓ７２）、レジスタＲ２とＲ９の値に対して前記排他的論理和処理を行って、その値をレジスタスＲ２に返す（Ｓ７３）。ステップＳ７１においてＲ８の値が０であれば、レジスタＲ７の値を１ビット左シフトしてマスクビット位置を次のビット位置とし（Ｓ７４）、レジスタＲ５にｈ’０１を加算して、ＥＣＣＴＬＢの検索アドレスを次アドレスに進める（Ｓ７５）。そして再度ステップＳ７０の処理に戻る。ステップＳ７０〜Ｓ７７の処理はＥＣＣＴＬＢの検索アドレスがストップアドレスになるまで繰り返され（Ｓ６９）、ここまでの処理により、図１９及び図２０で説明したような判定結果ＲｌｔがレジスタＲ２に保持される。そして、レジスタＲ２の値が全ビット“０”か否かを判定し（Ｓ７６）、そうでなければエラーが有るので、訂正可能な１ビットエラーに対して対してはサブルーチンとして後述のエラー訂正処理を実行する。そして、レジスタＦＭＰＤＲ０が示す領域に、レジスタＲ４の下位１６ビットの値をストアし（Ｓ７）、レジスタＦＰＦＲにパス情報をセットする。尚、特に図示はしないがステップＳ７６ではエラーが訂正不能であるか否かも判定し、訂正不能であれば図２２で説明した訂正不能エラー発生の通知処理を行って例外処理を待ってもよい。
【００９８】
《エラー訂正処理の具体例》
図２８には１ビットの誤りに対するエラー訂正処理の詳細が示される。エラー訂正処理プログラムにおけるＣＰＵ２の汎用レジスタ及びフラッシュコントロールモジュール６内のレジスタの利用形態はエラー判定処理の場合と同じである。図２７において、先ず、レジスタＲ５にＥＣＣＴＬＢの先頭検索アドレスＸをセットし、レジスタＲ６にＥＣＣＴＬＢの検索ストップアドレスをセットする（Ｓ８０）。レジスタＲ７にビット反転用マスクデータｈ’０００１をセットする（Ｓ８１）。そしてＲ５の値がＲ６の値になるまで以下の処理を繰り返す。即ち、レジスタＲ５の検索アドレスに対応する生成用データをＥＣＣＴＬＢからレジスタＲ９にストアする。そして、Ｒ９の値が前記レジスタＲ２の判定結果Ｒｌｔに一致するかが判別され、一致していれば、その時のＲ７のビット反転用マスクデータにおける“１”のビット位置に対応するユーザデータのビット位置に誤りがある。前記エラー判定処理のステップＳ７７で説明したようにレジスタＲ４の下位１６ビットを切出して、正規のユーザデータとするから、そのとき、レジスタＲ７のマスクデータとレジスタＲ４のデータとを対応ビット毎に排他的論理和を採ることによって、マスクデータのビット“１”に対応するユーザデータのビットだけが論理値反転され、エラー訂正されたユーザデータがレジスタＲ４に返される（Ｓ８５）。ステップＳ８４においてＲ９の値がＲ２の値に一致しなければ、レジスタＲ５にｈ’０１を加算して、ＥＣＣＴＬＢの検索アドレスを次アドレスに進め（Ｓ８６）、レジスタＲ７のマスクデータを１ビットシフトし（Ｓ８７）、再度ステップＳ８３の処理に戻る。ステップＳ８３〜Ｓ８７の処理はＥＣＣＴＬＢの検索アドレスがストップアドレスになるまで繰り返されて（Ｓ８２）、当該サブルーチンを終了する。このサブルーチンが終了されたとき、レジスタＲ４には誤り訂正された正規のユーザデータを含んでいる。
【００９９】
《マルチチップのデータ処理システム》
図２９にはマルチチップのデータ処理システムが例示される。同図に示されるデータ処理システムはデータプロセッサ５０とフラッシュッメモリ５１が夫々別々に半導体集積回路化されてバス５２で接続され、その他に、単一又は複数個の半導体集積回路で構成された周辺回路５３がバス５２に接続される。データプロセッサ５０はＣＰＵ６５、ＲＡＭ６６、ＲＯＭ６７、及びＩ／Ｏ６８を有する。フラッシュメモリ５１は汎用フラッシュメモリであり、フラッシュメモリセルがマトリクス配置されたメモリセルアレイ７０、ＸＤＥ・ＤＲＶ７１、ＹＤＥ７２、ＴＧＮ７３、ＶＧＮ７４、ＹＳＷ７５、ＳＡＡ７６、書き込み・消去制御回路７７を有する。フラッシュッメモリ５１の基本的な構成は前記フラッシュメモリ５と同様であるからその詳細な説明は省略するが、書き込み及び消去を制御するロジック回路として書き込み・消去制御回路７７を専用に備える。フラッシュメモリ５１の動作はＣＰＵ６５から与えられるコマンド並びにアクセス制御信号によって決定される。ＣＰＵ６５はフラッシュメモリ５１の位置部の記憶領域７０Ｅを頻繁に書き換えるパラメータデータのようなデータの記憶領域として用いる。前述と同様にその領域７０Ｅは他の領域よりも書き換え保証回数を向上させる為にＥＣＣ処理の対象とされる。ＲＯＭ６７は前記領域７０Ｅをアクセスしてデータ処理を行うユーザプログラム６７Ｐを保有する。このユーザプログラム６７Ｐは、前記領域７０Ｅにパラメータデータを書き込むときに実行されるＥＣＣコード生成プログラム６７Ｐ１、前記領域７０Ｅから読み出したＥＣＣコード付加データに対するエラー判定及び誤り訂正を行う為のエラー訂正プログラム６７Ｐ２を有する。前記ＥＣＣコード生成プログラム及びエラー訂正プログラムは所定のユーザプログラムから呼び出されて実行される。
【０１００】
上記マルチチップのデータ処理システムにおいても図１のシングルチップのマイクロコンピュータ化されたデータ処理システムと同様に、ＥＣＣコードによる記憶領域の利用の無駄を省いて記憶情報の信頼性を向上させることができ、ＥＣＣコードによる記憶領域の利用の無駄を省いて記憶情報の書換え保証回数を向上させることが可能であり、デバイスの特性に合ったＥＣＣ方式を選択してデータに対するＥＣＣコードのオーバヘッドを小さくし記憶領域の利用効率を最大限とすることが可能である等の効果を得ることができる。
【０１０１】
《多値フラッシュメモリへの考慮》
前記フラッシュメモリ５，５１は、１個のフラッシュッメモリセルに２ビット以上の記憶情報を保持させることが可能な多値フラッシュメモリであってもよい。すなわち、１個のフラッシュメモリセルは、情報記憶に際して複数ビットの書き込みデータで指定される４種類以上の閾値電圧の中の一つの閾値電圧に設定され、情報読み出しに際して閾値電圧の状態を対応する複数ビットの記憶情報として出力する、１個のフラッシュメモリセルの記憶情報を複数ビット化したメモリである。ここでは、一つのフラッシュメモリセルに２ビットの情報を書き込むことができ、かつその情報を読み出すことができるフラッシュメモリを一例とする。このようなフラッシュメモリが実現しようとする多値情報記憶技術において、一つのメモリセルの情報記憶状態は、例えば消去状態（“１１”）、第１の書き込み状態（“１０”）、第２の書き込み状態（“００”）、第３の書き込み状態（“０１”）の中から選ばれた一つの状態とされる。全部で４通りの情報記憶状態は、２ビットのデータによって決定される状態とされる。即ち、２ビットのデータを一つのメモリセルで記憶する。この４値のデータと閾値電圧との関係は、図３０の閾値電圧分布図に示される通りである。フラッシュメモリセルの記憶データの値と閾値電圧との関係を図３０のように規定すると、情報記憶後に、閾値電圧が不所望に変化しても隣の閾値電圧のデータとは相互に１ビットしか相違しないようになる。したがって、データエラーを生じても殆どが１ビットエラーになり、１ビットエラーに対して訂正可能なＥＣＣ処理によるデータの信頼性を高く維持することが可能になる。換言すれば、多値フラッシュメモリセルの閾値電圧が近いところをデータハミング距離が１になるようにすれば、相対的に少ないビット数のＥＣＣコードで高い信頼性を得ることができ、書換え保証回数の向上が容易になる。
【０１０２】
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
【０１０３】
例えば、フラッシュメモリセルはフローティングゲートとコントロールゲートの縦積み構造に限定されず、ＭＯＳトランジスタのゲート電極をフローティングゲート電極とし当該ゲート電極を延在させて形成したＭＯＳゲート容量を介してチャネル領域をコントロールゲートに用いるようなデバイス構造などを採用してもよい。また、不揮発性記憶素子はフラッシュメモリに限定されず、ＭＮＯＳ（メタル・ナイトライド・オキサイド・セミコンダクタ）トランジスタを記憶素子とするＥＥＰＲＯＭ（エレクトリカリ・イレーザブル・アンド・プログラマブル・リード・オンリ・メモリ）のような不揮発性メモリ、或いは誘電体メモリ等であってもよい。
【０１０４】
データ処理システムは、１個の半導体チップに前記不揮発性メモリ及び中央処理装置が形成されたシングルチップのマイクロコンピュータとして実現することが可能であり、その一方において、前述の如く前記データ処理システムは、前記不揮発性メモリ及び中央処理装置が夫々別々の半導体チップに形成されたマルチチップ形態で実現してもよい。そして、データ処理システムは、シングルチップ及びマルチチップのマイクロコンピュータに限定されず、フラッシュメモリを内蔵したグラフィックスコントローラ、ＤＲＡＭを専用ロジック回路と共に混載したシステムＬＳＩ、その他のマルチチップによる電子回路に広く適用する事ができる。
【図面の簡単な説明】
【０１０５】
【図１】本発明の一例に係るシングルチップのマイクロコンピュータのブロック図である。
【図２】ＣＰＵの具体例を示すブロック図である。
【図３】書換え保証回数を向上させる記憶領域、ＥＣＣコード生成プログラム及びエラー訂正プログラムの記憶領域のマッピング例を示す説明図である。
【図４】ユーザデータのビット数に対するＥＣＣコードのビット数による誤り訂正能力とオーバーヘッドとの関係を例示する説明図である。
【図５】ユーザデータとＥＣＣコードを一つの配列データ中に対応付けての配列するデータフォーマットと、ユーザデータとＥＣＣコードとを別の配列データとして対応付けるデータフォーマットとを例示する説明図である。
【図６】ユーザデータとＥＣＣコードとを一つの配列データ中に対応付けて書き込むときの処理手順を例示する説明図である。
【図７】ユーザデータとＥＣＣコードとを別の配列データとして対応付けて書き込むときの処理手順を例示する説明図である。
【図８】図６で説明したレコード配列を有するＥＣＣコード付きデータをリードするときの処理手順を例示する説明図である。
【図９】図７で説明したユーザデータとＥＣＣコードが別々の配列データとされるＥＣＣコード付きデータをリードするときの処理手順を例示する説明図である。
【図１０】ＥＣＣコード生成プログラム及びエラー訂正プログラムの実行速度を向上させる為の一例を示す説明図である。
【図１１】エラー判定によるオーバヘッドを見掛け上解消するための一例を示す説明図である。
【図１２】エラー判定によるオーバヘッドを見掛け上解消するための別の一例を示す説明図である。
【図１３】１６ビットデータに対する１ビット訂正のための行列テーブル４０の一例を示す説明図である。
【図１４】ＥＣＣコードを付加した符号語を生成する原理的手法の説明図である。
【図１５】Ｈ’８０４１の１６ビットデータに対し排他的論理和を用いてＥＣＣコードを生成する具体例の説明図である。
【図１６】排他的論理和演算のための演算手段をＥＣＣコード１ビット分の構成を代表として例示するブロック図である。
【図１７】図１５の例において排他的論理和を採った具体的な演算結果であるＥＣＣコードを例示する説明図である。
【図１８】エラー判定処理の原理的手法を示す説明図である。
【図１９】図１８の例において前記排他的論理和による誤り無の判定結果が例示される説明図である。
【図２０】図１９に対して１ビット誤りの有る判定結果が得られる場合を例示する説明図である。
【図２１】２ビット以上の訂正不能な誤りが発生している時の判定結果を列挙する説明図である。
【図２２】訂正不能エラーに対して例外処理を実行可能にする例を示す説明図である。
【図２３】ユーザデータとＥＣＣコードの符号語に採用される固定フォーマットの一例を示す説明図である。
【図２４】図２３の固定フォーマットの更に詳細を例示する説明図である。
【図２５】行列テーブルのデータを保有するＥＣＣテーブルを例示する説明図である。
【図２６】ＥＣＣコード生成プログラムによる処理手順を例示するフローチャートである。
【図２７】図２６の手順で生成されたＥＣＣコード付加データをリードしたときのエラー判定処理の詳細を示すフローチャートである。
【図２８】１ビットの誤りに対するエラー訂正処理の詳細を示すフローチャートである。
【図２９】マルチチップのデータ処理システムを例示するブロック図である。
【図３０】多値フラッシュメモリにおける４値のデータと閾値電圧との関係を例示する説明図である。
【符号の説明】
【０１０６】
１  マイクロコンピュータ
２  ＣＰＵ
３  ＲＡＭ
５  フラッシュメモリ
６  フラッシュコントロールモジュール
８  マスクＲＯＭ
２０  メモリセルアレイ
２０Ａ  ブート領域
２０Ｂ  ユーザ領域
２０Ｂａ  相対的に書換え保証回数の高い記憶領域
２０Ｂｂ  相対的に書換え保証回数の低い記憶領域
２１  ＥＣＣコード生成プログラム
２２  エラー訂正プログラム
ＤＡ１  ユーザデータの配列
ＤＡ２  固定フォーマットの符号語の配列
ＤＡ３  ＥＣＣコードのみから成るデータ配列
ＤＡＴＡ１  ＥＣＣコード付加パラメータデータ
ＤＡＴＡ２  エラー判定・訂正済パラメータデータ
ＲＥＲ  リードエラービット
３０  リードエラーフラグ
４０  行列テーブル
４１  生成行列
４２  検査行列
Ｍ  データ（ユーザデータ）
４１Ａ  生成行列の内ＥＣＣに関する部分を抜き出した行列
Ｐ  ＥＣＣコード
Ｃ  符号語
Ｒｌｔ  エラー判定の演算結果
Ｃｅｒ  １ビットの誤りを含む符号語
Ｂｅｒ  誤りビット
５０  データプロセッサ
５１  フラッシュメモリ
６５  ＣＰＵ
６６  ＲＡＭ
６７  ＲＯＭ
７０  メモリセルアレイ
７０Ｅ  相対的に書換え保証回数の高い記憶領域
【図１】
2007104708.tif 000003
【図２】
2007104708.tif 000004
【図３】
2007104708.tif 000005
【図４】
2007104708.tif 000006
【図５】
2007104708.tif 000007
【図６】
2007104708.tif 000008
【図７】
2007104708.tif 000009
【図８】
2007104708.tif 000010
【図９】
2007104708.tif 000011
【図１０】
2007104708.tif 000012
【図１１】
2007104708.tif 000013
【図１２】
2007104708.tif 000014
【図１３】
2007104708.tif 000015
【図１４】
2007104708.tif 000016
【図１５】
2007104708.tif 000017
【図１６】
2007104708.tif 000018
【図１７】
2007104708.tif 000019
【図１８】
2007104708.tif 000020
【図１９】
2007104708.tif 000021
【図２０】
2007104708.tif 000022
【図２１】
2007104708.tif 000023
【図２２】
2007104708.tif 000024
【図２３】
2007104708.tif 000025
【図２４】
2007104708.tif 000026
【図２５】
2007104708.tif 000027
【図２６】
2007104708.tif 000028
【図２７】
2007104708.tif 000029
【図２８】
2007104708.tif 000030
【図２９】
2007104708.tif 000031
【図３０】
2007104708.tif 000032