(57)【要約】【課題】回路規模を削減した復号装置を得ること。【解決手段】データと誤り検出符号と最大訂正能力をＴビットとする誤り訂正符号とで構成される符号語に基づいて誤り訂正処理を行う復号装置であって、符号語に基づいて前記符号語に基づいて、少なくとも一部の処理でＪ（Ｊは１以上Ｔ未満の整数）ビット誤りまでに対応可能な演算器を用いた誤り訂正処理を行う誤り訂正処理部と、誤り訂正処理の開始時に誤り数期待値を初期値Ｉ（Ｉは１以上Ｔ未満の整数）とし、設定した誤り数期待値に対応する演算を行うよう誤り訂正処理部を制御し、誤り検出符号に基づき誤り検出部により誤り訂正後のデータに誤りが検出されなかった場合処理を終了し、誤り訂正後のデータに誤りが検出された場合、誤り数期待値を増加させて演算を行うよう誤り訂正処理部を制御する動作を、誤り検出部により誤りが検出されなくなるまでまたは誤り数期待値がＴビットとなるまで繰り返す。【選択図】図１
2013069377.tif 000002
【特許請求の範囲】
【請求項１】
データと、前記データに対する誤り検出符号と、前記データおよび前記誤り検出符号とに基づいて生成された最大訂正能力をＴビットとする誤り訂正符号と、で構成される符号語に基づいて前記データの誤り訂正処理を行う復号装置における復号方法であって、
前記復号装置は、
前記符号語に基づいて、Ｔビット以下である誤り数期待値Ｘビットまでを上限とした誤り訂正処理を行う誤り訂正処理部と、
前記誤り訂正処理により訂正された前記データと前記誤り検出符号とに基づいて誤り訂正後の前記データの誤りを検出する誤り検出部と、
前記誤り訂正処理部と前記誤り検出部を制御する復号制御部と、
を備え、
前記復号制御部が、前記誤り数期待値Ｘに１以上Ｔ未満の整数であるＩを代入する第１のステップと、
前記誤り訂正処理部が、前記誤り数期待値Ｘまでの前記符号語の訂正処理を実行する第２のステップと、
前記誤り検出部が、前記訂正処理後の前記データおよび前記誤り検出符号の誤りを検出する第３のステップと、
前記誤り検出部が、誤り訂正後の前記データおよび誤り検出符号に誤りが検出されなかった場合は誤り訂正処理を終了し、誤りが検出された場合は前記誤り数期待値Ｘに１以上Ｔ未満の整数であるＡを加える第４のステップと、
を含み、
前記第２、３および４のステップを１サイクルとし、前記第４のステップの後に次のサイクルの前記第２、３および４のステップを実行することを、前記誤り検出部により誤りが検出されなくなるまでまたは誤り数期待値がＴビットとなるまで繰り返す
ことを特徴とする復号方法。
【請求項２】
前記第２のステップは、
Ｎ（Ｎは１以上２×Ｔ未満の整数）個以下の演算器を用いてシンドロームを計算するシンドローム計算ステップと、
前記符号語と前記シンドロームに基づいてＭ（Ｍは１以上Ｔ未満の整数）個以下の演算器を用いて誤り位置多項式演算を行う誤り位置多項式演算ステップと、
前記誤り位置多項式演算の結果に基づいてＬ（Ｌは１以上Ｔ未満の整数）個以下の演算器を用いて前記データの誤り位置を求める誤り位置計算ステップと、
を含むことを特徴とする請求項１に記載の復号方法。
【請求項３】
前記誤り位置多項式演算が正常に終了できないと判定された場合に、実行中のサイクルの後続の処理を実施せずに次のサイクルの処理へ移行する、ことを特徴とする請求項２に記載の復号方法。
【請求項４】
前記誤り位置計算ステップにより特定された誤り位置が前記符号語に対応する位置でない場合に、実行中のサイクルの後続の処理を実施せずに次のサイクルの処理へ移行する、ことを特徴とする請求項２または３に記載の復号方法。
【請求項５】
前記誤り位置多項式計算ステップで計算した解の個数と前記誤り位置計算ステップで特定された誤り位置の個数とが一致しない場合に、実行中のサイクルの後続の処理を実施せずに次のサイクルの処理へ移行する、ことを特徴とする請求項２、３または４に記載の復号方法。
【請求項６】
前記シンドローム計算ステップでは、計算したシンドロームをシンドローム記憶部に記憶し、同一の前記データに対応する２回目以降のシンドローム計算では、前記シンドローム記憶部に記憶されたシンドロームを用いる、ことを特徴とする請求項２乃至５のいずれか１つに記載の復号方法。
【請求項７】
前記誤り位置多項式演算ステップでは、前記誤り位置多項式演算の演算過程で求めた次のサイクルで使用可能な情報を再利用情報として記憶部に記憶し、同一の前記データに対応する２回目以降の前記誤り位置多項式演算では、前記記憶部に記憶された前記再利用情報を用いて前記誤り位置多項式演算を行う、ことを特徴とする請求項２乃至５のいずれか１つに記載の複合訂正方法。
【請求項８】
前記シンドローム計算ステップと前記誤り位置多項式演算ステップと前記誤り位置計算ステップとのうち２つ以上のステップで演算器を共有する、ことを特徴とする請求項２乃至６のいずれか１つに記載の復号方法。
【請求項９】
データと、前記データに対する誤り検出符号と、前記データおよび前記誤り検出符号とに基づいて生成された最大訂正能力をＴビットとする誤り訂正符号と、で構成される符号語に基づいて前記データの誤り訂正処理を行う復号装置であって、
前記符号語に基づいて、Ｔビット以下である誤り数期待値Ｘビットまでを上限とした誤り訂正処理を行う誤り訂正処理部と、
前記誤り訂正処理により訂正された前記データと前記誤り検出符号とに基づいて誤り訂正後の前記データの誤りを検出する誤り検出部と、
前記誤り訂正処理部と前記誤り検出部を制御する復号制御部と、
を備え、
前記復号制御部は、
前記誤り数期待値Ｘに１以上Ｔ未満の整数であるＩを代入する第１の処理と、前記誤り訂正処理部に対して、前記誤り数期待値Ｘまでの前記符号語の訂正処理を実行するよう制御する第２の処理と、前記誤り検出部に対して、前記訂正処理後の前記データおよび前記誤り検出符号の誤りを検出するよう制御する第３の処理と、前記誤り検出部により誤り訂正後の前記データおよび誤り検出符号に誤りが検出されなかった場合は誤り訂正処理を終了し、誤りが検出された場合は前記誤り数期待値Ｘに１以上Ｔ未満の整数であるＡを加える第４の処理と、を実行し、前記第２、３および４の処理を１サイクルとし、前記第４の処理の後に次のサイクルの前記第２、３および４の処理を実行することを、前記誤り検出部により誤りが検出されなくなるまでまたは誤り数期待値がＴビットとなるまで繰り返す、
ことを特徴とする復号装置。
【請求項１０】
前記誤り訂正処理部は、
Ｎ（Ｎは１以上２×Ｔ未満の整数）個以下の演算器を用いてシンドロームを計算するシンドローム計算部と、
前記符号語と前記シンドロームに基づいてＭ（Ｍは１以上Ｔ未満の整数）個以下の演算器を用いて誤り位置多項式演算を行うことが可能な誤り位置多項式演算部と、
前記誤り位置多項式演算の結果に基づいてＬ（Ｌは１以上Ｔ未満の整数）個以下の演算器を用いて前記データの誤り位置を求める誤り位置計算部と、
を備えることを特徴とする請求項９に記載の復号装置。
【請求項１１】
前記誤り位置多項式演算部により前記誤り位置多項式演算が正常に終了できないと判定された場合に、実行中のサイクルの後続の処理を実施せずに次のサイクルの処理へ移行する、ことを特徴とする請求項１０に記載の復号装置。
【請求項１２】
前記復号制御部により前記誤り位置計算部により特定された誤り位置が前記符号語に対応する位置でないと判定された場合に、実行中のサイクルの後続の処理を実施せずに次のサイクルの処理へ移行する、ことを特徴とする請求項９または１０に記載の復号装置。
【請求項１３】
前記復号制御部により前記誤り位置多項式で計算した解の個数と前記誤り位置計算部により特定された誤り位置の個数とが一致しないと判定された場合に、実行中のサイクルの後続の処理を実施せずに次のサイクルの処理へ移行する、ことを特徴とする請求項９、１０または１１に記載の復号装置。
【請求項１４】
前記シンドローム計算部は、シンドローム記憶部を備え、計算したシンドロームを前記シンドローム記憶部に記憶し、同一の前記データに対応する２回目以降のシンドローム計算では、前記シンドローム記憶部に記憶されたシンドロームを用いる、ことを特徴とする請求項９乃至１２のいずれか１つに記載の復号装置。
【請求項１５】
前記誤り位置多項式演算部は、記憶部を備え、前記誤り位置多項式演算の演算過程で求めた次のサイクルで使用可能な情報を再利用情報として前記記憶部に記憶し、同一の前記データに対応する２回目以降の前記誤り位置多項式演算では、前記記憶部に記憶された前記再利用情報を用いて前記誤り位置多項式演算を行う、ことを特徴とする請求項９乃至１２のいずれか１つに記載の復号装置。
【請求項１６】
前記シンドローム計算部と前記誤り位置多項式演算部と前記誤り位置計算部とのうち２つ以上で演算器を共有する、ことを特徴とする請求項９乃至１２のいずれか１つに記載の復号装置。
【請求項１７】
メモリ部と、
前記記憶部に書き込むデータに基づいて誤り検出符号を生成し、前記データと当該データに対応する前記誤り検出符号とに基づいて誤り訂正符号を生成する符号化部と、
前記データと前記誤り検出符号と前記誤り訂正符号とを前記記憶部へ書き込み、前記記憶部に書き込まれたデータと当該データに対応する前記誤り検出符号および前記誤り訂正符号とを読み出すメモリ制御部と、
前記記憶部から読み出されたデータと当該データに対応する前記誤り検出符号および前記誤り訂正符号とで構成される符号語を復号する復号化部と、
を備え、
前記復号化部は、
前記符号語に基づいて、Ｔビット以下である誤り数期待値Ｘビットまでを上限とした誤り訂正処理を行う誤り訂正処理部と、
前記誤り訂正処理により訂正された前記データと前記誤り検出符号とに基づいて誤り訂正後の前記データの誤りを検出する誤り検出部と、
前記誤り訂正処理部と前記誤り検出部を制御する復号制御部と、
を備え、
前記復号制御部は、
前記誤り数期待値Ｘに１以上Ｔ未満の整数であるＩを代入する第１の処理と、前記誤り訂正処理部に対して、前記誤り数期待値Ｘまでの前記符号語の訂正処理を実行するよう制御する第２の処理と、前記誤り検出部に対して、前記訂正処理後の前記データおよび前記誤り検出符号の誤りを検出するよう制御する第３の処理と、前記誤り検出部により誤り訂正後の前記データおよび誤り検出符号に誤りが検出されなかった場合は誤り訂正処理を終了し、誤りが検出された場合は前記誤り数期待値Ｘに１以上Ｔ未満の整数であるＡを加える第４の処理と、を実行し、前記第２、３および４の処理を１サイクルとし、前記第４の処理の後に次のサイクルの前記第２、３および４の処理を実行することを、前記誤り検出部により誤りが検出されなくなるまでまたは誤り数期待値がＴビットとなるまで繰り返す
ことを特徴とする記憶装置。
【請求項１８】
前記誤り訂正処理部は、
Ｎ（Ｎは１以上２×Ｔ未満の整数）個以下の演算器を用いてシンドロームを計算するシンドローム計算部と、
前記符号語と前記シンドロームに基づいてＭ（Ｍは１以上Ｔ未満の整数）個以下の演算器を用いて誤り位置多項式演算を行うことが可能な誤り位置多項式演算部と、
前記誤り位置多項式演算の結果に基づいてＬ（Ｌは１以上Ｔ未満の整数）個以下の演算器を用いて前記データの誤り位置を求める誤り位置計算部と、
を備えることを特徴とする請求項１７に記載の記憶装置。
【請求項１９】
前記誤り位置多項式演算部により前記誤り位置多項式演算が正常に終了できないと判定された場合に、実行中のサイクルの後続の処理を実施せずに次のサイクルの処理へ移行する、ことを特徴とする請求項１８に記載の記憶装置。
【請求項２０】
前記復号制御部により前記誤り位置計算部により特定された誤り位置が前記符号語に対応する位置でないと判定された場合に、実行中のサイクルの後続の処理を実施せずに次のサイクルの処理へ移行する、ことを特徴とする請求項１８または１９に記載の記憶装置。
【請求項２１】
前記復号制御部により前記誤り位置多項式で計算した解の個数と前記誤り位置計算部により特定された誤り位置の個数とが一致しないと判定された場合に、実行中のサイクルの後続の処理を実施せずに次のサイクルの処理へ移行する、ことを特徴とする請求項１８、１９または２０に記載の記憶装置。
【請求項２２】
前記シンドローム計算部は、シンドローム記憶部を備え、計算したシンドロームを前記シンドローム記憶部に記憶し、同一の前記データに対応する２回目以降のシンドローム計算では、前記シンドローム記憶部に記憶されたシンドロームを用いる、ことを特徴とする請求項１８乃至２１のいずれか１つに記載の記憶装置。
【請求項２３】
前記誤り位置多項式演算部は、記憶部を備え、前記誤り位置多項式演算の演算過程で求めた次のサイクルで使用可能な情報を再利用情報として前記記憶部に記憶し、同一の前記データに対応する２回目以降の前記誤り位置多項式演算では、前記記憶部に記憶された前記再利用情報を用いて前記誤り位置多項式演算を行う、ことを特徴とする請求項１８乃至２１のいずれか１つに記載の記憶装置。
【請求項２４】
前記シンドローム計算部と前記誤り位置多項式演算部と前記誤り位置計算部とのうち２つ以上で演算器を共有する、ことを特徴とする請求項１８乃至２２のいずれか１つに記載の記憶装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、復号方法、復号装置および記憶装置に関する。
【背景技術】
【０００２】
半導体メモリの微細化に伴い高い誤り訂正能力がメモリシステムに対して求められている。従来、ＢＣＨ符号等の誤り訂正符号を復号する復号器を実装する場合には、システムで規定した最大の誤り訂正ビット数に対応する回路を実装している。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００９−５９４２２号公報
【特許文献２】特開２００９−２１２６２３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本実施形態は、少ない回路資源を用いて誤りビット数に応じた訂正処理を実行することが可能な復号方法、復号装置および記憶装置を提供する。
【課題を解決するための手段】
【０００５】
本願発明の一態様によれば、データと誤り検出符号と最大訂正能力をＴビットとする誤り訂正符号とで構成される符号語に基づいて誤り訂正処理を行う復号装置であって、前記符号語に基づいて、少なくとも一部の誤り訂正処理でＪ（Ｊは１以上Ｔ未満の整数）ビット誤りまでに対応可能な演算器を用いた誤り訂正処理を行う誤り訂正処理部と、誤り訂正処理の開始時に誤り数期待値を初期値Ｉ（Ｉは１以上Ｔ未満の整数）とし、設定した誤り数期待値に対応する演算を行うよう誤り訂正処理部を制御し、誤り検出符号に基づき誤り検出部により誤り訂正後のデータに誤りが検出されなかった場合処理を終了し、誤り訂正後のデータに誤りが検出された場合、誤り数期待値を増加させて演算を行うよう誤り訂正処理部を制御する動作を、誤り検出部により誤りが検出されなくなるまでまたは誤り数期待値がＴビットとなるまで繰り返す。
【図面の簡単な説明】
【０００６】
【図１】図１は、第１の実施の形態にかかる半導体記憶装置１の構成例を示すブロック図である。
【図２】図２は、符号化部２５の構成例を示す図である。
【図３】図３は、半導体メモリ部３へ書き込まれるデータと符号の関係と誤り検出および訂正の対象範囲の概念を示す図である。
【図４】図４は、誤り検出符号および誤り訂正符号のエンコード／デコードのイメージを示す図である。
【図５】図５は、誤り検出符号および誤り訂正符号のエンコード／デコードのイメージを示す図である。
【図６】図６は、誤り検出符号および誤り訂正符号のエンコード／デコードのイメージを示す図である。
【図７】図７は、誤り検出符号および誤り訂正符号のエンコード／デコードのイメージを示す図である。
【図８】図８は、復号化部の構成例を示す図である。
【図９】図９は、復号処理手順の一例を示すフローチャートである。
【図１０】図１０は、シンドローム計算部の構成例とシンドローム計算の概念を示す図である。
【図１１】図１１は、シンドローム計算手順の一例を示すフローチャートである。
【図１２】図１２は、誤り位置多項式演算部の構成例とＢＭ法およびユークリッド互助法で用いる多項式演算の概念を示す図である。
【図１３】図１３は、誤り位置多項式演算の一例を示すフローチャートである。
【図１４】図１４は、ステップＳ３２の計算手順の一例を示すフローチャートである。
【図１５】図１５は、チェンサーチ部２６３の構成例とチェンサーチの概念を示す図である。
【図１６】図１６は、一般的なチェンサーチの計算手順を示す概念図である。
【図１７】図１７は、第１の実施の形態のチェンサーチの計算手順を示す概念図である。
【図１８】図１８は、チェンサーチ手順の一例を示すフローチャートである。
【図１９】図１９は、計算結果の再利用を行う場合の誤り位置多項式演算手順の一例を示す図である。
【発明を実施するための形態】
【０００７】
従来技術では、システムで規定した最大の誤り訂正ビット数に対応する回路を実装しているため、復号器がメモリシステムの制御回路の大部分を占めている。しかし、符号語内に存在する誤りビット数は平均的にはシステムで規定した最大の誤りビット数よりも非常に少ないため、復号器の大部分の回路が有効に活用されていない。
【０００８】
以下に添付図面を参照して、実施形態にかかる復号方法、復号装置および記憶装置を詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
【０００９】
（第１の実施の形態）
図１は、第１の実施の形態にかかる半導体記憶装置（記憶装置）１の構成例を示すブロック図である。本実施の形態の半導体記憶装置１は、メモリコントローラ（メモリ制御装置）２と、ＮＡＮＤ型記憶セルを備える半導体メモリ部（メモリ部）３と、で構成される。半導体記憶装置１は、通信インタフェースを介してホスト４に接続され、ホスト４に対する外部記憶媒体として機能する。ホスト４の例としては、パーソナルコンピュータやＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）コア等があげられる。
【００１０】
メモリ部３は、例えばＮＡＮＤ型フラッシュメモリ等の不揮発性半導体メモリにより構成される。メモリ部３が備えるメモリチップは単数であってよいし、複数で合ってもよい。メモリ部３が複数のメモリチップを備える場合、複数のメモリチップを並列駆動してもよい。また、個々の記憶セルは１ビットを記憶する（ＳＬＣ：Single  Level  Cell）ものであってもよいし、２ビット以上を記憶する（ＭＬＣ：Multi  Level  Cell）ものであってもよい。メモリ部３がＮＡＮＤ型フラッシュメモリにより構成される場合、メモリチップ内部でのデータの書き込み及び読出しはページ単位で実行され、データの消去は複数のページをまとめたブロック単位で実行される。また、同一ページへのデータの再書き込みは、当該ページを含むブロック内のデータ全体を消去した後でなければ許可されない。
【００１１】
メモリコントローラ２は、内部バス２０と、ＨｏｓｔＩ／Ｆ（インタフェース）２１と、ＮＡＮＤＩ／Ｆ（メモリ制御部）２２と、制御部２３と、符号化／復号化処理部２４と、で構成される。符号化／復号化処理部２４は、符号化部２５と、復号化部２６と、で構成される。
【００１２】
ＨｏｓｔＩ／Ｆ２１は、ホスト４から受信した命令、データなどを内部バス２０に出力する。また、ＨｏｓｔＩ／Ｆ２１は、内部バス２０経由で入力されたデータ、制御部２３からの応答通知（命令の実行完了を示す通知など）などをホスト４へ送信する。ＨｏｓｔＩ／Ｆ２１は、例えば、ＳＡＴＡ（Serial  Advanced  Technology  Attachment）、ＳＡＳ（Serial  Attached  SCSI）、ＰＣＩ（Peripheral  Component  Interconnect）  Ｅｘｐｒｅｓｓ等の通信インタフェース規格に準拠している。
【００１３】
制御部２３は、半導体記憶装置１の各構成要素を統括的に制御する制御部であり、ＣＰＵコア、ＲＡＭ（Random  Access  Memory）、ＲＯＭ（Read  Only  Memory）、ＤＭＡ（Direct  Memory  Access）コントローラなどで構成される。制御部２３は、ホスト４からＨｏｓｔＩ／Ｆ２１および内部バス２０経由で命令を受けた場合に、その命令に従った制御を行う。例えば、制御部２３は、ホスト４からの命令に従って、半導体メモリ部３へのデータの書き込み、半導体メモリ部３からのデータの読み出しなどをＮＡＮＤＩ／Ｆ２２へ指示する。また、制御部２３は、符号化／復号化処理部２４へ誤り訂正符号化処理または復号化処理の実施を指示する。
【００１４】
符号化／復号化処理部２４は、制御部２３の指示に基づいて、ホスト４から受信したデータに対して誤り訂正符号化処理を行い、ＮＡＮＤＩ／Ｆ２２へ出力し、ＮＡＮＤＩ／Ｆ２２から入力されるデータに対して復号化処理を行う。ＮＡＮＤＩ／Ｆ２２は、制御部２３の指示に基づいて半導体メモリ部３の読み書き等を行なう。
【００１５】
なお、図１に示した半導体記憶装置１の構成は一例であり、半導体メモリとその半導体メモリの読み書きを制御するコントローラを備え、ホスト４と通信が可能な構成であれば、図１に示した構成に限らずどのような構成でもよい。また、半導体メモリ部３の代わりに半導体メモリ以外の記憶手段を用いてもよい。
【００１６】
次に、本実施の形態の半導体メモリ部３への書き込み動作について説明する。まず、制御部２３は、ホスト４からデータの書き込みを指示されると、符号化／復号化処理部２４に符号化の実施を指示するとともに、ＮＡＮＤＩ／Ｆ２２へ半導体メモリ部３への書き込みを指示する。ホスト４から送信される書き込み対象のデータは、半導体記憶装置１内の図示しないバッファメモリに書き込まれる。符号化／復号化処理部２４の符号化部２５は、バッファメモリから入力されるデータに対して誤り検出符号および誤り訂正符号を生成し、生成した符号をＮＡＮＤＩ／Ｆ２２へ出力する。ＮＡＮＤＩ／Ｆ２２は、バッファメモリから入力されるデータと、符号化部２５が生成した符号と、を半導体メモリ部３へ書き込む。
【００１７】
本実施の形態では、符号化部２５は、符号化処理として、誤り検出符号および誤り訂正符号を生成する。図２は、本実施の形態の符号化部２５の構成例を示す図である。なお、ここでは、符号化部２５が、誤り検出符号としてＣＲＣを生成する例を説明するが、誤り検出符号はＣＲＣに限定されない。図２に示すように、符号化部２５は、所定のサイズの書き込みデータに基づいてＣＲＣ（Cyclic  Redundancy  Check）を生成する誤り検出符号エンコーダ（誤り検出符号化部）２５１と、所定のサイズの書き込みデータと当該データに対応するＣＲＣとに基づいて誤り訂正符号を生成する誤り訂正符号エンコーダ２５２と、を備える。また、誤り訂正符号としてはどのような符号を用いてもよいが、例えばＢＣＨ符号やＲＳ（Reed−Solomon）符号等を用いることができる。以下ＢＣＨ符号を例にとって説明する。
【００１８】
図３は、半導体メモリ部３へ書き込まれるデータと符号の関係と誤り検出および訂正の対象範囲の概念を示す図である。また、図４乃至７は誤り検出符号および誤り訂正符号のエンコード／デコードのイメージを示す図である。図４に示すように、所定のサイズの書き込みデータ（図４ではデータと記載）に基づいてＣＲＣが生成され、図５に示すように所定のサイズの書き込みデータと対応するＣＲＣとを誤り訂正符号化対象として誤り訂正符号が生成される。なお、図６に示すように誤り訂正処理を行う際には、書込み時に生成したデータとデータに対応するＣＲＣおよび誤り訂正符号を用いて誤り訂正処理を行う。
【００１９】
また、同様に、図７に示すように誤り検出処理を行う際には、書込み時に生成したデータとデータに対応するＣＲＣから誤り検出処理を行う。なお、図３では、１組のデータとＣＲＣに対して１つの誤り訂正符号が生成される例を示しているが、データとＣＲＣの複数組に対して１つの誤り訂正符号を生成するようにしてもよい。
【００２０】
次に、本実施の形態の半導体メモリ部３からの読出し動作について説明する。制御部２３は、ホスト４からデータの読み出しを指示されると、符号化／復号化処理部２４に復号化の実施を指示するとともに、ＮＡＮＤＩ／Ｆ２２へ半導体メモリ部３からの読み出しを指示する。ＮＡＮＤＩ／Ｆ２２は、制御部２３からの指示に基づいて半導体メモリ部３からデータと対応する誤り検出符号および誤り訂正符号とを読み出し、読み出したデータと対応する誤り検出符号および誤り訂正符号を符号化／復号化処理部２４へ出力する。符号化／復号化処理部２４の復号化部２６は、読み出したデータと誤り検出符号および誤り訂正符号とに基づいて復号処理を行い、読み出したデータに誤りが有ると判断した場合には、誤り訂正を実施する。ＨｏｓｔＩ／Ｆ２１は、誤り訂正後のデータ（誤りの無い場合には、半導体メモリ部３から読み出したデータ）をホスト４に送信する。
【００２１】
以下、本実施の形態の復号処理について説明する。図８は、本実施の形態の復号化部２６の構成例を示す図である。復号化部（復号装置）２６は、図８に示すように、シンドローム計算部２６１と、誤り位置多項式演算部２６２と、チェンサーチ部（誤り位置計算部）２６３と、誤り検出符号デコーダ（誤り検出部）２６４と、復号制御部２６５と、を備える。シンドローム計算部２６１、誤り位置多項式演算部２６２およびチェンサーチ部２６３は、誤り訂正処理を行う誤り訂正処理部（誤り訂正処理デコーダ）を構成する。
【００２２】
本実施の形態では、符号語の訂正可能な最大の誤り訂正ビット数（以下、最大訂正ビット数という）に比べ、実際の復号（誤り訂正復号）対象の符号語に含まれる誤りビット数が平均的には低いことに着目し、最大訂正ビット数より少ないビットを誤り数期待値として設定して復号処理を行い、正しく復号できたかどうかを誤り検出符号デコーダ２６４でチェックし、この復号処理で正しく訂正されなかった場合に、誤り数期待値を増やして再度計算する。さらにこの復号処理で正しく訂正されなかった場合に、誤り数期待値を増やしてシンドローム計算から誤り検出符号デコードまでを再度計算する。このように誤り数期待値の設定と復号処理と復号結果のチェックをデータが正しく訂正されるまで繰り返し、誤り数期待値を最大訂正ビット数に設定しても正しく訂正されなかった場合には訂正不可と判定する。
【００２３】
本実施の形態では、このような処理を行うことにより、１回の誤り数期待値の増加量と復号処理で使用する演算器量を平均的な誤りビット数に合わせて備えることで、最大訂正ビット数に対応した演算器を備える場合とくらべて回路規模を削減しつつ訂正処理にかかる平均的な時間を同程度に抑えることができる。
【００２４】
本実施の形態では、符号語の誤り訂正能力として誤り数期待値Ｘを設定してデータが正しく訂正されたと誤り検出符号デコーダが判断した場合に処理を打ち切るため、最大訂正ビット数を設定してシンドローム計算から誤り検出符号デコーダまでの処理を繰り返し実行した時間よりも早く処理を打ち切ることが可能になる。特に符号語中に含まれる誤りビット数が復号化部内に備える演算器の数以下である場合にはシンドローム計算から誤り検出符号デコーダまでの処理を１回の処理で完了できるため、最大訂正ビット数に応じた演算器を備える場合と同じ計算時間になる。一般に平均誤り数は最大訂正ビット数より低いため、誤り数期待値Ｘの更新方法等を適切に実施すれば平均的には処理速度は向上する。
【００２５】
図９は、本実施の形態の復号処理手順の一例を示すフローチャートである。なお、復号処理中の誤り位置多項式の計算は、ＢＭ（Berlekamp−Massey）法、ユークリッド互除法、ピーターソン法等どのような方法を用いてもよいが、以下の説明では、ＢＭ法を用いることを想定して説明する。なお、符号化部２５は最大訂正ビット数であるＴビットの誤り訂正符号を生成しているとする。
【００２６】
制御部２３は、ＨｏｓｔＩ／Ｆ２１経由でホスト４からデータの読み出し要求を受け取ると、読み出し対象のデータを読み出すようＮＡＮＤＩ／Ｆ２２へ指示し、ＮＡＮＤ  Ｉ／Ｆ２２は読み出し対象のデータを対応するＣＲＣおよび誤り訂正符号とともに読み出し、復号化部２６へ渡す。復号化部２６では、ＮＡＮＤＩ／Ｆ２２から読み出し対象のデータを受け取ると復号処理を開始する。
【００２７】
復号処理を開始すると、復号制御部２６５は、誤り数期待値ＸをＡ（Ａ＜Ｔ）ビット単位で更新する（ステップＳ１）。具体的には、処理の開始後、最初（１サイクル目）のステップＳ１ではＸ＝Ａと設定し、２回目（２サイクル目）のステップＳ１ではＸにＡを加算する。なお、後述のように、本実施の形態では、設定した誤り数期待値Ｘで誤り訂正が正しく行えなかった場合には、ステップＳ１に戻って誤り数期待値Ｘを更新して再度演算を行うが、これらの１回の誤り数期待値Ｘの設定を１サイクルと表記する。なお、誤り数期待値Ｘを増加させる変数であるＡは平均誤り数以上の値を設定することが望ましい。平均誤り数と同じ値を用いた場合、平均的なサイクル数を１に押さえることができる。
【００２８】
次に、復号制御部２６５は、シンドローム計算を実施する（ステップＳ２，Ｓ３）。図１０は、シンドローム計算部２６１の構成例とシンドローム計算の概念を示す図である。シンドローム計算部２６１は、例えば、加算器５１−１〜５１−Ｎ（Ｎは、１以上の整数）、乗算器（演算器）５２−１〜５２−Ｎ、レジスタ５３−１〜５３−Ｎおよびシンドローム記憶部５４を備える。乗算器５２−１〜５２−Ｎに設定される係数は、後述するように計算する項に応じて復号制御部２６５により設定される。入力されるデータに基づいて加算器５１−ｉ（ｉ＝１，２，…，Ｎ）と乗算器５２−ｉにより演算がなされ、演算結果はレジスタ５３−ｉに入力される。そしてレジスタ５３−１〜５３−Ｎに格納された演算結果は、それぞれシンドローム記憶部５４に格納される。なお、乗算器と加算器の個数を表すＮは、平均誤り数に応じて設定することが望ましい。これは平均的な誤り数が発生した時に高速に訂正ができる必要があるためである。また、Ｚビットの訂正を行う場合にはＺ×２個のシンドロームが必要になる。このためこれ以降の説明では、平均誤り数をＡビットとし、Ｎ＝Ａ×２として説明する。
【００２９】
図１０では、加算器および乗算器の演算幅がＫビットであるとしている。この場合、シンドローム記憶部５４は、Ｋビット×最大訂正ビット数Ｔ×２以上の領域を有する。なお、演算幅のＫビットはガロア体の次数で決まる。
【００３０】
ステップＳ３では、シンドローム計算部２６１は、上記の２×Ａ組の加算器、乗算器およびレジスタを用いて、それぞれシンドロームＳ（α1），Ｓ（α2），Ｓ（α3），…，Ｓ（α2X）を求める。具体的には、例えばＡ＝４とし２サイクル目の誤り数期待値Ｘ＝８でシンドロームの計算をするとした場合、８×２＝１６個のシンドロームをＮ＝２×Ａ＝８個の演算器で計算をする。
【００３１】
図１１は、本実施の形態のシンドローム計算手順の一例を示すフローチャートである。まず、シンドローム計算を開始すると、復号制御部２６５は、誤り数期待値Ｘと計算済みのシンドローム数とに基づいて２×Ａ個の乗算器の係数を設定する（ステップＳ２１）。そして、２×Ａ個の乗算器によりシンドローム計算を実施して計算結果をシンドローム記憶部５４へ格納し（ステップＳ２２）、当該サイクル内で計算済みのシンドローム数を更新する（ステップＳ２３）。当該サイクル内で計算済みのシンドローム数とは、ステップＳ１で誤り数期待値が設定され、次のステップＳ１を実施するまでの１サイクルのなかで、計算済みのシンドローム数であり、誤り数期待値が更新されて次のサイクルのシンドローム計算が開始される際には初期化（計算済みのシンドローム数は０）されるとする。
【００３２】
そして、復号制御部２６５は、計算済みのシンドローム数がＸ個となったか否かを判断し（ステップＳ２４）、Ｘ個となった場合（ステップＳ２４  Ｙｅｓ）には処理を終了し、Ｘ個未満の場合（ステップＳ２４  Ｎｏ）、ステップＳ２１へ戻る。
【００３３】
例えば、Ａ＝４とし、２サイクル（図９のステップＳ１で更新されるサイクル）目に相当する誤り数期待値Ｘ＝８でシンドロームの計算をするとした場合、シンドローム計算部２６１は８個（２×Ａ個）の演算回路を有し、１サイクル目のシンドローム計算では、はじめ（１周目）のステップＳ２１では、Ｓ（α1），Ｓ（α2），Ｓ（α3），…，Ｓ（α8）を求めるよう係数が設定される。このＳ（α1），Ｓ（α2），Ｓ（α3），…，Ｓ（α8）は、シンドローム記憶部５４へ格納され、２周目のステップＳ２１では、Ｓ（α9），Ｓ（α10），Ｓ（α11），…，Ｓ（α16）を求めるよう係数が設定され、２周目のステップＳ２４でＸ個のシンドロームを計算したと判定されてそのサイクルのシンドローム計算を終了する。なお、ここでは、シンドローム計算部２６１は、２×Ａ個の乗算器を有することとしたが、２×Ｂ個（Ａ≠Ｂ）の乗算器を有するように構成してもよい。この場合、ステップＳ２１では２×Ｂ個の係数を計算してステップＳ２２では２×Ｂ個のシンドロームを求めることになる。
【００３４】
シンドローム計算部２６１は、以上の処理により２×Ｘ個のシンドロームの計算が終了すると、シンドローム記憶部５４に格納されている２×Ｘ個のシンドロームを誤り位置多項式演算部２６２へ渡す。
【００３５】
図９の説明に戻り、ステップＳ３を実施した後、復号制御部２６５は、誤り位置多項式演算部２６２に計算済みのシンドローム計算結果を用いて誤り数期待値Ｘに対応する処理を行うよう指示し、誤り位置多項式演算部２６２が誤り位置多項式演算を実施する（ステップＳ４）。
【００３６】
誤り位置多項式演算は、誤り位置多項式をσ（ｚ）とするとき、σ（ｚ）＝１＋σ1ｚ1＋σ2ｚ2＋…の係数σ1，σ2，…をシンドロームの値から計算する処理である。具体的な方法としては、Berlekamp−Massey（ＢＭ）法、ユークリッド互除法、ピーターソン法等がある。ピーターソン法は、行列計算で係数σとシンドロームの間に成り立つ連立方程式を解く方法であり、ＢＭ法およびユークリッド互助法は多項式を使って係数σとシンドロームの連立方程式を逐次的に計算する方法である。
【００３７】
図１２は、誤り位置多項式演算部２６２の演算器の構成例とＢＭ法およびユークリッド互助法で用いる多項式演算の概念を示す図である。誤り位置多項式演算部２６２は、平均的な誤り数に合わせた数のガロア体計算回路（演算器）６１−１〜６１−Ｍと、ガロア体演算回路６２と、を備える。なお、図７では誤り数期待値を増加させる数に合わせてＭ＝Ａとしている。
【００３８】
誤り位置多項式演算部２６２では、シンドローム記憶部５４へ格納されたシンドロームを用いて、例えば、図１２に示すように、ガロア体計算回路６１−１〜６１−Ｍが、多項式ｘ0ｚ0，ｘ1ｚ1，…に定数を乗算するようなガロア体の乗算等の演算を各項ごとに各々行い、演算結果をメモリ上に保持し、多項式の全ての項の計算が終わっていない場合には、残りの項の演算をガロア体計算回路の個数単位で計算をする。
【００３９】
なお、誤り位置多項式は、ユークリッド互除法やＢＭ法等の計算アルゴリズムによって計算方法が異なるため具体的な計算方法については省略するが、いずれの場合もＭ個のガロア体計算回路を用いて、誤り数期待値Ｘビットに対応する多項式の計算を時分割で実行し、係数σを導出する。
【００４０】
図１３は、誤り位置多項式演算の一例を示すフローチャートである。誤り位置多項式演算部２６２は、シンドローム計算部２６１からシンドロームの計算結果を取得すると、誤り多項式の項数ｉを１に設定する（ステップＳ３１）。そして、σ（ｚ）や評価式等の計算を行う（ステップＳ３２）。ステップＳ３２の演算内容は、ユークリッド互除法やＢＭ法等の計算アルゴリズムに依存するが、一般にはガロア体計算回路を、誤り位置多項式の項の数であるｉ個備えて演算を行う。そして、ガロア体計算回路の結果に基づいてガロア体演算回路６２により、評価式の計算等を実施する。本実施の形態では、ガロア体計算回路の個数をＭ（＝Ａ）としているため、ｉがＭより大きい場合には、時分割で計算を行う。
【００４１】
図１４は、ステップＳ３２の計算手順の一例を示すフローチャートである。まず、復号制御部２６５は、Ａ個のガロア体計算回路６１−１〜６１−Ｍ（＝Ａ）の係数を指定し（ステップＳ３５）、演算を実行する（ステップＳ３６）。そして、演算により求めた計算結果を復号制御部２６５へ出力する（ステップＳ３７）。復号制御部２６５は、ｉ個の多項式の全ての項を計算したか否かを判断し（ステップＳ３８）、計算した場合（ステップＳ３８  Ｙｅｓ）処理を終了して、図１３のステップＳ３３へ進む。ｉ個の多項式のうち計算していない項がある場合（ステップＳ３８  Ｎｏ）、ステップＳ３５へ戻り残りの項を計算する。
【００４２】
図１３の説明に戻り、ステップＳ３２の演算の後、復号制御部２６５は、ｉ＝Ｘであるか否かを判断する（ステップＳ３３）。ｉ＝Ｘの場合（ステップＳ３３  Ｙｅｓ）は、処理を終了して、図９のステップＳ５へ進む。ｉ＝Ｘでない場合（ステップＳ３３  Ｎｏ）は、ｉ＝ｉ＋１とし（ステップＳ３４）、ステップＳ３２へ戻る。なお、上述の例では、Ｍ＝ＡとしてＡ個ずつの演算を行っているが、Ｍ＝Ａでない場合には、Ｍ個ずつの演算を行えばよい。また、実際の誤り数ｉがＸよりも少ないことがステップＳ３２の評価式の結果により判明した場合などにはｉ＝Ｘになっていなくても終了する動作を行ってよい。
【００４３】
次に、誤り位置多項式演算部２６２は、演算結果に基づいて、誤り位置多項式演算におけるエラーを検出したか否かを判断し、エラーを検出した場合は復号制御部２６５へ通知する（ステップＳ５）。例えば、評価関数を用いて導出した係数σが正しいかどうかを判断する計算アルゴリズムでは、評価関数を計算した結果が正しいかどうかで判断する。なお、評価関数が定義されない誤り位置多項式の計算アルゴリズムを用いる場合等には、ステップＳ５を行わなくてもよい。
【００４４】
エラーを検出しなかった場合（ステップＳ５  Ｎｏ）、復号制御部２６５は、チェンサーチ部２６３の乗算器７１−１〜７１−Ｌに誤り位置多項式の計算で導出した係数σを設定し、チェンサーチ部２６３は係数σから誤り位置の特定を実施する（ステップＳ６）。チェンサーチは、誤り位置多項式σ（ｚ）に順次値を代入しσ（ｚ）＝０となる値である誤りロケータ（誤り位置）を探索する手法である。
【００４５】
図１５は、チェンサーチ部２６３の構成例とチェンサーチの概念を示す図である。チェンサーチ部２６３は、乗算回路（演算器）７１−１〜７１−Ｌと、加算器７２と、レジスタ７３と、を備える。なお、Ｌは１以上の整数であれば良いが、シンドロームや誤り位置多項式の演算器の決定方法と同じ理由で、図１５ではＬ＝Ａとしている。加算器７２は、レジスタに格納されている値を読み出して読み出した値と乗算回路７１−１〜７１−Ｌの各々乗算結果とのそれぞれ累積ＥｘＯＲ演算を行い、レジスタ７３に演算結果を保持する。レジスタ７３の初期値は０が設定される。
【００４６】
図１６は、一般的なチェンサーチの計算手順を示す概念図である。一般的なチェンサーチでは、最大訂正能力の個数分の演算器と演算器に対応するレジスタを備る。レジスタには、誤り位置多項式の計算で求めたσ1，σ2，…，σTを初期値として設定し、レジスタの内容と対応する演算器で定数α1，α2，α3…，αTTの演算をそれぞれ行い、演算結果をレジスタに格納すると共に、それぞれの演算結果のＥｘＯＲ演算を行う。
【００４７】
図１７は、本実施の形態のチェンサーチの計算手順を示す概念図である。図１７では、誤り数期待値Ｘに対応するチェンサーチで実施するガロア体演算を、Ｌ（＝Ａ）個の乗算回路７１−１〜７１−Ｌを用いて演算する場合の概念を示している。例えば、Ａ＝４とし、２サイクル目の計算の場合、誤り位置多項式演算では、σ1〜σ8の８個の係数が算出され、これらは乗算回路７１−１〜７１−Ｌ内のレジスタに格納されているとする。復号制御部２６５は、加算用レジスタであるレジスタ７３を初期化する。
【００４８】
次に、復号制御部２６５は、σ1〜σ4のレジスタを選択し、乗算回路７１−１〜７１−Ｌにそれぞれ係数を設定する。乗算回路７１−１〜７１−Ｌは、σ1〜σ4と係数とに基づいてガロア体演算を行い、乗算結果を乗算回路７１−１〜７１−Ｌ内のレジスタへ格納する。そして、全ての乗算回路７１−１〜７１−Ｌの乗算結果とレジスタ７３の内容とを加算し、加算結果をレジスタ７３へ格納する。次に、σ5〜σ8のレジスタ（乗算回路７１−１〜７１−Ｌ内のレジスタ）を選択し、乗算回路７１−１〜７１−Ｌにそれぞれ係数を設定する。乗算回路７１−１〜７１−Ｌは、σ5〜σ8と係数とに基づいてガロア体演算を行い、乗算結果をレジスタへ格納する。全ての乗算回路７１−１〜７１−Ｌの乗算結果とレジスタ７３の内容とを加算し、加算結果をレジスタ７３へ格納する。そして、レジスタ７３の内容が０ならば誤りロケータとする。
【００４９】
図１８は、本実施の形態のチェンサーチ手順の一例を示すフローチャートである。上述した図１７のガロア体演算は、図１８のステップＳ４１〜Ｓ４４を２周実施した例に対応する。まず、チェンサーチを開始すると、レジスタ７３の値を初期化し（ステップＳ４１）、誤り位置多項式の計算結果(あるいは計算途中の結果)に対応する乗算回路７１−１〜７１−Ｌの係数を設定する（ステップＳ４２）。そして、チェンサーチ部２６３のＬ個の乗算回路７１−１〜７１−Ｌによる係数とレジスタ内データとの演算を実行して乗算結果を再びレジスタ内に書き戻す（ステップＳ４３）、加算器７２が乗算回路７１−１〜７１−Ｌの乗算結果とレジスタ７３との値に基づいて累積ＥｘＯＲを求め、求めた結果をレジスタ７３に格納する（ステップＳ４４）。そして、復号制御部２６５は、当該サイクルで設定された誤り数期待値Ｘに対応する計算が終了したか否かを判断する（ステップＳ４５）。
【００５０】
当該サイクルで設定された誤り数期待値Ｘに対応する計算が終了した場合（ステップＳ４５  Ｙｅｓ）、復号制御部２６５は、累積ＥｘＯＲの結果が０であるか否かを判断する（ステップＳ４６）。累積ＥｘＯＲの結果が０の場合（ステップＳ４６  Ｙｅｓ）、代入したαiに対応するビットを誤り位置として決定し（ステップＳ４７）、符号語に含まれる全てのビットを検査したか否かを判断し（ステップＳ４８）、全てのビットを検査した場合（ステップＳ４８  Ｙｅｓ）、処理を終了する。全てのビットを検査済みでない場合（ステップＳ４８  Ｎｏ）、ステップＳ４１へ戻り、αiのｉの値を変えて次のビットについて検査を行う。なお、詳細は割愛するが符号語のビット数がガロア体の空間で利用可能なビット数よりも少ない場合には、チェンサーチを開始する位置を計算する処理を加えてもよい。
【００５１】
ステップＳ４５で誤り数期待値Ｘに対応する計算が終了していないと判断した場合（ステップＳ４５  Ｎｏ）は、ステップＳ４２へ戻る。また、ステップＳ４６で累積ＥｘＯＲの結果が０でないと判断した場合（ステップＳ４６  Ｎｏ）、ステップＳ４８へ進む。
【００５２】
復号制御部２６５は、ＥｘＯＲ演算の結果が０であれば、対応するビットに誤りがあると判定し、当該ビットを反転させる。復号制御部２６５は、チェンサーチによって誤りがあると判定したビットの数と対応する誤り位置を保持しておく。
【００５３】
図９の説明に戻り、チェンサーチの終了後、誤り位置多項式の計算で導出した多項式の項の数とチェンサーチにより導出した誤りロケータの数とが不一致であるか否かを判断する（ステップＳ７）。解の個数が一致した場合（ステップＳ７  Ｎｏ）、復号制御部２６５は、誤り位置が誤り訂正対象として設定されている範囲外であるか否かを判断する（ステップＳ８）。誤り位置が誤り訂正対象として設定されている範囲外でないと判断した場合（ステップＳ８  Ｎｏ）、復号制御部２６５は、誤りロケータが指す誤り位置のビットを実際に反転し、誤り検出符号デコーダ２６４へ誤り検出処理の開始を指示し、誤り検出符号デコーダ２６４は誤り検出処理（ＣＲＣ計算）を実施する（ステップＳ９）。具体的には、誤り検出符号デコーダ２６４は、誤り訂正後のデータおよび対応するＣＲＣを用いて誤り訂正後のデータに誤りがあるか否かを判定する。
【００５４】
誤り検出処理の実施後、復号制御部２６５は、誤り検出符号デコーダ２６４が実施した誤り検出処理の結果に誤りが無いか否かに基づいて、正しく誤り訂正ができたか否かを判断する（ステップＳ１０）。正しく誤り訂正ができたと判断した場合（ステップＳ１０  Ｙｅｓ）、処理を終了する。
【００５５】
一方、ステップＳ５でエラーを検出した場合（ステップＳ５  Ｙｅｓ）、ステップＳ７で解の個数が不一致であると判断した場合（ステップＳ７  Ｙｅｓ）、ステップＳ８で誤り位置が誤り訂正対象として設定されている範囲外であると判断した場合（ステップＳ８  Ｙｅｓ）には、復号制御部２６５は、誤り数期待値が最大値（すなわちＸ＝Ｔ）であるか否かを判断する（ステップＳ１１）。誤り数期待値が最大値である場合（ステップＳ１１  Ｙｅｓ）は、復号制御部２６５は、誤り訂正不可と判定して処理を終了する。誤り数期待値が最大値でない場合（ステップＳ１１  Ｎｏ）は、ステップＳ１へ戻る。ステップＳ１１を経由してステップＳ１へ戻ると、次のサイクルの処理が開始される。
【００５６】
以上の処理により、最大訂正ビット数に対応した演算回路を備えなくても、復号処理を行うことができる。また、例えば、最大訂正ビット数を２０ビットとし、Ａ＝４とした場合に、実際の誤りの発生数が４ビット以下であれば、１サイクル目で計算が終了することになり、処理速度が向上する。
【００５７】
以上述べた誤り数期待値の更新方法は一例であり、例えば、処理の開始後、最初のステップＳ１ではＸ＝Ａ´（Ａ´＜Ａ）と設定して、以降はＸにＡを加算していく方法等、サイクルごとに誤り数期待値を増やしていく方法であればどのような方法でもよい。
【００５８】
なお、本実施の形態では、シンドローム計算部２６１と誤り位置多項式演算部２６２とチェンサーチ部２６３では、演算の係数の設定等が異なるものの、乗算等演算自体が共通するものもある。従って、シンドローム計算部２６１、誤り位置多項式演算部２６２およびチェンサーチ部２６３で一部の演算器を共用してもよい。例えば、シンドローム計算部２６１の乗算器５２−１〜５２−Ｎと、誤り位置多項式演算部２６２のガロア体計算回路６１−１〜６１−Ｍと、で同一の演算器を用いてもよい。このような構成にするとさらに演算回路を削減することができる。
【００５９】
また、シンドローム計算部２６１、誤り位置多項式演算部２６２およびチェンサーチ部２６３が備える各演算器の個数Ｎ，Ｍ，Ｌはそれぞれ異なる値であってもよく、Ｎ／２（すなわちシンドローム計算部２６１が対応可能な訂正ビット数），Ｍ，Ｌのうち少なくとも１つがＴ未満の数であればよい。すなわちＮ／２，Ｍ，Ｌのうちの最小値をＪとするとき、ＪがＴ未満であればよい。
【００６０】
以上のように、本実施の形態では、最大訂正ビット数より小さいビット数に対応する演算回路を用いて、初期値として誤り数期待値を所定の値に設定し、誤り数期待値に対応したシンドローム計算、誤り位置多項式演算およびチェンサーチにより誤り訂正処理を行い、誤り訂正処理後のデータとＣＲＣとに基づいて正しく誤り訂正ができなかったと判断した場合に、誤り数期待値を増加させて直前の誤り訂正処理からの増分の処理を次のサイクルの誤り訂正処理として実施するようにした。そして、正しく誤り訂正ができたか、または誤り数期待値を最大訂正ビット数として設定するまで、誤り数期待値を更新して誤り訂正処理を繰り返すようにした。このため、復号化部の回路を最大訂正ビット数分の演算回路を備える場合に比べて大幅に削減することができる。また、平均的な復号処理の速度を向上させることができる。
【００６１】
（第２の実施の形態）
第１の実施の形態では、２サイクル目以降の処理を行う場合、１サイクル目の計算結果とは独立に演算を行っていた。例えば、Ａ＝４とし、２サイクル目のシンドローム計算では、Ｓ（α1），Ｓ（α2），Ｓ（α3），…，Ｓ（α8）と８つのシンドロームを求めていた。一方、第１の実施の形態で述べた処理のうち一部の処理では、前のサイクルの計算過程で求めた結果（以下、再利用情報という）を用いることにより、次のサイクルの計算を減らすことができる。
【００６２】
例えば、Ａ＝４とする場合、シンドローム計算では、２サイクル目で求めるＳ（α1），Ｓ（α2），Ｓ（α3），…，Ｓ（α8）のうち、Ｓ（α1），Ｓ（α2），Ｓ（α3），Ｓ（α4）は、１サイクル目で求めた値と同一である。従って、シンドローム計算では、各サイクルで計算した値を復号化部２６内の記憶部（復号化部２６外の記憶部としてもよい）に保持しておき、次のサイクルの計算では、前のサイクルまでで計算されていない部分（差分）のみを計算することができる。例えば、Ａ＝４とする場合、２サイクル目ではＳ（α5），…，Ｓ（α8）を計算し、Ｓ（α1），Ｓ（α2），Ｓ（α3），Ｓ（α4）については、保持している前のサイクルまでの計算結果を再利用情報として用いればよい。
【００６３】
誤り位置多項式演算においては、差分のみを計算することはできないが、前のサイクルの計算過程で算出された値の一部を次のサイクルに用いることができるため、次のサイクルの計算に必要な情報を再利用情報として保持しておくようにすれば、次サイクルの計算の一部を簡略化することができる。
【００６４】
図１９は、計算結果の再利用を行う場合の誤り位置多項式演算手順の一例を示す図である。まず、はじめに、前のサイクルの誤り数期待値（ｏｌｄ＿Ｘ）までの計算した内容（前のサイクルで計算して保存した次のサイクルの計算で用いる情報、以降、再利用情報という）を復号化部２６内の記憶部（復号化部２６外の記憶部としてもよい）から読み出す（ステップＳ５１）。そして、誤り位置多項式の項の数ｉを１＋ｏｌｄ＿Ｘとする（ステップＳ５２）。なお、１サイクル目では、ステップＳ５１を実施せず、ステップＳ５２ではｏｌｄ＿Ｘ＝０とする。
【００６５】
そして、再利用情報を用いて同様にσ（ｚ）や評価式等の演算を行う（ステップＳ５３）。次に、復号制御部２６５は、ｉ＝Ｘであるか否かを判断する（ステップＳ５４）。ｉ＝Ｘの場合（ステップＳ５４  Ｙｅｓ）は、再利用情報（σ（ｚ）等）を記憶部へ保存し（ステップＳ５６）て、処理を終了する。ｉ＝Ｘでない場合（ステップＳ５４  Ｎｏ）は、ｉ＝ｉ＋１とし（ステップＳ５５）、ステップＳ５３へ戻る。なお、ステップＳ５３では、ｉよりガロア体計算回路６１−１〜６１−Ｍの個数（Ｍ）が少ない場合は、第１の実施の形態と同様にＭ個ずつ時分割で処理を行う。以上述べた以外の本実施の形態の動作は、第１の実施の形態と同様である。
【００６６】
以上のように、本実施の形態では、シンドローム計算や誤り位置多項式演算において、次のサイクルの計算で用いることができる情報を再利用情報として保持しておき、次のサイクルでは再利用情報を用いて演算を行うようにした。これにより、第１の実施の形態と同様の効果が得られるとともに、第１の実施の形態に比べ演算量を削減することができる。
【００６７】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００６８】
１  半導体記憶装置、２  メモリコントローラ、３  半導体メモリ部、２４  符号化／復号化処理部、２５  符号化部、２６  復号化部、２５１  誤り検出符号エンコーダ、２５２  誤り訂正符号エンコーダ、２６１  シンドローム計算部  、２６２  誤り位置多項式演算部、２６３  チェンサーチ部、２６４  誤り検出符号デコーダ、２６５  復号制御部。
【図１】
2013069377.tif 000003
【図２】
2013069377.tif 000004
【図３】
2013069377.tif 000005
【図４】
2013069377.tif 000006
【図５】
2013069377.tif 000007
【図６】
2013069377.tif 000008
【図７】
2013069377.tif 000009
【図８】
2013069377.tif 000010
【図９】
2013069377.tif 000011
【図１０】
2013069377.tif 000012
【図１１】
2013069377.tif 000013
【図１２】
2013069377.tif 000014
【図１３】
2013069377.tif 000015
【図１４】
2013069377.tif 000016
【図１５】
2013069377.tif 000017
【図１６】
2013069377.tif 000018
【図１７】
2013069377.tif 000019
【図１８】
2013069377.tif 000020
【図１９】
2013069377.tif 000021