(57)【要約】  可変抵抗素子が設けられた不揮発性メモリにおいて電圧降下の増大を抑制する。  メモリコントローラは、電圧降下量推定部および符号化部を具備する。このメモリコントローラにおいて電圧降下量推定部は、メモリセルまでの配線の配線抵抗と原データをメモリセルに保持させた際に前記メモリセルに生じるリーク電流とから電圧降下量を推定する。符号化部は、推定された電圧降下量が所定の閾値を超える場合には所定の符号化処理を原データに対して行う。
2017138235.tif 000002
【特許請求の範囲】
【請求項１】
メモリセルまでの配線の配線抵抗と原データを前記メモリセルに保持させた際に前記メモリセルに生じるリーク電流とから電圧降下量を推定する電圧降下量推定部と、
前記推定された電圧降下量が所定の閾値を超える場合には所定の符号化処理を前記原データに対して行う符号化部と
を具備するメモリコントローラ。
【請求項２】
前記原データは、複数の区間データを含み、
前記電圧降下量推定部は、前記複数の区間データのそれぞれにおける前記配線抵抗の代表値に応じた重み係数と前記複数の区間データのそれぞれにおけるリーク電流に応じた値とに基づいて前記電圧降下量を推定する
請求項１記載のメモリコントローラ。
【請求項３】
前記メモリセルが二次元格子状に配列されたメモリセルアレイと、
所定の方向に配列された前記メモリセルからなる行を駆動するロウドライバと、
前記所定の方向に垂直な方向に配列された前記メモリセルからなる列を駆動するカラムドライバと
をさらに具備し、
前記電圧降下量推定部は、前記ロウドライバまたは前記カラムドライバから前記メモリセルまでの前記配線の配線抵抗と前記リーク電流とから前記電圧降下量を推定する
請求項１記載のメモリコントローラ。
【請求項４】
前記メモリセルアレイにおいて所定の方向に配列されたメモリセルからなるブロックの位置を示すアドレスと前記所定の方向に垂直な方向に配列されたメモリセルからなるブロックの位置を示すアドレスとのいずれかをライトアドレスとして生成するアドレス生成部をさらに具備する
請求項３記載のメモリコントローラ。
【請求項５】
前記アドレス生成部は、ブロックサイズの合計が一定となる複数の前記ブロックの位置を示すアドレスをライトアドレスとして生成する
請求項４記載のメモリコントローラ。
【請求項６】
前記メモリセルアレイは、前記ロウドライバからの配線距離と前記カラムドライバからの配線距離とが所定距離を超えない推定不要領域と前記配線距離が前記所定距離を超える推定領域とに分割され、
前記電圧降下量推定部は、前記推定領域に前記原データを保持させる場合には前記電圧降下量を推定する
請求項４記載のメモリコントローラ。
【請求項７】
前記ロウドライバは、
奇数行を駆動する奇数ロウドライバと、
偶数行を駆動する偶数ロウドライバと
を備え、
前記電圧降下量推定部は、所定の推定領域内の前記奇数行に前記原データを保持させる場合には前記奇数ロウドライバからの前記配線の配線抵抗に基づいて前記電圧降下量を推定し、前記所定の推定領域内の前記偶数行に前記原データを保持させる場合には前記偶数ロウドライバからの前記配線の配線抵抗に基づいて前記電圧降下量を推定する
請求項６記載のメモリコントローラ。
【請求項８】
前記カラムドライバは、
奇数列を駆動する奇数カラムドライバと、
偶数列を駆動する偶数カラムドライバと
を備え、
前記電圧降下量推定部は、所定の推定領域内の前記奇数列に前記原データを保持させる場合には前記奇数カラムドライバからの前記配線の配線抵抗に基づいて前記電圧降下量を推定し、前記所定の推定領域内の前記偶数列に前記原データを保持させる場合には前記偶数カラムドライバからの前記配線の配線抵抗に基づいて前記電圧降下量を推定する
請求項６記載のメモリコントローラ。
【請求項９】
前記符号化部は、前記所定の符号化処理において非管理情報と当該非管理情報を復号するための管理情報とを出力する
請求項１記載のメモリコントローラ。
【請求項１０】
前記所定の符号化処理は、前記原データを反転する反転処理であり、
前記管理情報は、前記反転処理を行ったか否かを示す反転ビットを含む
請求項９記載のメモリコントローラ。
【請求項１１】
前記所定の符号化処理は、前記原データのビットの順序を入れ替える入替処理であり、
前記管理情報は、前記入替処理を行ったか否かを示す入替ビットを含む
請求項９記載のメモリコントローラ。
【請求項１２】
前記メモリセルは、複数のビットを保持する多値メモリセルであり、
前記符号化処理は、前記原データにおいて前記多値メモリセルに保持させる特定の値を前記特定の値と異なる値に置換する置換処理を含み、
前記管理情報は、前記置換処理を行ったか否かを示す置換ビットを含む
請求項９記載のメモリコントローラ。
【請求項１３】
前記符号化部は、前記非管理情報の誤りの有無を検出するためのパリティを生成する誤り検出訂正符号化処理と前記所定の符号化処理とを行う
請求項９記載のメモリコントローラ。
【請求項１４】
前記符号化部は、前記原データの誤りの有無を検出するためのパリティを生成して前記原データとともに前記電圧降下量推定部に供給する誤り検出訂正符号化処理と前記所定の符号化処理とを行い、
前記電圧降下量推定部は、前記配線抵抗と前記原データおよび前記パリティを前記メモリセルに保持させた際に前記メモリセルに生じるリーク電流とから電圧降下量を推定する
請求項１記載のメモリコントローラ。
【請求項１５】
二次元格子状に複数のメモリセルが配列されたメモリセルアレイにおいて所定の方向に配列されたメモリセルからなるブロックの位置を示すアドレスと前記所定の方向に垂直な方向に配列されたメモリセルからなるブロックの位置を示すアドレスとのいずれかをライトアドレスとして生成するアドレス生成部と、
原データを符号化して前記ライトアドレスに保持させるライトデータとして供給する符号化部と
を具備するメモリコントローラ。
【請求項１６】
メモリセルまでの配線の配線抵抗と原データを前記メモリセルに保持させた際に前記メモリセルに生じるリーク電流とから電圧降下量を推定する電圧降下量推定部と、
前記推定された電圧降下量が所定の閾値を超える場合には所定の符号化処理を前記原データに対して行ってライトデータを生成する符号化部と、
前記ライトデータに基づいて前記メモリセルアレイを駆動するドライバと
を具備する不揮発性メモリ。
【請求項１７】
メモリセルまでの配線の配線抵抗と原データを前記メモリセルに保持させた際に前記メモリセルに生じるリーク電流とから電圧降下量を推定する電圧降下量推定手順と、
前記推定された電圧降下量が所定の閾値を超える場合には所定の符号化処理を前記原データに対して行う符号化手順と
を具備するメモリコントローラの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、メモリコントローラ、不揮発性メモリおよびメモリコントローラの制御方法に関する。詳しくは、可変抵抗素子が設けられたメモリコントローラ、不揮発性メモリおよびメモリコントローラの制御方法に関する。
【背景技術】
【０００２】
近年の情報処理システムにおいては、補助記憶装置やストレージとして、不揮発性メモリ（ＮＶＭ：Non-Volatile memory）が用いられることがある。この不揮発性メモリは、大きなサイズを単位としたデータアクセスに対応したフラッシュメモリと、小さな単位での高速なランダムアクセスが可能な不揮発性ランダムアクセスメモリ（ＮＶＲＡＭ：Non-Volatile RAM）とに大別される。ここで、フラッシュメモリの代表例としては、ＮＡＮＤ型フラッシュメモリが挙げられる。一方、不揮発性ランダムアクセスメモリの例としては、ＲｅＲＡＭ（Resistive RAM）、ＰＣＲＡＭ（Phase-Change RAM）、ＭＲＡＭ（Magnetoresistive RAM）などが挙げられる。これらの中で、アクセス速度が高速であることなどから、ＲｅＲＡＭが注目されている。【０００３】
一般にＲｅＲＡＭでは、二次元格子状に配線されたカラム線とロウ線との交点のそれぞれに、可変抵抗素子を含むメモリセルが設けられる。ドライバは、ライトデータに基づいて書換え対象のメモリセルを選択し、カラム線とロウ線との間に電圧を印加して、選択したメモリセルの抵抗値を変化させる。このとき、ＲｅＲＡＭではメモリセルの抵抗値が小さいほどリーク電流が大きくなる。そこで、消費電力を低減するために、抵抗値の大きなメモリセルの個数が閾値を超えた場合にはデータを符号化（反転など）し、リーク電流の大きなメモリセル数が閾値を超えないようにするメモリコントローラが提案されている（例えば、特許文献１参照。）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００７−２９９４３６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上述の従来技術を適用した場合、例えば、低抵抗状態に「０」を割り当て、高抵抗状態に「１」を割り当てて、２進数で「１１１１１０００」のデータを書き込む際に、メモリコントローラが「１」（低抵抗状態）の個数を計数して閾値「４」と比較する。計数値が「４」より多いため、メモリコントローラは、データを反転して「０００００１１１」を書き込む。ここで、データの左端からｎ（ｎは０乃至７の整数）番目のビットに対応するメモリセルまでの配線抵抗を（ｎ＋１）×Ｒ０とする。また、「１」（低抵抗状態）のメモリセルのリーク電流をＩＬＥＡＫとし、「０」（高抵抗状態）のメモリセルのリーク電流を「０」とする。この場合に反転前のＩＲドロップは１５×ＩＬＥＡＫＲ０であるのに対し、反転後のＩＲドロップは、２１×ＩＬＥＡＫＲ０となる。【０００６】
このように、上述の従来技術では、反転により、リーク電流の少ない「０」のメモリセル数が多くなって消費電力が低減する一方で、ＩＲドロップは却って増大してしまう。このＩＲドロップの増大により、低電圧での動作が不安定になるという問題がある。これは、電源電圧がＩＲドロップにより降下しても降下後の値が一定の最低動作電圧を下回らないように、その電源電圧にある程度のマージンを持たせている場合、ＩＲドロップの増大により、そのマージンが小さくなってしまうためである。【０００７】
本技術はこのような状況に鑑みて生み出されたものであり、可変抵抗素子が設けられた不揮発性メモリにおいて電圧降下の増大を抑制することを目的とする。
【課題を解決するための手段】
【０００８】
本技術は、上述の問題点を解消するためになされたものであり、その第１の側面は、メモリセルまでの配線の配線抵抗と原データを上記メモリセルに保持させた際に上記メモリセルに生じるリーク電流とから電圧降下量を推定する電圧降下量推定部と、上記推定された電圧降下量が所定の閾値を超える場合には所定の符号化処理を上記原データに対して行う符号化部とを具備するメモリコントローラ、または、当該メモリコントローラの制御方法である。これにより、電圧降下量の推定値が閾値を超えた場合に所定の符号化処理が行われるという作用をもたらす。【０００９】
また、この第１の側面において、上記原データは、複数の区間データを含み、上記電圧降下量推定部は、上記複数の区間データのそれぞれにおける上記配線抵抗の代表値に応じた重み係数と上記複数の区間データのそれぞれにおけるリーク電流に応じた値とに基づいて上記電圧降下量を推定してもよい。これにより、複数の区間データのそれぞれにおける配線抵抗の代表値に応じた重み係数とリーク電流に応じた値とに基づいて電圧降下量が推定されるという作用をもたらす。【００１０】
また、この第１の側面において、上記メモリセルが二次元格子状に配列されたメモリセルアレイと、所定の方向に配列された上記メモリセルからなる行を駆動するロウドライバと、上記所定の方向に垂直な方向に配列された上記メモリセルからなる列を駆動するカラムドライバとをさらに具備し、上記電圧降下量推定部は、上記ロウドライバまたは上記カラムドライバから上記メモリセルまでの上記配線の配線抵抗と上記リーク電流とから上記電圧降下量を推定してもよい。これにより、ロウドライバまたはカラムドライバからの配線抵抗とリーク電流とから電圧降下量が推定されるという作用をもたらす。【００１１】
また、この第１の側面において、上記メモリセルアレイにおいて所定の方向に配列されたメモリセルからなるブロックの位置を示すアドレスと上記所定の方向に垂直な方向に配列されたメモリセルからなるブロックの位置を示すアドレスとのいずれかをライトアドレスとして生成するアドレス生成部をさらに具備してもよい。これにより、所定の方向および上記垂直な方向のいずれかの方向に配列されたメモリセルからなるブロックにデータが書き込まれるという作用をもたらす。【００１２】
また、この第１の側面において、上記アドレス生成部は、ブロックサイズの合計が一定となる複数の上記ブロックの位置を示すアドレスをライトアドレスとして生成してもよい。これにより、一定のアクセス単位ごとにデータが書き込まれるという作用をもたらす。【００１３】
また、この第１の側面において、上記メモリセルアレイは、上記ロウドライバからの配線距離と上記カラムドライバからの配線距離とが所定距離を超えない推定不要領域と上記配線距離が上記所定距離を超える推定領域とに分割され、上記電圧降下量推定部は、上記推定領域に上記原データを保持させる場合には上記電圧降下量を推定してもよい。これにより、推定不要領域において電圧降下量が推定されないという作用をもたらす。【００１４】
また、この第１の側面において、上記ロウドライバは、奇数行を駆動する奇数ロウドライバと、偶数行を駆動する偶数ロウドライバとを備え、上記電圧降下量推定部は、所定の推定領域内の上記奇数行に上記原データを保持させる場合には上記奇数ロウドライバからの上記配線の配線抵抗に基づいて上記電圧降下量を推定し、上記所定の推定領域内の上記偶数行に上記原データを保持させる場合には上記偶数ロウドライバからの上記配線の配線抵抗に基づいて上記電圧降下量を推定してもよい。これにより、奇数ロウドライバおよび偶数ロウドライバにより奇数行および偶数行が駆動されるという作用をもたらす。【００１５】
また、この第１の側面において、上記カラムドライバは、奇数列を駆動する奇数カラムドライバと、偶数列を駆動する偶数カラムドライバとを備え、上記電圧降下量推定部は、所定の推定領域内の上記奇数列に上記原データを保持させる場合には上記奇数カラムドライバからの上記配線の配線抵抗に基づいて上記電圧降下量を推定し、上記所定の推定領域内の上記偶数列に上記原データを保持させる場合には上記偶数カラムドライバからの上記配線の配線抵抗に基づいて上記電圧降下量を推定してもよい。これにより、奇数カラムドライバおよび偶数カラムドライバにより奇数列および偶数列が駆動されるという作用をもたらす。【００１６】
また、この第１の側面において、上記符号化部は、上記所定の符号化処理において非管理情報と当該非管理情報を復号するための管理情報とを出力してもよい。これにより、符号化において管理情報が生成されるという作用をもたらす。【００１７】
また、この第１の側面において、上記所定の符号化処理は、上記原データを反転する反転処理であり、上記管理情報は、上記反転処理を行ったか否かを示す反転ビットを含んでもよい。これにより、電圧降下量の推定値に基づいて反転処理が行われるという作用をもたらす。【００１８】
また、この第１の側面において、上記所定の符号化処理は、上記原データのビットの順序を入れ替える入替処理であり、上記管理情報は、上記入替処理を行ったか否かを示す入替ビットを含んでもよい。これにより、電圧降下量の推定値に基づいてビットの順序が入れ替えられるという作用をもたらす。【００１９】
また、この第１の側面において、上記メモリセルは、複数のビットを保持する多値メモリセルであり、上記符号化処理は、上記原データにおいて上記多値メモリセルに保持させる特定の値を上記特定の値と異なる値に置換する置換処理を含み、上記管理情報は、上記置換処理を行ったか否かを示す置換ビットを含んでもよい。これにより、電圧降下量の推定値に基づいて置換処理が行われるという作用をもたらす。【００２０】
また、この第１の側面において、上記符号化部は、上記非管理情報の誤りの有無を検出するためのパリティを生成する誤り検出訂正符号化処理と上記所定の符号化処理とを行ってもよい。これにより、誤り検出訂正符号化処理がさらに実行されるという作用をもたらす。【００２１】
また、この第１の側面において、上記符号化部は、上記原データの誤りの有無を検出するためのパリティを生成して上記原データとともに上記電圧降下量推定部に供給する誤り検出訂正符号化処理と上記所定の符号化処理とを行い、上記電圧降下量推定部は、上記配線抵抗と上記原データおよび上記パリティを上記メモリセルに保持させた際に上記メモリセルに生じるリーク電流とから電圧降下量を推定してもよい。これにより、誤り検出訂正符号化処理の後に所定の符号化処理が行われるという作用をもたらす。【００２２】
また、本技術の第２の側面は、二次元格子状に複数のメモリセルが配列されたメモリセルアレイにおいて所定の方向に配列されたメモリセルからなるブロックの位置を示すアドレスと上記所定の方向に垂直な方向に配列されたメモリセルからなるブロックの位置を示すアドレスとのいずれかをライトアドレスとして生成するアドレス生成部と、原データを符号化して上記ライトアドレスに保持させるライトデータとして供給する符号化部とを具備するメモリコントローラである。これにより、所定の方向および上記垂直な方向のいずれかの方向に配列された所定数のメモリセルにデータが書き込まれるという作用をもたらす。【００２３】
また、本技術の第３の側面は、メモリセルまでの配線の配線抵抗と原データを前記メモリセルに保持させた際に前記メモリセルに生じるリーク電流とから電圧降下量を推定する電圧降下量推定部と、前記推定された電圧降下量が所定の閾値を超える場合には所定の符号化処理を前記原データに対して行ってライトデータを生成する符号化部と、前記ライトデータに基づいて前記メモリセルアレイを駆動するドライバとを具備する不揮発性メモリである。これにより、電圧降下量の推定値が閾値を超えた場合に所定の符号化処理が行われたライトデータに基づいてメモリセルアレイが駆動されるという作用をもたらす。
【発明の効果】
【００２４】
本技術によれば、可変抵抗素子が設けられた不揮発性メモリにおいて電圧降下の増大を抑制することができるという優れた効果を奏し得る。なお、ここに記載された効果は必ずしも限定されるものではなく、本開示中に記載されたいずれかの効果であってもよい。
【図面の簡単な説明】
【００２５】
【図１】本技術の第１の実施の形態におけるメモリシステムの一構成例を示す全体図である。
【図２】本技術の第１の実施の形態におけるメモリコントローラの一構成例を示すブロック図である。
【図３】本技術の第１の実施の形態におけるメモリコントローラの機能構成例を示すブロック図である。
【図４】本技術の第１の実施の形態における電圧降下量推定部の一構成例を示すブロック図である。
【図５】本技術の第１の実施の形態における符号化部の一構成例を示すブロック図である。
【図６】本技術の第１の実施の形態における復号部の一構成例を示すブロック図である。
【図７】本技術の第１の実施の形態における不揮発性メモリの一構成例を示すブロック図である。
【図８】本技術の第１の実施の形態におけるＭＡＵ配置部の一構成例を示すブロック図である。
【図９】本技術の第１の実施の形態におけるメモリアレイユニットの一構成例を示すブロック図である。
【図１０】本技術の第１の実施の形態におけるメモリセルアレイの斜視図である。
【図１１】本技術の第１の実施の形態におけるメモリセルの一構成例を示す回路図である。
【図１２】本技術の第１の実施の形態における可変抵抗素子の抵抗分布の一例を示す図である。
【図１３】本技術の第１の実施の形態における符号化前後のデータの一例を示す図である。
【図１４】比較例における符号化前後のデータの一例を示す図である。
【図１５】本技術の第１の実施の形態におけるメモリコントローラの動作の一例を示すフローチャートである。
【図１６】本技術の第１の実施の形態におけるライト処理の一例を示すフローチャートである。
【図１７】本技術の第１の実施の形態におけるリード処理の一例を示すフローチャートである。
【図１８】本技術の第１の実施の形態の第１の変形例におけるメモリセルアレイの斜視図である。
【図１９】本技術の第１の実施の形態の第２の変形例における不揮発性メモリの一構成例を示すブロック図である。
【図２０】本技術の第１の実施の形態の第２の変形例におけるメモリユニットの一構成例を示すブロック図である。
【図２１】本技術の第２の実施の形態における電圧降下量推定部の一構成例を示すブロック図である。
【図２２】本技術の第３の実施の形態におけるメモリセルアレイ内の領域の一例を示す図である。
【図２３】本技術の第４の実施の形態におけるメモリアレイユニットの一構成例を示すブロック図である。
【図２４】本技術の第４の実施の形態におけるメモリセルアレイ内の領域の一例を示す図である。
【図２５】本技術の第５の実施の形態におけるメモリアレイユニットの一構成例を示すブロック図である。
【図２６】本技術の第５の実施の形態におけるメモリセルアレイ内の領域の一例を示す図である。
【図２７】本技術の第６の実施の形態におけるメモリコントローラの機能構成例を示すブロック図である。
【図２８】本技術の第６の実施の形態におけるメモリ制御部の一構成例を示すブロック図である。
【図２９】本技術の第７の実施の形態における符号化部の一構成例を示すブロック図である。
【図３０】本技術の第７の実施の形態における復号部の一構成例を示すブロック図である。
【図３１】本技術の第７の実施の形態における符号化前後のデータの一例を示す図である。
【図３２】本技術の第８の実施の形態における可変抵抗素子の抵抗分布の一例を示す図である。
【図３３】本技術の第８の実施の形態における符号化部の一構成例を示すブロック図である。
【図３４】本技術の第８の実施の形態における復号部の一構成例を示すブロック図である。
【図３５】本技術の第８の実施の形態における符号化前後のデータの一例を示す図である。
【発明を実施するための形態】
【００２６】
以下、本技術を実施するための形態（以下、実施の形態と称する）について説明する。説明は以下の順序により行う。
１．第１の実施の形態（電圧降下量を推定して原データを反転する例）
２．第２の実施の形態（区間データ毎の重み係数により電圧降下量を推定して原データを反転する例）
３．第３の実施の形態（行方向または列方向の電圧降下量を推定して原データを反転する例）
４．第４の実施の形態（ロウドライバを２つ設け、電圧降下量を推定して原データを反転する例）
５．第５の実施の形態（カラムドライバを２つ設け、電圧降下量を推定して原データを反転する例）
６．第６の実施の形態（ＥＣＣ符号化後に電圧降下量を推定して原データを反転する例）
７．第７の実施の形態（電圧降下量を推定して原データのビットの順序を入れ替える例）
８．第８の実施の形態（電圧降下量を推定して原データに対して置換処理を行う例）
【００２７】
＜１．第１の実施の形態＞
［メモリシステムの構成例］
図１は、第１の実施の形態におけるメモリシステムの一構成例を示す全体図である。このメモリシステムは、ホストコンピュータ１００およびストレージ２００を備える。
【００２８】
ホストコンピュータ１００は、メモリシステム全体を制御するものである。具体的には、ホストコンピュータ１００は、コマンドおよびデータを生成してストレージ２００に信号線１０９を介して供給する。また、ホストコンピュータ１００は、信号線１０９を介してストレージ２００から、読み出されたデータを受け取る。ここで、コマンドは、ストレージ２００を制御するためのものであり、例えば、データの書込みを指示するライトコマンドや、データの読み出しを指示するリードコマンドを含む。
【００２９】
ストレージ２００は、メモリコントローラ３００および不揮発性メモリ４００を備える。このメモリコントローラ３００は、不揮発性メモリ４００を制御するものである。メモリコントローラ３００は、ホストコンピュータ１００からライトコマンドおよびデータを受け取った場合には、そのデータを符号化する。以下、符号化前のデータを「原データ」と称する。そして、メモリコントローラ３００は、不揮発性メモリ４００に信号線３０９を介してアクセスして符号化したデータを書き込む。
【００３０】
また、ホストコンピュータ１００からリードコマンドを受け取った場合、メモリコントローラ３００は、不揮発性メモリ４００に信号線３０８を介してアクセスして符号化されたデータを信号線３０９を介して読み出す。そして、メモリコントローラ３００は、符号化されたデータを、符号化前の原データに変換（すなわち、復号）する。メモリコントローラ３００は、復号したデータをホストコンピュータ１００に供給する。
【００３１】
不揮発性メモリ４００は、メモリコントローラ３００の制御に従って、データを記憶するものである。例えば、ＲｅＲＡＭが不揮発性メモリ４００として用いられる。この不揮発性メモリ４００は、二次元格子状に配列された複数のメモリセルを備える。
【００３２】
［メモリコントローラの構成例］
図２は、第１の実施の形態におけるメモリコントローラ３００の一構成例を示すブロック図である。このメモリコントローラ３００は、ホストインターフェース３０１、ＲＡＭ（Random Access Memory）３０２、および、ＣＰＵ（Central Processing Unit）３０３を備える。また、メモリコントローラ３００は、ＥＣＣ（Error detection and Correction Code）処理部３０４、ＲＯＭ（Read Only Memory）３０５、バス３０６およびメモリインターフェース３０７を備える。
【００３３】
ホストインターフェース３０１は、ホストコンピュータ１００との間でデータやコマンドを相互に交換するものである。ＲＡＭ３０２は、ＣＰＵ３０３が実行する処理において必要となるデータを一時的に保持するものである。ＣＰＵ３０３は、メモリコントローラ３００全体を制御するものである。ＲＯＭ３０５は、ＣＰＵ３０３が実行するプログラム等を記憶するものである。バス３０６は、ＲＡＭ３０２、ＣＰＵ３０３、ＥＣＣ処理部３０４、ＲＯＭ３０５、ホストインターフェース３０１およびメモリインターフェース３０７が相互にデータを交換するための共通の経路である。メモリインターフェース３０７は、不揮発性メモリ４００との間でデータやコマンドを相互に交換するものである。
【００３４】
ＥＣＣ処理部３０４は、データを符号化または復号するものである。符号化においてＥＣＣ処理部３０４は、ＥＣＣ符号化対象データにパリティを付加することにより所定の単位で符号化する。所定の単位で符号化された個々のデータは、「符号語」と呼ばれる。そして、ＥＣＣ処理部３０４は、符号化したデータをライトデータとして不揮発性メモリ４００にバス３０６を介して供給する。
【００３５】
また、ＥＣＣ処理部３０４は、符号化されたリードデータを元のデータに復号する。この復号において、ＥＣＣ処理部３０４は、パリティを使用してリードデータの誤りの有無を検出して訂正する。
【００３６】
図３は、第１の実施の形態におけるメモリコントローラ３００の機能構成例を示すブロック図である。このメモリコントローラ３００は、電圧降下量推定部３１０、比較部３２０、符号化部３３０、復号部３４０、コマンドデコーダ３５０、アドレス変換部３６０およびアドレス変換テーブル３７０を備える。これらの各部は、図２のホストインターフェース３０１、ＲＡＭ３０２、ＣＰＵ３０３およびＥＣＣ処理部３０４、ＲＯＭ３０５、バス３０６およびメモリインターフェース３０７などにより実現される。
【００３７】
電圧降下量推定部３１０は、原データをメモリセルに保持させた際のリーク電流と、メモリセルまでの配線の配線抵抗とから、電圧降下（ＩＲドロップ）の量を推定するものである。また、比較部３２０は、ＩＲドロップの推定値を所定の閾値と比較するものである。
【００３８】
ここで、前述したようにＲｅＲＡＭではメモリセルの抵抗値が小さいほどリーク電流が大きくなる。このため、例えば、２進数で「１」を保持するメモリセルの抵抗値が「０」を保持するメモリセルより小さいとすると、「１」のメモリセルのリーク電流の方が大きくなる。以下、「１」のメモリセルのリーク電流をＩＬＥＡＫとし、「０」のメモリセルのリーク電流はほとんど無視できる程度に小さいものとする。
【００３９】
また、メモリセルまでの配線の配線抵抗は、その配線距離が長くなるほど大きくなる。例えば、原データが８ビットで、先頭ビットに対応するメモリセルが最も配線距離が短く、末尾ビットに近づくほど配線距離が長くなるものとする。この場合、末尾ビットに近いほど、そのビットに対応するメモリセルまでの配線の配線抵抗が大きくなる。このため、先頭からｎ（ｎは０乃至７の整数）ビット目のメモリセルに対応する配線抵抗を（ｎ＋１）×Ｒ０と表すことができる。ここで、Ｒ０は、隣接するメモリセル間の配線の配線抵抗である。この配線抵抗とリーク電流とから、原データを書き込んだメモリセルのＩＲドロップＶＤＲＯＰは次の式により求められる。
【数１】
2017138235.tif 000003
上式において、Ｉｎは、先頭からｎ番目のビットを保持するメモリセルのリーク電流である。例えば、ｎ番目のビットが「１」である場合に、そのビットを保持するメモリセルのリーク電流ＩｎとしてＩＬＥＡＫの値が用いられる。一方、ｎ番目のビットが「０」である場合に、そのビットを保持するメモリセルのリーク電流Ｉｎとして「０」の値が用いられる。
【００４０】
式１のＩＲドロップＶＤＲＯＰは、例えば、閾値ＩＬＥＡＫ（Ｔｈ×Ｒ０）と比較される。ここで、Ｔｈは、所定の実数である。この閾値をＩＲドロップＶＤＲＯＰが超えるか否かは、次の式により求められる。
【数２】
2017138235.tif 000004
【００４１】
Ｉｎは、ＩＬＥＡＫまたは「０」であるため、式２は、次の式に簡易化することができる。
【数３】
2017138235.tif 000005
上式において、ｂｎは、ｎビット目の値である。ｋｎは、ｂｎに対応する重み係数である。上式の右辺（ＩＲドロップ）は、ビットｂｎと、重み係数ｋｎとの重み付け加算により求められる。このビットごとの重み係数は、メモリコントローラ３００内の参照テーブルなどに予め保持される。なお、重み係数をメモリコントローラ３００でなく不揮発性メモリ４００に保持しておき、システム起動時などにメモリコントローラ３００が読み出す構成であってもよい。
【００４２】
電圧降下量推定部３１０は、重み付け加算により式３の右辺を算出してＩＲドロップの推定値として比較部３２０に供給する。そして、比較部３２０は、推定値と閾値Ｔｈとを比較して比較結果を示すビットを反転ビットとして符号化部３３０に供給する。この反転ビットは、原データを反転するか否かを示す。例えば、ＩＲドロップの推定値を所定の閾値を超える場合に、反転することを示す「１」の値が反転ビットに設定され、推定値が所定の閾値以下の場合に、反転しないことを示す「０」の値が反転ビットに設定される。
【００４３】
符号化部３３０は、原データを符号化するものである。この符号化部３３０は、反転ビットに基づいて原データを反転する処理と、パリティを生成する処理とを行う。この符号化部３３０は、反転ビットが「１」の場合に原データを反転して反転データを生成する。一方、符号化部３３０は、反転ビットが「０」の場合に原データを反転しない。この反転符号化処理により生成された原データまたは反転データと反転ビットとからなるデータを以下、「ＥＣＣ符号化対象データ」と称する。
【００４４】
そして、符号化部３３０は、ＥＣＣ符号化対象データに基づいて、ＥＣＣ符号化対象データの誤りを検出および訂正するためのパリティを生成する。符号化部３３０は、ＥＣＣ符号化対象データおよびパリティからなるデータをライトデータとして不揮発性メモリ４００に供給する。
【００４５】
なお、符号化部３３０は、８ビットの単位で符号化しているが、符号化の単位は、８ビットに限定されない。
【００４６】
復号部３４０は、不揮発性メモリ４００からのリードデータを復号するものである。この復号部３４０は、符号化部３３０における処理に対応する処理を実行し、原データを復号する。そして、復号部３４０は、復号した原データをホストコンピュータ１００に供給する。
【００４７】
コマンドデコーダ３５０は、ホストコンピュータ１００からのコマンドをデコードしてリクエストを生成するものである。このコマンドデコーダ３５０は、生成したリクエストを不揮発性メモリ４００に供給する。
【００４８】
アドレス変換部３６０は、アドレス変換テーブル３７０を参照して物理アドレスと論理アドレスとを相互に変換するものである。ここで、論理アドレスは、ホストコンピュータ１００が定義するアドレス空間において、ホストコンピュータ１００がストレージ２００にアクセスする際のアクセス単位の領域ごとに割り振られたアドレスである。また、物理アドレスは、前述したように不揮発性メモリ４００においてアクセス単位ごとに割り当てられたアドレスである。なお、アドレス変換部３６０は、特許請求の範囲に記載のアドレス生成部の一例である。
【００４９】
アドレス変換テーブル３７０は、論理アドレスと物理アドレスとを対応付けたテーブルである。
【００５０】
［電圧降下量推定部の構成例］
図４は、第１の実施の形態における電圧降下量推定部３１０の一構成例を示すブロック図である。この電圧降下量推定部３１０は、乗算部３１１、重み係数供給部３１３および加算部３１４を備える。
【００５１】
乗算部３１１は、ビットごとに、そのビットに重み係数を乗算するものである。この乗算部３１１は、複数の乗算器３１２を備える。ｎ個目の乗算器３１２は、ビットｂｎと、重み係数ｋｎとを乗算して加算部３１４に供給する。
【００５２】
重み係数供給部３１３は、ビットのそれぞれに重み係数を供給するものである。この重み係数供給部３１３は、ｎ個目の乗算器３１２に重み係数ｋｎを供給する。
【００５３】
加算部３１４は、乗算器３１２のそれぞれの乗算結果を加算するものである。この加算部３１４は、加算結果をＩＲドロップの推定値として比較部３２０に供給する。
【００５４】
［符号化部の構成例］
図５は、第１の実施の形態における符号化部３３０の一構成例を示すブロック図である。この符号化部３３０は、ライト側反転部３３１およびＥＣＣ符号化部３３２を備える。
【００５５】
ライト側反転部３３１は、反転ビットに基づいて原データを反転するものである。このライト側反転部３３１は、反転ビットが「１」である場合に原データを反転し、その反転データおよび反転ビットをＥＣＣ符号化対象データとしてＥＣＣ符号化部３３２に供給する。一方、反転ビットが「０」である場合にライト側反転部３３１は、原データを反転せずに、その原データおよび反転ビットをＥＣＣ符号化対象データとしてＥＣＣ符号化部３３２に供給する。このＥＣＣ符号化対象データにおける反転ビット以外のデータ（すなわち、原データまたは反転データ）を以下、「非管理情報」と称する。また、ライト側反転部３３１による反転処理を以下、「反転符号化」と称する。
【００５６】
ＥＣＣ符号化部３３２は、ＥＣＣ符号化対象データに基づいて、そのＥＣＣ符号化対象データの誤りを検出および訂正するためのパリティを生成するものである。このＥＣＣ符号化部３３２は、ＥＣＣ符号化対象データおよびパリティからなる誤り検出訂正符号（ＥＣＣ）をライトデータとして不揮発性メモリ４００に供給する。ＥＣＣとして、例えば、ＢＣＨ（Bose Chaudhuri Hocquenghem）符号や、ＲＳ（Reed-Solomon）符号などが用いられる。以下、反転ビットおよびパリティからなるデータを「管理情報」と称する。また、ＥＣＣへの符号化を以下、「ＥＣＣ符号化」と称する。
【００５７】
［復号部の構成例］
図６は、第１の実施の形態における復号部３４０の一構成例を示すブロック図である。この復号部３４０は、リード側反転部３４１およびＥＣＣ復号部３４２を備える。
【００５８】
ＥＣＣ復号部３４２は、リードデータを復号するものである。このＥＣＣ復号部３４２は、ＥＣＣをリードデータとして不揮発性メモリ４００から取得する。そして、ＥＣＣ復号部３４２は、ＥＣＣ内のパリティを用いてＥＣＣ符号化対象データの誤りの有無を検出し、誤りがあった場合に、その誤りを訂正する。そして、ＥＣＣ復号部３４２は、誤りを検出および訂正したデータをＥＣＣ復号データとしてリード側反転部３４１に供給する。このＥＣＣ復号データは、非管理情報（原データまたは反転データ）と反転ビットとを含む。
【００５９】
リード側反転部３４１は、非管理情報を反転ビットに基づいて反転するものである。このリード側反転部３４１は、反転ビットが「１」である場合に非管理情報を反転し、原データとしてホストコンピュータ１００に供給する。一方、反転ビットが「０」である場合にリード側反転部３４１は、非管理情報を反転せずに、そのまま原データとしてホストコンピュータ１００に供給する。
【００６０】
［不揮発性メモリの構成例］
図７は、第１の実施の形態における不揮発性メモリ４００の一構成例を示すブロック図である。この不揮発性メモリ４００は、データバッファ４１０、ＭＡＵ配置部４２０、アドレスデコーダ４３０、バス４４０、制御インターフェース４５０およびメモリ制御部４６０を備える。
【００６１】
データバッファ４１０は、メモリ制御部４６０の制御に従って、ライトデータやリードデータを保持するものである。
【００６２】
ＭＡＵ配置部４２０には、複数のメモリアレイユニットが設けられる。メモリアレイユニットのそれぞれには、メモリセルアレイおよびドライバが設けられる。
【００６３】
アドレスデコーダ４３０は、リクエストにより指定されたアドレスをデコードするものである。このアドレスデコーダ４３０はアドレスのデコードによりロウアドレスＲＡおよびカラムアドレスＣＡを生成してＭＡＵ配置部４２０に供給する。
【００６４】
バス４４０は、データバッファ４１０、ＭＡＵ配置部４２０、アドレスデコーダ４３０、制御インターフェース４５０およびメモリ制御部４６０が相互にデータを交換するための共通の経路である。制御インターフェース４５０は、メモリコントローラ３００と不揮発性メモリ４００とがデータやコマンドを相互に交換するためのインターフェースである。
【００６５】
メモリ制御部４６０は、メモリアレイユニットを制御して、データの書込み、または、読出しを行わせるものである。
【００６６】
図８は、第１の実施の形態におけるＭＡＵ配置部４２０の一構成例を示す図である。このＭＡＵ配置部４２０には、複数のメモリアレイユニット５００が配置される。
【００６７】
［メモリアレイユニットの構成例］
図９は、第１の実施の形態におけるメモリアレイユニット５００の一構成例を示すブロック図である。このメモリアレイユニット５００は、カラムドライバ５１０、ロウドライバ５２０およびメモリセルアレイ５３０を備える。メモリセルアレイ５３０には、二次元格子状に複数のメモリセル５４０が配列される。以下、所定方向に配列されたメモリセル５４０の集合を「行」と称し、その方向に垂直な方向に配列されたメモリセル５４０の集合を「列」と称する。
【００６８】
ライトデータは、ブロックと呼ばれるアクセス単位で書き込まれるものとする。このブロックは、例えば、行方向に並んだ所定数のメモリセル５４０から構成される。
【００６９】
メモリセル５４０は、データを記憶するものである。メモリセル５４０のそれぞれは、列方向に沿って配線されたカラム線と、行方向に沿って配線されたロウ線とに接続される。例えば、メモリセル５４０は、８×８の計６４個設けられる。そして、ｐ（ｐは０乃至７の整数）番目の行に属するメモリセル５４０のそれぞれは、ロウ線ＲＬｐを介してロウドライバ５２０に接続される。また、ｑ（ｑは０乃至７の整数）番目の列に属するメモリセル５４０のそれぞれは、カラム線ＣＬｑを介してカラムドライバ５１０に接続される。なお、メモリセル５４０の個数は、６４個に限定されない。
【００７０】
また、ロウ線ＲＬｐと、カラム線ＣＬｑとに接続されたメモリセル５４０には、例えば、「ｐｑ」のアドレスが割り当てられる。
【００７１】
ロウドライバ５２０は、アドレスデコーダ４３０からのロウアドレスＲＡと、メモリ制御部４６０からの制御信号とに従ってロウを駆動するものである。ここで、ロウアドレスＲＡは、アクセス対象のロウの位置を示す。また、制御信号は、セット信号、リセット信号またはセンス信号などである。
【００７２】
カラムドライバ５１０は、アドレスデコーダ４３０からのカラムアドレスＣＡと制御信号とライトデータＷＤとに基づいてロウを駆動するものである。ここで、カラムアドレスＣＡは、アクセス対象のカラムの位置を示す。また、カラムドライバ５１０は、センス信号に従ってリードデータＲＤを読み出してデータバッファ４１０に保持させる。
【００７３】
書込みにおいてロウドライバ５２０は、ロウアドレスＲＡに基づいて選択したロウに選択行電圧を印加し、それ以外のロウに非選択行電圧を印加する。また、カラムドライバ５１０は、カラムアドレスＣＡに基づいて選択したカラムに選択列電圧を印加し、それ以外のカラムに非選択列電圧を印加する。
【００７４】
ここで、選択された行と選択された列との両方に属するメモリセル５４０を以下、「選択セル」と称する。また、選択された行と、選択されていない列とに属するメモリセル５４０を「半選択セル」と称する。選択されていない行と、選択されていない列とに属するメモリセル５４０を「非選択セル」と称する。
【００７５】
選択セルの両端には、選択行電圧と選択列電圧との差分の線間電圧が印加される。この線間電圧の大きさや、極性を制御することにより、選択セルをセット、リセット、あるいはセンスすることができる。以下、セットする際の線間電圧を「セット電圧」と称し、リセットする際の線間電圧を「リセット電圧」と称し、センスする際の線間電圧を「センス電圧」と称する。
【００７６】
図１０は、第１の実施の形態におけるメモリセルアレイ５３０の斜視図である。メモリセルアレイ５３０において、カラム線ＣＬｑが設けられた配線層と、ロウ線ＲＬｐが設けられた配線層とが半導体基板上に積層される。そして、ロウ線とカラム線との交差点において、カラム線とロウ線とに挟まれる位置にメモリセル５４０が配置される。このような不揮発性メモリは、クロスポイント型メモリと呼ばれる。
【００７７】
［メモリセルの構成例］
図１１は、第１の実施の形態におけるメモリセル５４０の一構成例を示す回路図である。このメモリセル５４０は、双方向ダイオード５４１と可変抵抗素子５４２とを備える。双方向ダイオード５４１の一端は、ロウ線ＲＬ０に接続され、他端は、可変抵抗素子５４２に接続される。可変抵抗素子５４２の一端は、双方向ダイオード５４１に接続され、他端は、カラム線ＣＬ０に接続される。
【００７８】
双方向ダイオード５４１は、カラム線とビット線との間の線間電圧に応じた電流を供給するものである。例えば、線間電圧が所定値を超える場合に、双方向ダイオード５４１は、導通状態に遷移して所定の電流閾値Ｉｔｈを超える電流を可変抵抗素子５４２に流す。一方、線間電圧が所定値以下の場合に双方向ダイオード５４１は、非導通状態に遷移して電流閾値Ｉｔｈ以下の電流を可変抵抗素子５４２に流す。可変抵抗素子５４２は、電流の方向に応じて抵抗値が変化する素子である。なお、線間電圧に応じて導通状態および非導通状態の一方から他方に遷移する選択素子であれば、双方向ダイオード５４１以外の素子（トランジスタなど）を双方向ダイオード５４１の代わりに設けてもよい。
【００７９】
図１２は、第１の実施の形態における可変抵抗素子５４２の抵抗分布の一例を示す図である。同図における縦軸は、メモリセル５４０のセル数であり、横軸は、抵抗値である。メモリセル５４０では、その抵抗分布は、抵抗の閾値Ｒｒｅｆを境に２つに分けられている。これらの分布は、低抵抗状態（ＬＲＳ：Low-Resistance State）および高抵抗状態（ＨＲＳ：High-Resistance State）と呼ばれる。ＬＲＳには、例えば、「１」の論理値が割り当てられ、ＨＲＳには「０」が割り当てられる。また、ＬＲＳのメモリセル５４０をＨＲＳに遷移させる処理を以下、「リセット」と称し、ＨＲＳのメモリセル５４０をＬＲＳに遷移させる処理を以下、「セット」と称する。また、メモリセル５４０に保持された値を読み出すことを「センス」と称する。
【００８０】
ここで、メモリセル５４０に流れるリーク電流は、一般に、メモリセル５４０内の可変抵抗素子５４２の抵抗値が低いほど大きくなる。すなわち、ＬＲＳのメモリセル５４０のリーク電流は、ＨＲＳよりも大きくなる。
【００８１】
なお、ＬＲＳに「１」をＨＲＳに「０」を割り当てているが、逆に、ＬＲＳに「０」をＨＲＳに「１」を割り当ててもよい。この場合には、電圧降下量推定部３１０において、ビットｂｎを反転した値と、重み係数ｋｎとが重み付け加算される。
【００８２】
図１３は、第１の実施の形態における符号化前後のデータの一例を示す図である。同図におけるａは、原データの一例を示す図であり、同図におけるｂは、反転データの一例を示す図である。また、同図におけるｃは、ＥＣＣ符号化対象データの一例を示す図であり、同図におけるｄは、ライトデータの一例を示す図である。
【００８３】
まず、メモリコントローラ３００は、原データを反転せずにメモリセルに保持させた際のＩＲドロップを推定する。原データを２進数で「０００００１１１」とすると、ＬＲＳの５乃至７ビット目でリーク電流ＩＬＥＡＫが生じる。したがって、ＩＲドロップは、式１より２１ＩＬＥＡＫＲ０と推定される。簡易化した式３を用いる場合には、推定値として「２１」が算出される。
【００８４】
ここで、閾値Ｔｈは、例えば、「１８」（ＩＬＥＡＫＲ０）に設定されるものとする。この場合、ＩＲドロップの推定値が閾値Ｔｈを超えるために、メモリコントローラ３００は、原データを反転し、図１３におけるｂに例示するように反転データ「１１１１１０００」を生成する。この反転データのＩＲドロップは、式１より１５ＩＬＥＡＫＲ０と推定される。このように、反転により、反転前と比較してＩＲドロップが減少する。
【００８５】
そして、メモリコントローラ３００は、図１３におけるｄに例示するように、「１」を設定した反転ビットと反転データ（非管理情報）とをＥＣＣ符号化対象データとし、同図におけるｄに例示するようにパリティを生成する。このように、非管理情報（原データまたは反転データ）と、管理情報（反転ビットおよびパリティ）とからなるライトデータがメモリセルに書き込まれる。
【００８６】
図１４は、比較例における符号化前後のデータの一例を示す図である。この比較例では、「１」の個数が閾値（例えば、「４」）を超える場合に、メモリシステムが原データを反転するものとする。同図におけるａは、原データの一例を示す図であり、同図におけるｂは、反転データの一例を示す図である。
【００８７】
原データが「１１１１１０００」の場合に比較例のメモリシステムは、「１」の個数が閾値を超えるために反転し、反転データ「０００００１１１」を生成する。反転前の原データを書き込んだ際のＩＲドロップは、式１より１５ＩＬＥＡＫＲ０である。これに対して、反転データを書き込んだ際のＩＲドロップは、式１より２１ＩＬＥＡＫＲ０であり、反転によりＩＲドロップが増大してしまう。
【００８８】
これに対してメモリコントローラ３００は、ＩＲドロップを推定し、その推定値が閾値を超える場合に原データを反転してＩＲドロップを閾値以下に減少させるため、ＩＲドロップの増大を抑制することができる。
【００８９】
ＩＲドロップの増大を抑制することにより、低電圧におけるエラー発生率を低減することができる。また、電源電圧のマージンを大きくすることができる。また、マージンを維持しつつ、書込みに要する遅延時間を短くして書込み帯域幅を広くすることができる。また、マージンを維持しつつ、メモリセルの微細化や、メモリセルの積層数の増大などにより、ビット当たりのコストを低減することができる。
【００９０】
［メモリコントローラの動作例］
図１５は、第１の実施の形態におけるメモリコントローラ３００の動作の一例を示すフローチャートである。この動作は、例えば、メモリシステムに電源が投入されたときに開始される。
【００９１】
メモリコントローラ３００は、ホストコンピュータ１００からライトコマンドを受信したか否かを判断する（ステップＳ９０１）。ライトコマンドを受信した場合に（ステップＳ９０１：Ｙｅｓ）、メモリコントローラ３００は、ライトデータを書き込むためのライト処理を実行する（ステップＳ９１０）。
【００９２】
ライトコマンドを受信していない場合に（ステップＳ９０１：Ｎｏ）、メモリコントローラ３００は、リードコマンドを受信したか否かを判断する（ステップＳ９０２）。リードコマンドを受信した場合に（ステップＳ９０２：Ｙｅｓ）、メモリコントローラ３００は、リードデータを読み出すためのリード処理を実行する（ステップＳ９２０）。
【００９３】
リードコマンドを受信していない場合（ステップＳ９０２：Ｎｏ）、ステップＳ９１０またはＳ９２０の後にメモリコントローラ３００は、ステップＳ９０１以降を繰り返し実行する。
【００９４】
図１６は、第１の実施の形態におけるライト処理の一例を示すフローチャートである。メモリコントローラ３００は、原データおよびライトアドレスを取得し（ステップＳ９１１）、ビットｂｎと重み係数ｋｎとの重み付け加算により電圧降下量を推定する（ステップＳ９１２）。
【００９５】
メモリコントローラ３００は、電圧降下量の推定値が閾値以下であるか否かを判断する（ステップＳ９１３）。推定値が閾値以下である場合に（ステップＳ９１３：Ｙｅｓ）、メモリコントローラ３００は、「０」の反転ビットおよび原データをＥＣＣに符号化する（ステップＳ９１４）。一方、推定値が閾値を超える場合に（ステップＳ９１３：Ｎｏ）、メモリコントローラ３００は、原データを反転し（ステップＳ９１６）、「１」の反転ビットおよび反転データをＥＣＣに符号化する（ステップＳ９１７）。
【００９６】
ステップＳ９１４またはＳ９１７の後にメモリコントローラ３００は、ライトリクエストにより、符号化したライトデータを不揮発性メモリ４００に書き込む（ステップＳ９１５）。
【００９７】
図１７は、第１の実施の形態におけるリード処理の一例を示すフローチャートである。メモリコントローラ３００は、リードアドレスを取得し（ステップＳ９２１）、リードリクエストによりリードデータを不揮発性メモリ４００から取得する（ステップＳ９２２）。そして、メモリコントローラ３００は、パリティを用いてリードデータ（ＥＣＣ）を復号する（ステップＳ９２３）。
【００９８】
メモリコントローラ３００は、復号したデータ内の反転ビットが「０」であるか否かを判断する（ステップＳ９２４）。反転ビットが「０」である場合に（ステップＳ９２４：Ｙｅｓ）、メモリコントローラ３００は、非管理情報を原データとしてホストコンピュータ１００に送信する（ステップＳ９２５）。一方、反転ビットが「１」である場合に（ステップＳ９２４：Ｎｏ）、メモリコントローラ３００は、非管理情報を反転し（ステップＳ９２６）、反転した非管理情報を原データとしてホストコンピュータ１００に送信する（ステップＳ９２７）。
【００９９】
このように、本技術の第１の実施の形態によれば、メモリシステムは、電圧降下量を推定し、その推定値が閾値を超える場合に原データを反転するため、電圧降下量の増大を抑制することができる。
【０１００】
［第１の変形例］
上述の第１の実施の形態では、メモリコントローラ３００は、カラム線の配線層と、ロウ線の配線層とを積層したクロスポイント型の不揮発性メモリを制御していたが、制御対象の不揮発性メモリはクロスポイント型に限定されない。例えば、Ｖ３Ｄ（Vertical 3 Dimension）型であってもよい。この第１の実施の形態における第１の変形例の不揮発性メモリ４００は、Ｖ３Ｄ型である点において第１の実施の形態と異なる。
【０１０１】
図１８は、第１の実施の形態の第１の変形例におけるメモリセルアレイ５３０の斜視図である。半導体基板上に、ロウ線ＲＬｐが積層され、その積層方向に沿ってカラム線ＣＬｑがロウ線を貫通する。そして、カラム線を通すロウ線上のスルーホールの内面と、カラム線の側面とに挟まれる位置に、メモリセル５４０が形成される。
【０１０２】
このように、本技術の第１の実施の形態の第１の変形例によれば、Ｖ３Ｄ型の不揮発性メモリ４００に保持させた際の電圧降下量を推定するため、Ｖ３Ｄ型の不揮発性メモリ４００における電圧降下量の増大を抑制することができる。
【０１０３】
［第２の変形例］
上述の第１の実施の形態では、複数のメモリアレイユニット５００で、データバッファ４１０およびアドレスデコーダ４３０を共有していたが、これらを共有せずに、メモリアレイユニットごとに設けてもよい。この第１の実施の形態における第２の変形例の不揮発性メモリ４００は、メモリアレイユニットごとにデータバッファおよびアドレスデコーダを設けた点において第１の実施の形態と異なる。
【０１０４】
図１９は、第１の実施の形態の第２の変形例における不揮発性メモリ４００の一構成例を示すブロック図である。この第２の変形例の不揮発性メモリ４００の構成は、ＭＡＵ配置部４２０、データバッファ４１０およびアドレスデコーダ４３０の代わりに複数のメモリユニット６００を備える点において第１の実施の形態と異なる。
【０１０５】
図２０は、第１の実施の形態の第２の変形例におけるメモリユニット６００の一構成例を示すブロック図である。このメモリユニット６００は、データバッファ６１０、メモリアレイユニット６２０およびアドレスデコーダ６３０を備える。メモリアレイユニット６２０ごとに、データバッファ６１０およびアドレスデコーダ６３０を設けることにより、データのバッファリングやアドレスのデコード処理を並列に実行することができ、アクセス速度を向上させることができる。
【０１０６】
このように、本技術の第１の実施の形態における第２の変形例の不揮発性メモリ４００は、メモリアレイユニット６２０ごとに、データバッファ６１０およびアドレスデコーダ６３０を設けたため、アクセス速度を向上させることができる。
【０１０７】
＜２．第２の実施の形態＞
上述の第１の実施の形態では、メモリコントローラ３００は、原データにおいてビットごとに重み係数ｋｎを乗算してＩＲドロップを推定していたが、原データのビット数が増大するほど、計算量が増大してしまう。計算量が増大するほど、推定を行う回路の回路規模、計算時間や消費電力が増大するため、計算量を低減することが望ましい。この第２の実施の形態のメモリコントローラ３００は、ＩＲドロップを推定する際の計算量を低減した点において第１の実施の形態と異なる。
【０１０８】
図２１は、第２の実施の形態における電圧降下量推定部３１０の一構成例を示すブロック図である。この第２の実施の形態の電圧降下量推定部３１０は、複数の計数部３１５をさらに備える点において第１の実施の形態と異なる。
【０１０９】
第２の実施の形態において、原データは、複数の区間データに分割して処理される。例えば、１０００ビットの原データが、それぞれ１００ビットからなる１０個の区間データに分割される。
【０１１０】
計数部３１５は、ｉ（ｉは、０乃至９の整数）番目の区間データ内の「１」のビットの個数を計数するものである。計数部３１５は、計数値ｃｉを乗算部３１１に供給する。この計数値ｃｉは、区間データを保持させたメモリセルのリーク電流の和に応じた値である。
【０１１１】
第２の実施の形態の重み係数供給部３１３は、区間データごとに、その区間データ内のビットのそれぞれに対応する配線抵抗の代表値に応じた重み係数ｋｉを供給する。例えば、区間データ内の１００ビットに対応する１００個の配線抵抗の平均値や中央値に応じた値が、その区間の重み係数として用いられる。
【０１１２】
第２の実施の形態の乗算部３１１は、計数値ｃｉと重み係数ｋｉとを乗算する。第２の実施の形態の加算部３１４は、それらの乗算値を加算して比較部３２０に供給する。第２の実施の形態の電圧降下量推定部３１０および比較部３２０における処理は、次の式により表される。
【数４】
2017138235.tif 000006
【０１１３】
このように、第２の実施の形態のメモリコントローラ３００は、区間データごとに重み係数を設定し、重み付け加算を行うため、ビットごとに重み係数を設定して重み付け加算を行う第１の実施の形態と比較して計算量を低減することができる。
【０１１４】
例えば、第１の実施の形態のメモリコントローラ３００が１０００ビットを重み付け加算する場合、乗算回数は１０００回となり、加算回数は９９９回となる。
【０１１５】
これに対し、第２の実施の形態のメモリコントローラ３００が１０００ビットを重み付け加算する場合、１０個の計数部３１５のそれぞれの加算回数は、区間データが１００ビットであるため、９９回である。また、乗算回数は、区間データが１０個であるため１０回である。また、加算部３１４の加算回数は、９回である。したがって、加算回数は、９９９（＝９９×１０＋９）回であり、乗算回数は１０回である。
【０１１６】
上述したように、加算回数が変わらず、乗算回数が１０００回から１０回に低減するため、全体の計算量が低減する。
【０１１７】
このように、本技術の第２の実施の形態によれば、メモリコントローラ３００は、区間データごとの重み係数により重み付け加算を行って電圧降下量を推定するため、ビットごとの重み係数により重み付け加算する場合よりも計算量を低減することができる。
【０１１８】
＜３．第３の実施の形態＞
上述の第１の実施の形態では、メモリコントローラ３００は、原データにおいてロウ線の配線距離を考慮して電圧降下量を推定していた。しかし、メモリセルはカラム線にも接続されているため、カラム線の配線距離も考慮した方が、電圧降下量を正確に推定することができる。この第３の実施の形態のメモリコントローラ３００は、カラム線およびロウ線の両方の配線距離に基づいて電圧降下量を推定する点において第１の実施の形態と異なる。
【０１１９】
図２２は、第３の実施の形態におけるメモリセルアレイ５３０内の領域の一例を示す図である。この第３の実施の形態のメモリセルアレイ５３０は、推定不要領域Ａと、列方向推定領域Ｂと、行方向推定領域Ｃとに分割される。
【０１２０】
推定不要領域Ａは、カラムドライバ５１０からの距離とロウドライバ５２０からの距離とが所定距離ｄｔｈ以下の矩形領域である。それらの配線距離が所定距離ｄｔｈ以下であるため、推定不要領域の電圧降下量は、他の領域（列方向推定領域Ｂおよび行方向推定領域Ｃ）と比較して少なく、電圧降下量を考慮する必要性に乏しい。このため、第３の実施の形態の電圧降下量推定部３１０は、推定不要領域Ａに書き込まれるデータについて、電圧降下量の推定を行わない。
【０１２１】
この推定不要領域Ａには、管理情報（反転ビットおよびパリティ）を保持させることが望ましい。これは、管理情報は、電圧降下量に応じて反転されることが無く、電源電圧のマージンに与える影響が軽減されないためである。実装においては、管理情報の書込みの際にアドレス変換部３６０が、空いている物理アドレスのうち推定不要領域Ａのアドレスを論理アドレスに対応付ける。なお、管理情報の書込み先を推定不要領域Ａに限定せず、メモリコントローラ３００が列方向推定領域Ｂや行方向推定領域Ｃに書き込む構成であってもよい。また、メモリコントローラ３００が管理情報を推定不要領域Ａに優先的に書き込み、推定不要領域Ａに空きがなくなった際に、列方向推定領域Ｂや行方向推定領域Ｃに書き込む構成であってもよい。
【０１２２】
また、列方向推定領域Ｂは、点Ｐ０と点Ｐ１とを結ぶ線分により分割される２つの領域のうち、カラムドライバ５１０に隣接する領域である。ここで、点Ｐ０は、カラムドライバ５１０およびロウドライバ５２０の両方からの距離が所定距離ｄｔｈの点である。また、点Ｐ１は、カラムドライバ５１０およびロウドライバ５２０の両方からの距離がメモリセルアレイ５３０内において最大の点である。
【０１２３】
一方、行方向推定領域Ｃは、点Ｐ０と点Ｐ１とを結ぶ線分により分割される２つの領域のうち、ロウドライバ５２０に隣接する領域である。
【０１２４】
これらの列方向推定領域Ｂおよび行方向推定領域Ｃには、非管理情報を保持させることが望ましい。
【０１２５】
また、点Ｐ０および点Ｐ１を通る対角線により分割される２つの領域のうちカラムドライバ５１０に隣接する方に、列方向に配列されたメモリセルからなるブロックＢＬｃが敷き詰められる。また、ブロックＢＬｃのブロックサイズは、ロウドライバ５２０からの距離が遠いほど大きい。
【０１２６】
一方、点Ｐ０および点Ｐ１を通る対角線により分割される２つの領域のうちロウドライバ５２０に隣接する方に、行方向に配列されたメモリセルからなるブロックＢＬｒが敷き詰められる。また、ブロックＢＬｒのブロックサイズは、カラムドライバ５１０からの距離が遠いほど大きい。
【０１２７】
上述したように、それぞれのブロックのサイズが異なるため、仮に個々のブロックをアクセス単位とすると、アクセス単位が一定に揃わなくなる。一般にＥＣＣの種類により、符号長として用いることができる数値に制限があるため、アクセス単位が一定でないと、ＥＣＣに符号化することができなくなるおそれがある。そこで、アドレス変換部３６０は、合計のブロックサイズが一定になるように、複数のブロックの物理アドレスを組み合わせて指定する。例えば、アクセス単位を８ビットとする場合、アドレス変換部３６０は、ブロックサイズが１ビットのブロックのアドレスとブロックサイズが７ビットのブロックのアドレスとを組み合わせて指定する。
【０１２８】
また、列方向推定領域Ｂにおいては、カラムドライバ５１０からの配線距離に応じた重み係数により電圧降下量が推定される。そして、符号化されたデータが列方向に細長いブロックに書き込まれる。
【０１２９】
また、行方向推定領域Ｃにおいては、ロウドライバ５２０からの配線距離に応じた重み係数により電圧降下量が推定される。そして、符号化されたデータが行方向に細長いブロックに書き込まれる。
【０１３０】
また、列方向に細長いブロックに書き込む際に、カラムドライバ５１０の代わりにロウドライバ５２０がデータバッファ４１０からライトデータを取得する。そして、ロウドライバ５２０は、ライトデータおよびロウアドレスに基づいてロウ線を駆動する。一方、行方向に細長いブロックに書き込む際には、カラムドライバ５１０がデータバッファ４１０からライトデータを取得する。
【０１３１】
なお、推定不要領域Ａを設けず、メモリセルアレイ５３０を列方向推定領域Ｂおよび行方向推定領域Ｃのみに分割する構成であってもよい。
【０１３２】
このように、本技術の第３の実施の形態によれば、列方向推定領域Ｂにおいてメモリコントローラ３００が列方向に配列されたメモリセルからなるブロックの単位で書き込むため、カラム線の配線距離に応じた電圧降下量の増大を抑制することができる。
【０１３３】
＜４．第４の実施の形態＞
上述の第１の実施の形態では、ロウドライバを１つのみ設けていたが、この構成では、不揮発性メモリの高密度化に伴って隣接するロウ線の線間距離が短くなり、実装が困難になるおそれがある。この第４の実施の形態におけるメモリアレイユニット５００は、ロウ線の線間距離を長くした点において第１の実施の形態と異なる。
【０１３４】
図２３は、第４の実施の形態におけるメモリアレイユニット５００の一構成例を示すブロック図である。この第４の実施形態のメモリアレイユニット５００は、ロウドライバを２つ備える点において第１の実施の形態と異なる。例えば、ロウドライバ５２０の代わりに、左側ロウドライバ５５０および右側ロウドライバ５８０が設けられる。
【０１３５】
左側ロウドライバ５５０は、奇数行を駆動するものであり、右側ロウドライバ５８０は、偶数行を駆動するものである。このようにロウドライバを２つ備えることにより、１つのみ備える場合と比較して、ドライバ当たりの列数が少なくなるため、ロウ線のそれぞれの線間距離を長くすることができる。これにより、不揮発性メモリを高密度化することができる。あるいは、実装が容易となる。
【０１３６】
なお、左側ロウドライバ５５０は、特許請求の範囲に記載の奇数ロウドライバの一例であり、右側ロウドライバ５８０は、特許請求の範囲に記載の偶数ロウドライバの一例である。
【０１３７】
図２４は、第４の実施の形態におけるメモリセルアレイ５３０内の領域の一例を示す図である。この第４の実施の形態のメモリセルアレイ５３０は、奇数行推定不要領域Ａ、列方向推定領域Ｂ、偶数行推定不要領域Ｃ、右側両方向推定領域Ｄ、行方向推定領域Ｅ、および、左側両方向推定領域Ｆとに分割される。
【０１３８】
奇数行推定不要領域Ａは、カラムドライバ５１０からの配線距離と左側ロウドライバ５５０からの配線距離とが所定距離ｄｔｈ以下の矩形領域である。左側ロウドライバ５５０に接続された奇数行の配線距離が所定距離ｄｔｈ以下であるため、その奇数行の電圧降下量は、比較的少なく、電圧降下量を考慮する必要性に乏しい。このため、第４の実施の形態の電圧降下量推定部３１０は、奇数行推定不要領域Ａの奇数行に書き込むデータについて電圧降下量の推定を行わない。一方、奇数行推定不要領域Ａの偶数行については、右側ロウドラバ５８０からの配線距離に応じた重み係数により電圧降下量が推定される。
【０１３９】
偶数行推定不要領域Ｃは、カラムドライバ５１０からの配線距離と右側ロウドライバ５８０からの配線距離とが所定距離ｄｔｈ以下の矩形領域である。右側ロウドライバ５８０に接続された偶数行の配線距離が所定距離ｄｔｈ以下であるため、その偶数行の電圧降下量は、比較的少なく、電圧降下量を考慮する必要性に乏しい。このため、第４の実施の形態の電圧降下量推定部３１０は、偶数行推定不要領域Ｃの偶数行に書き込むデータについて電圧降下量の推定を行わない。一方、偶数行推定不要領域Ｃの奇数行については、左側ロウドライバ５５０からの配線距離に応じた重み係数により電圧降下量が推定される。
【０１４０】
奇数行推定不要領域Ａの奇数行と、偶数行推定不要領域Ｃの偶数行とには、管理情報を保持することが望ましい。それ以外の領域には、非管理情報を保持することが望ましい。
【０１４１】
また、奇数行推定不要領域Ａおよび偶数行推定不要領域Ｃ以外の領域は、点Ｐ０および点Ｐ１を結ぶ線分と、点Ｐ２および点Ｐ３を結ぶ線分とにより４つに分割される。ここで、点Ｐ０は、カラムドライバ５１０および左側ロウドライバ５５０の両方からの距離が所定距離ｄｔｈの点である。また、点Ｐ１は、カラムドライバ５１０および左側ロウドライバ５５０の両方からの距離がメモリセルアレイ５３０内において最大の点である。点Ｐ２は、カラムドライバ５１０および右側ロウドライバ５８０の両方からの距離が所定距離ｄｔｈの点である。また、点Ｐ３は、カラムドライバ５１０および右側ロウドライバ５８０の両方からの距離がメモリセルアレイ５３０内において最大の点である。
【０１４２】
４つの領域のうちカラムドライバ５１０に隣接する領域が列方向推定領域Ｂであり、右側ロウドライバ５８０に隣接する領域が右側両方向推定領域Ｄである。また、４つの領域のうち左側ロウドライバ５５０に隣接する領域が左側両方向推定領域Ｆであり、残りの領域が行方向推定領域Ｅである。
【０１４３】
また、メモリセルアレイ５３０を、点Ｐ０およびＰ１を通る対角線により２つに分割した場合を考える。これらの領域のうち左側ロウドライバ５５０に隣接する方の領域内の奇数行において、行方向に配列されたメモリセルからなるブロックＢＬｒｗが設けられる。図２４において一点鎖線で囲まれた白丸からなる部分は、奇数行のブロックＢＬｒｗを示す。このブロックＢＬｒｗのブロックサイズは、カラムドライバ５１０から遠いほど大きくなる。
【０１４４】
次に、メモリセルアレイ５３０を、点Ｐ２およびＰ３を通る対角線により２つに分割した場合を考える。これらの領域のうち右側ロウドライバ５８０に隣接する方の領域内の偶数行において、行方向に配列されたメモリセルからなるブロックＢＬｒｂが設けられる。図２４において一点鎖線で囲まれた黒丸からなる部分は、偶数行のブロックＢＬｒｂを示す。このブロックＢＬｒｂのブロックサイズは、カラムドライバ５１０から遠いほど大きくなる。
【０１４５】
また、点Ｐ０およびＰ１を通る対角線により分割される領域のうちカラムドライバ５１０に隣接する方の領域において、列方向に配列された白丸の位置のメモリセルからなるブロックＢＬｃｗが設けられる。このブロックＢＬｃｗのブロックサイズは、左側ロウドライバ５５０から遠いほど大きくなる。
【０１４６】
一方、点Ｐ２およびＰ３を通る対角線により分割される領域のうちカラムドライバ５１０に隣接する方の領域において、列方向に配列された黒丸の位置のメモリセルからなるブロックＢＬｃｂが設けられる。このブロックＢＬｃｂのブロックサイズは、右側ロウドライバ５８０から遠いほど大きくなる。
【０１４７】
上述したように、ブロックのサイズが異なるため、第３の実施の形態と同様に、アクセス単位が一定となるように複数のブロックの物理アドレスが指定される。
【０１４８】
また、左側両方向推定領域Ｆの偶数行（黒丸）と、列方向推定領域Ｂと、右側両方向推定領域Ｄの奇数行（白丸）とについては、カラムドライバ５１０からの配線距離に応じた重み係数により電圧降下量が推定される。そして、符号化されたデータが列方向に細長いブロックに書き込まれる。
【０１４９】
また、左側両方向推定領域Ｆおよび行方向推定領域Ｅの奇数行（白丸）については、左側ロウドライバ５５０からの配線距離に応じた重み係数により電圧降下量が推定される。右側両方向推定領域Ｄおよび行方向推定領域Ｅの偶数行（黒丸）については、右側ロウドライバ５８０からの配線距離に応じた重み係数により電圧降下量が推定される。そして、符号化されたデータが行方向に細長いブロックに書き込まれる。
【０１５０】
このように、本技術の第４の実施の形態によれば、ロウドライバを２つ設けたため、ロウドライバが１つのみの場合と比較してロウ線の線間距離を長くすることができる。
【０１５１】
＜５．第５の実施の形態＞
上述の第４の実施の形態では、カラムドライバを１つのみ設けていたが、この構成では、不揮発性メモリの高密度化に伴って隣接するカラム線の線間距離が短くなり、実装が困難になるおそれがある。この第５の実施の形態におけるメモリアレイユニット５００は、カラム線の線間距離を長くした点において第４の実施の形態と異なる。
【０１５２】
図２５は、第５の実施の形態におけるメモリアレイユニット５００の一構成例を示すブロック図である。この第５の実施形態のメモリアレイユニット５００は、カラムドライバを２つ備える点において第４の実施の形態と異なる。例えば、カラムドライバ５１０の代わりに、上側カラムドライバ５６０および下側カラムドライバ５７０が設けられる。
【０１５３】
上側カラムドライバ５６０は、奇数列を駆動するものであり、下側カラムドライバ５７０は、偶数列を駆動するものである。このようにカラムドライバを２つ備えることにより、１つのみ備える場合と比較して、ドライバ当たりの行数が少なくなるため、カラム線のそれぞれの線間距離を長くすることができる。これにより、不揮発性メモリを高密度化することができる。あるいは、実装が容易となる。
【０１５４】
なお、上側カラムドライバ５６０は、特許請求の範囲に記載の奇数カラムドライバの一例であり、下側カラムドライバ５７０は、特許請求の範囲に記載の偶数カラムドライバの一例である。
【０１５５】
また、カラムドライバおよびロウドライバを２つずつ設けているが、カラムドライバを２つ、ロウドライバを１つのみ設ける構成であってもよい。
【０１５６】
図２６は、第５の実施の形態におけるメモリセルアレイ５３０内の領域の一例を示す図である。この第５の実施の形態のメモリセルアレイ５３０は、推定不要領域Ａ、上側行方向推定領域Ｂ、右側列方向推定領域Ｃ、下側行方向推定領域Ｄおよび左側列方向推定領域Ｅに分割される。
【０１５７】
推定不要領域Ａは、点Ｐ５、Ｐ６、Ｐ７およびＰ８を頂点とする矩形の領域である。ここで、点Ｐ５は、上側カラムドライバ５６０および左側ロウドライバ５５０からの距離が所定距離ｄｔｈの点である。点Ｐ６は、上側カラムドライバ５６０および右側ロウドライバ５８０からの距離が所定距離ｄｔｈの点である。点Ｐ７は、下側カラムドライバ５７０および右側ロウドライバ５８０からの距離が所定距離ｄｔｈの点である。点Ｐ８は、下側カラムドライバ５７０および左側ロウドライバ５５０からの距離が所定距離ｄｔｈの点である。
【０１５８】
推定不要領域Ａ以外の領域は、点Ｐ５およびＰ７を通る対角線と、点Ｐ６およびＰ８を通る対角点とにより４つに分割される。この４つの領域のうち上側カラムドライバ５６０に隣接する領域が上側行方向推定領域Ｂであり、右側ロウドライバ５８０に隣接する領域が右側列方向推定領域Ｃである。また、４つの領域のうち下側カラムドライバ５７０に隣接する領域が下側行方向推定領域Ｄであり、左側ロウドライバ５５０に隣接する領域が左側列方向推定領域Ｅである。
【０１５９】
推定不要領域Ａには、管理情報を保持することが望ましい。それ以外の領域には、非管理情報を保持することが望ましい。
【０１６０】
また、メモリセルアレイ５３０を対称な２つの対角線により４つに分割した場合を考える。これらの４つの領域のうち上側カラムドライバ５６０に隣接する領域には、行方向に配列されたメモリセルからなるブロックが敷き詰められる。このブロックのブロックサイズは、下側カラムドライバ５７０から遠いほど大きくなる。また、その４つの領域のうち下側カラムドライバ５７０に隣接する領域にも、行方向に配列されたメモリセルからなるブロックが敷き詰められる。このブロックのブロックサイズは、上側カラムドライバ５６０から遠いほど大きくなる。
【０１６１】
対称な２つの対角線により分割される４つの領域のうち右側ロウドライバ５８０に隣接する領域には、列方向に配列されたメモリセルからなるブロックが敷き詰められる。このブロックのブロックサイズは、左側ロウドライバ５５０から遠いほど大きくなる。また、その４つの領域のうち左側ロウドライバ５５０に隣接する領域にも、列方向に配列されたメモリセルからなるブロックが敷き詰められる。このブロックのブロックサイズは、右側ロウドライバ５８０から遠いほど大きくなる。
【０１６２】
上述したように、ブロックのサイズが異なるため、第３の実施の形態と同様に、アクセス単位が一定となるように複数のブロックの物理アドレスが指定される。
【０１６３】
推定不要領域Ａにおいては、電圧降下量が推定されず、反転符号化が行われない。また、上側行方向推定領域Ｂおよび下側行方向推定領域Ｄの奇数行においては、左側ロウドライバ５５０からの配線距離に応じた重み係数により電圧降下量が推定される。一方、上側行方向推定領域Ｂおよび下側行方向推定領域Ｄの偶数行においては、右側ロウドライバ５８０からの配線距離に応じた重み係数により電圧降下量が推定される。そして、符号化されたデータが行方向に細長いブロックに書き込まれる。
【０１６４】
また、右側列方向推定領域Ｃおよび左側列方向推定領域Ｅの奇数列においては、上側カラムドライバ５６０からの配線距離に応じた重み係数により電圧降下量が推定される。一方、それらの領域の偶数列においては、下側カラムドライバ５７０からの配線距離に応じた重み係数により電圧降下量が推定される。そして、符号化されたデータが列方向に細長いブロックに書き込まれる。
【０１６５】
このように、本技術の第５の実施の形態によれば、カラムドライバを２つ設けたため、カラムドライバが１つのみの場合と比較してカラム線の線間距離を長くすることができる。
【０１６６】
＜６．第６の実施の形態＞
上述の第１の実施の形態では、電圧降下量を推定して反転符号化してから、ＥＣＣ符号化を行っていた。しかし、このＥＣＣ符号化におけるパリティは、電圧降下量推定の後に生成されるため、電圧降下量の増大を抑制するための反転符号化が行われないという問題がある。このパリティについても電圧降下量を推定して反転符号化することが望ましい。この第６の実施の形態のメモリシステムは、パリティについても反転符号化する点において第１の実施の形態と異なる。
【０１６７】
図２７は、第６の実施の形態におけるメモリコントローラ３００の機能構成例を示すブロック図である。この第６の実施の形態のメモリコントローラ３００は、電圧降下量推定部３１０、比較部３２０、ライト側反転部３３１およびリード側反転部３４１を備えない点において第１の実施の形態と異なる。このメモリコントローラ３００は、原データを反転せずにＥＣＣ符号化を行って不揮発性メモリ４００に供給する。
【０１６８】
図２８は、第６の実施の形態におけるメモリ制御部４６０の一構成例を示すブロック図である。このメモリ制御部４６０は、電圧降下量推定部４６１、比較部４６２、ライト側反転部４６３、ライト処理部４６４、リード側反転部４６５、リード処理部４６６およびリクエストデコーダ４６７を備える。
【０１６９】
リクエストデコーダ４６７は、リクエストをデコードするものである。このリクエストデコーダ４６７は、デコード結果をライト処理部４６４およびリード処理部４６６に供給する。
【０１７０】
電圧降下量推定部４６１、比較部４６２、ライト側反転部４６３およびリード側反転部４６５の構成は、第１の実施の形態の電圧降下量推定部３１０、比較部３２０、ライト側反転部３３１およびリード側反転部３４１と同様である。ライト側反転部４６３は、ＥＣＣ符号化されたライトデータを反転符号化し、バス４４０に供給する。
【０１７１】
ライト処理部４６４は、制御信号（セット信号やリセット信号）により反転符号化されたデータをライトアドレスに書き込むものである。リード処理部４６６は、制御信号（センス信号）により、ライトアドレスからリードデータを読み出すものである。
【０１７２】
なお、第６の実施の形態において、上述の第２乃至第５の各実施の形態の構成を適用することができる。特に、電圧降下量の推定を行わない推定不要領域が設けられる第３乃至第５の実施の形態を適用する際には、その推定不要領域に反転ビットを書き込み、反転ビット以外のデータを残りの領域に書き込むことが望ましい。また、第６の実施の形態において、不揮発性メモリ４００が反転符号化を行っているが、メモリコントローラ３００が、ＥＣＣ符号化後に反転符号化をさらに行う構成としてもよい。
【０１７３】
このように、本技術の第６の実施の形態によれば、メモリシステムがＥＣＣ符号化を行ってから反転符号化を行うことにより、パリティについても電圧降下量を推定して符号化することができる。
【０１７４】
＜７．第７の実施の形態＞
上述の第１の実施の形態では、電圧降下量が閾値を超えないように、原データを反転していたが、電圧降下量を閾値以下に抑制することができるのであれば、反転符号化以外の符号化を行ってもよい。例えば、ビットごとに、順序を入れ替える符号化を行ってもよい。この第７の実施の形態のメモリコントローラ３００は、ビットごとに、順序を入れ替える符号化を反転符号化の代わりに行う点において第１の実施の形態と異なる。
【０１７５】
図２９は、第７の実施の形態における符号化部３３０の一構成例を示すブロック図である。この第７の実施の形態の符号化部３３０は、ライト側反転部３３１の代わりにライト側入替部３３３を備える点において第１の実施の形態と異なる。
【０１７６】
ライト側入替部３３３は、原データにおいてビットごとに順序を入れ替える処理を入替符号化として行うものである。このライト側入替部３３３は、比較部３２０から比較結果を入替ビットとして受け取る。入替ビットが「１」の場合にライト側入替部３３３は、原データのｎビット目を、７−ｎビット目に入れ替える処理をビットのそれぞれについて行う。ライト側入替部３３３は、入れ替え後のデータを入替データとして入替ビットとともに不揮発性メモリ４００に供給する。
【０１７７】
一方、入替ビットが「０」の場合にライト側入替部３３３は、原データを入替ビットとともに不揮発性メモリ４００に供給する。
【０１７８】
図３０は、第７の実施の形態における復号部３４０の一構成例を示すブロック図である。この第７の実施の形態の復号部３４０は、リード側反転部３４１の代わりにリード側入替部３４３を備える点において第１の実施の形態と異なる。このリード側入替部３４３の構成は、ライト側入替部３３３と同様である。
【０１７９】
図３１は、第７の実施の形態における符号化前後のデータの一例を示す図である。同図におけるａは、原データの一例を示す図であり、同図におけるｂは、入替データの一例を示す図である。また、同図におけるｃは、ＥＣＣ符号化対象データの一例を示す図であり、同図におけるｄは、ライトデータの一例を示す図である。
【０１８０】
まず、メモリコントローラ３００は、原データを反転せずにメモリセルに保持させた際のＩＲドロップを推定する。原データを２進数で「０００００１１１」とすると、ＩＲドロップは２１ＩＬＥＡＫＲ０と推定される。
【０１８１】
ＩＲドロップの推定値が閾値を超える場合にメモリコントローラ３００は、入替符号化を行い、図１３におけるｂに例示するように入替データ「１１１０００００」を生成する。この反転データのＩＲドロップは、式１より６ＩＬＥＡＫＲ０と推定される。このように、反転により、反転前と比較してＩＲドロップが減少する。
【０１８２】
そして、メモリコントローラ３００は、図１３におけるｃに例示するように、「１」を設定した入替ビットと入替データ（非管理情報）とをＥＣＣ符号化対象データとし、同図におけるｄに例示するようにパリティを生成する。
【０１８３】
このように、本技術の第７の実施の形態によれば、メモリシステムは、電圧降下量を推定し、その推定値が閾値を超える場合に原データにおいてビットのそれぞれの順序を入れ替えるため、電圧降下量の増大を抑制することができる。
【０１８４】
＜８．第８の実施の形態＞
上述の第１の実施の形態では、不揮発性メモリ４００として２値メモリセルを設けていたが多値メモリセルを設けてもよい。この第５の実施の形態のメモリシステムは、多値メモリセルを備える点において第１の実施の形態と異なる。
【０１８５】
図３２は、第８の実施の形態における可変抵抗素子５４２の抵抗分布の一例を示す図である。同図における縦軸は、メモリセル５４０のセル数であり、横軸は、抵抗値である。メモリセル５４０では、その抵抗分布は、２つの閾値Ｒｒｅｆ_ＬおよびＲｒｅｆ_Ｈにより３つに分けられている。ＬＲＳおよびＨＲＳの間の抵抗値の状態は、中抵抗状態（ＭＲＳ：Middle-Resistance State）と呼ばれる。例えば、ＬＲＳに「２」が割り当てられ、ＭＲＳに「１」が割り当てられ、ＨＲＳに「０」が割り当てられる。
【０１８６】
図３３は、第８の実施の形態における符号化部３３０の一構成例を示すブロック図である。この第８の実施の形態の符号化部３３０は、ライト側反転部３３１の代わりに、ライト側データ置換部３３４を備える点において第１の実施の形態と異なる。
【０１８７】
ライト側データ置換部３３４は、原データにおいてＬＲＳに対応する値「２」を、ＨＲＳに対応する値「０」に置換し、「０」を「２」に置換するものである。ＭＲＳに対応する「１」については、置換は行われない。１０進数で「２」および「０」を２進数で表すと「１０」および「００」であるため、これらの一方を他方に置き換える置換処理では、２ビットの一方のみを反転する部分的な反転処理が行われる。
【０１８８】
このライト側データ置換部３３４は、比較部３２０から比較結果を置換ビットとして受け取る。置換ビットが「１」の場合にライト側データ置換部３３４は、原データの置換処理を行う。そして、ライト側データ置換部３３４は、置換処理後のデータを置換データとして置換ビットとともに不揮発性メモリ４００に供給する。
【０１８９】
一方、置換ビットが「０」の場合ライト側データ置換部３３４は、原データを置換ビットとともに不揮発性メモリ４００に供給する。
【０１９０】
図３４は、第８の実施の形態における復号部３４０の一構成例を示すブロック図である。この第８の実施の形態の復号部３４０は、リード側反転部３４１の代わりにリード側データ置換部３４４を備える点において第１の実施の形態と異なる。このリード側データ置換部３４４の構成は、ライト側データ置換部３３４と同様である。
【０１９１】
図３５は、第８の実施の形態における符号化前後のデータの一例を示す図である。同図におけるａは、原データの一例を示す図であり、同図におけるｂは、置換データの一例を示す図である。また、同図におけるｃは、ＥＣＣ符号化対象データの一例を示す図であり、同図におけるｄは、ライトデータの一例を示す図である。
【０１９２】
まず、メモリコントローラ３００は、置換処理を行わずに原データをメモリセルに保持させた際のＩＲドロップを推定する。原データを２進数で「０００００００００１０１１０１０」とする。２ビットごとに原データを区切って１０進数で表すと、「００００１１２２」である。この原データにおいて「１」（ＭＲＳ）のメモリセルのリーク電流をＩＬＥＡＫ、「２」（ＬＲＳ）のメモリセルのリーク電流を２ＩＬＥＡＫとすると、ＩＲドロップは４１ＩＬＥＡＫＲ０と推定される。
【０１９３】
ＩＲドロップの推定値が閾値を超える場合にメモリコントローラ３００は、置換処理を行い、図３５におけるｂに例示するように入替データ「２２２２１１００」を生成する。この反転データのＩＲドロップは、３１ＩＬＥＡＫＲ０と推定される。このように、置換処理により、ＩＲドロップが減少する。
【０１９４】
このように、本技術の第８の実施の形態によれば、電圧降下量の推定値に基づいてＨＲＳに対応する値をＬＲＳに対応する値に置き換えるため、多値メモリセルを設けたメモリシステムにおいて、電圧降下量の増大を抑制することができる。
【０１９５】
なお、上述の実施の形態は本技術を具現化するための一例を示したものであり、実施の形態における事項と、特許請求の範囲における発明特定事項とはそれぞれ対応関係を有する。同様に、特許請求の範囲における発明特定事項と、これと同一名称を付した本技術の実施の形態における事項とはそれぞれ対応関係を有する。ただし、本技術は実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において実施の形態に種々の変形を施すことにより具現化することができる。
【０１９６】
また、上述の実施の形態において説明した処理手順は、これら一連の手順を有する方法として捉えてもよく、また、これら一連の手順をコンピュータに実行させるためのプログラム乃至そのプログラムを記憶する記録媒体として捉えてもよい。この記録媒体として、例えば、ＣＤ（Compact Disc）、ＭＤ（MiniDisc）、ＤＶＤ（Digital Versatile Disc）、メモリカード、ブルーレイディスク（Blu-ray（登録商標）Disc）等を用いることができる。
【０１９７】
なお、ここに記載された効果は必ずしも限定されるものではなく、本開示中に記載されたいずれかの効果であってもよい。
【０１９８】
なお、本技術は以下のような構成もとることができる。
（１）メモリセルまでの配線の配線抵抗と原データを前記メモリセルに保持させた際に前記メモリセルに生じるリーク電流とから電圧降下量を推定する電圧降下量推定部と、
前記推定された電圧降下量が所定の閾値を超える場合には所定の符号化処理を前記原データに対して行う符号化部と
を具備するメモリコントローラ。
（２）前記原データは、複数の区間データを含み、
前記電圧降下量推定部は、前記複数の区間データのそれぞれにおける前記配線抵抗の代表値に応じた重み係数と前記複数の区間データのそれぞれにおけるリーク電流に応じた値とに基づいて前記電圧降下量を推定する
前記（１）記載のメモリコントローラ。
（３）前記メモリセルが二次元格子状に配列されたメモリセルアレイと、
所定の方向に配列された前記メモリセルからなる行を駆動するロウドライバと、
前記所定の方向に垂直な方向に配列された前記メモリセルからなる列を駆動するカラムドライバと
をさらに具備し、
前記電圧降下量推定部は、前記ロウドライバまたは前記カラムドライバから前記メモリセルまでの前記配線の配線抵抗と前記リーク電流とから前記電圧降下量を推定する
前記（１）または（２）に記載のメモリコントローラ。
（４）前記メモリセルアレイにおいて所定の方向に配列されたメモリセルからなるブロックの位置を示すアドレスと前記所定の方向に垂直な方向に配列されたメモリセルからなるブロックの位置を示すアドレスとのいずれかをライトアドレスとして生成するアドレス生成部をさらに具備する
前記（３）記載のメモリコントローラ。
（５）前記アドレス生成部は、ブロックサイズの合計が一定となる複数の前記ブロックの位置を示すアドレスをライトアドレスとして生成する
前記（４）記載のメモリコントローラ。
（６）前記メモリセルアレイは、前記ロウドライバからの配線距離と前記カラムドライバからの配線距離とが所定距離を超えない推定不要領域と前記配線距離が前記所定距離を超える推定領域とに分割され、
前記電圧降下量推定部は、前記推定領域に前記原データを保持させる場合には前記電圧降下量を推定する
前記（４）または（５）に記載のメモリコントローラ。
（７）前記ロウドライバは、
奇数行を駆動する奇数ロウドライバと、
偶数行を駆動する偶数ロウドライバと
を備え、
前記電圧降下量推定部は、所定の推定領域内の前記奇数行に前記原データを保持させる場合には前記奇数ロウドライバからの前記配線の配線抵抗に基づいて前記電圧降下量を推定し、前記所定の推定領域内の前記偶数行に前記原データを保持させる場合には前記偶数ロウドライバからの前記配線の配線抵抗に基づいて前記電圧降下量を推定する
前記（６）記載のメモリコントローラ。
（８）前記カラムドライバは、
奇数列を駆動する奇数カラムドライバと、
偶数列を駆動する偶数カラムドライバと
を備え、
前記電圧降下量推定部は、所定の推定領域内の前記奇数列に前記原データを保持させる場合には前記奇数カラムドライバからの前記配線の配線抵抗に基づいて前記電圧降下量を推定し、前記所定の推定領域内の前記偶数列に前記原データを保持させる場合には前記偶数カラムドライバからの前記配線の配線抵抗に基づいて前記電圧降下量を推定する
前記（６）または（７）に記載のメモリコントローラ。
（９）前記符号化部は、前記所定の符号化処理において非管理情報と当該非管理情報を復号するための管理情報とを出力する
前記（１）から（８）のいずれかに記載のメモリコントローラ。
（１０）前記所定の符号化処理は、前記原データを反転する反転処理であり、
前記管理情報は、前記反転処理を行ったか否かを示す反転ビットを含む
前記（９）記載のメモリシステム。
（１１）前記所定の符号化処理は、前記原データのビットの順序を入れ替える入替処理であり、
前記管理情報は、前記入替処理を行ったか否かを示す入替ビットを含む
前記（９）記載のメモリコントローラ。
（１２）前記メモリセルは、複数のビットを保持する多値メモリセルであり、
前記符号化処理は、前記原データにおいて前記多値メモリセルに保持させる特定の値を前記特定の値と異なる値に置換する置換処理を含み、
前記管理情報は、前記置換処理を行ったか否かを示す置換ビットを含む
前記（９）記載のメモリコントローラ。
（１３）前記符号化部は、前記非管理情報の誤りの有無を検出するためのパリティを生成する誤り検出訂正符号化処理と前記所定の符号化処理とを行う
前記（９）記載のメモリコントローラ。
（１４）前記符号化部は、前記原データの誤りの有無を検出するためのパリティを生成して前記原データとともに前記電圧降下量推定部に供給する誤り検出訂正符号化処理と前記所定の符号化処理とを行い、
前記電圧降下量推定部は、前記配線抵抗と前記原データおよび前記パリティを前記メモリセルに保持させた際に前記メモリセルに生じるリーク電流とから電圧降下量を推定する
前記（１）から（１２）のいずれかに記載のメモリコントローラ。
（１５）二次元格子状に複数のメモリセルが配列されたメモリセルアレイにおいて所定の方向に配列されたメモリセルからなるブロックの位置を示すアドレスと前記所定の方向に垂直な方向に配列されたメモリセルからなるブロックの位置を示すアドレスとのいずれかをライトアドレスとして生成するアドレス生成部と、
原データを符号化して前記ライトアドレスに保持させるライトデータとして供給する符号化部と
を具備するメモリコントローラ。
（１６）メモリセルまでの配線の配線抵抗と原データを前記メモリセルに保持させた際に前記メモリセルに生じるリーク電流とから電圧降下量を推定する電圧降下量推定部と、
前記推定された電圧降下量が所定の閾値を超える場合には所定の符号化処理を前記原データに対して行ってライトデータを生成する符号化部と、
前記ライトデータに基づいて前記メモリセルアレイを駆動するドライバと
を具備する不揮発性メモリ。
（１７）メモリセルまでの配線の配線抵抗と原データを前記メモリセルに保持させた際に前記メモリセルに生じるリーク電流とから電圧降下量を推定する電圧降下量推定手順と、  前記推定された電圧降下量が所定の閾値を超える場合には所定の符号化処理を前記原データに対して行う符号化手順と
を具備するメモリコントローラの制御方法。
【符号の説明】
【０１９９】
１００  ホストコンピュータ
２００  ストレージ
３００  メモリコントローラ
３０１  ホストインターフェース
３０２  ＲＡＭ
３０３  ＣＰＵ
３０４  ＥＣＣ処理部
３０５  ＲＯＭ
３０６、４４０  バス
３０７  メモリインターフェース
３１０、４６１  電圧降下量推定部
３１１  乗算部
３１２  乗算器
３１３  重み係数供給部
３１４  加算部
３１５  計数部
３２０、４６２  比較部
３３０  符号化部
３３１、４６３  ライト側反転部
３３２  ＥＣＣ符号化部
３３３  ライト側入替部
３３４  ライト側データ置換部
３４０  復号部
３４１、４６５  リード側反転部
３４２  ＥＣＣ復号部
３４３  リード側入替部
３４４  リード側データ置換部
３５０  コマンドデコーダ
３６０  アドレス変換部
３７０  アドレス変換テーブル
４００  不揮発性メモリ
４１０、６１０  データバッファ
４２０  ＭＡＵ配置部
４３０、６３０  アドレスデコーダ
４５０  制御インターフェース
４６０  メモリ制御部
４６４  ライト処理部
４６６  リード処理部
４６７  リクエストデコーダ
５００、６２０  メモリアレイユニット
５１０  カラムドライバ
５２０  ロウドライバ
５３０  メモリセルアレイ
５４０  メモリセル
５４１  双方向ダイオード
５４２  可変抵抗素子
５５０  左側ロウドライバ
５６０  上側カラムドライバ
５７０  下側カラムドライバ
５８０  右側ロウドライバ
６００  メモリユニット
【図１】
2017138235.tif 000007
【図２】
2017138235.tif 000008
【図３】
2017138235.tif 000009
【図４】
2017138235.tif 000010
【図５】
2017138235.tif 000011
【図６】
2017138235.tif 000012
【図７】
2017138235.tif 000013
【図８】
2017138235.tif 000014
【図９】
2017138235.tif 000015
【図１０】
2017138235.tif 000016
【図１１】
2017138235.tif 000017
【図１２】
2017138235.tif 000018
【図１３】
2017138235.tif 000019
【図１４】
2017138235.tif 000020
【図１５】
2017138235.tif 000021
【図１６】
2017138235.tif 000022
【図１７】
2017138235.tif 000023
【図１８】
2017138235.tif 000024
【図１９】
2017138235.tif 000025
【図２０】
2017138235.tif 000026
【図２１】
2017138235.tif 000027
【図２２】
2017138235.tif 000028
【図２３】
2017138235.tif 000029
【図２４】
2017138235.tif 000030
【図２５】
2017138235.tif 000031
【図２６】
2017138235.tif 000032
【図２７】
2017138235.tif 000033
【図２８】
2017138235.tif 000034
【図２９】
2017138235.tif 000035
【図３０】
2017138235.tif 000036
【図３１】
2017138235.tif 000037
【図３２】
2017138235.tif 000038
【図３３】
2017138235.tif 000039
【図３４】
2017138235.tif 000040
【図３５】
2017138235.tif 000041
【国際調査報告】
2017138235.tif 000042
2017138235.tif 000043