JP5850774B2 - 半導体集積回路装置及びそれを用いたシステム - Google Patents

半導体集積回路装置及びそれを用いたシステム Download PDF

Info

Publication number
JP5850774B2
JP5850774B2 JP2012064785A JP2012064785A JP5850774B2 JP 5850774 B2 JP5850774 B2 JP 5850774B2 JP 2012064785 A JP2012064785 A JP 2012064785A JP 2012064785 A JP2012064785 A JP 2012064785A JP 5850774 B2 JP5850774 B2 JP 5850774B2
Authority
JP
Japan
Prior art keywords
thread
buffer
memory
redundant
cpu core
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2012064785A
Other languages
English (en)
Other versions
JP2013196542A (ja
Inventor
山田 弘道
弘道 山田
金川 信康
信康 金川
山田 勉
山田  勉
今朝巳 萩原
今朝巳 萩原
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Renesas Electronics Corp
Original Assignee
Renesas Electronics Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Renesas Electronics Corp filed Critical Renesas Electronics Corp
Priority to JP2012064785A priority Critical patent/JP5850774B2/ja
Priority to US13/796,304 priority patent/US9063907B2/en
Priority to EP13159868.2A priority patent/EP2642392B1/en
Publication of JP2013196542A publication Critical patent/JP2013196542A/ja
Priority to US14/704,589 priority patent/US20150234661A1/en
Application granted granted Critical
Publication of JP5850774B2 publication Critical patent/JP5850774B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1479Generic software techniques for error detection or fault masking
    • G06F11/1492Generic software techniques for error detection or fault masking by run-time replication performed by the application software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1497Details of time redundant execution on a single processing unit
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/1629Error detection by comparing the output of redundant processing systems
    • G06F11/1641Error detection by comparing the output of redundant processing systems where the comparison is not performed by the redundant processing components
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/1675Temporal synchronisation or re-synchronisation of redundant processing components
    • G06F11/1691Temporal synchronisation or re-synchronisation of redundant processing components using a quantum
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/202Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where processing functionality is redundant
    • G06F11/2041Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where processing functionality is redundant with more than one idle spare processing component
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/3024Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a central processing unit [CPU]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3404Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for parallel or distributed programming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/566Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • General Health & Medical Sciences (AREA)
  • Virology (AREA)
  • Health & Medical Sciences (AREA)
  • Mathematical Physics (AREA)
  • Hardware Redundancy (AREA)
  • Microcomputers (AREA)

Description

本発明は、半導体集積回路装置に関し、例えば自動車等のシステムに設けられ、そのシステムを制御するマイクロコントローラに適用して有効な技術に関する。
マイクロプロセッサ(以下、マイコンとも称する)は、その動作を規定するところのプログラムを格納したメモリとともに、家電製品、AV機器、携帯電話、自動車、産業機械等のシステムに組み込まれ、それぞれのシステムの動作を制御する。システムとして自動車を考えた場合、その動作を制御するマイコン等の部品は、それの故障が自動車の事故につながる可能性があるため、高い信頼性が求められる。また、部品に故障が発生した場合には、自動車が危険な状態に陥らない様にすることが要求される。自動車を制御するための部品として、メモリ及びマイコンだけでなく、センサ、アクチュエータ等が、自動車に設けられる。マイコンには、これらの部品の故障の有無を診断することが要求されるだけでなく、マイコン自身の故障についても診断することが要求される。
マイコン自身の故障を診断する技術として、非特許文献1に、マイコンを2重化動作させて、同一の処理を2個のマイコンで実施させ、常時結果を比較することが示されている。
また、2個のマイコンを並列動作と2重化動作とを切り替えて実行させることが可能な技術が、非特許文献2に示されている。この非特許文献2においては、特殊な命令(SWITCH命令)をマイコンがフェッチすると、そのマイコンは動作を停止し、モードを切り替えるための待機状態となる。2個のマイコンが待機状態になると、それぞれのマイコンは新しいモードで動作を開始する。開始するモードとしては、性能モードと安全モードを有し、性能モードでは、それぞれのマイコンが並列動作をし、性能の向上が図られる。一方、安全モードでは2個のマイコンが2重化動作をし、それぞれの結果を比較することにより、故障の診断が行われる。
特許文献1には、冗長マルチスレッドアーキテクチャが開示されており、2つのスレッドにおいて実行されたストア命令の結果を比較することが示されている。
また、特許文献2には、プログラムを2つのスレッドで実行し、内容が一致した場合、共有メモリへ書き込む様にしたマルチスレッデイングシステムが開示されている。
特表2007−519101号公報 特開2011−44078号公報
「IEEE MICRO December 1984」誌、Fault Tolerance Achieved in VLSI 「International Conference on Dependable Systems and Networks 2006」、ページ45から54、A Reconfigurable Generic Dual−Core Architecture
非特許文献1に従えば、常に2重化動作が行われるため、安全性は高いが、性能が低い。非特許文献2に従えば、特殊な命令によりモードを切り替える前に、プログラムの実行に必要なデータを予めロードしておくことが要求され、性能の向上が制限される。
特許文献1において、その図2には同時冗長スレッドアーキテクチャのブロック図が示されている。この図2の実施例によれば、命令複製キュー(230)、ソースレジスタ値キュー(240)及びデスティネーションレジスタ値キュー(250)が、システムに設けられる。これらのキュー(230、240、250)を介してリーディングスレッド(210)の値が、トレイリングスレッド(220)へ渡される。値が渡されるため、トレイリングスレッド(220)は、独立したレジスタを有さずに、上記キューを介して渡された値を用いて、命令を実行することになる。そのため、命令フェッチ処理用のレジスタ、命令実行用のレジスタの故障を検出することが困難となり、共通因子故障(Common Cause Failure)の検出が困難となる。すなわち、命令フェッチ処理用のレジスタ或いは/及び命令実行用のレジスタに故障が生じていても、リーディングスレッドの実行の結果とトレイリングスレッドの実行の結果とでは同じになり、故障の検出が困難となる。
特許文献2に従えば、同じプログラムが2つのスレッドで実行され、スレッドでの実行結果が一致した場合、共有メモリへの書き込みが行われる。この処理を行うために、プログラムのソースコードを変更することが開示されている。すなわち、実行結果のローカルメモリへのバッファリング処理、バッファリングした内容の比較処理及び一致する場合の共有メモリへの書き込み処理を指示するコードを、ソースコードに追加することが示されている。ソースコードの変更が要求されるため、プログラムの変更或いは作成に負担が増える。また、この特許文献2では、共通因子故障に対する認識もされていない。
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
一実施の形態による半導体集積回路装置は、複数のスレッドをクロックに従って切り替えながら実行する。この半導体集積回路装置には、複数のスレッドの実行に使用されるレジスタが各スレッド毎に設けられ、故障を検出するためのプログラムが2つのスレッドで実行されたとき該2つのスレッドの実行の結果を比較する比較回路が設けられる。
前記一実施の形態によれば、性能低下を抑制しつつ、故障の検出を向上させることが可能である。
実施の形態1に係わるマイクロコントローラを示すブロック図である。 実施の形態1に係わるレジスタの構成を示す説明図である。 実施の形態1に係わるレジスタの構成を示す説明図である。 実施の形態1に係わるCPUコアのパイプライン動作を示すタイミング図である。 実施の形態1に係わるマルチスレッドのパイプライン動作を示すタイミング図である。 実施の形態1に係わるマルチスレッドのパイプライン動作を示すタイミング図である。 実施の形態1に係わるマルチスレッドのパイプライン動作を示すタイミング図である。 実施の形態1に係わるマルチスレッドのパイプライン動作を示すタイミング図である。 実施の形態1に係わる非冗長スレッド実行の動作を示すタイミング図である。 実施の形態1に係わる冗長スレッド実行の動作を示すタイミング図である。 実施の形態1に係わる冗長スレッド実行制御回路の状態遷移を示す図である。 実施の形態1に係わる冗長スレッド実行制御回路の状態遷移を示す図である。 実施の形態1に係わる冗長スレッド実行制御回路の動作を示すタイミング図である。 実施の形態1に係わる冗長スレッド実行制御回路の動作を示すタイミング図である。 実施の形態1に係わる冗長スレッド実行制御回路の変形例の状態遷移を示す図である。 実施の形態1に係わる冗長スレッド実行制御回路の変形例の動作を示すタイミング図である。 実施の形態1に係わる冗長スレッド実行制御回路の変形例の動作を示すタイミング図である。 実施の形態1に係わる冗長スレッド実行制御回路の例外発生時の動作を示すタイミング図である。 実施の形態1に係わる冗長スレッド実行制御回路の割り込み発生時の動作を示すタイミング図である。 実施の形態2に係わるシステムを示すブロック図である。 実施の形態1に係わるレジスタの構成を示す説明図である。 実施の形態の概要を示すブロック図である。
以下の説明において、互いに同じ機能を有するブロック或いは波形については、説明の簡略化を図るために、同じ符号を付して、その詳細な説明を省略することがある。説明が省略されている場合には、同じ符号が付されているブロック或いは波形の説明を参照されたい。
[一実施形態の概要]
まず、実施の形態の概要を示すブロック図である図22を用いて、実施形態の概要を説明する。同図おいて、マイクロコントローラ(microcontroller、MCU(Micro-Control Unit))1は、2個のマイクロプロセッサ(CPU:Central Processing Unit)のコア(以下、「CPUコア」と称することもある。)2A、2Bを有している。このCPUコア2A及びCPUコア2Bは、互いに同一の構成を有しているので、以下の説明では、CPUコア2Aについてのみ詳しく説明する。
CPUコア2Aは、プログラムの実行に必要なレジスタをソフトウエアの実行単位であるスレッド毎に有している。この実施の形態において、CPUコア2Aは、特に制限されないが、4つのスレッドを切り替えながら実行出来るように4組のレジスタセット(T0R、T1R、T2R、T3R)210、211、212、213が設けられている。レジスタセット210、211、212、213のそれぞれは、特に制限されないが互いに同じ構成にされており、スレッドを実行する際に使われる複数のレジスタを有している。この実施の形態においては、レジスタセット210、211、212、213のそれぞれは、実行すべき命令のアドレスを示すプログラムカウンタ、CPUコアの状態を示す状態レジスタ、演算処理等に用いられる汎用レジスタをレジスタとして含んでいる。
図22において、命令メモリ3には、CPUコア2A、2Bで実行されるべき命令が格納されている。命令メモリ3から読み出された命令は、特に制限されないがキャッシュメモリ(I$)4Aを介して、CPUコア2Aに供給され、キャッシュメモリ(I$)4Bを介してCPUコア2Bに供給される。
キャッシュメモリ4Aから供給された命令は、CPUコア2Aにおいて、実行される。すなわち、ソフトウエアの実行単位であるスレッドに含まれる複数の命令は、キャッシュメモリ4Aを介してCPUコア2Aに順次フェッチされ、そのスレッドに対応して設けられたレジスタセットを用いて、順次実行される。フェッチされた命令を含むスレッドに対応するところのレジスタセットが、例えばレジスタセット210であれば、このレジスタセット210に含まれている状態レジスタ及び汎用レジスタ等を用いて命令が実行される。また、このスレッドにおいて、次にフェッチされるべき命令は、このレジスタセット210に設けられているプログラムカウンタにより指示される。他のレジスタセット211、212、213についても、そのレジスタセットに対応したスレッドの実行において使われる。CPUコア2Aについては、後の実施の形態1で詳細に説明するので、これ以上の説明はここでは省略する。
CPUコア2Aで、4つのスレッドを実行できるので、4つのスレッドの内の1つのスレッドを冗長スレッドとして、CPUコア2Aの故障を診断するためのソフトウエアに割り当て、残りの3つのスレッドを非冗長スレッドとして、通常の処理用に割り当てる。通常の処理としては、特に制限されないが自動車のエンジンを制御する処理が割り当てられる。CPUコア2Bについても同様に、4つのスレッドの内の1つを冗長スレッドとして、CPUコア2Bの故障を診断するためのソフトウエアに割り当て、残りを非冗長スレッドとして、通常の処理に割り当てる。
この様にスレッドを割り当てることにより、6つのスレッドを非冗長スレッドとして割り当てることが出来、通常の処理を実行することが可能となり、性能の低下を抑制することが可能となる。
一方、CPUコア2A及びCPUコア2Bのそれぞれは、冗長スレッドを実行すると、レジスタセットを用いた実行結果と、冗長スレッドである旨を示す情報とを、信号252A及び信号252Bとしてシステムバス制御回路5に供給する。システムバス制御回路5は、冗長スレッドの実行結果を比較し、一致していない場合は故障が発生している旨の情報を形成する。システムバス制御回路5の詳細は、後で実施の形態1で詳細に説明するが、CPUコア2A及びCPUコア2Bが冗長スレッドを実行した際に、それぞれの実行結果を比較する比較回路の機能を有していると理解されたい。
この様に、スレッド毎にレジスタセットを割り当てることにより、スレッドを切り替える前に切り替え後のスレッドで使われるデータをレジスタセットにロードする処理を減らすことが出来、性能の低下を抑制できる。また、2つの冗長スレッドは、互いに異なるレジスタセットを用いて実行されるため、それぞれのレジスタセットを構成するプログラムカウンタ、状態レジスタ及び汎用レジスタ等の故障も検出することが可能となり、共通因子故障も検出が可能となる。
上述した例では、CPUコア2AとCPUコア2Bのそれぞれで、冗長スレッドを実行することを説明したが、例えば一方のCPUコア2Aで、2本の冗長スレッドを実行する様にしても良い。この場合には、信号252BがCPUコア2Aからシステムバス制御回路5に供給される様にすれば良い。あるいは、システムバス制御回路5に信号252Aの内容を保持するバッファを設けるようにしてもよい。いずれにしても、CPUコア2Bは必ずしも設けなくてもよいので、小型化を図ることが可能となり、安価にすることが可能となる。
上述したことから理解されるであろうが、冗長スレッドとは、マイクロコントローラ1或いはCPUコアの故障を診断するためのソフトウエアの実行単位であり、非冗長スレッドとは、通常の処理を実行するためのソフトウエアの実行単位である。また、スレッドを実行する際に用いられる複数種類のレジスタ(プログラムカウンタ、状態レジスタ及び汎用レジスタ等)を、1つの単位として表すために、レジスタセットと言う表現を用いている。
図22の実施形態では、キャッシュメモリ4A及び4Bが設けられている例を説明したが、キャッシュメモリ4A及び4Bは設けなくても良い。図22に示したマイクロコントローラ1は、半導体集積回路技術により1つの半導体チップ(半導体基板)に形成されているが、キャッシュメモリを設けない様にすれば、半導体チップの小型化を図ることが可能となり、安価にすることが可能となる。また、図22には示されていないが、マイクロコントローラ1にはクロック発生回路が設けられており、該クロック発生回路からのクロックに従って(同期して)各CPUコアは、スレッドを切り替えながらプログラムを実行する。なお、マイクロコントローラを、データ処理装置又は半導体集積回路装置ともいう。
≪実施の形態1≫
図1は、第1の実施形態で、プログラム実行に必要なレジスタセットをソフトウエアの実行単位であるスレッドごとに有し、クロックごとにスレッドを切り替えて実行するマルチスレッディング計算機能を持つデュアルコアのマイクロコントローラ(MCU)1のブロック図である。以下の説明では、診断を実施するために、2つのCPUコアのそれぞれにおいて実行される1つのスレッドで同じプログラムを実行する例を説明するが、実施形態はこれに限られるものではない。1つのCPUコアにおいて実行される2つのスレッドで同じプログラムを実行する形態および2種類以上の同じプログラムを4つ以上のスレッドで実行する形態にも適用可能である。
1.CPUコア
同図において、CPUコア2AとCPUコア2Bは同一機能を有する。各CPUコアはそれぞれ4つのスレッド(スレッド番号0、スレッド番号1、スレッド番号2、スレッド番号3)を並列処理できる。
同図において、命令バッファ(T0I、T1I、T2I、T3I)200、201、202、203は、それぞれスレッド番号0,スレッド番号1,スレッド番号2,スレッド番号3において実行される命令を一時記憶する。また、レジスタセット(T0R、T1R、T2R、T3R)210、211、212、213は、それぞれスレッド番号0,スレッド番号1,スレッド番号2,スレッド番号3が処理を実行する際に用いる。レジスタセット210、211、212、213のそれぞれは、プログラムカウンタ、汎用レジスタ、状態レジスタ等を含んでいる。書き込み回路220は、フェッチした命令を対応するスレッドの命令バッファ200,201,202,203に書き込む。命令バッファ選択回路221は、スレッドに対応した命令バッファを選択する。書き込み回路230は、スレッドに対応したレジスタセットを4組のレジスタセットの内から選択し、命令の実行結果を選択したレジスタセット内のレジスタに書き込む。レジスタ選択回路231は、4組のレジスタセットから、スレッドに対応したレジスタセットを選択する。選択回路232は、4組のレジスタセットから、スレッドに対応したレジスタセット内のプログラムカウンタを選択し、命令フェッチアドレスを出力する。
同図において、デコード回路(図1においては「デコード」と表示。)24は、命令バッファ選択回路221により選択されたところの命令バッファから供給されたスレッドの命令を解読し、実行回路(図1においては「実行」と表示。)25に指示を与える。実行回路25は、デコード回路24からの指示に従い、レジスタ選択回路231が選択したところのスレッドに対応したレジスタセットを用いて、命令の実行に必要なデータをレジスタセット内のレジスタから読み出して実行する。また、フェッチした命令が、実行回路25の実行結果をレジスタに書き戻す命令の場合には、レジスタへ書き込むべきデータがライン250を介して、レジスタ書き込み回路230に供給され、スレッドに対応したレジスタセット内のレジスタに書き戻される。
ライン251は、後述するスレッドスケジューリングレジスタ(TSR)26とスレッドタイプレジスタ(TTR)27のデータを実行回路25が読み出しおよび/或いは書き込みを行うためのものである。実行回路25からCPUコア2Aの外部に出力される信号252Aは、後述するデータメモリ7等へのメモリアクセスのコマンド、アドレス、ライトすべきデータ、後述するスレッドのタイプの情報を含む。CPUコア2Bからも信号252Aと同様な信号252Bが出力される。CPUコア2Aの外部から実行回路25に入力される信号54Aは、データメモリ7等へのメモリアクセスがリードの場合に当該データメモリ7等から読み出されたリードデータである。ここで、メモリアクセスにはメモリのアクセスの他に周辺モジュール内のレジスタのアクセスを含む。CPUコア2Bへも同様な信号54Bが入力される。
TSR26には、スレッドの実行スケジュールが設定される。詳細は図2を用いて後で説明する。TTR27には、スレッドのタイプが設定される。このTTR27についても、詳細は図3を用いて後で説明する。
図1において、スレッド選択回路(図1においては「スレッド選択」と表示。)28は、命令フェッチと命令実行を行うスレッドを選択する。スレッド選択回路28は、TSR26に設定された内容に基づいた選択信号280を形成し、選択回路221、231、232、及び書き込み回路220、230に供給する。スレッド選択回路28からCPUコア2Aの外部に出力される信号281Aは冗長スレッドの実行を示す信号(以下、「冗長スレッド信号」という。)である。CPUコア2B内のスレッド選択回路(不図示)からも同様の信号281Bが出力される。CPUコア2Aの外部からスレッド選択回路28に入力される信号110Aは,冗長スレッドの選択を禁止する信号(以下、「冗長スレッド選択禁止信号」という。)と割り込み禁止を示す信号(以下、「冗長スレッド割込禁止信号」という。)である。CPUコア2B内のスレッド選択回路(不図示)へも信号110Aと同様の信号110Bが入力される。
2.命令メモリ及びキャッシュメモリ
命令メモリ3はCPUコア2AおよびCPUコア2Bが実行する命令を記憶する。図1に示したマイクロコントローラ1は、システム(自動車等)へ組み込まれ、システムを制御するマイクロコントローラを例としている。そのため、特に制限されないが、命令メモリ3としては、フラッシュメモリが用いられている。フラッシュメモリは電気的に一括消去及び書き替えが可能な読み出し用メモリで、制御の高度化に伴い大容量化が進んでいるが、CPUコアの動作クロックが高速になると1クロックサイクルでのリードが困難になる。そこで、特に制限されないが、フラッシュメモリ用のキャッシュをマイクロコントローラ1に搭載し、CPUコアからの1サイクルでのリードを可能している。キャッシュメモリ(I$)4AはCPUコア2A用のものであり、キャッシュメモリ(I$)4BはCPUコア2B用のものである。
3.システム制御回路及びそれによって制御される回路
同図において、システムバス制御回路5は、CPUコア2AおよびCPUコア2Bからシステムバス6へのアクセスの制御を行う。システムバス6には、データメモリ7、周辺モジュール(図1においては「『周辺A』……『周辺Z』」と表示。)8A〜8Z、外部バス制御回路(図1においては「外部バス制御」と表示。)9、割り込みコントローラ10が接続されている。同図において、信号60はシステムバス6におけるコマンド、アドレス、ライトデータを示しており、信号61はリードデータを示している。特に制限されないが、データメモリ7としては、SRAM(Static Random Access Memory)が用いられている。SRAMのメモリセルは1対のCMOSインバータと一対のアクセスのためのNMOSトランジスタを含む。なお、データメモリ7の他にデータを格納するフラッシュメモリを設けてもよい。
(1)システムバス制御回路
システムバス制御回路5は、アドレスバッファ(AB、第1バッファ)50、リードデータバッファ(RDB、第2バッファ)51、ライトデータバッファ(WDB、第3バッファ)52、比較回路(図1においては「比較」と表示。)53を有する。図示していないが、比較回路53はアドレスを比較する第1比較回路とデータを比較する第2比較回路とを有する。これらは、冗長スレッドの実行によりシステムバス6へのアクセスが発生した場合に機能する。図1には示されていないが、システムバス制御回路5には、後で説明する様にこれらを制御する制御回路が設けられている。
上述した様に、実行されるスレッドのタイプを示す情報は、CPUコア2Aから出力される信号252AおよびCPUコア2Bから出力される信号252Bに含まれている。
(a)非スレッド冗長の実行
信号252Aが、非冗長スレッドの実行に伴うシステムバス6へのアクセスを示している場合、システムバス制御回路5は、信号252Aに含まれている情報(コマンドとアドレス)をシステムバス6に出力する。システムバス6へのアクセスが、ライトに関するアクセスの場合には、信号252Aに含まれている情報(ライトデータ)が更にシステムバス6に出力される。一方、このアクセスがリードの場合には、システムバス6におけるリードデータが、CPUコア2Aへの信号54Aとして出力される。
CPUコア2Bについても、CPUコア2Aと同様に、信号252Bが、非冗長スレッドの実行に伴うアクセスの場合には、信号252Bのコマンドとアドレスが、システムバス6に出力される。このアクセスがライトの場合には、信号252Bに含まれているライトデータも更にシステムバス6へ出力される。一方、このアクセスがリードの場合はシステムバス6のデータが、信号54BがリードデータとしてCPUコア2Bへ出力される。
システムバス6への上述したアクセスは、時間的に先に実行した命令が、例えばメモリアクセス命令で、そのアクセスが実行中である場合、実行中のアクセスが完了するまで待たされる。この例は、後で図4を用いて説明するメモリアクセスウエイトが発生した場合に相当する。図4で述べるが、先に実行した命令で、メモリアクセスを実行するMAステージが1サイクルで完了することができず、MA1ステージ及びMA2ステージの2サイクル分ステージが延長されると、次の命令がメモリアクセス命令の場合には、その命令のMAステージが上記MA1ステージと重なってしまう。そのため、次の命令によるシステムバス6へのアクセスが待たされる。また、CPUコア2AとCPUコア2Bから同時にメモリアクセスが発生した場合には、MAステージが重なるため、メモリアクセスは同時には実行されず、1つずつ順番に実行される。
(b)冗長スレッドの実行
一方、上記信号252Aまたは信号252Bが、冗長スレッドの実行に伴うアクセスを示している場合には、次のような処理が実行される。
(i)リードアクセス
時間的に先に実行される冗長スレッド、すなわち先行する冗長スレッドが、システムバス6へのリードアクセスの場合、システムバス6へのアクセスを実行する。すなわち、先行する冗長スレッドの実行に伴い、アドレスが形成される。形成されたアドレスは、AB50に登録される。形成されたアドレスに従って、例えばデータメモリ7から読み出されたリードデータは、システムバス6を介してCPUコアに出力される。また、このリードデータは、RDB51に登録される。
時間的に、上記先行する冗長スレッドの後に実行される冗長スレッド、すなわち後行する冗長スレッドの実行に伴いリードアクセスが生じた場合、この後行する冗長スレッドの実行に伴うリードアクセスでは、システムバス6へのアクセスは実行しない。この場合には、システムバス制御回路5において、後行する冗長スレッドの実行に伴って発生したアクセスにおけるアドレスと、AB50とを、比較回路53の第1比較回路が比較する。
比較回路53における比較において、アドレスの比較結果が一致する場合、システムバス制御回路5は、後行する冗長スレッドの実行に伴うリードアクセスに対しては、RDB51に予め登録されているデータを、リードアクセスデータとしてCPUコア2Aに供給する。比較回路53における比較において、アドレスの比較結果が不一致の場合、システムバス制御回路5は、割り込みコントローラ10にシステムバスアクセスエラー信号55を出力する。
(ii)ライトアクセス
先行する冗長スレッドの実行に伴うシステムバス6へのアクセスが、ライトアクセスの場合、システムバス制御回路5は、システムバス6へのアクセスを実行せず、上記先行する冗長スレッドを実行したCPUコアからの信号252A又は信号252Bに含まれるアドレスをAB50に登録する。また、先行する冗長スレッドを実行したCPUコアからの信号252A又は信号252Bに含まれるライトすべきデータをWDB52に登録する。
後行する冗長スレッドの実行に伴い生じるアクセスがライトアクセスの場合、システムバス制御回路5は、後行する冗長スレッドを実行したCPUコアからの信号252A又は信号252Bに含まれるアドレスと、AB50に予め登録されているアドレスとの比較を、比較回路53の第1比較回路で実行する。また、後行する冗長スレッドを実行したCPUコアからの信号252A又は信号252Bに含まれるライトデータと、WDB52に予め登録されているライトデータとの比較を、比較回路53の第2比較回路で実行する。上記例では、比較回路53は、第1比較回路と第2比較回路を有する様に説明したが、比較回路53は、ライトアクセス時に用いられる比較回路と、リードアクセス時に用いられる比較回路とをそれぞれ別々に有するようにしても良い。この様にすれば、比較回路の制御の簡素化を図ることが可能となる。
比較回路53により、アドレスおよびライトデータが、予め登録されているアドレスおよびライトデータと一致することが検出された場合、システムバス制御回路5は、(AB)50とWDB52に登録されているアドレスおよびライトデータをシステムバス6へ出力する。このシステムバス6へ出力されたアドレスとライトデータにより、データメモリ7等へのライトアクセスが行われる。
比較回路53により、アドレスおよびライトデータが、予め登録されているアドレスおよびライトデータと一致するかの検出が行われ、アドレスまたはライトデータが不一致の場合、システムバス制御回路5は、割り込みコントローラ10にシステムバスアクセスエラー信号55を出力する。特に制限されないが、比較回路53により、不一致が検出された場合、ライトアクセスは実行されない。
(2)周辺モジュール
周辺モジュール8Aは例えばアナログ入力信号80Aをディジタル信号に変換するA/D変換器である。周辺モジュール8Zは例えばパルス出力信号80Zを発生するタイマである。
(3)外部バス制御回路
外部バス制御回路(図1においては「外部バス制御」と表示。)9はシステムバス6へのアクセスが、マイクロコントローラ1の外部に割り当てられたアドレス空間へのアクセスである場合、外部端子(図示しない)を介して、コマンドとアドレスを信号90として出力し、外部端子(図示しない)を介して、データを信号91として入力(リードの場合)し、またはデータを信号91として出力(ライトの場合)する。
(4)割り込みコントローラ
割り込みコントローラ10は、割り込み端子(図示しない)を介して、外部からの割り込み要求を信号102として受け付け、その応答を信号102として返す。すなわち、信号102には割り込み要求信号と割り込み応答信号が含まれる。また、CPUコア2Aと割り込みコントローラ10との間の信号100Aは、CPUコア2Aへの割り込み要求信号とCPUコア2Aからの応答信号を含む。CPUコア2Bと割り込みコントローラ10との間の信号100Bも、CPUコア2Bへ割り込み要求信号とCPUコア2Bからの応答信号を含む。割り込みコントローラ10から冗長スレッド実行制御回路(図1においては「冗長スレッド実行制御」と表示。)11への信号101は、冗長スレッドへの割り込み要求信号である。
4.冗長スレッド実行制御回路(概要)
冗長スレッド実行制御回路11は、CPUコア2Aによる冗長スレッドの実行を示す冗長スレッド信号281Aと、CPUコア2Bによる冗長スレッドの実行を示す冗長スレッド信号281Bを受け、冗長スレッドの実行数を管理する。冗長スレッドの実行数を管理するために、冗長スレッド実行制御回路11は、CPUコア2Aに対して冗長スレッド選択禁止信号と冗長スレッド割込禁止信号110Aを出力する。同様に、CPUコア2Bに対して冗長スレッド選択禁止信号と冗長スレッド割込禁止信号110Bを出力する。
冗長スレッド実行制御回路11は、図1には示されていないが制御回路を有している。この制御回路による制御については、後で説明する図11等を用いた説明で理解されるであろう。また、図面が複雑になるのを避けるために、図1では、上記冗長スレッド選択禁止信号と冗長スレッド割込禁止信号は、1つの符号110A(及び符号110B)で示されている。
5.クロック発生回路
また、クロック発生回路(CLKG)1000は、各ブロックにクロック信号(CLK)1001を供給する。各ブロックのそれぞれは、フリップフロップなどを含む順序回路と組み合わせ回路とを有し、クロック信号1001に従ったクロックが、例えば上記順序回路に供給される。これにより、各ブロックは、クロック信号1001に同期して動作する。
6.スレッド制御レジスタ
(1)スレッドスケジューリングレジスタ(TSR)
図2には、上記スレッドスケジューリングレジスタ(TSR)26の構成例が示されている。TSR26は16ビットのレジスタで、上位ビットから2ビットずつS0〜S7の8つのビット名が付けられており、ここにスレッドの番号(以下、スレッド番号と称することもある)が設定される。スレッド番号は、2進数で表すと、“00”がスレッド番号0、“01”がスレッド番号1、“10”がスレッド番号2、“11”がスレッド番号3を表す。
スレッドは、上記8つに割り当てられたビット名S0〜S7の順に選択され、実行される。例えば、ビット名S0の2ビットに“00”が設定され、ビット名S1に“11”が設定されれば、2進数“00”に対応するスレッド番号0が実行され、次に2進数“11”に対応するスレッド番号3が実行される。すなわち、TSR26のビット名S0〜S7のそれぞれに、スレッド番号が設定され、ビット名S0→S1→S2→S3→S4→S5→S6→S7の順に、そのビット名に格納されたスレッド番号が選択され、実行される。この場合、ビット名S7の次はビット名S0に戻り、これを繰り返す。
(2)スレッドタイプレジスタ(TTR)
図3には、上記スレッドタイプレジスタ(TTR)27の構成例が示されている。TTR27は、16ビットのレジスタで、上位ビットから4ビット毎に、T0〜T3の4つのビット名が付けられており、ここにスレッド番号0〜3のそれぞれのタイプが設定される。すなわち、ビット名T0にスレッド番号0のタイプが設定され、ビット名T1にスレッド番号1のタイプが設定され、ビット名T2にスレッド番号2のタイプが設定される。同様に、ビット名T3にスレッド番号3のタイプが設定される。
スレッドのタイプは、2進数で表して、“0000”〜“0111”が非冗長スレッド、“1000”が冗長スレッド0、“1001”が冗長スレッド1、“1010”が冗長スレッド2、“1011”が冗長スレッド3、“1100”〜“1111”が予約である。非冗長スレッドは冗長実行をしないスレッドを意味する。冗長スレッドは複数のスレッドで同じプログラムを実行するスレッドを意味する。
例えば、CPUコア2AのTTR27は、ビット名T0=T1=“0000”とし、ビット名T2=“1000”とし、ビット名T3=“1001”と設定される。このとき、CPUコア2BのTTR27は、ビット名T0=“1000”、ビット名T1=“1001”、ビット名T2=T3=“0000”と設定されたとすると、CPUコア2Aのスレッド番号2とCPUコア2Bのスレッド番号0とで、冗長スレッド0として同じプログラムが実行される。冗長スレッドが選択されることにより、実行に伴い生じるシステムバスアクセスにおいて、上述した様に、システムバス制御回路5が実行した結果の比較を行う。また、CPUコア2Aのスレッド番号3とCPUコア2Bのスレッド番号1が冗長スレッド1として、同じプログラムを実行して、上記と同様に結果の比較を行う。あとのスレッドは非冗長スレッドとして実行され、結果の比較は行われない。
(3)レジスタの設定
TSR26及びTTR27へのスレッド番号の設定及びスレッドタイプの設定は、それらを設定するためのプログラムを実行することにより行う。設定のプログラムは、例えば、レジスタセット210〜213のうちのいずれかのレジスタセットに含まれている汎用レジスタに、スレッドの番号とそのタイプを格納し、この汎用レジスタからTSR26及びTTR27へデータ転送を行うようなプログラムとすれば良い。この設定のプログラムで使われるデータ転送を指示する命令は、CPUコアの基本的な動作に影響するため、安全性の観点からも専用の命令にすることが望ましい。また、TSR26及びTTR27は、それぞれのCPUコアに設けられているため、それぞれのCPUコアにおいて上記設定のプログラムは実行される。勿論、設定するために使われる上記汎用レジスタは、上記レジスタセットに設けられている汎用レジスタとは異なるレジスタを用いるようにしても良い。
7.CPUコアの命令パイプライン
図4には、CPUコア2A、2Bの命令パイプラインのタイミング例が示されている。命令パイプラインとは、同じ回路で複数の命令をオーバラップさせて実行する方法で,回路は複数のステージに分割されており、クロック信号(CLK)1001に従って、各ステージでは一度に1つの命令を実行する。
図4において、(A)は、基本パイプラインを表している。IA(Instruction Address)は命令アドレスを出力するステージ、IF(Instruction Fetch)は命令をフェッチするステージである。また、D(Decode)はフェッチした命令を解読するステージ、EX(EXecute)は命令を実行するステージである。さらに、MA(Memory Access)はメモリアクセスを実行するステージ、WB(Write Back)は命令の実行結果やメモリアクセスの実行結果をレジスタに書き戻すステージである。
同図において、(B)〜(D)は、パイプラインが乱れた例を表している。(B)は、命令キャッシュミスで、IFステージが1サイクルで完了することができずIFステージが、例えばIF1ステージ及びIF2ステージの2サイクル分ステージを延長して,ミスした命令が読み出されるのを待っていることを表している。(C)は、マルチステップ実行で、EXステージが1サイクルで完了することができず、例えばEX1ステージ及びEX2ステージの2サイクル分ステージを延長して、命令を実行したことを表している。マルチステップ実行の例として、乗算命令や除算命令などがある。(D)は、メモリアクセスウエイトで、MAステージが1サイクルで完了することができず、例えばMA1ステージ及びMA2ステージの2サイクル分ステージを延長して、メモリアクセスを実行した例が示されている。メモリアクセスウエイトの例としては、アクセスに時間のかかる周辺モジュールのレジスタをリードする場合や、システムバスに対して他のCPUコアのアクセスと衝突し、アクセスが待たされる場合などがある。
8.マルチスレッドにおけるパイプライン動作
(1)パイプラインに乱れがない場合
図5には、クロック信号(CLK)1001に従ってスレッドを切り替えながらプログラムを実行するマルチスレッドにおけるパイプライン処理のタイミング例が示されている。ステージは、図4で示したパイプラインと同様に、IAステージからWBステージの6ステージである。実行されるスレッドの順番としては、スレッド番号0から3の順に実行される例を示している。この実行スケジュールを実現するために、TSR26の各ビット名には、次の設定がされる。すなわち、ビット名S0=S4=スレッド番号0、ビット名S1=S5=スレッド番号1、ビット名S2=S6=スレッド番号2、ビット名S3=S7=スレッド番号3が設定される。
図5では、図1に示したブロック図との関係を分かり易くするために、各波形の左側に、パイプラインにおけるステージ名とそのステージに関連する図1の符号が並記されている。これ以降に説明する図面においても、同様に並記をするので、図5を用いて、並記の例を説明しておく。
図5において、記号IAの右側に付されている括弧内の数字は、図1におけるプログラムカウンタ選択回路の符号232を表している。以下同様に、図5において記号IFの括弧内の数字は、図1における命令バッファ書き込み回路の符号220を表している。記号Dの括弧内の数字は、図1における命令バッファ選択回路、レジスタ選択回路、デコード回路のそれぞれの符号221,231,24を表している。記号EXの括弧内の数字は、図1における実行回路の符号25を表している。記号MAの括弧内の英数字252A/Bは、図1におけるCPUコア2AおよびCPUコア2Bからシステムバス制御回路5への信号の符号252A,252Bを表しており、数字60は図1におけるシステムバス6のコマンド、アドレス、ライトデータの符号60を表している。記号WBの括弧内の数字61は、図1におけるシステムバス6のリードデータの符号61を表し、英数字54Aと54Bは、図1におけるシステムバス制御回路5からCPUコア2AおよびCPUコア2Bへのリードデータの符号54A及び54Bを表している。また、数字250は、図1におけるレジスタ書き込みデータの符号250を表し、数字230は、図1における実行結果のレジスタ書き込み回路の符号230を表している。
また、上記パイプラインの各ステージに記載されている数字0から3は、そのステージに入っているスレッドの番号を示している。CLK波形の上側にCLKの立ち下がりごとに付されている数字はクロックサイクル番号(CLKNO)を示している。
図5では、パイプラインの乱れが無い例を示しており、例えば、スレッド番号0における命令が、CLKNOが1から6へと変化するのに従って、IAステージからWBステージへと順次移り、実行される。同様に、スレッド番号0における次命令が、CLKNOが5から10へと順次変化するのに従って、IAステージからWBステージへと順次移り、実行される。他のスレッド番号における命令も同様に実行される。
また、図5では、例えばCPUコア2Aのパイプラインのタイミングが示されているだけであるが、他のCPUコア2Bについても、同様なパイプライン動作が行われる。パイプラインのタイミングに関する以下の説明で、特に2つのCPUコアを分けて説明しない限り、タイミングは2つのCPUコアにおいて同様であると理解して頂きたい。
(2)命令キャッシュミスが発生した場合
図6には、マルチスレッドのパイプライン処理において命令キャッシュミスが発生したときのタイミング例が示されている。CLKNO=3のクロックサイクルで、スレッド番号1における命令フェッチでキャッシュミスが発生したため、CLKNO=4及び5でIFステージが延長する。CLKNO=4ではスレッド番号1の命令をデコードするスケジュールであったが、命令バッファに命令が準備できていないため、デコードするDステージを取り止める。次のCLKNO=5でスレッド番号2の命令をデコードする例を示している。しかし、CLNOK=4でスレッド番号2の命令バッファ202に命令があれば、その命令を前倒ししてデコードするように回路を設計することは可能であり、その方がパイプライン処理の空きが減り性能が向上するので望ましい。スレッド番号1のキャッシュミスした命令はCLKNO=5で命令バッファ201にフェッチされ、次にスレッド番号1の命令をデコードするスケジュールとなるCLKNO=8でデコードが行われる。このように、命令キャッシュミスによって命令パイプライン処理が乱れることがある。
(3)マルチステップ実行が発生した場合
図7には、マルチスレッドのパイプライン処理においてマルチステップ実行が発生したときのタイミング例が示されている。CLKNO=4のクロックサイクルで、スレッド番号1の命令をデコードした結果、マルチステップ実行であることが分かり、CLKNO=5のEXステージの後に、2サイクルのEXステージが追加される。また、CLKNO=5及び6でのDステージを取り止める。スレッド番号1のEXステージが延長すると、続くメモリアクセスとライトバックの実行が遅れる。このように、マルチステップ実行によって命令パイプライン処理が乱れることがある。
(4)メモリアクセスウエイトが発生した場合
図8には、マルチスレッドのパイプライン処理においてメモリアクセスウエイトが発生したときのタイミング例が示されている。CLKNO=6のクロックサイクルで、スレッド番号1のメモリアクセスでウエイトが発生し、CLKNO=7及び8にMAステージが追加される。リードアクセスのため、CLKNO=7で実行する予定だったレジスタへの書き戻しは、CLKNO=11で行われる例を示している。CLKNO=10ではスレッド番号1の次のメモリアクセスが実行されるが、CLKNO=11でライトバックを実行できないため、CLKNO=11のDステージ、EXステージ及びMAステージのパイプライン処理を取り止め、次のCLKNO=12でWBステージを実行する。このように,メモリアクセスウエイトによって命令パイプライン処理が乱れることがある。
9.非冗長スレッドの実行においてメモリアクセスする場合の動作
図9には、非冗長スレッドで、メモリにアクセスする場合のタイミング例が示されている。同図には、CPUコア2A及びCPUコア2Bのパイプラインに関するタイミングと、図1におけるシステムバス制御回路5のタイミングと、システムバス6のタイミングが示されている。CPUコア2Aのパイプラインに関するタイミングは、図9において2Aとして示されており、CPUコア2Bのパイプラインに関するタイミングは、2Bとして示されている。システムバス制御回路5のタイミングは、アドレスバッファ50がAB(50)として、リードデータバッファ51がRDB(51)として、ライトバッファ52がWDB(52)として、比較回路53が比較(53)として示されている。また、これらのタイミングを纏めて、5として示してある。システムバス6のタイミングは、コマンド60、アドレス60、ライトデータ60が「CMD,A,WD(60)」として、リードデータ61がRD(61)として示されている。また、これらのタイミングを纏めて、6として示してある。後で説明する図10についても、同様の表示方法を採用している。
図9において、CPUコア2Aのスレッド番号1とCPUコア2Bのスレッド番号1はそれぞれ非冗長スレッドである。CPUコア2AのCLKNO=2のデコードステージDの命令は、上記スレッド番号1の非冗長スレッドにおける命令であり、メモリリードの命令であるとする。CLKNO=6のデコードステージDの命令は、スレッド番号1の非冗長スレッドにおける命令であり、メモリライトの命令であるとする。一方、CPUコア2BのCLKNO=4のデコードステージDの命令は、スレッド番号1の非冗長スレッドにおける命令であり、メモリリードの命令であるとする。CLKNO=9のデコードステージDの命令は、スレッド番号1の非冗長スレッドにおける命令であり、メモリライトの命令であるとする。
(a)CPUコア2Aのメモリリード(図9では「CPUAリード」と表示)
CPUコア2AがCLKNO=4でメモリアクセス(リード)を実行すると、システムバス制御回路5を介して、システムバス6にコマンド60、アドレス60が出力される(期間A1−1)。このメモリアクセス(リード)に応答して、CLKNO=5でシステムバス6のリードデータ61がCPUコア2Aに読み込まれ、CPUコア2A内のスレッド番号1に対応するレジスタセット内のレジスタ(例えば汎用レジスタ)にライトバックされる(期間A1−1)。
(b)CPUコア2Bのメモリリード(図9では「CPUBリード」と表示)
CPUコア2BがCLKNO=6でメモリアクセス(リード)を実行すると、システムバス6にコマンド60、アドレス60が出力される(期間B1−1)。CLKNO=7でシステムバス6のリードデータ61がCPUコア2Bに読み込まれ、CPUコア2B内のスレッド番号1に対応するレジスタセット内のレジスタ(例えば汎用レジスタ)にライトバックされる(期間B1−1)。
(c)CPUコア2Aのメモリライト(図9では「CPUAライト」と表示)
次に、CPUコア2AがCLKNO=8でメモリアクセス(ライト)を実行すると、システムバス制御回路5を介して、システムバス6にコマンド60、アドレス60、ライトデータ60が出力される(期間A1−2)。
(d)CPUコア2Bのメモリライト(図9では「CPUBライト」と表示)
CPUコア2BがCLKNO=11でメモリアクセス(ライト)を実行すると、システムバス6にコマンド60、アドレス60、ライトデータ60が出力される(期間B1−2)。
10.冗長スレッドの実行においてメモリアクセスをする場合の動作
図10には、冗長スレッドの実行においてメモリアクセスが発生した場合のタイミング例が示されている。図面の表記方法については、図9を参照して頂きたい。
図10に示されているタイミング例は、CPUコア2Aのスレッド番号1とCPUコア2Bのスレッド番号1が冗長スレッドである場合を示している。また、このとき、CPUコア2AのCLKNO=2のDステージの命令は、スレッド番号1の冗長スレッドにおける命令で、メモリリードの命令であるとする。また、CLKNO=6のDステージの命令は、スレッド番号1の冗長スレッドにおける命令で、メモリライトの命令であるとする。一方、CPUコア2BのCLKNO=4のDステージの命令は、スレッド番号1の冗長スレッドにおける命令で、メモリリードの命令であるとする。CLKNO=9のDステージの命令は、スレッド番号1の冗長スレッドにおける命令で、メモリライトの命令であるとする。
(a)CPUコア2Aのメモリリード(図10では「CPUAリード」と表示)
図10において、CPUコア2AがCLKNO=4でメモリアクセス(リード)を実行すると、システムバス6にコマンド60、アドレス60を出力する(期間A1−1)。冗長スレッドの実行であるため、システムバス制御回路5は、アドレスバッファ50に、そのときのアドレスを登録する(期間A1−1)。CLKNO=5でシステムバス6のリードデータ61がCPUコア2Aに読み込まれ,スレッド番号1に対応するレジスタセット内のレジスタにライトバックされる(期間A1−1)。また、このとき、システムバス制御回路5は、リードデータバッファ51にリードデータを登録する(期間A1−1)。
(b)CPUコア2Bのメモリリード
CPUコア2BがCLKNO=6でメモリアクセス(リード)を実行すると、冗長スレッドの実行であるため、システムバス制御回路5は、CLKNO=6において形成されるアドレスとアドレスバッファ50(AB(50))に格納されているアドレスとの比較を比較回路53で実行する(期間1−1)。このとき、システムバス制御回路5は、システムバス6へのコマンド60、アドレス60の出力を行わない。CLKNO=7で、ライトデータバッファ51からのデータがCPUコア2Bに読み込まれ、スレッド番号1に対応するレジスタセット内のレジスタにライトバックされる。このように、冗長スレッドの実行において、メモリリードアクセスが発生した場合は、先行するスレッドのリードアクセスのみが実行され、そのリードデータを後行のスレッドに読み込ませることによりデータが同一となるようにできる。また、上記比較回路53における比較において、アドレスの比較結果が不一致の場合、システムバス制御回路5は、割り込みコントローラ10にシステムバスアクセスエラー信号55を出力する。
(c)CPUコア2Aのメモリライト(図10では「CPUAライト」と表示)
次に、CPUコア2AがCLKNO=8でメモリアクセス(ライト)を実行すると,冗長スレッドのため、システムバス制御回路5は、このときのアドレスをアドレスバッファ50に登録する(期間A1−2)。また、このとき、ライトすべきライトデータは、ライトデータバッファ52に登録する(期間A1−2)。
(d)CPUコア2Bのメモリライト
CPUコア2BがCLKNO=11でメモリアクセス(ライト)を実行すると、冗長スレッドのため、システムバス制御回路5は、このときのライトアドレスとアドレスバッファ50に格納されているアドレスとの比較を比較回路53で実施する(期間1−2)。また、システムバス制御回路5は、このときのライトデータとライトバッファ52に格納されているデータとの比較を比較回路53で実施する(期間1−2)。比較回路53による比較結果が一致の場合、次のCLKNO=12でシステムバス6にコマンド60、アドレス60、ライトデータ60を出力する(期間A1−2)。このように、冗長スレッドでのメモリライトは、先行するスレッドと後行のスレッドのアクセス情報(アドレス、ライトデータ)を比較した後で実行する。これにより、アドレスの不一致またはライトデータの不一致となるような不正なメモリライトを防ぐことができる。
11.冗長スレッド実行制御回路
(1)状態遷移
図11には、図1における冗長スレッド実行制御回路11の状態遷移の例が示されている。同図において、―N、−1、0、+1、+N等の状態は、冗長スレッドにおける命令の実行数の差(CPUコア2A―CPUコア2B)を意味する。同図において、CPUAはCPUコア2Aを、CPUBはCPUコア2Bを示している。図3において、TTR27にはスレッド番号0〜3に、それぞれスレッドのタイプを設定する旨を説明した。この実施の形態では、4つのスレッドを切り替えながら実行出来る。4つのスレッドの全てに対して、スレッドのタイプを冗長スレッドとして設定することも可能である。図11に示す遷移は、1つの冗長スレッドに対する遷移である。4つのスレッドに対して冗長スレッドを設定出来る様に、この実施の形態では、図11に示す状態遷移が、各スレッド毎に実行出来る様に、冗長スレッド実行制御回路11は構成されている。各スレッドにおいて、互いに異なる冗長スレッドを実行出来る様に、この状態遷移は互いに独立しているが、状態遷移の内容は互いに同じであるため、以下では1つの状態遷移について説明する。この実施の形態のように、スレッド毎に状態遷移を設けるのではなく、特定のスレッド(例えばスレッド番号0と1)に対してのみ冗長スレッドが設定出来る様に制限をすれば、状態遷移による管理を低減出来るので、小型化を図ることも可能である。
さて、図10では、冗長スレッドの実行に際して発生するメモリアクセスについて、バッファを用いた動作の説明をした。図10では述べていないが、バッファであるアドレスバッファ(AB)50、リードデータバッファ(RDB)51、ライトデータバッファ(WDB)52は、2つのCPUコアで冗長スレッドを実行する際に、該冗長スレッドにおける命令の実行数の差に応じた数だけ必要になる。
例えば、冗長スレッドにある第1のメモリアクセス命令をCPUコア2Aが実行し、続いて冗長スレッドにある別の第2のメモリアクセス命令をCPUコア2Aが実行し、その後で上記冗長スレッドにある上記第1のメモリアクセス命令をCPUコア2Bが実行する場合、CPUコア2AとCPUコア2Bとの間で命令の実行の数(命令実行数)に差が生じる。上記第1のメモリアクセス命令が、2つの冗長スレッドで同時に実行されれば、命令実行数が0であるが、上記の様に、第1のメモリアクセス命令が第1のスレッドで実行され、次に別の第2のメモリアクセス命令が第1のスレッドで実行され、その後で第1のメモリアクセス命令が第2のスレッドで実行される場合では、命令実行数の差が2となる。この様に命令実行数に差が生じると、上記第1の命令の実行結果の比較と、上記別の第2の命令の実行結果の比較とを実施出来る様にするためには、スレッド毎に、複数のアドレス及び複数のデータを格納しておくための、バッファが必要とされる。また、後の説明から理解されるであろうが、例えば上記第1のメモリアクセス命令が、CPUコア2AとCPUコア2Bで交互に実行されれば、命令実行数の差は1となる。
CPUコアがリセットされると、CPUコア2AとCPUコア2Bの冗長スレッドの実行数はいずれも0であり、実行数の差は0となる。これが図11の状態=0に相当する。図1において、CPUコア2Aのスレッド選択回路28から冗長スレッド実行信号281Aが出力されると状態は1増加し、図11の状態+1となる。この後、CPUコア2Bのスレッド選択回路28から冗長スレッド実行信号281Bが出力されると、状態は1減少し、図11において、状態+1から状態0へ変化する。すなわち、連続して冗長スレッド実行信号281Aと冗長スレッド実行信号281Bが出力されると、状態は+1へ変化した後、状態0へ戻り、変化しない。
同図において、状態の最小値−Nは、CPUコア2AがCPUコア2Bより冗長スレッドにおける命令実行数がNだけ少ないことを意味する。一方、状態の最大値+Nは、CPUコア2AがCPUコア2Bより冗長スレッドにおける命令実行がNだけ多いことを意味する。
図1の冗長スレッド実行制御回路11は、図11の遷移図に示されている様に、冗長スレッドにおける命令実行数の差が、上記最大値+N及び最小値−Nのいずれかに達したとき、冗長スレッド選択禁止信号110A或いは冗長スレッド選択禁止信号110Bを形成する様に構成される。これにより、冗長スレッドの実行において、命令実行数差が、上記最小値−Nに達した場合、冗長スレッド実行制御回路11はCPUコア2Bに冗長スレッド選択禁止信号110Bを出力する。一方、命令実行数差が、上記最大値Nに達した場合、冗長スレッド実行制御回路11はCPUコア2Aに冗長スレッド選択禁止信号110Aを出力する。冗長スレッド選択禁止信号110A、110Bが、CPUコア2A、2Bに供給されると、それぞれのCPUコア内のスレッド選択回路28は、冗長スレッドに割り当てられたスレッドの選択をしないようにする。
(2)N=1の場合の状態遷移
図12には、図11に示した状態遷移において、上記最大値+Nと最小値−Nを、1とした例の状態遷移が示されている。この場合、冗長スレッドにおける命令の実行数差が、2に達すると、上記冗長スレッド選択禁止信号110Aまたは冗長スレッド選択禁止信号110Bが、冗長スレッド実行制御回路11から出力される。これにより、CPUコア2AとCPUコア2Bの両者における冗長スレッドでの命令実行数は同じか、或いは1つだけ異なる様に制限される。すなわち、冗長スレッドにおける命令実行数の差は、1以内に制限される。
この様にすることにより、図1に示したシステムバス制御回路5内に設けるアドレスバッファ(AB)50、リードデータバッファ(RDB)51、ライトデータバッファ(WDB)52は、スレッド当たり、それぞれ1段で良くなり、半導体チップにおける回路面積の増加を抑制することが出来る。また、スレッド当たり1段で済むため、それを制御する構成についても簡素化を図ることが可能となる。上記冗長スレッド実行制御回路11は、冗長スレッドにおける命令実行数の差が所定値内になる様に、一方のCPUコアによる冗長スレッドの命令実行を制限するため、制限回路と見なすことも出来る。
図1では、図面を分かり易くするために、システムバス制御回路5が、アドレスバッファ50、リードデータバッファ51、ライトデータバッファ52、比較回路53を含む様に示されているが、より詳細には図21に示されている様に、それぞれが複数組のバッファ及び比較回路を含んでいる。すなわち、アドレスバッファ50、リードデータバッファ51、ライトデータバッファ52、比較回路53のそれぞれは、スレッドの数に対応した単位バッファ及び比較回路を含んでいる。例えば、スレッド番号0に対しては、単位アドレスバッファ(UAB)50A、単位リードデータバッファ(URDB)51A、単位ライトデータバッファ(UWDB)52A及び単位比較回路53Aが設けられており、他のスレッド番号1、2及び3に対しても単位バッファ及び単位比較回路が設けられている。
(3)N=1の場合の動作例
図13には、図12に示した状態遷移を達成する機能を有する冗長スレッド実行制御回路11の動作タイミングチャートが示されている。同図において、英数字2A及び2Bは、CPUコア2A及び2Bを示しており、数字11は実行制御回路11から出力される信号及び冗長スレッドにおける命令実行数を示している。また、同図において、Dはデコードステージを示しており、他の図面と同様に、デコードステージに入ったスレッドの番号も記載されている。この図からも理解される様に、スレッドは、スレッド番号0から3に順次実行される。
図13に示したタイミングチャートは、CPUコア2Aのスレッド番号1とCPUコア2Bのスレッド番号1が冗長スレッドである場合を示している。また、冗長スレッドの実行数は、最初は0であるとする。CLKNO=2で、CPUコア2Aが冗長スレッドの命令を実行すると、冗長スレッド実行信号(図13、図14、図16、図17、図18において「冗長スレッドA」と表示。)281Aが出力される。これにより、冗長スレッド実行制御回路11において冗長スレッド実行数は0から1になり、冗長スレッド実行制御回路11は、CPUコア2Aに対して冗長スレッド選択禁止信号(図13、図14、図16、図17、図18において「冗長スレッド選択禁止A」と表示。)110Aを出力する。CLKNO=6で、CPUコア2Aにおいて実行されるべきスレッドとしてスレッド番号1(冗長スレッド)が選択される。しかしながら、このとき、CPUコア2Aには冗長スレッド選択禁止信号110Aが供給されているため、CLKNO=6でのスレッドの実行は禁止される。実行が禁止されるため、スレッドが削除されたと見なすこともできる。すなわち、冗長スレッド選択禁止信号110Aにより、次のクロックサイクルで冗長スレッドが選択されるのが禁止される。同図では、CLKNOが2から6の間も、冗長スレッド選択禁止信号110Aが出力されているが、CLKNO=3、4、5、7で実行される様に割り当てられているスレッド番号2、3、0、2(非冗長スレッド)の選択に影響しない。これは、上述したTTR27に冗長スレッドを表す情報が設定されている場合のみ、冗長スレッド選択禁止信号110Aにより、スレッドの選択を禁止する様にすれば良い。この様にして、冗長スレッドであるため、CLKNO=6でのスレッド番号1の選択は禁止される。
次に、CLKNO=7において、CPUコア2Bが冗長スレッドを選択すると、冗長スレッド実行信号(図13、図14、図16、図17、図18において「冗長スレッドB」と表示。)281Bが、CPUコア2Bから出力される。この冗長スレッド実行信号281Bを受けて、冗長スレッド実行制御回路11における冗長スレッドでの命令実行数の差は0となり、冗長スレッド選択禁止信号110Aが取り下げられる。
次に、CLKNO=9でCPUコア2Bが冗長スレッドを選択すると、冗長スレッドでの命令実行数の差が−1となり、冗長スレッド実行制御回路11から冗長スレッド選択禁止信号(図13、図14、図16、図17、図18において「冗長スレッド選択禁止B」と表示。)110B)が出力される。CLKNO=11で、CPUコア2Bはスレッド番号1の冗長スレッドを選択しようとするが、冗長スレッド選択禁止信号110BによりCLKNO=11のスレッド番号1の選択が禁止される。この冗長スレッド禁止信号110Bによる冗長スレッドの禁止は、CPUコア2AがCLKNO=12でスレッド番号1を選択することにより、解除される。CPUコア2Bについても、CPUコア2Aと同様に、冗長スレッド選択禁止信号110Bが、CLKNO=10においても発行されているが、スレッド番号0は選択され、実行される。
(4)N=1の場合の変形動作例
図14には、上記冗長スレッド実行制御回路11及びスレッド選択回路28の他の動作タイミングチャートが示されている。冗長スレッド実行制御回路11は、CLKNO=6でCPUコア2Aのスレッド番号1の選択を禁止する。この禁止を受けて、スレッド選択回路28は、次に実行を予定しているスレッド番号2を前倒しして選択し、スレッド番号2を実行する。同様に、CLKNO=11でCPUコア2Bのスレッド番号1の選択を禁止し、次に実行を予定しているスレッド番号0を前倒しして実行する。この様にすれば、選択が禁止された冗長スレッドのパイプラインステージで、非冗長スレッドの命令を実行できるため、処理性能を向上させることができる。
(5)冗長スレッド選択禁止信号及び冗長スレッド実行信号の変形例
図1では、各CPUコアのそれぞれが4つのスレッドを実行出来、4つのスレッドに対して、1つの冗長スレッド選択禁止信号110A(110B)と、1つの冗長スレッド実行信号281A(281B)を用いる例が示されている。しかしながら、スレッドの1つに対して1つの冗長スレッド選択禁止信号110A(110B)と、1つの冗長スレッド実行信号281A(281B)を用いる様にしても良い。この場合には、4つのスレッドのそれぞれに対して、図11或いは図12に示した状態遷移を、独立に設け、独立に設けた状態遷移(図11、図12)に、そのスレッドに対応した1つの冗長スレッド実行信号が供給され、対応したスレッドに対して1つの冗長スレッド選択信号を供給する様にすれば良い。この様にすることにより、各スレッド毎の制御の簡略化を図ることが可能となる。例えば、1つの冗長スレッドを選択しないように、そのスレッドに対応する冗長スレッド選択信号が禁止を表しているとき、他のスレッドに対する冗長スレッド選択信号はスレッドの選択を許可する様に出来る。
(6)冗長スレッド実行制御回路の変形例
図15には、冗長スレッド実行制御回路の変形例が示されている。同図には、図11に示した状態遷移において、最大値+N及び最小値−Nを2とした場合の状態遷移が示されている。CPUコア2AとCPUコア2Bの冗長スレッドにおける命令の実行数は同じか、1或いは2だけ異なる。この場合、システムバス制御回路5内のアドレスバッファ50(AB)、リードデータバッファ51(RDB)、ライトデータバッファ52(WDB)は、それぞれ2段必要になる。命令実行数の差が、最小値−2と最大値+2だけでなく,−1と+1の場合も冗長スレッドの選択禁止信号110A、110Bを出力する。冗長スレッドの選択禁止信号110A、110Bは2サイクル後における冗長スレッドの選択を禁止する。冗長スレッド実行信号281A、281Bから冗長スレッド選択禁止までを2サイクルで実行すれば良いため、図12の状態遷移に比べて、上記制御を行うために必要な回路を、2サイクルのステージに分けて持つことができ、動作周波数を下げる要因であるクリティカルパスとなるのを回避できる。
図16には、図15に示した状態遷移を実現する冗長スレッド実行制御回路11の動作タイミングチャートが示されている。図13に示したタイミングチャートと比較することにより理解できるように、図15及び図16に示したこの例では、冗長スレッド選択禁止信号110A、110Bにより2サイクル後の冗長スレッドの選択が禁止される。図16では、冗長スレッドの選択禁止信号110Aが出力されているCLKNO=6においてもスレッドの実行は禁止されないことが示されている。
図17には、上記冗長スレッド実行制御回路11及びスレッド選択回路28の他の動作タイミングチャートが示されている。図14に示した動作タイミングチャートの説明から理解される様に、冗長スレッドの選択を禁止したステージで、次に実行を予定しているスレッドが前倒しして実行される。
(7)冗長スレッドで例外が発生した場合
図18には、冗長スレッドで例外が発生した場合の冗長スレッド実行制御回路11の動作タイミングチャートが示されている。例外としては、未定義命令、0除算(除算命令の実行において割る数が0)、メモリエラー(パリティまたはECCなどの検査情報が付加されたメモリで、リードの際の検査でエラーが発生)などがある。例外の発生は、CPUコアに依存する。そのため、冗長スレッドの実行中に例外が発生したとしても、その例外に対する例外処理は、例外が発生したCPUコアのみで実行される。ここでは、CPUコア2Aが、CLKNO=2のスレッド番号1(冗長スレッド)で例外が発生し、CLKNO=6のスレッド番号1は例外処理であるとする。CLKNO=2で冗長スレッドが選択されるため、冗長スレッドにおける命令実行数が+1となり、CPUコア2Aは冗長スレッドの選択が禁止となる(図13の説明参照)。例外処理は、一方のCPUコアで実行される処理であるため、複数のスレッドで同じ処理を行う冗長スレッドではなく、非冗長スレッドみなされ、実行される。すなわち、CLKNO=6のスレッドは非冗長スレッドとされて、CLKNO=6のスレッドで例外処理が実行される。例外処理であるため、TTR27の設定も変更せず、冗長スレッド実行信号281Aも出力されない。例外処理が終了し,CLKNO=12でスレッド番号1を冗長スレッドとして実行するため,冗長スレッド実行信号281Aを出力する。このように、冗長スレッドの例外処理を実行することができる。例外が発生した際にも診断が可能となる。図18では、例外処理が1サイクルで終了するように示されているが、その終了までに複数サイクルを要する場合もある。この場合には、CLKNO=12のスレッドも非冗長スレッドとされ、例外処理が実行される。
(8)冗長スレッドで割り込みが発生した場合
図19には、冗長スレッドで割り込みが発生した場合の冗長スレッド実行制御回路11の動作タイミングチャートが示されている。割り込みとしては、A/D変換器(周辺モジュール8A)やタイマ(周辺モジュール8Z)などの周辺モジュールからの割り込み、マイクロコントローラ1の外部端子からの割り込みがある。割り込み処理をCPUコア2A及びCPUコア2Bのそれぞれの冗長スレッドで実行させるために、割り込み要求は、CPUコア2AとCPUコア2Bとが、同一命令となったときに、受け付ける様にする。この様な冗長スレッドの選択及び制御を実行するために、冗長スレッド実行制御回路11には、次のような動作を実行する制御回路が設けられる。冗長スレッド実行制御回路11から出力される冗長スレッド割込禁止信号(図19においては「冗長スレッド割込禁止」と表示。)110A、110Bは、冗長スレッドにおける命令の実行数差と冗長スレッド割込要求信号(図19においては「冗長スレッド割込要求」と表示。)101に基づいて形成される。すなわち、命令の実行数差=0で、冗長スレッド割込要求信号101=0のとき、冗長スレッド割込禁止信号110A、110Bが0となるようにし、命令の実行数差≠0で、冗長スレッド割込要求信号101=0のときに、冗長スレッド割込禁止信号110A、110Bが1になる様にする。また、命令の実行数差=0で、冗長スレッド割込要求信号101=1で、冗長スレッド割込禁止信号110A、110Bが0になり、ここでCPUコア2AとCPUコア2Bが、冗長スレッドで、割り込みを受け付け可能になる様にする。この後、冗長スレッド割込禁止信号110A、110Bは、冗長割込要求信号101が0になるまで、0の状態を維持する様にする。
上述した構成により、CLKNO=2でCPUコア2Aが冗長スレッドを選択し、冗長スレッドにおける命令実行数が+1になると、冗長スレッド割込禁止信号110A,110Bが出力される(1となる)。次にCLKNO=4において、冗長スレッドでの割込要求信号101が、割り込みコントローラ10から出力されるが、命令実行数差が0でないため、この割り込みは受け付けられない。CLKNO=7でCPUコア2Bが冗長スレッドを選択すると、冗長スレッドにおける命令の実行数差が0になり、冗長スレッド実行制御回路11は、冗長スレッド割込禁止信号110A,110Bを取り下げる(0にする)。冗長スレッド割込禁止信号110A、110Bの取り下げにより、CLKNO=9でCPUコア2Bが冗長スレッドを選択し,割り込みを受け付ける。一方、CLKNO=12でCPUコア2Aが冗長スレッドを選択し、割り込みを受け付ける。このようにすることで、冗長スレッドが同一の命令で割り込みを受け付けできるようになる。割り込みが発生した際にも診断が可能となる。
≪実施の形態2≫
図20には、上記実施の形態1で説明したマイクロコントローラが用いられたシステムの例が示されている。この例は、故障検出機能を持つマルチスレッディングのマイクロコントローラを搭載した電子制御装置を使用した自動車である。自動車12において、モータ13を制御する電子制御装置15内に上記図1に示したマイクロコントローラ1が搭載されている。マイクロコントローラ1に設けられた周辺モジュールであるタイマ(周辺モジュール8Z)からの出力はドライバ17で増幅され、インバータ14を介してモータ13を駆動する。マイクロコントローラ1の故障検出機能がCPUコアの異常を検出すると、それをマイクロコントローラ1に設けられた外部端子から、電子制御装置15に設けられた安全装置18を動作させる。安全装置18の構成は、システムである自動車に依存するが、例えばダッシュボードに故障を示すアラームを表示することが考えられる。あるいは、インバータ14を駆動するマイクロコントローラ1の上記タイマを停止するという方法が考えられる。さらには、マイクロコントローラ1を更に2重化して同一の処理を実行させ、ドライバ17へのタイマの出力を切り替えられるように電子制御装置15を構成する方法も考えられる。特に制限されないが、同図において、バッテリ16はインバータ14へ電源を供給する。
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
1 マイクロコントローラ
2A CPUコア
2B CPUコア
3 命令メモリ
5 システムバス制御回路
11 冗長スレッド実行制御回路
26 レジスタ
27 レジスタ

Claims (15)

  1. それぞれがソフトウエアの実行単位である複数のスレッドを、クロックに同期して切り替えながら実行する半導体集積回路装置であって、
    上記複数のスレッドのうち、第1スレッドの実行において用いられる第1レジスタと、
    上記複数のスレッドのうち、上記第1スレッドとは異なる第2スレッドの実行において用いられる第2レジスタと、
    上記第1及び第2スレッドが、互いに同じ特定ソフトウエアの実行単位で有るとき、上記第1スレッドの実行の結果と上記第2スレッドの実行の結果とを比較する比較回路と
    を具備し、上記第1レジスタは上記第2レジスタとは異なるレジスタである半導体集積回路装置。
  2. 上記複数のスレッドから、上記第1及び第2スレッドを指定する第3レジスタを具備する請求項1の半導体集積回路装置。
  3. 上記第1スレッドにおける命令の実行数と、上記第2スレッドにおける命令の実行数との差が所定の値になる様に、上記第1スレッド又は上記第2スレッドの実行を制限する第1制限回路を具備する請求項2の半導体集積回路装置。
  4. 上記第1スレッドの実行において、例外が発生したとき、上記第2スレッドの実行を制限する第2制限回路を具備する請求項3の半導体集積回路装置。
  5. 上記第1スレッドの実行において、割込要求が発生した場合、上記第1スレッドにおける命令の実行数と上記第2スレッドにおける命令の実行数とが所定の関係の場合に、上記割込要求を受け付ける請求項3又は4の半導体集積回路装置。
  6. 上記第1スレッドと上記第2スレッドとを同一のCPUコアで実行する請求項1の半導体集積回路装置。
  7. それぞれがソフトウエアの実行単位である複数のスレッドの切り替えながら動作する半導体集積回路装置であって、
    上記複数のスレッドのうち、2つのスレッドが、メモリへアクセスする特定ソフトウエアとされ、
    メモリアクセスに関するアドレスを記憶する第1バッファと、
    メモリアクセスにより得られたリードデータを記憶する第2バッファと、
    メモリアクセスのアドレスを上記第1バッファに記憶されているアドレスと比較する第1比較回路とを具備し、
    上記2つのスレッドのうち、第1スレッドにおいてメモリへのリードアクセスが行われた場合、リードアクセスに関するアドレスを上記第1バッファに記憶し、
    上記2つのスレッドのうち、第2スレッドにおいて上記メモリへリードアクセスが行われる場合、そのアドレスと上記第1バッファに記憶されているアドレスとを上記第1比較回路で比較し、
    上記第1比較回路からの不一致に応答して、故障に対応した処理を発生する半導体集積回路装置。
  8. 上記第1比較回路からの一致に応答して、上記第2バッファに記憶されているリードデータを、上記第2スレッドのリードアクセスに応じたリードデータとする請求項7の半導体集積回路装置。
  9. メモリへのライトすべきデータを記憶する第3バッファと、
    メモリへのライトすべきデータを上記第3バッファに記憶されているデータと比較する第2比較回路と
    を具備し、
    上記第1スレッドにおいて上記メモリへのライトアクセスが行なわれる場合、上記ライトアクセスに関するアドレスを上記第1バッファに、ライトすべきデータを第3バッファに記憶し、
    上記第2スレッドにおいて上記メモリへのライトアクセスが行なわれる場合、そのアドレスと上記第1バッファに記憶されているアドレスとを上記第1比較回路で比較し、ライトすべきデータと上記第3バッファに記憶されているデータとを第2比較回路で比較し、
    上記第1比較回路及び上記第2比較回路のうちの少なくとも一つからの不一致に応答して故障に対応する処理を行う請求項8の半導体集積回路装置。
  10. 上記第1比較回路と上記第2比較回路からの一致に応答して、上記第1バッファに記憶されているアドレスに従った上記メモリのアドレスに、上記第3バッファに記憶されているデータがライトされる請求項9の半導体集積回路装置。
  11. 上記第1スレッドと上記第2スレッドとを1つのCPUコアで実行する請求項7の半導体集積回路装置。
  12. それぞれがソフトウエアの実行単位である複数のスレッドを切り替えながら動作する半導体集積回路装置であって、
    上記複数のスレッドのうち、2つのスレッドがメモリへアクセスする同じソフトウエアとされ、
    メモリアクセスに関するアドレスを記憶する第1バッファと、
    メモリへライトすべきデータを記憶する第3バッファと、
    メモリアクセスのアドレスを上記第1バッファに記憶されているアドレスと比較する第1比較回路と、
    メモリへライトすべきデータを上記第3バッファに記憶されているデータと比較する第2比較回路と
    を具備し、
    上記2つのスレッドのうち、第1スレッドにおいて上記メモリへライトアクセスが行なわれる場合、上記ライトアクセスに関するアドレスを第1バッファに記憶し、ライトすべきデータを第3バッファに記憶し、
    上記2つのスレッドのうち、第2スレッドにおいて上記メモリへライトアクセスが行なわれる場合、そのアドレスと上記第1バッファに記憶されているアドレスとを上記第1比較回路で比較し、そのライトすべきデータと上記第3バッファに記憶されているライトデータとを上記第2比較回路で比較し、
    上記第1比較回路及び上記第2比較回路のうちの少なくとも一つからの不一致に応答して故障に対応する処理を行う半導体集積回路装置。
  13. 上記第1比較回路と上記第2比較回路とからの一致に応答して、上記第1バッファに記憶されているライトアドレスに従った上記メモリのアドレスに、上記第3バッファに記憶されているライトデータがライトされる請求項12の半導体集積回路装置。
  14. 上記第1スレッドと上記第2スレッドとを同一のCPUコアで実行する請求項12の半導体集積回路装置。
  15. 上記請求項1、7又は12の半導体集積回路装置を具備したシステム
JP2012064785A 2012-03-22 2012-03-22 半導体集積回路装置及びそれを用いたシステム Active JP5850774B2 (ja)

Priority Applications (4)

Application Number Priority Date Filing Date Title
JP2012064785A JP5850774B2 (ja) 2012-03-22 2012-03-22 半導体集積回路装置及びそれを用いたシステム
US13/796,304 US9063907B2 (en) 2012-03-22 2013-03-12 Comparison for redundant threads
EP13159868.2A EP2642392B1 (en) 2012-03-22 2013-03-19 Semiconductor integrated circuit device and system using the same
US14/704,589 US20150234661A1 (en) 2012-03-22 2015-05-05 Semiconductor integrated circuit device and system using the same

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012064785A JP5850774B2 (ja) 2012-03-22 2012-03-22 半導体集積回路装置及びそれを用いたシステム

Publications (2)

Publication Number Publication Date
JP2013196542A JP2013196542A (ja) 2013-09-30
JP5850774B2 true JP5850774B2 (ja) 2016-02-03

Family

ID=47997049

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012064785A Active JP5850774B2 (ja) 2012-03-22 2012-03-22 半導体集積回路装置及びそれを用いたシステム

Country Status (3)

Country Link
US (2) US9063907B2 (ja)
EP (1) EP2642392B1 (ja)
JP (1) JP5850774B2 (ja)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6029737B2 (ja) * 2013-02-15 2016-11-24 三菱電機株式会社 制御装置
US9251014B2 (en) * 2013-08-08 2016-02-02 International Business Machines Corporation Redundant transactions for detection of timing sensitive errors
GB2521155B (en) 2013-12-10 2021-06-02 Advanced Risc Mach Ltd Configuring thread scheduling on a multi-threaded data processing apparatus
GB2521151B (en) * 2013-12-10 2021-06-02 Advanced Risc Mach Ltd Configurable thread ordering for a data processing apparatus
JP6302775B2 (ja) * 2014-07-07 2018-03-28 株式会社日立製作所 制御装置及びその制御方法
GB2537942B (en) * 2015-05-01 2017-06-14 Imagination Tech Ltd Fault tolerant processor for real-time systems
JP6819061B2 (ja) * 2016-03-28 2021-01-27 日本電気株式会社 情報処理装置、プロセス切り替え方法及びプログラム
US10002057B2 (en) 2016-06-03 2018-06-19 Nxp Usa, Inc. Method and apparatus for managing mismatches within a multi-threaded lockstep processing system
US10013240B2 (en) 2016-06-21 2018-07-03 Advanced Micro Devices, Inc. Fingerprinting of redundant threads using compiler-inserted transformation code
JP7141942B2 (ja) * 2018-12-18 2022-09-26 ルネサスエレクトロニクス株式会社 半導体装置および電子制御装置
EP3779699B1 (en) * 2019-08-16 2024-06-05 Aptiv Technologies AG Method for checking program execution of a microcontroller, external device, system and non-transitory computer readable medium
CN111459544B (zh) * 2020-03-03 2022-10-28 北京和利时系统工程有限公司 安全计算机板卡中多对线程数据表决方法、介质和装置

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4965717A (en) * 1988-12-09 1990-10-23 Tandem Computers Incorporated Multiple processor system having shared memory with private-write capability
US6792525B2 (en) * 2000-04-19 2004-09-14 Hewlett-Packard Development Company, L.P. Input replicator for interrupts in a simultaneous and redundantly threaded processor
US6854075B2 (en) * 2000-04-19 2005-02-08 Hewlett-Packard Development Company, L.P. Simultaneous and redundantly threaded processor store instruction comparator
US6915395B1 (en) * 2000-05-03 2005-07-05 Sun Microsystems, Inc. Active address content addressable memory
US7308607B2 (en) * 2003-08-29 2007-12-11 Intel Corporation Periodic checkpointing in a redundantly multi-threaded architecture
US20050193283A1 (en) * 2003-12-30 2005-09-01 Reinhardt Steven K. Buffering unchecked stores for fault detection in redundant multithreading systems using speculative memory support
US7444497B2 (en) * 2003-12-30 2008-10-28 Intel Corporation Managing external memory updates for fault detection in redundant multithreading systems using speculative memory support
US7178005B1 (en) 2004-06-30 2007-02-13 Sun Microsystems, Inc. Efficient implementation of timers in a multithreaded processor
US7321989B2 (en) * 2005-01-05 2008-01-22 The Aerospace Corporation Simultaneously multithreaded processing and single event failure detection method
JP5013309B2 (ja) * 2006-08-18 2012-08-29 日本電気株式会社 フォールトトレラントコンピュータ、そのトランザクション同期制御方法
US20080244354A1 (en) * 2007-03-28 2008-10-02 Gansha Wu Apparatus and method for redundant multi-threading with recovery
US8086825B2 (en) * 2007-12-31 2011-12-27 Advanced Micro Devices, Inc. Processing pipeline having stage-specific thread selection and method thereof
US8082425B2 (en) * 2009-04-29 2011-12-20 Advanced Micro Devices, Inc. Reliable execution using compare and transfer instruction on an SMT machine
JP4886826B2 (ja) 2009-08-24 2012-02-29 インターナショナル・ビジネス・マシーンズ・コーポレーション フォールト・トレラント・コンピュータ・システム、方法及びプログラム

Also Published As

Publication number Publication date
US9063907B2 (en) 2015-06-23
US20150234661A1 (en) 2015-08-20
JP2013196542A (ja) 2013-09-30
EP2642392B1 (en) 2014-12-24
US20130254592A1 (en) 2013-09-26
EP2642392A1 (en) 2013-09-25

Similar Documents

Publication Publication Date Title
JP5850774B2 (ja) 半導体集積回路装置及びそれを用いたシステム
JP5693712B2 (ja) 半導体集積回路
US10365979B2 (en) Lockstepped CPU selection based on failure status
TWI651652B (zh) 汽車用的控制裝置
JP4996654B2 (ja) プロセッサ
US9229830B2 (en) Semiconductor integrated circuit device and microcontroller
JP2011513843A (ja) 実行装置内のデータ転送のシステムおよび方法
JP6005392B2 (ja) ルーティングのための方法及び装置
JP5142868B2 (ja) キャッシュメモリ制御回路及びプロセッサ
JP4865016B2 (ja) プロセッサ
JP2010198327A (ja) マイクロコントローラおよび電子制御装置
JP5292706B2 (ja) コンピュータシステム
JP4985452B2 (ja) ベクトル処理装置
JP2009175960A (ja) 仮想マルチプロセッサシステム
US20150052307A1 (en) Processor and control method of processor
US10733125B2 (en) Microcomputer
US20150220415A1 (en) Semiconductor device and control method thereof
US9342359B2 (en) Information processing system and information processing method
JP3476314B2 (ja) マイクロプロセッサ
JP2008146188A (ja) 集積回路
JP2010033323A (ja) マルチプロセッサ及びそれをデバッグするデバッグ装置並びに前記マルチプロセッサをデバッグするデバッグ方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140828

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20150731

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150806

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150929

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20151112

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20151201

R150 Certificate of patent or registration of utility model

Ref document number: 5850774

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150