(57)【要約】【課題】エラー系列が再生系列と逆順の場合に、遅延時間を低減してエラーのない記録系列に対するＣＲＣ値を生成すること。【解決手段】本発明の一つの実施形態は、記憶部１と、データ読み出し部２と、ＣＲＣ生成装置３とを有する。ＣＲＣ生成装置３は、再生系列に対する第１のＣＲＣ値を生成するＣＲＣ生成部３１を持つ。また、逆順でエラー系列を検出するＥＣＣ部３２を持つ。また、逆順のエラー系列に対するＣＲＣの逆演算結果を求めるＣＲＣ逆演算部３３を持つ。また、ＣＲＣ変換情報を保持するＣＲＣ生成シフトレジスタ群３４を持つ。また、ＣＲＣの逆演算結果とＣＲＣ変換情報から正順のエラー系列に対する第２のＣＲＣ値を得るエラー系列ＣＲＣ生成部３５を持つ。また、第１のＣＲＣ値と第２のＣＲＣ値からエラーを含まない記録系列に対するＣＲＣ値を得るＸＯＲ部３６を持つ。【選択図】図２
2015019276.tif 000002
【特許請求の範囲】
【請求項１】
データ系列である記録系列を記憶する記憶部と、
前記記憶部から読み出した前記記録系列に対してエラーを含む再生系列を出力するデータ読み出し部と、
前記データ読み出し部から出力された前記エラーを含む再生系列に基づいて前記エラーを含まない記録系列に対するＣＲＣ値を生成するＣＲＣ生成装置と、
を具備し、
前記ＣＲＣ生成装置は、
前記再生系列に対する第１のＣＲＣ値を生成する第１のＣＲＣ生成部と、
前記再生系列のエラーを検出し、前記再生系列のエラーの位置を示すエラー系列を、前記再生系列とはビットの出力順が逆となる逆順で生成するエラー検出部と、
前記エラー検出部で生成された逆順のエラー系列を入力し、当該入力された逆順のエラー系列に対するＣＲＣの逆演算結果を求めるＣＲＣ逆演算部と、
前記再生系列とビットの出力順が同じである正順で得られたエラー系列に対するＣＲＣ値を求める際に用いる情報であるＣＲＣ変換情報を保持するＣＲＣ変換情報保持部と、
前記ＣＲＣ逆演算部で生成された前記ＣＲＣの逆演算結果と、前記ＣＲＣ変換情報保持部に保持されている前記ＣＲＣ変換情報とを用いて、前記正順で得られたエラー系列に対するＣＲＣ値である第２のＣＲＣ値を求める第２のＣＲＣ生成部と、
前記第１のＣＲＣ生成部で生成された前記第１のＣＲＣ値と、前記第２のＣＲＣ生成部で生成された前記第２のＣＲＣ値とを用いて、前記エラーを含まない記録系列に対するＣＲＣ値に相当する第３のＣＲＣ値を求める第３のＣＲＣ生成部と、
を備える記憶装置。
【請求項２】
前記ＣＲＣ変換情報保持部は、複数のシフトレジスタを用いて演算した結果を前記ＣＲＣ変換情報として保持する、
請求項１に記載の記憶装置。
【請求項３】
前記ＣＲＣ変換情報保持部は、あらかじめ演算した結果を前記ＣＲＣ変換情報としてメモリに保持する、
請求項１に記載の記憶装置。
【請求項４】
前記第２のＣＲＣ生成部は、前記ＣＲＣの逆演算結果と、前記ＣＲＣ変換情報との排他的論理和演算により、前記第２のＣＲＣ値を求める、
請求項１，２または３の何れか１項に記載の記憶装置。
【請求項５】
前記第３のＣＲＣ生成部は、前記第１のＣＲＣ値と、前記第２のＣＲＣ値との排他的論理和演算により、前記第３のＣＲＣ値を求める、
請求項１〜４の何れか１項に記載の記憶装置。
【請求項６】
データ系列である記録系列に対してエラーを含む再生系列に対する第１のＣＲＣ値を生成する第１のＣＲＣ生成部と、
前記再生系列のエラーを検出し、前記再生系列のエラーの位置を示すエラー系列を、前記再生系列とはビットの出力順が逆となる逆順で生成するエラー検出部と、
前記エラー検出部で生成された逆順のエラー系列を入力し、当該入力された逆順のエラー系列に対するＣＲＣの逆演算結果を求めるＣＲＣ逆演算部と、
前記再生系列とビットの出力順が同じである正順で得られたエラー系列に対するＣＲＣ値を求める際に用いる情報であるＣＲＣ変換情報を保持するＣＲＣ変換情報保持部と、
前記ＣＲＣ逆演算部で生成された前記ＣＲＣの逆演算結果と、前記ＣＲＣ変換情報保持部に保持されている前記ＣＲＣ変換情報とを用いて、前記正順で得られたエラー系列に対するＣＲＣ値である第２のＣＲＣ値を求める第２のＣＲＣ生成部と、
前記第１のＣＲＣ生成部で生成された前記第１のＣＲＣ値と、前記第２のＣＲＣ生成部で生成された前記第２のＣＲＣ値とを用いて、前記エラーを含まない記録系列に対するＣＲＣ値に相当する第３のＣＲＣ値を求める第３のＣＲＣ生成部と、
を備えるＣＲＣ生成装置。
【請求項７】
データ系列である記録系列に対してエラーを含む再生系列を用いて、前記エラーを含まない記録系列に対するＣＲＣ値を生成するＣＲＣ生成装置におけるＣＲＣ生成方法であって、
前記再生系列に対する第１のＣＲＣ値を生成し、
前記再生系列のエラーを検出し、前記再生系列のエラーの位置を示すエラー系列を、前記再生系列とはビットの出力順が逆となる逆順で生成し、
前記生成された逆順のエラー系列を入力し、当該入力された逆順のエラー系列に対するＣＲＣの逆演算結果を求め、
前記データ系列とビットの出力順が同じである正順で得られたエラー系列に対するＣＲＣ値を求める際に用いる情報であるＣＲＣ変換情報を保持し、
前記生成されたＣＲＣの逆演算結果と、前記ＣＲＣ変換情報とを用いて、前記正順で得られたエラー系列に対するＣＲＣ値である第２のＣＲＣ値を求め、
前記生成された第１のＣＲＣ値と、前記生成された第２のＣＲＣ値とを用いて、前記エラーを含まない記録系列に対するＣＲＣ値に相当する第３のＣＲＣ値を求める、
ことを含むＣＲＣ生成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、記憶装置、ＣＲＣ生成装置およびＣＲＣ生成方法に関する。
【背景技術】
【０００２】
エラーを含む再生系列から、エラーのない記録系列に対するＣＲＣ（Cyclic  Redundancy  Check）値を求めるには、エラー系列に対するＣＲＣ値を生成し、再生系列に対するＣＲＣ値とエラー系列に対するＣＲＣ値との排他的論理和演算により求めることができる。しかしながら、エラー系列が再生系列とは逆順にしか得られない場合、エラー訂正処理が終わるのを待ってから、エラー訂正後の再生系列でＣＲＣ値を再計算する必要がある。この場合、ＣＲＣ再計算のためにエラー訂正後の再生系列をバッファに保持しておく必要があり、データ転送のレイテンシ（遅延時間）が大きくなる、という問題がある。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】米国特許出願公開第２００２／００８３３９２号明細書
【特許文献２】米国特許第６４３４７１７号明細書
【特許文献３】米国特許第６５１９７３８号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本発明の一つの実施形態は、エラーのない再生系列、すなわち記録系列に対するＣＲＣ値を遅延時間を低減して生成可能な記憶装置、ＣＲＣ生成装置およびＣＲＣ生成方法を提供することを目的とする。
【課題を解決するための手段】
【０００５】
本発明の一つの実施形態の記憶装置は、データ系列である記録系列を記憶する記憶部を持つ。また、前記記憶部から読み出した前記記録系列に対してエラーを含む再生系列を出力するデータ読み出し部を持つ。また、前記データ読み出し部から出力された前記エラーを含む再生系列に基づいて前記エラーを含まない記録系列に対するＣＲＣ値を生成するＣＲＣ生成装置を持つ。前記ＣＲＣ生成装置は、前記再生系列に対する第１のＣＲＣ値を生成する第１のＣＲＣ生成部を持つ。また、前記再生系列のエラーを検出し、前記再生系列のエラーの位置を示すエラー系列を、前記再生系列とはビットの出力順が逆となる逆順で生成するエラー検出部を持つ。また、前記エラー検出部で生成された逆順のエラー系列を入力し、当該入力された逆順のエラー系列に対するＣＲＣの逆演算結果を求めるＣＲＣ逆演算部を持つ。また、前記再生系列とビットの出力順が同じである正順で得られたエラー系列に対するＣＲＣ値を求める際に用いる情報であるＣＲＣ変換情報を保持するＣＲＣ変換情報保持部を持つ。また、前記ＣＲＣ逆演算部で生成された前記ＣＲＣの逆演算結果と、前記ＣＲＣ変換情報保持部に保持されている前記ＣＲＣ変換情報とを用いて、前記正順で得られたエラー系列に対するＣＲＣ値である第２のＣＲＣ値を求める第２のＣＲＣ生成部を持つ。前記第１のＣＲＣ生成部で生成された前記第１のＣＲＣ値と、前記第２のＣＲＣ生成部で生成された前記第２のＣＲＣ値とを用いて、前記エラーを含まない記録系列に対するＣＲＣ値に相当する第３のＣＲＣ値を求める第３のＣＲＣ生成部を持つ。
【図面の簡単な説明】
【０００６】
【図１】図１は、第１の実施形態にかかる記憶装置の構成例を示す図である。
【図２】図２は、第１の実施形態にかかるＣＲＣ生成装置の構成例を示す図である。
【図３】図３は、ＣＲＣ生成装置におけるＣＲＣ値の生成処理を示すフローチャートである。
【図４】図４は、ＣＲＣ生成部におけるＣＲＣ値の生成処理を示す図である。
【図５】図５は、ＣＲＣ逆演算部におけるＣＲＣの逆演算結果の生成処理を示す図である。
【図６】図６は、ＣＲＣ値の逆算方法を示す図である。
【図７】図７は、ＣＲＣ値の逆算の応用例を示す図である。
【図８】図８は、ＣＲＣ生成シフトレジスタ群の各シフトレジスタの状態を示す図である。
【図９】図９は、図８に示すシフトレジスタの状態を表す単位行列を示す図である。
【図１０】図１０は、逆順のエラー系列に対するＣＲＣ値から正順のエラー系列に対するＣＲＣ値への換算方法を示す図である。
【図１１】図１１は、第２の実施形態にかかるＣＲＣ生成装置の構成例を示す図である。
【発明を実施するための形態】
【０００７】
以下に添付図面を参照して、実施形態にかかる記憶装置、ＣＲＣ生成装置およびＣＲＣ生成方法を詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
【０００８】
（第１の実施形態）
図１は、第１の実施形態にかかる記憶装置の構成例を示す図である。記憶装置は、記憶部１と、データ読み出し部２と、ＣＲＣ生成装置３を備えた誤り訂正部４と、を含む。記憶部１は、データ系列である記録系列を記憶する記憶手段であり、例えば、ＮＡＮＤ型フラッシュメモリ等の半導体メモリなどがあるが、これに限定するものではない。データ読み出し部２は、記憶部１から読み出した記録系列に対してエラーを含む再生系列を、誤り訂正部４へ出力する。誤り訂正部４は、データ読み出し部２から出力されたエラーを含む再生系列に基づいて、ＣＲＣ生成装置３におけるエラーを含まない記録系列に対するＣＲＣ値の生成処理を含む誤り訂正処理を行う。ここで、データ読み出し部２で読み出された再生系列には、記憶部１に記憶されている記録系列に対してエラーが付加されている（エラー系列が含まれている）ものとする。
【０００９】
つぎに、ＣＲＣ生成装置３の構成について説明する。図２は、第１の実施形態にかかるＣＲＣ生成装置の構成例を示す図である。ＣＲＣ生成装置３は、ＣＲＣ生成部３１と、ＥＣＣ（Error  Correcting  CodeまたはError  Checking  and  Correcting）部３２と、ＣＲＣ逆演算部３３と、ＣＲＣ生成シフトレジスタ群３４と、エラー系列ＣＲＣ生成部３５と、ＸＯＲ（排他的論理和演算）部３６と、を備える。
【００１０】
ＣＲＣ生成部３１は、データ読み出し部２により記憶部１から読み出された再生系列を正順で入力し、再生系列に対するＣＲＣ値（第１のＣＲＣ値）を生成してＸＯＲ部３６へ出力する第１のＣＲＣ生成部である。ＣＲＣ生成部３１は、内部に、再生系列に対するＣＲＣ値（第１のＣＲＣ値）の生成に用いる生成多項式の次数と同数の段数のシフトレジスタを備える。
【００１１】
ここで、再生系列を正順で入力するとは、再生系列のＭＳＢ（Most  Significant  Bit）側から順に入力し、最後にＬＳＢ（Least  Significant  Bit）を入力する入力順を示す。なお、後述するエラー系列を逆順で入力するとは、正順とは逆の入力順であり、エラー系列のＬＳＢ側から順で入力し、最後にＭＳＢを入力する入力順を示す。
【００１２】
ＥＣＣ部３２は、データ読み出し部２により記憶部１から読み出された再生系列を正順で入力し、再生系列に対してエラー検出を行うエラー検出部である。エラー検出としては、例えば、ＢＣＨ符号の復号過程におけるチェンサーチ等があるが、これに限定するものではない。ＥＣＣ部３２は、エラー検出の結果、得られたエラー系列を、再生系列とは逆順でＣＲＣ逆演算部３３へ出力する。エラー系列とは、再生系列において、記録系列に対してエラーのあるビットの位置を示す系列である。
【００１３】
ＣＲＣ逆演算部３３は、ＥＣＣ部３２で求められたエラー系列を逆順で入力し、逆順のエラー系列に対するＣＲＣの逆演算を行い、ＣＲＣの逆演算結果をエラー系列ＣＲＣ生成部３５へ出力する。ＣＲＣ逆演算部３３は、内部に、逆順のエラー系列に対するＣＲＣの逆演算に用いる生成多項式の次数と同数の段数のシフトレジスタを備える。シフトレジスタの段数はＣＲＣ生成部３１と同じである。
【００１４】
ＣＲＣ生成シフトレジスタ群３４は、ＣＲＣ生成部３１およびＣＲＣ逆演算部３３が備えるシフトレジスタと同数のシフトレジスタからなる回路を複数備える。具体的には、ＣＲＣ生成部３１およびＣＲＣ逆演算部３３が４つのシフトレジスタを備える場合（すなわち、生成多項式の次数が４の場合）、ＣＲＣ生成シフトレジスタ群３４は、４2＝１６個のシフトレジスタを備え、４つのシフトレジスタからなる回路を４種類備える。ＣＲＣ生成シフトレジスタ群３４は、これらのシフトレジスタを用いて、エラー系列ＣＲＣ生成部３５が正順のエラー系列に対するＣＲＣ値（第２のＣＲＣ値）を生成する際に使用するＣＲＣ変換情報を保持するＣＲＣ変換情報保持部である。ＣＲＣ変換情報の詳細については後述する。
【００１５】
エラー系列ＣＲＣ生成部３５は、ＣＲＣ逆演算部３３から取得した逆順のエラー系列に対するＣＲＣの逆演算結果、およびＣＲＣ生成シフトレジスタ群３４から取得したＣＲＣ変換情報を用いて、正順のエラー系列に対するＣＲＣ値（第２のＣＲＣ値）を生成する第２のＣＲＣ生成部である。エラー系列ＣＲＣ生成部３５は、生成した正順のエラー系列に対するＣＲＣ値（第２のＣＲＣ値）をＸＯＲ部３６へ出力する。
【００１６】
ＸＯＲ部３６は、ＣＲＣ生成部３１から取得した再生系列に対するＣＲＣ値（第１のＣＲＣ値）、およびエラー系列ＣＲＣ生成部３５から取得した正順のエラー系列に対するＣＲＣ値（第２のＣＲＣ値）を用いて、エラーのない再生系列に対するＣＲＣ値、すなわち、記録系列に対するＣＲＣ値に相当するＣＲＣ値（第３のＣＲＣ値）を生成する第３のＣＲＣ生成部である。
【００１７】
つづいて、ＣＲＣ生成装置３における記録系列に対するＣＲＣ値を生成するまでの動作について詳細に説明する。図３は、ＣＲＣ生成装置におけるＣＲＣ値の生成処理を示すフローチャートである。
【００１８】
まず、ＣＲＣ生成装置３では、ＣＲＣ生成部３１が、データ読み出し部２において記憶部１から読み出された再生系列を正順で入力し、再生系列に対するＣＲＣ値（第１のＣＲＣ値）を生成する（ステップＳ１）。ＣＲＣ生成部３１は、再生系列に対するＣＲＣ値（第１のＣＲＣ値）をＸＯＲ部３６へ出力する。
【００１９】
図４は、ＣＲＣ生成部におけるＣＲＣ値の生成処理を示す図である。ＣＲＣ生成部３１は、排他的論理和演算部３１１と、シフトレジスタ３１２と、排他的論理和演算部３１３と、シフトレジスタ３１４，３１５，３１６と、を備える。排他的論理和演算部３１１は、データ読み出し部２により記憶部１から読み出された再生系列、およびシフトレジスタ３１６からの出力ビットを入力として排他的論理和演算を行い、演算結果をシフトレジスタ３１２へ出力する。排他的論理和演算部３１３は、シフトレジスタ３１２からの出力ビット、およびシフトレジスタ３１６からの出力ビットを入力として排他的論理和演算を行い、演算結果をシフトレジスタ３１４へ出力する。一般的に、ＣＲＣ値の演算回路は、シフトレジスタを用いて実現できる。ここでは、一例として、生成多項式の次数が４の場合（シフトレジスタが４つの場合）について説明する。
【００２０】
ＣＲＣ生成部３１では、各シフトレジスタ３１２，３１４〜３１６に任意の初期値（一例として、初期値Ａとする）を設定し、再生系列をＭＳＢ側から正順に入力する。そして、ＣＲＣ生成部３１は、再生系列を所定のデータ数分入力してビットシフト動作を行い、ビットシフト動作後各シフトレジスタ３１２，３１４〜３１６が保持する値（「０」または「１」）をＣＲＣ値（第１のＣＲＣ値）として出力する。所定のデータ数とは、ＣＲＣ値を生成する符号語の単位、例えば、図１の記憶装置のシステムで管理するアドレス単位に基づくものとし、以降も同様とする。
【００２１】
つぎに、ＣＲＣ生成装置３では、ＥＣＣ部３２が、データ読み出し部２により記憶部１から読み出された再生系列を正順で入力し、再生系列に対してエラー検出を行う（ステップＳ２）。ここでは、ＥＣＣ部３２は、エラー検出の結果、得られたエラー系列を、再生系列とは逆順でＣＲＣ逆演算部３３へ出力する。再生系列からエラーを検出して逆順でエラー系列を出力する方法については、従来同様の方法（例えば、ＢＣＨ等）で求めることができるので、詳細な説明については省略する。
【００２２】
図３に戻り、つぎに、ＣＲＣ逆演算部３３は、ＥＣＣ部３２で求められたエラー系列を逆順で入力し、逆順のエラー系列に対するＣＲＣの逆演算を行う（ステップＳ３）。ＣＲＣ逆演算部３３は、逆順のエラー系列に対するＣＲＣの逆演算により得られたＣＲＣの逆演算結果をエラー系列ＣＲＣ生成部３５へ出力する。
【００２３】
図５は、ＣＲＣ逆演算部におけるＣＲＣの逆演算結果の生成処理を示す図である。ＣＲＣ逆演算部３３は、排他的論理和演算部３３１と、シフトレジスタ３３２，３３３，３３４と、排他的論理和演算部３３５と、シフトレジスタ３３６と、を備える。排他的論理和演算部３３１は、ＥＣＣ部３２から入力したエラー系列、およびシフトレジスタ３３６からの出力ビットを入力として排他的論理和演算を行い、演算結果をシフトレジスタ３３２へ出力する。排他的論理和演算部３３５は、シフトレジスタ３３４からの出力ビット、およびシフトレジスタ３３６からの出力ビットを入力として排他的論理和演算を行い、演算結果をシフトレジスタ３３６へ出力する。ＣＲＣ生成部３１と同様、一例として、生成多項式の次数が４の場合（シフトレジスタが４つの場合）について説明する。
【００２４】
ＣＲＣ逆演算部３３では、各シフトレジスタ３３２〜３３４，３３６に初期値オールゼロを設定し、エラー系列をＬＳＢ側から逆順で入力する。そして、ＣＲＣ逆演算部３３は、エラー系列を所定のデータ数分入力してビットシフト動作を行い、ビットシフト動作後各シフトレジスタ３３２〜３３４，３３６が保持する値（「０」または「１」）を逆順のエラー系列に対するＣＲＣの逆演算結果として出力する。
【００２５】
図３に戻り、つぎに、ＣＲＣ生成シフトレジスタ群３４は、エラー系列ＣＲＣ生成部３５が正順のエラー系列に対するＣＲＣ値（第２のＣＲＣ値）を生成する際に使用するＣＲＣ変換情報を生成する（ステップＳ４）。
【００２６】
ここで、エラー系列ＣＲＣ生成部３５が正順のエラー系列に対するＣＲＣ値（第２のＣＲＣ値）を生成する際に使用するＣＲＣ変換情報について説明する。
【００２７】
まず、ＣＲＣ値の逆算について説明する。図６は、ＣＲＣ値の逆算方法を示す図である。図６において、シフトレジスタ群ＳはＣＲＣ生成部３１と同じ構成であり、逆シフトレジスタ群ＲはＣＲＣ逆演算部３３と同じ構成とする。初期値Ｘのシフトレジスタ群Ｓでは、データ系列ＤをＭＳＢ側から正順で所定のデータ数分を入力してビットシフト動作を行うとＣＲＣ値Ｍが得られる。このＣＲＣ値Ｍを、シフトレジスタ群Ｓのビットシフト方向とは逆の方向にビットシフト動作する逆シフトレジスタ群Ｒの初期値として設定する。そして、逆シフトレジスタ群Ｒでは、データ系列ＤをＬＳＢ側から逆順で所定のデータ数分を入力してビットシフト動作を行うとＣＲＣ値Ｎが得られる。このＣＲＣ値Ｎは、シフトレジスタ群Ｓの初期値Ｘと同一である。このように、データ系列Ｄ、データ系列Ｄから生成したＣＲＣ値Ｍ、および、ＣＲＣの生成多項式が既知の場合、初期値Ｘが未知であっても、ＣＲＣの逆算を行うことによって初期値Ｘを求めることができる。
【００２８】
つぎに、ＣＲＣ値の逆算の応用例について説明する。図７は、ＣＲＣ値の逆算の応用例を示す図である。初期値がオールゼロの逆シフトレジスタ群Ｒでは、データ系列ＤをＬＳＢ側から逆順で所定のデータ数分を入力してビットシフト動作を行うとＣＲＣ値Ｐが得られる。このＣＲＣ値Ｐを、シフトレジスタ群Ｓの初期値として設定する。そして、シフトレジスタ群Ｓでは、入力データをオールゼロ（系列）として所定のデータ数分を入力してビットシフト動作を行うとＣＲＣ値Ｑが得られる。このＣＲＣ値Ｑは、初期値をＣＲＣ値Ｐとしたシフトレジスタ群Ｓに、データ系列Ｄを最初の逆シフトレジスタ群Ｒに入力した順とは逆、すなわち、データ系列ＤをＭＳＢ側から正順で入力して得られるＣＲＣ値と一致する。
【００２９】
図５において、ＣＲＣ逆演算部３３が生成した逆順のエラー系列に対するＣＲＣの逆演算結果は、図７の例のＣＲＣ値Ｐに相当する。そのため、逆順のエラー系列に対するＣＲＣの逆演算結果をシフトレジスタ群Ｓの初期値として、オールゼロ（系列）のデータ系列を所定のデータ数分を入力してビットシフト動作を行って得られたＣＲＣ値は、初期値オールゼロのシフトレジスタ群Ｓに、エラー系列を正順に所定のデータ数分を入力してビットシフト動作を行ったときに得られるＣＲＣ値（第２のＣＲＣ値）と一致することになる。背景技術で説明しているように、再生系列に対するＣＲＣ値（第１のＣＲＣ値に相当）とエラー系列に対するＣＲＣ値（第２のＣＲＣ値に相当）との排他的論理和演算により、エラーを含まない記録系列に対するＣＲＣ値（第３のＣＲＣ値に相当）を求めることができる。
【００３０】
このように、エラー系列が逆順となっても、エラー系列が正順の場合と同様に、エラーのない記録系列に対するＣＲＣ値（第３のＣＲＣ値）を求めることができる。しかしながら、図７に示すＣＲＣ値の演算方法をＣＲＣ生成装置３で実行すると、ＣＲＣ逆演算部３３で逆順のエラー系列に対するＣＲＣの逆演算結果を得てからつぎのＣＲＣ値の演算を開始することになるため、データ転送のレイテンシ（遅延時間）が大きくなることが懸念される。
【００３１】
そのため、あらかじめ、シフトレジスタにある初期値を与えて、オールゼロのデータを所定のデータ数分を入力してビットシフト動作させたときに、シフトレジスタの内部がどのようになっているのかを求めることができれば、逆順のエラー系列に対するＣＲＣの逆演算結果を初期値として外部からデータを入力せずにシフトレジスタを所定のデータ数分ビットシフト動作させて得られる正順のエラー系列に対するＣＲＣ値（第２のＣＲＣ値）を求めることができる。そのため、シフトレジスタにある初期値を与えて、オールゼロのデータを所定のデータ数分を入力してビットシフト動作させたときに、シフトレジスタの内部の状態を求めるためにＣＲＣ生成シフトレジスタ群３４を用いる。
【００３２】
図８は、ＣＲＣ生成シフトレジスタ群の各シフトレジスタの状態を示す図である。図８（ａ）は、ＣＲＣ生成シフトレジスタ群における初期状態における各シフトレジスタの状態を示し、図８（ｂ）は、ＣＲＣ生成シフトレジスタ群において所定のデータ数分ビットシフト動作した状態における各シフトレジスタの状態を示す。所定のデータ数分のビットシフト動作とは、ＣＲＣ生成部３１およびＣＲＣ逆演算部３３における所定のデータ数分のビットシフト動作と同一である。また、４つのシフトレジスタごとに１つの回路を構成しているが、各回路においてシフトレジスタの配列はＣＲＣ生成部３１と同一である。図８（ａ）において、無地のシフトレジスタには初期値「０」、色付きのシフトレジスタには初期値「１」が与えられている。そして、所定のデータ数分だけビットシフト動作を行うと図８（ｂ）のようにシフトレジスタ内の値が変化する。図８（ａ）と同様、無地のシフトレジスタは「０」、色付きのシフトレジスタは「１」を示す。
【００３３】
図８（ａ）において、シフトレジスタ番号（０，０），（１，１），（２，２），（３，３）の初期値を「１」としている。一番下の４つのシフトレジスタは、一番右のシフトレジスタ（図４ではシフトレジスタ３１２）の初期値が「１」であった場合に、所定のデータ数分だけビットシフト動作させるとどのシフトレジスタにおいて値が「１」になるかを求める。求めたシフトレジスタの値は、図８（ｂ）において一番下の４つのシフトレジスタが示すものとなる。また、下から２番目の４つのシフトレジスタは、右から２番目のシフトレジスタ（図４ではシフトレジスタ３１４）の初期値が「１」であった場合に、所定のデータ数分だけビットシフト動作させるとどのシフトレジスタにおいて値が「１」になるかを求める。求めたシフトレジスタの値は、図８（ｂ）において下から２番目の４つのシフトレジスタが示すものとなる。また、下から３番目の４つのシフトレジスタは、右から３番目のシフトレジスタ（図４ではシフトレジスタ３１５）の初期値が「１」であった場合に、所定のデータ数分だけビットシフト動作させるとどのシフトレジスタにおいて値が「１」になるかを求める。求めたシフトレジスタの値は、図８（ｂ）において下から３番目の４つのシフトレジスタが示すものとなる。また、一番上の４つのシフトレジスタは、一番左のシフトレジスタ（図４ではシフトレジスタ３１６）の初期値が「１」であった場合に、所定のデータ数分だけビットシフト動作させるとどのシフトレジスタにおいて値が「１」になるかを求める。求めたシフトレジスタの値は、図８（ｂ）において一番上の４つのシフトレジスタが示すものとなる。
【００３４】
ＣＲＣ生成シフトレジスタ群３４では、シフトレジスタの初期値が、例えば「０１１０」の場合、図８（ａ）に示す４つのシフトレジスタ群のうち、下から２番目と下から３番目の初期値を排他的論理和演算すれば「０１１０」となる。そのため、ＣＲＣ生成シフトレジスタ群３４では、初期値「０１１０」で所定のデータ数分ビットシフト動作させたときのＣＲＣ値、すなわち、シフトレジスタの値は、図８（ｂ）に示す４つのシフトレジスタ群のうち、下から２番目と下から３番目のシフトレジスタを所定のデータ数分ビットシフト動作させたときの、それぞれのシフトレジスタの値を排他的論理和演算したものとして求めることができる。
【００３５】
図８におけるＣＲＣ生成シフトレジスタ群３４での各シフトレジスタの状態を行列の形式で示すと、図９のように表すことができる。図９は、図８に示すシフトレジスタの状態を表す単位行列を示す図である。図９（ａ）は、シフトレジスタの初期値の状態を表す単位行列を示し、図９（ｂ）は、シフトレジスタにおいて所定のデータ数分ビットシフト動作させた状態を表す行列を示す。
【００３６】
ＣＲＣ生成シフトレジスタ群３４では、ＣＲＣ生成装置３の起動前においては図８（ａ）（図９（ａ））の状態でシフトレジスタの値を保持しており、ＣＲＣ生成装置３の起動後においては所定のデータ数分ビットシフト動作を行って図８（ｂ）（図９（ｂ））の状態でシフトレジスタの値を保持する。このときの、所定のデータ数分ビットシフト動作を行って図８（ｂ）（図９（ｂ））の状態で保持するシフトレジスタの値の情報は、ＣＲＣ生成部３１に所定のデータ数が入力されてビットシフト動作された各シフトレジスタの値に相当する情報であり、これをＣＲＣ変換情報とする。ＣＲＣ生成シフトレジスタ群３４は、ＣＲＣ生成装置３の起動後、ＣＲＣ変換情報を生成し、エラー系列ＣＲＣ生成部３５へ出力する。
【００３７】
ＣＲＣ生成シフトレジスタ群３４は、複数のシフトレジスタを有しており、複数のシフトレジスタを用いて演算した結果をＣＲＣ変換情報として保持する。
【００３８】
図３に戻り、つぎに、エラー系列ＣＲＣ生成部３５は、ＣＲＣ逆演算部３３から取得した逆順のエラー系列に対するＣＲＣの逆演算結果、およびＣＲＣ生成シフトレジスタ群３４から取得したＣＲＣ変換情報を用いて、正順のエラー系列に対するＣＲＣ値（第２のＣＲＣ値）を生成する（ステップＳ５）。
【００３９】
図１０は、逆順のエラー系列に対するＣＲＣ値から正順のエラー系列に対するＣＲＣ値への換算方法を示す図である。エラー系列ＣＲＣ生成部３５は、ＣＲＣ逆演算部３３から取得した逆順のエラー系列に対するＣＲＣの逆演算結果において値が「１」になっている位置に対応するＣＲＣ変換情報の行列内の行同士を排他的論理和演算することで、正順のエラー系列に対するＣＲＣ値（第２のＣＲＣ値）を求めることができる。エラー系列ＣＲＣ生成部３５は、例えば、図１０に示すように、ＣＲＣ生成シフトレジスタ群３４からのＣＲＣ変換情報に対して、ＣＲＣ逆演算部３３から取得した逆順のエラー系列に対するＣＲＣの逆演算結果が「０１１０」だった場合、逆順のエラー系列に対するＣＲＣの逆演算結果において値が「１」の位置に対応するＣＲＣ変換情報の行「１０００」と「００１１」を排他的論理和演算することで、「１０１１」の値を得ることができる。この「１０１１」の値が、初期値が「０１１０」で、オールゼロのデータを所定のデータ数分入力してシフトレジスタをビットシフト動作させたときのＣＲＣ値、すなわち、正順のエラー系列に対するＣＲＣ値（第２のＣＲＣ値）となる。エラー系列ＣＲＣ生成部３５は、生成した正順のエラー系列に対するＣＲＣ値（第２のＣＲＣ値）をＸＯＲ部３６へ出力する。
【００４０】
なお、ＣＲＣ生成シフトレジスタ群３４がＣＲＣ変換情報をエラー系列ＣＲＣ生成部３５へ出力し、エラー系列ＣＲＣ生成部３５がＣＲＣ生成シフトレジスタ群３４から取得したＣＲＣ変換情報を用いることとしているが、これに限定するものではない。例えば、エラー系列ＣＲＣ生成部３５は、ＣＲＣ逆演算部３３から取得した逆順のエラー系列に対するＣＲＣの逆演算結果に基づいて、ＣＲＣ変換情報のうち、必要な部分の情報のみをＣＲＣ生成シフトレジスタ群３４から読み取るようにしてもよい。
【００４１】
図３に戻り、そして、ＸＯＲ部３６は、ＣＲＣ生成部３１から取得した再生系列に対するＣＲＣ値（第１のＣＲＣ値）、およびエラー系列ＣＲＣ生成部３５から取得した正順のエラー系列に対するＣＲＣ値（第２のＣＲＣ値）を用いて排他的論理和演算を行い、エラーのない再生系列に対するＣＲＣ値、すなわち、記録系列に対するＣＲＣ値に相当するＣＲＣ値（第３のＣＲＣ値）を生成する（ステップＳ６）。
【００４２】
このように、ＣＲＣ生成シフトレジスタ群３４でＣＲＣ変換情報を得る動作は、ＣＲＣ逆演算部３３において図５に示す逆順のエラー系列に対するＣＲＣの逆演算結果を求める動作とは独立したものである。そのため、ＣＲＣ生成装置３における記録系列に対するＣＲＣ値（第３のＣＲＣ値）の生成処理において、ＣＲＣ生成シフトレジスタ群３４でＣＲＣ変換情報を得る動作は、ＣＲＣ逆演算部３３において図５に示す逆順のエラー系列に対するＣＲＣの逆演算結果を求めるまでに、または並行して行うことができる。エラー系列ＣＲＣ生成部３５では、ＣＲＣ逆演算部３３からの逆順のエラー系列に対するＣＲＣの逆演算結果を取得するまでに、または並行してＣＲＣ生成シフトレジスタ群３４からのＣＲＣ変換情報を取得することができる。
【００４３】
以上説明したように、第１の実施形態によれば、ＣＲＣ生成装置３では、ＣＲＣ逆演算部３３において逆順のエラー系列に対するＣＲＣの逆演算結果が生成された場合に、ＣＲＣ生成シフトレジスタ群３４は、ＣＲＣ逆演算部３３の動作とは独立に、ある初期値をシフトレジスタに設定してエラー系列と同じデータ数分ビットシフト動作させたときのシフトレジスタの状態を示すＣＲＣ変換情報を得ることができる。そして、エラー系列ＣＲＣ生成部３５では、逆順のエラー系列に対するＣＲＣの逆演算結果とＣＲＣ変換情報とを用いて、正順のエラー系列に対するＣＲＣ値（第２のＣＲＣ値）を求める。ＸＯＲ部３６は、再生系列に対するＣＲＣ値（第１のＣＲＣ値）と、正順のエラー系列に対するＣＲＣ値（第２のＣＲＣ値）とを用いて、エラーを含まない記録系列に対するＣＲＣ値（第３のＣＲＣ値）を求めることができる。その結果、再生系列から逆順のエラー系列が得られた場合においても、ＣＲＣ生成装置３では、各構成において前段の構成での処理待ちを回避することができ、データ転送のレイテンシ（遅延時間）を低減することができる。
【００４４】
（第２の実施形態）
第１の実施形態においては、ＣＲＣ変換情報を生成・保持するためにＣＲＣ生成シフトレジスタ群３４を用いたが、これに限定するものではなく、メモリ等の記憶手段にあらかじめＣＲＣ変換情報を保持することも可能である。
【００４５】
図１１は、第２の実施形態にかかるＣＲＣ生成装置の構成例を示す図である。ＣＲＣ生成装置３ａは、ＣＲＣ生成シフトレジスタ群３４に替えてメモリ３７を備える点が第１の実施形態（図２参照）と異なるが、他の構成及び動作は第１の実施形態と同様である。第１の実施形態では、ＣＲＣ生成シフトレジスタ群３４は、ＣＲＣ生成装置３の起動前においては初期値の状態でシフトレジスタの値を保持した。また、ＣＲＣ生成シフトレジスタ群３４は、ＣＲＣ生成装置３の起動後においては所定のデータ数分ビットシフト動作を行った状態でシフトレジスタの値（ＣＲＣ変換情報）を保持した。ここで、ＣＲＣ生成シフトレジスタ群３４は、ＣＲＣ生成装置３に入力される再生系列の長さにかかわらず、ＣＲＣ生成装置３の起動後においてはＣＲＣ変換情報を保持した。ＣＲＣ変換情報は、起動するたびに異なる値になるものではない。そのため、ＣＲＣ変換情報保持部として、あらかじめＣＲＣ変換情報を図９（ｂ）に示す行列形式でメモリ３７に記憶させておくことが可能である。
【００４６】
メモリ３７は、あらかじめ演算した結果をＣＲＣ変換情報として保持する。
【００４７】
これにより、第１の実施形態と比較して、装置の規模を小さくすることができ、また、ＣＲＣ生成シフトレジスタ群３４の動作分の消費電力を低減することが可能である。
【００４８】
なお、ＣＲＣ生成装置３では、ＣＲＣ生成シフトレジスタ群３４をメモリ３７に置き換えるだけでなく、ＣＲＣ生成シフトレジスタ群３４とメモリ３７を併用することも可能である。また、複数のＣＲＣ生成シフトレジスタ群３４、または／および、複数のメモリ３７を用いることも可能である。これにより、所定のデータ数分ビットシフト動作を行う際のビットシフト動作の回数を複数設定でき、ビットシフト動作の回数に対応するＣＲＣ変換情報を保持することが可能である。
【００４９】
なお、ＣＲＣ生成装置３，３ａは、記憶装置以外の用途にも適用可能である。例えば、通信装置間において送受信されるデータに対しても適用可能であり、また、データの誤りを検出する用途であれば、これらの用途に限定するものではない。すなわち、エラー系列が逆順で検出される場合において、遅延時間を低減することが可能である。
【００５０】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００５１】
１  記憶部、２  データ読み出し部、３，３ａ  ＣＲＣ生成装置、４  誤り訂正部、３１  ＣＲＣ生成部、３２  ＥＣＣ部、３３  ＣＲＣ逆演算部、３４  ＣＲＣ生成シフトレジスタ群、３５  エラー系列ＣＲＣ生成部、３６  ＸＯＲ部、３７  メモリ、３１１，３１３，３３１，３３５  排他的論理和演算部、３１２，３１４〜３１６，３３２〜３３４，３３６  シフトレジスタ。
【図１】
2015019276.tif 000003
【図２】
2015019276.tif 000004
【図３】
2015019276.tif 000005
【図４】
2015019276.tif 000006
【図５】
2015019276.tif 000007
【図６】
2015019276.tif 000008
【図７】
2015019276.tif 000009
【図８】
2015019276.tif 000010
【図９】
2015019276.tif 000011
【図１０】
2015019276.tif 000012
【図１１】
2015019276.tif 000013