以下、図面を参照しながら、好適な実施の形態について説明する。以下の実施の形態に示す具体的な数値などは、実施の形態の理解を容易とするための例示にすぎず、特に断る場合を除き、それに限定されるものではない。また、以下の記載及び図面では、説明の明確化のため、当業者にとって自明な事項などについては、適宜、省略及び簡略化がなされている。
<実施の形態1>
図1を参照して、実施の形態1に係る半導体装置1の構成について説明する。図1に示すように、半導体装置1は、CPUクラスタ10と、BISTコントローラ11と、クロックコントローラ12と、リセットコントローラ13と、割り込みコントローラ14と、タイマ15と、DDR(Double-Data-Rate)コントローラ16と、外部バスコントローラ17と、リセットマスク回路18と、割り込みマスク回路19と、内蔵メモリ50とを有する。
CPUクラスタ10と、割り込みコントローラ14と、DDRコントローラ16と、外部バスコントローラ17と、内蔵メモリ50は、システムバスを介して相互に接続されている。BISTコントローラ11と、クロックコントローラ12と、リセットコントローラ13と、タイマ15とは、ローカルバスを介して相互に接続されている。また、システムバスと、ローカルバスは、接続されている。
CPUクラスタ10は、他の回路11〜17と協働して半導体装置1としての処理を実行する回路である。CPUクラスタ10は、複数のCPU100〜103と、複数のBISTコントローラ110〜113と、共通回路120とを有する。
CPU100〜103のそれぞれは、CPUクラスタ10が実行する処理を分担して実行する回路である。CPU100〜103のそれぞれは、DDRメモリ20、メモリ21、及び、内蔵メモリ50に格納されたデータを使用して、その処理を実行する。このデータには、CPU100〜103のそれぞれに、その処理を実行させる複数の命令を含むプログラムが含まれる。また、CPU100〜103のそれぞれは、その処理の実行に応じて、DDRメモリ20、メモリ21、及び、内蔵メモリ50に格納されたデータを更新する。
BISTコントローラ110〜113のそれぞれは、BISTコントローラ11からの制御に応じて、CPU100〜103のそれぞれのランタイムテストを実行する回路である。BISTコントローラ110は、CPU100のランタイムテストを実行し、BISTコントローラ111は、CPU101のランタイムテストを実行し、BISTコントローラ112は、CPU102のランタイムテストを実行し、BISTコントローラ113は、CPU103のランタイムテストを実行する。
共通回路120は、CPUクラスタ10による処理の実行に際して、CPU100〜103で共通利用される回路である。CPU100〜103のそれぞれは、CPUクラスタ10とシステムバスを介して接続される割り込みコントローラ14、DDRコントローラ16、外部バスコントローラ17、及び内蔵メモリ50に対して、共通回路120を介してアクセスする。また、CPU100〜103のそれぞれは、CPUクラスタ10とシステムバス及びローカルバスを介して接続されるBISTコントローラ11、クロックコントローラ12、リセットコントローラ13、及び、タイマ15に対して、共通回路120を介してアクセスする。
BISTコントローラ11は、CPUクラスタ10のランタイムテストの実行を制御する回路である。より具体的には、BISTコントローラ11は、BISTコントローラ110〜113のそれぞれによるCPU100〜103のそれぞれのランタイムテストの実行を制御する。よって、BISTコントローラ11は、マスタとして機能し、BISTコントローラ110〜113のそれぞれは、スレーブとして機能する。
クロックコントローラ12は、クロック信号を生成して、半導体装置1に含まれる各回路10、11、13〜19、50に供給する回路である。
リセットコントローラ13は、CPUクラスタ10をリセットする回路である。より具体的には、リセットコントローラ13は、CPU100〜103及び共通回路120のそれぞれをリセットする。リセットコントローラ13は、CPU100〜103及び共通回路120のうち、いずれかの回路をリセットする場合、その回路にリセット信号を出力する。CPU100〜103及び共通回路120のそれぞれは、リセットコントローラ13からのリセット信号の入力に応じてリセットされる。
割り込みコントローラ14は、半導体装置1内の回路が各CPU100〜103に対して発生させた割り込み及び外部からの割り込みを、各CPU100〜103に通知する回路である。より具体的には、割り込みコントローラ14は、半導体装置1内の回路及び外部からの割り込み信号の入力に応じて、その割り込み信号の通知先として設定されたCPUに対して割り込み信号を出力する。
タイマ15は、時間の経過を計測し、CPUクラスタ10に対してランタイムテストの実行タイミングを割り込みによって通知する回路である。より具体的には、タイマ15は、ランタイムテストの実行タイミングとなる毎に、割り込み信号を割り込みコントローラ14に出力する。割り込みコントローラ14は、この割り込み信号に応じて、割り込みの通知先として予め設定されたCPUに対して割り込み信号を出力する。
DDRコントローラ16は、半導体装置1の外部のDDRメモリ20と接続される。DDRコントローラ16は、半導体装置1内の回路からDDRメモリ20に対するアクセスを制御する。例えば、DDRコントローラ16は、CPUクラスタ10からのデータのリード要求に応じて、DDRメモリ20からデータを読み出し、CPUクラスタ10に出力する。また、例えば、DDRコントローラ16は、CPUクラスタ10からのデータのライト要求に応じて、CPUクラスタ10から出力されたデータをDDRメモリ20に書き込む。
外部バスコントローラ17は、半導体装置1の外部のメモリ21と接続される。外部バスコントローラ17は、半導体装置1内の回路からメモリ21に対するアクセスを制御する。例えば、外部バスコントローラ17は、CPUクラスタ10からのデータのリード要求に応じて、メモリ21からデータを読み出し、CPUクラスタ10に出力する。また、例えば、外部バスコントローラ17は、CPUクラスタ10からのデータのライト要求に応じて、CPUクラスタ10から出力されたデータをメモリ21に書き込む。
リセットマスク回路18は、リセットコントローラ13からCPU100〜103及び共通回路120のそれぞれに対するリセットを抑止する回路である。CPU100〜103及び共通回路120のそれぞれについてリセットを抑止するか否かは、リセットマスク回路18に対して任意に設定することができる。この設定は、リセットコントローラ13が有する制御レジスタ(図示せず)に対して、リセットを抑止するか否かを示す値を設定することで行われる。また、その設定も、CPU100〜103のそれぞれから、任意のタイミングで変更することが可能である。リセットマスク回路18は、制御レジスタの値に基づいて、CPU100〜103及び共通回路120のうち、リセットを抑止すると設定されている回路に対するリセットコントローラ13からのリセット信号をマスク(遮断)することで、その回路のリセットを抑止する。
割り込みマスク回路19は、割り込みコントローラ14からCPU100〜103のそれぞれに対する割り込みを抑止する回路である。CPU100〜103のそれぞれについて割り込みを抑止するか否かは、割り込みマスク回路19に対して任意に設定することができる。この設定は、クロックコントローラ12が有する制御レジスタ(図示せず)に対して、割り込みを抑止するか否かを示す値を設定することで行われる。また、その設定も、CPU100〜103のそれぞれから、任意のタイミングで変更することが可能である。割り込みマスク回路19は、制御レジスタの値に基づいて、CPU100〜103のうち、割り込みを抑止すると設定されているCPUに対する割り込みコントローラ14からの割り込み信号をマスク(遮断)することで、その回路に対する割り込みを抑止する。
DDRメモリ20と、メモリ21と、内蔵メモリ50は、各種データが格納される。DDRメモリ20と、メモリ21と、内蔵メモリ50は、例えば、上述したように、CPU100〜103のそれぞれによって使用及び更新されるデータが格納される。
続いて、図2を参照して、実施の形態1に係るランタイムテストの実行タイミングについて説明する。ISO26262の規定では、異常発生からそのリカバリに必要な時間であるフォールトトレラント時間間隔(Fault Tolerant Time Interval:FTTI)を確保するために、診断テスト間隔(Diagnostic Test Interval:DTI)で診断を行う必要があると定められている。
そのため、CPUクラスタ10は、半導体装置1の起動後に、ランタイムテストの実行タイミングをDTI毎に通知するようにタイマ15を設定する。すなわち、CPUクラスタ10は、DTI毎に割り込み信号を出力するようにタイマ15を設定する。より具体的には、この設定は、CPU100〜103のうち、いずれかのCPUによって行われる。タイマ15を設定するCPUは、例えば、予め定めるようにしてもよい。なお、FTTI及びDTIは、システム開発者によって予め任意の値を定めることができる。
続いて、図3及び図4を参照して、実施の形態1に係るCPUクラスタ10のより詳細な構成について説明する。図3に示すように、CPU100は、L1キャッシュコントローラ114と、L1キャッシュメモリ115と、分岐履歴メモリ(ブランチヒストリーテーブル)116とを有する。なお、図3では、CPU100〜103のうち、CPU100の構成のみを代表的に図示している。すなわち、CPU101〜103の構成も、CPU100と同様であるため、図示及びその説明を省略する。
L1キャッシュコントローラ114は、CPU100に対しメモリ21へのデータのリード処理及びライト処理を制御するとともに、L1キャッシュメモリ115を管理する回路である。L1キャッシュコントローラ114は、CPU100がその処理に利用するためにメモリ21からリードしようとしたデータがL1キャッシュメモリ115に格納されている場合、L1キャッシュメモリ115からそのデータを取得する。
一方、L1キャッシュコントローラ114は、CPU100がメモリ21からリードしようとしたデータがL1キャッシュメモリ115に格納されていない場合、そのデータのリードを共通回路120に対して要求することで、そのデータを共通回路120のL2キャッシュメモリ124、他のCPU101〜103のL1キャッシュメモリ115、又はメモリ21から取得する。より具体的には、L1キャッシュコントローラ114は、メモリ21からのデータのリードを要求するリード要求信号を共通回路120に出力する。共通回路120は、このリード要求信号に応じて、リードが要求されたデータを、L2キャッシュメモリ124、他のCPU101〜103のL1キャッシュメモリ115、又はメモリ21から取得し、そのデータを含むリード応答信号をCPU100に出力する。L1キャッシュコントローラ114は、共通回路120からのリード応答信号に含まれるデータをL1キャッシュメモリ115に格納する。また、CPU100は、このデータを利用して処理を実行する。
L1キャッシュコントローラ114は、CPU100がメモリ21に対してデータをライトしようとした場合、そのデータをL1キャッシュメモリ115に格納する。このデータは、任意のタイミングでL1キャッシュメモリ115からメモリ21に対してフラッシュされる。より具体的には、L1キャッシュコントローラ114は、メモリ21に対するデータのライトを要求するライト要求信号を共通回路120に出力する。このライト要求信号には、メモリ21に対してライトを要求するデータが含まれる。共通回路120は、このライト要求信号に応じて、ライトが要求されたデータをL2キャッシュメモリ124及びメモリ21に格納するための制御を行う。
L1キャッシュメモリ115は、上述したように、メモリ21に格納されるデータが一時的にキャッシュされる記憶回路である。
分岐履歴メモリ116は、CPU100が実行するプログラムにおいて過去に実行した分岐命令に従って分岐処理が行われたか否かの履歴を示す情報が格納される。すなわち、CPU100は、分岐命令を実行したときに、その分岐命令の履歴を分岐履歴メモリ116に格納する。この履歴は、例えば、分岐命令のアドレスと、その分岐命令に従って分岐したか否かを示す。CPU100は、ある分岐命令の分岐先を予測する場合、分岐履歴メモリ116に格納された履歴のうち、その分岐命令と同じアドレスを示す分岐命令の履歴に基づいて分岐先を予測する。
また、図3に示すように、共通回路120は、BISTコントローラ121と、初期化マスク回路122と、L2キャッシュコントローラ123と、L2キャッシュメモリ124と、スヌープ制御ユニット(SCU)125と、SCUタグRAM(Random Access Memory)126と、アクセス履歴メモリ127とを有する。
BISTコントローラ121は、BISTコントローラ11からの制御に応じて、共通回路120のランタイムテストを実行する回路である。BISTコントローラ121は、BISTコントローラ110〜113と同様に、スレーブとして機能する。
初期化マスク回路122は、共通回路120のランタイムテストを実行するときにおける、L2キャッシュメモリ124及びSCUタグRAM126に対するデータの書き込みを抑止する回路である。
L2キャッシュコントローラ123は、CPU100からのメモリ21へのデータのリード処理及びライト処理を制御するとともに、L2キャッシュメモリ124を管理する回路である。L2キャッシュコントローラ123は、CPU100からメモリ21に対してデータのリードが要求された場合、後述するようにスヌープ制御ユニット125によって、他のCPU101〜103のL1キャッシュメモリ115から、そのデータの取得を試みる。L2キャッシュコントローラ123は、スヌープ制御ユニット125によってデータが取得できなかった場合、L2キャッシュメモリ124からそのデータを取得する。
一方、L2キャッシュコントローラ123は、CPU100からリードが要求されたデータが、L2キャッシュメモリ124、スヌープ制御ユニット125のいずれからも取得できなかった場合、そのデータのリードを外部バスコントローラ17に対して要求することで、そのデータをメモリ21から取得する。より具体的には、L2キャッシュコントローラ123は、メモリ21からのデータのリードを要求するリード要求信号を、システムバスを介して外部バスコントローラ17に出力する。外部バスコントローラ17は、このリード要求信号に応じて、メモリ21から取得したデータを含むリード応答信号を、システムバスを介して共通回路120に出力する。L2キャッシュコントローラ123は、このリード応答信号に含まれるデータを取得する。
L2キャッシュコントローラ123は、L2キャッシュメモリ124、メモリ21、もしくは、スヌープ制御ユニット125から取得したデータを、要求元のCPU100に出力する。より具体的には、L2キャッシュコントローラ123は、取得したデータを含むリード応答信号を、要求元のCPU100に出力する。
L2キャッシュコントローラ123は、CPU100からメモリ21に対してデータのライトが要求された場合、そのデータをL2キャッシュメモリ124に格納する。このデータは、任意のタイミングでL2キャッシュメモリ124からメモリ21に対してフラッシュされる。より具体的には、L2キャッシュコントローラ123は、メモリ21に対するそのデータのライトを要求するライト要求信号を、システムバスを介して外部バスコントローラ17に出力する。外部バスコントローラ17は、このライト要求信号に応じて、そのライト要求信号に含まれるデータをメモリ21に格納する。
L2キャッシュメモリ124は、上述したように、メモリ21に格納されるデータが一時的にキャッシュされる記憶回路である。L2キャッシュメモリ124は、L1キャッシュメモリ115よりも下位レベルのメモリとなる。
スヌープ制御ユニット125は、複数のCPU100〜103間におけるL1キャッシュメモリ115のキャッシュコヒーレンシを、スヌープ方式で保証する制御を行う。
スヌープ制御ユニット125は、CPU100からリードが要求されたデータが、そのリードを要求したCPU100以外のCPU101〜103のいずれかのL1キャッシュメモリ115に格納されているか否かを判定する。スヌープ制御ユニット125は、リードを要求したCPU100以外のCPU101〜103のL1キャッシュメモリ115にデータが格納されていると判定した場合、該CPUに対してそのデータを要求する。より具体的には、スヌープ制御ユニット125は、そのL1キャッシュメモリ115を有するCPUに対して、そのデータを要求するスヌープ要求信号を出力する。該CPUのL1キャッシュコントローラ114は、そのスヌープ要求信号に応じて、そのスヌープ要求信号で要求されたデータをL1キャッシュメモリ115から取得し、そのデータを含むスヌープ応答信号を共通回路120に出力する。スヌープ制御ユニット125は、そのスヌープ応答信号に含まれるデータを取得する。
また、スヌープ制御ユニット125は、CPU100からライトが要求されたデータが、そのライトを要求したCPU100以外のCPU101〜103のいずれかのL1キャッシュメモリ115に格納されているか否かを判定する。スヌープ制御ユニット125は、ライトを要求したCPU100以外のCPU101〜103のL1キャッシュメモリ115にデータが格納されていると判定した場合、該CPUに対して、そのデータの無効化を要求する。より具体的には、スヌープ制御ユニット125は、そのL1キャッシュメモリ115を有するCPUに対して、そのデータの無効化を要求するスヌープ要求信号を出力する。該CPUのL1キャッシュコントローラ114は、そのスヌープ要求信号に応じて、L1キャッシュメモリ115において、スヌープ要求信号で無効化が要求されたデータを無効化する。すなわち、このデータは、L1キャッシュメモリ115から削除され、L1キャッシュメモリ115には格納されていない扱いとなる。
SCUタグRAM126は、CPU100〜103のL1キャッシュメモリ115に格納されているデータのそれぞれが、メモリ21におけるどのアドレスのデータであるかを示す情報が格納される記憶回路である。
スヌープ制御ユニット125は、SCUタグRAM126に格納された情報に基づいて、上述のリード又はライトが要求されたデータが、そのリード又はライトを要求したCPU100以外のCPU101〜103のいずれかのL1キャッシュメモリ115に格納されているかを判定する。より具体的には、リード要求信号には、リードするデータのメモリ21におけるアドレスが含まれており、ライト要求信号には、メモリ21においてデータをライトするアドレスが含まれる。スヌープ制御ユニット125は、リード又はライトを要求したCPU100以外のCPU101〜103のいずれかのL1キャッシュメモリ115に格納されているデータのいずれかのアドレスが、リード要求信号又はライト要求信号に含まれるアドレスと一致するか否かを判定する。アドレスが一致する場合、そのリード又はライトを要求したCPU100以外のCPU101〜103のいずれかのL1キャッシュメモリ115に格納されているデータについて、上述のデータの要求又は無効化の要求が行われる。
よって、CPU100〜103のそれぞれのL1キャッシュコントローラ114は、L1キャッシュメモリ115にデータを格納した場合、そのデータのメモリ21におけるアドレスを共通回路120に通知する。共通回路120のスヌープ制御ユニット125は、CPU100〜103のそれぞれのL1キャッシュコントローラ114からのアドレスの通知に応じて、通知元のCPUのL1キャッシュメモリ115に通知されたアドレスのデータが格納されていることを示すようにSCUタグRAM126を更新する。また、共通回路120のL2キャッシュコントローラ123は、通知されたアドレスのデータがL2キャッシュメモリ124に格納されている場合、そのデータは最新のデータではなくなるため、そのデータを無効化する。
アクセス履歴メモリ127は、L2キャッシュメモリ124におけるキャッシュラインに対するアクセス履歴を示す情報である。なお、このアクセス履歴は、L2キャッシュメモリ124にデータを書き込む場合に、リフィル(上書き)対象となるキャッシュラインの決定に利用される内容を示す。例えば、キャッシュアルゴリズムとしてLRU(Least Recently Used)を採用した場合、アクセス履歴は、同一のインデックスアドレスで特定される複数のwayのそれぞれに対応する複数のキャッシュラインのうち、最古にアクセスされたキャッシュラインを示す。また、例えば、キャッシュアルゴリズムとしてLFU(Least Frequently Used)を採用した場合、アクセス履歴は、同一のインデックスアドレスで特定される複数のwayのそれぞれに対応する複数のキャッシュラインのそれぞれのデータのアクセス頻度を示す。L2キャッシュコントローラ123は、L2キャッシュメモリ124へのアクセスに応じて、アクセス履歴メモリ127に格納される情報を更新する。また、L2キャッシュコントローラ123は、L2キャッシュメモリ124にデータを書き込む場合、アクセス履歴メモリ127に格納される情報に基づいて、リフィル(上書き)対象となるキャッシュラインを決定する。
また、図3に示すように、CPUクラスタ10は、ラッパ回路130を有する。ラッパ回路130は、複数のマスク回路131〜134を有する。なお、図3では、CPU100〜103のうち、CPU100に対するラッパ回路130のみを代表的に図示している。すなわち、CPU101〜103に対しても、CPU100と同様にラッパ回路130が設けられるため、図示及びその説明を省略する。
マスク回路131は、割り込みコントローラ14からCPU100に対して入力される割り込み信号をマスク(遮断)する回路である。
マスク回路132は、CPU100からクロックコントローラ12及びリセットコンロローラ13に対して出力される信号をマスク(遮断)する回路である。この信号には、例えば、クロックコントローラ12に対して、低電力状態への遷移に伴い、クロック信号の供給の停止を要求する信号がある。
マスク回路133は、CPU100から共通回路120に出力される信号をマスク(遮断)する回路である。この信号には、例えば、リード要求信号、ライト要求信号、及び、スヌープ応答信号が含まれる。
マスク回路134は、共通回路120からCPU100に入力される信号をマスク(遮断)する回路である。この信号には、例えば、リード応答信号、ライト応答信号、及び、スヌープ要求信号が含まれる。
ここで、マスク回路131、134は、CPU100に対して入力される値を固定して、CPU100のスキャンテストにおける期待値を確定させることで、テストパタンの作成を容易化することを目的としている。マスク回路132、133は、スキャンテストの実行によって、CPU100から他の回路に対する意図しない信号の出力を抑止することで、システムの正常動作の阻害を防止することを目的としている。
マスク回路131〜134が信号をマスク(遮断)するか否かは、マスク回路131〜134に対して任意に設定することができる。この設定は、マスク回路131〜134のそれぞれもしくはクロックコントローラ12が有する制御レジスタ(図示せず)に対して、信号をマスクするか否かを示す値を設定することで行われる。また、その設定も、BISTコントローラ110から、任意のタイミングで変更することが可能である。よって、CPU101のマスク回路131〜134の設定はBISTコントローラ111が変更し、CPU102のマスク回路131〜134の設定はBISTコントローラ112が変更し、CPU103のマスク回路131〜134の設定はBISTコントローラ113が変更することになる。CPU100〜103のそれぞれのマスク回路131〜134は、CPU100〜103のそれぞれのランタイムテスト実行時に信号をマスクするように、その動作が有効化される。
また、図4に示すように、初期化マスク回路122は、初期化マスク回路122a〜122cを含む。
初期化マスク回路122aは、L2キャッシュコントローラ123がL2キャッシュメモリ124に対して初期値を書き込んでL2キャッシュメモリ124を初期化する処理と、スヌープ制御ユニット125がSCUタグRAM126に対して初期値を書き込んでSCUタグRAM126を初期化する処理とを抑止する回路である。より具体的には、初期化マスク回路122aは、初期化処理の抑止を指示する指示信号をL2キャッシュコントローラ123及びスヌープ制御ユニット125のそれぞれに出力する。L2キャッシュコントローラ123及びスヌープ制御ユニット125のそれぞれは、共通回路120のリセット時に、その指示信号が入力されている場合、共通回路120のリセット解除で実行するL2キャッシュメモリ124及びSCUタグRAM126のそれぞれに対するデータの初期化のための書き込みを行わないようにする。初期化マスク回路122aは、共通回路120のランタイムテスト実行後のリセット時における、L2キャッシュメモリ124及びSCUタグRAM126の初期化を抑止するよう、その動作を有効化する。
なお、この指示信号に応じて初期化のための書き込みを実行するか否かの動作を変更する機能は、一般的に、L2キャッシュコントローラ123及びスヌープ制御ユニット125に、(1)デバッグ目的、もしくは、(2)CPUクラスタ10が省電力状態(一部電源OFF状態)から復帰する際のデータ保持目的で利用される。より具体的には、(1)では、CPUクラスタ10が異常停止した後にCPUクラスタ10をリセットして再起動する際にデバッグのためにデータを残す目的で利用される。また、(2)では、CPUクラスタ10内の全てのCPU100〜103がスリープして、CPU100〜103、スヌープ制御ユニット125、及びL2キャッシュコントローラ123を電源切断した省電力状態から、それらをリセットして復帰する際に処理を継続可能とするためにデータを引き継ぐ目的で利用される。本実施の形態1では、この機能をランタイムテストの実行に流用することで、ランタイムテスト実行時におけるL2キャッシュメモリ124及びSCUタグRAM126のデータの引き継ぎに関して、論理設計コストの低減を実現している。
初期化マスク回路122bは、L2キャッシュコントローラ123によるL2キャッシュメモリ124に対する書き込みを抑止する回路である。より具体的には、初期化マスク回路122bは、L2キャッシュコントローラ123からL2キャッシュメモリ124に対してデータの書き込みのために出力される信号をマスク(遮断)する。初期化マスク回路122bは、共通回路120のランタイムテスト実行時におけるL2キャッシュメモリ124へのデータの書き込みを抑止するよう、その動作を有効化する。
初期化マスク回路122cは、スヌープ制御ユニット125によるSCUタグRAM126に対する書き込みを抑止する回路である。より具体的には、初期化マスク回路122cは、スヌープ制御ユニット125からSCUタグRAM126に対してデータの書き込みのために出力される信号をマスク(遮断)する。初期化マスク回路122cは、共通回路120のランタイムテスト実行時におけるSCUタグRAM126へのデータの書き込みを抑止するよう、その動作を有効化する。
初期化マスク回路122a〜122cが初期化又は書き込みを抑止するか否かは、初期化マスク回路122a〜122cに対して任意に設定することができる。この設定は、初期化マスク回路122a〜122cのそれぞれもしくはクロックコントローラ12が有する制御レジスタ(図示せず)に対して、初期化又は書き込みを抑止するか否かを示す値を設定することで行われる。また、その設定も、CPU100〜103のうち、共通回路120のランタイムテストの実行を制御するCPUから、任意のタイミングで変更することが可能である。
また、図4に示すように、共通回路120は、ラッパ回路140を有する。ラッパ回路140は、複数のマスク回路141〜150を有する。
マスク回路141、143、145、147のそれぞれは、CPU100〜103のそれぞれから共通回路120に入力される信号をマスク(遮断)する回路である。この信号には、例えば、リード要求信号、ライト要求信号、及び、スヌープ応答信号が含まれる。
マスク回路142、144、146、148のそれぞれは、共通回路120からCPU100〜103のそれぞれに出力される信号をマスク(遮断)する回路である。この信号には、例えば、リード応答信号、ライト応答信号、及び、スヌープ要求信号が含まれる。
マスク回路149は、共通回路120からシステムバスに出力される信号をマスク(遮断)する回路である。この信号には、例えば、リード要求信号及びライト要求信号が含まれる。
マスク回路150は、システムバスから共通回路120に入力される信号をマスク(遮断)する回路である。この信号には、例えば、リード応答信号及びライト応答信号が含まれる。
ここで、マスク回路141、143、145、147、150は、共通回路120に対して入力される値を固定して、共通回路120のスキャンテストにおける期待値を確定させることで、テストパタンの作成を容易化することを目的としている。マスク回路142、144、146、148、149は、スキャンテストの実行によって、共通回路120から他の回路に対する意図しない信号の出力を抑止することで、システムの正常動作の阻害を防止することを目的としている。
マスク回路141〜150が信号をマスク(遮断)するか否かは、マスク回路141〜150に対して任意に設定することができる。この設定は、マスク回路141〜150のそれぞれもしくはクロックコントローラ12が有する制御レジスタ(図示せず)に対して、信号をマスクするか否かを示す値を設定することで行われる。また、その設定も、BISTコントローラ121から、任意のタイミングで変更することが可能である。マスク回路141〜150は、共通回路120のランタイムテスト実行時に信号をマスクするよう、その動作を有効化する。
なお、以上の説明では、メモリ21のデータがL1キャッシュメモリ115及びL2キャッシュメモリ124にキャッシュされる例について説明したが、DDRメモリ20及び内蔵メモリ50のデータも同様の制御によりキャッシュされるようにしてもよい。以降の説明においても同様である。
続いて、図5を参照して、実施の形態1に係るCPU100〜103に対するランタイムテストの実行手順について説明する。以下、CPU100における手順について説明するが、CPU101〜103における手順についても同様である。
CPU100は、ラインタイムテスト開始のトリガとなる割り込みの通知に応じて、自身のランタイムテストを実行する制御を開始する。まず、CPU100は、システムバスを介して、テスト条件をBISTコントローラ11の制御レジスタ(図示せず)に対して設定する(S1)。このテスト条件の設定には、テスト対象の設定が含まれる。より具体的には、CPU100は、BISTコントローラ11に対して自身をテスト対象として設定する。
CPU100は、システムバスを介して、ランタイムテストの起動をBISTコントローラ11に指示する(S2)。BISTコントローラ11は、この指示に応じて、テスト対象として設定されたCPU100がスリープ状態に移行することを待ち合わせる。
CPU100は、自身が有するレジスタに格納されたデータをDDRメモリ20、メモリ21、及び、内蔵メモリ50に退避(ライト)する(S3)。また、CPU100は、L1キャッシュメモリ115のデータをメモリ21に対してフラッシュする。すなわち、CPU100のL1キャッシュメモリ115に格納された最新のデータを下位のL2キャッシュメモリ124及びメモリ21に反映する。これにより、CPU100のランタイムテストを実行することで、CPU100のL1キャッシュメモリ115のデータが削除されてしまっても、ランタイムテスト終了後にCPU100〜103で実行する処理に不整合が発生しないようにすることができる。CPU100は、割り込みコントローラ14から自身に対する割り込み信号をマスクするように、割り込みマスク回路19を設定する(S4)。そして、CPU100は、自身をWFI(Wait For Interrupt)命令(スリープ命令)によりスリープ状態に移行する(S5)。このWFI命令により移行するスリープ状態は、割り込みの通知に応じて起床するスリープ状態である。ここで、WFIによるスリープ状態への移行中に割り込みを受けてしまうと、CPU100は、スリープ状態への移行を中止してしまうという問題がある。そのため、これを防止するために、CPU100への割り込み信号をマスクするようにしている。CPU100は、スリープ状態に移行すると、自身がスリープ状態であることを通知するステータス信号をBISTコントローラ11に出力する。
BISTコントローラ11は、テスト対象として設定されたCPU100から、スリープ状態であることを通知するステータス信号が出力されたことに応じて、CPU100のランタイムテストの開始をBISTコントローラ110に指示する。BISTコントローラ110は、BISTコントローラ11からの指示に応じて、CPU100のランタイムテストを開始する。まず、BISTコントローラ110は、CPU100のラッパ回路130のマスク回路131〜134が信号をマスクするように設定する(S6)。これにより、テスト対象のCPU100と接続される他の回路に対して意図しない不要な信号が伝搬することと、他の回路からテスト対象のCPU100に対して意図しない不要な信号が伝搬することを防止する。
BISTコントローラ110は、CPU100のランタイムテストを実行する(S7)。より具体的には、BISTコントローラ110は、CPU100の論理回路に対してスキャンテスト(LBIST、ロジックBIST)を実行し、CPU100の記憶回路(例えば分岐履歴メモリ116)に対してMBIST(メモリBIST)を実行する。
すなわち、BISTコントローラ110は、順次、テストパタンを生成し、CPU100の論理回路のスキャンチェーンにスキャンインする。また、BISTコントローラ110は、順次、CPU100の論理回路のスキャンチェーンから実行結果データをスキャンアウトして取得する。BISTコントローラ110は、取得した実行結果データを圧縮し、BIST実行結果を生成する。BISTコントローラ110は、生成したBIST実行結果と、テストパタンに応じて生成した期待値とを比較する。そして、BISTコントローラ110は、比較した値が一致する場合には、CPU100の論理回路が正常であると判定し、比較した結果が一致しない場合には、CPU100の論理回路が故障していると判定する。
また、BISTコントローラ110は、順次、テストパタンを生成し、CPU100の記憶回路に書き込む。BISTコントローラ110は、CPU100の記憶回路から書き込んだテストパタンを読み出す。BISTコントローラ110は、書き込み前の(書き込みに使用した)テストパタンと、読み出したテストパタンとを比較する。そして、BISTコントローラ110は、比較した値が一致する場合には、CPU100の記憶回路が正常であると判定し、比較した結果が一致しない場合には、CPU100の記憶回路が故障していると判定する。ここで、自身でエラーを検出する機構(例えばECC(Error Checking and Correction))を有している記憶回路(例えばL1キャッシュメモリ115)は、MBISTの対象外となる。
BISTコントローラ110は、CPU100の論理回路及び記憶回路が全て正常であると判定した場合、CPU100が正常であることを示すランタイムテスト結果値を、BISTコントローラ11の結果レジスタに格納する。一方、BISTコントローラ110は、CPU100の論理回路及び記憶回路のいずれかが故障していると判定した場合、CPU100が故障していることを示すランタイムテスト結果値を、BISTコントローラ11の結果レジスタに格納する。
BISTコントローラ110は、CPU100のランタイムテストの実行後、CPU100のラッパ回路130のマスク回路131〜134が信号のマスクを解除するように設定する(S8)。BISTコントローラ110は、CPU100のランタイムテストの実行終了をBISTコントローラ11に通知する。BISTコントローラ11は、BISTコントローラ110からの通知に応じて、リセットコントローラ13に対して、テスト対象のCPU100のリセットを要求する要求信号を出力する(S9)。リセットコントローラ13は、BISTコントローラ11からの要求信号に応じて、その要求信号で要求されたCPU100に対してリセット信号を出力する。これより、CPU100がリセットされる。
CPU100は、リセットによるブート時に、自身のリセット要因を確認する(S10)。より具体的には、CPU100は、システムバスを介して、BISTコントローラ11が有する制御レジスタを参照することで、自身がランタイムテスト実行後のリセットによりブートしたか否かを確認する。すなわち、BISTコントローラ11は、CPU100のランタイムテストを実行した場合には、制御レジスタにCPU100のランタイムテストを実行したことを示すデータを格納している。このCPU100のランタイムテストを実行したことを示すデータは、CPU100による確認後、CPU100によって制御レジスタから削除される。
CPU100は、自身がランタイムテスト実行後のリセットによりブートしたことを確認した場合、そのブート時の処理において、システムバスを介して、BISTコントローラ11が有する結果レジスタに格納されたランタイムテスト結果値を取得し(S11)、ランタイムテストを終了する(S12)。
CPU100は、ランタイムテスト結果値が、CPU100が正常であることを示している場合、上記ステップS3で退避したデータをCPU100のレジスタに復帰させる(S13)。CPU100は、割り込みコントローラ14から自身に対する割り込み信号のマスクを解除するように、割り込みマスク回路19を設定する(S14)。そして、CPU100は、ランタイムテスト実行前に実行していたプログラムの実行を再開する。
一方、CPU100は、ランタイムテスト結果値が、CPU100が故障していることを示している場合、それに応じた故障対策ルーチンを実行する。故障対策ルーチンとして、例えば、半導体装置1におけるシステム全体をシャットダウンする処理を実行してもよく、故障しているCPU100を縮退し、他のCPU101〜103で半導体装置1におけるシステムの動作を継続するようにしてもよい。
なお、CPU100は、自身がランタイムテスト実行後のリセットによりブートしていない場合(通常のリセット後のブートである場合)、通常のリセット後のブート時の処理を実行し、これらのランタイムテスト結果値を取得する処理、及びその値に応じた処理を実行しない。
続いて、図6を参照して、実施の形態1に係る共通回路120に対するランタイムテストの実行手順について説明する。以下、本実施の形態1では、CPU100が共通回路120のランタイムテストの実行を制御する手順について説明するが、CPU100に代えてCPU101〜103のいずれかが共通回路120のランタイムテストの実行を制御する形態としてもよい。
CPU100は、自身のランタイムテストの実行後に、共通回路120のランタイムテストを実行する制御を開始する。まず、CPU100は、自身と共通回路120を共有する他のCPU101〜103のそれぞれに対してCPU間割り込みを通知する(S21)。CPU101〜103のそれぞれは、このCPU間割り込みに応じて、自身をWFI命令によりスリープ状態に移行させる。
CPU100は、システムバスを介して、テスト条件をBISTコントローラ11の制御レジスタに対して設定する(S22)。このテスト条件の設定には、上述したようにテスト対象の設定が含まれる。より具体的には、CPU100は、BISTコントローラ11に対して共通回路120をテスト対象として設定する。
CPU100は、システムバスを介して、ランタイムテストの起動をBISTコントローラ11に指示する(S23)。BISTコントローラ11は、この指示に応じて、CPU100〜103の全てがスリープ状態に移行することを待ち合わせる。
CPU100は、共通回路120が有するレジスタに格納されたデータをDDRメモリ20、メモリ21、及び、内蔵メモリ50に退避(ライト)する(S24)。CPU100は、割り込みコントローラ14から他のCPU101〜103に対する割り込み信号をマスクするように割り込みマスク回路19を設定する。CPU100は、BISTコントローラ11からの割り込みのみについて、CPU100に対して割り込み信号を出力するように、システムバスを介して割り込みコントローラ14を設定する。すなわち、CPU100は、BISTコントローラ11以外からの割り込みに対して割り込み信号を出力しないように割り込みコントローラ14を設定する。また、CPU100は、リセットコントローラ13から共通回路120を利用する全てのCPU100〜103に対するリセット信号をマスクするようにリセットマスク回路18を設定する(S25)。そして、CPU100は、自身をWFI命令によりスリープ状態に移行する(S26)。CPU100〜103のそれぞれは、スリープ状態に移行すると、自身がスリープ状態であることを通知するステータス信号をBISTコントローラ11に出力する。
BISTコントローラ11は、共通回路120を利用するCPU100〜103の全てから、スリープ状態であることを通知するステータス信号が出力されたことに応じて、共通回路120のランタイムテストの開始をBISTコントローラ121に指示する。BISTコントローラ121は、BISTコントローラ11からの指示に応じて、共通回路120のランタイムテストを開始する。まず、BISTコントローラ121は、共通回路120のラッパ回路140のマスク回路141〜150が信号をマスクするように設定する(S27)。これにより、テスト対象の共通回路120と接続される他の回路に対して意図しない不要な信号が伝搬することと、他の回路からテスト対象の共通回路120に対して意図しない不要な信号が伝搬することを防止する。
BISTコントローラ121は、共通回路120のランタイムテストを実行する(S28)。より具体的には、BISTコントローラ121は、共通回路120の論理回路に対してスキャンテスト(LBIST、ロジックBIST)を実行し、共通回路120の記憶回路(例えばアクセス履歴メモリ127)に対してMBIST(メモリBIST)を実行する。
すなわち、BISTコントローラ121は、順次、テストパタンを生成し、共通回路120の論理回路のスキャンチェーンにスキャンインする。また、BISTコントローラ121は、順次、共通回路120の論理回路のスキャンチェーンから実行結果データをスキャンアウトして取得する。BISTコントローラ121は、取得した実行結果データを圧縮し、BIST実行結果を生成する。BISTコントローラ121は、生成したBIST実行結果と、テストパタンに応じて生成した期待値とを比較する。そして、BISTコントローラ121は、比較した値が一致する場合には、共通回路120の論理回路が正常であると判定し、比較した結果が一致しない場合には、共通回路120の論理回路が故障していると判定する。
また、BISTコントローラ121は、順次、テストパタンを生成し、共通回路120の記憶回路に書き込む。BISTコントローラ121は、共通回路120の記憶回路から書き込んだテストパタンを読み出す。BISTコントローラ121は、書き込み前の(書き込みに使用した)テストパタンと、読み出したテストパタンとを比較する。そして、BISTコントローラ121は、比較した値が一致する場合には、共通回路120の記憶回路が正常であると判定し、比較した結果が一致しない場合には、共通回路120の記憶回路が故障していると判定する。ここで、自身でエラーを検出する機構(例えばECC)を有している記憶回路(例えばL2キャッシュメモリ124及びSCUタグRAM126)は、MBISTの対象外となる。
BISTコントローラ121は、共通回路120の論理回路及び記憶回路が全て正常であると判定した場合、共通回路120が正常であることを示すランタイムテスト結果値を、BISTコントローラ11の結果レジスタに格納する。一方、BISTコントローラ121は、共通回路120の論理回路及び記憶回路のいずれかが故障していると判定した場合、共通回路120が故障していることを示すランタイムテスト結果値を、BISTコントローラ11の結果レジスタに格納する。
BISTコントローラ121は、共通回路120のランタイムテストの実行後、共通回路120のラッパ回路140のマスク回路141〜150が信号のマスクを解除するように設定する(S29)。BISTコントローラ121は、共通回路120のランタイムテストの実行終了をBISTコントローラ11に通知する。BISTコントローラ11は、BISTコントローラ121からの通知に応じて、リセットコントローラ13に対して、テスト対象の共通回路120のリセットを要求する要求信号を出力する(S30)。リセットコントローラ13は、BISTコントローラ11からの要求信号に応じて、その要求信号で要求された共通回路120に対してリセット信号を出力する。これより、共通回路120がリセットされる。
ここで、リセットコントローラ13は、一般的に、共通回路120をリセットする場合には、その共通回路120を共有するCPU100〜103もリセットするように設計される。これに対して、上述したように、ステップS25では、CPU100〜103に対するリセット信号をマスクするようにリセットマスク回路18を設定している。そのため、CPU100〜103のリセットを抑止し、共通回路120のランタイムテストの終了後に、CPU100〜103がその動作を継続することが可能である。
また、BISTコントローラ11は、BISTコントローラ121からの通知に応じて、割り込みコントローラ14に対して割り込み信号を出力する。割り込みコントローラ14は、BISTコントローラ11からの割り込み信号に応じて、CPU100に対して割り込み信号を出力する。CPU100は、割り込みコントローラ14からの割り込み信号に応じて、スリープ状態から起床し(S31)、システムバスを介して、BISTコントローラ11が有する結果レジスタに格納されたランタイムテスト結果値を取得し(S32)、ランタイムテストを終了する(S33)。
CPU100は、ランタイムテスト結果値が、共通回路120が正常であることを示している場合、上記ステップS24で退避したデータを共通回路120のレジスタに復帰する(S34)。CPU100は、割り込みコントローラ14から他のCPU101〜103に対する割り込み信号のマスクを解除するように割り込みマスク回路19を設定する。また、CPU100は、BISTコントローラ11以外からの割り込みについても、CPU100に対する割り込み信号の出力を再開するように、システムバスを介して割り込みコントローラ14を設定する。また、CPU100は、リセットコントローラ13から共通回路120を利用する全てのCPU100〜103に対するリセット信号のマスクを解除するようにリセットマスク回路18を設定する(S35)。
CPU100は、自身と共通回路120を共有する他のCPU101〜103のそれぞれに対してCPU間割り込みを通知する(S36)。そして、CPU100は、ランタイムテスト実行前に実行していたプログラムの実行を再開する。また、CPU101〜103のそれぞれも、CPU100からのCPU間割り込みに応じて、スリープ状態から起床し、ランタイムテスト実行前に実行していたプログラムの実行を再開する。
一方、CPU100は、ランタイムテスト結果値が、CPU100が故障していることを示している場合、それに応じた故障対策ルーチンを実行する。故障対策ルーチンとして、例えば、半導体装置1におけるシステム全体をシャットダウンする処理を実行してもよい。
ここで、WFI命令によるCPU100〜103のスリープ状態への移行は、一般的に、半導体装置1にエミュレータを接続してデバッグを行うために使用される。本実施の形態1では、以上に説明したように、このWFI命令によるスリープ状態への移行をランタイムテストの実行に流用することで、設計コストを低減して、ランタイムテスト実行時におけるCPU100〜103の動作防止と、その動作の再開を実現している。
続いて、図7を参照して、実施の形態1に係るCPUクラスタ10のランタイムテスト実行時の動作について説明する。
図7に示すように、CPUクラスタ10内の全ての構成要素(CPU100〜103及び共通回路120)に対するランタイムテストは、システム全体の性能劣化を極力低減するために、DTI内に時分割で実施する。DTI間隔の通知は、上述したようにタイマ15からの割り込みにより実現する。
CPU103は、タイマ15からの割り込みに応じて、図5に示した手順に従って、自身の処理を中断し、自身のランタイムテストを実行する。このとき、他のCPU100〜102のそれぞれは、その処理の実行を継続する。CPU103は、ランタイムテストの実行終了後、自身の処理を再開し、CPU102に対してCPU間割り込みを通知する。
CPU102は、CPU103からのCPU間割り込みに応じて、図5に示した手順に従って、自身の処理を中断し、自身のランタイムテストを実行する。このとき、他のCPU100〜101、103のそれぞれは、その処理の実行を継続する。CPU102は、ランタイムテストの実行終了後、自身の処理を再開し、CPU101に対してCPU間割り込みを通知する。
CPU101は、CPU102からのCPU間割り込みに応じて、図5に示した手順に従って、自身の処理を中断し、自身のランタイムテストを実行する。このとき、他のCPU100、102〜103のそれぞれは、その処理の実行を継続する。CPU101は、ランタイムテストの実行終了後、自身の処理を再開し、CPU100に対してCPU間割り込みを通知する。
CPU100は、CPU101からのCPU間割り込みに応じて、図5に示した手順に従って、自身の処理を中断し、自身のランタイムテストを実行する。このとき、他のCPU101〜103のそれぞれは、自身の処理の実行を継続する。
CPU100は、ランタイムテストの実行終了後、図6に示した手順に従って、共通回路120のランタイムテストを実行する。このとき、共通回路120を共有する全てのCPU100〜103のそれぞれは、上述したようにスリープして自身の処理を中断する。CPU100〜103のそれぞれは、共通回路120のランタイムテストの実行終了後、自身の処理を再開する。
そして、タイマ15は、CPU103に対して割り込みを発生させた時点から、DTIが経過する毎の時点で再びCPU103に割り込みを発生させ、CPU100〜103及び共通回路120のランタイムテストが実行される。すなわち、DTIが経過する毎に、CPU100〜103及び共通回路120のランタイムテストが実行される。
続いて、図8を参照して、実施の形態1に係るCPU103のランタイムテスト実行時の動作について説明する。
タイマ15は、前回に割り込み信号を出力した時点から、DTIが経過した時点で、割り込みコントローラ14を介してCPU103に対して割り込みを通知する。すなわち、この例では、割り込みコントローラ14には、タイマ15からの割り込みの通知先として、CPU103が予め設定されている。
CPU103は、その処理の実行中に(S100)、タイマ15に起因する割り込みが通知されると、タイマ15の割り込みに応じた割り込みハンドラを実行する。CPU103は、割り込みハンドラにおいて、ランタイムテストを実行するための設定(S101)と、CPU103の情報の退避(S102)とを行い、スリープする(S103)。すなわち、ステップS101は、図5のステップS1、S2に対応し、ステップS102は、図5のステップS3、S4に対応し、ステップS103は、図5のステップS5に対応する。
CPU103のスリープ後、BISTコントローラ11は、CPU103のランタイムテストを実行する(S104)。BISTコントローラ11は、CPU103のランタイムテストの実行終了後、リセットコントローラ13を介してCPU103をリセットする(S105)。すなわち、ステップS104は、図5のステップS6〜S8に対応し、ステップS105は、図5のステップS9に対応する。
CPU103は、そのリセット後のブート時に(S106)、リセットハンドラを実行する。CPU103は、リセットハンドラにおいて、ランタイムテスト結果の確認(S107)、CPU103の情報の復帰(S108)を行う。すなわち、ステップS106は、図5のステップS10に対応し、ステップS107は、図5のステップS11、S12に対応し、ステップS108は、図5のステップS13、S14に対応する。また、CPU103は、リセットハンドラにおいて、次のテスト対象となるCPU102に対してCPU間割り込みを通知する(S109)。そして、CPU103は、リセットハンドラを終了し(S110)、ランタイムテストの実行前に実行していた処理を再開する(S111)。
続いて、図9を参照して、実施の形態1に係るCPU102、101のランタイムテスト実行時の動作について説明する。図9では、図8における処理と同様の処理については同一の符号を付し、適宜その説明を省略する。
CPU102、101のそれぞれは、その処理の実行中に(S100)、直前にランタイムテストを実行したCPUからCPU間割り込みが通知されると、そのCPU間割り込みに応じた割り込みハンドラを実行する。CPU102は、CPU103からCPU間割り込みが通知され、CPU101は、CPU102からCPU間割り込みが通知される。すなわち、CPU102、101のそれぞれは、CPU103、102のそれぞれからのCPU割り込みに応じた割り込みハンドラにおいて、ステップS101〜S103の処理を実行する点が、CPU103とは異なる。
また、リセットハンドラにおけるステップS109では、CPU102は、CPU間割り込みをCPU101に通知し、CPU101は、CPU間割り込みをCPU100に通知する。
続いて、図10を参照して、実施の形態1に係るCPU100のランタイムテスト実行時の動作について説明する。図10では、図8及び図9における処理と同様の処理については同一の符号を付し、適宜その説明を省略する。
CPU100は、その処理の実行中に(S100)、直前にランタイムテストを実行したCPU101からCPU間割り込みが通知されると、そのCPU間割り込みに応じた割り込みハンドラを実行する。CPU100は、CPU102、101と同様に、CPU101からのCPU間割り込みに応じた割り込みハンドラにおいてステップS101〜S103の処理を実行する。
一方、CPU100は、リセットハンドラにおけるステップS106〜S108の実行後、他の全てのCPU101〜103のそれぞれに対してCPU割り込みを通知し(S112)、次に図11を参照して説明するように共通回路120のランタイムテストを実行する点が、CPU101〜103とは異なる。
続いて、図11を参照して、実施の形態1に係る共通回路120のランタイムテスト実行時の動作について説明する。
図10でも説明したように、CPU100は、自身のランタイムテストの実行後、リセットハンドラにおいて、他の全てのCPU101〜103のそれぞれに対してCPU割り込みを通知する(S112)。すなわち、ステップS112は、図6のステップS21に対応する。CPU101〜103のそれぞれは、その処理の実行中に(S130)、CPU100からCPU間割り込みが通知されると、CPU100からのCPU間割り込みに応じた割り込みハンドラを実行する。CPU101〜103のそれぞれは、CPU100からのCPU間割り込みに応じた割り込みハンドラにおいて、自身をWFI命令によりスリープ状態に移行させる(S131)。
また、CPU100は、リセットハンドラにおいて、ランタイムテストを実行するための設定(S113)と、共通回路120の情報の退避(S114)とを行い、スリープする(S115)。すなわち、ステップS113は、図6のステップS22、S23に対応し、ステップS114は、図6のステップS24、S25に対応し、ステップS115は、図6のステップS26に対応する。
CPU100〜103全てのスリープ後、BISTコントローラ11は、共通回路120のランタイムテストを実行する(S116)。このとき、上述したように、初期化マスク回路122bがL2キャッシュコントローラ123によるL2キャッシュメモリ124の更新を抑止し、初期化マスク回路122cがスヌープ制御ユニット125によるSCUタグRAM126の更新を抑止する。
BISTコントローラ11は、共通回路120のランタイムテストの実行終了後、リセットコントローラ13を介して共通回路120をリセットする(S117)。すなわち、ステップS116は、図6のステップS27〜S29に対応し、ステップS117は、図6のステップS30に対応する。このときには、上述したように、初期化マスク回路122aがL2キャッシュコントローラ123及びスヌープ制御ユニット125によるL2キャッシュメモリ124及びSCUタグRAM126の初期化を抑止する。
これらの初期化マスク回路122a〜122cによる動作によれば、SCUタグRAM126の内容が保持されるため、CPU100〜103及び共通回路120が処理を再開した際におけるL1キャッシュメモリ115のキャッシュコヒーレンシを保証することができる。また、L2キャッシュメモリ124の内容が保持されるため、CPU100〜103及び共通回路120が処理を再開した際におけるL2キャッシュメモリ124のミスヒットを防止して、性能劣化を抑止することができる。言い換えると、共通回路120のスキャンテストを実行した場合であっても、CPU100〜103及び共通回路120が、L2キャッシュメモリ124及びSCUタグRAM126に格納されたデータを利用して処理を継続することができる。
BISTコントローラ11は、共通回路120のランタイムテスト実行後に、割り込みコントローラ14を介してCPU100に対して割り込みを通知する。CPU100は、BISTコントローラ11に起因する割り込みが通知されると、スリープ状態から起床し、BISTコントローラ11からの割り込みに応じた割り込みハンドラを実行する。CPU100は、割り込みハンドラにおいて、ランタイムテスト結果の確認(S118)、共通回路120の情報の復帰(S119)を行う。すなわち、ステップS118は、図6のステップS31〜S33に対応し、ステップS119は、図6のステップS34、S35に対応する。また、CPU100は、割り込みハンドラにおいて、他の全てのCPU101〜103のそれぞれに対してCPU割り込みを通知する(S120)。すなわち、ステップS120は、図6のステップS36に対応する。そして、CPU100は、割り込みハンドラを終了し(S121)、ランタイムテストの実行前に実行していた処理を再開する(S122)。CPU101〜103のそれぞれは、CPU100からCPU間割り込みが通知されると、スリープ状態から起床して(S132)、その処理を再開する(S133)。
以上に説明したように、本実施の形態1では、図28に示すように、半導体装置90は、記憶回路91に格納されたデータを利用して処理を実行するとともに、処理の実行に応じて記憶回路にデータを書き込む処理回路92に対するスキャンテストをスキャンテスト回路94が実行しているときに、抑止回路93が処理回路92から記憶回路91に対するデータの書き込みを抑止するようにしている。そのため、スキャンテストを実行したとしても、テスト対象の処理回路92がアクセスする記憶回路91に格納されるデータの変更を抑止することができる。なお、半導体装置90は、半導体装置1に対応する。記憶回路91は、L2キャッシュメモリ124及びSCUタグRAM126に対応する。処理回路92は、CPU100〜103、L2キャッシュコントローラ123及びスヌープ制御ユニット125に対応する。スキャンテスト回路94は、BISTコントローラ11、110〜113、121に対応する。抑止回路93は、初期化マスク回路122に対応する。
より具体的には、本実施の形態1では、抑止回路93(初期化マスク回路122bに対応)は、L2キャッシュコントローラ123を有する共通回路120に対するスキャンテストを実行しているときに、L2キャッシュコントローラ123に対し、L2キャッシュメモリ124に対するデータの書き込みを抑止するようにしている。これによれば、L2キャッシュメモリ124の内容を保持することができるため、スキャンテストの終了後に、L2キャッシュメモリ124に格納されているデータについてはメモリ21からデータを再取得する必要が無くなり、性能劣化を低減することができる。
また、本実施の形態1では、キャッシュコヒーレンシを保証するコヒーレンシ制御回路(スヌープ制御回路125に対応)を有する共通回路120に対するスキャンテストを実行しているときに、コヒーレンシ制御回路に対し、キャッシュコヒーレンシの保証に利用する管理情報が格納された管理情報記憶回路(SCUタグRAM126に対応)に対するデータの書き込みを抑止するようにしている。これによれば、管理情報記憶回路の内容を保持することができるため、スキャンテストの終了後に、キャッシュコヒーレンシを保証することができる。
また、本実施の形態1では、複数の演算回路(CPU100〜103に対応)のそれぞれは、自身が有するL1キャッシュメモリ115のデータをその下位のメモリ(L2キャッシュメモリ124、DDRメモリ20、メモリ21、内蔵メモリ50に対応)にフラッシュするようにしている。そのため、複数の演算回路間におけるキャッシュコヒーレンシを保証することができる。
また、本実施の形態1では、複数の演算回路の一は、他の演算回路からの割り込みに応じてスキャンテスト回路にスキャンテストの実行を指示し、当該指示に応じたスキャンテストの実行後に他の演算回路に割り込みを通知するようにしている。これによれば、複数の演算回路間で、演算回路のスキャンテストを時間的に重複することなく実行することができる。言い換えると、スキャンテストを実施していない演算回路で、システムの処理を継続することができる。よって、システム全体の性能劣化を抑制することができる。
<実施の形態2>
続いて、実施の形態2について説明する。以下の実施の形態2の説明では、上述した実施の形態1と同様の内容については、同一の符号を付す等して、適宜、その説明を省略する。図12に示すように、本実施の形態2に係る半導体装置2は、実施の形態1に係る半導体装置1と比較して、さらに、タイマ22を有する。
タイマ22は、ランタイムテスト開始時点からの時間の経過を計測し、ランタイムテストが終了すべきとして予め定めた時間を超えたタイミングを、タイムアウトとして割り込みによってCPUクラスタ10に通知する回路である。
すなわち、ランタイムテストは、毎回正常終了するとは限らない。BISTコントローラ11、110〜113、121の故障によってランタイムテストが正常終了しない可能性も考えられる。よって、ランタイムテストが終了すべき時間が経過してもランタイムテストが終了しなかった場合に、それをタイマ22によって通知することを可能とする。
ここで、タイマ22でタイムアウトの計測対象とする期間は、予め任意の期間を定めるようにしてよい。例えば、図7を参照して説明すると、(1)CPU100〜103及び共通回路120のそれぞれのランタイムテスト開始時からランタイムテスト終了時までの期間としてもよく、(2)CPU103のランタイムテスト開始時から共通回路120のランタイムテスト終了時までの期間としてもよい。
(1)の期間の場合
CPU100〜103のそれぞれは、自身のランタイムテストを実行する場合、例えば、図8〜10のステップS101又はS102のタイミングで、システムバスを介してタイマ22の制御レジスタ(図示せず)に対して時間の計測を開始(タイマをセット)するように設定する。タイマ22は、この設定に応じて、時間の計測を開始する。また、CPU100〜103のそれぞれは、例えば、図8〜10のステップS107〜S109のいずれかのタイミングでシステムバスを介してタイマ22の制御レジスタに対して時間の計測を停止(タイマを解除)するように設定する。タイマ22は、この設定に応じて、時間の計測を停止する。
また、CPU100〜103のそれぞれは、例えば、タイマ22からの割り込みに応じた割り込み信号の通知先を、自身以外のCPUのいずれか又は全てのCPU100〜103とするように、システムバスを介して割り込みコントローラ14を設定する。これにより、CPU100〜103のそれぞれがランタイムテストを実行中であっても、他のCPUによってタイムアウトに応じた処理を即座に実行可能とする。
CPU100は、共通回路120のランタイムテストを実行する場合、例えば、図11のステップS112〜S114のいずれかのタイミングで、システムバスを介してタイマ22の制御レジスタに対して時間の計測を開始(タイマをセット)するように設定する。タイマ22は、この設定に応じて、時間の計測を開始する。また、CPU100は、例えば、図11のステップS118〜S120のいずれかのタイミングでシステムバスを介してタイマ22の制御レジスタに対して時間の計測を停止(タイマを解除)するように設定する。タイマ22は、この設定に応じて、時間の計測を停止する。
また、CPU100は、例えば、タイマ22からの割り込みに応じた割り込み信号の通知先を、CPU100〜103のいずれか又はCPU100〜103の全てとなるように、システムバスを介して割り込みコントローラ14を設定する。ただし、CPU100は、図6のステップS25において、通知先のCPUに対しては、タイマ22からの割り込みに対して割り込み信号を出力するように割り込みコントローラ14を設定する。また、CPU100は、図6のステップS25において、通知先のCPUに対しては、割り込み信号をマスクしないように割り込みマスク回路19を設定する。
(2)の期間の場合
CPU103は、例えば、図8のステップS101又はS102のタイミングで、システムバスを介してタイマ22の制御レジスタに対して時間の計測を開始(タイマをセット)するように設定する。タイマ22は、この設定に応じて、時間の計測を開始する。また、CPU100は、例えば、図11のステップS118〜S120のいずれかのタイミングでシステムバスを介してタイマ22の制御レジスタに対して時間の計測を停止(タイマを解除)するように設定する。タイマ22は、この設定に応じて、時間の計測を停止する。
また、CPU103は、例えば、タイマ22からの割り込みに応じた割り込み信号の通知先を、CPU100〜103のいずれか又はCPU100〜103の全てとなるように、システムバスを介して割り込みコントローラ14を設定する。ただし、CPU100は、図6のステップS25において、通知先のCPUに対しては、タイマ22からの割り込みに対して割り込み信号を出力するように割り込みコントローラ14を設定する。また、CPU100は、図6のステップS25において、通知先のCPUに対しては、割り込み信号をマスクしないように割り込みマスク回路19を設定する。また、通知先のCPUをCPU100〜103のいずれか1つとしてしまうと、その通知先のCPUがランタイムテストを実行中である場合は、通知先のCPUは割り込み信号を取得することができない。そのため、(2)の期間とする場合には、好ましくは、少なくとも2つ以上のCPUを通知先として設定するとよい。
CPU100〜103のそれぞれは、タイマ22のタイムアウトに応じた割り込み信号が入力された場合、故障対策ルーチンを実行する。故障対策ルーチンとして、例えば、半導体装置1におけるシステム全体をシャットダウンする処理を実行してもよい。
以上に説明したように、本実施の形態2では、半導体装置2は、ランタイムテストの実行時間が所定時間を超えた場合にタイムアウトを通知するタイマ22を備えている。そして、処理回路92(CPU100〜103、L2キャッシュコントローラ123及びスヌープ制御ユニット125に対応)は、処理回路92に対するスキャンテストを開始するときにタイマ22を設定し、処理回路92に対するスキャンテストが終了したときにタイマ22を解除する。これによれば、スキャンテストを実行するスキャンテスト回路(BISTコントローラ11、110〜113、121に対応)が故障していることにより、スキャンテストが停止している場合に、その故障を検出することができる。
<実施の形態3>
続いて、実施の形態3について説明する。以下の実施の形態3の説明では、上述した実施の形態1、2と同様の内容については、同一の符号を付す等して、適宜、その説明を省略する。図13に示すように、本実施の形態3に係る半導体装置3は、実施の形態2に係る半導体装置2と比較して、さらに、スヌープ制御システムユニット23を有する。また、本実施の形態3に係る半導体装置3は、複数のCPUクラスタ10、70を有する。また、本実施の形態3に係るCPUクラスタ10は、実施の形態2に係るCPUクラスタ10と比較して、さらに、スヌープマスク回路151を有する。なお、CPUクラスタ70の構成は、CPUクラスタ10と同様であるため、その説明は省略する。また、図13では、複数のCPUクラスタ10、70の数が2つである例について説明しているが、CPUクラスタの数は、この例に限られない。
スヌープ制御システムユニット23は、システムバスに接続されている。スヌープ制御システムユニット23は、複数のCPUクラスタ10、70間におけるL1キャッシュメモリ115及びL2キャッシュメモリ124のキャッシュコヒーレンシを、スヌープ方式で保証する制御を行う。
本実施の形態3では、実施の形態1、2と比較して、共通回路120のL2キャッシュコントローラ123は、CPU100〜103からリードが要求されたデータが、L2キャッシュメモリ124、スヌープ制御ユニット125のいずれから取得できなかった場合、そのデータのリードを要求するリード要求信号をスヌープ制御システムユニット23に出力する点が異なる。
スヌープ制御システムユニット23は、複数のCPUクラスタ10、70のいずれかからリード要求信号が入力された場合(ここではCPUクラスタ10とする)、そのリード要求信号で要求されたデータが、要求元のCPUクラスタ10以外のCPUクラスタ70に格納されているか否かを判定する。スヌープ制御システムユニット23は、要求元のCPUクラスタ10以外のCPUクラスタ70にデータが格納されていると判定した場合、そのデータを有するCPUクラスタ70に対してそのデータを要求する。より具体的には、スヌープ制御システムユニット23は、CPUクラスタ70に対して、そのデータを要求するスヌープ要求信号を出力する。CPUクラスタ70の共通回路120のL2キャッシュコントローラ123は、そのスヌープ要求信号に応じて、そのスヌープ要求信号で要求されたデータをL2キャッシュメモリ124から取得する。
一方、L2キャッシュメモリ124にデータが存在しない場合、そのCPUクラスタ70の共通回路120のスヌープ制御ユニット125は、そのCPUクラスタ70内において、そのデータを有するCPUに対して、そのデータを要求するスヌープ要求信号を出力する。該CPUのL1キャッシュコントローラ114は、そのスヌープ要求信号に応じて、そのスヌープ要求信号で要求されたデータをL1キャッシュメモリ115から取得し、そのデータを含むスヌープ応答信号を共通回路120に出力する。スヌープ制御ユニット125は、そのスヌープ応答信号に含まれるデータを取得する。そして、L2キャッシュコントローラ123は、L2キャッシュメモリ124から、又は、スヌープ制御ユニット125の制御によって取得したデータを含むスヌープ応答信号をスヌープ制御システムユニット23に出力する。
スヌープ制御システムユニット23は、CPUクラスタ70から出力されたスヌープ応答信号に含まれるデータを取得する。スヌープ制御システムユニット23は、取得したデータを含むリード応答信号を、リード要求信号を出力したCPUクラスタ10に対して出力する。これにより、リード要求信号を出力したCPUクラスタ10が、そのリード要求信号によってリードを要求したデータを取得することができる。
一方、スヌープ制御システムユニット23は、CPUクラスタ70からデータを取得できなかった場合、そのリード要求信号を、システムバスを介して外部バスコントローラ17に出力する。外部バスコントローラ17は、このリード要求信号に応じて、メモリ21から取得したデータを含むリード応答信号を、システムバスを介してスヌープ制御システムユニット23に出力する。スヌープ制御システムユニット23は、このリード応答信号に含まれるデータを取得する。
スヌープ制御システムユニット23は、他のCPUクラスタ70、もしくは、メモリ21から取得したデータを、要求元の共通回路120に出力する。より具体的には、スヌープ制御システムユニット23は、取得したデータを含むリード応答信号を、要求元のCPU100に出力する。
また、スヌープ制御システムユニット23は、複数のCPUクラスタ10、70のいずれかからライト要求信号が入力された場合(ここではCPUクラスタ10とする)、そのライト要求信号で要求されたデータが、要求元のCPUクラスタ10以外のCPUクラスタ70に格納されているか否かを判定する。スヌープ制御システムユニット23は、要求元のCPUクラスタ10以外のCPUクラスタ70にデータが格納されていると判定した場合、そのデータを有するCPUクラスタ70に対してそのデータの無効化を要求する。より具体的には、スヌープ制御システムユニット23は、CPUクラスタ70に対して、そのデータの無効化を要求するスヌープ要求信号を出力する。CPUクラスタ70の共通回路120のL2キャッシュコントローラ123は、そのスヌープ要求信号に応じて、L2キャッシュメモリ124において、そのスヌープ要求信号で要求されたデータを無効化する。すなわち、このデータは、L2キャッシュメモリ124から削除され、L2キャッシュメモリ124には格納されていない扱いとなる。
また、そのCPUクラスタ70の共通回路120のスヌープ制御ユニット125は、そのCPUクラスタ70内において、そのデータを有するCPUに対して、そのデータの無効化を要求するスヌープ要求信号を出力する。該CPUのL1キャッシュコントローラ114は、そのスヌープ要求信号に応じて、L1キャッシュメモリ115において、スヌープ要求信号で無効化が要求されたデータを無効化する。
また、スヌープ制御システムユニット23は、そのライト要求信号を外部バスコントローラ17に出力し、メモリ21に対するデータの格納も実行する。
ここで、要求元のCPUクラスタ10以外のCPUクラスタ70に格納されているか否かは、複数のCPUクラスタ10、70に格納されているデータのそれぞれが、メモリ21におけるどのアドレスのデータであるかを示す情報が格納されるSCUタグRAM(図示せず)をスヌープ制御システムユニット23が有するようにし、スヌープ制御ユニット125及びSCUタグRAM126と同様に制御することで判定するようにしてよい。また、スヌープ制御システムユニット23がSCUタグRAMを有さない場合には、要求元のCPUクラスタ10以外の他の全てのCPUクラスタ70にスヌープ要求信号を出力するようにすればよい。
なお、以上の説明では、CPUクラスタ10からのリード要求及びライト要求に対して制御を行う例について説明したが、当然に、CPUクラスタ70からのリード要求及びライト要求に対しても同様に制御を行うことができる。また、以上の説明では、メモリ21のデータについてスヌープ制御システムユニット23が制御を行う例について説明したが、当然に、DDRメモリ20及び内蔵メモリ50のデータも同様に制御されるようにしてもよい。以降の説明においても同様である。
スヌープマスク回路151は、スヌープ制御システムユニット23から共通回路120に対して入力されるスヌープ要求信号をマスク(遮断)する回路である。スヌープマスク回路151がスヌープ要求信号をマスク(遮断)するか否かは、スヌープマスク回路151に対して任意に設定することができる。この設定は、スヌープマスク回路151もしくはクロックコントローラ12が有する制御レジスタ(図示せず)に対して、スヌープ要求信号をマスクするか否かを示す値を設定することで行われる。また、その設定も、BISTコントローラ121からの制御により、任意のタイミングで変更することが可能である。
図6を参照して説明すると、ステップS27のタイミングで、BISTコントローラ121は、スヌープ要求信号をマスクするようにスヌープマスク回路151を設定する。また、ステップS29のタイミングで、BISTコントローラ121は、スヌープ要求信号のマスクを解除するようにスヌープマスク回路151を設定する。なお、このマスクの解除により、マスクされていたスヌープ要求信号の処理が共通回路120によって開始される。
これによれば、CPUクラスタ10の共通回路120のランタイムテストを実行中に、他のCPUクラスタ70からスヌープ要求信号によってランタイムテスト実行中の共通回路120が意図せぬ動作を行ってしまうことを防止することができる。なお、スヌープ要求信号は、スヌープマスク回路151によるマスクが解除されるまで待たされた後に正常に処理が行われる。
なお、以上の説明では、実施の形態3として、実施の形態2に対して、さらに、スヌープ制御システムユニット23及びスヌープマスク回路151を有するようにし、複数のCPUクラスタ10、70を有するようにした形態について説明したが、これに限られない。実施の形態1に対して、これらの構成を適用するようにしてもよい。
以上に説明したように、本実施の形態3では、半導体装置3は、複数の処理回路92(CPU100〜103、L2キャッシュコントローラ123及びスヌープ制御ユニット125に対応)を備えるようにしている。そして、複数の処理回路92のそれぞれは、第1のコヒーレンシ制御回路(スヌープ制御ユニット125に対応)を有する共通回路120に対するスキャンテストを実行しているときに、キャッシュコヒーレンシを保証するために、第2のコヒーレンシ制御回路(スヌープ制御システムユニット23に対応)から第1のコヒーレンシ制御回路を有する共通回路120に出力される信号を遮断するマスク回路(スヌープマスク回路151に対応)を含んでいる。これによれば、ランタイムテスト実行中は、処理回路92(CPUクラスタ10、70)に関連するトランザクションを中断でき、ランタイムテストの終了後、トランザクションを再開することで、システムに不都合を生じさせないようにすることができる。
<実施の形態4>
続いて、実施の形態4について説明する。以下の実施の形態4の説明では、上述した実施の形態1〜3と同様の内容については、同一の符号を付す等して、適宜、その説明を省略する。
本実施の形態4では、CPU100〜103及び共通回路120のそれぞれのランタイムテストを一括で実施せず、分割して実施する点が、実施の形態1〜3と異なる。実施の形態4に係る半導体装置4は、実施の形態3に係る半導体装置3と比較して、さらに、タイマ25を有する。以下、DTIにおけるランタイムテストを分割した単位のそれぞれを「分割テスト」と呼ぶ。
タイマ25は、分割テストの終了時点からの時間の経過を計測し、次の分割テストを開始すべきとして予め定めた時間を経過した時点で、自身又は共通回路120のランタイムテストを分割して実行中のCPUに対して、分割テストの開始タイミングとなったことを割り込みによって通知する回路である。
続いて、図15を参照して、本実施の形態4に係るランタイムテストの分割例について説明する。ランタイムテストは、予め任意に定めた数に分割して実施してよい。図15の例では、ランタイムテストを3つの分割テストに分割して実施する例について示している。
本実施の形態4では、DTI中のランタイムテストに使用する複数のテストパタンを分割した複数の単位のそれぞれについてのランタイムテストを、分割テストとして実施する。例えば、図15に示すように、ランタイムテスト対象の回路に2つの論理回路と3つの記憶回路とが回路に含まれる場合、そのランタイムテストに使用される複数のテストパタンを、1つの論理回路のスキャンテスト(図15の「SCAN−1」)に使用される単位と、もう1つの論理回路のスキャンテスト(図15の「SCAN−2」)に使用される単位と、3つの記憶回路のMBIST(図15の「MBIST」)に使用される単位とに分割するようにしてもよい。そして、図15に示すように、それぞれの単位について、分割テストを実行する。
なお、1回の分割テストでスキャンテストが実行される論理回路の数と、1回の分割テストでMBISTが実行される記憶回路の数は、図15の例に限られない。また、ある分割テストでスキャンテストが実行される論理回路の数と、他の分割テストでスキャンテストが実行される論理回路の数は異なっていてもよい。同様に、ある分割テストでMBISTが実行される記憶回路の数と、他の分割テストでMBISTが実行される記憶回路の数も異なっていてもよい。
あるいは、ランタイムテスト対象の回路に含まれる論理回路全体を一通りスキャンテストするために使用されるテストパタン群を複数の単位に分割し、分割した単位のそれぞれを1回の分割テストでのスキャンテストに使用してもよい。また、ランタイムテスト対象の回路に含まれる記憶回路に対し、一通りMBISTを行うために使用されるテストパタン群を複数の単位に分割し、分割した単位のそれぞれを1回の分割テストでのMBISTに使用してもよい。
ここで、分割テストのそれぞれにおいて、どれだけの数のテストパタンを使用するかは、CPU100〜103のそれぞれが、システムバスを介して、BISTコントローラ11が有する制御レジスタに設定することでBISTコントローラ11が認識可能とすればよい。
例えば、図15に示すように、CPU100について、2つの論理回路と1つの記憶回路のそれぞれに対して3つの分割テストが実施されるものとする。この場合、CPU100は、1回目の分割テスト開始前には、図5のステップS1において1つ目の論理回路のランタイムテストで使用するテストパタン数を、システムバスを介してBISTコントローラ11の制御レジスタに設定する。また、CPU100は、2回目の分割テスト開始前には、図5のステップS1において2つ目の論理回路のランタイムテストで使用するテストパタン数を、システムバスを介してBISTコントローラ11の制御レジスタに設定する。そして、3回目の分割テスト開始前には、図5のステップS1において記憶回路のランタイムテストで使用するテストパタン数を、システムバスを介してBISTコントローラ11の制御レジスタに設定する。そして、BISTコントローラ110は、BISTコントローラ11の制御レジスタに設定されたテストパタン数だけテストパタンを生成し、ランタイムテストを実行する。
続いて、図16を参照して、本実施の形態4に係るCPUクラスタ10のランタイムテスト実行時の動作について説明する。図16の例では、ランタイムテストを2つの分割テストに分割して実施する例について示している。
リアルタイム応答性が求められるシステムでは、テスト時間が割り込み応答制約時間を上回ることがあってはならない。割り込み応答制約時間とは、割り込みが発生してから少なくともその時間を超える前に、CPU100〜103が割り込みを検出して、割り込みに応じた処理を開始しなければならない時間である。そこで、本実施の形態4では、図16に示すように、CPU100〜103及び共通回路120のそれぞれのランタイムテストを、割り込み応答制約時間以下の時間で実施できる分割テストに分割して実行する。
CPU103は、タイマ15からの割り込みに応じて、図5に示した手順に従って、自身の処理を中断し、自身の1回目の分割テストを実行する。このとき、他のCPU100〜102のそれぞれは、その処理の実行を継続する。CPU103は、1回目の分割テストの実行終了後、自身の処理を再開し、システムバスを介してタイマ25に対して時間の計測を開始(タイマをセット)するように設定する。タイマ25は、この設定に応じて、時間の計測を開始する。
CPU103は、タイマ25からの割り込みに応じて、図5に示した手順に従って、自身の処理を中断し、自身の2回目の分割テストを実行する。このとき、他のCPU100〜102のそれぞれは、その処理の実行を継続する。CPU103は、2回目の分割テストの実行終了後、自身の処理を再開し、CPU102に対してCPU間割り込みを通知する。
CPU102は、CPU103からのCPU間割り込みに応じて、図5に示した手順に従って、自身の処理を中断し、自身の1回目の分割テストを実行する。このとき、他のCPU100〜101、103のそれぞれは、その処理の実行を継続する。CPU102は、1回目の分割テストの実行終了後、自身の処理を再開し、システムバスを介してタイマ25に対して時間の計測を開始(タイマをセット)するように設定する。タイマ25は、この設定に応じて、時間の計測を開始する。
CPU102は、タイマ25からの割り込みに応じて、図5に示した手順に従って、自身の処理を中断し、自身の2回目の分割テストを実行する。このとき、他のCPU100〜101、103のそれぞれは、その処理の実行を継続する。CPU102は、2回目の分割テストの実行終了後、自身の処理を再開し、CPU101に対してCPU間割り込みを通知する。
CPU101は、CPU102からのCPU間割り込みに応じて、図5に示した手順に従って、自身の処理を中断し、自身の1回目の分割テストを実行する。このとき、他のCPU100、102〜103のそれぞれは、その処理の実行を継続する。CPU101は、1回目の分割テストの実行終了後、自身の処理を再開し、システムバスを介してタイマ25に対して時間の計測を開始(タイマをセット)するように設定する。タイマ25は、この設定に応じて、時間の計測を開始する。
CPU101は、タイマ25からの割り込みに応じて、図5に示した手順に従って、自身の処理を中断し、自身の2回目の分割テストを実行する。このとき、他のCPU100、102〜103のそれぞれは、その処理の実行を継続する。CPU101は、2回目の分割テストの実行終了後、自身の処理を再開し、CPU100に対してCPU間割り込みを通知する。
CPU100は、CPU101からのCPU間割り込みに応じて、図5に示した手順に従って、自身の処理を中断し、自身の1回目の分割テストを実行する。このとき、他のCPU101〜103のそれぞれは、その処理の実行を継続する。CPU100は、1回目の分割テストの実行終了後、自身の処理を再開し、システムバスを介してタイマ25に対して時間の計測を開始(タイマをセット)するように設定する。タイマ25は、この設定に応じて、時間の計測を開始する。
CPU100は、タイマ25からの割り込みに応じて、図5に示した手順に従って、自身の処理を中断し、自身の2回目の分割テストを実行する。このとき、他のCPU101〜103のそれぞれは、その処理の実行を継続する。
CPU100は、2回目の分割テストの実行終了後、図6に示した手順に従って、共通回路120の1回目の分割テストを実行する。このとき、共通回路120を共有する全てのCPU100〜103のそれぞれは、上述したようにスリープしてその処理を中断する。CPU100は、1回目の分割テストの実行終了後、自身の処理を再開し、システムバスを介してタイマ25に対して時間の計測を開始(タイマをセット)するように設定する。タイマ25は、この設定に応じて、時間の計測を開始する。
CPU100は、タイマ25からの割り込みに応じて、図6に示した手順に従って、共通回路120の2回目の分割テストを実行する。このとき、共通回路120を共有する全てのCPU100〜103のそれぞれは、上述したようにスリープしてその処理を中断する。CPU100は、2回目の分割テストの実行終了後、自身の処理を再開する。
以上に説明したように、ランタイムテストがN個の分割テストに分割される場合(Nは2以上の正整数)、CPU103は、タイマ15からの割り込みに応じて1回目の分割テストを実行し、タイマ25からの割り込みに応じて2〜N回目の分割テストを実行する。また、CPU103は、1〜(N−1)回目の分割テストの実行後にはタイマ25を設定し、N回目の分割テストの実行後には次のテスト対象のCPU102に対してCPU間割り込みを通知する。
CPU102、101のそれぞれは、直前にランタイムテストが実行されたCPUからのCPU間割り込みに応じて1回目の分割テストを実行し、タイマ25からの割り込みに応じて2〜N回目の分割テストを実行する。また、CPU102、101のそれぞれは、1〜(N−1)回目の分割テストの実行後にはタイマ25を設定し、N回目の分割テストの実行後には次のランタイムテスト対象のCPU101又は100に対してCPU間割り込みを通知する。
CPU100は、直前にランタイムテストが実行されたCPU101からのCPU間割り込みに応じて1回目の分割テストを実行し、タイマ25からの割り込みに応じて2〜N回目の分割テストを実行する。また、CPU100は、1〜(N−1)回目の分割テストの実行後にはタイマ25を設定し、N回目の分割テストの実行後には、次のランタイムテスト対象の共通回路120のランタイムテストを実行する制御を行う。
CPU100は、自身のランタイムテスト後に共通回路120の1回目の分割テストを実行し、タイマ25からの割り込みに応じて共通回路120の2〜N回目の分割テストを実行する。また、CPU100は、1〜(N−1)回目の分割テストの実行後にはタイマ25を設定する。
なお、CPU100〜103のそれぞれは、分割テストの実行数をカウントすることで、1〜(N−1)回目の分割テストの実行後か、N回目の分割テストの実行後かを判定するようにすればよい。分割テストの実行数は、例えば、DDRメモリ20、メモリ21、又は、内蔵メモリ50に格納することで保持するようにすればよい。
続いて、図17を参照して、実施の形態4に係るCPU100〜103の1回目の分割テスト実行時の動作について説明する。図17では、図8〜図10における処理と同様の処理については同一の符号を付し、適宜その説明を省略する。
CPU100〜103のそれぞれは、その処理の実行中に(S100)、割り込みが通知されると、その割り込みに応じた割り込みハンドラを実行する。CPU100〜103のそれぞれは、図8〜図10と同様に、割り込みに応じた割り込みハンドラにおいてステップS101〜S103の処理を実行する。この割り込みは、CPU103であればタイマ15からの割り込みとなり、CPU102〜100であれば直前にランタイムテストを実行したCPU103〜101からのCPU間割り込みとなる。
一方、CPU100〜103のそれぞれは、リセットハンドラにおけるステップS106〜S108の実行後、タイマ25を設定してから(S140)、ステップS110、S111を実行する点が、図8〜図10とは異なる。
続いて、図18を参照して、実施の形態4に係るCPU100〜103の2〜N回目の分割テスト実行時の動作について説明する。図18では、図8〜図10、17における処理と同様の処理については同一の符号を付し、適宜その説明を省略する。
CPU100〜103のそれぞれは、その処理の実行中に(S100)、タイマ25から割り込みが通知されると、その割り込みに応じた割り込みハンドラを実行する。CPU100〜103のそれぞれは、図8〜図10、17と同様に、割り込みに応じた割り込みハンドラにおいてステップS101〜S103の処理を実行する。
CPU100〜103のそれぞれは、リセットハンドラにおけるステップS106〜S108の実行後、他のCPUに対して割り込みを通知する(S141)。この割り込みは、CPU101〜103であれば、図8、9と同様に次のランタイムテスト実行対象のCPUに対するCPU間割り込み(S109)となり、CPU100であれば、図10と同様に他の全てのCPU101〜103に対するCPU間割り込み(S112)となる。また、CPU101〜103であれば、ステップS141の後に、図8、9と同様にステップS110、S111を実行するが、CPU100であれば、ステップS141の後に、図10と同様にステップS110、S111を実行せず、共通回路120のランタイムテストを実行する制御を行う。
なお、ランタイムテストを3つ以上の分割テストに分割して実行する場合には、2〜(N−1)回目の分割テスト実行時の動作は、図18においてステップS141に代えてステップS140を実行する動作となることは自明であるため、詳細な説明は省略する。
続いて、図19を参照して、実施の形態4に係る共通回路120の1回目の分割テスト実行時の動作について説明する。図19では、図11における処理と同様の処理については同一の符号を付し、適宜その説明を省略する。
CPU100は、図11と同様に、リセットハンドラにおいて、ステップS112〜S115を実行する。一方、CPU100は、割り込みハンドラにおけるステップS118〜S120の実行後、タイマ25を設定してから(S142)、ステップS121、S122を実行する点が、図11と異なる。
続いて、図20を参照して、実施の形態4に係る共通回路120の2回目の分割テスト実行時の動作について説明する。図20では、図11、図19における処理と同様の処理については同一の符号を付し、適宜その説明を省略する。
CPU100は、その処理の実行中に(S143)、タイマ25から割り込みが通知されると、その割り込みに応じた割り込みハンドラを実行する。CPU100は、図11、19と同様に、割り込みハンドラにおいて、ステップS112〜S115の処理を実行する。なお、リセットハンドラではなく、割り込みハンドラにおいてこれらの処理を実行する点は、図11、19とは異なる。以降、図11と同様に、ステップS116〜S122が実行される。
なお、ランタイムテストを3つ以上の分割テストに分割して実行する場合には、2〜(N−1)回目の分割テスト実行時の動作は、図20においてステップS120の後にステップS142を実行する動作となることは自明であるため、詳細な説明は省略する。
なお、以上の説明では、実施の形態4として、実施の形態3に対して、さらに、タイマ25を有するようにし、分割テストを実施する形態について説明したが、これに限られない。実施の形態1又は2に対して、これらの構成を適用するようにしてもよい。
以上に説明したように、本実施の形態4は、演算回路(CPU100〜103のそれぞれに対応)全体のスキャンテストに使用する複数のテストパタンを分割した複数の単位のそれぞれについてのスキャンテストを分割テストとして実行する毎に、演算回路に対するスキャンテストの実行を終了するものである。また、本実施の形態4は、共通回路120全体のスキャンテストに使用する複数のテストパタンを分割した複数の単位のそれぞれについてのスキャンテストを分割テストとして実行する毎に、共通回路120に対するスキャンテストの実行を終了するものである。半導体装置4は、演算回路及び共通回路120のそれぞれの分割テストを終了してからの時間を計測し、その演算回路及び共通回路120のそれぞれの次の分割テストを開始するタイミングを演算回路に通知するタイマ25を備えている。そして、演算回路は、タイマ25からの通知に応じて、スキャンテスト回路(BISTコントローラ11、110〜113、121に対応)に分割テストの開始を指示するものである。
これによれば、スキャンテストを複数の単位に分割した分割テストの実行を終了したタイミングで演算回路が割り込みに応じた処理を実行することができるため、演算回路による割り込み応答性能を向上することができる。よって、例えば、CPU100〜103において割り込み応答性能が求められるアプリケーションプログラム(例えば、音声認識処理プログラムなど)を、その要求を満たして実行することができる。すなわち、リアルタイム性を要するシステムにおいても、ランタイムテストを実行することが可能となる。
<実施の形態5>
続いて、実施の形態5について説明する。以下の実施の形態5の説明では、上述した実施の形態1〜4と同様の内容については、同一の符号を付す等して、適宜、その説明を省略する。図21に示すように、本実施の形態5に係る半導体装置5は、実施の形態3に係る半導体装置3と比較して、さらに、電源制御回路26と、電源スイッチ170〜173、180とを有する。
電源制御回路26は、CPU100〜103及び共通回路120のそれぞれの電源状態を制御する回路である。電源制御回路26は、CPU100〜103から出力されるステータス信号を監視し、CPU100〜103のそれぞれがスリープ状態に移行した場合には、CPU100〜103のそれぞれの電源をOFFにする。また、電源制御回路26は、CPU100〜103の全てがスリープ状態に移行した場合には、CPU100〜103及び共通回路120の電源をOFFにする。これにより、省電力を実現する。なお、電源制御回路26は、共通回路120を電源OFFにする場合には、共通回路120のL2キャッシュメモリ124及びSCUタグRAM126の電源はONにしたままとし、そのデータの保持を維持する。
電源スイッチ170は、CPU100と接続され、電源スイッチ171は、CPU101と接続され、電源スイッチ172は、CPU102と接続され、電源スイッチ173は、CPU103と接続され、電源スイッチ180は、共通回路120と接続される。電源制御回路26は、電源スイッチ170〜173、180のそれぞれを操作することで、CPU100〜103及び共通回路120のそれぞれの電源ON・OFFを行う。
また、電源制御回路26は、割り込みコントローラ14からの割り込み信号の入力に応じて、CPU100〜103及び共通回路120のうち、電源をOFFにした回路の電源をONにし、リセットコントローラ13に対して電源をONにした回路のリセットを要求する。
この電源制御回路26によるCPU100〜103及び共通回路120に対する、省電力状態への移行と、省電力状態からの復帰の動作は、上述のCPU100〜103及び共通回路120のランタイムテストを実行する状態への移行と、ランタイムテスト実行後の状態からの復帰の動作と相似する。そこで、本実施の形態5では、この電源制御回路26による機能を流用することで、CPU100〜103及び共通回路120のランタイムテストを実行する状態への移行とランタイムテスト実行後の状態からの復帰の動作を実現する。
この動作を実現するために、本実施の形態5に係る電源制御回路26は、CPU100〜103のスリープ状態を検出した際に、CPU100〜103及び共通回路120の電源をOFFにする動作を抑止する設定を、CPU100〜103のそれぞれから実施可能に改良されたものである。
CPU100〜103のそれぞれのランタイムテストを実行する場合には、CPU100〜103のそれぞれは、図8〜10のステップS101又はS102のタイミングで、電源制御回路26に対して電源をOFFにする動作を抑止する設定を行い、図8〜10のステップS106〜S108のいずれかのタイミングで電源制御回路26に対して電源をOFFにする動作の抑止を解除する設定を行う。
また、共通回路120のランタイムテストを実行する場合には、CPU100は、図11のステップS112〜S114のいずれかのタイミングで、電源制御回路26に対して電源をOFFにする処理を抑止する設定を行い、図11のステップS118〜S120のいずれかのタイミングで電源制御回路26に対して電源をOFFにする処理の抑止を解除する設定を行う。
これによれば、CPU100〜103がスリープ状態に移行しても、CPU100〜103及び共通回路120の電源がOFFにされることはないため、ランタイムテストを実行することが可能となる。
BISTコントローラ11は、CPU100〜103及び共通回路120のそれぞれのランタイムテストの実行後、リセットコントローラ13にリセットを要求するのではなく、割り込みコントローラ14に割り込み信号を出力する。割り込みコントローラ14は、この割り込み信号に応じて、割り込み信号を電源制御回路26に出力する。
電源制御回路26は、電源をOFFする動作のみが抑止されているため、実際の電源状態はONであるが、CPU100〜103のいずれかをスリープ状態に移行させてスキャンテストを実行した場合には、そのCPUの電源状態がOFFであると認識している。そのため、この場合には、電源制御回路26は、割り込み信号に応じて、スキャンテストを実施したCPUに対するリセットをリセットコントローラ13に要求する。
また、電源制御回路26は、電源をOFFする動作のみが抑止されているため、実際の電源状態はONであるが、CPU100〜103の全てがスリープ状態に移行した場合には、CPU100〜103及び共通回路120の全ての電源状態がOFFであると認識している。そのため、この場合には、電源制御回路26は、割り込み信号に応じて、CPU100〜103及び共通回路120の全てに対するリセットをリセットコントローラ13に要求する。なお、CPU100〜103に対するリセットは、上述したようにリセットマスク回路18によって抑止される。
すなわち、本実施の形態5によれば、実施の形態1〜4では、BISTコントローラ11がハンドリングしていたテスト対象の回路のリセットを電源制御回路26の機能を流用することで容易に実現することができる。
なお、以上の説明では、実施の形態5として、実施の形態3に対して、さらに、電源制御回路26を有するようにした形態について説明したが、これに限られない。実施の形態1、2、4のいずれかに対して、この構成を適用するようにしてもよい。
以上に説明したように、本実施の形態5では、半導体装置5は、演算回路(CPU100〜103)がスリープ状態に移行したときに、演算回路の電源をOFFにし、割り込みが通知されたときに、演算回路の電源をONにしてリセットコントローラ13によって演算回路をリセットする電源制御回路26を備えている。演算回路は、演算回路に対するスキャンテストを実行する場合には、演算回路の電源OFFを抑止するように電源制御回路26を設定してから、スリープ状態に移行する。そして、演算回路に対するスキャンテストの実行後に、電源制御回路26に割り込みを通知するようにしている。これによれば、電源制御回路の機能を流用して、演算回路のスキャンテストを実行する状態への移行と、その状態からの復帰を実現することができる。すなわち、ランタイムテストを実現するための論理設計コストを低減することができる。
<実施の形態6>
続いて、実施の形態6について説明する。以下の実施の形態6の説明では、上述した実施の形態1〜5と同様の内容については、同一の符号を付す等して、適宜、その説明を省略する。図22に示すように、本実施の形態6に係る半導体装置6は、実施の形態3に係る半導体装置3と比較して、BISTコントローラ11、110〜113のそれぞれに換えて、テストコントローラ60、160〜163のそれぞれを有する点が異なる。
テストコントローラ60は、BISTコントローラ11と比較して、テストパタン及び期待値をDDRメモリ20から取得して、テストコントローラ160〜163のそれぞれに供給する点が異なる。また、テストコントローラ160〜163のそれぞれは、BISTコントローラ110〜113のそれぞれと比較して、テストパタン及び期待値を生成せず、テストコントローラ60から供給されたテストパタン及び期待値を使用する点が異なる。
すなわち、実施の形態6では、DDRメモリ20は、テストパタンと、期待値が予め格納されている。テストコントローラ60は、ローカルバス及びシステムバスを介して、DDRメモリ20からテストパタン及び期待値を読み出す。テストコントローラ160〜163のそれぞれは、テストコントローラ60が読み出したテストパタン及び期待値を使用してスキャンテストを実施する。なお、テストコントローラ60及びCPU100〜103のいずれかが、半導体装置6の起動時に、外部バスコントローラ17に接続されているメモリ21からDDRメモリ20又は内蔵メモリ50にテストパタン及び期待値を事前に転送しておき、テストコントローラ60は、ランタイムテストの実行時にDDRメモリ20又は内蔵メモリ50からテストパタン及び期待値を取得するようにしてもよい。ここで、メモリ21に代えてフラッシュメモリ等の不揮発性メモリを用いても良い。
ここで、CPU100〜103のそれぞれのランタイムテストを実行する場合、CPU100〜103のそれぞれは、テストコントローラ60が有する制御レジスタに対して、DDRメモリ20においてCPU100〜103用のテストパタンが格納されているアドレスを設定する。テストコントローラ60は、DDRメモリ20において、制御レジスタに設定されたアドレスから、CPU100〜103用のテストパタンを取得する。
また、共通回路120のランタイムテストを実行する場合、CPU100は、テストコントローラ60が有する制御レジスタに対して、DDRメモリ20において共通回路120用のテストパタンが格納されているアドレスを設定する。テストコントローラ60は、DDRメモリ20において、制御レジスタに設定されたアドレスから、共通回路120用のテストパタンを取得する。
なお、以上の説明では、実施の形態6として、実施の形態3に対して、BISTコントローラ11、110〜113に代えて、テストコントローラ60、160〜163を有するようにし、DDRメモリ20にテストパタン及び期待値を格納した形態について説明したが、これに限られない。実施の形態1、2、4、5のいずれかに対して、これらの構成を適用するようにしてもよい。
ここで、実施の形態4に対して、これらの構成を適用した場合には、CPU100〜103のそれぞれは、テストコントローラ60が有する制御レジスタに対して、テストパタン数に代えて、その分割テストでスキャンインするテストパタン量(例えば、DDRメモリ20における開始アドレスと終了アドレス)を設定するようにしてもよい。すなわち、DDRメモリ20に格納されたCPU100〜103のそれぞれに対するテストパタン群を分割した複数の単位のそれぞれについてのランタイムテストを、CPU100〜103のそれぞれに対する分割テストとして実施する。また、DDRメモリ20に格納された共通回路120に対するテストパタン群を分割した複数の単位のそれぞれについてのランタイムテストを、共通回路120に対する分割テストとして実施する。
以上に説明したように、本実施の形態6では、スキャンテスト回路(テストコントローラ60、160〜163に対応)は、半導体装置6の外部に備えられた外部記憶回路(DDRメモリ20に対応)に格納されたテストパタンを取得し、取得したテストパタンを処理回路にスキャンインすることでスキャンテストを実行するようにしている。
BISTはランダムに生成したテストパタンを利用するため、故障検出率が上昇し難いという問題がある。それに対して、本実施の形態6では、故障検出率の高いテストパタンを事前に作成し、テスト対象の処理回路に流し込むことができるようになり、テスト時間を短縮することができる。
<実施の形態7>
続いて、実施の形態7について説明する。以下の実施の形態7の説明では、上述した実施の形態1〜6と同様の内容については、同一の符号を付す等して、適宜、その説明を省略する。
図23に示すように、本実施の形態7に係る半導体装置7は、実施の形態3に係る半導体装置3と比較して、CPUクラスタ10がCPU100を1つだけ有する点が異なる。また、本実施の形態7に係るCPU100は、実施の形態3に係るCPU100と比較して、さらに、初期化マスク回路117a、117bを有する点が異なる。また、本実施の形態7に係る共通回路120は、実施の形態3に係る共通回路120と比較して、スヌープ制御ユニット125及びSCUタグRAM126を有さない点が異なる。これは、CPUクラスタ10は、複数のCPUを有さないため、CPU間でL1キャッシュメモリ115のキャッシュコヒーレンシを保証する制御が不要であるからである。
初期化マスク回路117aは、L1キャッシュコントローラ114がL1キャッシュメモリ115に対して初期値を書き込んでL1キャッシュメモリ115を初期化する処理を抑止する回路である。より具体的には、初期化マスク回路117aは、初期化処理の抑止を指示する指示信号をL1キャッシュコントローラ114に出力する。L1キャッシュコントローラ114は、CPU100のリセット時に、その指示信号が入力されている場合、CPU100のリセット解除で実行するL1キャッシュメモリ115に対するデータの初期化のための書き込みを行わないように、その動作を変更する。初期化マスク回路117aは、CPU100のランタイムテスト実行後のリセット時における、L1キャッシュメモリ115の初期化を抑止するよう、その動作を有効化する。
初期化マスク回路117bは、L1キャッシュコントローラ114によるL1キャッシュメモリ115に対する書き込みを抑止する回路である。より具体的には、初期化マスク回路117bは、L1キャッシュコントローラ114からL1キャッシュメモリ115に対してデータの書き込みのために出力される信号をマスク(遮断)する。初期化マスク回路117bは、CPU100のランタイムテスト実行時におけるL1キャッシュメモリ115へのデータの書き込みを抑止するよう、その動作を有効化する。
図5を参照して説明すると、ステップS4のタイミングで、CPU100は、L1キャッシュメモリ115に対する初期化及び書き込みのそれぞれを抑止するように、初期化マスク回路117a、117bのそれぞれを設定する。また、ステップS14のタイミングで、CPU100は、L1キャッシュメモリ115に対する初期化及び書き込みのそれぞれの抑止を解除するように、初期化マスク回路117a、117bのそれぞれもしくはクロックコントローラ12を設定する。この設定は、初期化マスク回路117a、117bのそれぞれが有する制御レジスタ(図示せず)に対して、初期化又は書き込みを抑止するか否かを示す値を設定することで行われる。
これによれば、L1キャッシュメモリ115の内容が保持されるため、CPU100が処理を再開した際におけるL1キャッシュメモリ115のミスヒットを防止して、性能劣化を抑止することができる。このように、マルチコアとは異なり、シングルコアの場合には、L1キャッシュメモリ115の内容をフラッシュせずに保持したままであっても、他のCPUがスヌープ制御ユニット125の制御によってそのデータにアクセスすることができなくなってしまうといった問題も生じることはない。
なお、以上の説明では、実施の形態7として、実施の形態3に対して、CPU100を1つだけ有するようにし、CPU100がさらに初期化マスク回路117a、117bを有するようにし、共通回路120がスヌープ制御ユニット125及びSCUタグRAM126を有さないようにした形態について説明したが、これに限られない。実施の形態1、2、4〜6のいずれかに対して、これらの構成を適用するようにしてもよい。
以上に説明したように、本実施の形態7では、CPU100がL1キャッシュメモリ115と、L1キャッシュコントローラ114を有する。そして、CPU100に対するスキャンテストを実行しているときに、L1キャッシュコントローラ114からL1キャッシュメモリ115に対するデータの書き込みを抑止するようにしている。これによれば、CPU100が処理を再開した際におけるL1キャッシュメモリ115のミスヒットを防止して、性能劣化を抑止することができる。
<実施の形態8>
続いて、実施の形態8について説明する。以下の実施の形態8の説明では、上述した実施の形態1〜7と同様の内容については、同一の符号を付す等して、適宜、その説明を省略する。図24に示すように、本実施の形態8に係る半導体装置8は、実施の形態2に係る半導体装置2と比較して、さらに、タイマ27と、GPU(Graphics Processing Unit)クラスタ40を有する。GPUクラスタ40は、GPU400と、BISTコントローラ410とを有する。
タイマ27は、時間の経過を計測し、GPUクラスタ40のランタイムテストの実行タイミングを割り込みによってCPUクラスタ10に対して通知する回路である。より具体的には、タイマ27は、ランタイムテストの実行タイミングとなる毎に、割り込み信号を割り込みコントローラ14に出力する。割り込みコントローラ14は、この割り込み信号に応じて、タイマ27からの割り込みの通知先として予め設定されたCPUに対して割り込み信号を出力する。
なお、CPUクラスタ10は、半導体装置8の起動後に、ランタイムテストの実行タイミングをDTI毎に通知するようにタイマ27を設定する。タイマ27を設定するCPUは、例えば、予め任意に定めるようにしてもよい。
GPU400は、CPUクラスタ10のCPU100〜103が実行する処理の一部を補助的に実行する回路である。すなわち、GPU400は、CPU100〜103のいずれかによって管理され、CPU100〜103のいずれかからの制御がないと動作しない回路である。
BISTコントローラ410は、BISTコントローラ11からの制御に応じて、GPU400のランタイムテストを実行する回路である。BISTコントローラ410は、BISTコントローラ110〜113と同様に、スレーブとして機能する。
続いて、図25を参照して、実施の形態8に係るGPU400のランタイムテスト実行時の動作について説明する。以下、本実施の形態8では、CPU100がGPU400のランタイムテストの実行を制御する手順について説明するが、CPU100に代えてCPU101〜103のいずれかがGPU400のランタイムテストの実行を制御する形態としてもよい。
タイマ27は、前回に割り込み信号を出力した時点から、DTIが経過した時点で、割り込みコントローラ14を介してCPU100に対して割り込みを通知する。すなわち、この例では、割り込みコントローラ14には、タイマ27からの割り込みの通知先として、CPU100が予め設定されている。
CPU100は、その処理の実行中に(S150)、タイマ27に起因する割り込みが通知されると、タイマ27の割り込みに応じた割り込みハンドラを実行する。CPU100は、割り込みハンドラにおいて、ランタイムテストを実行するための設定を行う(S151)。より具体的には、CPU100は、BISTコントローラ11の制御レジスタに対してGPU400をテスト対象として設定する。また、CPU100は、割り込みハンドラにおいて、GPU400の情報を退避する(S152)。より具体的には、CPU100は、GPU400の動作を停止させて、GPU400のレジスタに格納されたデータをDDRメモリ20、メモリ21、及び、内蔵メモリ50に退避する。そして、CPU100は、BISTコントローラ11に対してランタイムテストの開始を指示し(S153)、割り込みハンドラを終了する(S154)。GPU400は、スリープ状態に移行することができないため、このようにCPU100から明示的にランタイムテストの開始を指示する。
BISTコントローラ11は、CPU100からの指示に応じて、GPU400のランタイムテストの開始をBISTコントローラ410に指示する。BISTコントローラ410は、BISTコントローラ11からの指示に応じて、GPU400のランタイムテストを実行する(S155)。
BISTコントローラ410は、GPU400のランタイムテストの実行終了をBISTコントローラ11に通知する。BISTコントローラ11は、BISTコントローラ410からの通知に応じて、リセットコントローラ13を介してGPU400をリセットする(S156)。また、BISTコントローラ11は、割り込みコントローラ14を介してCPU100に対して割り込みを通知する。CPU100は、その処理の実行中に(S157)、BISTコントローラ11に起因する割り込みが通知されると、BISTコントローラ11からの割り込みに応じた割り込みハンドラを実行する。CPU100は、割り込みハンドラにおいて、ランタイムテスト結果の確認(S158)と、GPU400の情報の復帰(S159)を行う。より具体的には、CPU100は、DDRメモリ20、メモリ21、及び、内蔵メモリ50に退避したデータをGPU400のレジスタに復帰する。なお、ランタイムテスト結果の確認は、CPU100〜103及び共通回路120のランタイムテスト実行時と同様であるため、説明を省略する。そして、CPU100は、割り込みハンドラを終了し(S160)、プログラムの実行を再開する(S161)。
なお、以上の説明では、実施の形態8として、実施の形態2に対して、さらに、タイマ27と、GPUクラスタ40(GPU400及びBISTコントローラ410)を有するようにした形態について説明したが、これに限られない。実施の形態1、3〜7のいずれかに対して、これらの構成を適用するようにしてもよい。ここで、GPUクラスタ40は、暗号処理回路や画像認識回路等のハードウェアアクセラレータであってもよい。
以上に説明したように、本実施の形態8では、半導体装置8は、GPU400に対するスキャンテストを実行するタイミングをCPU100に通知するタイマ27を備えている。CPU100は、タイマ27からの通知に応じて、GPU400に対するスキャンテストの実行を指示する。そして、スキャンテスト回路(BISTコントローラ11、410に対応)は、CPU100からの指示に応じて、GPU400に対するスキャンテストを実行する。GPU400のような大規模なモジュールは、面積制限の都合上、二重化してロックステップによって動作を確認することは困難である。それに対して、本実施の形態8によれば、CPU100からの制御によるランタイムテストによって、大規模なGPU400であっても定期的な正常動作を確認することが可能である。
<実施の形態9>
続いて、実施の形態9について説明する。以下の実施の形態9の説明では、上述した実施の形態1〜8と同様の内容については、同一の符号を付す等して、適宜、その説明を省略する。図26に示すように、本実施の形態9に係る半導体装置9は、実施の形態3に係る半導体装置3と比較して、さらに、タイマ28〜31を有する。
上述したタイマ15は、時間の経過を計測し、ランタイムテストの実行タイミングを割り込みによってCPU103に対して通知する回路であった。それに対して、タイマ28〜31のそれぞれは、タイマ15と同様に、時間の経過を計測し、ランタイムテストの実行タイミングを割り込みによってCPU102〜100及び共通回路120のそれぞれに対して通知する回路である。なお、CPUクラスタ10は、半導体装置9の起動後に、タイマ15と同様に、ランタイムテストの実行タイミングをDTI毎に通知するようにタイマ28〜31を設定する。タイマ15、28〜31を設定するCPUは、例えば、予め任意に定めるようにしてもよい。
すなわち、割り込みコントローラ14は、タイマ28からの割り込みに応じた割り込み信号の通知先としてCPU102が予め設定されており、タイマ29からの割り込みに応じた割り込み信号の通知先としてCPU101が予め設定されており、タイマ30からの割り込みに応じた割り込み信号の通知先としてCPU100が予め設定されており、タイマ31からの割り込みに応じた割り込み信号の通知先としてCPU100が予め設定されている。
CPU103は、これまでの実施の形態1〜8と同様に、タイマ15からの割り込みに応じて、CPU103のランタイムテストを実行する制御を行う。CPU102は、CPU103からのCPU間割り込みでなく、タイマ28からの割り込みに応じて、CPU102のランタイムテストを実行する制御を行う点が実施の形態1〜8と異なる。CPU101は、CPU102からのCPU間割り込みでなく、タイマ29からの割り込みに応じて、CPU101のランタイムテストを実行する制御を行う点が実施の形態1〜8と異なる。CPU100は、CPU101からのCPU間割り込みでなく、タイマ30からの割り込みに応じて、CPU100のランタイムテストを実行する制御を行う点が実施の形態1〜8と異なる。また、CPU100は、CPU100のランタイムテストの実行後でなく、タイマ31からの割り込みに応じて、共通回路120のランタイムテストを実行する制御を行う点が実施の形態1〜8と異なる。すなわち、本実施の形態9では、CPU103〜101のそれぞれは、CPU間割り込みをCPU102〜100のそれぞれに通知しない。
このように、CPU100〜103及び共通回路120毎に、専用のタイマ15、28〜31を用意してランタイムテストを実行するようにしてもよい。
<他の実施の形態>
(パワーオンセルフテストをランタイムテストで代用)
CPU100〜103では、一般的に、電源ON直後にLatent Faultを検出するためにパワーオンセルフテスト(Power On Self Test:POST)が実施されているが、このPOSTに代えて、上述のランタイムテストを実施するようにしてもよい。
ここで、パワーオン直後のセルフテスト時間も、起動時間の制約により、制限時間が課されることが一般的である。よって、大規模な回路をBISTで診断する場合には、制限時間内に終わらない可能性がある。しかしながら、パワーオン直後から使用する必要のない回路は、パワーオン直後のPOSTを上述のランタイムテストによって代用することが可能である。
よって、CPU100〜103のうち、起動時間の制約は不要であるとして予め定められた少なくとも1つのCPUについては、POSTを実行せず、上述のランタイムテストを実行するようにしてもよい。
例えば、BISTコントローラ11の制御レジスタに、CPU100〜103のそれぞれについて、POSTを実施するCPUであるか否かを示す設定値を予め格納するようにする。そして、BISTコントローラ11は、制御レジスタの設定値に基づいて、POSTを実施しないCPUに対しては、そのCPUがブートした後にランタイムテストを実施するようにしてもよい。
例えば、BISTコントローラ11がPOSTを実施しないCPUに対して、割り込みコントローラ14を介して割り込みを通知し、CPUが割り込みに応じて、自身のランタイムテストを実行する制御を開始するようにしてもよい。なお、CPUがブートしたか否かは、例えば、CPUがブートしたときにブートしたことを示すステータス信号をBISTコントローラ11に送信することで、BISTコントローラ11が認識可能とすればよい。以上、CPU100〜103を例に説明したが、同様な考え方をGPU400に適用できることは言うまでもない。
(タイマ以外でのランタイムテストの開始・再開タイミングの通知)
また、上述した実施の形態では、タイマ15、27〜31でランタイムテストの開始タイミングを通知し、タイマ25でランタイムテストの再開タイミングを通知するようにしているが、これに限られない。例えば、BISTコントローラ11からランタイムテストの開始・再開タイミングを通知するようにしてもよい。例えば、BISTコントローラ11にランタイムテストの開始又は再開タイミングを設定するレジスタを設ける。BISTコントローラ11は、レジスタに設定された開始又は再開タイミングで、CPU100〜103、共通回路120、及びGPU400のそれぞれにランタイムテストの開始又は再開タイミングを通知する。
なお、BISTコントローラ11が開始又は再開タイミングを認識する方法は、タイマのようにクロック信号に基づいてカウントダウンを行うことで認識する方式を採用してもよく、半導体装置の外部に設けられたタイマ(Wall Clock)の出力値(時刻を示す値)を参照することで認識する方式を採用してもよい。
(システムバス及びバスコントローラの二重化)
ランタイムテストのテスト対象は、上記の例のみに限られず、例えば、L3キャッシュメモリとそのキャッシュコントローラを有する回路、又は、システムバス、スヌープ制御システムユニット23、及びバスコントローラ(DDRコントローラ16及び外部バスコントローラ17)を対象とすることもできる。ただし、システムバス、スヌープ制御システムユニット23、及びバスコントローラをテスト対象とした場合には、システムバスにおけるトランザクションを阻害し、システム性能の劣化が発生してしまう。そのため、この場合には、図27に示すように、システムバス、スヌープ制御システムユニット23、及びバスコントローラを二重化し、ランタイムテストの実行中には、ランタイムテストを実行していないシステムバス、スヌープ制御システムユニット23、及びバスコントローラを使用することで、システム性能の劣化を低減するようにしてもよい。
なお、以上の説明では、システムバス、スヌープ制御システムユニット23、及びバスコントローラの全てを二重化した例について説明したが、これに限られない。システムバス、スヌープ制御システムユニット23、及びバスコントローラのうち、いずれか1つ又は2つを二重化するようにしてもよい。また、バスコントローラについても、DDRコントローラ16及び外部バスコントローラ17のうち、いずれか1つを二重化するようにしてもよい。また、いずれかの回路を二重化する場合に、二重化した回路を両方とも常時動作させ、それぞれの対応する出力信号の一致を常時確認する比較回路を別に設けるのであれば、その回路をランタイムテストのテスト対象にする必要は必ずしもない。
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は既に述べた実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において種々の変更が可能であることは言うまでもない。
上述した実施の形態では、ランタイムテストが実行される演算要素単位(演算回路)がCPUである例について説明したが、これに限られない。例えば、マルチスレッドプロセッサ又はメニーコアプロセッサにおけるコアを、ランタイムテストが実行される演算要素単位(演算回路)としてもよい。
リセットマスク回路18及び割り込みマスク回路19の実装場所も、上述の実施の形態の例に限られない。例えば、リセットマスク回路18は、リセットコントローラ13内にあってもよく、CPUクラスタ10内にあってもよい。また、例えば、割り込みマスク回路19は、クロックコントローラ12内にあってもよく、割り込みコントローラ14内、又はCPUクラスタ10内にあってもよい。
上述した実施の形態では、ランタイムテスト前にテスト対象回路のレジスタのデータを退避し、ランタイムテスト後に復帰するようにしているが、これに限られない。例えば、レジスタを二重化して、それらの値を比較することでレジスタの異常を検出可能とするとともに、レジスタをスキャンテスト対象外とすることで、ランタイムテストの前後でレジスタのデータを保持可能としてもよい。また、レジスタを二重化し、片方のレジスタをスキャンテスト対象外の退避用のレジスタとしてもよい。これは、メモリ21にレジスタのデータを退避すると時間を要してしまう場合に有効である。
上述した実施の形態では、CPU100〜103のそれぞれは、BISTコントローラ11の制御レジスタを参照することで、リセット要因がランタイムテスト実行後のリセットによりブートしたか否かを確認し、リセットハンドラにおける動作を変更していたが、これに限られない。例えば、CPU100〜103のそれぞれは、ランタイムテストの実行前に、リセットベクタを、ランタイムテスト専用のリセットベクタに書き換えることによって、上述のランタイムテスト実行結果と期待値との比較などの処理を実行するランタイムテスト用のリセットハンドラが実行されるようにしてもよい。そして、このランタイムテスト用のリセットハンドラの最後の処理でリセットベクタを元に戻す処理を実行することで、通常のリセット後に通常のリセットハンドラが実行されるようにすればよい。
上述した実施の形態では、共通回路120のリセット時におけるL2キャッシュメモリ124及びSCUタグRAM126の初期化を、初期化マスク回路122aによって実施するようにしているが、これに限られない。例えば、共通回路120に初期化マスク回路122aを有さないようにし、共通回路120のリセット時も初期化マスク回路122b、122cによるマスクを有効にすることで、L2キャッシュメモリ124及びSCUタグRAM126の初期化を抑止するようにしてもよい。
上述した実施の形態では、CPU100〜103のそれぞれのランタイムテストを実行する前に、CPU100〜103のそれぞれがスリープ状態に移行するようにしているが、CPU100〜103のそれぞれが通常動作を停止した状態に移行するのであれば、これに限られない。例えば、CPU100〜103のそれぞれは、無限ループ処理を実行した状態に移行するようにしてもよい。
CPU100〜103のいずれかが、上述のランタイムテストを実行するためのスリープ状態でなく、通常の処理に応じてスリープ状態となっている場合には、そのCPUに対するランタイムテストをスキップするようにしてもよい。例えば、CPU103〜101のそれぞれは、次のランタイムテスト対象のCPUがスリープ状態である場合には、そのCPUをスキップして、さらにその次のランタイムテスト対象のCPUにCPU間割り込みを通知するようにしてもよい。また、CPU103がスリープ状態に移行する場合には、タイマ15からの割り込みの通知先を、その次のランタイムテスト対象のCPU102に変更するように割り込みコントローラ14を設定するようにしてもよい。
また、上述した実施の形態では、ランタイムテスト対象の回路のレジスタのデータを、DDRメモリ20、メモリ21、及び、内蔵メモリ50に退避するものとして説明したが、これらの全てを使用しなくてもよい。例えば、DDRメモリ20、メモリ21、及び、内蔵メモリ50のうち、いずれか1つ又は2つにレジスタのデータを退避するようにしてもよい。