JP2013201482A - チェンサーチ回路、復号器、記憶装置およびチェンサーチ方法 - Google Patents
チェンサーチ回路、復号器、記憶装置およびチェンサーチ方法 Download PDFInfo
- Publication number
- JP2013201482A JP2013201482A JP2012067056A JP2012067056A JP2013201482A JP 2013201482 A JP2013201482 A JP 2013201482A JP 2012067056 A JP2012067056 A JP 2012067056A JP 2012067056 A JP2012067056 A JP 2012067056A JP 2013201482 A JP2013201482 A JP 2013201482A
- Authority
- JP
- Japan
- Prior art keywords
- unit
- calculation
- register
- error
- multiplier
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Error Detection And Correction (AREA)
Abstract
【課題】復号処理速度の低下を防いで回路規模を削減することができるチェンサーチ回路を得ること。
【解決手段】チェンサーチ回路であって、第1および第2演算部と、第1演算部の加算結果と第2演算部の加算結果とを加算する加算部と、を備え、第1演算部および第2演算部のi番目の演算器は、レジスタと、入力データに対してαi倍の乗算を行った結果を演算結果として加算器へ入力してレジスタの内容を更新する第1の乗算器と、を備え、第2演算部の演算器は、第1演算部と異なる検索領域の演算をするための初期値を算出する初期値算出回路と、誤り位置多項式演算の誤りビット数に応じて係数と初期値とのいずれかを選択してレジスタへ入力する第1のセレクタと、レジスタからの入力データに対してαK倍の乗算を行う第2の乗算器と、レジスタの内容と第2の乗算器による演算結果とのいずれかを選択して第1の乗算器へ入力する第2のセレクタと、を備える。
【選択図】図6
【解決手段】チェンサーチ回路であって、第1および第2演算部と、第1演算部の加算結果と第2演算部の加算結果とを加算する加算部と、を備え、第1演算部および第2演算部のi番目の演算器は、レジスタと、入力データに対してαi倍の乗算を行った結果を演算結果として加算器へ入力してレジスタの内容を更新する第1の乗算器と、を備え、第2演算部の演算器は、第1演算部と異なる検索領域の演算をするための初期値を算出する初期値算出回路と、誤り位置多項式演算の誤りビット数に応じて係数と初期値とのいずれかを選択してレジスタへ入力する第1のセレクタと、レジスタからの入力データに対してαK倍の乗算を行う第2の乗算器と、レジスタの内容と第2の乗算器による演算結果とのいずれかを選択して第1の乗算器へ入力する第2のセレクタと、を備える。
【選択図】図6
Description
本発明の実施形態は、チェンサーチ回路、復号器、記憶装置およびチェンサーチ方法に関する。
半導体メモリの微細化に伴い高い誤り訂正能力がメモリシステムに対して求められている。従来、BCH符号等の誤り訂正符号を復号する復号器を実装する場合には、システムで規定した最大の誤り訂正ビット数に対応する回路を実装している。
しかし、符号語内に存在する誤りビット数は平均的にはシステムで規定した誤りビット数よりも非常に少ない。このため、復号器の大部分の回路が有効に活用されていない。一方で、符号語中に存在する誤りビットの数は訂正処理の実行中に判明するため、復号器の演算器を共有することで回路規模を削減する場合には復号処理が全体的に遅くなってしまう。
本実施形態は、復号処理速度の低下を防いで回路規模を削減することができるチェンサーチ回路、復号器、記憶装置およびチェンサーチ方法を提供する。
本願発明の一態様によれば、誤り位置多項式演算により算出された誤り位置多項式の項の係数に基づいてチェンサーチを行うチェンサーチ回路であって、L(Lは1以上の整数)個の演算器と演算器による演算結果を加算する加算器とをそれぞれ備える第1および第2演算部と、第1演算部の加算器による加算結果と第2演算部の加算器による加算結果とを加算する加算部と、を備える。第1演算部および第2演算部のi番目の演算器は、レジスタと、レジスタから入力されるデータに対してαi倍の乗算を行った結果を演算結果として加算器へ入力し、演算結果でレジスタの内容を更新する第1の乗算器と、を備える。第1演算部のレジスタには、初期値として係数が入力され、第2演算部の演算器は、第1演算部と異なる検索領域を検索対象とした演算をするための初期値を算出する初期値算出回路と、係数と初期値とのいずれか一方を選択してレジスタへ入力する第1のセレクタと、レジスタから入力されたデータ対してαK(Kは1以上の整数)倍の乗算を行う第2の乗算器と、レジスタの内容と第2の乗算器による演算結果とのいずれかを選択して第1の乗算器へ入力する第2のセレクタと、をさらに備える。第1のセレクタは、誤り位置多項式演算により得られた誤りビット数に応じて係数または初期値を選択する。
以下に添付図面を参照して、実施形態にかかるチェンサーチ回路、復号器、記憶装置およびチェンサーチ方法を詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
(第1の実施の形態)
図1は、第1の実施の形態にかかる半導体記憶装置(記憶装置)1の構成例を示すブロック図である。本実施の形態の半導体記憶装置1は、メモリコントローラ(メモリ制御装置)2と、NAND型記憶セルを備える半導体メモリ部(メモリ部)3と、で構成される。半導体記憶装置1は、通信インタフェースを介してホスト4に接続され、ホスト4に対する外部記憶媒体として機能する。ホスト4の例としては、パーソナルコンピュータやCPU(Central Processing Unit)コア等があげられる。
図1は、第1の実施の形態にかかる半導体記憶装置(記憶装置)1の構成例を示すブロック図である。本実施の形態の半導体記憶装置1は、メモリコントローラ(メモリ制御装置)2と、NAND型記憶セルを備える半導体メモリ部(メモリ部)3と、で構成される。半導体記憶装置1は、通信インタフェースを介してホスト4に接続され、ホスト4に対する外部記憶媒体として機能する。ホスト4の例としては、パーソナルコンピュータやCPU(Central Processing Unit)コア等があげられる。
メモリ部3は、例えばNAND型フラッシュメモリ等の不揮発性半導体メモリにより構成される。メモリ部3が備えるメモリチップは単数であってよいし、複数であってもよい。
メモリコントローラ2は、内部バス20と、HostI/F(インタフェース)21と、NANDI/F(メモリ制御部)22と、制御部23と、符号化/復号化処理部24と、で構成される。符号化/復号化処理部24は、符号化部25と、復号化部(復号器)26と、で構成される。
HostI/F21は、ホスト4から受信した命令、データなどを内部バス20に出力する。また、HostI/F21は、内部バス20経由で入力されたデータ、制御部23からの応答通知(命令の実行完了を示す通知など)などをホスト4へ送信する。HostI/F21は、例えば、SATA(Serial Advanced Technology Attachment)、SAS(Serial Attached SCSI)、PCI(Peripheral Component Interconnect) Express等の通信インタフェース規格に準拠している。
制御部23は、半導体記憶装置1の各構成要素を統括的に制御する制御部であり、CPUコア、RAM(Random Access Memory)、ROM(Read Only Memory)、DMA(Direct Memory Access)コントローラなどで構成される。制御部23は、ホスト4からHostI/F21および内部バス20経由で命令を受けた場合に、その命令に従った制御を行う。例えば、制御部23は、ホスト4からの命令に従って、半導体メモリ部3へのデータの書き込み、半導体メモリ部3からのデータの読み出しなどをNANDI/F22へ指示する。また、制御部23は、符号化/復号化処理部24へ誤り訂正符号化処理または復号化処理の実施を指示する。
符号化/復号化処理部24は、制御部23の指示に基づいて、ホスト4から受信したデータに対して誤り訂正符号化処理を行い、NANDI/F22へ出力し、NANDI/F22から入力されるデータに対して復号化処理を行う。NANDI/F22は、制御部23の指示に基づいて半導体メモリ部3の読み書き等を行なう。
なお、図1に示した半導体記憶装置1の構成は一例であり、半導体メモリとその半導体メモリの読み書きを制御するコントローラを備え、ホスト4と通信が可能な構成であれば、図1に示した構成に限らずどのような構成でもよい。また、半導体メモリ部3の代わりに半導体メモリ以外の記憶手段を用いてもよい。
次に、本実施の形態の半導体メモリ部3への書き込み動作について説明する。まず、制御部23は、ホスト4からデータの書き込みを指示されると、符号化/復号化処理部24に符号化の実施を指示するとともに、NANDI/F22へ半導体メモリ部3への書き込みを指示する。ホスト4から送信される書き込み対象のデータは、半導体記憶装置1内の図示しないバッファメモリに書き込まれる。符号化/復号化処理部24の符号化部25は、バッファメモリから入力されるデータに対して誤り検出符号および誤り訂正符号を生成し、生成した符号をNANDI/F22へ出力する。NANDI/F22は、バッファメモリから入力されるデータと、符号化部25が生成した冗長符号と、を半導体メモリ部3へ書き込む。
本実施の形態では、符号化部25は、符号化処理として、誤り検出符号および誤り訂正符号を生成する。図2は、本実施の形態の符号化部25の構成例を示す図である。なお、ここでは、符号化部25が、誤り検出符号としてCRCを生成する例を説明するが、誤り検出符号はCRCに限定されない。図2に示すように、符号化部25は、所定のサイズの書き込みデータに基づいてCRC(Cyclic Redundancy Check)を生成する誤り検出符号エンコーダ(誤り検出符号化部)251と、所定のサイズの書き込みデータと当該データに対応するCRCとに基づいて誤り訂正符号化処理を実施する誤り訂正符号エンコーダ252と、を備える。また、誤り訂正符号としてはどのような符号を用いてもよいが、例えばBCH符号やRS(Reed−Solomon)符号等を用いることができる。以下BCH符号を例にとって説明する。
本実施の形態では、所定のサイズの書き込みデータに基づいてCRCが生成され、所定のサイズの書き込みデータと対応するCRCとを誤り訂正符号化対象として誤り訂正符号化処理が実施される。そして、書き込みデータと誤り訂正符号化処理による生成された冗長符号とを半導体メモリ部3へ書き込む。
次に、本実施の形態の半導体メモリ部3からの読出し動作について説明する。制御部23は、ホスト4からデータの読み出しを指示されると、符号化/復号化処理部24に復号化の実施を指示するとともに、NANDI/F22へ半導体メモリ部3からの読み出しを指示する。NANDI/F22は、制御部23からの指示に基づいて半導体メモリ部3からデータと対応する誤り検出符号および冗長符号(誤り訂正符号化における冗長符号)とを読み出し、読み出したデータと対応する誤り検出符号および冗長符号を符号化/復号化処理部24へ出力する。符号化/復号化処理部24の復号化部26は、読み出したデータと誤り検出符号および冗長符号とに基づいて復号処理を行い、読み出したデータに誤りが有ると判断した場合には、誤り訂正を実施する。HostI/F21は、誤り訂正後のデータ(誤りの無い場合には、半導体メモリ部3から読み出したデータ)をホスト4に送信する。
以下、本実施の形態の復号処理について説明する。図3は、本実施の形態の復号化部26の構成例を示す図である。復号化部(復号装置)26は、図3に示すように、シンドローム計算部261と、誤り位置多項式演算部262と、チェンサーチ部(誤り位置計算部)263と、誤り検出符号デコーダ(誤り検出部)264と、復号制御部265と、を備える。シンドローム計算部261、誤り位置多項式演算部262およびチェンサーチ部263は、誤り訂正処理を行う誤り訂正処理部(誤り訂正処理デコーダ)を構成する。
なお、図2、図3の構成例では、誤り検出符号エンコーダ251、誤り検出符号デコーダ264を備えているが、本実施の形態では、誤り検出符号を付加しなくてもよく、誤り検出符号を付加しない場合には、図2の誤り検出符号エンコーダ251、図3の誤り検出符号デコーダ264を備えなくてもよい。
図4は、本実施の形態の復号処理手順の一例を示すフローチャートである。なお、復号処理中の誤り位置多項式の計算は、BM(Berlekamp−Massey)法、ユークリッド互除法、ピーターソン法等どのような方法を用いてもよいが、以下の説明では、BM法を用いることを想定して説明する。なお、符号化部25は最大訂正ビット数であるTビットの誤り訂正符号を生成しているとする。
制御部23は、HostI/F21経由でホスト4からデータの読み出し要求を受け取ると、読み出し対象のデータを読み出すようNANDI/F22へ指示し、NAND I/F22は読み出し対象のデータを対応するCRCおよび誤り訂正符号とともに読み出し、復号化部26へ渡す。復号化部26では、NANDI/F22から読み出し対象のデータを受け取ると復号処理を開始する。
復号処理を開始すると、シンドローム計算部261に対してシンドローム計算の実施を指示し、シンドローム計算部261がシンドローム計算を実施する(ステップS1)。その後、復号制御部265は、誤り位置多項式演算部262に対して、計算済みのシンドローム計算結果を用いて誤り多項式演算を行うよう指示し、誤り位置多項式演算部262が誤り位置多項式演算を実施する(ステップS2)。
誤り位置多項式演算は、誤り位置多項式をσ(z)とするとき、σ(z)=1+σ1z1+σ2z2+…の係数σ1,σ2,…をシンドロームの値から計算する処理である。具体的な方法としては、Berlekamp−Massey(BM)法、ユークリッド互除法、ピーターソン法等がある。ピーターソン法は、行列計算で係数σとシンドロームの間に成り立つ連立方程式を解く方法であり、BM法およびユークリッド互助法は多項式を使って係数σとシンドロームの連立方程式を逐次的に計算する方法である。なお、復号処理中の誤り位置多項式の計算は、どのような方法を用いてもよい。
次に、復号制御部265は、チェンサーチ部263に対して、誤り位置多項式演算の結果を用いてチェンサーチを行うよう指示し、チェンサーチ部263は係数σ1,σ2,…を用いてチェンサーチを実施し(ステップS3)、誤り位置を特定し、処理を終了する。チェンサーチは、誤り位置多項式σ(z)に順次値を代入しσ(z)=0となる値である誤りロケータ(誤り位置)を探索する手法である。復号制御部265は、チェンサーチにより、σ(z)=0となった場合、対応するビットに誤りがあると判定し、当該ビットを反転させることにより誤り訂正を実施する。
以上の復号処理の後、誤り検出符号デコーダ264は、誤り訂正後のデータおよび対応するCRCを用いて誤り訂正後のデータに誤りがあるか否かを判定する。制御部23は、誤り検出符号デコーダ264により誤りが無いと判定されたデータをHostI/F21経由でホスト4へ送信し、誤りが有ると判定された場合はホスト4との間で定められた所定の処理を実施する(例えば、誤りがあることをホスト4に通知する等)。
次に、本実施の形態のチェンサーチ部263について説明する。図5は、一般的なチェンサーチ回路の構成例を示す図である。図5に示すように、一般的なチェンサーチ回路は、システムで規定した最大の誤り訂正ビット数をTとするとき、演算器101−1〜101−Tと全ての演算器の出力の加算をする加算器を備え、加算結果が?1になるビットの位置が誤り位置だと判定する。演算器101−i(i=1,2,…,T)は、誤り位置多項式演算により算出された係数σiを保持するレジスタ102と、αi倍の乗算を行う乗算器103−iを備える。レジスタ102の内容は、初期値として係数σiを記憶し、符号語の各ビット位置のエラー判定を行うためのαi倍の乗算を実行する度に、計算した乗算結果で上書き更新する。
このように、一般的なチェンサーチ回路では、システムで規定した最大の誤り訂正ビット数であるT個の演算器を備える。しかし、符号語内に存在する誤りビット数は平均的にはシステムで規定した誤りビット数よりも非常に少ない。このため、チェンサーチ回路の大部分の回路が有効に活用されていない。この状況を鑑みて、本実施の形態ではシステムで規定した最大の訂正ビット数よりも少ない演算器を時分割で使用することでチェンサーチ回路の回路規模を削減する方法を提供する。
図6は、本実施の形態のチェンサーチ部263(チェンサーチ回路)の構成例を示す図である。本実施の形態のチェンサーチ回路は、演算器71−1〜71−L(L<T)と、加算器72と、レジスタ73(第1のレジスタ)と、を備える。演算器71−i(i=1,2,…,L)は、セレクタ711(第1のセレクタ)と、セレクタ712(第3のセレクタ)と、αi倍の乗算を行う乗算器713−i(第1の乗算器)と、レジスタ714(第3のレジスタ)と、レジスタ715(第2のレジスタ)と、αL倍の乗算を行う乗算器716(第2の乗算器)と、を備える。本実施の形態では、図6に示したようなTより少ない個数の演算器71−1〜71−Lを用いることにより、復号処理速度の低下を抑えて回路規模を削減する。
以下、本実施の形態のチェンサーチの計算手順について説明する。復号制御部265は、誤り位置多項式演算の後、誤り位置多項式の項の数Yに応じてチェンサーチ部263を制御する。誤り位置多項式の項の数YをY=aL+bとすると、復号制御部265は、誤り位置多項式のn番目の項の係数σnを、演算器71−p(p=n mod L(nをLで割った余り))のレジスタ715の(int(n/L)+1)番目に格納するよう制御する。
まず、誤り位置多項式の項の数Yが、L以下の場合のチェンサーチ部263の動作を説明する。演算器71−1〜71−Yが次の動作を並行して実施する。レジスタ715は、誤り位置多項式のそれぞれ対応する項の係数を格納する。セレクタ712が、レジスタ715を入力として選択し、レジスタ715に格納されたデータ(誤り位置多項式の項の係数)を第1の乗算器(演算器71−i(i=1,2,…,Y)の乗算器713−i)へ入力し、第1の乗算器による演算が実施される。加算器72は、演算器71−1〜71−Yの第1の乗算器から出力される演算結果をExOR演算する。復号制御部265は、ExOR演算結果が−1となるか否か(0となるか否か)により各ビット(誤り位置多項式の次数)に誤りがあるか否かを判定する。YがL以下の場合、それぞれの演算器71−1〜71−Lでは、1個あるいは0個の項を計算することになる。
次に、誤り位置多項式の項の数Yが、Lより大きく2L未満である場合(L<Y≦2L)のチェンサーチ部263の動作を説明する。図7は、L<Y≦2Lの場合のチェンサーチの処理手順の一例を示す図である。この場合、それぞれの演算器71−1〜71−Lでは、1個あるいは2個の項の計算をすることになる。そこで、復号制御部265は、全ての演算器71−1〜71−Lを用いてそれぞれ1個目の項の計算(ステップS110)を実施した後に、演算器71−1〜71−Y´(Y´=Y−L)を用いてそれぞれ2個目の項の計算(ステップS120)を実施するよう制御する。
まず、レジスタ715は、誤り位置多項式のそれぞれ対応する項の係数を格納する(ステップS11)。そして、全ての演算器71−1〜71−Lを用いて1個目の項の計算を開始し、セレクタ712が、レジスタ715を入力として選択し、レジスタ715の1番目のデータを第1の乗算器へ入力し、第1の乗算器による演算が実施される(ステップS12)。また、レジスタ715の値は第1の乗算器による演算結果で更新される。第1の乗算器の出力はレジスタ715の1番目に格納される。加算器72は、演算器71−1〜71−Yの第1の乗算器から出力される演算結果のExOR演算を実行し、ExOR演算結果をレジスタ73に格納する(ステップS13)。このとき、復号制御部265は、ExOR演算結果(加算結果)が−1となるか否かにより各ビット(誤り位置多項式の次数)に誤りがあるか否かは判定しない。ステップS11〜ステップS13は、YがL以下の場合と同様である。
復号制御部265は、加算器72により加算された結果(演算器71−1〜71−Lの演算結果の加算結果)を中間結果としてレジスタ73に格納する(ステップS14)。
その後、復号制御部265は、演算器71−1〜71−Y´を用いた2個目の項の計算を開始し、演算器71−1〜71−Y´のセレクタ711が、レジスタ715を入力として選択し、レジスタ715に格納されている2番目のデータが第2の乗算器(乗算器716)に入力され、第2の乗算器によりαL倍とする演算が行われる(ステップS15)。次に、セレクタ712が、第2の乗算器の演算結果を第1の乗算器へ入力し、第1の乗算器による演算が行われる(ステップS16)。第1の乗算器の出力はレジスタ715の2番目に格納される。加算器72は、レジスタ73に格納されている中間結果と第1の乗算器の演算結果とを加算し、復号制御部265は、加算結果が−1となるか否かにより各ビットに誤りがあるか否かを判定し(ステップS17)、処理を終了する。
以上の動作により、j(L<j≦Y)番目の項について、第2の乗算器によるαL倍の演算と第1の乗算器によるαj-L倍の演算との両方が実施されることにより、αL×αj-L=αj倍の演算を実施することができる。また、L+1〜j(L<j≦Y)番目の項の演算結果とレジスタ73に格納されている中間結果とを加算することで、1〜j番目の項をそれぞれ計算した後に全て加算する処理と同等の処理を実現することができる。
次に、誤り位置多項式の項の数Yが、2Lより大きい場合(2L<Y)のチェンサーチ部263の動作を説明する。図8は、2L<Yの場合のチェンサーチの処理手順の一例を示す図である。この場合、それぞれの演算器71−1〜71−Lでは、imax−1個あるいはimax個の項の計算をすることになる。なお、imaxはY/Lの小数点以下を切り上げた整数であり、imax≧3である。Y´´=Y−(imax−1)×Lとするとき、全ての演算器71−1〜71−Lがそれぞれ(imax−1)個の項の計算を行った後、演算器71−1〜71−Y´´がさらに1つの項の計算を行う。
復号制御部265は、誤り位置多項式の項の数Yに基づいてimaxおよびY´´を求め、全ての演算器71−1〜71−Lを用いてそれぞれ1個目および2個目の項の計算(ステップS110、ステップS120)を実施した後に、3個目以上imax個目までの項の計算を実施する。
まず、L<Y≦2Lの場合と同様に、1個目および2個目の項の計算(ステップS110、ステップS120)を実施する。ステップS120の後、復号制御部265は、加算器72により加算された結果(中間結果と2回目の演算器71−1〜71−Lの演算結果との加算結果)を中間結果としてレジスタ73に格納する(ステップS18)。
復号制御部265は、計算回数を示す変数iをi=3とする(ステップS19)。復号制御部265は、i個目の項の計算を開始し、演算器71−1〜71−L(i=imaxの場合は演算器71−1〜71−Y´´)のセレクタ711が、レジスタ715を入力として選択し、レジスタ715に格納されているi番目のデータが第2の乗算器(乗算器716)に入力され、第2の乗算器によりαL倍とする演算が行われる(ステップS20)。次に、復号制御部265は、αL倍の繰り返し演算回数を示すカウンタj=1とし(ステップS21)、第2の乗算器の演算結果をレジスタ714へ格納する(ステップS22)。
セレクタ711が、レジスタ714を入力として選択し、レジスタ714に格納されているデータ(ステップS22で格納されたデータ)が第2の乗算器に入力され、第2の乗算器によりαL倍とする演算が行われる(ステップS23)。復号制御部265は、j=i−2であるか否かを判断し(ステップS24)、j=i−2の場合(ステップS24 Yes)、セレクタ712が、第2の乗算器の演算結果を第1の乗算器へ入力し、第1の乗算器による演算が行われる(ステップS25)。レジスタ715の値は第1の乗算器による演算結果で更新される。そして、加算器72は、レジスタ73に格納されている中間結果と第1の乗算器の演算結果との加算(ExOR演算)を実行する(ステップS26)。その後、復号制御部265は、i=imaxであるか否かを判断し(ステップS27)、i=imaxである場合(ステップS27 Yes)、復号制御部265は、加算結果が−1となるか否かにより各ビットに誤りがあるか否かを判定し(ステップS28)、処理を終了する。
ステップS27で、i=imaxでない場合(ステップS27 No)、加算結果をレジスタ73へ中間結果として格納し、i=i+1とし(ステップS29)、ステップS20へ戻る。ステップS24で、j=i−2でない場合(ステップS24 No)、j=j+1とし(ステップS30)、ステップS22へ戻る。
以上の動作により、例えば、imax=3の場合、演算器71−i(i=1,2,…,Y´´)では、2個目までの項の計算の後、ステップS20によるαL倍の演算とステップS23によるαL倍の演算とステップS25によるαi倍の演算がそれぞれ1回ずつ実施されることにより、α2L+i倍の演算が実施されることになる。imaxが4の場合は、3個目までの項の計算の後、さらにステップS20によるαL倍の演算とステップS23による2回のαL倍の演算とステップS25によるαi倍の演算が実施されることにより、α3L+i倍の演算が実施されることになる。
なお、ここでは、αL倍の演算を行う乗算器713を備える例を説明したが、αL倍以外の定数倍の演算を行う乗算器を備えるようにしてもよい。また、定数倍の演算を行う乗算器を複数備え、組み合わせて乗算を行うようにしてもよい。例えば、αL倍の乗算を行う乗算器とα2L倍の乗算を行う乗算器を備え、αL+i(i=1,2,…,L)倍の演算を行う場合はαL倍の乗算器を用い、α2L+i(i=1,2,…,L)倍の演算を行う場合はα2L倍の乗算器を用いる等、異なる定数倍の乗算器の組み合わせで乗算を実施するようにしてもよい。
以上のように、本実施の形態では、誤り位置多項式の項の数に応じてαL倍を反復して実行することで任意の定数倍を実現することが可能になる。また、誤り位置多項式の項の数に応じて乗算器が乗ずる数を変更する必要もない。このため、演算速度の低下を抑えつつ、少ない演算器で任意の数の項のチェンサーチの計算が可能になる。
(第2の実施の形態)
図9は、第2の実施の形態にかかる復号処理手順の一例を示すフローチャートである。本実施の形態の半導体記憶装置1の構成は第1の実施の形態と同様である。第1の実施の形態と同様の機能を有する構成要素は、第1の実施の形態と同一の符号を付して重複する説明を省略する。
図9は、第2の実施の形態にかかる復号処理手順の一例を示すフローチャートである。本実施の形態の半導体記憶装置1の構成は第1の実施の形態と同様である。第1の実施の形態と同様の機能を有する構成要素は、第1の実施の形態と同一の符号を付して重複する説明を省略する。
第1の実施の形態では、チェンサーチ部263の演算回路を削減する例を説明したが、本実施の形態では、チェンサーチ部263以外の回路規模についても削減可能な復号方法を適用する例を説明する。
本実施の形態では、符号語の訂正可能な最大の誤り訂正ビット数(以下、最大訂正ビット数という)に比べ、実際の復号(誤り訂正復号)対象の符号語に含まれる誤りビット数が平均的には低いことに着目し、最大訂正ビット数より少ないビットを誤り数期待値として設定して復号処理を行い、正しく復号できたかどうかを誤り検出符号デコーダ264でチェックし、この復号処理で正しく訂正されなかった場合に、誤り数期待値を増やして再度計算する。さらにこの復号処理で正しく訂正されなかった場合に、誤り数期待値を増やしてシンドローム計算から誤り検出符号デコードまでを再度計算する。このように誤り数期待値の設定と復号処理と復号結果のチェックをデータが正しく訂正されるまで繰り返し、誤り数期待値を最大訂正ビット数に設定しても正しく訂正されなかった場合には訂正不可と判定する。
このような処理を行うことにより、本実施の形態では、1回の誤り数期待値の増加量と復号処理で使用する演算器量を平均的な誤りビット数に合わせて備えることで、最大訂正ビット数に対応した演算器を備える場合とくらべて回路規模を削減しつつ訂正処理にかかる平均的な時間を同程度に抑えることができる。
本実施の形態では、符号語の誤り訂正能力として誤り数期待値Xを設定してデータが正しく訂正されたと誤り検出符号デコーダが判断した場合に処理を打ち切るため、最大訂正ビット数を設定してシンドローム計算から誤り検出符号デコーダまでの処理を繰り返し実行した時間よりも早く処理を打ち切ることが可能になる。特に符号語中に含まれる誤りビット数が復号化部内に備える演算器の数以下である場合にはシンドローム計算から誤り検出符号デコーダまでの処理を1回の処理で完了できるため、最大訂正ビット数に応じた演算器を備える場合と同じ計算時間になる。一般に平均誤り数は最大訂正ビット数より低いため、誤り数期待値Xの更新方法等を適切に実施すれば平均的には処理速度は向上する。
復号処理中の誤り位置多項式の計算は、BM(Berlekamp−Massey)法、ユークリッド互除法、ピーターソン法等どのような方法を用いてもよいが、以下の説明では、BM法を用いることを想定して説明する。なお、符号化部25は最大訂正ビット数であるTビットの誤り訂正符号を生成しているとする。
図9を用いて本実施の形態の復号方法について説明する。なお、半導体メモリ部3への書き込み動作、復号処理以外の半導体メモリ部3からの読み出し時の動作は、第1の実施の形態と同様である。ただし、第1の実施の形態では、誤り検出符号の付加は実施しなくてもよいとしたが、本実施の形態では、誤り検出符号は付加されることを前提とする。復号化部26では、NANDI/F22から読み出し対象のデータを受け取ると復号処理を開始する。
復号処理を開始すると、復号制御部265は、誤り数期待値XをA(A<T)ビット単位で更新する(ステップS31)。具体的には、処理の開始後、最初(1サイクル目)のステップS1ではX=Aと設定し、2回目(2サイクル目)のステップS1ではXにAを加算する。なお、後述のように、本実施の形態では、設定した誤り数期待値Xで誤り訂正が正しく行えなかった場合には、ステップS31に戻って誤り数期待値Xを更新して再度演算を行うが、これらの1回の誤り数期待値Xの設定を1サイクルと表記する。なお、誤り数期待値Xを増加させる変数であるAは平均誤り数以上の値を設定することが望ましい。平均誤り数と同じ値を用いた場合、平均的なサイクル数を1に押さえることができる。
次に、復号制御部265は、シンドローム計算を実施するようシンドローム計算部261を制御する(ステップS32,S33)。本実施の形態のシンドローム計算部261は、2×A組の加算器、乗算器およびレジスタを用いて、それぞれシンドロームS(α1),S(α2),S(α3),…,S(α2X)を求める。
ステップS33では、シンドローム計算部261は、上記の2×A組の加算器、乗算器およびレジスタを用いて、それぞれシンドロームS(α1),S(α2),S(α3),…,S(α2X)を求める。具体的には、例えばA=4とし2サイクル目の誤り数期待値X=8でシンドロームの計算をするとした場合、8×2=16個のシンドロームをN=2×A=8個の演算器で計算をする。
図10は、本実施の形態のシンドローム計算手順の一例を示すフローチャートである。まず、シンドローム計算を開始すると、復号制御部265は、誤り数期待値Xと計算済みのシンドローム数とに基づいて2×A個の乗算器の係数を設定する(ステップS51)。そして、2×A個の乗算器によりシンドローム計算を実施して計算結果をシンドローム記憶部へ格納し(ステップS52)、当該サイクル内で計算済みのシンドローム数を更新する(ステップS53)。当該サイクル内で計算済みのシンドローム数とは、ステップS31で誤り数期待値が設定され、次のステップS31を実施するまでの1サイクルのなかで、計算済みのシンドローム数であり、誤り数期待値が更新されて次のサイクルのシンドローム計算が開始される際には初期化(計算済みのシンドローム数は0)されるとする。
そして、復号制御部265は、計算済みのシンドローム数がX個となったか否かを判断し(ステップS54)、X個となった場合(ステップS54 Yes)には処理を終了し、X個未満の場合(ステップS54 No)、ステップS51へ戻る。
例えば、A=4とし、2サイクル(図9のステップS31で更新されるサイクル)目に相当する誤り数期待値X=8でシンドロームの計算をするとした場合、シンドローム計算部261は8個(2×A個)の乗算器を有し、1サイクル目のシンドローム計算では、はじめ(1周目)のステップS51では、S(α1),S(α2),S(α3),…,S(α8)を求めるよう係数が設定される。このS(α1),S(α2),S(α3),…,S(α8)は、シンドローム計算部261のシンドローム記憶部へ格納され、2周目のステップS51では、S(α9),S(α10),S(α11),…,S(α16)を求めるよう係数が設定され、2周目のステップS54でX個のシンドロームを計算したと判定されてそのサイクルのシンドローム計算を終了する。なお、ここでは、シンドローム計算部261は、2×A個の乗算器を有することとしたが、2×B個(A≠B)の乗算器を有するように構成してもよい。この場合、ステップS51では2×B個の係数を計算してステップS22では2×B個のシンドロームを求めることになる。
シンドローム計算部261は、以上の処理により2×X個のシンドロームの計算が終了すると、シンドローム記憶部に格納されている2×X個のシンドロームを誤り位置多項式演算部262へ渡す。
図9の説明に戻り、ステップS33を実施した後、復号制御部265は、誤り位置多項式演算部262に計算済みのシンドローム計算結果を用いて誤り数期待値Xに対応する処理を行うよう指示し、誤り位置多項式演算部262が誤り位置多項式演算を実施する(ステップS34)。
本実施の形態では、誤り位置多項式演算部262は、平均的な誤り数に合わせたM個のガロア体計算回路と、ガロア体演算回路と、を備える。なお、ここでは、Mを誤り数期待値を増加させる数に合わせ、M=Aとする。
誤り位置多項式演算部262では、シンドローム記憶部へ格納されたシンドロームを用いて、例えば、ガロア体計算回路が、多項式x0z0,x1z1,…に定数を乗算するようなガロア体の乗算等の演算を各項ごとに各々行い、演算結果をメモリ上に保持し、多項式の全ての項の計算が終わっていない場合には、残りの項の演算をガロア体計算回路の個数単位で計算をする。
なお、誤り位置多項式は、ユークリッド互除法やBM法等の計算アルゴリズムによって計算方法が異なるため具体的な計算方法については省略するが、いずれの場合もM個のガロア体計算回路を用いて、誤り数期待値Xビットに対応する多項式の計算を時分割で実行し、係数σを導出する。
図11は、誤り位置多項式演算の一例を示すフローチャートである。誤り位置多項式演算部262は、シンドローム計算部261からシンドロームの計算結果を取得すると、誤り多項式の項数iを1に設定する(ステップS61)。そして、σ(z)や評価式等の計算を行う(ステップS62)。ステップS62の演算内容は、ユークリッド互除法やBM法等の計算アルゴリズムに依存するが、一般にはガロア体計算回路を、誤り位置多項式の項の数であるi個備えて演算を行う。そして、ガロア体計算回路の結果に基づいてガロア体演算回路により、評価式の計算等を実施する。本実施の形態では、ガロア体計算回路の個数をM(=A)としているため、iがMより大きい場合には、時分割で計算を行う。
図12は、ステップS62の計算手順の一例を示すフローチャートである。まず、復号制御部265は、A個のガロア体計算回路の係数を指定し(ステップS65)、演算を実行する(ステップS66)。そして、演算により求めた計算結果を復号制御部265へ出力する(ステップS67)。復号制御部265は、i個の多項式の全ての項を計算したか否かを判断し(ステップS68)、計算した場合(ステップS68 Yes)処理を終了して、図11のステップS63へ進む。i個の多項式のうち計算していない項がある場合(ステップS68 No)、ステップS65へ戻り残りの項を計算する。
図11の説明に戻り、ステップS62の演算の後、復号制御部265は、i=Xであるか否かを判断する(ステップS63)。i=Xの場合(ステップS63 Yes)は、処理を終了して、図9のステップS35へ進む。i=Xでない場合(ステップS63 No)は、i=i+1とし(ステップS64)、ステップS62へ戻る。なお、上述の例では、M=AとしてA個ずつの演算を行っているが、M=Aでない場合には、M個ずつの演算を行えばよい。また、実際の誤り数iがXよりも少ないことがステップS62の評価式の結果により判明した場合などにはi=Xになっていなくても終了する動作を行ってよい。
次に、誤り位置多項式演算部262は、演算結果に基づいて、誤り位置多項式演算におけるエラーを検出したか否かを判断し、エラーを検出した場合は復号制御部265へ通知する(ステップS35)。例えば、評価関数を用いて導出した係数σが正しいかどうかを判断する計算アルゴリズムでは、評価関数を計算した結果が正しいかどうかで判断する。なお、評価関数が定義されない誤り位置多項式の計算アルゴリズムを用いる場合等には、ステップS35を行わなくてもよい。
エラーを検出しなかった場合(ステップS35 No)、復号制御部265は、チェンサーチ部263の乗算器71−1〜71−Lに誤り位置多項式の計算で導出した係数σを設定し、チェンサーチ部263は係数σから誤り位置の特定を実施する(ステップS36)。本実施の形態のチェンサーチ部263は、第1の実施の形態のチェンサーチ部263と同様の構成であり、演算器71−1〜71−Lと、加算器72と、レジスタ73と、を備える。なお、Lは1以上の整数であれば良いが、シンドロームや誤り位置多項式の演算器の決定方法と同じ理由で、ここではL=Aとする。
本実施の形態のチェンサーチの計算手順は、第1の実施の形態と同様であるが、L=Aとした場合、1サイクル目の計算では、誤り位置多項式の項の数はL個以下となるため、第1の実施の形態のY≦Lの場合の動作が実行される。2サイクル目の計算では、L≦Y≦2Lの動作(図7)が実行され、3サイクル目以上では2L<Yの動作(図8)が実行される。
図9の説明に戻り、チェンサーチの終了後、誤り位置多項式の計算で導出した多項式の項の数とチェンサーチにより導出した誤りロケータの数とが不一致であるか否かを判断する(ステップS37)。解の個数が一致した場合(ステップS37 No)、復号制御部265は、誤り位置が誤り訂正対象として設定されている範囲外であるか否かを判断する(ステップS38)。誤り位置が誤り訂正対象として設定されている範囲外でないと判断した場合(ステップS38 No)、復号制御部265は、誤りロケータが指す誤り位置のビットを実際に反転し、誤り検出符号デコーダ264へ誤り検出処理の開始を指示し、誤り検出符号デコーダ264は誤り検出処理(CRC計算)を実施する(ステップS39)。具体的には、誤り検出符号デコーダ264は、誤り訂正後のデータおよび対応するCRCを用いて誤り訂正後のデータに誤りがあるか否かを判定する。
誤り検出処理の実施後、復号制御部265は、誤り検出符号デコーダ264が実施した誤り検出処理の結果に誤りが無いか否かに基づいて、正しく誤り訂正ができたか否かを判断する(ステップS40)。正しく誤り訂正ができたと判断した場合(ステップS40 Yes)、処理を終了する。
一方、ステップS35でエラーを検出した場合(ステップS35 Yes)、ステップS37で解の個数が不一致であると判断した場合(ステップS37 Yes)、ステップS38で誤り位置が誤り訂正対象として設定されている範囲外であると判断した場合(ステップS38 Yes)には、復号制御部265は、誤り数期待値が最大値(すなわちX=T)であるか否かを判断する(ステップS41)。誤り数期待値が最大値である場合(ステップS41 Yes)は、復号制御部265は、誤り訂正不可と判定して処理を終了する。誤り数期待値が最大値でない場合(ステップS41 No)は、ステップS31へ戻る。ステップS41を経由してステップS31へ戻ると、次のサイクルの処理が開始される。
以上の処理により、最大訂正ビット数に対応した演算回路や演算器を備えなくても、復号処理を行うことができる。また、例えば、最大訂正ビット数を20ビットとし、A=4とした場合に、実際の誤りの発生数が4ビット以下であれば、1サイクル目で計算が終了することになり、処理速度が向上する。
以上述べた誤り数期待値の更新方法は一例であり、例えば、処理の開始後、最初のステップS1ではX=A´(A´<A)と設定して、以降はXにAを加算していく方法等、サイクルごとに誤り数期待値を増やしていく方法であればどのような方法でもよい。
また、シンドローム計算部261、誤り位置多項式演算部262およびチェンサーチ部263が備える各演算器の個数N,M,Lはそれぞれ異なる値であってもよく、N/2(すなわちシンドローム計算部261が対応可能な訂正ビット数),M,Lのうち少なくとも1つがT未満の数であればよい。すなわちN/2,M,Lのうちの最小値をJとするとき、JがT未満であればよい。
以上のように、本実施の形態では、チェンサーチ部263だけでなく、シンドローム計算部261、誤り位置多項式演算部262についても最大訂正ビット数より小さいビット数に対応する演算回路を用いて、Aビット単位で想定誤り数を更新しつつ復号処理を実施するようにした。そして、正しく誤り訂正ができたか、または誤り数期待値を最大訂正ビット数として設定するまで、誤り数期待値を更新して復号処理を繰り返すようにした。このため、復号化部の回路を最大訂正ビット数分の演算回路を備える場合に比べて大幅に削減することができる。また、平均的な復号処理の速度を向上させることができる。
(第3の実施の形態)
図13は、第3の実施の形態にかかるチェンサーチ部263aの構成例を示すブロック図である。本実施の形態の半導体記憶装置は、第1の実施の形態のチェンサーチ部263をチェンサーチ部263aに替える以外は第1の実施の形態の半導体記憶装置1の構成と同様である。第1の実施の形態と同様の機能を有する構成要素は、第1の実施の形態と同一の符号を付して重複する説明を省略する。
図13は、第3の実施の形態にかかるチェンサーチ部263aの構成例を示すブロック図である。本実施の形態の半導体記憶装置は、第1の実施の形態のチェンサーチ部263をチェンサーチ部263aに替える以外は第1の実施の形態の半導体記憶装置1の構成と同様である。第1の実施の形態と同様の機能を有する構成要素は、第1の実施の形態と同一の符号を付して重複する説明を省略する。
本実施の形態のチェンサーチ部263aは、第1演算部400と、第2演算部410と、加算器(加算部)401と、を備える。本実施の形態の半導体メモリ部3への書き込み動作、チェンサーチ以外の復号処理を含む半導体メモリ部3からの読み出し時の動作は、第1の実施の形態または第2の実施の形態と同様である。
図13に示すように、第1演算部400は、演算器401−1〜401−Lと加算器404を備える。演算器401−i(i=1,2,…,L)は、レジスタ402と、αi倍の乗算を行う乗算器403−iと、を備える。第2演算部410は、演算器411−1〜411−Lと加算器418を備える。演算器411−i(i=1,2,…,L)は、初期値算出回路(init)412と、セレクタ413と、レジスタ414と、セレクタ415と、αi倍の乗算を行う乗算器416−iと、αL倍の乗算を行う乗算器417と、を備える。
本実施の形態では、誤り位置多項式演算により求めた項の数(誤りビット数)YがL以下である場合には、第1演算部400と、第2演算部410と、が解の検索対象範囲をそれぞれ異なる範囲として設定して演算(以下、並列演算という)を行う。一方、YがLより大きい場合には、第1演算部400と第2演算部410との両方を用いて解の全検索対象範囲について演算(以下、直列演算という)を行う。復号制御部265は、誤り位置多項式演算により求めた項の数に応じて並列演算と直列演算のどちらの動作を行うかを決定し、決定結果に基づいて第1演算部400および第2演算部410のセレクタ等を制御する。
図14は、本実施の形態の並列演算の概念を示す図である。解の検索する全範囲301に対して、上段に示すように、誤りビット数がLより大きい場合には、第1演算部400と第2演算部410は、全範囲301を検索対象範囲302としてチェンサーチを実施する。これに対し下段に示すように、誤りビット数がL以下の場合には、全範囲301を分割範囲303,304の2つに分割する。そして、第1演算部400の解の検索対象を分割範囲303とし、第2演算部410の解の検索対象を分割範囲304とする。この際、第2演算部410の計算開始(初期値)は、全範囲301の開始位置ではなく、分割範囲304の開始位置となる。このため、第2演算部410は、初期値を算出するための初期値算出回路412を備える。符号語WのW/2の位置から検索を開始するとした場合、演算器411−1の初期値算出回路412はσ1*(α^1)^(W/2)を計算する。同様に演算器411−Lの初期値算出回路412はσL*(α^L)^(W/2)を計算する。
第1演算部400の動作は、誤りビット数がL以下の場合もLより大きい場合も同じである。誤りビット数がL以上の場合は400−1〜400−Lを用いて演算を実施し、誤りビット数YがLより小さい場合には400−1〜400−Yを用いて演算を実施する。具体的には、復号制御部265によりレジスタ402に誤り位置多項式演算により求められた係数が格納され、乗算器403−1〜403−Lによる演算が実施され、加算器404がこの演算結果を加算する。誤りビット数がL以下の場合、加算器404の加算結果A1と後述の加算結果A2を用いて復号制御部265が、各ビットに誤りがあるか否かを判定する。誤りビット数がLより大きい場合、加算器404の加算結果は加算器401に入力され、加算器401が加算器404からの入力と加算器418からの入力とを加算した結果A3を出力する。この場合、復号制御部265は、A3を用いて各ビットに誤りがあるか否かを判定する。
第2演算部410の動作は、誤りビット数がL以下の場合とLより大きい場合とで異なる。まず、誤りビット数YがLより大きい場合について説明する。400−i(i=1,2,…,Y−L)のセレクタ413は、復号制御部265の制御により、入力元として誤り位置多項式の係数(σL+1,…,σY)を選択し、入力された係数をレジスタ414に格納する。レジスタ414に格納された係数は乗算器417に入力され、乗算器417がαL倍の演算を実施する。セレクタ415は、入力元として乗算器417を選択し、乗算器417の演算結果が416−i(i=1,2,…,Y−L)に入力される。そして、416−i(i=1,2,…,Y−L)がαi倍の演算を行う。加算器418は、416−1〜416−(Y−L)の演算結果を加算し、加算結果A2を加算器401へ入力する。加算器401は、上述のとおり、加算器401が加算器404からの入力と加算器418からの入力とを加算した結果A3を出力する。復号制御部265は、A3を用いて各ビットに誤りがあるか否かを判定する。
誤りビット数がL以下の場合、復号制御部265は、初期値算出回路412に対応する誤り位置多項式の係数(σ1,…,σY)をそれぞれ入力する。また、復号制御部265の制御により、セレクタ413は、入力元として初期値算出回路412を選択し、初期値算出回路412により算出された初期値がレジスタ414に格納される。セレクタ415は、入力元としてレジスタ414を選択し、レジスタ414に格納されたデータが416−i(i=1,2,…,Y−L)に入力される。そして、416−i(i=1,2,…,Y−L)がαi倍の演算を行う。加算器418は、416−1〜416−(Y−L)の演算結果を加算し、加算結果A2を求める。復号制御部265は、加算結果A1と加算結果A2を用いて各ビットに誤りがあるか否かを判定する。
なお、本実施の形態では、解の検索範囲を2分割する例を説明したが、演算部を3つ以上備え、解の検索範囲を3つ以上に分割するようにしてもよい。
このように、本実施の形態では、第1演算部400と第2演算部410を備え、誤りビット数が、第1演算部400が備える演算器の個数より多い場合は、αL倍の演算を実施する乗算器417を備える第2演算部410によりL+1番目以降の項を計算する。一方、誤りビット数が、第1演算部400が備える演算器の個数以下の場合は、解の検索範囲を分割して、第1演算部400と第2演算部410により異なる範囲を検索するようにした。このため、第1演算部400と第2演算部410が備える合計の演算器の個数までの誤りビット数に対応できるとともに、誤りビット数が少ない場合には並列演算を実施することができ、演算速度を向上させることができる。
(第4の実施の形態)
図15は、第4の実施の形態にかかるチェンサーチ部263bの構成例を示すブロック図である。本実施の形態の半導体記憶装置は、第1の実施の形態のチェンサーチ部263をチェンサーチ部263bに替える以外は第1の実施の形態の半導体記憶装置1の構成と同様である。第1の実施の形態と同様の機能を有する構成要素は、第1の実施の形態と同一の符号を付して重複する説明を省略する。
図15は、第4の実施の形態にかかるチェンサーチ部263bの構成例を示すブロック図である。本実施の形態の半導体記憶装置は、第1の実施の形態のチェンサーチ部263をチェンサーチ部263bに替える以外は第1の実施の形態の半導体記憶装置1の構成と同様である。第1の実施の形態と同様の機能を有する構成要素は、第1の実施の形態と同一の符号を付して重複する説明を省略する。
本実施の形態のチェンサーチ部263bは、第1演算部400aと、第2演算部410aと、加算器401と、を備える。本実施の形態の半導体メモリ部3への書き込み動作、チェンサーチ以外の復号処理を含む半導体メモリ部3からの読み出し時の動作は、第1の実施の形態または第2の実施の形態と同様である。
本実施の形態では、第3の実施の形態と同様に、誤り位置多項式演算により求めた項の数Yに応じて第1演算部400aと第2演算部410aを用いて直列または並列に用いることにより、誤りビット数の多い場合に対応しつつ誤りビット数の少ない場合には高速な処理を実現する。
第1演算部400aは、第1の実施の形態と同様の演算器71−1〜71−Lと、加算器72と、レジスタ73と、を備える。第2演算部410aは、演算器500−1〜500−Lと、加算器72と、レジスタ73と、を備える。演算器500−i(i=1,2,…,L)は、α2L倍の乗算を行う乗算器717と、乗算器716の出力と乗算器717の出力といずれか一方を選択してセレクタ712に出力するセレクタ718と、第3の実施の形態と同様の初期値算出回路412およびセレクタ413と、を追加する以外は、演算器71−iと同様である。
本実施の形態では、誤り位置多項式演算により求めた項の数が2L以下である場合には、第1演算部400aと、第2演算部410aと、が解の検索対象範囲をそれぞれ異なる範囲として設定して演算を行う。一方、Yが2Lより大きい場合には、第1演算部400aと第2演算部410aとの両方を用いてチェンサーチを行う。
第1演算部400aの演算器71−1〜71−L、第2演算部410aの演算器500−1〜500−Lは、誤り位置多項式演算により求めた項の数YがL以下である場合、第1の実施の形態のYがL以下である場合と同様の動作を並列して行う。また、誤り位置多項式演算により求めた項の数YがLより大きい場合、第1の実施の形態のL<Y≦2Lである場合と同様の動作を行う。この際、第2演算部410aの演算器500−1〜500−Lでは、セレクタ718は、乗算器716の出力を選択してセレクタ712へ出力する。
2L<Yの場合、第1演算部400aの演算器71−1〜71−Lの動作はY=2Lの場合と同様である。2L<Yの場合、第2演算部410aの演算器500−1〜500−Lは、乗算器716の替わりに乗算器717を用いて(セレクタ718が乗算器717を選択して)、第1の実施の形態のL<Y≦2Lである場合と同様の動作を行うことにより、α2L+1〜α3L倍の乗算をそれぞれ行うことができる。また、乗算器717を用いた乗算の次のサイクルで乗算器716を用いた乗算を行うことでα3L+1〜α4L倍の乗算を行うことができる。復号制御部265は、第1演算部400aから出力される加算結果A1と第2演算部410aから出力される加算結果A2の加算結果A3を用いて各ビットに誤りがあるか否かを判定する。
なお、Y>4Lの場合も、第2演算部410aの演算器500−1〜500−Lにおいて、乗算器716または乗算器717を用いて、繰り返し乗算を行う演算を行うことにより対応することができる。
誤り位置多項式演算により求めた項の数が2L以下の場合、第1演算部400aと第2演算部410aを用いて第3の実施の形態と同様に並列演算を実施する。この場合、演算器500−i(i=1,2,…,L)は、セレクタ413が、入力元として初期値算出回路412を選択し、レジスタ715に初期値算出回路412から出力される初期値を格納する。そして、セレクタ712が、レジスタ715から読み出した値を選択して乗算器713−iに入力する。復号制御部265は、加算結果A1と加算結果A2を用いて各ビットに誤りがあるか否かを判定する。
また、演算部を3つ以上備えて、並列演算時に検索範囲を3つ以上に分割するようにしてもよい。この場合、例えば、3つめの演算部は、乗算器716とα3L倍の乗算を行う乗算器とを備え、並列演算時には、乗算器716を用い、直列演算時にはα3L倍の乗算を行う乗算器を用いる。
なお、以上の例では、第2演算器410aでは、α2L倍の乗算を行う乗算器717を用いてα2L倍の乗算を行っているが、乗算器717を備えずに、第1の実施の形態で述べたようにαL倍の乗算を行う乗算器716とレジスタ714を用いてα2L倍の乗算を行うようにしてもよい。
このように、本実施の形態では、第1の実施の形態と同様の演算器を用いて、誤り位置多項式演算により求めた項の数に応じて直列演算または並列演算を行うようにした。このため、誤りビット数が多い場合に対応できるとともに、誤りビット数が少ない場合には並列演算を実施することができ、演算速度を向上させることができる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
1 半導体記憶装置、2 メモリコントローラ、3 半導体メモリ部、24 符号化/復号化処理部、25 符号化部、26 復号化部、251 誤り検出符号エンコーダ、252 誤り訂正符号エンコーダ、261 シンドローム計算部 、262 誤り位置多項式演算部、263 チェンサーチ部、264 誤り検出符号デコーダ、265 復号制御部、71−1〜71−L,401−1〜401−L,411−1〜411−L,500−1〜500−L 演算器、73,402,414,714,715 レジスタ、400,400a 第1演算部、72,401,404 加算器、410,410a 第2演算部、413,711,712 セレクタ、417,403−1〜403−L,416−1〜416−L,713−1〜713−L,716,717 乗算器。
Claims (7)
- 誤り位置多項式演算により算出された誤り位置多項式の項の係数に基づいてチェンサーチを行うチェンサーチ回路であって、
L(Lは1以上の整数)個の演算器と、
前記演算器による演算結果を加算する加算器と、
をそれぞれ備える第1および第2演算部と、
前記第1演算部の加算器による加算結果と前記第2演算部の加算器による加算結果とを加算する加算部と、
を備え、
前記第1演算部および第2演算部のi番目の前記演算器は、
レジスタと、
入力されるデータに対してαi倍の乗算を行った結果を演算結果として前記加算器へ入力し、前記演算結果で前記レジスタの内容を更新する第1の乗算器と、
を備え、
前記第1演算部の前記レジスタには、初期値として前記係数が入力され、前記第1演算部には、前記レジスタの内容が入力され、
前記第2演算部の前記演算器は、
前記第1演算部と異なる検索領域を検索対象とした演算をするための初期値を算出する初期値算出回路と、
前記係数と前記初期値とのいずれか一方を選択して前記レジスタへ入力する第1のセレクタと、
前記レジスタから入力されたデータ対してαK(Kは1以上の整数)倍の乗算を行う第2の乗算器と、
前記レジスタの内容と前記第2の乗算器による演算結果とのいずれかを選択して前記第1の乗算器へ入力する第2のセレクタと、
をさらに備え、
前記第1のセレクタは、前記誤り位置多項式演算により得られた誤りビット数に応じて前記係数または前記初期値を選択することを特徴とするチェンサーチ回路。 - K=Lとすることを特徴とする請求項1に記載のチェンサーチ回路。
- 前記第2演算部を複数備え、K=n(nは1以上の整数)×Lとし、第2演算部ごとにnの値が異なることを特徴とする請求項1または2に記載のチェンサーチ回路。
- 前記誤り位置多項式演算により得られた誤りビット数がL以下の場合に、前記第1のセレクタは前記係数を選択し、
前記誤り位置多項式演算により得られた誤りビット数がLより大きい場合に前記第1のセレクタは前記初期値を選択し、前記加算部は第1演算部の前記加算器から出力される第1の加算結果と第2演算部の前記加算器から出力される第2の加算結果とを加算することを特徴とする請求項1、2または3に記載のチェンサーチ回路。 - 誤り訂正符号化された符号語に基づいてシンドロームを計算するシンドローム計算部と、
前記シンドロームに基づいて誤り位置多項式演算を行う誤り位置多項式演算部と、
前記誤り位置多項式演算により算出された誤り位置多項式の項の係数に基づいてチェンサーチを行うチェンサーチ部と、
前記チェンサーチの結果に基づいて誤り訂正を行う復号制御部と、
を備え、
前記チェンサーチ部は、
L(Lは1以上の整数)個の演算器と、
前記演算器による演算結果を加算する加算器と、
をそれぞれ備える第1および第2演算部と、
前記第1演算部の加算器による加算結果と前記第2演算部の加算器による加算結果とを加算する加算部と、
を備え、
前記第1演算部および第2演算部のi番目の前記演算器は、
レジスタと、
前記レジスタから入力されるデータに対してαi倍の乗算を行った結果を演算結果として前記加算器へ入力し、前記演算結果で前記レジスタの内容を更新する第1の乗算器と、
を備え、
前記第1演算部の前記レジスタには、初期値として前記係数が入力され、前記第1演算部には、前記レジスタの内容が入力され、
前記第2演算部の前記演算器は、
前記第1演算部と異なる検索領域を検索対象とした演算をするための初期値を算出する初期値算出回路と、
前記係数と前記初期値とのいずれか一方を選択して前記レジスタへ入力する第1のセレクタと、
前記レジスタから入力されたデータ対してαK(Kは1以上の整数)倍の乗算を行う第2の乗算器と、
前記レジスタの内容と前記第2の乗算器による演算結果とのいずれかを選択して前記第1の乗算器へ入力する第2のセレクタと、
をさらに備え、
前記第1のセレクタは、前記誤り位置多項式演算により得られた誤りビット数に応じて前記係数または前記初期値を選択することを特徴とする復号回路。 - 誤り訂正符号化処理を実施して符号語を生成する符号化部と、
前記符号語を記憶するメモリ部と、
前記メモリ部から読み出された符号語に基づいてシンドロームを計算するシンドローム計算部と、
前記シンドロームに基づいて誤り位置多項式演算を行う誤り位置多項式演算部と、
前記誤り位置多項式演算により算出された誤り位置多項式の項の係数に基づいてチェンサーチを行うチェンサーチ部と、
前記チェンサーチの結果に基づいて誤り訂正を行う復号制御部と、
を備え、
前記チェンサーチ部は、
L(Lは1以上の整数)個の演算器と、
前記演算器による演算結果を加算する加算器と、
をそれぞれ備える第1および第2演算部と、
前記誤り位置多項式演算により得られた誤りビット数に応じて前記第1演算部の加算器による加算結果と前記第2演算部の加算器による加算結果とを加算する加算部と、
を備え、
前記第1演算部および第2演算部のi番目の前記演算器は、
レジスタと、
前記レジスタから入力されるデータに対してαi倍の乗算を行った結果を演算結果として前記加算器へ入力し、前記演算結果で前記レジスタの内容を更新する第1の乗算器と、
を備え、
前記第1演算部の前記レジスタには、初期値として前記係数が入力され、前記第1演算部には、前記レジスタの内容が入力され、
前記第2演算部の前記演算器は、
前記第1演算部と異なる検索領域を検索対象とした演算をするための初期値を算出する初期値算出回路と、
前記係数と前記初期値とのいずれか一方を選択して前記レジスタへ入力する第1のセレクタと、
前記レジスタから入力されたデータ対してαK(Kは1以上の整数)倍の乗算を行う第2の乗算器と、
前記レジスタの内容と前記第2の乗算器による演算結果とのいずれかを選択して前記第1の乗算器へ入力する第2のセレクタと、
をさらに備え、
前記第1のセレクタは、前記誤り位置多項式演算により得られた誤りビット数に応じて前記係数または前記初期値を選択することを特徴とする記憶装置。 - 誤り位置多項式演算により算出された誤り位置多項式の項の係数に基づいてチェンサーチを行うチェンサーチ回路におけるチェンサーチ方法であって、
L(Lは1以上の整数)個の演算器と、
前記演算器による演算結果を加算する加算器と、
をそれぞれ備える第1および第2演算部と、
前記第1演算部の加算器による加算結果と前記第2演算部の加算器による加算結果とを加算する加算部と、
を備え、
前記第1演算部および第2演算部の前記演算器は、レジスタと、第1の乗算器と、第2の乗算器と、を備え、
前記第1演算部の前記演算器が、前記係数を前記レジスタへ格納するステップと、
前記第1演算部のi番目の前記演算器の前記第1の乗算器が、前記レジスタから入力されるデータに対してαi倍の乗算を行った結果を演算結果として前記加算器へ入力し、前記演算結果で前記レジスタの内容を更新するステップと、
前記第2演算部の前記演算器が、前記第1演算部と異なる検索領域を検索対象とした演算をするための初期値を算出するステップと、
前記第2演算部の前記演算器が、前記誤り位置多項式演算により得られた誤りビット数に応じて前記係数と前記初期値とのいずれか一方を選択して前記レジスタへ入力するステップと、
第2演算部の前記演算器の前記第2の乗算器が、入力されたデータに対してαK(Kは1以上の整数)倍の乗算を行うステップと、
前記第2演算部のi番目の前記演算器の前記第1の乗算器が、入力データに対してαi倍の乗算を行った結果を演算結果として前記加算器へ入力し、前記演算結果で前記レジスタの内容を更新するステップと、
前記レジスタの内容と前記第2の乗算器による演算結果とのいずれかを選択して前記第1の乗算器への入力データとするステップと、
を含むことを特徴とするチェンサーチ方法。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2012067056A JP2013201482A (ja) | 2012-03-23 | 2012-03-23 | チェンサーチ回路、復号器、記憶装置およびチェンサーチ方法 |
US13/601,707 US8640013B2 (en) | 2011-09-22 | 2012-08-31 | Storage device |
US14/141,246 US9075739B2 (en) | 2011-09-22 | 2013-12-26 | Storage device |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2012067056A JP2013201482A (ja) | 2012-03-23 | 2012-03-23 | チェンサーチ回路、復号器、記憶装置およびチェンサーチ方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2013201482A true JP2013201482A (ja) | 2013-10-03 |
Family
ID=49521394
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2012067056A Pending JP2013201482A (ja) | 2011-09-22 | 2012-03-23 | チェンサーチ回路、復号器、記憶装置およびチェンサーチ方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2013201482A (ja) |
-
2012
- 2012-03-23 JP JP2012067056A patent/JP2013201482A/ja active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9075739B2 (en) | Storage device | |
JP5043562B2 (ja) | エラー訂正回路、その方法及び前記回路を備える半導体メモリ装置 | |
US9998148B2 (en) | Techniques for low complexity turbo product code decoding | |
JP5768022B2 (ja) | メモリコントローラ、記憶装置、誤り訂正装置および誤り訂正方法 | |
US10187085B2 (en) | Decoding method, decoding apparatus and decoder | |
JP5913560B2 (ja) | 低密度パリティチェック符号を使用する符号化および復号技法 | |
US20150363263A1 (en) | ECC Encoder Using Partial-Parity Feedback | |
JP2008165808A (ja) | 誤り訂正確率を減らすエラー訂正回路、その方法及び前記回路を備える半導体メモリ装置 | |
KR102064508B1 (ko) | 오류 검출 정정 회로 및 이를 포함하는 메모리 장치 | |
US10291258B2 (en) | Error correcting code for correcting single symbol errors and detecting double bit errors | |
US8924828B2 (en) | Memory controller, semiconductor storage device, and memory control method for error correction using Chien search | |
CN110941505A (zh) | 产生错误校正电路的方法 | |
KR101157516B1 (ko) | 데이터 처리 효율을 향상시킨 bch 코덱 | |
CN102045073A (zh) | 一种bch码译码方法和装置 | |
KR101569637B1 (ko) | 테스트 신드롬을 이용한 반복 복호 과정이 없는 연판정 bch 복호 방법 및 장치 | |
JP2013201503A (ja) | チェンサーチ回路、復号器、記憶装置およびチェンサーチ方法 | |
TW201926354A (zh) | 編碼器及相關的編碼方法與快閃記憶體控制器 | |
JP2023045450A (ja) | シンドローム計算回路、誤り訂正回路およびメモリシステム | |
JP2013201482A (ja) | チェンサーチ回路、復号器、記憶装置およびチェンサーチ方法 | |
US9608668B2 (en) | Error correcting apparatus, error correcting method, and program | |
CN111030709A (zh) | 基于bch译码器的译码方法、bch译码器及应用其的电路 | |
JP2013069377A (ja) | 復号方法、復号装置および記憶装置 | |
TWI514778B (zh) | 用於bch碼字之縮短秦式搜尋演算法延時的方法及電路 | |
US11115055B2 (en) | Method and apparatus for encoding and decoding data in memory system | |
KR101791637B1 (ko) | 디코더 및 이를 포함하는 메모리 컨트롤러 |