(57)【要約】【課題】ソフトエラーに基づく演算結果の誤りを確実に検出する。【解決手段】エラー検出機能付き演算回路は、グレイコード形式の第１の数値を保持するレジスタと、前記レジスタに保持された前記第１の数値から、該第１の数値に対する所定の数値演算の結果である第２の数値をグレイコード形式で求めて出力する数値演算手段と、前記レジスタに保持された前記第１の数値に対するパリティ値である第１のパリティ値を使用して、前記数値演算に対応する所定の論理演算を行うことにより、前記第２の値に対するパリティ値である第２のパリティ値を生成するパリティ演算手段と、前記パリティ演算手段により生成された前記第２のパリティ値を使用して、前記数値演算手段により出力された前記第２の数値に対するパリティチェックを行うパリティチェック手段と、を有する。【選択図】図２
2010205135.tif 000002
【特許請求の範囲】
【請求項１】
グレイコード形式の第１の数値を保持するレジスタと、
前記レジスタに保持された前記第１の数値から、該第１の数値に対する所定の数値演算の結果である第２の数値をグレイコード形式で求めて出力する数値演算手段と、
前記レジスタに保持された前記第１の数値に対するパリティ値である第１のパリティ値を使用して、前記数値演算に対応する所定の論理演算を行うことにより、前記第２の数値に対するパリティ値である第２のパリティ値を生成するパリティ演算手段と、
前記パリティ演算手段により生成された前記第２のパリティ値を使用して、前記数値演算手段により出力された前記第２の数値に対するパリティチェックを行うパリティチェック手段と、
を有するエラー検出機能付き演算回路。
【請求項２】
前記数値演算手段は、グレイコード形式の前記第１の数値をバイナリコード形式に変換し、前記数値演算として、変換した該第１の数値を使用する二進数演算を実行し、該二進数演算の結果をグレイコード形式に変換し、変換した該結果を前記第２の数値として出力する、請求項１に記載のエラー検出機能付き演算回路。
【請求項３】
前記第１のパリティ値を使用して、前記レジスタに保持された前記第１の数値に対するパリティチェックを行う入力値パリティチェック手段を更に有する、請求項１又は２に記載のエラー検出機能付き演算回路。
【請求項４】
前記レジスタに保持された前記第１の数値に基づいて前記第１のパリティ値を生成するパリティ生成手段を更に有する、請求項１又は２に記載のエラー検出機能付き演算回路。
【請求項５】
前記数値演算手段により出力された前記第２の数値を保持する出力値用レジスタと、
前記パリティ演算手段により生成された前記第２のパリティ値を保持する第２パリティ用レジスタと、
を更に有し、
前記パリティチェック手段は、前記第２パリティ用レジスタに保持された前記第２のパリティ値を使用して、前記出力値用レジスタに保持された前記第２の数値に対するパリティチェックを行う、請求項１乃至４のいずれか１項に記載のエラー検出機能付き演算回路。
【請求項６】
前記第１の数値は、複数あり、
複数の前記第１の数値を保持する複数の前記レジスタを有し、
前記数値演算は、複数の前記第１の数値の乗算であり、
前記論理演算は、複数の前記第１の数値に対応する複数の第１のパリティ値の論理積を求める演算である、請求項１乃至５のいずれか１項に記載のエラー検出機能付き演算回路。
【請求項７】
前記第１の数値は、複数あり、
複数の第１の数値を保持する複数の前記レジスタを有し、
前記数値演算は、複数の前記第１の数値の加算であり、
前記論理演算は、複数の前記第１の数値に対応する複数の前記第１のパリティ値の排他的論理和を求める演算である、請求項１乃至５のいずれか１項に記載のエラー検出機能付き演算回路。
【請求項８】
前記第１の数値は、複数あり、
複数の第１の数値を保持する複数の前記レジスタを有し、
前記数値演算は、複数の前記第１の数値のうち、いずれかの値から、それ以外の値を減算する演算であり、
前記論理演算は、複数の前記第１の数値に対応する複数の前記第１のパリティ値の排他的論理和を求める演算である、請求項１乃至５のいずれか１項に記載のエラー検出機能付き演算回路。
【請求項９】
前記数値演算は、前記第１の数値に対するインクリメント又はデクリメントであり、
前記論理演算は、前記第１のパリティ値を反転する演算である、請求項１乃至５のいずれか1項に記載のエラー検出機能付き演算回路。
【請求項１０】
前記数値演算手段は、
それぞれの前記第１の数値の下位桁部分を加算した結果を前記第２の数値の下位桁部分として出力するとともに、該加算における桁上げの有無を示す桁上げ信号を出力する下位側加算器と、
それぞれの前記第１の数値の上位桁部分と前記桁上げ信号とを加算した結果を前記第２の数値の上位桁部分として出力する上位側加算器と、
を有し、
前記パリティ演算手段は、
それぞれの前記第１の数値の下位桁部分に対するパリティ値と、それぞれの該第１の数値の上位桁部分に対するパリティ値と、前記桁上げ信号との排他的論理和を前記第２のパリティ値として出力する、請求項７に記載のエラー検出機能付き演算回路。
【請求項１１】
前記数値演算手段は、
それぞれの前記第１の数値の下位桁部分を加算した結果を前記第２の数値の下位桁部分として出力するとともに、該加算における桁上げの有無を示す桁上げ信号を出力する下位側加算器と、
それぞれの前記第１の数値の上位桁部分と前記桁上げ信号とを加算した結果を前記第２のグレイコードの上位桁部分として出力する上位側加算器と、
を有し、
前記パリティ演算手段は、それぞれの前記第１の数値の下位桁部分に対するパリティの排他的論理和を下位桁に対応する第２のパリティ値として出力し、それぞれの前記第１のグレイコードの上位桁部分に対するパリティ値と前記桁上げ信号との排他的論理和を上位桁に対応する第２のパリティ値として出力し、
前記パリティチェック手段は、前記パリティ演算手段により出力された前記下位桁に対応する第２のパリティ値を使用して、前記第２の数値の下位桁部分に対するパリティチェックを行うとともに、前記上位桁に対応する第２のパリティ値を使用して、前記第２の数値の上位桁部分に対するパリティチェックを行う、請求項７に記載のエラー検出機能付き演算回路。
【請求項１２】
前記数値演算手段は、
それぞれの前記第１の数値の下位桁部分のうち、いずれか１つから、それ以外を減算した結果を前記第２の数値の下位桁部分として出力するとともに、該減算における桁下げの有無を示す桁下げ信号を出力する下位側減算器と、
それぞれの前記第１の数値の上位桁部分のうち、いずれか１つから、それ以外及び前記桁下げ信号を減算した結果を前記第２のグレイコードの上位桁部分として出力する上位側減算器と、
を有し、
前記パリティ演算手段は、
それぞれの前記第１の数値の下位桁部分に対するパリティ値と、それぞれの該第１の数値の上位桁部分に対するパリティ値と、前記桁下げ信号との排他的論理和を前記第２のパリティ値として出力する、請求項８に記載のエラー検出機能付き演算回路。
【請求項１３】
前記数値演算手段は、
それぞれの前記第１の数値の下位桁部分のうち、いずれか１つから、それ以外を減算した結果を前記第２の数値の下位桁部分として出力するとともに、該減算における桁下げの有無を示す桁下げ信号を出力する下位側減算器と、
それぞれの前記第１の数値の上位桁部分のうち、いずれか１つから、それ以外及び前記桁下げ信号を減算した結果を前記第２の数値の上位桁部分として出力する上位側減算器と、
を有し、
前記パリティ演算手段は、それぞれの前記第１の数値の下位桁部分に対するパリティの排他的論理和を下位桁に対応する第２のパリティ値として出力し、それぞれの前記第１のグレイコードの上位桁部分に対するパリティ値と前記桁下げ信号との排他的論理和を上位桁に対応する第２のパリティ値として出力し、
前記パリティチェック手段は、前記パリティ演算手段により出力された前記下位桁に対応する第２のパリティ値を使用して、前記第２の数値の下位桁部分に対するパリティチェックを行うとともに、前記上位桁に対応する第２のパリティ値を使用して、前記第２の数値の上位桁部分に対するパリティチェックを行う、請求項８に記載のエラー検出機能付き演算回路。
【請求項１４】
レジスタがグレイコード形式の第１の数値を保持し、
数値演算手段が、前記レジスタに保持された前記第１の数値から、該第１の数値に対する所定の数値演算の結果である第２の数値をグレイコード形式で求めて出力し、
パリティ演算手段が、前記レジスタに保持された前記第１の数値に対するパリティ値である第１のパリティ値を使用して、前記数値演算に対応する所定の論理演算を行うことにより、前記第２の値に対するパリティ値である第２のパリティ値を生成し、
パリティチェック手段が、前記パリティ演算手段により生成された前記第２のパリティ値を使用して、前記数値演算手段により出力された前記第２の数値に対するパリティチェックを行う、演算回路のエラー検出方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算回路において発生するエラーを検出する技術に関する。
【背景技術】
【０００２】
集積回路の微細化に伴い、メモリセルにおけるソフトエラーのみならず、ロジック回路内のフリップフロップやラッチ等におけるソフトエラーも問題になりつつある。それらのソフトエラーについての対策として、バスのようにデータを転送する部分に関してはパリティビットやエラー訂正符号を付加することによって、1ビットまた２ビットのエラーを検出することが行なわれていた。データ転送だけであれば，その前後でパリティビットやエラー訂正の冗長ビットもそのまま転送するだけでよいので、このようなエラー検出を行う回路を簡単に実現することができる。
【０００３】
ここで、動作周波数を高くするため、演算回路系においても複数のパイプラインを実現するためのパイプラインレジスタが設けられている。このパイプラインレジスタを構成する回路としてフリップフロップが多用されている。このパイプラインレジスタにおいても、パリティビットを設けるなどの方法で、演算回路はソフトエラーを検出できる。
【０００４】
図１は、パイプラインレジスタを設けた、一般的な演算回路の構成を示すブロック図である。この演算回路は、レジスタＡの値とレジスタＢの値とを演算器で演算し、その結果をレジスタＳに保持する。そして、レジスタＳに保持された演算結果から、パリティ生成回路により、パリティビットが生成され、このビットがレジスタＳＰに保持される。これらのレジスタＳ、およびレジスタＳＰの組は、パイプラインレジスタを構成する。
【０００５】
次いで、パリティチェック回路が、レジスタＳＰの値を使用して、レジスタＳの値に対するパリティチェックを行い、レジスタＳの値に対するエラーを検出する。
【０００６】
一方、上述した当該パイプラインステージの前段ステージにおいて、パリティ生成回路（図１には記載なし）がレジスタＡやレジスタＢに対するパリティビットを生成したり、バス等でレジスタＡやレジスタＢのパリティビットが同時に転送されたりする場合もある。この場合、レジスタＡの値に対応するパリティビットはレジスタＡＰに保持され、レジスタＢの値に対応するパリティビットはレジスタＢＰに保持される。そして、これらのレジスタＡＰ、ＢＰに保持されている値を使用して、それぞれレジスタＡ、Ｂの値に対するパリティチェックが行われる。
【０００７】
特許文献１に記載の乗算回路は、部分積を保持するレジスタと、元の乗数に基づくパリティビットを生成する回路とを有し、生成したパリティビットを使用して、レジスタのソフトエラーを検出している。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開平６−２８２０３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかし、図１や特許文献１に記載の演算回路では、演算前や演算中に生じたエラーが検出されない場合があった。
【００１０】
例えば、図１に記載の演算回路において、演算回路の演算前にレジスタＡにソフトエラーが生じた場合について考える。この場合、レジスタＡＰには、エラー前のレジスタＡの値のパリティビットが保持されているので、レジスタＡの値に対するパリティチェックでは、エラーが検出される。ところが、演算器の出力値を保持するレジスタＳに対するパリティチェックでは、演算器の出力値から生成し、レジスタＳＰに格納したパリティビットを使用するので、レジスタＳの値が誤った値となっているにも関わらず、エラーが検出されない。
【００１１】
また、図１に記載の回路の各パリティチェックでは、レジスタに生じたソフトエラーは検出されるが、演算中に演算器に生じたソフトエラーは検出されない。
【００１２】
特許文献１に記載の乗算回路の部分積を保持するレジスタにおいて、演算前にソフトエラーが生じた場合、そのエラー後の部分積を加算して最後の積を算出する回路では、パリティエラーは検出されない。また、この回路において、演算中に生じたソフトエラーがパリティチェックで検出されないことがあるという問題があった。
【００１３】
本発明は、演算前や演算中に生じたエラーを確実に検出する技術を提供することを目的とする。
【課題を解決するための手段】
【００１４】
上記目的を達成するために、本発明のエラー検出機能付き演算回路は、グレイコード形式の第１の数値を保持するレジスタと、前記レジスタに保持された前記第１の数値から、該第１の数値に対する所定の数値演算の結果である第２の数値をグレイコード形式で求めて出力する数値演算手段と、前記レジスタに保持された前記第１の数値に対するパリティ値である第１のパリティ値を使用して、前記数値演算に対応する所定の論理演算を行うことにより、前記第２の値に対するパリティである第２のパリティを生成するパリティ演算手段と、前記パリティ演算手段により生成された前記第２のパリティ値を使用して、前記数値演算手段により出力された前記第２の数値に対するパリティチェックを行うパリティチェック手段と、を有する。
【００１５】
本発明のエラー検出方法は、レジスタがグレイコード形式の第１の数値を保持し、数値演算手段が、前記レジスタに保持された前記第１の数値から、該第１の数値に対する所定の数値演算の結果である第２の数値をグレイコード形式で求めて出力し、パリティ演算手段が、前記レジスタに保持された前記第１の数値に対するパリティ値である第１のパリティ値を使用して、前記数値演算に対応する所定の論理演算を行うことにより、前記第２の値に対するパリティ値である第２のパリティ値を生成し、パリティチェック手段が、前記パリティ演算手段により生成された前記第２のパリティ値を使用して、前記数値演算手段により出力された前記第２の数値に対するパリティチェックを行う、エラー検出方法である。
【発明の効果】
【００１６】
本発明によれば、エラー検出機能付き演算回路は、レジスタに保持したグレイコード形式の第１の数値を使用して数値演算して第２の数値を出力し、第１の数値に対する第１のパリティを使用して論理演算を行うことで、第２の数値に対する第２のパリティを生成して、第２の数値に対するパリティチェックを行う。前記数値演算と前記論理演算は独立して並列に行われ、相互にエラーの影響を受けないため、演算前や演算中にソフトエラーが生じ、演算結果にエラーがある場合であっても、第２の数値に対するパリティチェックで、そのエラーを検出できる。
【図面の簡単な説明】
【００１７】
【図１】一般的な演算回路の構成を示すブロック図である。
【図２】本発明の第１の実施形態の演算回路の構成を示すブロック図である。
【図３】バイナリコードとグレイコードとの特性を説明するための表である。
【図４】本発明の第１の実施形態の演算回路における演算器の組み合わせをまとめた表である。
【図５】本発明の第１の実施形態の演算器の構成を示すブロック図である。
【図６】本発明の第１の実施形態の二進変換器の構成を示す回路図である。
【図７】本発明の第１の実施形態のグレイコード変換器の構成を示す回路図である。
【図８】本発明の第１の実施形態の演算回路の動作結果を示す図である。
【図９】本発明の第１の実施形態の演算回路の動作結果を示す図である。
【図１０】一般的な演算回路の動作結果を示す図である。
【図１１】本発明の第１の実施形態の演算回路の動作結果を示す図である。
【図１２】一般的な演算回路の動作結果を示す図である。
【図１３】本発明の変形例の演算回路の構成を示すブロック図である。
【図１４】本発明の第２の実施形態の演算回路の構成を示すブロック図である。
【図１５】本発明の第３の実施形態の演算回路の構成を示すブロック図である。
【図１６】本発明の第３の実施形態の演算器の構成を示すブロック図である。
【図１７】本発明の第３の実施形態の演算器の構成を示すブロック図である。
【図１８】本発明の第４の実施形態の演算回路の構成を示すブロック図である。
【図１９】本発明の第５の実施形態の演算回路の構成を示すブロック図である。
【発明を実施するための形態】
【００１８】
（第１の実施形態）
本発明を実施するための第１の実施形態について図面を参照して詳細に説明する。図２は、本実施形態の演算回路１の構成を示すブロック図である。演算回路１は、レジスタ等に生じたソフトエラーや、演算結果のエラーを検出する機能を有する演算回路である。同図を参照すると、演算回路１は、レジスタ１０、１１、１２、および１３と、パリティチェック回路１４および１５と、演算器２０と、パリティ演算回路２１と、レジスタ３０、および３１と、パリティチェック回路４０とを有する。
【００１９】
レジスタ１０、１２には、グレイコード形式の数値Ａ、Ｂ（第１の数値）がそれぞれ入力される。レジスタ１０、１２は入力された数値Ａ、Ｂを保持する。
【００２０】
レジスタ１１には、数値Ａのパリティチェックに使用するパリティビット（Ｐａ）が入力され、レジスタ１３には、数値Ｂのパリティチェックに使用するパリティビット（Ｐｂ）が入力される。レジスタ１１、１３は、入力されたビットＰａ、Ｐｂ（第１のパリティ値）を保持する。
【００２１】
これらのレジスタ１０、１１の組と、レジスタ１２、１３の組とは、例えば、前段のパイプラインステージを構成するのに使用される。
【００２２】
パリティチェック回路１４、１５は、それぞれ、レジスタ１１、１３から出力されたパリティビットＰａ、Ｐｂを使用して、レジスタ１０、１２から出力された数値Ａ、Ｂに対するパリティチェックを行い、その結果を出力する。例えば、パリティチェック回路１４、１５は、パリティエラーを検出した場合「１」、検出しなかった場合「０」の値のエラーフラグを出力する。
【００２３】
演算器２０は、レジスタ１０、１２に保持された数値Ａ、Ｂに対し、加算、減算、乗算などの所定の数値演算を実行する。演算器２０は、演算結果Ｓ（第２の数値）をグレイコード形式でレジスタ３０へ出力する。
【００２４】
パリティ演算回路２１は、レジスタ１１、１３に保持されたパリティビットＰａ、Ｐｂを使用して、数値演算に対応する所定の論理演算を行う。そしてパリティ演算回路２１は、その論理演算の結果を、演算結果Ｓに対するパリティチェックに使用するためのパリティビット（第２のパリティ値）としてレジスタ３１に出力する。
【００２５】
パリティ演算回路２１における論理演算は、演算器２０の入力値に対するパリティ値から、演算器２０の出力値に対するパリティ値を生成できる演算とする。例えば、演算器２０が加算器または減算器である場合、パリティ演算回路２１は、パリティビットＰａ、Ｐｂの排他的論理和をレジスタ３１へ出力する。また、演算器２０が乗算器である場合、パリティ演算回路２１は、パリティビットＰａ、Ｐｂの論理積をレジスタ３１へ出力する。これらの排他的論理和、論理積が、演算結果Ｓに対するパリティとなる理由については、後述する。
【００２６】
レジスタ３０には、演算器２０による演算の結果（Ｓ）が入力される。レジスタ３０は、この演算結果Ｓを保持する。
【００２７】
レジスタ３１には、パリティ演算回路２１により生成されたパリティビットが入力される。レジスタ３１は、このパリティビットを保持する。
【００２８】
レジスタ３０、３１の組は、例えば、後段のパイプラインレジスタを構成するために使用される。
【００２９】
パリティチェック回路４０は、レジスタ３１から出力されたパリティビットを使用して、レジスタ３０から出力された演算結果Ｓに対するパリティチェックを行い、その結果を出力する。
【００３０】
次いで、図３および図４を参照して、演算器２０として使用する演算回路と、パリティ演算回路２１として使用する演算回路との組み合わせについて説明する。図３は、グレイコードの特性と、バイナリコードの特性とを比較した表である。
【００３１】
図３を参照すると、グレイコードは、値が１つ増減するたびに、ハミング距離が１増減するという性質をもつ。いいかえれば、値が１つ異なる場合には、コードのいずれか１ビットのみが異なる状態であることが保証されている。このため、偶数に対応するグレイコードのパリティビットは、常に「０」となり、奇数に対応するグレイコードのパリティビットは、常に「１」となる。これに対し、バイナリコードでは、偶数に対応するコードであっても、パリティビットの値が「１」である場合があり、奇数に対応するコードであっても、パリティビットの値が「０」である場合がある。
【００３２】
ここで、奇数同士を乗算した結果は奇数である。偶数同士を乗算した結果、または奇数と偶数とを乗算した結果は偶数である。そして、上述したように、偶数に対応するグレイコードのパリティビットは、常に「０」であり、奇数に対応するグレイコードのパリティビットは、常に「１」である。
【００３３】
従って、グレイコード同士の乗算において、乗数のパリティビットと被乗数のパリティビットとの論理積は、乗算結果のグレイコードのパリティビットと等しくなる。
【００３４】
一方、奇数同士を加算または減算した結果、あるいは偶数同士を加算または減算した結果は、偶数である。奇数と偶数とを加算または減算した結果は、奇数である。
【００３５】
従って、グレイコード形式の数値同士の加算または減算において、加数（減数）のパリティビットと被加数（被減数）のパリティビットとの排他的論理和は、加算（減算）結果のグレイコードのパリティビットと等しくなる。
【００３６】
図４は、演算器２０と、パリティ演算回路２１との組み合わせをまとめた表である。前述したように、グレイコード形式の数値同士の乗算において、乗数、被乗数のパリティビットとの論理積が、乗算結果のパリティビットと等しくなるので、演算器２０を乗算器とする場合、パリティ演算回路２１としてＡＮＤ演算器が使用される。
【００３７】
また、グレイコード形式の数値同士の加算または減算において、加数（減数）、被加数（被減数）のパリティビットの排他的論理和が、乗算結果のパリティビットと等しくなるので、演算器２０を加算器または減算器とする場合、パリティ演算回路２１としてＸＯＲ演算器が使用される。
【００３８】
図５は、演算器２０の構成を示すブロック図である。同図を参照すると、演算器２０は、二進変換器２０１および２０３と、二進演算器２０５と、グレイコード変換器２０７とを有する。
【００３９】
二進変換器２０１、２０３は、それぞれレジスタ１０、１２から出力されたグレイコード形式の数値Ａ、Ｂをバイナリコード形式に変換して二進演算器２０５へ出力する。
【００４０】
二進演算器２０５は、二進変換器２０１、２０３から出力されたバイナリコード形式の数値Ａ、Ｂに対して所定の二進数演算を行い、バイナリコード形式の演算結果をグレイコード変換器２０７へ出力する。
【００４１】
グレイコード変換器２０７は、二進演算器２０５からの演算結果（バイナリコード）をグレイコード形式に変換してレジスタ３０へ出力する。
【００４２】
図６は、二進変換器２０１の構成を示す回路図である。二進変換器２０１は、４ビットのグレイコードを、４ビットのバイナリコードに変換する回路である。同図を参照すると、二進変換器２０１は、ＮＯＴ演算器２０１１と、ＸＯＲ演算器２０１２、２０１３、および２０１４とを有する。
【００４３】
ＮＯＴ演算器２０１１は、グレイコードの４桁目のビット（Ｉｇ３）を反転したビットを、バイナリコードの４桁目のビット（Ｏｂ３）として出力する。
【００４４】
ＸＯＲ演算器２０１２は、グレイコードの３、４桁目のビット（Ｉｇ２、Ｉｇ３）の排他的論理和をバイナリコードの３桁目のビット（Ｏｂ２）として出力する。
【００４５】
ＸＯＲ演算器２０１３は、グレイコードの２、３、４桁目のビット（Ｉｇ１、Ｉｇ２、Ｉｇ３）の排他的論理和をバイナリコードの２桁目のビット（Ｏｂ１）として出力する。
【００４６】
ＸＯＲ演算器２０１４は、グレイコードの１、２、３、４桁目のビット（Ｉｇ０、Ｉｇ１、Ｉｇ２、Ｉｇ３）の排他的論理和をバイナリコードの１桁目のビット（Ｏｂ０）として出力する。
【００４７】
二進変換器２０３の構成も、二進変換器２０１の構成と同様である。
【００４８】
図７は、グレイコード変換器２０７の構成を示す回路図である。グレイコード変換器２０７は、４ビットのバイナリコードを、４ビットのグレイコードに変換する回路である。同図を参照すると、グレイコード変換器２０７は、ＮＯＴ演算器２０７１と、ＸＯＲ演算器２０７２、２０７３、および２０７４とを有する。
【００４９】
ＮＯＴ演算器２０７１は、バイナリコードの４桁目のビット（Ｉｂ３）を反転したビットを、グレイコードの４桁目のビット（Ｏｇ３）として出力する。
【００５０】
ＸＯＲ演算器２０７２は、バイナリコードの３、４桁目のビット（Ｉｂ２、Ｉｂ３）の排他的論理和をグレイコードの３桁目のビット（Ｏｇ２）として出力する。
【００５１】
ＸＯＲ演算器２０７３は、バイナリコードの２、３桁目のビット（Ｉｂ１、Ｉｂ２）の排他的論理和をグレイコードの２桁目のビット（Ｏｇ１）として出力する。
【００５２】
ＸＯＲ演算器２０７４は、バイナリコードの１、２桁目のビット（Ｉｂ０、Ｉｂ１）の排他的論理和をグレイコードの１桁目のビット（Ｏｂ０）として出力する。
【００５３】
図８〜図１２を参照して、演算回路１の動作結果について説明する。図８は、演算回路の各レジスタおよび演算器２０にソフトエラーが生じないときの動作結果の一例を示す図である。演算器２０が加算回路であり、レジスタ１０、１２にグレイコード表記で「００１１」（１６進表記で「２」）の値が保持された場合について考える。
【００５４】
この場合、レジスタ１０、１２に保持された値は偶数であるから、レジスタ１１、１３に保持されるパリティビットＰa、Ｐｂの値は「０」である。パリティ演算回路２１は、これらのパリティビットの排他的論理和「０」をレジスタ３０の値に対するパリティビットとしてレジスタ３１に出力する。
【００５５】
パリティチェック回路１４、１５は、レジスタ１０、１２の値について、レジスタ１１、１３に保持されたパリティビット（「０」）を使用してパリティチェックを行う。
【００５６】
一方、演算器２０は、グレイコード表記で「００１１」（１６進表記で「２」）の値を加算し、グレイコード表記で「０１１０」（１６進表記で「４」）の加算結果をレジスタ３０に出力する。
【００５７】
パリティチェック回路４０は、この値について、レジスタ３１に保持されたパリティビット（「０」）を使用してパリティチェックを行う。
【００５８】
ここで、図９に示すように、レジスタ１０〜１４に数値およびパリティビットが格納されてから、演算器２０が加算を行う前に、レジスタ１０の２桁目のビットにソフトエラーが生じた場合について考える。同図において、網掛けの部分は、ソフトエラーが生じたビットである。
【００５９】
この場合、ソフトエラー後のレジスタ１０の値は「０００１」（１６進表記で「１」）となるが、レジスタ１１には、エラー前の値に基づくパリティビット「０」が格納されるので、パリティチェック回路１４は、ビットエラーを検出する。
【００６０】
また、演算器２０は、エラー後の値に基づく値「００１０」（１６進表記で「３」）を出力する一方、パリティ演算回路２１は、エラー前のパリティビットの排他的論理和「０」を出力する。
【００６１】
演算結果「００１０」に対し、そのパリティビットは「０」であるため、パリティチェック回路４０は、演算結果の誤りを検出する。
【００６２】
これに対して、図１に示したように演算結果の値からパリティビットを生成する回路において、図９と同様のソフトエラーが生じた場合の動作結果を図１０に示す。同図を参照すると、この回路においても、演算回路１と同様に、レジスタＡに対するエラーが検出される。
【００６３】
演算器は二進演算による加算を実行し、結果の「０１００」をレジスタＳに格納する。また、この演算結果からパリティビットが生成され、レジスタＳＰには「１」が格納されるので、演算結果に誤りがあるにもかかわらず、レジスタＳＰの値を使用したパリティチェックにおいて、エラーが検出されない。
【００６４】
次に、図１１に示すように、演算器２０での加算の途中で、図５における二進演算器２０５（図１１には記載なし）において、ソフトエラーが生じ、演算結果が誤った値「０１００」となった場合について考える。
【００６５】
この場合、パリティ演算回路２１は、エラー前のパリティビットの排他的論理和「０」を出力する。
【００６６】
この結果、演算結果「０１００」に対し、そのパリティビットは「０」であるため、パリティチェック回路４０は、ビットエラーを検出する。
【００６７】
演算前に、二進変換器２０１、２０３において演算前にソフトエラーが生じた場合も同様に、エラーが検出される。
【００６８】
演算後に、グレイコード変換器２０７やレジスタ３０において、ソフトエラーが生じた場合についても同様である。
【００６９】
これに対して、図１に示したように演算結果の値からパリティビットを生成する回路において、図１１と同様のソフトエラーが生じた場合の動作結果を図１２に示す。同図に示すように、この回路では、レジスタＡ、Ｂ、Ｓの値に基づいたパリティビットが生成、保持されるので、演算器内部でソフトエラーが生じても、レジスタＡ、Ｂ、Ｓにソフトエラーが生じない限り、そのエラーを検出できない。
【００７０】
このように、演算回路１においては、数値演算を行う回路（２０）と、その演算結果のパリティ生成のための論理演算を行う回路（２１）とが独立している。このため、演算器２０の演算前、または演算の最中に、レジスタ（１０、１２）、または演算器２０に生じたエラーが、演算結果に対するパリティビットの値に影響を与えず、演算回路１は、ソフトエラーや、ソフトエラーに基づく演算結果のエラーを検出できる。演算回路１全体としては、エラー検出率が向上する。
【００７１】
なお、本実施形態ではパリティチェック回路１４、１５がレジスタ１０、１２のパリティチェックを実行する構成としているが、図１３に示すように、パリティチェック回路１４、１５を設けない構成とすることもできる。
【００７２】
本実施形態では、演算器２０において、グレイコードとバイナリコードとを相互に変換してから数値演算を行うこととしているが、演算器２０の入出力値がともにグレイコード形式であればよく、演算器２０内部でのコード変換は必ずしも必要ではない。
【００７３】
本実施形態では、演算対象の数値Ａ、Ｂを４ビットの値としているが、これらの数値のビット数は４ビットに限られないのは勿論である。
【００７４】
本実施形態では、演算器２０が２つの数値Ａ、Ｂに対して数値演算する構成としているが、３つ以上の数値に対し、数値演算を行ってもよいのは勿論である。
【００７５】
本実施形態では、演算器２０は、１種類の数値演算のみを行う構成としているが、演算器２０は、加算、減算、乗算等の数値演算を２種類以上、行うこともできる。その場合、パリティ演算回路２１は、ＸＯＲ演算器、ＡＮＤ演算器等の演算器を演算内容に応じて組み合わせて使用し、演算結果に対するパリティビット（第２のパリティ値）を生成する。
【００７６】
演算器２０は、１つの数値に対する数値演算を行うこともできる。数値を１つとする演算回路の詳細については、後述する。
【００７７】
演算器２０は、加算、減算、乗算のいずれかの演算を行う構成としているが、グレイコードの特性を利用して、演算器２０の入力値に対するパリティから、出力値に対するパリティを生成できるのであれば、これら以外の演算を行う構成としてもよい。
【００７８】
以上説明したように、本実施形態によれば、演算回路１は、レジスタ１０、１２に保持したグレイコード形式の数値Ａ、Ｂ（第１の数値）を使用して数値演算して演算結果Ｓ（第２の数値）を出力し、第１の数値に対する第１のパリティ値（Ｐａ、Ｐｂ）を使用して論理演算を行うことで、第２の数値に対する第２のパリティ値を生成して、第２の数値に対するパリティチェックを行う。このため、演算前や演算中にソフトエラーが生じ、演算結果にエラーがある場合であっても、第２の数値に対するパリティチェックで、そのエラーを検出できる。
【００７９】
また、演算器２０は、グレイコードをバイナリコードに変換してから数値演算を行うので、グレイコード演算器よりも一般的な二進演算器（２０５）を利用することができる。
【００８０】
パリティチェック回路４０は、レジスタ３０のほか、レジスタ１０、１１、演算器２０のエラーを検出するので、図１３に示したようにパリティチェック回路４０からのエラー検出信号のみでは、演算前、演算中のいずれにおいてエラーが生じたのかが特定できない。しかし、図２に示すように、パリティチェック回路４０のほか、レジスタ１０、１２の値に対するパリティチェックを行うパリティチェック回路１４、１５を別途設けているので、これらのエラー検出信号を利用することで、エラーが生じたのが演算前なのか、演算中なのかを特定することができる。
【００８１】
演算回路１は、演算結果をレジスタ３０に保持し、演算結果に対するパリティビットをレジスタ３１に保持するので、演算器２０、パリティ演算回路２１の出力タイミングが異なる場合であっても、レジスタ３０、３１の保持値の更新タイミングを調整することで、パリティチェック回路４０は、正確にパリティチェックを行うことができる。
【００８２】
（第２の実施形態）
図１４を参照して、本発明の第２の実施形態について説明する。同図は、本実施形態の演算回路１ａの構成を示すブロック図である。同図を参照すると、演算回路１ａは、レジスタ１１、１３と、パリティチェック回路１４、１５との代わりにパリティ生成回路１６、１７を有する以外は、第１の実施形態の演算回路と同様である。
【００８３】
パリティ生成回路１６、１７は、それぞれ、レジスタ１０、１２に格納されたグレイコードに基づいてパリティビットＰａ、Ｐｂを生成してパリティ演算回路２１へ出力する。
【００８４】
演算回路１aは、パリティ演算回路２１の出力値を使用することにより、演算前に二進変換器２０１、２０３に生じたソフトエラーに基づくエラーを検出できる。また、演算回路１aは、演算中に二進演算器２０５にソフトエラーが生じた場合も、演算結果のエラーを検出できる。
【００８５】
以上説明したように、本実施形態によれば、演算前または演算中に生じたソフトエラーによる演算結果の誤りの検出を可能としつつ、ハードウェア（レジスタ１１、１３）を削減することができる。
【００８６】
また、第１の実施形態のようにレジスタ１１、１３を設ける構成では、レジスタ１１、１３にソフトエラーが生じた場合、パリティ演算回路２１は、エラー後のレジスタ１１、１３の値に基づいてパリティビットを生成してしまう可能性がある。しかし、レジスタ１１、１３を設けない構成とすることで、パリティ演算回路２１は正確なパリティビットを生成することができる。
【００８７】
（第３の実施形態）
図１５〜図１７を参照して、本発明の第３の実施形態について説明する。図１５は、本実施形態の演算回路１ｂの構成を示すブロック図である。演算回路１ｂは、長いビット数の加数、被加数を短いビット数に分割して保持する点で第１の実施形態の演算回路１と異なる。
【００８８】
図１５を参照すると、演算回路１ｂは、パリティチェック回路１４および１５を有さず、演算器２０の代わりに演算器２０ｂ、パリティ演算回路２１の代わりにＸＯＲ演算器２１ｂを有する。また、演算回路１ｂは、レジスタ５０、５１、５２、および５３と、演算器６０と、ＸＯＲ演算器６１と、レジスタ７０、および７１と、パリティチェック回路８０とを更に有する。
【００８９】
数値Ａは８ビットの二進数であり、これを４ビットごとに分割し、それぞれ４ビットのグレイコード形式に変換した数値Ａ１、Ａ２がレジスタ１０、５０にそれぞれ保持される。レジスタ１１、５１には、Ａ１、Ａ２に基づくパリティビットが保持される。
【００９０】
数値Ｂは８ビットの二進数であり、これを４ビットごとに分割し、それぞれ４ビットのグレイコード形式に変換した数値Ｂ１、Ｂ２がレジスタ１２、５２にそれぞれ保持される。レジスタ１２、５２には、Ｂ１、Ｂ２に基づくパリティビットが保持される。
【００９１】
ここで、Ａ１、Ｂ１が下位桁の部分、Ａ２、Ｂ２が上位桁の部分である。
【００９２】
図１６は、演算器２０ｂの構成を示すブロック図である。同図を参照すると、演算器２０ｂは、二進演算器２０５の代わりに加算器２０５ｂを有する以外は、第１の実施形態の演算器２０と同様である。加算器２０５ｂは、Ａ１、Ｂ１が二進数に変換された後、それらを加算し、桁上げ信号を演算器６０へ出力する。桁上げ信号は、Ａ１、Ｂ１の加算において桁上げがあった場合は「１」の値、桁上げがなかった場合は「０」の値とする。
【００９３】
図１５に戻り、ＸＯＲ演算器２１ｂは、レジスタ１１、１３の値の排他的論理和をレジスタ３１へ出力する。
【００９４】
演算器６０は、レジスタ５０、５２に保持されたＡ２、Ｂ２と、桁上げ信号の値との加算値を、レジスタ７０へ出力する。
【００９５】
図１７は、演算器６０の構成を示すブロック図である。同図を参照すると、演算器６０は、二進変換器６０１、６０３、加算器６０５、およびグレイコード変換器６０７を有する。二進変換器６０１、６０３、およびグレイコード変換器６０７の構成は、第１の実施形態の二進変換器２０１、２０３、およびグレイコード変換器２０７と同様である。
【００９６】
加算器２０５ｃは、Ａ１、Ｂ１が二進数に変換された後、それらと演算器２１ｂからの桁上げ信号を加算する。
【００９７】
再び図1５に戻り、ＸＯＲ演算器６１は、レジスタ５１、５３、および桁上げ信号の値の排他的論理和をレジスタ７１へ出力する。
【００９８】
レジスタ７０は、演算器６０の演算結果を保持し、レジスタ７１はＸＯＲ演算器６１の出力値を保持する。パリティチェック回路８０は、レジスタ７１に保持されたビットをパリティビットとして使用することにより、レジスタ７０の値に対するパリティチェックを行う。
【００９９】
なお、本実施形態では、演算回路１ｂは、８ビットの二進数を、４ビットずつに分割してグレイコードに変換して保持する構成としているが、分割対象の数値のビット数は８ビットに限られず、また、分割後の各数値のビット数は任意であり、３つ以上に分割しておいてもよい。ただし、演算する二つの値は同じ分割方法をとる必要がある。
【０１００】
例えば、演算回路１ｂは、１２ビットの二進数を５ビット、４ビット、３ビットの３つに分割し、それぞれグレイコードに変換して保持する構成としてもよい。
【０１０１】
図６に示したようにグレイコードをバイナリコードに変換するためには、ＸＯＲ演算器２０１４は、最下位ビット算出のため、全てのビットの排他的論理和を求めなくてはならない。このため、長ビット数においてバイナリコードへの変換を行うと、処理時間が長くなってしまう。
【０１０２】
しかし、以上説明したように、本実施形態によれば、長ビットのグレイコードを分割するので、演算回路１ｂは、処理時間を短縮しつつ、演算前または演算中に生じたソフトエラーや、演算結果のエラーを検出できる。
【０１０３】
（第４の実施形態）
図１８を参照して、本発明の第４の実施形態について説明する。同図は、本実施形態の演算回路１ｃの構成を示すブロック図である。演算回路１ｃは、レジスタ１１、１３、５１、および５３の代わりにパリティ生成回路１６、１７、５４、および５５を有し、ＸＯＲ演算器２１ｂ、および６１の代わりにＸＯＲ演算器２１ｃを有する以外は、第３の実施形態の演算回路１ｂと同様である。
【０１０４】
パリティ生成回路１６、１７、５４、および５５は、それぞれレジスタ１１、１３、５１、および５３に保持された数値Ａ１、Ｂ１、Ａ２、およびＢ２の値に基づき、パリティビットを生成する。
【０１０５】
ＸＯＲ演算器２１ｃは、パリティ生成回路１６、１７、５４、および５５により生成された各パリティビットの値と、桁上げ信号との排他的論理和をレジスタ３１へ出力する。
【０１０６】
なお、本実施形態では、演算回路１ｃは、加算回路を使用する構成としているが、減算回路を使用してもよいのは勿論である。この場合、下位側の減算器（２０ｂ）は、桁下げがあった場合「１」、そうでない場合「０」の値の桁下げ信号を上位側の減算器（６０）とＸＯＲ演算器２１ｃとへ出力する。そして、上位側の減算器は、被減数から、減数と桁下げ信号の値とを減算した結果をグレイコード形式で出力する。第３の実施形態の演算回路１ｂについても同様である。
【０１０７】
以上説明したように、本実施形態によれば、第３の実施形態と比較して簡易な構成で、演算前または演算中に生じたソフトエラーによる演算結果の誤りを検出できる。
【０１０８】
（第５の実施形態）
図１９を参照して、本発明の第５の実施形態について説明する。同図は、本実施形態の演算回路１ｄの構成を示すブロック図である。演算回路１ｄは、演算対象の数値が１つである点で、第１の実施形態と異なる。
【０１０９】
図１９を参照すると、演算回路１ｄは、レジスタ１２、および１３と、パリティチェック回路１５と、演算器２０と、パリティ演算回路２１とを有さず、演算器２０の代わりにインクリメンタ２０ｄを、パリティ演算回路２１の代わりにＮＯＴ演算器２１ｄを有する点で第１の実施形態の演算回路１と異なる。
【０１１０】
インクリメンタ２０ｄは、レジスタ１０に保持された数値Ａをインクリメントし、その結果をグレイコード形式でレジスタ３０へ出力する。
【０１１１】
ＮＯＴ演算器２１ｄは、レジスタ１１に保持されたパリティビットを反転したビットをインクリメント後の値のパリティビットとしてレジスタ３１へ出力する。
【０１１２】
なお、本実施形態では、演算回路１ｄとしてインクリメンタを使用したが、インクリメンタの代わりにデクリメンタを使用することもできる。
【０１１３】
以上説明したように本実施形態によれば、１つの数値に対して数値演算を行う演算回路において演算前または演算中に生じたソフトエラーによる演算結果の誤りを検出できる。
【符号の説明】
【０１１４】
１、１ａ、１ｂ、１ｃ、１ｄ    演算回路
１０、１１、１２、１３、３０、３１、５０、５２、５３、７０、７１    レジスタ
１４、１５、４０、８０    パリティチェック回路
１６、１７、５４、５５    パリティ生成回路
２０、２０ｂ、６０    演算器
２１    パリティ演算回路
２１ｂ、６１、２１ｃ    ＸＯＲ演算器
２０１、２０３、６０１、６０３    二進変換器
２０５    二進演算器
２０５ｂ、６０５    加算器
２０７、６０７    グレイコード演算器
２０１１、２０７１、２１ｄ    ＮＯＴ演算器
２０１２、２０１３、２０１４、２０７２、２０７３、２０７４    ＸＯＲ演算器
２０ｄ    インクリメンタ
【図１】
2010205135.tif 000003
【図２】
2010205135.tif 000004
【図３】
2010205135.tif 000005
【図４】
2010205135.tif 000006
【図５】
2010205135.tif 000007
【図６】
2010205135.tif 000008
【図７】
2010205135.tif 000009
【図８】
2010205135.tif 000010
【図９】
2010205135.tif 000011
【図１０】
2010205135.tif 000012
【図１１】
2010205135.tif 000013
【図１２】
2010205135.tif 000014
【図１３】
2010205135.tif 000015
【図１４】
2010205135.tif 000016
【図１５】
2010205135.tif 000017
【図１６】
2010205135.tif 000018
【図１７】
2010205135.tif 000019
【図１８】
2010205135.tif 000020
【図１９】
2010205135.tif 000021