(57)【要約】【課題】プログラムを複雑化することなく、プログラムによる２重化処理を実現する。【解決手段】周辺回路ＰＥＲ１〜ＰＥＲｎは、レジスタＲＥＧ１〜ＲＥＧｎを備え、コマンドに基づいて処理を実行する。中央演算処理装置ＣＰＵは、レジスタにアクセスする同じプログラムによる処理を２回実行する。２重アクセス制御回路ＡＣＣは、周辺バスアクセス部ＰＢＡ、バッファＢＦＦおよび比較部ＣＭＰを有する。周辺バスアクセス部ＰＢＡは、１回目のプログラム実行の際、中央演算処理装置ＣＰＵによるレジスタへのアクセスを制御する。バッファＢＦＦは、１回目のプログラム実行の際のレジスタへのアクセス情報を記憶する。比較部ＣＭＰは、２回目のプログラム実行の際のアクセス情報とアクセス情報記憶部に記憶されたアクセス情報とを比較し、不一致の際に中央演算処理装置ＣＰＵにエラー信号を出力する。【選択図】図１
2015035121.tif 000002
【特許請求の範囲】
【請求項１】
レジスタを備え、入力されるコマンドに基づいて処理を実行する周辺回路と、
前記レジスタにアクセスする同じプログラムによる処理を２回実行する２重処理を実行する中央演算処理装置と、
前記中央演算処理装置が前記周辺回路にアクセスする際のアクセス制御を行うアクセス制御回路とを有し、
前記アクセス制御回路は、
前記中央演算処理装置による１回目の前記プログラムの実行において、前記中央演算処理装置による前記レジスタへのアクセスを制御するバスアクセス部と、
前記中央演算処理装置による１回目の前記プログラムの実行において、前記中央演算処理装置が前記レジスタにアクセスする際の情報である第１のアクセス情報を記憶するアクセス情報記憶部と、
前記中央演算処理装置による２回目の前記プログラムの実行において、前記中央演算処理装置が前記レジスタにアクセスする際の情報である第２のアクセス情報と前記アクセス情報記憶部に記憶されている前記第１のアクセス情報とを比較し、前記第１のアクセス情報と前記第２のアクセス情報とが不一致の際に前記中央演算処理装置にエラー信号を出力する比較部と、
を有する半導体集積回路装置。
【請求項２】
請求項１記載の半導体集積回路装置において、
前記中央演算処理装置は、前記比較部が出力するエラー信号が入力されると、前記プログラムによる処理の実行に異常が発生したと判断し、例外処理プログラムを実行する、半導体集積回路装置。
【請求項３】
請求項１記載の半導体集積回路装置において、
前記中央演算処理装置は、前記プログラムの実行回数が１回目であるか２回目であるかを判別する処理回数判定信号を出力し、
前記バスアクセス部は、前記中央演算処理装置から出力される前記処理回数判定信号に基づいて、前記プログラムの実行回数が１回目であるか２回目であるかを判別する、半導体集積回路装置。
【請求項４】
請求項１記載の半導体集積回路装置において、
さらに、前記アクセス制御回路は、前記アクセス情報記憶部に前記第１のアクセス情報を登録および参照するアドレスを示すポインタと、
前記アクセス情報記憶部に登録または参照が行われるたびに前記アドレスを自動更新するポインタ自動更新部と、
を有し、
前記中央演算処理装置は、前記アクセス情報記憶部に最初に登録される先頭アドレスを設定する、半導体集積回路装置。
【請求項５】
請求項４記載の半導体集積回路装置において、
前記アクセス制御回路は、
前記第１のアクセス情報を前記アクセス情報記憶部に登録する登録部と、
前記アクセス情報記憶部に記憶された前記第１のアクセス情報を読み出し、読み出した前記第１のアクセス情報を前記比較部に出力する参照部と、
を有し、
前記登録部と前記アクセス情報記憶部、前記参照部と前記アクセス情報記憶部、および前記ポインタと前記アクセス情報記憶部は、専用バスによりそれぞれ接続されている、半導体集積回路装置。
【請求項６】
第１のバスに接続され、レジスタを備え、入力されるコマンドに基づいて処理を実行する周辺回路と、
第２のバスに接続され、前記レジスタにアクセスする同じプログラムを２回実行する中央演算処理装置と、
前記第１のバスに接続され、前記中央演算処理装置による１回目の前記プログラムの実行において、前記中央演算処理装置が前記レジスタにアクセスする際の情報である第１のアクセス情報を記憶するアクセス情報記憶部と、
前記第１のバスと前記第２のバスとにそれぞれ接続され、前記中央演算処理装置が前記周辺回路にアクセスする際のアクセス制御を行うアクセス制御回路と、
を有し、
前記アクセス制御回路は、
前記中央演算処理装置による１回目の前記プログラムの実行において、前記中央演算処理装置による前記レジスタへのアクセスを制御するバスアクセス部と、
前記第１のアクセス情報を記憶する際に前記アクセス情報記憶部のアクセス制御を行うバッファアクセス部と、
前記中央演算処理装置による２回目の前記プログラムの実行において、前記中央演算処理装置が前記レジスタにアクセスする際の情報である第２のアクセス情報と前記アクセス情報記憶部に記憶されている前記第１のアクセス情報とを比較し、前記第１のアクセス情報と前記第２のアクセス情報とが不一致の際に前記中央演算処理装置にエラー信号を出力する比較部と、
を有する半導体集積回路装置。
【請求項７】
請求項６記載の半導体集積回路装置において、
前記中央演算処理装置は、前記比較部が出力するエラー信号が入力されると、前記プログラムによる処理の実行に異常が発生したと判断し、例外処理プログラムを実行する、半導体集積回路装置。
【請求項８】
請求項６記載の半導体集積回路装置において、
前記中央演算処理装置は、前記プログラムの実行回数が１回目であるか２回目であるかを判別する処理回数判定信号を出力し、
前記バスアクセス部は、前記中央演算処理装置から出力される前記処理回数判定信号に基づいて、前記プログラムの実行回数が１回目であるか２回目であるかを判別する、半導体集積回路装置。
【請求項９】
請求項６記載の半導体集積回路装置において、
さらに、前記アクセス制御回路は、
前記アクセス情報記憶部に前記第１のアクセス情報を登録および参照するアドレスを示すポインタと、
前記アクセス情報記憶部への登録または参照が行われるたびにアドレスを自動更新するポインタ自動更新部と、
を有し、
前記中央演算処理装置は、前記アクセス情報記憶部に最初に登録される先頭アドレスを設定する、半導体集積回路装置。
【請求項１０】
請求項６記載の半導体集積回路装置において、
前記アクセス情報記憶部は、前記第２のバスに接続され、前記中央演算処理装置が処理する前記プログラムを格納する領域を有する、半導体集積回路装置。
【請求項１１】
レジスタを備え、入力されるコマンドに基づいて処理を実行する周辺回路と、
前記レジスタにアクセスするプログラムによる処理を実行する第１の中央演算処理装置と、
前記レジスタにアクセスする前記第１の中央演算処理装置が実行するプログラムと同じプログラムによる処理を実行する第２の中央演算処理装置と、
前記第１の中央演算処理装置、および前記第２の中央演算処理装置が前記周辺回路にアクセスする際のアクセス制御を行うアクセス制御回路とを有し、
前記アクセス制御回路は、
前記第１の中央演算処理装置または前記第２の中央演算処理装置による１回目の前記プログラムの実行において、前記第１および前記第２の中央演算処理装置による前記レジスタへのアクセスを制御するバスアクセス部と、
前記第１の中央演算処理装置または前記第２の中央演算処理装置による１回目の前記プログラムの実行において、前記第１、または前記第２の中央演算処理装置のいずれかが前記レジスタにアクセスする際の情報である第１のアクセス情報を記憶するアクセス情報記憶部と、
前記第１の中央演算処理装置または前記第２の中央演算処理装置による２回目の前記プログラムの実行において、前記第１、または前記第２の中央演算処理装置のいずれかが前記レジスタにアクセスする際の情報である第２のアクセス情報と前記アクセス情報記憶部に記憶されている前記第１のアクセス情報とを比較し、前記第１のアクセス情報と前記第２のアクセス情報とが不一致の際に前記第１の中央演算処理装置および前記第２の中央演算処理装置にエラー信号をそれぞれ出力する比較部と、
を有する半導体集積回路装置。
【請求項１２】
請求項１１記載の半導体集積回路装置において、
前記第１の中央演算処理装置および前記第２の中央演算処理装置は、前記比較部が出力するエラー信号が入力されると、前記プログラムによる処理の実行に異常が発生したと判断し、例外処理プログラムを実行する、半導体集積回路装置。
【請求項１３】
請求項１１記載の半導体集積回路装置において、
前記第１の中央演算処理装置および前記第２の中央演算処理装置は、前記プログラムの実行回数が１回目であるか２回目であるかを判別する処理回数判定信号をそれぞれ出力し、
前記バスアクセス部は、前記第１の中央演算処理装置および前記第２の中央演算処理装置から出力される前記処理回数判定信号に基づいて、前記プログラムの実行回数が１回目であるか２回目であるかをそれぞれ判別する、半導体集積回路装置。
【請求項１４】
請求項１１記載の半導体集積回路装置において、
さらに、前記アクセス制御回路は、
前記第１の中央演算処理装置による１回目の前記プログラムの実行において、前記第１の中央演算処理装置が前記レジスタにアクセスする際の情報である第１のアクセス情報の登録および参照を行うアドレスを示す第１のポインタと、
前記第２の中央演算処理装置による１回目の前記プログラムの実行において、前記第２の中央演算処理装置が前記レジスタにアクセスする際の情報である第１のアクセス情報の登録および参照を行うアドレスを示す第２のポインタと、
前記アクセス情報記憶部への登録または参照が行われるたびに前記第１のポインタのアドレスを自動更新する第１のポインタ自動更新部と、
前記アクセス情報記憶部への登録または参照が行われるたびに前記第２のポインタのアドレスを自動更新する第２のポインタ自動更新部と、
を有し、
前記第１の中央演算処理装置および前記第２の中央演算処理装置は、前記アクセス情報記憶部に最初に登録される先頭アドレスをそれぞれ設定する、半導体集積回路装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体集積回路装置に関し、特に、故障検出機能を有するマイクロコントローラに有効な技術に関する。
【背景技術】
【０００２】
半導体集積回路装置の１つとして、例えばマイクロコントローラが広く知られている。このマイクロコントローラは、家電製品、ＡＶ機器、携帯電話、自動車、あるいは産業機械などに組み込まれ、内蔵メモリに記憶されているプログラムにしたがって処理を行うことで、それぞれの機器の制御を行うものである。
【０００３】
自動車などに代表される機器では、制御装置の故障が事故につながる可能性があるため、マイクロコントローラを含む部品に高い信頼性が求められるとともに、故障が発生した場合には、これを検出して機器が危険な状態にならないように安全機能を働かせるように設計されている。
【０００４】
マイクロコントローラは、センサやアクチュエータの診断を行ってこれらの故障を検出するだけでなく、マイクロコントローラ自身の故障も検出する必要がある。マイクロコントローラの故障検出には、様々な方法があるが、代表的な技術としては、ＣＰＵ２重化が知られている（特許文献１参照）。
【０００５】
このＣＰＵ２重化は、同一の機能を有する機能ブロックである中央演算処理装置、いわゆるＣＰＵ（Central Processing Unit）を２つ設けて、それら２つのＣＰＵを２重化して処理を行わせ、該ＣＰＵからの出力信号を比較することにより、故障を検出する技術である。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平８−１７１５８１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ところが、上記のような故障検出技術では、次のような問題点があることが本発明者により見い出された。
【０００８】
上記したＣＰＵ２重化技術では、２つのＣＰＵとそれらＣＰＵから出力される信号を比較する比較回路を追加する必要がある。そのため、ＣＰＵの回路面積が２倍以上となってしまい、チップコストと消費電力が増加するという問題があった。
【０００９】
そこで、本発明者は、例えばシングルコアＣＰＵやデュアルコアＣＰＵなどの２重化されていないＣＰＵによってプログラムを２重に処理して結果を比較する技術について検討した。
【００１０】
プログラムの１回目の処理と２回目の処理において、ＣＰＵのメモリアクセスを例えばＭＭＵ（Memory Management Unit）などの機能を利用してアドレス変換を行い、異なるアドレスにして独立に処理する。
【００１１】
一方、ＣＰＵによる周辺回路のレジスタへのアクセスは、１回目の処理ではアクセスを実行した後、そのアクセス情報であるアドレスをメモリに登録し（ライトの場合にはライトデータをメモリに登録）、２回目の処理ではアクセスを実行せずに、１回目の処理で登録したアクセス情報であるアドレスと比較する（ライトの場合にはライトデータも比較）。
【００１２】
そして、比較結果が不一致の場合は、プログラムの２重処理において１回目と２回目の処理が一致しないということであり、ＣＰＵが故障しているとみなすことができる。
【００１３】
ただし、この処理では、１回目と２回目の処理内容が一部異なるために、プログラムが複雑になる。さらに、デュアルコアＣＰＵを用いる場合には、どちらの処理が先に進むか分からないため、周辺回路のレジスタへのアクセスの前に処理が先なのか後なのかを確認する必要があり、プログラムがさらに複雑になる。
【００１４】
よって、検討したプログラムを２重処理して比較をする技術は、チップコストと消費電力の増加を少なくすることはできるが、その反面、プログラムが複雑になりその開発工数が増加するという課題が生じてしまうことになる。
【００１５】
その他の目的と新規な特徴については、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１６】
一実施の形態による半導体集積回路装置は、周辺回路、中央演算処理装置、およびアクセス制御回路を有する。周辺回路は、レジスタを備え、入力されるコマンドに基づいて処理を実行する。中央演算処理装置は、レジスタにアクセスする同じプログラムによる処理を２回実行する２重処理を実行する。アクセス制御回路は、中央演算処理装置が周辺回路にアクセスする際のアクセス制御を行う。
【００１７】
また、アクセス制御回路は、バスアクセス部、アクセス情報記憶部、および比較部を有する。バスアクセス部は、中央演算処理装置による１回目のプログラムの実行において、中央演算処理装置によるレジスタへのアクセスを制御する。
【００１８】
アクセス情報記憶部は、中央演算処理装置による１回目のプログラムの実行において、中央演算処理装置がレジスタにアクセスする際の情報である第１のアクセス情報を記憶する。
【００１９】
比較部は、中央演算処理装置による２回目のプログラムの実行において、中央演算処理装置がレジスタにアクセスする際の情報である第２のアクセス情報とアクセス情報記憶部に記憶されている第１のアクセス情報とを比較し、第１のアクセス情報と第２のアクセス情報とが不一致の際に中央演算処理装置にエラー信号を出力する。
【発明の効果】
【００２０】
以上一実施の形態によれば、プログラムの開発工数を低減することができる。
【図面の簡単な説明】
【００２１】
【図１】本実施の形態１におけるマイクロコントローラの構成の一例を示すブロック図である。
【図２】図１の２重アクセス制御回路が有するバッファのデータ構成の一例を示す説明図である。
【図３】図１のマイクロコントローラが有する２重アクセス制御回路における動作処理の一例を示すフローチャートである。
【図４】プログラムの１回目の処理において周辺回路が有するレジスタにリードアクセスする際の一例を示すタイミングチャートである。
【図５】プログラムの２回目の処理において周辺回路が有するレジスタにリードアクセスする際の一例を示すタイミングチャートである。
【図６】プログラムの１回目の処理において周辺回路が有するレジスタにライトアクセスする際の一例を示すタイミングチャートである。
【図７】プログラムの２回目の処理において周辺回路が有するレジスタにライトアクセスする際の一例を示すタイミングチャートである。
【図８】本実施の形態２によるマイクロコントローラにおける構成の一例を示すブロック図である。
【図９】図８のマイクロコントローラが有するバッファのデータ構造の一例を示す説明図である。
【図１０】プログラムの１回目の処理において周辺回路が有するレジスタにリードアクセスする際の一例を示すタイミングチャートである。
【図１１】プログラムの２回目の処理において周辺回路が有するレジスタにリードアクセスする際の一例を示すタイミングチャートである。
【図１２】プログラムの１回目の処理において周辺回路が有するレジスタにライトアクセスする際の一例を示すタイミングチャートである。
【図１３】プログラムの２回目の処理において周辺回路が有するレジスタにライトアクセスする際の一例を示すタイミングチャートである。
【図１４】本実施の形態３によるマイクロコントローラにおける構成の一例を示すブロック図である。
【図１５】本実施の形態４によるマイクロコントローラにおける構成の一例を示すブロック図である。
【図１６】プログラムの並列処理において周辺回路が有するレジスタに先行リードアクセスする際の一例を示すタイミングチャートである。
【図１７】プログラムの並列処理において周辺回路が有するレジスタに後行リードアクセスする際の一例を示すタイミングチャートである。
【図１８】プログラムの並列処理において周辺回路が有するレジスタに先行ライトアクセスする際の一例を示すタイミングチャートである。
【図１９】プログラムの並列処理において周辺回路が有するレジスタに後行ライトアクセスする際の一例を示すタイミングチャートである。
【図２０】本実施の形態５によるマイクロコントローラを用いたシステムの一例を示す説明図である。
【発明を実施するための形態】
【００２２】
以下の実施の形態においては便宜上その必要があるときは、複数のセクションまたは実施の形態に分割して説明するが、特に明示した場合を除き、それらはお互いに無関係なものではなく、一方は他方の一部または全部の変形例、詳細、補足説明等の関係にある。
【００２３】
また、以下の実施の形態において、要素の数等（個数、数値、量、範囲等を含む）に言及する場合、特に明示した場合および原理的に明らかに特定の数に限定される場合等を除き、その特定の数に限定されるものではなく、特定の数以上でも以下でもよい。
【００２４】
さらに、以下の実施の形態において、その構成要素（要素ステップ等も含む）は、特に明示した場合および原理的に明らかに必須であると考えられる場合等を除き、必ずしも必須のものではないことは言うまでもない。
【００２５】
同様に、以下の実施の形態において、構成要素等の形状、位置関係等に言及するときは特に明示した場合および原理的に明らかにそうではないと考えられる場合等を除き、実質的にその形状等に近似または類似するもの等を含むものとする。このことは、上記数値および範囲についても同様である。
【００２６】
また、実施の形態を説明するための全図において、同一の部材には原則として同一の符号を付し、その繰り返しの説明は省略する。なお、図面をわかりやすくするために平面図であってもハッチングを付す場合がある。
【００２７】
（実施の形態１）
〈マイクロコントローラの構成例〉
図１は、本実施の形態１におけるマイクロコントローラの構成の一例を示すブロック図である。
【００２８】
マイクロコントローラＭＣＲは、シングルコアＣＰＵにてプログラムを繰り返して処理し、周辺回路レジスタへのアクセス制御とアクセス情報の比較を行う２重アクセス制御を実行する。
【００２９】
マイクロコントローラＭＣＲは、図１に示すように、中央演算処理装置ＣＰＵ、メモリＭＥＹ、２重アクセス制御回路ＡＣＣ、および複数の周辺回路ＰＥＲ１〜ＰＥＲｎを有しており、これらが１つの半導体基板上に形成された半導体集積回路装置である。ここでｎは周辺回路の数である。また、マイクロコントローラＭＣＲは、例えばＱＦＰ（Quad Flat Package）型パッケージやＢＧＡ（Ball Grid Array）型パッケージなどからなる。
【００３０】
中央演算処理装置ＣＰＵは、メモリＭＥＹとシステムバスＳＢＳにて接続されている。また、中央演算処理装置ＣＰＵは、アクセス制御回路である２重アクセス制御回路ＡＣＣとシステムバスＳＢＳで接続されている。
【００３１】
システムバスＳＢＳには、中央演算処理装置ＣＰＵが出力してメモリＭＥＹまたは２重アクセス制御回路ＡＣＣが入力する信号ＳＧ２０と、メモリＭＥＹまたは２重アクセス制御回路ＡＣＣが出力して中央演算処理装置ＣＰＵが入力する信号ＳＧ２１がある。
【００３２】
信号ＳＧ２０は、アクセス情報であり、コマンド、アドレス、およびライトデータを含む。コマンドは、例えば何もしないことを意味するＮＯＰ（No OPeration）、リード、ライトおよびデータサイズなどである。信号ＳＧ２１は、リードデータとリード準備が完了したことを示すレディ信号を含む。
【００３３】
２重アクセス制御回路ＡＣＣは、周辺回路ＰＥＲ１〜ＰＥＲｎと第１のバスである周辺バスＰＢＳにて接続されている。この周辺バスＰＢＳには、２重アクセス制御回路ＡＣＣが出力して周辺回路ＰＥＲ１〜ＰＥＲｎが入力する信号ＳＧ５０、および周辺回路ＰＥＲ１〜ＰＥＲｎが出力して２重アクセス制御回路ＡＣＣが入力する信号ＳＧ５１がある。
【００３４】
信号ＳＧ５０は、コマンド、アドレス、ライトデータを含む。コマンドは、例えばＮＯＰ、リード、ライト、およびデータサイズなどである。周辺回路ＰＥＲ１〜ＰＥＲｎから読み出された信号ＳＧ５１は、リードデータとレディ信号を含む。
【００３５】
中央演算処理装置ＣＰＵは、命令を実行して演算やデータ転送などの処理を行う。メモリＭＥＹは、中央演算処理装置ＣＰＵが実行する命令および処理するデータを記憶する。メモリＭＥＹは、例えばフラッシュメモリに例示される不揮発性半導体メモリおよびスタティックランダムアクセスメモリに例示される揮発性半導体メモリからなる。
【００３６】
２重アクセス制御回路ＡＣＣは、周辺バスアクセス部ＰＢＡ、データ選択部ＤＳＬ、バッファＢＦＦ、バッファ登録部ＢＲＧ、バッファ参照部ＢＲＦ、比較部ＣＭＰ、ポインタＰＩＴ、直接書き込み部ＤＷＲ、およびポインタ自動更新部ＡＲＮを有する。
【００３７】
２重アクセス制御回路ＡＣＣは、中央演算処理装置ＣＰＵにおける故障検出機能を有する。２重アクセス制御回路ＡＣＣは、中央演算処理装置ＣＰＵが周辺回路ＰＥＲ１〜ＰＥＲｎがそれぞれ内蔵するレジスタＲＥＧ１〜ＲＥＧｎをアクセスする場合に、プログラムの１回目の処理では周辺回路ＰＥＲ１〜ＰＥＲｎのレジスタＲＥＧ１〜ＲＥＧｎへのアクセスを行う。
【００３８】
その後、そのアクセス情報をアクセス情報記憶部となるバッファＢＦＦに登録し、１回目の処理と同じ処理を行う２回目の処理では、レジスタＲＥＧ１〜ＲＥＧｎへのアクセスを行わずに、アクセス情報をバッファＢＦＦに登録した１回目の情報と比較部ＣＭＰで比較することにより故障を検出する。ここで、バッファＢＦＦは、例えばＳＲＡＭ（Static Random Access Memory）などの揮発性メモリからなる。
【００３９】
周辺回路ＰＥＲ１は、例えばＡ／Ｄ（Analog/Digital）変換器である。Ａ／Ｄ変換器は、アナログ信号を入力端子ＰＩＮ１から読み込んでデジタル信号に変換し、レジスタＲＥＧ１に記憶する機能を有する。
【００４０】
また、周辺回路ＰＥＲｎは、例えばタイマなどである。タイマは、中央演算処理装置ＣＰＵがレジスタＲＥＧｎに書き込んで設定した周期と幅を持つパルスを、出力端子ＰＯＴｎから出力する。
【００４１】
〈２重アクセス制御回路の構成例〉
次に、２重アクセス制御回路ＡＣＣについて詳しく説明する。
【００４２】
中央演算処理装置ＣＰＵが出力し、２重アクセス制御回路ＡＣＣが入力する信号ＳＧ１００は、２重処理の回数を示す信号である。２重処理は、同じプログラム処理を２回行う処理であり、信号ＳＧ１００は、該プログラム処理が１回目か、あるいは１回目と同じ処理を行う２回目かを示す２重処理の回数を示す２重処理回数信号であり、処理回数判定信号となる。
【００４３】
中央演算処理装置ＣＰＵには、２重処理におけるプログラムの処理が１回目か、１回目と処理と同様の処理を行う２回目かを示すレジスタを有しており、中央演算処理装置ＣＰＵは、プログラムの処理開始前に該レジスタの値を設定する。
【００４４】
２重アクセス制御回路ＡＣＣが出力して中央演算処理装置ＣＰＵが入力する信号ＳＧ４５０は比較結果信号である。比較結果を示す信号ＳＧ４５０が不一致、すなわちエラーを示す場合には、プログラムの２重処理において１回目と２回目の処理が一致しないということであり、これは中央演算処理装置ＣＰＵが故障しているとみなすことができる。このように、２重アクセス制御回路ＡＣＣは、中央演算処理装置ＣＰＵが故障していることを検出する故障検出機能を有する。
【００４５】
比較結果を示す信号ＳＧ４５０が不一致の場合には、例外処理プログラムを実行し、中央演算処理装置ＣＰＵに割り込みを入れてエラー処理を行わせるか、あるいはマイクロコントローラＭＣＲをリセットするなどの処理を行う。
【００４６】
２重アクセス制御回路ＡＣＣにおいて、バスアクセス部である周辺バスアクセス部ＰＢＡは、第２のバスであるシステムバスＳＢＳの信号ＳＧ２０を監視し、周辺バスＰＢＳへのアクセスを行う。信号ＳＧ２０がリードかライトで２重処理回数を示す信号ＳＧ１００が１回目の処理を示す場合には、周辺バスＰＢＳをアクセスする。
【００４７】
リードの場合には、読み出したリードデータＲＤ４００をデータ選択部ＤＳＬで選択し、システムバスＳＢＳに出力し、中央演算処理装置ＣＰＵに読み込ませる。周辺バスアクセス部ＰＢＡは、コマンド、アドレス、およびデータからなるアクセス情報ＤＡＣ４０１を出力し、バッファ登録部ＢＲＧがバッファＢＦＦに書き込みを行う。ここで、アクセス情報ＤＡＣ４０１のデータは、リードの場合にはリードデータとなり、ライトの場合はライトデータとなる。
【００４８】
バッファＢＦＦは、プログラムＰＧＭ−１用、プログラムＰＧＭ−２用、…、プログラムＰＧＭ−ｍ用というように、メモリＭＥＹに格納されているプログラム毎に使用するバッファ領域を分けている。
【００４９】
バッファＢＦＦは、バッファ参照部ＢＲＦと専用バスＢＵＳ１によって接続されている。また、バッファＢＦＦは、バッファ登録部ＢＲＧと専用バスＢＵＳ２によって接続されている。さらに、バッファＢＦＦは、ポインタＰＩＴと専用バスＢＵＳ３によって接続されている。これによって、バッファＢＦＦへのアクセス情報の書き込みや参照などを高速化することができる。
【００５０】
信号ＳＧ２０がリードかライトで２重処理回数を示す信号ＳＧ１００が２回目の処理を示す場合、周辺バスアクセス部ＰＢＡは、周辺バスＰＢＳをアクセスしない。バッファ参照部ＢＲＦは、１回目の処理でバッファＢＦＦに登録したアクセス情報を読み出し、リードの場合は、リードデータをデータ選択部ＤＳＬで選択し、システムバスＳＢＳに出力し、中央演算処理装置ＣＰＵに読み込ませる。
【００５１】
また、比較部ＣＭＰは、信号ＳＧ２０のコマンド、およびアドレスとバッファ参照部ＢＲＦが読み出したバッファ参照データＢＲＤ４４０とを比較する。なお、ライトの場合にはライトデータを比較する。
【００５２】
バッファＢＦＦの登録および参照を行うアドレスは、ポインタＰＩＴが指定する。このポインタＰＩＴは、例えば２重アクセス制御回路ＡＣＣが有するレジスタなどからなり、プログラムの処理開始後に中央演算処理装置ＣＰＵが直接書き込み部ＤＷＲに指示することによって、該直接書き込み部ＤＷＲが該レジスタの値を直接書き込む。また、ポインタ自動更新部ＡＲＮは、ポインタＰＩＴを更新する処理を行い、バッファＢＦＦを登録／参照するたびに、該ポインタ自動更新部ＡＲＮによってポインタＰＩＴが自動更新される。
【００５３】
〈バッファにおけるデータ構成例〉
図２は、図１の２重アクセス制御回路ＡＣＣが有するバッファＢＦＦのデータ構成の一例を示す説明図である。
【００５４】
バッファＢＦＦは、データサイズが例えば８バイトのメモリであり、図２に示すようにビット６３〜５６がコマンド、ビット５５〜３２がアドレス、ビット３１〜０がデータである。
【００５５】
バッファＢＦＦのアドレスはバイトを単位としており、「Ｐ１ＴＯＰ」は、プログラムＰＧＭ−１用の先頭番地、「Ｐ１ＴＯＰ＋８」はプログラムＰＧＭ１用の先頭から２番目の番地であることを示している。
【００５６】
「Ｐ２ＴＯＰ」は、プログラムＰＧＭ２用の先頭番地、「Ｐ２ＴＯＰ＋８」は、プログラムＰＧＭ２用の先頭から２番目の番地であることを示している。先頭番地は、中央演算処理装置ＣＰＵがポインタに書き込みを行うことで決定され、該中央演算処理装置ＣＰＵが周辺回路ＰＥＲ１〜ＰＥＲｎをアクセスすることで、バッファＢＦＦへの登録／参照が行われるたびにアドレスが＋８加算される。
【００５７】
続いて、２重アクセス制御回路ＡＣＣの動作について、図１、および図３を用いて説明する。
【００５８】
〈２重アクセス制御回路の処理例〉
図３は、図１のマイクロコントローラＭＣＲが有する２重アクセス制御回路ＡＣＣにおける動作処理の一例を示すフローチャートである。
【００５９】
まず、周辺バスアクセス部ＰＢＡはシステムバスのコマンドを監視し（ステップＳ１０１）、コマンドがリードであるかライトであるかを判定する。リードであると判定した際には、信号ＳＧ１００により２重処理の回数を確認する（ステップＳ１０２）。
【００６０】
プログラムの処理が１回目であると判定すると、２重処理の１回目におけるリードでは、周辺バスアクセス部ＰＢＡがレジスタＲＥＧ１〜ＲＥＧｎのいずれかをリードアクセスする（ステップＳ１０３）。
【００６１】
そして、データ選択部ＤＳＬは、レジスタから読み出したリードデータである信号ＳＧ５１をシステムバスＳＢＳに出力する（ステップＳ１０４）。バッファ登録部ＢＲＧは、第１のアクセス情報となるアクセス情報（コマンド、アドレス、リードデータ）をバッファＢＦＦに登録し（ステップＳ１０５）、続いて、ポインタ自動更新部ＡＲＮがポインタＰＩＴを更新する（ステップＳ１０６）。これにより、処理が終了となる。
【００６２】
ステップＳ１０２の処理において、２重処理の２回目におけるリードであると判定すると、バッファ参照部ＢＲＦは、アクセス情報をバッファＢＦＦから参照し（ステップＳ１０７）、ポインタ自動更新部ＡＲＮがポインタＰＩＴを更新する（ステップＳ１０８）。
【００６３】
そして、データ選択部ＤＳＬは、バッファＢＦＦから読み出したリードデータをシステムバスＳＢＳに出力する（ステップＳ１０９）。続いて、ステップＳ１０１の処理において取得した第２のアクセス情報であるコマンド、およびアドレスとステップＳ１０３の処理において取得したアクセス情報であるコマンド、およびアドレスとを比較（ステップＳ１１０）する。
【００６４】
これらが一致する場合（ステップＳ１１１）には処理が終了となり、不一致の場合（ステップＳ１１１）は、エラーを示す信号ＳＧ４５０を中央演算処理装置ＣＰＵに対して出力し（ステップＳ１１２）、処理が終了となる。
【００６５】
また、ステップＳ１０１の処理において、コマンドがライトであると周辺バスアクセス部ＰＢＡが判定した際には、２重処理の回数を確認する（ステップＳ１１３）。ステップＳ１１３の処理おいて、２重処理の１回目におけるライトの場合は、周辺バスアクセス部ＰＢＡは、周辺回路レジスタＲＥＧ１〜ＲＥＧｎのいずれかをライトアクセスする（ステップＳ１１４）。
【００６６】
そして、バッファ登録部ＢＲＧは、コマンド、アドレス、ライトデータを有するアクセス情報をバッファＢＦＦに登録する（ステップＳ１１５）。また、ポインタ自動更新部ＡＲＮは、ポインタＰＩＴを更新して（ステップＳ１１６）処理が終了となる。
【００６７】
ステップＳ１１３の処理において、２重処理の２回目におけるライトの場合、バッファ参照部ＢＲＦは、アクセス情報をバッファＢＦＦから参照し（ステップＳ１１７）、ポインタ自動更新部ＡＲＮがポインタＰＩＴを更新する（ステップＳ１１８）。
【００６８】
続いて、比較部ＣＭＰは、アクセス情報（コマンド、アドレス、ライトデータ）を比較し（ステップＳ１１９）、一致する場合（ステップＳ１２０）は処理を終了し、不一致の場合（ステップＳ１２０）は、エラーを示す信号ＳＧ４５０を中央演算処理装置ＣＰＵに対して出力し（ステップＳ１１２）、処理が終了となる。
【００６９】
〈１回目のリードアクセスのタイミング例〉
図４は、プログラムの１回目の処理において周辺回路が有するレジスタにリードアクセスする際の一例を示すタイミングチャートである。
【００７０】
図４において、上方から下方にかけては、クロックＳＣＬＫ、システムバスＳＢＳ、２重アクセス制御回路ＡＣＣ、クロックＰＣＬＫ、および周辺バスＰＢＳにおける信号タイミングをそれぞれ示している。
【００７１】
クロックＳＣＬＫは、システムバスＳＢＳのクロックである。システムバスＳＢＳにおいては、レディ信号ＲＤＹ、コマンドＣ、アドレスＡ、およびリードデータＲＤをそれぞれ示している。
【００７２】
２重アクセス制御回路ＡＣＣにおいては、ポインタＰＩＴ、バッファＢＦＦに登録するデータ、バッファ登録信号、および比較結果をそれぞれ示している。クロックＰＣＬＫは、周辺バスＰＢＳのクロックである。周辺バスＰＢＳにおいては、レディ信号ＲＤＹ、コマンドＣ、アドレスＡ、リードデータＲＤをそれぞれ示している。
【００７３】
まず、クロックＳＣＬＫ＝１のサイクルで、システムバスＳＢＳにコマンドＣ＝ＲＬ（ロングワード（３２ビット）のリード）、アドレスＡ＝Ａ１（アドレス１）が出力される。２重アクセス制御回路ＡＣＣは、システムバスＳＢＳのレディ信号ＲＤＹ＝Ｌｏにし、すなわちシステムバスＳＢＳを無効状態としてリードアクセスを待たせる。
【００７４】
クロックＰＣＬＫ＝２のサイクルにおいて、周辺バスＰＢＳにコマンドＣ＝ＲＬ、アドレスＡ＝Ａ１を出力する。このサイクルでは、リードデータＲＤにリードデータが読み出されないためＲＤＹ＝Ｌｏとなる。
【００７５】
クロックＰＣＬＫ＝３のサイクルにて、Ａ１のアドレスに割り当てられた周辺回路のレジスタからＤ１（データ１）が読み出され、レディ信号ＲＤＹ＝Ｈｉ、すなわち周辺バスＰＢＳを有効とする。
【００７６】
２重アクセス制御回路ＡＣＣは、周辺バスＰＢＳのリードデータＲＤに出力されたＤ１をクロックＳＣＬＫ＝７のサイクルでシステムバスＳＢＳのリードデータＲＤに出力し、レディ信号ＲＤＹ＝Ｈｉにしてリードアクセスを完了させる。
【００７７】
また、コマンドＲＬ、アドレスＡ１、リードデータＤ１をバッファ登録データとし、バッファ登録信号＝ＨｉにしてポインタＰＩＴが指すバッファアドレス＝Ｐ１ＴＯＰに書き込みを行い、ポインタＰＩＴを８バイト加算した値（Ｐ１ＴＯＰ＋８）に更新する。
【００７８】
以降、周辺回路のレジスタへのリードアクセスが発生すると、同様にして周辺バスＰＢＳへのアクセスとアクセス情報のバッファ登録が行われる。
【００７９】
〈２回目のリードアクセスのタイミング例〉
図５は、プログラムの２回目の処理において周辺回路が有するレジスタにリードアクセスする際の一例を示すタイミングチャートである。
【００８０】
図５において、上方から下方にかけては、図４と同様に、クロックＳＣＬＫ、システムバスＳＢＳ、２重アクセス制御回路ＡＣＣ、クロックＰＣＬＫ、および周辺バスＰＢＳにおける信号タイミングをそれぞれ示している。
【００８１】
まず、クロックＳＣＬＫ＝１のサイクルにて、システムバスＳＢＳにコマンドＣ＝ＲＬ、アドレスＡ＝Ａ１が出力される。２重アクセス制御回路ＡＣＣは、システムバスＳＢＳのレディ信号ＲＤＹ＝Ｌｏ（無効）にしてリードアクセスを待たせる。
【００８２】
クロックＳＣＬＫ＝２のサイクルで、バッファ参照信号＝ＨｉにしてポインタＰＩＴが指すバッファアドレス＝Ｐ１ＴＯＰから読み出しを行い、クロックＳＣＬＫ＝３のサイクルでバッファ参照データが｛ＲＬ、Ａ１、Ｄ１｝となる。
【００８３】
Ｄ１をシステムバスＳＢＳのリードデータＲＤに出力し、レディ信号ＲＤＹ＝Ｈｉ（有効）にしてリードアクセスを完了させる。ここで、システムバスＳＢＳのコマンドＣ、およびアドレスＡをバッファ参照データと比較する。一致する場合、比較結果を示す信号ＳＧ４５０はＬｏとなり、不一致の場合、比較結果を示す信号ＳＧ４５０はＨｉとなる。一方、ポインタＰＩＴを８バイト加算した値（Ｐ１ＴＯＰ＋８）に更新する。
【００８４】
以降、周辺回路のレジスタへのリードアクセスが発生すると、同様にしてアクセス情報のバッファ参照と比較が行われる。
【００８５】
〈１回目のライトアクセスのタイミング例〉
図６は、プログラムの１回目の処理において周辺回路が有するレジスタにライトアクセスする際の一例を示すタイミングチャートである。
【００８６】
図６において、上方から下方にかけては、図４と同様に、クロックＳＣＬＫ、システムバスＳＢＳ、２重アクセス制御回路ＡＣＣ、クロックＰＣＬＫ、および周辺バスＰＢＳにおける信号タイミングをそれぞれ示している。図４と異なるところは、システムバスＳＢＳにおけるリードデータＲＤがライトデータＷＤとなっている点である。
【００８７】
クロックＳＣＬＫ＝１のサイクルで、システムバスＳＢＳにコマンドＣ＝ＷＬ（ロングワード（３２ビット）のライト）、アドレスＡ＝Ａ２（アドレス２）、ライトデータＷＤ＝Ｄ２（データ２）が出力される。２重アクセス制御回路ＡＣＣは、システムバスＳＢＳのレディ信号ＲＤＹ＝Ｌｏ（無効）にしてライトアクセスを待たせる。
【００８８】
クロックＰＣＬＫ＝２のサイクルで、周辺バスＰＢＳにコマンドＣ＝ＷＬ、アドレスＡ＝Ａ２、ライトデータＷＤ＝Ｄ２を出力する。このサイクルでは、ライトアクセスを完了できないためレディ信号ＲＤＹ＝Ｌｏとなる。
【００８９】
クロックＰＣＬＫ＝３のサイクルで、Ａ２のアドレスに割り当てられた周辺回路のレジスタにＤ２が書き込まれ、レディ信号ＲＤＹ＝Ｈｉとなる。
【００９０】
２重アクセス制御回路ＡＣＣは、クロックＳＣＬＫ＝７のサイクルにて、レディ信号ＲＤＹ＝Ｈｉにしてライトアクセスを完了させる。また、コマンドＣ＝ＷＬ、アドレスＡ＝Ａ２、ライトデータＷＤ＝Ｄ２をバッファ登録データとし、バッファ登録信号＝ＨｉにしてポインタＰＩＴが指すバッファアドレス＝Ｐ１ＴＯＰ＋８に書き込みを行い、ポインタＰＩＴを８バイト加算した値（Ｐ１ＴＯＰ＋１６）に更新する。
【００９１】
以降、周辺回路のレジスタへのライトアクセスが発生すると、同様にして周辺バスＰＢＳへのアクセスとアクセス情報のバッファ登録が行われる。
【００９２】
〈２回目のライトアクセスのタイミング例〉
図７は、プログラムの２回目の処理において周辺回路が有するレジスタにライトアクセスする際の一例を示すタイミングチャートである。
【００９３】
図７において、上方から下方にかけては、図６と同様に、クロックＳＣＬＫ、システムバスＳＢＳ、２重アクセス制御回路ＡＣＣ、クロックＰＣＬＫ、および周辺バスＰＢＳにおける信号タイミングをそれぞれ示している。
【００９４】
まず、クロックＳＣＬＫ＝１のサイクルにて、システムバスＳＢＳにコマンドＣ＝ＷＬ、アドレスＡ＝Ａ２、ライトデータＷＤ＝Ｄ２が出力される。２重アクセス制御回路ＡＣＣは、システムバスＳＢＳのレディ信号ＲＤＹ＝Ｌｏにしてライトアクセスを待たせる。
【００９５】
クロックＳＣＬＫ＝２のサイクルにおいて、バッファ参照信号＝ＨｉにしてポインタＰＩＴが指すバッファアドレス＝Ｐ１ＴＯＰ＋８から読み出しを行い、クロックＳＣＬＫ＝３のサイクルにてバッファ参照データが｛ＷＬ、Ａ２、Ｄ２｝となる。
【００９６】
システムバスＳＢＳのレディ信号ＲＤＹ＝Ｈｉにしてライトアクセスを完了させる。ここで、システムバスＳＢＳのコマンドＣ、アドレスＡ、およびライトデータＷＤをバッファ参照データと比較する。一致する場合は、比較結果を示す信号ＳＧ４５０がＬｏとなり、不一致の場合は比較結果を示す信号ＳＧ４５０はＨｉとなる。一方、ポインタＰＩＴを８バイト加算した値（Ｐ１ＴＯＰ＋１６）に更新する。
【００９７】
以降、周辺回路のレジスタへのライトアクセスが発生すると、同様にしてアクセス情報のバッファ参照と比較が行われる。
【００９８】
以上により、同じプログラムを用いて中央演算処理装置ＣＰＵが故障しているか否かを検出することができるので、プログラムの開発工数の増加を低減させることができ、マイクロコントローラＭＣＲの低コスト化を図ることができる。
【００９９】
また、ＣＰＵ２重化処理を行う中央演算処理装置が不要となるので、マイクロコントローラＭＣＲにおける消費電力を低減、および小型化を実現することができる。
【０１００】
（実施の形態２）
図８は、本実施の形態２によるマイクロコントローラＭＣＲにおける構成の一例を示すブロック図である。
【０１０１】
〈マイクロコントローラの構成例および動作例〉
前記実施の形態１の図１におけるマイクロコントローラＭＣＲでは、バッファＢＦＦが２重アクセス制御回路ＡＣＣ内に設けられていたのに対して、図８のマイクロコントローラＭＣＲにおいては、該バッファＢＦＦが周辺バスＰＢＳに接続されており、２重アクセス制御回路ＡＣＣ内には、バッファＢＦＦをアクセスするバッファアクセス部ＢＡＣが新たに追加された構成となっている。
【０１０２】
このように、バッファＢＦＦを２重アクセス制御回路ＡＣＣに設けるのではなく、周辺バスＰＢＳに接続するように設けることにより、バッファＢＦＦの記憶容量を簡単に変更することができる。
【０１０３】
周辺バスアクセス部ＰＢＡは、システムバスＳＢＳの信号ＳＧ２０を監視し、周辺バスＰＢＳへのアクセスを行う。信号ＳＧ２０がリードかライトで、信号ＳＧ１００がプログラムの処理が１回目を示す場合には、周辺バスＰＢＳをアクセスする。
【０１０４】
リードの場合には、読み出したリードデータＲＤ４００をデータ選択部ＤＳＬにて選択し、システムバスＳＢＳに出力し、中央演算処理装置ＣＰＵに読み込ませる。周辺バスアクセス部ＰＢＡは、アクセス情報（コマンド、アドレス、データ（リードの場合はリードデータ、ライトの場合はライトデータ））ＤＡＣ４０１を出力し、バッファ登録部ＢＲＧがバッファアクセス部ＢＡＣに専用バスＢＵＳ２を介してバッファアクセス要求信号を出力する。
【０１０５】
バッファアクセス部ＢＡＣは、周辺バスアクセス部ＰＢＡにバッファアクセス信号ＢＡＳ４９１を出力し、周辺バスアクセス部ＰＢＡがバッファＢＦＦに書き込みを行う。バッファＢＦＦは、図示してはいないが、前記実施の形態１の図１のバッファＢＦＦと同様にプログラムＰＧＭ−１用、プログラムＰＧＭ−２用、…、プログラムＰＧＭ−ｍ用というように、プログラムごとに使用する領域を分けている。
【０１０６】
信号ＳＧ２０がリードかライトで２重処理回数を示す信号ＳＧ１００が２回目を示す場合には、周辺バスＰＢＳをアクセスしない。バッファ参照部ＢＲＦにより１回目の処理においてバッファＢＦＦに登録したアクセス情報を読み出すために、バッファアクセス部ＢＡＣが周辺バスアクセス部ＰＢＡにバッファアクセス信号ＢＡＳ４９１を出力し、周辺バスアクセス部ＰＢＡがバッファＢＦＦの読み出しを行う。
【０１０７】
バッファＢＦＦから読み出したアクセス情報は、バッファアクセス部ＢＡＣからバッファ参照部ＢＲＦに出力される。リードの場合は、リードデータをデータ選択部ＤＳＬで選択し、システムバスＳＢＳに出力し、中央演算処理装置ＣＰＵに読み込ませる。
【０１０８】
また、アクセス情報（コマンド、アドレス、ライトの場合にはライトデータ）として信号ＳＧ２０とバッファ参照部ＢＲＦが読み出したバッファ参照データＢＲＤ４４０を比較部ＣＭＰで比較する。
【０１０９】
バッファＢＦＦの登録および参照を行うアドレスは、ポインタＰＩＴが指定する。ポインタＰＩＴは、２重アクセス制御回路ＡＣＣの専用レジスタとして持ち、プログラムの処理開始直後に中央演算処理装置ＣＰＵが直接書き込み部ＤＷＲを制御することにより該レジスタの値を直接書き込む。また、ポインタ自動更新部ＡＲＮは、バッファＢＦＦを登録／参照するたびに、ポインタＰＩＴを自動更新する。
【０１１０】
〈バッファのデータ構成例〉
図９は、図８のマイクロコントローラＭＣＲが有するバッファＢＦＦのデータ構造の一例を示す説明図である。
【０１１１】
バッファＢＦＦは、データサイズが例えば４バイトのメモリであり、図１のバッファＢＦＦと同様に例えばＳＲＡＭなどの揮発性半導体メモリからなる。また、ビット３１〜２４はコマンド、ビット２３〜０がアドレス、またはビット３１〜０がデータである。
【０１１２】
連続する２つの４バイトデータが１回のアクセス情報となる。バッファアクセスは、１回の周辺回路へのアクセスにつき、４バイトのリードアクセスまたはライトアクセスが２回発生する。
【０１１３】
バッファＢＦＦのアドレスは、バイトを単位としており、「Ｐ１ＴＯＰ」は、プログラムＰＧＭ１用の先頭番地でコマンドとアドレス部分、「Ｐ１ＴＯＰ＋４」は、プログラムＰＧＭ１用の先頭番地でデータ部分である。
【０１１４】
「Ｐ２ＴＯＰ」は、プログラムＰＧＭ２用の先頭番地でコマンドとアドレス部分、「Ｐ２ＴＯＰ＋４」は、プログラムＰＧＭ２用の先頭番地でデータ部分である。先頭番地は、中央演算処理装置ＣＰＵがポインタＰＩＴに書き込みを行うことで決定され、中央演算処理装置ＣＰＵが周辺回路をアクセスすることでバッファＢＦＦへの登録／参照が行われるたびにアドレスが＋４加算される。
【０１１５】
〈１回目のリードアクセスのタイミング例〉
図１０は、プログラムの１回目の処理において周辺回路が有するレジスタにリードアクセスする際の一例を示すタイミングチャートである。
【０１１６】
図１０において、上方から下方にかけては、クロックＳＣＬＫ、システムバスＳＢＳ、２重アクセス制御回路ＡＣＣ、クロックＰＣＬＫ、および周辺バスＰＢＳにおける信号タイミングをそれぞれ示しており、これらは前記実施の形態１の図４と同様となっている。
【０１１７】
まず、クロックＳＣＬＫ＝１のサイクルにて、システムバスＳＢＳにコマンドＣ＝ＲＬ、アドレスＡ＝Ａ１（アドレス１）が出力される。２重アクセス制御回路ＡＣＣは、システムバスＳＢＳのレディ信号ＲＤＹ＝Ｌｏにしてリードアクセスを待たせる。
【０１１８】
クロックＰＣＬＫ＝２のサイクルにおいて、周辺バスＰＢＳにコマンドＣ＝ＲＬ、アドレスＡ＝Ａ１を出力する。このサイクルでは、リードデータＲＤにリードデータが読み出されないためＲＤＹ＝Ｌｏとなる。
【０１１９】
クロックＰＣＬＫ＝３のサイクルでは、Ａ１のアドレスに割り当てられた周辺回路のレジスタからＤ１（データ１）が読み出され、レディ信号ＲＤＹ＝Ｈｉとなる。２重アクセス制御回路ＡＣＣは、周辺バスＰＢＳのリードデータＲＤに出力されたＤ１をクロックＳＣＬＫ＝７のサイクルにてシステムバスＳＢＳのリードデータＲＤに出力し、レディ信号ＲＤＹ＝Ｈｉにしてリードアクセスを完了させる。
【０１２０】
また、コマンドＣ＝ＲＬ、アドレスＡ＝Ａ１、リードデータＲＤ＝Ｄ１をバッファ登録データとし、バッファ登録信号＝ＨｉにしてポインタＰＩＴが指すバッファアドレス＝Ｐ１ＴＯＰに書き込みを行う。
【０１２１】
バッファＢＦＦは、周辺バスＰＢＳに接続されているため、該周辺バスＰＢＳを介して４バイトずつ書き込みを行う。クロックＰＣＬＫ＝４のサイクルでは、バッファアドレス＝Ｐ１ＴＯＰを周辺バスＰＢＳのアドレスに出力し、コマンドＣ＝ＲＬとアドレスＡ＝Ａ１をライトデータＷＤに出力し、バッファＢＦＦに書き込む。
【０１２２】
続いて、クロックＰＣＬＫ＝６のサイクルにて、バッファアドレス＝Ｐ１ＴＯＰ＋４を周辺バスＰＢＳのアドレスに出力し、データＤ１をライトデータに出力し、バッファＢＦＦに書き込む。
【０１２３】
以降、周辺回路のレジスタへのリードアクセスが発生すると、同様にして周辺バスＰＢＳへのアクセスとアクセス情報のバッファ登録が行われる。
【０１２４】
〈２回目のリードアクセスのタイミング例〉
図１１は、プログラムの２回目の処理において周辺回路が有するレジスタにリードアクセスする際の一例を示すタイミングチャートである。
【０１２５】
図１１において、上方から下方にかけては、図１０と同様に、クロックＳＣＬＫ、システムバスＳＢＳ、２重アクセス制御回路ＡＣＣ、クロックＰＣＬＫ、および周辺バスＰＢＳにおける信号タイミングをそれぞれ示している。
【０１２６】
クロックＳＣＬＫ＝１のサイクルにて、システムバスＳＢＳにコマンドＣ＝ＲＬ、アドレスＡ＝Ａ１が出力される。２重アクセス制御回路ＡＣＣは、システムバスＳＢＳのレディ信号ＲＤＹ＝Ｌｏにしてリードアクセスを待たせる。
【０１２７】
クロックＰＣＬＫ＝２のサイクルにおいて、バッファアドレス＝Ｐ１ＴＯＰを周辺バスＰＢＳのアドレスに出力してバッファＢＦＦから読み出しを行い、クロックＰＣＬＫ＝４のサイクルにてバッファ参照データが｛ＲＬ、Ａ１｝となる。
【０１２８】
一方、ポインタＰＩＴを４バイト加算した値（Ｐ１ＴＯＰ＋４）に更新する。同じサイクルでバッファアドレス＝Ｐ１ＴＯＰ＋４を周辺バスＰＢＳのアドレスに出力してバッファから読み出しを行い、クロックＰＣＬＫ＝６のサイクルでバッファ参照データにリードデータＲＤ＝Ｄ１が追加され｛ＲＬ、Ａ１、Ｄ１｝となる。リードデータＲＤ＝Ｄ１をシステムバスＳＢＳに出力し、レディ信号ＲＤＹ＝Ｈｉにしてリードアクセスを完了させる。
【０１２９】
ここで、システムバスＳＢＳのコマンドＣ、およびアドレスＡをバッファ参照データと比較する。一致する場合、比較結果を示す信号ＳＧ４５０はＬｏとなり、不一致の場合、比較結果を示す信号ＳＧ４５０がＨｉとなる。一方、ポインタＰＩＴを４バイト加算した値（Ｐ１ＴＯＰ＋８）に更新する。
【０１３０】
以降、周辺回路のレジスタへのリードアクセスが発生すると、同様にしてアクセス情報のバッファ参照と比較が行われる。
【０１３１】
〈１回目のライトアクセスのタイミング例〉
図１２は、プログラムの１回目の処理において周辺回路が有するレジスタにライトアクセスする際の一例を示すタイミングチャートである。
【０１３２】
図１２において、上方から下方にかけては、図４と同様に、クロックＳＣＬＫ、システムバスＳＢＳ、２重アクセス制御回路ＡＣＣ、クロックＰＣＬＫ、および周辺バスＰＢＳにおける信号タイミングをそれぞれ示している。図１０と異なるところは、システムバスＳＢＳにおけるリードデータＲＤがライトデータＷＤとなっている点である。
【０１３３】
まず、クロックＳＣＬＫ＝１のサイクルにて、システムバスＳＢＳにコマンドＣ＝ＷＬ、アドレスＡ＝Ａ２（アドレス２）、ライトデータＷＤ＝Ｄ２（データ２）が出力される。
【０１３４】
２重アクセス制御回路ＡＣＣは、システムバスＳＢＳのレディ信号ＲＤＹ＝Ｌｏにしてライトアクセスを待たせる。クロックＰＣＬＫ＝２のサイクルにて、周辺バスＰＢＳにコマンドＣ＝ＷＬ、アドレスＡ＝Ａ２、ライトデータＷＤ＝Ｄ２を出力する。このサイクルでは、ライトアクセスを完了できないためレディ信号ＲＤＹ＝Ｌｏとなる。
【０１３５】
クロックＰＣＬＫ＝３のサイクルにおいて、アドレスＡ＝Ａ２のアドレスに割り当てられた周辺回路のレジスタにライトデータＷＤ＝Ｄ２が書き込まれ、レディ信号ＲＤＹ＝Ｈｉとなる。
【０１３６】
２重アクセス制御回路ＡＣＣは、クロックＳＣＬＫ＝７のサイクルにおいて、レディ信号ＲＤＹ＝Ｈｉにしてライトアクセスを完了させる。また、コマンドＣ＝ＷＬ、アドレスＡ＝Ａ２、ライトデータＷＤ＝Ｄ２をバッファ登録データとし、バッファ登録信号＝ＨｉにしてポインタＰＩＴが指すバッファアドレス＝Ｐ１ＴＯＰ＋８に書き込みを行う。
【０１３７】
バッファＢＦＦは、周辺バスＰＢＳに接続されているため、周辺バスＰＢＳを介して４バイトずつ書き込みを行う。クロックＰＣＬＫ＝４のサイクルにて、バッファアドレス＝Ｐ１ＴＯＰ＋８を周辺バスＰＢＳのアドレスに出力し、コマンドＣ＝ＷＬとアドレスＡ＝Ａ２をライトデータＷＤに出力し、バッファに書き込む。
【０１３８】
続いて、クロックＰＣＬＫ＝６のサイクルにおいて、バッファアドレス＝Ｐ１ＴＯＰ＋１２を周辺バスのアドレスに出力し、データＤ２をライトデータＷＤに出力し、バッファＢＦＦに書き込む。
【０１３９】
以降、周辺回路のレジスタへのライトアクセスが発生すると、同様にして周辺バスＰＢＳのアクセスとアクセス情報のバッファ登録が行われる。
【０１４０】
〈２回目のライトアクセスのタイミング例〉
図１３は、プログラムの２回目の処理において周辺回路が有するレジスタにライトアクセスする際の一例を示すタイミングチャートである。
【０１４１】
図１３において、上方から下方にかけては、図１２と同様に、クロックＳＣＬＫ、システムバスＳＢＳ、２重アクセス制御回路ＡＣＣ、クロックＰＣＬＫ、および周辺バスＰＢＳにおける信号タイミングをそれぞれ示している。
【０１４２】
まず、クロックＳＣＬＫ＝１のサイクルにて、システムバスＳＢＳにコマンドＣ＝ＷＬ、アドレスＡ＝Ａ２、ライトデータＷＤ＝Ｄ２が出力される。２重アクセス制御回路ＡＣＣは、システムバスＳＢＳのレディ信号ＲＤＹ＝Ｌｏにしてライトアクセスを待たせる。
【０１４３】
クロックＰＣＬＫ＝２のサイクルにて、バッファアドレス＝Ｐ１ＴＯＰ＋８を周辺バスＰＢＳのアドレスに出力してバッファＢＦＦから読み出しを行い、クロックＰＣＬＫ＝４のサイクルにおいて、バッファ参照データが｛ＷＬ、Ａ２｝となる。
【０１４４】
一方、ポインタＰＩＴを４バイト加算した値（Ｐ１ＴＯＰ＋１２）に更新する。同じサイクルにおいてバッファアドレス＝Ｐ１ＴＯＰ＋１２を周辺バスＰＢＳのアドレスに出力してバッファＢＦＦから読み出しを行い、クロックＰＣＬＫ＝６のサイクルでバッファ参照データにライトデータＷＤ＝Ｄ２が追加され｛ＷＬ、Ａ２、Ｄ２｝となる。
【０１４５】
システムバスＳＢＳのレディ信号ＲＤＹ＝Ｈｉにしてライトアクセスを完了させる。ここで、システムバスＳＢＳのコマンドＣ、アドレスＡ、およびライトデータＷＤをバッファ参照データと比較する。一致する場合、比較結果を示す信号ＳＧ４５０はＬｏとなり、不一致の場合、比較結果を示す信号ＳＧ４５０はＨｉとなる。一方、ポインタＰＩＴを４バイト加算した値（Ｐ１ＴＯＰ＋１６）に更新する。
【０１４６】
以降、周辺回路のレジスタへのライトアクセスが発生すると、同様にしてアクセス情報のバッファ参照と比較が行われる。
【０１４７】
以上によっても、プログラムの開発工数の増加を低減させることができ、マイクロコントローラＭＣＲの低コスト化を図ることができる。また、マイクロコントローラＭＣＲの低消費電力化、および小型化を実現することができる。
【０１４８】
（実施の形態３）
〈マイクロコントローラの構成例および動作例〉
図１４は、本実施の形態３によるマイクロコントローラＭＣＲにおける構成の一例を示すブロック図である。
【０１４９】
前記実施の形態２の図８では、アクセス情報を登録するバッファＢＦＦが周辺バスＰＢＳに接続された構成となっていたが、図１４に示すマイクロコントローラＭＣＲにおいては、バッファＢＦＦがシステムバスＳＢＳに接続されたメモリＭＥＹに設けられている。その他の構成については、前記実施の形態２の図８に示す構成と同様である。
【０１５０】
ここで、メモリＭＥＹが有するバッファＢＦＦは、例えばＳＲＡＭなどの揮発性半導体メモリであり、該メモリＭＥＹにおいて、中央演算処理装置ＣＰＵが実行する命令および処理するデータを記憶する記憶領域は、例えばフラッシュメモリなどの不揮発性半導体メモリである。
【０１５１】
このように、メモリＭＥＹの一部をバッファＢＦＦとすることによって、新たにバッファが不要となり、コストを低減することができる。
【０１５２】
周辺バスアクセス部ＰＢＡは、システムバスＳＢＳの信号ＳＧ２０を監視し、周辺バスＰＢＳへのアクセスを行う。信号ＳＧ２０がリードかライトの場合において、２重処理回数を示す信号ＳＧ１００が１回目の処理を示す場合には、周辺バスＰＢＳをアクセスする。
【０１５３】
リードの場合には、周辺バスアクセス部ＰＢＡが読み出したリードデータＲＤ４００をデータ選択部ＤＳＬにて選択し、システムバスＳＢＳに出力し、中央演算処理装置ＣＰＵに読み込ませる。
【０１５４】
周辺バスアクセス部ＰＢＡは、アクセス情報（コマンド、アドレス、データ（リードの場合はリードデータ、ライトの場合はライトデータ））ＤＡＣ４０１を出力し、バッファ登録部ＢＲＧがバッファアクセス部ＢＡＣにバッファアクセス要求信号ＢＡＲ４３０を出力する。
【０１５５】
バッファアクセス部ＢＡＣは、システムバスＳＢＳにアクセス信号となる信号ＳＧ２０Ｃを出力し、メモリＭＥＹが有するバッファＢＦＦに書き込みを行う。
【０１５６】
バッファＢＦＦは、図示してはいないが、前記実施の形態１の図１に示すバッファＢＦＦと同様に、プログラムＰＧＭ１用、プログラムＰＧＭ２用、…、プログラムＰＧＭｍ用というように、プログラムごとに使用する領域を分けている。
【０１５７】
信号ＳＧ２０がリードかライトの場合で、信号ＳＧ１００が２回目の処理を示す場合には、周辺バスＰＢＳをアクセスしない。バッファ参照部ＢＲＦにより１回目の処理でメモリＭＥＹのバッファＢＦＦに登録したアクセス情報を読み出すために、バッファアクセス部ＢＡＣがシステムバスＳＢＳにアクセス信号となる信号ＳＧ２０Ｃを出力し、読み出しを行う。
【０１５８】
読み出したアクセス情報は、バッファアクセス部ＢＡＣからバッファ参照部ＢＲＦに出力される。リードの場合はリードデータをデータ選択部ＤＳＬが選択し、システムバスＳＢＳに出力し、中央演算処理装置ＣＰＵに読み込ませる。
【０１５９】
また、アクセス情報（コマンド、アドレス、ライトの場合にはライトデータ）として信号ＳＧ２０とバッファ参照データＢＲＤ４４０を比較部ＣＭＰにて比較する。
【０１６０】
バッファＢＦＦの登録および参照を行うアドレスは、ポインタＰＩＴが指定する。ポインタＰＩＴは、２重アクセス制御回路ＡＣＣの専用レジスタとして持ち、プログラムの処理開始直後に中央演算処理装置ＣＰＵが直接書き込み部ＤＷＲを制御することによって該専用レジスタの値を直接書き込む。また、バッファＢＦＦを登録／参照した後、ポインタ自動更新部ＡＲＮは、ポインタＰＩＴを自動更新する。
【０１６１】
以上によっても、プログラムの開発工数の増加を低減させることができ、マイクロコントローラＭＣＲの低コスト化を図ることができる。また、マイクロコントローラＭＣＲの低消費電力化、および小型化を実現することができる。
【０１６２】
（実施の形態４）
〈マイクロコントローラの構成例〉
図１５は、本実施の形態４によるマイクロコントローラＭＣＲにおける構成の一例を示すブロック図である。
【０１６３】
本実施の形態４においては、シングルコアＣＰＵではなく、デュアルコアＣＰＵにてプログラムを並列処理するマイクロコントローラに２重アクセス制御回路を設けた場合について説明する。
【０１６４】
マイクロコントローラＭＣＲは、図１５に示すように、２つの中央演算処理装置ＣＰＵ，ＣＰＵａを有するデュアルＣＰＵ構成となっており、これら中央演算処理装置ＣＰＵ，および中央演算処理装置ＣＰＵａは、システムバスＳＢＳにそれぞれ接続されている。
【０１６５】
また、第１の中央演算処理装置である中央演算処理装置ＣＰＵおよび第１の中央演算処理装置である中央演算処理装置ＣＰＵａは、それぞれ独立に処理を行うことができ、同一のプログラムを並列に処理することもできる。２重アクセス制御回路ＡＣＣは、２つのポインタＰＩＴ，ＰＩＴａを有している。
【０１６６】
バッファＢＦＦは、バッファ参照部ＢＲＦと専用バスＢＵＳ１によって接続されて降り、バッファ登録部ＢＲＧとは専用バスＢＵＳ２によって接続されている。また、バッファＢＦＦは、第１のポインタであるポインタＰＩＴと専用バスＢＵＳ３によって接続されており、第２のポインタであるポインタＰＩＴａと専用バスＢＵＳ４によって接続されている。これによって、バッファＢＦＦへのアクセス情報の書き込みや参照などを高速化することができる。なお、その他の構成については、前記実施の形態１の図１と同様となっている。
【０１６７】
〈マイクロコントローラの動作例〉
２重アクセス制御回路ＡＣＣは、中央演算処理装置ＣＰＵまたは中央演算処理装置ＣＰＵａが周辺回路ＰＥＲ１〜ＰＥＲｎが内蔵するレジスタＲＥＧ１〜ＲＥＧｎをアクセスする場合に、先に実行されるプログラムの処理では周辺回路ＰＥＲ１〜ＰＥＲｎのいずれかのレジスタへのアクセスを行う。
【０１６８】
そして、そのアクセス情報をバッファＢＦＦに登録し、２回目に実行されるプログラムの処理では、周辺回路ＰＥＲ１〜ＰＥＲｎのいずれかのレジスタへのアクセスを行わずに、アクセス情報をバッファＢＦＦに登録した１回目の情報と比較部ＣＭＰによって比較することにより故障を検出する。
【０１６９】
デュアルコアＣＰＵ構成の場合、中央演算処理装置ＣＰＵと中央演算処理装置ＣＰＵａのどちらが先に周辺回路のレジスタをアクセスするかは分からない。つまり、前記実施の形態１〜３のように、２重処理の回数を中央演算処理装置のレジスタにて設定する方法は使えない。
【０１７０】
そこで、２重アクセス制御回路ＡＣＣにおいて、バッファアドレスを指すポインタを中央演算処理装置ＣＰＵが用いるポインタＰＩＴと中央演算処理装置ＣＰＵａが用いるポインタＰＩＴａの２つを独立して有する構成となっている。
【０１７１】
システムバスＳＢＳにアクセスを実行した中央演算処理装置を識別する信号を含め、２重アクセス制御回路ＡＣＣは、中央演算処理装置ＣＰＵ，ＣＰＵａにそれぞれ対応したポインタを使用する。
【０１７２】
ポインタＰＩＴとポインタＰＩＴａの値を比較し、値が大きいか等しい場合にはそのアクセスは先に実行されたとみなすことができる。また、値が小さい場合、そのアクセスは後に実行されたとみなすことができる。それ以外の動作については、前記実施の形態１と同じである。
【０１７３】
〈先行リードアクセスのタイミング例〉
図１６は、プログラムの並列処理において周辺回路が有するレジスタに先行リードアクセスする際の一例を示すタイミングチャートである。
【０１７４】
図１６において、上方から下方にかけては、図４と同様にクロックＳＣＬＫ、システムバスＳＢＳ、２重アクセス制御回路ＡＣＣ、クロックＰＣＬＫ、および周辺バスＰＢＳにおける信号タイミングをそれぞれ示しており、これらは前記実施の形態１の図４と同様となっている。図１６が図４と異なる点は、２重アクセス制御回路ＡＣＣにおいて、ポインタＰＩＴａの信号タイミングが新たに追加されている点である。
【０１７５】
まず、クロックＳＣＬＫ＝１のサイクルにて、中央演算処理装置ＣＰＵがシステムバスＳＢＳにコマンドＣ＝ＲＬ、アドレスＡ＝Ａ１（アドレス１）を出力する。ポインタＰＩＴ＝ポインタＰＩＴａであるため先行アクセスとみなすことができる。２重アクセス制御回路ＡＣＣは、システムバスＳＢＳのレディ信号ＲＤＹ＝Ｌｏにしてリードアクセスを待たせる。
【０１７６】
クロックＰＣＬＫ＝２のサイクルにおいて、周辺バスＰＢＳにコマンドＣ＝ＲＬ、アドレスＡ＝Ａ１を出力する。このサイクルでは、リードデータＲＤにリードデータが読み出されないためレディ信号ＲＤＹ＝Ｌｏとなる。
【０１７７】
クロックＰＣＬＫ＝３のサイクルにて、アドレスＡ＝Ａ１のアドレスに割り当てられた周辺回路のレジスタからリードデータＲＤ＝Ｄ１（データ１）が読み出され、レディ信号ＲＤＹ＝Ｈｉとなる。
【０１７８】
２重アクセス制御回路ＡＣＣは、周辺バスＰＢＳのリードデータＲＤに出力されたＤ１をクロックＳＣＬＫ＝７のサイクルにてシステムバスＳＢＳのリードデータＲＤに出力し、レディ信号ＲＤＹ＝Ｈｉにしてリードアクセスを完了させる。
【０１７９】
また、コマンドＣ＝ＲＬ、アドレスＡ＝Ａ１、リードデータＲＤ＝Ｄ１をバッファ登録データとし、バッファ登録信号＝ＨｉにしてポインタＰＩＴが指すバッファアドレス＝Ｐ１ＴＯＰに書き込みを行い、ポインタＰＩＴを８バイト加算した値（Ｐ１ＴＯＰ＋８）に更新する。
【０１８０】
〈後行リードアクセスのタイミング例〉
図１７は、プログラムの並列処理において周辺回路が有するレジスタに後行リードアクセスする際の一例を示すタイミングチャートである。
【０１８１】
まず、クロックＳＣＬＫ＝１のサイクルにおいて、中央演算処理装置ＣＰＵａがシステムバスＳＢＳにコマンドＣ＝ＲＬ、アドレスＡ＝Ａ１を出力する。ポインタＰＩＴ＞ポインタＰＩＴａであるため、後行アクセスとみなすことができる。２重アクセス制御回路ＡＣＣは、システムバスＳＢＳのレディ信号ＲＤＹ＝Ｌｏにしてリードアクセスを待たせる。
【０１８２】
クロックＳＣＬＫ＝２のサイクルにて、バッファ参照信号＝ＨｉにしてポインタＰＩＴａが指すバッファアドレス＝Ｐ１ＴＯＰから読み出しを行い、クロックＳＣＬＫ＝３のサイクルでバッファ参照データが｛ＲＬ、Ａ１、Ｄ１｝となる。
【０１８３】
Ｄ１をシステムバスＳＢＳのリードデータＲＤに出力し、レディ信号ＲＤＹ＝Ｈｉにしてリードアクセスを完了させる。ここで、システムバスＳＢＳのコマンドＣ、アドレスＡをバッファ参照データと比較する。
【０１８４】
一致する場合、比較結果を示す信号ＳＧ４５０はＬｏとなり、不一致の場合、比較結果を示す信号ＳＧ４５０がＨｉとなる。一方、ポインタＰＩＴａＢを８バイト加算した値（Ｐ１ＴＯＰ＋８）に更新する。
【０１８５】
〈先行ライトアクセスのタイミング例〉
図１８は、プログラムの並列処理において周辺回路が有するレジスタに先行ライトアクセスする際の一例を示すタイミングチャートである。
【０１８６】
まず、クロックＳＣＬＫ＝１のサイクルにおいて、中央演算処理装置ＣＰＵａがシステムバスＳＢＳにコマンドＣ＝ＷＬ、アドレスＡ＝Ａ２（アドレス２）、ライトデータＷＤ＝Ｄ２（データ２）を出力する。
【０１８７】
ポインタＰＩＴ＝ポインタＰＩＴａであるため先行アクセスとみなすことができる。２重アクセス制御回路ＡＣＣは、システムバスＳＢＳのレディ信号ＲＤＹ＝Ｌｏにしてライトアクセスを待たせる。
【０１８８】
クロックＰＣＬＫ＝２のサイクルにて、周辺バスＰＢＳにコマンドＣ＝ＷＬ、アドレスＡ＝Ａ２、ライトデータＷＤ＝Ｄ２を出力する。このサイクルでは、ライトアクセスを完了できないためＲＤＹ＝Ｌｏとなる。
【０１８９】
クロックＰＣＬＫ＝３のサイクルにて、Ａ２のアドレスに割り当てられた周辺回路のレジスタにライトデータＷＤ＝Ｄ２が書き込まれ、レディ信号ＲＤＹ＝Ｈｉとなる。２重アクセス制御回路ＡＣＣは、クロックＳＣＬＫ＝７のサイクルにおいて、レディ信号ＲＤＹ＝Ｈｉにしてライトアクセスを完了させる。
【０１９０】
また、コマンドＣ＝ＷＬ、アドレスＡ＝Ａ２、ライトデータＷＤ＝Ｄ２をバッファ登録データとし、バッファ登録信号＝ＨｉにしてポインタＰＩＴａが指すバッファアドレス＝Ｐ１ＴＯＰ＋８に書き込みを行い、ポインタＰＩＴａを８バイト加算した値（Ｐ１ＴＯＰ＋１６）に更新する。
【０１９１】
〈後行ライトアクセスのタイミング例〉
図１９は、プログラムの並列処理において周辺回路が有するレジスタに後行ライトアクセスする際の一例を示すタイミングチャートである。
【０１９２】
クロックＳＣＬＫ＝１のサイクルにて、中央演算処理装置ＣＰＵがシステムバスＳＢＳにコマンドＣ＝ＷＬ、アドレスＡ＝Ａ２、ライトデータＷＤ＝Ｄ２を出力する。ポインタＰＩＴ＜ポインタＰＩＴａであるため後行アクセスとみなすことができる。２重アクセス制御回路ＡＣＣは、システムバスＳＢＳのレディ信号ＲＤＹ＝Ｌｏにしてライトアクセスを待たせる。
【０１９３】
クロックＳＣＬＫ＝２のサイクルにおいて、バッファ参照信号＝ＨｉにしてポインタＰＩＴが指すバッファアドレス＝Ｐ１ＴＯＰ＋８から読み出しを行い、クロックＳＣＬＫ＝３のサイクルでバッファ参照データが｛ＷＬ、Ａ２、Ｄ２｝となる。
【０１９４】
システムバスＳＢＳのレディ信号ＲＤＹ＝Ｈｉにしてライトアクセスを完了させる。ここで、システムバスＳＢＳのコマンドＣ、アドレスＡ、ライトデータＷＤをバッファ参照データと比較する。
【０１９５】
一致する場合、比較結果を示す信号ＳＧ４５０はＬｏとなり、不一致の場合、比較結果を示す信号ＳＧ４５０がＨｉとなる。一方、ポインタＰＩＴを８バイト加算した値（Ｐ１ＴＯＰ＋１６）に更新する。
【０１９６】
以上により、マイクロコントローラＭＣＲにおける処理速度を向上させながら、低コスト化、低消費電力化、および小型化を実現することができる。
【０１９７】
（実施の形態５）
〈システムへの適用例〉
図２０は、本実施の形態５によるマイクロコントローラを用いたシステムの一例を示す説明図である。
【０１９８】
この図２０においては、自動車ＣＡＲを例にとっており、モータＭＴＲなどのアクチュエータを制御する電子制御装置ＥＣＵにマイクロコントローラＭＣＲが搭載されている例としている。
【０１９９】
自動車ＣＡＲには、図２０に示すように、電子制御装置ＥＣＵ、モータＭＴＲ、インバータＩＮＶ、およびバッテリＢＡＴが搭載されている。電子制御装置ＥＣＵには、インバータＩＮＶが接続されている。
【０２００】
インバータＩＮＶは、モータＭＴＲ，およびバッテリＢＡＴがそれぞれ接続されている。インバータＩＮＶは、電子制御装置ＥＣＵから出力される制御信号に基づいて、バッテリＢＡＴから供給された電源電圧から、モータＭＴＲを駆動する電源電圧を生成する。モータＭＴＲは、インバータＩＮＶによって生成された電源電圧に基づいて動作する。
【０２０１】
電子制御装置ＥＣＵは、安全装置ＳＦＹ、マイクロコントローラＭＣＲ、およびドライバＤＲＶを有する。マイクロコントローラＭＣＲから出力される制御信号は、ドライバＤＲＶによって増幅される。ドライバＤＲＶは、入力された制御信号に基づいて、インバータＩＮＶを駆動させる。
【０２０２】
また、安全装置ＳＦＹには、図１に示す信号ＳＧ４５０が入力されるように接続されている。安全装置ＳＦＹは、マイクロコントローラＭＣＲの２重アクセス制御回路ＡＣＣが中央演算処理装置ＣＰＵの異常を検出した際に出力される信号ＳＧ４５０を受け取ると、安全機能が動作する。
【０２０３】
安全装置ＳＦＹにおける安全機能の設計はシステムに依存するが、例えば自動車ＣＡＲのダッシュボードに故障を示すアラームを表示することなどが考えられる。あるいは、マイクロコントローラＭＣＲによるモータＭＴＲの制御を停止するという方法が考えられる。
【０２０４】
さらには、マイクロコントローラＭＣＲを２重化して同一の処理を実行させることにより、ドライバＤＲＶに出力する制御信号を切り替えられるように、電子制御装置ＥＣＵを構成するなども考えられる。
【０２０５】
以上により、システムの安全性を担保しながら、マイクロコントローラＭＣＲの低コスト化、低消費電力化、および小型化を実現することができる。
【０２０６】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【０２０７】
なお、本発明は上記した実施の形態に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施の形態は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。
【０２０８】
また、ある実施の形態の構成の一部を他の実施の形態の構成に置き換えることが可能であり、また、ある実施の形態の構成に他の実施の形態の構成を加えることも可能である。また、各実施の形態の構成の一部について、他の構成の追加、削除、置換をすることが可能である。
【符号の説明】
【０２０９】
ＭＣＲ  マイクロコントローラ
ＣＰＵ  中央演算処理装置
ＣＰＵａ  中央演算処理装置
ＭＥＹ  メモリ
ＡＣＣ  ２重アクセス制御回路
ＰＥＲ１〜ＰＥＲｎ  周辺回路
ＳＢＳ  システムバス
ＰＢＳ  周辺バス
ＰＢＡ  周辺バスアクセス部
ＤＳＬ  データ選択部
ＢＦＦ  バッファ
ＢＲＧ  バッファ登録部
ＢＲＦ  バッファ参照部
ＣＭＰ  比較部
ＰＩＴ  ポインタ
ＰＩＴａ  ポインタ
ＤＷＲ  直接書き込み部
ＡＲＮ  ポインタ自動更新部
ＲＥＧ１〜ＲＥＧｎ  レジスタ
ＰＩＮ１  入力端子
ＰＯＴｎ  出力端子
ＢＡＣ  バッファアクセス部
ＣＡＲ  自動車
ＭＴＲ  モータ
ＥＣＵ  電子制御装置
ＩＮＶ  インバータ
ＢＡＴ  バッテリ
ＳＦＹ  安全装置
ＤＲＶ  ドライバ
【図１】
2015035121.tif 000003
【図２】
2015035121.tif 000004
【図３】
2015035121.tif 000005
【図４】
2015035121.tif 000006
【図５】
2015035121.tif 000007
【図６】
2015035121.tif 000008
【図７】
2015035121.tif 000009
【図８】
2015035121.tif 000010
【図９】
2015035121.tif 000011
【図１０】
2015035121.tif 000012
【図１１】
2015035121.tif 000013
【図１２】
2015035121.tif 000014
【図１３】
2015035121.tif 000015
【図１４】
2015035121.tif 000016
【図１５】
2015035121.tif 000017
【図１６】
2015035121.tif 000018
【図１７】
2015035121.tif 000019
【図１８】
2015035121.tif 000020
【図１９】
2015035121.tif 000021
【図２０】
2015035121.tif 000022