<実施の形態1>
以下、図面を参照して本発明の実施の形態について説明する。図1は、一般乗用車、業務用乗用車(トラック等)などに搭載され得る半導体装置の構成を示すブロック図である。なお、以下の説明において、図面中で同一名称及び同一符号を付した処理部は同一であるものとして重複する説明は適宜省略する。
半導体装置1は、MCU100、監視ASIC200、及び電源回路300を備える。監視ASIC200は、エラー回数カウンタ210、端子リセット制御回路220、エラー検出回路230、及びテスト制御回路240を備える。監視ASIC200は、MCU100との信号入出力を行う端子250、端子251、端子252、及び端子253を備える。MCU100は、MCUリセット制御回路110、内部ロジック回路120、及びCVM(Core Voltage Monitor)130、ポート回路160、マスク回路161、制御レジスタ162、ポート回路163、マスク回路164、制御レジスタ165を備える。またMCU100は、監視ASIC200との信号入出力に用いる端子140、端子141(第1外部端子)、端子142、及び端子143を備える。
電源回路300は、エンジン起動時等の電源ONの際に、MCU100及び監視ASIC200に電源供給を行う。
次に監視ASIC200の構成について説明する。エラー回数カウンタ210には、端子140及び端子250を介して電圧エラー信号(S1)が入力される。ここで電圧エラー信号(S1)は、後述するCVM130が異常を検出した場合にのみハイレベルとなる2値信号である。エラー回数カウンタ210は、電圧エラー信号(S1)の入力回数(すなわちエラーとなった回数。以下の説明ではエラー回数とも記載する。)をカウントアップして保持する。換言するとエラー回数カウンタ210は、MCU100のエラー状態を保持する。エラー回数カウンタ210は、エラー回数の情報を端子リセット制御回路220に供給する。
端子リセット制御回路220には、端子140及び端子250を介して電圧エラー信号(S1)が入力される。さらに、端子リセット制御回路220には、電圧エラー信号(S1)がハイレベルとなった場合に、エラー回数カウンタ210がカウントしたカウント数が入力される。また端子リセット制御回路220には、エラー検出回路230からの出力信号(S7)が入力される。出力信号(S7)は、エラー検出回路230から端子リセット制御回路220に入力される2値信号であり、MCU100の異常時にロウレベルとなる。
端子リセット制御回路220は、電圧エラー信号(S1)がハイレベルとなった場合に、ロウレベルの値を持つ端子リセット信号(S2)を端子251から出力する。ここで、端子リセット信号(S2)は、リセットを指示する場合にロウレベルに立ち下がり、リセット解除を指示する場合にハイレベルに立ち上がる2値信号である。
端子リセット制御回路220は、電圧エラー信号(S1)がハイレベルとなった場合、端子リセット信号(S2)をロウレベルに遷移させた後に、エラー回数カウンタ210から入力されたエラー回数が所定値未満であるか否かを判定する。所定値未満であった場合、端子リセット信号(S2)をハイレベルに遷移させる。すなわち、端子リセット制御回路220は、エラー回数が所定値未満であった場合にリセット解除を指示する端子リセット信号(S2)を出力する。このようにエラー回数を考慮してMCU100外部からリセットを行うことにより、MCU100の状態をより確実に判断した上でMCU100のリセット解除をすることができる。
一方、エラー回数が所定値以上である場合、端子リセット制御回路220は、端子リセット信号(S2)をロウレベルのままにする。そして、端子リセット制御回路220は、図示しない上位システムにエラー通知信号(図示せず)を送信する。ここで上位システムとは、例えば車両の乗員(ドライバー)にシステム故障を通知するコントロールパネル制御等を行う処理部である。上位システムは、端子リセット制御回路220からエラー通知信号を受信した場合、図示しないサブMCU等により動作を継続する等の制御を行う。
端子リセット制御回路220は、出力信号(S7)がロウレベルとなった場合、端子リセット信号(S2)をロウレベルに遷移させる。出力信号(S7)がロウレベルとなった場合には、端子リセット制御回路220は、エラー回数等を考慮することなく、端子リセット信号(S2)をロウレベルに固定する。出力信号(S7)がロウレベルとなった場合にも、端子リセット制御回路220は、上位システムにエラー通知信号を送信する。
テスト制御回路240には、端子143及び端子253を介してテストモード信号(S6)が入力される。テスト制御回路240は、テストモード信号(S6)をエラー検出回路230に入力する。テストモード信号(S6)は、ハイレベルの場合に初期化テスト(initial test)中であることを示す2値信号である。
エラー検出回路230には、端子252を介して外部通知エラー信号(S5)が入力され、テスト制御回路240からテストモード信号(S6)が入力される。エラー検出回路230は、テストモード信号(S6)がハイレベルの場合(すなわち初期化テスト中である場合)、ハイレベルの出力信号(S7)を端子リセット回路220に入力する。一方、テストモード信号(S6)がロウレベルの場合(すなわち通常動作状態である場合)、外部通知エラー信号(S5)の値を出力信号(S7)として端子リセット制御回路220に供給する。またエラー検出回路230は、テストモード信号(S6)がハイレベルの場合(すなわち初期化テスト中である場合)に端子142のハイインピーダンス(Hi−Z)状態を検出した場合、出力信号(S7)の値をロウレベルに変更する(すなわちエラー状態と判定する)。
続いてMCU100内部の各回路について説明する。MCUリセット制御回路110は、イベント保持回路111、およびリセット信号統合回路112を有する。
イベント保持回路111には、電圧エラー信号(S1)及び端子リセット信号(S2)が入力される。イベント保持回路111は、電圧エラー信号(S1)がハイレベルに遷移してから端子リセット信号(S2)が立ち下がる(ロウレベルに遷移する)までの期間を保持する回路である。
イベント保持回路111は、例えば一般的なSR(Set-Reset)ラッチにより構成すればよい。当該SRラッチのセット入力端子には、電圧エラー信号(S1)が入力される。また、当該SRラッチのリセット入力端子には、端子リセット信号(S2)が入力される。イベント保持回路111は、出力信号(S3)をリセット信号統合回路112に入力する。
リセット信号統合回路112には、端子リセット信号(S2)、イベント保持回路111の出力信号(S3)、及び定期テストエラー信号(S8)が入力される。リセット信号統合回路112は、リセット命令信号(S4)を生成する回路である。リセット命令信号(S4)は、ハイレベルの場合にMCU100のリセットを指示し、ロウレベルの場合に通常状態への遷移を指示する2値信号である。
リセット信号統合回路112の構成例の詳細を図2を参照して説明する。リセット信号統合回路112は、例えばインバータ1121、及びOR回路1122を備える。インバータ1121には、端子リセット信号(S2)が入力される。OR回路1122には、イベント保持回路111の出力信号(S3)、インバータ1121の出力信号(端子リセット信号(S2)の反転信号)、及び定期テストエラー信号(S8)が入力される。OR回路1112は、3つの入力信号の論理和値をリセット命令信号(S4)としてリセット信号統合回路112に供給する。
内部ロジック回路120(監視対象ロジック回路)は、CPU121、記憶部122、検出電圧設定レジスタ123、及びエラーフラグレジスタ124を有する。内部ロジック回路120は、後述するCVM130の監視対象となるロジック回路である。なお、内部ロジック回路120は、図示しないレジスタ等を適宜備えているものとする。
ここで、内部ロジック回路120と、MCU100内の他の回路と、は異なる動作電圧で動作することが一般的である。例えば内部ロジック回路120は、1.2Vの動作電圧で動作する。また例えばMCU100内の他の回路は、5.0Vの動作電圧で動作する。内部ロジック回路120を低い電圧で動作させることにより、高集積化及び低消費電力化を図ることができる。
記憶部122は、任意のデータを記憶する処理部であり、RAM(Random Access Memory)等のメモリ装置やレジスタ等を含む概念である。記憶部122は、例えば後述する自己診断プログラムや定期テストプログラム等を保持する。
CPU(Central Processing Unit)121は、MCU100内の中心的な処理装置として機能する電子回路である。CPU121は、記憶部122や図示しない記憶装置等からプログラムを読み出して様々な数値計算や情報処理等を行う。
ハイレベルのリセット命令信号(S4)が内部ロジック回路120に入力された場合、すなわちリセットの指示が入った場合、CPU121は、所定のリセット処理を行い、MCU100をリセット状態に遷移させる。その後にリセット命令信号(S4)がロウレベルに遷移した場合(リセット解除が指示された場合)、CPU121は、MCU100をリセット状態から復帰させる。
リセット状態からの復帰とは、自己診断プログラムの実行、及び通常動作の再開を意味する。はじめにCPU121は、記憶部122に書き込まれた自己診断プログラムを読み出す。ここで自己診断プログラムとは、MCU100の状態を診断するための各種の診断処理が記述されたプログラムである。自己診断プログラムには、記憶部122やMCU100内部の各回路(アナログ回路、デジタル回路)に対する診断処理が含まれる。例えば、自己診断プログラムには、記憶部122及び任意のレジスタに対して書き込みを行い、当該書込みを行った箇所(アドレス)からの読み出しを行い、書き込んだ値と読み出した値が等しいか否かを診断する処理が含まれている。同様に、自己診断プログラムには、回路の入出力の正しさを検証する(例えばMCU100内部で生成したアナログ信号をA/D変換器に入力し、当該A/D変換器が出力した値が所望の値となっているかを検証する)処理が含まれている。すなわち、自己診断プログラムには、MCU100内の各機能が正常に動作するか否かを把握するための全ての検証処理が含まれている。
なお自己診断プログラムは、あくまで各機能を診断する処理が記載されており、不具合の修正処理を行うものではない。そのためCPU121は、自己診断プログラムの実行によって異常を検出した場合、その異常を記憶部122(または他の記憶装置)に書き込む。詳細にはCPU121は、エンドユーザが指定した記憶装置122のアドレスに自己診断プログラムの実行結果を書き込む。なおCPU121は、内部ロジック回路120外の記憶装置に自己診断プログラムの実行結果を書き込んでも良い。
またCPU121は、更に通常動作中に定期テストプログラムを一定周期毎に記憶部122から読み出して実行する。ここで定期テストプログラムとは、CPU121が行う演算処理、その他の通常動作を行うために必要な機能が正常に動作しているか否かをテストするためのプログラムである。例えば定期テストプログラムには、所定の演算を行い、当該演算が所望の値となっているか否かを判定するテストが含まれる。CPU121は、定期的に定期テストプログラムを実行し、実行結果が所望の結果では無かった場合(すなわちエラーであった場合)に定期テストエラー信号(S8)をハイレベルにしてリセット信号統合回路112に入力する。定期テストエラー信号(S8)は、定期テストプログラムの実行が1回でもエラーとなった場合にハイレベルとなる2値信号である。定期テストエラー信号(S8)は、定期テストプログラムの実行がエラーとならなかった場合にはロウレベルとなる。
CPU121は、電源投入後に初期化テスト(initial test)を実行し、動作を開始しても問題ないかをテストする。ここで初期化テストとは、監視ASIC200内のエラー検出回路230への外部通知エラー信号(S5)が正常に入力されるか否か等を検査するテストである。CPU121は、初期化テスト(initial test)を行う際に制御レジスタ165に1(ハイレベル)を設定する。そしてCPU121は、ポート回路163から出力されるテストモード信号(S6)がハイレベルとなるようにポート回路163に入力する各信号を設定する。CPU121と各ポート回路との間において、ポート出力データ信号、ポート出力許可信号、ポート入力データ信号、ポート入力許可信号のやり取りが生じる。CPU100は、ポート出力許可信号に1を設定し、ポート出力データ信号に所望の値を設定することによりポート回路からの出力データを規定することができる。なおCPU121は、初期化テスト(initial test)を行う際には制御レジスタ162に1(ハイレベル)を設定しない。各信号の入出力の詳細は、図4〜図6を参照して後述する。
CPU121は、初期化テスト(initial test)の実行後に制御レジスタ162に1(ハイレベル)を設定し、ポート回路160から出力される外部通知エラー信号(S5)がハイレベルとなるようにポート回路160に入力する各信号を設定する。
CPU121は、上述のように一定時間間隔で定期テストプログラムを実行し、実行結果が所定回数連続して所望の結果では無かった回数をカウントする。CPU121は、当該カウント値が所定数以上であった場合にポート回路160へのポート出力データを1から0にすることにより、外部通知エラー信号(S5)をロウレベルにする。出力値の設定については図4〜6、図11を参照して後述する。
検出電圧設定レジスタ123は、CPU121から内部ロジック回路120の動作補償電圧の上限値が設定されるレジスタである。検出電圧設定レジスタ123は、書き込まれた上限値を検出電圧設定レジスタ131に書き込む。検出電圧レジスタ123、後述する検出電圧設定レジスタ131、エラーフラグレジスタ124、及びエラーフラグレジスタ134の詳細については図7及び図8を参照して後述する。
エラーフラグレジスタ124は、後述するCVM130が動作電圧エラーを検出した場合に、エラーフラグが設定されるレジスタである。エラーフラグとは異常状態であるか否かを示す2値情報である(以下、異常状態を示す場合にはON、異常状態ではない場合をOFFと記載する。)。エラーフラグレジスタ124には、エラーフラグレジスタ134からエラーフラグの値が書き込まれる。
CVM130は、内部ロジック回路120の動作電圧の異常を検出する。なお、CVM130は、内部ロジック回路120の動作状態の異常性を監視する動作監視回路の一態様である。MCU100は、用途に応じてCVM130に代わり、他の動作状態の異常性を監視する動作監視回路を備えても良い。
検出電圧設定レジスタ131は、CPU121から内部ロジック回路120の動作補償電圧の上限値が設定されるレジスタである。基準電圧生成回路132は、検出電圧設定レジスタ131に書き込まれた値(内部ロジック回路120の動作保証電圧の上限値)を読み出し、当該値の電圧値を持つ信号を生成する。基準電圧生成回路132内の構成は、一般的に知られた構成であればよく、例えば定電流源や複数の抵抗値を用いた構成等が考えられる。基準電圧生成回路132は、当該電圧値を持つ信号を電圧比較回路133に供給する。
電圧比較回路133は、基準電圧生成回路132の出力信号の電圧と、内部ロジック回路120の動作電圧と、を比較する。電圧比較回路133は、内部ロジック回路120の動作電圧が基準電圧生成回路132の出力信号の電圧よりも高い場合、電圧エラー信号(S1)をハイレベルにして出力するとともに、エラーフラグレジスタ134にエラーフラグを設定する(エラーが生じたことを示す値を書き込む)。なお、電圧エラー信号(S1)は、内部ロジック回路120の異常性を示すエラー検出信号の一態様である。また電圧比較回路133は、内部ロジック回路120の異常を検出する検出部と解釈できる。
エラーフラグレジスタ134は、エラーフラグとは異常状態であるか否かを示す2値情報であるエラーフラグ(以下、異常状態を示す場合にはON、異常状態ではない場合をOFFと記載する。)を保持するレジスタであり、書き込まれたエラーフラグの値をエラーフラグレジスタ124に書き込む。
ポート回路160は、CPU121からの出力(ポート出力データ信号)に応じて外部通知エラー信号(S5)を出力する。ポート回路160の構成は、図4を参照して後述する。制御レジスタ162には、CPU121からマスク値(0、1)が入力される。ここでマスク値とは、リセット命令信号(S4)を無効(すなわちリセットを指示するハイレベルが入ってきたとしてもポート回路160のリセットを無効にする)にするか否かを指定する値である。マスク値が1である場合、リセット命令信号(S4)はマスク回路161によって無効化される(すなわちポート回路160はリセットされない)。
マスク回路161は、制御レジスタ162に1(ハイレベル)が設定されていた場合、リセット命令信号(S4)の値を無効化する回路である。マスク回路161の構成例を図3を参照して説明する。マスク回路161は、インバータ1611及びOR回路1612を備える。インバータ1611は、リセット命令信号(S4)の反転信号をOR回路1612に入力する。OR回路1612は制御レジスタ162からマスク値を読み出し、インバータ1611の出力信号との論理積値をマスク済みリセット信号(S9−1)としてポート回路160に入力する。ポート回路160に対してマスク済みリセット信号(S9−1)を0として入力した場合、ポート回路160はリセット状態となり、端子142はハイインピーダンス(Hi−Z)状態となる恐れがある。
ポート回路160の構成について図4を参照して説明する。図4は、ポート回路160の構成を示すブロック図である。
ポート回路160は、AND回路1601、AND回路1602、AND回路1603、インバータ1604、NOR回路1605、NAND回路1606、NMOS1607、及びPMOS1608を備える。なお、前述のように内部ロジック回路120の動作電圧とMCU100内の他の領域の動作電圧は異なるため、内部ロジック回路120と他の領域の回路との間にはレベルシフタ(図示せず)が適宜設けられる。
AND回路1601は、ポート入力許可信号とマスク済みリセット信号(S9−1)との論理積値をAND回路1602に入力する。AND回路1602は、端子142からの入力とAND回路1601の出力信号との論理積値をポート入力データとして内部ロジック回路120に供給する。
AND回路1603は、ポート出力許可信号とマスク済みリセット信号(S9−1)との論理積値をインバータ1604及びNAND回路1606に入力する。インバータ1604は、AND回路1603の出力値を反転してNOR回路1605に入力する。NOR回路1605は、インバータ1604の出力値とポート出力データの否定論理和値をNMOS1607のゲートに入力する。NAND回路1606は、ポート出力データとAND回路1603の出力値との否定論理積値をPMOS1608のゲートに入力する。NMOS1607とPMOS1608は、図示するように縦積みで接続される。これにより、端子142から出力値が出力される。
図5は、制御レジスタ162に0が設定されている場合(すなわちマスクを行わない場合)にリセット指示が入った(リセット指示信号(S4)がハイレベル)場合のポート回路160の各回路の出力を示す図である。この場合、AND回路1601及びAND回路1603に0が入力される。これにより、図示するようにNMOS1607及びPMOS1608がオフとなり、端子142がハイインピーダンス(Hi−Z)状態となる。
図6は、制御レジスタ162に1が設定されている場合(すなわちマスクを行う場合)にリセット指示が入った(リセット指示信号(S4)がハイレベル)場合のポート回路160の各回路の出力を示す図である。この場合、AND回路1601及びAND回路1603に1が入力される。これにより、図示するようにNMOS1607及びPMOS1608の少なくとも一方がオンとなり、端子142がハイインピーダンス(Hi−Z)状態となることを回避することができる。
再び図1を参照する。ポート回路163は、CPU121からの出力(ポート出力データ信号)に応じてテストモード信号(S6)を出力する。ポート回路163へのポート出力データ信号は、初期化テスト(initial test)の実行時に1が出力されるように制御される。なお、ポート回路163の構成は、図4に示す構成と略同一である。
制御レジスタ165には、CPU121からマスク値(0、1)が入力される。ここでマスク値とは、リセット命令信号(S4)を無効(すなわちリセットを指示するハイレベルが入ってきたとしてもリセットを無効にする)にするか否かを指定する値である。制御レジスタ165は、初期化テストの実行中にCPU121から1(ハイレベル)が設定される。
マスク回路164は、制御レジスタ165に1(ハイレベル)が設定されていた場合、リセット命令信号(S4)の値を無効化する回路である。マスク回路164の構成は、図3に示す構成と同様である。マスク回路164は、マスク済みリセット信号(S9−2)をポート回路163に入力する。
続いて、図7及び図8を参照して検出電圧設定レジスタ123、検出電圧設定レジスタ131の構成について説明する。図1に示すMCU100は、電圧比較に関する検出電圧設定レジスタ123及び検出電圧設定レジスタ131といった2つのレジスタ回路を持つ構成を示したである。しかしながら、CVM130内にのみレジスタ回路(検出電圧レジスタ131)を設ける構成も技術的には可能である。そこで、MCU100が電圧比較に関するレジスタ回路を1つ(131)のみ持つ場合の構成、及び図1のように電圧比較に関するレジスタ回路を2つ(123、131)持つ場合の構成をそれぞれ説明する。そして、図1のように電圧比較に関するレジスタ回路を2つ(123、131)持つ場合の構成の利点について説明する。
一般的にCPU121からレジスタ回路へのアクセスは、バスを介したアクセスにより実行される。バスアクセスに必要な信号は、以下の信号である。
<1>バスクロック(CLK)
<2>ライトデータ(WDATA)
<3>リードデータ(RDATA)
<4>リセット(RESET)
<5>アドレス信号/IP選択信号(ADDR/SEL)
<6>イネーブル信号/ライトストローブ信号(ENABLE/STRB)
<7>ライト信号(WRITE)
<8>転送延長信号(READY)
なお、以下の説明では上記の<5>?<8>の信号群をまとめて「制御信号」とも呼称する。
図7は、MCU100が電圧比較に関するレジスタ回路を1つ(131)のみ持つ場合の構成を示す概念図である。検出電圧設定レジスタ131は、データ保持部1311、及びバスIF部1312を備える。さらに、内部ロジック回路120とCVM130との間に各信号(上述の<1>〜<8>)に対応するレベルシフタ150−1〜150−4を有する。なお、図面中ではレベルシフタを5つ(150−0〜150−4)図示しているが、実際には各信号線に対応する数のレベルシフタが設けられる。上述のように、内部ロジック回路120の動作電圧(1.2V)とCVM130の動作電圧(5V)は異なる。そのため、上述のバスクロック(CLK)、ライトデータ(WDATA)、リードデータ(RDATA)、リセット(RESET)、制御信号の電圧レベルを変換するレベルシフタを必要とする。レベルシフタ150−0〜150−4は、各信号を電圧レベル変換した後に検出電圧設定レジスタ131に供給する。
データ保持部1311は、CPU121から書き込まれたデータを保持する。バスIF部1312は、内部にアドレスデコーダや制御信号のデコードを行うデコード回路を有する。
次に、電圧比較に関するレジスタ回路を2つ(123、131)持つ場合の構成について説明する。図8は、MCU100が電圧比較に関するレジスタ回路を2つ(123、131)持つ場合の構成を示す概念図である。検出電圧設定レジスタ123は、データ保持部1231及びバスIF部1232を有する。検出電圧設定レジスタ131−1は、データ保持部1311を有する。さらに、内部ロジック回路120とCVM130との間にレベルシフタ150−5及びレベルシフタ150−6を有する。
CPU121と検出電圧設定レジスタ123の間に制御信号、ライトデータ(WDATA)、リードデータ(RDATA)に関するバスアクセスが発生する。また、検出電圧設定レジスタ123にバスクロック(CLK)及びリセット(RESET)が入力される。
データ保持部1231は、CPU121から書き込まれたデータを保持する。バスIF部1232は、内部に制御信号をデコードするデコード回路等を有する。バスIF部1232は、制御信号をデコードし、バスクロック(CLK)及びリセット(RESET)の入力を用いてラッチ信号を生成する。ここでラッチ信号とは、制御信号をデコードすることにより生成される1ショットパルスであり、データの書き込みに用いるパルス信号である。図3の構成では、検出電圧設定レジスタ131内のバスIF部1312において制御信号をデコードしてラッチ信号を生成し、このラッチ信号を用いてデータ保持部1311にデータ書き込みを行う。図8の構成では、検出電圧レジスタ131は、制御信号に代わってラッチ信号を検出電圧設定レジスタ131に供給する。すなわち、図8の構成では、制御信号よりもビット幅の小さいラッチ信号を予め内部ロジック120内で生成し、このラッチ信号を供給している。
レベルシフタ150−5は、バスIF部1232が生成したラッチ信号の電圧レベル変換を行い、変換後のラッチ信号を検出電圧設定レジスタ131に入力する。レベルシフタ150−6は、ライトデータ(WDATA)の電圧レベル変換を行い、変換後のライトデータ(WDATA')を検出電圧設定レジスタ131に供給する。
検出電圧設定レジスタ131は、データ保持部1311のみを有する。換言すると検出電圧設定レジスタ131は、バスIF部に相当する回路を持たない。検出電圧設定レジスタ131は、ラッチ信号を元にデータ保持部1311にライトデータ(WDATA)を格納する。
続いて、図7に示す構成と図8に示す構成の比較を行う。上述したように図7の構成(レジスタ回路が1つのみの構成)の場合、各信号線に対応する数(RDATA32ビット+WDATA32ビット+制御信号10〜15ビット=75〜80個)のレベルシフタを必要とする。一方、図8に示す構成(レジスタ回路が2つの構成)の場合、ライトデータ(WDATA'=32ビット)及びラッチ信号に対応する33個のレベルシフタのみを必要とする。すなわち、図8の構成ではレベルシフタの個数を減らすことができ、回路規模を縮小することができる。なお、図8の構成では、データ保持部を図3の構成よりも1個多く必要とするが、データ保持部はレベルシフタに比べて回路規模が小さいため、全体としての回路規模は図8に示す構成のほうが小さくできる。
図7に示す構成は、バスクロック(CLK)を高電圧(5V)のCVM130内で扱う構成である。バスクロック(CLK)は、定期的に値が遷移する(すなわち値が頻繁に変化する)2値信号である。このバスクロック(CLK)を5V領域内のCVM130が処理するために、動作電流が大きくなってしまう。一方、図8に示す構成は、バスクロック(CLK)を低電圧(1.2V)領域の内部ロジック回路120内で扱う構成であるため、動作電流を小さくすることができ、消費電力を削減することができる。さらに、図8に示す構成は高電圧(5V)領域であるCVM130内の回路点数を少ないため、リーク電流が低減する。
さらにまた、図8に示す構成は設計容易性も高い。CPU121がレベルシフタにアクセスする場合に信号伝達の遅延を引き起こす可能性があり、タイミング設計に悪影響を及ぼす。図8の構成では、CPU121がレベルシフタにアクセスしない構成であるため、設計の難易度を低くすることができる。
続いて、図9及び図10を参照してエラーフラグレジスタ124、エラーフラグレジスタ134の構成について説明する。エラーフラグに関してもCVM130内にのみレジスタ回路(エラーフラグレジスタ134)を設ける構成も技術的には可能である。そこで、MCU100が電圧比較に関するレジスタ回路を1つ(134)のみ持つ場合の構成、及び図1のように電圧比較に関するレジスタ回路を2つ(124、134)持つ場合の構成をそれぞれ説明する。
図9は、MCU100が電圧比較に関するレジスタ回路を1つ(134−1)のみ持つ場合の構成を示す概念図である。エラーフラグレジスタ134は、イベント保持部1343及びバスIF部1342を備える。さらに、内部ロジック回路120とCVM130との間に各信号(上述の<1>〜<8>)に対応するレベルシフタ150−7〜150−11を有する。このレベルシフタ150−7〜150−11を介して、各信号の入出力が行われる。
バスIF部1342は、内部にアドレスデコーダや制御信号のデコードを行うデコード回路を有する。イベント保持部1343は、SRラッチにより構成されており、このSRラッチのセット入力端子には電圧エラー信号(S1)が入力される。また、SRラッチのリセット入力端子にはCPU121からの信号が入力される。CPU121は、自己診断プログラムの実行後に当該SRラッチをリセットする。SRラッチの出力は、レベルシフタ150−11を介してCPU121に供給される。
図10は、MCU100が電圧比較に関するレジスタ回路を2つ(124、134)持つ場合の構成を示す概念図である。エラーフラグレジスタ134は、イベント保持部1343を有する。エラーフラグレジスタ124は、データサンプリング部1243及びバスIF部1242を有する。
イベント保持部1343は、SRラッチにより構成されており、このSRラッチのセット入力端子には電圧エラー信号(S1)が入力される。また、SRラッチのリセット入力端子にはCPU121からの信号が入力される。SRラッチの出力は、レベルシフタ150−12を介してエラーフラグレジスタ124に入力される。
バスIF部1242には、制御信号、バスクロック(CLK)、リセット(RESET)が入力される。バスIF部1242は、制御信号をデコードし、バスクロック(CLK)及びリセット(RESET)の入力を用いてラッチ信号を生成する。データサンプリング部1243は、バスクロック(CLK)を用いて、エラーフラグレジスタ134からの入力をサンプリングする。
本構成においても制御信号のデコード等は、エラーフラグレジスタ124において行われるため、各電圧領域を跨ぐ信号のビット幅が削減される。これにより、レベルシフタの減少による回路規模の削減、消費電力の削減等の効果を奏することができる。
続いて本実施の形態にかかる半導体装置1の動作について図11及び図12を参照して説明する。図11は、MCU100の動作中に自己診断プログラムの実行がエラーとなった場合の各回路の動作を示すタイミングチャートである。以下の例では、MCU100は、自己診断プログラムの連続2回のエラーで異常と判定するものとする。MCU100は、連続するエラーの発生回数ではなく、一定時間内でのエラーの発生回数で異常を判定しても良い。すなわち、MCU100は所定頻度でエラーが発生しているか否かで異常を判定すればよい。
タイミングt11において、電源回路300は、MCU100及び監視ASIC200に対する電源供給を開始する。これによりMCU100は、リセット状態に遷移する。端子リセット回路220は、電源供給後にMCU100に対してハイレベルの端子リセット信号(S2)を供給し、リセット状態からの復帰を指示する(t12)。
CPU121は、通常状態に移行した後に制御レジスタ165に1(マスクを指示する値)を設定し、ポート回路163に入力するポート出力許可信号及びポート出力データを1にする(t13)。これにより、テストモード信号(S6)は、ハイレベルとなる(t13)。CPU121は、このような設定を行った後に初期化テスト(initial test)を実行する(t13)。CPU121は、初期化テスト中にポート回路160からの外部エラー通知信号(S5)の出力を適宜切り替える(0、1)。監視ASIC200内のエラー検出回路230は、テストモード信号(S6)により初期化テスト中であることを認識し、外部通知エラー信号(S5)が正しく受信できるかをテストする。
なお初期化テスト(initial test)の最中にMCU100内部においてエラーが生じた場合(例えばMCU100の動作確認を行うウォッチドッグタイマーに起因してリセット指示信号(S4)がハイレベルになった場合)、ポート回路160と接続する端子142がハイインピーダンス(Hi−Z)状態となる。この場合、エラー検出回路230は、初期化テスト(initial test)中にMCU100に異常が生じたものと判定する。
CPU121は初期化テスト(initial test)の終了後に制御レジスタ165に0(マスクを行わないことを示す値)を設定し、ポート回路163に入力するポート出力許可信号及びポート出力データを0にする(t14)。
CPU121は、定期テストプログラムの実行前に制御レジスタ162に1(マスクを指示する値)を設定し、ポート回路160と接続する端子142がハイインピーダンス状態とならないように制御する(t15)。そして、CPU121は、定期テストプログラムを実行する(t16)。ここでは、この定期テストプログラムの実行においてエラーは生じなかったものとする。
CPU121は、再び定期テストプログラムを実行し(t17)、エラーが生じたものとする。CPU121は、定期テストプログラムの実行後に定期テストエラーモード信号(S8)をハイレベルにする(t18)。これに応じてリセット命令信号(S4)は、ハイレベルとなる(t18)。リセット命令信号(S4)は、MCU100内の各回路に入力される(t19)。しかしながら、制御レジスタ162が1に設定されているため、マスク回路161はポート回路160へのリセット命令信号(S4)をマスクする。これにより、ポート回路160からの出力信号である外部通知エラー信号(S5)は、ハイレベルのままとなる。リセット命令信号(S4)の入力により、マスク処理されていない各回路はリセット状態となり、一定のリセット処理が終了した場合には通常状態に復帰する。
CPU121は、再び定期テストプログラムを実行し(t21)、再度エラーが生じたものとする。CPU121は、定期テストプログラムの実行後に定期テストエラーモード信号(S8)をハイレベルにする(t22)。これに応じてリセット命令信号(S4)は、ハイレベルとなる(t22)。またCPU121は、連続して定期テストプログラムがエラーとなったことから、ポート回路160に入力するポート出力データを0にする。これによりポート回路160は、外部通知エラー信号(S5)をロウレベルに立ち下げる(t22)。
ロウレベルの外部通知エラー信号(S5)を受信した監視ASIC200は、端子251および端子141を介してロウレベルの端子リセット信号(S2)をMCU100に入力する(t23)。
図12は、MCU100の動作中に端子142と端子252との間で信号線の断線が生じた場合の各回路の動作を示すタイミングチャートである。タイミングt11〜タイミングt20までの処理は、図11と同様であるため説明は省略する。
タイミングt31において端子142と端子252との間において信号線の断線が生じたものとする。この信号線の断線により、外部通知エラー信号(S5)は、ハイレベルからロウレベルに遷移する(t31)。監視ASIC200内のエラー検出回路230及び端子リセット制御回路220は、外部通知信号(S5)のロウレベルの遷移に応じて端子リセット信号(S2)をロウレベルに遷移させる(t32)。これにより、MCU100を外部からリセットする。
続いて本実施の形態にかかる半導体装置の効果について説明する。本実施の形態にかかるMCU100は、内部にポート回路160及び163へのリセット信号(9−1、9−2)の入力をマスクするマスク回路161及び164を有する。当該マスク回路161及び164は、リセット命令信号(S4)のマスク処理を行う。これにより、ポート回路と接続する端子がハイインピーダンス(Hi−Z)状態になることを回避することが出来る。
また図1から明らかなように、半導体装置1はMCU100と監視ASIC200との間にプルアップ抵抗を持たない構成である。そのため、MCU100と監視ASIC200との間の信号線に断線が生じた場合に監視ASIC200に誤った出力値が伝搬することが無くなる。これにより、断線検出を含むエラー検出が可能となり、半導体装置1が不具合(信号線の断線)を持つ状態を認識できないまま動作し続けることを回避することができる。
上述のようにポート回路160は監視ASIC200に対してエラー通知を行う回路であるため、ポート回路160と接続する端子142がハイインピーダンス状態になってしまうことにより誤ったMCU100のリセット等を回避することができ、製品動作の安全性を向上させることができる。またポート回路160は、所定頻度の定期プログラムの実行エラーが生じるまで外部ASIC200にエラー通知を行わないため、エラーであるか否かが不明確な時点での外部通知を防止することができる。
さらにポート回路163は、テストモード信号(S6)を出力する構成である。上述したように、初期化テスト(initial test)の実行中には、制御レジスタ162に0が設定され、制御レジスタ165に1が設定される。この間にMCU100内でエラーが生じた場合、エラー検出回路230はテストモード信号(S6)のハイレベルが入力された状態でポート回路160と接続する端子142のハイインピーダンス(Hi−Z)状態を検出することにより、初期化テスト実行時のMCU100内のエラーを認識することが出来る。MCU100内のエラーを検出することにより上位システムに通知する等の適切な対応を取ることができる。
<実施の形態2>
本実施の形態にかかる半導体装置1は、ポート回路からの出力信号を外部記憶装置(メモリ)のチップセレクト信号として使用することを特徴とする。本実施の形態にかかる半導体装置について実施の形態1と異なる点を以下に説明する。
図13は、本実施の形態にかかる半導体装置の構成を示すブロック図である。半導体装置1は、図1の構成に加えて外部メモリ400を有する。外部メモリ400は、例えばRAM(Random Access Memory)やEEPROM(Electrically Erasable Programmable Read-Only Memory)等の任意の記憶装置である。
MCU100は、図1の構成に加えてポート回路166、マスク回路167、及び制御レジスタ168を備える。なお図13には図示しないものの、図1と同様のポート回路163、マスク回路164、及び制御レジスタ165を備えている。ポート回路166、マスク回路167、及び制御レジスタ168の構成は、図1、図3、図4を示して説明した構成と略同一である。
CPU121は、外部メモリ400に対するデータ書き込み及びデータ読み出しを行う。ポート回路166は、外部メモリ400のチップセレクト端子401とのデータ入出力を行う。CPU121は、外部メモリ400に対する読み出し、または書込み処理に応じて、ポート回路166に入力するポート出力データを適宜変更する。ポート回路166は、このポート出力データに応じてチップセレクト信号S10を出力する。CPU121は、制御レジスタ168には、MCU100の通常状態時に1(リセット命令信号(S4)のマスクを行う値)が書き込まれる。これにより、リセット命令信号(S4)がハイレベル(リセットを指示する値)の場合にもリセットがマスクされ、ポート回路166と接続する端子144がハイインピーダンス(Hi−Z)状態となることが無くなる。
続いて、本実施の形態にかかる半導体装置の効果について説明する。本実施の形態では、ポート回路166の出力信号を外部メモリ400のチップセレクト信号S10として使用する。ポート回路166は、マスク回路167によるマスク制御が行われる構成である。これにより、外部メモリ400のチップセレクト信号を出力する端子144がハイインピーダンス状態となることを回避することができる。ハイインピーダンス状態を回避することができることにより、外部メモリ400の有効化を回避することができる。外部メモリ400の不要な有効化が無くなることにより、消費電力を低減することができる。
<その他の実施の形態>
半導体装置1は、複数のポート回路を有し、各ポート回路に応じて上述のマスク処理を行うか否かについて異なる設定をできる構成であっても良い。ポート回路は、上述したように入力用途であっても出力用途であっても使用が可能である。そのため半導体装置1の出荷後にエンドユーザによって各ポート回路の用途が決定される場合がある。ポート回路を出力用途で使用する場合に上述のインピーダンス出力の問題が生じるが、ポート回路を入力用途で使用する場合には上述のインピーダンス出力の問題は生じない。そのため、ポート回路を入力用途で用いる場合、リセット命令信号(S4)をマスクしない方が異常検出時に速やかにリセットできる。そのため、CPU121は、各ポート回路の用途及び使用タイミングに応じて各ポートに対応付けられた制御レジスタの値を適宜変更しても良い。例えば入力用途で用いるポート回路に対応する制御レジスタに対して常に0を設定することにより、当該ポート回路の速やかなリセットを行い、動作安定化を図ることができる。
なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。例えば監視ASIC200は、MCU100の異常を検出した場合に他のMCUにより適宜必要なバックアップ処理を行うように指示信号を出力しても良い。
上述のMCU100を含む半導体装置1は、例えば一般車両等の車載システムに用いられる。当該車載システムは、複数のMCU100を有し、各MCU100はアクセル駆動制御、ブレーキ制御、ドアミラー制御、テールランプ制御、ダッシュボード制御、ルームランプ制御等の様々な用途に用いられる。
さらにMCU100は、車載システムのみならず他の情報処理システムに適宜用いられても良いことは勿論である。例えばMCU100は、産業用ロボット等の制御等に用いられても良い。