(57)【要約】【課題】冗長データ用に確保されるページ数を削減しつつページ間方向の誤り訂正を可能にする。【解決手段】実施形態に係るメモリシステムは、同一のブロックに書き込まれる複数のデータフレームをフレーム間方向に符号化して第１パリティデータを生成し、前記第１パリティデータをフレーム間方向に符号化して第２パリティデータを生成し、前記第１又は第２パリティデータの少なくとも一部と前記複数のデータフレームそれぞれとを連接して複数の第１フレームデータを生成し、前記複数の第１フレームデータそれぞれをフレーム内方向に符号化して複数の第３パリティデータを生成し、前記複数の第１フレームデータそれぞれと前記複数の第３パリティデータそれぞれとを連接した複数の第２フレームデータを前記不揮発性メモリにおける同一ブロック内の前記複数のページに１つずつ書き込む。【選択図】図４
2019168897.tif 000002
【特許請求の範囲】
【請求項１】
それぞれ複数のページで構成された複数のブロックを備える不揮発性メモリと、
前記不揮発性メモリに対する書込み及び読出しを実行するメモリインタフェースと、
前記複数のブロックのうちの同一のブロックに書き込まれる複数のデータフレームをフレーム間方向に符号化して第１パリティデータを生成する第１符号化器と、
前記第１パリティデータを複数のパリティフレームに分割し、前記複数のパリティフレームをフレーム間方向に符号化して第２パリティデータを生成する第２符号化器と、
前記第１パリティデータの少なくとも一部及び／又は前記第２パリティデータの少なくとも一部と前記複数のデータフレームそれぞれとを連接して複数の第１フレームデータを生成し、前記複数の第１フレームデータそれぞれをフレーム内方向に符号化して複数の第３パリティデータを生成する第３符号化器と、
を備え、
前記メモリインタフェースは、前記複数の第１フレームデータそれぞれと前記複数の第３パリティデータそれぞれとを連接した複数の第２フレームデータを前記不揮発性メモリにおける同一ブロック内の前記複数のページに１つずつ書き込む
メモリシステム。
【請求項２】
１ブロック分のデータフレームをバッファするライトバッファメモリをさらに備え、
前記第１符号化器は、前記ライトバッファメモリに前記１ブロック分の前記複数のデータフレームが格納された場合、前記複数のデータフレームを前記フレーム間方向に符号化して前記第１パリティデータを生成する
請求項１に記載のメモリシステム。
【請求項３】
前記複数のブロックのうちの１つ以上のブロックに格納されている有効データを他のブロックに転記するガベージコレクションを実行する制御部をさらに備え、
前記複数のデータフレームは、前記１つ以上のブロックに格納されている前記有効データである
請求項１に記載のメモリシステム。
【請求項４】
前記複数のブロックのうちの１つのブロックから読み出された前記第１パリティデータに、前記１つのブロックから読み出された前記第２パリティデータを用いた第１復号を実行する第１復号器と、
前記１つのブロックから読み出された前記複数のデータフレームに、前記第１復号により誤り訂正された前記第１パリティデータを用いた第２復号を実行する第２復号器と、
を備える請求項１に記載のメモリシステム。
【請求項５】
前記１つのブロックから読み出された前記複数の第２フレームデータそれぞれに、前記複数の第２フレームデータそれぞれの前記第３パリティデータを用いた第３復号を実行する第３復号器をさらに備え、
前記第３復号器による前記第３復号に成功しなかった場合、前記第１復号器が前記第１復号を実行し、前記第２復号器が前記第２復号を実行する
請求項４に記載のメモリシステム。
【請求項６】
前記第３復号器は、前記第２復号器による前記第２復号に成功しなかった場合、再度、前記第２復号により誤り訂正されたデータフレームの一部と前記第３パリティデータを用いた前記第３復号を実行する
請求項５に記載のメモリシステム。
【請求項７】
前記第１パリティデータ及び前記第２パリティデータは、リードソロモン符号のパリティデータである請求項１に記載のメモリシステム。
【請求項８】
それぞれ複数のページで構成された複数のブロックを備える不揮発性メモリと、
前記不揮発性メモリに対する書込み及び読出しを実行するメモリインタフェースと、
前記複数のブロックのうちの第１ブロックに書き込まれる複数の第１データフレームをフレーム間方向に符号化して第１パリティデータを生成する第１符号化器と、
前記第１パリティデータを複数のパリティフレームに分割し、前記複数のパリティフレームをフレーム間方向に符号化して第２パリティデータを生成する第２符号化器と、
前記第１パリティデータの少なくとも一部及び／又は前記第２パリティデータの少なくとも一部を、前記複数のブロックのうちの前記第１ブロックとは異なる第２ブロックに書き込まれる複数の第２データフレームそれぞれとを連接して複数の第１フレームデータを生成し、前記複数の第１フレームデータそれぞれをフレーム内方向に符号化して複数の第３パリティデータを生成する第３符号化器と、
を備え、
前記メモリインタフェースは、前記複数の第１フレームデータそれぞれと前記複数の第３パリティデータそれぞれとを連接した複数の第２フレームデータを前記不揮発性メモリにおける同一ブロック内の前記複数のページに１つずつ書き込む
メモリシステム。
【請求項９】
前記第２ブロックから読み出された前記第１パリティデータを、前記第２ブロックから読み出された前記第２パリティデータを用いて誤り訂正する第１復号器と、
前記第１ブロックから読み出された前記第１データフレームを、前記第２パリティデータを用いて誤り訂正された前記第１パリティデータを用いて復号する第２復号器と、
を備える請求項８に記載のメモリシステム。
【請求項１０】
前記第１パリティデータ及び前記第２パリティデータは、リードソロモン符号のパリティデータである請求項８に記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
以下の実施形態は、一般的に、メモリシステムに関する。
【背景技術】
【０００２】
不揮発半導体メモリは、それぞれ情報を電荷量に置き換えて保持する多数のメモリセルをチップ内に備えている。チップ内の多数のメモリセルは、ブロックと呼ばれる複数のグループに区画されており、各ブロックは、複数のメモリセルで構成されたページと呼ばれるグループにさらに区画されている。なお、ブロックとは、例えばチップ内のデータを消去する際の最小単位であり、ページとは、例えばチップに対してデータの書込み又は読出しを行なう際の最小単位である。
【０００３】
情報を電荷量に置き換えて保持するメモリセルでは、電荷量の大小に対応させて情報が記録される。そのため、書込み時に所望の電荷量に設定できない場合や、時間経過に伴い電荷が放電されてしまった場合には、メモリセルから読み出した情報に誤りが発生する。このような電荷量の変動による誤りはソフトエラーと呼ばれる。ソフトエラー対策としては、記録する情報データに対して誤り訂正符号化を行い、この誤り訂正符号化によって生成された冗長データを情報データと共にチップ内に記録しておく方法が存在する。このような誤り訂正符号化は、一般的には、ページ単位ないしページデータを分割したサブページ単位で実施される。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特許第５０１７４０７号公報
【特許文献２】米国特許出願公開第２０１１／１６１７７４号明細書
【特許文献３】米国特許第８６５６２５２号明細書
【特許文献４】米国特許第９１５８６１７号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明の一つの実施形態は、冗長データ用に確保されるページ数を削減しつつページ間方向の誤り訂正を可能にするメモリシステムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
実施形態によれば、メモリシステムは、それぞれ複数のページで構成された複数のブロックを備える不揮発性メモリと、前記不揮発性メモリに対する書込み及び読出しを実行するメモリインタフェースと、前記複数のブロックのうちの同一のブロックに書き込まれる複数のデータフレームをフレーム間方向に符号化して第１パリティデータを生成する第１符号化器と、前記第１パリティデータを複数のパリティフレームに分割し、前記複数のパリティフレームをフレーム間方向に符号化して第２パリティデータを生成する第２符号化器と、前記第１パリティデータの少なくとも一部又は前記第２パリティデータの少なくとも一部と前記複数のデータフレームそれぞれとを連接して複数の第１フレームデータを生成し、前記複数の第１フレームデータそれぞれをフレーム内方向に符号化して複数の第３パリティデータを生成する第３符号化器とを備え、前記メモリインタフェースは、前記複数の第１フレームデータそれぞれと前記複数の第３パリティデータそれぞれとを連接した複数の第２フレームデータを前記不揮発性メモリにおける同一ブロック内の前記複数のページに１つずつ書き込む。
【図面の簡単な説明】
【０００７】
【図１】図１は、第１の実施形態に係るメモリシステムの概略構成例を示すブロック図である。
【図２】図２は、従来に係るリードソロモン符号を用いた誤り訂正符号の概略構成例を示す模式図である。
【図３】図３は、第１の実施形態に係る誤り訂正符号の概略構成例を示す模式図である。
【図４】図４は、第１の実施形態に係る符号化器の概略構成例を示すブロック図である。
【図５】図５は、第１の実施形態におけるユーザデータのフレーム構成例を示す図である。
【図６】図６は、第１の実施形態に係る符号化器が誤り訂正符号を生成する際の流れを説明するための図である（その１）。
【図７】図７は、第１の実施形態に係る符号化器が誤り訂正符号を生成する際の流れを説明するための図である（その２）。
【図８】図８は、第１の実施形態に係る符号化器が誤り訂正符号を生成する際の流れを説明するための図である（その３）。
【図９】図９は、第１の実施形態に係る書込み動作の概略例を示すフローチャートである。
【図１０】図１０は、第１の実施形態に係る復号器の概略構成例を示すブロック図である。
【図１１】図１１は、第１の実施形態に係る復号器による復号の流れを説明するための図である。
【図１２】図１２は、第１の実施形態に係る復号器による復号の流れの具体例を用いて説明するための図である（その１）。
【図１３】図１３は、第１の実施形態に係る復号器による復号の流れの具体例を用いて説明するための図である（その２）。
【図１４】図１４は、第１の実施形態に係る復号器による復号の流れの具体例を用いて説明するための図である（その３）。
【図１５】図１５は、第１の実施形態に係る読出し動作の概略例を示すフローチャートである。
【図１６】図１６は、第２の実施形態に係る書込み動作と読み出し動作とを実行するための構成の概略例を示すブロック図である。
【図１７】図１７は、第２の実施形態に係る書込み時の動作のメインフローの一例を示すフローチャートである。
【図１８】図１８は、第３の実施形態に係る第２書込みモードの書込み動作の一例を示すフローチャートである。
【図１９】図１９は、第３の実施形態に係る符号化器の概略構成例を示すブロック図である。
【発明を実施するための形態】
【０００８】
以下に添付図面を参照して、実施形態に係るメモリシステムを詳細に説明する。なお、以下の実施形態により本発明が限定されるものではない。
【０００９】
不揮発半導体メモリ（以下、単に不揮発性メモリという）では、デバイスの製造ばらつきにより、各ページのソフトエラー率が大きく変動する。そのため、ソフトエラー率の高いページを目的として誤り訂正符号を構成した場合、強力な誤り訂正能力が必要となり、冗長データ量が増大する。また、不揮発性メモリでは、読出し回路や入出力バッファ等の故障により、ページやブロックといったメモリセルよりも大きな単位の誤りが発生する場合もある。このような大きな単位の誤りが生じた場合、ページ単位での誤り訂正符号では訂正することができない。
【００１０】
そこで、ページ単位で誤り訂正を行なうことを目的とした誤り訂正符号（以下、ページ内符号という）に加え、ページを跨ぐ方向（以下、ページ間方向という）に誤り訂正を行なうことを目的とした誤り訂正符号（以下、ページ間符号という）を用いてユーザデータを保護する方法が考えられる。ただし、ページ間方向に誤り訂正符号化を行う場合、ページ間方向の冗長データを格納するためのページやブロックが別途必要となる場合がある。
【００１１】
また、近年の不揮発半導体メモリには、３次元の構造を採用することで、単位面積あたりの記憶容量を大幅に向上させた、いわゆる３次元構造フラッシュメモリが存在する。３次元構造フラッシュメモリでは、消去単位であるブロック当たりの記憶容量が増大する一方、メモリチップ上のブロック数が減少する傾向にある。そのため、３次元構造フラッシュメモリでは、冗長データ専用のページやブロックを確保することが困難な場合が存在する。
【００１２】
そこで以下の実施形態では、冗長データ用に確保されるページ数を削減しつつページ間方向の誤り訂正を可能にするメモリシステムについて、幾つか例を挙げて説明する。
【００１３】
（第１の実施形態）
図１は、第１の実施形態に係るメモリシステムの概略構成例を示すブロック図である。図１に示すように、メモリシステム１は、メモリコントローラ１０と不揮発性メモリ２０とを備える。メモリシステム１は、ホスト３０と接続可能であり、図１ではホスト３０と接続された状態が示されている。ホスト３０は、例えば、パーソナルコンピュータ、携帯端末などの電子機器であってよい。
【００１４】
不揮発性メモリ２０は、データを不揮発に記憶する不揮発性メモリであり、例えば、ＮＡＮＤ型フラッシュメモリ（以下、単にＮＡＮＤメモリという）である。以下の説明では、不揮発性メモリ２０としてＮＡＮＤメモリが用いられた場合を例示するが、不揮発性メモリ２０として３次元構造フラッシュメモリ、ＲｅＲＡＭ（Resistance Random Access Memory）、ＦｅＲＡＭ（Ferroelectric Random Access Memory）等の種々の記憶装置を用いることも可能である。また、不揮発性メモリ２０が半導体メモリであることは必須ではなく、半導体メモリ以外の種々の記憶媒体に対しても本実施形態を適用することが可能である。
【００１５】
メモリシステム１は、メモリコントローラ１０と不揮発性メモリ２０とが１つのパッケージとして構成されるメモリカード等であってもよいし、ＳＳＤ（Solid State Drive）等であってもよい。
【００１６】
メモリコントローラ１０は、例えばＳｏＣ（System-On-a-Chip）として構成される半導体集積回路である。以下で説明するメモリコントローラ１０の各構成要素の動作の一部又は全部は、ＣＰＵ（Central Processing Unit）がファームウエアを実行することによって実現されてもよいし、ハードウエアで実現されてもよい。
【００１７】
メモリコントローラ１０は、ホスト３０からの書込み要求に従って不揮発性メモリ２０への書込みを制御する。また、ホスト３０からの読出し要求に従って不揮発性メモリ２０からの読み出しを制御する。メモリコントローラ１０は、ホストＩ／Ｆ（ホストインタフェース）１５、メモリＩ／Ｆ（メモリインタフェース）１３、制御部１１、符号化／復号部（コーデック）１４およびデータバッファ１２を備える。ホストＩ／Ｆ１５、メモリＩ／Ｆ１３、制御部１１、符号化／復号部１４およびデータバッファ１２は、内部バス１６で相互に接続されている。
【００１８】
ホストＩ／Ｆ１５は、ホスト３０との間のインタフェース規格に従った処理を実施し、ホスト３０から受信した要求、書込み対象のユーザデータなどを内部バス１６に出力する。また、ホストＩ／Ｆ１５は、不揮発性メモリ２０から読み出されて復元されたユーザデータ、制御部１１からの応答などをホスト３０へ送信する。
【００１９】
メモリＩ／Ｆ１３は、制御部１１の指示に基づいて、不揮発性メモリ２０への書込み処理を行う。また、メモリＩ／Ｆ１３は、制御部１１の指示に基づいて、不揮発性メモリ２０からの読出し処理を行う。
【００２０】
制御部１１は、メモリシステム１の各構成要素を統括的に制御する。制御部１１は、ホスト３０からホストＩ／Ｆ１５経由で命令を受けた場合に、その命令に従った制御を行う。例えば、制御部１１は、ホスト３０からの命令に従って、不揮発性メモリ２０への書込みをメモリＩ／Ｆ１３へ指示する。また、制御部１１は、ホスト３０からの命令に従って、不揮発性メモリ２０からの読出しをメモリＩ／Ｆ１３へ指示する。
【００２１】
また、制御部１１は、ホスト３０から書込み要求を受信した場合、データバッファ１２に蓄積されるユーザデータに対して、不揮発性メモリ２０上の格納領域（メモリ領域）を決定する。すなわち、制御部１１は、ユーザデータの書込み先を管理する。ホスト３０から受信したユーザデータの論理アドレスと該ユーザデータが格納された不揮発性メモリ２０上の格納領域を示す物理アドレスとの対応はアドレス変換テーブルとして格納される。
【００２２】
また、制御部１１は、ホスト３０から読出し要求を受信した場合、読出し要求により指定された論理アドレスを上述のアドレス変換テーブルを用いて物理アドレスに変換し、該物理アドレスからの読み出しをメモリＩ／Ｆ１３へ指示する。
【００２３】
ＮＡＮＤメモリでは、一般に、ページと呼ばれるデータ単位で、書込みおよび読出しが行われ、ブロックと呼ばれるデータ単位で消去が行われる。本実施形態では、同一のワード線に接続される複数のメモリセルをメモリセルグループと呼ぶ。メモリセルがＳＬＣ（Single Level Cell）である場合は、１つのメモリセルグループが１ページに対応する。メモリセルがＭＬＣ（Multiple Level Cell）である場合は、１つのメモリセルグループが複数ページに対応する。なお、本説明におけるＭＬＣには、ＴＬＣ（Triple Level Cell）やＱＬＣ（Quad Level Cell）等も含まれるものとする。また、各メモリセルはワード線に接続するとともにビット線にも接続される。したがって、各メモリセルは、ワード線を識別するアドレスとビット線を識別するアドレスとで識別することが可能である。
【００２４】
データバッファ１２は、メモリコントローラ１０がホスト３０から受信したユーザデータを不揮発性メモリ２０へ記憶するまでに一時格納する。また、データバッファ１２は、不揮発性メモリ２０から読み出して復元されたユーザデータをホスト３０へ送信するまでに一時格納する。データバッファ１２には、例えば、ＳＲＡＭ（Static Random Access Memory）やＤＲＡＭ（Dynamic Random Access Memory）などの汎用メモリを用いることができる。
【００２５】
ホスト３０から送信されるユーザデータは、内部バス１６に転送されてデータバッファ１２に一旦格納される。符号化／復号部１４は、不揮発性メモリ２０に格納されるユーザデータを符号化して符号語を生成する。また、符号化／復号部２４は、不揮発性メモリ２０から読み出された受信語を復号してユーザデータを復元する。そこで符号化／復号部１４は、符号化器１７と復号器１８を備える。なお、符号化／復号部１４により符号化されるデータには、ユーザデータ以外にも、メモリコントローラ１０内部で用いられる制御データ等が含まれてもよい。また、本実施形態では、符号化／復号部１４がメモリＩ／Ｆ１３とは独立した部として構成されているが、このような構成に限られず、符号化／復号部１４がメモリＩ／Ｆ１３内に組み込まれた構成であってもよい。
【００２６】
符号化器１７は、制御部１１からの指示に基づいて、データバッファ１２上のユーザデータを符号化して符号語を生成する。復号器１８は、制御部１１からの指示に基づいて、不揮発性メモリ２０の指定されたアドレスから読み出された受信語を復号する。
【００２７】
本実施形態において、符号化器１７が生成する符号語は、例えば積符号に代表されるような多次元の誤り訂正符号である。多次元の誤り訂正符号とは、例えば、誤り訂正符号の構成単位である各シンボルが、複数の成分符号によって多重に保護された構造を有する符号である。各シンボルは、例えば１ビット（二元体（Binary Field）の元（Element））、又は、二元体以外の有限体（Finite Field）などのアルファベットの元で構成されたものであってよい。そこで以下の説明では、簡略化のため、各シンボルが次元の異なる２つの成分符号で保護された２次元の誤り訂正符号を例示する。その際、ページ間方向に対応する次元の成分符号（以下、ページ間符号という）には、例として、リードソロモン（Reed-Solomon：ＲＳ）符号を用いることとする。一方、ページ内方向（インライン方向ともいう）に対応する次元の成分符号（以下、ページ内符号という）には、例えば、ＢＣＨ（Bose-Chaudhuri-Hocquenghem）符号やＬＤＰＣ（Low-Density Parity-Check）符号等を用いることができる。
【００２８】
次に、本実施形態に係る誤り訂正符号を、従来に係る誤り訂正符号との比較とともに、図面を用いて詳細に説明する。図２は、従来に係るリードソロモン符号をページ間符号として用いた誤り訂正符号の概略構成例を示す模式図である。なお、図２に示す例では、１つのブロックＢＬＫがＫ個のページＰ１〜ＰＫで構成されている。
【００２９】
図２に例示される誤り訂正符号では、ブロックＢＬＫを構成するＫ個のページのうちの（Ｋ−Ｌ）個のページＰ１〜Ｐ（Ｋ−Ｌ）に（Ｋ−Ｌ）個のユーザデータフレームＢ１〜Ｂ（Ｋ−Ｌ）よりなるユーザデータＹＤが格納されている。また、ページＰ（Ｋ−Ｌ＋１）〜ＰＫには、ページ間方向にユーザデータフレームＢ１〜Ｂ（Ｋ−Ｌ）をリードソロモン符号化することで生成されたＬ個のリードソロモンパリティフレームＲ１〜ＲＬよりなるリードソロモンパリティデータＲＳが格納されている。したがって、図２に示す誤り訂正符号では、ページ間方向において、ユーザデータＹＤにおけるエラーシンボルの位置（ページ）が分かっている場合にはＬ個のエラーシンボルを、エラーシンボルの位置（ページ）が分かっていない場合には（Ｌ／２）個（ただし、割り切れない場合には少数点以下は切り捨て）のエラーシンボルを、誤り訂正することが可能である。さらに、各ページＰ１〜ＰＫには、ページ内符号として、それぞれのページに格納されているユーザデータフレームＢ１〜Ｂ（Ｋ−Ｌ）又はリードソロモンパリティフレームＲ１〜ＲＬをＢＣＨ符号やＬＤＰＣ符号等で誤り訂正符号化することで生成されたパリティ（以下、インラインＥＣＣパリティという）ＩＥＰが格納されている。
【００３０】
このように、従来では、ページ間方向に誤り訂正を行なうことを目的としたリードソロモン符号（リードソロモンパリティデータＲＳ）を用いてユーザデータＹＤを保護する場合、ユーザデータフレームＢ１〜Ｂ（Ｋ−Ｌ）を格納するためのページＰ１〜Ｐ（Ｋ−Ｌ）の他に、リードソロモンパリティフレームＲ１〜ＲＬを格納するための専用のページＰ（Ｋ−Ｌ＋１）〜ＰＫを確保しておく必要がある。もしくは、ページ間符号の格納先を別ブロックとする場合には、ユーザデータＹＤを格納するブロックとは別にページ間符号を格納するための専用のブロックを確保しておく必要がある。なお、本説明において、「専用」とは、「ユーザデータを格納しない冗長データ用」であることを意味する。
【００３１】
一方、図３は、本実施形態に係る誤り訂正符号の概略構成例を示す模式図である。なお、図３に示す例でも、図２に示す例と同様に、ページ間方向において、ユーザデータＹＤにおけるエラーシンボルの位置（ページ）が分かっている場合にはＬ個のエラーシンボルを、エラーシンボルの位置（ページ）が分かっていない場合には（Ｌ／２）個（ただし、割り切れない場合には少数点以下は切り捨て）個のエラーシンボルを、誤り訂正することが可能である。
【００３２】
図３に示す例では、図２に示した例と同様に、１つのブロックＢＬＫがＫ個のページＰ１〜ＰＫで構成されている。ただし、図３に示す誤り訂正符号では、ブロックＢＬＫを構成する全てのページＰ１〜ＰＫに、ページ数と同数のＫ個のユーザデータフレームＢ１〜ＢＫよりなるユーザデータＹＤが格納されている。
【００３３】
ユーザデータＹＤをページ間方向に保護する第１リードソロモンパリティデータＲＳ１は、ページ間方向にユーザデータフレームＢ１〜ＢＫをリードソロモン符号化することで生成される。このようにして生成された第１リードソロモンパリティデータＲＳ１は、例えばＬ個の第１リードソロモンパリティフレームＲ１〜ＲＬで構成される。
【００３４】
本実施形態において、第１リードソロモンパリティデータＲＳ１は、（Ｋ−Ｍ）個の第１リードソロモンデータフレームＴ１〜Ｔ（Ｋ−Ｍ）に再構成され、ユーザデータフレームＢ１〜Ｂ（Ｋ−Ｍ）と共に、ページＰ１〜Ｐ（Ｋ−Ｍ）に格納される。残りのページＰ（Ｋ−Ｍ＋１）〜ＰＫには、第１リードソロモンパリティデータＲＳ１をリードソロモン符号化することで生成されたＭ個の第２リードソロモンデータフレームＵ１〜ＵＭよりなる第２リードソロモンパリティデータＲＳ２が、ユーザデータフレームＢ（Ｋ−Ｍ＋１）〜ＢＫと共に格納される。したがって、図３に示す誤り訂正符号では、ページ間方向において、ユーザデータＹＤにおけるエラーシンボルの位置（ページ）が分かっている場合にはＬ個のエラーシンボルを、エラーシンボルの位置（ページ）が分かっていない場合には（Ｌ／２）個（ただし、割り切れない場合には少数点以下は切り捨て）個のエラーシンボルを、誤り訂正することが可能であると共に、ページ間方向において、第１リードソロモンパリティデータＲＳ１におけるエラーシンボルの位置（ページ）が分かっている場合にはＭ個のエラーシンボルを、エラーシンボルの位置（ページ）が分かっていない場合には（Ｍ／２）個（ただし、割り切れない場合には少数点以下は切り捨て）個のエラーシンボルを、誤り訂正することが可能である。なお、第１リードソロモンパリティデータＲＳ１及び第２リードソロモンパリティデータＲＳ２の格納方法は、図３に例示する方法に限定されず、種々変形することが可能である。例えば、Ｐ１〜ＰＫの全てのページに対して第１リードソロモンパリティデータＲＳ１と第２リードソロモンパリティデータＲＳ２との両方を分散して格納することも可能である。その場合、各ページのＲＳパリティが格納される領域（以下、ＲＳパリティ領域という）のデータ長をＧとすると、各ページのＲＳパリティ領域におけるＧ（Ｋ−Ｍ／Ｋ）の領域に第１リードソロモンパリティデータＲＳ１が分散して格納され、各ページのＲＳパリティ領域における残りの領域Ｇ（Ｍ／Ｋ）に第２リードソロモンパリティデータＲＳ２が分散して格納される。
【００３５】
このように、本実施形態では、ユーザデータＹＤをバースト誤りから救済するための第１リードソロモンパリティデータＲＳ１と、第１リードソロモンパリティデータＲＳ１をバースト誤りから救済するための第２リードソロモンパリティデータＲＳ２との２つのページ間符号（冗長データ）を用いることで、ユーザデータＹＤを２段階に保護している。このような２段階の保護とすることで、ページ間符号（ＲＳ１，ＲＳ２）を専用のページやブロックではなくユーザデータＹＤと同一のページ内に格納した場合でも、ユーザデータＹＤに発生したバースト誤りを訂正することが可能となる。
【００３６】
なお、各ページＰ１〜ＰＫには、図２に示す例と同様に、ページ内符号として、それぞれのページに格納されているユーザデータフレームＢ１〜ＢＫ及び第１リードソロモンデータフレームＴ１〜Ｔ（Ｋ−Ｍ）又は第２リードソロモンデータフレームＵ１〜ＵＭをＢＣＨ符号やＬＤＰＣ符号等で誤り訂正符号化することで生成されたインラインＥＣＣパリティＩＥＰが格納される。
【００３７】
つづいて、本実施形態に係る符号化器１７（図１参照）について、図面を用いて詳細に説明する。図４は、本実施形態に係る符号化器の概略構成例を示すブロック図である。図５は、本説明におけるユーザデータＹＤのフレーム構成例を示す図である。図６〜図８は、符号化器１７が誤り訂正符号を生成する際の流れを説明するための図である。
【００３８】
図４に示すように、符号化器１７は、ライトバッファメモリ１０１と、第１のＲＳ符号化器１０２と、第２のＲＳ符号化器１０３と、パリティバッファメモリ１０４と、ＥＣＣ符号化器１０５とを備える。
【００３９】
例えば、制御部１１からの指示に従ってデータバッファ１２（図１参照）から符号化／復号部１４の符号化器１７に入力されたユーザデータＹＤは、ライトバッファメモリ１０１に蓄積される。ここで、図５に示すように、本説明におけるユーザデータＹＤは、第１のＲＳ符号化器１０２が符号化する際に必要なＫ個のユーザデータフレームＢ１〜ＢＫより構成されているものとする。
【００４０】
図６に示すように、第１のＲＳ符号化器１０２には、ライトバッファメモリ１０１内のユーザデータフレームＢ１〜ＢＫそれぞれから符号化シンボル単位のビット数（本説明では８ビット）ずつ抜き出して構成されたページ間データフレームＦ１〜Ｆ（Ｎ＿ｂ／８）が入力される。なお、図５と図６とでは、説明の都合上、ページ間方向とページ内方向とが入れ替わっている。また、図６では、１シンボルのビット数を８としているが、これは第１のＲＳ符号化器１０２で符号化に用いるリードソロモン符号の有限体の大きさに依存して変化する値であってよい。さらに、ユーザデータフレームＢ１〜ＢＫからページ間データフレームＦ１〜Ｆ（Ｎ＿ｂ／８）を構成する際にＮ＿ｂ／８が整数とならない場合には、Ｎ＿ｂ／８は少数点以下を繰り上げた整数に置き換えられる。その際、繰り上がりにより不足したビット又はシンボルについては、例えばゼロパディング等によって補填されてもよい。
【００４１】
第１のＲＳ符号化器１０２は、ライトバッファメモリ１０１から入力されたページ間データフレームＦ１〜Ｆ（Ｎ＿ｂ／８）に対し、それぞれＬシンボルずつのパリティで構成された計Ｌ×Ｎ＿ｂビットの第１リードソロモンパリティデータＲＳ１を生成する。なお、生成された第１リードソロモンパリティデータＲＳ１は、ページ内方向に沿って、ユーザデータフレームＢ１〜ＢＫそれぞれと同じシンボル数のＬ個の第１リードソロモンパリティフレームＲ１〜ＲＬを構成する。第１のＲＳ符号化器１０２で生成された第１リードソロモンパリティデータＲＳ１は、第２のＲＳ符号化器１０３に入力されると共に、パリティバッファメモリ１０４に格納される。
【００４２】
第２のＲＳ符号化器１０３は、入力された第１リードソロモンパリティデータＲＳ１に対し、Ｍシンボルの誤り訂正を可能にする第２リードソロモンパリティデータＲＳ２を生成する。具体的には、図７に示すように、第２のＲＳ符号化器１０３は、フレーム単位で入力された第１リードソロモンパリティデータＲＳ１をＱ分割することで、Ｑ個のページ間リードソロモンパリティフレームＳ１〜ＳＱを作成する。ここで、Ｑは、第１リードソロモンパリティデータＲＳ１の総ビット数Ｌ×Ｎ＿ｂを８×（Ｋ−Ｍ）で除算した値（Ｑ＝ＬＮ＿ｂ／８（Ｋ−Ｍ））である。なお、分母の８は、１シンボルを構成するビット数であり、Ｋは、１ブロックのページ数（又はユーザデータＹＤのフレーム数）であり、Ｍは、第２リードソロモンパリティデータＲＳ２を構成する第２リードソロモンデータフレームＵ１〜ＵＭのフレーム数である。ただし、１シンボルのビット数は第１リードソロモンパリティデータＲＳ１を構成する各シンボルのビット数と同じ数（８ビット）に限らず、別の数であってもよい。また、第２リードソロモンデータフレームＵ１〜ＵＭのフレーム数Ｍは、第１リードソロモンパリティフレームＲ１〜ＲＬのフレーム数Ｌと同じ数であってもよいし、異なる数であってもよい。例えば、ＭはＬ以下であってもよい。
【００４３】
さらに、ＬＮ＿ｂ／８（Ｋ−Ｍ）が整数とならない場合には、ＱはＬＮ＿ｂ／８（Ｋ−Ｍ）の少数点以下を繰り上げた整数に置き換えられる。その際、繰り上がりにより不足したビット又はシンボルについては、図７に示すように、例えばゼロパディング等によって補填されてもよい。
【００４４】
そして、第２のＲＳ符号化器１０３は、ページ間リードソロモンパリティフレームＳ１〜ＳＱそれぞれから符号化シンボル単位のビット数（本説明では８ビット）ずつ抜き出して構成された第１リードソロモンデータフレームＴ１〜Ｔ（Ｋ−Ｍ）に対し、それぞれＭシンボルずつのパリティで構成された計Ｍ×８×Ｑビットの第２リードソロモンパリティデータＲＳ２を生成する。なお、生成された第２リードソロモンパリティデータＲＳ２は、ページ内方向に沿って、第１リードソロモンデータフレームＴ１〜Ｔ（Ｋ−Ｍ）それぞれと同じシンボル数のＭ個の第２リードソロモンデータフレームＵ１〜ＵＭを構成する。第２のＲＳ符号化器１０３で生成された第２リードソロモンパリティデータＲＳ２は、パリティバッファメモリ１０４に格納される。その結果、パリティバッファメモリ１０４には、第１のＲＳ符号化器１０２からの第１リードソロモンパリティデータＲＳ１と、第２のＲＳ符号化器１０３からの第２リードソロモンパリティデータＲＳ２とが格納される。
【００４５】
ＥＣＣ符号化器１０５が符号化を実行する際には、図４に示すように、ライトバッファメモリ１０１からＥＣＣ符号化器１０５へ、ユーザデータＹＤがフレーム単位（ページ間データフレームＦ１〜Ｆ（Ｎ＿ｂ／８））で入力される。また、ＥＣＣ符号化器１０５には、パリティバッファメモリ１０４内の第１リードソロモンパリティデータＲＳ１及び第２リードソロモンパリティデータＲＳ２も入力される。具体的には、パリティバッファメモリ１０４内の第１リードソロモンパリティデータＲＳ１と第２リードソロモンパリティデータＲＳ２とが連接されて最終リードソロモンパリティデータＲＳ３が生成され、この最終リードソロモンパリティデータＲＳ３が、フレーム単位（第１リードソロモンデータフレームＴ１〜Ｔ（Ｋ−Ｍ）及び第２リードソロモンデータフレームＵ１〜ＵＭ）でＥＣＣ符号化器１０５に入力される。
【００４６】
ＥＣＣ符号化器１０５は、ライトバッファメモリ１０１から入力されたユーザデータＹＤと、パリティバッファメモリ１０４から入力された最終リードソロモンパリティデータＲＳ３とをフレーム単位で連接したフレームデータをＢＣＨ符号やＬＤＰＣ符号等で誤り訂正符号化することで、各フレームデータに対するインラインＥＣＣパリティＩＥＰを生成する。そして、ＥＣＣ符号化器１０５は、各フレームデータに、それぞれに対して生成したインラインＥＣＣパリティＩＥＰを連接することで、各フレームデータのＥＣＣフレームを生成し、生成したＥＣＣフレームを順次、メモリＩ／Ｆ１３へ出力する。これに対し、メモリＩ／Ｆ１３は、制御部１１からの指示に従い、ＥＣＣ符号化器１０５から入力されたＥＣＣフレームを不揮発性メモリ２０における指定の物理アドレスに対応するページに書き込む。
【００４７】
次に、本実施形態に係る書込み時の動作について、図面を用いて詳細に説明する。図９は、本実施形態に係る書込み動作の概略例を示すフローチャートである。なお、図９では、簡略化のため、第１リードソロモンパリティデータＲＳ１をＲＳ１符号といい、第２リードソロモンパリティデータＲＳ２をＲＳ２符号という。
【００４８】
図９に示すように、本動作では、まず、ホストＩ／Ｆ１５を介して入力されたホスト３０からの書込み要求を受け付けた制御部１１が、例えば不図示のアドレス変換テーブルを参照することで、書込み要求で指定された論理アドレスに対応する物理アドレスを特定する（ステップＳ１０１）。また、制御部１１は、書込み要求と共にホスト３０から入力された書込み対象のユーザデータＹＤをデータバッファ１２に一時格納する（ステップＳ１０２）。
【００４９】
次に、制御部１１は、１ブロック分のユーザデータＹＤをデータバッファ１２から符号化器１７へ転送する（ステップＳ１０３）。符号化器１７へ転送された１ブロック分のユーザデータＹＤは、ライトバッファメモリ１０１（図４参照）に格納される。なお、１ブロック分のユーザデータＹＤは、第１のＲＳ符号化器１０２が符号化する際に必要なＫ個のユーザデータフレームＢ１〜ＢＫより構成されているものとする。
【００５０】
次に、符号化器１７において、第１のＲＳ符号化器１０２が、ライトバッファメモリ１０１からユーザデータＹＤのページ間データフレームＦ１〜Ｆ（Ｎ＿ｂ／８）を入力し、入力したページ間データフレームＦ１〜Ｆ（Ｎ＿ｂ／８）それぞれをリードソロモン符号化することで、それぞれＬシンボルずつのパリティで構成された計Ｌ×Ｎ＿ｂビットの第１リードソロモンパリティデータＲＳ１を生成する（ステップＳ１０４）。なお、生成された第１リードソロモンパリティデータＲＳ１は、第２のＲＳ符号化器１０３に入力されると共に、パリティバッファメモリ１０４に格納される。
【００５１】
次に、第２のＲＳ符号化器１０３が、入力された第１リードソロモンパリティデータＲＳ１をＱ分割することで、Ｑ個のページ間リードソロモンパリティフレームＳ１〜ＳＱを作成する（ステップＳ１０５）。つづいて、第２のＲＳ符号化器１０３は、ページ間リードソロモンパリティフレームＳ１〜ＳＱそれぞれから符号化シンボル単位のビット数（本説明では８ビット）ずつ抜き出して構成された第１リードソロモンデータフレームＴ１〜Ｔ（Ｋ−Ｍ）をリードソロモン符号化することで、それぞれＭシンボルずつのパリティで構成された計Ｍ×８×Ｑビットの第２リードソロモンパリティデータＲＳ２を生成する（ステップＳ１０６）。なお、生成された第２リードソロモンパリティデータＲＳ２は、パリティバッファメモリ１０４に格納される。
【００５２】
次に、ＥＣＣ符号化器１０５が、ライトバッファメモリ１０１内のユーザデータＹＤと、パリティバッファメモリ１０４内の第１リードソロモンパリティデータＲＳ１及び第２リードソロモンパリティデータＲＳ２とを入力し、入力したユーザデータＹＤと第１リードソロモンパリティデータＲＳ１又は第２リードソロモンパリティデータＲＳ２とをフレーム単位で連接してフレームデータを作成する（ステップＳ１０７）。つづいて、ＥＣＣ符号化器１０５は、作成したフレームデータをＢＣＨ符号やＬＤＰＣ符号等で誤り訂正符号化することで、各フレームデータに対するインラインＥＣＣパリティＩＥＰを生成する（ステップＳ１０８）。そして、ＥＣＣ符号化器１０５は、生成したインラインＥＣＣパリティＩＥＰを各フレームデータに連接することで、ＥＣＣフレームを生成する（ステップＳ１０９）。
【００５３】
このようにして生成されたＥＣＣフレームは、メモリＩ／Ｆ１３に入力される。メモリＩ／Ｆ１３は、制御部１１からの指示に従い、ＥＣＣ符号化器１０５から入力されたＥＣＣフレームを不揮発性メモリ２０における指定の物理アドレスに対応するページに書き込む（ステップＳ１１０）。
【００５４】
その後、制御部１１は、データバッファ１２に一時保持されている全てのユーザデータＹＤの不揮発性メモリ２０への書込みが完了したか否かを判定し（ステップＳ１１１）、完了している場合（ステップＳ１１１のＹＥＳ）、本動作が終了する。一方、完了していない場合（ステップＳ１１１のＮＯ）、ステップＳ１０３へリターンし、以降の動作が実行される。
【００５５】
つづいて、本実施形態に係る復号器１８（図１参照）について、図面を用いて詳細に説明する。図１０は、本実施形態に係る復号器の概略構成例を示すブロック図である。図１１は、本実施形態に係る復号器による復号の流れを説明するための図である。図１２〜図１４は、本実施形態に係る復号器による復号の流れの具体例を用いて説明するための図である。
【００５６】
図１０に示すように、復号器１８は、ＥＣＣ復号器１０６と、リードバッファメモリ１０７と、第１のＲＳ復号器１０８と、第２のＲＳ復号器１０９とを備える。
【００５７】
メモリＩ／Ｆ１３は、制御部１１からの指示に従って、不揮発性メモリ２０から対象のデータを読み出し、これにより読み出されたリードデータをＥＣＣ復号器１０６に入力する。なお、図１１に示すように、リードデータは、書込み時のＥＣＣフレームに対応するＫ個のリードＥＣＣフレームＥ１〜ＥＫで構成されている。それぞれのリードＥＣＣフレームＥ１〜ＥＫは、書込み時のＥＣＣフレームと同様に、ユーザデータＹＤと、第１リードソロモンパリティデータＲＳ１及び／又は第２リードソロモンパリティデータＲＳ２と、インラインＥＣＣパリティＩＥＰとで構成されている。
【００５８】
ＥＣＣ復号器１０６は、入力された各リードＥＣＣフレームＥ１〜ＥＫに対し、それぞれのインラインＥＣＣパリティＩＥＰを用いた誤り訂正処理を実施し、それにより得られた誤り訂正処理後のリードデータをリードバッファメモリ１０７に入力する。なお、インラインＥＣＣパリティＩＥＰを用いた誤り訂正処理によって誤り訂正できないシンボルが存在する場合、そのシンボルを含むリードＥＣＣフレームを特定するための情報が、例えばリードバッファメモリ１０７における所定の領域又は不図示のメモリに保持される。
【００５９】
リードバッファメモリ１０７は、誤り訂正処理後のリードデータ（及び誤り訂正できないシンボルを含むリードＥＣＣフレームを特定するための情報）を保持するほか、ＥＣＣ復号器１０６、第１のＲＳ復号器１０８及び第２のＲＳ復号器１０９それぞれに対し、必要なデータの入出力を実行する。
【００６０】
ここで、インラインＥＣＣパリティＩＥＰを用いた誤り訂正後のリードデータにエラーシンボルが存在しない場合、すなわち、インラインＥＣＣパリティＩＥＰを用いた誤り訂正によって元々のＥＣＣフレームが復元できた場合、リードバッファメモリ１０７内には、ライトデータであるユーザデータＹＤが復元されている。このようにして復元されたユーザデータＹＤは、例えばデータバッファ１２等で一時保持された後、ホストＩ／Ｆ１５を介してホスト３０へ送信される。
【００６１】
一方、リードＥＣＣフレームが消失している場合など、誤り訂正できないエラーシンボルが存在し、且つ、誤り訂正できないエラーシンボルを含むリードＥＣＣフレームの数が第２リードソロモンパリティデータＲＳ２で訂正可能なエラーシンボル数であるＭ個以下である場合、リードバッファメモリ１０７内のリードデータに含まれる第１リードソロモンパリティデータＲＳ１が、同じくリードバッファメモリ１０７内のリードデータに含まれる第２リードソロモンパリティデータＲＳ２を用いて誤り訂正される。
【００６２】
具体的には、リードバッファメモリ１０７内のリードＥＣＣフレームＥ１〜ＥＫに含まれる第１リードソロモンパリティデータＲＳ１及び第２リードソロモンパリティデータＲＳ２と、誤り訂正できないシンボルを含むリードＥＣＣフレームを特定するための情報とが、第１のＲＳ復号器１０８に入力される。第１のＲＳ復号器１０８は、誤り訂正できないシンボルを含むリードＥＣＣフレームを特定するための情報に基づき、エラーシンボルを含むリードＥＣＣフレームの第１リードソロモンデータフレームＴ１〜Ｔ（Ｋ−Ｍ）を、第２リードソロモンパリティデータＲＳ２を用いて誤り訂正する。そして、第２のＲＳ復号器１０９は、エラーシンボルを含むリードＥＣＣフレームのユーザデータフレームを、誤り訂正後の第１リードソロモンパリティデータＲＳ１を用いて誤り訂正する。その結果、リードバッファメモリ１０７内に、ライトデータであるユーザデータＹＤが復元される。
【００６３】
これを、図１２〜図１４に示す具体例を用いて説明する。図１２〜図１４に示す例では、誤り訂正処理後のリードデータが８個のリードＥＣＣフレームＥ１〜Ｅ８で構成され、これらのうちの６つのリードＥＣＣフレームＥ１〜Ｅ６に第１リードソロモンパリティデータＲＳ１が含まれ、残りの２つのリードＥＣＣフレームＥ７及びＥ８に第２リードソロモンパリティデータＲＳ２が含まれている。すなわち、図１２〜図１４に示す例では、第２リードソロモンパリティデータＲＳ２が２つの第２リードソロモンデータフレームＵ１及びＵ２で構成されている。その場合、第２リードソロモンパリティデータＲＳ２で訂正可能なエラーシンボル数Ｍは２である。また、図１２〜図１４に示す例では、８個のリードＥＣＣフレームＥ１〜Ｅ８のうち、２つのリードＥＣＣフレームＥ４及びＥ５がエラーシンボルを含むリードＥＣＣフレームである。なお、図１２〜図１４に示す例では、第１リードソロモンパリティデータＲＳ１で訂正可能なエラーシンボル数Ｌも２であるとする。
【００６４】
図１２〜図１４に例示する場合では、図１３に示すように、リードバッファメモリ１０７内のリードＥＣＣフレームＥ１〜Ｅ８のうち、第１リードソロモンパリティデータＲＳ１を構成する第１リードソロモンデータフレームＴ１〜Ｔ６と、第２リードソロモンパリティデータＲＳ２を構成する第２リードソロモンデータフレームＵ１及びＵ２とが、第１のＲＳ復号器１０８に入力される。また、第１のＲＳ復号器１０８には、誤り訂正できないシンボルを含むリードＥＣＣフレームＥ４及びＥ５を特定するための情報も入力される。第１のＲＳ復号器１０８は、誤り訂正できないシンボルを含むリードＥＣＣフレームＥ４及びＥ５を特定するための情報に基づき、入力された第１リードソロモンデータフレームＴ１〜Ｔ８に対して第２リードソロモンデータフレームＵ１及びＵ２を用いた誤り訂正を実行する。その結果、誤り訂正できないシンボルを含むリードＥＣＣフレームＥ４及びＥ５に対応する第１リードソロモンデータフレームＴ４及びＴ５が誤り訂正される。そして、第１のＲＳ復号器１０８は、エラーシンボルを含まない第１リードソロモンデータフレームＴ１〜Ｔ６で構成された第１リードソロモンパリティデータＲＳ１で、リードバッファメモリ１０７内のリードＥＣＣフレームＥ１〜Ｅ８における第１リードソロモンパリティデータＲＳ１を更新する。
【００６５】
このようにしてリードバッファメモリ１０７内の第１リードソロモンパリティデータＲＳ１が訂正されると、リードバッファメモリ１０７内のユーザデータＹＤを構成するユーザデータフレームＢ１〜ＢＫと、同じくリードバッファメモリ１０７内の第１リードソロモンパリティデータＲＳ１を構成する第１リードソロモンデータフレームＴ１〜Ｔ６とが、第２のＲＳ復号器１０９に入力される。また、第２のＲＳ復号器１０９には、誤り訂正できないシンボルを含むリードＥＣＣフレームＥ４及びＥ５を特定するための情報も入力される。第２のＲＳ復号器１０９は、誤り訂正された第１リードソロモンデータフレームＴ１〜Ｔ６を再構成することで、第１リードソロモンパリティフレームＲ１及びＲ２を生成する。そして、第２のＲＳ復号器１０９は、誤り訂正できないシンボルを含むリードＥＣＣフレームＥ４及びＥ５を特定するための情報に基づき、生成した第１リードソロモンパリティフレームＲ１及びＲ２を用いてユーザデータフレームＢ１〜ＢＫを誤り訂正する。その結果、リードバッファメモリ１０７内に、ライトデータであるユーザデータＹＤが復元される。
【００６６】
また、誤り訂正できないエラーシンボルを含むリードＥＣＣフレームの数が第２リードソロモンパリティデータＲＳ２で訂正可能なエラーシンボル数であるＭ個又は第１リードソロモンパリティデータＲＳ１で訂正可能なエラーシンボル数であるＬ個よりも多い場合、第１リードソロモンパリティデータＲＳ１を用いた誤り訂正と、インラインＥＣＣパリティＩＥＰを用いた誤り訂正とを交互に繰返し実行することで、ライトデータであるユーザデータＹＤを復元できる場合がある。
【００６７】
そこで本実施形態では、誤り訂正できないエラーシンボルを含むリードＥＣＣフレームの数がＭ個又はＬ個よりも多い場合、リードバッファメモリ１０７内のリードデータに対し、上述した第１のＲＳ復号器１０８による第２リードソロモンパリティデータＲＳ２を用いた第１リードソロモンパリティデータＲＳ１の誤り訂正及び第２のＲＳ復号器１０９による第１リードソロモンパリティデータＲＳ１を用いたユーザデータＹＤの誤り訂正と、ＥＣＣ復号器１０６によるインラインＥＣＣパリティＩＥＰを用いた誤り訂正とが、交互に繰返し実行される。このような繰返しの誤り訂正は、例えばユーザデータＹＤの復元に成功するまで継続される。ただし、ホスト３０からの読出し要求に対するレイテンシの増大化を回避するために、繰返しの回数に対して上限が設定されてもよい。
【００６８】
次に、本実施形態に係る読出し時の動作について、図面を用いて詳細に説明する。図１５は、本実施形態に係る読出し動作の概略例を示すフローチャートである。なお、図１５では、簡略化のため、第１リードソロモンパリティデータをＲＳ１符号といい、第２リードソロモンパリティデータをＲＳ２符号という。
【００６９】
図１５に示すように、本動作では、まず、ホストＩ／Ｆ１５を介して入力されたホスト３０からの読出し要求を受け付けた制御部１１が、例えば不図示のアドレス変換テーブルを参照することで、読出し要求で指定された論理アドレスに対応する物理アドレスを特定する（ステップＳ１２１）。そして、制御部１１は、特定した物理アドレスからのデータの読み出しをメモリＩ／Ｆ１３に指示し、これにより、特定した物理アドレスから読出し対象のデータがメモリＩ／Ｆ１３によって読み出される（ステップＳ１２２）。
【００７０】
メモリＩ／Ｆ１３によって読み出されたリードデータは、例えばリードＥＣＣフレーム単位でＥＣＣ復号器１０６に入力される。ＥＣＣ復号器１０６は、入力された各リードＥＣＣフレームに対し、それぞれのインラインＥＣＣパリティＩＥＰを用いた復号を実行し（ステップＳ１２３）、その復号結果として得られたリードＥＣＣフレームをリードバッファメモリ１０７に順次格納する。これにより、リードバッファメモリ１０７内には、インラインＥＣＣパリティＩＥＰを用いた誤り訂正後のリードデータが格納される。そして、ＥＣＣ復号器１０６は、ユーザデータＹＤの復号に成功したか否かを判断する（ステップＳ１２４）。
【００７１】
ステップＳ１２３の復号に成功した場合（ステップＳ１２４のＹＥＳ）、復号器１８は、リードバッファメモリ１０７内のユーザデータＹＤを出力する（ステップＳ１３１）。出力されたユーザデータＹＤは、例えばデータバッファ１２（図１参照）に一時保持された後、ホストＩ／Ｆ１５を介してホスト３０へ転送される。一方、復号に成功しなかった場合（ステップＳ１２４のＮＯ）、リードバッファメモリ１０７内の第１リードソロモンパリティデータＲＳ１及び第１リードソロモンパリティデータＲＳ２と、誤り訂正できないシンボルを含むリードＥＣＣフレームを特定するための情報とが、第１のＲＳ復号器１０８に入力され、第１のＲＳ復号器１０８において、第２リードソロモンパリティデータＲＳ２を用いた第１リードソロモンパリティデータＲＳ１の誤り訂正が実行される（ステップＳ１２５）。この誤り訂正により、リードバッファメモリ１０７内の第１リードソロモンパリティデータＲＳ１が誤り訂正後の第１リードソロモンパリティデータＲＳ１に書き換えられる。
【００７２】
つづいて、リードバッファメモリ１０７内の誤り訂正後の第１リードソロモンパリティデータＲＳ１及びユーザデータＹＤと、誤り訂正できないシンボルを含むリードＥＣＣフレームを特定するための情報とが、第２のＲＳ復号器１０９に入力され、第２のＲＳ復号器１０９において、誤り訂正後の第１リードソロモンパリティデータＲＳ１を用いたユーザデータＹＤの復号が実行される（ステップＳ１２６）。そして、第２のＲＳ復号器１０９は、ユーザデータＹＤの復号に成功したか否かを判断する（ステップＳ１２７）。なお、ステップＳ１２６の復号により、リードバッファメモリ１０７内のユーザデータＹＤが誤り訂正後のユーザデータＹＤに書き換えられる。
【００７３】
ステップＳ１２６の復号に成功した場合（ステップＳ１２７のＹＥＳ）、復号器１８は、ステップＳ１３１へ進み、上述と同様に、リードバッファメモリ１０７内のユーザデータＹＤを出力する。一方、復号に成功しなかった場合（ステップＳ１２７のＮＯ）、復号器１８は、第１リードソロモンパリティデータＲＳ１及び第２リードソロモンパリティデータＲＳ２を用いた復号とインラインＥＣＣパリティＩＥＰを用いた復号との繰返し回数が予め設定しておいた上限回数に達したか否かを判定する（ステップＳ１２８）。繰返し回数が上限回数に達している場合（ステップＳ１２８のＹＥＳ）、復号器１８は、復号失敗を例えば制御部１１へ通知し（ステップＳ１２９）、本動作を終了する。なお、復号失敗が通知された制御部１１は、例えばホスト３０へ読出しエラーを返す。一方、繰返し回数が上限回数に達していない場合（ステップＳ１２８のＮＯ）、リードバッファメモリ１０７内のリードデータが例えばリードＥＣＣフレーム単位で再度、ＥＣＣ復号器１０６に入力され、ＥＣＣ復号器１０６において、入力された各リードＥＣＣフレームに対するインラインＥＣＣパリティＩＥＰを用いた復号が実行される（ステップＳ１３０）。なお、ステップＳ１３０の復号結果として得られたリードＥＣＣフレームは、リードバッファメモリ１０７に順次格納される。
【００７４】
その後、本動作はステップＳ１２５へリターンし、以降、ユーザデータＹＤの復号に成功するまで（ステップＳ１２７のＹＥＳ）、若しくは、繰返し回数が上限回数に達するまで（ステップＳ１２８のＹＥＳ）、第２リードソロモンパリティデータＲＳ２を用いた第１リードソロモンパリティデータＲＳ１の誤り訂正（ステップＳ１２５）、誤り訂正後の第１リードソロモンパリティデータＲＳ１を用いたユーザデータＹＤの復号（ステップＳ１２６）、及び、誤り訂正後のインラインＥＣＣパリティＩＥＰを用いたユーザデータＹＤの復号（ステップＳ１３０）が繰返し実行される。
【００７５】
以上のように、本実施形態によれば、各ブロックＢＬＫに書き込まれるユーザデータＹＤに対して生成された第１リードソロモンパリティデータＲＳ１及び第２リードソロモンパリティデータＲＳ２が、それぞれのユーザデータＹＤと同じブロックＢＬＫ内に格納される。それにより、冗長データ用に確保されるページ数又はブロック数を削減しつつページ間方向の誤り訂正を可能にするメモリシステムを実現することができる。
【００７６】
（第２の実施形態）
次に、第２の実施形態に係るメモリシステムについて、図面を参照して詳細に説明する。第１の実施形態で例示した符号化処理を含む書込み動作は、ホスト３０からの書込み要求に応じて実行される書込み動作に限られず、例えば、メモリシステム１内で発生したガベージコレクションやリフレッシュ等のイベントの実行において発生する書込み要求に対する書込み動作に対しても適用することが可能である。そこで本実施形態では、ホスト３０から書込み要求を受信した際の書込み動作と、メモリシステム１内で発生したイベントの実行において発生する書込み要求に対する書込み動作とで、異なる書込み動作を実行する場合について、例を挙げて説明する。
【００７７】
なお、以下の説明では、メモリシステム１内で発生したイベントとしてガベージコレクションを例示するが、これに限定されず、リフレッシュ等、書込み対象のデータとして１ブロック分のデータが予め揃っている状態での書込み動作の実行を伴う種々のイベントであってよい。また、本実施形態では、明確化のため、ホスト３０から書込み要求を受信した際の書込み動作を第１書込みモードの書込み動作といい、ガベージコレクションの実行において発生する書込み要求に対する書込み動作を第２書込みモードの書込み動作という。第１書込みモードの書込み動作は、例えば通常の書込み動作であってよい。一方、第２書込みモードの書込み動作は、第１の実施形態で例示した書込み動作である。その他、以下の説明において、第１の実施形態と同様の構成及び動作については、それらを引用することで、重複する説明を省略する。
【００７８】
本実施形態に係るメモリシステムは、第１の実施形態において図１を用いて説明したメモリシステム１と同様の構成であってよい。ただし、本実施形態において、書込み動作と読み出し動作とを実行するための概略構成は、図１６に示すブロック構成のようになる。
【００７９】
図１６に示すように、本実施形態に係るメモリシステムは、制御部１１と、符号化／復号部１４と、メモリＩ／Ｆ１３と、不揮発性メモリ２０と、ブロック単位書込みモード管理部２０１とを備える。これらのうち、制御部１１、符号化／復号部１４、メモリＩ／Ｆ１３及び不揮発性メモリ２０は、図１に示すこれらと同様であってよい。
【００８０】
ブロック単位書込みモード管理部２０１は、例えば、ＲＡＭや不揮発性メモリ２０における一部の領域で構成されており、不揮発性メモリ２０の各ブロックＢＬＫについて、第１書込みモードと第２書込みモードとのいずれの書込みモードで書込みが実行されたかを管理する。そこで、ブロック単位書込みモード管理部２０１は、例えば各ブロックＢＬＫを特定するための物理アドレスに対応付けて、第１書込みモードと第２書込みモードとを特定するための識別情報を管理する。
【００８１】
図１７は、本実施形態に係る書込み時の動作のメインフローの一例を示すフローチャートである。図１７は、本実施形態に係る第２書込みモードの書込み動作の一例を示すフローチャートである。
【００８２】
図１７に示すように、本実施形態では、例えば制御部１１が書込み要求を待機する（ステップＳ２０１のＮＯ）。なお、本説明における書込み要求は、上述したように、ホスト３０からの書込み要求、又は、ガベージコレクションの実行中において発生する書込み要求である。
【００８３】
書込み要求があると（ステップＳ２０１のＹＥＳ）、制御部１１は、その書込み要求がホスト３０からの書込み要求であるか否かを判断する（ステップＳ２０２）。ホスト３０からの書込み要求である場合（ステップＳ２０２のＹＥＳ）、制御部１１は、第１書込みモードでの書込み動作を符号化／復号部１４及びメモリＩ／Ｆ１３へ指示し、これにより、第１書込みモードでの書込み動作が実行される（ステップＳ２０３）。なお、第１書込みモードでの書込み動作では、例えば、符号化器１７は、図２に例示した誤り訂正符号を生成する。メモリＩ／Ｆ１３は、符号化器１７によって生成された誤り訂正符号を、書込み要求で指定された論理アドレスに対応する物理アドレスによって特定されるページへ書き込む。そして、制御部１１は、書込み先となったブロックＢＬＫの書込みモードが第１書込みモードであることを、ブロック単位書込みモード管理部２０１に設定し（ステップＳ２０４）、ステップＳ２０７へ進む。
【００８４】
一方、書込み要求がホスト３０からの書込み要求ではなかった場合（ステップＳ２０２のＮＯ）、すなわち、ガベージコレクションの実行において発生した書込み要求であった場合、制御部１１は、第２書込みモードでの書込み動作を符号化／復号部１４及びメモリＩ／Ｆ１３へ指示し、これにより、第２書込みモードでの書込み動作が実行される（ステップＳ２０５）。第２書込みモードでの書込み動作では、例えば、ガベージコレクションにおいて、有効データの収集対象とするブロック（以下、転記元ブロックという）と、収集した有効データの転記先とするブロック（以下、転記先ブロックという）とを特定し、転記元ブロックから収集した１ブロック分ごとの有効データに対して、第１の実施形態において図９を用いて説明した書込み動作と同様の動作が実行される。そして、制御部１１は、転記先ブロックの書込みモードが第２書込みモードであることを、ブロック単位書込みモード管理部２０１に設定し（ステップＳ２０６）、ステップＳ２０７へ進む。
【００８５】
ステップＳ２０７では、例えば制御部１１が本動作を終了するか否かを判断し、終了する場合（ステップＳ２０７のＹＥＳ）、本動作が終了する。一方、終了しない場合（ステップＳ２０７のＮＯ）、本動作がステップＳ２０１へリターンする。
【００８６】
以上のように、本実施形態によれば、１ブロック分のデータが揃っている場合には第１の実施形態で例示した第２書込みモードの書込み動作を実行し、揃っていない場合には例えば通常の書込み動作である第１書込みモードの書込み動作を実行する。それにより、１ブロック分のユーザデータＹＤがデータバッファ１２に確保されるまで不揮発性メモリ２０への書込みを待機する必要がなくなるため、書込み処理をより迅速に行なうことが可能となる。
【００８７】
なお、その他の構成、動作及び効果は、上述した実施形態と同様であるため、ここでは詳細な説明を省略する。
【００８８】
（第３の実施形態）
次に、第３の実施形態に係るメモリシステムについて、図面を参照して詳細に説明する。なお、以下の説明において、第１の実施形態と同様の構成及び動作については、それらを引用することで、重複する説明を省略する。
【００８９】
第１及び第２の実施形態で例示した符号化処理を含む書込み動作では、各ブロックＢＬＫに書き込まれるユーザデータＹＤに対して生成した第１リードソロモンパリティデータＲＳ１及び第２リードソロモンパリティデータＲＳ２が、それぞれのユーザデータＹＤと同じブロックＢＬＫ内に格納されていた。これに対し、第３の実施形態では、各ブロックＢＬＫに書き込まれるユーザデータＹＤに対して生成した第１リードソロモンパリティデータＲＳ１及び第２リードソロモンパリティデータＲＳ２が、ユーザデータＹＤが格納されるブロックＢＬＫとは異なるブロックＢＬＫに格納される。これを、図１８の例を用いて説明する。
【００９０】
図１８には、４つのブロックＢＬＫ１〜ＢＬＫ４に対して順次、ユーザデータＹＤを書き込む場合が例示されている。図１８に示すように、本実施形態では、先頭のブロックＢＬＫ１に格納されるユーザデータＹＤ１に対しては、第１の実施形態と同様の方法により、第１リードソロモンパリティデータＲＳ１１及び第２リードソロモンパリティデータＲＳ２１が生成される。ただし、第３の実施形態では、ユーザデータＹＤ１に対して生成された第１リードソロモンパリティデータＲＳ１１及び第２リードソロモンパリティデータＲＳ２１が、ユーザデータＹＤ１と同一のブロックＢＬＫ１ではなく、次のブロックＢＬＫ２に格納される。同様に、ブロックＢＬＫ２に格納されるユーザデータＹＤ２に対して作成された第１リードソロモンパリティデータＲＳ１２及び第２リードソロモンパリティデータＲＳ２２も次のブロックＢＬＫ３に格納され、ブロックＢＬＫ３に格納されるユーザデータＹＤ３に対して作成された第１リードソロモンパリティデータＲＳ１３及び第２リードソロモンパリティデータＲＳ２３も次のブロックＢＬＫ４に格納される。ただし、最終のブロックＢＬＫ４に格納されるユーザデータＹＤ４に対しては、例えば図２を用いて説明した誤り訂正符号と同様にして第１リードソロモンパリティデータＲＳ１４が作成され、この第１リードソロモンパリティデータＲＳ１４がユーザデータＹＤ４と同じブロックＢＬＫ４内でユーザデータＹＤ４とは別に確保されたページＰ（Ｋ−Ｌ＋１）〜ＰＫに格納される。
【００９１】
このように、本実施形態では、最終以外のブロックＢＬＫに格納されるユーザデータＹＤに対しては、第１の実施形態において図３を用いて説明した符号化と同様の符号化（第２の実施形態における第２書込みモードに相当）が実行され、これにより生成された第１リードソロモンパリティデータＲＳ１及び第２リードソロモンパリティデータＲＳ２が次のブロックＢＬＫに格納される。一方、最終のブロックＢＬＫに格納されるユーザデータＹＤに対しては、第１の実施形態において図２を用いて説明した符号化と同様の符号化（第２の実施形態における第１書込みモードに相当）が実行され、これにより生成された第１リードソロモンパリティデータＲＳ１が最終のブロックＢＬＫ４内で確保された専用のページに格納される。
【００９２】
なお、最後のブロックＢＬＫとは、例えばメモリシステムの電源やメモリシステムとホスト３０との接続がオフされた際に書込み先として選択されているブロックＢＬＫ等であってよい。
【００９３】
また、先頭のブロックＢＬＫと２番目以降のブロックＢＬＫとで各ページＰ１〜ＰＫに割り当てるユーザデータＹＤのデータ長を変えない場合、先頭のブロックＢＬＫの各ページＰ１〜ＰＫに格納されるＥＣＣフレームには、第１リードソロモンデータフレームＴ１〜Ｔ（Ｋ−Ｍ）または第２リードソロモンデータフレームＵ１〜ＵＭ分の空き領域ＯＰＴが発生する。そこで本実施形態では、空き領域ＯＰＴに特定の値のダミーデータが格納されてもよいし、先頭のブロックＢＬＫに格納されるユーザデータＹＤに対して生成されるインラインＥＣＣパリティＩＥＰのパリティ長を空き領域ＯＰＴ分増やすことで空き領域ＯＰＴを埋めてもよい。
【００９４】
このような本実施形態に係るメモリシステムは、第１の実施形態において図１を用いて説明したメモリシステム１と同様の構成であってよい。また、書込み動作と読み出し動作とを実行するための概略構成は、第２の実施形態において図１６に例示したブロック構成と同様であってよい。ただし、本実施形態では、符号化器１７が、図１９に示す符号化器２７に置き換えられ得る。
【００９５】
図１９に示すように、符号化器２７は、図４に示した符号化器１７と同様の構成において、パリティバッファメモリ１０４が、第１セレクタ３０１と、第２セレクタ３０２と、セレクタ制御部３０３と、第１パリティバッファメモリ３０４と、第２パリティバッファメモリ３０５とに置き換えられている。
【００９６】
第１パリティバッファメモリ３０４及び第２パリティバッファメモリ３０５それぞれは、第１の実施形態におけるパリティバッファメモリ１０４と同様に、第１のＲＳ符号化器１０２から第１セレクタ３０１を介して入力された第１リードソロモンパリティデータＲＳ１と、第２のＲＳ符号化器１０３から第１セレクタ３０１を介して入力された第２リードソロモンパリティデータＲＳ２とを一時保持する。また、第１パリティバッファメモリ３０４及び第２パリティバッファメモリ３０５それぞれは、保持している第１リードソロモンパリティデータＲＳ１及び第２リードソロモンパリティデータＲＳ２を第２セレクタ３０２を介してＥＣＣ符号化器１０５に入力する。
【００９７】
セレクタ制御部３０３は、例えば不図示のカウンタ又はフラグメモリ等を有しており、カウンタのカウント値やフラグメモリのフラグの状態等に基づいて、第１セレクタ３０１の出力先を第１パリティバッファメモリ３０４と第２パリティバッファメモリ３０５とのうちから交互に選択する。同様に、セレクタ制御部３０３は、例えばカウンタのカウント値やフラグメモリのフラグの状態等に基づいて、第２セレクタ３０２の入力元を第１パリティバッファメモリ３０４と第２パリティバッファメモリ３０５とのうちから交互に選択する。
【００９８】
具体例としては、セレクタ制御部３０３は、奇数番目に使用するブロックＢＬＫに格納されるユーザデータＹＤに対して作成された第１リードソロモンパリティデータＲＳ１及び第２リードソロモンパリティデータＲＳ２が第１パリティバッファメモリ３０４に入力され、偶数番目に使用するブロックＢＬＫに格納されるユーザデータＹＤに対して作成された第１リードソロモンパリティデータＲＳ１及び第２リードソロモンパリティデータＲＳ２が第１パリティバッファメモリ３０４に入力されるように、第１セレクタ３０１を制御する。
【００９９】
一方、セレクタ制御部３０３は、奇数番目に使用するブロックＢＬＫに格納するＥＣＣフレームを作成する際には第２パリティバッファメモリ３０５に保持されている第１リードソロモンパリティデータＲＳ１及び第２リードソロモンパリティデータＲＳ２がＥＣＣ符号化器１０５に入力され、偶数番目に使用するブロックＢＬＫに格納するＥＣＣフレームを作成する際には第１パリティバッファメモリ３０４に保持されている第１リードソロモンパリティデータＲＳ１及び第２リードソロモンパリティデータＲＳ２がＥＣＣ符号化器１０５に入力されるように、第２セレクタ３０２を制御する。
【０１００】
このようにして、第１パリティバッファメモリ３０４及び第２パリティバッファメモリ３０５を交互に切り替えて使用することで、各ブロックＢＬＫに書き込まれるユーザデータＹＤに対して生成した第１リードソロモンパリティデータＲＳ１及び第２リードソロモンパリティデータＲＳ２を、ユーザデータＹＤが格納されるブロックＢＬＫの次のブロックＢＬＫ内に格納することが可能となる。なお、第２セレクタ３０２を介してＥＣＣ符号化器１０５へ出力された第１リードソロモンパリティデータＲＳ１及び第２リードソロモンパリティデータＲＳ２は、順次破棄されてもよい。
【０１０１】
以上のように、本実施形態によれば、各ブロックＢＬＫに書き込まれるユーザデータＹＤに対して生成した第１リードソロモンパリティデータＲＳ１及び第２リードソロモンパリティデータＲＳ２が、ユーザデータＹＤが格納されるブロックＢＬＫの次のブロックＢＬＫ内に格納される。それにより、１ブロック分のユーザデータＹＤがデータバッファ１２に確保される前に、前のブロックＢＬＫに格納されるユーザデータＹＤに対して作成された第１リードソロモンパリティデータＲＳ１及び第２リードソロモンパリティデータＲＳ２を使用して次のブロックＢＬＫに書き込むＥＣＣフレームの作成及び作成したＥＣＣフレームの不揮発性メモリ２０への書込みを実行することが可能となるため、１ブロック分のユーザデータＹＤを確保されるまで不揮発性メモリ２０への書込みを待機する時間を省略することが可能となる。その結果、書込み処理をより迅速に行なうことが可能となる。
【０１０２】
なお、その他の構成、動作及び効果は、上述した実施形態と同様であるため、ここでは詳細な説明を省略する。
【０１０３】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１０４】
１…メモリシステム、１０…メモリコントローラ、１１…制御部、１２…データバッファ、１３…メモリＩ／Ｆ、１４…符号化／復号部、１５…ホストＩ／Ｆ、１６…内部バス、１７，２７…符号化器、１８…復号器、２０…不揮発性メモリ、３０…ホスト、１０１…ライトバッファメモリ、１０２…第１のＲＳ符号化器、１０３…第２のＲＳ符号化器、１０４…パリティバッファメモリ、１０５…ＥＣＣ符号化器、１０６…ＥＣＣ復号器、１０７…リードバッファメモリ、１０８…第１のＲＳ復号器、１０９…第２のＲＳ復号器、２０１…ブロック単位書込みモード管理部、３０１…第１セレクタ、３０２…第２セレクタ、３０３…セレクタ制御部、３０４…第１パリティバッファメモリ、３０５…第２パリティバッファメモリ、Ｂ１〜ＢＫ…ユーザデータフレーム、ＢＬＫ，ＢＬＫ１〜ＢＬＫ４…ブロック、Ｅ１〜ＥＫ…リードＥＣＣフレーム、Ｆ１〜Ｆ（Ｎ＿ｂ／８）…ページ間データフレーム、ＩＥＰ…インラインＥＣＣパリティ、ＯＰＴ…空き領域、Ｐ１〜ＰＫ…ページ、Ｒ１〜ＲＬ…第１リードソロモンパリティフレーム、ＲＳ…リードソロモンパリティデータ、ＲＳ１…第１リードソロモンパリティデータ、ＲＳ２…第２リードソロモンパリティデータ、ＲＳ３…最終リードソロモンパリティデータ、Ｓ１〜ＳＱ…ページ間リードソロモンパリティフレーム、Ｔ１〜Ｔ（Ｋ−Ｍ）…第１リードソロモンデータフレーム、Ｕ１〜ＵＭ…第２リードソロモンデータフレーム、ＹＤ…ユーザデータ。
【図１】
2019168897.tif 000003
【図２】
2019168897.tif 000004
【図３】
2019168897.tif 000005
【図４】
2019168897.tif 000006
【図５】
2019168897.tif 000007
【図６】
2019168897.tif 000008
【図７】
2019168897.tif 000009
【図８】
2019168897.tif 000010
【図９】
2019168897.tif 000011
【図１０】
2019168897.tif 000012
【図１１】
2019168897.tif 000013
【図１２】
2019168897.tif 000014
【図１３】
2019168897.tif 000015
【図１４】
2019168897.tif 000016
【図１５】
2019168897.tif 000017
【図１６】
2019168897.tif 000018
【図１７】
2019168897.tif 000019
【図１８】
2019168897.tif 000020
【図１９】
2019168897.tif 000021