(57)【特許請求の範囲】
【請求項１】
メモリセルが接続されたデータ線を所定数ずつ含む領域である複数のセクタを識別する識別情報と、当該識別情報で識別される前記セクタに属する前記データ線の欠陥の有無を示す欠陥情報とを対応付けて記憶する第１記憶部と、
前記所定数よりも多い数の記憶領域が直列に接続される第２記憶部と、
ホスト装置から送られてくるデータを前記所定数ずつ前記第２記憶部へ入力する入力部と、
欠陥のある前記データ線の数に応じた値を示すシフト数を決定するシフト数決定部と、
前記セクタの前記識別情報に対応する前記欠陥情報に基づいて、先頭の前記記憶領域よりも前記シフト数だけ後の前記記憶領域から順番に、当該記憶領域に格納された前記データを、当該セクタ内の欠陥の無い前記データ線へ供給するデータとして出力する一方、前記データとは別の所定情報を、当該セクタ内の欠陥のある前記データ線へ供給するデータとして出力することで、当該セクタに供給される書き込みデータを出力する出力部と、を含み、
前記第２記憶部は、前記所定数の前記データの入力を受け付けた場合、前記記憶領域に既に記憶されている前記データを前記所定数だけ先頭側の前記記憶領域に書き込み、入力された前記所定数の前記データを、末端から数えて前記所定数分の前記記憶領域の各々に書き込む、
データ生成装置。
【請求項２】
前記第２記憶部は、前記所定数の２倍の数の前記記憶領域が直列に接続されて構成され
前記生成部は、前記データを出力済みの前記記憶領域の数が前記所定数以上になるたびに、前記所定数の前記データを前記第２記憶部へ入力するように前記入力部を制御する入力制御部をさらに含む、
請求項１のデータ生成装置。
【請求項３】
前記シフト数決定部は、前記出力部が前記書き込みデータを出力するたびに、前記データを出力済みの前記記憶領域の数に応じて、次の前記書き込みデータを生成するときの前記シフト数を決定する、
請求項２のデータ生成装置。
【請求項４】
前記シフト数決定部は、前記データを出力済みの前記記憶領域の数が前記所定数未満の場合は、前記データを出力済みの前記記憶領域の数を、次の前記書き込みデータを生成するときの前記シフト数として決定し、前記データを出力済みの前記記憶領域の数が前記所定数以上の場合は、前記データを出力済みの前記記憶領域の数から前記所定数を差し引いた値を、次の前記書き込みデータを生成するときの前記シフト数として決定する、
請求項３のデータ生成装置。
【請求項５】
前記第１記憶部は、欠陥のある前記データ線が属していない前記セクタについては、当該セクタを識別する前記識別情報と、前記欠陥情報とを対応付けて記憶しない、
請求項１のデータ生成装置。
【請求項６】
複数の記憶領域が直列に接続される第１記憶部と、
データが格納されたメモリセルが接続された複数のデータ線の各々から出力される前記データを、所定数の前記データ線を単位とするセクタごとに分割して順次に前記第１記憶部へ入力するように、前記複数のデータ線を備えるメモリセルアレイを制御する入力部と、
前記複数のデータ線のうち欠陥が無い前記データ線から出力された前記所定数の前記データを単位として順次に生成される読み出しデータを識別する識別情報と、当該読み出しデータの生成時に前記データの出力がスキップされる前記記憶領域を特定する欠陥情報と、欠陥のある前記データ線の数に応じた値を示すシフト数とを対応付けて記憶する第２記憶部と、
先頭の前記記憶領域よりも前記シフト数だけ後の前記記憶領域から順番に、欠陥のある前記データ線から出力された前記データが格納された前記記憶領域以外の前記記憶領域に格納された前記データを前記所定数分だけ出力することで、前記読み出しデータを生成する生成部と、を備え、
前記第１記憶部は、前記所定数よりも多い数の前記記憶領域を有し、前記所定数の前記データの入力を受け付けた場合、前記記憶領域に既に記憶されている前記データを前記所定数だけ先頭側の前記記憶領域に書き込み、入力された前記所定数の前記データを、末端から数えて前記所定数分の前記記憶領域の各々に書き込む、
データ生成装置。
【請求項７】
前記第１記憶部は、前記所定数の３倍の数の前記記憶領域が直列に接続されて構成され、
前記生成部は、前記読み出しデータを生成するたびに、前記シフト数と前記データの出力がスキップされた前記記憶領域の数とに応じて、次の前記読み出しデータを生成しない期間を決定する、
請求項６のデータ生成装置。
【請求項８】
前記生成部は、前記読み出しデータを生成したときに、前記シフト数と前記データの出力がスキップされた前記記憶領域の数との和が１以上かつ前記所定数未満の場合は、当該読み出しデータを生成した後、前記所定数の前記データが前記第１記憶部に入力されるまでの間、次の前記読み出しデータを生成せず、前記シフト数と前記データの出力がスキップされた前記記憶領域の数との和が前記所定数以上の場合は、当該読み出しデータを生成した後、前記所定数の２倍の数の前記データが前記第１記憶部に入力されるまでの間、次の前記読み出しデータを生成しない、
請求項７のデータ生成装置。
【請求項９】
前記第２記憶部は、前記読み出しデータのうち、前記記憶領域からの前記データの出力がスキップされることなく生成される前記読み出しデータについては、当該読み出しデータの前記識別情報と、前記欠陥情報と、前記シフト数とを対応付けて記憶しない、
請求項６のデータ生成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、データ生成装置に関する。
【背景技術】
【０００２】
従来、ロウ方向（行方向）に延びる複数のワード線と、カラム方向（列方向）に延びる複数のデータ線との各交差にメモリ素子がマトリクス状に配置されるメモリシステムが知られている。このようなメモリシステムにおいて、冗長カラムを予め用意しておき、不良のあるカラムに代えて、冗長カラムを選択する技術が知られている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】米国特許第6567323号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００４】
従来技術においては、不良カラムを置き換えながら所定数のデータを出力するための回路（例えばマルチプレクサ）が必要となるが、出力するデータの数が大きい場合には、配線が複雑になるとともに回路規模が増大するという問題がある。
【課題を解決するための手段】
【０００５】
実施形態のデータ生成装置は、第１記憶部と第２記憶部と入力部と出力部とを含む。第１記憶部は、メモリセルが接続されたデータ線を所定数ずつ含む領域である複数のセクタを識別する識別情報と、当該識別情報で識別されるセクタに属するデータ線の欠陥の有無を示す欠陥情報とを対応付けて記憶する。第２記憶部は、所定数よりも多い数の記憶領域が直列に接続される。入力部は、ホスト装置から送られてくるデータを所定数ずつ第２記憶部へ入力する。シフト数決定部は、欠陥のあるデータ線の数に応じた値を示すシフト数を決定する。出力部は、セクタの識別情報に対応する欠陥情報に基づいて、先頭の記憶領域よりもシフト数だけ後の記憶領域から順番に、当該記憶領域に格納されたデータを、当該セクタ内の欠陥の無いデータ線へ供給するデータとして出力する一方、データとは別の所定情報を、当該セクタ内の欠陥のあるデータ線へ供給するデータとして出力することで、当該セクタに供給される書き込みデータを出力する。
【０００６】
実施形態のデータ生成装置は、第１記憶部と入力部と第２記憶部と生成部とを備える。第１記憶部は、複数の記憶領域が直列に接続される。入力部は、データが格納されたメモリセルが接続された複数のデータ線の各々から出力される前記データを、所定数のデータ線を単位とするセクタごとに分割して順次に第１記憶部へ入力するように、複数のデータ線を備えるメモリセルアレイを制御する。第２記憶部は、複数のデータ線のうち欠陥が無いデータ線から出力された所定数のデータを単位として順次に生成される読み出しデータを識別する識別情報と、当該読み出しデータの生成時にデータの出力がスキップされる記憶領域を特定する欠陥情報と、欠陥のあるデータ線の数に応じた値を示すシフト数とを対応付けて記憶する。生成部は、先頭の記憶領域よりもシフト数だけ後の記憶領域から順番に、欠陥のあるデータ線から出力されたデータが格納された記憶領域以外の記憶領域に格納されたデータを所定数分だけ出力することで、読み出しデータを生成する。
【図面の簡単な説明】
【０００７】
【図１】実施形態のメモリシステムのブロック図。
【図２】実施形態のコントローラのブロック図。
【図３】実施形態のコントローラの一部の詳細な機能を説明するための図。
【図４】実施形態の生成部の機能を具体的に説明するための図。
【図５】実施形態の生成部の機能を具体的に説明するための図。
【図６】実施形態の生成部の具体的な構成例を示す図。
【図７】実施形態の生成部の具体的な構成例を示す図。
【図８】実施形態の生成部の動作例を説明するための図。
【図９】実施形態の生成部の動作例を説明するための図。
【図１０】実施形態のコントローラのブロック図。
【図１１】実施形態のコントローラの一部の詳細な機能を説明するための図。
【図１２】実施形態の生成部の機能を具体的に説明するための図。
【図１３】実施形態の生成部の機能を具体的に説明するための図。
【図１４】実施形態の生成部の具体的な構成例を示す図。
【図１５】実施形態の生成部の具体的な構成例を示す図。
【図１６】実施形態の第１回路部の構成例を示す図。
【図１７】実施形態の第１回路部の構成例を示す図。
【図１８】実施形態の第２回路部の構成例を示す図。
【図１９】実施形態の生成部の動作例を説明するための図。
【図２０】実施形態の生成部の動作例を説明するための図。
【図２１】実施形態の生成部の動作例を説明するための図。
【図２２】実施形態の不良カラム記憶部のデータ構成例を示す図。
【図２３】実施形態のページの途中から読み出しデータを生成するときの概念図。
【発明を実施するための形態】
【０００８】
図１は、本実施形態のメモリシステム１００の概略構成例を示すブロック図である。図１に示すように、メモリシステム１００は、コントローラ１０と、メモリセルアレイ２０とを含んで構成される。メモリセルアレイ２０は、マトリクス状に配列された複数のメモリセルＭＳを有する。各メモリセルＭＳは、行方向に延びる複数のワード線２１と列方向に延びる複数のデータ線２２との各交差に配置される。図１の例では、メモリセルアレイ２０は、所定本数（例えば６４本）のデータ線２２ごとに、複数の領域に分割され、その分割された一つの領域をプレーンと呼ぶ。各プレーンは、互いに独立した周辺回路（例えばバッファ２３、不図示のロウデコーダ、不図示のカラムデコーダ等）を備えている。各プレーンに属するデータ線２２は、冗長部分を含む。
【０００９】
図１の例では、各プレーンは、行方向に複数の領域に分割され、その分割された一つの領域をブロックと呼ぶ。各ブロックは、複数のページと呼ばれる領域で構成される。図１の例では、各ページは、１本のワード線２１を含む領域である。見方を変えれば、各ページは、１本のワード線２１に接続された６４個のメモリセルを含んで構成されると捉えることもできる。また、図１の例では、各プレーンは、列方向に複数の領域に分割され、その分割された一つの領域をセクタと呼ぶ。各セクタは、所定本数のデータ線２２を含む領域である。図１の例では、各セクタは、８本のデータ線２２を含む領域であるので、ひとつのプレーンは、８つのセクタに分割されていると捉えることができる。なお、これに限らず、各セクタに含まれるデータ線２２の本数は任意である。また、図１の例では、各ページ（または各ブロック）も、列方向において、セクタによって８つに分割されていると捉えることができる。
【００１０】
メモリセルＭＳに対するデータの書き込みはページ単位で行われる。例えば所定のページに対するデータの書き込みが行われる場合、コントローラ１０は、シリアル形式の書き込みデータをセクタごとに順番に生成してバッファ２３へ送る。図１の例では、バイト単位（８ビット単位）の書き込みデータが順番に生成されてバッファ２３へ送られる。１ページ分の書き込みデータがバッファ２３に送られた後、書き込みが行われるページに対応するワード線２１が選択され、バッファ２３と各データ線２２との間に介在する複数の選択トランジスタＳＷが一斉にオン状態にされることにより、選択されたワード線２１に接続された複数（６４個）のメモリセルＭＳの各々に対してデータが書き込まれる。
【００１１】
また、メモリセルＭＳからのデータの読み出しもページ単位で行われる。例えば所定のページからデータが読み出される場合、そのページ（読み出し対象のページ）に対応するワード線２１が選択され、複数の選択トランジスタＳＷが一斉に選択されることにより、選択されたワード線２１に接続された複数のメモリセルＭＳの各々に格納されたデータが、データ線２２を介して一斉にバッファ２３へ送り込まれる。バッファ２３へ送り込まれたデータは、バイト単位に分割されて順次にコントローラ１０へ送られる。
【００１２】
（書き込みデータの生成）
次に、書き込みデータを生成するコントローラ１０の機能について説明する。コントローラ１０は、書き込みデータを生成するデータ生成装置であると捉えることもできる。図２は、コントローラ１０の概略構成例を示すブロック図である。図２の例では、書き込みデータの生成に必要な部分を中心に記載しており、例えば後述の読み出しデータの生成に必要な部分等については記載を省略している。図２に示すように、コントローラ１０は、全体制御部３０と、入出力部３２と、ライトバッファメモリ３４と、出力ＦＩＦＯ部３６と、不良カラム情報作成部４０と、不良カラム記憶部５０と、書き込みデータ生成部６０と、コマンド生成部７０とを含む。
【００１３】
全体制御部３０は、コントローラ１０全体を制御する。入出力部３２は、不図示のホスト装置から送られてくるデータを、ページ単位でライトバッファメモリ３４へ送る。ライトバッファメモリ３４に書き込まれたデータは、全体制御部３０の制御の下、バイト単位で出力ＦＩＦＯ部３６へ供給される。本実施形態の出力ＦＩＦＯ部３６は、図２に示すように、８ビットの第１レジスタ３７と、８ビットの第２レジスタ３８とが直列に接続されて構成される。第１レジスタ３７および第２レジスタ３８の各々は、１ビットのデータを格納可能な記憶領域を８個ずつ有する。本実施形態では、出力ＦＩＦＯ部３６には、８ビット単位でデータが入力される。出力ＦＩＦＯ部３６は、８ビットのデータの入力を受け付けた場合、第１レジスタ３７に既に格納されていた８ビットのデータを第２レジスタ３８に書き込み、入力された８ビットのデータを第１レジスタ３７に書き込む。すなわち、出力ＦＩＦＯ部３６に格納されたデータは、８ビットのデータが入力されるたびに、８ビット単位でシフトする。また、見方を変えれば、出力ＦＩＦＯ部３６は、１６個の記憶領域が直列に接続されていると捉えることもできる。以下の説明では、一例として、第２レジスタ３８が格納可能な８ビットのデータのうち最上位の桁のビットに対応する記憶領域を「先頭の記憶領域」と呼び、第１レジスタ３７が格納可能な８ビットのデータのうち最下位の桁のビットに対応する記憶領域を「末端の記憶領域」と呼ぶ。出力ＦＩＦＯ部３６は、８ビットのデータの入力を受け付けた場合、記憶領域に既に記憶されているデータを８個だけ先頭側の記憶領域に書き込み、入力された８ビットデータを、末端から数えて８個分の記憶領域の各々に書き込むと捉えることもできる。
【００１４】
不良カラム情報作成部４０は、工場出荷前の段階において、各データ線２２の欠陥の有無を検出して不良カラム情報を作成し、その作成した不良カラム情報を不良カラム記憶部５０に書き込む。不良カラム情報の作成方法は任意であり、例えば各データ線２２に流れる電流値から当該データ線２２が不良であるか否かを判断し、その判断結果を用いて不良カラム情報を作成することもできる。
【００１５】
書き込みデータ生成部６０は、出力ＦＩＦＯ部３６に格納された１６個のデータと、不良カラム記憶部５０に記憶された不良カラム情報とを用いて、バイト単位（８ビット単位）の書き込みデータを順次に生成して不図示のバッファ２３へ出力する。詳細な内容については後述する。コマンド生成部７０は、全体制御部３０の制御の下、書き込みコマンドを生成してメモリセルアレイ２０へ出力する。
【００１６】
図３は、不良カラム記憶部５０および書き込みデータ生成部６０の詳細な構成例を示す図である。不良カラム記憶部５０は、プレーンごとに、セクタを識別するバイト位置（識別情報）と、当該バイト位置で識別されるセクタに属するデータ線２２の欠陥の有無を示す不良ビットベクタとを対応付けて記憶する。例えば各プレーン（ページ）において、左から数えて第ｘ番目（１≦ｘ≦８）のセクタを、バイト位置「ｘ」と表すことができる。この場合、左から数えて第１番目のセクタはバイト位置「１」で表され、第２番目のセクタはバイト位置「２」で表される。また、例えば不良ビットベクタが「１０００００００」で表される場合、このセクタに属する８本のデータ線２２のうち左から数えて第１番目のデータ線２２に欠陥があり、第２番目〜第８番目のデータ線２２には欠陥が無いことを示す。なお、不良カラム記憶部５０は、全てのセクタの各々と、当該セクタの不良ビットベクタとを対応付けて記憶することができる。また、不良カラム記憶部５０は、欠陥のあるデータ線２２が属さないセクタについては、当該セクタを識別するバイト位置と不良ビットベクタとを対応付けて記憶しないこともできる。この場合、不良カラム記憶部５０のデータ領域を圧縮できるという利点がある。
【００１７】
書き込みデータ生成部６０は、カレントテーブルポインタ６１と、生成部６２と、バイトポジションカウンタ６３と、ポインタコントローラ６４とを備える。不良カラム記憶部５０のデータ領域は、プレーンごとの領域（プレーン領域と呼ぶ）に区分され、各プレーン領域は、所定数のエントリを含んで構成される。また、各プレーン領域は、当該プレーン領域を特定可能なプレーン情報で識別される。各プレーン領域におけるエントリ位置は、カレントテーブルポインタ６１で指定される。つまり、プレーン情報とカレントテーブルポインタ６１は、不良カラム記憶部５０の特定のエントリを指定するアドレス情報として機能する。書き込みデータが生成されるとき、当該書き込みデータが供給されるセクタを示すバイト位置と、不良ビットベクタとが格納されたエントリを指定するアドレス情報が生成される。そして、そのアドレス情報で指定されたエントリに格納された不良ビットベクタは生成部６２へ供給され、当該エントリに格納されたバイト位置はポインタコントローラ６４へ供給される。
【００１８】
生成部６２は、出力部６５とシフト数決定部６６と入力制御部６７とを有する。シフト数決定部６６は、欠陥のあるデータ線２２の数に応じた値を示すシフト数を決定する。出力部６５は、各セクタに供給される書き込みデータを生成するとき、当該セクタのバイト位置（識別情報）に対応する不良ビットベクタに基づいて、出力ＦＩＦＯ部３６を構成する１６個の記憶領域の先頭の記憶領域から数えて、今回のシフト数だけ後の記憶領域から順番に、当該記憶領域に格納されたデータを、当該セクタ内の欠陥の無いデータ線２２に供給されるデータとして出力する一方、不良ビットを示す「１」（記憶領域に格納されたデータとは別の所定情報）を、当該セクタ内の欠陥のあるデータ線２２に供給されるデータとして出力することで、当該セクタに供給される書き込みデータを出力する。入力制御部６７は、データを出力済みの記憶領域の数が所定数（ここでは８個）以上になるたびに、バイト単位のデータを出力ＦＩＦＯ部３６へ入力するように入出力部３２を制御する。本実施形態では、入力制御部６７は、データを出力済みの記憶領域の数が８個以上になるたびに、「１」に設定されたインクリメントイネーブルをバイトポジションカウンタ６３へ出力する一方、データを出力済みの記憶領域の数が８個未満の場合は、「０」に設定されたインクリメントイネーブルをバイトポジションカウンタ６３へ出力する。
【００１９】
バイトポジションカウンタ６３は、「１」に設定されたインクリメントイネーブルを生成部６２から供給されるたびに、カウント値を１だけインクリメントする。カウント値が１インクリメントされるたびに、１バイト分のデータがライトバッファメモリ３４から出力ＦＩＦＯ部３６へ供給される。
【００２０】
ポインタコントローラ６４は、不良カラム記憶部５０から読み出されたバイト位置とバイトポジションカウンタ６３のカウント値とが一致した場合は、カレントテーブルポインタ６１のポインタ位置はそのままでマッチフラグをセットする。また、ポインタコントローラ６４は、不良カラム記憶部５０から読み出されたバイト位置がバイトポジションカウンタ６３のカウント値よりも小さい場合は、カレントテーブルポインタ６１のポインタ位置はそのままでマッチフラグをリセットする。また、ポインタコントローラ６４は、不良カラム記憶部５０から読み出されたバイト位置がバイトポジションカウンタ６３のカウント値よりも大きい場合は、カレントテーブルポインタ６１のポインタ位置を１だけインクリメント（次のエントリを指定）してマッチフラグをリセットする。
【００２１】
次に、生成部６２の機能を具体的に説明する。図４は、生成部６２の機能を具体的に説明するための概念図である。出力ＦＩＦＯ部３６は、各８ビットの第１レジスタ３７および第２レジスタ３８が２段に接続される。ここでは、一例として、第２レジスタ３８が格納可能な８ビットのデータのうち最上位の桁のビットに対応する記憶領域は「ｂ０」であり、「ｂ０」を先頭の記憶領域と呼ぶ。また、ここでは、第１レジスタ３７が格納可能な８ビットのデータのうち最下位の桁のビットに対応する記憶領域は「ａ７」であり、「ａ７」を末端の記憶領域と呼ぶ。ここでは、これから生成する書き込みデータが供給されるセクタに対応する不良ビットベクタが「００１０１０００」、今回のシフト数が「３」である場合を想定する。書き込みデータを構成する８ビットのデータ（ｃ０〜ｃ７）は、当該書き込みデータが供給されるセクタに属する８本のデータ線２２の各々に対応する。例えば書き込みデータの第１番目のビットデータｃ０は第１番目のデータ線２２に対応するデータ（第１番目のデータ線２２に供給するデータ）である。第２番目のビットデータｃ１は第２番目のデータ線２２に対応するデータである。第３番目のビットデータｃ２は第３番目のデータ線２２に対応するデータである。第４番目のビットデータｃ３は第４番目のデータ線２２に対応するデータである。第５番目のビットデータｃ４は第５番目のデータ線２２に対応するデータである。第６番目のビットデータｃ５は第６番目のデータ線２２に対応するデータである。第７番目のビットデータｃ６は第７番目のデータ線２２に対応するデータである。第８番目のビットデータｃ７は第８番目のデータ線２２に対応するデータである。
【００２２】
前述したように、各セクタに供給される書き込みデータが生成されるとき、先頭の記憶領域（「ｂ０」）よりも今回のシフト数だけ後の記憶領域から順番に、当該記憶領域に格納されたデータが、当該セクタ内の欠陥の無いデータ線２２に供給されるデータとして出力される一方、不良ビットを示す「１」のデータが、当該セクタ内の欠陥のあるデータ線２２に供給するデータとして出力される。不良ビットベクタが「００１０１０００」の場合、ｃ０に対応する第１番目のデータ線２２には欠陥がない。そして、今回のシフト数は「３」であるので、先頭の記憶領域ｂ０よりも３だけ後の記憶領域ｂ３に格納された「３」のデータが第１番目のデータ線２２に対応するデータｃ０として出力される。ｃ１に対応する第２番目のデータ線２２にも欠陥がないので、先頭の記憶領域ｂ０よりも４だけ後の記憶領域ｂ４に格納された「４」のデータが第２番目のデータ線２２に対応するデータｃ１として出力される。ｃ２に対応する第３番目のデータ線２２には欠陥があるので、不良ビットを示す「１」のデータが、第３番目のデータ線２２に対応するデータｃ２として出力される。ｃ３に対応する第４番目のデータ線２２には欠陥がないので、先頭の記憶領域ｂ０よりも５だけ後の記憶領域ｂ５に格納された「５」のデータが第４番目のデータ線２２に対応するデータｃ３として出力される。
【００２３】
ｃ４に対応する第５番目のデータ線２２には欠陥があるので、不良ビットを示す「１」のデータが、第５番目のデータ線２２に対応するデータｃ４として出力される。ｃ５に対応する第６番目のデータ線２２には欠陥がないので、先頭の記憶領域ｂ０よりも６だけ後の記憶領域ｂ６に格納された「６」のデータが第６番目のデータ線２２に対応するデータｃ５として出力される。ｃ６に対応する第７番目のデータ線２２には欠陥がないので、先頭の記憶領域ｂ０よりも７だけ後の記憶領域ｂ７に格納された「７」のデータが第７番目のデータ線２２に対応するデータｃ６として出力される。ｃ７に対応する第８番目のデータ線２２には欠陥がないので、先頭の記憶領域ｂ０よりも８だけ後の記憶領域ａ０に格納された「８」のデータが第８番目のデータ線２２に対応するデータｃ７として出力される。以上のようにして、書き込みデータが生成されてバッファ２３へ出力される。
【００２４】
図４の例では、記憶領域ｂ３から記憶領域ａ０までの各記憶領域に格納されていたデータ（「３」〜「８」）は出力されるので、記憶領域ｂ３から記憶領域ａ０までの各記憶領域は、データを出力済みの記憶領域（データが格納されていない状態の記憶領域）となる。なお、先頭の記憶領域ｂ０から記憶領域ｂ２までの各記憶領域に格納されていたデータは、前回の書きこみデータの生成時に出力されているので、先頭の記憶領域ｂ０から記憶領域ｂ２までの各記憶領域もデータを出力済みの記憶領域となる。したがって、先頭の記憶領域ｂ０から第９番目の記憶領域ａ０までの各記憶領域がデータを出力済みの記憶領域となり、データを出力済みの記憶領域の数は「９」となる。データを出力済みの記憶領域の数が「８」以上なので、次の書き込みデータの生成時に１バイト分のデータを出力ＦＩＦＯ部３６に入力しても、全ての入力データを出力ＦＩＦＯ部３６に格納することができる。したがって、インクリメントイネーブルは「１」に設定され、次の書き込みデータの生成時には１バイト分のデータが出力ＦＩＦＯ部３６に入力される。
【００２５】
また、次の書き込みデータの生成時に１バイト分のデータが出力ＦＩＦＯ部３６に入力されると、記憶領域ａ１〜ａ７に格納されていたデータは、それぞれ８つ分だけ先頭側の記憶領域に移動するので、次の書き込みデータ生成時には、先頭の記憶領域ｂ０よりも1だけ後の記憶領域ｂ１から順番にデータが出力されることになる。つまり、次回のシフト数は「１」に設定される。本実施形態では、シフト数決定部６６は、出力部６５が書き込みデータを出力するたびに、データを出力済みの記憶領域の数に応じて、次の書き込みデータを生成するときのシフト数を決定する。より具体的には、シフト数決定部６６は、データを出力済みの記憶領域の数が８以上の場合は、データを出力済みの記憶領域の数から１バイト分のビット数である「８」を差し引いた値を、次回のシフト数として決定する。一方、データを出力済みの記憶領域の数が８未満の場合は、そのデータを出力済みの記憶領域の数を、次回のシフト数として決定する。上記のように、データを出力済みの記憶領域の数が「９」の場合は、次回のシフト数は「１」に設定される。
【００２６】
次に、図５を参照しながら、これから生成する書き込みデータが供給されるセクタに対応する不良ビットベクタが「１１１１１１１１」、今回のシフト数が「０」である場合について説明する。この場合、ｃ０に対応する第１番目のデータ線２２には欠陥がある。そして、今回のシフト数は「０」であるので、不良ビットを示すデータ「１」が第１番目のデータ線２２に対応するデータｃ０として出力される。ｃ１に対応する第２番目のデータ線２２にも欠陥があるので、不良ビットを示すデータ「１」が第２番目のデータ線２２に対応するデータｃ１として出力される。ｃ２に対応する第３番目のデータ線２２にも欠陥があるので、不良ビットを示すデータ「１」が第３番目のデータ線２２に対応するデータｃ２として出力される。ｃ３に対応する第４番目のデータ線２２にも欠陥があるので、不良ビットを示すデータ「１」が第４番目のデータ線２２に対応するデータｃ３として出力される。ｃ４に対応する第５番目のデータ線２２にも欠陥があるので、不良ビットを示すデータ「１」が第５番目のデータ線２２に対応するデータｃ４として出力される。ｃ５に対応する第６番目のデータ線２２にも欠陥があるので、不良ビットを示すデータ「１」が第６番目のデータ線２２に対応するデータｃ５として出力される。ｃ６に対応する第７番目のデータ線２２にも欠陥があるので、不良ビットを示すデータ「１」が第７番目のデータ線２２に対応するデータｃ６として出力される。ｃ７に対応する第８番目のデータ線２２にも欠陥があるので、不良ビットを示すデータ「１」が第８番目のデータ線２２に対応するデータｃ７として出力される。以上のようにして、書き込みデータが生成される。
【００２７】
図５の例では、記憶領域ｂ０から記憶領域ａ７までの各記憶領域に格納されていたデータはひとつも出力されないので、データを出力済みの記憶領域の数は「０」となる。データを出力済みの記憶領域の数が「８」未満なので、次の書き込みデータの生成時に１バイト分のデータを出力ＦＩＦＯ部３６に入力することはできない。したがって、インクリメントイネーブルは「０」に設定される。これにより、次の書き込みデータの生成時には、出力ＦＩＦＯ部３６に対する１バイト分のデータの入力は行われない。また、前述したように、データを出力済みの記憶領域の数が８未満の場合（この場合は「０」）は、データを出力済みの記憶領域の数が、次回のシフト数として決定される。この場合は、データを出力済みの記憶領域の数は「０」であるので、次回のシフト数は「０」に決定される。
【００２８】
図６および図７は、生成部６２の具体的な構成例を示す図である。図６に示すように、生成部６２は、図７に示す回路Ｇを複数組み合わせることで構成される。生成部６２には、出力ＦＩＦＯ部３６を構成する記憶領域の各々に格納されたデータ、今回のシフト数を示す信号shift＿now、および、不良ビットベクタを示す信号ｄ０〜ｄ７が入力され、書き込みデータｃ０〜ｃ７、次のシフト数を示す信号shift＿next、および、インクリメントイネーブルが生成（出力）される。例えば今回のシフト数が「ｘ」（０≦ｘ≦７）の場合、信号shift＿nowxがアクティブレベル（ここでは一例としてハイレベル）に設定される。また、ｃｘに対応する第ｘ番目のデータ線２２に欠陥がある場合、信号ｄｘはアクティブレベル（ここでは一例としてハイレベル）に設定される。さらに、次のシフト数が「ｘ」の場合、生成された信号shift＿nextxはアクティブレベル（ここでは一例としてハイレベル）に設定される。
【００２９】
図６の左上端に配置された回路Ｇに着目して、回路Ｇの構成例を説明する。なお、他の回路Ｇの構成も同様である。図７に示すように、回路Ｇは、ＡＮＤ回路１０１と、ＡＮＤ回路１０２と、ＡＮＤ回路１０３と、ＯＲ回路１１１と、ＯＲ回路１１２とを含んで構成される。ＡＮＤ回路１０１には、信号ｄ０および信号shift＿now0（図７のs＿wに相当）が入力される。また、ＡＮＤ回路１０２には、信号shift＿now0（図７のs＿wに相当）および信号ｄ０を反転した信号が入力される。ＡＮＤ回路１０２の出力は、下の段の回路ＧにおけるＯＲ回路１１１に入力（図７のs＿sに相当）されるとともに、ＡＮＤ回路１０３に入力される。また、ＡＮＤ回路１０１の出力は、ＯＲ回路１１１に入力されるとともに、ＯＲ回路１１２に入力される。ＯＲ回路１１１の出力（図７のs＿eに相当）は、右隣の段の回路ＧにおけるＡＮＤ回路１０１およびＡＮＤ回路１０２に入力される（図７のs＿wに相当）。ＡＮＤ回路１０３には、記憶領域ｂ０に格納されたデータが入力され、ＡＮＤ回路１０３の出力は、ＯＲ回路１１２に入力される。ＯＲ回路１１２の出力（図７のcy＿sに相当）は、下の段の回路ＧにおけるＯＲ回路１１２に入力（図７のcy＿nに相当）される。
【００３０】
いま、図８を参照しながら、図４に示す書き込みデータを生成するときの生成部６２の動作例を説明する。この場合、今回のシフト数は「３」なので、信号shift＿now3がハイレベルに設定される。また、不良ビットベクタは「００１０１０００」なので、ｃ０に対応する第１番目のデータ線２２には欠陥が無い。したがって、信号ｄ０は非アクティブレベルを示す「０」に設定される。信号shift＿now3および記憶領域ｂ３に格納されたデータが入力される回路Ｇ１に着目すると、信号ｄ０はローレベルに設定されるので、ＡＮＤ回路１０２の出力がハイレベルに遷移する。ハイレベルに遷移したＡＮＤ回路１０２の出力は、ＡＮＤ回路１０３に入力される。記憶領域ｂ３に格納されたデータが「１」の場合、ＡＮＤ回路１０３の出力はハイレベルに遷移するので、ＯＲ回路１１２の出力（図７のcy＿sに相当）もハイレベルに遷移して下の段の回路Ｇ２のＯＲ回路１１２に入力（図７のcy＿nに相当）される。ＯＲ回路１１２の出力がハイレベルに遷移した場合、その出力は、下の段に配置された全ての回路Ｇを通過する。回路Ｇ１および回路Ｇ２が属する列（第１列目）の最下段の回路ＧにおけるＯＲ回路１１２の出力は、第１番目のデータ線２２に対応するデータｃ０となるので、この場合は、記憶領域ｂ３に格納されたデータが、第１番目のデータ線２２に対応するデータｃ０として出力される。
【００３１】
また、回路Ｇ１においてハイレベルに遷移したＡＮＤ回路１０２の出力（図７のs＿sに相当）は下の段の回路Ｇ２のＯＲ回路１１１に入力（図７のs＿nに相当）される。これにより、下の段の回路Ｇ２のＯＲ回路１１１の出力もハイレベルに遷移し、その出力は、右隣の回路Ｇ３のＡＮＤ回路１０１およびＡＮＤ回路１０２に入力される。ここで、ｃ１に対応する第２番目のデータ線２２には欠陥が無いので、信号ｄ１は「０」に設定される。したがって、回路Ｇ３におけるＡＮＤ回路１０２の出力はハイレベルに遷移し、その出力は、ＡＮＤ回路１０３に入力される。記憶領域ｂ４に格納されたデータが「１」の場合、ＡＮＤ回路１０３の出力はハイレベルに遷移するので、ＯＲ回路１１２の出力もハイレベルに遷移して下の段の回路Ｇ４のＯＲ回路１１２に入力される。回路Ｇ３および回路Ｇ４が属する列（第２列目）の最下段の回路ＧにおけるＯＲ回路１１２の出力は、第２番目のデータ線２２に対応するデータｃ１となるので、この場合は、記憶領域ｂ４に格納されたデータが、第２番目のデータ線２２に対応するデータｃ１として出力される。
【００３２】
また、回路Ｇ３においてハイレベルに遷移したＡＮＤ回路１０２の出力は下の段の回路Ｇ４のＯＲ回路１１１に入力（図７のs＿nに相当）される。これにより、下の段の回路Ｇ４のＯＲ回路１１１の出力もハイレベルに遷移し、その出力（図７のs＿eに相当）は、右隣の回路Ｇ５のＡＮＤ回路１０１およびＡＮＤ回路１０２に入力（図７のs＿wに相当）される。ここで、ｃ２に対応する第３番目のデータ線２２には欠陥があるので、信号ｄ２は「１」に設定される。したがって、回路Ｇ５におけるＡＮＤ回路１０１の出力はハイレベルに遷移するので、ＯＲ回路１１２の出力もハイレベルに遷移して下の段の回路Ｇ６のＯＲ回路１１２に入力される。回路Ｇ５および回路Ｇ６が属する列の最下段の回路ＧにおけるＯＲ回路１１２の出力は、第３番目のデータ線２２に対応するデータｃ２となるので、この場合は、不良ビットを示すデータ「１」が、第３番目のデータ線２２に対応するデータｃ２として出力される。
【００３３】
また、回路Ｇ５におけるＡＮＤ回路１０１の出力がハイレベルに遷移することにより、ＯＲ回路１１１の出力もハイレベルに遷移し、そのハイレベルの信号が、右隣の回路Ｇ７のＡＮＤ回路１０１およびＡＮＤ回路１０２に入力される。ここで、ｃ３に対応する第４番目のデータ線２２には欠陥が無いので、信号ｄ３は「０」に設定される。したがって、回路Ｇ７におけるＡＮＤ回路１０２の出力はハイレベルに遷移し、その出力は、ＡＮＤ回路１０３に入力される。記憶領域ｂ５に格納されたデータが「１」の場合、ＡＮＤ回路１０３の出力はハイレベルに遷移するので、ＯＲ回路１１２の出力もハイレベルに遷移して下の段の回路Ｇ８のＯＲ回路１１２に入力される。回路Ｇ７および回路Ｇ８が属する列の最下段の回路ＧにおけるＯＲ回路１１２の出力は、第４番目のデータ線２２に対応するデータｃ３となるので、この場合は、記憶領域ｂ５に格納されたデータが、第４番目のデータ線２２に対応するデータｃ３として出力される。
【００３４】
同様にして、不良ビットを示すデータ「１」が第５番目のデータ線２２に対応するデータｃ４として出力され、記憶領域ｂ６に格納されたデータが第６番目のデータ線２２に対応するデータｃ５として出力され、記憶領域ｂ７に格納されたデータが第７番目のデータ線２２に対応するデータｃ６として出力され、記憶領域ａ０に格納されたデータが第８番目のデータ線２２に対応するデータｃ７として出力される。以上のようにして、書き込みデータが生成されてバッファ２３へ出力される。そして、図８の例では、信号shift＿next1が「１」に設定（ハイレベルに設定）され、インクリメントイネーブルが「１」に設定される。
【００３５】
次に、図９を参照しながら、図５に示す書き込みデータを生成するときの生成部６２の動作例を説明する。この場合、今回のシフト数は「０」なので、信号shift＿now0がハイレベルに設定される。また、不良ビットベクタは「１１１１１１１１」なので、ｃ０に対応する第１番目のデータ線２２には欠陥がある。したがって、信号ｄ０はハイレベルに設定される。信号shift＿now0および記憶領域ｂ０に格納されたデータが入力される回路Ｇ１０に着目すると、信号ｄ０はハイレベルに設定されるので、ＡＮＤ回路１０１の出力がハイレベルに遷移する。したがって、ＯＲ回路１１２の出力もハイレベルに遷移して下の段の回路Ｇ１１のＯＲ回路１１２に入力される。ＯＲ回路１１２の出力がハイレベルに遷移した場合、その出力は、下の段に配置された全ての回路Ｇを通過する。回路Ｇ１０および回路Ｇ１１が属する列の最下段の回路ＧにおけるＯＲ回路１１２からの出力は、第１番目のデータ線２２に対応するデータｃ０となるので、この場合は、不良ビットを示すデータ「１」が、第１番目のデータ線２２に対応するデータｃ０として出力される。
【００３６】
また、回路Ｇ１０におけるＡＮＤ回路１０１の出力がハイレベルに遷移することにより、ＯＲ回路１１１の出力もハイレベルに遷移し、そのハイレベル信号が、右隣の回路Ｇ１２のＡＮＤ回路１０１およびＡＮＤ回路１０２に入力される。ここで、ｃ１に対応する第２番目のデータ線２２には欠陥があるので、信号ｄ１は「１」に設定される。したがって、ＡＮＤ回路１０１の出力がハイレベルに遷移し、ＯＲ回路１１２の出力もハイレベルに遷移して、そのハイレベル信号が、下の段の回路Ｇ１３のＯＲ回路１１２に入力される。回路Ｇ１２および回路Ｇ１３が属する列の最下段の回路ＧにおけるＯＲ回路１１２からの出力は、第２番目のデータ線２２に対応するデータｃ１となるので、この場合は、不良ビットを示すデータ「１」が、第２番目のデータ線２２に対応するデータｃ１として出力される。また、回路Ｇ１２におけるＡＮＤ回路１０１の出力がハイレベルに遷移することにより、ＯＲ回路１１１の出力もハイレベルに遷移し、そのハイレベル信号が、右隣の回路Ｇ１４のＡＮＤ回路１０１およびＡＮＤ回路１０２に入力される。
【００３７】
同様にして、不良ビットを示すデータ「１」が、第３番目〜第８番目のデータ線２２の各々に対応するデータ（ｃ２〜ｃ７）として出力される。以上のようにして、不良ビットベクタ「１１１１１１１１」に対応するセクタに供給される書き込みデータが生成される。そして、図９の例では、信号shift＿next0が「１」に設定（ハイレベルに設定）され、インクリメントイネーブルが「０」に設定（ローレベルに設定）される。
【００３８】
（読み出しデータの生成）
次に、読み出しデータを生成するコントローラ１０の機能について説明する。コントローラ１０は、読み出しデータを生成するデータ生成装置であると捉えることもできる。図１０は、コントローラ１０の概略構成例を示すブロック図である。図１０の例では、読み出しデータの生成に必要な部分を中心に記載しており、例えば書き込みデータの生成に必要な部分等については記載を省略している。図１０に示すように、コントローラ１０は、全体制御部３０と、入出力部３２と、リードバッファメモリ１３４と、入力ＦＩＦＯ部１３６と、不良カラム情報作成部１４０と、不良カラム記憶部１５０と、読み出しデータ生成部１６０と、コマンド生成部１７０とを含む。
【００３９】
全体制御部３０は、コントローラ１０全体を制御する。入力ＦＩＦＯ部１３６には、メモリセルアレイ２０（バッファ２３）からバイト単位のデータが順次に入力される。本実施形態の入力ＦＩＦＯ部１３６は、図１０に示すように、８ビットの第３レジスタ１３７と、８ビットの第４レジスタ１３８と、８ビットの第５レジスタ１３９とが直列に接続されて構成される。第３レジスタ１３７、第４レジスタ１３８および第５レジスタ１３９の各々は、１ビットのデータを格納可能な記憶領域を８個ずつ有する。本実施形態では、入力ＦＩＦＯ部１３６には、８ビット単位でデータが入力される。入力ＦＩＦＯ部１３６は、８ビットのデータの入力を受け付けた場合、第４レジスタ１３８に既に格納されていた８ビットのデータを第５レジスタ１３９に書き込み、第３レジスタ１３７に既に格納されていた８ビットのデータを第４レジスタ１３８に書き込み、入力された８ビットのデータを第３レジスタ１３７に書き込む。すなわち、入力ＦＩＦＯ部１３６に格納されたデータは、８ビットのデータが入力されるたびに、８ビット単位でシフトする。また、見方を変えれば、入力ＦＩＦＯ部１３６は、２４個の記憶領域が直列に接続されていると捉えることもできる。以下の説明では、一例として、第５レジスタ１３９が格納可能な８ビットのデータのうち最上位の桁のビットに対応する記憶領域を「先頭の記憶領域」と呼び、第３レジスタ１３７が格納可能な８ビットのデータのうち最下位の桁のビットに対応する記憶領域を「末端の記憶領域」と呼ぶ。入力ＦＩＦＯ部１３６は、８ビットのデータの入力を受け付けた場合、記憶領域に既に記憶されているデータを８個だけ先頭側の記憶領域に書き込み、入力された８ビットデータを、末端から数えて８個分の記憶領域の各々に書き込むと捉えることもできる。
【００４０】
不良カラム情報作成部１４０は、工場出荷前の段階において、各データ線２２の欠陥の有無を検出して不良カラム情報（欠陥情報）を作成し、その作成した不良カラム情報を不良カラム記憶部１５０に書き込む。不良カラム情報の作成方法は任意であり、例えば各データ線２２に流れる電流値から当該データ線２２が不良であるか否かを判断し、その判断結果を用いて不良カラム情報を作成することもできる。
【００４１】
読み出しデータ生成部１６０は、入力ＦＩＦＯ部１３６に格納された２４個のデータと、不良カラム記憶部１５０に記憶された不良カラム情報とを用いて、バイト単位の読み出しデータを順次に生成してリードバッファメモリ１３４へ出力する。詳細な内容については後述する。リードバッファメモリ１３４に書き込まれた読み出しデータは、入出力部３２を介して不図示のホスト装置へ送られる。コマンド生成部１７０は、全体制御部３０の制御の下、読み出しコマンドを生成してメモリセルアレイ２０へ出力する。本実施形態では、コマンド生成部１７０は、全体制御部３０の制御の下、複数のデータ線２２の各々から出力されるデータを、バイト単位に分割して（セクタごとに分割して）順次に入力ＦＩＦＯ部１３６へ入力するようにメモリセルアレイ２０を制御する。
【００４２】
図１１は、不良カラム記憶部１５０および読み出しデータ生成部１６０の詳細な構成例を示す図である。不良カラム記憶部１５０は、バイト単位の読み出しデータを識別するためのバイト位置と、積算バイトシフトと、次の読み出しデータを生成するときのシフト数を示す積算ビットシフトと、当該バイト位置が示す読み出しデータの生成時にデータの出力がスキップされる記憶領域を特定するための不良ビットベクタとを対応付けて記憶する。例えば、先頭から数えてｘバイト目の読み出しデータを識別するためのバイト位置を「ｘ」と表記することができる。この場合、第１番目に生成される読み出しデータ（先頭バイトの読み出しデータ）を識別するためのバイト位置は「１」、２番目に生成される読み出しデータ（２バイト目の読み出しデータ）を識別するためのバイト位置は「２」と表される。積算バイトシフトは、バッファ２３から送られたバイト単位のデータ数と、これまでに生成されたバイト単位の読み出しデータ数との差を示す情報であり、ページの途中から読み出しデータを生成する場合に、バイトポジションカウンタ１６４のカウンタ値を設定（プリセット）するのに用いられる。なお、不良カラム記憶部１５０は、全ての読み出しデータの各々に対応するデータ（セクタ位置、積算バイトシフト、積算ビットシフト、不良ビットベクタ）を記憶することができる。また、不良カラム記憶部１５０は、読み出しデータのうち、記憶領域からのデータの出力がスキップされることなく生成される読み出しデータについては、当該読み出しデータに対応するデータ（セクタ位置、積算バイトシフト、積算ビットシフト、不良ビットベクタ）を記憶しないこともできる。この場合、不良カラム記憶部１５０のデータ領域を圧縮できるという利点がある。
【００４３】
読み出しデータ生成部１６０は、カレントテーブルポインタ１６１と、シフト数決定部１６２と、生成部１６３と、バイトポジションカウンタ１６４と、ポインタコントローラ１６５とを備える。不良カラム記憶部１５０のデータ領域は、プレーンごとの領域（プレーン領域と呼ぶ）に区分され、各プレーン領域は、所定数のエントリを含んで構成される。また、各プレーン領域は、プレーン情報で識別される。各プレーン領域におけるエントリ位置は、カレントテーブルポインタ１６１で指定される。つまり、プレーン情報とカレントテーブルポインタ１６１は、不良カラム記憶部１５０の特定のエントリを指定するアドレス情報として機能する。読み出しデータが生成されるとき、当該読み出しデータに対応するエントリを指定するアドレス情報が生成される。そして、そのアドレス情報で指定されたエントリに格納された積算ビットシフトはシフト数決定部１６２へ供給され、不良ビットベクタは生成部１６３へ供給され、バイト位置はポインタコントローラ１６５へ供給される。
【００４４】
シフト数決定部１６２は、不良カラム記憶部１５０から読み出された積算ビットシフトを用いて今回のシフト数を決定し、その決定したシフト数を生成部１６３へ出力する。生成部１６３は、不良カラム記憶部１５０から読み出された不良ビットベクタと、シフト数決定部１６２で決定されたシフト数とを用いて、読み出しデータを順次に生成する。本実施形態では、生成部１６３は、入力ＦＩＦＯ部１３６を構成する２４個の記憶領域の先頭の記憶領域から数えて今回のシフト数だけ後の記憶領域から順番に、欠陥のあるデータ線２２から出力されたデータ（つまりは不良ビットを示すデータ）が格納された記憶領域以外の記憶領域に格納されたデータを８つ出力することで、バイト単位（８ビット）の読み出しデータを生成する。また、生成部１６３は、データの出力がスキップされた記憶領域の数に応じて、読み出しデータの生成を停止する期間（サイクル数）を決定する。本実施形態では、生成部１６３は、今回のシフト数と、読み出しデータの生成時にデータの出力がスキップされた記憶領域の数との和が１以上かつ８未満の場合は、読み出しデータの生成を１サイクル停止することを示す休止サイクル情報をバイトポジションカウンタ１６４へ出力する。また、生成部１６３は、今回のシフト数と、読み出しデータの生成時にデータの出力がスキップされた記憶領域の数との和が８以上の場合は、読み出しデータの生成を２サイクル停止することを示す休止サイクル情報をバイトポジションカウンタ１６４へ出力する。
【００４５】
バイトポジションカウンタ１６４は、バイト単位の読み出しデータが生成されるたびに、カウント値を１だけインクリメントする。ポインタコントローラ１６５は、不良カラム記憶部１５０から読み出されたバイト位置とバイトポジションカウンタ１６４のカウント値とが一致した場合は、カレントテーブルポインタ１６１のポインタ位置はそのままでマッチフラグをセットする。また、ポインタコントローラ１６５は、不良カラム記憶部１５０から読み出されたバイト位置がバイトポジションカウンタ１６４のカウント値よりも大きい場合は、カレントテーブルポインタ１６１のポインタ位置はそのままでマッチフラグをリセットする。また、ポインタコントローラ１６５は、不良カラム記憶部１５０から読み出されたバイト位置がバイトポジションカウンタ１６４のカウント値よりも小さい場合は、カレントテーブルポインタ１６１のポインタ位置を１だけインクリメント（次のエントリを指定）してマッチフラグをリセットする。
【００４６】
次に、生成部１６３の機能を具体的に説明する。図１２は、生成部１６３の機能を具体的に説明するための概念図である。入力ＦＩＦＯ部１３６は、各８ビットの第３レジスタ１３７、第４レジスタ１３８および第５レジスタ１３９が３段に接続される。ここでは、一例として、第５レジスタ１３９が格納可能な８ビットのデータのうち最上位の桁のビットに対応する記憶領域は「ｃ０」であり、「ｃ０」を先頭の記憶領域と呼ぶ。また、ここでは、第３レジスタ１３７が格納可能な８ビットのデータのうち最下位の桁のビットに対応する記憶領域は「ａ７」であり、「ａ７」を末端の記憶領域と呼ぶ。ここでは、これから生成する読み出しデータに対応する不良ビットベクタが「００１１００１０１０００００００」、今回のシフト数が「５」である場合を想定する。読み出しデータを構成する各ビットデータは、ｄ０〜ｄ７で表される。
【００４７】
前述したように、生成部１６３は、バイト単位の読み出しデータを生成するとき、先頭の記憶領域ｃ０よりも今回のシフト数だけ後の記憶領域から順番に、欠陥のあるデータ線２２から出力されたデータが格納された記憶領域以外の記憶領域に格納されたデータを８つ分だけ出力することで、読み出しデータを生成する。今回のシフト数は「５」であるので、生成部１６３は、先頭の記憶領域ｃ０よりも５だけ後の記憶領域ｃ５から順番に、不良ビットベクタ「００１１００１０１０００００００」を参照しながら、欠陥のあるデータ線２２から出力されたデータが格納された記憶領域以外の記憶領域に格納されたデータを出力する。不良ビットベクタ「００１１００１０１０００００００」を構成する各ビットデータは、記憶領域ｃ５〜記憶領域ａ０の各々に対応するとともに、対応する記憶領域に格納されたデータが、欠陥のあるデータ線２２から出力されたデータであるか否かを示すように予め設定されている。
【００４８】
不良ビットベクタの第１番目のビットデータは「０」であるので、対応する記憶領域ｃ５に格納されたデータは、欠陥のないデータ線２２から出力されたデータである。したがって、記憶領域ｃ５に格納されたデータは、読み出しデータの第１番目のビットデータｄ０として出力される。不良ビットベクタの第２番目のビットデータは「０」であるので、対応する記憶領域ｃ６に格納されたデータは、読み出しデータの第２番目のビットデータｄ１として出力される。
【００４９】
不良ビットベクタの第３番目のビットデータは「１」であるので、対応する記憶領域ｃ７に格納されたデータは、欠陥のあるデータ線２２から出力されたデータである。したがって、記憶領域ｃ７に格納されたデータは出力されない（データの出力がスキップされる）。不良ビットベクタの第４番目のビットデータは「１」であるので、対応する記憶領域ｂ０に格納されたデータは出力されない（データの出力がスキップされる）。
【００５０】
不良ビットベクタの第５番目のビットデータは「０」であるので、対応する記憶領域ｂ１に格納されたデータは、読み出しデータの第３番目のビットデータｄ２として出力される。不良ビットベクタの第６番目のビットデータは「０」であるので、対応する記憶領域ｂ２に格納されたデータは、読み出しデータの第４番目のビットデータｄ３として出力される。不良ビットベクタの第７番目のビットデータは「１」であるので、対応する記憶領域ｂ３に格納されたデータは出力されない。不良ビットベクタの第８番目のビットデータは「０」であるので、対応する記憶領域ｂ４に格納されたデータは、読み出しデータの第５番目のビットデータｄ４として出力される。不良ビットベクタの第９番目のビットデータは「１」であるので、対応する記憶領域ｂ５に格納されたデータは出力されない。
【００５１】
不良ビットベクタの第１０番目のビットデータは「０」であるので、対応する記憶領域ｂ６に格納されたデータは、読み出しデータの第６番目のビットデータｄ５として出力される。不良ビットベクタの第１１番目のビットデータは「０」であるので、対応する記憶領域ｂ７に格納されたデータは、読み出しデータの第７番目のビットデータｄ６として出力される。不良ビットベクタの第１２番目のビットデータは「０」であるので、対応する記憶領域ａ０に格納されたデータは、読み出しデータの第８番目のビットデータｄ７として出力される。なお、不良ビットベクタの第１３番目以降のビットデータは、読み出しデータの生成に無関係なので、ここでは全て「０」に設定されている。以上のようにして、読み出しデータが生成されてリードバッファメモリ１３４へ出力される。
【００５２】
本実施形態では、読み出しデータが生成されるとき、今回のシフト数と、当該読み出しデータの生成時にデータの出力がスキップされた記憶領域の数との和が８未満の場合は、その和が次回のシフト数となり、その和が８以上の場合は、その和から８を差し引いた値が次回のシフト数となるように、不良カラム記憶部１５０の各エントリにおける積算ビットシフトが予め設定されている。例えば、所定のエントリに含まれるバイト位置に対応する読み出しデータが生成されるとき、今回のシフト数が「０」で、当該読み出しデータの生成時にデータの出力がスキップされた記憶領域の数が「３」である場合は、次回のシフト数は「３」となるように、当該エントリに含まれる積算ビットシフトが予め設定されている。図１２の例では、今回のシフト数は「５」であり、読み出しデータの生成時にデータの出力がスキップされた記憶領域の数は「４」であるので、当該読み出しデータに対応する積算ビットシフトは、次回のシフト数が（５＋４）−８＝１となるように予め設定されている。要するに、シフト数は、出力がスキップされる記憶領域の数に応じて可変に設定される。また、図１２の例では、今回のシフト数と、読み出しデータの生成時にデータの出力がスキップされた記憶領域の数との和が９（＝５＋４）となり８を超えるので、生成部１６３は、読み出しデータの生成を２サイクル停止することを示す休止サイクル情報をバイトポジションカウンタ１６４へ出力する。
【００５３】
次に、図１３を参照しながら、これから生成する読み出しデータに対応する不良ビットベクタが「１１１１１１１１００００００００」、今回のシフト数が「７」である場合について説明する。今回のシフト数は「７」であるので、生成部１６３は、先頭の記憶領域ｃ０よりも７だけ後の記憶領域ｃ７から順番に、不良ビットベクタ「１１１１１１１１００００００００」を参照しながら、欠陥のあるデータ線２２から出力されたデータが格納された記憶領域以外の記憶領域に格納されたデータを８個分だけ出力する。図１２の例と同様に、不良ビットベクタ「１１１１１１１１００００００００」を構成する各ビットデータは、記憶領域ｃ７〜記憶領域ａ６の各々に対応するとともに、対応する記憶領域に格納されたデータが、欠陥のあるデータ線２２から出力されたデータであるか否かを示すように予め設定されている。
【００５４】
不良ビットベクタの第１番目のビットデータは「１」であるので、記憶領域ｃ７に格納されたデータは、欠陥のあるデータ線２２から出力されたデータである。したがって、記憶領域ｃ７に格納されたデータは出力されない（データの出力がスキップされる）。同様に、不良ビットベクタの第２番目〜第８番目の各々のビットデータは「１」であるので、記憶領域ｂ０〜ｂ６の各々に格納されたデータは出力されない。
【００５５】
不良ビットベクタの第９番目のビットデータは「０」であるので、記憶領域ｂ７に格納されたデータは、欠陥のないデータ線２２から出力されたデータである。したがって、記憶領域ｂ７に格納されたデータは、読み出しデータの第１番目のビットデータｄ０として出力される。同様に、不良ビットベクタの第１０番目〜第１５番目の各々のビットデータは「０」であるので、記憶領域ａ０に格納されたデータは読み出しデータの第２番目のビットデータｄ１として出力され、記憶領域ａ１に格納されたデータは読み出しデータの第３番目のビットデータｄ２として出力され、記憶領域ａ２に格納されたデータは読み出しデータの第４番目のビットデータｄ３として出力され、記憶領域ａ３に格納されたデータは読み出しデータの第５番目のビットデータｄ４として出力され、記憶領域ａ４に格納されたデータは読み出しデータの第６番目のビットデータｄ５として出力され、記憶領域ａ５に格納されたデータは読み出しデータの第７番目のビットデータｄ６として出力され、記憶領域ａ６に格納されたデータは読み出しデータの第８番目のビットデータｄ７として出力される。以上のようにして、読み出しデータが生成されてリードバッファメモリ１３４へ出力される。
【００５６】
図１３の例では、今回のシフト数は「７」であり、読み出しデータの生成時にデータの出力がスキップされた記憶領域の数は「８」であるので、図１３の例で生成される読み出しデータに対応する積算ビットシフトは、次回のシフト数が（７＋８）−８＝７となるように予め設定されている。また、今回のシフト数と、読み出しデータの生成時にデータの出力がスキップされた記憶領域の数との和が８を超えるので、生成部１６３は、読み出しデータの生成を２サイクル停止することを示す休止サイクル情報をバイトポジションカウンタ１６４へ出力する。
【００５７】
図１４および図１５は、生成部１６３の具体的な構成例を示す図である。図１４に示すように、生成部１６３は、図１５に示す回路Ｈを複数組み合わせることで構成される。生成部６２には、入力ＦＩＦＯ部１３６を構成する記憶領域の各々に格納されたデータ、今回のシフト数を示す信号sft、および、生成する読み出しデータに対応する不良ビットベクタを今回のシフト数だけシフトした信号evectが入力され、読み出しデータｄ０〜ｄ７が生成（出力）される。例えば今回のシフト数が「ｘ」（０≦ｘ≦７）の場合、信号sftxはハイレベルに設定される。
【００５８】
図１４の左上端に配置された回路Ｈに着目して、回路Ｈの構成例を説明する。なお、他の回路Hの構成も同様である。図１５に示すように、回路Ｈは、ＡＮＤ回路２０１と、ＡＮＤ回路２０２と、ＡＮＤ回路２０３と、ＯＲ回路２１１と、ＯＲ回路２１２とを含んで構成される。ＡＮＤ回路２０１には、信号sft0（図１５のs＿wに相当）、先頭の記憶領域ｃ０に格納されたデータ（図１５のabcxに相当）、および、信号evect0（図１５のe＿sftxに相当）を反転した信号が入力される。ＡＮＤ回路２０１の出力はＯＲ回路２１１に入力され、ＯＲ回路２１１の出力（図１５のd＿sに相当）は、下の段の回路ＨにおけるＯＲ回路２１１に入力（図１５のd＿nに相当）される。
【００５９】
ＯＲ回路２１２には、信号sft0（図１５のs＿wに相当）が入力され、ＯＲ回路２１２の出力はＡＮＤ回路２０２に入力される。ＡＮＤ回路２０２には、信号evect0（図１５のe＿sftx）が入力され、ＡＮＤ回路２０２の出力（図１５のs＿sに相当）は、下の段の回路HにおけるOＲ回路２１２に入力（図１５のs＿nに相当）される。また、ＡＮＤ回路２０３には、ＯＲ回路２１２の出力と、信号evect0（図１５のe＿sftxに相当）を反転した信号とが入力される。ＡＮＤ回路２０３の出力（図１５のs＿seに相当）は、下の段の回路Ｈに入力（図１５のs＿nwに相当）された後、その右隣の回路Ｈへ向かって出力（図１５のs＿e、s＿wに相当）される。
【００６０】
図１６は、信号evectを生成する第１回路部２２０の構成例を示す図である。生成部１６３は、第１回路部２２０を含んで構成される。図１６に示すように、第１回路２２０は、図１７に示す回路Ｓを複数組み合わせることで構成される。第１回路部２２０には、不良ビットベクタを示す信号e、および、今回のシフト数に応じて設定される３つの信号sft＿enc0〜sft＿enc2が入力され、信号evectが生成（出力）される。
【００６１】
図１６の左上端に配置された回路Ｓに着目して、回路Ｓの構成例を説明する。図１７に示すように、回路Ｓは、ＡＮＤ回路３０１と、ＡＮＤ回路３０２と、ＯＲ回路３１１とを含んで構成される。ＡＮＤ回路３０１には、不良ビットベクタの第１番目のビットデータを示す信号ｅ0（図１７のdin＿sに相当）、および、信号sft＿enc0を反転した信号が入力される。ＡＮＤ回路３０１の出力はＯＲ回路３１１に入力され、ＯＲ回路３１１の出力（図１７のdout＿sに相当）は、右隣の回路ＳにおけるＡＮＤ回路３１０およびＡＮＤ回路３０２に入力（図１７のdin＿sに相当）される。ＡＮＤ回路３０２には、不良ビットベクタの第１番目のビットデータを示す信号ｅ0（図１７のdin＿sに相当）、および、信号sft＿enc0が入力される。ＡＮＤ回路３０２の出力（図１７のcarry＿outに相当）は、当該回路Ｓから１つだけ下に配置された回路ＳにおけるＯＲ回路３１１へ入力（図１７のcarry＿inに相当）される。なお、本実施形態では、第２列目に属する回路Ｓにおいては、ＡＮＤ回路３０２の出力は、当該回路Ｓから２つだけ下に配置された回路ＳにおけるＯＲ回路へ入力され、最終の第３列目に属する回路Ｓにおいては、ＡＮＤ回路３０２の出力は、当該回路Ｓから４つだけ下に配置された回路ＳにおけるＯＲ回路へ入力される。また、上述したように、図１６の左上端（第１列目の最上段）の回路Ｓには、信号sft＿enc0が入力されるが、図１６に示すように、第２列目の最上段の回路Ｓには信号sft＿enc1が入力され、第３列目の最上段の回路Ｓには信号sft＿enc2が入力される。
【００６２】
図１８は、信号sft＿enc0〜sft＿enc2を生成する第２回路部２３０の構成例を示す図である。生成部１６３は、第２回路部２３０を含んで構成される。図１８に示すように、第２回路部２３０は、ＯＲ回路４０１とＯＲ回路４０２とＯＲ回路４０３とを含んで構成される。ＯＲ回路４０１には、シフト数「１」を示す信号sft1、シフト数「３」を示すsft3、シフト数「５」を示すsft5、および、シフト数「７」を示すsft7が入力される。ＯR回路４０１の出力が信号sft＿enc0となる。ＯＲ回路４０２には、シフト数「２」を示す信号sft2、シフト数「３」を示すsft3、シフト数「６」を示すsft6、および、シフト数「７」を示すsft7が入力される。ＯR回路４０２の出力が信号sft＿enc1となる。ＯＲ回路４０３には、シフト数「４」を示す信号sft4、シフト数「５」を示すsft5、シフト数「６」を示すsft6、および、シフト数「７」を示すsft7が入力される。ＯR回路４０３の出力が信号sft＿enc2となる。
【００６３】
いま、図１２に示す読み出しデータを生成するときの生成部１６３の動作例を説明する。この場合、今回のシフト数は「５」なので、信号sft5がハイレベルに設定される。したがって、図１９に示すように、OＲ回路４０１の出力はハイレベルに遷移し、ＯＲ回路４０２の出力はローレベルに遷移し、ＯＲ回路４０３の出力はハイレベルに遷移する。すなわち、信号sft＿enc0はハイレベル、信号sft＿enc1はローレベル、信号sft＿enc2はハイレベルに遷移する。また、不良ビットベクタは「００１１００１０１０００００００」なので、第１回路部２２０で生成される信号evect0〜evect22の状態は図２０のようになる。
【００６４】
図２１において、シフト数５を示す信号sft5、信号evect5、および、記憶領域ｃ５に格納されたデータが入力される回路H１に着目すると、信号sft5はハイレベル、信号evect5はローレベルなので、記憶領域ｃ５に格納されたデータが「１」の場合は、ＡND回路２０１の出力はハイレベルに遷移する。これにより、ＯＲ回路２１１の出力もハイレベルに遷移し、そのハイレベル信号が下の段の回路Ｈ２におけるＯＲ回路２１１に入力される。ＯＲ回路２１１の出力がハイレベルに遷移した場合、その出力は、下の段に配置された全ての回路Ｈを通過する。回路Ｈ１および回路Ｈ２が属する列（第１列目）の最下段の回路ＨにおけるＯＲ回路２１１の出力は、読み出しデータの第１番目のビットデータｄ０となるので、この場合は、記憶領域ｃ５に格納されたデータが、第１番目のビットデータｄ０として出力される。
【００６５】
また、回路Ｈ１におけるＯＲ回路２１２の出力もハイレベルに遷移するので、ＡＮＤ回路２０３の出力もハイレベルに遷移し、そのハイレベル信号は、下の段の回路Ｈ２に入力された後、回路Ｈ２の右隣の回路Ｈ３に入力（図１５のs＿wに相当）される。
【００６６】
次に、シフト数６を示す信号sft6、信号evect6、および、記憶領域ｃ６に格納されたデータが入力される回路H２に着目すると、信号sft6および信号evect6はローレベルなので、ＡＮＤ回路２０１、２０２および２０３の出力はローレベルとなる。ローレベルの信号evect6はそのまま右隣の回路H３へ入力（図１５のe＿sftxに相当）される。記憶領域ｃ６に格納されたデータが「１」の場合、ハイレベルの信号abcxが回路H３へ入力される。さらに、前述したように、回路Ｈ１から入力されたハイレベル信号（図１５のs＿nwに相当）が、そのまま回路Ｈ３へ入力（図１５のs＿eに相当）される。これにより、回路Ｈ３におけるＡＮＤ回路２０１の出力はハイレベルに遷移するので、回路Ｈ３におけるＯＲ回路２１１の出力もハイレベルに遷移し、そのハイレベル信号が下の段の回路Ｈ４におけるＯＲ回路２１１に入力される。回路Ｈ３および回路Ｈ４が属する列（第２列目）の最下段の回路ＨにおけるＯＲ回路２１１の出力は、読み出しデータの第２番目のビットデータｄ１となるので、この場合は、記憶領域ｃ６に格納されたデータが、第２番目のビットデータｄ１として出力される。
【００６７】
また、回路Ｈ３において、ＯＲ回路２１２の出力はハイレベルに遷移し、信号evect6はローレベルなので、ＡＮＤ回路２０３の出力はハイレベルに遷移する。これにより、ＡＮＤ回路２０３から出力されたハイレベル信号は、下の段の回路Ｈ４に入力された後、回路Ｈ４の右隣の回路Ｈ５に入力（図１５のs＿wに相当）される。
【００６８】
次に、シフト数７を示す信号sft7、信号evect7、および、記憶領域ｃ７に格納されたデータが入力される回路H６に着目すると、信号sft７はローレベルなのでＡＮＤ回路２０１の出力はローレベルとなる。また、信号evect7はハイレベルなので、そのハイレベル信号は、右隣の回路Ｈ４へ入力（図１５のe＿sftxに相当）される。また、記憶領域ｃ７に格納されたデータも右隣の回路Ｈ４へ入力（図１５のabcxに相当）される。回路Ｈ４に入力された信号e＿sftxおよび信号abcxは、そのまま右隣の回路Ｈ５に入力される。ここで、回路Ｈ５に着目すると、回路Ｈ４から入力された信号e＿sftxはハイレベルなので、ＡＮＤ回路２０１の出力はローレベルとなる。したがって、ＯＲ回路２１１の出力もローレベルとなる。回路Ｈ５が属する列（第３列目）の最下段の回路ＨにおけるＯＲ回路２１１の出力は、読み出しデータの第３番目のビットデータｄ２となるが、この場合、記憶領域ｃ７に格納されたデータ（信号abcx）は、第３番目のビットデータｄ２として出力されない。
【００６９】
一方、回路Ｈ５において、回路Ｈ４から入力される信号s＿wおよび信号e＿sftxはハイレベルなので、ＯＲ回路２１２の出力はハイレベルに遷移し、ＡＮＤ回路２０２の出力（図１５のs＿sに相当）もハイレベルに遷移する。ＡＮＤ回路２０２からのハイレベル信号は下の段の回路Ｈ７におけるＯＲ回路２１２に入力（図１５のs＿nに相当）される。
【００７０】
次に、シフト数８を示す信号sft8、信号evect8、および、記憶領域ｂ０に格納されたデータが入力される回路Ｈ８に着目すると、信号sft8はローレベルなのでＡＮＤ回路２０１の出力はローレベルとなる。また、信号evect8はハイレベルなので、そのハイレベル信号は、右隣の回路Ｈ９へ入力（図１５のe＿sftxに相当）される。また、記憶領域ｂ０に格納されたデータも右隣の回路Ｈ９へ入力（図１５のabcxに相当）される。回路Ｈ９に入力された信号e＿sftxおよび信号abcxは、そのまま右隣の回路Ｈ７に入力される。ここで、回路Ｈ７に着目すると、回路Ｈ９から入力された信号e＿sftxはハイレベルなので、ＡＮＤ回路２０１の出力はローレベルとなる。したがって、記憶領域ｂ０に格納されたデータ（信号abcx）は、第３番目のビットデータｄ２として出力されない。
【００７１】
一方、回路Ｈ７において、回路Ｈ５から入力される信号s＿n、および、回路H９から入力される信号e＿sftxの各々はハイレベルなので、ＯＲ回路２１２の出力はハイレベルに遷移し、ＡＮＤ回路２０２の出力（図１５のs＿sに相当）もハイレベルに遷移する。ＡＮＤ回路２０２からのハイレベル信号は下の段の回路Ｈ１０におけるＯＲ回路２１２に入力（図１５のs＿nに相当）される。
【００７２】
次に、シフト数９を示す信号sft9、信号evect9、および、記憶領域ｂ１に格納されたデータが入力される回路H１１に着目すると、信号sft9はローレベルなのでＡＮＤ回路２０１の出力はローレベルとなる。また、信号evect9はローレベルなので、そのローレベル信号は、右隣の回路Ｈ１２へ入力（図１５のe＿sftxに相当）される。また、記憶領域ｂ１に格納されたデータも右隣の回路Ｈ１２へ入力（図１５のabcxに相当）される。回路Ｈ１２に入力された信号e＿sftxおよび信号abcxは、そのまま右隣の回路Ｈ１０に入力される。ここで、回路Ｈ１０に着目すると、回路Ｈ１２から入力された信号e＿sftxはローレベルなので、記憶領域ｂ１に格納されたデータが「１」の場合は、ＡND回路２０１の出力はハイレベルに遷移する。これにより、ＯＲ回路２１１の出力もハイレベルに遷移し、そのハイレベル信号が下の段の回路Ｈ２におけるＯＲ回路２１１に入力される。ＯＲ回路２１１の出力がハイレベルに遷移した場合、その出力は、下の段に配置された全ての回路Ｈを通過する。回路Ｈ１０が属する列（第３列目）の最下段の回路ＨにおけるＯＲ回路２１１の出力は、読み出しデータの第３番目のビットデータｄ２となるので、この場合は、記憶領域ｂ１に格納されたデータが、第３番目のビットデータｄ２として出力される。
【００７３】
また、回路Ｈ１０において、回路Ｈ７から入力される信号s＿nはハイレベルなので、OR回路２１２の出力はハイレベルに遷移する。また、回路Ｈ１２から入力される信号e＿sftxはローレベルなので、ＡNＤ回路２０３の出力はハイレベルに遷移する。これにより、ＡＮＤ回路２０３から出力されたハイレベル信号は、下の段の回路Ｈ１３に入力された後、回路Ｈ１３の右隣の回路Ｈ１４に入力（図１５のs＿wに相当）される。
【００７４】
以下、同様にして、記憶領域ｂ２に格納されたデータが第４番目のビットデータｄ３として出力され、記憶領域ｂ４に格納されたデータが第５番目のビットデータｄ４として出力され、記憶領域ｂ６に格納されたデータが第６番目のビットデータｄ５として出力され、記憶領域ｂ７に格納されたデータが第７番目のビットデータｄ６として出力され、記憶領域ａ０に格納されたデータが第８番目のビットデータｄ７として出力される。以上のようにして、シフト数「５」、不良ビットベクタ「００１１００１０１０００００００」を用いて読み出しデータが生成される。
【００７５】
次に、ページの途中から読み出しデータを生成する場合について説明する。いま、４バイト目（バイト位置「３」）から読み出しデータを生成する場合を想定する。図２２は、この場合における不良カラム記憶部１５０のデータ構成例の一部を示す図である。ここでは、読み出しデータのうち、記憶領域からのデータの出力がスキップされることなく生成される読み出しデータ（つまり、対応する不良ビットベクタが「００００００００００００００００」となる読み出しデータ）に対応するデータ（バイト位置、積算バイトシフト、積算ビットシフト、不良ビットベクタ）は、不良カラム記憶部１５０に記憶されない。図２２の例では、バイト位置「３」が示す読み出しデータ（４バイト目の読み出しデータ）に対応する不良ビットベクタは「００００００００００００００００」であり、当該読み出しデータに対応するデータは不良カラム記憶部１５０に記憶されない。
【００７６】
４バイト目から読み出しデータを生成する場合、生成部１６３は、バイト位置「４」まで検索して行き過ぎたことが分かり、１個戻ってバイト位置「２」の積算バイトシフト＝１と、積算ビットシフト＝５を採用する。図２３を参照しながら説明を続ける。バッファ２３から送られたバイト単位のデータ数と、これまでに生成されたバイト単位の読み出しデータ数との差は「１」であり、次のシフト数は「５」であるので、４バイト目の読み出しデータを生成する場合、バッファ２３から送られた第４番目のデータの先頭からのシフト数は１バイト＋５ビット＝１３ビットとなる。前述したように、４バイト目の読み出しデータは、記憶領域からのデータの出力がスキップされることなく生成されるので、バッファ２３から送られた第４番目のデータの先頭ビットよりも１３ビットだけ後のビットから順番に取り出される８ビットのデータにより、４バイト目の読み出しデータが生成される。
【００７７】
以上に説明したように、本実施形態では、不良カラムを置き換えたデータ（書き込みデータまたは読み出しデータ）がバイト単位で順番に（時分割に）生成されるので、不良カラムを置き換えたデータを生成するための共通の回路を繰り返し使用することで、各バイト単位のデータを生成することができる。したがって、不良カラムを置き換えたデータを生成するための回路の規模を小さくできるとともに、置き換えの単位をビット単位とすることで冗長部の利用効率を向上させることができる。つまり、簡易な構成で、不良カラムを置き換えたデータを生成可能なデータ生成装置を提供することができる。
【００７８】
以上、本発明の実施形態を説明したが、この実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。例えば各セクタに属するデータ線２２の本数は８本に限らず、任意に変更可能である。
【符号の説明】
【００７９】
１０  コントローラ
２０  メモリセルアレイ
２１  ワード線
２２  データ線
２３  バッファ
３０  全体制御部
３２  入出力部
３４  ライトバッファメモリ
３６  出力ＦＩＦＯ部
４０  不良カラム情報作成部
５０  不良カラム記憶部
６０  書き込みデータ生成部
６１  カレントテーブルポインタ
６２  生成部
６３  バイトポジションカウンタ
６４  ポインタコントローラ
６５  出力部
６６  シフト数決定部
６７  入力制御部
７０  コマンド生成部
１００  メモリシステム
１０１  ＡＮＤ回路
１０２  ＡＮＤ回路
１０３  ＡＮＤ回路
１１１  ＯＲ回路
１１２  ＯＲ回路
１３４  リードバッファメモリ
１３６  入力ＦＩＦＯ部
１４０  不良カラム情報作成部
１５０  不良カラム記憶部
１６０  読み出しデータ生成部
１６１  カレントテーブルポインタ
１６２  シフト数決定部
１６３  生成部
１６４  バイトポジションカウンタ
１６５  ポインタコントローラ
１７０  コマンド生成部
２０１  ＡＮＤ回路
２０２  ＡＮＤ回路
２０３  ＡＮＤ回路
２１１  ＯＲ回路
２１２  ＯＲ回路
２２０  第１回路部
２３０  第２回路部
３０１  ＡＮＤ回路
３０２  ＡＮＤ回路
３１０  ＯＲ回路
３１１  ＯＲ回路
４０１  ＯＲ回路
４０２  ＯＲ回路
４０３  ＯＲ回路
【図１】
0005622695.tif 000002
【図２】
0005622695.tif 000003
【図３】
0005622695.tif 000004
【図４】
0005622695.tif 000005
【図５】
0005622695.tif 000006
【図６】
0005622695.tif 000007
【図７】
0005622695.tif 000008
【図８】
0005622695.tif 000009
【図９】
0005622695.tif 000010
【図１０】
0005622695.tif 000011
【図１１】
0005622695.tif 000012
【図１２】
0005622695.tif 000013
【図１３】
0005622695.tif 000014
【図１４】
0005622695.tif 000015
【図１５】
0005622695.tif 000016
【図１６】
0005622695.tif 000017
【図１７】
0005622695.tif 000018
【図１８】
0005622695.tif 000019
【図１９】
0005622695.tif 000020
【図２０】
0005622695.tif 000021
【図２１】
0005622695.tif 000022
【図２２】
0005622695.tif 000023
【図２３】
0005622695.tif 000024