(57)【要約】【課題】メモリ保護のためのハードウェアを有しないＣＰＵを使用した制御装置において、ＲＡＭの安全関連部データエリアや外部集積回路の安全関連部レジスタエリア、ＣＰＵの内蔵周辺Ｉ／Ｏレジスタ等に対して、ビット単位で、非安全関連部プログラムからの不正な書込みを検知する機能を実現する。【解決手段】安全関連部領域へのアクセスが許可された安全関連部プログラムに対するライトアクセスに対して、メモリアクセス監視部による割込処理にて、スタックエリアに退避されたライトアクセス元のプログラムカウンタを用いて、ライトアクセス元が、安全関連部プログラムエリアか、非安全関連部プログラムエリアかを判定し、さらに、メモリやレジスタのビット単位で安全関連部が使用する領域に対する変更の有無を判定して非安全関連部プログラムエリアからのライトアクセス検知機能を実現する。【選択図】  図１
2018067047.tif 000002
【特許請求の範囲】
【請求項１】
任意のアドレスへのアクセスに対して、少なくともアドレス範囲とリード・ライトの種別があらかじめ設定した値と一致することを判定しＣＰＵに割込処理を要求するアクセス監視部を備えた制御装置において、
安全関連部プログラムが使用する、ＲＡＭの安全関連部データエリア、外部集積回路の安全関連部レジスタエリア、及びＣＰＵの内蔵周辺Ｉ／Ｏレジスタを含む安全関連部領域へのライトアクセスに対して、アクセス監視部による割込処理を要求し、割込処理で、スタックエリアに退避されたライトアクセス元のプログラムカウンタを用いて、安全関連部領域へのライトアクセスが、安全関連部プログラムによるものか、非安全関連部プログラムによるものか判定し、さらにメモリやレジスタ内のビット単位で安全関連部領域に対する変更の有無を判定し、非安全関連部プログラムからの安全関連部領域へのライトアクセスを検知する機能を備えた制御装置。
【請求項２】
安全関連部プログラムが使用する安全関連部領域へのライトアクセスに対して、安全関連部プログラムからのライトアクセスの場合、ＣＰＵの内蔵周辺Ｉ／Ｏレジスタに含まれ、安全関連部プログラム及び非安全関連部プログラムの双方が使用する非分離レジスタ及び非分離レジスタの安全関連部プログラムが使用する領域を示す安全関連ビットパターンデータとの論理積をバックアップデータとして保存し、非安全関連部プログラムからのライトアクセスの場合、前記非分離レジスタ及び前記安全関連ビットパターンデータとの論理積が前記バックアップデータと不一致の場合にエラー処理を行う請求項１に記載の制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、機能安全規格に基づいて設計された安全関連部を有する制御装置に関するもので、安全関連部内のＣＰＵ上で実行する安全関連部プログラムが使用するＲＡＭや制御レジスタが、同一ＣＰＵ上で実行される非安全関連部プログラムから、予期しない書込みを受けたことをビット単位で検知し、安全な状態にシステムを遷移する機能を実装した、非安全関連部書込み検知機能を備えた制御装置に関するものである。
【背景技術】
【０００２】
機能安全に関する国際規格ＩＥＣ６１５０８シリーズ等では、安全機能を実行する安全関連部が、通常の機能を実行している非安全関連部の故障や、設計ミスの影響を受けないように、システム設計することを求めている。
【０００３】
ＩＥＣ６１５０８−３：２０１０では、「ソフトウェアが安全度水準の異なる安全機能を実行する場合は，独立性が時空域の両方で達成されているか，又は独立性の侵害が制御されているかのいずれかを実証しなければならない。」と定めており、付属書には、同一コンピュータ上のソフトウェア要素間の不干渉性を達成するための技法例が示されている。このため、安全関連部を備えた制御装置において、ＣＰＵの安全関連ソフトウェアのみが、安全関連の変数を格納するＲＡＭや安全関連レジスタに書き込みアクセスを行えるよう、安全関連ソフトウェアに上位の特権レベルを付与するとともに、メモリ管理ユニットやメモリ保護ユニットにより、特権レベル毎に、ライトアクセス可能な空間を特定するのが一般的である。一方、近年の組込用途ＣＰＵのほとんどの品種は、メモリ管理ユニットやメモリ保護ユニットを有していないため、特権モードによる保護手法を容易に利用することができない。
【０００４】
システム保護のための特権モードを有しないＣＰＵを使用した制御装置でも、外部集積回路内の安全関連部レジスタについて、非安全関連部からのライトアクセスを防止する機能を提供する方法が、特許文献１で開示されている。
【０００５】
また、特権モードを有しないＣＰＵにおいて、メモリアクセス命令のデコード時に、プログラムカウンタとアクセス先メモリアドレスを判定する小規模なハードウェアを追加することで、意図しないメモリアクセス命令の実行を止める方法が特許文献２で開示されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１３−１４８９９９号公報
【特許文献２】特開２０００−７６１３５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、ＣＰＵの命令デコード時に上記プログラムカウンタとアクセス先メモリアドレスの両方を判定するハードウェアを有しないＣＰＵでは特許文献２による保護手法を利用することができない。
【０００８】
一方、例えば、ＣＰＵの内部レジスタについて、ビット単位で非安全関連部からのライトアクセスを防止したいといった要求がある。しかし、アドレス単位でアクセス領域を指定する特権モードや特許文献２による保護手法、外部集積回路で安全関連部レジスタと非安全関連部レジスタを分離したうえで安全関連部レジスタの保護を行う特許文献１の保護手法では、ビット単位の保護を行うことができない。そのため、例えば、ＣＰＵのＩ／Ｏ端子に、安全関連のＩ／Ｏ端子と非安全関連のＩ／Ｏ端子の双方が存在する場合、異なるレジスタで独立して端子設定できるようにＣＰＵ周辺回路を設計する、あるいは非安全関連のＩ／Ｏ端子出力処理を安全関連のファームウェアで実施する、といった対応が必要であり、ハードウェア、ファームウェア上の設計制約となる。
【０００９】
この発明の目的は、機能安全規格に基づいて設計された安全関連部を有する制御装置において、安全関連部内のＣＰＵ上で実行する安全関連部プログラムが使用する、ＲＡＭや制御レジスタ、ＲＡＭや制御レジスタ内の任意ビットに対して、同一ＣＰＵ上で実行される非安全関連部プログラムから、予期しない書込みを受けた場合でも安全な状態にシステムを遷移する機能を実装した非安全関連部書込み検知機能を、メモリ保護目的のハードウェアを有しないＣＰＵを使用して提供することにある。
【課題を解決するための手段】
【００１０】
機能安全規格においては、システムの異常を検知した際に安全な状態にシステムを遷移できればよい。そのため、不正なアクセスによるメモリやレジスタの変更を防止する必要はなく、不正なアクセスを検知しシステムを安全な状態に遷移する機能があればよい。一方、組み込み用途ＣＰＵには、アドレスバスの状態を監視し、任意のアドレスへのアクセスに対して、少なくともアドレス範囲とリード・ライトの種別があらかじめ設定した値と一致することを判定し、ＣＰＵに割込処理を要求するアクセス監視部を有するものがある。例えば、インサーキットエミュレータを使用しないプログラムデバックを目的として、アクセス監視部を有している市販の組み込み用途ＣＰＵがある。アクセス監視部を有するＣＰＵを使用し、安全関連部プログラムが使用するＲＡＭや制御レジスタへのライトアクセスに対して割込処理を発生する。安全関連部プログラムを格納するＲＯＭ領域のアドレス範囲と非安全関連部プログラムを格納するＲＯＭ領域のアドレス範囲を分離しておき、割込処理のソフトウェアにて、スタックエリアに退避されるプログラムカウンタを用いて、ライトアクセスが安全関連部プログラムによるものか、非安全関連部によるものかを判定する。非安全関連部によるライトアクセスに対して、安全関連部が使用するビットに対するデータ変更がないかをバックアップデータと比較し判定する。バックアップデータは、安全関連部によるライトアクセス時、もしくは、初期化時に設定する。
【発明の効果】
【００１１】
本発明においては、安全関連部プログラムが使用するＲＡＭや制御レジスタ、ＲＡＭや制御レジスタへの任意ビットへの書込みアクセスに対し、割込処理を発生させる。割込処理において、スタックに退避されたプログラムカウンタより、書込みアクセス元が、安全関連部プログラムか、非安全関連部プログラムかを判別する。非安全関連プログラムからのライトアクセスの場合、バックアップデータと比較し、安全関連のビットに対するデータ変更がないかを判定する。安全関連のビットに対する変更がある場合、エラー処理を行い安全な状態にシステムを遷移する。
【図面の簡単な説明】
【００１２】
【図１】本発明の実施形態におけるＣＰＵ処理アルゴリズムの一例を示す図である。
【図２】本発明の実施形態におけるＣＰＵ構成の一例を示す図である。
【図３】本発明の実施形態におけるアドレスマップの一例を示す図である。
【発明を実施するための形態】
【００１３】
本発明の非安全関連部からの書込み検知機能を備えた制御装置の一実施の形態として、ＣＰＵの内蔵周辺Ｉ／Ｏレジスタについて、ビット単位で書込み検知を行う実施の形態を、図２のブロック図と、図１のフローチャートに基づいて説明する。安全機能に関連するデータエリアとして、内蔵ＲＡＭ５に安全関連部データエリア５２、安全機能に関連する制御用レジスタとして、外部集積回路７に安全関連部レジスタエリア７２がある。また、ＣＰＵの動作を設定する内蔵周辺Ｉ／Ｏレジスタ８には、安全機能と非安全機能の双方が使用する非分離レジスタ８１があり、安全機能に関連する安全関連ビット８１２と安全機能に関連しない非安全関連ビット８１１がある。図２は例として、非分離レジスタ８１として、Ｉ／Ｏポート９の出力を設定するレジスタを用いる場合を示している。Ｉ／Ｏポート９の安全機能に関連する安全出力端子９２と安全機能に関連しない非安全出力端子９１の出力レベルが安全関連ビット８１２と非安全関連ビット８１１の設定により変化する。ＣＰＵ内の非安全関連処理ルーチンが、誤ってこれらの安全機能に関連するメモリやレジスタ、レジスタ内の特定ビット、具体的には安全関連部データエリア５２、安全関連部レジスタエリア７２及び非分離レジスタエリア８１（以下、「安全関連部領域」と総称する）にライトアクセスすることを防止しなければならない。ここで、本実施の形態において、「安全関連処理ルーチン」というのは、安全設計された特定のプログラムであり、安全関連部領域へのアクセスが許可されているルーチンのことをいう。一方、「非安全関連処理ルーチン」というのは、安全関連処理ルーチン以外のプログラムであり、安全関連部領域へのアクセスが許可されていないルーチンのことをいう。
【００１４】
図２は、メモリアクセス監視部１０を搭載したマイコンのメモリアクセス関連のブロック図である。ＣＰＵコア２は、内部バス３を介して、内蔵ＲＯＭ４からプログラムを読込み、演算処理、内蔵ＲＡＭ５へのアクセス処理、外部集積回路７へのアクセス処理、内蔵周辺Ｉ／Ｏレジスタ８へのアクセス処理等を行う。内蔵ＲＡＭ５、内蔵周辺Ｉ／Ｏレジスタ８へのアクセスは、内部バス３を介して行われ、外部集積回路７へのアクセスは、内部バス３、ＢＳＣ(バスステートコントローラ)６を介して行われる。メモリアクセス監視部１０は、内部バス３のバスサイクルを監視し、特定アドレスへのリード・ライトアクセス等に対し、ＩＮＴＣ(割込コントローラ)１１を介して、ＣＰＵコア２に割込信号を発行できる。
【００１５】
図３は、本実施の形態におけるアドレスマップの一例を示す図である。内蔵ＲＯＭ４のアドレス割当範囲（内蔵ＲＯＭ領域）、内蔵ＲＡＭ５のアドレス割当範囲（内蔵ＲＡＭ領域）、外部集積回路７のアドレス割当範囲（外部メモリ領域）、及び内蔵周辺Ｉ／Ｏレジスタ８のアドレス割当範囲（内蔵周辺Ｉ／Ｏレジスタ領域）は、ＣＰＵの種類で決定される。内蔵ＲＯＭ４のアドレス割当範囲には、非安全関連の処理ルーチンが格納される非安全関連部プログラムエリア４１と安全関連の処理ルーチンが格納される安全関連部プログラムエリア４２があり、それぞれ連続したアドレス範囲となるようにコンパイル時にアドレスの指定を行う。内蔵ＲＡＭ５のアドレス割当範囲には、非安全関連機能のデータが格納される非安全関連部データエリア５１、安全関連機能のデータが格納される安全関連部データエリア５２、スタックエリア５３があり、それぞれ連続したアドレス範囲となるようにコンパイル時にアドレスの指定を行う。外部集積回路７のアドレス割当範囲には、非安全関連機能のレジスタを格納する非安全関連部レジスタエリア７１と安全関連機能のレジスタを格納する安全関連部レジスタエリア７２があり、それぞれ連続したアドレス範囲となるように、外部集積回路７を設計する。内蔵周辺Ｉ／Ｏレジスタ８において、非分離レジスタ８１として使用するレジスタについて非分離レジスタ８１内の安全関連ビット８１２を１、非安全関連ビット８１１を０とするビットパターンを予め設定し、安全関連部プログラムエリア４２に安全関連ビットパターンデータ４２１として格納する。図３では、非安全関連ビット８１１と安全関連ビット８１２を連続したビットとして示しているが、非安全関連ビット８１１と安全関連ビット８１２がレジスタ内で不連続であってもよい。安全関連部のプログラムが設定した非安全関連ビットのデータは安全関連部データエリア５２に安全関連ビットバックアップデータ５２１として格納する。
【００１６】
図１は、本実施の形態における安全関連部データエリア５２への書込み検知処理の実行内容と図１の各部の動作をフローチャートで示したものである。図１のフローチャートにおいて、左側のルーチンは、非安全関連部の処理ルーチンか安全関連部の処理ルーチンであり、例えば、割込処理により、最も優先度が高い処理ルーチンが実行されている。処理ルーチン内で安全関連部領域に対するライトアクセスを行った場合、メモリアクセス監視部１０がライトアクセスを検出し、ＩＮＴＣ１１を介して、ＣＰＵコア２に割込信号を出力する。
【００１７】
ＣＰＵコア２は、割込信号受付に対し、スタックエリア５３にステータスレジスタ、プログラムカウンタの退避をハードウェア処理で行った後、割込処理ルーチンを実行する。割込処理ルーチンでは、スタックエリア５３に退避されたプログラムカウンタを読出し、スタック領域に退避したプログラムカウンタが、安全関連部データエリア５２のアドレス範囲に含まれているかを判定し、アドレス範囲に含まれていない場合、非安全関連部データエリア５１からのライトアクセスと判定し、アドレス範囲に含まれている場合、安全関連部データエリア５２からのライトアクセスと判定する。
【００１８】
安全関連部データエリア５２からのライトアクセスに対して、非分離レジスタ８１へのライトアクセスについては、非分離レジスタ８１と安全関連ビットパターンデータ４２１の論理積をとり、安全関連ビットバックアップデータ５２１に保存する。なお、非分離レジスタ８１の安全関連ビット８１２の値を初期設定後に変更しない場合、本処理は省略しても良い。
【００１９】
非安全関連部データエリア５１からのライトアクセスに対して、安全関連部データエリア５２、安全関連部レジスタエリア７２へのライトアクセスについてはエラー処理を行う。非分離レジスタ８１へのライトアクセスについては、非分離レジスタ８１と安全関連ビットパターンデータ４２１の論理積が安全関連ビットバックアップデータ５２１と一致するかを判定し、一致しない場合、安全関連ビット８１２の変更有とし、エラー処理を行う。
【００２０】
割込による安全関連部領域への書込み検知処理は、非安全関連処理ルーチンからのライトアクセス、安全関連処理ルーチンからのライトアクセスを問わず、安全関連部領域への全てのライトアクセスに対して実行される。書込み検知処理により、処理時間が増加するが、非安全関連処理ルーチンでは、通常、非分離レジスタ８１へのライトアクセスしか行わず、非分離レジスタへのライトアクセス頻度は低いため、問題とならない。また、安全関連処理ルーチンでは、通常、優先レベルが低い状態で実行されており、書込み検知処理による処理時間の増加は問題とならない。
【００２１】
以上のように図２の構成のＣＰＵを用いて、図１のフローチャートの書込み検知処理を行うことで、安全関連のプログラムが使用するＲＡＭやレジスタ、ＲＡＭやレジスタの特定ビットに、非安全関連部プログラムから予期しない書込みを受けたことを検知し、安全な状態にシステムを遷移する機能を実装できる。
【符号の説明】
【００２２】
１  ＣＰＵ、２  ＣＰＵコア、３  内部バス、４  内蔵ＲＯＭ、５  内蔵ＲＡＭ、６  ＢＳＣ（バスステートコントローラ）、７  外部集積回路、８  内蔵周辺Ｉ／Ｏレジスタ、９  Ｉ／Ｏポート、１０  アクセス監視部、１１  ＩＮＴＣ（割込コントローラ）、４１  非安全関連部プログラムエリア、４２  安全関連部プログラムエリア、５１  非安全関連部データエリア、５２  安全関連部データエリア、５３  スタックエリア、７１  非安全関連部レジスタエリア、７２  安全関連部レジスタエリア、８１  非分離レジスタ、９１  非安全出力端子、９２  安全出力端子、４２１  安全関連ビットパターンデータ、５２１  安全関連ビットバックアップデータ、８１１  非安全関連ビット、８１２  安全関連ビット。
【図１】
2018067047.tif 000003
【図２】
2018067047.tif 000004
【図３】
2018067047.tif 000005