JP2015019276A - 記憶装置、crc生成装置およびcrc生成方法 - Google Patents
記憶装置、crc生成装置およびcrc生成方法 Download PDFInfo
- Publication number
- JP2015019276A JP2015019276A JP2013145767A JP2013145767A JP2015019276A JP 2015019276 A JP2015019276 A JP 2015019276A JP 2013145767 A JP2013145767 A JP 2013145767A JP 2013145767 A JP2013145767 A JP 2013145767A JP 2015019276 A JP2015019276 A JP 2015019276A
- Authority
- JP
- Japan
- Prior art keywords
- crc
- sequence
- error
- value
- reverse
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1008—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1004—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's to protect a block of data words, e.g. CRC or checksum
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Error Detection And Correction (AREA)
- Detection And Correction Of Errors (AREA)
Abstract
【課題】エラー系列が再生系列と逆順の場合に、遅延時間を低減してエラーのない記録系列に対するCRC値を生成すること。
【解決手段】本発明の一つの実施形態は、記憶部1と、データ読み出し部2と、CRC生成装置3とを有する。CRC生成装置3は、再生系列に対する第1のCRC値を生成するCRC生成部31を持つ。また、逆順でエラー系列を検出するECC部32を持つ。また、逆順のエラー系列に対するCRCの逆演算結果を求めるCRC逆演算部33を持つ。また、CRC変換情報を保持するCRC生成シフトレジスタ群34を持つ。また、CRCの逆演算結果とCRC変換情報から正順のエラー系列に対する第2のCRC値を得るエラー系列CRC生成部35を持つ。また、第1のCRC値と第2のCRC値からエラーを含まない記録系列に対するCRC値を得るXOR部36を持つ。
【選択図】図2
【解決手段】本発明の一つの実施形態は、記憶部1と、データ読み出し部2と、CRC生成装置3とを有する。CRC生成装置3は、再生系列に対する第1のCRC値を生成するCRC生成部31を持つ。また、逆順でエラー系列を検出するECC部32を持つ。また、逆順のエラー系列に対するCRCの逆演算結果を求めるCRC逆演算部33を持つ。また、CRC変換情報を保持するCRC生成シフトレジスタ群34を持つ。また、CRCの逆演算結果とCRC変換情報から正順のエラー系列に対する第2のCRC値を得るエラー系列CRC生成部35を持つ。また、第1のCRC値と第2のCRC値からエラーを含まない記録系列に対するCRC値を得るXOR部36を持つ。
【選択図】図2
Description
本発明の実施形態は、記憶装置、CRC生成装置およびCRC生成方法に関する。
エラーを含む再生系列から、エラーのない記録系列に対するCRC(Cyclic Redundancy Check)値を求めるには、エラー系列に対するCRC値を生成し、再生系列に対するCRC値とエラー系列に対するCRC値との排他的論理和演算により求めることができる。しかしながら、エラー系列が再生系列とは逆順にしか得られない場合、エラー訂正処理が終わるのを待ってから、エラー訂正後の再生系列でCRC値を再計算する必要がある。この場合、CRC再計算のためにエラー訂正後の再生系列をバッファに保持しておく必要があり、データ転送のレイテンシ(遅延時間)が大きくなる、という問題がある。
本発明の一つの実施形態は、エラーのない再生系列、すなわち記録系列に対するCRC値を遅延時間を低減して生成可能な記憶装置、CRC生成装置およびCRC生成方法を提供することを目的とする。
本発明の一つの実施形態の記憶装置は、データ系列である記録系列を記憶する記憶部を持つ。また、前記記憶部から読み出した前記記録系列に対してエラーを含む再生系列を出力するデータ読み出し部を持つ。また、前記データ読み出し部から出力された前記エラーを含む再生系列に基づいて前記エラーを含まない記録系列に対するCRC値を生成するCRC生成装置を持つ。前記CRC生成装置は、前記再生系列に対する第1のCRC値を生成する第1のCRC生成部を持つ。また、前記再生系列のエラーを検出し、前記再生系列のエラーの位置を示すエラー系列を、前記再生系列とはビットの出力順が逆となる逆順で生成するエラー検出部を持つ。また、前記エラー検出部で生成された逆順のエラー系列を入力し、当該入力された逆順のエラー系列に対するCRCの逆演算結果を求めるCRC逆演算部を持つ。また、前記再生系列とビットの出力順が同じである正順で得られたエラー系列に対するCRC値を求める際に用いる情報であるCRC変換情報を保持するCRC変換情報保持部を持つ。また、前記CRC逆演算部で生成された前記CRCの逆演算結果と、前記CRC変換情報保持部に保持されている前記CRC変換情報とを用いて、前記正順で得られたエラー系列に対するCRC値である第2のCRC値を求める第2のCRC生成部を持つ。前記第1のCRC生成部で生成された前記第1のCRC値と、前記第2のCRC生成部で生成された前記第2のCRC値とを用いて、前記エラーを含まない記録系列に対するCRC値に相当する第3のCRC値を求める第3のCRC生成部を持つ。
以下に添付図面を参照して、実施形態にかかる記憶装置、CRC生成装置およびCRC生成方法を詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
(第1の実施形態)
図1は、第1の実施形態にかかる記憶装置の構成例を示す図である。記憶装置は、記憶部1と、データ読み出し部2と、CRC生成装置3を備えた誤り訂正部4と、を含む。記憶部1は、データ系列である記録系列を記憶する記憶手段であり、例えば、NAND型フラッシュメモリ等の半導体メモリなどがあるが、これに限定するものではない。データ読み出し部2は、記憶部1から読み出した記録系列に対してエラーを含む再生系列を、誤り訂正部4へ出力する。誤り訂正部4は、データ読み出し部2から出力されたエラーを含む再生系列に基づいて、CRC生成装置3におけるエラーを含まない記録系列に対するCRC値の生成処理を含む誤り訂正処理を行う。ここで、データ読み出し部2で読み出された再生系列には、記憶部1に記憶されている記録系列に対してエラーが付加されている(エラー系列が含まれている)ものとする。
図1は、第1の実施形態にかかる記憶装置の構成例を示す図である。記憶装置は、記憶部1と、データ読み出し部2と、CRC生成装置3を備えた誤り訂正部4と、を含む。記憶部1は、データ系列である記録系列を記憶する記憶手段であり、例えば、NAND型フラッシュメモリ等の半導体メモリなどがあるが、これに限定するものではない。データ読み出し部2は、記憶部1から読み出した記録系列に対してエラーを含む再生系列を、誤り訂正部4へ出力する。誤り訂正部4は、データ読み出し部2から出力されたエラーを含む再生系列に基づいて、CRC生成装置3におけるエラーを含まない記録系列に対するCRC値の生成処理を含む誤り訂正処理を行う。ここで、データ読み出し部2で読み出された再生系列には、記憶部1に記憶されている記録系列に対してエラーが付加されている(エラー系列が含まれている)ものとする。
つぎに、CRC生成装置3の構成について説明する。図2は、第1の実施形態にかかるCRC生成装置の構成例を示す図である。CRC生成装置3は、CRC生成部31と、ECC(Error Correcting CodeまたはError Checking and Correcting)部32と、CRC逆演算部33と、CRC生成シフトレジスタ群34と、エラー系列CRC生成部35と、XOR(排他的論理和演算)部36と、を備える。
CRC生成部31は、データ読み出し部2により記憶部1から読み出された再生系列を正順で入力し、再生系列に対するCRC値(第1のCRC値)を生成してXOR部36へ出力する第1のCRC生成部である。CRC生成部31は、内部に、再生系列に対するCRC値(第1のCRC値)の生成に用いる生成多項式の次数と同数の段数のシフトレジスタを備える。
ここで、再生系列を正順で入力するとは、再生系列のMSB(Most Significant Bit)側から順に入力し、最後にLSB(Least Significant Bit)を入力する入力順を示す。なお、後述するエラー系列を逆順で入力するとは、正順とは逆の入力順であり、エラー系列のLSB側から順で入力し、最後にMSBを入力する入力順を示す。
ECC部32は、データ読み出し部2により記憶部1から読み出された再生系列を正順で入力し、再生系列に対してエラー検出を行うエラー検出部である。エラー検出としては、例えば、BCH符号の復号過程におけるチェンサーチ等があるが、これに限定するものではない。ECC部32は、エラー検出の結果、得られたエラー系列を、再生系列とは逆順でCRC逆演算部33へ出力する。エラー系列とは、再生系列において、記録系列に対してエラーのあるビットの位置を示す系列である。
CRC逆演算部33は、ECC部32で求められたエラー系列を逆順で入力し、逆順のエラー系列に対するCRCの逆演算を行い、CRCの逆演算結果をエラー系列CRC生成部35へ出力する。CRC逆演算部33は、内部に、逆順のエラー系列に対するCRCの逆演算に用いる生成多項式の次数と同数の段数のシフトレジスタを備える。シフトレジスタの段数はCRC生成部31と同じである。
CRC生成シフトレジスタ群34は、CRC生成部31およびCRC逆演算部33が備えるシフトレジスタと同数のシフトレジスタからなる回路を複数備える。具体的には、CRC生成部31およびCRC逆演算部33が4つのシフトレジスタを備える場合(すなわち、生成多項式の次数が4の場合)、CRC生成シフトレジスタ群34は、42=16個のシフトレジスタを備え、4つのシフトレジスタからなる回路を4種類備える。CRC生成シフトレジスタ群34は、これらのシフトレジスタを用いて、エラー系列CRC生成部35が正順のエラー系列に対するCRC値(第2のCRC値)を生成する際に使用するCRC変換情報を保持するCRC変換情報保持部である。CRC変換情報の詳細については後述する。
エラー系列CRC生成部35は、CRC逆演算部33から取得した逆順のエラー系列に対するCRCの逆演算結果、およびCRC生成シフトレジスタ群34から取得したCRC変換情報を用いて、正順のエラー系列に対するCRC値(第2のCRC値)を生成する第2のCRC生成部である。エラー系列CRC生成部35は、生成した正順のエラー系列に対するCRC値(第2のCRC値)をXOR部36へ出力する。
XOR部36は、CRC生成部31から取得した再生系列に対するCRC値(第1のCRC値)、およびエラー系列CRC生成部35から取得した正順のエラー系列に対するCRC値(第2のCRC値)を用いて、エラーのない再生系列に対するCRC値、すなわち、記録系列に対するCRC値に相当するCRC値(第3のCRC値)を生成する第3のCRC生成部である。
つづいて、CRC生成装置3における記録系列に対するCRC値を生成するまでの動作について詳細に説明する。図3は、CRC生成装置におけるCRC値の生成処理を示すフローチャートである。
まず、CRC生成装置3では、CRC生成部31が、データ読み出し部2において記憶部1から読み出された再生系列を正順で入力し、再生系列に対するCRC値(第1のCRC値)を生成する(ステップS1)。CRC生成部31は、再生系列に対するCRC値(第1のCRC値)をXOR部36へ出力する。
図4は、CRC生成部におけるCRC値の生成処理を示す図である。CRC生成部31は、排他的論理和演算部311と、シフトレジスタ312と、排他的論理和演算部313と、シフトレジスタ314,315,316と、を備える。排他的論理和演算部311は、データ読み出し部2により記憶部1から読み出された再生系列、およびシフトレジスタ316からの出力ビットを入力として排他的論理和演算を行い、演算結果をシフトレジスタ312へ出力する。排他的論理和演算部313は、シフトレジスタ312からの出力ビット、およびシフトレジスタ316からの出力ビットを入力として排他的論理和演算を行い、演算結果をシフトレジスタ314へ出力する。一般的に、CRC値の演算回路は、シフトレジスタを用いて実現できる。ここでは、一例として、生成多項式の次数が4の場合(シフトレジスタが4つの場合)について説明する。
CRC生成部31では、各シフトレジスタ312,314〜316に任意の初期値(一例として、初期値Aとする)を設定し、再生系列をMSB側から正順に入力する。そして、CRC生成部31は、再生系列を所定のデータ数分入力してビットシフト動作を行い、ビットシフト動作後各シフトレジスタ312,314〜316が保持する値(「0」または「1」)をCRC値(第1のCRC値)として出力する。所定のデータ数とは、CRC値を生成する符号語の単位、例えば、図1の記憶装置のシステムで管理するアドレス単位に基づくものとし、以降も同様とする。
つぎに、CRC生成装置3では、ECC部32が、データ読み出し部2により記憶部1から読み出された再生系列を正順で入力し、再生系列に対してエラー検出を行う(ステップS2)。ここでは、ECC部32は、エラー検出の結果、得られたエラー系列を、再生系列とは逆順でCRC逆演算部33へ出力する。再生系列からエラーを検出して逆順でエラー系列を出力する方法については、従来同様の方法(例えば、BCH等)で求めることができるので、詳細な説明については省略する。
図3に戻り、つぎに、CRC逆演算部33は、ECC部32で求められたエラー系列を逆順で入力し、逆順のエラー系列に対するCRCの逆演算を行う(ステップS3)。CRC逆演算部33は、逆順のエラー系列に対するCRCの逆演算により得られたCRCの逆演算結果をエラー系列CRC生成部35へ出力する。
図5は、CRC逆演算部におけるCRCの逆演算結果の生成処理を示す図である。CRC逆演算部33は、排他的論理和演算部331と、シフトレジスタ332,333,334と、排他的論理和演算部335と、シフトレジスタ336と、を備える。排他的論理和演算部331は、ECC部32から入力したエラー系列、およびシフトレジスタ336からの出力ビットを入力として排他的論理和演算を行い、演算結果をシフトレジスタ332へ出力する。排他的論理和演算部335は、シフトレジスタ334からの出力ビット、およびシフトレジスタ336からの出力ビットを入力として排他的論理和演算を行い、演算結果をシフトレジスタ336へ出力する。CRC生成部31と同様、一例として、生成多項式の次数が4の場合(シフトレジスタが4つの場合)について説明する。
CRC逆演算部33では、各シフトレジスタ332〜334,336に初期値オールゼロを設定し、エラー系列をLSB側から逆順で入力する。そして、CRC逆演算部33は、エラー系列を所定のデータ数分入力してビットシフト動作を行い、ビットシフト動作後各シフトレジスタ332〜334,336が保持する値(「0」または「1」)を逆順のエラー系列に対するCRCの逆演算結果として出力する。
図3に戻り、つぎに、CRC生成シフトレジスタ群34は、エラー系列CRC生成部35が正順のエラー系列に対するCRC値(第2のCRC値)を生成する際に使用するCRC変換情報を生成する(ステップS4)。
ここで、エラー系列CRC生成部35が正順のエラー系列に対するCRC値(第2のCRC値)を生成する際に使用するCRC変換情報について説明する。
まず、CRC値の逆算について説明する。図6は、CRC値の逆算方法を示す図である。図6において、シフトレジスタ群SはCRC生成部31と同じ構成であり、逆シフトレジスタ群RはCRC逆演算部33と同じ構成とする。初期値Xのシフトレジスタ群Sでは、データ系列DをMSB側から正順で所定のデータ数分を入力してビットシフト動作を行うとCRC値Mが得られる。このCRC値Mを、シフトレジスタ群Sのビットシフト方向とは逆の方向にビットシフト動作する逆シフトレジスタ群Rの初期値として設定する。そして、逆シフトレジスタ群Rでは、データ系列DをLSB側から逆順で所定のデータ数分を入力してビットシフト動作を行うとCRC値Nが得られる。このCRC値Nは、シフトレジスタ群Sの初期値Xと同一である。このように、データ系列D、データ系列Dから生成したCRC値M、および、CRCの生成多項式が既知の場合、初期値Xが未知であっても、CRCの逆算を行うことによって初期値Xを求めることができる。
つぎに、CRC値の逆算の応用例について説明する。図7は、CRC値の逆算の応用例を示す図である。初期値がオールゼロの逆シフトレジスタ群Rでは、データ系列DをLSB側から逆順で所定のデータ数分を入力してビットシフト動作を行うとCRC値Pが得られる。このCRC値Pを、シフトレジスタ群Sの初期値として設定する。そして、シフトレジスタ群Sでは、入力データをオールゼロ(系列)として所定のデータ数分を入力してビットシフト動作を行うとCRC値Qが得られる。このCRC値Qは、初期値をCRC値Pとしたシフトレジスタ群Sに、データ系列Dを最初の逆シフトレジスタ群Rに入力した順とは逆、すなわち、データ系列DをMSB側から正順で入力して得られるCRC値と一致する。
図5において、CRC逆演算部33が生成した逆順のエラー系列に対するCRCの逆演算結果は、図7の例のCRC値Pに相当する。そのため、逆順のエラー系列に対するCRCの逆演算結果をシフトレジスタ群Sの初期値として、オールゼロ(系列)のデータ系列を所定のデータ数分を入力してビットシフト動作を行って得られたCRC値は、初期値オールゼロのシフトレジスタ群Sに、エラー系列を正順に所定のデータ数分を入力してビットシフト動作を行ったときに得られるCRC値(第2のCRC値)と一致することになる。背景技術で説明しているように、再生系列に対するCRC値(第1のCRC値に相当)とエラー系列に対するCRC値(第2のCRC値に相当)との排他的論理和演算により、エラーを含まない記録系列に対するCRC値(第3のCRC値に相当)を求めることができる。
このように、エラー系列が逆順となっても、エラー系列が正順の場合と同様に、エラーのない記録系列に対するCRC値(第3のCRC値)を求めることができる。しかしながら、図7に示すCRC値の演算方法をCRC生成装置3で実行すると、CRC逆演算部33で逆順のエラー系列に対するCRCの逆演算結果を得てからつぎのCRC値の演算を開始することになるため、データ転送のレイテンシ(遅延時間)が大きくなることが懸念される。
そのため、あらかじめ、シフトレジスタにある初期値を与えて、オールゼロのデータを所定のデータ数分を入力してビットシフト動作させたときに、シフトレジスタの内部がどのようになっているのかを求めることができれば、逆順のエラー系列に対するCRCの逆演算結果を初期値として外部からデータを入力せずにシフトレジスタを所定のデータ数分ビットシフト動作させて得られる正順のエラー系列に対するCRC値(第2のCRC値)を求めることができる。そのため、シフトレジスタにある初期値を与えて、オールゼロのデータを所定のデータ数分を入力してビットシフト動作させたときに、シフトレジスタの内部の状態を求めるためにCRC生成シフトレジスタ群34を用いる。
図8は、CRC生成シフトレジスタ群の各シフトレジスタの状態を示す図である。図8(a)は、CRC生成シフトレジスタ群における初期状態における各シフトレジスタの状態を示し、図8(b)は、CRC生成シフトレジスタ群において所定のデータ数分ビットシフト動作した状態における各シフトレジスタの状態を示す。所定のデータ数分のビットシフト動作とは、CRC生成部31およびCRC逆演算部33における所定のデータ数分のビットシフト動作と同一である。また、4つのシフトレジスタごとに1つの回路を構成しているが、各回路においてシフトレジスタの配列はCRC生成部31と同一である。図8(a)において、無地のシフトレジスタには初期値「0」、色付きのシフトレジスタには初期値「1」が与えられている。そして、所定のデータ数分だけビットシフト動作を行うと図8(b)のようにシフトレジスタ内の値が変化する。図8(a)と同様、無地のシフトレジスタは「0」、色付きのシフトレジスタは「1」を示す。
図8(a)において、シフトレジスタ番号(0,0),(1,1),(2,2),(3,3)の初期値を「1」としている。一番下の4つのシフトレジスタは、一番右のシフトレジスタ(図4ではシフトレジスタ312)の初期値が「1」であった場合に、所定のデータ数分だけビットシフト動作させるとどのシフトレジスタにおいて値が「1」になるかを求める。求めたシフトレジスタの値は、図8(b)において一番下の4つのシフトレジスタが示すものとなる。また、下から2番目の4つのシフトレジスタは、右から2番目のシフトレジスタ(図4ではシフトレジスタ314)の初期値が「1」であった場合に、所定のデータ数分だけビットシフト動作させるとどのシフトレジスタにおいて値が「1」になるかを求める。求めたシフトレジスタの値は、図8(b)において下から2番目の4つのシフトレジスタが示すものとなる。また、下から3番目の4つのシフトレジスタは、右から3番目のシフトレジスタ(図4ではシフトレジスタ315)の初期値が「1」であった場合に、所定のデータ数分だけビットシフト動作させるとどのシフトレジスタにおいて値が「1」になるかを求める。求めたシフトレジスタの値は、図8(b)において下から3番目の4つのシフトレジスタが示すものとなる。また、一番上の4つのシフトレジスタは、一番左のシフトレジスタ(図4ではシフトレジスタ316)の初期値が「1」であった場合に、所定のデータ数分だけビットシフト動作させるとどのシフトレジスタにおいて値が「1」になるかを求める。求めたシフトレジスタの値は、図8(b)において一番上の4つのシフトレジスタが示すものとなる。
CRC生成シフトレジスタ群34では、シフトレジスタの初期値が、例えば「0110」の場合、図8(a)に示す4つのシフトレジスタ群のうち、下から2番目と下から3番目の初期値を排他的論理和演算すれば「0110」となる。そのため、CRC生成シフトレジスタ群34では、初期値「0110」で所定のデータ数分ビットシフト動作させたときのCRC値、すなわち、シフトレジスタの値は、図8(b)に示す4つのシフトレジスタ群のうち、下から2番目と下から3番目のシフトレジスタを所定のデータ数分ビットシフト動作させたときの、それぞれのシフトレジスタの値を排他的論理和演算したものとして求めることができる。
図8におけるCRC生成シフトレジスタ群34での各シフトレジスタの状態を行列の形式で示すと、図9のように表すことができる。図9は、図8に示すシフトレジスタの状態を表す単位行列を示す図である。図9(a)は、シフトレジスタの初期値の状態を表す単位行列を示し、図9(b)は、シフトレジスタにおいて所定のデータ数分ビットシフト動作させた状態を表す行列を示す。
CRC生成シフトレジスタ群34では、CRC生成装置3の起動前においては図8(a)(図9(a))の状態でシフトレジスタの値を保持しており、CRC生成装置3の起動後においては所定のデータ数分ビットシフト動作を行って図8(b)(図9(b))の状態でシフトレジスタの値を保持する。このときの、所定のデータ数分ビットシフト動作を行って図8(b)(図9(b))の状態で保持するシフトレジスタの値の情報は、CRC生成部31に所定のデータ数が入力されてビットシフト動作された各シフトレジスタの値に相当する情報であり、これをCRC変換情報とする。CRC生成シフトレジスタ群34は、CRC生成装置3の起動後、CRC変換情報を生成し、エラー系列CRC生成部35へ出力する。
CRC生成シフトレジスタ群34は、複数のシフトレジスタを有しており、複数のシフトレジスタを用いて演算した結果をCRC変換情報として保持する。
図3に戻り、つぎに、エラー系列CRC生成部35は、CRC逆演算部33から取得した逆順のエラー系列に対するCRCの逆演算結果、およびCRC生成シフトレジスタ群34から取得したCRC変換情報を用いて、正順のエラー系列に対するCRC値(第2のCRC値)を生成する(ステップS5)。
図10は、逆順のエラー系列に対するCRC値から正順のエラー系列に対するCRC値への換算方法を示す図である。エラー系列CRC生成部35は、CRC逆演算部33から取得した逆順のエラー系列に対するCRCの逆演算結果において値が「1」になっている位置に対応するCRC変換情報の行列内の行同士を排他的論理和演算することで、正順のエラー系列に対するCRC値(第2のCRC値)を求めることができる。エラー系列CRC生成部35は、例えば、図10に示すように、CRC生成シフトレジスタ群34からのCRC変換情報に対して、CRC逆演算部33から取得した逆順のエラー系列に対するCRCの逆演算結果が「0110」だった場合、逆順のエラー系列に対するCRCの逆演算結果において値が「1」の位置に対応するCRC変換情報の行「1000」と「0011」を排他的論理和演算することで、「1011」の値を得ることができる。この「1011」の値が、初期値が「0110」で、オールゼロのデータを所定のデータ数分入力してシフトレジスタをビットシフト動作させたときのCRC値、すなわち、正順のエラー系列に対するCRC値(第2のCRC値)となる。エラー系列CRC生成部35は、生成した正順のエラー系列に対するCRC値(第2のCRC値)をXOR部36へ出力する。
なお、CRC生成シフトレジスタ群34がCRC変換情報をエラー系列CRC生成部35へ出力し、エラー系列CRC生成部35がCRC生成シフトレジスタ群34から取得したCRC変換情報を用いることとしているが、これに限定するものではない。例えば、エラー系列CRC生成部35は、CRC逆演算部33から取得した逆順のエラー系列に対するCRCの逆演算結果に基づいて、CRC変換情報のうち、必要な部分の情報のみをCRC生成シフトレジスタ群34から読み取るようにしてもよい。
図3に戻り、そして、XOR部36は、CRC生成部31から取得した再生系列に対するCRC値(第1のCRC値)、およびエラー系列CRC生成部35から取得した正順のエラー系列に対するCRC値(第2のCRC値)を用いて排他的論理和演算を行い、エラーのない再生系列に対するCRC値、すなわち、記録系列に対するCRC値に相当するCRC値(第3のCRC値)を生成する(ステップS6)。
このように、CRC生成シフトレジスタ群34でCRC変換情報を得る動作は、CRC逆演算部33において図5に示す逆順のエラー系列に対するCRCの逆演算結果を求める動作とは独立したものである。そのため、CRC生成装置3における記録系列に対するCRC値(第3のCRC値)の生成処理において、CRC生成シフトレジスタ群34でCRC変換情報を得る動作は、CRC逆演算部33において図5に示す逆順のエラー系列に対するCRCの逆演算結果を求めるまでに、または並行して行うことができる。エラー系列CRC生成部35では、CRC逆演算部33からの逆順のエラー系列に対するCRCの逆演算結果を取得するまでに、または並行してCRC生成シフトレジスタ群34からのCRC変換情報を取得することができる。
以上説明したように、第1の実施形態によれば、CRC生成装置3では、CRC逆演算部33において逆順のエラー系列に対するCRCの逆演算結果が生成された場合に、CRC生成シフトレジスタ群34は、CRC逆演算部33の動作とは独立に、ある初期値をシフトレジスタに設定してエラー系列と同じデータ数分ビットシフト動作させたときのシフトレジスタの状態を示すCRC変換情報を得ることができる。そして、エラー系列CRC生成部35では、逆順のエラー系列に対するCRCの逆演算結果とCRC変換情報とを用いて、正順のエラー系列に対するCRC値(第2のCRC値)を求める。XOR部36は、再生系列に対するCRC値(第1のCRC値)と、正順のエラー系列に対するCRC値(第2のCRC値)とを用いて、エラーを含まない記録系列に対するCRC値(第3のCRC値)を求めることができる。その結果、再生系列から逆順のエラー系列が得られた場合においても、CRC生成装置3では、各構成において前段の構成での処理待ちを回避することができ、データ転送のレイテンシ(遅延時間)を低減することができる。
(第2の実施形態)
第1の実施形態においては、CRC変換情報を生成・保持するためにCRC生成シフトレジスタ群34を用いたが、これに限定するものではなく、メモリ等の記憶手段にあらかじめCRC変換情報を保持することも可能である。
第1の実施形態においては、CRC変換情報を生成・保持するためにCRC生成シフトレジスタ群34を用いたが、これに限定するものではなく、メモリ等の記憶手段にあらかじめCRC変換情報を保持することも可能である。
図11は、第2の実施形態にかかるCRC生成装置の構成例を示す図である。CRC生成装置3aは、CRC生成シフトレジスタ群34に替えてメモリ37を備える点が第1の実施形態(図2参照)と異なるが、他の構成及び動作は第1の実施形態と同様である。第1の実施形態では、CRC生成シフトレジスタ群34は、CRC生成装置3の起動前においては初期値の状態でシフトレジスタの値を保持した。また、CRC生成シフトレジスタ群34は、CRC生成装置3の起動後においては所定のデータ数分ビットシフト動作を行った状態でシフトレジスタの値(CRC変換情報)を保持した。ここで、CRC生成シフトレジスタ群34は、CRC生成装置3に入力される再生系列の長さにかかわらず、CRC生成装置3の起動後においてはCRC変換情報を保持した。CRC変換情報は、起動するたびに異なる値になるものではない。そのため、CRC変換情報保持部として、あらかじめCRC変換情報を図9(b)に示す行列形式でメモリ37に記憶させておくことが可能である。
メモリ37は、あらかじめ演算した結果をCRC変換情報として保持する。
これにより、第1の実施形態と比較して、装置の規模を小さくすることができ、また、CRC生成シフトレジスタ群34の動作分の消費電力を低減することが可能である。
なお、CRC生成装置3では、CRC生成シフトレジスタ群34をメモリ37に置き換えるだけでなく、CRC生成シフトレジスタ群34とメモリ37を併用することも可能である。また、複数のCRC生成シフトレジスタ群34、または/および、複数のメモリ37を用いることも可能である。これにより、所定のデータ数分ビットシフト動作を行う際のビットシフト動作の回数を複数設定でき、ビットシフト動作の回数に対応するCRC変換情報を保持することが可能である。
なお、CRC生成装置3,3aは、記憶装置以外の用途にも適用可能である。例えば、通信装置間において送受信されるデータに対しても適用可能であり、また、データの誤りを検出する用途であれば、これらの用途に限定するものではない。すなわち、エラー系列が逆順で検出される場合において、遅延時間を低減することが可能である。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
1 記憶部、2 データ読み出し部、3,3a CRC生成装置、4 誤り訂正部、31 CRC生成部、32 ECC部、33 CRC逆演算部、34 CRC生成シフトレジスタ群、35 エラー系列CRC生成部、36 XOR部、37 メモリ、311,313,331,335 排他的論理和演算部、312,314〜316,332〜334,336 シフトレジスタ。
Claims (7)
- データ系列である記録系列を記憶する記憶部と、
前記記憶部から読み出した前記記録系列に対してエラーを含む再生系列を出力するデータ読み出し部と、
前記データ読み出し部から出力された前記エラーを含む再生系列に基づいて前記エラーを含まない記録系列に対するCRC値を生成するCRC生成装置と、
を具備し、
前記CRC生成装置は、
前記再生系列に対する第1のCRC値を生成する第1のCRC生成部と、
前記再生系列のエラーを検出し、前記再生系列のエラーの位置を示すエラー系列を、前記再生系列とはビットの出力順が逆となる逆順で生成するエラー検出部と、
前記エラー検出部で生成された逆順のエラー系列を入力し、当該入力された逆順のエラー系列に対するCRCの逆演算結果を求めるCRC逆演算部と、
前記再生系列とビットの出力順が同じである正順で得られたエラー系列に対するCRC値を求める際に用いる情報であるCRC変換情報を保持するCRC変換情報保持部と、
前記CRC逆演算部で生成された前記CRCの逆演算結果と、前記CRC変換情報保持部に保持されている前記CRC変換情報とを用いて、前記正順で得られたエラー系列に対するCRC値である第2のCRC値を求める第2のCRC生成部と、
前記第1のCRC生成部で生成された前記第1のCRC値と、前記第2のCRC生成部で生成された前記第2のCRC値とを用いて、前記エラーを含まない記録系列に対するCRC値に相当する第3のCRC値を求める第3のCRC生成部と、
を備える記憶装置。 - 前記CRC変換情報保持部は、複数のシフトレジスタを用いて演算した結果を前記CRC変換情報として保持する、
請求項1に記載の記憶装置。 - 前記CRC変換情報保持部は、あらかじめ演算した結果を前記CRC変換情報としてメモリに保持する、
請求項1に記載の記憶装置。 - 前記第2のCRC生成部は、前記CRCの逆演算結果と、前記CRC変換情報との排他的論理和演算により、前記第2のCRC値を求める、
請求項1,2または3の何れか1項に記載の記憶装置。 - 前記第3のCRC生成部は、前記第1のCRC値と、前記第2のCRC値との排他的論理和演算により、前記第3のCRC値を求める、
請求項1〜4の何れか1項に記載の記憶装置。 - データ系列である記録系列に対してエラーを含む再生系列に対する第1のCRC値を生成する第1のCRC生成部と、
前記再生系列のエラーを検出し、前記再生系列のエラーの位置を示すエラー系列を、前記再生系列とはビットの出力順が逆となる逆順で生成するエラー検出部と、
前記エラー検出部で生成された逆順のエラー系列を入力し、当該入力された逆順のエラー系列に対するCRCの逆演算結果を求めるCRC逆演算部と、
前記再生系列とビットの出力順が同じである正順で得られたエラー系列に対するCRC値を求める際に用いる情報であるCRC変換情報を保持するCRC変換情報保持部と、
前記CRC逆演算部で生成された前記CRCの逆演算結果と、前記CRC変換情報保持部に保持されている前記CRC変換情報とを用いて、前記正順で得られたエラー系列に対するCRC値である第2のCRC値を求める第2のCRC生成部と、
前記第1のCRC生成部で生成された前記第1のCRC値と、前記第2のCRC生成部で生成された前記第2のCRC値とを用いて、前記エラーを含まない記録系列に対するCRC値に相当する第3のCRC値を求める第3のCRC生成部と、
を備えるCRC生成装置。 - データ系列である記録系列に対してエラーを含む再生系列を用いて、前記エラーを含まない記録系列に対するCRC値を生成するCRC生成装置におけるCRC生成方法であって、
前記再生系列に対する第1のCRC値を生成し、
前記再生系列のエラーを検出し、前記再生系列のエラーの位置を示すエラー系列を、前記再生系列とはビットの出力順が逆となる逆順で生成し、
前記生成された逆順のエラー系列を入力し、当該入力された逆順のエラー系列に対するCRCの逆演算結果を求め、
前記データ系列とビットの出力順が同じである正順で得られたエラー系列に対するCRC値を求める際に用いる情報であるCRC変換情報を保持し、
前記生成されたCRCの逆演算結果と、前記CRC変換情報とを用いて、前記正順で得られたエラー系列に対するCRC値である第2のCRC値を求め、
前記生成された第1のCRC値と、前記生成された第2のCRC値とを用いて、前記エラーを含まない記録系列に対するCRC値に相当する第3のCRC値を求める、
ことを含むCRC生成方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2013145767A JP2015019276A (ja) | 2013-07-11 | 2013-07-11 | 記憶装置、crc生成装置およびcrc生成方法 |
US14/018,676 US9092354B2 (en) | 2013-07-11 | 2013-09-05 | Storage device, CRC generation device, and CRC generation method |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2013145767A JP2015019276A (ja) | 2013-07-11 | 2013-07-11 | 記憶装置、crc生成装置およびcrc生成方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2015019276A true JP2015019276A (ja) | 2015-01-29 |
Family
ID=52278149
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2013145767A Pending JP2015019276A (ja) | 2013-07-11 | 2013-07-11 | 記憶装置、crc生成装置およびcrc生成方法 |
Country Status (2)
Country | Link |
---|---|
US (1) | US9092354B2 (ja) |
JP (1) | JP2015019276A (ja) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9697140B2 (en) * | 2014-09-23 | 2017-07-04 | Intel Corporation | Encryption integrity check with CRC encryption in memory using a word count- and address-derived nonce |
KR20180063475A (ko) * | 2016-12-02 | 2018-06-12 | 삼성전자주식회사 | 반도체 장치의 오류 검출 코드 생성 회로, 이를 포함하는 메모리 컨트롤러 및 반도체 메모리 장치 |
CN110704236B (zh) * | 2019-10-11 | 2020-09-01 | 南京元晨微电子科技有限公司 | 芯片flash数据的在线校验方法及计算机存储介质 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5852720A (en) * | 1996-08-16 | 1998-12-22 | Compaq Computer Corp. | System for storing display data during first time period prior to failure of computer and during second time period after reset of the computer |
JP2000269826A (ja) | 1999-03-15 | 2000-09-29 | Fujitsu Ltd | 誤り検出装置及び方法 |
US6519738B1 (en) | 2000-03-07 | 2003-02-11 | International Business Machines Corporation | Method and apparatus for high-speed CRC computation based on state-variable transformation |
KR100659265B1 (ko) | 2000-11-10 | 2006-12-20 | 삼성전자주식회사 | 패리티비트가 역순으로 부가된 씨.알.씨. 코드의에러검출장치 및 방법 |
US6868517B1 (en) * | 2001-05-15 | 2005-03-15 | Marvell International Ltd. | Method and apparatus for checking read errors with two cyclic redundancy check stages |
WO2008023684A1 (fr) * | 2006-08-22 | 2008-02-28 | Panasonic Corporation | Unité d'opération arithmétique de résidus en parallèle et procédé d'opération arithmétique de résidus en parallèle |
KR100928261B1 (ko) * | 2007-09-08 | 2009-11-24 | 엘지전자 주식회사 | 비검출 오류 저감을 위한 신호 분할 및 crc 부착 방법 |
US8555148B2 (en) * | 2007-09-18 | 2013-10-08 | Samsung Electronics Co., Ltd. | Methods and apparatus to generate multiple CRCs |
US8578240B1 (en) * | 2011-01-21 | 2013-11-05 | Juniper Networks, Inc. | CRC computation for packet length not multiple of data path width |
-
2013
- 2013-07-11 JP JP2013145767A patent/JP2015019276A/ja active Pending
- 2013-09-05 US US14/018,676 patent/US9092354B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
US9092354B2 (en) | 2015-07-28 |
US20150019932A1 (en) | 2015-01-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5043562B2 (ja) | エラー訂正回路、その方法及び前記回路を備える半導体メモリ装置 | |
TW514933B (en) | Memory device, method of accessing the memory device, and Reed-Solomon decoder including the memory device | |
Chen et al. | An adaptive-rate error correction scheme for NAND flash memory | |
US20140229807A1 (en) | Instruction-set architecture for programmable cyclic redundancy check (crc) computations | |
CN110727540A (zh) | 利用错误更正码进行数据位错误的检测与更正 | |
JP2001175542A (ja) | 記録再生装置および半導体メモリ | |
US20140108887A1 (en) | Storage device | |
JPH08330975A (ja) | 誤り訂正符号復号化方法およびこの方法を用いる回路 | |
JP2010518464A (ja) | 半導体記憶装置 | |
JPWO2016013285A1 (ja) | メモリコントローラおよびメモリコントローラの制御方法 | |
KR20160013808A (ko) | 스크램블러에 의한 인코더 바이패스 | |
JP2010198657A (ja) | メモリ装置 | |
US9960788B2 (en) | Memory controller, semiconductor memory device, and control method for semiconductor memory device | |
TWI664636B (zh) | 錯誤檢查和糾正解碼器 | |
JP2014082574A (ja) | 誤り検出訂正回路、及びメモリ装置 | |
JP2015019276A (ja) | 記憶装置、crc生成装置およびcrc生成方法 | |
JP2005293557A (ja) | 復号器、データ記憶装置およびデータの誤り訂正の方法 | |
CN110679090A (zh) | 减少延迟错误校正解码 | |
JP2014033364A (ja) | 誤り検出訂正回路、及びメモリ装置 | |
US10340955B2 (en) | Data processing circuit | |
US8327243B1 (en) | System and method for generating locator polynomials | |
JP2020150515A (ja) | 誤り訂正回路及びメモリシステム | |
US20140245101A1 (en) | Semiconductor memory | |
KR102021560B1 (ko) | 오류 위치 탐색 회로, 그리고 그것을 포함하는 오류 검출 정정 회로 및 메모리 장치 | |
JP2011029857A (ja) | フラッシュファイルシステムの誤り検出訂正機能 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
RD01 | Notification of change of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7421 Effective date: 20151102 |