(57)【要約】【課題】実装面積を増大させることなく、ソフトエラーの発生を検出し、訂正できるようにする。【解決手段】演算装置１０１（演算部）は、所定の演算により、複数の入力データ５０１に基づいて、誤り検出データ５０３を算出する。記憶装置１０２は、複数の入力データ５０１と、誤り検出データ５０３を記憶する。データ生成装置１０４（判定部・訂正部）は、記憶装置１０２が記憶した複数の入力データと記憶装置１０２が記憶した誤り検出データとの間に整合性があるか判定し、整合性がない場合、記憶装置１０２が記憶した複数の入力データと記憶装置１０２が記憶した誤り検出データとのうちから、誤っているデータを判定し、誤っていると判定したデータについて、正しいデータを算出する。【選択図】図１
2012234487.tif 000002
【特許請求の範囲】
【請求項１】
データを記憶する記憶装置と、入力部と、演算部と、記憶部と、判定部と、訂正部とを有し、
上記入力部は、複数の入力データを入力し、
上記演算部は、所定の演算により、上記入力部が入力した複数の入力データに基づいて、誤り検出データを算出し、
上記記憶部は、上記記憶装置を用いて、上記入力部が入力した複数の入力データと、上記演算部が算出した誤り検出データとを記憶し、
上記判定部は、上記演算部が上記誤り検出データの算出に用いた演算により上記記憶装置が記憶した複数の入力データから算出されるデータと、上記記憶装置が記憶した誤り検出データとが一致するか否かを判定し、
上記訂正部は、上記記憶装置が記憶した複数の入力データから算出されるデータと上記記憶装置が記憶した誤り検出データとが一致しないと上記判定部が判定した場合に、上記記憶装置が記憶した複数の入力データと上記記憶装置が記憶した誤り検出データとのうちから、誤っているデータを特定し、誤っていると特定したデータについて、正しいデータを算出することを特徴とするデータ記憶装置。
【請求項２】
上記演算部は、所定の演算により、上記入力部が入力した２つの入力データから１つの誤り検出データを算出し、
上記記憶部は、上記演算部が算出した誤り検出データと、上記演算部が上記誤り検出データの算出に用いた２つの入力データとを、上記記憶装置の物理的に離れた領域を用いて記憶することを特徴とする請求項１に記載のデータ記憶装置。
【請求項３】
上記演算部は、所定の演算により、上記入力部が入力した２つの入力データから１つの誤り検出データを算出し、
上記記憶部は、上記演算部が１つの誤り検出データの算出に用いた２つの入力データを、上記記憶装置の物理的に離れた領域を用いて記憶することを特徴とする請求項１または請求項２に記載のデータ記憶装置。
【請求項４】
上記入力部は、３つ以上の入力データを入力し、
上記演算部は、所定の演算により、上記入力部が入力した第一の入力データと上記入力部が入力した第二の入力データとから第一の誤り検出データを算出し、所定の演算により、上記入力部が入力した上記第二の入力データと上記入力部が入力した第三の入力データとから第二の誤り検出データを算出し、
上記訂正部は、上記記憶装置が記憶した第一の入力データと上記記憶装置が記憶した第二の入力データとから算出されるデータと上記記憶装置が記憶した第一の誤り検出データとが一致しないと上記判定部が判定し、かつ、上記記憶装置が記憶した第二の入力データと上記記憶装置が記憶した第三の入力データとから算出されるデータと上記記憶装置が記憶した第二の誤り検出データとが一致しないと上記判定部が判定した場合に、上記記憶装置が記憶した第二の入力データが誤っていると判定し、上記記憶装置が記憶した第一の入力データと上記記憶装置が記憶した第一の誤り検出データとに基づいて、上記演算部が上記第一の誤り検出データの算出に用いた演算の逆演算により、正しい第二の入力データを算出することを特徴とする請求項１乃至請求項３のいずれかに記載のデータ記憶装置。
【請求項５】
上記入力部は、４つ以上の入力データを入力し、
上記演算部は、所定の演算により、上記入力部が入力した第一の入力データと上記入力部が入力した第二の入力データとから第一の誤り検出データを算出し、所定の演算により、上記入力部が入力した上記第二の入力データと上記入力部が入力した第三の入力データとから第二の誤り検出データを算出し、所定の演算により、上記入力部が入力した上記第三の入力データと上記入力部が入力した第四の入力データとから第三の誤り検出データを算出し、  上記訂正部は、上記記憶装置が記憶した第一の入力データと上記記憶装置が記憶した第二の入力データとから算出されるデータと上記記憶装置が記憶した第一の誤り検出データとが一致すると上記判定部が判定し、かつ、上記記憶装置が記憶した第二の入力データと上記記憶装置が記憶した第三の入力データとから算出されるデータと上記記憶装置が記憶した第二の誤り検出データとが一致しないと上記判定部が判定し、かつ、上記記憶装置が記憶した第三の入力データと上記記憶装置が記憶した第四の入力データとから算出されるデータと上記記憶装置が記憶した第三の誤り検出データとが一致すると上記判定部が判定した場合に、上記記憶装置が記憶した第二の誤り検出データが誤っていると判定し、上記記憶装置が記憶した第二の入力データと上記記憶装置が記憶した第三の入力データとに基づいて、上記演算部が上記第二の誤り検出データの算出に用いた演算により、正しい第二の誤り検出データを算出することを特徴とする請求項１乃至請求項４のいずれかに記載のデータ記憶装置。
【請求項６】
上記データ記憶装置は、更に、出力部を有し、
上記出力部は、上記記憶装置が記憶した入力データのうち、誤っていると上記訂正部が判定した入力データについて、上記訂正部が算出した入力データを出力し、誤っていると上記訂正部が判定しなかった入力データについて、上記記憶装置が記憶した入力データを出力することを特徴とする請求項１乃至請求項５のいずれかに記載のデータ記憶装置。
【請求項７】
上記データ記憶装置は、更に、出力部を有し、
上記記憶部は、上記訂正部が誤っていると判定したデータについて、上記記憶装置を用いて、上記訂正部が算出した正しいデータを記憶し、
上記出力部は、上記記憶装置が記憶した入力データを出力することを特徴とする請求項１乃至請求項５のいずれかに記載のデータ記憶装置。
【請求項８】
請求項６または請求項７に記載のデータ記憶装置と、
上記データ記憶装置の出力部が出力した入力データに基づいて、データ処理をする処理部とを有することを特徴とするデータ処理装置。
【請求項９】
データを記憶する記憶装置を有するコンピュータを、請求項１乃至請求項７のいずれかに記載のデータ記憶装置または請求項８に記載のデータ処理装置として機能させることを特徴とするコンピュータプログラム。
【請求項１０】
データを記憶する記憶装置を有するデータ記憶装置が、データを記憶するデータ記憶方法において、
上記データ記憶装置が、複数の入力データを入力し、
上記データ記憶装置が、所定の演算により、入力した複数の入力データに基づいて、誤り検出データを算出し、  上記データ記憶装置が、上記記憶装置を用いて、入力した複数の入力データと、算出した誤り検出データとを記憶し、
上記データ記憶装置が、上記誤り検出データの算出に用いた演算により上記記憶装置が記憶した第一の入力データと上記記憶装置が記憶した第二の入力データとから算出されるデータと、上記記憶装置が記憶した誤り検出データとが一致するか否かを判定し、  上記記憶装置が記憶した複数の入力データから算出されるデータと上記記憶装置が記憶した誤り検出データとが一致しないと判定した場合に、上記データ記憶装置が、上記記憶装置が記憶した複数の入力データと上記記憶装置が記憶した誤り検出データとのうちから、誤っているデータを特定し、誤っていると特定したデータについて、正しいデータを算出することを特徴とするデータ記憶方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、データを記憶する記憶装置に関する。
【背景技術】
【０００２】
メモリがα線や宇宙線などの照射を受けると、ビット反転を起こす場合がある。これをソフトエラーという。デバイス構造などの工夫により、ソフトエラー自体の発生を抑える技術がある。また、誤り訂正符号を設けることにより、ソフトエラーを訂正する技術がある。また、物理的に異なるメモリを複数設けてデータを分散させることにより、ソフトエラーの同時発生を抑える技術がある。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１０−１５３８９３号公報
【特許文献２】特開２０１０−１４０２３２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
デバイス構造の工夫などによりソフトエラーの発生を抑える技術では、ソフトエラーの発生確率を低くすることはできるが、ソフトエラーの発生をなくすことはできない。また、誤り訂正符号によって訂正できるビット数には上限がある。また、物理的に異なるメモリを複数設けると、実装面積が増え、装置を小型化することができない。
この発明は、例えば上記のような課題を解決するためになされたものであり、実装面積を増大させることなく、ソフトエラーの発生を検出し、訂正できるようにすることを目的とする。
【課題を解決するための手段】
【０００５】
この発明にかかるデータ記憶装置は、
データを記憶する記憶装置と、入力部と、演算部と、記憶部と、判定部と、訂正部とを有し、
上記入力部は、複数の入力データを入力し、
上記演算部は、所定の演算により、上記入力部が入力した複数の入力データに基づいて、誤り検出データを算出し、
上記記憶部は、上記記憶装置を用いて、上記入力部が入力した複数の入力データと、上記演算部が算出した誤り検出データとを記憶し、
上記判定部は、上記演算部が上記誤り検出データの算出に用いた演算により上記記憶装置が記憶した複数の入力データから算出されるデータと上記記憶装置が記憶した誤り検出データとが一致するか否かを判定し、
上記訂正部は、上記記憶装置が記憶した複数の入力データから算出されるデータと上記記憶装置が記憶した誤り検出データとが一致しないと上記判定部が判定した場合に、上記記憶装置が記憶した複数の入力データと上記記憶装置が記憶した誤り検出データとのうちから、誤っているデータを特定し、誤っていると特定したデータについて、正しいデータを算出することを特徴とする。
【発明の効果】
【０００６】
この発明にかかるデータ記憶装置によれば、ソフトエラーなどの影響により、記憶装置が記憶した入力データや誤り検出データが変わってしまった場合に、そのことを検出して訂正することができる。
【図面の簡単な説明】
【０００７】
【図１】実施の形態１における信号処理装置１００の構成の一例を示す構成図。
【図２】実施の形態１における記憶装置１０２が記憶するデータの配置の一例を示す図。
【図３】実施の形態１におけるデータ生成装置１０４による判定の一例を示す図。
【図４】実施の形態１におけるデータ生成装置１０４による判定の別の例を示す図。
【図５】実施の形態２における記憶装置１０２が記憶するデータの配置の一例を示す図。
【図６】実施の形態３における信号処理装置１００のハードウェア構成の一例を示すハードウェア構成図。
【図７】実施の形態３における信号処理装置１００の機能ブロックの構成の一例を示すブロック構成図。
【図８】実施の形態３における記憶装置１０２が記憶するデータの配置の一例を示す図。
【図９】実施の形態３における入力処理Ｓ６１０の流れの一例を示すフローチャート図。
【図１０】実施の形態３における訂正処理Ｓ６２０の流れの一例を示すフローチャート図。
【図１１】実施の形態５における記憶装置１０２が記憶するデータの配置の一例を示す図。
【図１２】実施の形態５における訂正部１５０による判定の一例を示す図。
【発明を実施するための形態】
【０００８】
実施の形態１．
実施の形態１について、図１〜図４を用いて説明する。
【０００９】
図１は、この実施の形態における信号処理装置１００の構成の一例を示す構成図である。
信号処理装置１００（データ処理装置、データ記憶装置）は、入力データ５０１を入力し、記憶する。信号処理装置１００は、記憶したデータを読み出して、出力データ５０２を出力する。信号処理装置１００は、記憶したデータがソフトエラーなどにより変わってしまった場合、誤りを検出して訂正し、訂正したデータを出力データ５０２として出力する。信号処理装置１００は、例えば、演算装置１０１と、記憶装置１０２と、Ｒ／Ｗ制御装置１０３と、データ生成装置１０４とを有する。
【００１０】
演算装置１０１は、入力データ５０１に後述する演算を実施して、誤り検出データ５０３を出力する。記憶装置１０２は、入力した入力データ５０１と、誤り検出データ５０３とを書込んで記憶し、記憶したデータを読み出す。Ｒ／Ｗ制御装置１０３は、記憶装置１０２の書込みと読出しを制御し、ならびに、演算装置１０１やデータ生成装置１０４の動作タイミングを制御する。データ生成装置１０４は、記憶装置１０２から読み出した読出データ５０４から、真の出力データ５０２を生成する。
【００１１】
入力データ５０１は、基本データ幅（例えば８ビット、１６ビット、３２ビットなど任意のビット幅）で構成されている。信号処理装置１００は、Ｎ個の入力データ５０１を入力する。ただし、Ｎは、３以上の整数である。
【００１２】
演算装置１０１（入力部・演算部）は、例えばＦＰＧＡ（Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｌｂｅ  Ｇａｔｅ  Ａｒｒａｙ）などを用いて構成したロジックにより実現される。演算装置１０１は、ｉ番目の入力データ５０１と、（ｉ＋１）番目の入力データ５０１とに基づいて、ｉ番目の誤り検出データ５０３を生成する。ただし、ｉは、１以上（Ｎ−１）以下の整数である。演算装置１０１が用いる演算は、可逆性を有する。例えば、ビット毎の排他的論理和、２進数の加算や減算、２進数の乗算や除算（ただし、入力データ５０１が０でない場合に限る。）など、元の２つのデータと演算結果とのうち、２つがわかれば、残りの１つが算出できるという特性を有する。すなわち、ｉ番目の入力データ５０１と、ｉ番目の誤り検出データ５０３とから、（ｉ＋１）番目の入力データ５０１を導出できる演算（以下「逆演算」と呼ぶ。）が存在し、（ｉ＋１）番目の入力データ５０１と、ｉ番目の誤り検出データ５０３とから、ｉ番目の入力データ５０１を導出できる逆演算が存在する。逆演算は、ビット毎の排他的論理和のように、もとの演算と同一の演算であってもよいし、２進数の加算に対する減算のように、もとの演算と異なる演算であってもよい。
例えば、演算装置１０１は、垂直パリティ（ビット毎の排他的論理和）を演算として用いる。ｉ番目の入力データ５０１が「０ｘＡ５」（＝「１０１００１０１」）、（ｉ＋１）番目の入力データ５０１が「０ｘＣＣ」（＝「１１００１１００」）である場合、演算装置１０１は、ｉ番目の誤り検出データ５０３として、「０ｘ６９」（＝「０１１０１００１」）を算出する。
また、演算装置１０１は、最後（Ｎ番目）の入力データ５０１と、最初（１番目）の入力データ５０１とに基づいて、Ｎ番目の誤り検出データ５０３を生成する。
なお、演算装置１０１が用いる演算は、１種類に限らず、２種類以上であってもよい。例えば、１番目の誤り検出データ５０３を算出するのに用いる演算と、２番目の誤り検出データ５０３を算出するのに用いる演算とが異なる演算であってもよい。
【００１３】
記憶装置１０２は、例えば、フラッシュメモリ、Ｅ２ＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  Ｅｒａｓａｂｌｅ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｒｅａｄ−Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＳＤＲＡＭ（Ｓｙｎｃｈｒｏｎｏｕｓ  Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）などのメモリ素子など、データを記憶し、記憶したデータを読み出すことができる装置である。記憶装置１０２は、ｉ番目の入力データ５０１及び（ｉ＋１）番目の入力データ５０１と、ｉ番目の誤り検出データ５０３とを、物理的に離れた領域に記憶する。例えば、記憶装置１０２がメモリ素子である場合、記憶装置１０２は、メモリ内の物理的に連続しない領域に、ｉ番目の入力データ５０１及び（ｉ＋１）番目の入力データ５０１と、ｉ番目の誤り検出データ５０３とを記憶する。これは、宇宙線などの影響によって発生するソフトエラーは、メモリ素子単位で発生するため、メモリ内の物理的に連続しない領域でソフトエラーが同時に発生する確率は、著しく低いからである。
【００１４】
図２は、この実施の形態における記憶装置１０２が記憶するデータの配置の一例を示す図である。
記憶装置１０２は、複数のデータを記憶する。記憶装置１０２がデータを記憶する領域には、アドレス５１０が割り振られている。記憶装置１０２は、アドレス５１０を指定することにより、任意の領域にデータを書き込み、書き込んだデータを読み出すことができる。連続するアドレス５１０を割り振られた領域は、物理的にも連続しているものとする。
例えば、記憶装置１０２は、ｉ番目の入力データ５０１を（ｉ−１）番地に記憶する。また、記憶装置１０２は、ｉ番目の誤り検出データ５０３を（Ｎ＋ｉ−１）番地に記憶する。これにより、ｉ番目の誤り検出データ５０３は、ｉ番目及び（ｉ＋１）番目の入力データ５０１から物理的に離れた領域に記憶される。
【００１５】
なお、各データを記憶するアドレス５１０は、ｉ番目の誤り検出データ５０３がｉ番目及び（ｉ＋１）番目の入力データ５０１から物理的に離れた領域に記憶されるのであれば、この例と異なる構成であってもよい。例えば、記憶装置１０２は、所定の計算式により、入力データ５０１や誤り検出データ５０３を記憶するアドレス５１０を算出する構成であってもよいし、ＬＵＴ（Ｌｏｏｋｕｐ  Ｔａｂｌｅ）を用いて、入力データ５０１や誤り検出データ５０３を記憶するアドレス５１０を取得する構成であってもよい。
【００１６】
Ｒ／Ｗ制御装置１０３（記憶部）は、例えばＦＰＧＡなどを用いて構成されたロジックにより実現される。Ｒ／Ｗ制御装置１０３は、メモリ配置のアドレスを計算する。また、Ｒ／Ｗ制御装置１０３は、書込みアドレスを指定して、入力データ５０１や誤り検出データ５０３を記憶装置１０２に書き込み、選択的に読み出しアドレスを指定して、記憶装置１０２が記憶したデータを読み出す。さらに、Ｒ／Ｗ制御装置１０３は、演算装置１０１が、入力データ５０１から誤り検出データ５０３を演算するタイミングを制御する。また、Ｒ／Ｗ制御装置１０３は、データ生成装置１０４が記憶装置１０２が記憶したデータを読み込み、ソフトエラー発生を検出して、エラー発生時にデータを訂正するタイミングを制御する。
【００１７】
データ生成装置１０４（判定部・訂正部）は、例えばＦＰＧＡなどを用いて構成されたロジックにより実現される。データ生成装置１０４は、記憶装置１０２から読み出したデータから、出力データ５０２を生成する。データ生成装置１０４は、Ｒ／Ｗ制御装置１０３による読出し制御信号にしたがって、記憶装置１０２から読み出した読出データ５０４を入力する。データ生成装置１０４は、記憶装置１０２がｉ番目（ｉは、１以上Ｎ以下の整数。）の入力データ５０１を記憶した領域（例えば（ｉ−１）番地）から読み出した読出データ５０４（以下「ｉ番目の読出入力データ」と呼ぶ。他も同じ。）を入力する。データ生成装置１０４は、（ｉ＋１）番目（ただし、ｉ＝Ｎのときは、１番目）の読出入力データを入力する。データ生成装置１０４は、記憶装置１０２がｉ番目の誤り検出データ５０３を記憶した領域（例えば（Ｎ＋ｉ−１）番地）から読み出した読出データ５０４（以下「ｉ番目の読出誤り検出データ」と呼ぶ。他も同じ。）を入力する。データ生成装置１０４は、入力した３つの読出データ５０４（以下「ｉ番目の３つ組データ」と呼ぶ。）の間の整合性を検証する。すなわち、データ生成装置１０４は、ｉ番目の読出入力データと、（ｉ＋１）番目の読出入力データとから、演算装置１０１と同じ演算により算出されるデータが、ｉ番目の読出誤り検出データと一致するか否かを判定する。例えば、データ生成装置１０４は、演算装置１０１と同じ演算を使って、ｉ番目の読出入力データと、（ｉ＋１）番目の読出入力データ５０１とから、誤り検出データ５０３（検査データ）を算出する。データ生成装置１０４は、算出した誤り検出データ５０３と、ｉ番目の読出誤り検出データ５０３とを比較して、一致しているか否かを判定する。なお、データ生成装置１０４は、演算装置１０１と同じ演算をするのではなく、例えば、ｉ番目の読出入力データ５０１と、ｉ番目の読出誤り検出データとに基づいて、演算装置１０１が使った演算の逆演算により、（ｉ＋１）番目の入力データ５０１を算出し、算出した（ｉ＋１）番目の入力データ５０１と、（ｉ＋１）番目の読出入力データとを比較して、一致しているか否かを判定する構成であってもよい。あるいは、データ生成装置１０４は、演算装置１０１が使った演算に対応する判定式を用いて、３つの読出データ５０４に基づく判定値を算出し、算出した判定値が所定の値に一致するか否かを判定する構成であってもよい。
【００１８】
ｉ番目の３つ組データに整合性がある場合、データ生成装置１０４は、３つの読出データ５０４が、それぞれ正しく、ｉ番目の入力データ５０１、（ｉ＋１）番目の入力データ５０１、ｉ番目の誤り検出データ５０３であると判定し、出力データ５０２として出力する。
【００１９】
ｉ番目の３つ組データに整合性がない場合、データ生成装置１０４は、３つの読出データ５０４のうちのいずれかが間違っていると判定する。これは、例えば、ソフトエラーの影響などにより、記憶装置１０２が記憶したデータにビット反転などの異常が起き、記憶装置１０２が記憶したもとのデータと異なるデータが読み出されることにより発生する。
その場合、データ生成装置１０４は、整合性の検証結果に基づいて、どの読出データ５０４が間違っているかを特定し、特定した読出データ５０４について、もとの正しいデータを算出する。データ生成装置１０４は、算出したデータを出力データ５０２として出力する。記憶装置１０２は、Ｒ／Ｗ制御装置１０３による書込み制御信号にしたがって、データ生成装置１０４が出力した出力データ５０２を、データ生成装置１０４が間違っていると特定した読出データ５０４を記憶していた記憶領域に上書きして記憶する。
なお、データ生成装置１０４の判定結果にかかわらず、記憶装置１０２は、データ生成装置１０４が出力した出力データ５０２を、データ生成装置１０４が読み出した読出データ５０４を記憶していた記憶領域に上書きして記憶する構成であってもよい。
【００２０】
図３は、この実施の形態におけるデータ生成装置１０４による判定の一例を示す図である。
丸は、読出入力データを表わす。菱形は、読出誤り検出データを表わす。破線は、３つ組データを表わす。網掛けは、整合性があると判定された３つ組データを表わす。
【００２１】
ｉ番目の３つ組データに整合性がなく、（ｉ−１）番目及び（ｉ＋１）番目の３つ組データに整合性がある場合、以下のようにして、間違っている読出データ５０４を特定できる。
ｉ番目の３つ組データに整合性がないので、ｉ番目の読出入力データと、（ｉ＋１）番目の読出入力データと、ｉ番目の読出誤り検出データとのうちのいずれかが、間違っている。
しかし、（ｉ−１）番目の３つ組データに整合性があるので、ｉ番目の読出入力データは正しい。同様に、（ｉ＋１）番目の３つ組データに整合性があるので、（ｉ＋１）番目の読出入力データも正しい。したがって、間違っているのは、ｉ番目の読出誤り検出データである。
【００２２】
ｉ番目の３つ組データに整合性がなく、（ｉ−１）番目及び（ｉ＋１）番目の３つ組データに整合性があると判定した場合、データ生成装置１０４は、ｉ番目の読出誤り検出データが間違っていると判定する。データ生成装置１０４は、ｉ番目の３つ組データのうち正しいと判定した２つの読出データ５０４、すなわち、ｉ番目の読出入力データと、（ｉ＋１）番目の読出入力データとに基づいて、演算装置１０１と同じ演算により、ｉ番目の誤り検出データ５０３を算出する。データ生成装置１０４は、正しいと判定した２つの読出データ５０４と、算出した誤り検出データ５０３とを、出力データ５０２として出力する。記憶装置１０２は、ｉ番目の誤り検出データ５０３を記憶していた領域のデータを消去し、データ生成装置１０４が算出したｉ番目の誤り検出データ５０３を上書きして記憶する。なお、記憶装置１０２は、ｉ番目の誤り検出データ５０３を記憶していた領域を使うのを止め、別の領域を使って、データ生成装置１０４が算出したｉ番目の誤り検出データ５０３を記憶する構成であってもよい。その場合、記憶装置１０２は、ＬＵＴなどを書き換えて、ｉ番目の誤り検出データ５０３を新たに記憶した領域に正しくアクセスできるようにする。
【００２３】
図４は、この実施の形態におけるデータ生成装置１０４による判定の別の例を示す図である。
【００２４】
連続した２つの３つ組データに整合性がない場合は、以下のようにして、間違っている読出データ５０４を特定する。
ｉ番目の３つ組データに整合性がないので、ｉ番目の読出入力データと、（ｉ＋１）番目の読出入力データ５０１と、ｉ番目の読出誤り検出データとのうちのいずれかが、間違っている。
また、（ｉ＋１）番目の３つ組データに整合性がないので、（ｉ＋１）番目の読出入力データと、（ｉ＋２）番目の読出入力データと、（ｉ＋１）番目の読出誤り検出データとのうちのいずれかが間違っている。
両者に共通するのは、（ｉ＋１）番目の読出入力データだけである。２つの読出データ５０４が同時に間違っている可能性が極めて低い場合、間違っているのは、（ｉ＋１）番目の読出入力データであると考えてよい。
【００２５】
ｉ番目及び（ｉ＋１）番目の３つ組データに整合性がないと判定した場合、データ生成装置１０４は、（ｉ＋１）番目の読出入力データが間違っていると判定する。データ生成装置１０４は、ｉ番目の３つ組データのうち、正しいと判定した２つの読出データ５０４、すなわち、ｉ番目の読出入力データと、ｉ番目の読出誤り検出データとに基づいて、演算装置１０１が使った演算の逆演算により、（ｉ＋１）番目の入力データ５０１を算出する。データ生成装置１０４は、正しいと判定した２つの読出データ５０４と、算出した（ｉ＋１）番目の入力データ５０１とを、出力データ５０２として出力する。記憶装置１０２は、（ｉ＋１）番目の入力データ５０１を記憶していた領域のデータを消去し、データ生成装置１０４が算出した（ｉ＋１）番目の入力データ５０１を上書きして記憶する。なお、記憶装置１０２は、（ｉ＋１）番目の入力データ５０１を記憶していた領域を使うのを止め、別の領域を使って、データ生成装置１０４が算出した（ｉ＋１）番目の入力データ５０１を記憶する構成であってもよい。
なお、データ生成装置１０４は、（ｉ＋１）番目の３つ組データのうち、正しいと判定した２つの読出データ５０４、すなわち、（ｉ＋２）番目の読出入力データと、（ｉ＋１）番目の読出誤り検出データとに基づいて、（ｉ＋１）番目の入力データ５０１を算出する構成であってもよい。あるいは、ｉ番目の３つ組データに基づいて（ｉ＋１）番目の入力データ５０１を算出するとともに、（ｉ＋１）番目の３つ組データに基づいて（ｉ＋１）番目の入力データ５０１を算出し、算出した２つの（ｉ＋１）番目の入力データ５０１を比較することにより、間違った読出データ５０４の判定が正しいか否かを判定する構成であってもよい。算出した２つの（ｉ＋１）番目の入力データ５０１が一致した場合、残りの４つの読出データ５０４は正しいことが判明する。したがって、（ｉ＋１）番目の読出入力データが間違っていることが再確認できる。これに対して、算出した２つの（ｉ＋１）番目の入力データ５０１が一致しない場合、残りの４つの読出データ５０４のなかに間違ったデータがあることが判明する。したがって、（ｉ＋１）番目の読出入力データが間違っているという判定は、必ずしも正しくない。データ生成装置１０４は、２つの読出データ５０４が同時に間違っているという極めて稀な現象が発生したので訂正不可能であると判定する。しかし、データの記憶領域が図２に示した配置である場合、間違っている可能性のある３つの読出データ５０４のうちの２つが同時に間違っているとすれば、物理的に連続した領域であるｉ番目の誤り検出データ５０３を記憶した領域と、（ｉ＋１）番目の誤り検出データ５０３を記憶した領域とから読み出した読出データ５０４が間違っていて、この２つの領域から物理的に離れた領域である（ｉ＋１）番目の入力データ５０１を記憶した領域から読み出した読出データ５０４は正しいと考えられる。そのため、データ生成装置１０４は、ｉ番目及び（ｉ＋１）番目の読出誤り検出データが間違っていると判定する構成であってもよい。その場合、データ生成装置１０４は、ｉ番目の３つ組データのうち、正しいと判定した２つの読出データ５０４、すなわち、ｉ番目の読出入力データと、（ｉ＋１）番目の読出入力データとに基づいて、ｉ番目の誤り検出データ５０３を算出する。また、データ生成装置１０４は、（ｉ＋１）番目の３つ組データのうち、正しいと判定した２つの読出データ５０４、すなわち、（ｉ＋１）番目の読出入力データと、（ｉ＋２）番目の読出入力データとに基づいて、（ｉ＋１）番目の誤り検出データ５０３を算出する。
【００２６】
以上のように、信号処理装置１００は、ソフトエラーの発生位置によらず、ソフトエラーを訂正することができる。また、信号処理装置１００は、１ビット単位ではなく、基本データ幅単位でソフトエラーを訂正することができる。
メモリ内の記憶領域の物理的な配置を工夫することにより、データの信頼性が向上する。物理的なメモリの数を増やす必要がないので、コスト増加や、パターン配線増加による基板面積の増大を防ぐことができる。
【００２７】
すべての入力データ５０１は、２つずつの誤り検出データ５０３の算出に使われる。すなわち、すべての読出入力データは、２つの３つ組データに属する。このため、ある読出入力データが属する２つの３つ組データに整合性がない場合、信号処理装置１００は、その読出入力データが間違っていると判断する。
また、ある３つ組データに整合性がなく、その３つ組データに属する読出入力データが属するもう一つの３つ組データに整合性がある場合、信号処理装置１００は、その読出入力データが正しいと判断する。整合性のない３つ組データに属する２つの読出入力データがいずれも正しいと判断した場合、信号処理装置１００は、その３つ組データに属する残りの１つの読出データ５０４、すなわち、読出誤り検出データが間違っていると判断する。
【００２８】
信号処理装置１００は、例えば、赤外線撮像装置であり、上述した構成に加えて、撮像装置、オフセット測定装置、オフセット補正装置（処理部）などを有する。撮像装置は、複数の画素を有する撮像素子を有し、各画素の出力値を出力する。オフセット測定装置は、撮像装置が出力する各画素の出力値のオフセットを測定する。例えば、オフセット測定装置は、撮像装置が均一な熱分布を持つ被写体（均一被写体）を撮影したときに出力した各画素の出力値に基づいて、オフセットを測定する。信号処理装置１００の記憶装置１０２は、各画素について測定されたオフセットを、入力データとして記憶する。信号処理装置１００は、撮像素子の画素数と同じ数の出力オフセットを記憶する。オフセット補正装置は、撮像装置が実際の撮影対象を撮影したとき、撮像装置が出力した各画素の出力値から、データ生成装置１０４が出力データとして出力した出力オフセットを差し引くことにより、出力値を補正する。これにより、ざらつきが少なく、信号雑音比が高く、視認性の良い画像を得ることができ、赤外線撮像装置が撮影した画像に基づいて、形状認識や動体認識などの高度な信号処理の認識性能を高めることができる。信号処理装置１００が記憶したデータの信頼性が高いことにより、正しく出力値を補正できるので、その後の信号処理の信頼性も高くなる。
信号処理装置１００は、３ビット以上の基本データ長のソフトエラーを訂正することができる。また、物理的に異なるメモリを用いる必要がないので、メモリパッケージの実装面積や、アドレスバス／データバスのパターン配線領域の面積が増大せず、基板サイズを小さくすることができ、コストの増大を防ぐことができる。
【００２９】
実施の形態２．
実施の形態２について、図５を用いて説明する。
なお、実施の形態１と共通する部分については、同一の符号を付し、説明を省略する。
【００３０】
この実施の形態における記憶装置１０２は、入力データ５０１を記憶する領域の配置が、実施の形態１と異なる。記憶装置１０２は、ｉ番目の入力データと、（ｉ＋１）番目の入力データとを、記憶装置１０２の物理的に離れた領域に記憶する。
【００３１】
図５は、この実施の形態における記憶装置１０２が記憶するデータの配置の一例を示す図である。
例えば、入力データ５０１の数Ｎが偶数であり、Ｎ＝２ｎ（ｎは、２以上の整数。）であるとする。記憶装置１０２は、ｉ番目（ｉは、１以上ｎ以下の整数。）の入力データ５０１を、偶数アドレスである（２ｉ−２）番地に記憶する。また、記憶装置１０２は、（ｉ＋ｎ）番目（ｉは、１以上ｋ以下の整数。）を、奇数アドレスである（２ｉ−１）番地に記憶する。これにより、ｉ番目の入力データ５０１を記憶した領域と、（ｉ＋１）番目の入力データ５０１を記憶した領域との間が離れるので、ｉ番目の入力データ５０１を記憶した領域と、（ｉ＋１）番目の入力データ５０１を記憶した領域とに、ソフトエラーが同時に発生する確率が、実施の形態１よりも更に低くなる。
【００３２】
このように、入力データ５０１を離散的に配置することにより、連続する入力データ５０１に対してソフトエラーが発生する確率が更に低くなるので、データ訂正の信頼性が向上する。
【００３３】
実施の形態３．
実施の形態３について、図６〜図１０を用いて説明する。
なお、実施の形態１及び実施の形態２と共通する部分については、同一の符号を付し、説明を省略する。
【００３４】
図６は、この実施の形態における信号処理装置１００Ａのハードウェア構成の一例を示すハードウェア構成図である。
信号処理装置１００Ａは、例えば、記憶装置１０２と、処理装置９１１と、入力装置９１２と、出力装置９１３とを有する。記憶装置１０２は、実施の形態１で説明した入力データ５０１や誤り検出データ５０３などのデータなどを記憶する。処理装置９１１は、記憶装置１０２とは別に設けた記憶装置（図示せず）が記憶したプログラムを実行することにより、データを処理し、信号処理装置１００Ａ全体を制御する。なお、処理装置９１１が実行するプログラムは、記憶装置１０２が記憶する構成であってもよい。入力装置９１２は、信号処理装置１００Ａの外部からの信号などを入力して、処理装置９１１が処理できるデータに変換する。入力装置９１２は、例えば、アナログ信号をデジタルデータに変換するアナログデジタル変換装置、シリアルデータをパラレルデータに変換するシリアルパラレル変換装置、他の装置が送信した信号を受信して復調する受信装置、他の装置が出力したデータを一時的に保持するバッファ装置などである。出力装置９１３は、処理装置９１１が処理したデータを変換して信号処理装置１００Ａの外部へ出力する。出力装置９１３は、例えば、デジタルデータをアナログ信号に変換するデジタルアナログ変換装置、パラレルデータをシリアルデータに変換するパラレルシリアル変換装置、搬送波を変調して他の装置に対して送信する送信装置、他の装置に対して出力するデータを一時的に保持するバッファ装置などである。
【００３５】
実施の形態１では、信号処理装置１００の機能ブロックをハードウェアによって実現する構成について説明したが、この実施の形態では、信号処理装置１００Ａの機能ブロックをソフトウェアによって実現する。すなわち、信号処理装置１００Ａの機能ブロックは、処理装置９１１がプログラムを実行することにより実現される。
【００３６】
図７は、この実施の形態における信号処理装置１００Ａの機能ブロックの構成の一例を示すブロック構成図である。
信号処理装置１００Ａ（データ記憶装置）は、入力部１１０と、演算部１２０と、記憶部１３０と、判定部１４０と、訂正部１５０と、出力部１６０とを有する。
入力部１１０は、入力装置９１２を用いて、Ｎ個（Ｎは、３以上の整数。）の入力データ５０１を入力する。入力部１１０は、処理装置９１１を用いて、入力したＮ個の入力データ５０１を、演算部１２０や記憶部１３０に対して通知する。
演算部１２０は、処理装置９１１を用いて、入力部１１０が通知したＮ個の入力データ５０１を取得する。演算部１２０は、処理装置９１１を用いて、取得したＮ個の入力データに基づいて、所定の演算により、Ｎ個の誤り検出データ５０３を算出する。演算部１２０は、処理装置９１１を用いて、算出したＮ個の誤り検出データ５０３を、記憶部１３０に対して通知する。
記憶部１３０は、処理装置９１１を用いて、入力部１１０が通知したＮ個の入力データ５０１と、演算部１２０が通知したＮ個の誤り検出データ５０３と取得する。記憶部１３０は、記憶装置１０２を用いて、取得したＮ個の入力データ５０１とＮ個の誤り検出データ５０３とを記憶する。
判定部１４０は、処理装置９１１を用いて、記憶部１３０が記憶したＮ個の入力データ５０１と、Ｎ個の誤り検出データ５０３とを読み出し、読み出した２Ｎ個のデータ（読出データ５０４）を取得する。判定部１４０は、処理装置９１１を用いて、取得した２Ｎ個の読出データ５０４に基づいて、記憶部１３０が記憶したデータの整合性を検査する。判定部１４０は、処理装置９１１を用いて、判定した判定結果５０５を、訂正部１５０に対して通知する。判定部１４０は、この検査を定期的に繰り返す。
訂正部１５０は、処理装置９１１を用いて、判定部１４０が通知した判定結果を取得する。訂正部１５０は、処理装置９１１を用いて、取得した判定結果に基づいて、記憶部１３０が記憶したデータに整合性がないと判定部１４０が判定した場合に、どの読出データ５０４が誤っているかを特定する。訂正部１５０は、処理装置９１１を用いて、判定部１４０が取得した読出データ５０４に基づいて、特定した誤っている読出データ５０４について、もとの正しい入力データ５０１や誤り検出データ５０３を算出する。訂正部１５０は、処理装置９１１を用いて、算出した正しいデータ（訂正データ５０６）を、記憶部１３０に対して通知する。
記憶部１３０は、処理装置９１１を用いて、訂正部１５０が通知した訂正データ５０６を取得する。記憶部１３０は、記憶装置１０２を用いて、取得した訂正データ５０６を記憶する。
出力部１６０は、処理装置９１１を用いて、記憶部１３０が記憶したＮ個の入力データ５０１を読み出して、Ｎ個の読出データ５０４を取得する。出力部１６０は、取得した読出データ５０４を、出力データとして出力する。判定部１４０が定期的に検査を実施して訂正部１５０が訂正しているので、出力時には、データの整合性判定や訂正を行わない。なお、実施の形態１と同様に、出力時にも、データの整合性判定や訂正を行う構成であってもよい。
【００３７】
演算部１２０が誤り検出データ５０３の算出に用いる演算は、実施の形態１と同様に、２つのデータから１つのデータを算出する演算であって、可逆性のある演算である。更に、この実施の形態では、ビット毎の排他的論理和やビット毎の同値演算など、ビット毎に独立した演算を用いる。
【００３８】
図８は、この実施の形態における記憶装置１０２が記憶するデータの配置の一例を示す図である。
記憶装置１０２は、入力データ５０１を偶数番地に記憶し、誤り検出データ５０３を奇数番地に記憶する。例えば、記憶装置１０２は、ｉ番目（ｉは、１以上Ｎ以下の整数。）の入力データ５０１を、（２ｉ−２）番地に記憶する。また、記憶装置１０２は、ｉ番目（ｉは、１以上Ｎ以下の整数。）の誤り検出データ５０３を、（２ｉ−１）番地に記憶する。
【００３９】
演算部１２０は、処理装置９１１を用いて、例えば、ｉ番目（ｉは、１以上Ｎ以下の整数。）の入力データ５０１と、（ｉ＋ａ）番目（ただし、（ｉ＋ａ）がＮより大きい場合は、（ｉ＋ａ−Ｎ）番目）の入力データ５０１とに基づいて、（ｉ＋ｂ）番目（ただし、（ｉ＋ｂ）がＮより大きい場合は、（ｉ＋ｂ−Ｎ）番目）の誤り検出データ５０３を算出する。なお、ａは、１以上Ｎ未満の所定の整数である。また、ｂは、１以上Ｎ未満の所定の整数であり、（Ｎ＋ａ−１）を２で割った商である。なお、Ｎ＋ａ−１が奇数の場合は、端数を切り上げてもよいし、切り捨ててもよい。例えば、Ｎ＝１６、ａ＝３の場合、ｂ＝９である。すなわち、演算部１２０は、ｉ番目の入力データ５０１と、（ｉ＋３）番目の入力データ５０１とに基づいて、（ｉ＋９）番目の誤り検出データ５０３を算出する。例えば、演算部１２０は、１番目の入力データ５０１と、４番目の入力データ５０１とに基づいて、１０番目の誤り検出データ５０３を算出する。演算部１２０は、９番目の入力データ５０１と、１２番目の入力データ５０１とに基づいて、２番目の誤り検出データ５０３を算出する。演算部１２０は、１５番目の入力データ５０１と、２番目の入力データ５０１とに基づいて、８番目の誤り検出データ５０３を算出する。
【００４０】
記憶装置１０２がｉ番目の入力データ５０１を記憶する領域のアドレス５１０は、（２ｉ−２）番地である。また、記憶装置１０２が（ｉ＋ａ）番目の入力データ５０１を記憶する領域のアドレス５１０は、（２ｉ＋２ａ−２）番地（または（２ｉ＋２ａ−２Ｎ−２）番地）である。したがって、ａがＮの半分より小さい場合、ｉ番目の入力データ５０１が記憶される領域と、（ｉ＋ａ）番目の入力データ５０１が記憶される領域との間の物理的距離（以下、単に「ｉ番目の入力データ５０１と（ｉ＋ａ）番目の入力データ５０１との間の物理的距離」と呼ぶ。他も同じ。）は、２ａ番地に相当する距離（またはそれ以上）である。
また、記憶装置１０２が（ｉ＋ｂ）番目の誤り検出データ５０３を記憶する領域のアドレス５１０は、（２ｉ＋２ｂ−１）番地（または（２ｉ＋２ｂ−２Ｎ−１）番地）である。（Ｎ＋ａ−１）が偶数の場合、２ｂ＝Ｎ＋ａ−１だから、記憶装置１０２が（ｉ＋ｂ）番目の誤り検出データ５０３を記憶する領域のアドレス５１０は、（２ｉ＋ａ＋Ｎ−２）番地（または（２ｉ＋ａ−Ｎ−２）番地）である。したがって、ｉ番目の入力データ５０１と（ｉ＋ｂ）番目の誤り検出データ５０３との間の物理的距離は、（Ｎ−ａ）番地に相当する距離（またはそれ以上）である。また、（ｉ＋ａ）番目の入力データ５０１と（ｉ＋ｂ）番目の誤り検出データ５０３との間の物理的距離も、（Ｎ−ａ）番地に相当する距離（またはそれ以上）である。このように、（Ｎ＋ａ−１）が偶数の場合、ｉ番目の入力データ５０１と（ｉ＋ｂ）番目の誤り検出データ５０３との間の物理的距離（の最小値）と、（ｉ＋ａ）番目の入力データ５０１と（ｉ＋ｂ）番目の誤り検出データ５０３との間の物理的距離（の最小値）とは、同じになる。すなわち、いずれか一方に近いということはなく、両者から均等に離れている。このため、ａは、Ｎが偶数の場合は奇数、Ｎが奇数の場合は偶数であることが望ましい。
また、ｉ番目の入力データ５０１と（ｉ＋ａ）番目の入力データ５０１との間の物理的距離（２ａ）と、ｉ番目及び（ｉ＋ａ）番目の入力データ５０１と（ｉ＋ｂ）番目の誤り検出データ５０３との間の物理的距離（Ｎ−ａ）とがほぼ同じになり、三者がほぼ均等に離れるのは、ａがＮの３分の１に近い値のときである。
しかし、ａがＮの３分の１に近い値だと、（ｉ＋２ａ）番目及び（ｉ−ａ）番目の入力データ５０１と（ｉ＋ｂ）番目の誤り検出データ５０３との間の物理的距離が近くなる。また、ａがＮの２分の１に近い値だと、ｉ番目の入力データ５０１と、（ｉ＋２ａ）番目の入力データ５０１との間の物理的距離が近くなる。このため、ａは、Ｎの５分の１もしくは７分の３に近い値であることが望ましい。
【００４１】
判定部１４０は、処理装置９１１を用いて、ｉ番目（ｉは、１以上Ｎ以下の整数。）の読出入力データと、（ｉ＋ａ）番目の読出入力データと、（ｉ＋ｂ）番目の読出誤り検出データとの３つ組データ（ｉ番目の３つ組データ）に、整合性があるか否かを判定する。例えば、演算部１２０が使用する演算がビット毎の排他的論理和である場合、判定部１４０は、ｉ番目の読出入力データと、（ｉ＋ａ）番目の読出入力データと、（ｉ＋ｂ）番目の読出誤り検出データとの３つのデータのビット毎の排他的論理和を算出して、判定値とする。判定部１４０は、処理装置９１１を用いて、算出した判定値が０である場合に、３つ組データに整合性があると判定し、判定値が０でない場合に、３つ組データに整合性がないと判定する。
３つ組データに整合性がないと判断した場合、判定部１４０は、更に、処理装置９１１を用いて、どのビットに整合性があり、どのビットに整合性がないかを判断する。演算部１２０が使用する演算がビット毎に独立した演算なので、整合性のあるビットと、整合性のないビットとを判別することができる。例えば、演算部１２０が使用する演算がビット毎の排他的論理和である場合、判定部１４０は、判定値のどのビットが１であるかを判定し、１であると判定したビットに整合性がないと判定する。
【００４２】
訂正部１５０は、判定部１４０が３つ組データに整合性がないと判定した場合に、処理装置９１１を用いて、その３つ組データのうちのどの読出データ５０４のどのビットが間違っているかを判定する。
例えば、訂正部１５０は、処理装置９１１を用いて、ｉ番目の３つ組データに整合性があると判定部１４０が判定した場合、ｉ番目の読出入力データと、（ｉ＋ａ）番目の読出入力データとが、正しいと判定する。したがって、ｉ番目の読出入力データは、ｉ番目の３つ組データに整合性があれば正しいと判定され、また、（ｉ−ａ）番目の３つ組データに整合性がある場合も正しいと判定される。
また、訂正部１５０は、処理装置９１１を用いて、ｉ番目の３つ組データに整合性がないと判定部１４０が判定した場合、ｉ番目及び（ｉ＋ａ）番目の読出入力データについて、整合性があると判定部１４０が判定したビットは、少なくとも正しいと判定する。したがって、ｉ番目の３つ組データに整合性がなく、かつ、（ｉ−ａ）番目の３つ組データに整合性がない場合でも、ｉ番目の３つ組データにおいて整合性がないと判定部１４０が判定したビットと、（ｉ−ａ）番目の３つ組データにおいて整合性がないと判定部１４０が判定したビットとが共通していなければ、ｉ番目の読出入力データは、正しいと判定される。
訂正部１５０は、Ｎ個の３つ組データすべてについての判定部１４０の判定結果に基づいて、正しい読出入力データのビットを判定し、正しいと判定されずに残った読出入力データのビットが間違っていると判定する。すなわち、ｉ番目の読出入力データは、ｉ番目の３つ組データに整合性がなく、かつ、（ｉ−ａ）番目の３つ組データにも整合性がなく、かつ、ｉ番目の３つ組データにおいて整合性がないビットと（ｉ−ａ）番目の３つ組データにおいて整合性がないビットとの間に共通するビットがある場合に、そのビットが間違っていると判定される。
次に、訂正部１５０は、処理装置９１１を用いて、整合性がないと判定部１４０が判定した３つ組データにおいて整合性がないと判定されたビットについて、その３つ組データに属する２つの読出入力データのそのビットがともに正しいと判定した場合、その３つ組データに属する読出誤り検出データについて、そのビットが間違っていると判定する。
【００４３】
訂正部１５０は、処理装置９１１を用いて、間違っていると判定したビットを訂正する。すなわち、訂正部１５０は、処理装置９１１を用いて、間違っていると判定した読出データ５０４について、間違っていると判定したビットを反転させる。記憶部１３０は、記憶装置１０２を用いて、訂正部１５０がビットを訂正した読出データ５０４を、入力データ５０１または誤り検出データ５０３として記憶する。
【００４４】
図９は、この実施の形態における入力処理Ｓ６１０の流れの一例を示すフローチャート図である。
入力処理Ｓ６１０において、信号処理装置１００Ａは、Ｎ個の入力データ５０１を入力し、Ｎ個の入力データ５０１とＮ個の誤り検出データ５０３とを記憶する。入力処理Ｓ６１０は、例えば、２つの初期化工程Ｓ６１１，Ｓ６１４と、２つの反復工程Ｓ６１２，Ｓ６１５と、入力工程Ｓ６１３と、演算工程Ｓ６１６とを有する。信号処理装置１００Ａは、入力処理Ｓ６１０を初期化工程Ｓ６１１から開始する。
【００４５】
初期化工程Ｓ６１１において、入力部１１０は、処理装置９１１を用いて、整数ｉを０に初期化する。入力部１１０は、記憶装置１０２やその他の記憶装置を用いて、初期化した整数ｉを記憶する。
反復工程Ｓ６１２において、入力部１１０は、処理装置９１１を用いて、整数ｉに１を加える。入力部１１０は、処理装置９１１を用いて、１を加えた整数ｉと、入力データ５０１の数Ｎとを比較する。整数ｉがＮ以下である場合、信号処理装置１００Ａは、入力工程Ｓ６１３へ処理を進める。整数ｉがＮより大きい場合、信号処理装置１００Ａは、初期化工程Ｓ６１４へ処理を進める。
入力工程Ｓ６１３において、入力部１１０は、入力装置９１２を用いて、ｉ番目の入力データ５０１を入力する。記憶部１３０は、記憶装置１０２を用いて、入力部１１０が入力したｉ番目の入力データ５０１を記憶する。信号処理装置１００Ａは、反復工程Ｓ６１２に処理を戻す。
【００４６】
初期化工程Ｓ６１４において、演算部１２０は、処理装置９１１を用いて、整数ｉを０に初期化する。演算部１２０は、記憶装置１０２やその他の記憶装置を用いて、初期化した整数ｉを記憶する。
反復工程Ｓ６１５において、演算部１２０は、処理装置９１１を用いて、整数ｉに１を加える。演算部１２０は、処理装置９１１を用いて、１を加えた整数ｉと、入力データ５０１の数Ｎとを比較する。整数ｉがＮ以下である場合、信号処理装置１００Ａは、演算工程Ｓ６１６へ処理を進める。整数ｉがＮより大きい場合、信号処理装置１００Ａは、入力処理Ｓ６１０を終了する。
演算工程Ｓ６１６において、演算部１２０は、処理装置９１１を用いて、入力工程Ｓ６１３で記憶部１３０が記憶したｉ番目の入力データ５０１と（ｉ＋ａ）番目の入力データ５０１とに基づいて、（ｉ＋ｂ）番目の誤り検出データ５０３を算出する。例えば、演算部１２０は、ｉ番目の入力データ５０１と（ｉ＋ａ）番目の入力データ５０１とのビット毎の排他的論理和をとり、（ｉ＋ｂ）番目の誤り検出データ５０３とする。記憶部１３０は、記憶装置１０２を用いて、演算部１２０が算出した（ｉ＋ｂ）番目の誤り検出データ５０３を記憶する。信号処理装置１００Ａは、反復工程Ｓ６１５に処理を戻す。
【００４７】
図１０は、この実施の形態における訂正処理Ｓ６２０の流れの一例を示すフローチャート図である。
訂正処理Ｓ６２０において、信号処理装置１００Ａは、記憶装置１０２が記憶したデータのなかから間違ったデータを探して訂正する。訂正処理Ｓ６２０は、例えば、３つの初期化工程Ｓ６２１，Ｓ６２４，Ｓ６２７と、３つの反復工程Ｓ６２２，Ｓ６２５，Ｓ６２８と、設定工程Ｓ６２３と、判定工程Ｓ６２６と、訂正工程Ｓ６２９とを有する。信号処理装置１００Ａは、訂正処理Ｓ６２０を初期化工程Ｓ６２１から開始する。
【００４８】
初期化工程Ｓ６２１において、訂正部１５０は、処理装置９１１を用いて、整数ｉを０に初期化する。訂正部１５０は、記憶装置１０２やその他の記憶装置を用いて、初期化した整数ｉを記憶する。
反復工程Ｓ６２２において、訂正部１５０は、処理装置９１１を用いて、整数ｉに１を加える。訂正部１５０は、処理装置９１１を用いて、１を加えた整数ｉと、入力データ５０１の数Ｎとを比較する。整数ｉがＮ以下である場合、信号処理装置１００Ａは、設定工程Ｓ６２３へ処理を進める。整数ｉがＮより大きい場合、信号処理装置１００Ａは、初期化工程Ｓ６２４へ処理を進める。
設定工程Ｓ６２３において、訂正部１５０は、処理装置９１１を用いて、ｉ番目の読出入力データのビットの正誤を表わすデータ（以下「ｉ番目の読出入力正誤データ」と呼ぶ。他も同じ。）を、すべてのビットが間違っていることを表わすデータに初期化する。訂正部１５０は、記憶装置１０２やその他の記憶装置を用いて、初期化した読出入力正誤データを記憶する。信号処理装置１００Ａは、反復工程Ｓ６２２に処理を戻す。
【００４９】
初期化工程Ｓ６２４において、判定部１４０は、処理装置９１１を用いて、整数ｉを０に初期化する。判定部１４０は、記憶装置１０２やその他の記憶装置を用いて、初期化した整数ｉを記憶する。
反復工程Ｓ６２５において、判定部１４０は、処理装置９１１を用いて、整数ｉに１を加える。判定部１４０は、処理装置９１１を用いて、１を加えた整数ｉと、入力データ５０１の数Ｎとを比較する。整数ｉがＮ以下である場合、信号処理装置１００Ａは、判定工程Ｓ６２６へ処理を進める。整数ｉがＮより大きい場合、信号処理装置１００Ａは、初期化工程Ｓ６２７へ処理を進める。
判定工程Ｓ６２６において、判定部１４０は、処理装置９１１を用いて、ｉ番目の３つ組データの整合性を判定する。訂正部１５０は、処理装置９１１を用いて、判定部１４０の判定結果に基づいて、ｉ番目及び（ｉ−ａ）番目の読出入力正誤データを更新する。信号処理装置１００Ａは、反復工程Ｓ６２５に処理を戻す。
【００５０】
初期化工程Ｓ６２７において、訂正部１５０は、処理装置９１１を用いて、整数ｉを０に初期化する。訂正部１５０は、記憶装置１０２やその他の記憶装置を用いて、初期化した整数ｉを記憶する。
反復工程Ｓ６２８において、訂正部１５０は、処理装置９１１を用いて、整数ｉに１を加える。訂正部１５０は、処理装置９１１を用いて、１を加えた整数ｉと、入力データ５０１の数Ｎとを比較する。整数ｉがＮ以下である場合、信号処理装置１００Ａは、訂正工程Ｓ６２９へ処理を進める。整数ｉがＮより大きい場合、信号処理装置１００Ａは、訂正処理Ｓ６２０を終了する。
訂正工程Ｓ６２９において、訂正部１５０は、処理装置９１１を用いて、ｉ番目の読出入力正誤データに基づいて、ｉ番目の読出入力データのビットのうち間違っているビットを反転させる。記憶部１３０は、訂正部１５０が反転させたビットがある場合、記憶装置１０２を用いて、訂正部１５０がビットを反転させたｉ番目の読出入力データを、ｉ番目の入力データ５０１として記憶する。また、訂正部１５０は、処理装置９１１を用いて、ｉ番目及び（ｉ＋ａ）番目の読出入力正誤データと、判定工程Ｓ６２６で判定部１４０が判定したｉ番目の３つ組データの整合性とに基づいて、（ｉ＋ｂ）番目の読出誤り検出データのビットのうち間違っているビットを反転させる。記憶部１３０は、訂正部１５０が反転させたビットがある場合、記憶装置１０２を用いて、訂正部１５０がビットを反転させた（ｉ＋ｂ）番目の読出誤り検出データを、（ｉ＋ｂ）番目の誤り検出データ５０３として記憶する。信号処理装置１００Ａは、反復工程Ｓ６２８に処理を戻す。
【００５１】
訂正処理Ｓ６２０の各工程の具体的処理について、演算部１２０が使用する演算がビット毎の排他的論理和であり、入力データ５０１のビット長が８ビットである場合を例に説明する。
【００５２】
設定工程Ｓ６２３において、訂正部１５０は、処理装置９１１を用いて、ｉ番目の読出入力正誤データを「０ｘＦＦ」（＝「１１１１１１１１」）に初期化する。
判定工程Ｓ６２６において、判定部１４０は、処理装置９１１を用いて、記憶装置１０２が記憶したデータから、ｉ番目の読出入力データと、（ｉ＋ａ）番目の読出入力データと、（ｉ＋ｂ）番目の読出誤り訂正データとを取得する。判定部１４０は、処理装置９１１を用いて、取得した３つの読出データ５０４のビッド毎の排他的論理和を算出して、ｉ番目の判定値とする。この判定値は、立っているビットが、その３つ組データにおいて整合性のないビットを表わす。訂正部１５０は、処理装置９１１を用いて、ｉ番目の読出入力正誤データと、算出したｉ番目の判定値とのビット毎の論理積をとることにより、ｉ番目の読出入力正誤データを更新する。また、訂正部１５０は、処理装置９１１を用いて、（ｉ−ａ）番目の読出入力正誤データと、算出したｉ番目の判定値とのビット毎の論理積をとることにより、（ｉ−ａ）番目の読出入力正誤データを更新する。
訂正工程Ｓ６２９において、ｉ番目の読出入力正誤データが０でない場合、訂正部１５０は、処理装置９１１を用いて、ｉ番目の読出入力データとｉ番目の読出入力正誤データとのビット毎の排他的論理和を算出して、訂正済データとし、記憶部１３０は、記憶装置１０２を用いて、訂正部１５０が算出した訂正済データを、ｉ番目の入力データ５０１として記憶する。また、訂正部１５０は、処理装置９１１を用いて、ｉ番目の読出し入力正誤データと（ｉ＋ａ）番目の読出入力正誤データとのビット毎の排他的論理和を算出し、算出したビット毎の排他的論理和のビット毎の否定と、判定部１４０が算出したｉ番目の判定値とのビット毎の論理積を算出して、読出誤り検出正誤データとする。算出した読出誤り検出正誤データが０でない場合、訂正部１５０は、処理装置９１１を用いて、（ｉ＋ｂ）番目の読出誤り検出データと、算出した読出誤り検出正誤データとのビット毎の排他的論理和を算出して、訂正済データとし、記憶部１３０は、記憶装置１０２を用いて、訂正部１５０が算出した訂正済データを、（ｉ＋ｂ）番目の誤り検出データ５０３として記憶する。
【００５３】
１つの３つ組データに属する２つ以上の読出データ５０４が間違っているという極めて稀な事態が発生した場合でも、３つ組データは、記憶装置１０２のなかで物理的に離れた領域に記憶されていたデータなので、同じビットが間違っていることはあり得ないと言ってよい。このため、３つ組データの整合性をビット毎に判定することにより、データ訂正の信頼性が更に向上する。
【００５４】
なお、判定部１４０による検査の間隔は、あらかじめ想定されるソフトエラーの発生頻度に基づいてあらかじめ定めておく構成であってもよいし、検出したエラーの頻度に基づいて、検査の間隔を調整する構成であってもよい。例えば、１回の検査でエラーを検出しなかった場合は、判定部１４０が、次の検査までの待機時間を少し長くし、逆に、１回の検査で１つ以上のエラーを検出した場合は、判定部１４０が、次の検査までの待機時間を少し短くすることにより、１回の検査で検出するエラーの数の平均値が１未満になるよう、検査の間隔を最適化する。
【００５５】
実施の形態４．
実施の形態４について、説明する。
なお、実施の形態１〜実施の形態３と共通する部分については、同一の符号を付し、説明を省略する。
この実施の形態における信号処理装置１００Ａの構成は、実施の形態３と同様なので、異なる点のみ説明する。
【００５６】
演算部１２０は、例えば２進数の加算など、可逆性があり、ビット毎に独立してはいない演算を用いる。演算部１２０がビット毎に独立していない演算を用いる場合でも、実施の形態３と同様に、３つ組データの整合性をビット毎に判定することができる。以下、演算部１２０が用いる演算が２進数の加算である場合を例として説明する。
【００５７】
演算部１２０は、処理装置９１１を用いて、ｉ番目の入力データ５０１と、（ｉ＋ａ）番目の入力データ５０１との和を算出する。記憶部１３０は、記憶装置１０２を用いて、演算部１２０が算出した和を、（ｉ＋ｂ）番目の誤り検出データ５０３として記憶する。なお、誤り検出データ５０３のビット数は、入力データ５０１のビット数より１ビット多くてもよいし、入力データ５０１のビット数と同じであってもよい。誤り検出データ５０３のビット数が入力データ５０１のビット数と同じ場合、最上位ビットで繰り上がりが発生するとこれを捨てることになるが、可逆性は満たされる。
【００５８】
判定部１４０は、処理装置９１１を用いて、ｉ番目の読出入力データと、（ｉ＋ａ）番目の読出入力データとの和から、（ｉ＋ｂ）番目の読出誤り検出データを差し引いた差を算出して、ｉ番目の判定値とする。判定部１４０は、算出した判定値が０である場合、この３つ組データに整合性があると判定する。
【００５９】
ここで、３つの読出データ５０４のうちの１つについて１ビットのビット反転が発生した場合について考える。
ｉ番目の入力データ５０１において「０」であったビットが、ｉ番目の読出入力データにおいて「１」になった場合、判定値は、２ｋ（ただし、ｋは、最下位ビットを０として、ビット反転したビットの番号。）になる。ｉ番目の入力データ５０１において「１」であってビットが、ｉ番目の読出入力データにおいて「０」になった場合、判定値は、−（２ｋ）になる。
（ｉ＋ａ）番目の読出入力データにビット反転が発生した場合も同様であり、「０」が「１」になった場合、判定値は２ｋになり、「１」が「０」になった場合、判定値は−（２ｋ）になる。
（ｉ＋ｂ）番目の読出誤り検出データにビット反転が発生した場合は、逆に、「０」が「１」になった場合、判定値は−（２ｋ）になり、「１」が「０」になった場合、判定値は２ｋになる。
【００６０】
判定部１４０は、算出した判定値が０でない場合、処理装置９１１を用いて、算出した判定値が２ｋまたは−（２ｋ）であるか否か（ｋは、０以上、入力データ５０１のビット数未満の整数。）を判定する。算出した判定値が２ｋまたは−（２ｋ）である場合、判定部１４０は、３つ組データのｋ番ビットに整合性がなく、それ以外のビットには整合性があると判定する。
なお、判定値が２ｋであるか、−（２ｋ）であるかによって、「０」が「１」になったのか、「１」が「０」になったのかを区別できるので、訂正部１５０がこの情報を利用する構成としてもよい。例えば、判定部１４０が算出したｉ番目の判定値が２ｋである場合、読出入力データのｋ番ビットが「０」から「１」になったか、読出誤り検出データのｋ番ビットが「１」から「０」になったかのいずれかである。例えば、ｉ番目の読出入力データのｋ番ビットが「０」、（ｉ＋ａ）番目の読出入力データのｋ番ビットが「１」、（ｉ＋ｂ）番目の読出誤り検出データのｋ番ビットが「１」であれば、ビット反転が発生したのは（ｉ＋ａ）番目の読出入力データのｋ番ビットであることがわかる。したがって、訂正部１５０は、（ｉ＋ａ）番目の読出入力データのｋ番ビットが間違っていると判定する。
【００６１】
稀ではあるが、３つの読出データ５０４のビットのうち２ビットにビット反転が発生した場合、判定値は２ｋ１＋２ｋ２（ただし、ｋ１，ｋ２は、ビット反転したビットの番号。）、２ｋ１−２ｋ２、−（２ｋ１）＋２ｋ２、−（２ｋ１）−２ｋ２のうちのいずれかになる。
【００６２】
判定部１４０は、算出した判定値が０でなく、２ｋでも−（２ｋ）でもない場合、処理装置９１１を用いて、算出した判定値が上記４つの値のうちのいずれかであるか否かを判定する。判定値が上記４つの値のうちのいずれかである場合、判定部１４０は、３つ組データのｋ１番ビットとｋ２番ビットとに整合性がなく、それ以外のビットには整合性があると判定する。
【００６３】
ビット反転が発生したビットが３ビット以上の場合も同様にして判定可能である。
【００６４】
このように、演算部１２０が用いる演算がビット毎に独立した演算でない場合であっても、３つ組データの整合性をビット毎に判定することができ、これにより、データ訂正の信頼性が向上する。
【００６５】
実施の形態５．
実施の形態５について、図１１〜図１２を用いて説明する。
なお、実施の形態１〜実施の形態４と共通する部分については、同一の符号を付し、説明を省略する。
この実施の形態における信号処理装置１００Ａの構成は、実施の形態３と同様なので、異なる点のみ説明する。なお、入力データ５０１の数Ｎは、偶数であり、Ｎ＝２ｎ（ｎは、２以上の整数。）であるものとする。
【００６６】
演算部１２０は、処理装置９１１を用いて、算出した２ｎ個の誤り検出データ５０３に基づいて、所定の演算により、ｎ個の二階検出データを算出する。演算部１２０が二階検出データの算出に用いる演算は、誤り検出データ５０３の算出に用いる演算と同様、可逆性を有する。演算部１２０が二階検出データの算出に用いる演算は、誤り検出データ５０３の算出に用いる演算と同じ演算であってもよいし、異なる演算であってもよい。なお、演算部１２０が誤り検出データ５０３や二階検出データの算出に用いる演算は、ビット毎に独立した演算であってもよいし、ビット毎に独立した演算でなくてもよい。
【００６７】
図１１は、この実施の形態における記憶装置１０２が記憶するデータの配置の一例を示す図である。
記憶装置１０２は、記憶領域を５番地ごとに分けた領域のそれぞれについて、最初の番地と３番目の番地に入力データ５０１を記憶し、２番目の番地と４番目の番地に誤り検出データ５０３を記憶し、最後の番地に二階検出データを記憶する。例えば、記憶装置１０２は、（２ｊ−１）番目（ｊは、１以上ｎ以下の整数。）の入力データ５０１を（５ｊ−４）番地に記憶し、２ｊ番目の入力データ５０１を（５ｊ−２）番地に記憶する。また、記憶装置１０２は、（２ｊ−１）番目（ｊは、１以上ｎ以下の整数。）の誤り検出データ５０３を（５ｊ−３）番地に記憶し、２ｊ番目の誤り検出データ５０３を（５ｊ−１）番地に記憶する。記憶装置１０２は、ｊ番目の二階検出データを５ｊ番地に記憶する。
【００６８】
演算部１２０は、処理装置９１１を用いて、例えば、２ｊ番目（ｊは、１以上ｎ以下の整数。）の誤り検出データ５０３と、（２ｊ＋２ｃ−１）番目（ただし、（２ｊ＋２ｃ−１）がＮより大きい場合は、（２ｊ＋２ｃ−１−Ｎ）番目。）の誤り検出データ５０３とに基づいて、（ｊ＋ｄ）番目（ただし、（ｊ＋ｄ）がｎより大きい場合は、（ｊ＋ｄ−ｎ）番目。）の二階検出データを算出する。なお、ｃは、１以上ｎ未満の所定の整数である。また、ｄは、１以上ｎ未満の所定の整数であり、（ｎ＋ｃ）を２で割った商である。なお、ｎ＋ｃが奇数の場合は、端数を切り捨てる。例えば、Ｎ＝１６（すなわち、ｎ＝８）、ｃ＝３の場合、ｄ＝５である。すなわち、演算部１２０は、２ｊ番目の誤り検出データ５０３と、（２ｊ＋５）番目の誤り検出データ５０３とに基づいて、（ｊ＋５）番目の二階検出データを算出する。
なお、演算部１２０が１つの二階検出データを算出するのに用いる２つの誤り検出データ５０３は、算出のもととなる入力データ５０１に共通するものがない。すなわち、演算部１２０は、２つの入力データ５０１から算出した誤り検出データ５０３と、その２つのいずれとも異なる２つの入力データ５０１から算出した誤り検出データ５０３とに基づいて、１つの二階検出データを算出する。１つの二階検出データのもととなる４つの入力データ５０１は、記憶装置１０２において、なるべく離れた領域に記憶されるものであることが望ましい。整数ｃの値は、この条件を満たすように設定する。整数ｃは、整数ｎの３分の１に近い値であることが望ましい。
【００６９】
判定部１４０は、処理装置９１１を用いて、２ｊ番目（ｊは、１以上ｎ以下の整数。）の読出誤り検出データと、（２ｊ＋２ｃ−１）番目の読出誤り検出データと、記憶装置１０２が（ｊ＋ｄ）番目の二階検出データを記憶した領域から読み出したデータ（以下「（ｊ＋ｄ）番目の読出二階検出データ」と呼ぶ。他も同じ。）との３つのデータ（以下「ｊ番目の二階３つ組データ」と呼ぶ。他も同じ。）の間の整合性を検証する。すなわち、判定部１４０は、演算部１２０が（ｊ＋ｄ）番目の二階検出データの算出に使用した演算により、２ｊ番目の読出誤り検出データと、（２ｊ＋２ｃ−１）番目の読出し誤り検出データとに基づいて算出されるデータと、（ｊ＋ｄ）番目の読出二階検出データとが一致するか否かを判定する。
【００７０】
すべての誤り検出データ５０３は、それぞれ、必ずどれか１つの二階検出データの算出に用いられる。したがって、すべての読出誤り検出データは、それぞれ、どれか１つの３つ組データと、どれか１つの二階３つ組データとに属する。
【００７１】
訂正部１５０は、処理装置９１１を用いて、判定部１４０の判定結果に基づいて、間違っている読出データ５０４を特定する。
【００７２】
ある３つ組データに整合性がないと判定部１４０が判定し、その３つ組データに属する２つの読出入力データが属する他の２つの３つ組データには整合性があると判定部１４０が判定した場合、訂正部１５０は、その３つ組データに属する読出誤り検出データが間違っていると判定する。訂正部１５０は、その３つ組データに属する２つの読出入力データに基づいて、演算部１２０と同じ演算により、誤り検出データ５０３を算出する。また、その読出誤り検出データが属する二階三つ組データについて、整合性の有無に関わらず、算出し直した誤り検出データ５０３に基づいて、演算部１２０と同じ演算により、二階検出データを算出する。記憶部１３０は、記憶装置１０２を用いて、訂正部１５０が算出した誤り検出データ５０３と二階検出データとを記憶する。
【００７３】
図１２は、この実施の形態における訂正部１５０による判定の一例を示す図である。
丸は、読出入力データを表わす。菱形は、読出誤り検出データを表わす。六角形は、読出二階検出データを表わす。破線は、３つ組データまたは二階３つ組データを表わす。網掛けは、整合性があると判定された３つ組データまたは二階３つ組データを表わす。なお、この例において、整数ａは偶数であり、ｉ＋ｂ＝２ｊであるものとする。
【００７４】
ある３つ組データに整合性がないと判定部１４０が判定し、その３つ組データに属する２つの読出入力データのいずれかが属する３つ組データにも整合性がないと判定部１４０が判定し、その２つの３つ組データにそれぞれ属する２つの読出誤り検出データが属する２つの二階３つ組データのうちの少なくともいずれかに整合性があると判定部１４０が判定した場合、訂正部１５０は、その２つの３つ組データに共通して属する読出入力データが間違っていると判定する。訂正部１５０は、整合性がある二階３つ組データに属する読出誤り検出データが属する３つ組データのうち、間違っていると判定した読出入力データ以外の２つの読出データ５０４に基づいて、演算部１２０が使った演算の逆演算により、入力データ５０１を算出する。訂正部１５０は、もう一方の３つ組データのうち、正しいと判定した読出入力データと、算出した入力データ５０１とに基づいて、演算部１２０と同じ演算により、誤り検出データ５０３を算出する。訂正部１５０は、正しいと判定した読出誤り検出データと、算出した誤り検出データ５０３とに基づいて、演算部１２０と同じ演算により、二階検出データを算出する。記憶部１３０は、記憶装置１０２を用いて、訂正部１５０が算出した入力データ５０１と、誤り検出データ５０３と、二階検出データとを記憶する。
例えば、ｉ番目及び（ｉ＋ａ）番目の３つ組データに整合性がなく、（ｉ＋ａ）番目の３つ組データに属する（２ｊ＋ａ）番目の読出誤り検出データが属する（ｊ＋ａ／２）番目の二階３つ組データには整合性がある場合、訂正部１５０は、（ｉ＋ａ）番目の３つ組データに属する（ｉ＋２ａ）番目の読出入力データ（（ｉ＋２ａ）番目の３つ組データの整合性により正しいと判定されている）と（２ｊ＋ａ）番目の読出誤り検出データ（（ｊ＋ａ／２）番目の二階３つ組データの整合性により正しいと判定されている）とに基づいて、（ｉ＋ａ）番目の入力データ５０１を算出する。これにより、（ｉ＋ａ）番目の３つ組データの不整合が解消される。次に、訂正部１５０は、ｉ番目の３つ組データに属するｉ番目の読出入力データと、算出した（ｉ＋ａ）番目の入力データ５０１とに基づいて、２ｊ番目の誤り検出データ５０３を算出する。これにより、ｉ番目の３つ組データの不整合が解消される。最後に、訂正部１５０は、２ｊ番目の読出誤り検出データが属するｊ番目の二階３つ組データに属する（２ｊ＋２ｃ−１）番目の読出誤り検出データと、算出した２ｊ番目の誤り検出データとに基づいて、（ｊ＋ｄ）番目の二階誤り検出データを算出する。これにより、ｊ番目の二階３つ組データに不整合があったとしても、解消される。
【００７５】
また、ある二階３つ組データに整合性がないと判定部１４０が判定し、その二階３つ組データに属する２つの読出誤り検出データがそれぞれ属する２つの３つ組データには整合性があると判定部１４０が判定した場合、訂正部１５０は、その二階３つ組データに属する読出二階検出データが間違っていると判定する。訂正部１５０は、その二階３つ組データに属する２つの読出誤り検出データに基づいて、演算部１２０と同じ演算により、二階３つ組データを算出する。記憶部１３０は、記憶装置１０２を用いて、訂正部１５０が算出した二階３つ組データを記憶する。
【００７６】
このようにして、読出誤り検出データの正しさを、３つ組データの整合性に基づいて判定するだけでなく、二階３つ組データの整合性に基づいても判定する。これにより、１つの３つ組データに属する２つ以上の読出データ５０４に異常が起きるという極めて稀な事象が発生した場合でも、間違っている読出データ５０４を特定し、訂正することができる。
【００７７】
以上各実施の形態で説明した構成は一例であり、他の構成であってもよい。例えば、異なる実施の形態で説明した構成を組み合わせた構成としてもよいし、本質的でない部分の構成を他の構成で置き換えた構成としてもよい。
【００７８】
以上説明したデータ記憶装置（信号処理装置１００；１００Ａ）は、データを記憶する記憶装置（１０２）と、入力部（１１０）と、演算部（１２０；演算装置１０１）と、記憶部（１２０；Ｒ／Ｗ制御装置１０３）と、判定部（１４０；データ生成装置１０４）と、訂正部（１５０；データ生成装置１０４）とを有する。
上記入力部は、複数の入力データ（５０１）を入力する。
上記演算部は、所定の演算により、上記入力部が入力した複数の入力データに基づいて、誤り検出データ（５０３）を算出する。
上記記憶部は、上記記憶装置を用いて、上記入力部が入力した複数の入力データと、上記演算部が算出した誤り検出データとを記憶する。
上記判定部は、上記演算部が上記誤り検出データの算出に用いた演算により上記記憶装置が記憶した複数の入力データから算出されるデータと、上記記憶装置が記憶した誤り検出データとが一致するか否かを判定する。
上記訂正部は、上記記憶装置が記憶した複数の入力データから算出されるデータと上記記憶装置が記憶した誤り検出データとが一致しないと上記判定部が判定した場合に、上記記憶装置が記憶した複数の入力データと上記記憶装置が記憶した誤り検出データとのうちから、誤っているデータを特定し、誤っていると特定したデータについて、正しいデータを算出する。
【００７９】
これにより、ソフトエラーの影響などにより、記憶装置が記憶したデータが変わってしまった場合に、そのことを検出して、入力部が入力した入力データや演算部が算出した誤り検出データを復元することができる。
【００８０】
上記演算部（１２０；演算装置１０１）は、所定の演算により、上記入力部（１１０）が入力した２つの入力データ（５０１）から１つの誤り検出データ（５０３）を算出する。
上記記憶部（１３０；Ｒ／Ｗ制御装置１０３）は、上記演算部が算出した誤り検出データと、上記演算部が上記誤り検出データの算出に用いた２つの入力データとを、上記記憶装置（１０２）の物理的に離れた領域を用いて記憶する。
【００８１】
これにより、記憶装置が記憶した入力データと記憶装置が記憶した誤り検出データとが同時にソフトエラーなどの影響を受ける可能性が極めて低くなるので、エラー検出及び訂正の信頼性が向上する。
【００８２】
上記演算部（１２０；演算装置１０１）は、所定の演算により、上記入力部（１１０）が入力した２つの入力データ（５０１）から１つの誤り検出データ（５０３）を算出する。
上記記憶部（１３０；Ｒ／Ｗ制御装置１０３）は、上記演算部が１つの誤り検出データの算出に用いた２つの入力データを、上記記憶装置（１０２）の物理的に離れた領域を用いて記憶する。
【００８３】
これにより、記憶装置が記憶した２つの入力データが同時にソフトエラーなどの影響を受ける可能性が極めて低くなるので、エラー検出及び訂正の信頼性が向上する。
【００８４】
上記入力部（１１０）は、３つ以上の入力データ（５０１）を入力する。
上記演算部（１２０；演算装置１０１）は、所定の演算により、上記入力部が入力した第一の入力データと上記入力部が入力した第二の入力データとから第一の誤り検出データ（５０３）を算出する。上記演算部は、所定の演算により、上記入力部が入力した上記第二の入力データと上記入力部が入力した第三の入力データとから第二の誤り検出データを算出する。
上記訂正部（１５０；データ生成装置１０４）は、上記記憶装置（１０２）が記憶した第一の入力データと上記記憶装置が記憶した第二の入力データとから算出されるデータと上記記憶装置が記憶した第一の誤り検出データとが一致しないと上記判定部が判定し、かつ、上記記憶装置が記憶した第二の入力データと上記記憶装置が記憶した第三の入力データとから算出されるデータと上記記憶装置が記憶した第二の誤り検出データとが一致しないと上記判定部（１４０；データ生成装置１０４）が判定した場合に、上記記憶装置が記憶した第二の入力データが誤っていると判定し、上記記憶装置が記憶した第一の入力データと上記記憶装置が記憶した第一の誤り検出データとに基づいて、上記演算部が上記第一の誤り検出データの算出に用いた演算の逆演算により、正しい第二の入力データを算出する。
【００８５】
これにより、ソフトエラーの影響などにより、記憶装置が記憶した第二の入力データが変わってしまった場合に、そのことを検出して、入力部が入力した第二の入力データを復元することができる。
【００８６】
上記入力部（１１０）は、４つ以上の入力データ（５０１）を入力する。
上記演算部（１２０；演算装置１０１）は、所定の演算により、上記入力部が入力した第一の入力データと上記入力部が入力した第二の入力データとから第一の誤り検出データを算出する。上記演算部は、所定の演算により、上記入力部が入力した上記第二の入力データと上記入力部が入力した第三の入力データとから第二の誤り検出データを算出する。上記演算部は、所定の演算により、上記入力部が入力した第三の入力データと第四の入力データとから第三の誤り検出データ（５０３）を算出する。  上記訂正部（１５０；データ生成装置１０４）は、上記記憶装置（１０２）が記憶した第一の入力データと上記記憶装置が記憶した第二の入力データとから算出されるデータと上記記憶装置が記憶した第一の誤り検出データとが一致すると上記判定部が判定し、かつ、上記記憶装置が記憶した第二の入力データと上記記憶装置が記憶した第三の入力データとから算出されるデータと上記記憶装置が記憶した第二の誤り検出データとが一致しないと上記判定部が判定し、かつ、上記記憶装置が記憶した第三の入力データと上記記憶装置が記憶した第四の入力データとから算出されるデータと上記記憶装置が記憶した第三の誤り検出データとが一致すると上記判定部（１４０；データ生成装置１０４）が判定した場合に、上記記憶装置が記憶した第二の誤り検出データが誤っていると判定し、上記記憶装置が記憶した第二の入力データと上記記憶装置が記憶した第三の入力データとに基づいて、上記演算部が上記第二の誤り検出データの算出に用いた演算により、正しい第二の誤り検出データを算出する。
【００８７】
これにより、ソフトエラーの影響などにより、記憶装置が記憶した第二の誤り検出データが変わってしまった場合に、そのことを検出して、演算部が算出した第二の誤り入力データを復元することができる。
【００８８】
上記データ記憶装置（信号処理装置１００；１００Ａ）は、更に、出力部（１６０）を有する。
上記出力部は、上記記憶装置（１０２）が記憶した入力データのうち、誤っていると上記訂正部（１５０；データ生成装置１０４）が判定した入力データについて、上記訂正部が算出した入力データを出力し、誤っていると上記訂正部が判定しなかった入力データについて、上記記憶装置が記憶した入力データを出力する。
【００８９】
これにより、ソフトエラーの影響などにより、記憶装置が記憶した入力データが変わってしまった場合でも、正しい入力データを出力することができる。
【００９０】
上記データ記憶装置（信号処理装置１００；１００Ａ）は、更に、出力部（１６０）を有する。
上記記憶部（１３０；Ｒ／Ｗ制御装置１０３）は、上記訂正部（１５０；データ生成装置１０４）が誤っていると判定したデータについて、上記記憶装置（１０２）を用いて、上記訂正部が算出した正しいデータを記憶する。
上記出力部は、上記記憶装置が記憶した入力データを出力する。
【００９１】
これにより、ソフトエラーの影響などにより、記憶装置が記憶したデータが変わってしまった場合でも、正しい入力データを出力することができる。
【００９２】
以上説明したデータ処理装置（赤外線撮像装置）は、
上記データ記憶装置（信号処理装置１００；１００Ａ）と、
上記データ記憶装置の出力部（１６０）が出力した入力データ（出力データ１０２）に基づいて、データ処理をする処理部（オフセット補正装置）とを有する。
【００９３】
これにより、信頼性の高いデータ処理をすることができる。
【００９４】
データ記憶装置（信号処理装置１００；１００Ａ）は、記憶装置（１０２）と、記憶装置にデータを記憶させたり記憶装置からデータを読み出したりする機能ブロックとを有する。このうち記憶装置は、物理的な装置である。これに対して、記憶装置以外の部分は、ロジック回路などのハードウェアにより構成した物理的な装置であってもよいし、コンピュータがプログラムを実行するなどしてソフトウェア的に構成したものであってもよい。また、データ記憶装置は、物理的に１つの装置でなくてもよく、以上説明した機能を複数の装置が分担して実現し、複数の装置が集まったシステム全体として、データ記憶装置として機能するものであってもよい。
【００９５】
また、赤外線撮像装置などのデータ処理装置において、データ記憶装置（信号処理装置１００；１００Ａ）と、それ以外の部分とは、物理的に異なる装置であってもよいし、物理的に同じ装置であってもよい。例えば、データ記憶装置の機能ブロックを実現するプログラムを実行するコンピュータが、オフセット測定装置やオフセット補正装置などの処理部の機能ブロックを実現するプログラムを並行して実行する構成であってもよい。
【００９６】
以上説明したデータ記憶装置は、特に、記憶装置が半導体メモリであり、宇宙線などの影響により発生するソフトエラー対策として有効である。ソフトエラーは、基本的にビット単位で発生し、物理的に離れた記憶領域で同時に発生する可能性が極めて低いからである。このため、データ記憶装置は、特に、宇宙空間や高地などソフトエラーの発生確率が高い場所で使用される場合に、好適である。
しかし、以上説明したデータ記憶装置は、ソフトエラー対策に限らず、それ以外のエラーに対しても、同様に有効である。
【符号の説明】
【００９７】
１００，１００Ａ  信号処理装置、１０１  演算装置、１０２  記憶装置、１０３  Ｒ／Ｗ制御装置、１０４  データ生成装置、１１０  入力部、１２０  演算部、１３０  記憶部、１４０  判定部、１５０  訂正部、１６０  出力部、５０１  入力データ、５０２  出力データ、５０３  誤り検出データ、５０４  読出データ、５０５  判定結果、５０６  訂正データ、５１０  アドレス、５２０  データ、９１１  処理装置、９１２  入力装置、９１３  出力装置。
【図１】
2012234487.tif 000003
【図２】
2012234487.tif 000004
【図３】
2012234487.tif 000005
【図４】
2012234487.tif 000006
【図５】
2012234487.tif 000007
【図６】
2012234487.tif 000008
【図７】
2012234487.tif 000009
【図８】
2012234487.tif 000010
【図９】
2012234487.tif 000011
【図１０】
2012234487.tif 000012
【図１１】
2012234487.tif 000013
【図１２】
2012234487.tif 000014