(57)【要約】【課題】マイクロコントローラの故障検出において同一故障発生の問題がある。【解決手段】マイクロコントローラはＣＰＵとデータアクセス制御回路とを有する。データアクセス制御回路はＣＰＵのデータアクセスをスレッドごとに実行する個別アクセスと、ＣＰＵのデータアクセスを２つのスレッドを実行することにより実行する共有アクセスの２種類のアクセスを実行するする。このデータアクセス制御回路は、２つのスレッドが実行されることにより生成される共有アクセスにおけるコマンド及びアドレスのそれぞれを比較することによりＣＰＵの故障検出を行う。【選択図】図１４
2014063258.tif 000002
【特許請求の範囲】
【請求項１】
ＣＰＵと、
前記ＣＰＵと接続されて前記ＣＰＵが処理する命令を記憶する命令メモリと、
前記ＣＰＵが処理するデータを記憶するデータメモリと、
周辺回路レジスタを内蔵し、前記ＣＰＵの前記周辺回路レジスタに対する書き込みにより所定の処理を行い、処理結果を前記周辺回路レジスタに記憶し、前記ＣＰＵが前記周辺回路レジスタのデータの読み出しを行うことができる周辺回路と、
前記ＣＰＵと前記データメモリおよび前記周辺回路の間に接続されて、前記ＣＰＵから前記データメモリまたは前記周辺回路レジスタへのアクセス制御を行うデータアクセス制御回路を有し、
前記命令メモリには２つのスレッドを記憶するようにされ、
前記２つのスレッドを前記ＣＰＵが実行することにより２重化処理を行い、
第一アドレスが前記データメモリ及び前記周辺回路レジスタの格納領域を示し、
前記データアクセス制御回路は、前記２つのスレッドの実行処理のそれぞれにより、前記ＣＰＵから前記データメモリまたは前記周辺回路レジスタに対する個別アクセスを発生させ、
前記データアクセス制御回路は、前記ＣＰＵから前記データメモリまたは前記周辺回路レジスタに対する、前記２つのスレッドの実行処理に基づいた共有アクセスを発生させ、
前記データアクセス制御回路が、前記個別アクセスと前記共有アクセスの２種類のアクセスを、前記２つのスレッドの実行処理のそれぞれに基づいて前記ＣＰＵから出力された前記第一アドレスで判定し、前記２つのスレッドの実行処理の結果に基づいた前記共有アクセスにおけるコマンド及び前記第一アドレスのそれぞれの間を比較することによって、前記ＣＰＵの故障検出を行うような前記２重化処理が実施されるマイクロコントローラ。
【請求項２】
請求項１に記載のマイクロコントローラにおいて、
前記共有アクセスは、第一リードアクセスと、前記第一リードアクセスよりも後に実行される第二リードアクセスと、第一ライトアクセスと、前記第一ライトアクセスよりも後に実行される第二ライトアクセスとがあり、
前記第一リードアクセスでは、前記データメモリ又は前記周辺回路レジスタにアクセスすることで読み出された第一リードデータを前記ＣＰＵが読み込み、
前記第二リードアクセスでは、前記第一リードアクセスによって読み出された第一リードデータを前記ＣＰＵが読み込み、
前記第一ライトアクセスでは、前記データアクセス制御回路に前記第一ライトアクセスによる第一ライトコマンド、第一ライトアドレス及び第一ライトデータを格納し、
前記第二ライトアクセスでは、前記第二ライトアクセスによる第二ライトコマンド、第二ライトアドレス及び第二ライトデータのそれぞれと、前記第一ライトアクセスによる前記第一ライトコマンド、前記第一ライトアドレス及び前記第一ライトデータのそれぞれとを比較し、一致した場合は前記データメモリまたは前記周辺回路レジスタへライトアクセスを行う。
【請求項３】
請求項２に記載のマイクロコントローラにおいて、
前記データアクセス制御回路は、前記２つのスレッドの実行に基づく前記共有アクセスのうち先に実行されたスレッドにより発生した前記共有アクセスの前記コマンドと前記第一アドレスを登録する共有アクセスバッファと、
前記第一リードアクセスが発生した場合に前記第一リードデータを登録する共有リードデータバッファと、
前記第一ライトアクセスが発生した場合に前記第一ライトデータを登録する共有ライトデータバッファと、
前記共有アクセスバッファにコマンドとアドレスが登録されていない場合には未登録状態を登録し、登録されている場合にはアクセスを前記共有アクセスバッファに実行したスレッド番号を示す共有アクセス状態フラグを登録する共有アクセス状態フラグ格納部を有し、
前記共有アクセスが発生した場合、前記未登録状態を示すときには先に実行されたアクセスである前記第一リードアクセス、又は前記第一ライトアクセスと判断して前記共有アクセスバッファ、前記共有アクセス状態フラグ、前記共有リードデータバッファまたは前記共有ライトデータバッファの登録を行い、
前記共有アクセスが発生した場合、前記共有アクセス状態フラグ格納部に前記共有アクセス状態フラグが登録されており、前記共有アクセス状態フラグが示すスレッド番号と前記共有アクセスのスレッド番号が異なるときには後に実行されたアクセスである前記第二リードアクセス、または前記第二ライトアクセスと判断して、前記後に実行されたアクセスのコマンド及びアドレスを前記共有アクセスバッファに登録された前記コマンドと前記第一アドレスと比較し、前記後に実行されたアクセスが前記第二リードアクセスである場合は前記共有リードデータバッファからのデータを前記ＣＰＵに読み込ませ、前記後に実行されたアクセスが前記第二ライトアクセスである場合はさらに前記第二ライトアクセスのライトデータを前記共有ライトデータバッファに登録された前記第一ライトデータと比較してコマンド、アドレス、ライトデータの全てが一致したら前記データメモリまたは前記周辺回路レジスタへのライトアクセスを実行し、前記第二リードアクセスまたは前記第二ライトアクセスの処理が完了したら前記共有アクセスバッファ、前記共有リードデータバッファまたは前記共有ライトデータバッファを開放し、前記共有リードデータバッファまたは前記共有ライトデータバッファのエントリが全て無くなったら前記共有アクセス状態フラグを未登録状態にし、
前記共有アクセスが発生した場合、前記共有アクセス状態フラグ格納部に前記共有アクセス状態フラグが登録されており、前記共有アクセス状態フラグが示すスレッド番号と前記共有アクセスのスレッド番号が同じときには、前記共有アクセスの後に発生した共有アクセスであると判断し、前記共有アクセスバッファ，前記共有リードデータバッファまたは前記共有ライトデータバッファに格納可能領域がある場合には登録を行い、ない場合には前記共有アクセスバッファが一杯であることを示す共有アクセスバッファフル信号をＣＰＵに出力する。
【請求項４】
請求項３記載のマイクロコントローラにおいて、
前記ＣＰＵがシングルコアＣＰＵの場合、前記共有アクセスバッファフル信号が出力されると、前記ＣＰＵは前記共有データアクセスをキャンセルする。
【請求項５】
請求項３記載のマイクロコントローラにおいて、
前記ＣＰＵがマルチコアＣＰＵの場合，前記共有アクセスバッファフル信号が出力されると、前記ＣＰＵは前記共有アクセスをストールして、前記データアクセス制御回路は他方のコアのデータアクセスを優先して実行する。
【請求項６】
請求項３記載のマイクロコントローラにおいて、
前記ＣＰＵがハードウェアマルチスレッド機能を持つＣＰＵの場合，前記共有アクセスバッファフル信号が出力されると、前記ＣＰＵは前記共有データアクセスをスキップして他のスレッドのデータアクセスを優先して実行し、スキップしたスレッドの実行順番になったときに前記アクセスバッファフル信号が出力されていなければデータアクセスを実行し、出力されていればデータアクセスをスキップする。
【請求項７】
請求項１記載のマイクロコントローラにおいて、
前記データメモリと前記周辺回路レジスタは、任意の物理アドレスに対して２つの論理アドレスを持ち、前記個別アクセスと前記共有アクセスのいずれの方法でもアクセスすることができる。
【請求項８】
請求項１記載のマイクロコントローラにおいて、
前記データメモリと前記周辺回路レジスタは，任意の物理アドレスに対して少なくとも３つの論理アドレスを持ち、少なくとも１つの論理アドレスによる前記個別アクセスと、少なくとも２つの論理アドレスによる前記共有アクセスのいずれの方法でもアクセスすることができ、
前記共有アクセスを行う２つの論理アドレスは、アドレスフィールドの一部が論理反転している。
【請求項９】
請求項８記載のマイクロコントローラにおいて、
前記共有アクセスを行う２つの論理アドレスのデータは論理反転している。
【請求項１０】
請求項３記載のマイクロコントローラにおいて、
前記共有アクセスのうち後のライトアクセスが実行されると、前記共有アクセスバッファ、共有ライトデータバッファのデータと後のアクセスによるアクセスデータを記憶し、前記ＣＰＵから読み出しが可能なレジスタを有する。
【請求項１１】
請求項１０記載のマイクロコントローラにおいて、
前記共有アクセスのうち後のライトアクセスが実行された場合に前記データメモリまたは前記周辺回路レジスタへのライトアクセスを実行するかしないかを設定できる。
【請求項１２】
請求項３記載のマイクロコントローラにおいて、
前記共有アクセスバッファが登録状態の場合には，前記ＣＰＵが前記共有アクセスを実行する命令を含む割り込み要求を受け付けない。
【請求項１３】
請求項３記載のマイクロコントローラにおいて、
前記ＣＰＵによる読み出しと書き込みが可能で，前記共有アクセスバッファへの登録が行われると値を１加算するカウンタを有する。
【請求項１４】
２つのスレッドを実行処理するＣＰＵと、
前記ＣＰＵが処理するデータを記憶するデータメモリと、
レジスタを内蔵し，前記レジスタのデータにより制御される周辺回路と、
前記ＣＰＵと前記データメモリおよび前記周辺回路の間に接続されて、前記ＣＰＵから前記データメモリまたは前記レジスタへのアクセス制御を行うデータアクセス制御回路を有し、
第一アドレスが前記データメモリ及び前記レジスタの格納領域を示し、
前記データアクセス制御回路は、前記２つのスレッドの実行処理のそれぞれにより、前記ＣＰＵから前記データメモリまたは前記レジスタに対する個別アクセスを発生させ、
前記データアクセス制御回路は、前記ＣＰＵから前記データメモリまたは前記レジスタに対する、前記２つのスレッドの実行処理に基づいた共有アクセスを発生させ、
前記データアクセス制御回路が、前記２つのスレッドの実行処理の結果に基づいた前記共有アクセスにおけるコマンド及び前記第一アドレスのそれぞれの間を比較することによって、前記ＣＰＵの故障検出を行う半導体集積回路装置。
【請求項１５】
請求項１４において、前記データアクセス制御回路が、前記個別アクセスと前記共有アクセスの２種類のアクセスを、前記２つのスレッドの実行処理のそれぞれに基づいて前記ＣＰＵから出力された前記第一アドレスで判定する半導体集積回路装置。
【請求項１６】
請求項１５において、前記２つのスレッドのうちの一方が実行処理されることにより発生する前記データメモリに対する前記個別アクセスを行うことが可能なアドレス空間と、前記２つのスレッドのうちの他方が実行処理されることにより発生する前記データメモリに対する前記個別アクセスを行うことが可能なアドレス空間とは分離されている半導体集積回路装置。
【請求項１７】
ＣＰＵと、
データアクセス制御回路と、
データ格納部と、を有し、
前記ＣＰＵは故障検出のために２つのスレッドを逐次的に実行するようにされ、
前記データアクセス制御回路は前記ＣＰＵの前記データ格納部に対するデータアクセスを制御し、
前記データ格納部は前記２つのスレッド個々に対応する個別アクセス領域と前記２つのスレッド共通の共通アクセス領域とを有する半導体集積回路装置。
【請求項１８】
前記データアクセス制御回路は、前記ＣＰＵから前記データ格納部の前記個別アクセス領域に対するスレッドの実行処理に基づいた個別アクセスと前記共通アクセス領域に対する前記２つのスレッドの実行処理に基づいた共有アクセスとを発生させる請求項１７の半導体集積回路装置。
【請求項１９】
前記データアクセス制御回路は、前記２つのスレッドの実行処理の結果に基づいた前記共有アクセスにおけるコマンド及びアドレスのそれぞれの間を比較する請求項１８の半導体集積回路装置。
【請求項２０】
前記データアクセス制御回路は、前記２つのスレッドの実行処理の結果に基づいた前記共有アクセスにおけるコマンド、アドレス及びライトデータのそれぞれの間を比較する請求項１８の半導体集積回路装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体集積回路装置に関し、制御用計算機であるマイクロコントローラの故障検出に適用可能な技術に関する。
【背景技術】
【０００２】
マイクロコントローラは、家電製品、ＡＶ機器、携帯電話、自動車、産業機械等の機器に組み込まれ、内蔵メモリに記憶されているプログラムにしたがって処理を行うことで、それぞれの機器の制御を行う装置であり、通常は半導体集積回路として構成されている。
【０００３】
自動車等の一部の機器では、制御装置の故障が事故につながる可能性があるため，マイクロコントローラを含む部品に高い信頼性が求められるとともに、故障が発生した場合にはこれを検出して機器が危険な状態にならないように安全機能を働かせるように設計されている。マイクロコントローラはセンサやアクチュエータの診断を行ってこれらの故障を検出するだけでなく、マイクロコントローラ自身の故障も検出する必要がある。
【０００４】
マイクロコントローラの故障検出には様々な方法があるが、同一の機能を有する機能ブロック（例えば中央演算装置（中央処理装置、中央演算処理装置ともいう。）であるＣＰＵ、以下、中央演算装置をＣＰＵと表記する。）を２重化して持ち、各機能ブロックの出力信号を比較することにより機能ブロックの故障を検出する方法がしばしば用いられている。この検出方法を２重化処理という。この方法が有効なのは、２重化した機能ブロックの故障が独立に発生し、同時には同じ故障が発生しないという前提においてである。両方の機能ブロックが同時に同じ故障を発生した場合には、誤った出力同士が一致してしまうために故障を検出することができない。
【０００５】
特開平８−１７１５８１号公報（特許文献１）には、上記同一故障の発生を防ぐために、２重化した機能ブロックの設計データ、動作タイミング、チップ上の配置を多様化する方法が示されている。
【０００６】
また、１つ又は２つのＣＰＵを用いて２つのスレッドで２重化処理する方法が示されているものには、特許第４５３１０６０号公報（特許文献２）および特開２０１１−４４０７８号公報（特許文献３）がある。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平８−１７１５８１号公報
【特許文献２】特許第４５３１０６０号
【特許文献３】特開２０１１−４４０７８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
特許文献１に示される機能ブロックを２重化して出力信号を比較する方法は、機能ブロックと比較回路を追加する必要があるため、機能ブロックの回路面積が２倍以上になり、チップコストと消費電力が増加するという問題があり、マイクロコントローラ等の半導体集積回路装置には適さない。特許文献２に示されるＣＰＵにおける２つのスレッドでの２重化処理では、全く同一のプログラムが実行されるため、同一故障が発生する可能性がある。特許文献３に示される２つのスレッドでの２重化処理では、異なるコンパイル処理が元のプログラムになされているために、２つのスレッド間によりプログラム自体が少し異なる形となる。よってこのプログラムが少し異なる２つのスレッド間での２重化処理を実施した場合は以下のような形になると考える。演算処理結果をＣＰＵの外部装置に出力するような処理を、２つのスレッドにて比較する場合、故障が無い場合は比較処理でエラーが出ることは無いと考えられる。しかしながら、データを演算処理する際の途中経過を内部メモリに格納するような処理を、２つのスレッド間で比較する場合、故障が無かったとしても比較処理でエラーが出る場合もあると考える。理由として、異なるコンパイル処理がなされたプログラムにおいては、最終的な外部装置に対する出力結果は同じであると考えられるが、途中における演算処理は必ずしも同じと考えられないからである。よって異なるコンパイルがなされたプログラムに基づいて、２つのスレッドでの２重化処理を実施しても単純に故障検出ができない。
【０００９】
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１０】
一実施の形態による半導体集積回路装置は、ＣＰＵのデータアクセスをスレッドごとに実行する個別アクセスと，ＣＰＵのデータアクセスを２つのスレッドを実行することにより実行する共有アクセスの２種類のアクセスを実行する。
【発明の効果】
【００１１】
上記一実施の形態によれば、ＣＰＵによる２つのスレッドの実行に基づいた同一故障の発生を低減することができる。
【図面の簡単な説明】
【００１２】
【図１】実施の形態の実施例に係るＣＰＵがデータアクセスをスレッドごとに実行する個別アクセスの動作を示す図である。
【図２】実施の形態の実施例に係るＣＰＵがデータアクセスを２つのスレッドの処理結果に基づいて実行する共有アクセスの動作を示す図である。
【図３】実施の形態の実施例に係るマイクロコントーラのデータアクセスの動作フローチャートである。
【図４】実施の形態の変形例１に係るマイクロコントローラのブロック図である。
【図５】実施の形態の変形例２に係るマイクロコントローラのブロック図である。
【図６】実施の形態の実施例に係るマイクロコントローラのデータアクセスタイミングチャートである。
【図７】実施の形態の変形例１及び変形例２に係るマイクロコントローラのデータアクセスタイミングチャートである。
【図８】実施の形態の実施例、変形例１及び変形例２に係るマイクロコントーラのデータアクセス制御回路のブロック図である。
【図９】実施の形態の実施例、変形例１及び変形例２に係るマイクロコントローラにおけるデータアクセス制御回路の動作フローチャートである。
【図１０】実施の形態の変形例３に係るデータメモリ及び周辺回路レジスタの論理アドレスと物理アドレスの関係を示す図である。
【図１１】実施の形態の変形例４に係るデータメモリ及び周辺回路レジスタの論理アドレスと物理アドレスの関係を示す図である。
【図１２】実施の形態の変形例４に係るデータアクセス制御回路のブロック図である。
【図１３】実施の形態の変形例５に係るデータアクセス制御回路のブロック図である。
【図１４】実施の形態に係る半導体集積回路装置のブロックである。
【図１５】実施の形態の実施例に係るマイクロコントローラのブロック図である。
【図１６】実施の形態の実施例に係るマイクロコントローラを用いたシステムのブロック図である。
【図１７】実施の形態の実施例に係るデータメモリと周辺回路レジスタのアドレスマップを示す図である。
【図１８】実施の形態の変形例３に係るデータアクセス制御回路のブロック図である。
【発明を実施するための形態】
【００１３】
図１４は実施の形態に係る半導体集積回路装置のブロック図である。半導体集積回路装置１００はＣＰＵ１０１とデータアクセス制御回路１０５とデータ格納部１０６とを有する。ＣＰＵ１０１は故障検出のためにスレッドと呼ばれる処理単位を２つ逐次的に実行する。データアクセス制御回路１０５はＣＰＵ１０１のデータ格納部１０６に対するデータアクセスを制御する回路である。ここで、データ格納部１０６には２つのスレッド個々に対応する格納領域（個別アクセス領域１０３）と２つのスレッド共通の格納領域（共通アクセス領域１０４）を有する。
【００１４】
データアクセス制御回路１０５は、ＣＰＵ１０１からデータ格納部１０６の個別アクセス領域１０３に対するスレッドの実行処理に基づいた個別アクセスと共通アクセス領域１０４に対するスレッドの実行処理に基づいた共有アクセスを発生させる。これにより、２つのスレッドで異なる実行処理を行うことが可能となり、同一故障の発生を低減することができる。
【００１５】
更に、データアクセス制御回路１０５は、２つのスレッドの実行処理の結果に基づいた共有アクセスにおけるコマンド及びアドレスのそれぞれの間を比較する。ここで、コマンドにはリードアクセスとライトアクセスが含まれる。データアクセス制御回路１０５において２つのスレッドの実行処理の結果に基づいた共有アクセスにおけるコマンド及びアドレスのそれぞれの間を比較することにより、ＣＰＵ１０１の故障検出を行うことが可能となる。更にＣＰＵ１０１はスレッドの実行に基づいた共有アクセスに伴うアクセスデータの比較処理が不要になり、半導体集積回路装置の高速動作が可能となる。
【実施例】
【００１６】
以下、図面を参照しながら、実施例について詳細に説明する。
【００１７】
以下の実施例においては便宜上その必要があるときは、複数のセクションに分割して説明するが、特に明示した場合を除き、それらはお互いに無関係なものではなく、一方は他方の一部または全部の変形例、応用例、詳細説明、補足説明等の関係にある。また、以下の実施例において、要素の数等（個数、数値、量、範囲等を含む）に言及する場合、特に明示した場合および原理的に明らかに特定の数に限定される場合等を除き、その特定の数に限定されるものではなく、特定の数以上でも以下でもよい。
【００１８】
さらに、以下の実施例において、その構成要素（動作、タイミングチャート、要素ステップ、動作ステップ等も含む）は、特に明示した場合および原理的に明らかに必須であると考えられる場合等を除き、必ずしも必須のものではない。同様に、以下の実施の形態において、構成要素等の形状、位置関係等に言及するときは、特に明示した場合および原理的に明らかにそうでないと考えられる場合等を除き、実質的にその形状等に近似または類似するもの等を含むものとする。このことは、上記数等（個数、数値、量、範囲等を含む）についても同様である。
【００１９】
なお、実施例を説明するための全図において、同一の機能を有する部位や部材には同一または関連する符号を付し、その繰り返しの説明は省略する。また、以下の実施例では、特に必要なとき以外は同一または同様な部分の説明を原則として繰り返さない。
【００２０】
１．構成
図１５は実施の形態の実施例に係るマイクロコントローラのブロック図である。実施例に係るマイクロコントローラではシングルコアＣＰＵが２つのスレッドのソフトウェアを実行することで２重化処理する。図１は実施例に係るＣＰＵがデータアクセスをスレッドごとに実行する個別アクセスの動作を示している図である。図２は実施例に係るＣＰＵがデータアクセスを２つのスレッドの処理結果に基づいて実行される共有アクセスの動作を示す図である。
【００２１】
マイクロコントローラ１００Ａは一つの半導体基板上に形成された半導体集積回路装置である。マイクロコントローラ１００Ａは、ＱＦＰ（Quad Flat Package）型パッケージやＢＧＡ（Ball Grid Array）型パッケージに樹脂封止されている。マイクロコントローラ１００ＡはＣＰＵ１と命令メモリ２とデータメモリ３と周辺回路４Ａ，４Ｂとデータアクセス制御回路５とを有する。ＣＰＵ１は命令メモリ２と命令用バスＩＢＵＳで接続されている。ＣＰＵ１はデータアクセス制御回路５とデータ用バスＤＢＵＳ１で接続されている。データアクセス制御回路５はデータメモリ３及び周辺回路４Ａ，４Ｂとデータ用バスＤＢＵＳ２で接続されている。ＣＰＵ１はシングルスレッドＣＰＵであり、スレッドと呼ばれる処理単位を逐次的に実行する。命令メモリ２はＣＰＵ１が処理する命令を記憶する。命令メモリ２は、第１スレッドと第２スレッドを記憶している。命令メモリ２は、ＣＰＵ１によって実行され、第１スレッドＴＨ１や第２スレッドＴＨ２を含む複数のスレッドを有するプログラムを格納している。データ格納部の個別アクセス領域であるデータメモリ３はＣＰＵ１が処理するデータを記憶する。周辺回路４Ａ，４Ｂはデータ格納部の共通アクセス領域である。周辺回路４Ａは、例えばアナログ信号をディジタル信号に変換してレジスタに記憶する機能を持つＡ／Ｄ変換器（アナログ・ディジタル変換器）である。周辺回路４Ｂは、例えばＣＰＵ１がレジスタに書き込んで設定した周期と幅を持つパルスを出力するタイマ（例えばモータ制御信号生成回路）である。データアクセス制御回路５はＣＰＵ１のデータアクセスを制御する回路である。
【００２２】
データメモリ３のデータ格納領域、並びに周辺回路４Ａ及び周辺回路４Ｂのレジスタのデータ格納領域を、ＣＰＵ１から見たアドレスである論理アドレスとしての第一アドレスが示す形となっている。データアクセス制御回路５は、第１スレッドＴＨ１と第２スレッドＴＨ２の実行処理のそれぞれにより、ＣＰＵ１からデータメモリ３に対する個別アクセスを発生させる。更にデータアクセス制御回路５は、ＣＰＵ１から周辺回路４Ａ及び周辺回路４Ｂのレジスタに対する、第１スレッド及び第２スレッド両方の実行処理に基づいた共有アクセスを発生させる。データアクセス制御回路５は、第１スレッド及び第２スレッドの実行処理の結果に基づいた共有アクセスにおけるコマンド及び第一アドレスのそれぞれの間を比較することによって、ＣＰＵ１の故障検出を行う。
【００２３】
個別アクセスに関しては、周辺回路４Ａ及び周辺回路４Ｂのレジスタに対して発生してもよく、共有アクセスはデータメモリ３に対して発生してもよい。このデータアクセス制御回路５により、ＣＰＵ１の故障検出を行うことが可能となる。更にＣＰＵ１は第１スレッドＴＨ１及び第２スレッドＴＨ２の実行に基づいた共有アクセスに伴うアクセスデータの比較処理が不要になり、マイクロコントローラの高速動作が可能となる。また、第１スレッドＴＨ１及び第２スレッドＴＨ２の実行に基づいた共有アクセスに伴うアクセスデータの比較処理のプログラムが不要になり、命令メモリ２の空き領域を確保することが可能となる。
【００２４】
２．動作
図１及び図２を用いて、引き続き詳細説明を行う。図１６は、実施例のマイクロコントローラを用いたシステムを示すブロック図である。システムＳＹＳは、マイクロコントローラ１００ＡによってモータＭＴを制御するモータ制御装置である。モータＭＴはモータとそれを駆動する回路を含む。システムＳＹＳにおいて、ＣＰＵ１によって実行されるプログラムであるソフトウェアとして次のような例を考える。
（１）マイクロコントローラ１００Ａの外部に接続されているセンサＳＥからのアナログ信号を周辺回路４Ａでディジタル信号に変換する。
（２）ＣＰＵ１がディジタル信号を読み出して演算処理を実行する。
（３）この演算結果に基づいて周辺回路４Ｂにパルス周期と幅を設定してパルス出力を変化させ、マイクロコントローラ１００Ａの外部に接続されているモータＭＴの回転速度を制御する。
【００２５】
上記（１）から（３）のプログラムを第１スレッドＴＨ１と第２スレッドＴＨ２で２重化処理するが、演算処理はスレッドごとにデータメモリ３を使って実行できる。マイクロコントローラ１００ＡのＣＰＵ１が第１スレッドＴＨ１と第２スレッドＴＨ２を用いて動作するために、ＣＰＵ１が第１スレッドＴＨ１を処理することにより実行される第一機能と、ＣＰＵ１が第２スレッドＴＨ２を処理することにより実行される第二機能により２重化処理が実施されている。ＣＰＵ１は同時には１つのスレッドしか処理できないため、どちらかを先に実行し、処理が終了したらスレッドを切り替える。データアクセス制御回路５はスレッドが処理されるごとに実行される個別アクセスＩＡと、２つのスレッドが処理されると実行される共有アクセスＣＡの２種類のアクセスをアドレスで判定して自動的に処理する。データメモリ３はスレッドごとの個別アクセスの対象であり、周辺回路４Ａ，４Ｂのレジスタはスレッド共通の共有アクセスの対象である。
【００２６】
図１に示すように、第１スレッドＴＨ１や第２スレッドＴＨ２の実行処理のそれぞれにより、ＣＰＵ１からデータメモリ３に対する個別アクセスが発生される。第１スレッドＴＨ１が実行されることにより発生する個別アクセスの結果、データメモリ３に処理結果として第１データＲ１が格納される。第２スレッドＴＨ２が実行されることにより発生する個別アクセスの結果、データメモリ３に処理結果として第２データＲ２が格納される。
図２に示すように、ＣＰＵ１から周辺回路４Ａ、４Ｂのレジスタに対する、第１スレッドＴＨ１及び第２スレッドＴＨ２両方の実行処理に基づいた共有アクセスが発生される。ＣＰＵ１が第１スレッドＴＨ１及び第２スレッドＴＨ２を実行することにより、周辺回路４ＡのレジスタＲ４Ａに記憶されているＡ／Ｄ変換結果を読み込み、周辺回路４ＢのレジスタＲ４Ｂにパルス周期と幅を書き込む。以下に４つの場合に分けてより詳しく説明する。
【００２７】
（１）先に実行されたスレッドが、周辺回路４ＡのレジスタＲ４Ａのリードアクセスを示すものであるならば、データアクセス制御回路５は周辺回路４ＡのレジスタＲ４Ａをアクセスし、リードデータをＣＰＵ１に読み込ませる。
【００２８】
（２）後に実行されたスレッドが、周辺回路４ＡのレジスタＲ４Ａのリードアクセスを示すものであるならば、データアクセス制御回路５は周辺回路４ＡのレジスタＲ４Ａにアクセスせずに、以下の処理を行う。先に実行されたリードアクセスのコマンド及びアドレスと、後に実行されたリードアクセスのコマンド及びアドレスとを比較し、一致した場合に、先に実行されたリードアクセスにより読み出されたリードデータをＣＰＵ１に読み込ませる。
【００２９】
（３）先に実行されたスレッドが、周辺回路４ＢのレジスタＲ４Ｂのライトアクセスを示すものであるならば、データアクセス制御回路５は周辺回路４ＢのレジスタＲ４Ｂをアクセスせずに処理を完了させる。
【００３０】
（４）後に実行されたスレッドが、周辺回路４ＢのレジスタＲ４Ｂのライトアクセスを示すものであるならば、先に実行されたライトアクセスのコマンド、アドレス及びライトデータと、後に実行されたライトアクセスのコマンド、アドレス及びライトデータとをそれぞれ比較し、一致した場合に周辺回路４ＢのレジスタＲ４Ｂをライトアクセスする。
【００３１】
図３は実施例に係るマイクロコントローラのデータアクセスの動作フローチャートである。同図中のＤＡＣはデータアクセス制御回路（Data Access Controller）の略号である。同図を用いてより詳しい動作を以下説明する。
【００３２】
ＣＰＵ１がデータアクセスを開始すると、ステップＳ１０１に示すように、データアクセス制御回路５がデータアクセスのためのアドレスによりアクセス種別を判定する。ステップＳ１０２に示すように、ステップＳ１０１において個別アクセスと判定された場合には、データアクセス制御回路５はそのままアクセスを実行する。ステップＳ１０３に示すように、ステップＳ１０１において共有アクセスと判定された場合には、データアクセス制御回路５はコマンドがリードアクセスかライトアクセスか、アクセスが先に実行されたスレッドによるものか後に実行されたスレッドによるものかにより次の４つに分かれた処理を行う。
【００３３】
（１）リード／先に実行されたスレッド
ステップＳ１０４に示すように、ステップＳ１０３においてコマンドがリードアクセスであって、先に実行したスレッドによるアクセスと判定された場合、データアクセス制御回路５は共有メモリ（周辺回路４Ａ，４Ｂのレジスタなど、共有アクセスの対象となる領域（共有アクセス領域）を指す）にアクセスを行う。次にステップＳ１０５に示すように、ＤＡＣにコマンド、アドレス及びリードデータを格納する。最後にステップＳ１０６に示すように、データアクセス制御回路５はＣＰＵ１にリードデータを出力して読み込みを行わせる。
【００３４】
（２）リード／後に実行されたスレッド
ステップＳ１０７に示すように、ステップＳ１０３においてコマンドがリードアクセスであって、後に実行したスレッドによるアクセスと判定された場合、データアクセス制御回路５はアクセスのためのコマンド及びアドレスをＤＡＣに格納している値と比較する。ステップＳ１０８に示すように、ステップＳ１０７にて比較結果が一致した場合は、データアクセス制御回路５はＣＰＵ１にＤＡＣに格納しているリードデータを出力して読み込みを行わせる。ステップＳ１０９に示すように、ステップＳ１０７にて比較結果が不一致となった場合には、データアクセス制御回路５はＣＰＵ１にエラー信号を出力する。
【００３５】
（３）ライト／先に実行されたスレッド
ステップＳ１１０に示すように、ステップＳ１０３においてコマンドがライトアクセスであって、先に実行したスレッドによるアクセスと判定された場合、データアクセス制御回路５はＤＡＣにコマンド、アドレス及びライトデータを格納する。
【００３６】
（４）ライト／後に実行されたスレッド
ステップＳ１１１に示すように、ステップＳ１０３においてコマンドがライトアクセスで、後に実行したスレッドによるアクセスと判定された場合、データ制御回路５はアクセスのためのコマンド、アドレス及びライトデータをＤＡＣに格納している値と比較する。ステップＳ１１２に示すように、ステップＳ１１１にて比較結果が一致した場合は、データアクセス制御回路５は共有メモリにアクセスを行い、ライトデータを書き込ませる。ステップＳ１１３に示すように、ステップＳ１１１にて比較結果が不一致となった場合は、データアクセス制御回路５はＣＰＵ１にエラー信号を出力する。
【００３７】
以上の実施例をまとめると次のとおりである。
（１）データアクセス制御回路５は、ＣＰＵ１のデータアクセスをスレッドごとに実行する個別アクセスと、ＣＰＵ１のデータアクセスを２つのスレッドを実行することにより実行する共有アクセスの２種類のアクセスを実行する。これにより、演算処理はスレッドごとにデータメモリ３を使って実行することができる。また、２つのスレッドで異なる実行処理を行うことが可能となる。更に、同一故障の発生を低減することができる。
【００３８】
（２）データアクセス制御回路５は、ＣＰＵ１のデータアクセスをスレッドが処理されるごとに実行する個別アクセスと、２つのスレッドの処理に基づいて実行される共有アクセスの２種類のアクセスをＣＰＵ１からのアドレスで判定する。これにより、個別アクセスと共有アクセスとが自動的に処理することができる。
【００３９】
（３）データアクセス制御回路５は、２つのスレッドが実行されることにより生成される共有アクセスにおけるコマンド及びアドレスのそれぞれを比較する。これにより、ＣＰＵ１の故障検出を行うことが可能となる。更にＣＰＵ１は２つのスレッドの実行に基づいた共有アクセスに伴うアクセスデータのソフトウェアを用いた比較処理が不要になる。
【００４０】
（４）データアクセス制御回路５が、２つのスレッドの処理に基づいて１回実行する共有アクセスにおけるコマンド、アドレス、ライトデータを比較する。これにより、ＣＰＵ１は共有メモリへの書き込みを行う前にアクセスデータを比較する処理が不要になる。
【００４１】
（５）共有アクセスのうちリードアクセスにおいて、データアクセス制御回路５は、先に実行されたスレッドで共有メモリをアクセスしてリードデータをＣＰＵ１に読み込ませ、後に実行されたスレッドで先に実行されたスレッドに基づいたリードデータをＣＰＵ１に読み込ませる。これにより、２つのスレッドが実行されたときに発生するリードアクセスにおいては共通のリードデータをＣＰＵ１に読み込ませることができる。
【００４２】
（６）共有アクセスのうちのライトアクセスにおいて、データアクセス制御回路５は、２つのスレッドのコマンド、アドレスおよびライトデータと比較して、一致した場合にライトアクセスを実行する。これにより、２つのスレッドが実行されたときに発生するライトアクセスにおいては比較処理があることにより正しいライトアクセスが行える。
【００４３】
（７）上記（１）、（２）及び（３）を組み合せることにより、リードアクセスの故障を検出することができる。さらに、上記（５）を組み合せることにより正しいリードアクセスが行える。
【００４４】
（８）上記（１）、（２）及び（４）を組み合せることにより、ライトアクセスの故障を検出することができる。さらに、上記（６）を組み合せることにより正しいライトアクセスが行える。
【００４５】
（変形例１）
図４は実施の形態の変形例１に係るマイクロコントローラのブロック図である。変形例１に係るマイクロコントローラではデュアルコアＣＰＵがそれぞれスレッドを実行することで２重化処理する。マイクロコントローラ１００Ｂは、図１５の実施例に係るマイクロコントローラ１００Ａと比較して、ＣＰＵ１の代わりにＣＰＵ１Ｂを用いている。ＣＰＵ１Ｂには、ＣＰＵ１ＢＡ，１ＢＢと命令メモリ２の間にアービタ６が配置され、ＣＰＵ１ＢＡ，１ＢＢとデータアクセス制御回路５の間にアービタ７が配置されている。それ以外は実施例のマイクロコントローラ１００Ａと同じであり、重複する説明は省略する。ＣＰＵ１ＢＡ，１ＢＢはそれぞれＣＰＵ１と基本的には同じものである。
【００４６】
第１スレッドＴＨ１と第２スレッドＴＨ２はそれぞれＣＰＵ１ＢＡとＣＰＵ１ＢＢで並列に処理される。命令メモリ２とデータアクセス制御回路５はＣＰＵ１ＢＡ，１ＢＢで共通で使用されるため，アービタ６とアービタ７でそれぞれアクセスの優先判定を行い、逐次的に処理される。すなわち、ＣＰＵ１ＢＡとＣＰＵ１ＢＢとは命令メモリから同一サイクルで命令をフェッチすることができず、ＣＰＵ１ＢＡとＣＰＵ１ＢＢとは同一サイクルでデータをリード又はライトすることはできない。これにより、ＣＰＵ１ＢＡとＣＰＵ１ＢＢとは少なくとも１サイクルずれてスレッドを実行するため、同一故障の発生を低減することができる。
【００４７】
変形例１に係るマイクロコントローラ１００Ｂは、システムＳＹＳに適用することができる。
【００４８】
（変形例２）
図５は実施の形態の変形例２に係るマイクロコントローラのブロック図である。変形例２に係るマイクロコントローラではハードウェアマルチスレッド機能を持つシングルコアＣＰＵが２つのスレッドを実行することで２重化処理するマイクロコントローラ１００Ｃは、図１５の実施例に係るマイクロコントローラ１００Ａと比較して、ＣＰＵ１の代わりにＣＰＵ１Ｃを用いている。それ以外は実施例のマイクロコントローラ１００Ａと同じであり、重複する説明は省略する。
【００４９】
ＣＰＵ１Ｃはハードウェアマルチスレッド機能を持つシングルコアＣＰＵで、ＣＰＵ１Ｃが第１スレッドと第２スレッドを並列実行可能になっている。ここで、ハードウェアマルチスレッドとは、ＣＰＵの中のハードウェアによって複数のスレッドが少なくとも１サイクルごとに切り替わって並列に実行されるものである。なお、実施例、変形例１、特許文献２及び特許文献３のマルチスレッドは、ハードウェアマルチスレッドと区別するためにソフトウェアマルチスレッドともいう。ハードウェアマルチスレッドＣＰＵの例としては、特開２０１０−８６１２８号公報がある。
【００５０】
第１スレッドと第２スレッドはそれぞれＣＰＵ１Ｃでクロックサイクル単位に切り替えて処理される。これにより、ＣＰＵ１Ｃは少なくとも１サイクルずれて２つのスレッドを実行するため、同一故障の発生を低減することができる。
【００５１】
変形例２に係るマイクロコントローラ１００Ｃは、システムＳＹＳに適用することができる。
【００５２】
３．データアクセスタイミング
図６は実施の形態の実施例に係るマイクロコントローラのデータアクセスタイミングチャートである。第１スレッドは１回目の個別アクセス領域へのリードアクセス（ＩＲ１と略する。）、２回目の個別アクセス領域へのリードアクセス（ＩＲ２と略する。）、１回目の個別アクセス領域へのライトアクセス（ＩＷ１と略する。）、１回目の共有アクセス領域へのリードアクセス（ＣＲ１と略する。）及び１回目の共有アクセス領域へのライトアクセス（ＣＷ１と略する。）の５つのデータアクセスを実行するものとする。また、第２スレッドはＩＲ１、ＩＷ１、ＣＲ１及びＣＷ１の４つのデータアクセスを実行するものとする。ＣＰＵ１は第１スレッドの実行により５回のデータアクセスを行った後、第２スレッドの実行に切り替えられる。その後、ＣＰＵ１は第２スレッドの実行により４回のデータアクセスを行う。データアクセス制御回路５は、第２スレッドのＣＷ１の結果と第１スレッドのＣＷ１の結果とを比較した後、ライトデータを共有領域に送る。第１スレッドと第２スレッドは複数の処理ごとに切り替わって実行されるため、同一故障の発生を低減することができる。
【００５３】
上記のように、２重化処理されるソフトウェアとしてのスレッドは同一であるとは限らず、必要に応じて演算アルゴリズムを変えるなど多様化することができる。ＣＰＵ１の内部レジスタを入力および出力とする演算命令と個別アクセスを行うデータアクセス命令は多様化することができるが、共有アクセスを行うデータアクセス命令は多様化せず、２つのスレッドで同一となるようにする。つまり、共有アクセスは２つのスレッドでそれぞれ同じ順番に、同じ内容で実行されることにより、容易に比較することが可能になる。第１スレッドのＣＲ１で読み出されたリードデータは第２スレッドのＣＲ１でＣＰＵ１に読み込まれる。第１スレッドのＣＷ１で出力されたライトデータは第２スレッドのＣＷ１とアドレスと共に比較され、一致が確認された後ライトアクセスが実行される。よって、二重化されるソフトウェアである第１スレッドと第２スレッドは異なるものにすることができる。個別リードや個別ライトは第１スレッドと第２スレッドとで違えることができる。但し、共有リードや共有ライトは第１スレッドと第２スレッドとで順番も含めて同じである必要がある。更に周辺回路４Ａ及び周辺回路４Ｂのレジスタに対する出力が同じである必要がある。
【００５４】
このような第１スレッドと第２スレッドを作成する方法は特に制限されないが、１つの元のプログラムに対して異なるコンパイル（第１コンパイルと第２コンパイル）を行うことで作成してもよい。元のプログラムに対して第１コンパイルがなされたものが第１スレッドとなり、元のプログラムに対して第２コンパイルがなされたものが第２スレッドとなる。他の方法として、コーディング自体を第１スレッドと第２スレッドとの間で変更してもよい。このように個別アクセスにおいては、第１スレッドと第２スレッドとの間で異なることもある。そのために個別アクセスの結果を比較すると、故障が発生していなくても比較結果が不一致となり、エラーが発生することになる。共有アクセスにおいては同一の結果が出力される形となっているので、故障が発生しない限り比較結果が不一致とならないので、共有アクセスにおける結果同士を第１スレッドと第２スレッドとの間にて比較することで、故障検出が可能となる。尚、個別アクセスと共有アクセスのように分類せずに、全てのデータアクセスについて２つのスレッド間にてその処理結果を比較するようにした場合は、第１スレッドと第２スレッドを同一のプログラムとする必要が出てくる。このようにした場合は、プログラム自体に問題があった時等に発生する同一故障の発生を避けることが難しくなる。
【００５５】
図６では、共有アクセスがリードとライトで１回ずつの例を示したが、これに限定されるものではない。
【００５６】
図７は実施の形態の変形例１及び変形例２に係るマイクロコントローラのデータアクセスタイミングチャートである。第１スレッドと第２スレッドのデータアクセスの内容は図６のシングルコアＣＰＵの場合と同じであるが、第１スレッドと第２スレッドがＣＰＵ１ＢまたはＣＰＵ１Ｃでそれぞれ並列処理されるために交互に行われる。図６では第１スレッドのＣＲ１及びＣＷ１はそれじれ第２スレッドのＣＲ１及びＣＷ１より早く実行されるが、第２スレッドは第１スレッドに比してＩＲ２がないことによって、図７では第２スレッドのＣＲ１及びＣＷ１はそれぞれ第１スレッドのＣＲ１及びＣＷ１より早く実行される。
【００５７】
図７では、共有アクセスがリードとライトで１回ずつの例を示したが、これに限定されるものではない。
【００５８】
４．データアクセス制御回路
図８は実施の形態の実施例、変形例１及び変形例２に係るマイクロコントローラのデータアクセス制御回路のブロック図である。同図（ａ）はデータアクセス制御回路全体のブロック図で、同図（ｂ）は共有アクセス状態フラグ格納部のブロック図である。データアクセス制御回路５は、ＣＰＵ（ＣＰＵ１，１Ｂ，１Ｃの総称）とメモリ（データメモリ３および周辺回路４Ａ，４Ｂの総称）に対するインタフェースを有する。ＣＰＵからデータアクセスのコマンド、アドレス、ライトデータ（ライトアクセスのときだけ有効）及びスレッド番号をそれぞれ信号線５０１，５０２，５０３，５０４に入力し、メモリへデータアクセスのコマンド、アドレス及びライトデータをそれぞれ信号線５０５，５０６，５０７に出力する。アクセスが完了するとメモリからレディ信号が信号線５０８に出力され、ＣＰＵはデータアクセスを完了する。レディ信号は、ＣＰＵが出力するコマンド、アドレス、ライトデータ及びスレッド番号を入力するためにも使用する。よって、ＣＰＵからコマンド、アドレス、ライトデータ及びスレッド番号が入力される準備ができたことを示すために、レディ信号がメモリから信号線５０８に出力される。リードアクセスの場合は、メモリから読み出されたリードデータをＣＰＵに出力する。尚、ＣＰＵの制御レジスタにスレッド番号を記憶するフィールドを持ち、スレッド開始時にスレッド番号を設定するようにすればよい。実施例１のシングルコアＣＰＵの場合は、スレッド切り替え時に数命令実行するとスレッド番号が出力される。変形例１のデュアルコアＣＰＵと変形例２のハードウェアマルチスレッド機能を持つＣＰＵは、それぞれコアごとあるいはスレッドごとに制御レジスタを持ち、この各制御レジスタがスレッド番号を記憶するフィールドを持つ形となる。
【００５９】
データアクセス制御回路５は、共有アクセスバッファ５０と共有リードデータバッファ５１と共有ライトデータバッファ５２と共有アクセス状態フラグ格納部５３とアクセス制御部５４と比較器５５とリードデータ選択部５６と出力部５７とを有する。
【００６０】
共有アクセスバッファ５０は２つのスレッドからの共有アクセスのうち先に実行されたアクセスのコマンドとアドレスを登録する。後述するが、実施例のＣＰＵ１を用いる場合、すなわち最初に共有アクセスバッファ５０に登録したスレッドからの共有アクセスが連続して実行される場合は、共有アクセスバッファ５０は複数エントリ分必要である。変形例１のＣＰＵ１Ａ，１Ｂ及び変形例２のＣＰＵ１Ｃを用いる場合は、共有アクセスバッファ５０は少なくとも１エントリ分は必要である。ここで、１エントリとは、１回アクセスがあった場合に入力されたコマンド及びアドレスである。
【００６１】
共有リードデータバッファ５１は、先に実行された共有アクセスがリードアクセスの場合に、メモリから信号線５０９に読み出されたリードデータを登録する。共有リードデータバッファ５１のエントリ可能数は共有アクセスバッファ５０と同じである。
【００６２】
共有ライトデータバッファ５２は、先に実行された共有アクセスがライトアクセスの場合に、ＣＰＵが信号線５０３に出力するライトデータを登録する。共有ライトデータバッファ５２のエントリ可能数は共有アクセスバッファ５０と同じである。
【００６３】
共有アクセス状態フラグ格納部５３には、図８（ｂ）に示すようにバッファ状態フラグ５３１及びスレッド番号フラグ５３２がある。共有アクセス状態フラグとスレッド番号フラグを併せて共有アクセス状態フラグ５３０という。共有アクセスバッファ５０が空の場合にはバッファ状態フラグ５３１が未登録状態を示す。共有アクセスバッファ５０が空でない場合にはバッファ状態フラグ５３２は登録状態を示し、スレッド番号フラグ５３２はそのアクセスを実行したスレッド番号を示す。
【００６４】
アクセス制御部５４は、ＣＰＵが出力するコマンド、アドレス及びスレッド番号と、共有アクセス状態フラグ５３０とにより、個別アクセス及び共有アクセスを実行制御する。アクセス制御部５４はＣＰＵが出力するアドレスが個別アクセスを示す場合には、コマンド、アドレス及びライトデータをそのまま出力部５７からそれぞれ信号線５０５，５０６，５０７を経由してメモリに出力する。ＣＰＵが信号線５０２に出力するアドレスが共有アクセスを示す場合には、アクセス制御部５４は共有アクセス状態フラグ５３０をチェックし、未登録状態を示すときには先に実行するアクセスであると判断して共有アクセスバッファ５０にコマンドとアドレスを登録し、共有アクセス状態フラグ格納部５３のスレッド番号フラグ５３２に信号線５０４上のスレッド番号を登録する。共有アクセス状態フラグ５３０の内容によって次のように３つに分かれた動作を行う。
【００６５】
（１）共有アクセス状態フラグ５３０が未登録状態を示す場合
リードアクセスのときにはコマンドとアドレスを出力部５７から信号線５０６，５０７を経由してメモリに出力し、メモリから信号線５０９にリードデータを読み出す。読み出されたリードデータをリードデータ選択部５６、及び信号線５１０を経由してＣＰＵに出力するとともに、共有リードデータバッファ５１に登録する。ライトアクセスの場合には出力部５７から信号線５０５にＮＯＰ（Ｎｏ ＯＰｅｒａｔｉｏｎ，何もしない）コマンドを出力し、ＣＰＵが信号線５０３に出力するライトデータを共有ライトデータバッファ５２に登録する。
【００６６】
（２）共有アクセス状態フラグ５３０が登録状態を示し、共有アクセスのスレッド番号と異なる場合
この場合は、後に実行するスレッドのアクセスであると判断し以下のような３つの動作を行う。
【００６７】
（い）ＣＰＵが信号線５０１，５０２に出力するコマンド及びアドレスと、共有アクセスバッファ５０から信号線５１１，５１２に出力されるコマンド及びアドレスとを比較器５５で比較する。
【００６８】
（ろ）リードアクセスかライトアクセスかによって次のように動作する。
（ａ）共有アクセスがリードアクセスのとき
出力部５７からＮＯＰコマンドをメモリに信号線５０５を経由して出力し、共有リードデータバッファ５１をリードデータ選択部５６で選択し、信号線５１０を経由してＣＰＵに出力する。
（ｂ）共有アクセスがライトアクセスのとき
ＣＰＵが信号線５０３に出力するライトデータと、共有ライトデータバッファ５２から信号線５１３に出力されるライトデータとを比較器５５で比較する。これら比較の際に比較器５５で不一致を検出するとエラー信号をＣＰＵに信号線５１４を経由して出力し、ＮＯＰコマンドをメモリに信号線５０５を経由して出力する。これら比較の際に比較器５５が一致を検出するとコマンド、アドレス及びライトデータを出力部５７からそれぞれ信号線５０５，５０７，５０８を経由してメモリに出力する。
【００６９】
（は）後に実行するスレッドの共有アクセスが完了すると、共有アクセスバッファ５０、共有リードデータバッファ５１及び共有ライトデータバッファ５２を比較したエントリに関しては消去し空き状態にし、共有アクセスバッファ５０のエントリが全て無くなったら共有アクセス状態フラグ５３０を未登録状態にする。
【００７０】
（３）共有アクセス状態フラグ５３０が登録状態を示し、共有アクセスのスレッド番号と同じ場合
この場合は、次の共有アクセスのうち先に実行するスレッドのアクセスであると判断し以下のような２つの動作を行う。
【００７１】
（い）共有アクセスバッファ５０のエントリに次の空きがある場合には登録を行い、空きが無い場合には共有アクセスバッファ５０が一杯であることを示す共有アクセスバッファフル信号をＣＰＵに信号線５１５を経由して出力する。尚共有アクセスバッファ５０に複数のエントリが可能な場合は、カウンタを使ってバッファに登録されている数を管理するようにすればよい。
【００７２】
（ろ）共有アクセスバッファ５０が一杯になった場合、ＣＰＵはその型によって次のような最適な対応をとることができる。
（ａ）実施例のシングルコアＣＰＵ（ＣＰＵ１）
ＣＰＵ１は共有アクセスをキャンセルすることによってデッドロック（不正な動作状態からＣＰＵが抜け出せなくなる）を回避できる。
（ｂ）変形例１のデュアルコアＣＰＵ（ＣＰＵ１Ｂ）
ＣＰＵ１Ｂは共有アクセスをストールして、データアクセス用アービタがもう一方のＣＰＵコアのデータアクセスを優先して実行させることにより、後に実行される共有アクセスが実行されると共有アクセスバッファ５０に空きが生じ、共有アクセスのストールを解除できる。
（ｃ）変形例２のハードウェアマルチスレッド機能を持つＣＰＵ（ＣＰＵ１Ｃ）
ＣＰＵ１Ｃは共有アクセスをスキップして他のスレッドのデータアクセスを優先して実行させることにより、後に実行される共有アクセスが実行されると共有アクセスバッファ５０に空きが生じ、共有アクセスのスキップを解除できる。
【００７３】
なお、データアクセス制御回路５には、個別アクセス領域と共有アクセス領域のアドレス範囲を変更することができるように、図示していない制御レジスタが内蔵されている。例えば、マイクロコントローラの初期化シーケンスにおいて、上記制御レジスタに書き込むことにより、個別アクセス領域と共有アクセス領域を設定することができる。
【００７４】
図９は実施の形態の実施例、変形例１及び変形例２に係るマイクロコントローラのデータアクセス制御回路の動作フローチャートである。
【００７５】
ＣＰＵがデータアクセスを開始すると、ステップＳ２０１に示すように、データアクセスにて指定されるアドレスによりアクセス制御部５４がアクセス種別を判定する。ステップＳ２０２に示すように、ステップＳ２０１にて個別アクセスと判定された場合にはアクセス制御部５４が出力部５７を制御してそのままアクセスを実行する。ステップＳ２０３に示すように、ステップＳ２０１にて共有アクセスと判定された場合にはアクセス制御部５４はコマンドがリードアクセスかライトアクセスか、共有アクセス状態フラグ５３０の状態（登録／未登録、スレッド番号）により４つに分ける処理を行う。
【００７６】
（１）リード／先に実行されたスレッド
コマンドがリードアクセスであって、次の２つのいずれかの場合は、アクセス制御部５４はこのリードアクセスを先に実行したスレッドのアクセスと判定する（ステップＳ２０３）。
（ａ）共有アクセス状態フラグ５３０が未登録を示す。
（ｂ）共有アクセス状態フラグ５３０が登録を示し、かつ今回の共有アクセスにおけるスレッド番号と共有アクセス状態フラグ５３０が示すスレッド番号が同一スレッド番号である。
【００７７】
この場合は、ステップＳ２０４に示すように、アクセス制御部５４は共有アクセスバッファ５０の空きを確認する。なお、図９のステップ２０４では共有アクセスバッファ５０をバッファと表示している（ステップＳ２０９及びステップＳ２１２でも同じ。）。共有アクセスバッファ５０の空きに関しては以下のように確認する。例えば４エントリあるとすると、登録するエントリを指す登録ポインタ、比較のために読み出すエントリを指す読み出しポインタを持ち、それぞれ０を初期値として、登録（読み出し）のたびに０→１→２→３→０→…と値を更新する。最初の状態は、登録ポインタ＝読み出しポインタ＝０でバッファ状態フラグは未登録となる。登録が行われると登録ポインタ＝１となり、登録ポインタ≠読み出しポインタなのでバッファ状態フラグは登録となる。読み出しが行われると読み出しポインタ＝１となり、登録ポインタ＝読み出しポインタなのでバッファ状態フラグは未登録となる。この後、登録が３回行われると登録ポインタ＝０、読み出しポインタ＝１となる。更にあと１回登録が行われると登録ポインタ＝１、読み出しポインタ＝１となりバッファの空きが無くなる。バッファが登録状態にある時に、登録ポインタ＝読み出しポインタとなったら空きが無いと判断できる。
【００７８】
ステップＳ２０５に示すように、ステップＳ２０４にて共有アクセスバッファ５０に空きが無いと判断された場合には、アクセス制御部５４はＣＰＵに共有アクセスバッファフル信号を出力する。図９のステップＳ２０５では共有アクセスバッファフル信号をバッファフル信号と表示している（ステップＳ２１３でも同じ。）。ステップＳ２０６に示すように、ステップＳ２０４にて共有アクセスバッファ５０に空きがあると判断された場合には、アクセス制御部５４が出力部５７を制御して共有メモリにアクセスを行う。ステップＳ２０６の後、ステップＳ２０７に示すように、アクセス制御部５４は共有アクセスバッファ５０にコマンド及びアドレスを格納し、共有リードデータバッファ５１にリードデータを格納する。図９のステップＳ２０７では共有アクセスバッファ５０と共有リードデータバッファ５１を併せてＢ５０＆５１と表示している。ステップＳ２０８に示すように、アクセス制御部５４がリードデータ選択部５６を制御して、ＣＰＵにリードデータを出力して読み込みを行わせる。
【００７９】
（２）リード／後に実行されたスレッド
コマンドがリードアクセスであって、次の２つのいずれにも該当する場合は、アクセス制御部５４はこのリードアクセスを後に実行したスレッドのアクセスと判定する（ステップＳ２０３）。
（ａ）共有アクセス状態フラグ５３０が登録状態を示す。
（ｂ）今回の共有アクセスにおけるスレッド番号と共有アクセス状態フラグ５３０が示すスレッド番号が異なるスレッド番号である。
【００８０】
この場合は、ステップＳ２０９に示すように、比較器５５は、今回の共有アクセスにおけるコマンド及びアドレスと、共有アクセスバッファ５０に格納している値とをそれぞれ比較する。ステップＳ２１０に示すように、ステップＳ２０９の比較処理にて一致すると判断された場合は、アクセス制御部５４はリードデータ選択部５６を制御して、ＣＰＵに共有リードデータバッファ５１に格納しているリードデータを出力して読み込みを行わせる。図９のステップＳ２１０では共有リードデータバッファ５１をＢ５１と表示している。ステップＳ２１１に示すように、ステップＳ２０９の比較処理にて不一致であると判断された場合は、比較器５５はＣＰＵにエラー信号を出力する。
【００８１】
（３）ライト／先に実行されたスレッド
コマンドがライトアクセスであって、次の２つのいずれかの場合は、アクセス制御部５４はこのライトアクセスを先に実行したスレッドのアクセスと判定する（ステップＳ２０３）。
（ａ）共有アクセス状態フラグ５３０が未登録状態を示す。
（ｂ）共有アクセス状態フラグ５３０が登録状態を示し、かつ今回の共有アクセスにおけるスレッド番号と共有アクセス状態フラグ５３０が示すスレッド番号が同一スレッド番号である。
【００８２】
この場合は、ステップＳ２１２に示すように、アクセス制御部５４は共有アクセスバッファ５０の空きを確認する。ステップＳ２１３に示すように、ステップＳ２１２にて共有アクセスバッファ５０に空きが無いと判断された場合には、アクセス制御部５４はＣＰＵに共有アクセスバッファフル信号を出力する。ステップＳ２１４に示すように、ステップＳ２１２にて共有アクセスバッファ５０に空きが有ると判断された場合には、アクセス制御部５４は、共有アクセスバッファ５０にコマンド及びアドレスを格納し、共有ライトデータバッファ５２にライトデータを格納する。図９のステップＳ２１４では共有アクセスバッファ５０と共有ライトデータバッファ５２を併せてＢ５０＆５２と表示している（ステップＳ２１５でも同じ。）。
【００８３】
（４）ライト／後に実行されたスレッド
コマンドがライトアクセスであって、次の２つのいずれにも該当する場合は、アクセス制御部５４はこのライトアクセスを後に実行したスレッドのアクセスと判定する（ステップＳ２０３）。
（ａ）共有アクセス状態フラグ５３０が登録状態を示す。
（ｂ）今回の共有アクセスにおけるスレッド番号と共有アクセス状態フラグ５３０が示すスレッド番号とが異なるスレッド番号である。
【００８４】
この場合は、ステップＳ２１５に示すように、比較器５５は今回の共有アクセスにおけるコマンド、アドレス及びライトデータと、共有アクセスバッファ５０のコマンド及びアドレス並びに共有ライトデータバッファ５２のライトデータとをそれぞれ比較する。ステップＳ２１６にて、ステップＳ２１５の比較結果が一致すると判定された場合は、アクセス制御部５４は、出力部５７を制御して共有メモリにアクセスを行い、ライトデータを共有メモリに書き込ませる。ステップＳ２１７にて、ステップＳ２１５の比較結果が不一致であると判定された場合は、比較器５５がＣＰＵにエラー信号を出力する。
【００８５】
以上の実施例のデータアクセス制御回路をまとめると次のとおりである。
（１）データアクセス制御回路５は、２つのスレッドからの共有アクセスのうち先に実行されたアクセスのコマンド、アドレスを登録する共有アクセスバッファ５０と、リードデータを登録する共有リードデータバッファ５１と、ライトデータを登録する共有ライトデータバッファ５２とを有する。更に共有アクセスバッファ５０の登録状態およびそのアクセスを実行したスレッド番号を示す共有アクセス状態フラグ５３０を格納する共有アクセス状態フラグ格納部５３を有する。すなわち、共有アクセスバッファ５０と共有リードデータバッファ５１と共有ライトデータバッファ５２と共有アクセス状態フラグ格納部５３とを有することにより、共有アクセスが先に行われたものか後に行われたものかを判断でき、後に実行される共有アクセスのコマンド、アドレス及びアクセスデータを比較できる。
【００８６】
（２）先に実行された共有アクセスのコマンド、アドレス、リードデータ及びライトデータを登録する共有アクセスバッファ５０と、共有リードデータバッファ５１と、共有ライトデータバッファ５２とが一杯になり、共有アクセス状態フラグ５３０が示すスレッド番号と同じスレッドの共有アクセスが発生した場合、以下のような処理を行うことにより、デッドロックを回避することができる。
（い）実施例に係るシングルコアＣＰＵ（ＣＰＵ１）のマイクロコントローラ１００Ａにおいては、そのデータアクセスをキャンセルする。
（ろ）変形例１に係るマルチコアＣＰＵ（ＣＰＵ１Ｂ）のマイクロコントローラ１００Ｂにおいては、共有アクセスバッファ５０、共有リードデータバッファ５１と、及び共有ライトデータバッファ５２に空きができるまでそのデータアクセスをストールして他方のＣＰＵコアのデータアクセスを優先して実行させる。
（は）変形例２に係るハードウェアマルチスレッド機能を持つＣＰＵ（ＣＰＵ１Ｃ）のマイクロコントローラ１００Ｃにおいては、共有アクセスバッファ５０、共有リードデータバッファ５と、及び共有ライトデータバッファ５２に空きができるまでそのデータアクセスをスキップして他のスレッドのデータアクセスを優先して実行させる。
【００８７】
図１７は実施の形態の実施例に係るデータメモリと周辺回路レジスタのアドレスマップを示す図である。前述したようにデータメモリ３が個別アクセスのみの対象であり、周辺回路４Ａ，４Ｂのレジスタが共有アクセスのみの対象である。データメモリ３にはデータメモリ０番地、データメモリ１番地、データメモリ２番地及びデータメモリ３番地の４つの領域がある例を、周辺回路４Ａ，４Ｂには周辺回路Ａレジスタ、周辺回路Ｂレジスタ、周辺回路Ｃレジスタ及び周辺回路Ｄレジスタの４つのレジスタがある例を示している。例えば、以下のようにアドレスを割り当てる。個別アクセスを行うアドレス領域（個別アクセス領域）をＢ１０００００〜Ｂ１０００１１とし、共有アクセスを行うアドレス領域（共通アクセス領域）をＢ１００１００〜Ｂ１００１１１とする。ここで、ＢはＢｉｎａｒｙの略で、続く数値が２進数であることを意味する。また、説明を簡単にするために、アドレスを２進の６ビットとするが、実際は３２ビット、４８ビット、６４ビットなどの広いアドレス空間となる。各アドレスに格納されるデータの幅は、８ビット（１バイト）である。例えば、データメモリ０番地には８ビット長のデータが格納される。
【００８８】
更に第１スレッドＴＨ１を実行することにより個別アクセスを行うためのデータメモリ３のアドレス領域のＢ１０００００〜Ｂ１００００１と、第２スレッドＴＨ２を実行することにより個別アクセスを行うためのデータメモリ３のアドレス領域のＢ１００１０〜Ｂ１０００１１とを分離する。この場合は、共有アクセスにて書き込まれたデータが個別アクセスにて上書きされることは無くなり、個別アクセスにて書き込まれたデータが共有アクセスにて上書きされることは無くなるために、プログラムの開発が簡単となる。しかし、個別アクセスや共有アクセスに使用できるメモリ領域が少なくなる。
【００８９】
（変形例３）
図１８は実施の形態の変形例３に係るデータアクセス制御回路のブロック図である。データアクセス制御回路５Ａは、図８の実施例に係るデータアクセス制御回路５に対して、ＣＰＵから入力される論理アドレスを物理アドレスに変換する変換回路５８及び信号線５１６が追加されている。それに伴ってアクセス制御部５４がアクセス制御部５４Ａに変更になっている。それ以外は図８のデータアクセス制御回路５と同じであるので重複する説明は省略する。
【００９０】
図１０は実施の形態の変形例３に係るデータメモリと周辺回路レジスタの論理アドレスと物理アドレスの関係を示す図である。変形例３では、データメモリ３及び周辺回路４Ａ、４Ｂのレジスタは個別アクセスの対象でありかつ共有アクセスの対象である。実施例のように、データメモリ３が個別アクセスのみの対象であり、周辺回路４Ａ，４Ｂのレジスタが共有アクセスのみの対象であるのではない。したがって、実施例のように個別アクセスや共有アクセスに使用できるメモリ領域が少なくなるという問題はなくなる。データメモリ３にはデータメモリ０番地、データメモリ１番地、データメモリ２番地及びデータメモリ３番地の４つの領域がある例を、周辺回路４Ａ，４Ｂには周辺回路Ａレジスタ、周辺回路Ｂレジスタ、周辺回路Ｃレジスタ及び周辺回路Ｄレジスタの４つのレジスタがある例を示している。論理アドレスとはＣＰＵから見たアドレスである。個別アクセスを行うアドレス領域をＢ１０００００〜Ｂ１００１１１とし、共有アクセスを行うアドレス領域をＢ１１００００〜Ｂ１１０１１１とする。物理アドレスとはデータメモリ３と周辺回路４Ａ，４Ｂのレジスタから見たアドレスである。アドレス領域をＢ１００００〜Ｂ１００１１１とする例である。
【００９１】
ＣＰＵが出力するアドレスがＢ１０００００〜Ｂ１００１１１の場合には個別アクセスを実行し、Ｂ１１００００〜１１０１１１の場合には共有アクセスを実行する。アドレスの上位３ビットが“１００“ならば個別アクセス、“１１０”ならば共有アクセスと容易に判断できる。個別アクセスを行うアドレス領域のＢ１０００００〜Ｂ１０００１１はデータメモリ３のアドレス領域に対応し、個別アクセスを行うアドレス領域のＢ１００１００〜Ｂ１００１１１は周辺回路４Ａ、４Ｂのレジスタのアドレス領域に対応する。共有アクセスを行うアドレス領域のＢ１１００００〜Ｂ１１００１１はデータメモリ３のアドレス領域に対応し、共有アクセスを行うアドレス領域のＢ１１０１００〜Ｂ１１０１１１は周辺回路４Ａ、４Ｂのレジスタのアドレス領域に対応する。
【００９２】
更に、第１スレッドＴＨ１を実行することにより個別アクセスを行うためのデータメモリ３のアドレス領域のＢ１０００００〜Ｂ１００００１と、第２スレッドＴＨ２を実行することにより個別アクセスを行うためのデータメモリ３のアドレス領域のＢ１００１０〜Ｂ１０００１１とは分離されている。このような分離を行うことにより、異なるスレッドが実行されることにより書き込まれたデータが消失することを防ぐことができる（第１スレッドＴＨ１の実行の後に第２スレッドＴＨ２が実行されて、第１スレッドＴＨ１の実行により書き込まれたデータが消失するような事態）。
【００９３】
個別アクセスであっても周辺回路４Ａ、４Ｂのレジスタのアドレス領域に対するものは、異なるスレッド間にて分離されていない。これは各レジスタが周辺回路４Ａ，４Ｂの制御用となっているために、分離を行うと、個別のスレッドの実行ごとに制御できない周辺回路４Ａ，４Ｂが存在するという不具合がでるからである。しかしながら、個別アクセスであっても周辺回路４Ａ、４Ｂのレジスタのアドレス領域に対するものは、異なるスレッド間にて分離されていないため、以下の問題がある。第１スレッドＴＨ１の実行結果に基づいて周辺回路４Ａ、４Ｂのレジスタに書き込まれたデータが、第２スレッドＴＨ２の実行結果に基づいて周辺回路４Ａ、４Ｂのレジスタに上書きされる事態が発生する。よってこのような問題を避けるために、周辺回路４Ａ、４Ｂのレジスタのアドレス領域に対する個別アクセスを禁止してもよい。周辺回路４Ａ、４Ｂのレジスタの個別アクセスのための論理アドレス空間をそもそも設けない形とすれば、個別アクセスを禁止することが可能となる。
【００９４】
個別アクセスを行うためのデータメモリ３のアドレス領域は第１スレッドＴＨ１用と第２スレッドＴＨ２用とで分離されている一方、共有アクセスを行うためのアドレス領域は第１スレッドＴＨ１と第２スレッドＴＨ２とで分離されていない。これは共有アクセスのライトでは、第１スレッドＴＨ１が実行されるときに発生するコマンド、アドレス及びライトデータと、第２スレッドＴＨ２が実行されるときに発生するコマンド、アドレス及びライトデータとがそれぞれ比較されて、一致した場合にライトデータが更新されるためである。このために異なるスレッドが実行されることにより書き込まれたデータが消失するという自体がそもそも発生しないからである。
【００９５】
データアクセス制御回路５Ａがデータアクセス制御回路５と異なる動作について以下説明する。アクセス制御部５４Ａはコマンド及びアドレスに従って信号線５１６に次のような制御信号を出力する。論理アドレスの上位３ビットが“１００”の場合には、信号線５１６からの制御信号によって変換回路５８はアドレスをそのまま出力する。アドレスの上位ビットが“１１０”の場合には、信号線５１６からの制御信号によって変換回路５８はアドレスの上位３ビットを“１００”に差し替えて出力する。上記以外のアクセス制御回路５４Ａの動作はアクセス制御回路５４と同じであるので、重複する説明は省略する。なお、変換回路５８は、図１８のように出力部５７の手前ではなく、出力部５７の中に配置してもよい。
【００９６】
変形例３に係るデータアクセス制御回路５Ａは、実施例、変形例１及び変形例２のマイクロコントローラに適用することができる。
【００９７】
以上の変形例３をまとめると、データアクセスの対象は、任意の物理アドレスに対して２つの論理アドレスを持ち、個別アクセスと共有アクセスのいずれの方法でもアクセスできる形態となっている。このことによりメモリの同一物理アドレスに対して、個別アクセスと共有アクセスの両方が可能になる。
【００９８】
（変形例４）
図１２は変形例４に係るデータアクセス制御回路のブロック図である。データアクセス制御回路５Ｂは、図８のデータアクセス制御回路５に対して、変換回路５８Ａ，５８Ｂ、信号線５１６Ａ，５１６Ｂが追加されている。それに伴ってアクセス制御部５４がアクセス制御部５４Ｂに変更になっている。それ以外は図８のデータアクセス制御回路５と同じであるので重複する説明は省略する。
【００９９】
図１１は変形例４に係るデータメモリと周辺回路レジスタの論理アドレスと物理アドレスの関係を示す図である。変形例４でも、データメモリ３及び周辺回路４Ａ、４Ｂのレジスタは個別アクセスの対象でありかつ共有アクセスの対象である。図１０の変形例３に対して、論理アドレスの領域Ｂ１１１０００〜１１１１１１が追加されている。この追加された領域におけるデータメモリ０番地、データメモリ１番地、データメモリ２番地、データメモリ３番地、周辺回路Ａレジスタ、周辺回路Ｂレジスタ、周辺回路Ｃレジスタ及び周辺回路Ｄレジスタは、個別領域Ｂ１０００００〜１００１１１、共有領域Ｂ１１００００〜Ｂ１１０１１１におけるデータメモリおよび周辺回路レジスタと順番が逆になっている。例えば第１スレッドＴＨ１が共有アクセスを行う場合には論理アドレス領域のＢ１１００００〜１１０１１１を使い、第２スレッドＴＨ２が共有アクセスを行う場合には論理アドレス領域のＢ１１１０００〜Ｂ１１１１１１を使うようにする。また、論理アドレス領域Ｂ１１１０００〜Ｂ１１１１１１のデータを負論理とすることもできる。このようにすれば、同じデータメモリあるいは周辺回路レジスタをアクセスする場合に、第１スレッドＴＨ１と第２スレッドＴＨ２でアドレス計算およびデータ計算が異なるため、シングルコアＣＰＵを用いる場合でも演算回路など共通に使用する回路の故障を発見し易くなる。この追加された論理アドレスの共有領域から物理アドレスへの変換およびデータ変換は簡単に行うことができる。更に変形例３と同じように、第１スレッドＴＨ１を実行することによる個別アクセスを行うデータメモリ３のアドレス領域のＢ１０００００〜Ｂ１００００１と、第２スレッドＴＨ２を実行することによる個別アクセスを行うデータメモリ３のアドレス領域のＢ１００１０〜Ｂ１０００１１とはアドレス領域が分離されている。
【０１００】
データアクセス制御回路５Ｂがデータアクセス制御回路５と異なる動作について以下説明する。アクセス制御部５４Ｂはコマンド及びアドレスに従って信号線５１６Ａ，５１６Ｂに制御信号を出力して次のように制御する。
【０１０１】
（１）論理アドレスの上位３ビットが“１００”の場合
ライトアクセスのときは、信号線５１６Ａからの制御信号によって変換回路５８Ａはアドレスとライトデータをそのまま出力する。リードアクセスのときは、信号線５１６Ｂからの制御信号によって変換回路５８Ｂは入力をそのまま出力する。
【０１０２】
（２）アドレスの上位ビットが“１１０”の場合
ライトアクセスのときは、信号線５１６Ａからの制御信号によって変換回路５８Ａはアドレスの上位３ビットを“１００”に差し替え、ライトデータはそのまま出力する。リードアクセスのときは、信号線５１６Ｂからの制御信号によって変換回路５８Ｂは入力をそのまま出力する。
【０１０３】
（３）アドレスの上位ビットが“１１１”の場合
ライトアクセスのときは、信号線５１６Ａからの制御信号によって変換回路５８Ａはアドレスの上位３ビットを“１００”に差し替え、ライトデータは論理反転して出力する。リードアクセスのときは、信号線５１６Ｂの制御によって変換回路５８Ｂは入力を論理反転して出力する。
【０１０４】
上記以外のアクセス制御回路５４Ｂの動作はアクセス制御回路５４と同じであるので、重複する説明は省略する。
【０１０５】
変形例４に係るデータアクセス制御回路５Ｂは、実施例、変形例１及び変形例２のマイクロコントローラに適用することができる。
【０１０６】
以上の変形例４をまとめると次のとおりである。
（１）データアクセスの対象は、任意の物理アドレスに対して少なくとも３つの論理アドレスを持ち、少なくとも１つの論理アドレスによる個別アクセスと、少なくとも２つの論理アドレスによる共有アクセスのいずれの方法でもアクセスでき、共有アクセスを行う２つの論理アドレスは、アドレスフィールドの一部が論理反転しているデータアクセスとなっている。共有メモリを２つの異なる論理アドレスでアクセスできるため、２重化処理するスレッドごとに異なる論理アドレスを使ってアクセスを行うことになり、アドレスの同一故障を排除できるようになる。
【０１０７】
（２）共有アクセスを行う２つの論理アドレスのデータは論理反転している。よって共有メモリを排他関係になる２つのデータでアクセスを行うことになり、データの同一故障を排除できるようになる。
【０１０８】
（変形例５）
図１３は変形例５に係るデータアクセス制御回路のブロック図である。データアクセス制御回路５Ｃは、図１２の変形例４に係るデータアクセス制御回路５Ｂに対して、比較器５５に共有アクセスレジスタ５５０，５５１が追加され、制御レジスタ５９Ａと共有アクセスカウンタ５９Ｂが追加されている。また、共有アクセスレジスタ５５０，５５１および共有アクセスカウンタ５９Ｂをリードデータ選択部５６で選択して、ＣＰＵに読み出せるようになっている。これに伴って、信号線５５２，５５３，５５４，５５５，５５６が追加なり、アクセス制御部５４はアクセス制御部５４Ｃに、リードデータ選択部５６はリードデータ選択部５６Ｃに、信号線５１５が信号線５１５Ｃに変更となっている。これ以外は図１２のデータアクセス制御回路５Ｂと同じであるので重複する説明は省略する。ここで、論理アドレスと物理アドレスの関係は図１１と同じである。
【０１０９】
共有アクセスのうち後のスレッドのアクセスが実行されると、共有アクセスバッファ５０に登録されているコマンド及びアドレス並びに共有ライトデータバッファ５２に登録されているライトデータが信号線５５４の制御信号によって共有アクセスレジスタ５５０に記憶される。また、実行中のアクセスのコマンド、アドレス及びライトデータが信号線５５５の制御信号によって共有アクセスレジスタ５５１に記憶される。共有アクセスレジスタ５５０，５５１はＣＰＵがアドレス指定することにより信号線５５２，５５３及びリードデータ選択部５６Ｃを経由して読み出しを行うことができる。
【０１１０】
制御レジスタ５９Ａは共有アクセスのうち後のスレッドのライトアクセスが実行された場合にデータメモリ３または周辺回路のレジスタ４Ａ，４Ｂへのライトアクセスを実行するかしないかを設定する。実行する設定の場合は、共有アクセスのうち後のスレッドのライトアクセスが実行されると、共有アクセスバッファ５０に格納されたコマンド及びアドレス並びに共有ライトデータバッファ５２に格納されたライトデータと、実行中のアクセスのコマンド、アドレス及びライトデータとをそれぞれ比較器５５Ｃで比較する。比較結果が一致する場合には出力部５７からコマンド、アドレス及びライトデータが出力され、ライトアクセスが実行される。
【０１１１】
アクセス制御部５４ＣからＣＰＵに信号線５１５Ｃを経由して出力される共有アクセスバッファ状態信号は、共有アクセスバッファフル信号と共有アクセスバッファ有効信号とを含む。共有アクセスバッファフル信号は共有アクセスバッファ５０にこれ以上コマンドやアドレスが格納できる領域が無いことを示す信号である。共有アクセスバッファ有効信号は、共有アクセスバッファ５０にコマンドやアドレスが格納されていることを示す信号で、１つでもコマンドやアドレスが格納されている場合は有効を示す。
【０１１２】
ＣＰＵが受ける割り込み要求は、マイクロコントローラの外部端子からの割り込み、Ａ／Ｄ変換終了を示す割り込み、タイマからの割り込み等がある。これら割り込み要求ごとに共有アクセスを含むかどうかを属性として持つ。ＣＰＵは共有アクセスバッファ状態信号の共有アクセスバッファ有効信号を受けて共有アクセス状態フラグ５３０が登録状態であるか否かを認識する。共有アクセス状態フラグ５３０が登録状態であると判断される場合は、ＣＰＵが共有アクセスを含む割り込み要求を受け付けないように制御させる。このようにすることで、割り込み処理ルーチンの中で共有アクセスが発生しても、２つのスレッドで実行される共有アクセスの順番と内容を一致させることができる。図８のデータアクセス制御回路５のアクセス制御部５４、図１８のデータアクセス制御回路５Ａのアクセス制御部５４Ａ及び図１２のデータアクセス制御回路５Ｂのアクセス制御部５４Ｂにおいても、共有アクセスバッファ有効信号を出力するようにしてもよい。
【０１１３】
共有アクセスカウンタ５９ＢはＣＰＵによる読み出しと書き込みが可能で、共有アクセスバッファ５０への登録が行われると値が１加算される。ＣＰＵは信号線５５７及びリードデータ選択部５６Ｃを経由して共有アクセスカウンタ５９Ｂを読み出して、共有アクセスが正しく実行されているかどうかを確認することができる。
【０１１４】
変形例５に係るデータアクセス制御回路５Ｃは、実施例、変形例１及び変形例２のマイクロコントローラに適用することができる。
【０１１５】
以上の変形例５をまとめると次のとおりである。
（１）共有アクセスのうち後のライトアクセスが実行されると、先のアクセスによりバッファ（共有アクセスバッファ５０、共有ライトデータバッファ５２）に登録されたコマンド、アドレス及びライトデータと後のアクセスによるアクセスデータとを記憶し、ＣＰＵから読み出しが可能な共有アクセスレジスタ５５０，５５１を有する。この共有アクセスレジスタ５５０，５５１により２つのスレッドによる共有アクセスデータをＣＰＵが検査できるようになる。
【０１１６】
（２）共有アクセスのうち後のアクセスが実行された場合にライトアクセスを実行するかしないかを制御レジスタ５９ＡにＣＰＵが値を入れることで設定可能となっている。このことで、共有アクセスを自動的に実行する以外に、２つのスレッドによる共有アクセスデータをＣＰＵが検査し、ＣＰＵによる最終的なアクセスを実行できるようになる。
【０１１７】
（３）ＣＰＵが共有アクセス状態フラグ５３０は登録状態であると判断する場合は、ＣＰＵは共有アクセスを含む割り込み要求を受け付けないことが可能となっている。このことで、割り込み処理ルーチンの中で実行される共有アクセスによって共有アクセスバッファ５０に登録されている情報が上書きされ、割り込み処理ルーチンから元のプログラムに戻った時に上書きされた情報により不適切な動作が引き起こされるのを防止することができる。
【０１１８】
（４）ＣＰＵによる読み出しと書き込みが可能で、共有アクセスバッファ５０への登録が行われると値を１加算するカウンタを有する。共有アクセスが正しく実行されているかどうかをＣＰＵが確認できる。
【０１１９】
以上本発明者によってなされた発明を実施形態及び実施例に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、種々変更可能であることは言うまでもない。
【符号の説明】
【０１２０】
１，１Ａ，１Ｂ，１ＢＡ，１ＢＢ，１Ｃ，１０１  ＣＰＵ
２  命令メモリ
３  データメモリ
４Ａ，４Ｂ  周辺回路
５，５Ａ，５Ｂ，５Ｃ，１０５  データアクセス制御回路
６，７  アービタ
５０  共有アクセスバッファ
５１  共有リードデータバッファ
５２  共有ライトデータバッファ
５３  共有アクセス状態フラグ格納部
５４，５４Ａ，５４Ｂ，５４Ｃ  アクセス制御部
５５  比較器
５５０，５５１  共有アクセスレジスタ
５６  リードデータ選択部
５７  出力部
５８，５８Ａ，５８Ｂ  変換回路
５９Ａ  制御レジスタ
５９Ｂ  共有アクセスカウンタ
１００，１００Ａ，１００Ｂ，１００Ｃ  マイクロコントローラ
１０３  個別アクセス領域
１０４  共通アクセス領域
１０６  データ格納部
ＩＢＵＳ  命令用バス
ＤＢＵＳ１，ＤＢＵＳ２  データ用バス
ＭＴ  モータ
ＳＥ  センサ
ＳＹＳ  システム
【図１】
2014063258.tif 000003
【図２】
2014063258.tif 000004
【図３】
2014063258.tif 000005
【図４】
2014063258.tif 000006
【図５】
2014063258.tif 000007
【図６】
2014063258.tif 000008
【図７】
2014063258.tif 000009
【図８】
2014063258.tif 000010
【図９】
2014063258.tif 000011
【図１０】
2014063258.tif 000012
【図１１】
2014063258.tif 000013
【図１２】
2014063258.tif 000014
【図１３】
2014063258.tif 000015
【図１４】
2014063258.tif 000016
【図１５】
2014063258.tif 000017
【図１６】
2014063258.tif 000018
【図１７】
2014063258.tif 000019
【図１８】
2014063258.tif 000020