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