(57)【要約】  この発明は、メモリと、命令を処理する命令処理部、メモリのデータの一部を格納するキャッシュ、キャッシュに格納されたデータのエラーを検出するエラー検出部、キャッシュに格納されたデータおよびエラー通知をもとにキャッシュに格納されたデータを訂正し命令処理部へ出力するエラー訂正部、を有する第１と第２のＣＰＵとを備え、第１のＣＰＵのエラー訂正部は、第１のＣＰＵのキャッシュに格納されたデータ、第１のＣＰＵのエラー通知、第２のＣＰＵのキャッシュに格納されたデータおよび第２のエラー通知を入力し、第１のＣＰＵのエラー通知がエラーかつ第２のＣＰＵのエラー通知がエラーではなかった場合、第２のＣＰＵのキャッシュに格納されたデータを第１のＣＰＵの命令処理部に出力し、それ以外の場合、第１のＣＰＵのキャッシュに格納されたデータを第１のＣＰＵの命令処理部へ出力することを特徴とするデータ処理装置を備える。
2016113774.tif 000002
【特許請求の範囲】
【請求項１】
プログラムおよびデータを格納するメモリと、
命令を処理する命令処理部、前記メモリのプログラムおよびデータの一部を格納するキャッシュ、前記キャッシュに格納されたデータのエラーを検出しエラー通知を出力するエラー検出部、前記キャッシュに格納されたデータおよび前記エラー通知をもとに前記キャッシュに格納されたデータを訂正し前記命令処理部へ訂正後のデータを出力するエラー訂正部、をそれぞれ有する第１と第２のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）とを備え、
前記第１のＣＰＵのエラー訂正部は、前記第１のＣＰＵのキャッシュに格納されたデータ、前記第１のＣＰＵのエラー検出部が出力するエラー通知、前記第２のＣＰＵのキャッシュに格納されたデータおよび前記第２のＣＰＵのエラー検出部が出力するエラー通知を入力し、前記第１のＣＰＵのエラー検出部の出力するエラー通知がエラーかつ前記第２のＣＰＵのエラー検出部の出力するエラー通知がエラーではなかった場合、前記第２のＣＰＵのキャッシュに格納されたデータを前記第１のＣＰＵの命令処理部に出力し、それ以外の場合、前記第１のＣＰＵのキャッシュに格納されたデータを前記第１のＣＰＵの命令処理部へ出力することを特徴とするデータ処理装置。
【請求項２】
前記第１のＣＰＵは、前記第１のＣＰＵのエラー訂正部が出力するエラー通知および前記第２のＣＰＵのエラー訂正部が出力するエラー通知を格納する第１のレジスタと、前記第１のレジスタを参照し、格納されたエラー通知のいずれか一方がエラーであった場合、前記第１のＣＰＵのキャッシュの修復を行う修復処理部を備え、
前記第２のＣＰＵは、前記第１のＣＰＵのエラー訂正部が出力するエラー通知および前記第２のＣＰＵのエラー訂正部が出力するエラー通知を格納する第２のレジスタと、前記第２レジスタを参照し、格納されたエラー通知のいずれか一方がエラーであった場合、前記第２のＣＰＵのキャッシュの修復を行う修復処理部を備えることを特徴とする請求項１に記載のデータ処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、故障検出が可能なデータ処理装置に関するものである。
【背景技術】
【０００２】
データ処理装置の信頼性を上げる方法として、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を冗長構成にして双方の出力を比較して故障を検出するロックステップがある。一般的なロックステップでは、二個のＣＰＵが同一のプログラムを実行しながら双方の出力を比較し、不一致であれば故障と検知する。【０００３】
しかし、二個のＣＰＵの出力の比較だけでは、どちらのＣＰＵが故障したかを判断することはできないため、処理を継続することはできない。また、ＣＰＵを三重化以上にした場合は多数決によって正常な出力を選択することは可能であるが、ハードウェアコストが大きくなる。【０００４】
特許文献１では冗長構成の要素の内部に故障検出手段を備える要素を備えており、ある要素から故障を検出した場合は、故障を検出しなかった要素の出力を選択して出力する方法が提案されている。【０００５】
特許文献２では、ロックステップで動作するＣＰＵの内蔵ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）の故障をＣＰＵ内部で検出した場合は、ＣＰＵの出力の比較器の不一致出力を抑制し、内蔵ＲＡＭの障害を修復することでシステムの信頼性を向上させている。【０００６】
特許文献３では、二重系システムで比較エラーが発生し、片系で異常が発生したことを検出すると異常を検出しなかった系統の記憶装置のデータを、異常を検出した系統の記憶装置に転送して故障を修復する方法が示されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特ＷＯ２０１１−０９９２３３号公報
【特許文献２】特開平０８−０６３３６５号公報
【特許文献３】特開平０２−３０１８３６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
特許文献１では、故障検出時は正常なデータを選択して出力するため処理を継続することはできるが、故障の修復を行わない。そのため故障検出後は冗長性が失われ、信頼性が低下するという課題がある。【０００９】
特許文献２では、故障を修復している間はこれまで実行していた処理が継続できないため、リアルタイム性が要求される組込みシステムには適用できない課題がある。【００１０】
特許文献３では、比較エラー発生時に異常となったデータを正常なデータに訂正することはないため、比較エラー発生時にＣＰＵが読み出したデータはＣＰＵが受信してしまう。そのため、処理を継続するには故障を修復した後、再度比較エラーが発生したデータを読み出す必要がある。【００１１】
本発明は上記の問題を解決するためになされたもので、ＣＰＵ内で故障が発生した場合でも、リアルタイム性が要求される処理を継続させることができ、かつ、高い信頼性を維持することができるデータ処理装置を提供することを目的とする。
【課題を解決するための手段】
【００１２】
本発明の一態様に係るデータ処理装置は、プログラムおよびデータを格納するメモリと、命令を処理する命令処理部、前記メモリのプログラムおよびデータの一部を格納するキャッシュ、前記キャッシュに格納されたデータのエラーを検出しエラー通知を出力するエラー検出部、前記キャッシュに格納されたデータおよび前記エラー通知をもとに前記キャッシュに格納されたデータを訂正し前記命令処理部へ訂正後のデータを出力するエラー訂正部、を有する第１と第２のＣＰＵとを備え、前記第１のＣＰＵのエラー訂正部は、前記第１のＣＰＵのキャッシュに格納されたデータ、前記第１のＣＰＵのエラー検出部が出力するエラー通知、前記第２のＣＰＵのキャッシュに格納されたデータおよび前記第２のＣＰＵのエラー検出部が出力するエラー通知を入力し、前記第１のＣＰＵのエラー検出部の出力するエラー通知がエラーかつ前記第２のＣＰＵのエラー検出部の出力するエラー通知がエラーではなかった場合、前記第２のＣＰＵのキャッシュに格納されたデータを前記第１のＣＰＵの命令処理部に出力し、それ以外の場合、前記第１のＣＰＵのキャッシュに格納されたデータを前記第１のＣＰＵの命令処理部へ出力することを特徴とする。
【発明の効果】
【００１３】
本発明によれば、プログラムおよびデータを格納するメモリと、命令を処理する命令処理部、前記メモリのプログラムおよびデータの一部を格納するキャッシュ、前記キャッシュに格納されたデータのエラーを検出しエラー通知を出力するエラー検出部、前記キャッシュに格納されたデータおよび前記エラー通知をもとに前記キャッシュに格納されたデータを訂正し前記命令処理部へ訂正後のデータを出力するエラー訂正部、を有する第１と第２のＣＰＵとを備え、前記第１のＣＰＵのエラー訂正部は、前記第１のＣＰＵのキャッシュに格納されたデータ、前記第１のＣＰＵのエラー検出部が出力するエラー通知、前記第２のＣＰＵのキャッシュに格納されたデータおよび前記第２のＣＰＵのエラー検出部が出力するエラー通知を入力し、前記第１のＣＰＵのエラー検出部の出力するエラー通知がエラーかつ前記第２のＣＰＵのエラー検出部の出力するエラー通知がエラーではなかった場合、前記第２のＣＰＵのキャッシュに格納されたデータを前記第１のＣＰＵの命令処理部に出力し、それ以外の場合、前記第１のＣＰＵのキャッシュに格納されたデータを前記第１のＣＰＵの命令処理部へ出力するので、ＣＰＵ内で故障が発生した場合でも、処理を継続させることができ、かつ、高い信頼性を維持することが可能となる。
【図面の簡単な説明】
【００１４】
【図１】本実施の形態１におけるハードウェア構成を示す図である。
【図２】本実施の形態１におけるエラー訂正部の回路構成図である。
【図３】本実施の形態１におけるエラー訂正部が訂正データを出力する条件を示した表である。
【図４】本実施の形態２における命令処理部が実行するプログラムのフローチャートである。
【図５】本実施の形態２におけるエラー修復処理のフローチャートである。
【発明を実施するための形態】
【００１５】
実施の形態１．
図１はこの発明のハードウェア構成を示す図である。
図１において、１００Ａ、１００Ｂは同一構成のＣＰＵであり、システムバス２００に接続される。ＣＰＵ１００Ａの出力のみがシステムバス２００に接続される。なお、本実施の形態では、ＣＰＵ１００ＡとＣＰＵ１００Ｂは同一構成としたが、本実施の形態で述べる構成要素さえ同一であれば、ＣＰＵ１００ＡとＣＰＵ１００Ｂとで異なる構成要素を有しても良い。
比較器３００は、ＣＰＵ１００Ａの出力と１００Ｂの出力を入力とし、双方を比較した結果を比較エラー信号４００に出力する。
【００１６】
次に、ＣＰＵ１００Ａの内部構成について説明する。なお、ＣＰＵ１００Ｂの内部構成もＣＰＵ１００Ａの内部構成と同じである。
ＣＰＵ１００Ａは、命令を処理する命令処理部１０１Ａ、命令処理部１０１Ａで処理する命令コードとデータを格納するローカルメモリ（メモリ）１０４Ａ、ローカルメモリ１０４Ａのデータを一時的に格納するキャッシュ１０２Ａ、キャッシュ１０２Ａでエラーが検出された場合、データを訂正するデータ訂正部１０６Ａ、ＣＰＵ１００Ａ及びＣＰＵ１００Ｂのエラー検出信号を格納するレジスタ１０７Ａ、キャッシュ１０２Ａが出力するデータを修復する修復処理部１０８Ａを備える。
キャッシュ１０２Ａおよびローカルメモリ１０４Ａは、バス１０５Ａで接続されている。なお、本実施の形態では、メモリをＣＰＵ１００Ａ内部のローカルメモリ１０４Ａとしたが、ＣＰＵ１００Ａの外部、例えば、バス２００に接続されたメモリや外部記憶装置であってもよい。
【００１７】
キャッシュ１０２Ａは、データの格納状態を示すフラグ１０２１Ａ、格納しているデータのアドレスを示すタグ１０２２Ａ、ローカルメモリ１０４Ａのデータの一部を格納するデータ領域１０２３Ａ、データ領域１０２３Ａに対応したパリティを格納するパリティ領域１０２４Ａ、データ領域１０２３Ａおよびパリティ領域１０２４Ａからパリティエラーが発生しているかをチェックするエラー検出部１０２５Ａを備える。なお、本実施の形態では、エラー検出部１０２５Ａをキャッシュ１０２Ａの内部の構成要素としたが、例えば、キャッシュ１０２Ａの外部の構成要素とし、命令処理部１０１Ａで実行しても良い。
【００１８】
エラー検出部１０２５Ａは、パリティエラーの発生の有無を示すエラー検出信号１０２６Ａをエラー訂正部１０６Ａに出力するとともに、レジスタ１０７Ａに格納する。
なお、レジスタ１０７Ａには、ＣＰＵ１００Ｂのエラー検出部１０２５Ｂから出力されるエラー検出信号１０２６Ｂの信号値も格納される。
【００１９】
エラー訂正部１０６Ａは、ＣＰＵ１００Ａのエラー検出信号１０２６Ａと、キャッシュ１０２Ａが出力するデータ１０２７Ａと、ＣＰＵ１００Ｂのエラー検出信号１０２６Ｂと、ＣＰＵ１００Ｂのキャッシュ１０２Ｂが出力するデータ１０２７Ｂを入力とし、データの訂正を行う。
エラー訂正部１０６Ａは、訂正した後のデータ１０２８Ａを命令処理部１０１Ａおよびバス１０５Ａへ出力する。
【００２０】
修復処理部１０８Ａは、レジスタ１０７Ａを参照し、エラーが検出された場合、キャッシュ１０２Ａが出力するデータ１０２７Ａを修復する。なお、本実施の形態では、修復処理部１０８ＡをＣＰＵ１００Ａの内部の構成要素としたが、修復処理部１０８Ａは、例えば、ローカルメモリ１０４Ａ上のプログラムであっても良いし、バス２００に接続されたメモリ（図示せず）や外部記憶装置上のプログラムであってもよい。
【００２１】
次にＣＰＵ１００Ａの動作について説明する。
命令処理部１０１Ａは、ローカルメモリ１０４Ａから実行すべき命令もしくは、実行に必要なデータを読み出す。このとき命令処理部１０１Ａの読み出し要求は、まず、キャッシュ１０２Ａに伝えられ、キャッシュ１０２Ａ内のデータ領域１０２３Ａに読み出すデータが格納されているかを確認する。
【００２２】
キャッシュ１０２Ａは、フラグ１０２１Ａとタグ１０２２Ａの情報から、読み出し要求のあったデータがデータ領域１０２３Ａに格納されているかを確認する。
データ領域１０２３Ａに該当データがあった場合、キャッシュ１０２Ａは、該当するデータ領域１０２３Ａのデータと対応するパリティ領域１０２４Ａを読み出し、エラー検出部１０２５Ａに入力する。
【００２３】
データ領域１０２３Ａに該当データがない場合でかつ該当データを格納するための領域にローカルメモリ１０４Ａと同じデータが格納されている場合（フラグ１０２１ＡにあるＤｉｒｔｙビット（Ｄ）が０の場合）、キャッシュ１０２Ａは、該当データを格納するための領域を無効化した後、バス１０５Ａを経由してローカルメモリ１０４Ａに対し読み出しを要求し、キャッシュ１０２Ａに格納できるサイズのデータを読み込む。
【００２４】
キャッシュ１０２Ａは、ローカルメモリ１０４Ａから読み出したデータをデータ領域１０２３Ａに格納すると共に、フラグ１０２１Ａとタグ１０２２Ａを更新する。
また、キャッシュ１０２Ａは、データの値に対応するパリティを作成し、パリティ領域１０２４Ａに格納する。
また、キャッシュ１０２Ａは、格納したデータとパリティをエラー検出部１０２５Ａに出力する。
【００２５】
エラー検出部１０２５Ａは、入力されたデータとパリティが一致しているかを検査する。
パリティが一致しない場合、エラー検出部１０２５Ａは、エラー検出信号１０２６Ａに”１”（エラーあり）を出力する。
データとパリティが一致した場合、エラー検出部１０２５Ａは、エラー検出信号１０２６Ａに”０”（エラーなし）を出力する。
【００２６】
キャッシュ１０２Ａは、エラー検出信号１０２６Ａをエラー訂正部１０６Ａおよびレジスタ１０７Ａに加え、もう一方のＣＰＵ１００Ｂのエラー訂正部１０６Ｂおよびレジスタ１０７Ｂに出力する。
また、キャッシュ１０２Ａは、命令処理部１０１Ａから読み出し要求のあったデータ１０２７Ａをエラー検出部１０６Ａに加え、もう一方のＣＰＵ１００Ｂのエラー訂正部１０６Ｂに出力する。
【００２７】
図２および図３を用いてエラー訂正部１０６Ａの詳細について説明する。
図２はエラー訂正部１０６Ａの回路構成、図３は訂正したデータ１０２８Ａの出力条件を示した表である。
図２の１０２６１はＮＯＴゲート、１０２６２はＡＮＤゲート、１０２６３はセレクタを表している。
【００２８】
セレクタ１０２６３は、ＡＮＤゲート１０２６２の出力が０の場合は、自身のＣＰＵであるＣＰＵ１００Ａのデータ１０２７Ａを出力し、ＡＮＤゲート１０２６２の出力が１の場合は、もう一方（他方）のＣＰＵであるＣＰＵ１００Ｂのデータ１０２７Ｂを出力する。出力したデータは、訂正後のデータ１０２８Ａとして命令処理部１０１Ａへ出力される。
【００２９】
なお、データ領域１０２３Ａに該当データがない場合でかつ該当データを格納するための領域にローカルメモリ１０４Ａより新しいデータが格納されている場合（フラグ１０２１ＡにあるＤｉｒｔｙビット（Ｄ）が１の場合）、キャッシュ１０２Ａは、該当データを格納するための領域にあるデータをローカルメモリ１０４Ａに書き出しを行う。
キャッシュ１０２Ａは、ローカルメモリ１０４Ａに書き込むデータをデータ領域１０２３Ａとパリティ１０２４Ａから読み出し、読み出したデータとパリティをエラー検出部１０２５Ａに出力する。
【００３０】
エラー検出部１０２５Ａは、入力されたデータとパリティが一致しているかを検査する。
パリティが一致しない場合、エラー検出部１０２５Ａは、エラー検出信号１０２６Ａに”１”（エラーあり）を出力する。
データとパリティが一致した場合、エラー検出部１０２５Ａは、エラー検出信号１０２６Ａに”０”（エラーなし）を出力する。
【００３１】
キャッシュ１０２Ａは、エラー検出信号１０２６Ａをエラー訂正部１０６Ａに加え、もう一方のＣＰＵ１００Ｂのエラー訂正部１０６Ｂに出力する。
また、キャッシュ１０２Ａは、ローカルメモリ１０４Ａに書き込むデータ１０２７Ａをエラー訂正部１０６Ｂに出力する。
【００３２】
エラー訂正部１０６Ａは、キャッシュ１０２Ａから出力されるエラー検出信号１０２６Ａとデータ１０２７Ａに加え、ＣＰＵ１００Ｂのキャッシュ１０２Ｂから出力されるエラー検出信号１０２６Ｂとデータ１０２７Ｂを入力とし、訂正を行う。
エラー訂正部１０６Ａは、訂正した後のデータ１０２８Ａを、バス１０５Ａを経由してローカルメモリ１０４Ａに出力する。上記動作により、ローカルメモリ１０４Ａへの書き出しを行った後、ローカルメモリ１０４Ａからの読み出しを要求し、キャッシュ１０２Ａに格納できるサイズのデータを読み込む。
【００３３】
キャッシュ１０２Ａは、ローカルメモリ１０４Ａから読み出したデータをデータ領域１０２３Ａに格納すると共に、フラグ１０２１Ａとタグ１０２２Ａを更新する。
また、キャッシュ１０２Ａは、データの値に対応するパリティを作成し、パリティ領域１０２４Ａに格納する。
また、キャッシュ１０２Ａは、格納したデータとパリティをエラー検出部１０２５Ａに出力する。
【００３４】
エラー検出部１０２５Ａは、入力されたデータとパリティが一致しているかを検査する。
パリティが一致しない場合、エラー検出部１０２５Ａは、エラー検出信号１０２６Ａに”１”（エラーあり）を出力する。
データとパリティが一致した場合、エラー検出部１０２５Ａは、エラー検出信号１０２６Ａに”０”（エラーなし）を出力する。
【００３５】
キャッシュ１０２Ａは、エラー検出信号１０２６Ａをエラー訂正部１０６Ａおよびレジスタ１０７Ａに加え、もう一方のＣＰＵ１００Ｂのエラー訂正部１０６Ｂおよびレジスタ１０７Ｂに出力する。
また、キャッシュ１０２Ａは、命令処理部１０１Ａから読み出し要求のあったデータ１０２７Ａをエラー訂正部１０６Ｂに出力する。
【００３６】
エラー訂正部１０６Ａは、キャッシュ１０２Ａから出力されるエラー検出信号１０２６Ａとデータ１０２７Ａに加え、ＣＰＵ１００Ｂのキャッシュ１０２Ｂから出力されるエラー検出信号１０２６Ｂとデータ１０２７Ｂを入力とし、訂正を行う。
エラー訂正部１０６Ａは、訂正した後のデータ１０２８Ａを出力する。
【００３７】
エラー訂正部１０６Ａは、自身のＣＰＵ１００Ａのキャッシュ１０２Ａが出力したエラー検出信号１０２６Ａが”０”の場合は、エラーが発生していないので訂正後のデータ１０２８Ａにデータ１０２７Ａの値を出力する。
また、エラー検出信号１０２６Ａ、エラー検出信号１０２６Ｂがいずれも”１”の場合は、両方のＣＰＵ１００Ａ、ＣＰＵ１００Ｂ内でエラーが発生しており、いずれのデータも正しくないため、訂正後のデータ１０２８Ａに自身のＣＰＵ１００Ａのデータ１０２７Ａの値を出力する。
【００３８】
一方、エラー検出信号１０２６Ａが”１”、エラー検出信号１０２６Ｂが”０”の場合は、ＣＰＵ１００Ａ内でエラーが発生し、ＣＰＵ１００Ｂ内でエラーが発生していないことを意味している。
そのため、データ１０２７Ａは異常な値であり、データ１０２７Ｂは正常な値であると推測されることから、訂正後のデータ１０２８Ａにはデータ１０２７Ｂの値を出力する。
【００３９】
レジスタ１０７Ａは、キャッシュ１０２Ａから出力されたエラー検出信号１０２６ＡとＣＰＵ１００Ｂのキャッシュ１０２Ｂから出力されたエラー検出信号１０２６Ｂの値をそれぞれ格納する。
各信号が１を出力した場合はその値を保持する。修復処理部１０８Ａは、レジスタ１０７Ａの値を読み出したときにエラーが発生しているかを確認することができる。
【００４０】
エラー訂正部１０６Ａは、訂正した後のデータ１０２８Ａを命令処理部１０１Ａに出力する。
命令処理部１０１Ａは、エラー訂正部１０６Ａが出力したデータをもとに処理を継続する。
以上がＣＰＵ１００Ａの動作である。ＣＰＵ１００Ｂの動作もＣＰＵ１００Ａの動作と同じである。
【００４１】
本実施の形態の効果について述べる。
従来では、ＣＰＵ１００Ａのキャッシュ１０２Ａのデータ領域１０２３Ａの値のうち１ビットが反転するエラーが発生した場合、エラー検出部１０２５Ａがパリティエラーを検出するが、データを訂正できないため、データの読み出しを行った命令処理部１０１Ａには正しい値を受信することができず、正常な処理を継続することが困難であったのに対し、本実施の形態では、上述のように、エラー訂正部１０６Ａがエラーの発生しなかったＣＰＵ１００Ｂのデータ１０２７Ｂを訂正後のデータ１０２８Ａとして命令処理部１０１Ａへ出力するため、命令処理部１０１Ａは正常なデータを受信し、エラーが発生しなかった場合と同じように処理を継続することができる。
【００４２】
実施の形態２．
本実施の形態では、エラーが発生していたデータを含む領域のキャッシュの修復処理について説明する。
本実施の形態では、通常の処理として処理１〜３を繰り返し実行する例について説明する。処理１、２、３の優先度はそれぞれ１００、２００、３００とし、番号が低いほど優先度が高い。
また、処理１はシステム動作に必須の処理であり、処理２、３はシステムの高機能化を実現するための付加処理とする。そのため、異常が発生した場合は処理１が継続できれば機能は制限されるものの、システムとして稼働し続けることができる。
なお、処理１、処理２および処理３は、ローカルメモリ１０４Ａ上のプログラムであってもよいし、バス２００に接続されたメモリ（図示せず）や外部記憶装置上のプログラムであってもよい。
【００４３】
本実施の形態において命令処理部１０１Ａが実行するプログラムのフローチャートを図４に示す。
図４のフローチャートの動作について説明する。
ＣＰＵがリセットされて処理が開始すると、まず始めに初期化処理を実行する（Ｓ１）。初期化処理ではメモリやＩＯの初期化や、Ｈ／Ｗのエラーチェックを行う。
【００４４】
初期化処理が完了すると、処理１を実行する（Ｓ２）。
処理１の実行が完了すると、続けてエラーチェック処理を行う（Ｓ３）。
エラーチェック処理では、レジスタ１０７Ａに格納されているＣＰＵ１００Ａ、１００Ｂのエラー検出信号１０２６Ａ、１０２６Ｂの値を読み出す。
【００４５】
このとき、エラー検出信号１０２６Ａ、１０２６Ｂの値がいずれも”０”であり、エラーとなっていない場合（Ｓ４の条件がＮＯの場合）は、処理２を実行し（Ｓ５）、その後処理３を実行する（Ｓ６）。
処理３の実行が完了すると、再度処理１を実行する（Ｓ２に戻る）。
【００４６】
一方、エラー検出信号１０２６Ａ、１０２６Ｂのいずれか、または両方の値が”１”であり、エラーが発生していた場合（Ｓ４の条件がＹＥＳの場合）、両方のＣＰＵでエラーが発生したかを確認する（Ｓ７）。
両方のＣＰＵでエラーが発生していた場合（Ｓ７の条件がＹＥＳの場合）はエラー処理を実施する（Ｓ９）。
【００４７】
エラー処理では、キャッシュ１０２Ａのパリティエラーが発生したときのエラー処理を実施する。ここではＣＰＵをリセットし、初期化処理（Ｓ１）から再度実施しているが、システムで定義されているエラー発生時のエラー処理でもよい。
【００４８】
ＣＰＵ１００ＡまたはＣＰＵ１００Ｂのいずれか一方のみでエラーが発生した場合、つまり、エラー検出信号１０２６Ａ、１０２６Ｂのいずれか一方のみが”１”で、もう一方が”０”の場合（Ｓ７の条件がＮＯの場合）は、修復処理部１０８Ａでエラー修復処理を行う（Ｓ８）。
エラー修復処理が完了すると、再度処理１を実行する（Ｓ２に戻る）。
【００４９】
本実施の形態では、図４のフローチャートに示すように命令処理部１０１Ａはエラー検出部１０２５Ａもしくはエラー検出部１０２５Ｂのいずれか一方がエラーを検出すると、処理２（Ｓ５）、処理３（Ｓ６）を実行せずに処理１（Ｓ２）とエラー修復処理（Ｓ８）のみを実行する。時間制約のある組込みシステムでは定められた時間内に実行すべき処理があり、その処理の実行が完了しない場合システムが停止する場合がある。そのため、エラー検出時にエラー修復処理（Ｓ８）のみを実行した場合は、ＣＰＵ１００Ａが実行しているシステムが停止してしまう。
【００５０】
また、処理１、処理２、処理３以外に他の処理を実行する余裕がない場合、エラー修復処理（Ｓ８）を実行することができない。
しかし、前述したように処理１はシステム動作に必須の処理であり、処理２、３はシステムの高機能化を実現するための付加処理であったとすると、少なくとも処理１の実行が継続できればシステムとして稼働し続けることができる。本発明ではエラー検出時に、システムの動作に必須の処理１のみを実行し、エラー修復処理（Ｓ８）を実行する時間を確保することで、システムの動作の継続と信頼性の向上を実現することができる。
【００５１】
次に図５のフローチャートを用いてエラー修復処理（Ｓ８）について説明する。
エラー修復処理では、まずキャッシュ１０２Ａに対し、エラーが発生していたデータを含む領域のキャッシュを無効化する命令を発行する（Ｓ１０１）。
その後、キャッシュの無効化が完了するまで待ち（Ｓ１０２がＮＯの間繰り返す）、無効化が完了すれば（Ｓ１０２がＹＥＳ）、レジスタ１０７Ａの値をクリアする（Ｓ１０３）。なお、レジスタ１０７Ａの値をクリアするにあたって、例えば０を設定してもよい。
【００５２】
その後、再度キャッシュを有効化する命令をキャッシュ１０２Ａに対して発行する（Ｓ１０４）。
Ｓ１０１でキャッシュ１０２Ａを無効化したときのキャッシュ１０２Ａの動作は、従来のキャッシュの無効化動作と同じである。
キャッシュ１０２Ａは、プログラムによってキャッシュを無効化する命令を受信すると、フラグ１０２１Ａにある格納状態を示すＶａｌｉｄビット（Ｖ）を０（無効）にし、内容を破棄する。
【００５３】
キャッシュ１０２Ａがライトスルーキャッシュの場合、キャッシュに格納されているデータと同じ値がローカルメモリ１０４Ａにも格納されているので、フラグ１０２１ＡのＶａｌｉｄビット（Ｖ）を０にするだけでよい。
しかし、キャッシュ１０２Ａがライトバックキャッシュの場合、命令処理部１０１Ａからローカルメモリ１０４Ａへの書き込みが発生すると、キャッシュ１０２Ａのデータ領域１０２３Ａには書き込まれるが、ローカルメモリ１０４Ａには書き込まれない。
そのため、キャッシュ１０２Ａを無効化したときにデータ領域１０２３Ａに格納されている最新の値をローカルメモリ１０４Ａに書き込む必要がある場合がある。
【００５４】
ローカルメモリ１０４Ａに最新の値が格納されているか、キャッシュ１０２Ａのデータに書き込まれているかは、フラグ１０２１ＡにあるＤｉｒｔｙビット（Ｄ）が１かどうかで判断する。
Ｄｉｒｔｙビットが０の場合、データ領域１０２３Ａに格納されている値とローカルメモリ１０４Ａに格納されている値が同じであるため、キャッシュ１０２Ａは、フラグ１０２１ＡのＶａｌｉｄビットを０にする。
【００５５】
Ｄｉｒｔｙビットが１の場合、データ領域１０２３Ａに格納されている値とローカルメモリ１０４Ａに格納されている値が違うため、キャッシュ１０２Ａは、データ領域１０２３Ａのデータと共に、対応するパリティ領域１０２４Ａのパリティを読み出し、エラー検出部１０２５Ａにてパリティチェックを行った後、エラー検出信号１０２６Ａおよびデータ１０２７Ａをエラー訂正部１０６Ａへ出力する。
【００５６】
エラー訂正部１０６Ａは、キャッシュ１０２Ａが出力したエラー検出信号１０２６Ａおよびデータ１０２７Ａを入力とし、エラーの訂正を行う。
このとき、ＣＰＵ１００Ｂも同じ動作を行っているので、エラー訂正部１０６Ａにはエラー検出信号１０２６Ｂとデータ１０２７Ｂの値も入力される。
エラー訂正部１０６Ａは、キャッシュ１０２Ａから出力されるエラー検出信号１０２６Ａとデータ１０２７Ａに加え、ＣＰＵ１００Ｂのキャッシュ１０２Ｂから出力されるエラー検出信号１０２６Ｂとデータ１０２７Ｂを入力とし、訂正を行い、訂正後のデータ１０２８Ａは、バス１０５Ａを介してローカルメモリ１０４Ａに出力される（書き込まれる）。
【００５７】
このように、Ｄｉｒｔｙビットが１の場合、エラー訂正部１０６Ａは、データ領域１０２３Ａに格納されていたデータをローカルメモリ１０４Ａに書き込んだのち、ＤｉｒｔｙビットとＶａｌｉｄビットを共に０にする。
【００５８】
本実施の形態の効果について述べる。
従来は、上記ビットの反転エラーが発生した状態のままでは命令処理部１０１Ａが当該データを読み出したときに、エラー訂正部１０６Ａは常にＣＰＵ１０１Ｂのデータ１０２７Ｂを訂正後のデータ１０２８Ａとして出力することになる。
そのため、この状態でさらにＣＰＵ１０１Ｂのデータ領域１０２３Ｂのビットが反転するエラーが発生すると、エラーの訂正ができなくなり、信頼性が低下した。
【００５９】
本実施の形態では、エラー検出部１０２５Ａがエラーを検出すると、命令処理部１０１Ａが実行しているプログラムがエラー修復処理を行い（Ｓ８）、データ領域１０２３Ａのビット反転のエラーの修復を試みる。
これにより、データ領域１０２３Ａのビット反転のエラーがソフトエラーといった一時的なエラーの場合は、再度ローカルメモリ１０４Ａからデータ領域１０２３Ａに値を書き込めばデータを修復することができる。
そのため、命令処理部１０１Ａがプログラムのエラー修復処理（Ｓ８）ではキャッシュ１０２Ａを一度無効化したのち再度有効にすることでデータ領域１０２３Ａにローカルメモリ１０４Ａの値を再度書き込むため、エラー発生後に信頼性の高い状態に戻ることができる。
【００６０】
なお、一時的なエラーではなかった場合は、データ修復後に再度、エラー検出部１０２５Ａがエラーを検出することになる。しかし、エラー訂正部１０６ＡがＣＰＵ１０１Ｂのデータ１０２７Ｂを訂正後のデータ１０２８Ａとして命令処理部１０１Ａへ出力するため、ＣＰＵ１０１Ｂの一系統のみで動作し続けるという信頼性の低下は発生するが、命令処理部１０１Ａは正常なデータを受信し、処理を継続することはできる。
【００６１】
また、本実施の形態では、命令処理部１０１Ａから読み出し要求があった時に正しい値を返す処理と、キャッシュ無効化時にローカルメモリ１０４Ａに正しい値を返す処理の両方を同一のハードウェア（エラー訂正部１０６Ａ）で行う。
エラー訂正部１０６Ａは、図２に示したように自ＣＰＵ１００Ａのデータ１０２７Ａと他ＣＰＵ１００Ｂのデータ１０２７Ｂのいずれかを訂正後のデータ１０２８Ａとして出力するセレクタと、いずれのデータを選択するかをエラー検出信号１０２６Ａ、１０２６Ｂの値をもとに決定する論理回路のみで構成され、ハードウェア量は少ない。
このように、本発明ではエラー発生時のエラーの訂正と、エラー状態からの修復を少ないハードウェア量で実現することができる。
【符号の説明】
【００６２】
１００Ａ  ＣＰＵコア、１００Ｂ  ＣＰＵコア、１０１Ａ  命令処理部、１０１Ｂ  命令処理部、１０２Ａ  キャッシュ、１０２Ｂ  キャッシュ、１０４Ａ  ローカルメモリ、１０４Ｂ  ローカルメモリ、１０５Ａ  バス、１０５Ｂ  バス、１０６Ａ  エラー訂正部、１０６Ｂ  エラー訂正部、１０７Ａ  レジスタ、１０７Ｂ  レジスタ、１０８Ａ  修復処理部、１０８Ｂ  修復処理部、２００  バス、３００  比較器、４００  比較エラー信号、１０２１Ａ  フラグ、１０２１Ｂ  フラグ、１０２２Ａ  タグ、１０２２Ｂ  タグ、１０２３Ａ  データ、１０２３Ｂ  データ、１０２４Ａ  パリティ、１０２４Ｂ  パリティ、１０２５Ａ  エラー検出部、１０２５Ｂ  エラー検出部、１０２６Ａ  エラー検出信号、１０２６Ｂ  エラー検出信号、１０２７Ａ  キャッシュ１０２Ａが出力するデータ、１０２７Ｂ  キャッシュ１０２Ｂが出力するデータ、１０２８Ａ  訂正後のデータ、１０２８Ｂ  訂正後のデータ。
【図１】
2016113774.tif 000003
【図２】
2016113774.tif 000004
【図３】
2016113774.tif 000005
【図４】
2016113774.tif 000006
【図５】
2016113774.tif 000007
【手続補正書】
【提出日】平成28年10月12日(2016.10.12)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
プログラムおよびデータを格納するメモリと、
命令を処理する命令処理部、前記メモリのプログラムおよびデータの一部を格納するキャッシュ、前記キャッシュに格納されたデータのエラーを検出しエラー通知を出力するエラー検出部、前記キャッシュに格納されたデータおよび前記エラー通知をもとに前記キャッシュに格納されたデータを訂正し前記命令処理部へ訂正後のデータを出力するエラー訂正部、をそれぞれ有し、同一の処理を実行し、ロックステップで動作する第１のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）と第２のＣＰＵとを備え、
前記第１のＣＰＵのエラー訂正部は、前記第１のＣＰＵのキャッシュに格納されたデータ、前記第１のＣＰＵのエラー検出部が出力するエラー通知、前記第２のＣＰＵのキャッシュに格納されたデータおよび前記第２のＣＰＵのエラー検出部が出力するエラー通知を入力し、前記第１のＣＰＵのエラー検出部の出力するエラー通知がエラーであってかつ前記第２のＣＰＵのエラー検出部の出力するエラー通知がエラーではなかった第１のエラー検出の場合、前記第２のＣＰＵのキャッシュに格納されたデータを前記第１のＣＰＵの命令処理部に出力し、前記第１のエラー検出以外の場合、前記第１のＣＰＵのキャッシュに格納されたデータを前記第１のＣＰＵの命令処理部へ出力し、
前記第１のＣＰＵは、前記第１のＣＰＵのエラー訂正部が出力するエラー通知および前記第２のＣＰＵのエラー訂正部が出力するエラー通知を格納する第１のレジスタと、前記第１のレジスタを参照し、格納されたエラー通知のいずれか一方がエラーであった場合、前記第１のＣＰＵのキャッシュの修復を行う修復処理部を備え、
前記第２のＣＰＵは、前記第１のＣＰＵのエラー訂正部が出力するエラー通知および前記第２のＣＰＵのエラー訂正部が出力するエラー通知を格納する第２のレジスタと、前記第２のレジスタを参照し、格納されたエラー通知のいずれか一方がエラーであった場合、前記第２のＣＰＵのキャッシュの修復を行う修復処理部を備えることを特徴とするデータ処理装置。
【請求項２】
前記第１のＣＰＵ及び前記第２のＣＰＵが行うキャッシュの修復処理は、キャッシュを無効化して再度有効にする処理であることを特徴とする請求項１に記載のデータ処理装置。
【手続補正書】
【提出日】平成28年12月29日(2016.12.29)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
プログラムおよびデータを格納するメモリと、
命令を処理する命令処理部、前記メモリのプログラムおよびデータの一部を格納するキャッシュ、前記キャッシュに格納されたデータのエラーを検出しエラー通知を出力するエラー検出部、前記キャッシュに格納されたデータおよび前記エラー通知をもとに前記キャッシュに格納されたデータを訂正し前記命令処理部へ訂正後のデータを出力するエラー訂正部、をそれぞれ有し、同じ動作を行う第１のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）と第２のＣＰＵとを備え、
前記第１のＣＰＵのエラー訂正部は、前記第１のＣＰＵのキャッシュに格納されたデータ、前記第１のＣＰＵのエラー検出部が出力するエラー通知、前記第２のＣＰＵのキャッシュに格納されたデータおよび前記第２のＣＰＵのエラー検出部が出力するエラー通知を入力し、前記第１のＣＰＵのエラー検出部の出力するエラー通知がエラーであってかつ前記第２のＣＰＵのエラー検出部の出力するエラー通知がエラーではなかった第１のエラー検出の場合、前記第２のＣＰＵのキャッシュに格納されたデータを前記第１のＣＰＵの命令処理部に出力し、前記第１のエラー検出以外の場合、前記第１のＣＰＵのキャッシュに格納されたデータを前記第１のＣＰＵの命令処理部へ出力し、
前記第１のＣＰＵは、前記第１のＣＰＵのエラー訂正部が出力するエラー通知および前記第２のＣＰＵのエラー訂正部が出力するエラー通知を格納する第１のレジスタと、前記第１のレジスタを参照し、格納されたエラー通知のいずれか一方がエラーであった場合、前記第１のＣＰＵのキャッシュの修復を行う修復処理部を備え、
前記第２のＣＰＵは、前記第１のＣＰＵのエラー訂正部が出力するエラー通知および前記第２のＣＰＵのエラー訂正部が出力するエラー通知を格納する第２のレジスタと、前記第２のレジスタを参照し、格納されたエラー通知のいずれか一方がエラーであった場合、前記第２のＣＰＵのキャッシュの修復を行う修復処理部を備え、
前記第１のＣＰＵの命令処理部は、第１の処理を実行し、前記第１の処理の実行が完了すると前記第１のレジスタを参照し、前記第１のレジスタに格納されたエラー通知のいずれもエラーでない場合、第２の処理を実行し、前記第１のレジスタに格納されたエラー通知のいずれもエラーである場合、前記第２の処理を実行せずにエラー処理を実行し、前記第１のレジスタに格納されたエラー通知のいずれか一方がエラーである場合、前記第２の処理を実行せずに前記第１のＣＰＵの修復処理部に前記第１のＣＰＵのキャッシュの修復を行わせる
ことを特徴とするデータ処理装置。
【請求項２】
前記第１のＣＰＵ及び前記第２のＣＰＵが行うキャッシュの修復処理は、キャッシュを無効化して再度有効にする処理であることを特徴とする請求項１に記載のデータ処理装置。
【国際調査報告】
2016113774.tif 000008
2016113774.tif 000009
2016113774.tif 000010
2016113774.tif 000011