(57)【要約】【課題】半導体記憶装置の動作信頼性を向上出来るメモリコントローラ及び半導体装置を提供すること。【解決手段】複数のメモリセルＭＣを備えた半導体記憶装置１０を制御するメモリコントローラ２０であって、前記メモリセルＭＣに対して一括して書き込むべき第１データを元に複数の第２データを生成するデータ生成手段２１と、各桁が前記メモリセルへの書き込み済みデータのビット毎の累積結果である累積値を保持し、前記第２データのうち、前記累積値の各桁と前記第２データの各々の各ビットとの加算結果の各桁の間でより平均化されるいずれかを選択する選択手段２２とを具備し、前記選択手段２２で選択された前記第２データとその選択情報とが前記メモリセルＭＣに書きこまれ、前記選択手段２２は選択した前記第２データに関する前記加算結果を新たな前記累積値として保持する。【選択図】図１
2008217857.tif 000002
【特許請求の範囲】
【請求項１】
同一のワード線に接続された複数の不揮発性のメモリセルに対して一括して書き込み動作が行われる半導体記憶装置を制御するメモリコントローラであって、
前記メモリセルに対して一括して書き込むべき多ビットの第１データを元にして、複数の第２データを生成するデータ生成手段と、
各桁が前記メモリセルに対する書き込み済みデータのビット毎の累積結果である累積値を保持し、且つ複数の前記第２データのうち、前記累積値の各桁と前記第２データの各々の各ビットとの加算結果が、前記加算結果の各桁の間でより平均化されるいずれかひとつを選択する選択手段と
を具備し、前記選択手段で選択された前記第２データと、いずれの前記第２データが選択されたかを示す情報とが、前記メモリセルに対して書きこまれ、
前記選択手段は、選択した前記第２データに関する前記加算結果を、新たな前記累積値として保持する
ことを特徴とするメモリコントローラ。
【請求項２】
同一のワード線に接続された複数の不揮発性のメモリセルに対して一括して書き込み動作が行われる半導体記憶装置を制御するメモリコントローラであって、
前記メモリセルに対して一括して書き込むべき多ビットの第１データを元に複数の第２データを生成し、且つ前記第２データの各々によって前記メモリセルにチャージされる電荷量に応じて前記第２データを符号化した第３データを生成するデータ生成手段と、
各桁が前記メモリセルに対する書き込み済みデータに対応する前記第３データのビット毎の累積結果である累積値を保持し、且つ複数の前記第２データのうち、前記累積値の各桁と、前記第２データの各々についての前記第３データの各ビットとの加算結果が、前記加算結果の各桁の間でより平均化されるいずれかひとつを選択する選択手段と
を具備し、前記選択手段で選択された前記第２データと、いずれの前記第２データが選択されたかを示す情報とが、前記メモリセルに対して書きこまれ、
前記選択手段は、選択した前記第２データに関する前記加算結果を、新たな前記累積値として保持する
ことを特徴とするメモリコントローラ。
【請求項３】
同一のワード線に接続された複数の不揮発性のメモリセルに対して一括して書き込み動作が行われる半導体記憶装置を制御するメモリコントローラであって、
疑似乱数を発生する疑似乱数発生手段と、
前記メモリセルに対して一括して書き込むべき多ビットデータの各ビットと、前記疑似乱数との排他的論理和を算出する論理ゲートと
を具備し、前記論理ゲートにおける算出結果が前記メモリセルに書き込まれる
ことを特徴とするメモリコントローラ。
【請求項４】
前記データ生成手段は、前記第１データの各ビットを反転させるデータ反転手段を備え、非反転の前記第１データと、前記データ反転手段により各ビットを反転させた前記第１データとを、それぞれ前記第２データとして出力する
ことを特徴とする請求項１または２記載のメモリコントローラ。
【請求項５】
前記データ生成手段は、複数の疑似乱数を発生させる疑似乱数発生手段と、
複数の前記疑似乱数の各々と前記第１データの各ビットとの排他的論理和を算出して、算出結果をそれぞれ前記第２データとして出力する論理ゲートと
を備えることを特徴とする請求項１または２記載のメモリコントローラ。
【請求項６】
前記選択手段は、前記加算結果における各桁の最大値と最小値との差が最小となる前記第２データを選択する
ことを特徴とする請求項１または２記載のメモリコントローラ。
【請求項７】
前記選択手段は、前記加算結果における各桁の値の標準偏差が最小となる前記第２データを選択する
ことを特徴とする請求項１または２記載のメモリコントローラ。
【請求項８】
前記選択手段は、選択した前記第２データについての前記加算結果の全ての桁が“１”以上である場合には、前記加算結果の各桁から“１”を減じて得られる結果を、新たな前記累積値とする
ことを特徴とする請求項１または２記載のメモリコントローラ。
【請求項９】
前記選択手段は、前記加算結果のいずれかの桁がオーバーフローを起こす場合、その桁の値を、その桁で計数可能な最大値の“２”の商に置き換え、その他の各桁を“２”の商で置き換える
ことを特徴とする請求項１または２記載のメモリコントローラ。
【請求項１０】
請求項１または２記載のメモリコントローラと、
前記メモリコントローラの前記選択手段によって選択された前記第２データが書き込まれる前記メモリセルが複数配置された第１メモリ領域と、いずれの前記第２データが選択されたかを示す前記情報が書き込まれる前記メモリセルが配置された第２メモリ領域とを備えた前記半導体記憶装置と
を具備することを特徴とする半導体装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、ＮＡＮＤ型フラッシュメモリを制御するメモリコントローラ及びこのメモリコントローラを備えた半導体装置に関する。
【背景技術】
【０００２】
近年、デジタルカメラや携帯型オーディオプレーヤの急速な普及により、大容量の不揮発性半導体メモリの需要が拡大している。そして、不揮発性半導体メモリとしてＮＡＮＤ型フラッシュメモリ（以下、単にフラッシュメモリと呼ぶ場合がある）が広く使用されている。
【０００３】
ＮＡＮＤ型フラッシュメモリでは、電子の注入されたメモリセル数が増加すると、非選択のメモリセルの保持するデータが破壊される、いわゆるプログラムディスターブ（Program Disturb）と呼ばれる問題が発生する。また、メモリセルアレイ内において同一のデータが連続する場合には、ＧＩＤＬ（Gate Induced Drain Leakage）によって、やはりプログラムディスターブの問題が生じる。
【０００４】
上記問題に対して、メモリセルアレイ全体としてのチャージ量を平均化することで、プログラムディスターブを解決する手法が提案されている（例えば特許文献１参照）。しかしながら本手法では、チャージ量の平均化は十分では無く、また同一のデータが連続することも防止出来ない。従って、ＮＡＮＤ型フラッシュメモリの大容量化に従って、その動作信頼性が悪化するという問題があった。
【特許文献１】特開平７−３３４９９１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
この発明は、半導体記憶装置の動作信頼性を向上出来るメモリコントローラ及び半導体装置を提供する。
【課題を解決するための手段】
【０００６】
この発明の一態様に係るメモリコントローラは、同一のワード線に接続された複数の不揮発性のメモリセルに対して一括して書き込み動作が行われる半導体記憶装置を制御するメモリコントローラであって、前記メモリセルに対して一括して書き込むべき多ビットの第１データを元にして、複数の第２データを生成するデータ生成手段と、各桁が前記メモリセルに対する書き込み済みデータのビット毎の累積結果である累積値を保持し、且つ複数の前記第２データのうち、前記累積値の各桁と前記第２データの各々の各ビットとの加算結果が、前記加算結果の各桁の間でより平均化されるいずれかひとつを選択する選択手段とを具備し、前記選択手段で選択された前記第２データと、いずれの前記第２データが選択されたかを示す情報とが、前記メモリセルに対して書きこまれ、前記選択手段は、選択した前記第２データに関する前記加算結果を、新たな前記累積値として保持する。
【０００７】
また、この発明の一態様に係る半導体装置は、前記メモリコントローラと、前記メモリコントローラの前記選択手段によって選択された前記第２データが書き込まれる前記メモリセルが複数配置された第１メモリ領域と、いずれの前記第２データが選択されたかを示す前記情報が書き込まれる前記メモリセルが配置された第２メモリ領域とを備えた前記半導体記憶装置とを具備する。
【発明の効果】
【０００８】
本発明によれば、半導体記憶装置の動作信頼性を向上出来るメモリコントローラ及び半導体装置を提供出来る。
【発明を実施するための最良の形態】
【０００９】
以下、この発明の実施形態につき図面を参照して説明する。この説明に際し、全図にわたり、共通する部分には共通する参照符号を付す。
【００１０】
［第１の実施形態］  
この発明の第１の実施形態に係る半導体装置について、図１を用いて説明する。図１は、本実施形態に係るメモリシステムのブロック図である。図示するようにメモリシステム１は、おおまかにはＮＡＮＤ型フラッシュメモリ１０と、ＮＡＮＤ型フラッシュメモリ１０を制御するメモリコントローラ２０とを備えている。
【００１１】
まず、ＮＡＮＤ型フラッシュメモリ１０の構成について説明する。なお以下では、ＮＡＮＤ型フラッシュメモリ１０を単にフラッシュメモリ１０と呼ぶことがある。図示するようにフラッシュメモリ１０は、メモリセルアレイ１１、ページバッファ１２、及びセンスアンプ１３を備えている。メモリセルアレイ１１は、複数の不揮発性のメモリセルＭＣが配置された複数のメモリブロック１４を備えている。メモリセルＭＣの各々は、１ビット、すなわち２値のデータを保持可能とされている。同一のメモリブロック１４内に含まれる全てのメモリセルＭＣは一括して消去され、また複数のメモリセルＭＣに対して一括してデータが書き込まれる。以下、一括してデータが書き込まれるメモリセルＭＣの単位を、ページと呼ぶ。ページバッファ１２は、メモリセルＭＣへの書き込みデータをページ単位で保持し、保持した書き込みデータをメモリセルＭＣへ書き込む。センスアンプ１３は、メモリセルＭＣから読み出されたデータをセンスして増幅する。
【００１２】
上記メモリブロック１４の構成について、図２を用いて説明する。図２は、メモリブロック１４の一部構成を示す回路図である。図示するようにメモリブロック１４は、レギュラーセルアレイ１５とＥＣＣセルアレイ１６とを備えている。レギュラーセルアレイ１５は、外部から与えられた書き込みデータの保持用として用いられ、ＥＣＣセルアレイ１６は書き込みデータから生成されたＥＣＣデータの保持用として用いられる。
【００１３】
レギュラーセルアレイ１５及びＥＣＣセルアレイ１６は、複数のＮＡＮＤストリングを備えている。ＮＡＮＤストリング各々は、選択トランジスタＳＴ１、ＳＴ２、及び３２個のメモリセルトランジスタＭＴを備えている。ＮＡＮＤストリング内に含まれるメモリセルトランジスタＭＴの数は一例に過ぎず、例えば８個、３２個、６４個、１２８個等であってもよい。各々のＮＡＮＤストリングに含まれる選択トランジスタＳＴ１は、ドレインがビット線ＢＬ０〜ＢＬ４３１３のいずれかに接続され、ゲートがセレクトゲート線ＳＧＤに共通接続されている。また選択トランジスタＳＴ２は、ソースがソース線ＳＬに共通接続され、ゲートがセレクトゲート線ＳＧＳに共通接続されている。
【００１４】
メモリセルトランジスタＭＴの各々は、半導体基板上にゲート絶縁膜を介在して形成された積層ゲートを備えたＭＯＳトランジスタである。積層ゲートは、ゲート絶縁膜上に形成された電荷蓄積層（例えば浮遊ゲート）と、電荷蓄積層上にゲート間絶縁膜を介在して形成された制御ゲートとを含んでいる。各々のＮＡＮＤストリングにおいて、３２個のメモリセルトランジスタＭＴは、選択トランジスタＳＴ１のソースと選択トランジスタＳＴ２のドレインとの間に、各々の電流経路が直列接続されるように配置されている。そして、最もソース側に位置するメモリセルトランジスタＭＴから順に、制御ゲートがワード線ＷＬ０〜ＷＬ３１にそれぞれ接続されている。従って、ワード線ＷＬ３１に接続されたメモリセルトランジスタＭＴのドレインは選択トランジスタＳＴ１のソースに接続され、ワード線ＷＬ０に接続されたメモリセルトランジスタＭＴのソースは選択トランジスタＳＴ２のドレインに接続されている。
【００１５】
上記構成のＮＡＮＤストリングが、レギュラーセルアレイ１５内には４０９６個配置され、ＥＣＣセルアレイ１６内には２１８個配置される。そして、４０９６本のビット線ＢＬ０〜ＢＬ４０９５がレギュラーセルアレイ１５内のＮＡＮＤストリングの各々に接続され、２１８本のビット線ＢＬ４０９６〜ＢＬ４３１３が、ＥＣＣセルアレイ１６内のＮＡＮＤストリングの各々に接続される。従って、１つのレギュラーセルアレイ１５はワード線１本当たり４ｋビットのメモリ容量を有し、１つのＥＣＣセルアレイ１６はワード線１本あたり２１８ビットのメモリ容量を有する。
【００１６】
１つのメモリブロック１４内には、上記構成のレギュラーセルアレイ１５とＥＣＣセルアレイ１６との組み合わせが、８個配置される。従って、１つのメモリブロック１４におけるワード線１本当たりのレギュラーセルアレイ１５のメモリ容量は（４ｋビット×８個）＝４ｋバイトであり、ＥＣＣセルアレイ１６のメモリ容量は（２１８ビット×８個）＝２１８バイトである。そして、各メモリブロック１４において、同一のワード線に接続されたメモリセルトランジスタＭＴに対して、一括してデータが書き込まれる。すなわち、１ページの容量は（４ｋバイト＋２１８バイト）となる。また、各メモリブロック１４内のメモリセルトランジスタＭＴは、一括してデータが消去される。つまり消去サイズは、ワード線の本数が３２本であるから、（（４ｋバイト＋２１８バイト）×３２）＝（１２８ｋバイト＋６９７６バイト）である。
【００１７】
次に、図１に戻ってメモリコントローラ２０の構成について説明する。図示するようにメモリコントローラ２０は、エンコーダ２１、累積値判定器２２、エンコーダ２３、及び読み出し用デコーダ２４を備えている。
【００１８】
図３はエンコーダ２１の構成の一例を示すブロック図である。図示するようにエンコーダ２１は、反転器３０及びセレクタ３１を備えている。エンコーダ２１は、外部からレギュラーセルアレイ１５の１ページ分の入力データ（４ｋバイト）を受信する。反転器３０は、入力データの各ビットを反転させる。そして、入力データ（非反転値）と、反転器３０で得られた反転値とが、累積値判定器２２へ出力される。またセレクタ３１は、累積値判定器２２から与えられるエンコードＩＤに従って、非反転値と反転値とのいずれかを選択して、選択したいずれか一方を、書き込みデータとしてページバッファ１２へ出力する。書き込みデータは、メモリセルアレイ１１におけるレギュラーセルアレイ１５内に書き込まれる。なおエンコードＩＤについては後述する。
【００１９】
図１に戻ってメモリコントローラ２０の説明を続ける。累積値判定器２２は、エンコーダ２１から受信した非反転値と反転値とのうち、メモリセルアレイ１１へ書き込むべきいずれか一方を選択する。そしてその選択情報を、エンコードＩＤとしてエンコーダ２１及びＥＣＣエンコーダ２３へ出力する。この選択動作は、累積値に基づいて行われる。累積値とは、あるメモリブロック１４におけるメモリセルトランジスタＭＴに対する書き込み済みデータを、ビット線毎に累積した値のことである。そして、累積値の各桁が、各ビット線における“１”データ（電荷が浮遊ゲートに注入されていない状態）の数、すなわち、個々のＮＡＮＤストリングにおいて“１”データが書き込まれたメモリセルトランジスタＭＴの数を示す。従って、レギュラーセルアレイ１５のビット線本数が（４０９６×８）本であると、累積値の桁数も（４０９６×８）桁となる。累積値判定部２２は、この累積値を保持する。そして、非反転値と反転値のうち、非反転値と反転値の各ビットと累積値の各桁との加算結果において、加算結果の各桁の値がより平均化されるいずれか一方を選択する。
【００２０】
ＥＣＣエンコーダ２３は、エンコーダ２１から与えられる書き込みデータとエンコードＩＤに基づいてＥＣＣデータを生成する。そしてＥＣＣデータと、累積値判定器２２から与えられるエンコードＩＤとを、ページバッファ１２へ出力する。ＥＣＣデータ及びエンコードＩＤは、ＥＣＣセルアレイ１６内に書き込まれる。特にメモリブロック１４においてビット線ＢＬ４３１３に接続されたメモリセルトランジスタＭＴは、エンコードＩＤ保持用として用いられる。
【００２１】
読み出し用デコーダ２４は、センスアンプ１３でセンス・増幅された読み出しデータを、エンコードＩＤを元にして解読する。すなわち、読み出したエンコードＩＤが、非反転値を選択した旨の情報であれば、読み出しデータをそのまま出力する。他方、反転値を選択した旨の情報であれば、読み出しデータの各ビットを反転させて、これを解読データとして出力する。
【００２２】
次に、上記構成のメモリシステムにおける書き込み動作について、エンコーダ２１及び累積値判定器２２の動作に着目して説明する。まず図４を用いてエンコーダ２１の動作について説明する。図４はエンコーダ２１の動作の流れを示すフローチャートである。
【００２３】
図示するようにエンコーダ２１は、まず外部からレギュラーセルアレイ１５の１ページ分の入力データを受け付ける（ステップＳ１０）。そしてエンコーダ２１は、受け付けた入力データをそのまま非反転値として累積値判定器２２へ通知する（ステップＳ１１）。同時にエンコーダ２１は、入力データを反転器３０で反転させ、反転値を累積値判定器２２へ通知する（ステップＳ１２）。その後、エンコーダ２１は累積値判定器２２からエンコードＩＤを受信する（ステップＳ１３）。そして、エンコーダ２１のセレクタ３１が、エンコードＩＤに従って非反転値と反転値のいずれか一方を、書き込みデータとしてＮＡＮＤ型フラッシュメモリ１０へ出力する（ステップＳ１４）。エンコーダ２１に対しては、複数の入力データが連続して入力されるが、入力データが最終データである場合には（ステップＳ１５、ＹＥＳ）、処理を終了し、最終データでなければ（ステップＳ１５、ＮＯ）、ステップＳ１０に戻る。
【００２４】
次に、図５を用いて累積値判定器２２の動作について説明する。図５は累積値判定器２２の動作の流れを示すフローチャートである。
【００２５】
図示するように、累積値判定器２２は、まずエンコーダ２１から非反転値を受け取り（ステップＳ２０）、また反転値を受け取る（ステップＳ２１）。そして、受け取った非反転値及び反転値が当該メモリブロック１４に対する最初の入力データである場合には（ステップＳ２２、ＹＥＳ）、非反転値と反転値とのうち、値が“１”であるビットの多い方を選択する。“１”であるビットの数が同数の場合には反転値を選択する。更にこの選択情報は、エンコードＩＤとしてエンコーダ２１及びＥＣＣエンコーダ２３へ出力される（ステップＳ２３）。その結果、エンコーダ２１から出力された書き込みデータがレギュラーセルアレイ１５内に書き込まれ、書き込みデータに基づいて生成されたＥＣＣデータ及びエンコードＩＤがＥＣＣセルアレイ１６内に書き込まれる。また累積値判定器２２は、ステップＳ２３で選択した非反転値と反転値とのいずれか一方を、累積値として保持する（ステップＳ２４）。そして、ステップＳ２３で選択されてメモリセルＭＣへ書き込まれたデータが、当該メモリセルブロック１４に対する最終の書き込みデータであれば（ステップＳ２５、ＹＥＳ）、処理は終了する。そうでなければ（ステップＳ２５、ＮＯ）、ステップＳ２０へ戻って処理を繰り返す。
【００２６】
上記ステップＳ２２において、最初の入力でない場合には（ステップＳ２２、ＮＯ）、累積値判定器２２は次に非反転値の全ビットが“０”であるか否かを判定する。全ビットが“０”である場合には（ステップＳ２６、ＹＥＳ）、累積値判定器２２は反転値を選択し、その選択情報をエンコードＩＤとしてエンコーダ２１及びＥＣＣエンコーダ２３へ出力する（ステップＳ２７）。従って、この場合にはレギュラーセルアレイ１５には反転値が書き込まれる。そして累積値判定器２２は、非反転値と反転値とのいずれか選択した方の各ビットと、自身が保持する累積値の各桁との加算結果を、新たな累積値として保持する（ステップＳ２８）。すなわち、ステップＳ２７の後、累積値判定器２２にそれまで保持されていた累積値は、反転値が更に加算された値に更新される。そしてステップＳ２５に進む。
【００２７】
上記ステップＳ２６において、全ビットが“０”でない場合、つまりいずれかのビットが“１”である場合には（ステップＳ２６、ＮＯ）、累積値判定器２２は次に非反転値の全ビットが“１”であるか否かを判定する。全ビットが“１”である場合には（ステップＳ２９、ＹＥＳ）、累積値判定器２２は非反転値を選択し、その選択情報をエンコードＩＤとしてエンコーダ２１及びＥＣＣエンコーダ２３へ出力する（ステップＳ３０）。従って、この場合にはレギュラーセルアレイ１５には非反転値が書き込まれる。その後、ステップＳ２８の処理に進む。すなわち、ステップＳ３０の後、累積値判定器２２にそれまで保持されていた累積値は、非反転値が更に加算された値に更新される。そしてステップＳ２５に進む。
【００２８】
上記ステップＳ２９において、全ビットが“１”でない場合、つまりいずれかのビットが“０”である場合には（ステップＳ２９、ＮＯ）、ステップＳ３１の処理に進む。ステップＳ３１において累積値判定器２２は、自身が保持する累積値の各桁と、ステップＳ２０、Ｓ２１で受け取った非反転値及び反転値の各ビットとを加算する。そして、非反転値及び反転値のそれぞれの加算結果における各桁の最大値と最小値との差を算出する（ステップＳ３１）。引き続き累積値判定器２２は、ステップＳ３１で得られた非反転値及び反転値のそれぞれの加算結果について得られた差の大小関係を判定する（ステップＳ３２）。そして、非反転値についての加算結果の最大値と最小値との差が、反転値についての加算結果の最大値と最小値との差よりも小さければ（ステップＳ３３、ＮＯ）、累積値判定器２２は非反転値を選択する。そして非反転値を選択した旨の情報を、エンコードＩＤとしてエンコーダ２１及びＥＣＣエンコーダ２３へ出力する（ステップＳ３４）。すなわち、レギュラーセルアレイ１５には非反転値が書き込まれる。
【００２９】
逆にステップＳ３２の結果、非反転値についての加算結果の最大値と最小値との差が、反転値についての加算結果の最大値と最小値との差以上であれば（ステップＳ３３、ＹＥＳ）、累積値判定器２２は反転値を選択する。そして反転値を選択した旨の情報を、エンコードＩＤとしてエンコーダ２１及びＥＣＣエンコーダ２３へ出力する（ステップＳ３５）。すなわち、レギュラーセルアレイ１５には反転値が書き込まれる。  
ステップＳ３４、Ｓ３５の後、累積値判定器２２はステップ２８の処理に進む。
【００３０】
次に、上記した図４、図５の処理について、具体例を用いて以下説明する。図６は、累積値判定器２２において用いられる各種信号を示すダイアグラムである。図６では、一例として１ページのサイズが４ビットである場合について示している。図６において、「入力番号」は、あるメモリブロック１４に書き込まれる複数のページデータの入力順序を示す。「入力値」は、各入力番号において外部からエンコーダ２１へ入力される入力データのことである。「累積値（加算結果）」は、入力番号１については累積値を示し、入力番号２以降では、ステップＳ３１で得られた加算結果を示す。「判定」は、ステップＳ２３、Ｓ２７、Ｓ３０、Ｓ３４、Ｓ３５において、非反転値と反転値とのいずれを選択したかを示し、○印が選択されたことを示し、×印が非選択であることを示す。エンコードＩＤは、非反転値が選択された際に“０”となり、反転値が選択された際に“１”となる。なお、入力データ、非反転値、及び反転値は２進数で示し、累積値は１０進数で示している。
【００３１】
まず初めに、エンコーダに最初の入力データ“１０００”が入力される。この場合の非反転値及び反転値はそれぞれ“１０００”、“０１１１”である。メモリブロック１４に書き込まれる最初のデータであるから（ステップＳ２２、ＹＥＳ）、非反転値と反転値とのうち、値が“１”であるビットの多い方、すなわち反転値“０１１１”を累積値判定器２２は選択する（ステップＳ２３）。そして累積値は“０１１１”となり、エンコードＩＤとして“１”がエンコーダ２１及びＥＣＣエンコーダ２３に通知される（ステップＳ２４）。
【００３２】
次に、エンコーダに入力データ“１１００”が入力される。この場合の非反転値及び反転値はそれぞれ“１１００”、“００１１”である。すると、最初のデータで無く（ステップＳ２２、ＮＯ）、非反転値の全ビットが“０”では無く（ステップＳ２６、ＮＯ）、更に非反転値の全ビットが“１”でも無い（ステップＳ２９、ＮＯ）ので、累積値判定器２２は、累積値の各桁と、非反転値及び反転値の各ビットとを加算する（ステップＳ３１）。すると、この時点での累積値は“０１１１”であるので、累積値と非反転値“１１００”との加算結果は、“１２１１”となる。また累積値と反転値“００１１”との加算結果は、“０１２２”となる。すると、累積値と非反転値との加算結果における各桁の最大値は“２”であり、最小値は“１”であるから、最大値と最小値との差は“１”である。また、累積値と反転値との加算結果における各桁の最大値は“２”であり、最小値は“０”であるから、最大値と最小値との差は“２”である。従って、非反転値についての加算結果における最大値と最小値との差“１”は、反転値についての加算結果における最大値と最小値との差“２”よりも小さい（ステップＳ３３、ＮＯ）。従って、累積値判定器２２は非反転値“１１００”を選択し、エンコードＩＤを“０”とする。そして累積値判定器２２は、反転値についての加算結果“１２１１”を、新たな累積値として保持する（ステップＳ２８）。なお図６において、入力番号“２”以降は斜線を付した加算結果が新たな累積値となる。
【００３３】
以下、入力番号“３”、“４”については入力番号“２”の場合と同様の処理が行われる。  
次に、入力番号“５”について説明する。５番目の入力データは“００００”である。この場合の非反転値及び反転値はそれぞれ“００００”、“１１１１”である。すると、最初のデータで無く（ステップＳ２２、ＮＯ）、非反転値の全ビットが“０”であるので（ステップＳ２６、ＹＥＳ）、累積値判定器２２は反転値“１１１１”を選択する（ステップＳ２７）。すると、この時点での累積値は“２３２２”であるので、累積値“２３２２”と反転値“１１１１”との加算結果“３４３３”が新たな累積値となる（ステップＳ２８）。
【００３４】
以下、入力番号“６”、“７”については入力番号“２”の場合と同様の処理が行われる。  
次に入力番号“８”について説明する。８番目の入力データは“００１１”である。この場合の非反転値及び反転値はそれぞれ“００１１”、“１１００”である。すると累積値判定器２２は、累積値の各桁と、非反転値及び反転値の各ビットとを加算する（ステップＳ３１）。この時点での累積値は“４５５４”であるので、累積値と非反転値“００１１”との加算結果は、“４５６５”となる。また累積値と反転値“１１００”との加算結果は、“５６５４”となる。すると、累積値と非反転値との加算結果における各ビットの最大値は“６”であり、最小値は“５”であるから、最大値と最小値との差は“１”である。また、累積値と反転値との加算結果における各桁の最大値は“６”であり、最小値は“５”であるから、最大値と最小値との差は“１”である。従って、非反転値についての加算結果における最大値と最小値との差“１”は、反転値についての加算結果における最大値と最小値との差“１”に等しい（ステップＳ３３、ＹＥＳ）。従って、累積値判定器２２は反転値“１１００”を選択し、エンコードＩＤを“１”とする。そして累積値判定器２２は、反転値についての加算結果“５６５４”を、新たな累積値として保持する（ステップＳ２８）。
【００３５】
以下、入力番号“９”については入力番号“８”の場合と同様の処理が行われ、入力番号“１０”、“１１”については入力番号“２”の場合と同様の処理が行われる。
【００３６】
上記のように、この発明の第１の実施形態に係るメモリシステムであると、下記（１）、（２）の効果が得られる。  
（１）半導体記憶装置の動作信頼性を向上出来る（その１）。  
本実施形態に係る構成であると、メモリコントローラ２０は累積値判定器２２を備えており、ビット線毎に書き込み済みデータを累積して保持している。そして、この累積値に従って、入力データをそのまま書き込むか、または反転して書き込むかを決定している。従って、ＮＡＮＤ型フラッシュメモリの動作信頼性を向上出来る。本効果について、以下説明する。
【００３７】
例えば背景技術で説明した特許文献１記載のＮＡＮＤ型フラッシュメモリであると、メモリセルアレイ全体としてのチャージ量は平均化される。しかし、チャージ量が平均化されるのはメモリセルアレイ全体としてにすぎず、ビット線間のチャージ量のバラツキは考慮されていない。従って、場合によってはいずれかのビット線にチャージが集中することも起こりうる。チャージがあるビット線に集中すると、そのビット線ではデータの誤りが発生し易い。すると、ＥＣＣ機能を搭載したＮＡＮＤ型フラッシュメモリでは、最も誤りの発生し易いビット線で救済出来るようにＥＣＣを行わなければならないから、チャージがあるビット線に集中するような場合には、ＥＣＣ効率が低下するという問題があった。
【００３８】
しかし、本実施形態に係る構成では、過去にメモリセルトランジスタＭＴに書き込んだデータを、ビット線毎に累積している。そして、新たに書き込むべきデータの非反転値及び反転値と累積値とを加算し、その加算結果における各桁の最大値と最小値との差が小さくなるものを選んでいる。つまり、加算結果の各桁は、各ビット線におけるトータルの“１”データの数を示している。従って、加算結果の各桁の最大値と最小値が大きいほど、ビット線間においてチャージのばらつきが大きいことを示している。そこで、各桁の最大値と最小値との差がより小さくなるように、つまりビット線間におけるチャージのばらつきが小さくなるように、非反転値と反転値とのいずれかを選択して、メモリセルトランジスタＭＴへ書き込んでいる。
【００３９】
従って、ビット線間において、“１”データを保持するメモリセルトランジスタＭＴの数が平均化される。つまり、あるビット線にチャージが集中することを防止出来る。そのため、データの誤りの発生確率がビット線間で均等化され、ＥＣＣの効率を向上出来る。これにより、ＮＡＮＤ型フラッシュメモリ１０の動作信頼性を向上出来る。
【００４０】
（２）半導体記憶装置の動作信頼性を向上出来る（その２）。  
近年のＮＡＮＤ型フラッシュメモリの大容量化の要請はますます増加している。その反面、書き込み及び読み出しデータの信頼性は徐々に悪くなる傾向にある。その理由として、例えばＮＡＮＤ型フラッシュメモリでは、トンネル電流を利用したデータ記録方式であることから、ゲート絶縁膜（トンネル酸化膜）の膜厚を一定値以下に薄くする事が出来ない。にもかかわらず、メモリセルトランジスタＭＴのゲート長、ゲート幅など横方向のサイズを縮小してきたため、いわゆるＧＩＤＬ現象によるデータリテンション（記録データ消失）が顕著になってきたことが挙げられる。
【００４１】
また、ビット当たりの面積を削減するために、ＮＡＮＤストリング内のメモリセルトランジスタ数が大きくなってきている。その結果、ＮＡＮＤストリングに流せる電流が小さくなり、データを読み出してセンスする際に必要な電圧変動や電流値がますます小さくなることも挙げられる。
【００４２】
更に、ＮＡＮＤストリング内のメモリセルトランジスタ数が大きくなることは、リードディスターブ（Read Disturb：以下ＲＤと略記する）に対する耐性や、プログラムディスターブ（以下ＰＤと略記する）に対する耐性を悪化させる傾向がある。これらＲＤおよびＰＤの悪化は、ＮＡＮＤストリング内で直列に連続するメモリセルトランジスタがオンする場合において、その連続するメモリセルトランジスタ数が大きければ大きいほど顕著となる傾向がある。これは次のような理由による。
【００４３】
すなわち、各メモリセルトランジスタＭＴには、例えばメモリセルトランジスタのソースまたはドレイン領域と、メモリセルトランジスタが形成されるウェル領域との間のｐｎ接合によって形成された寄生容量が存在する。すると、カラム方向で連続する複数のメモリセルトランジスタＭＴがオン状態となると、ＮＡＮＤストリング内には非常に大きな寄生容量が発生する。つまり、オン状態とされたメモリセルトランジスタの寄生容量が並列接続されて、巨大な寄生容量が形成される。そしてこの寄生容量が、ＮＡＮＤ型フラッシュメモリに対して様々な悪影響を及ぼす。例えば、あるワード線ＷＬに読み出し電圧が印加された時に、寄生容量から供給された大量の電荷（電流）が、ワード線ＷＬのゲート電圧で加速されてホットエレクトロンを発生する。そして、発生されたホットエレクトロンが、ワード線ＷＬに接続されたメモリセルトランジスタのトンネル酸化膜を超えて、このメモリセルトランジスタの記録データを破壊する。これが、いわゆるＧＩＤＬ現象である。更に、連続した多くのメモリセルトランジスタがオンとなる場合には、ＲＤのみならずＰＤも起こりやすいことが判明している。
【００４４】
しかしながら、本実施形態に係る構成であると、入力データを非反転または反転させてデータを書き込んでいる。つまり、入力データにおいて、あるビット線に“０”データが連続するような場合であっても、累積値判定器２２の判定結果によっては、その反転値である“１”データが書き込まれることとなり、“０”データが同一カラム上に連続することを防止出来る。従って、ＮＡＮＤストリング内において連続した多くのメモリセルトランジスタが同時にオンとなることを防止し出来る。その結果、上記したＲＤやＰＤの問題を緩和し、ＮＡＮＤ型フラッシュメモリの動作信頼性を向上出来る。
【００４５】
なお、上記第１の実施形態では、ステップＳ３１〜Ｓ３３において、累積値と非反転値及び反転値との加算結果における、各桁の最大値と最小値との差の大小関係を判定していた。しかし、この判定処理は、必ずしも加算結果の各桁の最大と最小値をもとにして行う必要はなく、例えば標準偏差を用いて行っても良い。図７は、このような場合における累積値判定器２２の処理の流れを示すフローチャートである。
【００４６】
図示するように、ステップＳ２９において「非反転値の全ビットが“１”」なる条件を満たさない場合（ステップＳ２９、ＮＯ）、累積値判定器２２は、累積値の各桁と、非反転値及び反転値の各ビットを加算する。次に、非反転値及び反転値についての加算結果の各々について、標準偏差を算出する（ステップＳ４０）。次に、非反転値及び反転値についての加算結果の標準偏差の大小関係を判定する（ステップＳ４１）。そして、累積値と非反転値との加算結果の標準偏差が、累積値と反転値との加算結果の標準偏差よりも小さい場合（ステップＳ４２、ＮＯ）には、ステップＳ３４に進む。逆に累積値と非反転値との加算結果の標準偏差が、累積値と反転値との加算結果の標準偏差以上である場合（ステップＳ４２、ＹＥＳ）には、ステップＳ３５に進む。本方法によっても、上記説明した（１）及び（２）の効果が得られる。
【００４７】
［第２の実施形態］  
次に、この発明の第２の実施形態に係る半導体装置について説明する。本実施形態は、上記第１の実施形態において、累積値の全ての桁が“１”以上である場合には、各桁の値をそれぞれ“１”減ずるものである。メモリシステム１の構成や、エンコーダ２１の動作等は上記第１の実施形態と同様であるので、以下では第１の実施形態と異なる点についてのみ説明する。
【００４８】
図８は、本実施形態に係る累積値判定器２２の動作を示すフローチャートである。図示するように、第１の実施形態で説明した図５と異なる点は、ステップＳ２４、Ｓ２８の後に、ステップＳ５０の処理を行う点にある。ステップＳ５０では、ステップＳ２４、Ｓ２８で得られた累積値の全ての桁が“１”以上であるか否かを判定し、全ての桁が“１”以上である場合には、全ての桁のそれぞれの値から“１”を減算し、これを新たな累積値として累積値判定器２２は保持する。
【００４９】
次に、上記図８の処理について、具体例を用いて以下説明する。図９は、累積値判定器２２において用いられる各種信号を示すダイアグラムであり、図６と同様の情報を示している。
【００５０】
図示するように、入力番号“２”において、累積値“０１１１”と非反転値“１１００”との加算結果は“１２１１”であり、反転値“００１１”との加算結果は“０１２２”である。すると、ステップＳ２８において、累積値判定器２２は加算結果“１２１１”を累積値として保持する。すると、累積値“１２１１”は全ての桁が“１”以上であるから、累積値判定器２２はステップＳ５０において、累積値“１２１１”の各桁につき“１”を減じた“０１００”を新たな累積値として保持する。
【００５１】
次の入力番号“３”においては、ステップＳ５０で得られた累積値“０１００”と、非反転値“０１１０”及び反転値“１００１”との加算が行われる。すると、非反転値についての加算結果は“０２１０”であり、反転値についての加算結果は“１１０１”となる。従って、累積値判定器２２は加算結果“１１０１”を累積値として保持する。この場合には、累積値の２桁目が“０”であるから、ステップＳ５０において各ビットから“１”を減ずることなく、加算結果“１１０１”をそのまま累積値として保持する。  
以下、同様である。
【００５２】
以上のように、この発明の第２の実施形態に係るメモリシステム１であると、上記第１の実施形態で説明した（１）、（２）の効果に加えて、下記（３）の効果が得られる。  
（３）メモリコントローラ２０のサイズを削減出来る（その１）。  
累積値が単純に過去に書き込まれたデータを累積したものである場合、その最大値は、当該累積値が計数しているＮＡＮＤストリング内のワード線の本数に等しくなる。例えばワード線が３２本ある場合には、累積値の各桁の値は最大で“３２”となる。すると、累積値の各桁は２進数で５ビットのデータとなり、累積値の各桁あたり、５段のレジスタが必要となる。
【００５３】
これに対して本実施形態に係る構成であると、累積値の各桁の値が“１”を超えた場合には、全ての桁から“１”を減じている。これにより、累積値の各桁が、取り得る最大値（ワード線本数が３２本の場合には“３２”）となる可能性が低減される。従って、累積値の各桁あたりのレジスタ数を削減し、メモリコントローラ２０のサイズを削減出来る。
【００５４】
また、累積値の絶対値自体には意味は無く、累積値のビット間の値の差が分かれば十分である。なぜなら、累積値の各桁の値の差が、ビット線間のチャージの差を意味しているからである。従って、本実施形態のように累積値の各桁の値を“１”減じたとしても、ビット線間でチャージを平均化することに何らの影響は与え無い。  
なお、本実施形態においても、ステップＳ３１〜Ｓ３３の工程を、図７を用いて説明したステップＳ４０〜Ｓ４２に置き換えることが可能である。
【００５５】
［第３の実施形態］  
次に、この発明の第３の実施形態に係る半導体装置について説明する。本実施形態は、上記第２の実施形態において、加算結果のいずれかの桁においてオーバーフロー（桁あふれ）が生じる場合には、その桁の値を、その桁で計数可能な最大値の“２”の商に置き換え、その他の各桁は保持する値の“２”の商に置き換えるものである。メモリシステム１の構成や、エンコーダ２１の動作等は上記第１、第２の実施形態と同様であるので、以下では第１、第２の実施形態と異なる点についてのみ説明する。
【００５６】
図１０は、本実施形態に係る累積値判定器２２の動作を示すフローチャートである。図示するように、第２の実施形態で説明した図８と異なる点は、ステップＳ３１をステップＳ６０〜Ｓ６３に置き換えた点にある。すなわち、ステップＳ２９において、「非反転値の全ビットが“１”」なる条件を満たさない場合（ステップＳ２９、ＮＯ）、累積値判定部２２は累積値の各桁と、非反転値及び反転値の各ビットとの加算を行う（ステップＳ６０）。そして、ステップＳ６０で得られた加算結果のいずれかの桁にオーバーフローが生じたか否かを判定する。オーバーフローが生じない場合には（ステップＳ６１、ＮＯ）、ステップＳ３２の処理に進む。すなわち、この場合の処理は上記第１、第２の実施形態と同様である。
【００５７】
ステップＳ６１においてオーバーフローが生じる場合には（ステップＳ６１、ＹＥＳ）、累積値判定部２２は、オーバーフローを起こした桁を、当該桁の取り得る最大値とし、更にすべての桁を１ビット右シフトさせた値を、新たな加算結果とする（ステップＳ６２）。例えば、累積値のある桁の最大値が“７”であったとする。この桁の値が例えば“８”となってオーバーフローを起こす場合には、この桁の値をまず最大値の“７”（２進数の“１１１”）とする。その上で、１ビット右シフトを行う。つまり、“１１１”→“０１１”（１０進数で“３”）とする。この結果得られた“３”を、当該桁についての加算結果とする。言い換えれば、オーバーフローを起こす桁を、当該桁の取り得る最大値“７”を、“２”で割った商“３”に置き換える。なお割った余りは切り捨てる。他の各桁についても保持する値に対して同様の処理を行う。
【００５８】
そして、ステップＳ６２で得られた加算結果を用いて、非反転値及び反転値についての加算結果における、各桁の最大値と最小値との差を算出して（ステップＳ６３）、ステップＳ３２に進む。以降の処理は、上記第１、第２の実施形態と同様である。
【００５９】
以上のように、この発明の第３の実施形態に係るメモリシステム１であると、上記第１の実施形態で説明した（１）、（２）の効果、及び第２の実施形態で説明した（３）の効果に加えて、下記（４）の効果が得られる。  
（４）メモリコントローラ２０のサイズを削減出来る（その２）。  
図１１は、累積値判定部２２において累積値を保持する累積値保持部のブロック図である。なお図１１では、累積値が４桁、つまりビット線本数が４本である場合について示している。
【００６０】
図示するように累積値保持部は、４つの保持部４０〜４３を備えている。保持部４０〜４３の各々は、４桁の累積値の各桁の値を保持する。そして保持部４０〜４３の各々は、２つのレジスタ４４、４５を備えており、各レジスタ４４、４５が２進数１ビットのデータを保持する。図１１では、累積値として“３２１０”を保持している様子を示している。すなわち、保持部４０のレジスタ４４、４５はそれぞれ“０”、“０”を保持し、保持部４１のレジスタ４４、４５はそれぞれ“０”、“１”を保持し、保持部４２のレジスタ４４、４５はそれぞれ“１”、“０”を保持し、保持部４３のレジスタ４４、４５はそれぞれ“１”、“１”を保持している。
【００６１】
この状態において、更に“１０００”を加算する場合を考える。保持部４３には“１”が加算されるため、本来であれば加算結果は“３”＋“１”＝“４”となるべきであるが、保持部４３は最大で“３”までしか計数できない。つまりオーバーフローを起こしてしまい、正確な加算が困難となる。
【００６２】
しかしながら本実施形態であると、オーバーフローを起こす場合のルールを予め決めている。具体的には、当該保持部４３が保持可能な最大値の“２”の商を、オーバーフローを起こした際に保持すべき値とする。従って図１１の場合には、“３”を“２”で割った商である“１”を保持する。換言すれば、保持部４３に含まれる全レジスタ４４、４５の値を“１”として、この値を１ビット右シフトさせる。保持部４０、４１、４２については保持する値を１ビット右シフトさせ、それぞれ“０”、“０”、“１”となり、新たな累積値として、“１１００”を保持する。
【００６３】
これにより、オーバーフローを起こすような場合であっても、正確な処理が可能となる。本処理は、特に第２の実施形態と組み合わせる場合に顕著な効果となる。つまり、第２の実施形態では、累積値の各桁から“１”を減ずることで、累積値を保持するレジスタ数を削減する。しかしこの場合、累積値の各桁が達しうる最大値は経験的に求めることになる。従って、レジスタ数を減らしすぎると累積値の各桁においてオーバーフローが発生するおそれがある。しかしこのような場合であっても、本実施形態のようにオーバーフロー時の対策を施すことで、レジスタ数を効果的に減らしつつ、正確な処理が可能となる。
【００６４】
また、ＮＡＮＤ型フラッシュメモリ１０においては、データはソース側のセレクトゲート線ＳＧＳに近いメモリセルトランジスタＭＴ（ワード線ＷＬ０に接続されたメモリセルトランジスタＭＴ）から順にデータが書き込まれる。従って、セレクトゲート線ＳＧＳに近いメモリセルトランジスタＭＴほど、ビット線間のチャージ量をよりケアすべきである。この点、累積値のオーバーフローは書き込みの遅いメモリセルトランジスタＭＴ、つまりドレイン側のセレクトゲート線ＳＧＤに近いメモリセルトランジスタＭＴへの書き込み時に生じ、ソース側のセレクトゲート線ＳＧＳに近いメモリセルトランジスタＭＴへの書き込み時には生じ難い。よって、オーバーフローが生じることで、累積値がビット線間のチャージ量の差を正確に表さなくなったとしても、その時点では、セレクトゲート線ＳＧＳに近いメモリセルトランジスタＭＴへの書き込みは終了しているはずなので、実際上、問題は発生しない。
【００６５】
なお、本実施形態においてもステップＳ６３、Ｓ３２の処理は、第１の実施形態で説明した図７のように標準偏差を用いて行っても良い。またステップＳ５０の処理は必ずしも必要では無く、省略しても良い。
【００６６】
［第４の実施形態］  
次に、この発明の第４の実施形態に係る半導体装置について説明する。本実施形態は、上記第１乃至第３の実施形態においてエンコーダ２１を、疑似乱数発生器を用いて形成するものである。以下では、上記第１乃至第３の実施形態と異なる点についてのみ説明する。図１２は、本実施形態に係るメモリコントローラ２０の備えるエンコーダ２１の構成を示すブロック図である。
【００６７】
図示するようにエンコーダ２１は、第１疑似乱数発生器３２、第２疑似乱数発生器３３、ＸＯＲゲート３４、３５、及びセレクタ３６を備えている。  
第１疑似乱数発生器３２は、書き込みデータのアドレスの上位ビット（以下、上位アドレスと呼ぶ）を基にして疑似乱数を発生する。つまり、上位アドレスをスクランブル・シードとして疑似乱数を発生する。第２疑似乱数発生器３３は、書き込みデータのアドレスの下位ビット（以下、下位アドレスと呼ぶ）を基にして疑似乱数を発生する。つまり、下位アドレスをスクランブル・シードとして疑似乱数を発生する。第１、第２疑似乱数発生器３２、３３は、共に同様の構成であって、スクランブル・シードが同じであれば、共に同じ疑似乱数を発生する。
【００６８】
ＸＯＲゲート３４は、第１疑似乱数発生器３２で発生された疑似乱数と、入力データとの排他的論理和演算を行い、演算結果を第１スクランブルデータとして出力する。ＸＯＲゲート３５は、第２疑似乱数発生器３３で発生された疑似乱数と、入力データとの排他的論理和演算を行い、演算結果を第２スクランブルデータとして出力する。
【００６９】
セレクタ３６は、エンコードＩＤに従って、第１、第２スクランブルデータのいずれか一方を書き込みデータとして出力する。より具体的には、エンコードＩＤが“０”の場合には第１スクランブルデータを選択し、エンコードＩＤが“１”の場合には第２スクランブルデータを選択する。
【００７０】
図１３は、読み出し用デコーダ２４の構成を示すブロック図である。図示するように読み出し用デコーダ２４は、セレクタ６０、疑似乱数発生器６１、及びＸＯＲゲート６２を備えている。
【００７１】
セレクタ６０は、エンコードＩＤに従って、上位アドレスと下位アドレスとのいずれか一方を選択する。より具体的には、エンコードＩＤが“０”の場合には上位アドレスを選択し、エンコードＩＤが“１”の場合には下位アドレスを選択する。疑似乱数発生器６１は、エンコーダ２１における第１、第２疑似乱数発生器３２、３３と同様の構成を有しており、セレクタ６０で選択された上位アドレスと下位アドレスとのいずれか一方をスクランブル・シード（Scramble Seed）として疑似乱数を発生する。ＸＯＲゲート６２は、センスアンプ１３でセンス・増幅された読み出しデータと、疑似乱数発生器６１で発生された疑似乱数との排他的論理和演算を行う。そしてＸＯＲゲート６２における演算結果が、解読されたデータとなる。
【００７２】
本実施形態に係るエンコーダ２１の動作は、上記第１の実施形態において説明した図４のフローチャートにおいて、非反転値と反転値とを、それぞれ第１、第２スクランブルデータに置き換えたものである。
【００７３】
また、本実施形態に係る累積値判定器２２の動作は、上記第１乃至第３の実施形態で説明した図５、図７、図８、図１０のフローチャートにおいて、非反転値と反転値とを、それぞれ第１、第２スクランブルデータに置き換えたものである。
【００７４】
すなわち、入力データは第１、第２疑似乱数発生器３２、３３によって、それぞれ互いに異なる規則に従ってスクランブルされる。このようにして生成された第１、第２スクランブルデータが、書き込みデータとしてＮＡＮＤ型フラッシュメモリ１０に書き込まれる。
【００７５】
累積値判定器２２は、ＮＡＮＤ型フラッシュメモリ１０に書き込まれた第１、第２スクランブルデータを累積加算する。この累積値の各桁は、ＮＡＮＤ型フラッシュメモリ１０における各ビット線に対応する。そして累積値判定器２２は、累積値の各桁と第１スクランブルデータの各ビットとを加算し、また累積値の各桁と第２スクランブルデータの各ビットとを加算する。更に、第１、第２スクランブルデータのうち、加算結果の各桁の最大値と最小値との差、または標準偏差がより小さいいずれか一方を選択する。
【００７６】
以上のように、この発明の第４の実施形態に係るメモリシステム１であると、上記第１乃至第３の実施形態で説明した（１）乃至（４）の効果に加えて、下記（５）の効果が得られる。  
（５）半導体記憶装置の動作信頼性を向上出来る（その３）。  
本実施形態に係るメモリシステム１であると、エンコーダ２１は、第１、第２疑似乱数発生器３２、３３とＸＯＲゲート３４、３５を含むリニアフィードバックシフトレジスタ（Linear Feedback Shift Register）を備えている。そして、このリニアフィードバックシフトレジスタによって入力データをスクランブルして得られた第１、第２スクランブルデータのいずれか一方を、メモリセルトランジスタＭＴへ書き込んでいる。
【００７７】
つまり、ＮＡＮＤ型フラッシュメモリ１０に書き込まれるデータは、第１、第２スクランブルデータのいずれを選択するかによって、ビット線方向でランダム化（ランダマイズ）される。更に、疑似乱数を用いてスクランブルすることで、ページ内においてもランダマイズされる。言い換えれば、ワード線方向においてもランダマイズされる。
【００７８】
従って、ビット線方向だけでなく、ワード線方向にも同一データが連続することを防止出来る。よって、第１の実施形態において効果（２）として説明したように、ＲＤやＰＤの問題を緩和し、ＮＡＮＤ型フラッシュメモリの動作信頼性を向上出来る。
【００７９】
なお、本実施形態では、エンコーダ２１が２つの疑似乱数発生器を備える場合について説明した。しかし、疑似乱数発生器の数は１つでも良い。この場合には、１つの疑似乱数発生器が、上位アドレス及び下位アドレスをスクランブル・シードに用いて２つの疑似乱数を発生し、これをレジスタに保持させる。そして、レジスタに保持された疑似乱数と入力データとの排他的論理和演算を行えば良い。
【００８０】
また、エンコーダ２１は３つ以上のスクランブルデータを発生しても良い。この場合には、１つの疑似乱数発生器が３つ以上の乱数を発生しても良いし、３つ以上の疑似乱数発生器を設けても良い。
【００８１】
［第５の実施形態］  
次に、この発明の第５の実施形態に係る半導体装置について説明する。本実施形態は、上記第１乃至第３の実施形態において、メモリセルトランジスタＭＴの各々が４値のデータを保持する場合に関するものである。以下では、上記第１乃至第３の実施形態と異なる点についてのみ説明する。
【００８２】
本実施形態に係るメモリセルトランジスタＭＴの閾値について、図１４を用いて説明する。図１４はメモリセルトランジスタＭＴの閾値分布を示すグラフであり、横軸が閾値電圧Ｖthを示し、縦軸がメモリセルの存在確率を示す。
【００８３】
図示するようにメモリセルＭＣは、閾値電圧Ｖthの低い順に“１１”、“１０”、“００”、“０１”の４つのデータを保持出来る。“１１”データを保持するメモリセルの閾値電圧Ｖthは、Ｖth＜０Ｖである。“１０”データを保持するメモリセルの閾値電圧Ｖthは、０Ｖ＜Ｖth＜Ｖth１である。“００”データを保持するメモリセルの閾値電圧Ｖthは、Ｖth１＜Ｖth＜Ｖth２である。“０１”データを保持するメモリセルの閾値電圧Ｖthは、Ｖth２＜Ｖth＜Ｖth３である。
【００８４】
上記４値のデータのメモリセルＭＣへの書き込み方法について図１５を用いて簡単に説明する。図１５はメモリセルの閾値分布を示すグラフであり、書き込み時おけるメモリセルの閾値電圧Ｖthの変化の様子を示している。データは１ページに対して一括して書き込まれる。またデータの書き込みは、第１の書き込みと第２の書き込みとの２回に分けて行われる。
【００８５】
書き込みにあたって、メモリセルは消去状態にある。すなわち、メモリセルの閾値電圧Ｖthは負の値であり、“１１”データを保持した状態である。その状態で、まず第１の書き込みを行う。書き込みデータ（第１の書き込みデータ）が“１”の場合には、浮遊ゲートに電子は注入されず、閾値電圧Ｖthは不変である。第１の書き込みデータが“０”の場合には、浮遊ゲートに電子が注入され、閾値電圧Ｖthは正の方向へ変化し、Ｖth１＜Ｖth＜Ｖth２となる。つまり、メモリセルは“００”を保持している時とほぼ同じ閾値となる。
【００８６】
次に第２の書き込みを行う。まず第１の書き込みデータが“１”であった場合について説明する。この場合において、第２の書き込みにおける書き込みデータ（第２の書き込みデータ）が“１”であった場合には、第２の書き込み時においても浮遊ゲートに電子は注入されず、閾値電圧Ｖthは負の値を維持する。その結果、メモリセルには“１１”が書き込まれる。第２の書き込みデータが“０”の場合、浮遊ゲートに電子が注入される。その結果、閾値電圧Ｖthは負から正の方向へ変化し、約０Ｖ＜Ｖth＜Ｖth１となる。すなわち、メモリセルには“１０”が書き込まれる。
【００８７】
次に第１の書き込みデータが“０”であった場合について説明する。この場合において、第２の書き込みデータが“０”である場合、第２の書き込み時には浮遊ゲートに電子が注入されない。よって、第１の書き込みの結果の値を維持する。すなわち、Ｖth１＜Ｖth＜Ｖth２であり、その結果メモリセルには“００”が書き込まれる。第２の書き込みデータが“１”の場合、更に浮遊ゲートに電子が注入される。その結果、閾値電圧Ｖthは更に正の方向へ変化し、Ｖth２＜Ｖth＜Ｖth３となる。すなわち、メモリセルには“０１”が書き込まれる。
【００８８】
次に、本実施形態に係るメモリコントローラ２０の備えるエンコーダ２１の構成について図１６を用いて説明する。図１６は、エンコーダ２１のブロック図である。図示するようにエンコーダ２１は、第１の実施形態で説明した図３の構成において、更に第１符号化器３７、第２符号化器３８、及びメモリ３９を備えている。
【００８９】
メモリ３９は、符号化テーブル７０を備えている。符号化テーブルの一例について図１７を用いて説明する。図１７は、符号化テーブルの概念図である。図示するように符号化テーブルは、入力データの非反転値及び反転値に対する累積用符号を保持する。累積用符号として“０”、“１”、“２”、“３”が、チャージ量の多い順に割り当てられる。つまり、非反転値または反転値が“０１”の場合の累積用符号は“０”であり、非反転値または反転値が“００”の場合の累積用符号は“１”であり、非反転値または反転値が“１０”の場合の累積用符号は“２”であり、非反転値または反転値が“１１”の場合の累積用符号は“３”である。
【００９０】
第１符号化器３７は、メモリ３９内の符号化テーブル７０に従って、非反転値を符号化して第１符号化データを生成し、累積値判定器２２へ出力する。すなわち第１符号化器３７は、非反転値が“０１”、“００”、“１０”、“１１”である場合には、第１符号化データとしてそれぞれ“０”、“１”、“２”、“３”を出力する。
【００９１】
第２符号化器３８は、メモリ３９内の符号化テーブル７０に従って、反転値を符号化して第２符号化データを生成し、累積値判定器２２へ出力する。すなわち第２符号化器３８は、反転値が“０１”、“００”、“１０”、“１１”である場合には、第２符号化データとしてそれぞれ“０”、“１”、“２”、“３”を出力する。  
その他の構成は、上記第１乃至第３の実施形態と同様であるので、説明は省略する。
【００９２】
次に、上記構成のエンコーダ２１の動作について、図１８を用いて説明する。図１８は、本実施形態に係るエンコーダ２１の動作の流れを示すフローチャートである。
【００９３】
図示するようにエンコーダ２１は、まず外部からレギュラーセルアレイ１５の１ページ分の入力データを受け付ける（ステップＳ１０）。そしてエンコーダ２１の第１符号化器３７が、非反転値を符号化テーブル７０に従って符号化し、その結果得られる第１符号化データを累積値判定器２２へ通知する（ステップＳ７０）。同時にエンコーダ２１の第２符号化器３８が、反転器３０で得られた反転値を符号化テーブル７０に従って符号化し、その結果得られる第２符号化データを累積値判定器２２へ通知する（ステップＳ７１）。その後、エンコーダ２１は累積値判定器２２からエンコードＩＤを受信する（ステップＳ１３）。そして、エンコーダ２１のセレクタ３１が、エンコードＩＤに従って非反転値と反転値のいずれか一方を、書き込みデータとしてＮＡＮＤ型フラッシュメモリ１０へ出力する（ステップＳ１４）。その後、入力データが最終データである場合には（ステップＳ１５、ＹＥＳ）、処理を終了し、最終データでなければ（ステップＳ１５、ＮＯ）、ステップＳ１０に戻る。
【００９４】
累積値判定器２２の動作は、大まかには上記第１乃至第３の実施形態で説明した図５、図７、図８、及び図１０のフローチャートにおいて、非反転値及び反転値を、それぞれ第１、第２符号化データに置き換えたものである。図１９は、本実施形態に係る累積値判定器２２の処理の流れを示すフローチャートである。
【００９５】
図示するように累積値判定器２２は、まずエンコーダ２１から第１符号化データを受け取り（ステップＳ９０）、また第２符号化データを受け取る（ステップＳ９１）。そして、受け取った第１、第２符号化データが当該メモリブロック１４に対する最初の入力データに対応するものである場合には（ステップＳ９２、ＹＥＳ）、第１、第２符号化データのうち、各桁の和の大きい方を選択する。各桁の和が同値である場合には第２符号化データを選択する。更にこの選択情報は、エンコードＩＤとしてエンコーダ２１及びＥＣＣエンコーダ２３へ出力される（ステップＳ９３）。その結果、エンコーダ２１から出力された書き込みデータがレギュラーセルアレイ１５内に書き込まれ、書き込みデータに基づいて生成されたＥＣＣデータ及びエンコードＩＤがＥＣＣセルアレイ１６内に書き込まれる。また累積値判定器２２は、ステップＳ９３で選択した第１、第２符号化データのいずれか一方を、累積値として保持する（ステップＳ９４）。そして、ステップＳ９３で選択されてメモリセルＭＣへ書き込まれたデータが、当該メモリセルブロック１４に対する最終の書き込みデータであれば（ステップＳ９５、ＹＥＳ）、処理は終了する。そうでなければ（ステップＳ９５、ＮＯ）、ステップＳ９０へ戻って処理を繰り返す。
【００９６】
上記ステップＳ９２において、最初の入力でない場合には（ステップＳ９２、ＮＯ）、累積値判定器２２は次に、非反転値の値が全て同じで、且つその上位ビットが“０”であるか否かを判定する。非反転値が全て同じか否かの判定は、第１符号化データの全ビットが同じ値であるか否かを見ることで行うことが出来る。またその上位ビットが“０”であるか否かの判定は、累積値に第１、第２符号化データとば別に非反転値を入力して、これにより判定を行っても良いし、累積値判定器２２が図１７に示す対応関係に基づいて第１符号化データから判断しても良い。非反転値が全て同じで、且つその上位ビットが“０”である場合には（ステップＳ９６、ＹＥＳ）、累積値判定器２２は第２符号化データを選択し、その選択情報をエンコードＩＤとしてエンコーダ２１及びＥＣＣエンコーダ２３へ出力する（ステップＳ９７）。従って、この場合にはレギュラーセルアレイ１５には反転値が書き込まれる。そして累積値判定器２２は、第１、第２符号化データのいずれか選択した方の各ビットと、自身が保持する累積値の各桁との加算結果を、新たな累積値として保持する（ステップＳ９８）。すなわち、ステップＳ９７の後、累積値判定器２２にそれまで保持されていた累積値は、第２符号化データが更に加算された値に更新される。そしてステップＳ９５に進む。
【００９７】
上記ステップＳ９６の条件が満足されない場合には（ステップＳ９６、ＮＯ）、累積値判定器２２は次に、非反転値の値が全て同じで、且つその上位ビットが“１”であるか否かを判定する。非反転値が全て同じで、且つその上位ビットが“１”である場合には（ステップＳ９９、ＹＥＳ）、累積値判定器２２は第１符号化データを選択し、その選択情報をエンコードＩＤとしてエンコーダ２１及びＥＣＣエンコーダ２３へ出力する（ステップＳ１００）。従って、この場合にはレギュラーセルアレイ１５には非反転値が書き込まれる。その後、ステップＳ９８の処理に進む。すなわち、ステップＳ１００の後、累積値判定器２２にそれまで保持されていた累積値は、第１符号化データが更に加算された値に更新される。そしてステップＳ９５に進む。
【００９８】
上記ステップＳ９９の条件を満たさない場合、つまり「非反転値の値が全て同じ」なる条件を満たさない場合には（ステップＳ９９、ＮＯ）、ステップＳ１０１の処理に進む。ステップＳ１０１において累積値判定器２２は、自身が保持する累積値の各桁と、ステップＳ９０、Ｓ９１で受け取った第１符号化データ及び第２符号化データの各ビットとを加算する。そして、第１符号化データ及び第２符号化データのそれぞれの加算結果における各桁の最大値と最小値との差を算出する（ステップＳ１０１）。引き続き累積値判定器２２は、ステップＳ１０１で得られた第１符号化データ及び第２符号化データのそれぞれの加算結果について得られた差の大小関係を判定する（ステップＳ１０２）。そして、第１符号化データについての加算結果の最大値と最小値との差が、第２符号化データについての加算結果の最大値と最小値との差よりも小さければ（ステップＳ１０３、ＮＯ）、累積値判定器２２は第１符号化データを選択する。そして第１符号化データを選択した旨の情報を、エンコードＩＤとしてエンコーダ２１及びＥＣＣエンコーダ２３へ出力する（ステップＳ１０４）。すなわち、レギュラーセルアレイ１５には非反転値が書き込まれる。
【００９９】
逆にステップＳ１０２の結果、第１符号化データについての加算結果の最大値と最小値との差が、第２符号化データについての加算結果の最大値と最小値との差以上であれば（ステップＳ１０３、ＹＥＳ）、累積値判定器２２は第２符号化データを選択する。そして第２符号化データを選択した旨の情報を、エンコードＩＤとしてエンコーダ２１及びＥＣＣエンコーダ２３へ出力する（ステップＳ１０５）。すなわち、レギュラーセルアレイ１５には反転値が書き込まれる。  
ステップＳ１０４、Ｓ１０５の後、累積値判定器２２はステップＳ９８の処理に進む。
【０１００】
上記処理の具体例について、図２０を用いて説明する。図２０は、累積値判定器２２において用いられる各種信号を示すダイアグラムであり、図６と同様の情報を示しており、更に第１、第２符号化データについても示している。なお第１、第２符号化データ及び累積値に関しては、いずれかの桁の値が“１０”以上となった場合には、各桁の間に「，」を表記した。
【０１０１】
まず初めに、エンコーダ２１に最初の入力データ“０１”、“１１”、“１０”、“１１”が入力される。この場合の反転値は“１０”、“００”、“０１”、“００”である。すると、第１符号化データは図１７の規則に従って“０３２３”となり、第２符号化データは“２１０１”となる。メモリブロック１４に書き込まれる最初のデータであるから（ステップＳ９２、ＹＥＳ）、累積値判定器２２はステップＳ９３の処理に進む。すると、第１、第２符号化データのうち、第１符号化データの“０３２３”の各桁の和は“８”、第２符号化データの“２１０１”の各桁の和は“４”となり、各桁の和が大きい方、すなわち第１符号化データ“０３２３”を累積値判定器２２は選択する（ステップＳ９３）。そして累積値は“０３２３”となる（ステップＳ９４）。
【０１０２】
次に、エンコーダ２１に入力データ“００”、“０１”、“１０”、“００”が入力される。この場合の反転値は“１１”、“１０”、“０１”、“１１”である。そして、第１、第２符号化データはそれぞれ、“１０２１”、“３２０３”となる。すると、最初のデータで無く（ステップＳ９２、ＮＯ）、非反転値の全てが同じでもないので（ステップＳ９６、ＮＯ、ステップＳ９９、ＮＯ）、累積値判定器２２は、累積値の各桁と、第１、第２符号化データの各ビットとを加算する（ステップＳ１０１）。すると、この時点での累積値は“０３２３”であるので、累積値と第１符号化データとの加算結果は“１３４４”となる。また累積値と第２符号化データとの加算結果は“３５２６”となる。すると、累積値と第１符号化データとの加算結果の各桁の最大値と最小値との差“３”は、累積値と第２符号化データとの加算結果の各桁の最大値と最小値との差“４”よりも小さい（ステップＳ１０３、ＮＯ）。従って、累積値判定器２２は第１符号化データ“１３４４”を選択し、エンコードＩＤを“０”とする。そして累積値判定器２２は、第１符号化データについての加算結果“１３４４”を、新たな累積値として保持する（ステップＳ９８）。エンコードＩＤが“０”とされたことにより、エンコーダ２１のセレクタ３１は非反転値を選択し、非反転値“００”、“０１”、“１０”、“００”を書き込みデータとして出力する。
【０１０３】
以下、入力番号“３”、“４”については入力番号“２”の場合と同様の処理が行われる。  
次に、入力番号“５”について説明する。５番目の入力データは“１１”、“１１”、“１１”、“１１”である。この場合の反転値は“００”、“００”、“００”、“００”である。そして、第１、第２符号化データはそれぞれ“３３３３”、“１１１１”である。すると、最初のデータで無く（ステップＳ９２、ＮＯ）、非反転値が全て同じであり、且つその上位ビットが“１”である（ステップＳ９６、ＮＯ、ステップＳ９９、ＹＥＳ）。従って、累積値判定器２２は第１符号化データ“３３３３”を選択する（ステップＳ１００）。すると、この時点での累積値は“７６６５”であるので、累積値“７６６５”と第１符号化データ“３３３３”との加算結果“１０”、“９”、“９”、“８”が新たな累積値となる（ステップＳ９８）。
【０１０４】
次に入力番号“６”について説明する。６番目の入力データは“００”、“００”、“００”、“００”である。この場合の反転値は“１１”、“１１”、“１１”、“１１”である。そして、第１、第２符号化データはそれぞれ“１１１１”、“３３３３”である。すると、最初のデータで無く（ステップＳ９２、ＮＯ）、非反転値が同じで、且つその上位ビットが“０”である（ステップＳ９６、ＹＥＳ）ので、累積値判定器２２は第２符号化データ“３３３３”を選択し、エンコードＩＤを“１”とする。そして累積値判定器２２は、第２符号化データについての加算結果“１３”、“１２”、“１２”、“１１”を、新たな累積値として保持する（ステップＳ９７）。エンコードＩＤが“１”とされたことにより、エンコーダ２１のセレクタ３１は反転値を選択し、反転値“１１”、“１１”、“１１”、“１１”を書き込みデータとして出力する。
【０１０５】
上記のように、この発明の第５の実施形態に係るメモリシステムであると、多値データを第１、第２符号化器３７、３８によって、その多値データに対応したチャージ量に応じて符号化している。より具体的には、当該多値データを書き込んだ際に浮遊ゲートに注入されるチャージ量の少ない順番に、符号化の値を大きくしている（図１７参照）。そして、この符号化データによって累積値を計算している。従って、多値データを保持可能なメモリセルトランジスタＭＴを備えたＮＡＮＤ型フラッシュメモリ１０の場合であっても、上記第１の実施形態で説明した（１）及び（２）の効果が得られる。また、上記第２、第３の実施形態に係る構成を用いれば、同様にして（３）、（４）の効果が得られる。
【０１０６】
なお、本実施形態は上記第４の実施形態と組み合わせることも可能である。図２１は、この場合のエンコーダ２１のブロック図である。図示するように、エンコーダ２１は、上記第４の実施形態で説明した図１２の構成において、更に第１符号化器３７、第２符号化器３８、及びメモリ３９を備えている。そして第１、第２符号化器３７、３８は、ＸＯＲゲート３４、３５からそれぞれ出力される第１、第２スクランブルデータを、符号化テーブル７０に従って符号化して、その結果を第１、第２符号化データとして累積値判定器２２へ出力する。この場合には、メモリ３９内の符号化テーブル７０は、第１、第２スクランブルデータと累積用符号との関係を保持する。本構成によれば、第４の実施形態で説明した（５）の効果が得られる。
【０１０７】
［第６の実施形態］  
次に、この発明の第６の実施形態に係る半導体装置について説明する。本実施形態は、上記第５の実施形態における別の符号化の方法に関するものである。以下では、第５の実施形態と異なる点についてのみ説明する。
【０１０８】
図２２は、本実施形態に係るエンコーダ２１のメモリ３９が備える符号化テーブル７０の概念図である。図示するように、非反転値または反転値が“０１”、“００”の場合の累積用符号は“０”であり、非反転値または反転値が“１０”、“１１”の場合の累積用符号は“１”である。つまり、非反転値及び反転値の上位ビットが第１、第２符号化データとなる。
【０１０９】
次に、本実施形態に係るエンコーダ２１の動作について、図２３を用いて説明する。図２３は、本実施形態に係るエンコーダ２１の動作の流れを示すフローチャートである。
【０１１０】
図示するようにエンコーダ２１は、まず外部からレギュラーセルアレイ１５の１ページ分の入力データを受け付ける（ステップＳ１０）。そしてエンコーダ２１の第１符号化器３７が、符号化テーブル７０に従って、非反転値の上位ビットを第１符号化データとして累積値判定器２２へ通知する（ステップＳ８０）。同時にエンコーダ２１の第２符号化器３８が、符号テーブル７０に従って、反転器２０で得られた反転値の上位ビットを第２符号化データとして累積値判定器２２へ通知する（ステップＳ８１）。その後はステップＳ１３以下の処理を行う。累積値判定器２２の動作は、上記第５の実施形態と同様である。
【０１１１】
上記のように、この発明の第６の実施形態に係るメモリシステムであると、第５の実施形態と同様に、上記した（１）乃至（４）の効果が得られる。更に、下記（６）の効果が得られる。
【０１１２】
（６）メモリコントローラ２０のサイズを削減出来る（その３）。  
本実施形態に係る構成であると、第１、第２符号化器３７、３８は非反転値及び反転値の上位ビットを第１、第２符号化データとして出力する。従って、入力データが２ビットデータであれば、第１、第２符号化データが取り得る値は“０”または“１”である。よって、上記第５の実施形態の場合に比べて累積値の値を小さく出来る。具体的には、上記第５の実施形態の場合、ワード線の本数が３本である場合に、累積値の各桁が取り得る最大値は（“３”×３２本）＝“９６”である。これに対して本実施形態の場合には、累積値の各桁が取り得る最大値は（“１”×３２本）＝“３２”となる。そのため、累積値を保持するレジスタサイズを小さく出来、メモリコントローラ２０のサイズを削減出来る。
【０１１３】
なお、上記ではエンコーダ２１がメモリ３９に符号化テーブル７０を保持する場合について説明した。しかし、第１、第２符号化器３７、３８が非反転値及び反転値の上位ビットを取り出すことの出来る構成とすれば、特に符号化テーブル７０は不要である。更に、上記第５の実施形態において図２１と同様に、本実施形態においても非反転値及び反転値の代わりに第１、第２スクランブルデータを第１、第２符号化器３７、３８へ入力しても良い。
【０１１４】
［第７の実施形態］  
次に、この発明の第７の実施形態に係る半導体装置について説明する。本実施形態は、累積値によるビット線間のチャージ量の平均化を行わず、ページデータのワード線方向のランダマイズを行う構成に関する。
【０１１５】
図２４は、本実施形態に係るメモリシステム１のブロック図である。図示するように、本実施形態に係るメモリシステム１は、第１の実施形態で説明した図１の構成において、累積値判定器２２を廃した構成を有する。ＮＡＮＤ型フラッシュメモリ１０の構成は第１の実施形態で説明した通りである。
【０１１６】
本実施形態に係るエンコーダ２１は、第４の実施形態で説明した図１２の構成において、第２疑似乱数発生器３３、ＸＯＲゲート３５、及びセレクタ３６を廃した構成を有している。第１疑似乱数発生器３２は、書き込みデータのアドレスをスクランブル・シードに用いて疑似乱数を発生する。この際、書き込みデータのアドレスの上位アドレスでも良いし下位アドレスでも良いし、書き込みデータのアドレスに関連するデータであれば限定されない。ＸＯＲゲート３４は、第１疑似乱数発生器３２で発生された疑似乱数と入力データとの排他的論理和演算を行う。そして、ＸＯＲゲート３４で得られた演算結果が、スクランブルデータとしてＮＡＮＤ型フラッシュメモリ１０へ書き込まれる。
【０１１７】
ＥＣＣエンコーダ２３は、ＸＯＲゲート３４から出力されるスクランブルデータを基にしてＥＣＣデータを生成する。
【０１１８】
読み出し用デコーダ２４は、第４の実施形態で説明した図１３の構成において、セレクタ６０を廃した構成を有している。疑似乱数発生器６１は、エンコーダにおいて使用した書き込みデータのアドレスをスクランブル・シードに用いて疑似乱数を発生する。ＸＯＲゲート６２は、疑似乱数発生器６１で発生された疑似乱数と読み出しデータとの排他的論理和演算を行う。そしてＸＯＲゲート６２における演算結果が解読データとなる。
【０１１９】
上記のように、この発明の第７の実施形態に係るメモリシステム１であると、下記（７）の効果が得られる。  
（７）簡便な構成により、上記（１）及び（５）の効果が得られる。  
本実施形態に係る構成であると、入力データは疑似乱数発生器３２で発生された疑似乱数によりスクランブルされてＮＡＮＤ型フラッシュメモリ１０へ書き込まれる。すなわち、書き込みデータはワード線方向においてランダマイズされる。従って、ワード線方向に沿って同一データが連続することを防止し、上記第４の実施形態で説明した（５）の効果が得られる。
【０１２０】
また、入力データが疑似乱数によりスクランブルされることにより、ビット線間におけるチャージ量も平均化される。従って、上記第１の実施形態で説明した（１）の効果が得られる。勿論、チャージ量の平均化については、ビット線のチャージ量の累積値を基に書き込みデータを選択する第１の実施形態の方法の方が優れている。これに対して本実施形態では、累積値判定器２２やエンコーダ２１においてセレクタ３１が不要である。従って、回路構成の簡略化が強く求められている場合には、本実施形態に係る構成を採用することが望ましい。なお、本実施形態の場合にはエンコードＩＤを使用しないので、ＥＣＣセルアレイ１６においてビット線ＢＬ４３１３に接続されたメモリセルトランジスタＭＴも、ＥＣＣデータ保持用として用いることが可能である。
【０１２１】
上記のように、この発明の第１乃至第６の実施形態に係る半導体装置であると、メモリコントローラ２０の累積値判定器２２が、各桁がビット線毎のチャージ量の累積結果である累積値を保持する。累積値の各桁の値が大きいほど、対応するビット線におけるチャージ量は小さく、各桁の値が小さいほどチャージ量は大きい。そして、累積値の桁間の差が小さくなるように、つまり平均化されるように、累積値判定器２２は書き込みデータを選択する。その結果、ビット線間におけるチャージ量が平均化され、ＰＤやＲＤの問題を解消し、半導体装置の動作信頼性を向上出来る。また第７の実施形態においても、書き込みデータをワード線方向でランダマイズすることで、同様の効果が得られる。
【０１２２】
なお、上記実施形態ではエンコーダ２１が非反転値及び反転値を出力する場合と、第１、第２スクランブルデータを出力する場合のそれぞれについて説明したが、これらを組み合わせることも可能である。図２５は、その場合のエンコーダ２１のブロック図である。
【０１２３】
図示するように、エンコーダ２１はデータ変換回路１００、１０１及びセレクタ３１を備えている。データ変換回路１００は、第１の実施形態等で説明した反転器３０を備え、入力データの反転値と非反転値とを出力する。データ変換回路１０１は、第４の実施形態等で説明したリニアフィードバックレジスタを備え、入力データを基にして第１、第２スクランブルデータを出力する。セレクタ３１は、エンコードＩＤに従って、非反転値、反転値、及び第１、第２スクランブルデータのいずれかを選択する。
【０１２４】
この場合の累積値判定器２２は、累積値の各ビットと、反転値の各ビット、非反転値の各ビット、及び第１、第２スクランブルデータの各ビットとの加算を行う。そして、反転値、非反転値、及び第１、第２スクランブルデータのうち、加算結果の各桁の最大値と最小値との差がより小さくなるいずれかを選択する。このように、４つのデータを書き込み候補として、そのうちのいずれか最適なデータを選択しても良い。
【０１２５】
従って、上記第１乃至第６の実施形態におけるエンコーダ２１は、図２６の構成に表現することも出来る。図２６はエンコーダ２１のブロック図である。図示するようにエンコーダ２１は、例えばｋ個（ｋは１以上の自然数）の書き込みデータ候補生成回路１０２−１〜１０２−ｋとセレクタ３１を備えている。書き込みデータ候補生成回路１０２−１〜１０２−ｋは、例えば上記第１の実施形態で説明した反転器３０や、第４の実施形態で説明したリニアフィードバックレジスタである。そして、書き込みデータ候補生成回路１０２−１〜１０２−ｋによって、第１乃至第２ｋ書き込みデータ候補が生成される。このデータ候補が、例えば非反転値、反転値、及び第１、第２スクランブルデータに相当する。そしてセレクタ３１が、第１乃至第２ｋ書き込みデータ候補のいずれかを、エンコードＩＤに従って書き込みデータとして選択する。
【０１２６】
この場合、累積値判定器２２は、累積値の各ビットと、第１乃至第２ｋ書き込みデータ候補の各ビットとの加算を行う。そして、第１乃至第２ｋ書き込みデータのうち、加算結果の各桁の最大値と最小値との差がより小さくなるいずれかを選択する。
【０１２７】
また、上記実施形態は種々のＮＡＮＤ型フラッシュメモリデバイスに適用可能である。以下、上記第１乃至第７の実施形態をメモリカードに適用した場合について説明する。図２７はメモリシステム１のブロック図である。
【０１２８】
図示するようにメモリシステム１は、メモリカード１１０、メモリコントローラ２０、及びホスト機器１２０を備えている。ホスト機器１２０は、バスインタフェース１２１を介して接続されるメモリコントローラ２０に対しアクセスを行うためのハードウェアおよびソフトウェアを備えている。メモリコントローラ２０は、上記第１乃至第７の実施形態で説明したように、エンコーダ２１、累積値判定器２２、ＥＣＣエンコーダ２３、及び読み出し用デコーダ２４を備え、更にラインバッファ２５を備えている。
【０１２９】
メモリカード１１０は、バスインタフェース１２２を介してメモリコントローラ２０に接続される。メモリカード１１０は、上記第１の実施形態で説明したＮＡＮＤ型フラッシュメモリ１０と、複数の信号ピン１１１を備えている。信号ピン１１１は、メモリコントローラ２０と電気的に接続可能とされている。信号ピン１１１によって、メモリコントローラ２０から電源や各種信号が与えられる。
【０１３０】
上記構成において、バスインタフェース１２１、１２２は例えば８ビットのデータ線を有する。そして、１ページ（４０９６バイト）のデータを書き込む場合には、データは８ビットずつ４０９６回に分けて転送される。メモリコントローラ２０のラインバッファ２５は、この転送データをバッファリングするために用いられる。そして、ラインバッファでバッファリングされた１ページ分のデータが、エンコーダ２１へ入力される。このように、上記第１乃至第７の実施形態で説明した処理は、メモリカード１１０の外部で行われても良い。
【０１３１】
図２８は、別のメモリカードの例を示すメモリシステム１のブロック図である。図示するようにメモリシステム１は、メモリカード１３０及びホスト機器１２０を備えている。ホスト機器１２０は、バスインタフェース１２３を介してメモリカード１３０に接続される。メモリカード１３０は、上記第１乃至第７の実施形態で説明したメモリコントローラ２０、ＮＡＮＤ型フラッシュメモリ１０、及び複数の信号ピン１３１を備えている。信号ピン１３１には、ホスト機器１２０から電源や各種信号が与えられる。
【０１３２】
本例の場合、上記第１乃至第７の実施形態で説明した処理や、ＥＣＣデータの生成は、メモリカード１３０内部にて行われる。そして、メモリコントローラ２０とＮＡＮＤ型フラッシュメモリ１０とを接続する内部バスによって、書き込みデータ及びＥＣＣデータがＮＡＮＤ型フラッシュメモリ１０内のページバッファ１２へ転送される。この転送も図２７の場合と同様に８ビットずつ行われ、４０９６バイトの書き込みを行う場合には、書き込みデータは４０９６回に分けて転送される。
【０１３３】
また、図２７及び図２８ではメモリカードの場合を例に説明したが、メモリカードに限らず、ＮＡＮＤ型フラッシュメモリ全般に適用できる。また、ＮＡＮＤ型フラッシュメモリに限らず、同様の問題を生じる他の半導体メモリ全般に適用可能である。
【０１３４】
更に、上記実施形態では累積値を“１”データの累積結果として説明したが、逆に“０”データの累積結果であっても良い。つまり、累積値はその絶対値そのものには意味が無く、累積値の各桁の間でチャージ量の差が分かれば良い。また、上記第５の実施形態では、各メモリセルが２ビットのデータ（４値）を保持する場合について説明した。しかしながら、各メモリセルは３ビット（８値）以上のデータを保持する場合であっても良い。この場合でも、図１９と同じ方法にて対応可能である。但し、図１９におけるステップＳ９６、Ｓ９９の処理は、あくまでページデータが同一である場合に、メモリセルのチャージ量を低減するための処理である。従って、データが“０”であるか“１”であるかは特に問題では無く、入力データの非反転値と反転値のうち、よりチャージ量が少ない方を選択出来れば良い。このように、よりチャージ量が少ないデータを選択するという考え方はステップＳ９３でも同様であるし、第１乃至第４の実施形態におけるステップＳ２３、Ｓ２６、Ｓ２９も同様である。
【０１３５】
なお、本願発明は上記実施形態に限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で種々に変形することが可能である。更に、上記実施形態には種々の段階の発明が含まれており、開示される複数の構成要件における適宜な組み合わせにより種々の発明が抽出されうる。例えば、実施形態に示される全構成要件からいくつかの構成要件が削除されても、発明が解決しようとする課題の欄で述べた課題が解決でき、発明の効果の欄で述べられている効果が得られる場合には、この構成要件が削除された構成が発明として抽出されうる。
【図面の簡単な説明】
【０１３６】
【図１】この発明の第１の実施形態に係るメモリシステムのブロック図。
【図２】この発明の第１の実施形態に係るＮＡＮＤ型フラッシュメモリの回路図。
【図３】この発明の第１の実施形態に係るエンコーダのブロック図。
【図４】この発明の第１の実施形態に係るエンコーダにおける処理を示すフローチャート。
【図５】この発明の第１の実施形態に係る累積値判定器における処理を示すフローチャート。
【図６】この発明の第１の実施形態に係る累積値判定器における処理を示す概念図。
【図７】この発明の第１の実施形態の変形例に係る累積値判定器の処理を示すフローチャート。
【図８】この発明の第２の実施形態に係る累積値判定器における処理を示すフローチャート。
【図９】この発明の第２の実施形態に係る累積値判定器における処理を示す概念図。
【図１０】この発明の第３の実施形態に係る累積値判定器における処理を示すフローチャート。
【図１１】この発明の第３の実施形態に係る累積値判定器において、累積値保持部のブロック図。
【図１２】この発明の第４の実施形態に係るエンコーダのブロック図。
【図１３】この発明の第４の実施形態に係る読み出し用デコーダのブロック図。
【図１４】この発明の第５の実施形態に係るＮＡＮＤ型フラッシュメモリの閾値分布を示すグラフ。
【図１５】この発明の第５の実施形態に係るＮＡＮＤ型フラッシュメモリの閾値分布を示すグラフであり、データの書き込み方法を示す図。
【図１６】この発明の第５の実施形態に係るエンコーダのブロック図。
【図１７】この発明の第５の実施形態に係るエンコーダの備える符号化テーブルの概念図。
【図１８】この発明の第５の実施形態に係るエンコーダにおける処理を示すフローチャート。
【図１９】この発明の第５の実施形態に係る累積値判定器における処理を示すフローチャート。
【図２０】この発明の第５の実施形態に係る累積値判定器における処理を示す概念図。
【図２１】この発明の第５の実施形態の変形例に係るエンコーダのブロック図。
【図２２】この発明の第６の実施形態に係るエンコーダの備える符号化テーブルの概念図。
【図２３】この発明の第６の実施形態に係るエンコーダにおける処理を示すフローチャート。
【図２４】この発明の第７の実施形態に係るメモリシステムのブロック図。
【図２５】この発明の第１乃至第６の実施形態の第１変形例に係るエンコーダのブロック図。
【図２６】この発明の第１乃至第６の実施形態の第２変形例に係るエンコーダのブロック図。
【図２７】この発明の第１乃至第７の実施形態の第１変形例に係るメモリシステムのブロック図。
【図２８】この発明の第１乃至第７の実施形態の第２変形例に係るメモリシステムのブロック図。
【符号の説明】
【０１３７】
１…メモリシステム、１０…ＮＡＮＤ型フラッシュメモリ、１１…メモリセルアレイ、１２…ページバッファ、１３…センスアンプ、１４…メモリブロック、１５…レギュラーセルアレイ、１６…ＥＣＣセルアレイ、２０…メモリコントローラ、２１…エンコーダ、２２…累積値判定器、２３…ＥＣＣエンコーダ、２４…読み出し用デコーダ、３０…反転器、３１、３６、６０…セレクタ、３２、３３、６１…疑似乱数発生器、３４、３５、６２…ＸＯＲゲート、３７、３８…符号化器、３９…メモリ、７０…符号化テーブル
【図１】
2008217857.tif 000003
【図２】
2008217857.tif 000004
【図３】
2008217857.tif 000005
【図４】
2008217857.tif 000006
【図５】
2008217857.tif 000007
【図６】
2008217857.tif 000008
【図７】
2008217857.tif 000009
【図８】
2008217857.tif 000010
【図９】
2008217857.tif 000011
【図１０】
2008217857.tif 000012
【図１１】
2008217857.tif 000013
【図１２】
2008217857.tif 000014
【図１３】
2008217857.tif 000015
【図１４】
2008217857.tif 000016
【図１５】
2008217857.tif 000017
【図１６】
2008217857.tif 000018
【図１７】
2008217857.tif 000019
【図１８】
2008217857.tif 000020
【図１９】
2008217857.tif 000021
【図２０】
2008217857.tif 000022
【図２１】
2008217857.tif 000023
【図２２】
2008217857.tif 000024
【図２３】
2008217857.tif 000025
【図２４】
2008217857.tif 000026
【図２５】
2008217857.tif 000027
【図２６】
2008217857.tif 000028
【図２７】
2008217857.tif 000029
【図２８】
2008217857.tif 000030