以下、この発明の実施形態につき図面を参照して説明する。この説明に際し、全図にわたり、共通する部分には共通する参照符号を付す。
[第1の実施形態]
この発明の第1の実施形態に係る半導体装置について、図1を用いて説明する。図1は、本実施形態に係るメモリシステムのブロック図である。図示するようにメモリシステム1は、おおまかにはNAND型フラッシュメモリ10と、NAND型フラッシュメモリ10を制御するメモリコントローラ20とを備えている。
まず、NAND型フラッシュメモリ10の構成について説明する。なお以下では、NAND型フラッシュメモリ10を単にフラッシュメモリ10と呼ぶことがある。図示するようにフラッシュメモリ10は、メモリセルアレイ11、ページバッファ12、及びセンスアンプ13を備えている。メモリセルアレイ11は、複数の不揮発性のメモリセルMCが配置された複数のメモリブロック14を備えている。メモリセルMCの各々は、1ビット、すなわち2値のデータを保持可能とされている。同一のメモリブロック14内に含まれる全てのメモリセルMCは一括して消去され、また複数のメモリセルMCに対して一括してデータが書き込まれる。以下、一括してデータが書き込まれるメモリセルMCの単位を、ページと呼ぶ。ページバッファ12は、メモリセルMCへの書き込みデータをページ単位で保持し、保持した書き込みデータをメモリセルMCへ書き込む。センスアンプ13は、メモリセルMCから読み出されたデータをセンスして増幅する。
上記メモリブロック14の構成について、図2を用いて説明する。図2は、メモリブロック14の一部構成を示す回路図である。図示するようにメモリブロック14は、レギュラーセルアレイ15とECCセルアレイ16とを備えている。レギュラーセルアレイ15は、外部から与えられた書き込みデータの保持用として用いられ、ECCセルアレイ16は書き込みデータから生成されたECCデータの保持用として用いられる。
レギュラーセルアレイ15及びECCセルアレイ16は、複数のNANDストリングを備えている。NANDストリング各々は、選択トランジスタST1、ST2、及び32個のメモリセルトランジスタMTを備えている。NANDストリング内に含まれるメモリセルトランジスタMTの数は一例に過ぎず、例えば8個、32個、64個、128個等であってもよい。各々のNANDストリングに含まれる選択トランジスタST1は、ドレインがビット線BL0〜BL4313のいずれかに接続され、ゲートがセレクトゲート線SGDに共通接続されている。また選択トランジスタST2は、ソースがソース線SLに共通接続され、ゲートがセレクトゲート線SGSに共通接続されている。
メモリセルトランジスタMTの各々は、半導体基板上にゲート絶縁膜を介在して形成された積層ゲートを備えたMOSトランジスタである。積層ゲートは、ゲート絶縁膜上に形成された電荷蓄積層(例えば浮遊ゲート)と、電荷蓄積層上にゲート間絶縁膜を介在して形成された制御ゲートとを含んでいる。各々のNANDストリングにおいて、32個のメモリセルトランジスタMTは、選択トランジスタST1のソースと選択トランジスタST2のドレインとの間に、各々の電流経路が直列接続されるように配置されている。そして、最もソース側に位置するメモリセルトランジスタMTから順に、制御ゲートがワード線WL0〜WL31にそれぞれ接続されている。従って、ワード線WL31に接続されたメモリセルトランジスタMTのドレインは選択トランジスタST1のソースに接続され、ワード線WL0に接続されたメモリセルトランジスタMTのソースは選択トランジスタST2のドレインに接続されている。
上記構成のNANDストリングが、レギュラーセルアレイ15内には4096個配置され、ECCセルアレイ16内には218個配置される。そして、4096本のビット線BL0〜BL4095がレギュラーセルアレイ15内のNANDストリングの各々に接続され、218本のビット線BL4096〜BL4313が、ECCセルアレイ16内のNANDストリングの各々に接続される。従って、1つのレギュラーセルアレイ15はワード線1本当たり4kビットのメモリ容量を有し、1つのECCセルアレイ16はワード線1本あたり218ビットのメモリ容量を有する。
1つのメモリブロック14内には、上記構成のレギュラーセルアレイ15とECCセルアレイ16との組み合わせが、8個配置される。従って、1つのメモリブロック14におけるワード線1本当たりのレギュラーセルアレイ15のメモリ容量は(4kビット×8個)=4kバイトであり、ECCセルアレイ16のメモリ容量は(218ビット×8個)=218バイトである。そして、各メモリブロック14において、同一のワード線に接続されたメモリセルトランジスタMTに対して、一括してデータが書き込まれる。すなわち、1ページの容量は(4kバイト+218バイト)となる。また、各メモリブロック14内のメモリセルトランジスタMTは、一括してデータが消去される。つまり消去サイズは、ワード線の本数が32本であるから、((4kバイト+218バイト)×32)=(128kバイト+6976バイト)である。
次に、図1に戻ってメモリコントローラ20の構成について説明する。図示するようにメモリコントローラ20は、エンコーダ21、累積値判定器22、エンコーダ23、及び読み出し用デコーダ24を備えている。
図3はエンコーダ21の構成の一例を示すブロック図である。図示するようにエンコーダ21は、反転器30及びセレクタ31を備えている。エンコーダ21は、外部からレギュラーセルアレイ15の1ページ分の入力データ(4kバイト)を受信する。反転器30は、入力データの各ビットを反転させる。そして、入力データ(非反転値)と、反転器30で得られた反転値とが、累積値判定器22へ出力される。またセレクタ31は、累積値判定器22から与えられるエンコードIDに従って、非反転値と反転値とのいずれかを選択して、選択したいずれか一方を、書き込みデータとしてページバッファ12へ出力する。書き込みデータは、メモリセルアレイ11におけるレギュラーセルアレイ15内に書き込まれる。なおエンコードIDについては後述する。
図1に戻ってメモリコントローラ20の説明を続ける。累積値判定器22は、エンコーダ21から受信した非反転値と反転値とのうち、メモリセルアレイ11へ書き込むべきいずれか一方を選択する。そしてその選択情報を、エンコードIDとしてエンコーダ21及びECCエンコーダ23へ出力する。この選択動作は、累積値に基づいて行われる。累積値とは、あるメモリブロック14におけるメモリセルトランジスタMTに対する書き込み済みデータを、ビット線毎に累積した値のことである。そして、累積値の各桁が、各ビット線における“1”データ(電荷が浮遊ゲートに注入されていない状態)の数、すなわち、個々のNANDストリングにおいて“1”データが書き込まれたメモリセルトランジスタMTの数を示す。従って、レギュラーセルアレイ15のビット線本数が(4096×8)本であると、累積値の桁数も(4096×8)桁となる。累積値判定部22は、この累積値を保持する。そして、非反転値と反転値のうち、非反転値と反転値の各ビットと累積値の各桁との加算結果において、加算結果の各桁の値がより平均化されるいずれか一方を選択する。
ECCエンコーダ23は、エンコーダ21から与えられる書き込みデータとエンコードIDに基づいてECCデータを生成する。そしてECCデータと、累積値判定器22から与えられるエンコードIDとを、ページバッファ12へ出力する。ECCデータ及びエンコードIDは、ECCセルアレイ16内に書き込まれる。特にメモリブロック14においてビット線BL4313に接続されたメモリセルトランジスタMTは、エンコードID保持用として用いられる。
読み出し用デコーダ24は、センスアンプ13でセンス・増幅された読み出しデータを、エンコードIDを元にして解読する。すなわち、読み出したエンコードIDが、非反転値を選択した旨の情報であれば、読み出しデータをそのまま出力する。他方、反転値を選択した旨の情報であれば、読み出しデータの各ビットを反転させて、これを解読データとして出力する。
次に、上記構成のメモリシステムにおける書き込み動作について、エンコーダ21及び累積値判定器22の動作に着目して説明する。まず図4を用いてエンコーダ21の動作について説明する。図4はエンコーダ21の動作の流れを示すフローチャートである。
図示するようにエンコーダ21は、まず外部からレギュラーセルアレイ15の1ページ分の入力データを受け付ける(ステップS10)。そしてエンコーダ21は、受け付けた入力データをそのまま非反転値として累積値判定器22へ通知する(ステップS11)。同時にエンコーダ21は、入力データを反転器30で反転させ、反転値を累積値判定器22へ通知する(ステップS12)。その後、エンコーダ21は累積値判定器22からエンコードIDを受信する(ステップS13)。そして、エンコーダ21のセレクタ31が、エンコードIDに従って非反転値と反転値のいずれか一方を、書き込みデータとしてNAND型フラッシュメモリ10へ出力する(ステップS14)。エンコーダ21に対しては、複数の入力データが連続して入力されるが、入力データが最終データである場合には(ステップS15、YES)、処理を終了し、最終データでなければ(ステップS15、NO)、ステップS10に戻る。
次に、図5を用いて累積値判定器22の動作について説明する。図5は累積値判定器22の動作の流れを示すフローチャートである。
図示するように、累積値判定器22は、まずエンコーダ21から非反転値を受け取り(ステップS20)、また反転値を受け取る(ステップS21)。そして、受け取った非反転値及び反転値が当該メモリブロック14に対する最初の入力データである場合には(ステップS22、YES)、非反転値と反転値とのうち、値が“1”であるビットの多い方を選択する。“1”であるビットの数が同数の場合には反転値を選択する。更にこの選択情報は、エンコードIDとしてエンコーダ21及びECCエンコーダ23へ出力される(ステップS23)。その結果、エンコーダ21から出力された書き込みデータがレギュラーセルアレイ15内に書き込まれ、書き込みデータに基づいて生成されたECCデータ及びエンコードIDがECCセルアレイ16内に書き込まれる。また累積値判定器22は、ステップS23で選択した非反転値と反転値とのいずれか一方を、累積値として保持する(ステップS24)。そして、ステップS23で選択されてメモリセルMCへ書き込まれたデータが、当該メモリセルブロック14に対する最終の書き込みデータであれば(ステップS25、YES)、処理は終了する。そうでなければ(ステップS25、NO)、ステップS20へ戻って処理を繰り返す。
上記ステップS22において、最初の入力でない場合には(ステップS22、NO)、累積値判定器22は次に非反転値の全ビットが“0”であるか否かを判定する。全ビットが“0”である場合には(ステップS26、YES)、累積値判定器22は反転値を選択し、その選択情報をエンコードIDとしてエンコーダ21及びECCエンコーダ23へ出力する(ステップS27)。従って、この場合にはレギュラーセルアレイ15には反転値が書き込まれる。そして累積値判定器22は、非反転値と反転値とのいずれか選択した方の各ビットと、自身が保持する累積値の各桁との加算結果を、新たな累積値として保持する(ステップS28)。すなわち、ステップS27の後、累積値判定器22にそれまで保持されていた累積値は、反転値が更に加算された値に更新される。そしてステップS25に進む。
上記ステップS26において、全ビットが“0”でない場合、つまりいずれかのビットが“1”である場合には(ステップS26、NO)、累積値判定器22は次に非反転値の全ビットが“1”であるか否かを判定する。全ビットが“1”である場合には(ステップS29、YES)、累積値判定器22は非反転値を選択し、その選択情報をエンコードIDとしてエンコーダ21及びECCエンコーダ23へ出力する(ステップS30)。従って、この場合にはレギュラーセルアレイ15には非反転値が書き込まれる。その後、ステップS28の処理に進む。すなわち、ステップS30の後、累積値判定器22にそれまで保持されていた累積値は、非反転値が更に加算された値に更新される。そしてステップS25に進む。
上記ステップS29において、全ビットが“1”でない場合、つまりいずれかのビットが“0”である場合には(ステップS29、NO)、ステップS31の処理に進む。ステップS31において累積値判定器22は、自身が保持する累積値の各桁と、ステップS20、S21で受け取った非反転値及び反転値の各ビットとを加算する。そして、非反転値及び反転値のそれぞれの加算結果における各桁の最大値と最小値との差を算出する(ステップS31)。引き続き累積値判定器22は、ステップS31で得られた非反転値及び反転値のそれぞれの加算結果について得られた差の大小関係を判定する(ステップS32)。そして、非反転値についての加算結果の最大値と最小値との差が、反転値についての加算結果の最大値と最小値との差よりも小さければ(ステップS33、NO)、累積値判定器22は非反転値を選択する。そして非反転値を選択した旨の情報を、エンコードIDとしてエンコーダ21及びECCエンコーダ23へ出力する(ステップS34)。すなわち、レギュラーセルアレイ15には非反転値が書き込まれる。
逆にステップS32の結果、非反転値についての加算結果の最大値と最小値との差が、反転値についての加算結果の最大値と最小値との差以上であれば(ステップS33、YES)、累積値判定器22は反転値を選択する。そして反転値を選択した旨の情報を、エンコードIDとしてエンコーダ21及びECCエンコーダ23へ出力する(ステップS35)。すなわち、レギュラーセルアレイ15には反転値が書き込まれる。
ステップS34、S35の後、累積値判定器22はステップ28の処理に進む。
次に、上記した図4、図5の処理について、具体例を用いて以下説明する。図6は、累積値判定器22において用いられる各種信号を示すダイアグラムである。図6では、一例として1ページのサイズが4ビットである場合について示している。図6において、「入力番号」は、あるメモリブロック14に書き込まれる複数のページデータの入力順序を示す。「入力値」は、各入力番号において外部からエンコーダ21へ入力される入力データのことである。「累積値(加算結果)」は、入力番号1については累積値を示し、入力番号2以降では、ステップS31で得られた加算結果を示す。「判定」は、ステップS23、S27、S30、S34、S35において、非反転値と反転値とのいずれを選択したかを示し、○印が選択されたことを示し、×印が非選択であることを示す。エンコードIDは、非反転値が選択された際に“0”となり、反転値が選択された際に“1”となる。なお、入力データ、非反転値、及び反転値は2進数で示し、累積値は10進数で示している。
まず初めに、エンコーダに最初の入力データ“1000”が入力される。この場合の非反転値及び反転値はそれぞれ“1000”、“0111”である。メモリブロック14に書き込まれる最初のデータであるから(ステップS22、YES)、非反転値と反転値とのうち、値が“1”であるビットの多い方、すなわち反転値“0111”を累積値判定器22は選択する(ステップS23)。そして累積値は“0111”となり、エンコードIDとして“1”がエンコーダ21及びECCエンコーダ23に通知される(ステップS24)。
次に、エンコーダに入力データ“1100”が入力される。この場合の非反転値及び反転値はそれぞれ“1100”、“0011”である。すると、最初のデータで無く(ステップS22、NO)、非反転値の全ビットが“0”では無く(ステップS26、NO)、更に非反転値の全ビットが“1”でも無い(ステップS29、NO)ので、累積値判定器22は、累積値の各桁と、非反転値及び反転値の各ビットとを加算する(ステップS31)。すると、この時点での累積値は“0111”であるので、累積値と非反転値“1100”との加算結果は、“1211”となる。また累積値と反転値“0011”との加算結果は、“0122”となる。すると、累積値と非反転値との加算結果における各桁の最大値は“2”であり、最小値は“1”であるから、最大値と最小値との差は“1”である。また、累積値と反転値との加算結果における各桁の最大値は“2”であり、最小値は“0”であるから、最大値と最小値との差は“2”である。従って、非反転値についての加算結果における最大値と最小値との差“1”は、反転値についての加算結果における最大値と最小値との差“2”よりも小さい(ステップS33、NO)。従って、累積値判定器22は非反転値“1100”を選択し、エンコードIDを“0”とする。そして累積値判定器22は、反転値についての加算結果“1211”を、新たな累積値として保持する(ステップS28)。なお図6において、入力番号“2”以降は斜線を付した加算結果が新たな累積値となる。
以下、入力番号“3”、“4”については入力番号“2”の場合と同様の処理が行われる。
次に、入力番号“5”について説明する。5番目の入力データは“0000”である。この場合の非反転値及び反転値はそれぞれ“0000”、“1111”である。すると、最初のデータで無く(ステップS22、NO)、非反転値の全ビットが“0”であるので(ステップS26、YES)、累積値判定器22は反転値“1111”を選択する(ステップS27)。すると、この時点での累積値は“2322”であるので、累積値“2322”と反転値“1111”との加算結果“3433”が新たな累積値となる(ステップS28)。
以下、入力番号“6”、“7”については入力番号“2”の場合と同様の処理が行われる。
次に入力番号“8”について説明する。8番目の入力データは“0011”である。この場合の非反転値及び反転値はそれぞれ“0011”、“1100”である。すると累積値判定器22は、累積値の各桁と、非反転値及び反転値の各ビットとを加算する(ステップS31)。この時点での累積値は“4554”であるので、累積値と非反転値“0011”との加算結果は、“4565”となる。また累積値と反転値“1100”との加算結果は、“5654”となる。すると、累積値と非反転値との加算結果における各ビットの最大値は“6”であり、最小値は“5”であるから、最大値と最小値との差は“1”である。また、累積値と反転値との加算結果における各桁の最大値は“6”であり、最小値は“5”であるから、最大値と最小値との差は“1”である。従って、非反転値についての加算結果における最大値と最小値との差“1”は、反転値についての加算結果における最大値と最小値との差“1”に等しい(ステップS33、YES)。従って、累積値判定器22は反転値“1100”を選択し、エンコードIDを“1”とする。そして累積値判定器22は、反転値についての加算結果“5654”を、新たな累積値として保持する(ステップS28)。
以下、入力番号“9”については入力番号“8”の場合と同様の処理が行われ、入力番号“10”、“11”については入力番号“2”の場合と同様の処理が行われる。
上記のように、この発明の第1の実施形態に係るメモリシステムであると、下記(1)、(2)の効果が得られる。
(1)半導体記憶装置の動作信頼性を向上出来る(その1)。
本実施形態に係る構成であると、メモリコントローラ20は累積値判定器22を備えており、ビット線毎に書き込み済みデータを累積して保持している。そして、この累積値に従って、入力データをそのまま書き込むか、または反転して書き込むかを決定している。従って、NAND型フラッシュメモリの動作信頼性を向上出来る。本効果について、以下説明する。
例えば背景技術で説明した特許文献1記載のNAND型フラッシュメモリであると、メモリセルアレイ全体としてのチャージ量は平均化される。しかし、チャージ量が平均化されるのはメモリセルアレイ全体としてにすぎず、ビット線間のチャージ量のバラツキは考慮されていない。従って、場合によってはいずれかのビット線にチャージが集中することも起こりうる。チャージがあるビット線に集中すると、そのビット線ではデータの誤りが発生し易い。すると、ECC機能を搭載したNAND型フラッシュメモリでは、最も誤りの発生し易いビット線で救済出来るようにECCを行わなければならないから、チャージがあるビット線に集中するような場合には、ECC効率が低下するという問題があった。
しかし、本実施形態に係る構成では、過去にメモリセルトランジスタMTに書き込んだデータを、ビット線毎に累積している。そして、新たに書き込むべきデータの非反転値及び反転値と累積値とを加算し、その加算結果における各桁の最大値と最小値との差が小さくなるものを選んでいる。つまり、加算結果の各桁は、各ビット線におけるトータルの“1”データの数を示している。従って、加算結果の各桁の最大値と最小値が大きいほど、ビット線間においてチャージのばらつきが大きいことを示している。そこで、各桁の最大値と最小値との差がより小さくなるように、つまりビット線間におけるチャージのばらつきが小さくなるように、非反転値と反転値とのいずれかを選択して、メモリセルトランジスタMTへ書き込んでいる。
従って、ビット線間において、“1”データを保持するメモリセルトランジスタMTの数が平均化される。つまり、あるビット線にチャージが集中することを防止出来る。そのため、データの誤りの発生確率がビット線間で均等化され、ECCの効率を向上出来る。これにより、NAND型フラッシュメモリ10の動作信頼性を向上出来る。
(2)半導体記憶装置の動作信頼性を向上出来る(その2)。
近年のNAND型フラッシュメモリの大容量化の要請はますます増加している。その反面、書き込み及び読み出しデータの信頼性は徐々に悪くなる傾向にある。その理由として、例えばNAND型フラッシュメモリでは、トンネル電流を利用したデータ記録方式であることから、ゲート絶縁膜(トンネル酸化膜)の膜厚を一定値以下に薄くする事が出来ない。にもかかわらず、メモリセルトランジスタMTのゲート長、ゲート幅など横方向のサイズを縮小してきたため、いわゆるGIDL現象によるデータリテンション(記録データ消失)が顕著になってきたことが挙げられる。
また、ビット当たりの面積を削減するために、NANDストリング内のメモリセルトランジスタ数が大きくなってきている。その結果、NANDストリングに流せる電流が小さくなり、データを読み出してセンスする際に必要な電圧変動や電流値がますます小さくなることも挙げられる。
更に、NANDストリング内のメモリセルトランジスタ数が大きくなることは、リードディスターブ(Read Disturb:以下RDと略記する)に対する耐性や、プログラムディスターブ(以下PDと略記する)に対する耐性を悪化させる傾向がある。これらRDおよびPDの悪化は、NANDストリング内で直列に連続するメモリセルトランジスタがオンする場合において、その連続するメモリセルトランジスタ数が大きければ大きいほど顕著となる傾向がある。これは次のような理由による。
すなわち、各メモリセルトランジスタMTには、例えばメモリセルトランジスタのソースまたはドレイン領域と、メモリセルトランジスタが形成されるウェル領域との間のpn接合によって形成された寄生容量が存在する。すると、カラム方向で連続する複数のメモリセルトランジスタMTがオン状態となると、NANDストリング内には非常に大きな寄生容量が発生する。つまり、オン状態とされたメモリセルトランジスタの寄生容量が並列接続されて、巨大な寄生容量が形成される。そしてこの寄生容量が、NAND型フラッシュメモリに対して様々な悪影響を及ぼす。例えば、あるワード線WLに読み出し電圧が印加された時に、寄生容量から供給された大量の電荷(電流)が、ワード線WLのゲート電圧で加速されてホットエレクトロンを発生する。そして、発生されたホットエレクトロンが、ワード線WLに接続されたメモリセルトランジスタのトンネル酸化膜を超えて、このメモリセルトランジスタの記録データを破壊する。これが、いわゆるGIDL現象である。更に、連続した多くのメモリセルトランジスタがオンとなる場合には、RDのみならずPDも起こりやすいことが判明している。
しかしながら、本実施形態に係る構成であると、入力データを非反転または反転させてデータを書き込んでいる。つまり、入力データにおいて、あるビット線に“0”データが連続するような場合であっても、累積値判定器22の判定結果によっては、その反転値である“1”データが書き込まれることとなり、“0”データが同一カラム上に連続することを防止出来る。従って、NANDストリング内において連続した多くのメモリセルトランジスタが同時にオンとなることを防止し出来る。その結果、上記したRDやPDの問題を緩和し、NAND型フラッシュメモリの動作信頼性を向上出来る。
なお、上記第1の実施形態では、ステップS31〜S33において、累積値と非反転値及び反転値との加算結果における、各桁の最大値と最小値との差の大小関係を判定していた。しかし、この判定処理は、必ずしも加算結果の各桁の最大と最小値をもとにして行う必要はなく、例えば標準偏差を用いて行っても良い。図7は、このような場合における累積値判定器22の処理の流れを示すフローチャートである。
図示するように、ステップS29において「非反転値の全ビットが“1”」なる条件を満たさない場合(ステップS29、NO)、累積値判定器22は、累積値の各桁と、非反転値及び反転値の各ビットを加算する。次に、非反転値及び反転値についての加算結果の各々について、標準偏差を算出する(ステップS40)。次に、非反転値及び反転値についての加算結果の標準偏差の大小関係を判定する(ステップS41)。そして、累積値と非反転値との加算結果の標準偏差が、累積値と反転値との加算結果の標準偏差よりも小さい場合(ステップS42、NO)には、ステップS34に進む。逆に累積値と非反転値との加算結果の標準偏差が、累積値と反転値との加算結果の標準偏差以上である場合(ステップS42、YES)には、ステップS35に進む。本方法によっても、上記説明した(1)及び(2)の効果が得られる。
[第2の実施形態]
次に、この発明の第2の実施形態に係る半導体装置について説明する。本実施形態は、上記第1の実施形態において、累積値の全ての桁が“1”以上である場合には、各桁の値をそれぞれ“1”減ずるものである。メモリシステム1の構成や、エンコーダ21の動作等は上記第1の実施形態と同様であるので、以下では第1の実施形態と異なる点についてのみ説明する。
図8は、本実施形態に係る累積値判定器22の動作を示すフローチャートである。図示するように、第1の実施形態で説明した図5と異なる点は、ステップS24、S28の後に、ステップS50の処理を行う点にある。ステップS50では、ステップS24、S28で得られた累積値の全ての桁が“1”以上であるか否かを判定し、全ての桁が“1”以上である場合には、全ての桁のそれぞれの値から“1”を減算し、これを新たな累積値として累積値判定器22は保持する。
次に、上記図8の処理について、具体例を用いて以下説明する。図9は、累積値判定器22において用いられる各種信号を示すダイアグラムであり、図6と同様の情報を示している。
図示するように、入力番号“2”において、累積値“0111”と非反転値“1100”との加算結果は“1211”であり、反転値“0011”との加算結果は“0122”である。すると、ステップS28において、累積値判定器22は加算結果“1211”を累積値として保持する。すると、累積値“1211”は全ての桁が“1”以上であるから、累積値判定器22はステップS50において、累積値“1211”の各桁につき“1”を減じた“0100”を新たな累積値として保持する。
次の入力番号“3”においては、ステップS50で得られた累積値“0100”と、非反転値“0110”及び反転値“1001”との加算が行われる。すると、非反転値についての加算結果は“0210”であり、反転値についての加算結果は“1101”となる。従って、累積値判定器22は加算結果“1101”を累積値として保持する。この場合には、累積値の2桁目が“0”であるから、ステップS50において各ビットから“1”を減ずることなく、加算結果“1101”をそのまま累積値として保持する。
以下、同様である。
以上のように、この発明の第2の実施形態に係るメモリシステム1であると、上記第1の実施形態で説明した(1)、(2)の効果に加えて、下記(3)の効果が得られる。
(3)メモリコントローラ20のサイズを削減出来る(その1)。
累積値が単純に過去に書き込まれたデータを累積したものである場合、その最大値は、当該累積値が計数しているNANDストリング内のワード線の本数に等しくなる。例えばワード線が32本ある場合には、累積値の各桁の値は最大で“32”となる。すると、累積値の各桁は2進数で5ビットのデータとなり、累積値の各桁あたり、5段のレジスタが必要となる。
これに対して本実施形態に係る構成であると、累積値の各桁の値が“1”を超えた場合には、全ての桁から“1”を減じている。これにより、累積値の各桁が、取り得る最大値(ワード線本数が32本の場合には“32”)となる可能性が低減される。従って、累積値の各桁あたりのレジスタ数を削減し、メモリコントローラ20のサイズを削減出来る。
また、累積値の絶対値自体には意味は無く、累積値のビット間の値の差が分かれば十分である。なぜなら、累積値の各桁の値の差が、ビット線間のチャージの差を意味しているからである。従って、本実施形態のように累積値の各桁の値を“1”減じたとしても、ビット線間でチャージを平均化することに何らの影響は与え無い。
なお、本実施形態においても、ステップS31〜S33の工程を、図7を用いて説明したステップS40〜S42に置き換えることが可能である。
[第3の実施形態]
次に、この発明の第3の実施形態に係る半導体装置について説明する。本実施形態は、上記第2の実施形態において、加算結果のいずれかの桁においてオーバーフロー(桁あふれ)が生じる場合には、その桁の値を、その桁で計数可能な最大値の“2”の商に置き換え、その他の各桁は保持する値の“2”の商に置き換えるものである。メモリシステム1の構成や、エンコーダ21の動作等は上記第1、第2の実施形態と同様であるので、以下では第1、第2の実施形態と異なる点についてのみ説明する。
図10は、本実施形態に係る累積値判定器22の動作を示すフローチャートである。図示するように、第2の実施形態で説明した図8と異なる点は、ステップS31をステップS60〜S63に置き換えた点にある。すなわち、ステップS29において、「非反転値の全ビットが“1”」なる条件を満たさない場合(ステップS29、NO)、累積値判定部22は累積値の各桁と、非反転値及び反転値の各ビットとの加算を行う(ステップS60)。そして、ステップS60で得られた加算結果のいずれかの桁にオーバーフローが生じたか否かを判定する。オーバーフローが生じない場合には(ステップS61、NO)、ステップS32の処理に進む。すなわち、この場合の処理は上記第1、第2の実施形態と同様である。
ステップS61においてオーバーフローが生じる場合には(ステップS61、YES)、累積値判定部22は、オーバーフローを起こした桁を、当該桁の取り得る最大値とし、更にすべての桁を1ビット右シフトさせた値を、新たな加算結果とする(ステップS62)。例えば、累積値のある桁の最大値が“7”であったとする。この桁の値が例えば“8”となってオーバーフローを起こす場合には、この桁の値をまず最大値の“7”(2進数の“111”)とする。その上で、1ビット右シフトを行う。つまり、“111”→“011”(10進数で“3”)とする。この結果得られた“3”を、当該桁についての加算結果とする。言い換えれば、オーバーフローを起こす桁を、当該桁の取り得る最大値“7”を、“2”で割った商“3”に置き換える。なお割った余りは切り捨てる。他の各桁についても保持する値に対して同様の処理を行う。
そして、ステップS62で得られた加算結果を用いて、非反転値及び反転値についての加算結果における、各桁の最大値と最小値との差を算出して(ステップS63)、ステップS32に進む。以降の処理は、上記第1、第2の実施形態と同様である。
以上のように、この発明の第3の実施形態に係るメモリシステム1であると、上記第1の実施形態で説明した(1)、(2)の効果、及び第2の実施形態で説明した(3)の効果に加えて、下記(4)の効果が得られる。
(4)メモリコントローラ20のサイズを削減出来る(その2)。
図11は、累積値判定部22において累積値を保持する累積値保持部のブロック図である。なお図11では、累積値が4桁、つまりビット線本数が4本である場合について示している。
図示するように累積値保持部は、4つの保持部40〜43を備えている。保持部40〜43の各々は、4桁の累積値の各桁の値を保持する。そして保持部40〜43の各々は、2つのレジスタ44、45を備えており、各レジスタ44、45が2進数1ビットのデータを保持する。図11では、累積値として“3210”を保持している様子を示している。すなわち、保持部40のレジスタ44、45はそれぞれ“0”、“0”を保持し、保持部41のレジスタ44、45はそれぞれ“0”、“1”を保持し、保持部42のレジスタ44、45はそれぞれ“1”、“0”を保持し、保持部43のレジスタ44、45はそれぞれ“1”、“1”を保持している。
この状態において、更に“1000”を加算する場合を考える。保持部43には“1”が加算されるため、本来であれば加算結果は“3”+“1”=“4”となるべきであるが、保持部43は最大で“3”までしか計数できない。つまりオーバーフローを起こしてしまい、正確な加算が困難となる。
しかしながら本実施形態であると、オーバーフローを起こす場合のルールを予め決めている。具体的には、当該保持部43が保持可能な最大値の“2”の商を、オーバーフローを起こした際に保持すべき値とする。従って図11の場合には、“3”を“2”で割った商である“1”を保持する。換言すれば、保持部43に含まれる全レジスタ44、45の値を“1”として、この値を1ビット右シフトさせる。保持部40、41、42については保持する値を1ビット右シフトさせ、それぞれ“0”、“0”、“1”となり、新たな累積値として、“1100”を保持する。
これにより、オーバーフローを起こすような場合であっても、正確な処理が可能となる。本処理は、特に第2の実施形態と組み合わせる場合に顕著な効果となる。つまり、第2の実施形態では、累積値の各桁から“1”を減ずることで、累積値を保持するレジスタ数を削減する。しかしこの場合、累積値の各桁が達しうる最大値は経験的に求めることになる。従って、レジスタ数を減らしすぎると累積値の各桁においてオーバーフローが発生するおそれがある。しかしこのような場合であっても、本実施形態のようにオーバーフロー時の対策を施すことで、レジスタ数を効果的に減らしつつ、正確な処理が可能となる。
また、NAND型フラッシュメモリ10においては、データはソース側のセレクトゲート線SGSに近いメモリセルトランジスタMT(ワード線WL0に接続されたメモリセルトランジスタMT)から順にデータが書き込まれる。従って、セレクトゲート線SGSに近いメモリセルトランジスタMTほど、ビット線間のチャージ量をよりケアすべきである。この点、累積値のオーバーフローは書き込みの遅いメモリセルトランジスタMT、つまりドレイン側のセレクトゲート線SGDに近いメモリセルトランジスタMTへの書き込み時に生じ、ソース側のセレクトゲート線SGSに近いメモリセルトランジスタMTへの書き込み時には生じ難い。よって、オーバーフローが生じることで、累積値がビット線間のチャージ量の差を正確に表さなくなったとしても、その時点では、セレクトゲート線SGSに近いメモリセルトランジスタMTへの書き込みは終了しているはずなので、実際上、問題は発生しない。
なお、本実施形態においてもステップS63、S32の処理は、第1の実施形態で説明した図7のように標準偏差を用いて行っても良い。またステップS50の処理は必ずしも必要では無く、省略しても良い。
[第4の実施形態]
次に、この発明の第4の実施形態に係る半導体装置について説明する。本実施形態は、上記第1乃至第3の実施形態においてエンコーダ21を、疑似乱数発生器を用いて形成するものである。以下では、上記第1乃至第3の実施形態と異なる点についてのみ説明する。図12は、本実施形態に係るメモリコントローラ20の備えるエンコーダ21の構成を示すブロック図である。
図示するようにエンコーダ21は、第1疑似乱数発生器32、第2疑似乱数発生器33、XORゲート34、35、及びセレクタ36を備えている。
第1疑似乱数発生器32は、書き込みデータのアドレスの上位ビット(以下、上位アドレスと呼ぶ)を基にして疑似乱数を発生する。つまり、上位アドレスをスクランブル・シードとして疑似乱数を発生する。第2疑似乱数発生器33は、書き込みデータのアドレスの下位ビット(以下、下位アドレスと呼ぶ)を基にして疑似乱数を発生する。つまり、下位アドレスをスクランブル・シードとして疑似乱数を発生する。第1、第2疑似乱数発生器32、33は、共に同様の構成であって、スクランブル・シードが同じであれば、共に同じ疑似乱数を発生する。
XORゲート34は、第1疑似乱数発生器32で発生された疑似乱数と、入力データとの排他的論理和演算を行い、演算結果を第1スクランブルデータとして出力する。XORゲート35は、第2疑似乱数発生器33で発生された疑似乱数と、入力データとの排他的論理和演算を行い、演算結果を第2スクランブルデータとして出力する。
セレクタ36は、エンコードIDに従って、第1、第2スクランブルデータのいずれか一方を書き込みデータとして出力する。より具体的には、エンコードIDが“0”の場合には第1スクランブルデータを選択し、エンコードIDが“1”の場合には第2スクランブルデータを選択する。
図13は、読み出し用デコーダ24の構成を示すブロック図である。図示するように読み出し用デコーダ24は、セレクタ60、疑似乱数発生器61、及びXORゲート62を備えている。
セレクタ60は、エンコードIDに従って、上位アドレスと下位アドレスとのいずれか一方を選択する。より具体的には、エンコードIDが“0”の場合には上位アドレスを選択し、エンコードIDが“1”の場合には下位アドレスを選択する。疑似乱数発生器61は、エンコーダ21における第1、第2疑似乱数発生器32、33と同様の構成を有しており、セレクタ60で選択された上位アドレスと下位アドレスとのいずれか一方をスクランブル・シード(Scramble Seed)として疑似乱数を発生する。XORゲート62は、センスアンプ13でセンス・増幅された読み出しデータと、疑似乱数発生器61で発生された疑似乱数との排他的論理和演算を行う。そしてXORゲート62における演算結果が、解読されたデータとなる。
本実施形態に係るエンコーダ21の動作は、上記第1の実施形態において説明した図4のフローチャートにおいて、非反転値と反転値とを、それぞれ第1、第2スクランブルデータに置き換えたものである。
また、本実施形態に係る累積値判定器22の動作は、上記第1乃至第3の実施形態で説明した図5、図7、図8、図10のフローチャートにおいて、非反転値と反転値とを、それぞれ第1、第2スクランブルデータに置き換えたものである。
すなわち、入力データは第1、第2疑似乱数発生器32、33によって、それぞれ互いに異なる規則に従ってスクランブルされる。このようにして生成された第1、第2スクランブルデータが、書き込みデータとしてNAND型フラッシュメモリ10に書き込まれる。
累積値判定器22は、NAND型フラッシュメモリ10に書き込まれた第1、第2スクランブルデータを累積加算する。この累積値の各桁は、NAND型フラッシュメモリ10における各ビット線に対応する。そして累積値判定器22は、累積値の各桁と第1スクランブルデータの各ビットとを加算し、また累積値の各桁と第2スクランブルデータの各ビットとを加算する。更に、第1、第2スクランブルデータのうち、加算結果の各桁の最大値と最小値との差、または標準偏差がより小さいいずれか一方を選択する。
以上のように、この発明の第4の実施形態に係るメモリシステム1であると、上記第1乃至第3の実施形態で説明した(1)乃至(4)の効果に加えて、下記(5)の効果が得られる。
(5)半導体記憶装置の動作信頼性を向上出来る(その3)。
本実施形態に係るメモリシステム1であると、エンコーダ21は、第1、第2疑似乱数発生器32、33とXORゲート34、35を含むリニアフィードバックシフトレジスタ(Linear Feedback Shift Register)を備えている。そして、このリニアフィードバックシフトレジスタによって入力データをスクランブルして得られた第1、第2スクランブルデータのいずれか一方を、メモリセルトランジスタMTへ書き込んでいる。
つまり、NAND型フラッシュメモリ10に書き込まれるデータは、第1、第2スクランブルデータのいずれを選択するかによって、ビット線方向でランダム化(ランダマイズ)される。更に、疑似乱数を用いてスクランブルすることで、ページ内においてもランダマイズされる。言い換えれば、ワード線方向においてもランダマイズされる。
従って、ビット線方向だけでなく、ワード線方向にも同一データが連続することを防止出来る。よって、第1の実施形態において効果(2)として説明したように、RDやPDの問題を緩和し、NAND型フラッシュメモリの動作信頼性を向上出来る。
なお、本実施形態では、エンコーダ21が2つの疑似乱数発生器を備える場合について説明した。しかし、疑似乱数発生器の数は1つでも良い。この場合には、1つの疑似乱数発生器が、上位アドレス及び下位アドレスをスクランブル・シードに用いて2つの疑似乱数を発生し、これをレジスタに保持させる。そして、レジスタに保持された疑似乱数と入力データとの排他的論理和演算を行えば良い。
また、エンコーダ21は3つ以上のスクランブルデータを発生しても良い。この場合には、1つの疑似乱数発生器が3つ以上の乱数を発生しても良いし、3つ以上の疑似乱数発生器を設けても良い。
[第5の実施形態]
次に、この発明の第5の実施形態に係る半導体装置について説明する。本実施形態は、上記第1乃至第3の実施形態において、メモリセルトランジスタMTの各々が4値のデータを保持する場合に関するものである。以下では、上記第1乃至第3の実施形態と異なる点についてのみ説明する。
本実施形態に係るメモリセルトランジスタMTの閾値について、図14を用いて説明する。図14はメモリセルトランジスタMTの閾値分布を示すグラフであり、横軸が閾値電圧Vthを示し、縦軸がメモリセルの存在確率を示す。
図示するようにメモリセルMCは、閾値電圧Vthの低い順に“11”、“10”、“00”、“01”の4つのデータを保持出来る。“11”データを保持するメモリセルの閾値電圧Vthは、Vth<0Vである。“10”データを保持するメモリセルの閾値電圧Vthは、0V<Vth<Vth1である。“00”データを保持するメモリセルの閾値電圧Vthは、Vth1<Vth<Vth2である。“01”データを保持するメモリセルの閾値電圧Vthは、Vth2<Vth<Vth3である。
上記4値のデータのメモリセルMCへの書き込み方法について図15を用いて簡単に説明する。図15はメモリセルの閾値分布を示すグラフであり、書き込み時おけるメモリセルの閾値電圧Vthの変化の様子を示している。データは1ページに対して一括して書き込まれる。またデータの書き込みは、第1の書き込みと第2の書き込みとの2回に分けて行われる。
書き込みにあたって、メモリセルは消去状態にある。すなわち、メモリセルの閾値電圧Vthは負の値であり、“11”データを保持した状態である。その状態で、まず第1の書き込みを行う。書き込みデータ(第1の書き込みデータ)が“1”の場合には、浮遊ゲートに電子は注入されず、閾値電圧Vthは不変である。第1の書き込みデータが“0”の場合には、浮遊ゲートに電子が注入され、閾値電圧Vthは正の方向へ変化し、Vth1<Vth<Vth2となる。つまり、メモリセルは“00”を保持している時とほぼ同じ閾値となる。
次に第2の書き込みを行う。まず第1の書き込みデータが“1”であった場合について説明する。この場合において、第2の書き込みにおける書き込みデータ(第2の書き込みデータ)が“1”であった場合には、第2の書き込み時においても浮遊ゲートに電子は注入されず、閾値電圧Vthは負の値を維持する。その結果、メモリセルには“11”が書き込まれる。第2の書き込みデータが“0”の場合、浮遊ゲートに電子が注入される。その結果、閾値電圧Vthは負から正の方向へ変化し、約0V<Vth<Vth1となる。すなわち、メモリセルには“10”が書き込まれる。
次に第1の書き込みデータが“0”であった場合について説明する。この場合において、第2の書き込みデータが“0”である場合、第2の書き込み時には浮遊ゲートに電子が注入されない。よって、第1の書き込みの結果の値を維持する。すなわち、Vth1<Vth<Vth2であり、その結果メモリセルには“00”が書き込まれる。第2の書き込みデータが“1”の場合、更に浮遊ゲートに電子が注入される。その結果、閾値電圧Vthは更に正の方向へ変化し、Vth2<Vth<Vth3となる。すなわち、メモリセルには“01”が書き込まれる。
次に、本実施形態に係るメモリコントローラ20の備えるエンコーダ21の構成について図16を用いて説明する。図16は、エンコーダ21のブロック図である。図示するようにエンコーダ21は、第1の実施形態で説明した図3の構成において、更に第1符号化器37、第2符号化器38、及びメモリ39を備えている。
メモリ39は、符号化テーブル70を備えている。符号化テーブルの一例について図17を用いて説明する。図17は、符号化テーブルの概念図である。図示するように符号化テーブルは、入力データの非反転値及び反転値に対する累積用符号を保持する。累積用符号として“0”、“1”、“2”、“3”が、チャージ量の多い順に割り当てられる。つまり、非反転値または反転値が“01”の場合の累積用符号は“0”であり、非反転値または反転値が“00”の場合の累積用符号は“1”であり、非反転値または反転値が“10”の場合の累積用符号は“2”であり、非反転値または反転値が“11”の場合の累積用符号は“3”である。
第1符号化器37は、メモリ39内の符号化テーブル70に従って、非反転値を符号化して第1符号化データを生成し、累積値判定器22へ出力する。すなわち第1符号化器37は、非反転値が“01”、“00”、“10”、“11”である場合には、第1符号化データとしてそれぞれ“0”、“1”、“2”、“3”を出力する。
第2符号化器38は、メモリ39内の符号化テーブル70に従って、反転値を符号化して第2符号化データを生成し、累積値判定器22へ出力する。すなわち第2符号化器38は、反転値が“01”、“00”、“10”、“11”である場合には、第2符号化データとしてそれぞれ“0”、“1”、“2”、“3”を出力する。
その他の構成は、上記第1乃至第3の実施形態と同様であるので、説明は省略する。
次に、上記構成のエンコーダ21の動作について、図18を用いて説明する。図18は、本実施形態に係るエンコーダ21の動作の流れを示すフローチャートである。
図示するようにエンコーダ21は、まず外部からレギュラーセルアレイ15の1ページ分の入力データを受け付ける(ステップS10)。そしてエンコーダ21の第1符号化器37が、非反転値を符号化テーブル70に従って符号化し、その結果得られる第1符号化データを累積値判定器22へ通知する(ステップS70)。同時にエンコーダ21の第2符号化器38が、反転器30で得られた反転値を符号化テーブル70に従って符号化し、その結果得られる第2符号化データを累積値判定器22へ通知する(ステップS71)。その後、エンコーダ21は累積値判定器22からエンコードIDを受信する(ステップS13)。そして、エンコーダ21のセレクタ31が、エンコードIDに従って非反転値と反転値のいずれか一方を、書き込みデータとしてNAND型フラッシュメモリ10へ出力する(ステップS14)。その後、入力データが最終データである場合には(ステップS15、YES)、処理を終了し、最終データでなければ(ステップS15、NO)、ステップS10に戻る。
累積値判定器22の動作は、大まかには上記第1乃至第3の実施形態で説明した図5、図7、図8、及び図10のフローチャートにおいて、非反転値及び反転値を、それぞれ第1、第2符号化データに置き換えたものである。図19は、本実施形態に係る累積値判定器22の処理の流れを示すフローチャートである。
図示するように累積値判定器22は、まずエンコーダ21から第1符号化データを受け取り(ステップS90)、また第2符号化データを受け取る(ステップS91)。そして、受け取った第1、第2符号化データが当該メモリブロック14に対する最初の入力データに対応するものである場合には(ステップS92、YES)、第1、第2符号化データのうち、各桁の和の大きい方を選択する。各桁の和が同値である場合には第2符号化データを選択する。更にこの選択情報は、エンコードIDとしてエンコーダ21及びECCエンコーダ23へ出力される(ステップS93)。その結果、エンコーダ21から出力された書き込みデータがレギュラーセルアレイ15内に書き込まれ、書き込みデータに基づいて生成されたECCデータ及びエンコードIDがECCセルアレイ16内に書き込まれる。また累積値判定器22は、ステップS93で選択した第1、第2符号化データのいずれか一方を、累積値として保持する(ステップS94)。そして、ステップS93で選択されてメモリセルMCへ書き込まれたデータが、当該メモリセルブロック14に対する最終の書き込みデータであれば(ステップS95、YES)、処理は終了する。そうでなければ(ステップS95、NO)、ステップS90へ戻って処理を繰り返す。
上記ステップS92において、最初の入力でない場合には(ステップS92、NO)、累積値判定器22は次に、非反転値の値が全て同じで、且つその上位ビットが“0”であるか否かを判定する。非反転値が全て同じか否かの判定は、第1符号化データの全ビットが同じ値であるか否かを見ることで行うことが出来る。またその上位ビットが“0”であるか否かの判定は、累積値に第1、第2符号化データとば別に非反転値を入力して、これにより判定を行っても良いし、累積値判定器22が図17に示す対応関係に基づいて第1符号化データから判断しても良い。非反転値が全て同じで、且つその上位ビットが“0”である場合には(ステップS96、YES)、累積値判定器22は第2符号化データを選択し、その選択情報をエンコードIDとしてエンコーダ21及びECCエンコーダ23へ出力する(ステップS97)。従って、この場合にはレギュラーセルアレイ15には反転値が書き込まれる。そして累積値判定器22は、第1、第2符号化データのいずれか選択した方の各ビットと、自身が保持する累積値の各桁との加算結果を、新たな累積値として保持する(ステップS98)。すなわち、ステップS97の後、累積値判定器22にそれまで保持されていた累積値は、第2符号化データが更に加算された値に更新される。そしてステップS95に進む。
上記ステップS96の条件が満足されない場合には(ステップS96、NO)、累積値判定器22は次に、非反転値の値が全て同じで、且つその上位ビットが“1”であるか否かを判定する。非反転値が全て同じで、且つその上位ビットが“1”である場合には(ステップS99、YES)、累積値判定器22は第1符号化データを選択し、その選択情報をエンコードIDとしてエンコーダ21及びECCエンコーダ23へ出力する(ステップS100)。従って、この場合にはレギュラーセルアレイ15には非反転値が書き込まれる。その後、ステップS98の処理に進む。すなわち、ステップS100の後、累積値判定器22にそれまで保持されていた累積値は、第1符号化データが更に加算された値に更新される。そしてステップS95に進む。
上記ステップS99の条件を満たさない場合、つまり「非反転値の値が全て同じ」なる条件を満たさない場合には(ステップS99、NO)、ステップS101の処理に進む。ステップS101において累積値判定器22は、自身が保持する累積値の各桁と、ステップS90、S91で受け取った第1符号化データ及び第2符号化データの各ビットとを加算する。そして、第1符号化データ及び第2符号化データのそれぞれの加算結果における各桁の最大値と最小値との差を算出する(ステップS101)。引き続き累積値判定器22は、ステップS101で得られた第1符号化データ及び第2符号化データのそれぞれの加算結果について得られた差の大小関係を判定する(ステップS102)。そして、第1符号化データについての加算結果の最大値と最小値との差が、第2符号化データについての加算結果の最大値と最小値との差よりも小さければ(ステップS103、NO)、累積値判定器22は第1符号化データを選択する。そして第1符号化データを選択した旨の情報を、エンコードIDとしてエンコーダ21及びECCエンコーダ23へ出力する(ステップS104)。すなわち、レギュラーセルアレイ15には非反転値が書き込まれる。
逆にステップS102の結果、第1符号化データについての加算結果の最大値と最小値との差が、第2符号化データについての加算結果の最大値と最小値との差以上であれば(ステップS103、YES)、累積値判定器22は第2符号化データを選択する。そして第2符号化データを選択した旨の情報を、エンコードIDとしてエンコーダ21及びECCエンコーダ23へ出力する(ステップS105)。すなわち、レギュラーセルアレイ15には反転値が書き込まれる。
ステップS104、S105の後、累積値判定器22はステップS98の処理に進む。
上記処理の具体例について、図20を用いて説明する。図20は、累積値判定器22において用いられる各種信号を示すダイアグラムであり、図6と同様の情報を示しており、更に第1、第2符号化データについても示している。なお第1、第2符号化データ及び累積値に関しては、いずれかの桁の値が“10”以上となった場合には、各桁の間に「,」を表記した。
まず初めに、エンコーダ21に最初の入力データ“01”、“11”、“10”、“11”が入力される。この場合の反転値は“10”、“00”、“01”、“00”である。すると、第1符号化データは図17の規則に従って“0323”となり、第2符号化データは“2101”となる。メモリブロック14に書き込まれる最初のデータであるから(ステップS92、YES)、累積値判定器22はステップS93の処理に進む。すると、第1、第2符号化データのうち、第1符号化データの“0323”の各桁の和は“8”、第2符号化データの“2101”の各桁の和は“4”となり、各桁の和が大きい方、すなわち第1符号化データ“0323”を累積値判定器22は選択する(ステップS93)。そして累積値は“0323”となる(ステップS94)。
次に、エンコーダ21に入力データ“00”、“01”、“10”、“00”が入力される。この場合の反転値は“11”、“10”、“01”、“11”である。そして、第1、第2符号化データはそれぞれ、“1021”、“3203”となる。すると、最初のデータで無く(ステップS92、NO)、非反転値の全てが同じでもないので(ステップS96、NO、ステップS99、NO)、累積値判定器22は、累積値の各桁と、第1、第2符号化データの各ビットとを加算する(ステップS101)。すると、この時点での累積値は“0323”であるので、累積値と第1符号化データとの加算結果は“1344”となる。また累積値と第2符号化データとの加算結果は“3526”となる。すると、累積値と第1符号化データとの加算結果の各桁の最大値と最小値との差“3”は、累積値と第2符号化データとの加算結果の各桁の最大値と最小値との差“4”よりも小さい(ステップS103、NO)。従って、累積値判定器22は第1符号化データ“1344”を選択し、エンコードIDを“0”とする。そして累積値判定器22は、第1符号化データについての加算結果“1344”を、新たな累積値として保持する(ステップS98)。エンコードIDが“0”とされたことにより、エンコーダ21のセレクタ31は非反転値を選択し、非反転値“00”、“01”、“10”、“00”を書き込みデータとして出力する。
以下、入力番号“3”、“4”については入力番号“2”の場合と同様の処理が行われる。
次に、入力番号“5”について説明する。5番目の入力データは“11”、“11”、“11”、“11”である。この場合の反転値は“00”、“00”、“00”、“00”である。そして、第1、第2符号化データはそれぞれ“3333”、“1111”である。すると、最初のデータで無く(ステップS92、NO)、非反転値が全て同じであり、且つその上位ビットが“1”である(ステップS96、NO、ステップS99、YES)。従って、累積値判定器22は第1符号化データ“3333”を選択する(ステップS100)。すると、この時点での累積値は“7665”であるので、累積値“7665”と第1符号化データ“3333”との加算結果“10”、“9”、“9”、“8”が新たな累積値となる(ステップS98)。
次に入力番号“6”について説明する。6番目の入力データは“00”、“00”、“00”、“00”である。この場合の反転値は“11”、“11”、“11”、“11”である。そして、第1、第2符号化データはそれぞれ“1111”、“3333”である。すると、最初のデータで無く(ステップS92、NO)、非反転値が同じで、且つその上位ビットが“0”である(ステップS96、YES)ので、累積値判定器22は第2符号化データ“3333”を選択し、エンコードIDを“1”とする。そして累積値判定器22は、第2符号化データについての加算結果“13”、“12”、“12”、“11”を、新たな累積値として保持する(ステップS97)。エンコードIDが“1”とされたことにより、エンコーダ21のセレクタ31は反転値を選択し、反転値“11”、“11”、“11”、“11”を書き込みデータとして出力する。
上記のように、この発明の第5の実施形態に係るメモリシステムであると、多値データを第1、第2符号化器37、38によって、その多値データに対応したチャージ量に応じて符号化している。より具体的には、当該多値データを書き込んだ際に浮遊ゲートに注入されるチャージ量の少ない順番に、符号化の値を大きくしている(図17参照)。そして、この符号化データによって累積値を計算している。従って、多値データを保持可能なメモリセルトランジスタMTを備えたNAND型フラッシュメモリ10の場合であっても、上記第1の実施形態で説明した(1)及び(2)の効果が得られる。また、上記第2、第3の実施形態に係る構成を用いれば、同様にして(3)、(4)の効果が得られる。
なお、本実施形態は上記第4の実施形態と組み合わせることも可能である。図21は、この場合のエンコーダ21のブロック図である。図示するように、エンコーダ21は、上記第4の実施形態で説明した図12の構成において、更に第1符号化器37、第2符号化器38、及びメモリ39を備えている。そして第1、第2符号化器37、38は、XORゲート34、35からそれぞれ出力される第1、第2スクランブルデータを、符号化テーブル70に従って符号化して、その結果を第1、第2符号化データとして累積値判定器22へ出力する。この場合には、メモリ39内の符号化テーブル70は、第1、第2スクランブルデータと累積用符号との関係を保持する。本構成によれば、第4の実施形態で説明した(5)の効果が得られる。
[第6の実施形態]
次に、この発明の第6の実施形態に係る半導体装置について説明する。本実施形態は、上記第5の実施形態における別の符号化の方法に関するものである。以下では、第5の実施形態と異なる点についてのみ説明する。
図22は、本実施形態に係るエンコーダ21のメモリ39が備える符号化テーブル70の概念図である。図示するように、非反転値または反転値が“01”、“00”の場合の累積用符号は“0”であり、非反転値または反転値が“10”、“11”の場合の累積用符号は“1”である。つまり、非反転値及び反転値の上位ビットが第1、第2符号化データとなる。
次に、本実施形態に係るエンコーダ21の動作について、図23を用いて説明する。図23は、本実施形態に係るエンコーダ21の動作の流れを示すフローチャートである。
図示するようにエンコーダ21は、まず外部からレギュラーセルアレイ15の1ページ分の入力データを受け付ける(ステップS10)。そしてエンコーダ21の第1符号化器37が、符号化テーブル70に従って、非反転値の上位ビットを第1符号化データとして累積値判定器22へ通知する(ステップS80)。同時にエンコーダ21の第2符号化器38が、符号テーブル70に従って、反転器20で得られた反転値の上位ビットを第2符号化データとして累積値判定器22へ通知する(ステップS81)。その後はステップS13以下の処理を行う。累積値判定器22の動作は、上記第5の実施形態と同様である。
上記のように、この発明の第6の実施形態に係るメモリシステムであると、第5の実施形態と同様に、上記した(1)乃至(4)の効果が得られる。更に、下記(6)の効果が得られる。
(6)メモリコントローラ20のサイズを削減出来る(その3)。
本実施形態に係る構成であると、第1、第2符号化器37、38は非反転値及び反転値の上位ビットを第1、第2符号化データとして出力する。従って、入力データが2ビットデータであれば、第1、第2符号化データが取り得る値は“0”または“1”である。よって、上記第5の実施形態の場合に比べて累積値の値を小さく出来る。具体的には、上記第5の実施形態の場合、ワード線の本数が3本である場合に、累積値の各桁が取り得る最大値は(“3”×32本)=“96”である。これに対して本実施形態の場合には、累積値の各桁が取り得る最大値は(“1”×32本)=“32”となる。そのため、累積値を保持するレジスタサイズを小さく出来、メモリコントローラ20のサイズを削減出来る。
なお、上記ではエンコーダ21がメモリ39に符号化テーブル70を保持する場合について説明した。しかし、第1、第2符号化器37、38が非反転値及び反転値の上位ビットを取り出すことの出来る構成とすれば、特に符号化テーブル70は不要である。更に、上記第5の実施形態において図21と同様に、本実施形態においても非反転値及び反転値の代わりに第1、第2スクランブルデータを第1、第2符号化器37、38へ入力しても良い。
[第7の実施形態]
次に、この発明の第7の実施形態に係る半導体装置について説明する。本実施形態は、累積値によるビット線間のチャージ量の平均化を行わず、ページデータのワード線方向のランダマイズを行う構成に関する。
図24は、本実施形態に係るメモリシステム1のブロック図である。図示するように、本実施形態に係るメモリシステム1は、第1の実施形態で説明した図1の構成において、累積値判定器22を廃した構成を有する。NAND型フラッシュメモリ10の構成は第1の実施形態で説明した通りである。
本実施形態に係るエンコーダ21は、第4の実施形態で説明した図12の構成において、第2疑似乱数発生器33、XORゲート35、及びセレクタ36を廃した構成を有している。第1疑似乱数発生器32は、書き込みデータのアドレスをスクランブル・シードに用いて疑似乱数を発生する。この際、書き込みデータのアドレスの上位アドレスでも良いし下位アドレスでも良いし、書き込みデータのアドレスに関連するデータであれば限定されない。XORゲート34は、第1疑似乱数発生器32で発生された疑似乱数と入力データとの排他的論理和演算を行う。そして、XORゲート34で得られた演算結果が、スクランブルデータとしてNAND型フラッシュメモリ10へ書き込まれる。
ECCエンコーダ23は、XORゲート34から出力されるスクランブルデータを基にしてECCデータを生成する。
読み出し用デコーダ24は、第4の実施形態で説明した図13の構成において、セレクタ60を廃した構成を有している。疑似乱数発生器61は、エンコーダにおいて使用した書き込みデータのアドレスをスクランブル・シードに用いて疑似乱数を発生する。XORゲート62は、疑似乱数発生器61で発生された疑似乱数と読み出しデータとの排他的論理和演算を行う。そしてXORゲート62における演算結果が解読データとなる。
上記のように、この発明の第7の実施形態に係るメモリシステム1であると、下記(7)の効果が得られる。
(7)簡便な構成により、上記(1)及び(5)の効果が得られる。
本実施形態に係る構成であると、入力データは疑似乱数発生器32で発生された疑似乱数によりスクランブルされてNAND型フラッシュメモリ10へ書き込まれる。すなわち、書き込みデータはワード線方向においてランダマイズされる。従って、ワード線方向に沿って同一データが連続することを防止し、上記第4の実施形態で説明した(5)の効果が得られる。
また、入力データが疑似乱数によりスクランブルされることにより、ビット線間におけるチャージ量も平均化される。従って、上記第1の実施形態で説明した(1)の効果が得られる。勿論、チャージ量の平均化については、ビット線のチャージ量の累積値を基に書き込みデータを選択する第1の実施形態の方法の方が優れている。これに対して本実施形態では、累積値判定器22やエンコーダ21においてセレクタ31が不要である。従って、回路構成の簡略化が強く求められている場合には、本実施形態に係る構成を採用することが望ましい。なお、本実施形態の場合にはエンコードIDを使用しないので、ECCセルアレイ16においてビット線BL4313に接続されたメモリセルトランジスタMTも、ECCデータ保持用として用いることが可能である。
上記のように、この発明の第1乃至第6の実施形態に係る半導体装置であると、メモリコントローラ20の累積値判定器22が、各桁がビット線毎のチャージ量の累積結果である累積値を保持する。累積値の各桁の値が大きいほど、対応するビット線におけるチャージ量は小さく、各桁の値が小さいほどチャージ量は大きい。そして、累積値の桁間の差が小さくなるように、つまり平均化されるように、累積値判定器22は書き込みデータを選択する。その結果、ビット線間におけるチャージ量が平均化され、PDやRDの問題を解消し、半導体装置の動作信頼性を向上出来る。また第7の実施形態においても、書き込みデータをワード線方向でランダマイズすることで、同様の効果が得られる。
なお、上記実施形態ではエンコーダ21が非反転値及び反転値を出力する場合と、第1、第2スクランブルデータを出力する場合のそれぞれについて説明したが、これらを組み合わせることも可能である。図25は、その場合のエンコーダ21のブロック図である。
図示するように、エンコーダ21はデータ変換回路100、101及びセレクタ31を備えている。データ変換回路100は、第1の実施形態等で説明した反転器30を備え、入力データの反転値と非反転値とを出力する。データ変換回路101は、第4の実施形態等で説明したリニアフィードバックレジスタを備え、入力データを基にして第1、第2スクランブルデータを出力する。セレクタ31は、エンコードIDに従って、非反転値、反転値、及び第1、第2スクランブルデータのいずれかを選択する。
この場合の累積値判定器22は、累積値の各ビットと、反転値の各ビット、非反転値の各ビット、及び第1、第2スクランブルデータの各ビットとの加算を行う。そして、反転値、非反転値、及び第1、第2スクランブルデータのうち、加算結果の各桁の最大値と最小値との差がより小さくなるいずれかを選択する。このように、4つのデータを書き込み候補として、そのうちのいずれか最適なデータを選択しても良い。
従って、上記第1乃至第6の実施形態におけるエンコーダ21は、図26の構成に表現することも出来る。図26はエンコーダ21のブロック図である。図示するようにエンコーダ21は、例えばk個(kは1以上の自然数)の書き込みデータ候補生成回路102−1〜102−kとセレクタ31を備えている。書き込みデータ候補生成回路102−1〜102−kは、例えば上記第1の実施形態で説明した反転器30や、第4の実施形態で説明したリニアフィードバックレジスタである。そして、書き込みデータ候補生成回路102−1〜102−kによって、第1乃至第2k書き込みデータ候補が生成される。このデータ候補が、例えば非反転値、反転値、及び第1、第2スクランブルデータに相当する。そしてセレクタ31が、第1乃至第2k書き込みデータ候補のいずれかを、エンコードIDに従って書き込みデータとして選択する。
この場合、累積値判定器22は、累積値の各ビットと、第1乃至第2k書き込みデータ候補の各ビットとの加算を行う。そして、第1乃至第2k書き込みデータのうち、加算結果の各桁の最大値と最小値との差がより小さくなるいずれかを選択する。
また、上記実施形態は種々のNAND型フラッシュメモリデバイスに適用可能である。以下、上記第1乃至第7の実施形態をメモリカードに適用した場合について説明する。図27はメモリシステム1のブロック図である。
図示するようにメモリシステム1は、メモリカード110、メモリコントローラ20、及びホスト機器120を備えている。ホスト機器120は、バスインタフェース121を介して接続されるメモリコントローラ20に対しアクセスを行うためのハードウェアおよびソフトウェアを備えている。メモリコントローラ20は、上記第1乃至第7の実施形態で説明したように、エンコーダ21、累積値判定器22、ECCエンコーダ23、及び読み出し用デコーダ24を備え、更にラインバッファ25を備えている。
メモリカード110は、バスインタフェース122を介してメモリコントローラ20に接続される。メモリカード110は、上記第1の実施形態で説明したNAND型フラッシュメモリ10と、複数の信号ピン111を備えている。信号ピン111は、メモリコントローラ20と電気的に接続可能とされている。信号ピン111によって、メモリコントローラ20から電源や各種信号が与えられる。
上記構成において、バスインタフェース121、122は例えば8ビットのデータ線を有する。そして、1ページ(4096バイト)のデータを書き込む場合には、データは8ビットずつ4096回に分けて転送される。メモリコントローラ20のラインバッファ25は、この転送データをバッファリングするために用いられる。そして、ラインバッファでバッファリングされた1ページ分のデータが、エンコーダ21へ入力される。このように、上記第1乃至第7の実施形態で説明した処理は、メモリカード110の外部で行われても良い。
図28は、別のメモリカードの例を示すメモリシステム1のブロック図である。図示するようにメモリシステム1は、メモリカード130及びホスト機器120を備えている。ホスト機器120は、バスインタフェース123を介してメモリカード130に接続される。メモリカード130は、上記第1乃至第7の実施形態で説明したメモリコントローラ20、NAND型フラッシュメモリ10、及び複数の信号ピン131を備えている。信号ピン131には、ホスト機器120から電源や各種信号が与えられる。
本例の場合、上記第1乃至第7の実施形態で説明した処理や、ECCデータの生成は、メモリカード130内部にて行われる。そして、メモリコントローラ20とNAND型フラッシュメモリ10とを接続する内部バスによって、書き込みデータ及びECCデータがNAND型フラッシュメモリ10内のページバッファ12へ転送される。この転送も図27の場合と同様に8ビットずつ行われ、4096バイトの書き込みを行う場合には、書き込みデータは4096回に分けて転送される。
また、図27及び図28ではメモリカードの場合を例に説明したが、メモリカードに限らず、NAND型フラッシュメモリ全般に適用できる。また、NAND型フラッシュメモリに限らず、同様の問題を生じる他の半導体メモリ全般に適用可能である。
更に、上記実施形態では累積値を“1”データの累積結果として説明したが、逆に“0”データの累積結果であっても良い。つまり、累積値はその絶対値そのものには意味が無く、累積値の各桁の間でチャージ量の差が分かれば良い。また、上記第5の実施形態では、各メモリセルが2ビットのデータ(4値)を保持する場合について説明した。しかしながら、各メモリセルは3ビット(8値)以上のデータを保持する場合であっても良い。この場合でも、図19と同じ方法にて対応可能である。但し、図19におけるステップS96、S99の処理は、あくまでページデータが同一である場合に、メモリセルのチャージ量を低減するための処理である。従って、データが“0”であるか“1”であるかは特に問題では無く、入力データの非反転値と反転値のうち、よりチャージ量が少ない方を選択出来れば良い。このように、よりチャージ量が少ないデータを選択するという考え方はステップS93でも同様であるし、第1乃至第4の実施形態におけるステップS23、S26、S29も同様である。
なお、本願発明は上記実施形態に限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で種々に変形することが可能である。更に、上記実施形態には種々の段階の発明が含まれており、開示される複数の構成要件における適宜な組み合わせにより種々の発明が抽出されうる。例えば、実施形態に示される全構成要件からいくつかの構成要件が削除されても、発明が解決しようとする課題の欄で述べた課題が解決でき、発明の効果の欄で述べられている効果が得られる場合には、この構成要件が削除された構成が発明として抽出されうる。