(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】5756413
(24)【登録日】2015年6月5日
(45)【発行日】2015年7月29日
(54)【発明の名称】制御装置
(51)【国際特許分類】
G06F 12/14 20060101AFI20150709BHJP
【FI】
G06F12/14 510D
【請求項の数】4
【全頁数】9
(21)【出願番号】特願2012-7804(P2012-7804)
(22)【出願日】2012年1月18日
(65)【公開番号】特開2013-148999(P2013-148999A)
(43)【公開日】2013年8月1日
【審査請求日】2014年8月28日
(73)【特許権者】
【識別番号】000149066
【氏名又は名称】オークマ株式会社
(74)【代理人】
【識別番号】110001210
【氏名又は名称】特許業務法人YKI国際特許事務所
(72)【発明者】
【氏名】江場 浩二
【審査官】
平井 誠
(56)【参考文献】
【文献】
特開2002−073418(JP,A)
【文献】
特開2009−266085(JP,A)
【文献】
特開平09−293020(JP,A)
【文献】
特開平05−100847(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 12/14
G06F 21
(57)【特許請求の範囲】
【請求項1】
安全機能に関連する制御用の安全関連レジスタに対するアクセス保護機能を内蔵した集積回路を搭載する制御装置において、
前記集積回路は、
CPUが前記安全関連レジスタへのアクセスが許可されている安全関連処理ルーチンを実行しているアクセス保護解除中に、前記安全関連処理ルーチンより優先順位の高い割り込みを受け付けた場合に行うスタックへの退避動作を検出することによりアクセス保護を一時的に再開するスタックアドレス書き込み判定部と、
前記CPUが前記優先順位の高い割り込みの処理が終了した場合に行う前記スタックからの復帰動作を検出することにより前記安全関連レジスタへのアクセス保護を解除するスタックアドレス読み出し判定部と、
を備えることを特徴とする制御装置。
【請求項2】
請求項1に記載の制御装置において、
前記集積回路は、
アクセス保護解除信号が入力されている間のみ前記安全関連レジスタへのアクセスを許可するアドレスデコーダと、
前記スタックアドレス読み出し判定部による前記スタックからの復帰動作の検出に応じてアクセス保護解除信号を前記アドレスデコーダへ出力する保護解除判定部と、
を備えることを特徴とする制御装置。
【請求項3】
請求項1に記載の制御装置において、
前記集積回路は、前記CPUが前記安全関連レジスタにアクセスする際のスタックポインタの値が設定されるスタックアドレス設定レジスタを備え、
前記スタックアドレス書き込み判定部は、前記スタックアドレス設定レジスタの設定値と前記CPUのアドレスバスの値とを比較することでスタックへの退避動作を検出することを特徴とする制御装置。
【請求項4】
請求項1に記載の制御装置において、
前記集積回路は、前記CPUが前記安全関連レジスタにアクセスする際のスタックポインタの値が設定されるスタックアドレス設定レジスタを備え、
前記スタックアドレス読み出し判定部は、前記スタックアドレス設定レジスタの設定値と前記CPUのアドレスバスの値とを比較することでスタックからの復帰動作を検出することを特徴とする制御装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、安全機能を実行する安全関連部を有する制御装置において、安全設計された特定のプログラムのみが、安全関連部レジスタに対してアクセスできるように集積回路内の論理を構成した、書き込み保護機能を備えた制御装置に関するものである。
【背景技術】
【0002】
機能安全に関する国際規格、ISO013849やIEC61508では、安全機能を実行する安全関連部が通常の機能を実行している非安全関連部の故障や、設計ミスの影響を受けないようにシステム設計することを求めている。
【0003】
このため、安全関連部を備えた制御装置において、CPUが集積回路内の安全関連レジスタ、または安全処理用のワークRAMに書き込みを伴うアクセスを行う際は、特権レベルを取得した特定のサブルーチンか、所定の特殊な手順で書き込みシーケンスを実行するサブルーチンにのみ、アクセスを許可するよう、集積回路の論理を構築するのが一般的である。
【0004】
一方、近年の組込用途CPUのほとんどの品種は、システム管理のための特権モードを有していないため、特権モードによる保護手法を容易に利用することができない。
【0005】
図4は、従来の書き込み保護機能を備えた制御装置の一構成例を示すブロック図である。この例では、CPU1に、特権レベルを管理するハードウエアを内蔵しており、ハードウエア割り込みの種類毎に、呼び出される割り込み処理ルーチンに、異なる特権レベルが与えられる。また、実行中の割り込み処理ルーチンに与えられた特権レベルは、特権レベル信号17を用いて外部に伝達するよう構成されている。このような機能を有したCPU1の例として、旧モトローラ社製の68000などが挙げられる。集積回路6内には、安全関連レジスタ81から8Nが実装されており、これらのレジスタに対する書き込み信号WRS1からWRSNまでは、アドレスデコーダ15が、CPU1のアドレスバス3とライト制御信号WRN4、リード制御信号RDN5に基づいて生成している。
【0006】
また、アドレスデコーダ15は、後述する保護解除判定部16からのアクセス保護解除信号が入力されている期間のみ、安全関連レジスタ81から安全関連レジスタ8Nに対する書き込み信号を出力可能なように構成されている。
【0007】
集積回路内には、アクセス保護に関する設定を行うためのレジスタとして、アクセス保護開始レジスタ11、アクセス保護解除レジスタ12、特権レベル設定レジスタ18が設けられている。前述のCPU1の特権レベル信号17は、CPU特権レベル比較部19に入力され、特権レベル設定レジスタ18の設定値と一致している場合のみ、後段の保護解除判定部16に論理値“1”が出力される。一方、保護解除判定部16内のセットリセットフリップフロップ16aには、アクセス保護開始レジスタ11に、予め定めたデータバス2上のビットパターンを書き込むことでセットパルスが供給され、また、アクセス保護解除レジスタ12に、予め定めたデータバス2上のビットパターンを書き込むことでリセットパルスが供給されるように構成されている。セットリセットフリップフロップ16aの出力は、CPU特権レベル比較部19の出力と論理和ゲート16bで論理和がとられ、前述のアクセス保護解除信号が生成される。
【0008】
図5は、
図4の実施例におけるCPU内の安全関連処理ルーチンの実行内容と、
図4のブロック図各部の動作をフローチャートで示したものである。
図5のフローチャートにおいて、左側の安全関連部処理ルーチンは、特権レベルおよび、割り込み優先レベルが低い状態で実行されている。例えば、安全関連部処理ルーチンを、特権レベル2、割り込み優先レベル2に割り付けたとして説明する。安全関連部処理ルーチンは、処理の開始時に、
図4の特権レベル設定レジスタ18に特権レベル2を書き込み、次にアクセス保護解除レジスタ12に書き込みを行う。このことにより、安全関連レジスタ81から安全関連レジスタ8Nに対する書き込み保護が解除され、安全関連部処理ルーチンは、その後の安全関連処理を実行する。
【0009】
一方、このルーチンよりも割り込み優先順位ならびに特権レベルが高い、例えば特権レベル4の割り込みが発生すると、
図5のフローチャート中央に示す処理が開始される。CPU1内のハードウエアが割り込み信号を受け付けると、ハードウエアによる特権レベル切替処理が実行され、特権レベル信号17は、特権レベル2から特権レベル4に変化する。このことにより、CPU特権レベル比較部19は一致判定から不一致判定に変化し、論理レベルは1から0に変化する。このため、割り込み受付後の割り込み処理ルーチンにおいては、保護解除判定部16の保護解除信号がオフし、安全関連保護レジスタ群に対する書き込みは、一時的に保護され、非安全関連処理ルーチン内で、誤って書き込み処理が行われる事を防止する。
【0010】
次に、非安全関連処理ルーチンの処理が終了し、割り込み復帰処理が開始されると、CPU1の出力する特権レベル信号17は、特権レベル4から特権レベル2に回復するため、再びアクセス保護解除信号が1に変化して、安全関連レジスタ群への書き込みが許可される。
【0011】
このように、
図4の構成をとることで、任意のタイミングで特権レベルの高い、割り込み優先レベルが上位の割り込みが起動されても、割り込み処理に移行した期間では、一時的に保護処理が再開され、割り込み処理内において安全関連レジスタに、誤って書き込みアクセスすることが防止される。
【先行技術文献】
【特許文献】
【0012】
【特許文献1】特開2009−020880号公報
【特許文献2】特開2008−047129号公報
【発明の概要】
【発明が解決しようとする課題】
【0013】
図4に示すような従来の制御装置においては、CPU1からCPU1の現在の特権モードを出力する外部ピンが必要であるが、近年の高性能な組み込み用途CPUは、特権モード自体を有しない。また、複数の割り込みの優先順位を持つものの、現在の割り込みマスクレベルを外部ピンに出力する機能を有しないため、割り込みマスクレベルを、特権レベルの代替えとして外部回路が用いることもできない。
【0014】
この発明の目的は、特権モードを出力する外部ピンを有しないCPUにおいて、安全機能を実行する処理ルーチンより割り込み優先順位が高い非安全関連処理ルーチンが起動された場合において、非安全関連処理ルーチンに対して、安全関連レジスタへのアクセス解除状態が引き継がれないように保護する制御装置を提供することにある。
【課題を解決するための手段】
【0015】
本発明に係る制御装置は、安全関連処理ルーチンが集積回路内の安全関連レジスタに対するアクセス保護を解除する直前に、現在のスタックポインタの値を、集積回路のスタックアドレス設定レジスタに設定し、保護解除中の期間、集積回路がCPUがスタックにアクセスする事を監視することによって、上位の割り込みが動作してスタックポインタが退避された場合には、同一アドレスがリードされ、スタック復帰するまでの間、一時的にアクセス保護を再開するよう構成することによって、所望の動作を実現する。
【発明の効果】
【0016】
本発明によれば、CPUが特権レベルを管理する構成を備えていなくても、優先順位の高い割り込みの処理による安全関連レジスタへのアクセスを防止することができる。
【図面の簡単な説明】
【0017】
【
図1】本発明に係る制御装置の実施形態の一例を示す図である。
【
図2】本実施形態におけるCPU処理アルゴリズムの一例を示す図である。
【
図3】本実施形態におけるアクセス保護判定部の状態遷移図の一例を示す図である。
【
図4】従来のアクセス保護回路の一例を示す図である。
【
図5】従来のアクセス保護回路におけるCPU処理アルゴリズムの一例を示す図である。
【発明を実施するための形態】
【0018】
以下、図面に基づいて、本発明の好適な実施の形態について説明する。
【0019】
本発明の非安全関連部からの書き込み保護機能を備えた制御装置の一実施形態の例を、
図1のブロック図と、
図2のフローチャートに基づいて説明する。集積回路6内には、安全機能に関連する制御用レジスタとして、安全関連レジスタ1から安全関連レジスタN(符号81から8N)までのN個のレジスタが搭載されており、CPU1が実行する非安全関連処理ルーチンが誤ってこれらの安全関連レジスタ81〜8Nにライトアクセスすることを防止しなければならない。ここで、本実施の形態において、「安全関連処理ルーチン」というのは、安全設計された特定のプログラムであり、安全関連レジスタ81〜8Nへのアクセスが許可されているルーチンのことをいう。一方、「非安全関連処理ルーチン」というのは、安全関連処理ルーチン以外のプログラムであり、安全関連レジスタ81〜8Nへのアクセスが許可されていないルーチンのことをいう。
【0020】
集積回路6の内部には、前述した安全関連レジスタ81〜8Nが実装されており、これらの安全関連レジスタ81〜8Nそれぞれに対する書き込み信号WRS1〜WRSNは、CPU1のアドレスバス3とライト制御信号WRN4、リード制御信号RDN5に基づいてアドレスデコーダ15により生成される。また、アドレスデコーダ15は、後述する保護解除判定部7からのアクセス保護解除信号が入力されている期間のみ安全関連レジスタ81〜8Nに対する書き込み信号を出力可能なように構成されている。
【0021】
集積回路6の内部には、更にアクセス保護に関する設定を行うためのレジスタとしてスタックアドレス設定レジスタ10、アクセス保護開始レジスタ11及びアクセス保護解除レジスタ12が設けられている。スタックアドレス設定レジスタ10では、CPU1が書き込んだ現在のスタックポインタの値に、スタックを1段積んだ際の増分値(32bitCPUでは4)を加算して、スタックアドレス書き込み判定部13と、スタックアドレス読み出し判定部14に比較アドレス値を供給している。
【0022】
スタックアドレス書き込み判定部13は、CPU1が割り込み処理を開始し、スタックアドレスにステータスレジスタを退避したことを検出し、保護解除判定部7内の上位割り込み検出用フリップフロップ7aのセット端子にセットパルスを供給する。スタックアドレス読み出し判定部14は、CPU1が割り込み復帰処理を開始し、スタックアドレスからステータスレジスタの復帰動作を行ったことを検出し、保護解除判定部7内の上位割り込み検出用フリップフロップ7aのリセット端子に論理和ゲート7Cを介してリセットパルスを供給する。
【0023】
保護解除判定部7の内部のセットリセットフリップフロップ7bには、予め定めたデータバス2上のビットパターンをアクセス保護開始レジスタ11に書き込むことでセットパルスが供給され、予め定めたデータバス2上のビットパターンをアクセス保護解除レジスタ12に書き込むことでリセットパルスが供給されるように構成されている。セットリセットフリップフロップ7bの出力は、上位割り込み検出用フリップフロップ7aの負論理出力と論理積ゲート7dで論理積がとられ、前述のアクセス保護解除信号が生成される。
【0024】
図2は、本実施形態におけるCPU1内の安全関連処理ルーチンの実行内容と、
図1のブロック図各部の動作をフローチャートで示したものである。
図2のフローチャートにおいて、左側の安全関連部処理ルーチンは、非安全関連部処理ルーチンに比して割り込み優先レベルが低い状態で実行される。安全関連処理ルーチンは、安全関連レジスタ群81〜8Nにライトアクセスする直前に、現在のCPU1内のスタックポインタのアドレスを読み出して、集積回路6内のスタックアドレス設定レジスタ10に書き込む。次に、アクセス保護解除レジスタ12に書き込みアクセスする。このことにより、上位割り込み検出用フリップフロップ7aはリセットされ、フリップフロップ7bはセットされる。論理積ゲート7dの入力は共に“1”に変化するため、アクセス保護解除信号は“1”に変化する。アドレスデコーダ15は、“1”のアクセス保護解除信号が入力されている間のみ安全関連レジスタ群に対するライトアクセス信号WRS1からWRSNのマスク処理を解除することで安全関連レジスタ81〜8Nへのアクセスを許可する。
【0025】
安全関連処理ルーチンは、安全関連レジスタ81〜8Nに対する1回目のライトアクセスを開始してから、n回目のアクセスを行うまでの間に安全関連処理ルーチンを実行している割り込みレベルよりも、割り込み優先順位が高い割り込み要求信号が入力されると、
図2の左から2列目の処理が実行開始される。上位優先順位の割り込みをCPU1が受け付けると、CPU1のハードウエアが割り込みベクターテーブルを読み出し、スタックポインタを減算した後に、ステータスレジスタをスタックポインタのアドレスに書き込む。このスタックポインタアドレスに対する非安全関連処理ルーチンによる外部アドレス空間への書き込みアクセスを、集積回路6内のスタックアドレス書き込み判定部13が、スタックアドレス設定レジスタ10の設定値とアドレスバス3とを比較することで検出する。スタックへの書き込み処理が検出されると、上位割り込み検出用フリップフロップ7aがセットされ、論理積ゲート7dの出力であるアクセス保護解除信号が“0”に変化することで、安全関連レジスタ81〜8Nへの書き込みアクセスが、再び、一時的にマスクされる。次に、プログラムカウンタをスタックに退避した後、非安全関連部のソフト処理ルーチン、すなわち非安全関連処理ルーチンが実行されるが、この処理ルーチン内では、安全関連レジスタ群に対するライトアクセスは禁止されているために、これらのレジスタに誤ってライトアクセスが行われても、安全機能に障害が発生することは無い。
【0026】
非安全関連処理ルーチンの実行が終了すると、退避したプログラムカウンタの値がスタックポインタのアドレスから読み出され、次に、ステータスレジスタの値が、スタックポインタのアドレスから読み出される。この時、集積回路6内のスタックアドレス読み出し判定部14は、スタックアドレス設定レジスタ10の設定値とアドレスバス3の値を比較することで、割り込み復帰処理が行われていることを検出し、上位割り込み検出用フリップフロップ7aをリセットする。これにより、論理積ゲート7dの出力であるアクセス保護解除信号が再び“1”に変化し、書き込み保護が解除される。
【0027】
一方、割り込みからの復帰処理が完了し、安全関連処理ルーチンの実行が再開されると、書き込み保護が解除された状態であるので、安全関連レジスタ81〜8Nへのライトアクセスが正常に再開され、所望のn回目のライトアクセスが終了した時点で、安全関連処理ルーチンは、アクセス保護開始レジスタ11をライトして、他のルーチンが安全関連レジスタ81〜8Nにライトアクセスすることを禁止する。以降、再び安全関連処理ルーチン内で、アクセス保護解除レジスタ12がライトアクセスされるか、安全関連処理ルーチンが再び呼び出されるまでは、他の非安全関連処理ルーチンにおいて安全関連レジスタ81〜8Nにライトアクセスが行われないように保護が継続する。
【0028】
図2の右側の列は集積回路6内の保護解除判定部7の状態を表しており、この状態を状態遷移図で書き表したものが、
図3である。
図3において、アクセス保護判定部7には、3つの状態S1からS3があり、電源投入時は、アクセス保護状態S1にいる。安全関連処理ルーチンが、アクセス保護解除レジスタ12とスタックアドレス設定レジスタ10に書き込みを行うことで保護解除状態S2に遷移し、安全関連処理ルーチンがアクセス保護開始レジスタ11に書き込みを行うことでアクセス保護状態S1に戻る。
【0029】
一方、保護解除状態S2にある期間に、CPU1により上位の割り込み優先順位の割り込みが受け付けられ、スタック退避が行われると、一時保護状態S3に遷移し、保護を実行する。一時保護状態S3は、同一スタックアドレスからのスタック復帰処理を検出することで、保護解除状態S2に自動復帰するように構成されている。なお、異常状態からの復帰処理のため、S3からS1に遷移させるためのパスが用意されている。
【0030】
以上のように
図1の構成をとることで、スタックアドレス設定レジスタ10に設定されたスタックポインタのアドレスをスタックアドレス書き込み判定部13が監視し、上位の割り込み優先順位の割り込みが受け付けられた場合には、保護解除判定部7に対し、アクセス保護を一時的に再開する信号が送られる。また、この状態で上位の割り込み処理が終了した場合には、スタックアドレス読み出し判定部14が割り込み終了時のスタックの読み出しを検出して、アクセス保護を再び解除するよう動作するため、上位割り込みの起動タイミングによらず、安全処理ルーチンでは任意の処理区間、アクセス保護を解除する動作が実行できるとともに、上位割り込みの実行中は、アクセス保護が解除された状態は発生しない。従って、任意のタイミングで上位の割り込みが起動されても、割り込み処理に移行した期間では、一時的に保護処理が再開され、割り込み処理内において安全関連レジスタが誤ってアクセスされることから防止できる。
【符号の説明】
【0031】
1 CPU、2 データバス、3 アドレスバス、4 ライト制御信号(WRN)、5 リード制御信号(RDN)、6.集積回路、7 保護解除判定部、81〜8N 安全関連レジスタ、91〜9M 通常レジスタ、10 スタックアドレス設定レジスタ、11 アクセス保護開始レジスタ、12 アクセス保護解除レジスタ、13 スタックアドレス書き込み判定部、14 スタックアドレス読み出し判定部、15 アドレスデコーダ。