(57)【要約】      （修正有）【課題】マルチスレッド機能を有するものについて、演算部だけでなくその周辺回路についての故障も検出する。【解決手段】スレッド制御部６は同一のプログラムをオリジナル，コピーの２つのスレッド（ＯＳ，ＣＳ）により実行するため、対応するＯＳのレジスタセット値を左シフトしたＣＳのレジスタセットをレジスタファイル８にコピーする。シフタ９，１６はＣＳにつき演算器１１に入力される即値データ，メモリ１４から読出されレジスタファイル８に入力されるデータを左シフトする。シフタ１２及び１３は、ＣＳにつき演算器１１より出力されるメモリ１４のアドレス及び書き込みデータを右シフトする。比較器１５はシフタ１２及び１３を介して出力されるアドレス及びデータとＯＳにつき演算器１１より出力されるものとが不一致ならエラー信号を出力する。【選択図】図１
2014126986.tif 000002
【特許請求の範囲】
【請求項１】
命令メモリ（２）から命令をフェッチする命令フェッチ部（３）と、
前記命令をデコードするデコード部（７）と、
前記デコードの結果に応じて演算を行う演算部（１１）と、
データメモリ（１４）に対して読み書きを行うデータメモリアクセス部と、
複数のスレッドの実行を制御し、実行スレッド番号を出力するスレッド制御部（６）と、
実行スレッド番号に応じてバンクが選択されるレジスタファイル（８）とを備え、
前記スレッド制御部は、同一のプログラムを、オリジナルスレッドとコピースレッドとの２つのスレッドにより実行するように制御するため、対応するオリジナルスレッドのレジスタセットの値を１ビット左シフトして、コピースレッドのレジスタセットとしてレジスタファイルにコピーし、前記コピースレッドが実行対象となる期間はコピースレッド実行信号を出力し、
前記コピースレッド実行信号が入力されると、前記命令フェッチ部が出力するフェッチアドレスを１ビット右シフトして前記命令メモリに出力するフェッチアドレスシフト部（４）と、
前記コピースレッドについて、前記演算部に入力される即値データを１ビット左シフトする即値データシフト部（９）と、
前記コピースレッドについて、前記演算部より出力される前記データメモリのアドレス及び前記データメモリに対する書き込みデータを１ビット右シフトする出力シフト部（１２，１３）と、
前記コピースレッドについて、前記データメモリから読み出されて前記レジスタファイルに入力されるデータを１ビット左シフトするメモリデータシフト部（１６）と、
前記フェッチアドレスシフト部を介して出力されるオリジナルスレッドのアドレスと、対応するコピースレッドのアドレスとを比較し、両者のアドレス値が不一致であればエラー信号を出力する第１比較部（５）と、
前記出力シフト部を介して出力されるアドレス及びデータを、前記オリジナルスレッドについて前記演算部より出力されるアドレス及びデータと比較し、両者のアドレス又はデータの値が不一致であればエラー信号を出力する第２比較部（１５）とを備えたことを特徴とするマイクロプロセッサ（１，３１，４１）。
【請求項２】
前記デコード部を第１デコード部（７）とし、前記第１デコード部に入力される命令と同じ命令が入力される第２デコード部（３２）と、
前記第１デコード部によるデコード結果と、第２側即値データシフト部を介して出力されるデコード結果とを比較する第３比較部（３３）と、
前記コピースレッド実行信号の入力の有無に応じて、前記即値データ入力シフト部より出力される即値データと、前記第２デコード部より出力される即値データとの一方を選択して前記演算部に出力するマルチプレクサ（３４）とを備えたことを特徴とする請求項１記載のマイクロプロセッサ（３１）。
【請求項３】
前記スレッド制御部は、コピー作成対象のスレッドが停止又は待機状態から実行可能状態に遷移すると、その時点で前記レジスタファイルの「空き」となっている停止中又は待機中のスレッド番号を用いてコピースレッドを生成し、
前記待機状態から実行可能状態に遷移した際には、対応するオリジナルスレッドのレジスタセットの値を１ビット左シフトして、コピースレッドのレジスタファイルにコピーし、
前記コピースレッドが実行状態から待機状態に遷移すると、当該コピースレッドのレジスタファイルを開放することを特徴とする請求項１又は２記載のマイクロプロセッサ（１，３１，４１）。
【請求項４】
前記演算部は、乗算器（４２）及び除算器（４４）を含んで構成されており、
前記出力シフト部は、コピースレッドについての乗算結果を１ビット右シフトする機能（４３）と、コピースレッドについての除算結果を１ビット左シフトする機能（４５）とを備えることを特徴とする請求項１から３の何れか一項に記載のマイクロプロセッサ（４１）。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチスレッド機能を有するマイクロプロセッサに関する。
【背景技術】
【０００２】
マイクロプロセッサの内、アプリケーションに応じて極めて高い安全性が要求されるものについては、故障が発生したことを検出する機能を備えることが求められている。そのため、例えば実行ユニットを複数設けて同じプログラムを実行させることで故障を検出するものもある。また、特許文献１は、実行ユニット（演算器）を１つだけ備えるものについて、故障の検出が可能となる構成を採用している。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特許第４３５７４２９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、特許文献１では、主たる演算器の故障を検出することが目的となっており、その他の周辺回路についての故障は検出の対象となっていない。
本発明は上記事情に鑑みてなされたものであり、その目的は、マルチスレッド機能を有するものについて、演算部だけでなくその周辺回路についての故障も検出可能なマイクロプロセッサを提供することにある。
【課題を解決するための手段】
【０００５】
請求項１記載のマイクロプロセッサによれば、スレッド制御部は、同一のプログラムを、オリジナルスレッドとコピースレッドとの２つのスレッドにより実行するように制御する。そのため、対応するオリジナルスレッドのレジスタセットの値を１ビット左シフトしてコピースレッドのレジスタファイルにコピーし、コピースレッドが実行対象となる期間はコピースレッド実行信号を出力する。
【０００６】
フェッチアドレスシフト部は、コピースレッド実行信号が入力されると、命令フェッチ部が出力するフェッチアドレスを１ビット右シフトして命令メモリに出力する。即値データシフト部は、コピースレッドについて、演算部に入力される即値データを１ビット左シフトし、メモリデータシフト部は、コピースレッドについて、データメモリから読み出されてレジスタファイルに入力されるデータを１ビット左シフトする。また、出力シフト部は、コピースレッドについて、演算部より出力されるデータメモリのアドレス及びデータメモリに対する書き込みデータを１ビット右シフトする。
【０００７】
第１比較部は、フェッチアドレスシフト部を介して出力されるオリジナルスレッドのアドレスと、対応するコピースレッドのアドレスとを比較する。すなわち、コピースレッドのフェッチアドレスは当該スレッドの生成時に左シフトされているので、命令フェッチの際に右シフトした値はオリジナルスレッドのフェッチアドレスと一致するはずである。したがって、両者のアドレス値が不一致であればエラー信号を出力する。
【０００８】
第２比較部は、出力シフト部を介して出力されるアドレス及びデータを、オリジナルスレッドについて演算部より出力されるアドレス及びデータと比較する。すなわち、コピースレッドのアドレスは当該スレッドの生成時に左シフトされているので、演算後のアドレスを右シフトした値はオリジナルスレッドのアドレスと一致するはずである。また、演算部に入力されるコピースレッドの即値データは予め左シフトされているので、演算後のデータを右シフトした値はオリジナルスレッドの即値データと一致するはずである。したがって、両者のアドレス又はデータの値が不一致であればエラー信号を出力する。
これにより、演算部の故障だけでなく、その周辺回路である命令フェッチ部についても故障が検出できるようになるので、マイクロプロセッサの信頼性をより向上させることが可能となる。
【０００９】
請求項２記載のマイクロプロセッサによれば、第１デコード部とは別個に、同じ命令が入力されて同じデコード処理を行う第２デコード部を設ける。そして、演算部には、コピースレッド実行信号の入力の有無に応じて、マルチプレクサにより、第１デコード部より出力され、即値データシフト部を介して左シフトされた即値データと、第２デコード部より出力される即値データとの一方が選択されて演算部に出力される。第３比較部は、第１デコード部により出力されるデコード結果と、第２デコード部により出力されるデコード結果とを比較する。
【００１０】
すなわち、請求項１のようにレジスタファイルを設けてコピースレッドを生成するのみでは、命令をデコード処理する部分は２重化されていない。そこで、請求項２のように、第１デコード部とは別個に第２デコード部を設けて、第３比較部が第１，第２デコード部によりそれぞれ出力されるデコード結果を比較すれば、デコード処理する部分も２重化することでマイクロプロセッサの信頼性を一層向上させることができる。
【図面の簡単な説明】
【００１１】
【図１】第１実施形態であり、マイクロプロセッサの内部構成を示す機能ブロック図
【図２】スレッド制御部で扱われる実行情報及びスレッド情報の内容を示す図
【図３】（ａ）は比較器５，（ｂ）は比較器１５についての詳細を、周辺回路も併せて示す図
【図４】スレッドの状態遷移図
【図５】複数のスレッドの実行状態を示すタイミングチャート
【図６】第２実施形態を示す図１相当図
【図７】第３実施形態を示す図１相当図
【発明を実施するための形態】
【００１２】
（第１実施形態）
図１において、マイクロプロセッサ１は、ＩＦ（命令フェッチ），ＩＤ（命令デコード），ＥＸ（実行），ＭＡ（メモリアクセス），ＷＢ（ライトバック）からなる５つのステージで構成されている。ＩＦステージは、命令メモリ２より命令をフェッチする命令フェッチ部３と、命令フェッチ部３が出力するフェッチアドレスを１ビット右シフトするシフタ４（フェッチアドレスシフト部）と、シフタ４を介して出力するアドレス値を比較する比較器５（第１比較部）とを備えている。
【００１３】
命令フェッチ部３は、後述するように、各スレッドに対応し、且つオリジナル／コピーの双方に対応して設けられているプログラムカウンタによって与えられるフェッチアドレスをシフタ４に出力する。そして、シフタ４は、スレッド制御部６より与えられるコピースレッド信号がアクティブであるときのみ右シフトを行い、命令メモリ２に出力する。
【００１４】
ＩＤステージは、命令フェッチ部３がフェッチした命令をデコードする命令デコード部７と、前記デコードの結果に応じてデータが格納されるレジスタファイル８と、前記デコードの結果に応じて出力される即値データを１ビット左シフトするシフタ９（即値データシフト部）とを備えている。シフタ９は、コピースレッド信号がアクティブであるときのみ左シフトを行う。
【００１５】
レジスタファイル８中のレジスタには、プログラムカウンタ（ＰＣ）が含まれている。ＰＣは、各スレッドに対応して夫々設けられる。また、オリジナルスレッドについて生成されるコピースレッドも、対応するＰＣを独自に備えることになる。尚、以降において「レジスタファイル８」と称する場合は、レジスタファイル８の全てのレジスタを示す場合だけでなく、一部のレジスタ群を示す場合も含むものとする。
【００１６】
ＥＸステージは、レジスタファイル８を介して出力される即値データと、シフタ９を介して出力される即値データとを選択して出力するマルチプレクサ１０と、マルチプレクサ１０より出力されるデータ，レジスタファイル８を介して直接出力されるデータとが入力される演算器１１（演算部）とを備えている。マルチプレクサ１０及び演算器１１は、前記デコードの結果に応じて制御される。尚、演算器１１が行う演算は、加算，減算及びその他一般的な論理演算等である。
【００１７】
ＭＡステージは、演算器１１より出力されるアドレスaddr，データwr＿dataを夫々１ビット右シフトするシフタ１２，１３（出力シフト部）と、シフタ１２，１３を介して出力されるアドレス，データによりアクセスが行われるデータメモリ１４と、シフタ１２，１３を介して出力されるアドレス，データを比較する比較器１５（Ａ，Ｄ：第２比較部））と、データメモリ１４より読み出されたデータrd＿dataがレジスタファイル８に書き戻される際にデータを１ビット左シフトするシフタ１６（メモリデータシフト部）とを備えている。
尚、図１については、図示が複雑になることを回避するため、一部を省略した状態で示している。詳細については、後述して補足する。
【００１８】
図２において、スレッドは、上述したＩＦ，ＩＤ，ＥＸ，ＭＡ，ＷＢからなる５つのステージを順次移行することで処理される。各スレッドが何れのステージにあるかを示すのが実行情報であり、各ステージにあるスレッドについての情報がスレッド情報である。スレッド情報は、以下の内容からなる。
「番号」：スレッドの番号
「状態」：スレッドの実行状態
original/copy：スレッドについてオリジナル，コピーの別
オリジナルスレッド番号：コピースレッドに対応するオリジナルスレッドの番号
【００１９】
図３（ａ）において、比較器５の周辺には、レジスタ２１及び２２と比較器２３とが配置されている。レジスタ２１には、スレッド制御部６より与えられるスレッド情報中のオリジナルスレッドの番号が保持される。比較器２３は、レジスタ２１に保持されたオリジナルスレッド番号と、スレッド制御部６より与えられるコピースレッドの対象オリジナルスレッド番号とを比較する。そして、双方のスレッド番号が一致すれば、比較器５に対して比較動作のイネーブル信号を出力する。
【００２０】
レジスタ２２には、シフタ４を介して与えられるオリジナルスレッドの命令フェッチアドレスが保持される。比較器５は、レジスタ２２に保持されたオリジナルスレッドのフェッチアドレスと、同様にシフタ４を介して与えられるコピースレッドのフェッチアドレスとを比較する。そして、双方のアドレス値が異なる場合はエラー信号を出力する。エラー信号は、例えばマイクロプロセッサ１の動作を監視する上位の制御装置に等に出力され、必要に応じてマイクロプロセッサ１の動作を停止させるなどする。
【００２１】
図３（ｂ）において、比較器１５の周辺には、レジスタ２４及び２５と比較器２６とが配置されている。これらは、図３（ａ）に示す構成と対称になっている。そして、比較器１５は、演算器１１より出力され、レジスタ２５に保持されたオリジナルスレッドのデータアクセスアドレス又はデータと、コピースレッドのデータアクセスアドレス又はデータとを比較する。そして、双方のアドレス又はデータ値が異なる場合はエラー信号を出力する。
尚、請求項における「データメモリアクセス部」に相当する構成は、データメモリ１４に対するデータの読書き；リードアクセス，ライトアクセスを制御する部分であるが、周知の構成であるため図示を省略している。
【００２２】
次に、本実施形態の作用について図４及び図５を参照して説明する。図４において、スレッドの状態には「停止」，「実行可能」，「実行」，「待機」の４つがある。そして、スレッドが「停止」から「実行可能」に遷移する際に（開始）、スレッド制御部６は、当該スレッドが、高信頼性が要求されているスレッドであるか否かを判断する（Ａ１）。尚、この判断については、実行対象となるスレッドの全てについて高信頼性が要求されている場合は勿論不要である。高信頼性が要求されていれば（ＹＥＳ）、レジスタファイル８において「空き」となっているスレッド（レジスタ）が発生するまで待機し（Ａ２：ＮＯ）、空きスレッドが発生すれば（ＹＥＳ）、実行対象となるスレッドのコピーを生成する（Ａ３）。
尚、上記のステップＡ３でコピースレッドを生成する際には、オリジナルスレッドのＰＣ値が１ビット左シフトされた値がコピーされるが、その他のレジスタについては「０」又は「不定」の初期値であるから、コピーする必要はない。
【００２３】
スレッドが「実行」から「待機」に遷移する際に（サスペンド）、スレッド制御部６は、ステップＡ１と同じ判断を行い（Ｂ１）、高信頼性が要求されていれば（ＹＥＳ）、当該オリジナルスレッドに対応するコピースレッドの実行が完了するまで待機する（Ｂ２：ＮＯ）。そして、実行が完了すれば（ＹＥＳ）、当該コピースレッドを停止（すなわち、コピースレッドに使用していたレジスタを開放）する（Ｂ３）。尚、実行中のスレッドがプリエンプションとなれば「実行可能」に遷移する
また、スレッドが「待機」から「実行可能」に遷移する際に（再開）、スレッド制御部６は、ステップＡ１〜Ａ３と同じ処理を行う（Ｃ１〜Ｃ３）。そして、コピースレッドを生成すると、オリジナルスレッドにおけるレジスタセットの各レジスタ値を、コピースレッド用に確保したレジスタセットにコピーする（Ｃ４）。
【００２４】
図５は、命令Instr１〜３が順次フェッチされて実行される際のタイミングチャートであり、以下の各命令が順次、ＩＦ，ＩＤ，ＥＸ，ＭＡ，ＷＢの各ステージを経るようにパイプライン処理される。またその際に、各命令のオリジナルスレッドと対応するコピースレッドとが並行して処理される。
Instr１：ＬＤ    Ｒ１＠Ｒ０
（レジスタＲ１にレジスタＲ０で示すアドレスからデータをロード）
Instr２：ＡＤＤ  Ｒ１＃１
（レジスタＲ１をインクリメント）
Instr３：ＳＴ    ＠Ｒ０Ｒ１
（レジスタＲ１の内容をレジスタＲ０で示すアドレスにストア）
ＩＦステージでは、命令メモリ２に対する命令フェッチが行われると、そのフェッチアドレス（オリジナル）のコピーが生成され、比較器５において比較判定が行われる。また、ＭＡステージでは、データメモリ１４に対するメモリアクセスが行われると、その際にアクセスアドレス及びデータ（オリジナル）についてのコピーが生成され、比較器５において比較判定が行われる。
【００２５】
尚、ＷＢステージにおいて、データメモリ１４に記憶されているデータがレジスタファイル８内のレジスタにロードされる際には、コピースレッドに対応するデータはシフタ１６により１ビット左シフトされたものがロードされる。また、それとは別に、演算器１１が出力したデータを直接レジスタファイル８にロードするためのパスが存在する。
【００２６】
以上のように本実施形態によれば、マルチスレッド機能を有するマイクロプロセッサ１のスレッド制御部６は、同一のプログラムを、オリジナル，コピーの２つのスレッドにより実行するように制御するため、対応するオリジナルスレッドのレジスタセットの値を１ビット左シフトし、コピースレッドのレジスタセットとしてレジスタファイル８にコピーする。そして、コピースレッドが実行対象となる期間はコピースレッド実行信号を出力する。
シフタ４は、コピースレッド実行信号が入力されると、命令フェッチ部３が出力するフェッチアドレスを１ビット右シフトして命令メモリ２に出力し、比較器５は、シフタ４を介して出力されるオリジナルスレッドのアドレスと、対応するコピースレッドのアドレスとを比較し、両者のアドレス値が不一致であればエラー信号を出力する。
【００２７】
シフタ９は、コピースレッドについて、演算器１１に入力される即値データを１ビット左シフトし、シフタ１６は、コピースレッドについて、データメモリ１４から読み出されてレジスタファイル８に入力されるデータを１ビット左シフトする。また、シフタ１２及び１３は、コピースレッドについて、演算器１１より出力されるデータメモリ１４のアドレス及びデータメモリ１４に対する書き込みデータをそれぞれ１ビット右シフトする。
そして、比較器１５は、シフタ１２及び１３を介して出力されるアドレス及びデータを、オリジナルスレッドについて演算器１１より出力されるアドレス及びデータと比較し、両者のアドレス又はデータの値が不一致であればエラー信号を出力する。したがって、演算器１１の故障だけでなく、その周辺回路である命令フェッチ部３についても故障が検出できるようになり、マイクロプロセッサ１の信頼性をより向上させることが可能となる。
【００２８】
また、スレッド制御部６は、コピー作成対象のスレッドが停止又は待機状態から実行可能状態に遷移すると、その時点でレジスタファイル８の「空き」となっている停止中又は待機中のスレッド番号を用いてコピースレッドを生成する。そして、スレッドが待機状態から実行可能状態に遷移した際には、対応するオリジナルスレッドのレジスタセットの値を１ビット左シフトしてコピースレッドのレジスタファイル８にコピーし、コピースレッドが実行状態から待機状態に遷移すると、当該コピースレッドのレジスタファイル８を開放する。したがって、コピースレッドを取り扱うためレジスタファイル８のサイズを大きくすることなく、効率的に使用できる。
【００２９】
（第２実施形態）
以下、第１実施形態と同一部分には同一符号を付して説明を省略し、異なる部分について説明する。図６において、マイクロプロセッサ３１は、第１実施形態における命令デコード部７を第１命令デコード部７と称し、同様に、命令フェッチ部３より入力される命令をデコード処理する第２命令デコード部３２を備えている。
【００３０】
デコード結果比較器３３（第３比較部）は、第１命令デコード部７のデコード結果と、第２命令デコード部３２のデコード結果が一致するか否かを比較し、不一致であればエラー信号を出力する。また、マルチプレクサ３４は、シフタ９とマルチプレクサ１０との間に配置されており、コピースレッド実行信号の入力の有無に応じて、第１命令デコード部７より出力され、シフタ９を介して左シフトされた即値データと、第２命令デコード部３２より出力される即値データとの何れかを選択してマルチプレクサ１０に出力する。したがって、演算器１１に対しては、マルチプレクサ３４及び１０を介して、第１命令デコード部７，第２命令デコード部３２より出力される即値データの何れか一方が入力される。
【００３１】
以上のように構成される第２実施形態によれば、マルチプレクサ３１に、第１命令デコード部７と第２命令デコード部３２とを設け、デコード結果比較器３３は、２つのデコード部７，３２により出力されるデコード結果を比較するようにした。したがって、命令をデコード処理する部分も２重化することで、マイクロプロセッサ３１の信頼性を一層向上させることができる。
【００３２】
（第３実施形態）
図７において、マイクロプロセッサ４１は、第１実施形態の構成において、演算器１１に対して並列に、乗算器４２（演算部）及びシフタ４３（出力シフト部）と、除算器４４（演算部）及びシフタ４５（出力シフト部）とを配置したものである。乗算器４２，除算器４４は、それぞれ命令デコード部７のデコード結果に応じて乗算と除算とを行う。そして、シフタ４３は、コピースレッド実行信号が与えられると乗算器４２が出力した乗算結果を１ビット右シフトし、シフタ４５は、コピースレッド実行信号が与えられると除算器４４が出力した除算結果を１ビット左シフトする。
【００３３】
すなわち、乗算器４２がコピースレッドについて１ビット左シフトされたデータの乗算を行えば、その結果を更に１ビット右シフトすることでオリジナルスレッドについての乗算結果に一致する。除算器４４についても同様であり、コピースレッドについて１ビット左シフトされたデータの除算を行えば、その結果を更に１ビット左シフトすることでオリジナルスレッドについての除算結果に一致する。したがって、第３実施形態によれば、マイクロプロセッサ４１が乗算及び除算を行う構成についても、第１実施形態と同様にコピースレッドを生成して２重化することができる。
【００３４】
本発明は、上記した、または図面に記載した実施形態にのみ限定されるものではなく、以下のような変形又は拡張が可能である。
シフタ９の機能を、命令デコード部７に含ませても良い。
また、第３実施形態において、乗算器４２及びシフタ４３，除算器４４及びシフタ４５を演算器１１と一体に構成しても良い。
第２，第３実施形態を組み合わせて実施しても良い。
【符号の説明】
【００３５】
図面中、１はマイクロプロセッサ、２は命令メモリ、３は命令フェッチ部、４はシフタ（フェッチアドレスシフト部）、５は比較器（第１比較部）、６はスレッド制御部、７はデコード部、８はレジスタファイル、９はシフタ（即値データシフト部）、１１は演算器（演算部）、１２，１３はシフタ（出力シフト部）、１４はデータメモリ、１５は比較器（第２比較部）、１６はシフタ（メモリデータシフト部）である。
【図１】
2014126986.tif 000003
【図２】
2014126986.tif 000004
【図３】
2014126986.tif 000005
【図４】
2014126986.tif 000006
【図５】
2014126986.tif 000007
【図６】
2014126986.tif 000008
【図７】
2014126986.tif 000009