(57)【特許請求の範囲】
【請求項１】
安全機能に関連する制御用の安全関連レジスタに対するアクセス保護機能を内蔵した集積回路を搭載する制御装置において、
前記集積回路は、
ＣＰＵが前記安全関連レジスタへのアクセスが許可されている安全関連処理ルーチンを実行しているアクセス保護解除中に、前記安全関連処理ルーチンより優先順位の高い割り込みを受け付けた場合に行うスタックへの退避動作を検出することによりアクセス保護を一時的に再開するスタックアドレス書き込み判定部と、
前記ＣＰＵが前記優先順位の高い割り込みの処理が終了した場合に行う前記スタックからの復帰動作を検出することにより前記安全関連レジスタへのアクセス保護を解除するスタックアドレス読み出し判定部と、
を備えることを特徴とする制御装置。
【請求項２】
請求項１に記載の制御装置において、
前記集積回路は、
アクセス保護解除信号が入力されている間のみ前記安全関連レジスタへのアクセスを許可するアドレスデコーダと、
前記スタックアドレス読み出し判定部による前記スタックからの復帰動作の検出に応じてアクセス保護解除信号を前記アドレスデコーダへ出力する保護解除判定部と、
を備えることを特徴とする制御装置。
【請求項３】
請求項１に記載の制御装置において、
前記集積回路は、前記ＣＰＵが前記安全関連レジスタにアクセスする際のスタックポインタの値が設定されるスタックアドレス設定レジスタを備え、
前記スタックアドレス書き込み判定部は、前記スタックアドレス設定レジスタの設定値と前記ＣＰＵのアドレスバスの値とを比較することでスタックへの退避動作を検出することを特徴とする制御装置。
【請求項４】
請求項１に記載の制御装置において、
前記集積回路は、前記ＣＰＵが前記安全関連レジスタにアクセスする際のスタックポインタの値が設定されるスタックアドレス設定レジスタを備え、
前記スタックアドレス読み出し判定部は、前記スタックアドレス設定レジスタの設定値と前記ＣＰＵのアドレスバスの値とを比較することでスタックからの復帰動作を検出することを特徴とする制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、安全機能を実行する安全関連部を有する制御装置において、安全設計された特定のプログラムのみが、安全関連部レジスタに対してアクセスできるように集積回路内の論理を構成した、書き込み保護機能を備えた制御装置に関するものである。
【背景技術】
【０００２】
機能安全に関する国際規格、ＩＳＯ０１３８４９やＩＥＣ６１５０８では、安全機能を実行する安全関連部が通常の機能を実行している非安全関連部の故障や、設計ミスの影響を受けないようにシステム設計することを求めている。
【０００３】
このため、安全関連部を備えた制御装置において、ＣＰＵが集積回路内の安全関連レジスタ、または安全処理用のワークＲＡＭに書き込みを伴うアクセスを行う際は、特権レベルを取得した特定のサブルーチンか、所定の特殊な手順で書き込みシーケンスを実行するサブルーチンにのみ、アクセスを許可するよう、集積回路の論理を構築するのが一般的である。
【０００４】
一方、近年の組込用途ＣＰＵのほとんどの品種は、システム管理のための特権モードを有していないため、特権モードによる保護手法を容易に利用することができない。
【０００５】
図４は、従来の書き込み保護機能を備えた制御装置の一構成例を示すブロック図である。この例では、ＣＰＵ１に、特権レベルを管理するハードウエアを内蔵しており、ハードウエア割り込みの種類毎に、呼び出される割り込み処理ルーチンに、異なる特権レベルが与えられる。また、実行中の割り込み処理ルーチンに与えられた特権レベルは、特権レベル信号１７を用いて外部に伝達するよう構成されている。このような機能を有したＣＰＵ１の例として、旧モトローラ社製の６８０００などが挙げられる。集積回路６内には、安全関連レジスタ８１から８Ｎが実装されており、これらのレジスタに対する書き込み信号ＷＲＳ１からＷＲＳＮまでは、アドレスデコーダ１５が、ＣＰＵ１のアドレスバス３とライト制御信号ＷＲＮ４、リード制御信号ＲＤＮ５に基づいて生成している。
【０００６】
また、アドレスデコーダ１５は、後述する保護解除判定部１６からのアクセス保護解除信号が入力されている期間のみ、安全関連レジスタ８１から安全関連レジスタ８Ｎに対する書き込み信号を出力可能なように構成されている。
【０００７】
集積回路内には、アクセス保護に関する設定を行うためのレジスタとして、アクセス保護開始レジスタ１１、アクセス保護解除レジスタ１２、特権レベル設定レジスタ１８が設けられている。前述のＣＰＵ１の特権レベル信号１７は、ＣＰＵ特権レベル比較部１９に入力され、特権レベル設定レジスタ１８の設定値と一致している場合のみ、後段の保護解除判定部１６に論理値“１”が出力される。一方、保護解除判定部１６内のセットリセットフリップフロップ１６ａには、アクセス保護開始レジスタ１１に、予め定めたデータバス２上のビットパターンを書き込むことでセットパルスが供給され、また、アクセス保護解除レジスタ１２に、予め定めたデータバス２上のビットパターンを書き込むことでリセットパルスが供給されるように構成されている。セットリセットフリップフロップ１６ａの出力は、ＣＰＵ特権レベル比較部１９の出力と論理和ゲート１６ｂで論理和がとられ、前述のアクセス保護解除信号が生成される。
【０００８】
図５は、図４の実施例におけるＣＰＵ内の安全関連処理ルーチンの実行内容と、図４のブロック図各部の動作をフローチャートで示したものである。
図５のフローチャートにおいて、左側の安全関連部処理ルーチンは、特権レベルおよび、割り込み優先レベルが低い状態で実行されている。例えば、安全関連部処理ルーチンを、特権レベル２、割り込み優先レベル２に割り付けたとして説明する。安全関連部処理ルーチンは、処理の開始時に、図４の特権レベル設定レジスタ１８に特権レベル２を書き込み、次にアクセス保護解除レジスタ１２に書き込みを行う。このことにより、安全関連レジスタ８１から安全関連レジスタ８Ｎに対する書き込み保護が解除され、安全関連部処理ルーチンは、その後の安全関連処理を実行する。
【０００９】
一方、このルーチンよりも割り込み優先順位ならびに特権レベルが高い、例えば特権レベル４の割り込みが発生すると、図５のフローチャート中央に示す処理が開始される。ＣＰＵ１内のハードウエアが割り込み信号を受け付けると、ハードウエアによる特権レベル切替処理が実行され、特権レベル信号１７は、特権レベル２から特権レベル４に変化する。このことにより、ＣＰＵ特権レベル比較部１９は一致判定から不一致判定に変化し、論理レベルは１から０に変化する。このため、割り込み受付後の割り込み処理ルーチンにおいては、保護解除判定部１６の保護解除信号がオフし、安全関連保護レジスタ群に対する書き込みは、一時的に保護され、非安全関連処理ルーチン内で、誤って書き込み処理が行われる事を防止する。
【００１０】
次に、非安全関連処理ルーチンの処理が終了し、割り込み復帰処理が開始されると、ＣＰＵ１の出力する特権レベル信号１７は、特権レベル４から特権レベル２に回復するため、再びアクセス保護解除信号が１に変化して、安全関連レジスタ群への書き込みが許可される。
【００１１】
このように、図４の構成をとることで、任意のタイミングで特権レベルの高い、割り込み優先レベルが上位の割り込みが起動されても、割り込み処理に移行した期間では、一時的に保護処理が再開され、割り込み処理内において安全関連レジスタに、誤って書き込みアクセスすることが防止される。
【先行技術文献】
【特許文献】
【００１２】
【特許文献１】特開２００９−０２０８８０号公報
【特許文献２】特開２００８−０４７１２９号公報
【発明の概要】
【発明が解決しようとする課題】
【００１３】
図４に示すような従来の制御装置においては、ＣＰＵ１からＣＰＵ１の現在の特権モードを出力する外部ピンが必要であるが、近年の高性能な組み込み用途ＣＰＵは、特権モード自体を有しない。また、複数の割り込みの優先順位を持つものの、現在の割り込みマスクレベルを外部ピンに出力する機能を有しないため、割り込みマスクレベルを、特権レベルの代替えとして外部回路が用いることもできない。
【００１４】
この発明の目的は、特権モードを出力する外部ピンを有しないＣＰＵにおいて、安全機能を実行する処理ルーチンより割り込み優先順位が高い非安全関連処理ルーチンが起動された場合において、非安全関連処理ルーチンに対して、安全関連レジスタへのアクセス解除状態が引き継がれないように保護する制御装置を提供することにある。
【課題を解決するための手段】
【００１５】
本発明に係る制御装置は、安全関連処理ルーチンが集積回路内の安全関連レジスタに対するアクセス保護を解除する直前に、現在のスタックポインタの値を、集積回路のスタックアドレス設定レジスタに設定し、保護解除中の期間、集積回路がＣＰＵがスタックにアクセスする事を監視することによって、上位の割り込みが動作してスタックポインタが退避された場合には、同一アドレスがリードされ、スタック復帰するまでの間、一時的にアクセス保護を再開するよう構成することによって、所望の動作を実現する。
【発明の効果】
【００１６】
本発明によれば、ＣＰＵが特権レベルを管理する構成を備えていなくても、優先順位の高い割り込みの処理による安全関連レジスタへのアクセスを防止することができる。
【図面の簡単な説明】
【００１７】
【図１】本発明に係る制御装置の実施形態の一例を示す図である。
【図２】本実施形態におけるＣＰＵ処理アルゴリズムの一例を示す図である。
【図３】本実施形態におけるアクセス保護判定部の状態遷移図の一例を示す図である。
【図４】従来のアクセス保護回路の一例を示す図である。
【図５】従来のアクセス保護回路におけるＣＰＵ処理アルゴリズムの一例を示す図である。
【発明を実施するための形態】
【００１８】
以下、図面に基づいて、本発明の好適な実施の形態について説明する。
【００１９】
本発明の非安全関連部からの書き込み保護機能を備えた制御装置の一実施形態の例を、図１のブロック図と、図２のフローチャートに基づいて説明する。集積回路６内には、安全機能に関連する制御用レジスタとして、安全関連レジスタ１から安全関連レジスタＮ（符号８１から８Ｎ）までのＮ個のレジスタが搭載されており、ＣＰＵ１が実行する非安全関連処理ルーチンが誤ってこれらの安全関連レジスタ８１〜８Ｎにライトアクセスすることを防止しなければならない。ここで、本実施の形態において、「安全関連処理ルーチン」というのは、安全設計された特定のプログラムであり、安全関連レジスタ８１〜８Ｎへのアクセスが許可されているルーチンのことをいう。一方、「非安全関連処理ルーチン」というのは、安全関連処理ルーチン以外のプログラムであり、安全関連レジスタ８１〜８Ｎへのアクセスが許可されていないルーチンのことをいう。
【００２０】
集積回路６の内部には、前述した安全関連レジスタ８１〜８Ｎが実装されており、これらの安全関連レジスタ８１〜８Ｎそれぞれに対する書き込み信号ＷＲＳ１〜ＷＲＳＮは、ＣＰＵ１のアドレスバス３とライト制御信号ＷＲＮ４、リード制御信号ＲＤＮ５に基づいてアドレスデコーダ１５により生成される。また、アドレスデコーダ１５は、後述する保護解除判定部７からのアクセス保護解除信号が入力されている期間のみ安全関連レジスタ８１〜８Ｎに対する書き込み信号を出力可能なように構成されている。
【００２１】
集積回路６の内部には、更にアクセス保護に関する設定を行うためのレジスタとしてスタックアドレス設定レジスタ１０、アクセス保護開始レジスタ１１及びアクセス保護解除レジスタ１２が設けられている。スタックアドレス設定レジスタ１０では、ＣＰＵ１が書き込んだ現在のスタックポインタの値に、スタックを１段積んだ際の増分値（３２ｂｉｔＣＰＵでは４）を加算して、スタックアドレス書き込み判定部１３と、スタックアドレス読み出し判定部１４に比較アドレス値を供給している。
【００２２】
スタックアドレス書き込み判定部１３は、ＣＰＵ１が割り込み処理を開始し、スタックアドレスにステータスレジスタを退避したことを検出し、保護解除判定部７内の上位割り込み検出用フリップフロップ７ａのセット端子にセットパルスを供給する。スタックアドレス読み出し判定部１４は、ＣＰＵ１が割り込み復帰処理を開始し、スタックアドレスからステータスレジスタの復帰動作を行ったことを検出し、保護解除判定部７内の上位割り込み検出用フリップフロップ７ａのリセット端子に論理和ゲート７Ｃを介してリセットパルスを供給する。
【００２３】
保護解除判定部７の内部のセットリセットフリップフロップ７ｂには、予め定めたデータバス２上のビットパターンをアクセス保護開始レジスタ１１に書き込むことでセットパルスが供給され、予め定めたデータバス２上のビットパターンをアクセス保護解除レジスタ１２に書き込むことでリセットパルスが供給されるように構成されている。セットリセットフリップフロップ７ｂの出力は、上位割り込み検出用フリップフロップ７ａの負論理出力と論理積ゲート７ｄで論理積がとられ、前述のアクセス保護解除信号が生成される。
【００２４】
図２は、本実施形態におけるＣＰＵ１内の安全関連処理ルーチンの実行内容と、図１のブロック図各部の動作をフローチャートで示したものである。図２のフローチャートにおいて、左側の安全関連部処理ルーチンは、非安全関連部処理ルーチンに比して割り込み優先レベルが低い状態で実行される。安全関連処理ルーチンは、安全関連レジスタ群８１〜８Ｎにライトアクセスする直前に、現在のＣＰＵ１内のスタックポインタのアドレスを読み出して、集積回路６内のスタックアドレス設定レジスタ１０に書き込む。次に、アクセス保護解除レジスタ１２に書き込みアクセスする。このことにより、上位割り込み検出用フリップフロップ７ａはリセットされ、フリップフロップ７ｂはセットされる。論理積ゲート７ｄの入力は共に“１”に変化するため、アクセス保護解除信号は“１”に変化する。アドレスデコーダ１５は、“１”のアクセス保護解除信号が入力されている間のみ安全関連レジスタ群に対するライトアクセス信号ＷＲＳ１からＷＲＳＮのマスク処理を解除することで安全関連レジスタ８１〜８Ｎへのアクセスを許可する。
【００２５】
安全関連処理ルーチンは、安全関連レジスタ８１〜８Ｎに対する１回目のライトアクセスを開始してから、ｎ回目のアクセスを行うまでの間に安全関連処理ルーチンを実行している割り込みレベルよりも、割り込み優先順位が高い割り込み要求信号が入力されると、図２の左から２列目の処理が実行開始される。上位優先順位の割り込みをＣＰＵ１が受け付けると、ＣＰＵ１のハードウエアが割り込みベクターテーブルを読み出し、スタックポインタを減算した後に、ステータスレジスタをスタックポインタのアドレスに書き込む。このスタックポインタアドレスに対する非安全関連処理ルーチンによる外部アドレス空間への書き込みアクセスを、集積回路６内のスタックアドレス書き込み判定部１３が、スタックアドレス設定レジスタ１０の設定値とアドレスバス３とを比較することで検出する。スタックへの書き込み処理が検出されると、上位割り込み検出用フリップフロップ７ａがセットされ、論理積ゲート７ｄの出力であるアクセス保護解除信号が“０”に変化することで、安全関連レジスタ８１〜８Ｎへの書き込みアクセスが、再び、一時的にマスクされる。次に、プログラムカウンタをスタックに退避した後、非安全関連部のソフト処理ルーチン、すなわち非安全関連処理ルーチンが実行されるが、この処理ルーチン内では、安全関連レジスタ群に対するライトアクセスは禁止されているために、これらのレジスタに誤ってライトアクセスが行われても、安全機能に障害が発生することは無い。
【００２６】
非安全関連処理ルーチンの実行が終了すると、退避したプログラムカウンタの値がスタックポインタのアドレスから読み出され、次に、ステータスレジスタの値が、スタックポインタのアドレスから読み出される。この時、集積回路６内のスタックアドレス読み出し判定部１４は、スタックアドレス設定レジスタ１０の設定値とアドレスバス３の値を比較することで、割り込み復帰処理が行われていることを検出し、上位割り込み検出用フリップフロップ７ａをリセットする。これにより、論理積ゲート７ｄの出力であるアクセス保護解除信号が再び“１”に変化し、書き込み保護が解除される。
【００２７】
一方、割り込みからの復帰処理が完了し、安全関連処理ルーチンの実行が再開されると、書き込み保護が解除された状態であるので、安全関連レジスタ８１〜８Ｎへのライトアクセスが正常に再開され、所望のｎ回目のライトアクセスが終了した時点で、安全関連処理ルーチンは、アクセス保護開始レジスタ１１をライトして、他のルーチンが安全関連レジスタ８１〜８Ｎにライトアクセスすることを禁止する。以降、再び安全関連処理ルーチン内で、アクセス保護解除レジスタ１２がライトアクセスされるか、安全関連処理ルーチンが再び呼び出されるまでは、他の非安全関連処理ルーチンにおいて安全関連レジスタ８１〜８Ｎにライトアクセスが行われないように保護が継続する。
【００２８】
図２の右側の列は集積回路６内の保護解除判定部７の状態を表しており、この状態を状態遷移図で書き表したものが、図３である。図３において、アクセス保護判定部７には、３つの状態Ｓ１からＳ３があり、電源投入時は、アクセス保護状態Ｓ１にいる。安全関連処理ルーチンが、アクセス保護解除レジスタ１２とスタックアドレス設定レジスタ１０に書き込みを行うことで保護解除状態Ｓ２に遷移し、安全関連処理ルーチンがアクセス保護開始レジスタ１１に書き込みを行うことでアクセス保護状態Ｓ１に戻る。
【００２９】
一方、保護解除状態Ｓ２にある期間に、ＣＰＵ１により上位の割り込み優先順位の割り込みが受け付けられ、スタック退避が行われると、一時保護状態Ｓ３に遷移し、保護を実行する。一時保護状態Ｓ３は、同一スタックアドレスからのスタック復帰処理を検出することで、保護解除状態Ｓ２に自動復帰するように構成されている。なお、異常状態からの復帰処理のため、Ｓ３からＳ１に遷移させるためのパスが用意されている。
【００３０】
以上のように図１の構成をとることで、スタックアドレス設定レジスタ１０に設定されたスタックポインタのアドレスをスタックアドレス書き込み判定部１３が監視し、上位の割り込み優先順位の割り込みが受け付けられた場合には、保護解除判定部７に対し、アクセス保護を一時的に再開する信号が送られる。また、この状態で上位の割り込み処理が終了した場合には、スタックアドレス読み出し判定部１４が割り込み終了時のスタックの読み出しを検出して、アクセス保護を再び解除するよう動作するため、上位割り込みの起動タイミングによらず、安全処理ルーチンでは任意の処理区間、アクセス保護を解除する動作が実行できるとともに、上位割り込みの実行中は、アクセス保護が解除された状態は発生しない。従って、任意のタイミングで上位の割り込みが起動されても、割り込み処理に移行した期間では、一時的に保護処理が再開され、割り込み処理内において安全関連レジスタが誤ってアクセスされることから防止できる。
【符号の説明】
【００３１】
１  ＣＰＵ、２  データバス、３  アドレスバス、４  ライト制御信号（ＷＲＮ）、５  リード制御信号（ＲＤＮ）、６．集積回路、７  保護解除判定部、８１〜８Ｎ  安全関連レジスタ、９１〜９Ｍ  通常レジスタ、１０  スタックアドレス設定レジスタ、１１  アクセス保護開始レジスタ、１２  アクセス保護解除レジスタ、１３  スタックアドレス書き込み判定部、１４  スタックアドレス読み出し判定部、１５  アドレスデコーダ。
【図１】
0005756413.tif 000002
【図２】
0005756413.tif 000003
【図３】
0005756413.tif 000004
【図４】
0005756413.tif 000005
【図５】
0005756413.tif 000006