上述した先行技術によれば、論理アドレスLBAiの指定によって半導体記憶装置から読み出されたデータDbiが以前に当該論理アドレスLBAiの指定による半導体記憶装置への書き込みに用いられたデータ(つまり検証用のデータ)Daiと一致しない場合、検証装置は、半導体記憶装置に不具合が発生したと判定することができる。しかし先行技術では、書き込み時または読み出し時のいずれで不具合が発生しているかを特定することは困難である。
以下、実施の形態につき図面を参照して説明する。
図1は一つの実施形態に係る検証システムの典型的な構成を示すブロック図である。図1に示す検証システムは、半導体記憶装置10と検証装置20とから構成される。
半導体記憶装置10は、書き換え可能な不揮発性メモリとしてNANDフラッシュメモリ11を備えている。本実施形態において半導体記憶装置10はSSDである。そこで以下の説明では、半導体記憶装置10をSSD10と称する。SSD10は、NANDフラッシュメモリ11に加えて、NANDコントローラ12、ドライバ13a、ドライバ13b及びアドレス管理部14を備えている。
NANDコントローラ12は、ドライバ13aまたは13bにより駆動されて、物理アドレスによりNANDコントローラ12にアクセスする。ドライバ13aは、アドレス管理部14から与えられる物理アドレスに応じて、NANDコントローラ12を駆動する。ドライバ13aは、NANDコントローラ12を駆動することにより、要求されたアクセス動作(データ書き込み動作、データ読み出し動作等)を実行する。ドライバ13bは、例えば後述する第1のファームウェアを検証(デバッグ)する際に用いられる。ドライバ13b自身は、正常であることが予め確認されているものとする。ドライバ13bは、外部(本実施形態では検証装置20)からSSD10に与えられる物理アドレス指定によるアクセス要求(特別なアクセス要求)に応じて、NANDコントローラ12を駆動する。ドライバ13bは、NANDコントローラ12を駆動することにより、要求されたアクセス動作(例えばデータ読み出し動作)を実行する。
アドレス管理部14は、所定のアドレス管理アルゴリズムに従って、論理アドレス(より詳細には論理ブロックアドレス)LBAi毎に当該論理アドレスLBAiと物理アドレスPAi(より詳細には、NANDフラッシュメモリ11の物理アドレスPAi)との対応付けを管理する。つまりアドレス管理部14は、論理アドレスLBAi毎に、当該論理アドレスLBAiの物理アドレスPAiへの割り当てを管理する。
アドレス管理部14は、アドレス変換テーブル140を備えている。アドレス変換テーブル140は、論理アドレスLBAi毎に当該論理アドレスLBAiと物理アドレスPAiとの対応を示す。アドレス管理部14は、例えば外部(本実施形態では検証装置20)からSSD10に与えられる論理アドレスアドレス指定によるアクセス要求(通常のアクセス要求)に応じてアドレス変換手段として機能する。この場合、アドレス管理部14は、アドレス変換テーブル140を参照することにより、指定された論理アドレス(より詳細には論理ブロックアドレス)LBAiを当該論理アドレスLBAiに対応付けられた物理アドレスPAiに変換する。
アドレス管理部14は、前記アドレス管理アルゴリズムに従ってアドレス変換テーブル140を更新する。アドレス管理部14はまた、NANDフラッシュメモリ11におけるコンパクション、ウエアレベリング等による周知のデータ再配置(つまり、物理的なデータ記録位置の配置換え)を管理する。アドレス管理部14は、このデータ再配置に応じてアドレス変換テーブル140を更新する。
本実施形態において、ドライバ13a及びアドレス管理部14は第1のファームウェアを用いて実現され、ドライバ13bは第2のファームウェアを用いて実現されるものとする。つまり、ドライバ13a及びアドレス管理部14と、ドライバ13bとは、それぞれ、前記第1のファームウェアと前記第2のファームウェアとを、例えばマイクロプロセッサが実行することにより実現されるものとする。一方、NANDフラッシュメモリ11及びNANDコントローラ12はハードウェアにより実現される。
なお、本実施形態において第2のファームウェアの用途は限られており、その規模は第1のファームウェアに比べて極めて小さい。そのため、第2のファームウェア(つまりドライバ13b)自体を予め検証することは容易である。
図2は本実施形態で適用されるアドレス変換テーブル140の典型的なデータ構造を示す。アドレス変換テーブル140は、複数のエントリを有している。アドレス変換テーブル140の複数のエントリの各々は、論理アドレス(LBA)フィールド141及び物理アドレス(PA)フィールド142から構成される。論理アドレスフィールド141は、論理アドレスを保持するのに用いられる。物理アドレスフィールド142は、対応する論理アドレスフィールド141に保持されている論理アドレスが割り当てられる物理アドレスを保持するのに用いられる。図2の例では、論理アドレス0x0,0x1及び0x2に、それぞれ、物理アドレスA,B及びCが割り当てられている。ここで、0xY(Y=0,1,2)における“0x”は、後続のYが16進表現であることを示す。
検証装置20は、広義にはSSD10を検証し、狭義にはSSD10内のドライバ13a及びアドレス管理部14(より詳細には、ドライバ13a及びアドレス管理部14を実現する第1のファームウェア)を検証するのに用いられる。本実施形態において、NANDフラッシュメモリ11及びNANDコントローラ12の不具合、つまりハードウェア起因の不具合は、検証装置20による検証の対象外である。このため本実施形態では、説明の簡略化のために、ハードウェア起因の不具合はないものとする。なお、NANDフラッシュメモリ11及びNANDコントローラ12の不具合は、周知のように、SSD10内での自己診断テスト(例えばNANDコントローラ12による自己診断テスト)等で検証可能である。
本実施形態において、検証装置20はSSD製造におけるテスト工程でSSD10と接続して用いられる。検証装置20は、検証データ生成部21、書き込みデータメモリ22、書き込みデータ判定部23、読み出しデータ判定部24及び検証コントローラ25を備えている。
検証データ生成部21は、検証コントローラ25の提示する書き込み検証シナリオに従って、論理アドレスLBAi毎に検証用のデータ(以下、検証データと称する)Diを生成する。検証データDiはSSD10を検証するのに用いられる。本実施形態において、検証データDiのサイズは12バイトであり、1セクタのサイズより十分小さい。1セクタのサイズは例えば512バイトである。セクタは、周知のように、SSD10にアクセスする際の最小単位である。検証データ生成部21は、検証データDiを含む1セクタのサイズの書き込みデータDiを論理アドレスLBAi毎に生成する。検証用データ生成部21は、論理アドレスLBAi毎に生成された書き込みデータD1iをSSD10のNANDフラッシュメモリ11に書き込むための、論理アドレス指定による書き込み要求をSSD10に発行する。
図3は、本実施形態で適用される検証データDi及び書き込みデータD1iの典型的なフォーマットを示す。図3に示すように、検証データDiは、4バイトの論理アドレス(LBA)フィールド31、4バイトの物理アドレス(PA)フィールド32及び4バイトの識別子(ID)フィールド33から構成される。一方、書き込みデータD1iは、上述の論理アドレスフィールド31、物理アドレスフィールド32及び識別子フィールド33と、500バイトの無効データ(IVD)フィールド34とから構成される。
論理アドレスフィールド31は、書き込みデータD1iの書き込み先の論理アドレスLBAi(4バイト)を保持するのに用いられる。物理アドレスフィールド32は、論理アドレスLBAiが割り当てられるべき物理アドレスPAi(4バイト)を保持するのに用いられる。
識別子フィールド33は、4バイトの一意な識別子IDiを保持するのに用いられる。本実施形態において、識別子IDiには、書き込みセクタ数(総書き込みセクタ数)が用いられる。書き込みセクタ数は、例えば検証装置20からの要求によりSSD10(より詳細にはSSD10のNANDフラッシュメモリ11)に書かれるデータの総セクタ数(つまり累積されたセクタ数)である。なお、書き込みセクタ数が、検証装置20による一連の検証処理の期間において、当該検証装置20からの要求によりSSD10に書かれるデータの総セクタ数であっても構わない。無効データフィールド34は、無効データIVDiを保持するのに用いられる。論理アドレスフィールド31、物理アドレスフィールド32及び識別子フィールド33は、有効データフィールド(有効部)といえる。
以上の説明から明らかなように、検証データDi(つまり12ビットの検証データDi)は、4バイトの論理アドレスLBAi、4バイトの物理アドレスPAi(より詳細には、論理アドレスLBAiが割り当てられるべき物理アドレスPAi)及び4バイトの識別子IDiから構成される。一方、書き込みデータD1iは、12バイトの検証データDi及び500バイトの無効データIVDiから構成される。ここで、論理アドレスLBAi及び物理アドレスPAiの対は、前記書き込み検証シナリオによって示されている。
検証データ生成部21は、上述の書き込みセクタ数をカウントするカウンタ210を備えている。検証データ生成部21は、カウンタ210によってカウントされる書き込みセクタ数(つまりカウンタ210の示すセクタカウントSC)を、検証データDi中の一意な識別子IDiとして用いる。つまりカウンタ210は、書き込み(例えば、一連の検証処理の期間におけるセクタ書き込み)に固有の識別子IDiを生成する。検証データ生成部21は、生成された検証データDi(つまり、書き込みデータD1i中に設定される論理アドレスLBAi、物理アドレスPAi及び識別子IDi)を書き込みデータメモリ22に格納する。
書き込みデータメモリ22は、例えばDRAMのような揮発性メモリである。書き込みデータメモリ22は、検証データ生成部21によって生成された検証データDiを格納するのに用いられる。書き込みデータメモリ22は更に、書き込みデータ判定部23及び読み出しデータ判定部24による判定結果を格納するのにも用いられる。
書き込みデータ判定部23は、検証データ生成部21によって発行された論理アドレス指定による書き込み要求に従ってSSD10において書き込みが実行された後に検証コントローラ25によって起動される。書き込みデータ判定部23は、検証コントローラ25の提示する前記書き込み検証シナリオに従い、論理アドレスLBAiに対応する物理アドレスPA2iの指定による読み出し要求をSSD10に発行する。本実施形態では、PA2iは後述するようにPAiに一致するものとする。書き込みデータ判定部23は、この読み出し要求に応じてSSD10から読み出されるデータD2i(より詳細にはデータD2iの有効部)を、書き込みデータメモリ22に格納されている対応する検証データDiと比較することにより、SSD10の書き込み時の動作を判定(つまり検証)する。書き込みデータ判定部23は、この判定結果を、検証データDi(または検証データDi中の論理アドレスLBAi)と対応付けて書き込みデータメモリ22に格納する。
読み出しデータ判定部24は、書き込みデータ判定部23による判定の後に検証コントローラ25によって起動される。読み出しデータ判定部24は、検証コントローラ25の提示する読み出し検証シナリオに従い、論理アドレス指定による読み出し要求をSSD10に発行する。読み出しデータ判定部24は、この読み出し要求に応じてSSD10から読み出されるデータD3i(より詳細にはデータD3iの有効部)を、書き込みデータメモリ22に格納されている対応する検証データDiと比較することにより、SSD10の読み出し時の動作を判定(つまり検証)する。読み出しデータ判定部24は、この判定結果を、検証データDiと対応付けて書き込みデータメモリ22に格納する。
検証コントローラ25は、検証シナリオに従って、検証データ生成部21、書き込みデータメモリ22及び読み出しデータ判定部24を制御する。検証シナリオは、前記書き込み検証シナリオ及び前記読み出し検証シナリオを含む。
次に、本実施形態で適用される検証装置20がSSD10を検証するための検証処理の典型的な手順について、図4及び図5のフローチャートを参照して説明する。
まず検証コントローラ25は検証データ生成部21を起動して、当該検証データ生成部21に書き込み検証シナリオを提示する。書き込み検証シナリオは、例えば論理アドレスLBAi(i=0,1,2,…,255,LBAi=0x0,0x1,0x2,…0xFF)及び当該論理アドレスLBAiが割り当てられるべきNANDフラッシュメモリ11の物理アドレスPAi(PAi=A,B,C,…,Z)を含む検証データDiの生成と当該検証データDiを含む書き込みデータD1iの論理アドレス指定による書き込み要求の発行を指定する。
検証データ生成部21は、書き込み検証シナリオに従い、論理アドレスLBAi(i=0,1,2,…,255)毎に検証データDiを生成する(ステップ401)。この検証データDiは次のように生成される。
まず、検証データDiの生成に際し、カウンタ210はセクタカウントSCを1インクリメントする。なお、検証処理の開始時には、カウンタ210のセクタカウントSCは0にリセットされるものとする。
検証データ生成部21は、論理アドレスフィールド31、物理アドレスフィールド32及び識別子フィールド33に、それぞれ、論理アドレスLBAi、物理アドレスPAi及び識別子IDiが設定された検証データDiを生成する。論理アドレスLBAi及び物理アドレスPAiの対は、書き込み検証シナリオによって示される。物理アドレスPAiは、論理アドレスLBAiが割り当てられるべき物理アドレスである。また識別子IDiは、その時点のカウンタ210の示すセクタカウントSCが用いられる。
図6は、本実施形態における先頭の検証データDi(i=0)の生成の例を示す。先頭の検証データDi(i=0)が生成される前のカウンタ210のセクタカウントSCは“0”である。カウンタ210は、検証データDi(i=0)の生成に際し、セクタカウントSCを図6において矢印61で示すように0から1にインクリメントする。
検証データ生成部21は、論理アドレスフィールド31、物理アドレスフィールド32及び識別子フィールド33に、図6に示すように、それぞれ4バイトの論理アドレス“0x0”(LBAi=LBA0=0x0)、物理アドレス“0x1000”(PAi=PA0=0x1000)及び識別子“1”(IDi=ID0=1)が設定された検証データDi(i=0)を生成する。この例は、論理アドレスLBA0(つまり“0x0”)が割り当てられるべき物理アドレスPA0(つまり“A”)が“0x1000”の場合である。識別子“1”には、図6において矢印62で示されるように、その時点におけるカウンタ210のセクタカウントSCが用いられる。なお、最後の論理アドレスLBAi(i=255)に対応する検証データDiが生成された時点では、カウンタ210のセクタカウントSCは256となる。
検証データ生成部21は、書き込み検証シナリオの指定する論理アドレスLBAi(i=0,1,2,…,255)毎の検証データ(第1のデータ)Diを生成すると(ステップ401)、当該論理アドレスLBAi毎の検証データDiを書き込みデータメモリ22の検証用テーブルデータ領域に格納する。本実施形態では、検証データDi(12バイト)は、書き込みデータD1i(512バイト)の一部を構成する。このため、検証データ自体が書き込みデータである従来技術と異なり、論理アドレス毎の検証データを格納するのに必要な書き込みデータメモリ22の容量を低減することができる。
図7は、本実施形態で適用される書き込みデータメモリ22における検証データ格納構造の例を示す。ここでは説明の簡略化のために、論理アドレスLBAi毎の検証データDiが、テーブル形式で書き込みデータメモリ22に格納されるものとする。
図7に示すように、書き込みデータメモリ22の検証データ領域(つまり検証データテーブル領域)は、複数の検証データエントリを有している。これらの複数の検証データエントリの各々は、前述の論理アドレスフィールド31、物理アドレスフィールド32及び識別子フィールド33にそれぞれ対応する、論理アドレスフィールド221、物理アドレスフィールド222及び識別子フィールド223を有している。
複数の検証データエントリの各々は更に、フラグF11,F12及びF13がそれぞれ設定されるフラグフィールド224,225及び226と、フラグF21,F22及びF23がそれぞれ設定されるフラグフィールド227,228及び229とを有している。フラグF11〜F13は、書き込みデータ判定部23による互いに対応するフィールド毎の一致判定結果を示す。フラグF21〜F23は読み出しデータ判定部24による互いに対応するフィールド毎の一致判定結果を示す。検証データDiが検証データエントリに格納された時点では、フラグF11〜F13及びF21〜F23は一致を示す所定の値、例えば“0”に初期設定される。
検証データ生成部21は論理アドレスLBAi毎の検証データDiの有効部を書き込みデータメモリ22に格納すると(ステップ402)、論理アドレス指定による書き込み要求をSSD10に発行する(ステップ403)。この書き込み要求は、例えば、書き込み開始論理アドレスLBA0と書き込みデータサイズ(セクタ数)S(S=256)とを含み、書き込みデータD1i(i=0,1,2,…,255)の書き込みを指定する。書き込みデータD1iは、図3に示されるように、ステップ402で生成された検証データDiを含む。
SSD10は、検証データ生成部21によって発行された論理アドレス指定による書き込み要求を実行する(ステップ404)。即ちSSD10は、検証データ生成部21からの書き込み要求に従い、書き込み開始論理アドレスLBA0から始まるセクタ数Sの示す論理アドレスの範囲(LBA0〜LBA255の範囲)に対応する物理アドレスPA1i(PA0〜PA255)の各位置に、書き込み要求で指定された書き込みデータD1iを書き込む。この書き込みデータD1iの書き込みは次のように実行される。
まずアドレス管理部14はアドレス変換テーブル140を参照することにより、論理アドレスLBAi(ここでは、LBAi=LBA0=0x0、つまり書き込み開始論理アドレスLBA0)を、当該論理アドレスLBAiが割り当てられる物理アドレスPA1iに変換する(ステップ404a)。本実施形態では説明の簡略化のために、論理アドレスLBAiに対応するデータのNANDフラッシュメモリ11内の記録位置は、少なくともステップ401から後述するステップ405までの期間、変更されないものとする。この場合、アドレス管理部14によるアドレス変換に不具合がなければ、変換された物理アドレスPA1iはPAiに一致することが期待される。
アドレス管理部14は論理アドレスLBAiから変換された物理アドレスPA1iをドライバ13aに渡す。ドライバ13aは、アドレス管理部14から物理アドレスPA1iを受け取ると、当該物理アドレスPA1i及び書き込みデータD1iをNANDコントローラ12に渡す。これによりドライバ13aは、NANDフラッシュメモリ11への書き込みデータD1iの書き込みを指定する。するとNANDコントローラ12は、NANDフラッシュメモリ11の物理アドレスPA1iの位置に書き込みデータD1iを書き込む(ステップ404b)。このことは、論理アドレスLBiの指定により、SSD10が、書き込みデータD1iをNANDフラッシュメモリ11の物理アドレスPA1iの位置に書き込むことと等価である。ステップ404a及び404bは、検証データ生成部21からの書き込み要求の示すセクタ数Sだけ繰り返される。
検証データ生成部21は、SSD10が書き込み要求を実行し終えると、その旨を検証コントローラ25に通知する。すると検証コントローラ25は、前記ステップ401〜404が再度実行されるように、検証データ生成部21を制御する(ステップ405)。これにより、論理アドレスLBAi(i=0,1,2,…,255)毎の検証データDi(及び書き込みデータD1i)が再び生成される。但し、再生成された検証データDiは、前回生成された検証データDiと識別子IDiが異なる。ここでは、再生成された検証データDi中の識別子IDiは、前回生成された検証データDiの識別子IDiよりも256だけ大きい。また、ステップ401〜405が実行される期間、少なくとも論理アドレスLBAi(i=0,1,2,…,255)が割り当てられるべき物理アドレスPAiは変更されないことが保証されているものとする。
ステップ405において、再生成された論理アドレスLBAi(i=0,1,2,…,255)毎の検証データDiは、書き込みデータメモリ22の検証データテーブル領域に上書きされる。つまり再生成された検証データDiは、対応する論理アドレスLBAiが設定された論理アドレスフィールド221を有する書き込みデータメモリ22内のエントリに上書きされる。これにより、論理アドレスLBAi(i=0,1,2,…,255)毎の検証データDi中の識別子IDiだけが更新される。図7は、このときの書き込みデータメモリ22の状態を示している。また、ステップ405において、再生成された論理アドレスLBAi(i=0,1,2,…,255)毎の書き込みデータDiは、NANDフラッシュメモリ11内の論理アドレスLBAiに対応する物理アドレスPAiに書き込まれる。
検証コントローラ25はステップ405が終了すると、書き込みデータ判定部23を起動して、当該書き込みデータ判定部23に前記書き込み検証シナリオを提示する。書き込みデータ判定部23は、検証コントローラ25の提示する前記書き込み検証シナリオに従い、論理アドレスLBAi(i=0,1,2,…,255)毎に論理アドレスLBAiに対応する物理アドレスPA2iの指定による特別な読み出し要求をSSD10のドライバ13bに発行する。前述したように本実施形態では、論理アドレスLBAiに対応するデータのNANDフラッシュメモリ11内の記録位置は、少なくともステップ401から後述するステップ405までの期間、変更されない。このため物理アドレスPA2iにはPAi(PA2i=PAi)が用いられる。
ドライバ13bは、特別な読み出し要求に従い、指定された物理アドレスPA2i(=PAi)をNANDコントローラ12に渡すことにより、NANDフラッシュメモリ11からの読み出しを指定する。するとNANDコントローラ12は、NANDフラッシュメモリ11の物理アドレスPA2i(ここではi=0)の位置からデータ(第2のデータ)D2iを読み出す(ステップ406)。読み出されたデータD2iは、ドライバ13bにより書き込みデータ判定部23に渡される。
上述したようにステップ406の読み出しは、物理アドレスPA2i(=PAi)の指定による特別な読み出し要求に応じて実行される。したがって、この読み出しがアドレス管理部14の影響を受けるおそれはない。また本実施形態において、特別な読み出し要求を実行するドライバ13bはデバッグ用であり、前述したように正常であることが予め確認されている。このため、NANDフラッシュメモリ11及びNANDコントローラ12(つまりハードウェア)が正常であれば、データD2iは、NANDフラッシュメモリ11の物理アドレスPA2i(ここではi=0)の位置から正しく読み出される。このことは、もしデータD2iが期待されるデータでないならば、その要因が書き込み時にあることを示唆する。
そこで書き込みデータ判定部23は、ドライバ13bにより渡されたデータD2i(つまり、指定の物理アドレスPA2iの位置から読み出されたデータ)の有効部を、書き込みデータメモリ22に格納されている、論理アドレスLBAiに対応する検証データDiと、対応するフィールド(つまりデータ部分)毎に比較する(ステップ407)。検証データDiは、SSD10が正常であるならば、NANDフラッシュメモリ11の物理アドレスPA2i(=PAi)の位置から読み出されることが期待されるデータの有効部に対応する。
書き込みデータ判定部23は、対応するフィールド毎の比較の結果に基づいて、一致の有無を判定する(ステップ408)。もし、論理アドレス、物理アドレス及び識別子のいずれかで不一致が検出された場合(ステップ408のNo)、前述の説明から明らかなように、検証データDiを含む書き込みデータDiの書き込み時の不具合(より詳細には、アドレス管理部14ののアドレス管理機能の不具合またはドライバ13aの書き込み動作の不具合)が疑われる。
ステップ408の判定がNoの場合、書き込みデータ判定部23はステップ409に進む。即ち、データD2iの有効部が検証データDiに一致しないならば、書き込みデータ判定部23はステップ409に進む。ステップ409において、書き込みデータ判定部23は検証データDiが格納されている、書き込みデータメモリ22内のエントリに不一致箇所を記録する。具体的には書き込みデータ判定部23は、このエントリのフラグフィールド224,225及び226にそれぞれ設定されているフラグF11,F12及びF13のうち、不一致が検出されたフィールドに対応するフラグを“1”に更新する。
書き込みデータ判定部23は、ステップ409を実行するとステップ410に進む。また、論理アドレス、物理アドレス及び識別子の全てで一致が検出されたならば(ステップ408のYes)、書き込みデータ判定部23はステップ409をスキップしてステップ410に進む。
ステップ410において書き込みデータ判定部23は、全ての論理アドレスLBAi(i=0,1,2,…,255)について、データD2i及びDiを比較したかを判定する。もし、そうでないならば(ステップ410のNo)、書き込みデータ判定部23は、物理アドレスPA2iを、次の論理アドレスLBAi(i=i+1)に対応する物理アドレスに更新して(ステップ411)、ステップ406に戻る。
このようにして書き込みデータ判定部23は、全ての論理アドレスLBAi(i=0,1,2,…,255)について、対応する物理アドレスPA2i(PA2i=PAi)の指定によるデータD2iを読み出し、当該データD2iの有効部をデータDiと比較する動作を繰り返す。そして、この繰り返しを終了すると(ステップ410のYes)、書き込みデータ判定部23は、書き込みデータメモリ22内の全エントリのフラグフィールド224〜226を参照することにより、全て一致が検出されたかを判定する(ステップ501)。
もし、少なくとも1箇所で不一致が検出されているならば(ステップ501のNo)、書き込みデータ判定部23は不一致検出を検証コントローラ25に通知する。すると検証コントローラ25は、書き込みデータメモリ22に格納されている全エントリに基づき、検証結果を表示デバイスまたは通信デバイスのような入出力デバイスを通して出力して検証処理を終了する(ステップ509)。
ここで、フラグフィールド224,225及び227にそれぞれ設定されているフラグF11,F12及びF13の状態とSSD10における主要な不具合箇所との関係について説明する。まず、フラグF11が不一致を示す場合、つまり論理アドレスの不一致が検出された場合、アドレス管理部14によって論理アドレスLBAiから変換された、書き込み先を示す物理アドレスPA1iの不具合が発生したことが疑われる。つまりアドレス管理部14の不具合のために、アドレス変換テーブル140において論理アドレスLBAiに対応付けられている物理アドレスPA1iが正しい物理アドレスPA2i(PA2i=PAi)でないことが疑われる。同様に、フラグF12が不一致を示す場合、つまり物理アドレスの不一致が検出された場合も、アドレス管理部14の不具合のために、アドレス変換テーブル140において論理アドレスLBAiに対応付けられている物理アドレスPA1iが正しい物理アドレスPA2i(PA2i=PAi)でないことが疑われる。一方、フラグF13が不一致を示す場合、つまり識別子の不一致が検出された場合、ドライバ13aによる書き込み動作の不具合が発生していることが疑われる。本実施形態では、再度の検証データDiの生成及び生成された検証データDiを含む書き込みデータD1iの書き込み(つまり検証データの再生成及び再書き込み)が行われる。このため、特にフラグF11及びF12が一致を示している状態でフラグF13が不一致を示す場合、ドライバ13aによる書き込み動作の不具合が発生していることが疑われる。
このように本実施形態によれば、書き込みデータD1i中に設定された検証データDiは、書き込みデータ判定部23による判定に用いられ、この判定結果を書き込み時におけるSSD10の不具合の原因を特定するためのヒントとして利用することができる。なお、F11またはF12が不一致を示す場合、検証コントローラ25は、特別なコマンドを用いてアドレス変換テーブル140を参照することも可能である。これにより検証コントローラ25は、アドレス変換テーブル140によって論理アドレスLBAiに対応付けられている物理アドレスPA1iが、期待される物理アドレスPA2i(PA2i=PAi)であるかを直接確認することができる。
一方、全て一致が検出されたならば(ステップ501のYes)、一致検出を検証コントローラ25に通知する。すると検証コントローラ25は、SSD10のドライバ13aの書き込み動作、及びアドレス管理部14のアドレス管理機能に不具合がないことが確認されたものと判断する。そこで検証コントローラ25は、ドライバ13aの読み出し動作を検証するために読み出しデータ判定部24を起動して、当該読み出しデータ判定部24に読み出し検証シナリオを提示する。読み出し検証シナリオは、前記書き込み検証シナリオに対応しており、書き込みデータD1i(i=0,1,2,…,255)の書き込み時と同一の論理アドレスLBAiの指定による読み出し要求の発行を指定する。
読み出しデータ判定部24は、読み出し検証シナリオに従い、論理アドレス指定による読み出し要求をSSD10に発行する(ステップ502)。この読み出し要求は、読み出し開始論理アドレスLBA0と読み出しデータサイズ(セクタ数)S(S=256)とを含み、論理アドレスLBAi(i=0,1,2,…,255)からのデータの読み出しを指定する。
SSD10は、読み出しデータ判定部24によって発行された論理アドレス指定による読み出し要求を実行する(ステップ503)。即ちSSD10は、読み出しデータ判定部24からの読み出し要求に従い、読み出し開始論理アドレスLBA0から始まる読み出しデータサイズSの示す論理アドレスLBAiの範囲に対応する各物理アドレスPA3iの位置からデータ(第3のデータ)D3iを読み出す。このデータD3iの読み出しは次のように実行される。
まずアドレス管理部14はアドレス変換テーブル140を参照することにより、論理アドレスLBAi(ここでは、LBAi=LBA0=0x0、つまり書き込み開始論理アドレスLBA0)を、当該論理アドレスLBAiが割り当てられる物理アドレスPA3iに変換する(ステップ503a)。ドライバ13aは、アドレス管理部14によって論理アドレスLBAiから変換された物理アドレスPA3iをNANDコントローラ12に渡すことにより、NANDフラッシュメモリ11からのデータの読み出しを指定する。するとNANDコントローラ12は、NANDフラッシュメモリ11の物理アドレスPA3iの位置からデータD3iを読み出す(ステップ503b)。このことは、論理アドレスLBiの指定により、SSD10が、NANDフラッシュメモリ11の物理アドレスPA3iの位置からデータD3iを読み出すことと等価である。読み出されたデータD3iは、ドライバ13aにより読み出しデータ判定部24に渡される。ステップ503a及び503bは、読み出しデータ判定部24からの読み出し要求の示すセクタ数Sだけ繰り返される。つまり、ステップ503a及び503bは、論理アドレスLBA0〜LBA255の各々について繰り返される。
読み出しデータ判定部24は、SSD10が論理アドレス指定による読み出し要求を実行し終えると、ドライバ13aから渡されたデータD3i(ここではi=0)の有効部を、書き込みデータメモリ22に格納されている、論理アドレスLBAiに対応する検証データDiと、対応するフィールド毎に比較する(ステップ504)。
上述のように、前記データD3iはNANDフラッシュメモリ11内の物理アドレスPA3iの位置から読み出されたデータであり、当該物理アドレスPA3iは、アドレス管理部14によって論理アドレスLBAiから変換された物理アドレスである。検証データDiは、SSD10が正常であるならば、NANDフラッシュメモリ11の物理アドレスPA3iの位置から読み出されることが期待されるデータの有効部である。ここでは、物理アドレスPA3iがPAiに一致しているかは問わない。SSD10が正常であるにも拘わらずに物理アドレスPA3iがPAiに一致しない状態は、物理アドレスPAiの位置のデータが物理アドレスPA3iの位置に再配置された場合に発生する。このようなデータ再配置は、コンパクション、ウエアレベリング等の条件が成立する都度、アドレス管理部14によって自動的に実行される。
読み出しデータ判定部24は、対応するフィールド毎の比較の結果に基づいて、一致の有無を判定する(ステップ505)。もし、論理アドレス、物理アドレス及び識別子のいずれかで不一致が検出されたならば(ステップ505のNo)、読み出しデータ判定部24はステップ506に進む。即ち、データD3iの有効部が期待される検証データDiに一致しないならば、読み出しデータ判定部24はステップ506に進む。
ステップ506において、読み出しデータ判定部24は検証データDiが格納されている、書き込みデータメモリ22内のエントリに不一致箇所を記録する。具体的には読み出しデータ判定部24は、このエントリのフラグフィールド227,228及び229にそれぞれ設定されているフラグF21,F22及びF23のうち、不一致が検出されたフィールドに対応するフラグを“1”に更新する。
読み出しデータ判定部24は、ステップ506を実行するとステップ507に進む。また、論理アドレス、物理アドレス及び識別子の全てで一致が検出されたならば(ステップ505のYes)、書き込みデータ判定部23はステップ506をスキップしてステップ507に進む。
ステップ507において読み出しデータ判定部24は、全ての論理アドレスLBAi(i=0,1,2,…,255)について、データD3i及びDiを比較したかを判定する。もし、そうでないならば(ステップ507のNo)、読み出しデータ判定部24は、ドライバ13aから渡された次のデータD3i(i=i+1)を指定して(ステップ508)、ステップ504に戻る。
このようにして読み出しデータ判定部24は、論理アドレス指定による読み出し要求に応じてSSD10から読み出される、論理アドレスLBAi(i=0,1,2,…,255)の指定するデータD3iの有効部を、当該論理アドレスLBAiに対応するデータDiと比較する動作を繰り返す。そして、この繰り返しを終了すると(ステップ507のYes)、読み出しデータ判定部24は、その旨を検証コントローラ25に通知する。
すると検証コントローラ25は、書き込みデータメモリ22に格納されている全エントリに基づき、前記入出力デバイスを通して出力して検証処理を終了する(ステップ509)。この検証結果は、少なくとも不一致を示すフラグを含む検証データエントリの群を備えていればよい。なお、検証データエントリが、フラグフィールド224〜229を含まない構成を適用してもよい。この場合、例えば不一致が検出された検証データが保持されている検証データエントリまたは当該検証データエントリ中の論理アドレスに対応付けて、フラグフィールド224〜229から構成されるデータを書き込みデータメモリ22に格納すればよい。このようにすると、検証結果を示すデータの量を削減できる。
前述したように本実施形態では、読み出しデータ判定部24は、検証コントローラ25による判定でアドレス管理部14のアドレス管理機能(及びドライバ13aの書き込み動作)が正常であると確認された場合に起動される。このため読み出しデータ判定部24による判定で、フラグフィールド227及び228にそれぞれ設定されているフラグF21及びF22が不一致を示す可能性は極めて低い。これに対し、読み出しデータ判定部24が起動された時点では、ドライバ13aの読み出し動作は検証されていない。このため、フラグフィールド229に設定されているフラグF23が不一致を示す可能性はある。もし、フラグF23が不一致を示す場合、つまり識別子の不一致が検出された場合、ドライバ13aによる読み出し動作の不具合が発生している可能性が高い。
以上のことから、本実施形態によれば、アドレス管理部14のアドレス管理機能及びドライバ13aの書き込み動作が保証されている状態で、読み出しデータ判定部24によりドライバ13aの読み出し動作を検証できる。つまり本実施形態によれば、書き込みデータD1i中に設定された検証データDiは、読み出しデータ判定部24による判定にも用いられ、この判定結果を読み出し時におけるSSD10の不具合の原因を特定するためのヒントとして利用することができる。このように本実施形態によれば、書き込み時、読み出し時それぞれの時点でSSD10の不具合が発生したことを検出することができるため、不具合の発生時点により近い位置から不具合原因の解析を開始することができる。
なお、前記実施形態では、SSD10が論理アドレス指定による読み出し要求を実行し終えた後に、読み出しデータ判定部24による比較・判定が開始される。しかし、SSD10による読み出し要求の実行と並行して、読み出しデータ判定部24による比較・判定が実行されてもよい。
また前記実施形態では、全ての論理アドレスLBAi(i=0,1,2,…,255)について検証データDiの生成及び生成された検証データDiを含む書き込みデータD1iの書き込みが終了した後、再度全ての論理アドレスLBAiについて検証データDiの生成及び生成された検証データDiを含む書き込みデータD1iの書き込みが行われる。しかし、1論理アドレスLBAiずつ、検証データDiの生成及び生成された検証データDiを含む書き込みデータD1iの書き込みと再度の検証データDiの生成及び生成された検証データDiを含む書き込みデータD1iの書き込みとが実行されても構わない。また、検証データの再生成及び再書き込みは必ずしも必要ない。但し、検証データの再生成及び再書き込みを適用する方が、書き込み動作の検証精度が高くなる。
また、論理アドレスLBAi毎の書き込みデータD1iの書き込みの後に、例えば書き込み検証シナリオに従う検証コントローラ25からSSD10への指示(例えばフラッシュコマンドの発行)により、当該SSD10において論理アドレスLBAi(i=0,1,2,…,255)に対応する物理アドレスのデータの所定の物理アドレスへの配置換えが行われるようにしてもよい。例えば、論理アドレスLBA0(i=0,LBA0=0x0)に対応する物理アドレスPA0が0xA(0xA=0x1000)であるものとする。この場合、NANDフラッシュメモリ11内の物理アドレス0xAの位置のデータが、当該NANDフラッシュメモリ11内の別の物理アドレス、例えば0xCの位置に再配置されてもよい。これにより、アドレス管理部14のアドレス管理機能をより高精度に検証できる。
上述のデータ再配置(つまり、物理アドレス0xAから物理アドレス0xCへのデータの再配置)に際し、論理アドレスLBA0(0x0)が設定された論理アドレスフィールド141を有するアドレス変換テーブル140内のエントリの物理アドレスフィールド142の内容が、0xAから0xCに更新される。つまり、論理アドレス0x0が割り当てられる物理アドレスが0xAから0xCに変更される。
この場合、書き込みデータ判定部23はデータ再配置の後に、論理アドレス0x0に対応するデータの読み出しのために、前記実施形態と異なって、物理アドレス0xCの指定による読み出し要求をSSD10に発行すればよい。これにより、アドレス管理部14のデータ再配置を含むアドレス管理機能をより高精度に検証できる。明らかなように、データ再配置が正常に行われているならば、物理アドレス0xCの位置から論理アドレス0x0に対応するデータ、つまり論理アドレス0x0、物理アドレス0xA及び識別子256を含むデータが読み出されることが期待される。
また前記実施形態では、検証データDiは、論理アドレスLBAi、当該論理アドレスLBAiが割り当てられた物理アドレスPAi及び一意な識別子IDiを含む。しかし、検証データDiが必ずしも論理アドレスLBAi及び物理アドレスPAiを含んでいる必要はない。例えば、データの書き込み時と読み出し時のいずれで不具合が発生しているかを検証するだけでよいならば、検証データDiが少なくとも一意な識別子IDiを含んでいればよい。つまり検証データが一意であればよい。この場合、書き込みデータメモリ22の記憶容量を小さくできる。
以上説明した少なくとも1つの実施形態によれば、書き込みから読み出しまでのどの時点で不具合が発生しているかを特定できる半導体記憶装置を検証する装置及び方法を提供することができる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。