(57)【要約】【課題】  少ない回路規模の高信頼プロセッサを実現する。【解決手段】  高信頼プロセッサは、誤り訂正符号で符号化されたプログラム及びデータを格納するメモリ部と、メモリ部から読み出されるプログラムに従って、プログラムの命令の解釈、命令の解釈に基づいた演算の実行、およびメモリ部への演算の結果を格納する、少なくとも三重化された基本制御部と、基本制御部の出力を多数決して出力する多数決部とを有し、メモリ部の、誤り訂正符号で符号化されたデータを、少なくとも三重化された基本制御部の各々が誤り訂正する。【選択図】  図１
2014229130.tif 000002
【特許請求の範囲】
【請求項１】
高信頼プロセッサであって、
誤り訂正符号で符号化されたプログラム及びデータを格納するメモリ部と、
前記メモリ部から読み出される前記誤り訂正符号で符号化された前記プログラムに従って、前記プログラムの命令を解釈し、前記命令の解釈に基づいて演算を実行し、実行した前記演算の結果を前記メモリ部へ格納する、少なくとも三重化された基本制御部と、
前記基本制御部の出力を多数決して出力する多数決部とを有し、
前記メモリ部の、前記誤り訂正符号で符号化された前記データを、少なくとも三重化された前記基本制御部の各々が誤り訂正することを特徴とする高信頼プロセッサ。
【請求項２】
請求項１に記載の高信頼プロセッサであって、
前記メモリ部は前記プログラムを格納するプログラムメモリと、前記演算の結果を格納するデータメモリからなることを特徴とする高信頼プロセッサ。
【請求項３】
請求項１に記載の高信頼プロセッサであって、
前記基本制御部の出力であるアクセス要求は、少なくともアクセスするアドレスと、リードアクセスとライトアクセスとの一方を示すアクセスコマンドと、ライトアクセスの場合はライトデータを含み、前記アクセス要求は前記誤り訂正符号で符号化されており、前記多数決部は前記誤り訂正符号で符号化された前記アクセス要求を多数決することを特徴とする高信頼プロセッサ。
【請求項４】
請求項１に記載の高信頼プロセッサであって、
前記プログラムの命令を解釈し実行する演算として、基本演算と拡張演算があり、少なくとも三重化された前記基本制御部が前記基本演算を実行し、実行した前記基本演算の結果を前記多数決部が多数決し、二重化した拡張演算部で前記拡張演算を実行し、実行した前記拡張演算の結果を前記基本制御部が比較することを特徴とする高信頼プロセッサ。
【請求項５】
請求項４に記載の高信頼プロセッサであって、
前記基本制御部で実行する前記基本演算として少なくとも加算を含み、前記拡張演算部で実行する前記拡張演算として少なくとも乗算を含むことを特徴とする高信頼プロセッサ。
【請求項６】
請求項５に記載の高信頼プロセッサであって、
二重化された前記拡張演算部による前記拡張演算の結果が不一致のとき、少なくとも三重化された前記基本制御部が前記拡張演算を実行することを特徴とする高信頼プロセッサ。
【請求項７】
請求項５に記載の高信頼プロセッサであって、
二重化された一方の前記拡張演算部の前記拡張演算が乗算であり、他方の前記拡張演算部の前記拡張演算が乗数と被乗数の剰余を乗算した結果の剰余を求める演算であることを特徴とする高信頼プロセッサ。
【請求項８】
請求項５に記載の高信頼プロセッサであって、
前記プログラムの命令が前記拡張演算であり、二重化された前記拡張演算部による前記拡張演算結果が不一致になったことを示すフラグがセットされているとき、少なくとも三重化された前記基本制御部が前記拡張演算を実行することを特徴とする高信頼プロセッサ。
【請求項９】
構成データに基づいてプログラマブルに構成を変更できるデバイスに搭載された高信頼プロセッサであって、
誤り訂正符号で符号化されたプログラム及びデータを格納するメモリ部と、
前記メモリ部から読み出される前記プログラムに従って、前記プログラムの命令を解釈し、前記命令の解釈に基づいて演算を実行し、実行した前記演算の結果を前記メモリ部へ格納する、少なくとも三重化された基本制御部と、
前記基本制御部の出力を多数決して出力する多数決部とを有し、
前記メモリ部の、前記誤り訂正符号で符号化された前記データを、少なくとも三重化された前記基本制御部の各々が誤り訂正し、
前記多数決部が前記基本制御部の誤りを検出したとき、誤りが検出された前記基本制御部を含む前記構成データに基づいて前記デバイスにプログラマブルに構成を搭載することを特徴とする高信頼プロセッサ。
【請求項１０】
構成データに基づいてプログラマブルに構成を変更できるデバイスに搭載された高信頼プロセッサであって、
誤り訂正符号で符号化されたプログラム及びデータを格納するメモリ部と、
前記メモリ部から読み出される前記プログラムに従って、前記プログラムの命令を解釈し、前記命令の解釈に基づいて演算を実行し、実行した前記演算の結果を前記メモリ部へ格納する、少なくとも三重化された基本制御部と、
前記基本制御部の出力を多数決して出力する多数決部とを有し、
前記メモリ部の、前記誤り訂正符号で符号化された前記データを、少なくとも三重化された前記基本制御部の各々が誤り訂正し、
誤りが検出された前記基本制御部を除去する他の構成データを予め作成しておき、前記多数決部が前記基本制御部の誤りを検出したとき、前記他の構成データに基づいて前記デバイスにプログラマブルに構成を搭載することを特徴とする高信頼プロセッサ。
【請求項１１】
誤り訂正符号で符号化されたプログラム及びデータを格納するメモリ部と、
前記メモリ部から読み出される前記プログラムに従って、前記プログラムの命令を解釈し、前記命令の解釈に基づいて演算を実行し、実行した前記演算の結果を前記メモリ部へ格納する、少なくとも三重化された基本制御部と、
前記基本制御部の出力を多数決して出力する多数決部とを有し、
前記メモリ部の、前記誤り訂正符号で符号化された前記データを、少なくとも三重化された前記基本制御部の各々が誤り訂正する高信頼プロセッサ、および、
周辺バス制御部を介して前記高信頼プロセッサ接続し、制御データを入力する回路と前記制御データを出力する回路を有することを特徴とする高信頼制御装置。
【請求項１２】
請求項１１に記載の高信頼制御装置であって、前記制御データを入力する回路は通信回路を含み、前記制御データを出力する回路はモータ制御回路を含むことを特徴とする高信頼制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、高信頼プロセッサおよびそれを用いた高信頼制御装置に関する。
【背景技術】
【０００２】
本技術分野の背景技術として、特許文献１には、「計算機内の１つのモジュールに障害が発生しても、計算機として動作し続けるというフォールトトレラント性を有しつつ、高い周波数で動作することを目的としている」と記載されている。また、特許文献２には「コンピュータの出力に誤り訂正符号を付加する誤り訂正符号回路と、多数決回路の出力の誤りを、上記誤り訂正符号により訂正する誤り訂正復号化回路を設けることにより、超高信頼性のコンピュータを得られるようにした」と記載されている。
また、特許文献３には、「一方を制御用、他方を比較用とする同一機能のデータ処理ユニットのノイズピークを抑え、かつ高速化への対応が容易なマイクロコントローラを実現する」と記載されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平７−１０５０３７号公報
【特許文献２】特開昭６２−１５０４３９号公報
【特許文献３】特開２００９−２３７８４９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
特許文献１には、メモリとプロセッサのセットを三重化し、それらの出力を２個の多数決部で多数決する装置の構成が記されている。しかし、特許文献１の装置では、メモリ、プロセッサを分離することができず、それぞれを三重に持つため、高信頼化しない場合に比べ３倍以上の回路規模になる。一般に、プロセッサは、キャッシュメモリやレジスタファイルなどの記憶素子と、命令デコーダ、加算器、乗算器などの論理回路から構成される。この中で、プロセッサとセットになっているメモリとキャッシュメモリやレジスタなどの記憶素子は、格納されているデータに誤り訂正のための冗長データを付加することで誤り訂正が可能となり、誤りが発生しても正しく動作を継続することができる。即ち、記憶素子に対しては、必ずしも多重化して多数決する構成にする必要はない。一方命令デコーダや加算器、乗算器のような論理回路は、誤り訂正符号のような簡便に高信頼化する手法がない。
【０００５】
特許文献２にはコンピュータの出力に誤り訂正符号を付加することによって、特許文献１にあるように多数決回路を２個持たなくても高い信頼性が得られるとしている。しかし、特許文献２の方式においてもコンピュータを三重化する必要がある。一般にコンピュータは記憶素子と命令デコーダ、加算器、乗算器などの論理回路から構成される。前述のように、記憶素子を除く論理回路は三重化で多数決を行う必要があるが、記憶素子は誤り訂正が可能であり、必ずしも多重化して多数決する構成にする必要はない。
【０００６】
一方、特許文献３にあるように、プロセッサを二重化し、比較をすることで、障害を検知し安全な停止処理を行うより少ない回路規模の装置を提供できる。ただし、この場合は障害を検知しただけなので、動作を継続させることができない。  
そこで、本発明は、少ない回路規模の高信頼プロセッサを実現する。
【課題を解決するための手段】
【０００７】
開示する高信頼プロセッサは、誤り訂正符号で符号化されたプログラム及びデータを格納するメモリ部と、メモリ部から読み出されるプログラムに従って、プログラムの命令の解釈、命令の解釈に基づいた演算の実行、およびメモリ部への演算の結果を格納する、少なくとも三重化された基本制御部と、基本制御部の出力を多数決して出力する多数決部とを有し、メモリ部の、誤り訂正符号で符号化されたデータを、少なくとも三重化された基本制御部の各々が誤り訂正する。
【発明の効果】
【０００８】
本発明によれば、少ない回路規模の高信頼プロセッサを実現できる。
【図面の簡単な説明】
【０００９】
【図１】高信頼制御装置における高信頼プロセッサの構成図の例である。
【図２】基本制御部の構成図の例である。
【図３】多数決部の構成図の例である。
【図４】メモリ部の構成図の例である。
【図５】周辺バス制御部の構成図の例である。
【図６】拡張演算部の構成図の例である。
【図７】拡張演算検査部の構成図の例である。
【図８】高信頼プロセッサの基本制御部の動作を説明するフローチャートの例である。
【図９】高信頼制御装置の構成図の例である。
【図１０】ＦＰＧＡを用いた高信頼プロセッサの構成図の例である。
【発明を実施するための形態】
【００１０】
以下、実施例を、図面を用いて説明する。
【実施例１】
【００１１】
本実施例では、高信頼プロセッサとそれを用いた高信頼制御装置の例を説明する。
図１は、本実施例の高信頼制御装置に用いる高信頼プロセッサ１００の構成図の例である。高信頼プロセッサ１００は、メモリ部２００、３個の基本制御部３００、多数決部４００、拡張演算部５００、拡張演算検査部６００、および周辺バス制御部７００を有する。
【００１２】
メモリ部２００は、多数決部４００からのメモリアクセス要求に従ってデータの書き込み、読み出しを行う。読み出し要求の場合は、指定されたアドレスに従ってメモリ内容を読み出し、出力する。ここでは、メモリ部２００にはこのプロセッサが実行するプログラムと、プログラムによってアクセスされるデータが格納される。
【００１３】
基本制御部３００は３個あり、同じ動作を実行する。まず、電源が入り、リセットが解除されると、各基本制御部３００はリセット後のプログラムを読み出すために、アクセス要求を多数決部４００に出力する。このアクセス要求は多数決部４００で多数決され、多数決されたアクセス要求がメモリ部２００に出力される。メモリ部２００から読み出されたプログラムは３個の基本制御部３００にそれぞれ入力され、基本制御部３００は入力されたプログラムを命令として、命令に定義された処理を実行する。例えば、読み出されたプログラムの命令が、メモリ１０００番地にデータ０をライトする命令であれば、基本制御部３００は、メモリ部２００の１０００番地に０をライトするアクセス要求を多数決部４００に出力し、多数決部４００がアクセス要求を多数決してメモリ部２００に出力し、１０００番地に０がライトされる。以降、プログラムの読み込みとプログラムの実行を繰り返す。
【００１４】
本実施例では、プログラムで実行できる演算命令として加算、比較、乗算を含んでいるが、基本制御部３００には加算器と比較器があり、乗算は拡張演算として拡張演算部５００で演算する構成とした。一般に、乗算は多くのゲートを使用する。これを三重化で３倍のゲートを持つと大幅なコストアップとなる。乗算は加算の繰り返し処理で実行できるため、乗算のような大量にゲートを使う演算は二重化し、演算結果を比較することで故障（比較結果の不一致）を検出し、故障した場合は基本制御部３００の演算機能を利用して乗算を代替処理できるようにした。
【００１５】
基本制御部３００がプログラムを読み込み、命令は拡張演算が乗算である場合、基本制御部３００からの命令は多数決部４００を経由して拡張演算部５００と拡張演算検査部６００に出力され、拡張演算部５００と拡張演算検査部６００による演算結果を基本制御部３００が照合し、多数決部４００で多数決してメモリ部２００に格納する。
【００１６】
ここで、拡張演算検査部６００は一般には拡張演算部と同じものであるが、乗算の場合に剰余検査するため、別の名称を用いている。剰余検査は乗数と被乗数の素数による剰余の積の剰余が、積の剰余に等しいことを利用した演算結果の検査方法であり、大幅に少ないゲートで乗算の結果が正しいかどうか検査することができる。
【００１７】
本実施例では、３２ビット×３２ビットの乗算結果が拡張演算部５００から出力され、拡張演算検査部６００からは乗数と被乗数の各々を７で割ったときの余りを乗算し、その乗算結果を７で割ったときの余りを出力する。それが、基本制御部３００に入力され、拡張演算部５００の出力を７で割った余りと拡張演算検査部６００の出力が一致すれば乗算が正しかったと判定することができる。この結果が不一致にならば、乗算器（拡張演算部５００）または、その検査回路（拡張演算検査部６００）に異常があるとして、以降は、基本制御部３００が乗算命令を加算の繰り返しに置き換えて処理を行う。
【００１８】
次に、プログラムの命令が、周辺バスへのアクセスである場合、各基本制御部３００が周辺バスのアドレスへのリード、ライトのアクセス要求を多数決部４００に出力し、多数決部３００で多数決されたアクセス要求が周辺バス制御部７００に出力される。周辺バス制御部７００は、ライトであればライト要求を周辺バスに出力し、リードアクセスであれば、読み出し要求を周辺バスに出力し、読みこんだデータを基本制御部３００に出力する。
【００１９】
以上基本的な動作の概要を示したが、本実施例では、メモリ部２００へ入力されるアクセス要求やメモリ部２００の出力、基本制御部３００が出力するアクセス要求、周辺バスに対するアクセス要求にエラー訂正のための冗長データが付加されている。即ち、メモリのような記憶装置の他に、アドレスやデータ、アクセス要求の種別やアクノリッジを含めたアクセス要求の信号群に誤り訂正符号を適用する。これにより、誤り訂正が有効な回路は多重化しないですみ、例えば、メモリ素子は３２ビットに７ビットのシンドロームが付加されるから約２２％の増加で済むようになる。
【００２０】
以下、図２から図９を用いて、高信頼プロセッサとそれを用いた高信頼制御装置の更に詳しく動作を説明する。
【００２１】
図２は、基本制御部３００の構成の例を示す図である。実際の構成は、一般的なマイクロプロセッサと同様にプログラムとデータは分離され、演算の実行はパイプラインで動作し、多くの命令を実行できるようになるが、ここでは、説明のための簡略化した最小の構成を用いている。
【００２２】
基本制御部３００はシーケンサ（以下ＳＥＱ）３０１が制御しており、詳細な信号線は記していないが、それぞれのリソースを以下に示すように制御する。まず、電源が投入されリセットが解除されると、ＳＥＱ３０１はプログラムカウンタ（以下ＰＣ)３０２を”０番地”にし、信号線ＲＥＱにリード要求をセットしたアクセス要求を出力する。このアクセス要求は多数決回路４００を経由し、メモリ部２００に出力され、メモリ部２００からの出力が誤り訂正回路３０３を経由し命令レジスタ３０４に格納される。命令レジスタ３０４は、命令種別、ソース１（以降Ｓ１）、ソース２（以降Ｓ２）、デスティネイションまたはラベル（以降Ｄ／Ｌ）が格納される。例えば、０ｘ１０番地と０ｘ１４番地を加算して０ｘ１８番地に格納する場合は、命令がＡＤＤ、Ｓ１が０ｘ１０、Ｓ２が０ｘ１４、Ｄ／Ｌが０ｘ１８と格納される。命令の読み込みが終わると、ＳＥＱ３０１は命令に従って動作を開始する。ここでは、Ｓ１をアドレスとしてリードアクセスを出力し、メモリ部２００からの出力を、セレクタ３０５を介してレジスタＳ１Ｄ３０６に格納する。Ｓ２をアドレスとしてリードアクセスを出力し、セレクタ３０７を介してレジスタＳ２Ｄ３０８に格納する。次に、加算器３０９の出力をセレクタ３１０で選択し、Ｄ／Ｌで示されるアドレスにライトアクセスする。命令に対する一連の処理が終了したらＰＣを＋１（更新）してプログラムの次の命令を取り込む。周辺バスからのデータリードを行った場合は、誤り訂正回路３１１を介してＳ１Ｄ３０６やＳ２Ｄ３０８に格納する。命令が乗算の場合は、Ｓ１、Ｓ２のリードアクセス結果は拡張演算部５００と拡張演算検証部６００のレジスタに格納され、演算結果がそれぞれから基本制御部３００に入力される。拡張演算部５００の出力は、基本制御部３００に入り、７に対する余りを求め（ＭＯＤ７）、拡張演算検査部６００の出力と比較器３１２で比較し、不一致であれば、エラーフラグ（ＭＵＬＥＲＲ）３１３をセットし、ＳＥＱ３０１がエラーを認識できるようにする。
【００２３】
ここでは、Ｓ１、Ｓ２，Ｄ／Ｌをアドレスとして、その値によりメモリ部２００と周辺バスを切替えられることにしている。以上示した、命令の読み出し、命令の実行を継続することで制御のための処理を行うことができる。
【００２４】
図３を用いて多数決部４００を説明する。多数決部４００は３個の基本制御部３００からのアクセス要求を多数決して、メモリ部２００、周辺バス制御部７００、拡張演算部５００．及び/又は拡張演算検査部６００にアドレス、ライトデータ、要求内容を出力する。多数決は、図に示すように、誤り訂正のためのシンドロームを付加した状態で多数決を行う。このシンドロームの付加回路は、基本制御部３００の一部であると考えてもよい。何れにしろ、シンドロームを含めて多数決を取ることで、基本制御部３００とシンドローム付加回路に単一故障が起きても多数決で故障が除外され、多数決部４００の単一故障はシンドロームを使って誤りを訂正するか、エラーを検出することができる。
【００２５】
図４を用いてメモリ部２００の構成の例を説明する。メモリ部２００は、多数決部４００の出力したアクセス要求にシンドロームが付加されたものを入力とする。アクセス要求を誤り訂正した結果に対して、アドレスがメモリ部２００に指定され、ライトであれば、アクセス要求に含まれるライトデータをメモリ部２００内のＲＡＭに新たにシンドロームを付加して書き込みを行う。リードアクセスである場合には、ＲＡＭの出力を誤り訂正し、改めてシンドロームを付加して基本制御部３００に出力する。
【００２６】
図５を用いて周辺バス制御部７００の例を説明する。周辺バスとは、高信頼制御装置内の通信回路、モータの制御回路などの周辺装置を制御するための制御回路を意味する。周辺バスは、周辺装置に対して送信データを送信したり、受信データを受信したり、モータの制御パルスの周期やパルス幅を指定するために用いられる。周辺バス制御部７００は、高信頼プロセッサ１００の中で、プログラムに従って作成したデータを周辺装置にライトしたり、周辺装置のデータを読み出したりする役割を果たす。本実施例においては、周辺バス制御部７００は、プログラムで指定するアドレスが周辺バスに割り当てられたアドレスであるときに周辺バスへアクセス要求を出力し、読みこみの場合は周辺バスからデータを取り込む。このとき、図５に示したように、多数決部４００からのアクセス要求は誤り訂正を行ってから、アクセス要求が何かを判断し、周辺バスへの出力は改めてシンドロームを付加して出力する。周辺バスからの読みこみデータにはシンドロームが付加されており、誤り訂正を行った後、再びシンドロームを付加し、周辺バス制御部７００の出力として基本制御部３００に送られる。
【００２７】
次に、図６と図７を用いて拡張演算部５００と拡張演算検査部６００の例を示す。本実施例では拡張演算として乗算を例に説明する。他に、除算、平方根、三角関数、浮動小数の演算などが考えられる。一般に、演算回路の動作が正しいかをチェックするために、パリティやＣＲＣを用いることはできず、二重化し比較する手法がとられる。本実施例においても、拡張演算として浮動小数点演算を含む場合には、二重化して比較する方法を採用し、拡張演算部５００と拡張演算検査部６００は同じものを使用する。但し、乗算や除算においては、剰余演算を利用して回路規模、ゲート数を大幅に減少させることができる。剰余演算とは、ある数をある正数で割った余りである剰余の演算のことである。ある二数の積の剰余は、それぞれの剰余の積の剰余になる。
【００２８】
例えば、１０００×１００２の乗算結果は１００２０００であるが、１０００を７で割った余り６と、１００２を７で割った余り１を掛けて７で割った余り６は、１００２０００を７で割った余り６と一致する。除算の場合は、商と余りに対して剰余演算で検算すればよい。ここで、剰余、即ち割った余りを求める演算と、剰余同士を乗算する回路が必要であるが、例えば７の剰余は、与えられた数を二進数表記したとき、下位から３ビット毎切り出した値を加算し、その結果を更に３ビットで切り出して加算すれば容易に求めることができる。例えば、１０進数の１０００は２進数で１１１１１０１０００であるが、それを７で割った余りは、下位から”０００”＋”１０１”＋”１１１”＋”００１”＝”１１０１”となり、更に、”１０１”＋”００１”＝”１１０”として６が求められる。
【００２９】
即ち、３２ビットの除算器を必要とするわけではなく、数ビットの加算器があれば良い。３ビットの乗算器は３２ビットの乗算器に比べれば大幅に規模の小さな回路となる。ここに示した３２ビットの乗算器が拡張演算部の乗算器（ＭＵＬ）であり、３ビットの乗算器が拡張演算検査部６００の乗算器（ＭＵＬ３）である。基本制御部３００で実行する命令が乗算のとき、Ｓ１、Ｓ２で示されたソースデータがメモリ部２００から読み出され、誤り訂正した後レジスタＳ３ＤとレジスタＳ４Ｄに順次格納される。拡張演算部５００からは乗算結果である積が出力され、拡張演算検査部６００からは、Ｓ３ＤとＳ４Ｄの７の剰余同士を掛け算し、再び７の剰余を求めた結果を出力する。これらは、各基本制御部３００に送られ、拡張演算部５００の出力は７の剰余を求めた結果を拡張演算検査部６００の剰余と比較して乗算器に故障が発生したことを検出することができ、エラーフラグ（ＭＵＬＥＲＲ）３１３にセットされる。このとき乗算結果は正しくないため、基本制御部３００のＳＥＱ３０１は乗算器を使わず、基本制御部３００の有する加算器３０９と比較器３１４で乗算結果を求めるように動作する。また、エラーフラグがセットされた状態で再び乗算の命令を読みこんだ場合は、始めから加算器３０９と比較器３１４を用いて乗算を行う。
【００３０】
図８は、上記乗算を含む基本制御部３００の動作の例を説明する図である。前述のように、リセットを解除した時、初期化によってプログラムカウンタＰＣ３０２は０に、エラーフラグ（ＭＵＬＥＲＲ）３１３は０になる。以降、メモリ部２００のＰＣ番地からプログラムを読み込む（命令フェッチ）（３５０）。
【００３１】
命令が加算ＡＤＤであれば（３５１）、ソースＳ１を読み込みＳ１Ｄ３０６にセット（３５２）、ソースＳ２を読み込みＳ２Ｄ３０８にセット（３５３）、加算器３０９の出力をＤ／Ｌに示したアドレスにライトし（３５４）、ＰＣ３０２を更新して（３５５）、命令フェッチ（３５０）に戻る。
【００３２】
読みこんだ命令が、分岐命令ＢＥＱの場合は（３６０）、ソースＳ１を読みこみＳ１Ｄ３０６にセット（３６１）、ソースＳ２を読み込みＳ２Ｄ３０８にセット（３６２）、比較器３１４でＳ１Ｄ３０６とＳ２Ｄ３０８が等しければ（３６３）、ＰＣ３０２にＤ／Ｌをセット（ジャンプ）し（３６４）、等しくなければＰＣを＋１（更新）して（３６５）、次の命令を読みこむ。
【００３３】
読みこんだ命令が乗算で（３７０）（乗算以外の命令の処理３９０の説明略）、ＭＵＬＥＲＲが出なければ（３７１）、ソースＳ１を読み込み拡張演算部５００と拡張演算検査部６００のＳ３Ｄにセット（３７２）、ソースＳ２も同様にＳ４Ｄにセットする（３７３）。この結果、拡張演算器５００の出力の７の剰余と拡張演算検査部６００の出力が一致すれば（３７４）、乗算結果をＤ／Ｌ番地にライトし（３７５）、ＰＣを＋１（更新）して（３７６）、次の命令を読みこむ。
【００３４】
もし、ＭＵＬＥＲＲが既にセットされていたか（３７１：ＹＥＳ）、乗算の結果の剰余が不一致になったときは（３７４：ＹＥＳ）、ソースＳ１とソースＳ２をレジスタＳ１Ｄ３０６、Ｓ２Ｄ３０８に格納し（３８０、３８１）、Ｓ１Ｄ３０６をＳ２Ｄ回加算すれば（３８２、３８３）、積Ｐを求めることが可能となる。求めた積ＰをＤ／Ｌ番地にライトして（３８４）乗算命令の実行が完了する。ＰＣを＋１（更新）して（３８５）、次の命令を読みこむ。
【００３５】
以上示したように、高信頼プロセッサ１００は、内部に単一故障が発生した場合、それが記憶素子あるいは周辺バスのようなデータ転送線の場合は誤り訂正によって誤りが正しく訂正され、それが基本制御部３００の命令デコード、演算処理を行う部分であれば、三重化により多数決することで正しい結果を選択して動作し、乗算器のような論理規模の大きい拡張演算は検査用の演算器の演算結果を用いて故障を検出し、故障の場合には三重化された基本制御部３００で代わりに演算する。即ち、単一故障の間は、高信頼プロセッサ１００は与えられたプログラムに従って動作を継続することができる。
【００３６】
図９は、その高信頼プロセッサ１００を用いて高信頼制御装置８１０を構成した例を説明する。例えば、複数のモータ８４０を制御する機器の場合、ホスト制御装置８００から、モータ８４０を制御する高信頼制御装置８１０がネットワークによって接続され、開始、停止、回転数の指示や状態の報告などの指令が送られる。そのネットワークは、高信頼制御装置８１０の通信回路８２０と接続され、ホスト制御装置８００の指令を高信頼プロセッサ１００に伝達する。この高信頼制御装置８１０において、通信回路８２０が故障した場合は、定期的な連絡がないことなどから高信頼プロセッサ１００が故障を判断し安全にモータを停止させるような制御を行う。モータ８４０やその制御回路８３０の故障も、モータ８４０の回転状態を監視することで故障を認識し、ホスト制御装置８００に通知し、安全にモータ８４０を停止させるような制御が行える。高信頼プロセッサ１００の故障も、本実施例に示してきたように高信頼プロセッサ１００自身で認識できるので、ホスト制御装置８００に通知し、安全にモータ８４０を停止させるような制御を行う。
【００３７】
以上、実施例１では、高信頼プロセッサをメモリ部は誤り訂正符号で冗長化し、命令デコード、演算処理を行う基本制御部を三重化する構成を示した。メモリ部も三重化する構成に比べ、メモリ部２個分のコストを削減することができる。更に、実施例１では、乗算のように大規模の演算器を三重化せず、二重化し比較演算することで乗算器の誤りを検知し、その場合でも三重化されている基本制御部で乗算命令を実行できる構成を示した。三重化するのに比べ乗算器１個分のコストを削減できる。更に、大規模な乗算器をそのまま二重化するのではなく、剰余検査を用い、少しの追加回路で誤り検出を行えることを示した。この場合、二重化場合に比べさらに乗算器を１個分のコスト削減の効果を得られる。
【実施例２】
【００３８】
本実施例では、高信頼プロセッサあるいは高信頼制御装置８１０をＦＰＧＡ（フィールド・プログラマブル・ゲート・アレイ）で実装する場合に、部分的に故障の復旧を行う装置の例を説明する。図１０は、実施例２における高信頼プロセッサ９００の構成の例である。図１の高信頼プロセッサ１００と同等の機能を有しており、既に説明した図１に示された同一の符号を付された構成と、同一の機能を有する部分については、説明を省略する。
【００３９】
図１０において、ＲＯＭ９２０はＦＰＧＡで高信頼プロセッサを実現する論理の構成情報が格納されている。ＦＰＧＡは一般に小規模なルックアップテーブルとフリップフロップ、その間を結ぶ配線をスイッチによってさまざまに変更して所望の論理回路を実現するデバイスである。そのルックアップテーブルとスイッチ情報がＲＯＭ９２０に格納されている。電源が投入されると、ＦＰＧＡは内部の各ルックアップテーブルとスイッチにＲＯＭ９２０に格納された情報（構成データ）をコピーし、リセットを解除し動作を開始する。その動作を行うのが、コンフィグレータ（以降ＣＯＮＦＩＧ）９１０である。このようにＦＰＧＡは内蔵される記憶素子（ルックアップテーブルとスイッチのこと）に与える構成データ基づいて動作するため、記憶素子の反転（記憶内容の１／０の反転）は、ハードウェアの故障と等価であると言える。最近の半導体製造プロセスの微細化に伴い、中性子線やα線などによる記憶素子のデータが反転するソフトエラーと言う現象が顕在化してきた。従来のハードウェアの永久故障とは異なり、電源を入れ直せば正しく動く特徴がある。実施例２では、故障した回路の構成データを部分的に入れ替えることで故障状態から復旧させる構成を提供する。
【００４０】
図１０においてメモリ部２００からＣＯＮＦＩＧ９１０に対してエラー検出信号が接続されている。これは、図４に示したメモリ部２００の２個の誤り訂正回路で１ビットの誤りが訂正されたこと、又は２ビットのエラーが検出されたことを示す信号である。多数決部４００が出力するＣＯＮＦＩＧ９１０へのエラー検出信号は、多数決部４００のセレクタからメモリ部２００の入口までの間に故障が発生したことを示す。メモリ部２００の出力部にある誤り訂正エラーが検出されることは、メモリ自体に大きな問題が発生していることを示している。３個の基本制御部３００からも誤り訂正回路でエラーが検出されたことを示す信号がＣＯＮＦＩＧ９１０にＡＮＤゲートを介して接続されている。メモリ部からの出力に対して全ての基本制御部３００でエラーが検出される場合は、メモリ出力部のシンドローム生成回路に故障が発生したことを示している。周辺バス制御部７００の出力が全ての基本制御部３００でエラーが検出される場合は、周辺バス制御部のシンドローム生成回路の故障が発生したことを示している。他に、多数決部４００からは、各基本制御部３００間の比較結果、あるいはそれから基本制御部３００が故障しているかがを示す信号がＣＯＮＦＩＧ９１０に送られる。また、拡張演算部５００と拡張演算検査部６００からは、それぞれの誤り訂正回路でエラーが発生したことを示す信号がＣＯＮＦＩＧ９１０に送られる。それぞれ、多数決部４００のセレクタから拡張演算部５００、拡張演算検査部６００の入口までの間に故障があることを示している。周辺バス制御部からは、２個の誤り訂正回路においてエラーを検出したことを示す信号がＣＯＮＦＩＧ９１０に送られる。多数決部３００の出力で誤り検出された場合は、多数決部３００のセレクタから周辺バス制御部７００の入り口までの間に故障が発生したことを示している。周辺バスからの入力を誤り訂正する回路で誤りを検出した場合は、周辺バス上の回路に故障が発生していることを示している。
【００４１】
このように、通常は、誤りの発生場所により故障した構成要素が限定できる。ＣＯＮＦＩＧ９１０は、各部の誤り訂正回路の出力する情報から必要な構成データを部分的に再書き込みすることで稼働させながらの復旧が可能になる。
【００４２】
構成データをＣＯＮＦＩＧ９１０に正しく書き込めない場合や、再度同じ部分で故障が発生する場合は、永久故障である。この場合は、ＲＯＭ９２０に複数の構成情報を格納しておき、永久故障を発生した素子を使用しない構成データを呼び出して格納すればよい。例えば、３個の基本制御部３００でそれぞれが故障したことを想定した３種類の構成データを作成しておけば、どれか１個の基本制御部３００が故障しても、故障したと考えられる論理を使用しないで基本制御部を入れ替えることができる。
【００４３】
以上示したように、実施例２においては、故障した部位から再構成する構成データを限定できるため、誤り訂正しながら稼働している状態、あるいは、３重化した基本制御部３００の内１個が故障した状態から速やかに、故障の無い三重化した基本制御部が正常に動作する状態に復旧させることができる。
【００４４】
以上の実施形態によれば、少ない回路規模の高信頼プロセッサを実現できる。高信頼プロセッサを構成する要素ごとに、例えば記憶素子では誤り訂正を用い、命令デコーダや加算器、乗算器などの論理回路を三重化することで、記憶素子を３倍にすることがないため回路規模、更にはコストを抑えた高信頼プロセッサ及びそれを用いた高信頼制御装置を提供できる。例えば、通常の三重化した構成に比べ、記憶素子が必要な容量の１．７倍程度（３２ビットに７ビットの冗長符号を付加した時１．２１倍のメモリ容量が必要で、三重化の３倍に比べ（３−１．２２）倍）、回路規模を少なくすることができる。
【００４５】
さらに、実施形態は、乗算器などのように他の機能を組み合わせて実現できる論理回路は、その論理回路を二重化し、比較をすることで故障を検知し、故障が発生したときは、前述の他の機能の組み合わせで正常な動作を継続できる制御装置を提供できる。例えば、乗算は加算器と比較器があれば乗数を被乗数だけ加算することで積を求めることができる。即ち、論理回路だけでも３倍以下に回路規模やコストを抑えた高信頼プロセッサ及びそれを用いた高信頼制御装置を提供できる。
【符号の説明】
【００４６】
１００：高信頼プロセッサ、２００：メモリ部、３００：基本制御部、４００：多数決部、５００：拡張演算部、６００：拡張演算検査部、７００：周辺バス制御部、８００：ホスト制御装置、８１０：高信頼制御装置、８２０：通信回路、８３０：制御回路、８４０：モータ、９１０：コンフィグレータ、９２０：ＲＯＭ。
【図１】
2014229130.tif 000003
【図２】
2014229130.tif 000004
【図３】
2014229130.tif 000005
【図４】
2014229130.tif 000006
【図５】
2014229130.tif 000007
【図６】
2014229130.tif 000008
【図７】
2014229130.tif 000009
【図８】
2014229130.tif 000010
【図９】
2014229130.tif 000011
【図１０】
2014229130.tif 000012