(57)【特許請求の範囲】
【請求項１】
同じ処理を多重化して実行するロックステップ動作を行い、それぞれが内部の論理回路で生じた故障の有無を示す診断情報を出力する第１の演算器及び第２の演算器と、
前記第１の演算器及び前記第２の演算器に共通して用いられる共有リソースと、
前記第１の演算器の出力データと前記第２の演算器の出力データとのいずれか一方を選択信号に基づき選択して前記共有リソースに出力するセレクタと、
前記診断情報に基づき故障が発生したと判断された演算器に代えて正常な演算器の出力データを前記セレクタに選択させるように前記選択信号を出力するシーケンス制御回路と、
前記第１の演算器が出力する出力データと前記第２の演算器が出力する出力データとを比較して、２つの出力データの不一致となったことに応じてエラー信号を出力する比較器と、
前記第２の演算器が前記共有リソースから取得する入力データの入力タイミングを前記第１の演算器に対して遅延させる第１の遅延回路と、
前記第１の演算器の出力データが前記比較器に入力されるタイミングを前記第２の演算器の出力データが前記比較器に入力されるタイミングよりも遅延させる第２の遅延回路と、
を有し、
前記第１の遅延回路による遅延量と、前記第２の遅延回路による遅延量は同じ遅延量であり、
前記シーケンス制御回路は、前記エラー信号が入力された後に入力される前記診断情報を参照して前記第１の演算器及び前記第２の演算器の故障を判断する半導体装置。
【請求項２】
前記共有リソースは、共有メモリと、周辺回路と、を少なくとも含み、
前記共有メモリは、前記セレクタから出力された出力データを一時的に保持するストアバッファを有し、
前記周辺回路は、前記セレクタから出力された出力データに関する処理をキャンセルするキャンセル回路を有し、
前記シーケンス制御回路は、
前記診断情報に基づき、前記セレクタが選択している演算器に故障が発生したと判断されたことに応じて、前記ストアバッファ上のデータのキャンセル及び前記キャンセル回路へのキャンセル指示を行う請求項１に記載の半導体装置。
【請求項３】
前記シーケンス制御回路は、故障が発生した演算器に対して動作の停止を指示すると共に、故障が発生したことにより失われた出力データを回復する回復処理を正常な演算器に指示する請求項１に記載の半導体装置。
【請求項４】
前記第１の演算器及び前記第２の演算器は、内部の論理回路の故障を診断する診断回路をそれぞれ有する請求項１に記載の半導体装置。
【請求項５】
前記診断回路は、内部のデータパスに伝搬するデータをパリティにより論理回路の故障を判断するパリティ回路、データパスに伝搬するデータと当該データのレプリカデータとに基づき論理回路の故障を判断するレプリカ診断回路、データパスを多重化した回路の出力に基づき論理回路の故障を判断する二重化構成回路、の少なくとも１つを含む請求項４に記載の半導体装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は半導体装置に関し、例えば複数のＣＰＵコアに同じ処理を並列して実行させるロックステップ動作を行う半導体装置に関する。
【背景技術】
【０００２】
近年、半導体装置の高信頼化技術の１つとして、２つのＣＰＵ（Central Processing Unit）コアを同一サイクルで動作させ、かつ、２つのＣＰＵコアに同一の処理を実行させるロックステップ型プロセッサが提案されている。そこロックステップ型プロセッサに関する技術が特許文献１、２に開示されている。
【０００３】
特許文献１では、プロセッサと、誤り検出・訂正機能を有するメモリとが含まれる複数系のＣＰＵモジュールがクロック同期して同一の処理を行うロックステップ方式の情報処理装置を開示している。そして、特許文献１の情報処理装置では、ＣＰＵモジュールが、自系のメモリから誤りが検出された場合に生成される第１の訂正情報を記憶し、生成された第１の訂正情報を他系のＣＰＵモジュールに送信し、他系のＣＰＵモジュールのメモリが誤りを検出した場合に送信される第２の訂正情報を受信し、他系のＣＰＵモジュールから第２の訂正情報を受信した遅延に応じて、記憶部に記憶されている第１の訂正情報を読み出し、第２の訂正情報と第１の訂正情報とを同期してエラー訂正処理を行う。
【０００４】
また、特許文献２では、一方のＣＰＵコアの出力を遅延回路で遅延させ、かつ、他方のＣＰＵコアの入力を遅延回路で遅延させることでクリティカルパスのタイミング制約を緩和するディレイドロックステップ方式のロックステップ型プロセッサが開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１２−７３８２８号公報
【特許文献２】米国特許出願公開第２００８／０２４４３０５号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１、２に開示されたプロセッサでは、ＣＰＵコアを構成するハードウェアが故障した場合には動作を継続することができず、信頼性を十分に向上させることができない問題がある。その他の課題と新規な特徴は、本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【０００７】
一実施の形態によれば、半導体装置は、ロックステップ動作を行う第１のＣＰＵコア及び第２のＣＰＵコアを含む演算部を有し、第１のＣＰＵコア及び第２のＣＰＵコアのそれぞれが内部の論理回路の故障を診断し、シーケンス制御回路が当該診断結果に基づき演算部において共有リソースにデータを出力するＣＰＵコアを切り替えるものである。
【０００８】
なお、上記実施の形態の装置を方法やシステムに置き換えて表現したもの、該装置又は該装置の一部の処理をコンピュータに実行せしめるプログラムなども、本発明の態様としては有効である。
【発明の効果】
【０００９】
前記一実施の形態によれば、半導体装置は、ハードウェアの故障に対して高い信頼性を確保できる。
【図面の簡単な説明】
【００１０】
【図１】実施の形態１にかかる半導体装置のブロック図である。
【図２】実施の形態１にかかる半導体装置の詳細なブロック図である。
【図３】実施の形態１にかかるＣＰＵコアのブロック図である。
【図４】実施の形態１にかかる組み合わせ論理回路に設けられるレプリカ診断回路のブロック図である。
【図５】実施の形態１にかかる周辺回路群のブロック図である。
【図６】実施の形態１にかかる共有メモリのブロック図である。
【図７】実施の形態１にかかる共有メモリのブロック図である。
【図８】実施の形態１にかかる半導体装置の動作を説明するタイミングチャートである。
【図９】実施の形態１にかかる半導体装置のデータキャンセル時の動作を説明するタイミングチャートである。
【図１０】実施の形態２にかかる半導体装置のブロック図である。
【図１１】実施の形態２にかかる半導体装置の詳細なブロック図である。
【図１２】実施の形態２にかかる共有メモリのブロック図である。
【図１３】実施の形態２にかかる半導体装置の動作を説明するタイミングチャートである。
【図１４】実施の形態２にかかる半導体装置の動作を説明するブロック図である。
【図１５】実施の形態２にかかる半導体装置の動作を説明するブロック図である。
【図１６】実施の形態２にかかる半導体装置における書込キャンセル後のレジスタの状態を説明するタイミングチャートである。
【発明を実施するための形態】
【００１１】
説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。また、様々な処理を行う機能ブロックとして図面に記載される各要素は、ソフトウェア的には、メモリにロードされたプログラムなどによって実現される。したがって、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組合せによっていろいろな形で実現できることは当業者には理解されるところであり、いずれかに限定されるものではない。なお、各図面において、同一の要素には同一の符号が付されており、必要に応じて重複説明は省略されている。
【００１２】
また、上述したプログラムは、様々なタイプの非一時的なコンピュータ可読媒体（ｎｏｎ−ｔｒａｎｓｉｔｏｒｙ  ｃｏｍｐｕｔｅｒ  ｒｅａｄａｂｌｅ  ｍｅｄｉｕｍ）を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体（ｔａｎｇｉｂｌｅ  ｓｔｏｒａｇｅ  ｍｅｄｉｕｍ）を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば光磁気ディスク）、ＣＤ−ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ（Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）、ＥＰＲＯＭ（Ｅｒａｓａｂｌｅ  ＰＲＯＭ）、フラッシュＲＯＭ、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ））を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体（ｔｒａｎｓｉｔｏｒｙ  ｃｏｍｐｕｔｅｒ  ｒｅａｄａｂｌｅ  ｍｅｄｉｕｍ）によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【００１３】
図１に実施の形態１にかかる半導体装置１のブロック図を示す。図１に示すように、実施の形態１にかかる半導体装置１は、演算部１０、共有メモリ１４、周辺回路群１５、シーケンス制御回路１６、クロック生成回路１７を有する。
【００１４】
演算部１０は、第１の演算器（例えば、第１のＣＰＵコア１１）、第２の演算器（例えば、第２のＣＰＵコア１２）、データ論理回路１３を有する。第１のＣＰＵコア１１と第２のＣＰＵコア１２は同じ処理を多重化して実行するロックステップ動作を行う演算器である。また、詳しくは後述するが、第１のＣＰＵコア１１、及び、第２のＣＰＵコア１２は、内部の論理回路で生じた故障の有無を示す診断情報を出力する機能を有する。データ論理回路１３は、第１のＣＰＵコア１１、及び、第２のＣＰＵコア１２に対するデータ入出力パスに設けられる論理回路である。データ論理回路１３の詳細についても後述する。
【００１５】
共有メモリ１４は、命令キャッシュ１４ａ、データキャッシュ１４ｂ、高速ＲＡＭ１４ｃ、マルチサイクルＲＡＭ１４ｄ、フラッシュメモリ１４ｅを含む。共有メモリ１４は、第１のＣＰＵコア１１及び第２のＣＰＵコア１２が共通して利用する共有リソースの１つである。また、上記したメモリは一例であり、共有メモリ１４は、上記のメモリの一部だけが設けられていても良く、上記のメモリ以外の他のメモリが含まれていても良い。
【００１６】
周辺回路群１５は、割り込み回路１５ａ、ＵＡＲＴ（Universal Asynchronous Receiver Transmitter）インタフェース１５ｂ、ＣＡＮ（Controller Area Network）インタフェース１５ｃ、アナログデジタル変換器１５ｄ、デジタルアナログ変換器１５ｅ、タイマ１５ｆ、ウォッチドッグタイマ１５ｇ、ＧＰＩＯ（General Purpose Input/Output）インタフェース１５ｈを含む。周辺回路群１５は、共有リソースの１つである。また、上記した周辺回路は一例であり、周辺回路群１５は、上記の周辺回路の一部だけが設けられていても良く、上記の周辺回路以外の他の周辺回路が含まれていても良い。
【００１７】
なお、共有メモリ１４及び周辺回路群１５は、いずれも共有リソースであり、少なくとも一方が設けられていればよい。
【００１８】
シーケンス制御回路１６は、演算部１０、共有メモリ１４、周辺回路群１５、クロック生成回路１７の動作シーケンスを制御する制御信号を出力する。特に実施の形態１にかかる半導体装置１では、シーケンス制御回路１６が、第１のＣＰＵコア１１及び第２のＣＰＵコア１２が出力する診断情報に基づき故障が発生したと判断された演算器に代えて正常な演算器の出力データを共有リソースに出力させるように制御信号を出力することに特徴の１つを有する。また、実施の形態１にかかる半導体装置１では、シーケンス制御回路１６が、診断情報に基づき演算器に故障が発生したと判断された場合に、共有リソースに対して書き込みデータのキャンセルを指示する制御信号（例えば、キャンセル信号）を出力することに特徴の１つを有する。このシーケンス制御回路１６の動作を含む半導体装置１の動作については後に詳しく説明する。
【００１９】
クロック生成回路１７は、演算部１０、共有メモリ１４、周辺回路群１５、シーケンス制御回路１６が利用するクロック信号を生成する。つまり、半導体装置１内に設けられる各ブロックは、クロック生成回路１７が生成したクロック信号に基づき同期動作を行う。なお、半導体装置１内には、クロック生成回路１７が生成するクロック信号以外のクロック信号に基づき動作する回路が含まれていても良い。
【００２０】
また、実施の形態１にかかる半導体装置１では、演算部１０と共有メモリ１４とが第１のバスＢＵＳ１により接続され、演算部１０と周辺回路群１５とが第２のバスＢＵＳ２により接続される構成を有する。実施の形態１にかかる半導体装置１では、シーケンス制御回路１６と共有メモリ１４とが第１のバスＢＵＳ１を介して接続され、シーケンス制御回路１６と周辺回路群１５が第２のバスＢＵＳ２により接続される。また、シーケンス制御回路１６は、バスを介さずに、演算部１０及びクロック生成回路１７と直接信号の送受信を行う。
【００２１】
実施の形態１にかかる半導体装置１では、演算部１０及びシーケンス制御回路１６の動作に特徴の１つを有するため、図２に演算部１０の詳細なブロック図を示し、演算部１０について詳細に説明を行う。
【００２２】
図２では、各ブロックを接続するバスは、省略して信号の伝達経路のみを示した。また、図２では、周辺回路群１５及び共有メモリ１４に含まれるブロックとして個別の回路を示さずに図面を簡略化している。また、図２に示すように、実施の形態１にかかる演算部１０は、データ論理回路１３として、セレクタ１３ａ、１３ｂ、比較器１３ｃ、１３ｄを有する。また、図２に示すように、第１のＣＰＵコア１１及び第２のＣＰＵコア１２は、それぞれ内部に診断回路を有する。
【００２３】
実施の形態１にかかる半導体装置１では、第１のＣＰＵコア１１及び第２のＣＰＵコア１２として同一構成の回路を利用する。そして、第１のＣＰＵコア１１及び第２のＣＰＵコア１２は、同一サイクルで、同一の処理を行うロックステップ動作を行う。より具体的には、第１のＣＰＵコア１１及び第２のＣＰＵコア１２は、処理に応じて、共有メモリ１４又は周辺回路群１５から命令或いはデータを読み出し、処理を実施する。そして、第１のＣＰＵコア１１及び第２のＣＰＵコア１２は、処理の結果を周辺回路群１５に出力する場合には、セレクタ１３ａを介して周辺回路群１５に処理結果を出力する。また、第１のＣＰＵコア１１及び第２のＣＰＵコア１２は、処理結果を共有メモリ１４に出力する場合には、セレクタ１３ｂを介して共有メモリ１４に処理結果を出力する。セレクタ１３ａ、１３ｂが第１のＣＰＵコア１１の処理結果を選択するか、第２のＣＰＵコア１２の処理結果を選択するか、は、シーケンス制御回路１６が出力する選択信号ＳＥＬにより決まる。シーケンス制御回路１６は、初期状態では、第１のＣＰＵコア１１と第２のＣＰＵコア１２のいずれか一方（例えば、第１のＣＰＵコア１１）の処理結果を選択するように選択信号ＳＥＬを出力する。
【００２４】
ここで、演算部１０では、第１のＣＰＵコア１１及び第２のＣＰＵコア１２の処理結果を、セレクタ１３ａ、１３ｂに伝達すると共に、比較器１３ｃ、１３ｄにも伝達する。比較器１３ｃ、１３ｄは、第１のＣＰＵコア１１の処理結果と、第２のＣＰＵコア１２の処理結果とを比較して、２つのＣＰＵコアの処理結果が一致しているか否かを示すエラー信号を出力する。例えば、比較器１３ｃは、２つのＣＰＵコアの処理結果が一致している場合にはエラー信号ＥＲＲ１をハイレベルとし、２つのＣＰＵコアの処理結果が不一致であった場合にはエラー信号ＥＲＲ１をロウレベルとする。また、比較器１３ｄは、２つのＣＰＵコアの処理結果が一致している場合にはエラー信号ＥＲＲ２をハイレベルとし、２つのＣＰＵコアの処理結果が不一致であった場合にはエラー信号ＥＲＲ２をロウレベルとする。
【００２５】
なお、実施の形態１にかかる半導体装置１では、共有メモリ１４にデータを伝達する経路と、周辺回路群１５にデータを伝達する経路と、を別々に設けているため、演算部１０内のセレクタ及び比較器を２つ設けた。しかし、共有リソースへのデータ伝達経路が１つである構成である場合は、演算部１０内のセレクタ及び比較器を１つにすることができる。
【００２６】
また、実施の形態１にかかる第１のＣＰＵコア１１及び第２のＣＰＵコア１２は、それぞれが内部の論理回路で生じた故障の有無を示す診断情報を出力する。この診断情報は、第１のＣＰＵコア１１及び第２のＣＰＵコア１２の内部に設けられる診断回路により生成する。より具体的には、第１のＣＰＵコア１１は、内部の診断回路により診断情報ＤＩＡＧ１を出力し、第２のＣＰＵコア１２は、内部の診断回路により診断情報ＤＩＡＧ２を出力する。この診断回路の詳細は後述する。
【００２７】
また、図２に示すように、共有メモリ１４は、演算部１０から出力された出力データを一時的に保持するストアバッファを有する。周辺回路群１５は、演算部１０から出力された出力データに関する処理をキャンセルするキャンセル回路を有する。これら、共有リソースの詳細な構成については後述する。
【００２８】
シーケンス制御回路１６は、診断情報に基づき故障が発生したと判断された演算器に代えて正常な演算器の出力データをセレクタに選択させるように選択信号ＳＥＬを出力する。また、シーケンス制御回路１６は、診断情報に基づき、セレクタが選択している演算器に故障が発生したと判断されたことに応じて、共有メモリ１４のストアバッファ上のデータのキャンセル及び周辺回路群１５内のキャンセル回路へのキャンセル指示を行う。共有リソースに対するキャンセル指示は、キャンセル信号Ｗｃａｎｃｅｌにより行う。また、シーケンス制御回路１６は、故障が発生した演算器に対して動作の停止を指示すると共に、故障が発生したことにより失われた出力データを回復する回復処理を正常な演算器に指示する。この動作停止指示と回復処理の開始指示は、シーケンス制御回路１６から第１のＣＰＵコア１１に出力される診断情報ＤＩＡＧ１及びシーケンス制御回路１６から第２のＣＰＵコア１２に出力される診断情報ＤＩＡＧ２により行う。
【００２９】
シーケンス制御回路１６は、診断情報ＤＩＡＧ１、ＤＩＡＧ２に応じて、共有リソースに対するキャンセル指示、第１のＣＰＵコア１１及び第２のＣＰＵコア１２に対する動作停止指示及び回復処理の開始指示を行う。シーケンス制御回路１６は、これらの動作をエラー信号ＥＲＲ１、ＥＲＲ２により２つのＣＰＵコアの処理結果に違いが生じたことを認識したことに応じて行う。シーケンス制御回路１６の動作を含む半導体装置１の動作の詳細については後述する。
【００３０】
続いて、実施の形態１にかかるＣＰＵコアの詳細について説明する。ここで、実施の形態１にかかる第１のＣＰＵコア１１及び第２のＣＰＵコア１２は同じ構成であるため、以下では、第１のＣＰＵコア１１を例に実施の形態１にかかるＣＰＵコアを説明する。図３に実施の形態１にかかる第１のＣＰＵコア１１のブロック図を示す。図３に示すように、第１のＣＰＵコア１１は、バスインタフェース２１、命令バス２２、命令フェッチ部２３、デコード部２４、実行部２５、レジスタ２６、データバス２７を有する。命令バス２２、命令フェッチ部２３、デコード部２４、実行部２５、レジスタ２６、データバス２７には、論理回路の不具合を診断する診断回路が設けられている。
【００３１】
バスインタフェース２１は、命令、データ、診断情報等を他のブロックとの間で入出力するためのインタフェース回路である。命令バス２２は、バスインタフェース２１を介して取得した命令を命令フェッチ部２３に伝達するためのバス回路である。命令バス２２には、パリティ診断回路２２ａを有する。パリティ診断回路２２ａは、命令バス２２の内部のデータパスに伝搬するデータをパリティにより診断することで命令バス２２の論理回路の故障を判断する。このパリティ検査により、エラーが検出された場合には、パリティ診断回路２２ａは、不具合が生じたことを示す診断情報を出力する。
【００３２】
命令フェッチ部２３は、図示しないプログラムカウンタの値に従って、共有メモリ１４等から命令を読み出す。命令フェッチ部２３は、バスインタフェース２１及び命令バス２２を介して命令の読み出しを行う。また、命令フェッチ部２３は、組み合わせ論理回路２３ａ及びアドレス演算器２３ｃを有する。組み合わせ論理回路２３ａは、具体的な読み出し処理を行うための論理回路である。アドレス演算器２３ｃは、プログラムカウンタのカウント値を参照して読み出し対象の命令が格納されているメモリのアドレスを演算する。
【００３３】
組み合わせ論理回路２３ａは、レプリカ診断回路２３ｂを有する。レプリカ診断回路２３ｂは、組み合わせ論理回路２３ａのデータパスに伝搬するデータと当該データのレプリカデータとに基づき論理回路の故障を判断する。レプリカ診断回路２３ｂは、組み合わせ論理回路２３ａのデータパスに伝搬するデータとレプリカデータとが不一致であった場合に不具合が生じたことを示す診断情報を出力する。
【００３４】
アドレス演算器２３ｃは、診断回路２３ｄを有する。この診断回路２３ｄは、例えば、パリティ診断回路や二重化構成の回路が考えられる。アドレス演算器２３ｃがプログラムカウンタのカウント値を変更しない場合にはパリティ診断回路が適している。アドレス演算器２３ｃがプログラムカウンタのカウント値に対して演算を行う場合には同一構成の２つの回路を用いて同じ演算を実行し、２つの演算結果を比較する二重化構成の回路が適している。
【００３５】
デコード部２４は、命令フェッチ部２３が取得した命令をデコードして実行部２５に具体的な演算を指示する演算命令を生成する。このデコード部２４は、具体的な処理を組み合わせ論理回路２４ａ用いて行う。この組み合わせ論理回路２４ａには、具体的な処理を行う組み合わせ論理回路に加えてレプリカ診断回路２４ｂが設けられている。レプリカ診断回路２４ｂは、レプリカ診断回路２３ｂと同じ機能を発揮するものであり、ここでは説明を省略する。
【００３６】
実行部２５は、デコード部２４が出力した演算命令に応じて、データに対する演算等を行う。実行部２５は、制御論理回路２５ａと演算器２５ｃとを有する。制御論理回路２５ａは、デコード部２４が出力した演算命令に従って利用する演算器２５ｃを決定すると共に、利用する演算器に対してレジスタ２６に格納されたデータを与える。制御論理回路２５ａは、レプリカ診断回路２５ｂを有する。レプリカ診断回路２５ｂは、レプリカ診断回路２３ｂと同じ機能を発揮するものであり、ここでは説明を省略する。
【００３７】
演算器２５ｃは、デコード部２４によって出力された演算命令に従った具体的な演算を行う。演算器２５ｃは、診断回路２５ｄを有する。この診断回路２５ｄは、例えば、パリティ診断回路や二重化構成の回路が考えられる。診断回路としていずれの回路形式を採用するかは演算器の構成によって選択する。
【００３８】
レジスタ２６は、実行部２５で利用するデータ及び実行部２５の演算処理によって得られた演算結果を格納する。レジスタ２６は、パリティ診断回路２６ａを有する。パリティ診断回路２６ａは、レジスタ２６のデータパスを伝搬する入出力データのデータをパリティにより診断することでレジスタ２６の論理回路の故障を判断する。このパリティ検査により、エラーが検出された場合には、パリティ診断回路２６ａは、不具合が生じたことを示す診断情報を出力する。
【００３９】
データバス２７は、演算器２５ｃの演算結果によりロード処理が生じた場合にバスインタフェース２１を介して共有リソースから指定されたデータを取得して、レジスタ２６に格納する。また、データバス２７は、演算器２５ｃの演算結果によりストア処理が生じた場合には、レジスタ２６７に格納された指定のデータをバスインタフェース２１を介して共有リソースに出力する。パリティ診断回路２７ａは、データバス２７の内部のデータパスに伝搬するデータをパリティにより診断することでデータバス２７の論理回路の故障を判断する。このパリティ検査により、エラーが検出された場合には、パリティ診断回路２７ａは、不具合が生じたことを示す診断情報を出力する。
【００４０】
このように、実施の形態１にかかるＣＰＵコアは、何らかの診断回路を有する。なお、図３の第１のＣＰＵコア１１では、バスインタフェース２１に診断回路を設けていないが、バスインタフェース２１に何らかの診断回路を設けても良い。ここで、レプリカ診断回路は、回路構成を工夫することによって、処理の簡略化、及び、回路規模の縮小が可能であるため、以下で詳細に説明する。
【００４１】
図４に実施の形態１にかかる組み合わせ論理回路２４ａに設けられるレプリカ診断回路のブロック図を示す。図４に示すように、組み合わせ論理回路２４ａは、命令デコーダ３０とレプリカ診断回路２４ｂとを有する。命令デコーダ３０は、命令を演算命令にデコードするためのデータパスを構成する組合せ回路である。命令デコーダ３０は、例えば、１０ビットのオペステートと、３２ビットのオペコードを入力として１００ビットの演算命令を出力する。
【００４２】
レプリカ診断回路２４ｂは、レプリカデコーダ３１、チェックサム回路３３、フリップフロップ３２、３４、比較回路３５を有する。レプリカデコーダ３１は、命令デコーダ３０と同じ入力に対して命令デコーダ３０の処理結果のチェックサム演算結果を出力する。レプリカデコーダ３１の出力は、一旦フリップフロップ３２に保持される。チェックサム回路３３は、命令デコーダ３０が出力する演算命令のチェックサム演算結果を出力する。チェックサム回路３３の出力は、一旦フリップフロップ３４に保持される。比較回路３５は、フリップフロップ３２に保持された値と、フリップフロップ３４に保持された値と、を比較して、２つの値が不一致だった場合にデコード部２４で故障が発生したことを示す診断情報を出力する。
【００４３】
このように、命令デコーダ３０が出力する演算命令のチェックサム結果に基づき命令デコーダ３０の故障を検出することで、単純に命令デコーダ３０の構成を多重化させる場合に比べて比較する値のビット数を削減できる。つまり、実施の形態１にかかるレプリカ診断回路２４ｂを有することで、命令デコーダ３０を多重化する場合に比べて回路規模を小さくすることができる。
【００４４】
続いて、共有リソースの１つである周辺回路群１５の構成について説明する。周辺回路群１５は、周辺回路群１５に含まれる周辺回路に対するデータの書き込みをキャンセルするキャンセル回路を含む。そこで、図５に実施の形態１にかかる周辺回路群１５のブロック図を示す。
【００４５】
図５に示すように、周辺回路群１５は、グループデコーダ群４１、フリップフロップ群４２、個別論理モジュールデコーダ群４３、フリップフロップ群４４、個別モジュール４５、ステートマシーン４６を有する。ここでステートマシーン４６がキャンセル回路に相当する。また、図５では、周辺回路をそれぞれ個別論理モジュール（図５のＰＭ１０〜ＰＭ１７、ＰＭ２０〜ＰＭ２７、ＰＭ３０〜ＰＭ３７）で表した
【００４６】
グループデコーダ群４１は、グループデコーダＧ１０、Ｇ２０、Ｇ３０を有する。グループデコーダＧ１０は、第１の個別論理モジュール群（例えば、個別論理モジュールＦ１０〜Ｆ１７）に対応して設けられる。グループデコーダＧ２０は、第２の個別論理モジュール群（例えば、個別論理モジュールＦ２０〜Ｆ２７）に対応して設けられる。グループデコーダＧ３０は、第３の個別論理モジュール群（例えば、個別論理モジュールＦ３０〜Ｆ３７）に対応して設けられる。グループデコーダＧ１０、Ｇ２０、Ｇ３０は、アドレスＡＤＲＳ等を受信し、アドレスの上位ビット側の値に基づき、与えられた指示が自デコーダに対応する個別論理モジュール群のものであるかを判断する。そして、グループデコーダＧ１０、Ｇ２０、Ｇ３０は、入力されたアドレス等が自グループデコーダに対応する個別論理モジュールのものであると判断した場合に、アドレスの下位部分とその他の制御信号を後段のフリップフロップ群４２に与える。
【００４７】
なお、図５に示す例では、グループデコーダ群４１と個別論理モジュールデコーダ群４３との間にフリップフロップ群４２が設けられている。フリップフロップ群４２は、グループデコーダに対応する複数のフリップフロップが設けられている。フリップフロップ群４２の複数のフリップフロップは、グループデコーダ群４１の出力を一時的に保持してグループデコーダ群４１から個別論理モジュールデコーダ群４３への信号の伝搬に遅延を与える。
【００４８】
個別論理モジュールデコーダ群４３は、個別論理モジュールに対応した個別論理モジュールデコーダＦ１１〜Ｆ１７、ＰＭ２０〜ＰＭ２７、ＰＭ３０〜ＰＭ３７を有する。個別論理モジュールデコーダは、グループデコーダが出力したアドレス等を更にデコードして、個別論理モジュールを制御するより具体的なアドレス等を出力する。
【００４９】
なお、図５に示す例では、個別論理モジュールデコーダ群４３と個別モジュール４５との間にフリップフロップ群４４が設けられている。フリップフロップ群４４は、個別論理モジュールデコーダに対応する複数のフリップフロップが設けられている。フリップフロップ群４４の複数のフリップフロップは、個別論理モジュールデコーダ群４３の出力を一時的に保持して個別論理モジュールデコーダ群４３から個別モジュール４５への信号の伝搬に遅延を与える。
【００５０】
ステートマシーン４６は、キャンセル信号Ｗｃａｎｃｅｌに応じて、個別モジュール４５に書込禁止を指示する制御信号を出力する。ここで、周辺回路群１５では、２段のフリップフロップ群を介して個別モジュール４５にアドレス等の信号が伝搬する。そのため、周辺回路群１５では、キャンセル信号Ｗｃａｎｃｅｌが２クロックサイクル前に周辺回路群１５に入力されたデータの書き込みをキャンセルすることができる。
【００５１】
続いて、共有リソースの１つである共有メモリ１４の構成について詳細に説明する。共有メモリ１４は、演算部１０から出力された出力データを一時的に保持するストアバッファを有すると共に、キャンセル信号Ｗｃａｎｃｅｌに従ってストアバッファ上のデータの書き込みをキャンセルする機能を有する。この共有メモリ１４としては様々な形態を有するメモリを利用することができる。そこで、図６、７に共有メモリとして利用できる複数のメモリのブロック図を示す。
【００５２】
図６には、共有メモリとして、命令キャッシュタグメモリ、命令キャッシュデータメモリ、データキャッシュタグメモリ、データキャッシュデータメモリを用いたものである。ここで、命令キャッシュタグメモリ及び命令キャッシュデータメモリは、命令キャッシュ１４ａを構成するものであり、２つのメモリにより、命令情報を格納する。データキャッシュタグメモリ及びデータキャッシュデータは、データキャッシュ１４ｂを構成するものであり、２つのメモリにより、データ情報を格納する。
【００５３】
命令キャッシュタグメモリは、フリップフロップ１０１、１０２、命令キャッシュタグメモリ１０３、セレクタ１０４、リードセレクタ１０５を有する。命令キャッシュタグメモリは、フリップフロップ１０１、１０２の２段のフリップフロップを介して命令キャッシュタグメモリ１０３にデータを書き込む。また、フリップフロップ１０１、１０２の出力は、セレクタ１０４に入力される。リードセレクタ１０５は、命令キャッシュタグメモリ１０３の出力と、セレクタ１０４の出力のいずれかを選択して出力する。ここで、セレクタ１０４及びリードセレクタ１０５は、例えば、演算部１０からの指示に基づいていずれの入力を選択して出力するかを切り替える。そして、命令キャッシュタグメモリでは、フリップフロップ１０１、１０２を有することで、命令キャッシュタグメモリ１０３へのデータの書き込みを２クロック分遅延させることができる。つまり、フリップフロップ１０１、１０２がストアバッファに相当する。ここで、図６の命令キャッシュタグメモリでは、リードセレクタ１０５がセレクタ１０４の出力を選択することで、遅延量が２クロックよりも少ないデータの読み出しが可能になる。
【００５４】
命令キャッシュデータメモリ、データキャッシュタグメモリ、データキャッシュデータメモリについてもメモリの部分を命令キャッシュデータメモリ１１３、データキャッシュタグメモリ１２３、データキャッシュデータメモリ１３３に置き換えたものであり、基本的な構成は命令キャッシュタグメモリと同じであるため、詳細な説明を省略する。
【００５５】
図７には、共有メモリとして高速ＲＡＭ、マルチサイクルＲＡＭ、フラッシュメモリを用いたものである。ここで、高速ＲＡＭ及びマルチサイクルＲＡＭは、図６の命令キャッシュタグメモリのメモリ部分を高速ＲＡＭ１４３及びマルチサイクルＲＡＭ１５３に置き換えたものでありここでは説明を省略する。フラッシュメモリ１６１は、他のメモリとは異なり、ストアバッファとして機能するフリップフロップ及びリードセレクタを有していない。これは、フラッシュメモリ１６１が不揮発性メモリであり、書込に遅延が生じるためである。
【００５６】
図６、図７に示したメモリは、データを格納するメモリにキャンセル信号Ｗｃａｎｃｅｌが入力されている。これらメモリは、キャンセル信号Ｗｃａｎｃｅｌがイネーブル状態となった場合に入力されたデータの書き込みを禁止状態とする。これにより、実施の形態１にかかる共有メモリ１４は、データの書き込みをキャンセルする。
【００５７】
続いて、実施の形態１にかかる半導体装置１の動作について説明する。そこで、図８に実施の形態１にかかる半導体装置１の動作を示すタイミングチャートを示す。図８に示す例は、タイミングＴ０まで第１のＣＰＵコア１１及び第２のＣＰＵコア１２が問題なくロックステップ動作を行い、タイミングＴ０で第１のＣＰＵコア１１に故障が発生して、２つのＣＰＵの出力データに不一致が生じた場合を示すものである。
【００５８】
図８に示すように、２つのＣＰＵに問題がない場合、２つのＣＰＵの出力データは一致する。そのため、タイミングＴ０までの期間は、シーケンス制御回路１６が初期値に応じて第１のＣＰＵコア１１を共有リソースにデータを出力するＣＰＵとして選択する。また、タイミングＴ０間での期間は、２つのＣＰＵの出力データが一致しているため、比較器１３ｃ、１３ｄは入力されるデータが一致した状態を示す。
【００５９】
そして、タイミングＴ０で第１のＣＰＵコア１１に故障が生じると、比較器１３ｃ又は比較器１３ｄの出力が２つのＣＰＵの出力データに不一致が生じたことを示す状態となる。そして、この比較器１３ｃ、１３ｄの出力に応じて、シーケンス制御回路１６は、共有リソースにキャンセル信号Ｗｃａｎｃｅｌを出力する。これにより、半導体装置１では、共有リソースにて演算部１０の出力データの書き込みがキャンセルされる。
【００６０】
また、比較器１３ｃ、１３ｄの出力に応じて、シーケンス制御回路１６が第１のＣＰＵコア１１及び第２のＣＰＵコア１２が出力する診断情報ＤＩＡＧ１、ＤＩＡＧ２を確認する。この確認処理において、シーケンス制御回路１６が第１のＣＰＵコア１１が故障していることを各員すると、シーケンス制御回路１６は、セレクタ１３ａ、１３ｂに第２のＣＰＵコア１２が出力する出力データを選択するように選択信号ＳＥＬを切り替える。また、図８に示す例では、第１のＣＰＵコア１１が故障している状態であるため、シーケンス制御回路１６は、診断情報ＤＩＡＧ１を出力して第１のＣＰＵコア１１を無処理状態（例えば、停止状態）とし、かつ診断情報ＤＩＡＧ２に出力して第２のＣＰＵコア１２に回復処理を指示する。
【００６１】
この回復処理では、第２のＣＰＵコア１２は、エラーが生じた時点よりもさかのぼって処理を再度実行する。詳しくは後述するが、共有リソースに伝達される出力データを出力するＣＰＵコアが故障した場合、ＣＰＵコアの処理により生じるデータの一部が失われる。しかし、この回復処理を行うことにより、ＣＰＵコアの故障により失われたデータが回復する。そして、回復処理が終了すると、半導体装置１では、第２のＣＰＵコア１２を単独で動作させることで処理を継続する。なお、比較器１３ｃ、１３ｄの出力値は、シーケンス制御回路１６がキャンセル信号Ｗｃａｎｃｅｌを出力した後に参照されない状態となる。また、第１のＣＰＵコア１１の動作を停止させる方法は、第１のＣＰＵコア１１へのクロック信号の供給の停止、第１のＣＰＵコア１１への電源供給の停止などがある。
【００６２】
ここで、実施の形態１にかかる半導体装置１では、第１のＣＰＵコア１１、又は、第２のＣＰＵコア１２に故障が生じた場合に共有リソースへのデータの書き込みをキャンセルするが、共有リソースに誤ったデータの書き込みをキャンセルするためには、キャンセル信号Ｗｃａｎｃｅｌの出力タイミングが重要になる。そこで、半導体装置１におけるデータの書き込みキャンセル処理のタイミングチャートを図９に示す。
【００６３】
なお、図９では、データが確定するまでのデータ不定期間をハッチングで示した。また、図９では、各ブロックが出力したデータが出力先のブロックに取り込まれるデータ取り込みタイミングを丸で示した。
【００６４】
図９に示す例では、タイミングｔ２で共有メモリ１４に伝達される２つのＣＰＵの出力データに不一致が生じる。また、図９に示す例では、そして、半導体装置１では、この出力データの不一致が生じたことに応じて、タイミングｔ３になる前に比較器１３ｄの出力がハイレベルからロウレベルに切り替わる。
【００６５】
その後、タイミングｔ２から２クロックサイクル後のタイミングｔ４でシーケンス制御回路１６は、キャンセル信号Ｗｃａｎｃｅｌをハイレベルとする。キャンセル信号Ｗｃａｎｃｅｌをハイレベルとする期間は１クロックサイクルである。また、シーケンス制御回路１６がキャンセル信号Ｗｃａｎｃｅｌ信号の論理レベルを切り替えるタイミングが、比較器１３ｄの出力の論理レベルがロウレベルとなった２クロックサイクル後になるのは、シーケンス制御回路１６における処理に遅延が生じるためである。
【００６６】
図９に示すように、タイミングｔ２で２つのＣＰＵが出力した出力データは、出力後まもなくして共有メモリ１４に取り込まれる。一方、比較器１３ｄの判定結果は、タイミングｔ２からタイミングｔ３の期間の内タイミングｔ３に近いタイミングでシーケンス制御回路１６に取り込まれる。そのため、共有メモリ１４がストアバッファを有していない場合、シーケンス制御回路１６が比較器１３ｄの出力に応じて即座にキャンセル信号Ｗｃａｎｃｅｌをハイレベルに切り替えたとしても共有メモリ１４のデータの上書きを防止することができない。しかしながら、実施の形態１にかかる共有メモリ１４がストアバッファを有し、共有メモリ１４において実際のデータを記憶するメモリ部分（例えば、命令キャッシュタグメモリ１０３、命令キャッシュデータメモリ１１３等）のデータを上書きするまでに２クロックサイクルを要する。また、シーケンス制御回路１６は不一致となった出力データが発生してから２クロックサイクル後にキャンセル信号Ｗｃａｎｃｅｌをハイレベルとする。このような構成により、実施の形態１にかかる半導体装置１は、共有メモリ１４のメモリ部にデータが書き込まれるタイミングでキャンセル信号Ｗｃａｎｃｅｌ信号をハイレベルとして、メモリ部に格納されているデータが誤ったデータで上書きされて失われてしまうことを防止する。この書込キャンセル動作により失われたデータは、故障していないＣＰＵコアによる回復処理により回復する。
なお、共有メモリ１４と同様に周辺回路群１５においても遅延書込が行われる。そのため、周辺回路群１５においても、共有メモリ１４と同様にキャンセル信号Ｗｃａｎｃｅｌによって誤ったデータの書き込みをキャンセルすることができる。
【００６７】
また、図９に示すように、第１のＣＰＵコア１１の診断情報ＤＩＡＧ１及び第２のＣＰＵコア１２の診断情報ＤＩＡＧ２は、クロックサイクル毎に出力される。シーケンス制御回路１６は、比較器１３ｃ、１３ｄが出力する判断結果が不一致となった後に入力される診断情報ＤＩＡＧ１、ＤＩＡＧ２を参照して故障しているＣＰＵコアを判断する。
【００６８】
上記より、実施の形態１にかかる半導体装置１は、ロックステップ動作を行うＣＰＵコアがそれぞれ内部の論理回路の故障を診断する診断回路を内蔵する。そして、ロックステップ動作を行うＣＰＵコアの出力が不一致となった場合には、この診断回路からの診断情報をシーケンス制御回路１６が参照することで、実施の形態１にかかる半導体装置１は、いずれのＣＰＵコアで故障が発生したかを判断することができる。
【００６９】
また、実施の形態１にかかる半導体装置１では、上記故障判断に応じて、セレクタ１３ａ、１３ｂが選択する出力データを切り替えることで、正常なＣＰＵコアによる動作を継続することができる。
【００７０】
また、実施の形態１にかかる半導体装置１では、比較器１３ｃ、１３ｄにおいて不一致と判断された出力データの共有リソースへの書き込みを共有メモリ１４、周辺回路群１５、及び、シーケンス制御回路１６によりキャンセルすることができる。これにより、実施の形態１にかかる半導体装置１では、誤ったデータにより共有リソース上のデータが破壊されることを防止することができる。また、誤ったデータの書込キャンセルを行うことで、処理済みデータの一部が失われるが、実施の形態１にかかる半導体装置１では、データの書き込みキャンセルにより失われたデータを回復する回復処理を、正常なＣＰＵコアにて実施する。このようなことから、実施の形態１にかかる半導体装置１では、ロックステップ動作を行う２つのＣＰＵコアの一方が故障した場合であっても、故障による処理データの破損を防止して動作を継続することが可能になる。
【００７１】
実施の形態２
実施の形態２では、演算部１０として、ディレイドロックステップ（Delayed lock step）動作を行う演算部５０を利用するものである。ディレイドロックステップ動作では、一方のＣＰＵコアで処理した命令と同じ命令を、他方のＣＰＵコアが数クロックサイクル遅れて処理する。そのため、ディレイドロックステップ動作では、厳密には同一のクロックサイクルで同じ命令が処理されるわけではないが、同じ命令を異なるＣＰＵコアで処理する点でロックステップ動作の一態様となるものである。このディレイドロックステップ動作では、片方のＣＰＵコアに命令を伝達する経路に命令を遅延させる遅延回路が設けられるためクリティカルパスの制約を緩和でき、演算部１０の動作を高速化させることができる。なお、以下では、２つのＣＰＵコアが２クロックサイクルの差でロックステップ動作を行うディレイドロックステップ動作を行うが、２つのＣＰＵコアの間のクロックサイクルの差は２クロックサイクルに限られるものではない。
【００７２】
そこで、実施の形態２にかかる演算部５０を含む、実施の形態２にかかる半導体装置２のブロック図を図１０に示す。なお、実施の形態２の説明において、実施の形態１で説明した構成要素と同じ構成要素については、実施の形態１と同じ符号を付して説明を省略する。
【００７３】
図１０に示すように、実施の形態２にかかる演算部５０は、実施の形態１の演算部１０の第１のＣＰＵコア１１、第２のＣＰＵコア１２及びデータ論理回路１３を第１のＣＰＵコア５１、第２のＣＰＵコア５２及びデータ論理回路５３に置き換えたものである。そこで、図１１に、実施の形態２にかかる演算部５０の詳細なブロック図を示す。
【００７４】
図１１に示すように、第１のＣＰＵコア５１は、第１のプログラムカウンタ（例えば、保存プログラムカウンタ５１ａ）と第２のプログラムカウンタ（例えば、保存プログラムカウンタ５１ｂ）を有する。なお、第１のＣＰＵコア５１においても内部の論理回路の故障を診断する診断回路を有する。第２のＣＰＵコア５２は、第１のプログラムカウンタ（例えば、保存プログラムカウンタ５２ａ）を有する。
【００７５】
第１のプログラムカウンタとして設けられる保存プログラムカウンタ５１ａ、５２ａは、各ＣＰＵコア内部のレジスタ状態の更新に関して、実行されていない最初の命令を指すプログラムカウンタである。この保存プログラムカウンタ５１ａ、５２ａは、例外処理或いは割り込み処理にて、動的な命令列を実行済の命令列、未実行の命令列に２分した場合、例外ハンドラ、割り込みハンドラからの復帰時に未実行の命令列の先頭から処理を再開する場合に参照される。本実施の形態では、第１のＣＰＵコア５１及び第２のＣＰＵコア５２が２クロックのサイクル差で動作しているため、あるクロックサイクルでＣＰＵコアの動作を停止させると、保存プログラムカウンタ５１ａの内容と保存プログラムカウンタ５２ａの内容は２サイクル分異なる値となる。
【００７６】
第２のプログラムカウンタとして設けられる保存プログラムカウンタ５１ｂは、共有バス界面に関する情報を保持するプログラムカウンタである。より具体的には、保存プログラムカウンタ５１ｂは、保存プログラムカウンタ５１ａと同じ命令を指す、或いは、動的命令上の数命令古い命令を指すレジスタである。共有メモリ１４に入力されたデータが、共有メモリ１４内のストアバッファを抜けて確実にメモリ、或いは、制御レジスタに書き込まれたときに保存プログラムカウンタ５１ｂは更新される。すなわち、未更新の書き込みデータを生成した命令が存在すると、その分保存プログラムカウンタ５１ｂは、保存プログラムカウンタ５１ａよりカウント値の進行が遅くなる。
【００７７】
ここで、確実にメモリ、或いは、制御レジスタにデータが書き込まれるという条件は、第１のＣＰＵコア５１と第２のＣＰＵコア５２の双方で差異はなく、共通の事象である。そのため、保存プログラムカウンタ５１ｂは第２のＣＰＵコア５２の共有バス界面に関する保存プログラムカウンタも兼ねるように思われるかもしれない。しかし、保存プログラムカウンタ５１ｂは第２のＣＰＵコア５２の共有バス界面に関する保存プログラムカウンタとは、細かいケースで異なる。それに関しては、後に実例を示しながら説明する。
【００７８】
また、図１１に示すように、演算部５０は、データ論理回路５３としてセレクタ５３ａ、５３ｂ、５３ｆ、５３ｈ、比較器５３ｃ、５３ｄ、遅延回路５３ｅ、５３ｇ、５３ｉ、５３ｊを有する。ここで、セレクタ５３ａ、５３ｂ、比較器５３ｃ、５３ｄは、セレクタ１３ａ、１３ｂ、比較器１３ｃ、１３ｄに対応するものであり、ここでは説明を省略する。
【００７９】
遅延回路５３ｅ、５３ｇは、第２のＣＰＵコア５２が共有リソースから取得する入力データの入力タイミングを第１のＣＰＵコア５１に対して遅延させる第１の遅延回路として機能するものである。より具体的には、遅延回路５３ｅ、５３ｇは以下のような態様で演算部５０に設けられる。
【００８０】
遅延回路５３ｅは、共有メモリ１４から第２のＣＰＵコア５２にデータを伝達する経路に設けられ、伝達されるデータを２クロック遅延させる。セレクタ５３ｆは、共有メモリ１４から伝達されるデータとして、共有メモリ１４から直接伝達されるデータと、遅延回路５３ｅを介して伝達されるデータの一方を選択して出力する。例えば、セレクタ５３ｆは、演算部５０がディレイドロックステップ動作を行っている場合には、遅延回路５３ｅを介して伝達されるデータを第２のＣＰＵコア５２に出力し、演算部５０が第２のＣＰＵコア５２の単独動作を行っている場合には遅延回路５３ｅを介さずに伝達されるデータを選択して第２のＣＰＵコア５２に出力する。遅延回路５３ｅがいずれのデータを選択するかは、シーケンス制御回路１６により制御されるものとする。
【００８１】
遅延回路５３ｇは、周辺回路群１５から第２のＣＰＵコア５２にデータを伝達する経路に設けられ、伝達されるデータを２クロック遅延させる。セレクタ５３ｈは、周辺回路群１５から伝達されるデータとして、周辺回路群１５から直接伝達されるデータと、遅延回路５３ｇを介して伝達されるデータの一方を選択して出力する。例えば、セレクタ５３ｈは、演算部５０がディレイドロックステップ動作を行っている場合には、遅延回路５３ｇを介して伝達されるデータを第２のＣＰＵコア５２に出力し、演算部５０が第２のＣＰＵコア５２の単独動作を行っている場合には遅延回路５３ｇを介さずに伝達されるデータを選択して第２のＣＰＵコア５２に出力する。遅延回路５３ｈがいずれのデータを選択するかは、シーケンス制御回路１６により制御されるものとする。
【００８２】
遅延回路５３ｉ、５３ｊは、第１のＣＰＵコア５１の出力データが比較器５３ｃ、５３ｄに入力されるタイミングを第２のＣＰＵコア５２の出力データが比較器５３ｃ、５３ｄに入力されるタイミングよりも遅延させる第２の遅延回路として機能する。具体的には、遅延回路５３ｉ、５３は以下のような態様で演算部５０に設けられる。
【００８３】
遅延回路５３ｉは、第１のＣＰＵコア５１が出力する出力データのうち共有メモリ１４に対して出力される出力データが比較器５３ｃに伝達される経路に設けられる。なお、第２のＣＰＵコア５２の出力データが比較器５３ｃに入力される経路には遅延回路は設けられていない。遅延回路５３ｊは、第１のＣＰＵコア５１が出力する出力データのうち周辺回路群１５に対して出力される出力データが比較器５３ｄに伝達される経路に設けられる。なお、第２のＣＰＵコア５２の出力データが比較器５３ｄに入力される経路には遅延回路は設けられていない。
【００８４】
また、実施の形態２にかかる演算部５０では、遅延回路５３ｅ、５３ｇ、５３ｉ、５３ｊは、２段の直列接続されたフリップフロップにより構成される。このフリップフロップは、第１のＣＰＵコア５１及び第２のＣＰＵコア５２に供給されるクロックに基づき動作する。つまり、遅延回路５３ｅ、５３ｇ、５３ｉ、５３ｊは、入力されたデータを２クロック分遅延させて後段の回路に伝達する。また、実施の形態２にかかる半導体装置２は、第１の遅延回路（例えば、遅延回路５３ｅ、５３ｇ）による遅延量と、第２の遅延回路（例えば、遅延回路５３ｉ、５３ｊ）による遅延量は同じ遅延量である。
【００８５】
上記したように、実施の形態２にかかる演算部５０では、同じ命令を２クロック分ずらして実行する。そのため、実施の形態２にかかる演算部５０では、共有リソースに誤ったデータが書き込まれることを防止するためには最大４クロック前のデータのキャンセルを行う必要がある。そこで、図１２に、共有メモリ１４の１つである高速ＲＡＭのブロック図を示す。
【００８６】
図１２に示すように、実施の形態２にかかる半導体装置２では、供給メモリのストアバッファとして４段のフリップフロップ（図１２のフリップフロップ１７１〜１７４）を利用する。また、マルチサイクルＲＡＭ１７５は、４段のフリップフロップを介してデータが入力される。また、マルチサイクルＲＡＭ１７５においてもキャンセル信号Ｗｃａｎｃｅｌに従ってデータの書き込みを禁止する機能を有する。セレクタ１７６は、４つのフリップフロップの出力のいずれか１つを選択して出力する。
【００８７】
続いて、実施の形態２にかかる半導体装置２の動作について説明する。そこで、図１３に実施の形態２にかかる半導体装置２の動作を示すタイミングチャートを示す。図１３に示すように、実施の形態２にかかる半導体装置２では、タイミングＴ０で、２つのＣＰＵコアの不一致が生じるまでの期間、演算部５０に供給するクロック信号として、予め決められた最大周波数ｍａｘｆのクロック信号を与え、かつ、ＣＰＵコアを二重系動作（例えば、ディレイドロックステップ動作）で動作させる。また、実施の形態２にかかる半導体装置２では、２つのＣＰＵコアが同じ処理結果を出力している期間は、セレクタ５３ｆ、５３ｈに遅延回路５３ｅ、５３ｇの出力を選択させる。
【００８８】
そして、実施の形態２にかかる半導体装置２は、タイミングＴ０で、２つのＣＰＵコアの処理結果の不一致を検出すると、以下のような動作を行う。まず、シーケンス制御回路１６は、キャンセル信号Ｗｃａｎｃｅｌを出力して共有リソースへのデータの書き込みをキャンセルする。シーケンス制御回路１６は、第１のＣＰＵコア５１を停止状態を指示すると共に第２のＣＰＵコア５２に回復処理を指示する。シーケンス制御回路１６は、クロック生成回路１７にクロック信号の周波数を１／２に変更することを指示する。その後、シーケンス制御回路１６は、セレクタ５３ａ、５３ｂに共有リソースに与えるデータとして第２のＣＰＵコア５２の出力データを選択することを指示する。さらに、シーケンス制御回路１６は、セレクタ５３ｆ、５３ｈに遅延回路５３ｅ、５３ｇを介さない系で伝達されるデータを選択させる。
【００８９】
ここで、共有リソースに格納されるデータを生成する命令が共有メモリ１４から演算部５０に伝達される経路を図１２のタイミングＴ０の前後で比較する図を図１４及び図１５に示す。
【００９０】
図１４は、図１２のタイミングＴ０の前の期間における命令が共有メモリ１４から演算部５０に伝達される経路を説明する図である。また、図１５は、図１２のタイミングＴ０の後の期間における命令が共有メモリ１４から演算部５０に伝達される経路を説明する図である。
【００９１】
図１４に示すように、タイミングＴ０の以前の期間では、共有リソースに格納されるデータを生成する命令は、共有メモリ１４から第１のＣＰＵコア５１に伝達される。一方、図１５に示すように、タイミングＴ０以降の期間では、共有リソースに格納されるデータを生成する命令は、遅延回路５３ｅを介さずに第２のＣＰＵコア５２に伝達される。
【００９２】
ここで、図１４及び図１５では、共有メモリ１４からデータを読み出す際のクリティカルパスを太線で示した。また、このクリティカルパスの始点をｓと示し、終点をｅと示した。クリティカルパスは、１クロックサイクルでデータを次段の回路に伝達する必要がある経路である。そのため、クリティカルパスは、始点ｓと終点ｅの物理的距離が長くなるとタイミング制約を満たすことが厳しくなる傾向がある。そこで、実施の形態２にかかる半導体装置２では、共有メモリ１４又は周辺回路群１５からの物理的距離がより長い位置にある第２のＣＰＵコア５２に遅延回路を設け、タイミング制約を緩和し、クリティカルパスとして最も厳しくなる経路を共有リソースから第１のＣＰＵコア５１に至る経路とした。
【００９３】
また、図１５に示すように、第２のＣＰＵコア５２を単独動作させた場合は、遅延回路が増加することで動作の遅れを防止するために、遅延回路を介さずに第２のＣＰＵコア５２に共有リソースからのデータを与える。このとき、共有リソースから第２のＣＰＵコア５２に至る経路にはセレクタ５３ｆ、５３ｈが挿入される。そのため、第２のＣＰＵコア５２を単独動作させた場合、セレクタ５３ｆ、５３ｈの分共有リソースから第２のＣＰＵコア５２に至る経路の論理距離が長くなる。そこで、実施の形態２にかかる半導体装置２では、演算部５０に与えるクロック信号の周波数を１／２に設定する。これにより、論理距離及び物理距離が長くなったことによるクリティカルパスのタイミング制約を緩和する。
【００９４】
上記したように、実施の形態２にかかる半導体装置２では、２つのＣＰＵコアの処理結果に不一致が生じた場合には、第１のＣＰＵコア５１に対して２クロック遅れで第１のＣＰＵコア５１と同じ命令を処理する第２のＣＰＵコア５２に動作を切り替える。そのため、実施の形態２にかかる共有リソースでは、実施の形態１にかかる半導体装置１に比べて、２クロック分前のライト動作を取り消す必要がある。そこで、実施の形態２にかかる半導体装置２では、図１２に示したように、共有リソースが実施の形態１の共有リソースよりも２クロック分多い遅延を生じさせる遅延回路を有する。そのため、実施の形態２にかかる半導体装置２では、実施の形態１にかかる半導体装置１よりも２クロック分前のライト動作を取り消すことが可能となる。
【００９５】
また、実施の形態２にかかる半導体装置２では、２クロックのディレイドロックステップ動作を行うため、回復処理において、共有リソースにどの命令までの処理結果が書き込まれているかを判断する処理が実施の形態１にかかる半導体装置１よりも複雑になる。そこで、実施の形態２では、保存プログラムカウンタ５１ａ、５１ｂ、５２ａが設ける。以下では、保存プログラムカウンタ５１ａをＲＥＧＳＰＣ５１ａ、保存プログラムカウンタ５１ｂをＢＵＳＳＰＣ５１ｂ、保存プログラムカウンタ５２ａをＲＥＧＳＰＣ５２ａと称す。
【００９６】
そこで、回復処理におけるＲＥＧＳＰＣ５１ａ、ＢＵＳＳＰＣ５１ｂ及びＲＥＧＳＰＣ５２ａを用いた回復処理について説明する。図１６に、ＲＥＧＳＰＣ５１ａ、ＢＵＳＳＰＣ５１ｂ及びＲＥＧＳＰＣ５２ａを用いた回復処理のケースを２つ示す。なお、図１６において、命令ｎ、ｎ＋１、ｎ＋２・・・は、メモリ配置上の命令列ではなくＣＰＵコアが時間順に実行する動的命令列を示すものである。
【００９７】
図１６のケース１は、第１のＣＰＵコア５１内のＲＥＧＳＰＣ５１ａが命令ｎ＋３、ＢＵＳＳＰＣ５１ｂが命令ｎ＋１、第２のＣＰＵコア５２内のＲＥＧＳＰＣ５２ａが命令ｎ＋２を示している。つまり、ケース１は、第１のＣＰＵコア５１が命令ｎ＋２までを実行した状態である。また、ケース１は、共有リソースへの処理結果の書込は、書込キャンセル後に命令ｎまで実行した状態での処理結果が書き込まれていることを示すものである。
【００９８】
そして、このケース１で、第１のＣＰＵコア５１に故障が生じたことにより、第２のＣＰＵコア５２の単独動作に切り替えた場合、ＢＵＳＳＰＣ５１ｂが示す値とＲＥＧＳＰＣ５２ａが示す値とが１命令分異なる状態である。このケース１における回復処理は以下のようになる。
【００９９】
このケース１では、第１のＣＰＵコア５１のＢＵＳＳＰＣ５１ｂと第２のＣＰＵコア５２のＲＥＧＳＰＣ５２ａとが示す値が１命令分異なる。つまり、ケース１では、第１のＣＰＵコア５１ａが示す命令ｎ＋１については、第１のＣＰＵコア５１内のレジスタ状態は更新済であるが、共有リソースへの書き込みは未完了の状態である。よって、このケース１では、第２のＣＰＵコア５２の更新専用のソフトウェアハンドラにて、命令ｎ＋１の１命令分の書き込みを、ソフトウェアによって実行する。例えば、このケース１の例は、ｐｕｓｈ命令のようにメモリストアが行われ、かつ、レジスタも更新する命令である場合には、メモリストア動作のみをソフトウェアで解析して実行する例を示すものである。
【０１００】
図１６のケース２は、第１のＣＰＵコア５１のＲＥＧＳＰＣ５１ａとＢＵＳＳＰＣ５１ｂとが共に命令ｎ＋３を示し、第２のＣＰＵコア５２のＲＥＧＳＰＣ５２ａが命令ｎ＋１を示している例である。このケース２は、ストアバッファの書き込み遅延よりも、実行中の命令の実行時間が長い場合に発生する状態を説明するものである。例えば、ケース２の状態は、ＣＰＵコアが命令実行に１０クロック以上の時間を要する除算命令を実行した場合に発生する。
【０１０１】
このケース２においても、上述したケース１と同様に、第１のＣＰＵコア５１のＢＵＳＳＰＣ５１ｂが示す値と、第２のＣＰＵコア５２のＲＥＧＳＰＣ５２ａが示す値と、に違いがあるものの、ケース１とは回復処理が異なる。
【０１０２】
具体的には、レジスタの状態として、命令ｎ＋１、ｎ＋２にメモリストア命令がある場合、第２のＣＰＵコア５２のＲＥＧＳＰＣ５２ａよりも、第１のＣＰＵコア５１のＢＵＳＳＰＣ５１ｂが先に進行することになる。そのため、ケース１のように第１のＣＰＵコア５１のＢＵＳＳＰＣ５１ｂが示す値を反映して、第２のＣＰＵコア５２が処理を行ってしまうと、第２のＣＰＵコア５２の命令状態の定義に矛盾が生じる。以上のようなことから、ケース２では、ケース１のような回復処理は不要である。また、命令ｎ＋１、ｎ＋２にメモリストア命令がない場合であっても、第２のＣＰＵコア５２にて命令ｎ＋１から命令実行を再開することで、共有リソースにデータを出力するＣＰＵコアを第１のＣＰＵコア５１から第２のＣＰＵコア５２に切り換えによる命令処理の過不足はない。このようなことからも、ケース２ではケース１のような回復処理は不要である。
【０１０３】
図１６に示したように、実施の形態２にかかる半導体装置２では、共有リソースにデータを出力するＣＰＵコアを切り換える際の回復処理は、第１のＣＰＵコア５１の命令状態によって変わる。そこで、どのような回復処理を行うかは、例えば、シーケンス制御回路１６が第１のＣＰＵコア５１及び第２のＣＰＵコア５２のレジスタの状態を参照して決定する。
【０１０４】
上記説明より、実施の形態２にかかる半導体装置２においても、各ＣＰＵコアがそれぞれ診断回路を有し、当該診断回路が生成する診断情報に基づいて演算部５０の動作を切り替える。これにより、実施の形態２にかかる半導体装置２においても、実施の形態１にかかる半導体装置１と同様に、一方のＣＰＵコアが故障しても動作を継続できる。
【０１０５】
また、実施の形態２では、第２のＣＰＵコア５２を第１のＣＰＵコア５１に比べて遅れたクロックサイクルで動作させるディレイドロックステップ動作を行う。このとき、実施の形態２にかかる半導体装置２では、第１のＣＰＵコア５１が故障した際に、２つのＣＰＵコアが同じ命令を実行するクロックサイクルの差分を吸収した上で第２のＣＰＵコア５２に動作を切り換えるための構成（例えば、遅延回路、保存プログラムカウンタ等）を有する。これにより、実施の形態２にかかる半導体装置２は、ディレイドロックステップ動作を行いながら、信頼性を向上させることができる。また、実施の形態２にかかる半導体装置２では、ディレイドロックステップ動作を行うことで、動作に用いるクロックの周波数を高くして高い処理能力を実現することができる。
【０１０６】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は既に述べた実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において種々の変更が可能であることはいうまでもない。
【符号の説明】
【０１０７】
１、２  半導体装置
１０、５０  演算部
１１、５１  第１のＣＰＵコア
１２、５２  第２のＣＰＵコア
１３、５３  データ論理回路
１３ａ、１３ｂ、５３ａ、５３ｂ  セレクタ
１３ｃ、１３ｄ、５３ｃ、５３ｄ  比較器
１４  共有メモリ
１４ａ  命令キャッシュ
１４ｂ  データキャッシュ
１４ｃ  高速ＲＡＭ
１４ｄ  マルチサイクルＲＡＭ
１４ｅ  フラッシュメモリ
１５  周辺回路群
１５ａ  割り込み回路
１５ｂ  ＵＡＲＴインタフェース
１５ｃ  ＣＡＮインタフェース
１５ｄ  アナログデジタル変換器
１５ｅ  デジタルアナログ変換器
１５ｆ  タイマ
１５ｇ  ウォッチドッグタイマ
１５ｈ  ＧＰＩＯインタフェース
１６  シーケンス制御回路
１６ａ  最大診断時間レジスタ
１７  クロック生成回路
２１  バスインタフェース
２２  命令バス
２２ａ  パリティ診断回路
２３  命令フェッチ部
２３ａ、２４ａ  組み合わせ論理回路
２３ｂ、２４ｂ、２５ｂ  レプリカ診断回路
２３ｃ  アドレス演算器
２３ｄ  診断回路
２４  デコード部
２５  実行部
２５ａ  制御論理回路
２５ｃ  演算器
２５ｄ  診断回路
２６  レジスタ
２６ａ、２７ａ  パリティ診断回路
２７  データバス
３０  命令デコーダ
３１  レプリカデコーダ
３２  フリップフロップ
３３  チェックサム回路
３４  フリップフロップ
３５  比較回路
４１  グループデコーダ群
４２  フリップフロップ群
４３  個別論理モジュールデコーダ群
４４  フリップフロップ群
４５  個別モジュール
４６  ステートマシーン
５１ａ、５２ａ  ＲＥＧＳＰＣ
５１ｂ  ＢＵＳＳＰＣ
５３ｅ、５３ｇ、５３ｉ、５３ｊ  遅延回路
５３ｆ、５３ｈ  セレクタ
１０１、１０２、１１１、１１２、１２１、１２２  フリップフロップ
１３１、１３２、１４１、１４２、１５１、１５２  フリップフロップ
１７１〜１７４  フリップフロップ
１０４、１１４、１２４、１３４、１４４、１５４、１７６  セレクタ
１０５、１１５、１２５、１３５、１４５、１５５、１７７  リードセレクタ
１０３  命令キャッシュタグメモリ
１１３  命令キャッシュデータメモリ
１２３  データキャッシュタグメモリ
１３３  データキャッシュデータメモリ
１４３  高速ＲＡＭ
１５３  マルチサイクルＲＡＭ
１６１  フラッシュメモリ
１７５  マルチサイクルＲＡＭ
ＳＥＬ  選択信号
ＥＲＲ１、ＥＲＲ２  エラー信号
Ｗｃａｎｃｅｌ  キャンセル信号
ＣＣ  クロック制御信号
ＤＩＡＧ１、ＤＩＡＧ２  診断情報
【図１】
0006312550.tif 000002
【図２】
0006312550.tif 000003
【図３】
0006312550.tif 000004
【図４】
0006312550.tif 000005
【図５】
0006312550.tif 000006
【図６】
0006312550.tif 000007
【図７】
0006312550.tif 000008
【図８】
0006312550.tif 000009
【図９】
0006312550.tif 000010
【図１０】
0006312550.tif 000011
【図１１】
0006312550.tif 000012
【図１２】
0006312550.tif 000013
【図１３】
0006312550.tif 000014
【図１４】
0006312550.tif 000015
【図１５】
0006312550.tif 000016
【図１６】
0006312550.tif 000017