(57)【要約】【課題】半導体記憶チップへの書き込み回数が増大するのを抑制しつつ、半導体記憶チップの故障に対応して信頼性を向上可能な半導体記憶装置を提供する。【解決手段】半導体記憶装置５０は、複数の半導体記憶素子５８Ａ〜５８Ｆを備え、ホストからのデータの書き込みの要求に応じて、ページ単位の書き込み対象データを半導体記憶素子５８Ａ〜５８Ｅに各々書き込み、冗長情報を半導体記憶素子５８Ｆに書き込むことによって、誤り訂正符号を構成する。【選択図】        図１
2011165063.tif 000002
【特許請求の範囲】
【請求項１】
複数の半導体記憶チップを備え、情報処理装置から書き込みが要求されたデータを前記半導体記憶チップへ書き込む半導体記憶装置であって、
前記データは、１つ以上の所定の単位の第１データを有し、
所定の単位毎の前記第１データと、所定の数の前記第１データを用いて計算され当該所定の数の第１データの誤りを訂正するために使われる冗長情報とを異なる半導体記憶チップに各々書き込む制御部と、
前記所定の数の前記第１データ及び前記冗長情報を関連付けるための識別情報と、関連付けられた前記第１データ及び前記冗長情報が書き込まれる前記半導体記憶素子内の複数の記憶領域を各々特定する領域特定情報とを対応付けて記憶する記憶部とを備える
ことを特徴とする半導体記憶装置。
【請求項２】
前記書き込み制御部は、複数の前記半導体記憶チップのそれぞれにおいて、消去が行なわれた前記記憶領域で書き込みがまだ行なわれていない位置に前記第１データを書き込む
ことを特徴とする請求項１に記載の半導体記憶装置。
【請求項３】
複数の前記半導体記憶チップのそれぞれにおいて、消去が行なわれた前記記憶領域で書き込みを行なうべき位置を示すポインタを前記所定の単位毎に各々設定する設定部を更に備え、
前記設定部は、各前記半導体記憶チップの記憶領域への書き込みが行われた場合、当該書き込みが行われた位置に続く新たな位置を示すよう前記ポインタを各々更新する
ことを特徴とする請求項１又は２に記載の半導体記憶装置。
【請求項４】
情報処理装置から読み出した要求されたデータを前記半導体記憶チップから読み出す読み出し制御部であって、所定の単位毎の第２データを前記半導体記憶チップから読み出し、当該第２データに誤りがある場合、前記領域特定情報を参照して、当該第２データと関連付けられた他の第２データ及び前記冗長情報を読み出して、前記他の第２データ及び前記冗長情報を用いて、前記第２データを復元する読み出し制御部と、
前記第２データを前記情報処理装置に送信する送信部とを更に備える
ことを特徴とする請求項１乃至３のいずれか一項に記載の半導体記憶装置。
【請求項５】
前記書き込み制御部は、前記第１データの誤りを検出する誤り検出符号を付加した当該第１データを前記半導体記憶チップの記憶領域に書き込み、
前記読み出し制御部は、
前記第２データを前記半導体記憶チップの記憶領域から読み出す読み出し部と、
前記第２データに付加された前記誤り検出符号を用いて、当該第２データの誤りを検出する検出部と、
前記第２データの誤りが検出された場合に、当該第２データを他の第２データ及び前記冗長情報と関連付けるための前記識別情報に対応付けられて記憶されている前記領域特定情報を参照して、前記第２データを復元する復元部とを有する
ことを特徴とする請求項４に記載の半導体記憶装置。
【請求項６】
前記書き込み制御部は、
書き込みが要求された前記データのサイズが前記所定の単位より大きい場合、当該データを前記所定の単位毎に分割する分割部と、
分割された各前記データである各前記第１データのそれぞれに対して、複数の前記半導体記憶チップのうち、書き込む対象の半導体記憶チップを各々決定する決定部と、
各前記第１データを、決定された前記半導体記憶チップの記憶領域に各々書き込む書き込み部とを有する
ことを特徴とする請求項１乃至５のいずれか一項に記載の半導体記憶装置。
【請求項７】
前記決定部は、各前記第１データのそれぞれに対して、書き込む対象の半導体記憶チップをラウンドロビン方式で各々決定する
ことを特徴とする請求項６に記載の半導体記憶装置。
【請求項８】
前記情報処理装置で用いられる論理アドレスが指定されて前記データの書き込みが要求され、
前記記憶部は、前記論理アドレスと、前記識別情報と、前記第１データ及び前記冗長情報が前記半導体記憶チップにおいて各々書き込まれる位置を示す物理アドレスである前記領域特定情報とを対応付けて記憶しており、
同じ値を示す前記論理アドレスが指定された新たなデータの書き込みの要求に応じて、新たな前記第１データの書き込みが行なわれた場合、前記論理アドレスと新たな前記第１データに対する前記物理アドレスとの対応付けを記憶するよう前記記憶部を更新する第１更新部を更に備える
ことを特徴とする請求項１乃至７のいずれか一項に記載の半導体記憶装置。
【請求項９】
前記所定の単位は、ページであり、
前記第１データは、ページ毎のデータであり、
同じ値を示す前記論理アドレスに対応して新たな書き込みが行われた場合、以前に書き込みが行なわれた前記ページは無効であり、
前記記憶部は、前記記憶領域においてどのページが無効でないかを示すビットベクタを更に記憶し、
前記論理アドレスに対応して新たな書き込みが行われた場合、前記ビットベクタを更新する第２更新部とを更に備える
ことを特徴とする請求項８に記載の半導体記憶装置。
【請求項１０】
前記書き込み制御部は、前記記憶領域において、前記ビットベクタによって無効ではないことが示される前記ページに書き込まれた前記第１データを、消去が行われた新たな前記記憶領域に書き込むことにより、ガベージコレクションを行う
ことを特徴とする請求項８又は９に記載の半導体記憶装置。
【請求項１１】
前記ビットベクタは、前記第１データ及び前記冗長情報の関連毎に、関連付けられた前記第１データ及び前記冗長情報が書き込まれた前記半導体記憶素子内の複数の各記憶領域の各ページについてどのページが有効であるかを示し、
前記書き込み制御部は、前記関連毎の無効ではない前記ページの数に応じて、関連付けられた前記第１データ及び前記冗長情報を選択して、当該第１データ及び当該冗長情報が書き込まれた各前記記憶領域のそれぞれについて、前記ビットベクタによって無効ではないことが示される前記ページに書き込まれた前記第１データ及び前記冗長情報を、消去が行われた新たな前記記憶領域に書き込むことにより、ガベージコレクションを行なう
ことを特徴とする請求項１０に記載の半導体記憶装置。
【請求項１２】
前記書き込み制御部は、選択した前記第１データ及び前記冗長情報が書き込まれていた各前記記憶領域のそれぞれに対して、無効ではない前記ページの新たな前記記憶領域への書き込みが終了した後、消去を行なう
ことを特徴とする請求項１１に記載の半導体記憶装置。
【請求項１３】
前記書き込み制御部は、前記論理アドレスを付加した前記第１データを前記半導体記憶チップの記憶領域に書き込み、
前記第１更新部は、前記ガベージコレクションが行なわれることにより、無効ではない前記ページに書き込まれた前記第１データが新たな前記記憶領域に書き込まれた場合、当該第１データに付加された前記論理アドレスと、新たな前記記憶領域において当該第１データが書き込まれた位置を示す新たな前記物理アドレスとの対応付けを記憶するよう前記記憶部を更新する
ことを特徴とする請求項８乃至１２のいずれか一項に記載の半導体記憶装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体記憶装置に関する。
【背景技術】
【０００２】
半導体記憶チップでは、確率的な故障が起こることが知られている。故障には、α線によるソフトエラーなどメモリセルの故障と、読み出し回路やIOバッファの故障等のより大きな単位の故障との二つの場合が存在する。メモリセルの故障に対しては、従来はECC（Error Correcting Code）などの冗長情報をデータに付加することで、定められた単位内で定められた誤り数以内であれば、故障により誤ったデータを訂正できるように構成されていた。読み出し回路やIOバッファの故障などのより大きな単位の故障では、誤り数が極めて多くなるため、現実的な回路規模で誤り訂正を実装することは困難であった。
【０００３】
一方、HDD（Hard Disk Drive）を多数採用するシステムでは、HDDの故障が問題となり、複数のHDDで誤り訂正符号を構成することで、HDD単位の故障に対応するRAID（Redundant Array of Inexpensive Disks）が広く知られている（例えば非特許文献１参照）。この技術では、複数のHDDにデータを書き込み、これらのデータを用いた冗長情報を１つのHDDに記憶させることで、複数のHDDにより誤り訂正符号を構成する。また、複数のHDDが故障した時にRAIDでデータを復元する方法として、Reed Solomon符号を使用する方法も知られている（例えば非特許文献２参照）。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】A Case for Redundant Arrays of Inexpensive Disks (RAID)  UC Berkeley Technical Report UCB/CSD-87-391 1987年
【非特許文献２】A Tutorial on Reed-Solomon Coding for Fault-Tolerance in RAID-like Systems  James S. Plank  Technical Report CS-96-332  Department of Computer Science  University of Tennessee
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかし、半導体記憶チップをメモリチップとして多数用いた半導体記憶装置では、メモリセルの故障を修復するための誤り訂正符号（ECC）を用いても、メモリチップの故障を防ぐことができず、結果的に、半導体記憶装置の故障となる恐れがある。メモリチップの故障に対して、HDDと同様に複数のメモリチップで誤り訂正符号を構成することは考えられる。しかし、この方法では、書き込みの度に、冗長情報が書き込まれたメモリチップに対して冗長情報の更新のための書き込みが発生する。具体的には、HDDのRAIDでは、例えば、データを書き込む４つのHDD  A、B、C、Dと１つの冗長情報を書き込むHDD  Pとで誤り訂正符号を構成したとき、以下のように書き込みが行われる。仮にA、B、C、Dの内、Aへのデータの書き込みが発生すると、冗長情報であるPも更新するために書き込みを行う。
【０００６】
ところで、半導体記憶チップとして、半導体記憶装置に用いられるNAND型の半導体記憶素子（NANDメモリという）はビット当たりの面積が小さく、不揮発であることからSSD（Solid State Drive）のメモリチップとして広く用いられているが、書き込み回数に制限があることが知られている。このため、書き込み回数を低減させることが、半導体記憶装置の設計寿命を長くするために必須の要件となっている。
【０００７】
このようなNANDメモリをHDDの代わりに使ってRAIDの技術を適用させた場合も、データの書き込み１回当たり、冗長情報Pも含めると２回の書き込みが起こってしまう。更に、B、C、Dへデータの書き込み時にも冗長情報Pへの書き込みが起こることから、冗長情報PへはA、B、C、Dに対するデータの書き込みの４倍の書き込みが起こることになる。冗長情報Pのみが４倍疲労するのを防ぐためには、RAIDの技術のうちRAID5を採用することが考えられる。このRAID5では、冗長情報がPに固定されず、A、B、C、D、Pの５つが冗長情報に用いられる。このため、１つのNANDメモリのみが他のNANDメモリより疲労することを防ぐことができる。しかし、１回の書き込みでデータ部分と冗長情報との２回の書き込みが発生することは同様であるため、半導体記憶装置の設計寿命が短くなってしまうという問題があることには変わりがない。
【０００８】
本発明は、上記に鑑みてなされたものであって、半導体記憶チップへの書き込み回数が増大するのを抑制しつつ、半導体記憶チップの故障に対応して信頼性を向上可能な半導体記憶装置を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上述した課題を解決し、目的を達成するために、本発明は、複数の半導体記憶チップを備え、情報処理装置から書き込みが要求されたデータを前記半導体記憶チップへ書き込む半導体記憶装置であって、前記データは、１つ以上の所定の単位の第１データを有し、所定の単位毎の前記第１データと、所定の数の前記第１データを用いて計算され当該所定の数の第１データの誤りを訂正するために使われる冗長情報とを異なる半導体記憶チップに各々書き込む制御部と、前記所定の数の前記第１データ及び前記冗長情報を関連付ける第１情報と、前記第１データ及び前記冗長情報が書き込まれる前記半導体記憶素子内の複数の記憶領域を各々特定する第２情報とを含む第３情報を記憶する記憶部とを備えることを特徴とする。
【発明の効果】
【００１０】
本発明によれば、半導体記憶チップへの書き込み回数が増大するのを抑制しつつ、半導体記憶チップの故障に対応して信頼性を向上可能になる。
【図面の簡単な説明】
【００１１】
【図１】一実施の形態の半導体記憶装置５０のハードウェア構成を例示する図。
【図２】コンパクションを説明するための概念図。
【図３】半導体記憶装置５０において実現される機能を例示する図。
【図４】正引きテーブルのデータ構成を例示する図。
【図５】ビットベクタテーブルのデータ構成を例示する図。
【図６】書き込み対象データを例示する図。
【図７】ラウンドロビンにより行う書き込みを説明するための図。
【図８】誤り訂正符号の構成を説明するための図。
【図９】書き込み対象データの書き込みを行う処理の手順を示すフローチャート。
【図１０】書き込み対象データが書き込まれていく様子を時刻と共に例示する図。
【図１１】データの読み出しを行う処理の手順を示すフローチャート。
【図１２】異常の発生したデータを復元する様子を示す図。
【図１３】コンパクションの処理の手順を示すフローチャート。
【発明を実施するための形態】
【００１２】
以下に添付図面を参照して、この発明にかかる半導体記憶装置の実施の形態を詳細に説明する。
【００１３】
まず、本実施の形態にかかる半導体記憶装置のハードウェア構成について図１を用いて説明する。半導体記憶装置５０は、プロセッサ５１と、ＢｏｏｔＲＯＭ（Reed Only Memory）５２と、ＳＡＴＡ／ＳＡＳインタフェース５５と、メモリコントローラ５３と、ＤＲＡＭ（Dynamic Random Access Memory）５４と、ＮＡＮＤコントローラ５７Ａ〜５７Ｆと、半導体記憶素子（ＮＡＮＤ）５８Ａ〜５８Ｆと、これらを接続するバス５６とを備える。尚、ＮＡＮＤコントローラ５７Ａ〜５７Ｆを各々区別する必要がない場合、単に、ＮＡＮＤコントローラ５７と記載する場合がある。また、半導体記憶素子５８Ａ〜５８Ｆを各々区別する必要がない場合、単に、半導体記憶素子５８と記載する場合がある。
【００１４】
ＳＡＴＡ／ＳＡＳインタフェース５５は、プロセッサ５１の制御の下、半導体記憶装置５０の上位装置であるホストとの通信を制御する。ＢｏｏｔＲＯＭ５２は、電源の投入時に実行されるプログラムを記憶する。各種システムプログラムは、半導体記憶素子５８に記憶されている。プロセッサ５１は、電源の投入時にＢｏｏｔＲＯＭ５２からプログラムを読み出してこれを実行し、当該プログラムに従って、半導体記憶素子５８に記憶された各種システムプログラムをＤＲＡＭ５４に転送し、ＤＲＡＭ５４上のシステムプログラムを実行することにより、半導体記憶装置５０全体を制御して、各種機能を実現させる。具体的には、プロセッサ５１は、ＳＡＴＡ／ＳＡＳインタフェース５５を介して、ホストから送信されたコマンドを解釈し、当該コマンドに応じて、半導体記憶素子５８へのデータの書き込みや半導体記憶素子５８からのデータの読み出しを制御する。
【００１５】
メモリコントローラ５３は、ＤＲＡＭ５４の制御を行う。ＤＲＡＭ５４は、各種データや各種プログラムを記憶する。本実施の形態においては、ＤＲＡＭ５４は、後述する正引きテーブルと、ビットベクタテーブルとを記憶する。ＮＡＮＤコントローラ５７は、半導体記憶素子５８の制御を行うものであり、誤り訂正回路を含む。
【００１６】
半導体記憶素子５８は、半導体チップに相当し、例えば、NAND型のフラッシュメモリで用いられる記憶素子である。このような半導体記憶素子５８は、ランダムな読み書きができず、ページと呼ばれる単位で読み書きが可能で、複数ページがまとまってブロックと呼ばれる単位の記憶領域を構成する。ここでは、１ページ４KB、６４ページで１ブロックとする。１つの半導体記憶素子５８はこのブロックが複数集まって構成される。尚、本実施の形態においては、図１に示されるように、半導体記憶素子５８の数を６つとしている。これらの各半導体記憶素子５８Ａ〜５８Ｆに対して各々１つのチャネル（ＣＨ０〜ＣＨ５）を割り当て、このうち１つのチャネル（ＣＨ５とする）を、冗長情報を書き込むためのチャネルとして割り当てて、残りのチャネル（ＣＨ０〜ＣＨ４）を、ホストから書き込みが要求されたデータを書き込むためのチャネルとして割り当てて、チャネルＣＨ０〜ＣＨ５の各ページを１つの組として誤り訂正符号を構成する。チャネルＣＨ０〜ＣＨ４は、半導体記憶素子５８Ａ〜５８Ｅに各々対応し、チャネルＣＨ５は、半導体記憶素子５８Ｆに対応する。尚、後述するように、半導体記憶装置５０は、ホストから書き込みが要求されたデータがページのサイズより大きい場合にはこれを複数に分割し、分割したページ単位のデータ（分割データという）を各チャネルＣＨ０〜ＣＨ４に割り当てて、書き込みを行う。即ち、本実施の形態の基本構成においては、半導体記憶装置５０は、書き込みが要求されたデータについて、所定の単位毎のデータと、当該所定の数のデータ（第１データ）を用いて計算され当該所定の数のデータの誤りを訂正するために用いられる冗長情報とを異なる半導体記憶素子５８に各々書き込むことによって、所定の数のデータ及び冗長情報により誤り訂正符号を構成する。誤り訂正符号としては、例えば、パリティ符号を用いる。
【００１７】
ここで、半導体記憶素子５８への書き込み方式について説明する。従来より、NAND型の半導体記憶素子では、追記方式が採用されている。この追記方式では、書き込みの前に、ブロックを消去する必要がある。ブロックの消去とは、ブロックを構成する全てのビットの値を「１」にすることである。半導体記憶装置５０では、このような消去をブロック単位で行ない、消去済みのブロックに対してページ単位で書き込みを行う。即ち、NAND型の半導体記憶素子５８においては、消去済みのブロックのうち書き込みがまだ行われていないページに対して順次書き込みが可能であり、既に書き込みが行なわれたページに対する上書きが不可能である。また、ホストからの要求に応じたデータの書き込みは、ホストで用いられる論理アドレス（Logical Block Address:LBA）で指定される。一方、半導体記憶素子５８へのデータや冗長情報の書き込みは、半導体記憶素子５８の物理的な記憶位置（物理アドレス（Physical Block Address:PBA）という）により、論理アドレスとは無関係に、ページの昇順に書き込みが行なわれる。この論理アドレスと物理アドレスとの対応関係は、後述する正引きテーブルに記憶される。そして、データの書き込み要求において指定された論理アドレスが再度指定されて新たなデータの書き込みがホストから要求されると、半導体記憶装置５０は、消去済みのブロックの書き込みがまだ行なわれていないページに対して新たなデータの書き込みを行う。このとき、当該論理アドレスに対応して前回書き込みが行われたページを無効にして、新たなデータの書き込みが行われたページを有効にする。またこのとき、半導体記憶装置５０は、上述した誤り訂正符号を構成しながら新たなデータ及び冗長情報の書き込みを行なう。
【００１８】
この追記方式において、書き込みを続けることにより、無効にされたページが増えてくると、半導体記憶素子５８において書き込みを実現可能な容量（実現容量という）が少なくなってくる。そして、書き込みが可能な新規の消去済みのブロック、即ち、消去後に書き込みがまだ行なわれていないブロック（フリーブロックという）が少なくなり、誤り訂正符号を構成するブロックの組（論理ブロックという）の確保が不可能になった時点で書き込み不能となってしまう。これを防ぐために、半導体記憶装置５０は、適当なタイミングでガベージコレクションを行なう。半導体記憶素子５８において行なうガベージコレクションは、特にコンパクションという。図２は、コンパクションを説明するための概念図である。半導体記憶装置５０は、無効にされたページを含むブロックのうち、無効にされていない物理アドレスに書き込まれたデータ（有効データという）を集めて新たにフリーブロックに書き直すことにより、有効データを移動させる。その後、半導体記憶装置５０は、当該ブロックに対して消去を行うことにより、新たなフリーブロックを生成する。半導体記憶装置５０は、このようなコンパクションを行なうことにより、書き込みが不能になったブロックが新たに書き込み可能になって、フリーブロックを確保することが可能になる。また、移動により有効データが書き込まれたブロックにおいても、書き込みがまだ行なわれていないページがあればそのページに新たに書き込みが可能である。
【００１９】
尚、コンパクションを行うためには少なくとも一つのフリーブロックが必要になるが、これは、NAND型の半導体記憶素子５８において実装された容量（実装容量という）より、書き込みを実際に実現可能な容量が少ないことを意味している。本実施の形態においては、実装容量と実現容量との差を余裕容量と呼んでいる。余裕容量が小さい時は、半導体記憶装置５０は、コンパクションを頻繁に行わなければならず、その性能に与えるインパクトが大きい。ところで、図２ではブロック単位のコンパクションの説明を行った。本実施の形態においては、論理ブロックを基本単位としているため、フリーブロックをチャネル毎に確保してこれらにより論理ブロックが構成されるようにし、コンパクションを論理ブロック毎に行うものとする。
【００２０】
次に、半導体記憶装置５０において実現される機能について図３を用いて説明する。半導体記憶装置５０は、ホストインタフェース部６０と、バッファ制御部６１と、アドレス変換部６２と、ＣＨ振り分け部６３と、コンパクション候補検出部６４と、管理テーブル更新部６５と、ＮＡＮＤ制御部６６Ａ〜６６Ｆと、データバッファ６７と、コンパクションｒｅａｄキュー６８と、管理テーブル６９とを有する。ホストインタフェース部６０の機能は、プロセッサ５１がプログラムを実行することと、ＳＡＴＡ／ＳＡＳインタフェース５５の機能とにより実現される。アドレス変換部６２と、ＣＨ振り分け部６３と、管理テーブル更新部６５と、コンパクション候補検出部６４と、バッファ制御部６１との各機能は、プロセッサ５１がプログラムを実行することにより実現される。ＮＡＮＤ制御部６６Ａ〜６６Ｆの各機能は、ＮＡＮＤコントローラ５７Ａ〜５７Ｆに各々対応しており、プロセッサ５１がプログラムを実行することと、ＮＡＮＤ制御部６６Ａ〜６６Ｆに各々対応するＮＡＮＤコントローラ５７Ａ〜５７Ｆの機能とにより実現される。これらのＮＡＮＤ制御部６６Ａ〜６６Ｆは、上述したチャネルＣＨ０〜ＣＨ５が各々割り当てられた半導体記憶素子５８Ａ〜５８Ｆに１対１対応しているが、これらを各々区別する必要がない場合には、単にＮＡＮＤ制御部６６と記載する場合がある。データバッファ６７と、コンパクションｒｅａｄキュー６８と、管理テーブル６９とは、例えば、ＤＲＡＭ５４上に記憶される情報である。
【００２１】
ホストインタフェース部６０は、ホストと半導体記憶装置５０との通信を制御するインタフェースである。ホストインタフェース部６０は、ホストから送信されたコマンドを受信し、当該コマンドによって論理アドレスが指定されたデータの書き込みが要求されている場合、当該コマンド（ｗｒｉｔｅコマンドという）を後述のアドレス変換部６２に送る。その際、書き込みが要求されたデータのサイズがページのサイズ以下であれば、当該データを後述のバッファ制御部６１に送り、当該データのサイズがページのサイズより大きい場合、当該データをページ単位に分割し、分割したデータ（分割データという）をバッファ制御部６１に送る。これは論理アドレスと物理アドレスとの変換をページ単位で行っているためである。例えば、１２８ＫＢのデータを４ＫＢのデータ３２個にホストインタフェース部６０は分割する。尚、ｗｒｉｔｅコマンドに応じてバッファ制御部６１に送られるデータ又は分割データを、説明の便宜上、書き込み対象データと記載する。
【００２２】
また、ホストインタフェース部６０は、ホストから送信されたコマンドによって論理アドレスが指定されたデータの読み出しが要求されている場合、読み出しが要求されたデータがページのサイズ以下であれば、当該コマンド（ｒｅａｄコマンドという）をアドレス変換部６２に送る。読み出しが要求されたデータがページのサイズより大きい場合、ホストインタフェース部６０は、読み出す対象のデータがページ単位になるように読み出しを分解したコマンド（ｒｅａｄコマンド）をアドレス変換部６２に送る。このとき、ホストインタフェース部６０は、ホストから送信されたコマンドにより指定された論理アドレスを用いて、読み出し対象の各データの論理アドレスを各々計算し、計算した各論理アドレスのデータの読み出しを要求するｒｅａｄコマンドをアドレス変換部６２に送る。そして、ホストインタフェース部６０は、後述するバッファ制御部６１によってデータバッファ６７の指定の領域に記憶された読み出し対象のデータを読み出し、ホストに送信する。
【００２３】
管理テーブル６９は、正引きテーブルと、ビットベクタテーブルとを含む。正引きテーブルとは、書き込み対象データ及び冗長情報を関連付けるための識別情報と、関連付けられた書き込み対象データ及び冗長情報が書き込まれる半導体記憶素子５８内の複数の記憶領域を各々特定する領域特定情報とを対応付けて記憶するものであり、書き込み対象データの論理アドレスと、半導体記憶素子５８において当該書き込み対象データの書き込まれる物理的な記憶位置を示す物理アドレスとの対応関係を示す。このような正引きテーブルは、ホストから指定された論理アドレスに対応するデータが記憶されている半導体記憶装置５８上の位置を示す物理アドレスを特定する際に用いられる。図４は、正引きテーブルのデータ構成を例示する図である。同図に示されるように、正引きテーブルは、ＬＢＡテーブルと、論物変換テーブルとを有する。ＬＢＡテーブルのエントリは、論理アドレスをインデックスとして、チャネルの番号と、ページに付与されたページ番号と、当該データが記憶されている論理ブロックに付与された論理ブロック番号とから構成される。各書き込み対象データの論理アドレスは、ホストからのデータの書き込みの要求において指定される論理アドレスに基づいて各々計算される。
【００２４】
論理ブロック番号は、書き込み対象データ及び冗長情報を関連付けるための識別情報であり、例えば、論理ブロックの生成順に付与される番号である。チャネルの番号は、ここでは、ＣＨ０〜ＣＨ４とし、当該論理アドレスに対応するデータが記憶されている物理ブロックのある半導体記憶素子５８がいずれのチャネルに接続されているかを示す。そしてページ番号は、当該論理アドレスに対応するデータが、論理ブロック番号とチャネル番号で特定される物理ブロックの中のどのページに記憶されているかを示す。尚、ページ番号としては、例えば、物理アドレスの順に付与されるものであっても良いし、ページの物理アドレス自体が付与されても良い。
【００２５】
論物変換テーブルは、書き込み対象データ及び冗長情報が書き込まれる半導体記憶素子５８内の複数の記憶領域を各々特定する領域特定情報であり、論理ブロック番号と、その論理ブロックに関連付けられた各チャネルの各物理ブロックとを対応付けて記憶する。論物変換テーブルには、論理ブロック番号をインデックスとして、当該論理ブロックに関連付けられた各チャネルの物理ブロックのアドレス（物理ブロックアドレス）が記憶される。このような構成において、ある論理アドレスに対応するＬＢＡテーブルのエントリに記憶されていた論理ブロック番号をインデックスとし、そのインデックスで、当該論理ブロックに関する論物変換テーブルのエントリを特定する。次に、当該論物変換テーブルのエントリに記憶されている物理ブロックの中から、当該ＬＢＡテーブルのエントリに記録されていたチャネル番号のチャネルに接続されている半導体記憶素子５８の物理ブロックを特定する。そして、当該ＬＢＡテーブルのエントリに含まれるページ番号によって、当該論理アドレスに対応するデータが書き込まれているページを特定する。
【００２６】
尚、上述したように、チャネルＣＨ０〜ＣＨ４の各ページには、ホストから書き込みが要求されたデータについて、ページ単位で書き込みが行なわれ、チャネルＣＨ５には、誤り訂正符号を構成するために付加される冗長情報が書き込まれる。このため、論物変換テーブルの各エントリに記録されるチャネルＣＨ５の物理アドレスの記憶領域には、冗長情報が各々書き込まれている。この冗長情報に対応する論理アドレスは存在しないため、冗長情報に関するエントリはＬＢＡテーブルには記録されない。冗長情報に関する情報は、論物変換テーブルのエントリに記録される。正引きテーブルは、書き込み対象データや冗長情報が半導体記憶素子５８に書き込まれる度に、更新される。どのように更新されるかは後述する。
【００２７】
次に、ビットベクタテーブルについて図５を用いて説明する。ビットベクタテーブルは、論理ブロックに関連付けられた物理ブロックのうち、書き込み対象データが書き込まれるチャネルＣＨ０〜ＣＨ４の各物理ブロックについて、当該物理ブロックに含まれるページのうち有効なデータが書き込まれているページ（有効ページという）がどのページかを、物理ブロック順に２値で示すテーブルである。ページ毎に２値を示すものをビットベクタという。ビットベクタの値が「１」であれば、そのページが有効ページであることを示し、「０」であれば、そのページが有効ページではない(無効である)ことを示す。初期状態においては、ビットベクタの値は全て「０」である。
【００２８】
本実施の形態においては、論理ブロックに関連付けられた物理ブロックのうち、書き込
み対象データが書き込まれるチャネルはチャネルＣＨ０〜ＣＨ４の５つであり、１物理ブロック当たり６４ページとすると１論理ブロック当たりでは３２０ページとなるので、対応するビットベクタは、１論理ブロック当たり３２０個となる。同図に示されるように、このようなビットベクタテーブルは、上述した論理ブロック番号をインデックスとして、これと、当該論理ブロック番号が付与された論理ブロックに関連付けられたチャネルＣＨ０〜ＣＨ４の各物理ブロックに各々含まれる各ページに対するビットベクタと、カウンタとを、論理ブロック毎に含む。尚、ここでは、論物変換テーブルのインデックスと、ビットベクタテーブルのインデックスとが一致するように、論物変換テーブル内のエントリとビットベクタテーブル内のビットベクタが予め配置されるものとする。同図においては、左から、チャネルＣＨ０の１番目のページ、２番目のページ、…、チャネルＣＨ０の最後のページ、チャネルＣＨ１の1番目のページ、２番目のページ…、チャネルＣＨ１の最後のページ、…、というように、チャネルＣＨ０〜ＣＨ４の各物理ブロックの各ページの順にビットベクタが配置される。カウンタは、値が「１」であるビットベクタの総数を示す。ビットベクタの値が「１」であるページは有効ページであるから、このカウンタは、論理ブロック内の有効ページの数を示す（以降、有効ページ数カウンタと呼ぶ）。このような構成において、ビットベクタテーブルは、ホストからのデータの書き込みの要求がある度に、更新される。どのように更新されるかは後述する。
【００２９】
図３の説明に戻る。アドレス変換部６２は、ホストインタフェース部６０からコマンドを受け取り、当該コマンドがｒｅａｄコマンドである場合、当該ｒｅａｄコマンドで指定された論理アドレスを用いて管理テーブル６９のうち正引きテーブルを参照し、当該ｒｅａｄコマンドで読み出しが要求されたデータが書き込まれているチャネル及びページの物理アドレスを特定する。アドレス変換部６２は、当該チャネル及び物理アドレスを指定してデータの読み出しを要求するコマンドを、ＣＨ振り分け部６３を介してＮＡＮＤ制御部６６に送る。一方、ホストインタフェース部６０から受け取ったコマンドがｗｒｉｔｅコマンドである場合、アドレス変換部６２は、当該ｗｒｉｔｅコマンドを後述のＣＨ振り分け部６３に送る。
【００３０】
また、アドレス変換部６２は、後述のコンパクションｒｅａｄキュー６８に記憶されたコンパクションｒｅａｄコマンドに応じて、正引きテーブルを参照して、当該コンパクションｒｅａｄコマンドによって物理アドレスが指定された有効ページのデータ（有効データ）の読み出しを要求するコマンドを、当該有効のある物理ブロックを含む半導体記憶素子５８が接続されたチャネルに対応するＮＡＮＤ制御部６６に送る。当該有効データは、ＮＡＮＤ制御部６６を介して半導体記憶素子５８から読み出され、バッファ制御部６１を介してデータバッファ６７に記憶される。アドレス変換部６２は、この有効データの書き込みを要求するコマンド（コンパクションｗｒｉｔｅコマンドという）をＣＨ振り分け部６３に送る。
【００３１】
ＣＨ振り分け部６３は、アドレス変換部６２からコマンドを受け取り、当該コマンドがｗｒｉｔｅコマンドである場合、書き込み対象データを書き込む対象のチャネルを決定する。例えば、ＣＨ振り分け部６３は、冗長情報を書き込むチャネル（ここではチャネルＣＨ５）以外のチャネルで、４ＫＢ毎にラウンドロビンにより書き込みを行うようにし、ラウンドロビンの順番に応じて、書き込む対象のチャネルを決定する。そして、ＣＨ振り分け部６３は、書き込み対象データの書き込みを要求するコマンドを、決定したチャネルに対応するＮＡＮＤ制御部６６に送る。一方、アドレス変換部６２からのコマンドによって、チャネル及び物理アドレスが指定されたデータの読み出しが要求されている場合、指定されたチャネルに対応するＮＡＮＤ制御部６６に対して物理アドレスを指定してデータの読み出しを要求するコマンドを送る。また、アドレス変換部６２から受け取ったコマンドがコンパクションｗｒｉｔｅコマンドである場合、ＣＨ振り分け部６３は、ラウンドロビンの順番に応じて、書き込む対象のチャネルを決定し、有効データの書き込みを要求するコマンドを、決定したチャネルに対応するＮＡＮＤ制御部６６に送る。
【００３２】
ＮＡＮＤ制御部６６は、ＣＨ振り分け部６３からコマンドを受け取り、当該コマンドに従って、対応する半導体記憶素子５８にアクセスする。具体的には、当該コマンドによって、データの書き込みが要求されている場合、ＮＡＮＤ制御部６６は、バッファ制御部６１を介して書き込み対象データを取得して、当該書き込み対象データを半導体記憶素子５８に書き込む。この書き込みにおいて、ＮＡＮＤ制御部６６は、対応する半導体記憶素子５８の消去済みのブロックのうち書き込みがまだ行なわれていないページ毎に書き込みの位置を順次示すよう追記ポインタを設定し、追記ポインタによって示される位置のページに書き込み対象データを書き込み、その後、書き込みを行なったページに続く次のページであって書き込みがまだ行われていないページの位置を示すよう追記ポインタを更新する。従って、追記ポインタは順次次の書き込み位置を示すようにその値が変化する。例えば、追記ポインタは、各チャネルにおいて15ビットの物理アドレスによりブロックが識別され、ブロック内に64ページある場合、合計15+6=21ビットで構成される。
【００３３】
ここで、書き込み対象データ及び冗長情報のデータ構成について説明する。ＮＡＮＤ制御部６６は、書き込み対象データ自体の誤りを検出して訂正するための誤り訂正符号（ページＥＣＣという）及びｗｒｉｔｅコマンドによって指定された論理アドレスを当該書き込み対象データに付加する。尚、ページＥＣＣには、データの誤りを検出するＣＲＣ符号等の符号と、データの誤りを訂正するＥＣＣ符号等の符号とが含まれるものとする。ページＥＣＣにＣＲＣ符号も含む理由は、ＥＣＣ符号によりデータの誤りを訂正できない場合は誤訂正の可能性もあるからである。図６は、冗長情報が付加された書き込み対象データを例示する図である。上述のように決定された各チャネルの半導体記憶素子５８において、ＮＡＮＤ制御部６６は、このようなページＥＣＣ及び論理アドレスを付加した書き込み対象データを、上述のように決定された各チャネルの半導体記憶素子５８内の追記ポインタにより示されるページに書き込む。尚、書き込み対象データはページ単位の大きさであるが、半導体記憶素子５８のページサイズは、書き込み対象データにページＥＣＣ及び論理アドレスが付加された全体の大きさに相当するものとする。また、各分割データの論理アドレスは、ｗｒｉｔｅコマンドによって指定された論理アドレスに基づいてＮＡＮＤ制御部６６が各々計算する。一方、誤り訂正符号を構成するために計算された冗長情報が書き込まれるチャネルＣＨ５に対応するＮＡＮＤ制御部６６Ｆは、冗長情報自体の誤りを検出して訂正するためのページＥＣＣを当該冗長情報に付加する。そして、ＮＡＮＤ制御部６６Ｆは、ページＥＣＣを付加した当該冗長情報を、追記ポインタにより示される半導体記憶素子５８Ｆ内のページに書き込む。
【００３４】
次に、複数の分割データが書き込み対象データとしてラウンドロビンによりチャネルＣＨ０〜ＣＨ５で書き込みが行われる様子について説明する。図７は、ラウンドロビンにより行う書き込みを説明するための図である。尚、図の簡略化のため、分割データに対して付加された論理アドレスの図示を省略している。同図に示されるように、時刻Ｔ１でチャネルＣＨ０に対して最初の分割データＤ１の書き込みが行われ、時刻Ｔ２でチャネルＣＨ１に対して次の分割データＤ２の書き込みが行われるというように、チャネルＣＨ０〜ＣＨ４まではラウンドロビンで順に分割データの書き込みが行われる。尚、時刻Ｔ５で、チャネルＣＨ４への分割データＤ５の書き込みが行われる際には、時刻Ｔ１でチャネルＣＨ０に書き込まれた分割データＤ１、時刻Ｔ２でチャネルＣＨ１に書き込まれた分割データＤ２、時刻Ｔ３でチャネルＣＨ２に書き込まれた分割データＤ３、時刻Ｔ４でチャネルＣＨ３に書き込まれた分割データＤ４及び時刻Ｔ５でチャネルＣＨ４に書き込まれた分割データＤ５のパリティＰが冗長情報として計算され、当該冗長情報Ｐの書き込みがチャネルＣＨ５に対して行われる。更なる分割データの書き込みの際には、チャネルＣＨ０から順にランドロビンで書き込みが行われる。このように、ラウンドロビンにより分割データの書き込みが行われることにより、書き込みがチャネル間で略均等になる。尚、同図の例では、時刻の経過と共に各チャネルに順に書き込みを行う様子が図示されているが、これに限らず、２つ以上のチャネルに同時に書き込みを行うようにしても良い。
【００３５】
次に、誤り訂正符号の構成について図８を用いて説明する。尚、説明の便宜上、同図においては、チャネルＣＨ０〜ＣＨ４に各々書き込まれる分割データに付加される論理アドレスの図示を省略している。同図に示されるように、チャネルＣＨ０〜ＣＨ４の各書き込み対象データに対して、チャネルＣＨ５に対応するＮＡＮＤ制御部６６Ｆは、オフセットが等しい位置のバイト同士で排他的論理和を計算し、この値を冗長情報として、チャネルＣＨ５の半導体記憶素子５８Ｆにおいて上述のオフセットが等しい位置に書き込む。即ち、チャネルＣＨ０〜ＣＨ５においてオフセットが等しい位置のバイト同士によって誤り訂正符号が構成される。
【００３６】
図３の説明に戻る。また、ＮＡＮＤ制御部６６は、ＣＨ振り分け部６３から受け取ったコマンドによって、物理アドレスが指定されたデータの読み出しが要求されている場合、当該物理アドレスを用いて半導体記憶素子５８内の当該物理アドレスに対応する位置からデータを読み出してこれをバッファ制御部６１に送る。尚、ＮＡＮＤ制御部６６は、半導体記憶素子５８から読み出した当該データに誤りがある場合、これを検出して訂正する。データの誤りを検出して訂正する方法については後述する。また、ＮＡＮＤ制御部６６は、アドレス変換部６２から受け取ったコマンドによって、物理アドレスが指定された有効ページのデータ（有効データ）の読み出しが要求されている場合、当該物理アドレスを用いて半導体記憶素子５８内の当該物理アドレスに対応するページに書き込まれたデータを読み出して、これをデータバッファ６７に記憶させる。また、ＣＨ振り分け部６３から受け取ったコマンドによって、有効データの書き込みが要求されている場合、ＮＡＮＤ制御部６６は、バッファ制御部６１を介して書き込み対象の有効データを取得して、当該有効データを半導体記憶素子５８に書き込む。
【００３７】
コンパクション候補検出部６４は、管理テーブル６９に含まれるビットベクタテーブルを参照して、コンパクションの候補とする論理ブロックを決定し、当該論理ブロックのうち有効ページの物理アドレスを指定して当該有効ページの読み出しを要求するコマンド（コンパクションｒｅａｄコマンドという）をコンパクションｒｅａｄキュー６８に送る。
【００３８】
データバッファ６７は、書き込み対象データを記憶するバッファである。コンパクションｒｅａｄキュー６８は、コンパクションの際に有効ページの読み出しを要求するコマンドを記憶する先入れ先出し型のバッファである。
【００３９】
バッファ制御部６１は、データバッファ６７を複数の領域として管理し、コマンドに対応したデータを記憶させる領域を管理する。具体的には、バッファ制御部６１は、ｗｒｉｔｅコマンドに応じてホストインタフェース部６０から送られた書き込み対象データをデータバッファ６７に記憶させ、ＣＨ振り分け部６３により書き込み対象として決定されたチャネルに対応するＮＡＮＤ制御部６６に該当の書き込み対象データを送る。当該書き込み対象データは、ＮＡＮＤ制御部６６を介して半導体記憶素子５８に書き込まれる。また、バッファ制御部６１は、ｒｅａｄコマンドに応じて、ＮＡＮＤ制御部６６から送られたデータをデータバッファ６７の指定の領域に記憶させ、その後ホストインタフェース部６０に送る。当該データはホストインタフェース部６０を介してホストに送信される。また、バッファ制御部６１は、コンパクションｒｅａｄコマンドに応じて、ＮＡＮＤ制御部６６を介して半導体記憶素子５８から読み出されたデータをデータバッファ６７に記憶させる。
【００４０】
管理テーブル更新部６５は、論理アドレスが指定されたデータの書き込みを要求するコマンド（ｗｒｉｔｅコマンド）がホストから受信された場合、正引きテーブルを参照すると共に、ビットベクタテーブルを更新し、更に、正引きテーブルを更新する。具体的には、管理テーブル更新部６５は、まず、正引きテーブルを参照して、当該論理アドレスに対応する物理アドレス、即ち、当該論理アドレスに対応するデータがどの物理ブロックのページに書き込まれているかを検索する。当該論理アドレスに対応する物理アドレスが正引きテーブルに記憶されていない場合は、当該論理アドレスへのデータの書き込みが今回まで行なわれていないことになる。この場合、管理テーブル更新部６５は、ビットベクタテーブル内の、書き込み対象データを書き込むページに対応するビットベクタの値を「１」にする。書き込み対象データを書き込むページは、追記ポインタにより示される。また、管理テーブル更新部６５は、当該ページの存在する物理ブロックが関連付けられた論理ブロックの有効ページ数カウンタの値を１インクリメントする。
【００４１】
一方、管理テーブル更新部６５が正引きテーブルを参照したときに当該論理アドレスに対応する物理アドレスが正引きテーブルに存在する場合、当該論理アドレスに対応するデータの書き込みが以前に行なわれていることになる。この場合、今回のｗｒｉｔｅコマンドにより、以前に書き込みが行なわれたデータを無効にする必要がある。このため、管理テーブル更新部６５は、ｗｒｉｔｅコマンドで指定された論理アドレスで参照した正引きテーブルのエントリに記憶されている物理アドレスのページに対応するビットベクタの値を「０」にする。あわせて管理テーブル更新部６５は、当該ページの存在する物理ブロックが関連付けられたる論理ブロックの有効ページ数カウンタの値を１デクリメントする。また、管理テーブル更新部６５は、書き込み対象データを書き込むページに対応するビットベクタの値を「１」にし、当該ページの存在する物理ブロックが関連付けられた論理ブロックの有効ページ数カウンタの値を１インクリメントする。このようにデータの書き込みが行なわれる度に更新することで、ビットベクタテーブルと有効ページ数カウンタとは有効ページの位置及びその数を常に示している。最後に管理テーブル更新部６５は、当該論理アドレスに対応する正引きテーブルのエントリに、書き込み対象データを書き込む先の物理アドレスを記録する。
【００４２】
次に、本実施の形態にかかる半導体記憶装置５０の行う処理の手順について説明する。まず、ホストからのｗｒｉｔｅコマンドに応じて半導体記憶装置５０が半導体記憶素子５８に書き込み対象データの書き込みを行う処理の手順について図９を用いて説明する。尚、半導体記憶装置５０は、書き込みを始める前には、各チャネルにおいてフリーブロックを各々予め確保しておく。そして、半導体記憶装置５０は、論理アドレスが指定されたデータの書き込みを要求するｗｒｉｔｅコマンドをホストから受信すると（ステップＳ１）、各チャネルにおいて各々１つのフリーブロックを選択して、チャネルＣＨ０〜ＣＨ５の各フリーブロックを関連付けた論理ブロックを構成する。そして、半導体記憶装置５０は、当該論理ブロックに対して論理ブロック番号を付与して、当該論理ブロック番号をインデックスとして、その論理ブロックと関連付けられたチャネル毎の各物理ブロックの物理アドレスを論物変換テーブルに記録する。このとき、半導体記憶装置５０は、論物変換テーブルのインデックスで当該論理ブロックに関連付けられた各物理ブロックのビットベクタが参照できるように、論物変換テーブルエントリやの並び順や、論物変換テーブルエントリ内での各チャネルの物理ブロックの物理アドレスの並び順、そしてビットベクタテーブル内のビットベクタを配置する。そして、半導体記憶装置５０は、論理ブロックに関連付けられた各物理ブロックの物理アドレスと共に、各物理ブロックの書き込み先のページを示す追記ポインタをチャネル毎に設定する。書き込みを始める前には、半導体記憶装置５０は、各チャネルの先頭の物理ブロックの１番目のページを示すように各チャネルの追記ポインタを設定する。
【００４３】
そして、半導体記憶装置５０は、ｗｒｉｔｅコマンドにより書き込みが要求されたデータのサイズがページのサイズ以下であるか否かを判断する（ステップＳ２）。当該データのサイズがページのサイズ以下である場合（ステップＳ２：ＹＥＳ）、半導体記憶装置５０は、当該データ（書き込み対象データ）をデータバッファ６７に記憶させる（ステップＳ４）。一方、ｗｒｉｔｅコマンドにより書き込みが要求されたデータのサイズがページのサイズより大きい場合（ステップＳ２：ＮＯ）、半導体記憶装置５０は、当該データをページ単位で分割し（ステップＳ３）、分割したデータ（分割データ：書き込み対象データ）をデータバッファ６７に記録する（ステップＳ４）。
【００４４】
そして、半導体記憶装置５０は、ｗｒｉｔｅコマンドにより指定された論理アドレスに基づいて正引きテーブルを参照して、書き込み対象データの論理アドレスに対応する物理アドレスが既に記憶されている場合、当該物理アドレスを古い物理アドレスとして例えばＤＲＡＭ５４に記憶させる（ステップＳ５）。また、半導体記憶装置５０は、書き込み対象データを書き込むチャネルをラウンドロビンにより決定し（ステップＳ６）、決定した各チャネルの半導体記憶素子５８において追記ポインタで示されるページに、ページＥＣＣ及び論理アドレスを各々付加した各書き込み対象データを書き込む（ステップＳ７）。そして、半導体記憶装置５０は、各チャネルに関して、書き込み対象データを書き込んだページに続く次のページであって書き込みがまだ行われていないページを示すよう追記ポインタを更新する（ステップＳ８）。
【００４５】
図１０は、チャネルＣＨ０について、分割データが書き込み対象データとして書き込まれていく様子を時刻毎に示した図である。まず、時刻ｔ０では、フリーブロックが確保されている状態が示されている。時刻ｔ１では、最初の分割データＤ１が、時刻ｔ０で確保されたフリーブロックの最初（先頭又は最後尾）のページに書き込まれ、時刻ｔ２では、ラウンドロビンによりチャネルＣＨ０に新たに決定された分割データＤ６が２番目のページに書き込まれる。同様に、時刻ｔ３では、３番目のページに分割データＤ１１が書き込まれ、時刻ｔ４では、４番目のページに分割データＤ１６が書き込まれる。このように、分割データを書き込むページは、論理アドレスとは無関係に、ブロック内の昇順に決定される。そして追記ポインタは、この順に書き込むページを示すように、書き込みが行われる度に設定される。本実施の形態においては、ラウンドロビンで各チャネルへの書き込みが均等に行われるため、図７で示されるように、各チャネルにおいて追記ポインタが示すページの番号は、最大で１の差である。そして、論理ブロックの最後のページに書き込みが終了したときには、各チャネルの追記ポインタの示すページの番号は、同じになる。
【００４６】
以上のように、ホストからのｗｒｉｔｅコマンドにより指定された論理アドレスがどのような値であっても、書き込み対象データを書き込むページの物理アドレスが一定の順序で割り当てられ、当該ページにデータの書き込みが行なわれる。
【００４７】
図９の説明に戻る。書き込み対象データの書き込みに伴って、半導体記憶装置５０は、書き込み対象データの論理アドレスと、書き込み対象データを書き込んだページの物理アドレスとの対応関係を、図４に例示した正引きテーブルに記録する（ステップＳ９）。書き込み対象データが分割データである場合、半導体記憶装置５０は、各分割データの物理アドレスを、ｗｒｉｔｅコマンドにより指定された論理アドレスに基づいて各々計算する。分割データは、ページ単位であるから、指定された論理アドレスに対してページのサイズを順次加算した値を各分割データの論理アドレスとして半導体記憶装置５０は計算する。そして、半導体記憶装置５０は、論理アドレスと、書き込み対象データを各々書き込んだ各チャネルの物理ブロックが関連付けられた論理ブロックの論理ブロック番号と、書き込み対象データを今回書き込んだチャネルの番号及びページ番号とを、ＬＢＡテーブルに記録する。上述の例では、ページ番号は、更新する前の追記ポインタの下位6ビットにより示されるから、ページ番号にはこの値を用いれば良い。半導体記憶装置５０は、書き込み対象データの書き込みを行う度、このように正引きテーブルを更新する。
【００４８】
更に、半導体記憶装置５０は、ビットベクタテーブルを参照して、ステップＳ５でＤＲＡＭ５４に記憶させた古い物理アドレスのページに対応するビットベクタの値を「０」にし、当該ページの存在する物理ブロックが関連付けられた論理ブロックの有効ページ数カウンタの値を１デクリメントする（ステップＳ１０）。古い物理アドレスとは、即ち、ステップＳ１０で受信されたｗｒｉｔｅコマンドが指定する論理アドレスで、以前にデータが書き込まれたページを示している。このため、当該ページに書き込まれたデータを無効にするため、ビットベクタの値を「０」にして、当該ページの存在する物理ブロックが関連付けられた論理ブロックの有効ページの数カウンタの値を１つ減らしている。また、半導体記憶装置５０は、ビットベクタテーブルにおいて、ステップＳ７で書き込み対象データを書き込んだページに対応するビットベクタの値を「１」にし、当該ページの属する論理ブロックの有効ページ数カウンタの値を１インクリメントする（ステップＳ１１）。以上のようにして、半導体記憶装置５０は、書き込み対象データの書き込みに伴って、ビットベクタテーブルを更新する。
【００４９】
尚、ステップＳ７において、半導体記憶装置５０は、チャネルＣＨ０〜ＣＨ４への書き込み対象データの書き込みが一巡すると、チャネルＣＨ０〜ＣＨ４の各書き込み対象データにおいて、オフセットが等しい位置のバイト同士で排他的論理和を計算し、この値を、チャネルＣＨ５において上述のオフセットが等しい位置に書き込むことにより冗長情報を書き込む。
【００５０】
そして、追記ポインタが全てのチャネル（ＣＨ０〜ＣＨ５）でブロックの最後に達して、論理ブロックに新たな書き込みを行うことができなくなった場合、半導体記憶装置５０は、新たな論理ブロックを構成する。論理ブロックを構成する方法は、上述の通りである。新たな論理ブロックへの分割データ及び冗長情報の書き込みについても上述の通りである。
【００５１】
次に、ホストからのｒｅａｄコマンドに応じて半導体記憶装置５０が半導体記憶素子５８からデータの読み出しを行う処理の手順について図１１を用いて説明する。半導体記憶装置５０は、論理アドレスが指定されたデータの読み出しを要求するｒｅａｄコマンドをホストから受信すると（ステップＳ２０）、ｒｅａｄコマンドにより読み出しが要求されたデータのサイズがページのサイズ以下であるか否かを判断する（ステップＳ２１）。当該データのサイズがページのサイズ以下である場合（ステップＳ２１：ＹＥＳ）、半導体記憶装置５０は、ｒｅａｄコマンドにより指定された論理アドレスを使って正引きテーブルのＬＢＡテーブルを参照し、論理ブロック番号を特定する。次に、半導体記憶装置５０は、特定した論理ブロック番号を使って論物変換テーブルを参照して、読み出しの対象のチャネル、物理ブロック及びページを特定する（ステップＳ２３）。そして、半導体記憶装置５０は、特定したチャネルに対応する半導体記憶素子５８から該当のデータを読み出す（ステップＳ２４）。
【００５２】
一方、ｒｅａｄコマンドにより読み出しが要求されたデータのサイズがページのサイズより大きい場合（ステップＳ２１：ＮＯ）、半導体記憶装置５０は、読み出す対象のデータがページ単位になるように読み出しを分解する。即ち、半導体記憶装置５０は、ｒｅａｄコマンドにより指定された論理アドレスを用いて、読み出し対象の各データの論理アドレスを各々計算する（ステップＳ２２）。そして、半導体記憶装置５０は、計算した各論理アドレスを使って正引きテーブルのＬＢＡテーブルを参照して、論理ブロック番号を各々特定する。次に、半導体記憶装置５０は、特定した論理ブロック番号を使って論物変換テーブルを参照し、読み出しの対象のチャネル、物理ブロック及びページを各々特定する（ステップＳ２３）。そして、半導体記憶装置５０は、特定したチャネルに対応する半導体記憶素子５８から該当のデータを各々読み出す（ステップＳ２４）。
【００５３】
ステップＳ２４で読み出したデータの正当性は、データに付加されたページＥＣＣで担保される。即ち、半導体記憶装置５０は、読み出したデータに付加されたページＥＣＣを使って、当該データの誤りを検出してこれを訂正することが可能である。しかし、ページＥＣＣで訂正できない誤りがある場合、半導体記憶素子５８に故障が生じて、データに異常が発生している可能性がある。このような場合には（ステップＳ２５：ＮＯ）、半導体記憶装置５０は、データの読み出し時に使った論理アドレスで正引きテーブルを参照して、当該データを読み出したチャネルの物理ブロックが関連付けられた論理ブロックを特定し（ステップＳ２７）、当該論理ブロックに関連付けられた他のチャネルの物理ブロックに書き込まれた他のデータ及び冗長情報を読み出し、当該他のデータ及び冗長情報を用いて、訂正できない誤りがあったデータの復元を行う。
【００５４】
図１２は、例としてチャネルＣＨ３の半導体記憶素子５８に発生した故障により異常の発生したデータを復元する様子を示す図である。具体的には、半導体記憶装置５０は、ステップＳ２７で特定した論理ブロックに関連付けられた物理ブロックであって訂正できない誤りの生じたデータを読み出した物理ブロック以外の他のチャネルの物理ブロックに書き込まれた他のデータ及び冗長情報（ここでは、チャネルＣＨ０、ＣＨ１、ＣＨ２、ＣＨ４に書き込まれた各データ及びチャネルＣＨ５に書き込まれた冗長情報）を読み出す。そして、半導体記憶装置５０は、当該各データ及び冗長情報において同じオフセットにおける排他的論理和、即ち、これらのバイト毎の排他的論理和を求めることにより、チャネルＣＨ３におけるデータを復元する。そして、半導体記憶装置５０は、復元したデータをデータバッファ６７に記憶させ（ステップＳ２８）、ステップＳ２９に進む。
【００５５】
尚、誤りがあったデータが読み出されたページには異常が発生している可能性が高いため、半導体記憶装置５０は、復元したデータを当該ページとは異なるページに新たに書き込む。このとき、半導体記憶装置５０は、データの読み出し時に用いた論理アドレスを用いて、ビットベクタテーブル及び正引きテーブルを更新する。これらのテーブルを更新する方法は、上述の通りである。この更新の結果、誤ったデータが読み出されたページのビットベクタが「０」に更新され、復元したデータが書き込まれたページのビットベクタが「１」に更新され、ｒｅａｄコマンドにより指定された論理アドレスに対する正引きテーブルエントリには、復元したデータが書き込まれたページの物理アドレスが記録される。
【００５６】
ステップＳ２４で読み出したデータに誤りがない場合には、半導体記憶装置５０は、当該データをデータバッファ６７の指定の領域に記憶させ、ステップＳ２９に進む。また、ステップＳ２４で読み出したデータに誤りがあっても、半導体記憶装置５０は、ページＥＣＣを用いて当該データを訂正した後（ステップＳ２６）、訂正したデータをデータバッファ６７の指定の領域に記憶させ、ステップＳ２９に進む。ステップＳ２９では、半導体記憶装置５０は、データバッファ６７の指定の領域に記憶されたデータをホストに送信する。
【００５７】
尚、ステップＳ２０で受信されたｒｅａｄコマンドにより複数のデータの読み出しが要求された場合、各々指定された論理アドレスに応じて、半導体記憶装置５０は、異なった論理ブロックに関連付けられた各チャネルの物理ブロックからデータを読み出す場合も有り得る。このように、データの読み出し時には各チャネルで独立なアクセスが可能であるので、ホストからの要求に応じてデータを読み出してこれを応答性良くホストに送信することができる。
【００５８】
次に、コンパクションの対象の論理ブロックに書き込まれている有効データをフリーブロックに移動する処理の手順について図１３を用いて説明する。半導体記憶装置５０は、有効ページの数の値の最大値として「Ｍ＝４０９６」を設定し、ビットベクタテーブルにおける論理ブロック毎のエントリのインデックスとして「Ｋ＝０」を設定する（ステップＳ４０）。そして、半導体記憶装置５０は、ビットベクタテーブルを参照して、論理ブロック毎の有効ページ数カウンタの値を順番に１つ読み出し（ステップＳ４１）、当該カウンタの値がＭより小さいか否かを判断する（ステップＳ４２）。当該有効ページ数カウンタの値がＭ以上である場合（ステップＳ４２：ＮＯ）、ステップＳ４４に進む。当該有効ページ数カウンタの値がＭより小さい場合（ステップＳ４２：ＹＥＳ）、半導体記憶装置５０は、Ｍの値を当該カウンタの値に置き換え、ステップＳ４１で当該有効ページ数カウンタの値を読み出したエントリのインデックスの値をＫとして（ステップＳ４３）、ステップＳ４４に進む。
【００５９】
ステップＳ４４では、半導体記憶装置５０は、ビットベクタテーブルの全ての論理ブロックについて有効ページ数カウンタの値を読み出したか否かを判断し、全ての論理ブロックについて有効ページ数カウンタの値を読み出していない場合（ステップＳ４４：ＮＯ）、Ｋの値を１インクリメントして（ステップＳ４５）、ステップＳ４１に戻る。ステップＳ４１では、半導体記憶装置５０は、ビットベクタテーブルで、Ｋの順番であってまだ読み出していない論理ブロックの有効ページ数カウンタの値を読み出すことになる。一方、全ての論理ブロックについて有効ページ数カウンタの値を読み出した場合（ステップＳ４４：ＹＥＳ）、半導体記憶装置５０は、論物変換テーブルにおいて、Ｋの値を、コンパクションの候補の論理ブロックのインデックスとして設定する（ステップＳ４６）。上述したように、論物変換テーブルのインデックスを用いてビットベクタテーブルを参照できるように各エントリを配置しているため、ビットベクタテーブルにおけるエントリのインデックスＫを、論物変換テーブルのエントリのインデックスとして使えるのである。そして、半導体記憶装置５０は、論物変換テーブルにおいてインデックスＫで示されるエントリの論理ブロックに関連付けられたチャネルＣＨ０〜ＣＨ４の各物理ブロックについて、ビットベクタテーブルのビットベクタが「１」を示すページ（有効ページ）に記憶されているデータ（有効データ）を特定し、当該有効データをデータバッファ６７に全て読み出す。また、半導体記憶装置５０は、当該有効データに付加されている論理アドレスを抽出する（ステップＳ４７）。
【００６０】
そして、半導体記憶装置５０は、ステップＳ４７で読み出した各有効データの書き込みを、上述のｗｉｒｔｅコマンドに応じて行うデータの書き込みと同様にして行う。即ち、半導体記憶装置５０は、当該有効データを書き込むチャネルをチャネルＣＨ０〜ＣＨ４からラウンドロビンで決定し、各チャネルの半導体記憶素子５８の消去済みのブロックのうち追記ポインタで示されるページに、当該有効データを書き込む。その後、半導体記憶装置５０は、有効データを書き込んだページに続く次のページであって書き込みがまだ行われていないページを示すよう追記ポインタを更新する。この際、冗長情報はチャネルＣＨ０〜ＣＨ４からに書き込まれるデータを元に計算され、チャネルＣＨ５に書き込まれる。また、半導体記憶装置５０は、書き込んだ有効データに付加されている論理アドレスと、当該有効データを書き込んだページの物理アドレスとの対応関係を正引きテーブルに記録して更新する（ステップＳ４８）。正引きテーブルを更新する方法は上述の通りである。このように、コンパクションにおいても正引きテーブルを更新することで、データの論理アドレスと物理アドレスとの対応関係を常に正しく保持することができる。また、データに論理アドレスが付加されていることで、コンパクションの際に、当該論理アドレスと当該データが書き込まれる物理アドレスとの対応関係を容易に更新することが可能になる。
【００６１】
そして、データバッファ６７に読み出した全ての有効ページのデータについてデータバッファ６７からの読み出しが終了して（ステップＳ４９：ＹＥＳ）、半導体記憶素子５８に書き込みが終了すると、半導体記憶装置５０は、ステップＳ４６でコンパクションの候補とした論理ブロックに関連付けられたチャネルＣＨ０〜ＣＨ５の各物理ブロックに対して消去を行い、コンパクションの処理を終了する。
【００６２】
尚、コンパクションの処理を行うタイミングは、例えば、論理ブロックを構成するときにフリーブロックの数をチェックし、その数が所定数以下となったときなどであれば良い。
【００６３】
以上のように、半導体記憶素子を複数用いて、いずれかの半導体記憶素子の故障時にもデータにアクセス可能にする構成において、データの書き込みをページ単位で行い、ページのサイズより大きいデータはページ単位に分割した後、各半導体記憶素子５８への書き込みが均等になるように、分割した各データを各半導体記憶素子５８に割り当てて、各半導体記憶素子５８の各ページに書き込みを行う。また、複数の半導体記憶素子の各ページに書き込む各データに対する冗長情報を１つの半導体記憶素子のページに書き込んで、複数の半導体記憶素子の各ページにより誤り訂正符号を構成する。また、データの読み出しをページ単位で行い、データの異常が発生した場合には、当該データが書き込まれた半導体記憶素子５８のページに異常が発生したとして、他の半導体記憶素子との間で構成された誤り訂正符号を用いてデータの復元を行う。
【００６４】
このような構成によれば、複数ページ（上述の例では５ページ）のデータの書き込みに対して、当該データに対する冗長情報の書き込みを１ページに抑えることができる。一方、HDDのRAIDでは、１ページのデータの書き込みに対し、当該データに対応する冗長情報の書き込みは１ページである。これに比べて、本実施の形態においては、冗長情報の書き込みをN分の１（上述の例では５分の１）に抑えることができる。上述したように、NAND型の半導体記憶素子には書き込み回数に制限があるので、冗長情報の書き込みの回数を抑えながら、半導体記憶装置５０の信頼性を向上させることができる。
【００６５】
また、HDDのRAIDでは、データの異常が発生すると、当該データが記憶されたHDD全体が故障したとして当該HDDを切り離して、他のHDDとの間で構成された誤り訂正符号を用いてデータの復元を行うが、本実施の形態においては、データの異常が発生したとしても、半導体記憶素子全体の故障としてではなく、当該半導体記憶素子の一部であるブロックやページの故障として扱うことができる。このため、より小さい単位での誤りにも対応することができる。また、半導体記憶素子全体が故障したとしても、当該半導体記憶素子に書き込まれたデータを、他の半導体記憶素子との間で構成された誤り訂正符号を用いて復元することができる。このため、極めて高い信頼性を実現することができる。
【００６６】
即ち、以上のような構成によれば、半導体記憶素子などの故障によりデータに異常が発生したとしても、誤り訂正符号によってデータを復元可能にすることで、半導体記憶装置５０の信頼性を向上させることができると共に、書き込み回数に制限のある半導体記憶素子の書き込み回数が増大するのを抑制することができる。
【００６７】
また、本実施の形態においては、ビットベクタテーブルを有することにより、コンパクションを効率良く高速で行うことが可能になる。コンパクションを行うためには、半導体記憶装置５０は、ブロック中有効データが書き込まれている有効ページがどのページであるかを識別し、当該有効ページに対応する論理アドレスを求めて、当該有効データを移動し、当該論理アドレスと移動先のページの物理アドレスとを対応付ける更新処理が必要となる。有効ページの識別及び物理アドレスの更新は、正引きテーブルを介して行うことは可能である。しかし、正引きテーブルは、論理アドレスをインデックスとした検索に最適化されて構成されている。このため、コンパクションを行う際に正引きテ―ブルを介して有効ページの識別及び物理アドレスの更新を行うことは、検索の時間的ペナルティーが大きくかかってしまう。
【００６８】
また、コンパクションの対象となる論理ブロックは、有効ページ数が少ないものが望ましい。その理由は、コンパクションによって有効ページを移動することで、多くのフリーブロックができるからである。有効ページ数が少ない論理ブロックを選択するためには、値が「１」であるビットベクタの数が少ないエントリを選択すれば良い。値が「１」であるビットベクタの数を数えるためには、例えば、Population演算（ワード中の「１」が立っているビット数を数える）を実装すれば良いが、エントリのビット幅が大きいと（例では３２０ビット）１サイクルで計算を行うのが困難になる。そのため、本実施の形態においては、半導体記憶装置５０は、ビットベクタの値の変化に応じて、図５に示される有効ページ数カウンタの値を更新し、コンパクションの対象となる論理ブロックを検索する際には、ビットベクタテーブルの有効ページ数カウンタの値が最小であるエントリを検索することにより、該当の論理ブロックを求める。有効ページ数カウンタの値が最小であるエントリの検索は、全ての論理ブロックに関するエントリの有効ページ数カウンタの値を各々１回読み出すことにより可能である。従って、本実施の形態における半導体記憶装置５０では、ビットベクタテーブルを参照することで、有効ページ数の少ない論理ブロックを容易に検索することができ、コンパクションを効率良く高速で行うことが可能になる。
【００６９】
[変形例]
なお、本発明は前記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、前記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。また、以下に例示するような種々の変形が可能である。
【００７０】
上述した実施の形態において、半導体記憶装置５０で実行される各種プログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成しても良い。また当該各種プログラムを、インストール可能な形式又は実行可能な形式のファイルでＣＤ−ＲＯＭ、フレキシブルディスク（ＦＤ）、ＣＤ−Ｒ、ＤＶＤ（Digital Versatile Disk）等のコンピュータで読み取り可能な記録媒体に記録してコンピュータプログラムプロダクトとして提供するように構成しても良い。
【００７１】
上述した実施の形態において、プロセッサ５１の機能の一部をハードウェアによって実現させるようにしても良い。また、半導体記憶装置５０は、プロセッサ５１を複数備え、複数のプロセッサ５１により上述の機能が実現されるように構成しても良い。このような構成によれば、処理の高速化が図れる。
【００７２】
上述した実施の形態において、正引きテーブル及びビットベクタテーブルは、ＤＲＡＭ５４に記憶されるようにしたが、これに限らず、例えば、半導体記憶素子５８に記憶され、プロセッサ５１がこれらのテーブルを使用する際にＤＲＡＭ５４にキャッシュするようにしても良い。
【００７３】
上述した実施の形態において、ページECCとしてはページ単位のデータ毎にECC符号を付加しているが、ページより小さな単位（例として５１２バイトのセクター単位）でECC符号を付加することも可能である。このような構成において、ページより小さな単位でデータの誤りが訂正できなかった場合は、当該データに異常が発生したとして、複数のチャネルにより構成された誤り訂正符号を用いて、当該データを復元すれば良い。
【００７４】
上述した実施の形態において、複数のチャネルで誤り訂正符号を構成する単位を、バイトとしたが、これに限らず、バイトよりも大きいサイズや小さいサイズを単位としても良い。また、誤り訂正符号として、パリティ符号を用いたが、これに限らず、冗長情報の数を複数とし、Reed Solomon符号を用いるようにしても良い。これにより、複数の半導体記憶素子５８の故障などによって異常の発生したデータを復元することが可能になる。
【００７５】
上述した実施の形態において、データを書き込むチャネル数を４つとし、これらのデータに対する冗長情報を書き込むチャネル数を１つとして、誤り訂正符号を構成するチャネル数を５つとしたが、これに限らない。また、誤り訂正符号を構成する冗長情報を書き込むためのチャネルをチャネルＣＨ５に固定したが、これに限らず、誤り訂正符号を構成する単位毎にチャネルを変更するようにしても良い。
【００７６】
上述した実施の形態において、チャネルと半導体記憶素子５８とは１対１対応させるようにしたが、これに限らず、チャネルと半導体記憶素子５８とが１対多対応させる、即ち、１つのチャネルに対して複数の半導体記憶素子５８が割り当てられるようにしても良い。この場合、各半導体記憶素子５８にはこれらを識別するための識別番号を付与するようにする。論物変換テーブルには、チャネル毎の各ブロックについて、この識別番号及び物理アドレスを記録するようにする。例えば、各チャネルに８個の半導体記憶素子に割り当てられる場合、各半導体記憶素子を識別するのに3ビット、各半導体記憶素子に含まれる4096個のブロックを識別するのに12ビットで合計15ビットを、チャネル毎の各ブロックの識別番号及び物理アドレスとして論物変換テーブルに記録するようにする。
【００７７】
上述した実施の形態において、論物変換テーブルの実装を簡単にするため、論物変換テーブルのエントリの数及び各チャネルに属するブロックの数を等しくすることが望ましい。論物変換テーブルのエントリ数と、チャネルＣＨ０の物理ブロックの数が等しいので、論理ブロックのエントリが論物変換テーブルで記憶される位置は、チャネルＣＨ０の物理ブロックの物理ブロック番号で決定しておくようにすれば良い。物理ブロック番号とは、例えば、チャネルに含まれる各物理ブロックに対して昇順に付与されるものとする。この場合、論物変換テーブルのインデックスとなる論理ブロック番号は、チャネルＣＨ０の物理ブロック番号にすれば良い。この他、論理物理変換テーブルのエントリをフリーリストで記憶させるようにしても良い。
【００７８】
上述した実施の形態において、半導体記憶装置５０は、半導体記憶素子５８に書き込むデータに論理アドレスが付加するようにしたが、これを付加するのではなく、半導体記憶素子５８に書き込まれたデータの物理アドレスをインデックスとして当該物理アドレスと、当該データの論理アドレスとの対応関係を示す物論変換テーブル（論物変換テーブルとは異なる）を更に備えるようにしても良い。そして、コンパクションの際に、半導体記憶装置５０は、半導体記憶素子５８から読み出した有効データの物理アドレスを用いて、正引きテーブルを参照して、当該物理アドレスに対応する論理アドレスを取得し、これを用いて、コンパクションに伴う正引きテーブルの更新を行うようにすれば良い。
【００７９】
上述した実施の形態において、書き込み対象データに対してチャネルを割り当てる際、チャネルＣＨ０〜ＣＨ３のうち少なくとも１つへの割り当て後、書き込み対象データがない状態が一定時間以上継続した場合、チャネルＣＨ１〜ＣＨ４のうち書き込み対象データの割り当てのないチャネルにおいて、該当のページにダミーデータ（例えば全てのビットが「０」のデータ）を書き込んで、チャネルＣＨ１〜ＣＨ４において対応する各ページのデータを用いて計算した冗長情報を、チャネルＣＨ５の対応するページを書き込むようにする。このような構成によれば、チャネルＣＨ０〜ＣＨ４の各々対応するページのうち書き込みの既に済んでいるチャネルのデータについて、誤り訂正符号が構成されず、当該データに誤りがあった場合に復元できない恐れを回避することが可能になる。
【符号の説明】
【００８０】
５０  半導体記憶装置
５１  プロセッサ
５２  ＢｏｏｔＲＯＭ
５３  メモリコントローラ
５４  ＤＲＡＭ
５５  ＳＡＴＡ／ＳＡＳインタフェース
５６  バス
５７，５７Ａ〜５７Ｆ  ＮＡＮＤコントローラ
５８，５８Ａ〜５８Ｆ  半導体記憶素子
６０  ホストインタフェース部
６１  バッファ制御部
６２  アドレス変換部
６３  ＣＨ振り分け部
６４  コンパクション候補検出部
６５  管理テーブル更新部
６６，６６Ａ〜６６Ｆ  ＮＡＮＤ制御部
６７  データバッファ
６８  コンパクションｒｅａｄキュー
６９  管理テーブル
【図１】
2011165063.tif 000003
【図２】
2011165063.tif 000004
【図３】
2011165063.tif 000005
【図４】
2011165063.tif 000006
【図５】
2011165063.tif 000007
【図６】
2011165063.tif 000008
【図７】
2011165063.tif 000009
【図８】
2011165063.tif 000010
【図９】
2011165063.tif 000011
【図１０】
2011165063.tif 000012
【図１１】
2011165063.tif 000013
【図１２】
2011165063.tif 000014
【図１３】
2011165063.tif 000015