(57)【要約】  マイクロコントローラ（１）は、プロセッサ（２）と、メモリ（３）と、プロセッサ（２）とメモリ（３）をつなぐバス（１５）と、１つ以上のメモリ監視イベントレジスタおよび１つ以上の構成レジスタを備えるメモリ監視ユニット（１４）と、を備える。メモリ監視ユニット（１４）は、バス（１５）上のメモリアクセス命令をモニタするように設けられ、１つ以上の構成レジスタを使用して、（ｉ）メモリ（３）の構成可能な監視領域内のメモリアドレスに対するメモリアクセス命令を検出し、（ｉｉ）当該検出が発生すると、１つ以上のメモリ監視イベントレジスタの内容を変更するように構成することができる。
2018524702.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサと、
メモリと、
前記プロセッサと前記メモリを接続するバスと、
１つ以上のメモリ監視イベントレジスタおよび１つ以上の構成レジスタを備えるメモリ監視ユニットと、を備えるマイクロコントローラであって、
前記メモリ監視ユニットは、前記バスによるメモリアクセス命令をモニタするように設けられて、前記１つ以上の構成レジスタを使用することによって、（ｉ）前記メモリの構成可能な監視領域内のメモリアドレスに対するメモリアクセス命令を検出し、（ｉｉ）当該検出が発生すると、１つ以上のメモリ監視イベントレジスタの内容を変更するように、構成される
ことを特徴とするマイクロコントローラ。
【請求項２】
前記メモリは、前記プロセッサが前記メモリ監視ユニットを構成することができるソフトウェア命令を含む
ことを特徴とする、請求項１に記載のマイクロコントローラ。
【請求項３】
前記メモリ監視ユニットは、その内容によって前記監視領域のサイズまたは位置が決定される１つ以上の構成レジスタを備える
ことを特徴とする、請求項１または２に記載のマイクロコントローラ。
【請求項４】
前記メモリは、複数の所定のサブ領域から成り、前記メモリ監視ユニットは、前記サブ領域の小集団から成る監視領域に対するメモリアクセス命令を検出するように構成することができ、前記小集団は、１つ以上の前記構成レジスタの内容によって決定される
ことを特徴とする、請求項１乃至請求項３のいずれかに記載のマイクロコントローラ。
【請求項５】
前記メモリ監視ユニットは、その内容によって検出すべきメモリアクセス命令のタイプが決定される構成レジスタを備える
ことを特徴とする、請求項１乃至請求項４のいずれかに記載のマイクロコントローラ。
【請求項６】
前記メモリ監視ユニットは、複数の構成可能な監視領域内のメモリアドレスに対するアクセス命令を検出するように構成することができる
ことを特徴とする、請求項１乃至請求項５のいずれかに記載のマイクロコントローラ。
【請求項７】
各監視領域ごとに検出すべきメモリアクセス命令のタイプは、各監視領域ごとに独立して構成可能である
ことを特徴とする、請求項６に記載のマイクロコントローラ。
【請求項８】
２つ以上の前記監視領域が重なる場合がある
ことを特徴とする、請求項６または７に記載のマイクロコントローラ。
【請求項９】
前記メモリ監視ユニットは、１つ以上のメモリ監視イベントレジスタの内容を変更することによって、複数の監視領域のどれに対してメモリアクセス命令が検出されたのかを示すように設けられる
ことを特徴とする、請求項６乃至請求項８のいずれかに記載のマイクロコントローラ。
【請求項１０】
前記メモリ監視ユニットは、１つ以上のメモリ監視イベントレジスタの内容を変更することによって、どのタイプのアクセス命令が検出されたかを示すように設けられる
ことを特徴とする、請求項１乃至請求項９のいずれかに記載のマイクロコントローラ。
【請求項１１】
前記メモリ監視ユニットは、その内容によって特定の監視領域が監視中か非監視中かが決定される構成レジスタを備える
ことを特徴とする、請求項１乃至請求項１０のいずれかに記載のマイクロコントローラ。
【請求項１２】
前記メモリ監視ユニットは、メモリアクセスを阻止したり妨害したりしないように設けられる
ことを特徴とする、請求項１乃至請求項１１のいずれかに記載のマイクロコントローラ。
【請求項１３】
前記メモリ監視ユニットは、監視領域に対するメモリアクセス命令が検出されると前記プロセッサに割り込みを送信するように前記メモリ監視ユニットを構成する１つ以上の構成レジスタを備える
ことを特徴とする、請求項１乃至請求項１２のいずれかに記載のマイクロコントローラ。
【請求項１４】
前記プロセッサまたは前記マイクロコントローラ上の周辺機器がタスクをトリガすることによって、１つ以上のメモリ監視イベントレジスタの内容に対する変更に対処するように設けられたタスクトリガユニットを備える
ことを特徴とする、請求項１乃至請求項１３のいずれかに記載のマイクロコントローラ。
【請求項１５】
タスク受信側周辺機器と、プログラマブル周辺機器相互接続器とを備え、前記プログラマブル周辺機器相互接続器は、前記メモリ監視ユニットによる検出イベントと前記タスク受信側周辺機器のタスクと間のマッピングを格納することができるメモリにアクセスするように設けられ、前記メモリ監視ユニットによる検出イベントと前記タスク受信側周辺機器のタスクとの間のマッピングが格納されている場合、前記プログラマブル周辺相互接続器は、前記メモリ監視ユニットから前記検出イベントの信号を受信すると前記タスク受信側周辺機器にタスク信号を送信するように設けられる
ことを特徴とする、請求項１乃至請求項１４のいずれかに記載のマイクロコントローラ。
【請求項１６】
前記メモリ監視ユニットは、前記メモリのスタック領域またはヒープ領域の所定の境界に隣接したアドレスに対するメモリアクセス命令を検出するように構成される
ことを特徴とする、請求項１乃至請求項１５のいずれかに記載のマイクロコントローラ。
【請求項１７】
前記メモリ監視ユニットは、前記マイクロコントローラ用のファームウェアを収容している前記メモリの領域内のアドレスに対するメモリアクセス命令を検出するように構成される
ことを特徴とする、請求項１乃至請求項１６のいずれかに記載のマイクロコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はマイクロコントローラに関する。
【背景技術】
【０００２】
マイクロコントローラは、しかるべきアクセス条件が満たされなければ、プロセッサがメモリの特定の領域への読み取りおよび／または書き込み動作を行うことを阻止できるハードウェアメモリ保護ロジックを含むことが知られている。例えば本出願人による国際特許出願公開番号第ＷＯ２０１４/００１８０３号は、保護領域に対して読み取り防止フラグが設定されている場合、プロセッサが、この保護領域に格納されたコードを実行している最中に当該読み取りリクエストを発行したのでない限り、メモリの保護領域内のアドレスに対する読み取りリクエストを拒否するメモリ保護ロジックについて記載している。これを使用して、ファームウェアコードが不用意に書き換えられないように保護したり、攻撃者が機密のファームウェアコードを読み取ることを阻止したりすることができる。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
上述のようなメモリ保護ロジックは有効であるが、用途が限られている。より柔軟性のある手法が望ましい。
【課題を解決するための手段】
【０００４】
したがって、第１の態様からみると、本発明は、
プロセッサと、
メモリと、
前記プロセッサと前記メモリとを接続するバスと、
１つ以上のメモリ監視イベントレジスタおよび１つ以上の構成レジスタを備えるメモリ監視ユニットと、を備えるマイクロコントローラを提供し、
前記メモリ監視ユニットは、前記バスによるメモリアクセス命令をモニタするように設けられて、前記１つ以上の構成レジスタを使用することによって、（ｉ）前記メモリの構成可能な監視領域内のメモリアドレスに対するメモリアクセス命令を検出し、（ｉｉ）当該検出が発生すると、１つ以上のメモリ監視イベントレジスタの内容を変更するように、構成される。
【０００５】
本発明によれば、前記メモリ監視ユニットは、メモリの監視領域にアクセスしようとする試みを検出しこのことをデバイスの残りの部分に信号で知らせることができるが、必ずしもメモリアクセスが行われるのを阻止するのではないし必ずしもハードウェア誤りを発生させないことが、当業者であれば理解するであろう。こうすれば、メモリアクセスの検出が発生すると、前記マイクロコントローラ上で稼働するソフトウェアを使用しかなり広い範囲の応答を構成することが可能になるため、従来技術の手法よりも汎用性があって強力である。
【０００６】
前記プロセッサは、前記１つ以上の構成レジスタに書き込むことによって前記メモリ監視ユニットを構成できることが好ましい。こうすれば、通常は、前記プロセッサによって稼働されるソフトウェアの制御下になる。したがって、前記メモリは、前記メモリ監視ユニットを構成する命令を含んでいてもよい。いくつかの実施形態において、例えば前記マイクロコントローラ内の周辺機器など他のデバイスが、前記メモリ監視ユニットを構成することができる場合もある。  
【０００７】
前記メモリ監視ユニットは、その内容によって検出すべきメモリアクセス命令のタイプが決定される構成レジスタを備えてもよい。前記メモリ監視ユニットは、例えば、前記構成レジスタの内容に基づいて、読み取り命令を検出するように構成されてよいし、書き込み命令を検出するように構成されてもよいし、命令取り出し命令を検出するように構成されてもよいし、これらの命令タイプのうち任意の２つ以上を検出するように構成されてもよい。例えばアラインされていないアクセスのような１つ以上の他のメモリ関連動作を検出するように構成可能であってもよい。
【０００８】
前記メモリ監視ユニットは、１つ以上の構成レジスタを備えその内容によって前記監視領域のサイズまたは位置を決定してもよい。前記メモリ監視ユニットは、その内容が一定範囲のメモリアドレスの下方境界を表す開始アドレスレジスタを備えてもよい。前記メモリ監視ユニットは、その内容が一定範囲のメモリアドレスの上方境界を表す終了アドレスレジスタを備えてもよい。その代わりに、前記メモリ監視ユニットは、その内容が一定範囲のメモリアドレスのサイズを表す長さレジスタを備えてもよい。前記メモリ監視ユニットは、このような長さレジスタを開始アドレスレジスタ（または終了アドレスレジスタ）とあわせて使用することで、監視領域を規定してもよい。
【０００９】
前記監視領域は、必須ではないものの、連続する範囲のメモリアドレスであってもよいし、いくつかの実施形態において、前記メモリ監視ユニットがより複雑な監視領域を規定できるようにしてもよい。例えば、いくつかの実施形態において、前記メモリは、複数の所定のサブ領域（例えば２つ、３つ、１０個またはそれ以上の所定のメモリブロック）から成り、前記メモリ監視ユニットが１つ以上の構成レジスタを備えてその内容が前記監視領域の一部または全てをともに形成する一部の複数の前記サブ領域を特定してもよい。例えば、前記メモリ監視ユニットは、各ビットが前記複数のサブ領域の各々と対応付けられたビットフィールド構成レジスタを使用し、当該サブ領域が前記監視領域内に含まれるかどうかを各ビットの値が決定してもよい。したがって、いくつかの実施形態において、前記メモリ監視ユニットは、前記サブ領域の小集団から成る監視領域に対するメモリアクセス命令を検出するように構成することができ、前記小集団は、１つ以上の前記構成レジスタの内容によって決定される。レジスタの前記内容に応じて、前記小集団は、何も含まなくてもよいし、所定の前記サブ領域の全てから成ってもよいし、前記サブ領域の適切な小集団であってもよい。
【００１０】
前記監視領域は、（例えば単一メモリアドレスによって与えられる）単一データワード長であってよい。開始アドレスレジスタおよび終了アドレスレジスタに同一アドレスが書き込まれた場合、このケースになる。しかしながら、前記メモリ監視ユニットは、前記監視領域が少なくとも２つのメモリアドレス、できれば任意の数のメモリアドレスから成るように構成され得るよう設けられることが好ましい。
【００１１】
前記メモリ監視ユニットは、複数の構成可能な監視領域、例えば、２つ、３つ、１０個またはそれ以上の監視領域内のメモリアドレスに対するアクセス命令を検出するように構成されることが好ましい。したがって、前記メモリ監視ユニットは、各々がそれぞれ異なる監視領域と関係付けられた複数の構成レジスタを備えてもよい。検出すべきアクセス命令のタイプは、各監視領域ごとに独立して構成可能であってよい。いくつかの実施形態において、前記監視領域は、部分的に重なることが許される場合もある。こうすれば、例えば第１の領域に対して読み取り監視を構成し、第１の領域と部分的に重なる第２の領域に対して書き込み監視を構成する必要がある場合に有益である。
【００１２】
前記メモリ監視ユニットは、特定の監視領域が監視中か非監視中か、すなわち前記メモリ監視ユニットがそれぞれの監視領域に対するメモリアクセス命令を検出するかどうかを判定する内容を有する１つ以上の構成レジスタを備えてもよい。各監視領域に、例えばそれぞれの値またはビット位置を割り当て、構成レジスタにおいて当該の値があるか（またはないか）、または、それぞれの前記ビット位置に所定のバイナリ値があるか（またはないか）によって、前記メモリ監視ユニットに当該監視領域に対するメモリアクセス命令を検出させてもよい。
【００１３】
前記メモリ監視ユニットは、前記メモリ監視イベントレジスタの内容を変更することによって、複数の監視領域のどれに対してメモリアクセス命令が検出されたのかを示すように設けられてもよい。前記メモリ監視イベントレジスタの内容を変更することによって、例えば読み取り、書き込みまたは命令取り出しなどどのタイプのアクセス命令が検出されたのかを示してもよい。メモリ監視イベントレジスタは、ビットフィールドから成り、各ビット位置がそれぞれ監視領域とアクセス命令タイプの組み合わせを表してもよい。そして、前記メモリ監視ユニットは、アクセス命令が検出されると、それぞれのビットを所定の値（例えばバイナリ１）に設定してもよい。あるいは、前記マイクロコントローラは、複数のメモリ監視イベントレジスタを備え、各々が別の監視領域および／または別のタイプのアクセス命令に関係付けられてもよい。
【００１４】
前記メモリ監視ユニットは、発生元にかかわらず、すなわちいかなるバスマスターからのメモリアクセス命令も検出するように設けられることが好ましい。そうすれば、これを用いて、前記プロセッサからの命令と同様に、例えば周辺機器からのダイレクトメモリアクセス（ＤＭＡ）命令を検出することが可能になる。
【００１５】
前記構成レジスタおよび前記イベントレジスタは前記メモリ監視ユニットの一部であると述べたが、これらの物理的な位置を前記マイクロコントローラに限定するものでないことは理解されるであろう。これらのレジスタは、前記プロセッサによって、例えば前記バス経由でアドレス指定可能であることが好ましい。これらのレジスタは、プロセッサが書き込んだり読み取ったりできることが好ましい。各々のレジスタは、連続するメモリ領域を占めてもよいし複数の位置にわたって分割されてもよい。本明細書で述べるレジスタは、単一ビット長（より大きなビットフィールド内にある可能性が高い）だけであってもよいし、複数のビット（例えば３２ビットワード）から成っていてもよい。
【００１６】
前記メモリは、ＲＡＭおよび／またはフラッシュメモリのような揮発性および／または不揮発性メモリから成っていてもよい。前記メモリの一部はプログラムコードを格納してもよい。これはプロセッサによってバスを経由してアドレス指定が可能であることが好ましい。
【００１７】
前記プロセッサは、任意の適切なプロセッサであればよい。いくつかの実施形態では、例えば ＡＲＭ（商標）社のＣｏｒｔｅｘ（商標）製品群のプロセッサのようなＡＲＭ（商標）社のプロセッサである。  
【００１８】
前記バスは、アドレスバスまたは命令バスであってもよいし、命令とデータの両方を伝えてもよい。前記マイクロコントローラは、例えばプロセッサ用バスおよび周辺機器用バスのような複数のバスを備えてもよい。前記メモリ監視ユニットは、複数のバスによるメモリアクセス命令をモニタするように設けられてもよい。
【００１９】
前記メモリ監視ユニットは、メモリアクセスを阻止したり妨害したりしないように設けられることが好ましい。特に、ハードウェア誤りを生じさせないように設けられることが好ましい。
【００２０】
しかしながら、前記メモリ監視ユニットは、監視領域に対するメモリアクセス命令が検出されると前記プロセッサに割り込みを送信するように前記メモリ監視ユニットを構成する１つ以上の構成レジスタを備えてもよい。このようにすれば、前記プロセッサは、しかるべき割り込み処理ルーチンによって、必要であればメモリアクセスを阻止するようにプログラムすることができる。前記割り込みは、マスク可能割り込みまたはマスク不可能割り込みであってもよいし、マスク可能割り込みおよびマスク不可能割り込みを構成するための別個の構成レジスタが存在してもよい。
【００２１】
割り込みが使用されない場合、前記プロセッサは、その代わりとして、１つ以上のメモリ監視イベントレジストを継続的にポーリングすることによってこれらの値の変化を検出することも可能である。しかしながら、これは非効率的であり、前記プロセッサがスリープ状態に入るのを阻む可能性がある。
【００２２】
その代わりとして、前記マイクロコントローラは、前記プロセッサまたは前記マイクロコントローラ上の周辺機器がタスク（または動作）をトリガすることによって、１つ以上のメモリ監視イベントレジスタの内容に対する変更に対処するように設けられたタスクトリガユニットを備えてもよい。前記タスクトリガユニットは、前記プロセッサによって構成可能であってもよい。例えば、前記メモリ監視ユニットによる検出イベントが発生すると、タイマ周辺機器を始動するか、ＳＰＩトランザクションを停止するように構成可能であってもよい。前記タスクトリガユニットは、１つ以上のメモリ監視イベントレジスタに変更がないかどうかモニタしてもよい。その代わりとして、前記メモリ監視ユニットは、前記メモリの構成可能な前記監視領域内のメモリアドレスに対するメモリアクセス命令を検出すると、例えば１つ以上の専用信号ラインを介してイベント信号を送信するように設けられるとともに、前記タスクトリガユニットは、このイベント信号を受信するように設けられてもよい。前記イベント信号自体が当該イベント（例えば前記アクセス命令がどの監視領域に対するものか）を特定してもよいし、前記イベント信号によって前記タスクトリガユニットが１つ以上の前記メモリ監視イベントレジスタを読み取り当該イベントを決定してもよい。
【００２３】
この目的のために、前記マイクロコントローラは、例えば、全内容が参照により本明細書に組み込まれている国際特許出願公開番号第ＷＯ２０１３／０８８１２１号におおむね記載されているプログラマブル周辺機器相互接続器のようなプログラマブル周辺機器相互接続器を備えてもよい。いくつかの実施形態において、前記プログラマブル周辺機器相互接続器は、前記メモリ監視イベントレジスタの１つをモニタするようにプログラムされているか、またはそのようにプログラムすることができる。前記メモリ監視ユニットとプログラマブル周辺機器相互接続器を組み合わせることによって、多くの有益な構成が可能となり、従来のメモリ保護ユニットよりもはるかに優れた柔軟性を提供できることが判明した。
【００２４】
前記マイクロコントローラは、少なくとも１つの周辺機器を備えることが好ましい。この周辺機器は、例えば、タイマ、万能非同期送受信機（ＵＡＲＴ）、電圧比較器、暗号化エンジン、アナログデジタル変換器（ＡＤＣ）、デジタルアナログ変換器（ＤＡＣ）、無線送信機、無線受信機などである可能性がある。
【００２５】
前記マイクロコントローラは、前記周辺機器に対し、例えば前述のバスを介して、メモリマップされた入力および／または出力をサポートすることが好ましい。前記周辺機器は、イベントを信号で（例えばプロセッサに）知らせるように構成された、イベント発生可能なものであってもよい。前記周辺機器は、イベントレジスタを備えるとともに、前記イベントレジスタの内容を変更して前記イベントを識別するように設けられてもよい。前記イベントレジスタは、前記バスを介してアドレス指定が可能であることが好ましい。前記周辺機器は、タスクを実行することによって（例えば前記プロセッサからの）タスク信号に対処するように構成された、タスク受信側であってもよい。前記周辺機器は、前記タスクに関係付けられたタスクレジスタを備えるとともに、前記タスクレジスタの内容変化が発生すると前記タスクを実行するように構成されてもよい。前記タスクレジスタは、前記バスを介してアドレス指定が可能であることが好ましい。
【００２６】
上記のように、前記マイクロコントローラは、第１周辺機器のタスクと、前記メモリ監視ユニットおよび／または第２周辺機器のイベントとの間のマッピングを格納することができるメモリにアクセスするように設けられたプログラマブル周辺機器相互接続器を備えてもよい。前記マッピングは、（ｉ）前記タスクに関係付けられたタスクレジスタのアドレスと、（ｉｉ）前記メモリ監視ユニットおよび／または前記第２周辺機器のイベントの識別（例えばメモリ監視イベントレジスタのアドレス）と、を含んでもよい。前記メモリ監視ユニットの前記イベントは、メモリ監視イベントレジスタ内の特定のビット位置が所定の値（例えばバイナリ１）であるといったように、前記メモリ監視イベントレジスタ内の所定の値と、および／または、特定の信号ラインを介してメッセージを送信することと、関係付けられてもよい。前記プログラム可能周辺機器相互接続器は、第１周辺機器のタスクと前記メモリ監視ユニット（または第２周辺機器）のイベントとの間のマッピングがメモリに格納されている場合、前記メモリ監視ユニット（または前記第２周辺機器）から前記イベントの信号が来たらタスク信号を前記第１周辺機器に送信することによって、伝達経路を提供するように設けられてもよい。前記メモリ監視ユニットは、前記メモリ監視ユニットと前記プログラム可能周辺機器相互接続器との間の信号ラインを介してメッセージを送信することによって、前記プログラム可能周辺機器相互接続器に検出イベントを信号で知らせるように設けられてもよい。このメッセージが前記イベント（例えばどの監視領域およびアクセス命令のタイプが検出されたか）を識別してもよいし、前記プログラム可能周辺機器相互接続器が、前記イベントの同一性（例えばどの監視領域およびアクセス命令のタイプが検出されたか）を判定するために、（例えばメッセージを受信すると）１つ以上の前記メモリ監視イベントレジスタを読み取るように設けられてもよい。同様に、前記プログラム可能周辺機器相互接続器は、周辺機器に両者間のタスク信号ラインを介してメッセ−ジを送信するように設けられて、このメッセージが前記タスクを識別するか、または前記プログラム可能周辺機器相互接続器が前記周辺機器上の１つ以上のタスクレジスタを読み取って前記タスクの同一性を判定してもよい。
【００２７】
いくつかの実施形態において、前記マイクロコントローラは、保護モジュールを備えて、前記タスクトリガユニット（例えばプログラマブル周辺機器インターフェース）は、１つ以上のメモリ監視イベントレジスタの内容に対する所定の変更を検出すると保護タスクをトリガするように構成されてもよい。前記保護モジュールは電力モジュールであってもよい。前記保護タスクは、前記プロセッサをリセットすることを含んでもよい。
【００２８】
前記マイクロコントローラは、前記プロセッサが通常の実行モード状態にあるときのメモリアクセス命令をモニタすることができることが好ましい。これは、例えば、デバグモードでだけ作動してシステム内の他のデバッグコンポーネントにだけ（例えば前記プロセッサを停止するよう、またはトレースを開始するよう）信号で知らせるデータ監視ポイントとは根本的に異なる。
【００２９】
前記メモリ監視ユニットは、どのメモリアクセス命令のタイプが検出されたか、または当該命令がどの監視領域を対象にしていたかなどの１つ以上の要因に応じて、１つ以上のメモリ監視イベントレジスタ内に異なる値を１つまたは複数設定してもよい。複数のメモリ監視イベントレジスタが存在し、各監視領域ごとに、および／または、各アクセス命令のタイプごとにそれぞれ異なるメモリ監視イベントレジスタを用いもよい。
【００３０】
前記メモリ監視ユニットは、多様な種類の有益な動作を実行するように構成することができる。一例として、前記メモリ監視ユニットは、スタックオーバーフローまたはヒープオーバーフローを検出するように構成されてもよいし、メモリ内のコードを悪意のある読み取り行為から、または不慮の上書き行為から防止するように構成されてもよいし、特定のレジスタまたはメモリ領域がアクセスされると（読み取りまたは書き込み）特定の行動（例えばＧＰＩＯを切り替えること、または割り込みを発生させること）をトリガするよう構成することによってソフトウェアコードをデバッグするのに使用されてもよいし、前記プロセッサが特定のレジスタまたはメモリ位置に書き込むまたはそこから読み取るとまさに同時にタスクのアトミックトリガを確実に発生させるのに使用されてもよい。
【００３１】
前記マイクロコントローラは、当然のことながら、動作するためには水晶振動子やコンデンサなど何らかのオフチップ構成要素を必要とするとはいえ、一体化されたデバイスであることが好ましい。これらの構成要素は、前記マイクロコントローラの一部と見なしてもよいし、前記マイクロコントローラとは別個のものと見なしてもよい。
【００３２】
前記メモリ監視ユニットは、前記プロセッサとは別個の、前記マイクロコントローラ内の独立したハードウェアモジュールであることが好ましい。前記メモリ監視ユニットは、上述した機能を提供するよう設けられ、トランジスタ、レジスタ、コンデンサなどを含むアナログおよび／またはデジタルの構成要素を備えてもよい。
【００３３】
いくつかの実施形態において、前記マイクロコントローラは無線受信機を備える。これはオンチップ無線デバイスであってもよい。
【００３４】
本明細書に記載された任意の態様または実施形態の特徴は、適切である限り、本明細書に記載された任意の他の態様または実施形態に適用してもよい。種々の実施形態または種々の実施形態群を参照する際、これらは必ずしも別個のものである必要はなく、一部が重なる場合もあることを理解されたい。
【図面の簡単な説明】
【００３５】
ほんの一例として、添付図面を参照しながら本発明の特定の好ましい実施形態を次に説明する。
【図１】本発明を具現化する第１のシステムの構成要素を示した概略図である。
【発明を実施するための形態】
【００３６】
図１は、一体化されたマイクロコントローラデバイス１を示す。マイクロコントローラデバイス１は、ＡＲＭ（商標）Ｃｏｒｔｅｘ（商標）Ｍ４などの中央プロセッサ２を含む。マイクロコントローラデバイス１は、揮発性（例えば ＳＲＡＭ) メモリおよび不揮発性（例えばフラッシュ）メモリの両方を含むメモリ３を有する。全てのメモリおよびレジスタは、共通のアドレススペースを使用する。
【００３７】
デバイス１は、種々の周辺機器も有する。タイマ４およびＵＡＲＴ５（汎用非同期送受信機／送信機）５が図示されているが、無線機、暗号化エンジン、アナログデジタル変換器などの多くの他の周辺機器（図示せず）も存在してもよいことが理解されるであろう。
【００３８】
タイマ４は、「出力」イベントレジスタ６、「オーバフロー」イベントレジスタ７、および「入力」タスクレジスタ８を有する。ＵＡＲＴ５は、「ＲＸ受信」イベントレジスタ９、「ＴＸ完了」イベントレジスタ１０、「ＲＸトリガ」タスクレジスタ１１、および「ＴＸトリガ」タスクレジスタ１２を有する。これらのレジスタは、メモリ３と共通のメモリアドレススペースを共有し、メモリマップされたＩ／Ｏを利用してプログラマブル周辺機器インターフェース（ＰＰＩ）１３およびプロセッサ２によってアクセスすることができる。当然のことながら、他の実施形態は異なる周辺機器を有してもよいし、これらの周辺機器は任意の数のイベントまたはタスクレジスタを有してもよい。
【００３９】
プログラマブル周辺機器インターフェース（ＰＰＩ）１３に対し、プロセッサ２による直接の介入がなくとも１つの周辺機器上のイベントが別の周辺機器上のタスクをトリガするような周辺機器間のダイレクトチャネルを確立するように、プロセッサ２は命令することができる。このようなＰＰＩの一例は、国際特許出願公開番号第ＷＯ ２０１３/０８８１２１号に記載されている。ＰＰＩ１３は、プロセッサ２によって特有のチャネルマッピングテーブルにアドレスが書き込まれた全てのイベントレジスタを周期的にポーリングし、当該イベントレジスタの１つの値がいつ変化するかを判定するように構成される。変化が検出されると、ＰＰＩ１３は、チャネルマッピングテーブル内の当該イベントレジスタにマップされた全てのタスクレジスタにしかるべき値を書き込み、これによってしかるべきタスクまたは複数のタスクをトリガする。
【００４０】
デバイス１は、以下でより詳細に説明するメモリ監視ユニット１４も備えている。
【００４１】
バス１５は、種々の構成要素をつないでいる。バス１５は、いくつかの実施形態において、例えばＡＲＭ（商標）新型高性能バスおよびＡＲＭ（商標）新型周辺機器バスなどの２つ以上の異なるバスから成る。
【００４２】
メモリ監視ユニット１４は、バス１５上の全てのメモリ読み取り命令およびメモリ書き込み命令、ならびに全ての命令取り出しをモニタする。メモリ監視ユニット１４は、（ｉ）特定のメモリ領域が読み取られる度に、または（ｉｉ）特定のメモリ領域に書き込まれる度に、または（ｉｉｉ）特定のメモリ領域が読み取られたり書き込まれたりする度に、イベントを生成させるように、プロセッサ２によって構成することができる。監視されるメモリ領域は、いくつかの実施形態ではメモリアドレススペース内のどこにあってもよいし、他の実施形態ではＳＲＡＭであってかつ周辺機器に割り当てられたメモリセグメントなどのように特定のメモリ領域に限定されてもよい。
【００４３】
メモリ監視ユニット１４は、任意の数の異なる領域をモニタしてもよい。この特定の実施形態では、以下の通り１５個の異なる領域を監視することができる。
【００４４】
【表１】
2018524702.tif 000003
【００４５】
各々の監視領域は、領域の開始アドレスを指定するＳＴＡＲＴレジスタおよび領域の終了アドレスを指定するＥＮＤレジスタの２つのメインの構成レジスタを有する。ＥＮＤレジスタの値は、ＳＴＡＲＴレジスタの値以上でなければならない。前者が後者より小さい場合、メモリ監視ユニット１４の動作は予測不可能である。ＥＮＤレジスタの値がＳＴＡＲＴレジスタの値に等しい場合、当該領域は、開始アドレスに対して１ワード長である。メモリ監視ユニット１４は、各々の領域を（ｉ）当該領域内への書き込みアクセスが検出されたことを示す第１イベント、および（ｉｉ）当該領域内への読み取りアクセスが検出されたことを示す第２イベントと関係付ける。
【００４６】
ＲＥＧＩＯＮ[０]、ＲＥＧＩＯＮ[１]、ＲＥＧＩＯＮ[２]、およびＲＥＧＩＯＮ[３]は、ＲＥＧＩＯＮＥＮ(領域有効化)レジスタ内のそれぞれのビットフラグＲＧＮ０ＲＡ (読み取りアクセス)、ＲＧＮ０ＷＡ(書き込みアクセス)、…、ＲＧＮ３ＲＡ（読み取りアクセス）、ＲＧＮ３ＷＡ(書き込みアクセス)にしかるべき値を書き込むことによって、読み取りアクセス監視および／または書き込みアクセス監視を個別に有効化することができる。
【００４７】
最初の４つの領域とは異なり、２つの領域ＰＲＥＧＩＯＮ[０]およびＰＲＥＧＩＯＮ[１]はサブ領域の機能をサポートしており、主領域は均等なサイズの３２個のサブ領域（ＳＲ０〜ＳＲ３１）に分割されて、その各々が、当該領域用の３２ビットの「ＳＵＢＳ」レジスタにおいて当該サブ領域用のビットフラグが１または０であるかどうかに応じて、それぞれ、監視目的のために当該領域の一部として含まれるか、あるいは除外されるかのいずれかになり得る。あるサブ領域が主領域から除外されると、メモリ監視機構は、当該のメモリ領域がアクセスされても何のイベントもトリガしないことになる。
【００４８】
ＰＲＥＧＩＯＮ[０]およびＰＲＥＧＩＯＮ[１]内のサブ領域は、読み取りおよび／または書き込みアクセスの監視に対して個別に有効化することはできないが、ＲＥＧＩＯＮＥＮ(領域有効化）レジスタ内のＰＲＧＮ０ＲＡ (読み取りアクセス監視)およびＰＲＧＮ１ＷＡ(書き込みアクセス監視)ビットフラグにしかるべき値を書き込むことによって、含まれるサブ領域の全てを対象とする領域全体の制御が可能である。
【００４９】
サブ領域を含む領域については、一組の状態レジスタであるＰＥＲＲＥＧＩＯＮ[０].ＳＵＢＳＴＡＴＷＡ，ＰＥＲＲＥＧＩＯＮ[０].ＳＵＢＳＴＡＴＲＡ，ＰＥＲＲＥＧＩＯＮ[１].ＳＵＢＳＴＡＴＷＡおよびＰＥＲＲＥＧＩＯＮ[１].ＳＵＢＳＴＡＴＲＡが、どのサブ領域が最新の読み取りイベントまたは書き込みイベントをトリガしたかを示す。
【００５０】
レジスタＲＥＧＩＯＮＥＮＳＥＴによって、単一の書き込みアクセスで１つ以上のＲＥＧＩＯＮまたはＰＲＥＧＩＯＮの監視を有効化することができる。ＲＥＧＩＯＮＥＮＣＬＲレジスタによって、同様に、単一の書き込みアクセスで１つ以上のＲＥＧＩＯＮまたはＰＲＥＧＩＯＮの監視を無効化することもできる。
【００５１】
メモリ監視ユニット１４には、アクセスイベントが１つ以上の特定領域で検出されると割り込みまたはマスク不可能割り込みを生成するように、プロセッサ２によって命令することができる。これはＩＮＴＥＮレジスタおよびＮＭＩＥＮレジスタを用いて行われる。こうすれば、プロセッサ２は、イベントレジスタに継続的にポーリングしなくても、読み取りアクセスまたは書き込みアクセスを知ることができる。
【００５２】
プロセッサ２は、メモリ監視ユニット１４内のイベントレジスタのアドレスを用いて、ＰＰＩ１３内に１つ以上のチャネルを設定することもでき、その結果、メモリ監視ユニット１４が１つ以上の監視対象領域への読み取りアクセスまたは書き込みアクセスを検出すると、周辺機器のタスクを自動的に（すなわちプロセッサの介入なしで）トリガすることができる。
【００５３】
以下の表で、メモリ監視ユニット１４に関係付けられたレジスタの各々を説明する。
【００５４】
【表２】
2018524702.tif 000004
2018524702.tif 000005
【００５５】
メモリ監視ユニット１４は、アクセスを検出しイベントを生成するのにハーフクロック（ＨＣＬＫ）２サイクルを必要とする。
【００５６】
メモリ監視ユニット１４は、読み取りアクセスまたは書き込みアクセスを阻止することはないが、ハードウェア誤りをトリガするために用いることができる。これは、プロセッサ２によって提供される適切なインターフェースを用いて行うこともできるし、ハードウェア誤りは、マスク不可能割り込みルーチンの中からプロセッサ２によって、例えば、物理的メモリにマップされていない特定のアドレスをプロセッサ２が読み取ることによって、投入することができる。
【００５７】
メモリ監視ユニット１４は、アプリケーションの開発者が、開発中にデバッギングのために、および本番稼動中に障害の検出および回復のためにメモリアクセスイベントを生成することを可能にするように設けられる。
【００５８】
メモリ監視ユニット１４は、多くの異なる使用形態があり得る。いくつかの例を以下の段落で説明するが、多くの他の使用形態も可能である。
【００５９】
プロセッサ２は、コールスタックの上方境界から始まる監視領域を規定し、この監視領域から読み取ろうとしたりそこに書き込もうとしたりすると割り込みをトリガするようにメモリ監視ユニット１４を設定することによって、スタックオーバーフローを検出するようにメモリ監視ユニット１４を構成してもよい。同一の手法を利用してヒープオーバーフローを検出してもよい。
【００６０】
プロセッサ２は、ファームウェアが配置される監視領域を規定し、このファームウェア領域に書き込もうとすると割り込みをトリガするようにメモリ監視ユニット１４を設定することによって、ファームウェアコードの不慮の上書き行為を防止するようにメモリ監視ユニット１４を構成してもよい。
【００６１】
プロセッサ２は、タイマ４が、このタイマ上のキャプチャ比較（ＣＣ）レジスタに書き込みを行うと検出するようにメモリ監視ユニット１４を構成してもよい。タイマ４が、バス１５を介してＣＣレジスタに書きみを行う場合、当該検出は、バス１５をモニタすることによって達成することができる。しかし、タイマ４がバス１５を利用しない場合、メモリ監視ユニット１４は、バス１５の代わりにタイマ４の内部レジスタマップをモニタしてもよい。メモリ監視ユニット１４をこのように構成すれば、デバイス１は、タイマ４がＣＣレジスタに書き込みを行うのとまさに同じ時間にタスクをトリガすることが可能になるので、アトミック動作が可能になる。このタスクをトリガするのにプロセッサ４が代わりに使用された場合、その動作はもはやアトミックではなくなり、例えば、タイマ４がＣＣレジスタに書き込みを行った後であってプロセッサ２がこのタスクをトリガする前に割り込みが届いた場合、予測不可能な遅延が入ることになり得る。
【００６２】
より一般的には、プロセッサ２は、何らかの周辺機器のタスクレジスタへの書き込み動作を検出するようにメモリ監視ユニット１４を構成してもよい。こうすると、アトミック動作を行うことができるようになるだけでなく、ソフトウェアコードのデバッギングを行うにも有益であり得る。コード内にバグがある場合、（特定のレジスタの内容が書き込まれるなど）個有のアドレスがアクセスされると、ある動作（ＧＰＩＯを切り替えたり割り込みを生成したりするなど）をトリガするようにメモリ監視ユニット１４を構成することができる。例えば、レジスタが更新されるのが遅すぎるか早すぎると疑われる場合、当該アドレスがアクセスされるとＧＰＩＯを切り替えて当該アクセスが発生する正確な時間を観察できるようにメモリ監視ユニット１４およびＰＰＩ１３を構成することができる。
【００６３】
１つ以上の特定の実施形態を記載することによって本発明を例示してきたが、本発明はこれらの実施形態に限定されるものではなく、添付の特許請求の範囲の範囲内で多くの変形形態および変更形態が可能であることが当業者であれば理解できるであろう。
【図１】
2018524702.tif 000006
【国際調査報告】
2018524702.tif 000007
2018524702.tif 000008