(57)【特許請求の範囲】
【請求項１】
システム情報を格納する不揮発性メモリと、不揮発性メモリにアクセスして、システム情報をリードライトするプロセッサと、前記プロセッサから不揮発性メモリへのアクセスを制御するプロセッサ制御回路と、を備え、
前記プロセッサ制御回路が、
不揮発性メモリへのアクセスに対してメモリを保護するメモリ保護回路と、
プロセッサから送付されるアドレスあるいはコマンドを受け付けるアドレス／コマンドバッファと、
プロセッサから送付されるライトデータを受け付けるライトデータバッファと、
アドレス／コマンドバッファのデータをデコードするデコーダと、
前記デコーダの出力によって、前記メモリ保護回路または不揮発性メモリの出力のいずれか一つを選択するデータセレクタと、
前記データセレクタの出力を受け取るリードバッファと、
前記デコーダからのアドレス及びコマンド並びに前記メモリ保護回路によって、不揮発性メモリに対するリードライトを実施するメモリ制御回路と、
を備えてメモリ保護を実施するメモリ保護回路において、
前記メモリ保護回路が、
前記プロセッサの前記不揮発性メモリに対するアクセスを許可あるいは不許可にする許可フラグと、
前記プロセッサが前記メモリ保護回路の制御レジスタのデータを読み出して施した演算処理結果データと、前記メモリ保護回路自身が前記制御レジスタに保持するデータに演算を施した出力データと、を比較して前記アクセスが正常かあるいは非正常かを判定して前記許可フラグを設定するフラグ制御回路と、
を備え、
てなることを特徴とするメモリ保護回路。
【請求項２】
前記フラグ制御回路は、
前記プロセッサから前記ライトデータバッファを通じて送付される初期設定のデータあるいは前記プロセッサの演算処理結果のデータを一時記憶する一時バッファと、
前記一時バッファのデータを記憶する制御レジスタと、
前記制御レジスタのデータあるいは前記一時バッファのデータを選択するセレクタと、
前記制御レジスタのデータを演算処理する演算回路と、
前記演算回路の出力データと前記プロセッサからの前記演算処理結果データとを比較して、一致しているとき、前記許可フラグを許可状態にし、前記制御レジスタを前記セレクタを通じて前記一時バッファのデータで更新し、不一致のとき、前記許可フラグの状態を変更せずに前記制御レジスタのデータを前記セレクタを通じて再格納する比較回路と、
を備えることを特徴とする請求項１記載のメモリ保護回路。
【請求項３】
前記演算回路は、
前記制御レジスタのデータに対して、所定値を加算する回路であることを特徴とする請求項２記載のメモリ保護回路。
【請求項４】
前記演算回路は、
前記制御レジスタのデータに対して、シフト演算を施す回路であることを特徴とする請求項２記載のメモリ保護回路。
【請求項５】
前記フラグ制御回路は、
前記プロセッサからライトデータバッファを通じて送付される初期設定のデータあるいは前記プロセッサの演算処理結果のデータを一時記憶する一時バッファと、
前記一時バッファのデータを記憶する制御レジスタと、
前記制御レジスタのデータあるいは前記一時バッファのデータを選択するセレクタと、
前記制御レジスタのデータを演算処理する演算回路と、
前記演算回路の出力データと前記プロセッサからの前記演算処理結果データとを比較して、一致しているとき、前記許可フラグを許可状態に設定し、前記制御レジスタを前記セレクタを通じて前記一時バッファのデータで更新し、不一致のとき、前記許可フラグの状態を変更せずに前記制御レジスタのデータを前記セレクタを通じて再格納する比較回路と、
前記プロセッサによってアクセス回数のデータが設定され，前記不揮発性メモリに対するアクセス毎に減算されて、前記データが「０」に達したとき、前記許可フラグを不許可状態にするカウンタと、
を備えることを特徴とする請求項１記載のメモリ保護回路。
【請求項６】
前記演算処理結果データは、
前記プロセッサが前記制御レジスタから読み出したデータに、前記不揮発性メモリに対する正常なアクセス処理の一部をなす演算処理を施して得られる演算処理結果データであることを特徴とする請求項１記載のメモリ保護回路。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、メモリ保護に関し、特に、不揮発性メモリに格納されたＢＩＯＳなどのシステム情報が非正常なアクセスによって、更新あるいは破壊されることを防ぐメモリ保護回路に関する。
【０００２】
【従来の技術】
メモリ保護には、さまざまな方式がある。例えば、ソフトウェア手段とハードウェア手段とを組み合わせて、メモリへのアクセスを２段構えにする。ソフトウェア見えのレジスタにアクセス許可フラグを設け、ソフトウェア手段で該許可フラグをアクセス許可（イネーブル）にしてからメモリにアクセスし、アクセス終了後にアクセス禁止（ディセーブル）に戻す処理を追加して、非正常なメモリアクセスを排除する。つまり、単にメモリにアクセスが発生しても、許可フラグがイネーブルでない限りそのアクセスが無効となり、予期せぬ非正常なアクセスからシステム情報を保護することができる。
【０００３】
この従来技術の構成を示す図１０を参照して説明する。システム情報が格納される不揮発性メモリ１は、プロセッサ２からプロセッサ制御回路３を通してアクセスされる。プロセッサ制御回路３には、プロセッサ２からのアドレス／コマンドを格納するアドレス／コマンドバッファ４と、ライトデータを格納するライトデータバッファ５と、プロセッサ２へのリードデータを格納するリードデータバッファ６と、アドレスとコマンドをデコードするデコーダ７と、リードデータバッファ６に格納するリードデータを選択するデータセレクタ８と、不揮発性メモリ１に対する非正常アクセスを防止するメモリ保護回路１８と、メモリ保護回路１８に含まれるアクセスを許可／不許可する許可フラグ１１と、不揮発性メモリ１へのアクセスを制御するメモリ制御回路１０と、より構成される。
【０００４】
このプロセッサ制御回路３の動作の流れを図１１を参照して説明する。まず不揮発性メモリ１へのアクセスを許可するために許可フラグ１１にライトを行う（ステップ３０１）。このとき、ライトデータはイネーブルを設定するデータである。続いて、許可フラグ１１をリードしてイネーブルに設定されていることを確認する（ステップ３０２）。イネーブルの確認後、不揮発性メモリ１へのアクセスを開始し（ステップ３０３）、アクセスが終了すると（ステップ３０４のｙｅｓ）、再び許可フラグへライトを行い、許可フラグ１１にディセーブルを設定する（ステップ３０５）。
【０００５】
この一連の動作を図１０及び図１１を援用して更に具体的に説明すると、プロセッサ２は許可フラグ１１へのライトを行う（ステップ３０１）ために、アドレスとコマンドおよびライトデータを出力し、アドレスとコマンドは、アドレス/コマンドバッファ４に、ライトデータはライトデータバッファ５に、それぞれ格納される。デコーダ７によりアドレスとコマンドはデコードされ、許可フラグ１１へのライトで、かつライトデータがイネーブルを示していれば、許可フラグ１１をイネーブルに設定する。続けて、プロセッサ２は、許可フラグ１１へのリードを行う（ステップ３０２）ために、アドレスとコマンドを出力する。アドレスとコマンドは、アドレス／コマンドバッファ４に格納され、デコーダ７によりデコードされる。デコード結果が許可フラグ１１へのリードならば、データセレクタ８は、許可フラグ１１からのデータを選択してリードデータバッファ６に格納し、プロセッサ２に返送する。その後、プロセッサ２は不揮発性メモリ１へのアクセス（ステップ３０３）を開始する。ライトアクセスであれば、アドレスとコマンドをアドレス／コマンドバッファ４に、ライトデータをライトデータバッファ５に格納する。アドレスとコマンドをデコーダ７でデコードした結果、不揮発性メモリ１へのライトであればメモリ制御回路１０にライトアクセスを通知する。ここで許可フラグ１１がイネーブルになっているので、メモリ制御回路１０は、不揮発性メモリ１に対してライトを行い、ライトデータバッファ５からライトデータを出力する。一連のアクセスが終了すると（ステップ３０４のｙｅｓ）、プロセッサ２は許可フラグ１１をディセーブルにするためのライトを行い、同様な手順で許可フラグ１１をディセーブルに設定する（ステップ３０５）。
【０００６】
以上で説明したように許可フラグ１１という非正常なアクセスの抑止手段を設けて、直接システム情報へのアクセスができないようにしている。しかし、許可フラグ１１が、プロセッサからのライト動作で更新されるため、プログラムが原因の、イネーブルとディセーブルの切り替え制御ミスあるいは暴走による許可フラグ１１の非正常な更新が発生すると、この抑止手段が外れ、システム情報へのアクセスが可能となってしまう。
【０００７】
更に、従来技術の特開平３−２７８２５５号公報によれば、メモリに対するアクセスをイネーブルあるいはディセーブルにするデータの保持手段を設けて、該保持手段をイネーブルにした次のサイクルのメモリアクセスをイネーブルにし、該サイクルの終わりで、該データをディセーブルにし、メモリアクセスを不許可する発明が説明されている。この発明では、プログラムの非正常な動作で、該保持手段をイネーブル状態にするデータ書き込みが行われても、正常な書き込みと判定されるのでメモリ保護が十分機能しない。
【０００８】
【発明が解決しようとする課題】
コンピュータシステムにおいて、ＯＳなど有償のシステム情報を不揮発性メモリ等のＡＣ電源を落としても消失しない記憶素子に保持している場合、システム情報の破壊あるいは消失により、システムそのものの立ち上げができなくなることがある。記憶素子そのものあるいはその他ハードウェアの故障により、システム情報が破壊あるいは消失することはあるが、ソフトウェアのプログラムミスによる誤動作または意図的あるいは偶発的な侵入などの非正常なアクセスによってシステム情報を破壊することもある。そのため、メモリに対する非正常なアクセスによるシステム情報の破壊を防ぐ保護機能を設ける。
【０００９】
従来の保護機能は、保護される領域あるいは保護される対象にアクセスする手続き内に入り込まれる非正常な事態を想定していない。しかし、この非正常な事態が、作為あるいは偶発または外乱によって生じたとき、保護対象が破壊されることが発生する。
【００１０】
そこで、アクセス手続きに、ソフトウェア見えのレジスタを設けて、該レジスタをアクセスの許可フラグとして機能させて、許可フラグが許可状態のとき、アクセスできるようにすることの外に、所定のレジスタに設定されているデータを演算回路で処理した演算結果と、該データを正常なソフトウェアのアクセス手段が読み取って演算処理を施した結果と、を比較して一致したとき、許可フラグを許可状態に設定する。つまり、ソフトウェアのアクセス手段が出力する期待値と、許可フラグ側のハードウェア手段が出力する期待値と、が一致することで、メモリのアクセス手続きが正常に作動していることを保証する。
【００１１】
この発明の目的は、不揮発性メモリに格納されているシステム情報を保護するため、該メモリに対する非正常なアクセスを排除するメモリ保護回路にある。
【００１２】
【課題を解決するための手段】
そのため、この発明の、システム情報を格納する不揮発性メモリと、不揮発性メモリにアクセスして、システム情報をリードライトするプロセッサと、前記プロセッサから不揮発性メモリへのアクセスを制御するプロセッサ制御回路と、を備え、前記プロセッサ制御回路が、不揮発性メモリへのアクセスに対してメモリを保護するメモリ保護回路と、プロセッサから送付されるアドレスあるいはコマンドを受け付けるアドレス／コマンドバッファと、プロセッサから送付されるライトデータを受け付けるライトデータバッファと、アドレス／コマンドバッファのデータをデコードするデコーダと、前記デコーダの出力によって、前記メモリ保護回路または不揮発性メモリの出力のいずれか一つを選択するデータセレクタと、前記データセレクタの出力を受け取るリードバッファと、前記デコーダからのアドレス及びコマンド並びに前記メモリ保護回路によって、不揮発性メモリに対するリードライトを実施するメモリ制御回路と、を備えてメモリ保護を実施するメモリ保護回路において、前記メモリ保護回路が、前記プロセッサの前記不揮発性メモリに対するアクセスを許可あるいは不許可にする許可フラグと、前記プロセッサが前記メモリ保護回路の制御レジスタのデータを読み出して施した演算処理結果データと、前記メモリ保護回路自身が前記制御レジスタに保持するデータに演算を施した出力データと、を比較して前記アクセスが正常かあるいは非正常かを判定して前記許可フラグを設定するフラグ制御回路と、を備え、てなる。
【００１３】
更に、前記フラグ制御回路は、前記プロセッサからライトデータバッファを通じて送付される初期設定のデータあるいは前記プロセッサの演算処理結果のデータを一時記憶する一時バッファと、前記一時バッファのデータを記憶する制御レジスタと、前記制御レジスタのデータあるいは前記一時バッファのデータを選択するセレクタと、前記制御レジスタのデータを演算処理する演算回路と、前記演算回路の出力データと前記プロセッサからの前記演算処理結果データとを比較して、一致しているとき、前記許可フラグを許可状態にし、前記制御レジスタを前記セレクタを通じて前記一時バッファのデータで更新し、不一致のとき、前記許可フラグの状態を変更せずに前記制御レジスタのデータを前記セレクタを通じて再格納する比較回路と、を備えることを特徴とする。
【００１４】
更に、前記演算回路は、前記制御レジスタのデータに対して、所定値を加算する回路であることを特徴とする。
【００１５】
更に、前記演算回路は、前記制御レジスタのデータに対して、シフト演算を施す回路であることを特徴とする。
【００１６】
更に、前記フラグ制御回路は、前記プロセッサからライトデータバッファを通じて送付される初期設定のデータあるいは前記プロセッサの演算処理結果のデータを一時記憶する一時バッファと、前記一時バッファのデータを記憶する制御レジスタと、前記制御レジスタのデータあるいは前記一時バッファのデータを選択するセレクタと、前記制御レジスタのデータを演算処理する演算回路と、前記演算回路の出力データと前記プロセッサからの前記演算処理結果データとを比較して、一致しているとき、前記許可フラグを許可状態に設定し、前記制御レジスタを前記セレクタを通じて前記一時バッファのデータで更新し、不一致のとき、前記許可フラグの状態を変更せずに前記制御レジスタのデータを前記セレクタを通じて再格納する比較回路と、プロセッサによってアクセス回数のデータが設定され，前記不揮発性メモリに対するアクセス毎に減算されて、前記データが「０」に達したとき、前記許可フラグを不許可状態にするカウンタと、を備えることを特徴とする。
【００１７】
更に、前記演算処理結果データは、前記プロセッサが前記制御レジスタから読み出したデータに、前記不揮発性メモリに対する正常なアクセス処理の一部をなす演算処理を施して得られる演算処理結果データであることを特徴とする。
【００１８】
【発明の実施の形態】
この発明の実施の形態について図面を参照して説明する。この発明の第1の実施の形態を示す図１を用いて説明する。システム情報が格納される不揮発性メモリ１はプロセッサ２からプロセッサ制御部３を通してアクセスされる。プロセッサ制御部３には、プロセッサ２からのアドレス/コマンドを格納するアドレス/コマンドバッファ４と、ライトデータを格納するライトデータバッファ５と、プロセッサへのリードデータを格納するリードデータバッファ６と、アドレスとコマンドをデコードするデコーダ７と、リードデータを選択するデータセレクタ８と、
不揮発性メモリ１へのアクセスを制御するメモリ制御回路９と、不揮発性メモリ１のメモリ保護回路１０と、を備える。メモリ保護回路１０は、不揮発性メモリ１へのアクセスを許可／禁止する許可フラグ１１と、許可フラグ１１の許可状態及び不許可状態を制御するフラグ制御回路１２と、を有する。
【００１９】
更に、フラグ制御回路１２の構成を示す図２を参照すると、フラグ制御回路１２には、プロセッサ２から設定される初期値や演算処理結果のデータを一時バッファ１２２からセレクタ１２３を介して設定する制御レジスタ１２１と、制御レジスタ１２１へのライトデータを一旦保持する一時バッファ１２２と、制御レジスタ１２１のデータに演算を行う演算回路１２５と、演算回路１２５の出力データと一時バッファ１２２にあるプロッセサ２の演算処理結果データとを比較する比較回路１２４と、制御レジスタ１２１に設定するデータを選択するセレクタ１２３と、を有する。
【００２０】
次に、この第１の実施の形態の動作について、処理の流れを示す図３（ａ）及び図３（ｂ）を参照して説明する。まず、プロセッサ２によるプロセッサ制御回路３の動作を示す図３（ａ）を参照すると、制御レジスタ１２１の初期値のデータを確認するために制御レジスタ１２１をリードする（ステップ２０１）。プロセッサ２は、リードした制御レジスタ１２１の初期値のデータに対して演算処理を実行する（ステップ２０２Ａ）。演算結果データをライトデータとして、一時バッファ１２２を通じて制御レジスタ１２１にライトを行う（ステップ２０３）。更に、正常に処理が行われて、許可フラグ１１が許可状態であることを確認するために、許可フラグ１１をリードする（ステップ２０４）。ここから、不揮発性メモリ１へのアクセスを開始し（ステップ２０５）、アクセスが終了すると（ステップ２０６のｙｅｓ）、許可フラグ１１へライトを行って、許可フラグ１１をディセーブルに設定する（ステップ２０７）。
【００２１】
一方、フラグ制御回路１２の動作を示す図３（ｂ）を参照すると、制御レジスタ１２１のデータをリードする（ステップ２５１）。リードしたデータを演算回路１２５で処理する（２５２Ａ）。この演算回路１２５の出力データと一時バッファ１２２にあるデータとを比較回路１２４で比較する（ステップ２５３）。比較結果を許可フラグ１１に設定する（ステップ２５４）。図３（ｂ）のステップ２５１からステップ２５４は、図３（ａ）のステップ２０３が実行される段階におけるフラグ制御回路１２の動作である。
【００２２】
この第1の実施の形態の全体動作を図１と図２と図３（ａ）と図３（ｂ）に沿って、具体的に説明する。プロセッサ２は、制御レジスタ１２１のリードを行う（ステップ２０１）ためにアドレスとコマンドを出力する。アドレスとコマンドは、プロセッサ制御回路３のアドレス／コマンドバッファ４に格納され、デコーダ７にてデコードされる。デコード結果が制御レジスタ１２１のリードのコマンドであるならば、データセレクタ８は制御レジスタ１２１のデータを選択してリードデータバッファ６に格納し、プロセッサ２に返送する。プロセッサ２は、返送された制御レジスタ１２１のデータの演算処理を行う（ステップ２０２Ａ）。
【００２３】
ステップ２０２Ａにおけるプロセッサ２の演算処理を、ここでは＋１の加算を想定する。制御レジスタ１２１の初期値であるデータが、０Ｘ００００００００ならば、演算結果データは０Ｘ０００００００１となる。プロセッサ２は、この演算結果データを一時バッファ１２２を通じて制御レジスタ１２１にライトする（ステップ２０３）。このライトのアドレスとコマンドは、アドレス／コマンドバッファ４に、ライトデータ（演算結果データ）はライトデータバッファ５に、それぞれ格納される。アドレスとコマンドをデコーダ７でデコードした結果、制御レジスタ１２１へのライトならば、ライトデータバッファ５に格納されたライトデータは、一時バッファ１２２を通じて制御レジスタ１２１に格納される。
【００２４】
一方、制御レジスタ１２１のデータは、演算回路１２５にて演算処理が行われる。ここでは、制御レジスタ１２１の初期値のデータ０Ｘ００００００００であるから、演算回路１２５の出力データは、０Ｘ０００００００１となる。一時バッファ１２２に格納されたプロセッサ２の演算処理結果データと、演算回路１２５の出力データとは、比較回路１２４にて比較される。ここでは、どちらのデータも０Ｘ０００００００１となるので、比較結果は一致となり、許可フラグ１１をイネーブルの許可状態に設定する。更に、セレクタ１２３は、一時バッファ１２２のデータを選択して、制御レジスタ１２１を更新する。ここでは、一時バッファ１２２のデータは、０Ｘ０００００００１なので、制御レジスタ１２１が０Ｘ０００００００１に更新され、次のアクセスに対する初期値のデータとして使用される。
【００２５】
次に、比較回路１２４の結果が不一致の場合、許可フラグ１１の状態は、変更されず不許可状態（ディセーブル）を保ち、セレクタ１２３は制御レジスタ１２１のデータを選択するので制御レジスタ１２１のデータは、そのまま再格納される。その後、プロセッサ２は、制御レジスタ１２１への書き込み処理が正しく行われたことを確認するために許可フラグ１１をリードする（ステップ２０４）。
【００２６】
プロセッサ２からのアドレスとコマンドは、アドレス／コマンドバッファ４に格納され、デコーダ７にてデコードされる。デコード結果が許可フラグ１１のリードならば、データセレクタ８は、許可フラグ１１を選択してリードデータバッファ６に格納し、プロセッサ２に返送される。プロセッサ２は、許可フラグ１１がイネーブルになっていることを確認した後、不揮発性メモリ１へのアクセスを開始する（ステップ２０５）。アドレス／コマンドバッファ４のアドレスとコマンドがライトアクセスならば、ライトデータをライトデータバッファ５に格納し、アドレスとコマンドをデコーダ７にてデコードする。デコード結果が不揮発性メモリ１へのアクセスならば、メモリ制御回路９に通知し、メモリ制御回路９は、許可フラグ１１がイネーブルなので、不揮発性メモリ１にアクセスを行う。リードアクセスならば、データセレクタ８は不揮発性メモリ１からのリードデータを選択してリードデータバッファ６に格納して、プロセッサ２に返送する。ライトアクセスならば、ライトデータバッファ５のライトデータを不揮発性メモリ１に出力して、ライトを実行する。
【００２７】
一連のアクセスが終了すると（ステップ２０６のｙｅｓ）、プロセッサ２は、許可フラグ１１へディセーブルを設定するためにライトを行う（ステップ２０７）。プロセッサ２が、出力したアドレスとコマンドをアドレス／コマンドバッファ４に、ライトデータをライトデータバッファ５に、それぞれ格納し、アドレスとコマンドをデコーダ７でデコードする。デコードの結果、許可フラグ１１へのライトで、許可フラグ１１が不許可状態（ディセーブル）を示していれば、許可フラグ１１をディセーブルに更新する。なお、許可フラグ１１へのライトは、不許可状態（ディセーブル）への設定のみが可能で、許可状態（イネーブル）への設定は、プロセッサ２から直接設定することはできない。
【００２８】
この発明の目的を逸脱しない範囲で、不揮発性メモリ１の内容を破壊しないということであれば、第１の実施の形態をリードアクセスに限り許可フラグ１１の状態が許可状態あるいは不許可状態に関わらず、リードアクセスを許可するように変更することができることは明らかである。
【００２９】
次に、第２の実施の形態を図面を参照して説明する。第１の実施の形態における図１のメモリ保護回路１０のフラグ制御回路１２を、第２の実施の形態の図４のメモリ保護回路１３では、フラグ制御回路１４に変更する。フラグ制御回路１４の構成を示す図５を参照すると、演算処理にシフト回路１２６を採用する点で、第１の実施の形態の演算回路１２５と異なる。シフト演算は、例えば、制御レジスタ１２１のデータを０Ｘ０００００００１として、演算を左１ビットシフトとすると演算結果は０Ｘ００００００１０となる。また、右１ビットシフトでもよい。このシフト演算に対応して、プロセッサ２における演算処理がシフト処理に変更され、図６（ａ）のステップ２０２Ｂの「プロセッサでシフト処理」と、図６（ｂ）のステップ２５２Ｂの「シフト回路で処理」と、にそれぞれ変更される。
その他の構成及び動作は、第１の実施の形態における図１，図２，図３（ａ），図３（ｂ）のそれぞれ対応するものに同じである。
【００３０】
次に、第３の実施の形態を図面を参照して説明する。第１の実施の形態におけるメモリ保護回路１０が第３の実施の形態を示す図７では、メモリ保護回路１５に変更される。メモリ保護回路１０では、図３及び図６のステップ２０７に示すように、不揮発性メモリ１へのアクセスが終了した毎に、許可フラグ１１を不許可状態のディセーブルに設定するため、プロセッサ２が許可フラグ１１に直接ライトを行っていた。メモリ保護回路１５で変更される点は、図３及び図６のステップ２０７に示す許可フラグ１１への直接書き込みを一切無くすために、不揮発性メモリ１へのアクセス回数のカウンタ１２７を設け、規定回数のアクセスが終了すると、自動的に許可フラグ１１を不許可状態のディセーブルに変更する。
【００３１】
上述の変更点を図８を用いて説明する。メモリ保護回路１５のフラグ制御回路１６は、制御レジスタ１２１と、一時バッファ１２２と、セレクタ１２３と、比較回路１２４と、演算回路１２５と、に加え、不揮発性メモリ１へのアクセス回数をカウントするカウンタ１２７を備える。カウンタ１２７は、プロセッサ１から、アクセス回数に相当するデータが初期値として設定され、不揮発性メモリ１に対するアクセス毎に、減算されて、「０」に達したとき、許可フラグ１１をディセーブルの不許可状態にする作用を有する。
【００３２】
第３の実施の形態の動作を動作を図９（ａ）及び図９（ｂ）を参照して説明する。まず、制御レジスタ１２１の初期値のデータを確認するために制御レジスタ１２１をリードする（ステップ２０１）。プロセッサ２は、リードした制御レジスタ１２１のデータに対して演算処理を実行する（ステップ２０２Ａ）。演算結果をライトデータとして、一時バッファ１２２を通じて制御レジスタ１２１にライトを行う（ステップ２０３）。更に、正常に処理が行われたことを確認するために、許可フラグ１１をリードする（ステップ２０４）。続いて不揮発性メモリ１へのアクセス回数をカウンタ１２７にライトする（ステップ２０４Ａ）。ここから不揮発性メモリ１へのアクセスを開始する（ステップ２０５）。不揮発性メモリ１へのアクセスが発生するたびにカウンタをデクリメントし、規定回数に達したかを判定し、カウンタ１２７が「０」に達すると（ステップ２０６のＡ）、許可フラグ１１をディセーブルに更新する（ステップ２０７）。
【００３３】
このカウンタ１２７の動作はハードウェアでなされ、カウンタ１２７の動作を示す図９（ｂ）を参照すると、カウンタ１２７はプロセッサ２からアクセスされる度に、設定されているアクセス回数を減算する（ステップ２６１）。カウンタ１２７が所定のアクセス回数に達して、カウント値「０」に達すると、許可フラグ１１をディセーブルの不許可状態にする（ステップ２６２）。
【００３４】
第３の実施の形態の動作の全体を図７と図８と図９（ａ）と図９（ｂ）に沿って、具体的に説明する。プロセッサ２は、制御レジスタ１２１のリードを行う（ステップ２０１）ためにアドレスとコマンドを出力する。アドレスとコマンドはアドレス／コマンドバッファ４に格納され、デコーダ７にてデコードされる。デコード結果が制御レジスタ１２１のリードの場合、データセレクタ８は制御レジスタ１２１のデータを選択して、リードデータバッファ６に格納し、プロセッサ２に返送する。プロセッサ２は、読み出した制御レジスタ１２１のデータに演算処理を行う（ステップ２０２Ａ）。プロセッサ２は、この演算処理結果データを制御レジスタ１２１に一時バッファ１２２を通じてライトする（ステップ２０３）。このライトのアドレスとコマンドは、アドレス／コマンドバッファ４に、ライトデータである演算処理結果データはライトデータバッファ５に、それぞれ格納される。アドレスとコマンドをデコーダ７でデコードした結果、制御レジスタ１２１へのライトの場合、ライトデータバッファ５に格納されたライトデータは、一時バッファ１２２に格納される。一方、制御レジスタ１２１のデータは、演算回路１２５にて演算が行われる。一時バッファ１２２に格納された演算処理結果データと、演算回路１２５の出力データと、を比較回路１２４にて比較する。比較結果が一致すれば、許可フラグ設定信号で許可フラグ１１をイネーブルの許可状態に設定する。
【００３５】
更に、セレクタ１２３は、一時バッファ１２２のデータを選択し、制御レジスタ１２１を更新する。もし、比較回路１２４の結果が不一致の場合、許可フラグ１１の状態は変更されず、不許可状態のディセーブルのままとなり、セレクタ１２３は、制御レジスタ１２１のデータを選択するので、制御レジスタ１２１へデータが書き戻されて、そのままのデータが再格納される。その後、プロセッサ２は、制御レジスタ１２１への書き込み処理が正常に行われたことを確認するために許可フラグ１１をリードする（ステップ２０４）。プロセッサ２からのアドレスとコマンドは、アドレス／コマンドバッファ４に格納され、デコーダ７にてデコードされる。デコード結果が許可フラグ１１のリードならば、データセレクタ１２３は、許可フラグ１１の状態の値を選択してリードデータバッファ６に格納し、プロセッサ２に返送する。
【００３６】
続いて、プロセッサ２は、カウンタ１２７に不揮発性メモリ１へのアクセス回数をライトする（ステップ２０４Ａ）。アドレスとコマンドはアドレス／コマンドバッファ４に、ライトデータはライトデータバッファ５に、それぞれ格納され、アドレスとコマンドは、デコーダ７にてデコードされる。デコード結果がカウンタ１２７へのライトの場合、ライトデータバッファ５のライトデータが初期値のデータとしてカウンタ１２７に設定される。該データは不揮発性メモリ１に対するアクセス回数である。ここから、プロセッサ２は、不揮発性メモリ１へのアクセスを開始する（ステップ２０５）。アドレスとコマンドは、アドレス／ コマンドバッファ４に、ライトアクセスの場合は、ライトデータをライトデータバッファ５に、それぞれ格納し、アドレスとコマンドをデコーダ７にてデコードする。デコード結果が不揮発性メモリ１へのアクセスの場合、メモリ制御回路９に通知し、メモリ制御回路９は許可フラグ１１が許可状態のイネーブルなので、不揮発性メモリ１にアクセスを行う。リードアクセスの場合、データセレクタ８は、不揮発性メモリ１からのリードデータを選択してリードデータバッファ６に格納して、プロセッサ２に返送する。ライトアクセスの場合、ライトデータバッファ５のライトデータを不揮発性メモリ１に出力してライトを実行する。
【００３７】
カウンタ１２７の動作は、図９（ｂ）を参照すると、不揮発性メモリ１へのアクセスが発生する度に、カウンタ１２７は、１ずつディクリメントを行い（ステップ２６１）、規定回数に達するとカウント値が「０」となり、許可フラグ１１をディセーブルに更新する（ステップ２６２）。プロセッサ２は、許可フラグ１１を許可状態のイネーブルにも、不許可状態のディセーブルにも直接設定することはできない。
【００３８】
【発明の効果】
ソフトウェアの非正常なアクセスからシステム情報を保護するために、単にソフトウェア見えのレジスタへのライトによりアクセスを許可／不許可するのではなく、メモリ保護回路及びプロセッサの双方で個別に演算処理した結果によって、許可状態にするか、あるいは不許可状態にするか、を判定する処理を挿入することにより、正常なアクセスであることを保証する。
【００３９】
更に、不揮発性メモリに対する予定のアクセス回数を予めカウンタに設定し、アクセスの度に制御レジスタに対して、データを正常に演算処理された結果データに基づいて、アクセスを実行し、要求されるアクセス回数を書き込む制御を受けるので、非正常なアクセスを取り除くことができる。
【００４０】
更に、プログラム処理だけで非正常なアクセスを防止するには、チェックを多重に行う必要があり、その分、プログラムが複雑になってしまうが、この発明では、基本的にリード１回とライト１回でチェックされるので、プログラムを簡単にできる。
【図面の簡単な説明】
【図１】この発明の第１の実施の形態２を示す図である。
【図２】図１のフラグ制御回路の細部を示す図である。
【図３】第１の実施の形態の動作を示す図で、分図（ａ）はプロセッサの動作を、分図（ｂ）はフラグ制御回路の動作を、それぞれ示す図である。
【図４】この発明の第２の実施の形態２を示す図である。
【図５】図４のフラグ制御回路の細部を示す図である。
【図６】第２の実施の形態の動作を示す図で、分図（ａ）はプロセッサの動作を、分図（ｂ）はフラグ制御回路の動作を、それぞれ示す図である。
【図７】この発明の第３の実施の形態２を示す図である。
【図８】図７のフラグ制御回路の細部を示す図である。
【図９】第３の実施の形態の動作を示す図で、分図（ａ）はプロセッサの動作を、分図（ｂ）はフラグ制御回路の動作を、それぞれ示す図である。
【図１０】従来技術のメモリ保護回路の構成を示す図である。
【図１１】図１０の動作を示す図である。
【符号の説明】
１    不揮発性メモリ
２    プロセッサ
３    プロセッサ制御回路
４    アドレス／コマンドバッファ
５    ライトデータバッファ
６    リードデータバッファ
７    デコーダ
８    データセレクタ
９    メモリ制御回路
１０    メモリ保護回路
１１    許可フラグ
１２    フラグ制御回路
１３    メモリ保護回路
１４    フラグ制御回路
１５    メモリ保護回路
１６    フラグ制御回路
１２１    制御レジスタ
１２２    一時バッファ
１２３    セレクタ
１２４    比較回路
１２５    演算回路
１２６    シフト回路
１２７    カウンタ
【図１】
0003918089.tif 000002
【図２】
0003918089.tif 000003
【図３】
0003918089.tif 000004
【図４】
0003918089.tif 000005
【図５】
0003918089.tif 000006
【図６】
0003918089.tif 000007
【図７】
0003918089.tif 000008
【図８】
0003918089.tif 000009
【図９】
0003918089.tif 000010
【図１０】
0003918089.tif 000011
【図１１】
0003918089.tif 000012