(57)【要約】【課題】書き込みデータとパリティデータの転送を効率的に行う。【解決手段】実施形態に係わるメモリコントローラは、バンク♯１に対する複数のコマンドをキューイングし、複数のコマンドの各々に対応付けられるフラグを有するキューイング部を備え、複数のコマンドを順番に実行するバンクコントローラ１１と、複数のコマンドのうちの実行される所定コマンドがバンク♯１内の複数の物理アドレスのうちの１つに対する書き込みコマンドであるとき、書き込みデータをバンク♯１に転送するデータコントローラ１２と、所定コマンドに対応付けられるフラグの値に応じて、所定コマンドが完了するまでに、書き込みデータを復元するためのパリティデータを生成するパリティコントローラ１３と、を具備する。【選択図】図１
2016167210.tif 000002
【特許請求の範囲】
【請求項１】
バンクに対する複数のコマンドをキューイングし、前記複数のコマンドの各々に対応付けられる第１のフラグを有するキューイング部を備え、前記複数のコマンドを順番に実行するバンクコントローラと、
前記複数のコマンドのうちの実行される所定コマンドが前記バンク内の複数の物理アドレスのうちの１つに対する書き込みコマンドであるとき、書き込みデータを前記バンクに転送するデータコントローラと、
前記所定コマンドに対応付けられる前記第１のフラグの値に応じて、前記所定コマンドが完了するまでに、前記書き込みデータを復元するためのパリティデータを生成するパリティコントローラと、を具備し、
各物理アドレスに対する書き込みは、複数のステージにより実行され、
前記複数の物理アドレスが最初のパリティグループ内に含まれるとき、前記複数の物理アドレスの書き込みデータを復元するパリティデータは、前記複数のステージのうち最初のステージで生成され、
前記複数の物理アドレスが前記最初のパリティグループ以外のパリティグループ内に含まれるとき、前記複数の物理アドレスの書き込みデータを復元するパリティデータは、前記複数のステージの何れかのステージで生成される、
メモリコントローラ。
【請求項２】
前記キューイング部は、前記複数のコマンドの各々に対応付けられる第２のフラグを有し、前記データコントローラは、前記所定コマンドに対応付けられる前記第２のフラグの値に応じて、前記パリティデータを前記バンク内に転送する、請求項１に記載のメモリコントローラ。
【請求項３】
前記複数の物理アドレスの各々は、第１乃至第ｎの論理アドレス（ｎは２以上の自然数）を備え、
前記所定コマンドは、前記複数の物理アドレスのうちの１つ内の前記第１の論理アドレスに対する書き込みコマンドであり、
前記書き込みデータは、前記第１乃至第ｎの論理アドレスの全てに対する書き込みデータを含み、かつ、前記複数の物理アドレスのうちの前記１つにｎ回転送される、
請求項２に記載のメモリコントローラ。
【請求項４】
不揮発性半導体メモリと、前記不揮発性半導体メモリを制御するメモリコントローラとを具備し、
前記メモリコントローラは、
バンクに対する複数のコマンドをキューイングし、前記複数のコマンドの各々に対応付けられる第１のフラグを有するキューイング部を備え、前記複数のコマンドを順番に実行するバンクコントローラと、
前記複数のコマンドのうちの実行される所定コマンドが前記バンク内の複数の物理アドレスのうちの１つに対する書き込みコマンドであるとき、書き込みデータを前記バンクに転送するデータコントローラと、
前記所定コマンドに対応付けられる前記第１のフラグの値に応じて、前記所定コマンドが完了するまでに、前記書き込みデータを復元するためのパリティデータを生成するパリティコントローラと、
を備え、
各物理アドレスに対する書き込みは、複数のステージにより実行され、
前記複数の物理アドレスが最初のパリティグループ内に含まれるとき、前記複数の物理アドレスの書き込みデータを復元するパリティデータは、前記複数のステージのうち最初のステージで生成され、
前記複数の物理アドレスが前記最初のパリティグループ以外のパリティグループ内に含まれるとき、前記複数の物理アドレスの書き込みデータを復元するパリティデータは、前記複数のステージの何れかのステージで生成される、
データストレージデバイス。
【請求項５】
バンク内の複数の物理アドレスの各々が複数の論理アドレスを有するときの前記複数の物理アドレスに対するデータ書き込み方法において、
各物理アドレスに対する書き込みは、複数のステージにより実行され、
前記複数の物理アドレスが最初のパリティグループ内に含まれるとき、前記複数の物理アドレスの書き込みデータを復元するパリティデータは、前記複数のステージのうち最初のステージで生成され、
前記複数の物理アドレスが前記最初のパリティグループ以外のパリティグループ内に含まれるとき、前記複数の物理アドレスの書き込みデータを復元するパリティデータは、前記複数のステージの何れかのステージで生成される、
データ書き込み方法。
【発明の詳細な説明】
【技術分野】
【０００１】
実施形態は、メモリコントローラ、データストレージデバイス、及び、データ書き込み方法に関する。
【背景技術】
【０００２】
データストレージデバイスの記憶部としての不揮発性半導体メモリ、例えば、NANDフラッシュメモリは、書き込みデータに対応付けられたパリティデータを生成することにより、意図せずに書き込みデータが消失したときに書き込みデータを復元する機能を備える。また、このパリティデータを書き込みデータと共に不揮発性半導体メモリ内に記憶させれば、書き込み後においても書き込みデータを保護できる。
【０００３】
例えば、１つのメモリセルにｎビットデータ（ｎは、２以上の自然数）を記憶可能なｎ値セル（n-level cell）を含む多値(multi-level)不揮発性半導体メモリについて考える。この場合、１つの物理アドレス(one physical addresses)内のｎの論理アドレス(n-logical addresses)の書き込みデータは、メモリコントローラ内のｎのパリティ生成回路により復元可能である。
【０００４】
一方、１つの物理アドレス内のｎの論理アドレスの書き込みを完了させるためには、ｎ回の書き込み（First to n-th stages）が必要である。この場合、メモリコントローラは、各々の書き込みにおいて同じ書き込みデータを繰り返し不揮発性半導体メモリに転送する。このため、ｎの論理アドレスに係わるパリティデータは、このｎ回の書き込みのうちの１つの書き込みデータに基づいて生成される。
【０００５】
しかし、近年、書き込み速度を向上させるなどの理由から、多値不揮発性半導体メモリにおいて、複数の物理アドレス（各物理アドレスはｎの論理アドレスを備える）に対する書き込み順序についての再検討がなされている。
【０００６】
この場合、メモリコントローラ内でのパリティデータの生成、及び、メモリコントローラから不揮発性半導体メモリへの書き込みデータおよびパリティデータの転送、がそれぞれうまく噛み合わないと、これらデータの効率的な転送が行えず、結果として、書き込み速度が低下する。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１３−２２５８３０号公報
【特許文献２】米国特許出願公開第２０１３／０１３２６４６号明細書
【特許文献３】米国特許出願公開第２００９／０２０４８７２号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００８】
実施形態は、書き込みデータとパリティデータの転送を効率的に行う技術を提案する。
【課題を解決するための手段】
【０００９】
実施形態によれば、メモリコントローラは、バンクに対する複数のコマンドをキューイングし、前記複数のコマンドの各々に対応付けられる第１のフラグを有するキューイング部を備え、前記複数のコマンドを順番に実行するバンクコントローラと、前記複数のコマンドのうちの実行される所定コマンドが前記バンク内の複数の物理アドレスのうちの１つに対する書き込みコマンドであるとき、書き込みデータを前記バンクに転送するデータコントローラと、前記所定コマンドに対応付けられる前記第１のフラグの値に応じて、前記所定コマンドが完了するまでに、前記書き込みデータを復元するためのパリティデータを生成するパリティコントローラと、を備える。各物理アドレスに対する書き込みは、複数のステージにより実行され、前記複数の物理アドレスが最初のパリティグループ内に含まれるとき、前記複数の物理アドレスの書き込みデータを復元するパリティデータは、前記複数のステージのうち最初のステージで生成され、前記複数の物理アドレスが前記最初のパリティグループ以外のパリティグループ内に含まれるとき、前記複数の物理アドレスの書き込みデータを復元するパリティデータは、前記複数のステージの何れかのステージで生成される。
【図面の簡単な説明】
【００１０】
【図１】第１の実施例に係わるメモリコントローラを示す図。
【図２】バンクコントローラの例を示す図。
【図３】データ書き込み方法の例を示す図。
【図４】データ書き込み方法の例を示す図。
【図５】第２の実施例に係わるメモリコントローラを示す図。
【図６】バンクコントローラの例を示す図。
【図７】コマンドの実行手順の例を示す図。
【図８】コマンドの実行手順の例を示す図。
【図９】パリティデータを生成するタイミングの例を示す図。
【図１０】パリティデータを生成するタイミングの例を示す図。
【図１１】パリティデータを生成するタイミングの例を示す図。
【図１２】ポータブルコンピュータの例を示す図。
【図１３】データストレージデバイスの例を示す図。
【図１４】ハイブリッド型データストレージデバイスの例を示す図。
【発明を実施するための形態】
【００１１】
以下、図面を参照しながら実施例を説明する。
【００１２】
１．  第１の実施例  
(1)  メモリコントローラ  
図１は、第１の実施例に係わるメモリコントローラを示している。図２は、バンクコントローラの例を示している。
【００１３】
メモリコントローラ１０は、バンクコントローラ１１、データコントローラ１２、パリティコントローラ１３、及び、メモリインターフェイスコントローラ１４を備える。
【００１４】
バンクコントローラ１１は、例えば、図２に示すように、メモリ、例えば、NANDフラッシュメモリのバンク♯０に対する複数のコマンドＣ０〜Ｃ３１をキューイングするキューイング部１１ａと、複数のコマンドＣ０〜Ｃ３１を順番に実行する処理部１１ｂと、を備える。
【００１５】
キューイング部１１ａは、複数のコマンドＣ０〜Ｃ３１の各々に対応付けられるフラグＦ１，Ｆ２を有する。
【００１６】
フラグＦ１は、エントリの実行中にパリティデータを生成するか否かを決定する。即ち、フラグＦ１がアクティブ、例えば、“１”のとき、エントリの実行中にパリティデータを生成し、フラグＦ１がノンアクティブ、例えば、“０”のとき、エントリの実行中にパリティデータを生成しない。
【００１７】
図２の例では、キューイング部１１ａにキューイングされたコマンドＣ０〜Ｃ３１のうち、コマンドＣ０，Ｃ１，Ｃ３に対応付けられたフラグＦ１がアクティブである。従って、コマンドＣ０，Ｃ１，Ｃ３の実行中に、それぞれ、パリティデータが生成される。
【００１８】
フラグＦ２は、パリティデータをバンク♯０内に書き込むか否かを決定する。即ち、フラグＦ２がアクティブ、例えば、“１”のとき、パリティデータをバンク♯０内に書き込み、フラグＦ２がノンアクティブ、例えば、“０”のとき、パリティデータをバンク♯０内に書き込まない。
【００１９】
図２の例では、コマンドＣ０〜Ｃ３１のうち、コマンドＣ６に対応付けられたフラグＦ２がアクティブである。従って、コマンドＣ６において、パリティデータがバンク♯０内に書き込まれる。
【００２０】
データコントローラ１２は、実行するエントリ、例えば、図２のコマンドＣ０が、バンク♯０内の複数の物理アドレスのうちの１つに対する書き込みコマンドであるとき、データバッファ（例えば、ＤＲＡＭ、ＭＲＡＭなど）１５からの書き込みデータをメモリ１６内のバンク♯０に転送する。
【００２１】
また、データコントローラ１２は、実行するエントリ、例えば、図２のコマンドＣ６が、パリティデータの書き込みコマンドであり、かつ、コマンドＣ６に対応付けられるフラグＦ２がアクティブであるとき、コマンドＣ６において、パリティデータをバンク♯０に転送する。
【００２２】
パリティコントローラ１３は、複数のコマンドＣ０〜Ｃ３１のうち、実行するエントリに対応付けられるフラグＦ１がアクティブであるとき、そのコマンドの実行中に、バンク♯０に転送される書き込みデータを復元するためのパリティデータを生成する。
【００２３】
ここで、メモリ１６が１つのメモリセルにｎビットデータ（ｎは２以上の自然数）を記憶可能なｎ値メモリであるとき、バンク♯０内の複数の物理アドレスの各々は、例えば、ｎページデータを記憶可能なように、ｎの論理アドレスを備える。
【００２４】
また、パリティコントローラ１３は、ｎのパリティ保持回路１３−１，１３−２，…１３−ｎを備える。即ち、パリティコントローラ１３は、ｎの物理アドレスに対する書き込みデータ（ｎ値）を復元するｎのパリティデータをｎのパリティ保持回路１３−１，１３−２，…１３−ｎにより保持可能である。
【００２５】
メモリインターフェイスコントローラ１４は、メモリコントローラ１０とメモリ１６との間で、データの送信／受信を制御する。例えば、データ書き込みにおいて、メモリインターフェイスコントローラ１４は、メモリ１６内のバンク♯０に書き込みデータを送信する。また、データ読み出しにおいて、メモリインターフェイスコントローラ１４は、メモリ１６内のバンク♯０からの読み出しデータを受信する。
【００２６】
メモリ１６は、複数のバンクを有していてもよい。この場合、複数のバンクの各々は、１つの不揮発性半導体メモリ（１チップ）内の１つのブロックであってもよい。また、複数のバンクは、それぞれ、異なる複数の不揮発性半導体メモリ（複数のチップ）であってもよい。
【００２７】
(2)  データ書き込み方法  
図３及び図４は、それぞれ、図１のメモリコントローラによるデータ書き込み方法の例を示している。
【００２８】
このデータ書き込み方法は、例えば、１つのバンクが複数のパリティグループを備え、複数のパリティグループの各々がｎの物理アドレス（ｎは２以上の自然数）を備え、かつ、ｎの物理アドレスの各々がｎの論理アドレスを備える場合に適用される。
【００２９】
ここで、パリティグループとは、複数の物理アドレスのグループのことである。複数の物理アドレスは、連続（ex.  ０，１，２，…）であってもよいし、不連続（ex.  ０，２，４，…）であってもよい。
【００３０】
これら複数の物理アドレスに対する書き込みデータを復元するためのパリティデータは、まとめて１つの物理アドレスに記憶される。従って、１つの物理アドレスがｎの論理アドレスを含む場合、１つのパリティグループは、ｎの物理アドレスを含むのが望ましい。
【００３１】
以下では、説明を簡単にするため、ｎが３の場合、即ち、１つのパリティグループが３つの物理アドレスを備え、かつ、３つの物理アドレスの各々が３つの論理アドレスを備える場合を説明する。
【００３２】
この場合、複数の物理アドレスＰＡ０〜ＰＡ９の各々に対するデータ書き込みは、第１乃至第３のステージにより完了する。
【００３３】
第１乃至第３のステージの各々においては、下位ページデータ、中位ページデータ、及び、上位ページデータを含んだ３ページデータを、メモリコントローラからメモリ内のバンクに転送する。これは、１つの物理アドレスに対するデータ書き込みを終えるために、３ページデータを、３回、メモリ内のバンクに転送することを意味する。
【００３４】
まず、書き込みコマンドが発行されると、パリティグループが生成される（図４のステップＳＴ１１）。
【００３５】
バンクコントローラ１１は、パリティグループを生成するリクエストにより、パリティグループを生成する。本例では、バンクコントローラ１１は、１つのパリティグループが３つの物理アドレスを含むようにグループ分けする。例えば、図３に示すように、パリティグループＰＧ０は、３つの物理アドレスＰＡ０，ＰＡ１，ＰＡ２を含み、パリティグループＰＧ１は、３つの物理アドレスＰＡ４，ＰＡ５，ＰＡ６を含む。
【００３６】
この後、バンクコントローラ１１は、キューイング部内にキューイングされた複数のエントリ（コマンドＣ０〜Ｃ２６）を順番に実行する。
【００３７】
コマンドＣ０は、物理アドレスＰＡ０に対する書き込みコマンドである。従って、実行するエントリがコマンドＣ０であるとき、物理アドレスＰＡ０に書き込む３ページデータがメモリ内のバンクに転送される（第１のステージ）。
【００３８】
コマンドＣ１は、物理アドレスＰＡ１に対する書き込みコマンドである。従って、実行するエントリがコマンドＣ１であるとき、物理アドレスＰＡ１に書き込む３ページデータがメモリ内のバンクに転送される（第１のステージ）。
【００３９】
コマンドＣ２は、物理アドレスＰＡ０に対する書き込みコマンドである。従って、実行するエントリがコマンドＣ２であるとき、物理アドレスＰＡ０に書き込む３ページデータがメモリ内のバンクに転送される。（第２のステージ）。
【００４０】
コマンドＣ３は、物理アドレスＰＡ２に対する書き込みコマンドである。従って、実行するエントリがコマンドＣ３であるとき、物理アドレスＰＡ２に書き込む３ページデータがメモリ内のバンクに転送される（第１のステージ）。
【００４１】
コマンドＣ４は、物理アドレスＰＡ１に対する書き込みコマンドである。従って、実行するエントリがコマンドＣ４であるとき、物理アドレスＰＡ１に書き込む３ページデータがメモリ内のバンクに転送される（第２のステージ）。
【００４２】
コマンドＣ５は、物理アドレスＰＡ０に対する書き込みコマンドである。従って、実行するエントリがコマンドＣ５であるとき、物理アドレスＰＡ０に書き込む３ページデータがメモリ内のバンクに転送される（第３のステージ）。
【００４３】
ここで、実行するエントリが最初のパリティグループＰＧ０内の物理アドレスに対する書き込みコマンドであるか、が確認される（図４のステップＳＴ１２）。
【００４４】
実行するエントリが最初のパリティグループＰＧ０内の物理アドレスに対する書き込みコマンドであるとき、そのパリティグループＰＧ０内の全ての物理アドレスＰＡ０，ＰＡ１，ＰＡ２の第１のステージにおいて、パリティデータが生成される（図４のステップＳＴ１３）。
【００４５】
例えば、図２に示すように、実行するエントリがコマンドＣ０であるとき、コマンドＣ０に対応付けられるフラグＦ１をアクティブとすることにより、コマンドＣ０の実行中（第１のステージ）において、物理アドレスＰＡ０に書き込む３ページデータを復元するためのパリティデータが生成される。
【００４６】
同様に、実行するエントリがコマンドＣ１，Ｃ３であるとき、コマンドＣ１，Ｃ３に対応付けられるフラグＦ１をそれぞれアクティブとすることにより、コマンドＣ１，Ｃ３の実行中（第１のステージ）において、物理アドレスＰＡ１，ＰＡ２に書き込む３ページデータを復元するためのパリティデータがそれぞれ生成される。
【００４７】
この後、コマンドＣ０，Ｃ１，Ｃ３の実行中に生成された最初のパリティグループＰＧ０に係わる３つのパリティデータをバンク内に記憶するか、が確認される（図４のステップＳＴ１４）。
【００４８】
これら３つのパリティデータがバンク内に記憶されるとき、これら３つのパリティデータのプログラムが実行される（図４のステップＳＴ１５）。
【００４９】
例えば、図３に示すように、これら３つのパリティデータは、１つの物理アドレスＰＡ３内の３つの論理アドレスに記憶される。
【００５０】
即ち、コマンドＣ６、Ｃ１０、Ｃ１４において、物理アドレスＰＡ０、ＰＡ１、ＰＡ２に係わるパリティデータが、物理アドレスＰＡ３に書き込まれる。
【００５１】
なお、最初のパリティグループＰＧ０に係わる全てのパリティデータの書き込みは、コマンドＣ６，Ｃ１０，Ｃ１４の全てが完了したときに完了する。
【００５２】
ここで、本例では、パリティグループＰＧ０内の全ての物理アドレスＰＡ０，ＰＡ１，ＰＡ２に対するデータ書き込みが完了する前に、最初のパリティグループＰＧ０のパリティデータの書き込みを開始できる。例えば、パリティデータの書き込みコマンドＣ６，Ｃ１０は、パリティグループＰＧ０内の物理アドレスＰＡ０，ＰＡ１，ＰＡ２に対する最後の書き込みコマンドＣ１１よりも前に実行される。
【００５３】
また、本例では、パリティグループＰＧ０の全てのパリティデータの書き込みが完了する前に、次のパリティグループＰＧ１内の物理アドレスＰＡ４，ＰＡ５に対するデータ書き込みが開始可能である。例えば、パリティグループＰＧ１内の物理アドレスＰＡ４，ＰＡ５に対する書き込みコマンドＣ９，Ｃ１２，Ｃ１３は、パリティグループＰＧ０の最後のパリティデータの書き込みコマンドＣ１４よりも前に実行される。
【００５４】
但し、実行するエントリがコマンドＣ９，Ｃ１２，Ｃ１３であるとき、後述するように、これらコマンドＣ９，Ｃ１２，Ｃ１３の実行中に、パリティグループＰＧ１のパリティデータを生成することはできない。
【００５５】
なぜなら、パリティグループＰＧ０のパリティデータの書き込みが完了するまでは、パリティコントローラは、パリティグループＰＧ０のパリティデータを保持していなければならないからである。
【００５６】
即ち、実行するエントリが最初のパリティグループＰＧ０以外のパリティグループ内の物理アドレスに対する書き込みコマンドであるとき、直前のパリティグループのパリティデータをメモリのバンク内に記憶するか、が確認される（図４のステップＳＴ１２及びＳＴ１７）。
【００５７】
直前のパリティグループのパリティデータがメモリのバンク内に記憶されるとき、その直前のパリティグループの全てのパリティデータの書き込みが完了していることを条件に、次のパリティグループのパリティデータの生成が許可される（図４のステップＳＴ１８）。
【００５８】
例えば、図３に示すように、パリティグループＰＧ０のパリティデータの書き込みは、コマンドＣ１４が完了したときに完了する。従って、パリティグループＰＧ１のパリティデータの生成は、コマンドＣ１５又はそれ以降に実行される。
【００５９】
ここで、実行するエントリが最初のパリティグループＰＧ０以外のパリティグループＰＧ１内の物理アドレスに対する書き込みコマンドであるとき、パリティグループＰＧ１内の最初の物理アドレスＰＡ４の第３のステージ、パリティグループＰＧ１内の次の物理アドレスＰＡ５の第２のステージ、パリティグループＰＧ１内の最後の物理アドレスＰＡ６の第１のステージにおいて、それぞれ、パリティデータが生成される（図４のステップＳＴ１９）。
【００６０】
例えば、図３に示すように、実行するエントリがコマンドＣ１５であるとき、コマンドＣ１５に対応付けられるフラグＦ１をアクティブとすることにより、コマンドＣ１５の実行中（第１のステージ）において、物理アドレスＰＡ６に書き込む３ページデータを復元するためのパリティデータが生成される。
【００６１】
同様に、実行するエントリがコマンドＣ１６，Ｃ１７であるとき、コマンドＣ１６，Ｃ１７に対応付けられるフラグＦ１をそれぞれアクティブとすることにより、コマンドＣ１６，Ｃ１７の実行中（第２又は第３のステージ）において、物理アドレスＰＡ５，ＰＡ４に書き込む３ページデータを復元するためのパリティデータがそれぞれ生成される。
【００６２】
この後、コマンドＣ１５，Ｃ１６，Ｃ１７の実行中に生成された３つのパリティデータをバンク内に記憶するか、が確認される（図４のステップＳＴ１４）。
【００６３】
これら３つのパリティデータがバンク内に記憶されるとき、これら３つのパリティデータのプログラムが実行される（図４のステップＳＴ１５）。
【００６４】
例えば、図３に示すように、これら３つのパリティデータは、１つの物理アドレスＰＡ７内の３つの論理アドレスに記憶される。
【００６５】
即ち、コマンドＣ１８、Ｃ２２、Ｃ２６において、物理アドレスＰＡ６、ＰＡ７、ＰＡ８に係わるパリティデータが、物理アドレスＰＡ７に書き込まれる。
【００６６】
そして、最後のパリティグループのパリティデータの書き込みが完了したことを確認した後、本例のデータ書き込み動作は完了する（図４のステップＳＴ１６）。
【００６７】
なお、本例においては、物理アドレスＰＡ０〜ＰＡ２を含むパリティグループＰＧ０のパリティデータは、物理アドレスＰＡ３に記憶され、物理アドレスＰＡ４〜ＰＡ６を含むパリティグループＰＧ１のパリティデータは、物理アドレスＰＡ７に記憶される。
【００６８】
但し、これに限られず、これらパリティグループＰＧ０，ＰＧ１のパリティデータは、物理アドレスＰＡ３，ＰＡ７以外のエリア（同一バンク内の他の物理アドレス、異なるバンク内の物理アドレス、異なる不揮発性半導体メモリ内の物理アドレスなど）に記憶してもよい。
【００６９】
以上のデータ書き込み動作によれば、書き込みデータとパリティデータの転送は、効率的に行われる。
【００７０】
例えば、上述の例では、最初のパリティグループＰＧ０に関し、物理アドレスＰＡ０〜ＰＡ２に対する書き込みデータを復元するためのパリティデータの生成は、全て、第１のステージで実行される。この場合、全てのパリティデータの生成は、コマンドＣ３が完了したときに完了し、コマンドＣ４からパリティデータの書き込みを開始できる。
【００７１】
また、最初のパリティグループＰＧ０以外のパリティグループＰＧ１に関し、物理アドレスＰＡ４〜ＰＡ６に対する書き込みデータを復元するためのパリティデータの生成は、互いに異なるステージ（第１、第２、又は、第３のステージ）で実行される。この場合、全てのパリティデータの生成は、コマンドＣ１７が完了したときに完了し、コマンドＣ１８からパリティデータの書き込みを開始できる。
【００７２】
このようなデータ書き込み方法は、特に、複数のバンクを同時にアクセス可能なマルチチャネルシステムにおいて、ユーザデータのプログラムに引き続き、パリティデータのプログラムを行う場合に有効である。これについては、適用例において説明する。
【００７３】
(4)   まとめ  
第１の実施例によれば、書き込みデータとパリティデータの転送を効率的に行うことができる。
【００７４】
２．  第２の実施例  
(1)  メモリコントローラ  
図５は、第２の実施例に係わるメモリコントローラを示している。図６は、バンクコントローラの例を示している。
【００７５】
第２の実施例は、第１の実施例と比べると、メモリコントローラ１０が、メモリ１６内の複数のバンク♯０，♯１を同時にアクセス可能なマルチチャネルシステムに対応している点にある。以下では、第１の実施例と異なる部分のみを説明し、第１の実施例で説明した要素と同じ要素には同じ符号を付すことによりその詳細な説明を省略する。
【００７６】
なお、本例では、複数のバンク♯０，♯１の数は、２つであるが、これに限られず、３つ以上であってもよい。
【００７７】
メモリコントローラ１０は、バンクコントローラ１１、データコントローラ１２、パリティコントローラ１３、及び、メモリインターフェイスコントローラ１４を備える。
【００７８】
バンクコントローラ１１は、例えば、図６に示すように、メモリ（例えば、NANDフラッシュメモリ）１６のバンク♯０に対する複数のコマンドＣ０〜Ｃ３１をキューイングするキューイング部１１ａと、メモリ１６のバンク♯１に対する複数のコマンドＣ０〜Ｃ３１をキューイングするキューイング部１１ｃと、キューイング部１１ａ，１１ｃにキューイングされた複数のコマンドＣ０〜Ｃ３１を順番に実行する処理部１１ｂと、を備える。
【００７９】
キューイング部１１ａ，１１ｃは、それぞれ、複数のコマンドＣ０〜Ｃ３１の各々に対応付けられるフラグＦ１，Ｆ２を有する。
【００８０】
フラグＦ１は、エントリの実行中にパリティデータを生成するか否かを決定する。フラグＦ２は、パリティデータをバンク♯０，♯１内に書き込むか否かを決定する。フラグＦ１，Ｆ２については、第１の実施例で説明したので、ここでの説明を省略する。
【００８１】
第２の実施例では、処理部１１ｂは、書き込み動作において、複数のバンク♯０，♯１に対するデータ転送を並行して行うことができる。但し、処理部１１ｂは、複数のバンク♯０，♯１のうちの１つに対するコマンドの実行を、それ以外の残りのバンクにおけるコマンドの実行の状況に応じて、停止／再開する。
【００８２】
例えば、処理部１１ｂは、複数のバンク♯０，♯１のうちの１つに対するパリティデータの生成のタイミングを、それ以外の残りのバンクにおけるパリティデータの生成／転送の状況に応じて、変化させる。また、処理部１１ｂは、複数のバンク♯０，♯１のうちの１つに対するパリティデータの生成を、それ以外の残りのバンクにおけるパリティデータの生成／転送の状況に応じて、停止／再開させる。
【００８３】
(2)  コマンドの実行手順  
図７及び図８は、それぞれ、図５のメモリコントローラによるコマンドの実行手順の例を示している。
【００８４】
図７に示すように、まず、キューイングされたエントリがあるかが確認される（ステップＳＴ２１）。キューイングされたエントリがあるときは、実行するエントリが決定される（ステップＳＴ２２）。エントリがないときは処理が終わる。
【００８５】
実行するエントリは、図７のステップＳＴ２２（図８に示すサブルーチン）で決定される。
【００８６】
図８に示すように、バンク♯０に対するエントリがあり、かつ、バンク♯０がレディ状態であるとき、バンク♯０に対するエントリは、実行候補となる（ステップＳＴ３１）。
【００８７】
但し、バンク♯０に対するエントリは、待ちコマンドではないことを条件とする。また、バンク♯０に対するエントリが待ちコマンドであっても、その待ち時間が終了し、かつ、バンク♯０に対する次のエントリがあるときは、その次のエントリは、実行候補となる（ステップＳＴ３２）。
【００８８】
また、バンク♯１に対するエントリがあり、かつ、バンク♯１がレディ状態であるとき、バンク♯１に対するエントリは、実行候補となる（ステップＳＴ３３）。
【００８９】
但し、バンク♯１に対するエントリは、待ちコマンドではないことを条件とする。また、バンク♯１に対するエントリが待ちコマンドであっても、その待ち時間が終了し、かつ、バンク♯１に対する次のエントリがあるときは、その次のエントリは、実行候補となる（ステップＳＴ３４）。
【００９０】
また、バンク♯０，♯１の優先順序が確認される（ステップＳＴ３５）。
【００９１】
バンク♯０が優先されるとき、バンク♯０に対するエントリが、実行するエントリとなる（ステップＳＴ３６）。これに対し、バンク♯１が優先されるとき、バンク♯１に対するエントリが、実行するエントリとなる（ステップＳＴ３９）。
【００９２】
尚、ステップＳＴ３３及びＳＴ３４において、Ｎｏのときは、実行するエントリは、バンク♯０に決定される（ステップＳＴ３３又はＳＴ３４からステップＳＴ３６へのルート）。
【００９３】
バンク♯０に対するエントリがない、バンク♯０がビジー状態である、又は、バンク♯０に対するエントリが待ちコマンドであり、かつ、その待ち時間が終了していないときは、バンク♯１に対するエントリがあるかが確認される（ステップＳＴ３１又はＳＴ３２からステップＳＴ３７へのルート）。
【００９４】
バンク♯１に対するエントリがあり、かつ、バンク♯１がレディ状態であるとき、バンク♯１に対するエントリは、実行するエントリとなる（ステップＳＴ３７）。
【００９５】
但し、バンク♯１に対するエントリは、待ちコマンドではないことを条件とする。また、バンク♯１に対するエントリが待ちコマンドであっても、その待ち時間が終了し、かつ、バンク♯１に対する次のエントリがあるときは、その次のエントリは、実行するエントリとなる（ステップＳＴ３８）。
【００９６】
また、実行するエントリがないときは、実行するエントリが見つかるまで、このサブルーチンが繰り返される。
【００９７】
実行するエントリが決定されると、図７のフローに戻る。
【００９８】
そして、図７に示すように、実行するエントリが書き込みコマンドであるか、又は、読み出しコマンドであるか、が確認される（ステップＳＴ２３，ＳＴ２７）。
【００９９】
実行するエントリが書き込みコマンドであるとき、それがパリティデータを生成するエントリである（例えば、図６のフラグＦ１がアクティブである）ことを条件に、パリティコントローラによりパリティデータが生成される（ステップＳＴ２４，ＳＴ２５）。
【０１００】
また、これに並行して、データ書き込みが実行される（ステップＳＴ２６）。
【０１０１】
一方、実行するエントリが読み出しコマンドであるとき、それがパリティデータを生成するエントリであることを条件に、パリティコントローラによりパリティデータが生成される（ステップＳＴ２８，ＳＴ２９）。
【０１０２】
また、これに並行して、データ読み出しが実行される（ステップＳＴ３０）。
【０１０３】
実行するエントリが、書き込みコマンドでなく、かつ、読み出しコマンドでもないとき、その実行するエントリ（コマンド）がメモリに転送される（ステップＳＴ３１）。
【０１０４】
(3)  パリティデータを生成するタイミングの例  
メモリコントローラが複数のバンクを制御するときの、パリティデータを生成するタイミングの例について説明する。
【０１０５】
図９乃至図１１は、パリティデータを生成するタイミングの例を示している。
【０１０６】
これらの図は、それぞれ、図３に対応している。また、これらの図において、矢印は、コマンドＣ０〜Ｃ２６の実行順序を示している。
【０１０７】
図９の例では、バンク♯１内のパリティグループＰＧ１でのパリティデータの生成は、バンク♯０内のパリティグループＰＧ０のパリティデータのプログラムが完了した後に行う。即ち、バンク♯１内のパリティグループＰＧ１において、パリティデータを生成するタイミングは、バンク♯０内のパリティグループＰＧ０のパリティデータのプログラムの状況に応じて変化させる。
【０１０８】
例えば、バンク♯０内のパリティグループＰＧ０のパリティデータのプログラムは、実行するエントリがバンク♯０に対するコマンドＣ１４であるときに完了する。従って、バンク♯０に対するコマンドＣ１４の実行が完了した後、バンク♯１内で最初に実行されるコマンドがＣ１５であるとき、バンク♯１内のパリティグループＰＧ１のパリティデータの生成は、コマンドＣ１５、又は、それ以降に開始する。
【０１０９】
図１０の例では、図９の例と同様に、バンク♯１内のパリティグループＰＧ１でのパリティデータの生成は、バンク♯０内のパリティグループＰＧ０のパリティデータのプログラムが完了した後に行う。
【０１１０】
但し、本例では、バンク♯１内のパリティグループＰＧ１のパリティデータの生成は、コマンドＣ９，Ｃ１２，Ｃ１５で行い、バンク♯１に対するコマンドＣ９の実行は、バンク♯０内のパリティグループＰＧ０のパリティデータのプログラムが完了するまで、即ち、バンク♯０に対するコマンドＣ１４の実行が完了するまで、一時停止する。
【０１１１】
例えば、バンク♯０内のパリティグループＰＧ０のパリティデータのプログラムは、実行するエントリがバンク♯０に対するコマンドＣ１４であるときに完了する。従って、バンク♯０に対するコマンドＣ１４の実行が完了するまで、バンク♯１に対するコマンドＣ９の実行を一時停止し、かつ、バンク♯０に対するコマンドＣ１４の実行が完了した後に、バンク♯１に対するコマンドＣ９の実行を開始する。
【０１１２】
図１１の例では、バンク♯０内のパリティグループＰＧ０のパリティデータのプログラムは、バンク♯１内のパリティグループＰＧ０の全てのパリティデータが生成された後に行われる。即ち、バンク♯０内のパリティグループＰＧ０の全てのパリティデータが生成され、バンク♯１内のパリティグループＰＧ０の全てのパリティデータが生成された後に、バンク♯０内のパリティグループＰＧ０のパリティデータのプログラムが開始される。
【０１１３】
例えば、バンク♯０内のパリティグループＰＧ０のパリティデータのプログラムは、バンク♯０に対するコマンドＣ６から開始される。従って、バンク♯１内のパリティグループＰＧ０の全てのパリティデータが生成されるまで、即ち、バンク♯１に対するコマンドＣ３の実行が完了するまで、バンク♯０に対するコマンドＣ６の実行は一時停止され、かつ、バンク♯１に対するコマンドＣ３の実行が完了した後に、バンク♯０に対するコマンドＣ６の実行が開始される。
【０１１４】
以上のように、各バンク♯０，♯１において、パリティデータを生成／プログラムするタイミングを制御することにより、複数のバンク♯０，♯１内のパリティグループのパリティデータの生成を同時に進めることができる。
【０１１５】
(4)   まとめ  
第２の実施例によれば、書き込みデータとパリティデータの転送を効率的に行うことができる。
【０１１６】
３．  適用例  
以下、上述の第１及び第２の実施例を適用可能なデータストレージデバイス及びそれを備えたコンピュータシステムの例について説明する。
【０１１７】
図１２は、データストレージデバイスを搭載したポータブルコンピュータの例を示している。
【０１１８】
ポータブルコンピュータ２００は、本体２０１と、表示ユニット２０２と、を備える。表示ユニット２０２は、ディスプレイハウジング２０３と、このディスプレイハウジング２０３に収容された表示装置２０４と、を備える。
【０１１９】
本体２０１は、筐体２０５と、キーボード２０６と、ポインティングデバイスであるタッチパッド２０７と、を備える。筐体２０５は、メイン回路基板、ＯＤＤ（Optical Disk Device）ユニット、カードスロット２０８、データストレージデバイス２０９など、を含む。
【０１２０】
カードスロット２０８は、筐体２０５の側面に設けられる。ユーザは、筐体２０５の外部から追加デバイス２１０をカードスロット２０８に挿入することが可能である。
【０１２１】
データストレージデバイス２０９は、例えば、ＳＳＤ(Solid state drive)である。ＳＳＤは、ＨＤＤ（Hard disk drive）の置き換えとして、ポータブルコンピュータ２００内部に実装された状態で使用してもよいし、追加デバイス２１０として使用してもよい。データストレージデバイス２０９は、上述の第１及び第２の実施例におけるメモリコントローラ及びこれにより制御される不揮発性半導体メモリを含む。
【０１２２】
図１３は、データストレージデバイスの例を示している。
【０１２３】
データストレージデバイス２０９は、ＳＳＤであり、ホストインターフェイス５０１と、メモリコントローラ５０２と、不揮発性半導体メモリ５０３と、データバッファ５０４と、を備える。
【０１２４】
ホストインターフェイス５０１は、ホスト４００とデータストレージデバイス２０９とのインターフェイスとして機能する。ホスト４００は、ＣＰＵ４０１と、システムメモリ４０２と、を備える。
【０１２５】
不揮発性半導体メモリ５０３は、例えば、NANDフラッシュメモリである。データバッファ５０４は、例えば、ＤＲＡＭ、ＭＲＡＭなど、である。即ち、データバッファ５０４は、ストレージメモリとしての不揮発性半導体メモリ５０３よりも高速なランダムアクセスメモリであればよい。
【０１２６】
メモリコントローラ５０２は、不揮発性半導体メモリ５０３に対するデータの読み出し、書き込み、及び、消去を制御する。
【０１２７】
図１４は、ハイブリッド型データストレージデバイスの例を示している。
【０１２８】
データストレージデバイス２０９は、不揮発性半導体メモリ５０３と、ＨＤＤ２０９ｂと、を備える。ＨＤＤ２０９ｂは、ホストインターフェイス６０１と、ＲＷＣ（read write channel）６０２と、増幅器６０３と、磁気ディスク６０４と、ディスク駆動装置６０５と、磁気ヘッドを有するアクチュエータ６０６と、を備える。
【０１２９】
ディスク駆動装置６０５は、磁気ディスク６０４を回転させる。増幅器６０３は、アクチュエータ６０６内の磁気ヘッドにより読み取った信号を増幅する。ＲＷＣ６０２は、読み出し時に、増幅器６０３からの信号をホストインターフェイス６０１に転送し、書き込み時に、ホストインターフェイス６０１からの信号を増幅器６０３に転送する。
【０１３０】
ホスト４００は、不揮発性半導体メモリ５０３に対するデータ読み出し／書き込み／消去動作、及び、ＨＤＤ２０９ｂに対するデータ読み出し／書き込み／消去動作を制御する。上述の第１及び第２の実施例におけるデータ書き込みは、例えば、不揮発性半導体メモリ５０３が選択されたときに実行される。
【０１３１】
なお、不揮発性半導体メモリ５０３に対するデータ読み出し／書き込み／消去動作は、ホスト４００でなくホストインターフェイス６０１により制御されてもよい。
【０１３２】
上述の第１及び第２の実施例は、NANDフラッシュメモリを搭載したメモリカードに適用することも可能である。また、上述の第１及び第２の実施例を適用可能なメモリシステムとしては、上記以外にも、携帯電話、ＰＤＡ（Personal Digital Assistant）、デジタルスチルカメラ、デジタルビデオカメラなど、がある。
【０１３３】
４．  むすび  
以上、実施形態によれば、書き込みデータとパリティデータの転送を効率的に行うことができる。
【０１３４】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１３５】
１０：  メモリコントローラ、  １１：  バンクコントローラ、  １２：  データコントローラ、  １３：  パリティコントローラ、１３−１，１３−２，…１３−ｎ：  パリティ保持回路、  １４：  メモリインターフェイスコントローラ、  １５：  データバッファ、  １６：  メモリ、  ♯０，♯１：  バンク。
【図１】
2016167210.tif 000003
【図２】
2016167210.tif 000004
【図３】
2016167210.tif 000005
【図４】
2016167210.tif 000006
【図５】
2016167210.tif 000007
【図６】
2016167210.tif 000008
【図７】
2016167210.tif 000009
【図８】
2016167210.tif 000010
【図９】
2016167210.tif 000011
【図１０】
2016167210.tif 000012
【図１１】
2016167210.tif 000013
【図１２】
2016167210.tif 000014
【図１３】
2016167210.tif 000015
【図１４】
2016167210.tif 000016