(58)【調査した分野】(Int.Cl.,DB名)
前記比較検証部は、前記設定値と前記設定値に対応する前記複製値とが異なっている場合、前記プロセッサに、前記設定値の更新履歴または前記比較検証を行った履歴を通知することを特徴とする請求項2に記載のマイクロコントローラ。
前記設定値と前記設定値に対応する前記複製値とが異なっている場合、前記比較検証部は、前記複製値を用いて、前記設定値を更新することを特徴とする請求項1に記載のマイクロコントローラ。
【発明を実施するための形態】
【0011】
以下、発明を実施するための形態を、図面を参照しつつ説明する。
(第1の実施の形態)
図1は、第1の実施の形態のマイクロコントローラの一例を示す図である。
【0012】
第1の実施の形態のマイクロコントローラ1は、プロセッサ2、周辺回路3a,3b,3c、記憶部4,5、比較検証部6を有する。
プロセッサ2は、マイクロコントローラ1の各部を制御する。プロセッサ2は、たとえば、CPU(Central Processing Unit)、MPU(Micro Processing Unit)、DSP(Digital Signal Processor)、ASIC(Application Specific Integrated Circuit)、またはPLD(Programmable Logic Device)である。またプロセッサ2は、CPU、MPU、DSP、ASIC、PLDのうちの2以上の要素の組み合わせであってもよい。
【0013】
周辺回路3a,3b,3cは、マイクロコントローラ1が制御する外部機器に対する接続用のインタフェース、タイマなどである。なお、周辺回路3a〜3cは、マイクロコントローラ1の外部に設けられていてもよい。
【0014】
記憶部4は、たとえば、レジスタ(フリップフロップなど)4a,4b,4cを有する。記憶部4は、周辺回路3a,3b,3cを制御するための設定値a,b,cを保持している。
【0015】
記憶部5は、設定値a〜cの複製値aa,bb,ccを保持する。また、記憶部5には、設定値の書き込み時期(更新時期)に関する情報(履歴情報)も格納される。書き込み時期は、たとえば、図示しないカウンタの値として格納される。記憶部5は、エラー検出、訂正用のパリティを含み、読み出し時に複製値のエラー検出及び訂正を行う。記憶部5は、たとえば、ECC付RAMである。なお、履歴情報は、別の記憶部に記憶されるようにしてもよい。
【0016】
比較検証部6は、上記履歴情報を参照して、複数の設定値a〜cの記憶部4への書き込み時期に基づき、書き込み時期が古い設定値を優先的に記憶部4から読み出し、それに対応する複製値を記憶部5から読み出し、それらの比較検証を行う。比較検証部6は、たとえば、
図1のように優先順位判定部6aと比較部6bを有している。
【0017】
優先順位判定部6aは、履歴情報に基づき、たとえば、設定値a〜cのうち、どの設定値が最も書き込み時期が古いかを判定し、最も書き込み時期が古い設定値の優先順位を一番高くする。比較部6bは、優先順位の高い設定値から順に、所定の間隔で、対応する複製値との比較を行う。記憶部4から読み出された設定値a〜cが、記憶部5から読み出された複製値aa〜ccと異なる場合には、比較部6bは、たとえば、その旨をプロセッサ2に通知する。
【0018】
以下、第1の実施の形態のマイクロコントローラ1による誤り検出方法の一例を、フローチャートを用いて説明する。
図2は、誤り検出方法の一例を示すフローチャートである。
【0019】
たとえば、ユーザによる設定値aの書き込み要求があると、プロセッサ2の制御のもと、設定値aが記憶部4のレジスタ4aに書き込まれるとともに、その複製値aaが記憶部5に書き込まれる(ステップS1)。また、書き込み時期も記憶部5に記憶される(ステップS2)。その他の設定値b,cについても書き込み要求があった場合には、同様にプロセッサ2の制御のもと、設定値b,cが記憶部4のレジスタ4b,4cに書き込まれるとともに、その複製値bb,ccが記憶部5に書き込まれる。また、その書き込み時期が記憶部5に記憶される。
【0020】
その後、ステップS3の処理が行われる。ステップS3の処理では、優先順位判定部6aは、複数の設定値a〜cの書き込み時期に基づき、優先順位を決定する。優先順位判定部6aは、書き込み時期が古い設定値の優先順位を高くする。たとえば、設定値a〜cの順で書き込みが行われた場合には、設定値aの優先順位が最も高く、その次に、設定値bの優先順位が高く、設定値cの最も優先順位が低くなる。
【0021】
その後、ステップS4の処理が行われる。ステップS4の処理では、まず比較部6bは、たとえば、所定期間経過した後、優先順位の最も高い設定値、すなわち、書き込み時期が最も古い設定値を記憶部4から読み出し、それに対応する複製値を記憶部5から読み出し、それらの比較検証を行う。
【0022】
たとえば、設定値aの優先順位が最も高い場合、設定値aと、設定値aに対応する複製値aaとの比較検証が行われる。複製値aaは、記憶部5から読み出される際にエラー検出及び訂正が行われるため、書き込み時の正しい値である可能性が高い。一方、記憶部4から読み出される設定値aは、たとえば、記憶部4が中性子線などの影響を受け、ソフトエラーが発生し、書き込み時の値とは変わっている可能性がある。そのため、設定値aを複製値aaと比較することで、設定値aの誤りを検出することが可能となる。
【0023】
その後、ステップS5の更新処理が行われる。
設定値aが、複製値aaと異なっている場合には、比較部6bはその旨をプロセッサ2に通知し、プロセッサ2は、設定値aを更新する。そして、履歴情報や優先順位も更新される。設定値aを更新した場合には、設定値aが最も新しいものとなるため、優先順位は最も低くなる。また、比較検証部6は、設定値aと複製値aaが同じである場合(誤りがない場合)は、比較した時間の情報を履歴情報に保存し、比較した時間が新しいものの優先順位を下げるようにしてもよい。
【0024】
なお、ステップS5の更新処理は、比較検証部6が、記憶部5から読み出した複製値で、対応する設定値を更新するようにしてもよい。
優先順位の最も高い設定値に対して、上記のような比較検証及び更新処理が行われると、比較部6bは、所定期間経過後に、次に優先順位の高い設定値に対して、上記と同様の比較検証を行う。
【0025】
以上のように、本実施の形態のマイクロコントローラ1及び誤り検出方法によれば、比較検証部6が、書き込み時期が古い、誤りが発生している可能性の高い設定値に対して、優先的に誤り検出を行う。これにより、プロセッサ2の処理を中断せずに、設定値の誤りを容易に検出できる。
【0026】
そして、誤りがあった場合に、たとえば、プロセッサ2による設定値の更新処理が行われる。これにより、プロセッサ2の処理を設定値の更新のために定期的に中断しなくても、設定値の信頼性を容易に確保できるようになる。
【0027】
また、誤りがあった場合、比較検証部6が、記憶部5から読み出した複製値で、対応する設定値を更新するようにしてもよい。これにより、プロセッサ2の処理を、設定値の更新処理のときも中断しなくてよくなる。
【0028】
なお、上記の説明では、3つの周辺回路3a〜3cに対して、それぞれ1つの設定値a〜cがある場合について説明したが、各周辺回路3a〜3cに対して、それぞれ複数の設定値があってもよい。また、周辺回路の数が3つに限定されず、2つまたは4つ以上あってもよい。
【0029】
(第2の実施の形態)
図3は、第2の実施の形態のマイクロコントローラの一例を示す図である。
マイクロコントローラ10は、CPU11、バスブリッジ12、周辺回路13−1,13−2,…,13−n、レジスタ14−1,14−2,…,14−n、ECC付RAM15、比較検証部16、クロック生成部17、バスB1,B2,B3,B4を有している。
【0030】
CPU11は、バスB1に接続されており、マイクロコントローラ10の各部を制御する。バスブリッジ12は、バスB1〜B3を相互に接続する。
周辺回路13−1〜13−nは、マイクロコントローラ10が制御する外部機器に対する接続用のインタフェース、タイマなどである。なお、周辺回路13−1〜13−nは、マイクロコントローラ1の外部に設けられていてもよい。
【0031】
レジスタ14−1〜14−nには、周辺回路13−1〜13−nを制御するための設定値が書き込まれる。レジスタ14−1〜14−nは、バスB2,B4間に接続されている。
【0032】
ECC付RAM15は、エラー検出及び1ビットのエラー訂正が可能なRAMであり、レジスタ14−1〜14−nに書き込まれる設定値の複製値を保持する。ECC付RAM15は、レジスタ14−1〜14−nと同じアドレス領域を持っている。また、ECC付RAM15は、設定値の更新履歴や比較検証を行った履歴に関する履歴情報を格納する。ECC付RAM15は、バスB3と比較検証部16に接続されている。
【0033】
比較検証部16は、履歴情報を参照して、複数の設定値の書き込み時期や比較検証を行った時間に基づき、設定値とそれに対応する複製値を、レジスタ14−1〜14−n、ECC付RAM15から読み出し、それらの比較検証を行う。比較検証部16は、バスB4とECC付RAM15とクロック生成部17に接続されている。
【0034】
クロック生成部17は、比較検証部16内の後述するカウンタを動作させるためのクロックを生成する。このクロックは、CPU11などで用いられるクロックよりも低速のものでよい。
【0035】
図4は、比較検証部の一例を示す図である。
比較検証部16は、カウンタ20、優先順位判定部21、RAMアクセス部22、レジスタアクセス部23、比較部24を有している。
【0036】
カウンタ20は、クロック生成部17から供給されるクロックをカウントする。カウンタ20は、たとえば、ECC付RAM15にレジスタ14−1〜14−nの初期値が書き込まれたことを検出すると、クロックのカウントを開始する。
【0037】
優先順位判定部21は、履歴情報を参照して、各設定値において、最後に書き込みを行ったとき、または複製値との比較検証を行ったときのカウンタ値と、現在のカウンタ値との差を求め、比較検証を行う設定値の優先順位を判定する。その差が大きい設定値ほど、優先順位判定部21は、優先順位を高くする。そして、優先順位判定部21は、最も優先順位の高い設定値における上記の差が所定の値以上になったら、レジスタアクセス部23及びRAMアクセス部22に、最も優先順位の高い設定値及びその複製値の読み出しを指示する。
【0038】
RAMアクセス部22は、優先順位判定部21で読み出しを指示された複製値のアドレスをECC付RAM15に供給し、ECC付RAM15から読み出された複製値を、比較部24に送る。
【0039】
レジスタアクセス部23は、優先順位判定部21で読み出しを指示された設定値のアドレスをレジスタ14−1〜14−nの何れかに供給し、レジスタ14−1〜14−nの何れかから読み出された設定値を、比較部24に送る。
【0040】
比較部24は、読み出された複製値と設定値とを比較し、一致しているか否かを判定する。複製値と設定値とが一致している場合、比較部24は、比較時のカウンタ値で、ECC付RAM15に格納されている履歴情報を更新する。複製値と設定値とが一致していない場合、比較部24は、割り込みなどでその旨をCPU11に通知する。また、比較部24は、不一致が生じた設定値が格納されているアドレスをCPU11に通知する。なお、複製値と設定値とが一致したときも、比較部24は、その比較結果をCPU11に通知するようにしてもよい。
【0041】
次に、マイクロコントローラ10による誤り検出方法の一例の流れを説明する。
図5は、マイクロコントローラの動作開始時の処理の一例を示すフローチャートである。
【0042】
ステップS10の処理では、CPU11の制御のもと、レジスタ14−1〜14−nに書き込まれている初期値が、ECC付RAM15に転送され、書き込まれる。ステップS11の処理では、カウンタ20は、クロック生成部17から供給されるクロックのカウントを開始する。
【0043】
ステップS12の処理では、優先順位判定部21は、CPU11からレジスタ14−1〜14−nの何れかへの設定値の書き込みが発生したか否かを判定する。書き込みが発生していない場合には、書き込みが発生するまで、ステップS12の処理が繰り返される。書き込みが発生した場合には、ステップS13の処理が行われる。
【0044】
ステップS13の処理では、CPU11によって、ECC付RAM15において、設定値が格納されたレジスタと同じアドレスに、設定値の複製値が格納される。また、優先順位判定部21によって、書き込みが行われたときのカウンタ値が、履歴情報としてECC付RAM15に格納される。その後、ステップS12からの処理が繰り返される。
【0045】
たとえば、マイクロコントローラ10の電源がオフとなると、上記の処理が終了する。
図6は、ECC付RAMに格納されるデータの一例を示す図である。
ECC付RAM15には、CPU11から見たレジスタ14−1〜14−nのアドレスが割り当てられている。そして、各アドレスに対して、レジスタ14−1〜14−nの番号(No.1,No.2,…,No.n)、レジスタ14−1〜14−nに格納される設定値の複製値(設定値の初期値)が格納されている。さらに、複製値の書き込み時に生成されるエラーコードであるECC(ECC No.1,ECC No.2,…,ECC No.n)と、レジスタ14−1〜14−nにおいて、最後に書き込みが行われたときのカウンタ値(C1〜Cn)が格納されている。
【0046】
図7は、設定値と複製値との比較検証時の処理の一例を示すフローチャートである。
ステップS20の処理では、優先順位判定部21は、レジスタアクセス部23を介して、レジスタ14−1〜14−nにアクセスして、周辺回路13−1〜13−nを有効または無効にするか指示する有効ビットが、有効を示すものであるか否かを判定する。
【0047】
たとえば、全ての周辺回路13−1〜13−nの有効ビットが無効を示す場合には、周辺回路13−1〜13−nの有効ビットのうち、何れかが有効を示す値になるまで、ステップS20の処理が繰り返される。
【0048】
周辺回路13−1〜13−nの有効ビットのうち、少なくとも1つが有効を示す値である場合には、ステップS21の処理が行われる。ステップS21の処理では、優先順位判定部21は、履歴情報(
図6に示したようなカウンタ値)を参照する。そして、優先順位判定部21は、各設定値において、最後に書き込みを行ったとき、または最後に複製値との比較検証を行ったときのカウンタ値と、現在のカウンタ値との差を求め、比較検証を行う設定値の優先順位を判定する。
【0049】
たとえば、
図6に示したような履歴情報(カウンタ値)において、C1<C2<…<Cnであるとすると、優先順位は、レジスタ14−1の設定値、レジスタ14−2の設定値、…、レジスタ14−nの設定値の順に優先順位が低くなる。優先順位判定部21は、たとえば、記憶部を有しており、判定した優先順位を保持する。
【0050】
図8は、優先順位の格納例を示す図である。
優先順位判定部21の記憶部21aは、たとえば、FIFO(First In First Out)で、判定した優先順位を、レジスタ番号No.1〜No.nで格納している。
図8の例では、レジスタ番号No.1のレジスタ14−1の設定値が最も優先順位が高く、レジスタ番号No.2のレジスタ14−2の設定値、…、レジスタ番号No.nのレジスタ14−nの設定値の順に優先順位が低くなる。また、優先順位判定部の記憶部21aは、最も優先順位の高い設定値の履歴情報(カウンタ値)を保持するようにしてもよい。たとえば、レジスタ14−1の設定値が最も優先順位が高い場合、
図6に示したカウンタ値C1が、記憶部21aに保持される。
【0051】
優先順位決定後、ステップS22の処理が行われる。ステップS22の処理では、最も優先順位の高い設定値の上記カウンタ値と現在のカウンタ値との差が、所定の値以上のとき、優先順位判定部21は、レジスタアクセス部23及びRAMアクセス部22に、設定値及びその複製値の読み出しを指示する。所定の値とは、たとえば、クロック生成部17で生成されるクロックの周期と、誤り検出を行う周期(時間)をもとに設定される。カウンタ20がクロックの立ち上がりエッジに同期してカウントアップする場合、誤り検出を行う周期をTd、クロックの周期をTcとすると、たとえば、Td/Tcが上記の所定値となる。
【0052】
次に、ステップS23の処理が行われる。ステップS23の処理では、比較部24は、読み出された設定値とその複製値のうち、比較不要なビットをマスクする。たとえば、周辺回路13−1〜13−nによる動作で書き変わるようなビットについては、比較しても誤りを検出できないためマスクされる(比較対象とされない)。
【0053】
その後、ステップS24の処理が行われる。ステップS24の処理では、比較部24は、読み出された複製値と設定値(マスクされていない部分)とを比較し、一致しているか否かを判定する。
【0054】
複製値と設定値とが一致している場合、ステップS25の処理が行われる。ステップS25の処理では、比較部24は、比較時のカウンタ値で、ECC付RAM15に格納されている履歴情報を更新する。
【0055】
図9は、履歴情報の更新例を示す図である。
最も優先順位が高いレジスタ14−1の設定値に対して、複製値との比較が行われたときのカウンタ値がCxであった場合、ECC付RAMに格納されるデータのうち、履歴情報を示すカウンタ値が、
図9に示すように更新される。また、ステップS25の処理後には、ステップS21の処理に戻り、
図8に示した優先順位判定部21の記憶部21aに格納されている優先順位が更新される。
【0056】
図10は、優先順位の更新例を示す図である。
図8の例では、レジスタ番号No.1のレジスタ14−1の設定値が最も優先順位が高かったが、比較検証の結果、複製値と一致している(誤りがない)と判定されたため、
図10の例では、最も優先順位が低くなっている。代わりに、
図8の例で、2番目に優先順位が高かったレジスタ番号No.2のレジスタ14−2の設定値が、
図10の例では最も優先順位が高くなっている。また、優先順位の更新に伴い、記憶部21aは、最も優先順位が高い、レジスタ14−2の設定値に関する履歴情報(
図6の例ではカウンタ値C2)を保持するようにしてもよい。
【0057】
一方、複製値と設定値とが一致していない場合、ステップS26の処理が行われる。ステップS26の処理では、不一致情報が、比較検証部16内の記憶部(たとえば、前述した記憶部21a)に保存される。不一致情報には、設定値と複製値との不一致が発生したレジスタのアドレス、設定値の値、設定値の更新履歴、比較履歴、現在のカウンタ値、上記履歴を示すカウンタ値と現在のカウンタ値との差分、などが含まれる。
【0058】
設定値の更新履歴は、たとえば、最後にその設定値の書き込み(更新)が行われたときのカウンタ値であり、比較履歴は、たとえば、前回比較検証を行ったときのカウンタ値である。
【0059】
その後、ステップS27の処理にて、比較部24は、割り込みなどで、CPU11に対して、不一致が生じた旨や上記の不一致情報を通知する。これにより、たとえば、CPU11は、複製値と一致しなかった設定値の更新を行うようにしてもよい。たとえば、レジスタ14−1に格納されている設定値と、その設定値の、ECC付RAM15に格納されている複製値とが一致しなかった場合、CPU11は、設定値と複製値とを更新する。
【0060】
なお、設定値の更新は、比較検証部16が、ECC付RAMから読み出された複製値を、その複製値に対応する設定値が格納されたレジスタに上書きするようにしてもよい。
ステップS27の後は、ステップS21の処理に戻り、たとえば、
図10に示したように、記憶部21aに格納される優先順位が更新される。
【0061】
たとえば、マイクロコントローラ10の電源がオフとなると、上記の処理が終了する。
以上のように、本実施の形態のマイクロコントローラ10及び誤り検出方法によれば、比較検証部16が、書き込み時期または比較検証した時期が古い、誤りが発生している可能性の高い設定値に対して、優先的に誤り検出が行われる。これにより、CPU11の処理を中断せずに、設定値の誤りを容易に検出できる。
【0062】
そして、誤りがあった場合に、たとえば、CPU11による設定値の更新処理が行われる。これにより、CPU11の処理を設定値の更新のために定期的に中断しなくても、設定値の信頼性を容易に確保できるようになる。
【0063】
また、誤りがあった場合、比較検証部16が、ECC付RAM15から読み出した複製値で、対応する設定値を更新するようにしてもよい。これにより、CPU11の処理を、設定値の更新処理のときも中断しなくてよくなる。
【0064】
また、ある設定値に誤りがあった場合、比較検証部16が、CPU11に対して、更新履歴や比較履歴を含む不一致情報を通知することで、現在の(誤り検出時の)カウンタ値との比較から、どのカウンタ値の範囲のときに誤りが発生したか推測できる。すなわち、誤り発生時期を推測することができる。
【0065】
以上、実施の形態に基づき、本発明のマイクロコントローラ及び誤り検出方法の一観点について説明してきたが、これらは一例にすぎず、上記の記載に限定されるものではない。