(57)【要約】【課題】ノイズなどの外部要因による演算器の一時的誤作動や永久故障を検出することができ、トランジスタの物量増加を抑えて製造コストや消費電力を削減することができ、命令実行性能の低下を防ぐことができる半導体集積回路装置を提供する。【解決手段】高信頼モードと通常モードを切り替える命令を有し、高信頼モードの場合、次の命令を命令メモリ４から読み出さずに命令バッファに保持されている命令を命令デコード部６へ出力し、シフタ４０１，４０２によりシフトを行わずに出力された演算データを元に演算器１で演算して得られた演算結果１０３と、シフタ４０１，４０２によりシフトされて出力された演算データを元に演算器１で演算して得られた結果をシフタ４０３によりシフトして得られた演算結果１０４とを比較器３で比較し、通常モードの場合は、次の命令を命令メモリ４から読み出して命令デコード部６へ出力し、演算結果の比較を行わない。【選択図】  図１
2006209374.tif 000002
【特許請求の範囲】
【請求項１】
第１の演算器と、前記第１の演算器への入力データを第１の方向にシフトさせる第１のシフタと、前記第1の演算器の演算結果を第２の方向にシフトさせる第２のシフタと、前記第２のシフタから出力される演算結果を保持する第1のレジスタと、前記第1のレジスタから出力される演算結果と前記第２のシフタから出力される演算結果を比較する第1の比較器と、を有する半導体集積回路装置であって、
命令を保持するメモリと、
前記メモリから命令を読み出す命令フェッチ部と、
前記メモリから読み出された命令を保持する命令バッファと、
前記メモリから読み出された命令を解釈する命令デコード部と、
前記命令デコード部の解釈結果を基に演算データを出力するレジスタファイルと、
前記メモリ内の命令セットの中に、通常モードから高信頼モードへ遷移する開始命令と、前記高信頼モードから前記通常モードへ遷移する終了命令と、を有し、
前記命令フェッチ部が前記メモリから読み出した命令が前記開始命令であった場合、前記開始命令が実行されると前記終了命令が実行されるまでは前記高信頼モードとなり、前記命令フェッチ部は、次のサイクルにおいて次の命令を前記メモリから読み出さずに前記命令バッファに保持されている命令を前記命令デコード部へ出力し、前記第1の演算器で同一の命令を複数回実行し続けて前記第1の比較器で演算結果の比較を行い、前記終了命令実行後は前記通常モードとなり、前記命令フェッチ部は次のサイクルにおいて次の命令を前記メモリから読み出して前記命令デコード部へ出力し、前記第1の比較器は、前記演算結果の比較を行わないことを特徴とする半導体集積回路装置。
【請求項２】
請求項１記載の半導体集積回路装置において、
前記高信頼モードと前記通常モードを切り替えるビットを持つ第２のレジスタを有し、
前記高信頼モード又は前記通常モードの信号が、前記第２のレジスタの前記ビットから出力されることを特徴とする半導体集積回路装置。
【請求項３】
請求項１記載の半導体集積回路装置において、
第１のクロック信号と、前記第１のクロック信号よりも低速な周波数で動作する第２のクロック信号とを切り替えて出力する周波数制御部を有し、
前記高信頼モードにおいて同一命令を複数回実行する場合は前記周波数制御部から前記第１のクロック信号が回路に供給されて高速に命令を実行し、前記通常モードにおいては前記第２のクロック信号が回路に供給されて低速で命令を実行する手段を有することを特徴とする半導体集積回路装置。
【請求項４】
請求項１記載の半導体集積回路装置において、
第１のクロック信号と、前記第１のクロック信号の２倍の速度で動作する第２のクロック信号とを有し、
前記メモリと前記命令フェッチ部と前記命令バッファと前記命令デコード部と前記レジスタファイルと前記比較器に前記第１のクロック信号を供給し、前記第１のシフタと第２のシフタと前記演算器と前記レジスタに前記第２のクロック信号を供給し、１回の命令フェッチによって読み出された命令を前記演算器で２回実行し、前記演算結果を前記比較器で比較する手段を有することを特徴とする半導体集積回路装置。
【請求項５】
請求項１記載の半導体集積回路装置において、
前記メモリ内の命令セットは前記演算器を使用する命令と前記演算器を使用しない命令とを有し、
前記演算器を使用する命令の場合は、前記命令を複数回実行してその演算結果を前記比較器で比較して前記演算器の誤り検出をし、前記演算器を使用しない命令の場合は、１回だけ実行する手段を有することを特徴とする半導体集積回路装置。
【請求項６】
請求項１記載の半導体集積回路装置において、
前記第１の演算器とは別の構造である第２の演算器と、第２のレジスタと、第２の比較器とを有し、
前記高信頼モードにおいて、前記第１の演算器が稼動中で前記第２の演算器が稼動していない場合は、前記第２の演算器で命令を実行して前記第２のレジスタに保持し、同一の命令を前記第２の演算器で再実行して前記第２のレジスタとの結果を前記第２の比較器で比較し、前記第２の演算器が稼動中で前記第１の演算器が稼動していない場合は、前記第１の演算器で命令を実行して前記第１のレジスタに保持し、同一の命令を第１の演算器で再実行して前記第１のレジスタとの結果を前記第１の比較器で比較する手段を有することを特徴とする半導体集積回路装置。
【請求項７】
コンパイル時に分岐命令の分岐遅延スロットにＮＯＰ（Ｎｏｎ−ＯＰｅｒａｔｉｏｎ）が挿入されることを検出し、前記ＮＯＰの代わりに前記分岐命令よりも前に配置された命令を選択して前記ＮＯＰに置き換えて配置する機能を有することを特徴とするコンパイラ。
【請求項８】
請求項７記載のコンパイラにおいて、
前記分岐命令よりも前に配置された第１の命令に対して、レジスタを更新することを示すレジスタ更新ビットを付加し、前記ＮＯＰに置き換えて配置された第２の命令に対して、比較器を有効にすることを示す比較有効ビットを付加する機能を有することを特徴とするコンパイラ。
【請求項９】
請求項８記載のコンパイラによって配置された命令列を実行する請求項１記載の半導体集積回路装置であって、
前記レジスタ更新ビットが付加されている前記第１の命令の演算結果を前記レジスタに保持し、前記比較有効ビットが付加されている前記第２の命令の実行結果と前記レジスタの出力とを前記比較器によって比較する手段を有することを特徴とする半導体集積回路装置。
【請求項１０】
請求項１記載の半導体集積回路装置において、
前記演算器は内部に演算の途中結果を格納する演算バッファを有し、
前記演算器に第１の命令を実行するための演算データが入力されて演算の途中結果を前記演算バッファに格納する前半演算サイクルと、前記演算バッファから出力される演算の途中結果を元に演算結果を求めて出力する後半演算サイクルが処理され、前記後半演算サイクルと同じサイクルにおいて前記演算器に前記第１の命令と同一の第２の命令を実行するための演算データが入力されて第２の前半演算サイクルが処理され、続けて第２の後半演算サイクルが処理される手段を有することを特徴とする半導体集積回路装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体集積回路装置及びコンパイラに関し、特に高信頼性を実現する機構を搭載する半導体集積回路装置等に適用して有効な技術に関するものである。
【背景技術】
【０００２】
自動車におけるエックス・バイ・ワイヤ（Ｘ−ｂｙ−Ｗｉｒｅ）技術や、より高速で安全な鉄道システムなど、電子機器による制御システムが必要不可欠な社会において、それらシステムの中核を成すＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）などの半導体集積回路装置に要求される事項としては、大量生産を実現する低コスト化、環境問題に対する低消費電力化、そして更なる安全性を実現する高信頼化が求められている。
【０００３】
従来、半導体集積回路装置の信頼性を高める技術として、システムを空間的もしくは時間的に冗長し、両者の出力結果を比較して不一致を検出する冗長化方式が多数提案され、
特許文献１や、非特許文献１などに記載されたものがある。
【０００４】
特許文献１に記載された情報処理装置では、同一の構成である演算器の組の演算結果を、比較器で比較する、いわゆる多重系のシステムとなっている。
【０００５】
一方、演算器を複数個持たせない機構で同一の演算を繰り返し行うことで、演算器に発生した故障を検出する方式として代表的なものが、非特許文献１に示されている。
【０００６】
この例では、１つの演算器で、演算結果を保持するレジスタと、演算器の入力部分と出力部分にシフタを設けた構成とし、１回目の演算では入力データをシフトさせずにそのまま演算器で演算し、演算結果をシフトさせずにレジスタに保持する。
【０００７】
２回目の演算では、１回目の演算と同一の入力データをそれぞれ入力部分のシフタでシフトさせてから演算器で演算を行い、演算前とは逆方向に演算結果を出力部分のシフタによりシフトさせ、１回目の演算結果と２回目の演算結果を比較器で比較することで演算器に発生した故障を検出し、信頼性を高めている。
【特許文献１】特開昭５７−２０８４７号公報
【非特許文献１】ジャナク・パテル（Ｊａｎａｋ  Ｈ．  Ｐａｔｅｌ）、レオナ・ファン（Ｌｅｏｎａ  Ｙ．  Ｆｕｎｇ）、「コンカレント・エラー・ディテクション・イン・エイ・エル・ユーズ・バイ・リコンピューティング・ウィズ・シフティド・オペランズ（Ｃｏｎｃｕｒｒｅｎｔ  Ｅｒｒｏｒ  Ｄｅｔｅｃｔｉｏｎ  ｉｎ  ＡＬＵ'ｓ  ｂｙ  Ｒｅｃｏｍｐｕｔｉｎｇ  ｗｉｔｈ  Ｓｈｉｆｔｅｄ  Ｏｐｅｒａｎｄｓ）」、アイ・イー・イー・イー・トランザクションズ・オン・コンピューターズ（ＩＥＥＥ  Ｔｒａｎｓａｃｔｉｏｎｓ  ｏｎ  Ｃｏｍｐｕｔｅｒｓ）、（米国）、アイ・イー・イー・イー（ＩＥＥＥ）、１９８２年７月、第３１巻、第７号、ｐ．５８９−５９５
【発明の開示】
【発明が解決しようとする課題】
【０００８】
ところで、前記のような半導体集積回路装置の高信頼性技術について、本発明者が検討した結果、以下のようなことが明らかとなった。
【０００９】
同一の演算器を複数個持たせる構成の半導体集積回路装置では、複数の演算器による演算結果の不一致を比較器で検出することで、いずれかの演算器に発生した故障を検出することは可能だが、本来ならば１つの演算器で演算して結果を得るところを、検算用として別の演算器を持つ構成のため、半導体集積回路装置の中で演算器を構成している物量すなわちトランジスタ数が倍加し、製造コストや消費電力の増大につながる問題があった。
【００１０】
一方、演算器を複数個持たせずに同一の演算器で繰り返し演算を実行する非特許文献１に示されている例では、演算器を多数個持つ構成と比較してトランジスタ数の増加を抑えることができ、演算器に発生する一時的誤作動や永久故障を検出することが可能である。しかし、常に同一の演算を２回実行する構成のために命令実行性能の著しい低下を避けられないので、近年のマイクロプロセッサ等の半導体集積回路装置に求められる高速動作を実現することが難しい。また、演算を２回実行するモードと１回実行するモードを切り替えて使用することができないという問題があった。
【００１１】
そこで、本発明の目的は、低コスト、高信頼性、高速動作が求められる半導体集積回路装置において、ノイズなどの外部要因による演算器の一時的誤作動や永久故障を検出することができ、トランジスタの物量増加を抑えて製造コストや消費電力を削減し、かつ命令実行性能の低下を防ぐことができる技術を提供することにある。
【００１２】
本発明の前記並びにその他の目的と新規な特徴は、本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１３】
本願において開示される発明のうち、代表的なものの概要を簡単に説明すれば、次のとおりである。
すなわち、演算器と、前記演算器への入力データを第１の方向にシフトさせる第１のシフタと、前記演算器の演算結果を第２の方向にシフトさせる第２のシフタと、前記演算器の演算結果を保持するレジスタと、前記演算器の演算結果と前記レジスタから出力される値とを比較する比較器と、を有する半導体集積回路装置において、本発明による半導体集積回路装置は、命令を保持するメモリと、前記メモリから命令を読み出す命令フェッチ部と、前記メモリから読み出された命令を保持する命令バッファと、前記メモリから読み出された命令を解釈する命令デコード部と、前記命令デコード部の解釈結果を基に演算データを出力するレジスタファイルと、前記メモリ内の命令セットの中に、通常モードから高信頼モードへ遷移する開始命令と、前記高信頼モードから前記通常モードへ遷移する終了命令と、を有し、前記命令フェッチ部が前記メモリから読み出した命令が前記開始命令であった場合は前記高信頼モードとなり、前記開始命令が実行されると前記終了命令が実行されるまで、前記命令フェッチ部は、次のサイクルにおいて次の命令を前記メモリから読み出さずに前記命令バッファに保持されている命令を前記命令デコード部へ出力し、前記演算器で同一の命令を複数回実行し続けて前記比較器で演算結果の比較を行い、前記終了命令実行後は通常モードとなり、前記命令フェッチ部は次のサイクルにおいて次の命令を前記メモリから読み出して前記命令デコード部へ出力し、前記比較器は、前記演算結果の比較を行わないことにより、命令実行性能の低下を防ぐものである。
【００１４】
また、本発明によるコンパイラは、コンパイル時に分岐命令の分岐遅延スロットにＮＯＰ（Ｎｏｎ−ＯＰｅｒａｔｉｏｎ）が挿入されることを検出し、前記ＮＯＰの代わりに前記分岐命令よりも前に配置された命令を選択して前記ＮＯＰに置き換えて配置することにより、演算器の誤り検出を可能とするものである。
【発明の効果】
【００１５】
本願において開示される発明のうち、代表的なものによって得られる効果を簡単に説明すれば、以下のとおりである。
【００１６】
（１）同一の演算器を複数個持たなくても演算器の一時的誤作動及び永久故障を検出する半導体集積回路装置において、高信頼モードと通常モードに遷移するためのモード切替構造を持ち、モード切替には専用命令や専用の信号を利用でき、必要なときだけ同一の命令を２回実行することで、半導体集積回路装置の命令実行性能の低下を防ぐことができ、かつ製造コストの削減と低消費電力と高信頼を実現できる。
【００１７】
（２）同一の演算器で同一の命令を２回以上実行しながらも、単位時間当たりの命令実行回数が半分以下となることのない半導体集積回路装置を得ることができる。
【００１８】
（３）本発明の半導体集積回路装置を利用することで、低コスト、低消費電力、高性能かつ信頼性の高い自動車システム、鉄道システム、その他産業用システムを実現することが可能になる。
【発明を実施するための最良の形態】
【００１９】
同一の演算器を複数個持たせてトランジスタ数と消費電力を倍加させてしまう構成を採用することなく演算器の誤り検出を可能とし、かつ命令実行性能の低下を防ぐ半導体集積回路装置を実現した。
【００２０】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。なお、実施の形態を説明するための全図において、同一部材には原則として同一の符号を付し、その繰り返しの説明は省略する。
【００２１】
（実施の形態１）
図１は、本発明の実施の形態１における、高信頼性を一つの演算器で実現する半導体集積回路装置の構成例を示すブロック図である。
【００２２】
まず、図１により、本実施の形態１による半導体集積回路装置の構成の一例を説明する。本実施の形態の半導体集積回路装置は、例えば、命令フェッチステージ（ＩＦ）、命令デコードとレジスタ読み出しステージ（ＩＤ）、演算及び演算結果保持ステージ（ＥＸ）、メモリアクセス及び演算比較ステージ（ＭＡ）、レジスタ書き込みステージ（ＷＢ）の５つのパイプラインステージなどから構成されている。
【００２３】
命令フェッチステージ（ＩＦ）は、命令メモリ４、命令フェッチ部５などからなり、命令フェッチ部５から命令メモリ４にフェッチ制御信号１０８が入力し、命令メモリ４から命令フェッチ部５に命令データ１０９が入力し、命令フェッチ部５から命令データ１１０が出力され、命令フェッチ部５から高信頼モード信号１０５が出力されている。
【００２４】
命令デコードとレジスタ読み出しステージ（ＩＤ）は、命令デコード部６、レジスタファイル７などからなり、命令フェッチ部５から命令デコード部６に命令データ１１０が入力し、命令デコード部６からレジスタファイル７にアドレス信号１１１が入力し、レジスタファイル７にレジスタ格納データ１０７が入力し、レジスタファイル７から入力データＡ（１０１）と入力データＢ（１０２）が出力されている。
【００２５】
演算及び演算結果保持ステージ（ＥＸ）は、シフタ４０１，４０２，４０３、演算器１、レジスタ２などからなり、シフタ４０１，４０２に入力データＡ（１０１）と入力データＢ（１０２）がそれぞれ入力し、シフタ４０１，４０２，４０３に高信頼モード信号１０５がそれぞれ入力し、シフタ４０１，４０２から演算器１にシフトデータ（入力データ７０１，７０２）がそれぞれ入力し、演算器１からシフタ４０３に演算結果７０３が入力し、シフタ４０３からレジスタ２に演算結果１０４が入力し、レジスタ２から演算結果１０３が出力されている。
【００２６】
メモリアクセス及び演算比較ステージ（ＭＡ）は、比較器３、データメモリ８などからなり、比較器３に演算結果１０３，１０４と高信頼モード信号１０５が入力し、データメモリ８に演算結果１０３が入力し、比較器３から比較結果１０６が出力し、データメモリ８からレジスタ格納データ１０７が出力されている。
【００２７】
また、高信頼モード信号１０５は、高信頼モードと通常モードとを切り替える１ビットの信号であり、“１”のときに高信頼モードが有効、“０”のときに高信頼モードが無効である（通常モードである）ことを指定する。
【００２８】
また、比較結果１０６の値が“０”のときは演算結果１０３と１０４が同じ値であり、比較結果１０６の値が“１”のときは演算結果１０３と１０４が異なる値であることを示す。
【００２９】
図１のＩＦステージにおいて、実行される命令は命令メモリ４に予め保持されており、命令フェッチ部５から出力されるフェッチ制御信号１０８に基づいて、次に実行する命令データ１０９が命令フェッチ部５に出力される。
【００３０】
図２は、図１の半導体集積回路装置で実行されるアセンブラプログラムの例であり、アドレス５０００番地で指定された命令（ＡＤＤ  ＃５，＠（４，Ｒ０））から５０４０番地で指定された命令（ＡＤＤ  Ｒ１，Ｒ２）までが順に実行されるものとする。
【００３１】
ここで、５０１２番地で指定された命令（ＨＩＳＴＡＲＴ）は、通常モードから高信頼モードへの遷移を行う命令であり、５０２８番地で指定された命令（ＨＩＥＮＤ）は、高信頼モードから通常モードへの遷移を行う命令であって、ＨＩＳＴＡＲＴとＨＩＥＮＤで挟まれた命令は、２回繰り返し実行されて比較されることになる。
【００３２】
図３に、このＨＩＳＴＡＲＴとＨＩＥＮＤを命令セットに持っている場合の命令フェッチ部５の詳細な回路構成の例を示す。
【００３３】
図３に示した命令フェッチ部５には、高信頼モード信号１０５に基づいて命令フェッチ制御を行うフェッチ制御部５１、高信頼モード信号を出力する高信頼命令検出部５４、フェッチされた命令を保持しておく命令バッファ５２、フェッチ制御部５１の出力する命令選択信号５０２に基づいて命令を選択して出力する命令セレクタ５３が含まれている。
【００３４】
フェッチ制御部５１および高信頼命令検出部５４の制御動作は、ハードウェア記述言語Ｖｅｒｉｌｏｇ−ＨＤＬ（Ｈａｒｄｗａｒｅ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ）によって表しているフェッチ制御論理５７および高信頼命令検出論理５８とフリップフロップ５５、５９を使って行われ、フェッチ制御信号１０８の値が“１”のときは、フェッチ制御部５１は命令メモリ４から命令データ１０９を読み出さない。
【００３５】
命令セレクタ５３は、命令選択信号５０２の値が０のときに命令データ１０９を選択し、命令選択信号５０２の値が“１”のときに命令バッファの命令データ５０１を選択する。
【００３６】
高信頼命令検出論理５８によって、命令メモリ４から読み出された命令データ１０９が命令ＨＩＳＴＡＲＴであると検出された場合は次モード信号５０６の値を“１”にしてフリップフロップ５９で保持し続け、高信頼モード信号１０５の値を“１”にし続けて高信頼モードを有効にし、命令データ１０９が命令ＨＩＥＮＤであると検出された場合は次モード信号５０６の値を“０”にしてフリップフロップ５９で保持し続け、高信頼モード信号１０５の値を“０”にし続けて高信頼モードを無効にする。
【００３７】
高信頼モード信号１０５の値が“０”で通常モードである場合、フェッチ制御部５１はフェッチ制御信号１０８、命令選択信号５０２、次状態信号５０４の値をすべて“０”として出力し続けており、パイプライン動作の各サイクルにおいて実行する命令データ１０９を命令メモリ４から読み出し、命令セレクタ５３によって命令データ１０９が選択され、命令データ１１０として出力する。
【００３８】
高信頼モード信号１０５の値が“１”で高信頼モードである場合、フェッチ制御部５１はフリップフロップ５５から出力される状態信号５０５の値が“０”のときはフェッチ制御信号１０８、命令選択信号５０２、次状態信号５０４の値をそれぞれ値“１”にして出力し、状態信号５０５の値が“１”のときはそれぞれ“０”にして出力することで、パイプライン動作の１サイクルおきにフェッチ制御信号１０８の値を“０”と“１”に切り替え、また、１サイクルおきに命令選択信号５０２の値を“０”と“１”に切り替える。
【００３９】
これらのことにより、高信頼モードでは、実行する命令データ１０９が命令メモリ４から１サイクルおきに読み出され、１サイクル目では読み出された命令データ１０９が命令セレクタ５３から命令データ１１０として出力されかつ命令バッファ５２に保持され、２サイクル目では命令選択信号５０２が切り替わって命令バッファ５２に保持されていた命令データ５０１が命令セレクタ５３により選択され、命令データ１１０として出力される。
【００４０】
図１のＩＤステージにおいて、ＩＦステージから出力された命令データ１１０は命令デコード部６により解読され、読み出すアドレス信号１１１に変換されてレジスタファイル７に入力され、命令演算のための入力データＡ（１０１）と入力データＢ（１０２）として、シフタ４０１，４０２を介して演算器１に対して出力される。
【００４１】
ＥＸステージにおいて、入力データＡ（１０１）と入力データＢ（１０２）はそれぞれシフタ４０１と４０２によって左に１ビットシフトされ、それぞれシフトデータ（入力データ）７０１と７０２となって演算器１に入力されて演算が実行され、その演算結果７０３はシフタ４０３によって右に１ビットシフトされて演算結果１０４となり、演算結果１０４はレジスタ２で保持される。
【００４２】
シフタ４０１と４０２は同一の構成であり、その詳細を示したものが図４である。
【００４３】
図４に示したシフタ４０１には、高信頼モード信号１０５に基づいてシフト制御を行うシフト制御部４０４、入力されたデータを１ビット左にシフトする左シフト制御論理４８が含まれている。
【００４４】
シフト制御部４０４の制御動作は、Ｖｅｒｉｌｏｇ−ＨＤＬによって表しているシフト制御論理４７とフリップフロップ４５を使って行われる。
【００４５】
高信頼モード信号１０５の値が“０”で通常モードである場合、シフト制御論理４７はシフト制御信号４１１と次状態信号４１２の値を常に“０”として出力するので、左シフトは行われず、左シフト制御論理４８からは３２ビットの入力データ１０１に１ビットの値“０”を最上位に付加した３３ビットのシフトデータ７０１が出力される。
【００４６】
高信頼モード信号１０５の値が“１”で高信頼モードである場合、シフト制御論理４７はフリップフロップ４５から出力される状態信号４１３の値が“０”のときはシフト制御信号４１１に値“０”を、次状態信号４１２に値“１”を出力し、状態信号３０５の値が“１”のときはシフト制御信号４１１に値“１”を、次状態信号４１２に値“０”を出力することで、パイプライン動作の１サイクルおきにシフト制御信号４１１の値を“０”と“１”とに切り替える。
【００４７】
左シフト制御論理４８において、シフト制御信号４１１の値が“１”のとき左シフトが行われ、３２ビットの入力データ１０１に１ビットの値“０”を最下位に付加した３３ビットのシフトデータ７０１が出力される。
【００４８】
シフタ４０３は、シフタ４０１や４０２と比較して、左シフト制御論理４８が右に１ビットシフトさせる制御に変わる部分のみが異なる構成であり、その詳細は省略する。
【００４９】
図１のＭＡステージにおいて、レジスタ２に保持された演算結果１０３は、データメモリ８に入力されかつ比較器３へも入力される。
【００５０】
また、ＭＡステージでは、１サイクル前に実行した命令の次の命令の演算結果１０４も比較器３に入力され、比較器３において演算結果１０３と演算結果１０４の比較処理が行われる。
【００５１】
図５に、比較器３の詳細な構成を示す。
【００５２】
図５で示した比較器３には、高信頼モード信号１０５に基づいて比較制御を行う比較制御部３１、入力信号の排他的論理和を１ビットにして出力するゲート３２、入力信号の論理積を１ビットにして出力するゲート３３が含まれている。
【００５３】
この比較器３において、演算結果（入力データ）１０３と演算結果（入力データ）１０４は、ゲート３２により、２つの入力データが同じ値であれば不一致信号３０１の値が“０”になり、２つの入力データが異なる値であれば不一致信号３０１の値が“１”になる。
【００５４】
比較制御部３１の制御動作は、Ｖｅｒｉｌｏｇ−ＨＤＬによって表している比較制御論理３７とフリップフロップ３５を使って行われる。
【００５５】
高信頼モード信号１０５の値が“０”で通常モードである場合、比較制御論理３７は、比較制御信号３０２と次状態信号３０４の値を常に“０”として出力するため、比較結果１０６の値は常に“０”になる。
【００５６】
高信頼モード信号１０５の値が“１”で高信頼モードである場合、比較制御論理３７はフリップフロップ３５から出力される状態信号３０５の値が“０”のときは比較制御信号３０２に値“０”を、次状態信号３０４に値“１”を出力し、状態信号３０５の値が“１”のときは比較制御信号３０２に値“１”を、次状態信号３０４に値“０”を出力することで、パイプライン動作の１サイクルおきに比較制御信号３０２の値を“０”と“１”に切り替える。
【００５７】
これにより、高信頼モードでは、演算結果１０３と演算結果１０４が異なる値の場合に不一致信号３０１の値が“１”になり、かつ比較制御信号３０２の値が“１”の場合に比較結果１０６に値“１”が出力され、演算結果１０３と演算結果１０４が一致していなかったことが分かる。
【００５８】
図１に示した半導体集積回路装置の命令メモリ４に図２のアセンブラプログラムを予め書き込んでおき、回路を動作させて命令を実行させていくときのパイプライン動作を示したものが、図６と図７である。
【００５９】
図６は、図２のアセンブラプログラムにおいて、５００８番地で指定される命令（ＳＴ  Ｒ１１，＠Ｒ６）から５０２０番地で指定される命令（ＭＯＶ  Ｒ３，Ｒ４）までの４命令のパイプライン処理を示している。
【００６０】
クロックサイクルｂにおいて、２重枠で囲ったＩＦステージが通常モードから高信頼モードに遷移する開始命令（ＨＩＳＴＡＲＴ）を検出した部分で、高信頼モード信号１０５の値を“０”から“１”に切り替え、クロックサイクルｃの立ち上がりから命令選択信号５０２の切り替えを開始して命令フェッチ部５による命令フェッチ制御を始め、命令ＨＩＳＴＡＲＴの次の命令（ＡＤＤ  Ｒ１，Ｒ２）のＭＡステージであるクロックサイクルｆからシフト制御信号４１１と比較制御信号３０２の切り替えを開始して、比較器３による演算結果の比較処理を始める。
【００６１】
命令ＨＩＳＴＡＲＴの次の命令（ＡＤＤ  Ｒ１，Ｒ２）以降の命令については、１つの演算器１で同一の演算実行が２回ずつ繰り返されていく。
【００６２】
また、図７は、図２のアセンブラプログラムにおいて、５０２４番地で指定された命令（ＭＯＶ  Ｒ５，＠Ｒ６）から５０４０番地で指定された命令（ＡＤＤ  Ｒ１，Ｒ２）の５命令のパイプライン処理を示している。
【００６３】
命令（ＭＯＶ  Ｒ５，＠Ｒ６）が実行される前に高信頼モード開始命令（ＨＩＳＴＡＲＴ）が実行されているために、命令（ＭＯＶ  Ｒ５，＠Ｒ６）は２回実行されて比較器３による演算結果の比較が開始される。
【００６４】
クロックサイクルｃにおいて、２重枠で囲ったＩＦステージが、高信頼モードから通常モードに遷移する終了命令（ＨＩＥＮＤ）を検出した部分で、高信頼モード信号１０５の値を“１”から“０”に切り替え、クロックサイクルｄの立ち上がりから命令選択信号５０２の切り替えを止めて命令フェッチ部５による命令フェッチ制御を終了し、命令ＨＩＥＮＤの前の命令（ＭＯＶ  Ｒ５，＠Ｒ６）のＭＡステージが終了したクロックサイクルｆから比較制御信号の３０２の切り替えを止めて比較器３による演算結果の比較処理を終了する。
【００６５】
命令ＨＩＥＮＤの次の命令（ＬＤ  Ｒ１０，＠Ｒ５）以降の命令については、１つの演算器で演算実行が１回ずつ繰り返されていく。
【００６６】
このように、図２に示したアセンブラプログラムは、高信頼モード開始命令（ＨＩＳＴＡＲＴ）と高信頼モード終了命令（ＨＩＥＮＤ）に挟まれた部分の命令のみが２回実行される。
【００６７】
ところで、図１において、高信頼モード信号１０５の値が“１”である場合、演算結果１０３と１０４はそれぞれ、同一の命令を繰り返して実行された演算結果の１回目と２回目であるため、比較結果１０６の値として“１”が出力された場合は、演算器１の内部で何らかの誤作動が起こったと考えられ、この比較結果１０６を元に、回路に対して割り込み処理などを発生させ、この回路を使っているシステムを安全に停止させる処理や安全に再起動させる処理に移行することが可能となる。
【００６８】
比較結果１０６の値が“０”の間は、演算器１は特に問題なく動作し続けていることを示しており、レジスタ格納データ１０７をレジスタファイル７に保持して、以降に続く命令を順次実行して処理を続けていく。
【００６９】
これらのことにより、同一の演算器を複数持たずに１つの演算器で同一の命令を複数回実行して演算器の故障を検出する半導体集積回路装置において、命令セットに通常モードから高信頼モードへ遷移する開始命令（ＨＩＳＴＡＲＴ）と高信頼モードから通常モードに遷移する終了命令（ＨＩＥＮＤ）を持たせることで、ソフトウェア的に高信頼モードと通常モードを切り替えて動作させることができる。また、プログラム作成者が必要と判断したアセンブラプログラムのみを２回実行することができるため、すべての命令を２回実行するような場合と比較して命令実行性能を高めることができ、回路のトランジスタ数の増加を押さえ、回路で消費される電力を削減することが可能になる。
【００７０】
また、図１では命令メモリ４とデータメモリ８を分けて記載したが、同一のメモリに命令とデータを書き込む構成としても良い。
【００７１】
また、図１に示した各シフタは、シフタ４０１，４０２を右シフト、シフタ４０３を左シフトする構成にしたり、データをシフトさせるビット数も１ビットではなく２ビット以上に拡張したりしても良い。
【００７２】
更に、図８は、本発明における高信頼モードと通常モードを切り替える手段について、半導体集積回路装置内に制御レジスタ９を持たせることで実現するための一例を示したものである。
【００７３】
図８において、制御レジスタ９は高信頼モードを切り替えるビット９１を有し、ビット９１の出力が高信頼モード信号１０５となっている。
【００７４】
制御レジスタ９に入力されているレジスタ書き込みデータ９０１の値が変化し、ビット９１を含む制御レジスタ９に保持されている値が書き換えられることで、高信頼モード信号１０５の値を“１”と“０”に切り替えることができる。
【００７５】
これらのことにより、高信頼を実現する半導体集積回路装置において、高信頼モードと通常モードを切り替えるための専用の入力ピンを持たせたり、あるいは専用の切替命令を持たせたりするような構成でなくとも、ソフトウェア的に高信頼モードと通常モードを切り替えて動作させることが可能となる。
【００７６】
次に、本発明における１つの演算器で同一の演算を２回繰り返して行う方式により、命令実行性能の低下を防ぐ別の手段の一例について説明する。
【００７７】
図９は、図１に示した半導体集積回路装置のパイプライン処理を示したものであるが、高信頼モード時に半導体集積回路装置へ供給するクロック信号を通常モードの２倍の速度にすることで、高信頼モード時の命令実行性能を通常モード時と同等に保つ仕組みを示している。
【００７８】
図９において、クロックサイクルａにおいて命令１から命令５がそれぞれＷＢ、ＭＡ、ＥＸ、ＩＤ、ＩＦの各ステージで実行されており、高信頼モード信号の値が“１”になって高信頼モードに遷移したことをクロックサイクルｂの立ち上がりで検出する。
【００７９】
高信頼モードを検出したクロックサイクルｂからクロックサイクルeまでは、フェッチ制御部５１（図２）がフェッチ制御信号１０８の値を“１”にして次にフェッチすべき命令６をフェッチせず、パイプラインに残っている命令２から命令５の実行が終了するまで命令６をフェッチしない制御を行う。
【００８０】
高信頼モードを検出した次のクロックサイクルｃからは、回路に供給されるクロック信号の周波数の速度を２倍にして、パイプラインに残っている命令の実行を行う。
【００８１】
パイプラインに残っていた命令の実行がすべて終了してパイプラインが空になったクロックサイクルｆにおいて、フェッチ制御部５１がフェッチ制御信号１０８の値を“０”にし、また、命令選択信号５０２の切り替えを開始し、シフト制御部４０４（図３）がシフト制御信号４１１の切り替えを開始し、比較制御部３１（図５）が比較制御信号３０２の切り替えを開始し、クロックサイクルｆにおいてフェッチされた命令６は次のクロックサイクルｇでは命令バッファ５２（図２）に保持されていた命令６が命令６’として再実行され、以降のクロックサイクルでは図７で説明したパイプライン処理と同様に同一の命令が２回ずつ処理されていく。
【００８２】
高信頼モードから通常モードへ遷移する場合も同様に、パイプラインで実行されている命令をすべて実行し終わった後、命令を１回ずつ実行する処理に移れば良い。
【００８３】
これらのことにより、高信頼モード時の命令実行性能を通常モード時と同等に保つことができ、また、信頼性が重要視される期間のみ高信頼モード信号を有効とし、信頼性が重要視されない期間は高信頼モードを無効にして動作周波数を下げることで、回路全体の消費電力を小さくすることが可能になる。
【００８４】
更に、本発明における１つの演算器で同一の演算を２回繰り返して行う方式により、命令実行性能の低下を防ぐ別の手段の一例について説明する。
【００８５】
図１０は、図１に示した半導体集積回路装置のパイプライン処理を示したものであるが、クロック１と、クロック１の２倍の速度で動作するクロック２を有し、ＥＸステージに配置される演算器１とレジスタ２とシフタ４０１，４０２，４０３にのみクロック２が供給され、ＩＦステージ、ＩＤステージ、ＭＡステージ、ＷＢステージに配置されるすべてのリソースにはクロック１が供給されているものである。
【００８６】
命令１について、ＩＦステージとＩＤステージによって演算用の入力データＡ（１０１）と入力データＢ（１０２）が決定するが、ＥＸステージはＩＤステージの２倍の周波数で動作するので、ＥＸステージをＥＸステージの２倍の周波数で動作するＥＸ１ステージとＥＸ２ステージに分けると、ＥＸ１ステージで１回目の演算を行ってレジスタ２に保持し、ＥＸ２ステージで２回目の演算を行うことができる。
【００８７】
ＭＡステージでは、レジスタ２に保持されているＥＸ１ステージの演算結果１０３と、ＥＸ２ステージの演算結果１０４を比較器３で比較して不一致を検出することで、演算器の誤作動を検出することができる。
【００８８】
命令２から命令６についても同様に、２回の演算と比較をしながら処理が行われていく。
【００８９】
これらのことにより、同一の演算を２回ずつ実行して結果を比較しながらも、命令実行性能を一定に保つことができ、また高い動作周波数で動作する部分をＥＸステージに配置されるリソースに限定することから、回路全体の消費電力を小さくすることが可能になる。
【００９０】
また、高信頼命令検出部５４（図３）の構造を変更し、演算器１で演算する命令と演算しない命令を予め決めておき、演算器１で演算する命令のみ２回繰り返して実行させる制御を行うようにした命令フェッチ部５の構成を図１１に示す。
【００９１】
図１１は、図３に示した命令フェッチ部５内の高信頼命令検出部５４の代わりに演算器命令検出部６７を追加したものである。
【００９２】
演算器命令検出部６７の制御動作は、Ｖｅｒｉｌｏｇ−ＨＤＬによって表している演算器命令検出論理６８とフリップフロップ６９を使って行われ、高信頼モード信号１０５はフリップフロップ６９から出力され、命令データ１０９は演算器命令検出論理６８と命令バッファ５２と命令セレクタ５３に入力される。
【００９３】
この命令フェッチ部５では、命令メモリ４から読み出された命令データ１０９がＮＯＰ（Ｎｏｎ−ＯＰｅｒａｔｉｏｎ）命令であった場合に、次モード信号６２１の値を“０”にし、ＮＯＰ命令以外の命令であった場合には次モード信号６２１の値を“１”にする制御を行っており、次モード信号６２１はフリップフロップ６９によって１サイクル後に値の変化がフェッチ制御部５１に伝わる。
【００９４】
図１１のフェッチ制御部５１は図３に示したものと同じ構造をしており、命令データ１０９がＮＯＰ命令である場合、次のサイクルで命令選択信号５０２の値が“０”になるので、命令セレクタ５３では前記ＮＯＰ命令の次の命令データ１０９が命令セレクタ５３によって選択される。
【００９５】
命令データ１０９がＮＯＰ命令以外の命令であった場合、次のサイクルで命令選択信号５０２の値が“１”になるので、命令セレクタ５３では命令バッファ５２に格納されている命令データ５０１が選択される。
【００９６】
図１２は、図１に示した半導体集積回路装置の命令メモリ４に書き込んで実行させる命令列の命令実行順を示した一例であるが、７００４番地、７０２０番地、７０２８番地、７０３２番地で指定された各ＮＯＰ命令のみが１回だけ実行され、それ以外の命令は２回実行され、演算結果が比較されていることを表している。
【００９７】
これらのことにより、演算器を使用して実行する命令と演算器を使用しないで実行する命令を予め分けた仕様に基づいて演算器命令検出論理を実装することで、演算器を使用しない命令に関しては１回だけ実行するのみで済むため、全ての命令を複数回実行して演算結果を比較するような従来例に比べ、命令実行性能の低下を防ぐことが可能になる。
【００９８】
また、図１１では演算器で実行しない命令をＮＯＰ命令のみに指定しているが、その他の演算器で実行しない命令についても同様に制御論理に記述を加えることで実現できる。
【００９９】
（実施の形態２）
次に、図１３により、本発明における、複数の同一の演算器を持つことなく高信頼性を実現する半導体集積回路装置について、別の実施の形態の一例を説明する。
【０１００】
図１３は、本実施の形態３による半導体集積回路装置の構成を示す図である。本実施の形態３による半導体集積回路装置は、異なる演算器Ａ（６１）と演算器Ｂ（６２）を持つものである。また、比較器Ａ（６５）と比較器Ｂ（６６）は、前記実施の形態１の図５に示したような一例で構成されている。
【０１０１】
演算器Ａ（６１）に入力データ１（６０１）と入力データ２（６０２）が入力され、演算結果６０７がレジスタＡ（６３）に一旦保持され、次のサイクルにおいては演算結果６０７と前サイクルの演算結果６０５が比較器６５において比較され、演算器Ａ（６５）の比較結果６０９として出力される。
【０１０２】
演算器Ｂ（６２）についても同様に、演算器Ｂ（６２）に入力データ３（６０３）と入力データ４（６０４）が入力され、演算結果６０８がレジスタＢ（６４）に一旦保持され、次のサイクルにおいては演算結果６０８と前サイクルの演算結果６０６が比較器６６において比較され、演算器Ｂ（６６）の比較結果６１０として出力される。
【０１０３】
ここで、演算器Ａ（６１）と演算器Ｂ（６２）はそれぞれ独立に動作し、演算器Ａ（６１）と演算器Ｂ（６２）が共に動作中の期間と、演算器Ａ（６１）が動作中で演算器Ｂ（６２）が動作していないアイドル中である期間と、演算器Ａ（６１）がアイドル中で演算器Ｂ（６２）が動作中の期間が存在する構成である。
【０１０４】
演算器Ａ（６１）が動作中で、演算器Ｂ（６２）がアイドル中である場合、演算器Ｂ（６２）への入力データ３（６０３）と入力データ４（６０４）に２サイクル続けて同じ値を入力し、演算器Ｂ（６２）で２サイクル続けて同じ演算を行う。こうすることにより、１サイクル目の演算結果６０８がレジスタＢ（６４）に保持され、２サイクル目の演算結果６０８とレジスタＢ（６４）の出力である演算結果６０６を比較器６６によって比較した演算器Ｂ（６２）の比較結果６１０が不一致である場合、演算器Ｂ（６２）に起こった誤作動を検出することができる。
【０１０５】
また逆に、演算器Ｂ（６２）が動作中で、演算器Ａ（６１）がアイドル中である場合、演算器Ａ（６１）への入力データ１（６０１）と入力データ２（６０２）に２サイクル続けて同じ値を入力し、演算器Ａ（６１）で２サイクル続けて同じ演算を行うことにより、１サイクル目の演算結果６０７がレジスタＡ（６３）に保持され、２サイクル目の演算結果６０７とレジスタＡ（６３）の出力である演算結果６０５を比較器６５によって比較した演算器Ａ（６１）の比較結果６０９が不一致である場合、演算器Ａ（６１）に誤作動が起こったことを検出することができる。
【０１０６】
これらのことにより、同一の演算器を複数持つような構成でない半導体集積回路装置において、各演算器に起こった誤作動を検出することができ、演算器がアイドル中に演算器の誤作動検出用の演算を行うことから、回路全体の命令実行性能の低下を抑えることが可能になる。
【０１０７】
（実施の形態３）
図１４（ａ）および図１４（ｂ）は、図１の半導体集積回路装置で実行されるアセンブラプログラムの例を示したものである。アドレス６０００番地で指定された命令（ＡＤＤ  ＃５，＠（Ｒ１，４））から６０６８番地で指定された命令（ＮＯＰ）までの１８命令が上から順に実行されるものとする。
【０１０８】
この図１４において、（ＬＯＯＰ）と（ＥＮＤＰ）はラベルであり、アセンブラプログラムの中で分岐先を表す印として用いられ、（ＬＯＯＰ）は６０４８番地で指定された命令（ＢＴ  ＬＯＯＰ）で使用され、（ＥＮＤＰ）は６０２８番地で指定された命令（ＢＲＡ  ＥＮＤＰ）で使用されている。
【０１０９】
図１４中の命令において、四角で囲まれた命令は遅延分岐命令であり、遅延分岐命令の直後に命令が配置される箇所は分岐遅延スロットと呼ばれ、分岐遅延スロットに配置された命令は、前遅延分岐命令の実行結果によって、分岐するか分岐しないかの如何に関わらず実行される。
【０１１０】
例えば、６０１２番地で指定された命令（ＢＳＲ  ＬＯＯＰ）は、ラベルＬＯＯＰで指定された番地に分岐する遅延分岐命令であるが、直後の６０１６番地で指定された命令（ＳＴ  Ｒ１０，＠Ｒ５）が実行された後に、分岐先である６０３６番地で指定された命令（ＡＤＤ  ＃１，Ｒ１）が実行される。
【０１１１】
ところで、図１４に示したようなアセンブラプログラムは、Ｃ言語などに代表される高水準言語からコンパイラによって自動的に変換されて生成される場合が多く、実際のソフトウェア開発においてもコンパイラが広く利用されている。
【０１１２】
また、このようなコンパイラでは、アセンブラプログラムのコードサイズを小さくし、命令の実行性能を高めるために様々な最適化処理が行われており、前述したように、命令セットに遅延分岐命令を用意して分岐遅延スロットで命令を実行する処理も、最適化処理の一つである。
【０１１３】
しかし、コンパイラによる分岐遅延スロットの最適化処理にも限界があり、分岐遅延スロットにＮＯＰ（Ｎｏｎ−ＯＰｅｒａｔｉｏｎ）が配置されることがある。
【０１１４】
分岐遅延スロットにＮＯＰが配置されると、遅延分岐命令とＮＯＰの処理が終わってから分岐先に分岐するため、分岐遅延スロットで実行されるＮＯＰはアセンブラプログラムの実行において特に意味を持たないと言える。
【０１１５】
そこで、本実施の形態３では、分岐遅延スロットにＮＯＰが配置されたことを検出して、ＮＯＰの代わりに検算用の命令を配置することを特徴とするコンパイラを提供する。
【０１１６】
本実施の形態３のコンパイラは、まず、Ｃ言語などの高水準言語で書かれたプログラムをアセンブラプログラムに変換し、一例として図１４（ａ）の６０００番地から６０６８番地で指定された命令列であるアセンブラプログラムを得たとする。
【０１１７】
次に、このコンパイラでアセンブラプログラムの命令を順に解釈していくと、６０１２番地で指定された命令（ＢＳＲ  ＬＯＯＰ）、６０２８番地で指定された命令（ＢＲＡ  ＥＮＤＰ）、６０４８番地で指定された命令（ＢＴ  ＬＯＯＰ）、６０６４番地で指定された命令（ＲＴＳ）がそれぞれ遅延分岐命令であることが分かる。そして、分岐遅延スロットに当たる６０１６番地、６０３２番地、６０５２番地、６０６８番地のうち、６０３２番地、６０５２番地、６０６８番地にはＮＯＰが配置されていることが分かる。
【０１１８】
そこで、図１４（ｂ）に示すように、各分岐遅延スロットに配置されたＮＯＰの位置に、遅延分岐命令の近くに配置された命令を再配置する。
図１４（ｂ）の６０２８番地で指定された命令（ＢＲＡ  ＥＮＤＰ）の分岐遅延スロットである６０３２番地の位置には、（ＢＲＡ  ＥＮＤＰ）よりも前に配置されていた、６０２４番地で指定された命令（ＳＴ  ＠Ｒ４，Ｒ１）を再配置する。
【０１１９】
同様にして、６０５２番地と６０６８番地の分岐遅延スロットにも、遅延分岐命令の前に配置されていた命令を再配置する。
【０１２０】
この再配置の際、分岐遅延スロットに再配置した命令が実行されることによって以降の命令実行に影響を与えない命令を選択して再配置する。
【０１２１】
アセンブラプログラムを実行する半導体集積回路装置では、１つの演算器を持つ構成において、分岐遅延スロットに再配置された命令については、最初の演算結果と再配置後の演算結果を比較器で比較することで、分岐遅延スロットを利用した演算器の誤作動を検出することが可能になるが、どの命令が再配置されたのかを知る必要があるため、例えば図１５に示すような命令コード構成で実現する。
【０１２２】
図１５は、３２ビットで構成されている命令コードに対し、上位に１ビットのレジスタ更新ビットと１ビットの比較有効ビットを追加した命令コードを示している。
【０１２３】
レジスタ更新ビットは、本発明におけるコンパイラによって分岐遅延スロットに再配置された命令の元となった命令に対して付加されるもので、図１４（ａ）のアセンブラプログラムでは、６０２４番地で指定された命令（ＳＴ  ＠Ｒ４，Ｒ１）、６０４０番地で指定された命令（ＳＴ  ＠Ｒ３，Ｒ２）、６０６０番地で指定された命令（ＳＴ  Ｒ１，＠Ｒ３）の命令に対してレジスタ更新ビットが付加される。
【０１２４】
比較有効ビットは、本発明におけるコンパイラによって分岐遅延スロットに再配置された命令に対して値が付加されるもので、図１４（ａ）のアセンブラプログラムでは、６０３２番地で指定された命令（ＳＴ  ＠Ｒ４，Ｒ１）、６０５２番地で指定された命令（ＳＴ  ＠Ｒ３，Ｒ２）、６０６８番地で指定された命令（ＳＴ  Ｒ１，＠Ｒ３）の命令に対して比較有効ビットが付加される。
【０１２５】
図１６は、図１４（ｂ）で示した命令コードを実行する半導体集積回路装置の構成を示したものである。
【０１２６】
図１６の半導体集積回路装置は、図１の半導体集積回路装置と比べて、高信頼モード信号１０５の代わりに、命令フェッチ部５からレジスタ更新信号１１２が出力されてレジスタ２に入力され、また比較有効信号１１３が出力されてシフタ４０１，４０２，４０３、比較器３に入力されている。
【０１２７】
レジスタ更新信号１１２は、図１４（ｂ）で示した命令コードのレジスタ更新ビットの値を出力するものであり、比較有効信号１１３は図１４（ｂ）で示した命令コードの比較有効ビットの値を出力するものである。
【０１２８】
このレジスタ２は、レジスタ更新信号１１２が有効になったときしか演算結果１０４を保持せず、また、この比較器３は比較有効信号１１３が有効になったときしか演算結果１０４とレジスタ２に保持された値１０３の比較を行わない。
【０１２９】
また、これらのシフタ４０１，４０２，４０３は、比較有効信号１１３が有効になったときしかシフト動作を行わない。
【０１３０】
図１６に示す半導体集積回路装置では、分岐遅延スロットに再配置された命令の元となった命令がフェッチされたときにレジスタ更新信号１１２が有効となり、その演算結果１０４がレジスタ２に保持される。
【０１３１】
そして、分岐遅延スロットに再配置された命令がフェッチされたときに比較有効信号１１３が有効になり、レジスタ２に保持されていた演算結果１０３と、分岐遅延スロットに再配置された命令の演算結果１０４が比較器３で比較され、比較結果１０６によって不一致が検出された場合は演算器１に故障が発生していたことが分かる。
【０１３２】
これらのことにより、遅延分岐命令の分岐遅延スロットに再配置した命令の演算実行時に演算器の故障を検出することが可能となり、かつ、すべての命令を２回実行してその演算結果を比較することはしないため、命令実行性能を落とさないで高信頼性を実現することが可能になる。
【０１３３】
（実施の形態４）
次に、図１７に示す演算器を用いて、同一の命令を２回実行して演算器の信頼性を高めると同時に半導体集積回路装置の命令実行性能を落とさないようにするための実施の形態５について説明する。
【０１３４】
図１７に示す演算器１９は、内部に演算の途中結果１７１を格納するための演算バッファ１７を有している。
【０１３５】
この演算バッファ１７は、演算器１９への入力データ７０１および７０２の演算の途中結果を一旦保持するもので、この間をＥＸａステージと呼ぶことにする。
【０１３６】
演算の途中結果１７２をもとに演算の続きが行われて演算結果７０３が得られ、この間をＥＸｂステージと呼ぶことにする。
【０１３７】
図１７に示したように、入力データ７０１および７０２の演算を行うＥＸステージは、ＥＸａステージとＥＸｂステージを連結したものとして表される。
【０１３８】
また、図１７の比較器１８は、演算バッファ１７に保持されている１サイクル前の演算の途中結果１７２と、現サイクルの演算の途中結果１７１を比較し、値が不一致であれば途中演算比較結果１１４の値を“１”にし、一致していれば値を“０”にする動作を行い、途中演算結果の不一致を検出できる。
【０１３９】
図１８に、この演算器１９を用いて半導体集積回路装置を構成した一例を示す。
【０１４０】
図１８に示す半導体集積回路装置は、図１で示した半導体集積回路装置と比較して、図１の演算器１を図１７で示す演算器１９に置き換え、図１７で示した比較器１８と、ＯＲゲート３４を追加した構成となっている。
【０１４１】
図１９は、図１８に示した半導体集積回路装置を用いて、同一の命令を２回演算しながらその演算結果を比較して不一致を検出する過程のパイプライン動作を示したものである。
【０１４２】
この例のパイプライン処理では命令１から命令３までの命令が、ＩＦステージ、ＩＤステージ、ＥＸステージ、ＭＡステージ、ＷＢステージの５つのステージにおいて順に実行される。ＥＸステージについてはＥＸａステージとＥＸｂステージに分けて実行されるため、命令１の1回目の演算ステージをＥＸ１ａとＥＸ１ｂとして表し、命令１の演算と同一の２回目の演算ステージをＥＸ２ａとＥＸ２ｂとして表し、以下の命令２から命令３についても同様に表す。
【０１４３】
命令１のＥＸａステージにおいて演算の途中結果が演算バッファ１７に保持され、次に命令１のＥＸｂステージと同時に命令１の２回目の演算であるＥＸ２ａステージが実行される。
【０１４４】
このＥＸ２ａステージにおいて、演算バッファ１７に保持された１回目の演算の途中結果１７２と、２回目の演算の途中結果１７１が比較器１８において比較され、不一致であるかどうかを途中演算比較結果１１４として出力する。
【０１４５】
次に、ＥＸ２ｂステージにおいて、レジスタ２に保持された１回目の演算結果１０３と、２回目の演算結果１０４が比較器３によって比較され、不一致であるかどうかを比較結果１０６として出力する。
【０１４６】
図１８に示したように、ＯＲゲート３４により、途中演算比較結果１１４と比較結果１０６の少なくとも一方の値が“１”になると、比較結果１１５の値も“１”になり、演算器１９の誤作動を検出したことが分かる。
【０１４７】
図１９の命令２から命令３についても命令１と同様にＥＸ１ａ、ＥＸ１ｂ、ＥＸ２ａ、ＥＸ２ｂステージにより演算の実行と比較が行われていく。
【０１４８】
これらのことにより、一つの演算器で同一の命令を２回実行する方式においても、２回実行しない方式と同じクロック周波数を保ったままで、かつ、演算器による演算結果を比較して演算器の誤作動を検出することにより、半導体集積回路装置の信頼性を高めることが可能になる。
【０１４９】
また更に、図１７、図１８、図１９では演算器１９の内部に演算バッファ１７を１段追加してＥＸステージをＥＸａとＥＸｂの２つに分けて演算実行を行う例を示したが、２段以上の演算バッファを追加し、ＥＸステージを３つ以上に分けて、３回以上の同一演算の結果を比較することで更なる高信頼性を実現したり、あるいは３回以上の同一演算の結果から最も多い値を選択して出力することで演算器に一時的に発生した誤りを訂正したりすることもできる。
【０１５０】
（実施の形態５）
本発明における、低コスト、低消費電力、高信頼性を実現する半導体集積回路装置は、様々なシステムへ組み込んで利用することが可能である。
【０１５１】
一例として、図２０に、本発明における低コスト、低消費電力で高信頼性を実現する半導体集積回路装置を自動車に適用する場合の事例を説明する。
【０１５２】
図２０の自動車３００３は、前輪３００４、後輪３００５、アクセル３００６、ブレーキ３００７、ハンドル３００８、エンジン３００９などを有しており、アクセル３００６が踏み込まれるとエンジン３００９の回転数が上昇して前輪３００４を駆動させて走行し、ハンドル３００８の操作がアクチュエータ３０１２によって前輪３００４に伝わって左右に曲がり、ブレーキ３００７を踏み込むと加圧器３０１０と３０１１がそれぞれ前輪３００４と後輪３００５を押し付けて停止する。
【０１５３】
この自動車３００３は、前記実施の形態１〜４を利用した半導体集積回路装置３１０１，３１０２，３１０３を有しており、更に、各半導体集積回路装置の状態を監視する監視装置３１１０を有している。
【０１５４】
半導体集積回路装置３１０１はステアリング制御用に使用され、ハンドル３００８の操作を受けるアクチュエータ３０１２に対し、演算結果３２０１を出力し、一方、演算の比較結果３２０９を監視装置３１１０に出力する。
【０１５５】
半導体集積回路装置３１０２はエンジン制御用に使用され、アクセル３００６からの速度信号３２０４を受け取り、演算結果３２０２をエンジン３００９に出力し、一方、演算の比較結果３２１０を監視装置３１１０に出力する。
【０１５６】
半導体集積回路装置３１０３はブレーキ制御用に使用され、ブレーキ３００７からの停止信号３２０５を受け取り、演算結果３２０３を加圧器３０１０と３０１１に出力し、一方、演算の比較結果３２１１を監視装置３１１０に出力する。
【０１５７】
比較結果３２０９，３２１０，３２１１は、図１と図１６の比較結果１０６、図１３の比較結果６０９，６１０、図１８の比較結果１１５に対応する。
【０１５８】
監視装置３１１０では、各半導体集積回路装置からの比較結果を受け取り、演算器に故障が発生していないかを逐次判断している。
【０１５９】
この自動車３００３が走行中に、半導体集積回路装置の演算器の少なくとも１つが故障した場合に、自動車３００３を安全に停止させる場合の流れについて説明する。
【０１６０】
比較結果３２０９，３２１０，３２１１の少なくとも１つから不一致が検出された場合、監視装置３１１０は、アクチュエータ制御信号３２０６をアクチュエータ３０１２に出力してハンドルのぶれを防ぎ、エンジン制御信号３２０７をエンジン３００９に出力してエンジンを安全に停止させ、加圧器制御信号３２０８を加圧器３０１０と３０１１に出力して前輪３００４と後輪３００５を押し付け、自動車３００３を安全に停止させる。
【０１６１】
図２１に、この自動車システムの動作例として、ブレーキ制御を行う部分のシステム動作のフローチャートを示す。
【０１６２】
図２１において、ステップＳ８０１からシステムの動作が始まり、ステップＳ８１０でシステムの動作が終了する。
【０１６３】
システムの動作が開始すると、ステップＳ８０２で命令フェッチが始まり、ステップＳ８０３で命令の１回目の演算実行が行われ、続けてステップＳ８０４で前記命令の２回目の演算実行が行われ、ステップＳ８０５において、ステップＳ８０３によって得られた演算結果とステップＳ８０４によって得られた演算結果を比較する。
【０１６４】
ステップＳ８０５によって得られた比較結果が一致している場合、演算器は正常に動作をしていることが分かり、ステップＳ８０２に戻って次の命令フェッチが行われ、演算が実行されていく。
【０１６５】
ステップＳ８０５において比較結果が不一致であった場合、演算器の誤作動を検出したことになり、誤った演算結果を用いることでシステム全体に大きな影響を及ぼす可能性がある。
【０１６６】
そのため、ステップＳ８０５で比較結果が不一致であった場合は、監視装置３１１０の働きによってステップＳ８０６において割り込み処理を行い、ステップＳ８０７において、ユーザに対し自動車に異常が起こったことを通知し、また、自動車に備え付けられている非常灯を点灯させるなどして周囲の自動車や歩行者に異常を知らせる。
【０１６７】
ステップＳ８０８においてブレーキ制御を行う部分のシステムが停止し、続けてステップＳ８０９において監視装置３１１０の働きにより加圧器制御信号３２０８が加圧器３０１０，３０１１に出力され、前輪３００４と後輪３００５が押し付けられて自動車が停止し、ステップＳ８１０の終了に至る。
【０１６８】
また、図２１のフローチャートの代わりに、図２２に示したようなフローチャートを用いることも可能である。
【０１６９】
図２２は、半導体集積回路装置に一時的な過渡故障が発生する場合を想定し、過渡故障を自動的に修復する過程を盛り込んだシステム動作のフローチャートである。
【０１７０】
図２２は、図２１に示したフローチャートと比較して、ステップＳ８０５で比較結果が不一致であった場合に、ステップＳ８１２によって再び同じ命令をフェッチし、ステップＳ８１３とステップＳ８１４で前記命令を２回実行し、ステップＳ８１５で再び演算結果を比較した後に、不一致であれば初めてステップＳ８０６の割り込み処理を行う部分が異なっている。
【０１７１】
半導体集積回路装置では、ノイズなどの外部要因が原因となって発生する一時的な故障が発生した場合には、同じ命令を再び実行することで正しい結果が得られる可能性がある。
【０１７２】
そのために図２２では、同一の命令を２回実行して比較結果が不一致であった場合は一時的な故障の可能性を考え、再び前記命令と同一の命令を２回実行してそれでも比較結果が不一致であった場合は永久的な故障であると判断し、システムを停止するようにしている。
【０１７３】
また、図２１および図２２ではブレーキ制御を行う部分についての動作フローを示したが、エンジン制御、ハンドル制御、アクセル制御などを行う各システムにおいても同様のフローでシステムを動作させ、自動車を安全に制御することができる。
【０１７４】
これらのことにより、半導体集積回路装置に故障が発生したことに起因する暴走や発煙といった自動車に起こるトラブルを回避することができ、信頼性の高い自動車システムを構築することが可能になる。
【０１７５】
この例では自動車システムにおける３種類の制御を前記実施の形態１〜４の半導体集積回路装置で行う事例を示したが、近年の自動車には、数十から数百の半導体集積回路装置が搭載されるようになっており、ここで記載した以外の多くの制御を同様に半導体集積回路装置で実装する場合においても、本発明における低コスト、低消費電力で高信頼性を実現する半導体集積回路装置の適用が可能である。
【０１７６】
以上、本発明者によってなされた発明をその実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【０１７７】
例えば、前記実施の形態においては、自動車システムについて説明したが、これに限定されるものではなく、鉄道システム、その他産業システムなどに対し、本発明における低コスト、低消費電力で高信頼性を実現する半導体集積回路装置を組み込んで適用していくことが可能である。
【産業上の利用可能性】
【０１７８】
本発明は、自動車システム、鉄道システム、その他産業システムなどに利用される半導体集積回路装置について適用可能である。
【図面の簡単な説明】
【０１７９】
【図１】本発明の実施の形態１における半導体集積回路装置の構成を示すブロック図である。
【図２】本発明の実施の形態１において、高信頼モード開始命令と高信頼モード終了命令を含む命令セットのアセンブラプログラムの一例を示す図である。
【図３】図１に示す命令フェッチ部の詳細構成を示す図である。
【図４】図１に示す左シフトを行うシフタの詳細構成を示す図である。
【図５】図１に示す比較器の詳細構成を示す図である。
【図６】本発明の実施の形態１において、高信頼モード開始命令を含んだ命令列のパイプライン処理を示す図である。
【図７】本発明の実施の形態１において、高信頼モード終了命令を含んだ命令列のパイプライン処理を示す図である。
【図８】本発明の実施の形態１において、高信頼モード信号を設定するレジスタの構成を示す図である。
【図９】本発明の実施の形態１において、高信頼モードで動作周波数を高くする半導体集積回路装置の命令のパイプライン処理を示す図である。
【図１０】本発明の実施の形態１において、ＥＸステージの動作周波数を高くする半導体集積回路装置の命令のパイプライン処理を示す図である。
【図１１】図３に示す命令フェッチ部において、高信頼命令検出部の代わりに演算器命令検出部を追加した構成の命令フェッチ部の詳細構成を示す図である。
【図１２】本発明の実施の形態１において、再実行される命令を表記したアセンブラプログラムを示す図である。
【図１３】本発明の実施の形態２における半導体集積回路装置の構成を示すブロック図である。
【図１４】（ａ）は本発明の実施の形態３におけるコンパイラのアセンブラプログラムの一例を、（ｂ）は分岐遅延スロットに再実行する命令を配置したアセンブラプログラムの一例を示す図である。
【図１５】本発明の実施の形態３におけるコンパイラによって付加されるビットを備える命令コードを示す図である。
【図１６】図１５に示す命令コードを実行する半導体集積回路装置の構成を示すブロック図である。
【図１７】本発明の実施の形態４における演算バッファを持つ演算器の構成を示す図である。
【図１８】図１７の演算器を用いた半導体集積回路装置の構成を示す図である。
【図１９】図１８に示す半導体集積回路装置の命令のパイプライン処理を示す図である。
【図２０】本発明の実施の形態５において、本発明における半導体集積回路装置を自動車に適用した例を示す図である。
【図２１】本発明の実施の形態５において、高信頼で自動車のブレーキ制御を行うフローチャートの例を示す図である。
【図２２】本発明の実施の形態５において、高信頼で自動車のブレーキ制御を行うフローチャートの例を示す図である。
【符号の説明】
【０１８０】
１，１９  演算器
２  レジスタ
３，１８，６５，６６  比較器
４  命令メモリ
５  命令フェッチ部
６  命令デコード部
７  レジスタファイル
８  データメモリ
９  制御レジスタ
１７  演算バッファ
３１  比較制御部
３２，３３，３４  ゲート
３５，４５，５５，５９，６９  フリップフロップ
３７  比較制御論理
４０１，４０２，４０３  シフタ
４７，４８  シフト制御論理
５１  フェッチ制御部
５２  命令バッファ
５３  命令セレクタ
５４  高信頼命令検出部
５７  フェッチ制御論理
５８  高信頼命令検出論理
６７  演算器命令検出部
６８  演算器命令検出論理
９１  ビット
４０４  シフト制御部
３００３  自動車
３００４  前輪
３００５  後輪
３００６  アクセル
３００７  ブレーキ
３００８  ハンドル
３００９  エンジン
３０１０  加圧器
３０１２  アクチュエータ
３１０１，３１０２，３１０３  半導体集積回路装置
３１１０  監視装置
【図１】
2006209374.tif 000003
【図２】
2006209374.tif 000004
【図３】
2006209374.tif 000005
【図４】
2006209374.tif 000006
【図５】
2006209374.tif 000007
【図６】
2006209374.tif 000008
【図７】
2006209374.tif 000009
【図８】
2006209374.tif 000010
【図９】
2006209374.tif 000011
【図１０】
2006209374.tif 000012
【図１１】
2006209374.tif 000013
【図１２】
2006209374.tif 000014
【図１３】
2006209374.tif 000015
【図１４】
2006209374.tif 000016
【図１５】
2006209374.tif 000017
【図１６】
2006209374.tif 000018
【図１７】
2006209374.tif 000019
【図１８】
2006209374.tif 000020
【図２０】
2006209374.tif 000021
【図２１】
2006209374.tif 000022
【図２２】
2006209374.tif 000023
【図１９】
2006209374.tif 000024