米国特許情報 | 欧州特許情報 | 国際公開(PCT)情報 | Google の米国特許検索
 
     特許分類
A 農業
B 衣類
C 家具
D 医学
E スポ−ツ;娯楽
F 加工処理操作
G 机上付属具
H 装飾
I 車両
J 包装;運搬
L 化学;冶金
M 繊維;紙;印刷
N 固定構造物
O 機械工学
P 武器
Q 照明
R 測定; 光学
S 写真;映画
T 計算機;電気通信
U 核技術
V 電気素子
W 発電
X 楽器;音響


  ホーム -> 計算機;電気通信 -> エヌイーシーマイクロシステム株式会社

発明の名称 ライトプロテクト方法
発行国 日本国特許庁(JP)
公報種別 公開特許公報(A)
公開番号 特開2003−15958(P2003−15958A)
公開日 平成15年1月17日(2003.1.17)
出願番号 特願2001−199080(P2001−199080)
出願日 平成13年6月29日(2001.6.29)
代理人 【識別番号】100097113
【弁理士】
【氏名又は名称】堀 城之
【テーマコード(参考)】
5B017
5B018
5B062
【Fターム(参考)】
5B017 AA00 AA02 BA04 BB09 CA11 
5B018 GA01 HA26 QA15
5B062 AA07 AA08 DD10 JJ06 JJ10
発明者 上野 智生
要約 課題
所定のレジスタへの誤書き込みを防止する。

解決手段
CPU6は、レジスタ1に対応するアドレスをアドレスデコーダ9に送出し、所定のシーケンスに従ってデータをデータバス8に送出し、ライト信号(wr)のパルスを出力することにより、書き込み命令を実行する。アドレスデコーダ9からのセレクト信号(sel_reg1)は1となり、レジスタ1に書き込むべき所定のデータ(db[15:0])はライトプロテクト回路10を介してレジスタ1へ供給され、書き込み命令が所定のシーケンスに従って実行されたとき、ライトプロテクト回路10はレジスタ1にライト信号のパルス(wr_preg)を供給し、データ(db[15:0])のレジスタ1への書き込みを有効とする。
特許請求の範囲
【請求項1】 マイクロコンピュータを構成する所定のレジスタへの誤書き込みを防止するライトプロテクト方法であって、前記所定のレジスタへ所定のデータを書き込むためのライト動作が、所定のシーケンスで行われたか否かを判定する判定ステップと、前記判定ステップにおいて、前記レジスタへ前記データを書き込むためのライト動作が、前記シーケンスで行われたと判定された場合にのみ、前記レジスタへの前記データの書き込みが行われるように制御する制御ステップとを備えることを特徴とするライトプロテクト方法。
【請求項2】 マイクロコンピュータを構成する所定のレジスタへの誤書き込みを防止するライトプロテクト装置であって、前記所定のレジスタへ所定のデータを書き込むためのライト動作が、所定のシーケンスで行われたか否かを判定する判定手段と、前記判定手段によって、前記レジスタへ前記データを書き込むためのライト動作が、前記シーケンスで行われたと判定された場合にのみ、前記レジスタへの前記データの書き込みが行われるように制御する制御手段とを備えることを特徴とするライトプロテクト装置。
【請求項3】 前記判定手段は、前記レジスタに対して前記データを書き込むための命令を含む複数の命令が、前記シーケンスに従って実行されたか否かを判定することを特徴とする請求項2に記載のライトプロテクト装置。
【請求項4】 前記判定手段は、前記データの書き込みの対象となる前記レジスタに対して前記データを書き込むための命令と、前記レジスタに対して前記データとは異なる他の所定の値を書き込むための命令と、前記レジスタに対して前記データを書き込むための命令とがこの順番で実行されたか否かを判定することを特徴とする請求項3に記載のライトプロテクト装置。
【請求項5】 前記判定手段は、前記データの書き込みの対象となる前記レジスタとは別の他の所定のコマンドレジスタに対して所定の値を書き込むための命令と、前記データの書き込みの対象となる前記レジスタに対して前記データを書き込むための命令と、前記レジスタに対して前記データとは異なる他の所定の値を書き込むための命令と、前記レジスタに対して前記データを書き込むための命令とがこの順番で実行されたか否かを判定することを特徴とする請求項3に記載のライトプロテクト装置。
【請求項6】 前記判定手段は、各命令が実行される毎に、各命令が前記シーケンスに従って実行されたか否かを判定し、各命令の実行が前記シーケンスに従って行われなかったことが判明した時点で、前記シーケンスの最初から各命令が前記シーケンスに従って実行されたか否かの判定を行うことを特徴とする請求項3,4または5に記載のライトプロテクト装置。
【請求項7】 前記他の所定の値は、前記データの反転値であることを特徴とする請求項4,5または6に記載のライトプロテクト装置。
【請求項8】 マイクロコンピュータを構成する所定のレジスタへの誤書き込みを防止するライトプロテクト装置を制御するライトプロテクトプログラムであって、前記所定のレジスタへ所定のデータを書き込むためのライト動作が、所定のシーケンスで行われたか否かを判定する判定ステップと、前記判定ステップにおいて、前記レジスタへ前記データを書き込むためのライト動作が、前記シーケンスで行われたと判定された場合にのみ、前記レジスタへの前記データの書き込みが行われるように制御する制御ステップとを前記ライトプロテクト装置に実行させることを特徴とするライトプロテクトプログラム。
発明の詳細な説明
【0001】
【発明の属する技術分野】本発明は、ライトプロテクト方法に関し、特に、マイクロコンピュータの制御レジスタ等への誤書き込みを防止するライトプロテクト方法に関する。
【0002】
【従来の技術】近年、マイクロコンピュータがあらゆる分野の、あらゆるアプリケーションで採用され始めてから、システムの動作に重要な影響を及ぼす制御レジスタに対して、誤書き込みを防止するための対策を施すことが要請されている。例えば、フラッシュメモリのセルフ書き換えに関する制御レジスタなどに誤書き込みが発生すると、フラッシュメモリ上のプログラムが不正に書き換えられ、システムリセットを行ってもシステムが立ち上がらないといった重大な事態が発生し得るため、制御レジスタをプロテクトの対象とすることが要請されている。
【0003】この要請に応えるために、例えば、特願平07−040220においては、図28に示すように、プロテクト対象レジスタ1に対して、データの書き込みを許可するか、又は禁止するかを判定するための情報を保持するプロテクト制御レジスタをライトプロテクト回路13に設けるようにし、書き込み動作が発生したときに、書き込みの対象となっている制御レジスタを特定し、上記プロテクト制御レジスタの情報に応じて、書き込み信号を制御することにより、プロテクト対象レジスタ1へのデータの書き込みを制限することが提案されている。
【0004】
【発明が解決しようとする課題】しかしながら、書き込みデータが正常であるかどうかを確認するという機能を有していない。このため、データバス上で不慮のデータ化けが発生した場合の書き込みを無効化できず、誤書き込みが行われてしまうという欠点がある。
【0005】本発明はこのような状況に鑑みてなされたものであり、所定のレジスタへの不正な書き込みを無効化することができるようにするものである。
【0006】
【課題を解決するための手段】請求項1に記載のライトプロテクト方法は、マイクロコンピュータを構成する所定のレジスタへの誤書き込みを防止するライトプロテクト方法であって、所定のレジスタへ所定のデータを書き込むためのライト動作が、所定のシーケンスで行われたか否かを判定する判定ステップと、判定ステップにおいて、レジスタへデータを書き込むためのライト動作が、シーケンスで行われたと判定された場合にのみ、レジスタへのデータの書き込みが行われるように制御する制御ステップとを備えることを特徴とする。請求項2に記載のライトプロテクト装置は、マイクロコンピュータを構成する所定のレジスタへの誤書き込みを防止するライトプロテクト装置であって、所定のレジスタへ所定のデータを書き込むためのライト動作が、所定のシーケンスで行われたか否かを判定する判定手段と、判定手段によって、レジスタへデータを書き込むためのライト動作が、シーケンスで行われたと判定された場合にのみ、レジスタへのデータの書き込みが行われるように制御する制御手段とを備えることを特徴とする。また、判定手段は、レジスタに対してデータを書き込むための命令を含む複数の命令が、シーケンスに従って実行されたか否かを判定するようにすることができる。また、判定手段は、データの書き込みの対象となるレジスタに対してデータを書き込むための命令と、レジスタに対してデータとは異なる他の所定の値を書き込むための命令と、レジスタに対してデータを書き込むための命令とがこの順番で実行されたか否かを判定するようにすることができる。また、判定手段は、データの書き込みの対象となるレジスタとは別の他の所定のコマンドレジスタに対して所定の値を書き込むための命令と、データの書き込みの対象となるレジスタに対してデータを書き込むための命令と、レジスタに対してデータとは異なる他の所定の値を書き込むための命令と、レジスタに対してデータを書き込むための命令とがこの順番で実行されたか否かを判定するようにすることができる。また、判定手段は、各命令が実行される毎に、各命令がシーケンスに従って実行されたか否かを判定し、各命令の実行がシーケンスに従って行われなかったことが判明した時点で、シーケンスの最初から各命令がシーケンスに従って実行されたか否かの判定を行うようにすることができる。また、他の所定の値は、データの反転値とすることができる。請求項8に記載のライトプロテクトプログラムは、マイクロコンピュータを構成する所定のレジスタへの誤書き込みを防止するライトプロテクト装置を制御するライトプロテクトプログラムであって、所定のレジスタへ所定のデータを書き込むためのライト動作が、所定のシーケンスで行われたか否かを判定する判定ステップと、判定ステップにおいて、レジスタへデータを書き込むためのライト動作が、シーケンスで行われたと判定された場合にのみ、レジスタへのデータの書き込みが行われるように制御する制御ステップとをライトプロテクト装置に実行させることを特徴とする。本発明に係るライトプロテクト方法においては、所定のレジスタへ所定のデータを書き込むためのライト動作が、所定のシーケンスで行われたか否かを判定し、上記レジスタへデータを書き込むためのライト動作が、上記シーケンスで行われたと判定された場合にのみ、上記レジスタへのデータの書き込みが行われるように制御する。
【0007】
【発明の実施の形態】本発明は、システムに重大な影響を与える制御レジスタに対して、誤書き込みの防止を施すものであり、特定のシーケンスによるライト動作が行われた場合にのみ、書き込みを許可し、それ以外のライト動作が行われた場合には、書き込みを無効化するライトプロテクト回路を設けて、書き込みデータ値が正しいかどうかの確認、及びライト信号の制御を行い、制御レジスタへの書き込みを実施するものである。
【0008】以下、本発明の概要について説明する。図1は、本発明を応用したライトプロテクト回路の一実施の形態の構成例を示すブロック図である。本実施の形態では、レジスタ1をシステムに重大な影響を与える制御レジスタと仮定しており、レジスタ1に対して特定のシーケンスによるライト動作が行われた場合にのみ、書き込みを許可するライトプロテクト回路10を設けている。
【0009】図6は、特定のシーケンスによるライト動作の手順を示すフローチャートである。ステップ1(901)乃至ステップ3(903)に示される3つのステップを踏むライト動作が行われた場合にのみ、書き込みが実施される。この3つのステップを踏まず、ステップ1(901)とステップ2(902)の間、又はステップ2(902)とステップ3(903)の間に他のライト動作が行われた場合には、書き込みが無効となる。
【0010】従って、CPU6の暴走や、データバス8上のデータ化けなどのシステム異常により、レジスタ1への書き込み動作が発生しても、特定のシーケンスに当てはまらない限り、書き込みは無効化される。これにより、誤書き込みを防止することができる。
【0011】次に、図面を参照して、本発明を応用したライトプロテクトシステムの一実施の形態の構成及び動作について詳細に説明する。図1は、本発明を応用したライトプロテクトシステムの一実施の形態の構成例を示すブロック図である。本実施の形態は、レジスタ1乃至レジスタnと、各部を制御するCPU(central processing unit)6と、プログラムが格納されるプログラム格納メモリ7と、データバス8と、アドレスデコーダ9と、ライトプロテクト回路10から構成されている。
【0012】CPU6は、プログラム格納メモリ7に格納された所定の制御プログラムをデータバス8を介して読み込んで実行するようになっている。また、レジスタ1乃至n(nはレジスタの総数に対応する自然数)にデータを書き込むためのライト信号をライトプロテクト回路10、及びレジスタ2乃至nに供給し、レジスタ1乃至nにデータを読み込むためのリード信号を供給し、データをライト又はリードするレジスタを指定するためのアドレス信号をアドレスデコーダ9に供給するようになっている。また、各種データをデータバス8に供給するようになっている。プログラム格納メモリ7は、CPU6を制御する所定の制御プログラムを格納し、各種データをデータバス8に供給するようになっている。アドレスデコーダ9は、CPU6よりアドレス信号を入力し、CPU6より供給されたアドレス信号に対応する信号sel_reg1乃至nのいずれかの値を1にするようになっている。信号sel_reg1はレジスタ1に供給され、sel_regnは、レジスタnに供給されるようになっている。ライトプロテクト回路10には、信号sel_reg1が入力され、レジスタ1に対してライト信号wr_pregとデータdb[15:0]を供給するようになっている。レジスタ2乃至nには、データバス8からデータが供給されるようになっている。また、各レジスタ1乃至nのデータは、データバス8を介して読み出されるようになっている。
【0013】本発明は、バスのサイズや構成によらず適用可能であるが、本実施の形態では、説明しやすいように、16ビット幅のデータバス8とし、アドレスバスはデータバス8とは共用せずにセパレートバス構成としている。また、レジスタ1をプロテクトの制御対象として扱っている。
【0014】図1に示すように、本実施の形態では、ライトプロテクトの対象外のレジスタ2乃至nには、書き込み用データdata[15:0]がデータバス8から入力され、ライト信号wrがCPU6から入力されるが、ライトプロテクトの対象となっているレジスタ1には、書き込み用データdb[15:0]及びライト信号wr_pregが、ライトプロテクト回路10から入力される。
【0015】レジスタ1乃至nのいずれかへの書き込み命令が実行されると、CPU6からのアドレス信号(address)がアドレスデコーダ9に入力され、アドレス信号の値(アドレス値)に該当するレジスタのセレクト信号が選択状態(=1)になる。例えば、レジスタ1にデータを書き込む場合、セレクト信号sel_reg1の値が1となる。そして、CPU6からの書き込みデータがデータバス8に出力され、ライト信号wrのパルスが出力されることにより、1回のライト動作が完了する。
【0016】以上のようにして、ライトプロテクト対象でないレジスタ2乃至nには、所定の値が書き込まれるが、ライトプロテクト対象であるレジスタ1には、ライトプロテクト回路10において制御されたライト信号wr_pregが出力され、レジスタ1に供給されない限り、レジスタ1には値が書き込まれない。
【0017】このライトプロテクト回路10は、図6に示す特定のシーケンスでのみ書き込みを許可する制御を行う。図6は、特定シーケンスを示すフローチャートである。つまり、ステップ1(901):対象レジスタへ設定したいデータを書き込むライト命令を実行、ステップ2(902):対象レジスタへ設定したいデータの反転値を書き込むライト命令を実行、ステップ3(903):対象レジスタへ設定したいデータを書き込むライト命令を実行、という3つのステップを踏んだ場合にのみ、書き込みが有効となり、対象レジスタへ設定したいデータが書き込まれる。
【0018】ここで、ステップ1(901)及びステップ2(902)における書き込み動作は、特定シーケンスを構成するステップに過ぎず、これらのステップ1(901)、ステップ2(902)の時点では、書き込みは無効で、ライト信号wr_pregのパルスが出力されない。ステップ1(901)乃至ステップ3(903)までの書き込みをこの順序で実施した場合にのみ、ステップ3(903)時点の書き込みが有効となり、ライト信号wr_pregのパルスが出力される。
【0019】なお、これらのステップ1(901)乃至3(903)を踏まず、ステップ1(901)とステップ2(902)の間、又は、ステップ2(902)とステップ3(903)の間に、他の書き込み動作が行われた場合には、特定シーケンスでの書き込みは無効となり、シーケンスエラーが検出される。再度書き込みを試みる場合は、再び最初のステップ1(901)から順に書き込み動作を実施しなければならない。
【0020】図2は、図1のライトプロテクト回路10の構成例を示すブロック図である。同図に示すように、ライトプロテクト回路10は、ライトデータ設定バッファ20と、比較回路30と、ステップカウンタ50と、シーケンスエラー検出60と、プロテクトライト信号生成70と、AND素子80から構成されている。
【0021】ライトデータ設定バッファ20は、プロテクト対象レジスタ1に設定するデータ値を一時的に保持する16ビットのバッファであり、ステップ1(901)時点での書き込みデータ値を取り込んで保持する。
【0022】比較回路30は、データ比較を行い、一致信号を生成するブロックであり、比較器302及び比較器303を有している。比較器302は、ライトデータ設定バッファ20に取り込まれたデータ値と、データバス8からのデータ値を比較して、一致信号db_eqを出力するようになっている。比較器303は、ライトデータ設定バッファ20に取り込まれたデータ値の反転値と、データバス8からのデータ値を比較して、一致信号dbz_eqを出力するようになっている。
【0023】ステップカウンタ50は、現在、特定シーケンスのどのステップまで進んでいるかを示すブロックであり、2ビットのカウント信号stpcnt[1:0]でどのステップまで進んでいるかが示される。このカウント信号の値の意味合いについてであるが、stpcnt[1:0]=00b(00bのbは、00が2進数で表された値であることを示している)の場合は、特定シーケンスが現在行われていないことを示し、stpcnt[1:0]=01bの場合は、ステップ1(901)まで終了したことを示し、stpcnt[1:0]=10bの場合は、ステップ2(902)まで終了したことを示す。このカウント信号の状態遷移を図3に示す。
【0024】図3は、カウント信号stpcnt[1:0]の値に対応する3つの状態を示している。各状態は、CPU6が書き込み命令を実行したタイミング、具体的には、CPU6から出力されたライト信号wrパルスの立ち下がりエッジのタイミングで遷移するものとしており、カウント信号が00bの値の状態(801)で、ステップ1(901)の書き込みを行えば、カウント信号の値は01b(802)に遷移し、ステップ2(902)の書き込みを行えば、カウント信号の値は10b(803)に遷移する。それ以外の書き込みが発生すると、カウント信号の値は00b(801)に戻る。カウント信号の値が10b(803)の状態で、任意の書き込みが発生すると、カウント信号の値は00b(801)に戻る。
【0025】図4は、図3に示した状態遷移図に従って動作し、カウント信号stpcnt[1:0]を出力する回路の例を示している。AND素子501には、信号sel_reg1の値、カウント信号の1ビット目の値(stpcnt[0])の反転値、カウント信号の2ビット目の値(stpcnt[1])の反転値がそれぞれ入力され、各値の論理積を演算し、演算結果を出力するようになっている。AND素子502には、信号sel_reg1の値、信号dbz_eqの値、カウント信号の1ビット目の値(stpcnt[0])、カウント信号の2ビット目の値(stpcnt[1])の反転値がそれぞれ入力され、各値の論理積を演算し、演算結果を出力するようになっている。
【0026】Dフリップフロップ回路503には、AND素子501からの出力値と、ライト信号wrの反転値が入力され、ライト信号の立ち下がり毎に、AND素子501からの出力値を入力し、カウント信号stpcnt[0]として出力するようになっている。また、Dフリップフロップ回路504には、AND素子502からの出力値と、ライト信号wrの反転値が入力され、ライト信号の立ち下がり毎に、AND素子502からの出力値を入力し、カウント信号stpcnt[1]として出力するようになっている。
【0027】シーケンスエラー検出60は、特定シーケンスが正常に行われたかどうかを検出するブロックであり、特定シーケンスが正常に行われなかった場合にエラー信号sq_errorを出力する。なお、図1には図示していないが、一般的にこのエラー信号sq_errorは、フラグとして、或いは、割り込み要求としてCPU6へ伝えられる。このエラー信号sq_errorが発生するのは、ステップ1(901)とステップ2(902)の間、又は、ステップ2(902)とステップ3(903)の間に、他の書き込み動作が行われた場合であり、これには4つのケースがある。
【0028】1つ目は、ステップ1(901)の後の最初の書き込み動作が、対象とするレジスタ以外に対する場合、2つ目は、ステップ1(901)の後の最初の書き込み動作が、対象とするレジスタであるが、設定したい値の反転値(ステップ1(901)での書き込み値の反転値)以外の値を書き込む動作が行われた場合、3つ目は、ステップ2(902)の後の最初の書き込み動作が、対象とするレジスタ以外に対する場合、そして4つ目に、ステップ2(902)の後の最初の書き込み動作が、対象とするレジスタであるが、設定したい値(ステップ1(901)での書き込み値)以外の値を書き込む動作が行われた場合である。これら4つのケースが発生した場合は、特定シーケンスに違反したものとして、レジスタ1への書き込みが行われないとともに、これをシーケンスエラーとして検出する。
【0029】図5は、シーケンスエラー検出60の構成例を示すブロック図である。同図に示すように、シーケンスエラー検出60は、AND素子601乃至604と、OR素子605と、Dフリップフロップ回路606とから構成されている。AND素子601には、セレクト信号sel_reg1の反転値、カウント信号stpcnt[0]の値、stpcnt[1]の反転値がそれぞれ入力される。AND素子602には、一致信号dbz_eqの反転値、stpcnt[0]、stpcnt[1]の反転値がそれぞれ入力される。AND素子603には、セレクト信号sel_reg1の反転値、カウント信号stpcnt[0]の反転値、stpcnt[1]の値がそれぞれ入力される。AND素子604には、一致信号db_eqの反転値、stpcnt[0]の反転値、stpcnt[1]の値がそれぞれ入力される。そして、各AND素子601乃至604は、入力信号の論理積を演算し、演算結果をOR素子605に供給するようになっている。OR素子605には、AND素子601乃至604からの出力信号が入力され、入力信号の論理和を演算し、演算結果を出力信号pr_sq_errorとして出力するようになっている。Dフリップフロップ回路606は、入力されたライト信号wrの立ち上がりのタイミングで、OR素子605からの出力信号pr_sq_errorを入力し、エラー信号sq_errorとして出力するようになっている。AND素子601にて1つ目のケース、AND素子602にて2つ目のケース、AND素子603にて3つ目のケース、AND素子604にて4つ目のケースをそれぞれ検出し、これらの検出信号をwr信号パルスの立ち上がりでDフリップフロップ回路606に取り込み、エラー信号sq_errorを生成し、出力している。
【0030】プロテクトライト信号生成70は、プロテクト対象レジスタ1へのライト信号を生成するブロックである。プロテクトライト信号生成70は、AND素子701と、AND素子702とによって構成されている。AND素子701には、ライト信号wr、カウント信号stpcnt[1]、カウント信号stpcnt[0]の反転値、一致信号db_eqが入力され、AND素子702には、AND素子701からの出力値と、信号sel_reg1が入力される。
【0031】AND素子701は、ステップ3(903)において設定したい値を書き込む動作であることを検出し、AND素子702は、さらに、その書き込む動作がプロテクト対象レジスタ(この例の場合、レジスタ1)であることを検出し、書き込み信号(wr_preg)を生成し、出力している。
【0032】AND素子80は、ライトデータ設定バッファ20へデータ値を取り込むための信号wr_dbを生成するためのものであり、カウント信号stpcnt[0]の反転値、stpcnt[1]の反転値、セレクト信号sel_reg1の値、及びライト信号wrを入力し、ステップ1(901)時点でのライト信号パルス(wr)を検出し、これをwr_dbとしている。具体的には、セレクト信号sel_reg1=1、ステップカウンタ50の値であるstpcnt[1:0]=00(stpcnt[0]=0、stpcnt[1]=0)の状態で、プロテクト対象レジスタ1へのライト信号(wr)が来たこと(ライト信号wrの立ち上がり)を検出する。
【0033】以下、本実施の形態の動作について説明する。まず、図6に示した特定シーケンスにより、レジスタ1へデータ(12ABh(12ABhのhは、12ABが16進数で表された値であることを示している))を書き込む場合の動作について、図7のタイミング図を用いて説明する。
【0034】ステップカウンタ50の値がstpcnt[1:0]=00bの状態から、ステップ1(901)としてレジスタ1へのデータ12ABhの書き込み命令を実行すると、AND素子80の入力信号の値(ライト信号wrの値、信号sel_reg1の値、カウント信号stpcnt[0]の反転値、stpcnt[1]の反転値)が全て1となり、AND素子80において生成されたwr_db信号パルスが出力され、このパルスにより、ライトデータ設定バッファ20に書き込みデータ(data[15:0]=12ABh)が取り込まれ、ライトデータ設定バッファ20からの出力データdb[15:0]の値が12ABhとなる。
【0035】また、この動作と平行して、図4のAND素子501の入力信号の値(信号sel_reg1の値、カウント信号stpcnt[0]の反転値、stpcnt[1]の反転値)が全て1となり、Dフリップフロップ回路503からの出力信号(stpcnt[0])の値が1となる。これにより、ステップカウンタ50の値が1つ進み、stpcnt[1:0]=01bとなる。しかし、この書き込み動作では、プロテクトライト信号生成70でのパルス生成条件が揃わないため、レジスタ1のライト信号wr_pregのパルスが発生せず、レジスタ1の値は更新されずに元の値のままとなる。
【0036】次に、ステップ2(902)として、データ12ABhの反転値であるデータED54hを、レジスタ1へ書き込むライト命令を実行すると、ライトデータ設定バッファの値(db[15:0]の値)の反転値(いまの場合、ED54h)と、data[15:0]の値(いまの場合、ED54h)が一致するので、比較回路30の比較器303からの一致信号dbz_eqの値が1になる。
【0037】よって、ステップ1(901)直後の書き込みで、かつ、dbz_eqとsel_reg1の値が1であるので、ステップカウンタ50の値がさらに1つ進み、stpcnt[1:0]=10bとなる。しかしこの書き込み動作では、プロテクトライト信号生成70でのパルス生成条件が揃わないためレジスタ1のライト信号wr_pregのパルスが発生せず、レジスタ1の値は更新されず元の値のままである。
【0038】次に、ステップ3として、データ12ABhの書き込み命令を実行すると、ライトデータ設定バッファの値(db[15:0]の値)と、data[15:0]の値が一致するので、比較回路30の比較器302からの一致信号db_eqが1になる。このとき、プロテクトライト信号生成70では、AND素子701にてステップカウンタ50の値がstpcnt[1:0]=10b、一致信号db_eq=1の状態でライト信号wrが来たことを検出し、さらに、AND素子702にて信号sel_reg1=1を検出し、wr_preg信号のパルスが生成され、出力される。
【0039】このwr_pregのパルスにより、ライトデータ設定バッファ20の値であるdb[15:0](いまの場合、12ABh)がレジスタ1に書き込まれる。また、本ステップ3(903)の書き込み動作により、ステップカウンタ50の値は、stpcnt[1:0]=00bに戻る。
【0040】一方、特定シーケンスにてエラーが発生し、書き込みが無効となる場合の動作について、図8、図9、図10、及び図11のタイミング図を用いて説明する。シーケンスエラーの発生には、上述したように4つのケースがあるが、1つ目のケースが図8、2つ目のケースが図9、3つ目のケースが図10、4つ目のケースが図11にそれぞれ対応している。
【0041】図8は、1つ目のケースである、ステップ1(901)後の書き込みが、プロテクト対象レジスタ1以外に対するものであった場合のタイミング図であり、ステップ1(901)後、レジスタ1以外のレジスタへの書き込みを行っているため、信号sel_reg1の値が1から0に変化している。AND素子601には、信号sel_reg1の反転値と、stpcnt[0]の値と、stpcnt[1]の反転値とが入力され、これらの論理積を演算し、演算結果がOR素子605に供給されるようになっている。従って、この状態(ステップ1(901)後の書き込みが、プロテクト対象レジスタ1以外に対するものである状態)を図5に示したシーケンスエラー検出60のAND素子601で検出し、ck端子から入力されるwr信号パルスの立ち上がりエッジで、Dフリップフロップ回路606にD端子から取り込み、Q端子から出力されるエラー信号sq_errorが1となる。
【0042】また、図3に示した状態遷移図の状態802(stpcnt[1:0]=01)から、信号sel_reg1=0での書き込みを行っているため、ステップカウンタ50の値がstpcnt[1:0]=01bからstpcnt[1:0]=00bに戻る。
【0043】図9は、2つ目のケースである、ステップ1(901)後の書き込みで、設定したい値の反転値以外の値をライトした場合のタイミング図である。ステップ1(901)後、データ12ABhの反転値であるED54hではなく、データ1111hを書き込んでいるため、dbz_eq信号が0のままとなっている。この状態(ステップ1(901)後の書き込みで、設定したい値の反転値以外の値をライトした状態)を、図5に示したシーケンスエラー検出60のAND素子602で検出し、エラー信号sq_errorの値が1となる。即ち、AND素子602の入力信号(dbz_eqの反転値、カウント信号stpcnt[0]の値、stpcnt[1]の反転値)が全て1となり、ライト信号wrの立ち上がりのタイミングでエラー信号sq_error=1が出力される。
【0044】また、図3に示す状態遷移図の状態802から、一致信号dbz_eq=0での書き込みを行っているため、ステップカウンタ50の値がstpcnt[1:0]=01bからstpcnt[1:0]=00bに戻る。
【0045】図10は、3つ目のケースである、ステップ2(902)後の書き込みが、プロテクト対象レジスタ1以外に対するものであった場合のタイミング図である。ステップ2(902)後、レジスタ1以外のレジスタへの書き込みを行っているため、sel_reg1信号が1から0に変化している。この状態(ステップ2(902)後の書き込みが、プロテクト対象レジスタ1以外に対するものである状態)を、図5に示したシーケンスエラー検出60のAND素子603で検出し、エラー信号sq_errorの値が1となる。即ち、AND素子603の入力信号(セレクト信号sel_reg1の反転値、カウント信号stpcnt[0]の反転値、stpcnt[1]の値)が全て1となり、ライト信号wrの立ち上がりのタイミングでエラー信号sq_error=1が出力される。
【0046】また、図3に示す状態遷移図の803の状態から書き込みを行っているため、ステップカウンタ50の値がstpcnt[1:0]=10bからstpcnt[1:0]=00bに戻る。さらに、図2に示したプロテクトライト信号生成70では、信号sel_reg1=0であるため、AND素子702の出力であるレジスタ1へのライト信号wr_pregの値は0のままとなり、ライトパルスは発生しない。
【0047】図11は、4つ目のケースである、ステップ2(902)後の書き込みで設定したい値以外の値をライトした場合のタイミング図である。ステップ2(902)後、書き込みたいデータ12ABhではなく、データ1111hを書き込んでいるため、一致信号db_eqの値が0のままとなっている。この状態(ステップ2(902)後の書き込みで設定したい値以外の値をライトした状態)を、図5に示したシーケンスエラー検出60のAND素子604で検出し、エラー信号sq_errorの値が1となる。
【0048】また、図3に示す状態遷移図の状態803から書き込みを行っているため、ステップカウンタ50の値がstpcnt[1:0]=10bからstpcnt[1:0]=00bに戻る。さらに、図2に示したプロテクトライト信号生成70では、一致信号db_eq=0であるため、AND素子701の出力が0となり、wr_pregの値も0のままとなるので、ライトパルスは発生しない。
【0049】このように、プロテクト対象レジスタ1への書き込みは、特定シーケンスで書き込み動作を行った場合にのみ有効となるので、他のレジスタへの書き込み命令コードが何らかの原因でプロテクト対象レジスタ1への不正書き込みを行う命令に変化してしまった場合や、CPU6の暴走などにより不正書き込みが行われた場合に、それらの不正な書き込み動作を無効化することができ、システムに重要な影響を及ぼす制御レジスタの値を守ることができる。
【0050】さらに、ステップ1(901)、ステップ2(902)、及びステップ3(903)での書き込みデータ値を比較し、正常値であるかどうかを確認しているので、データバス8上で不慮のデータ化けが発生した場合でも、不正なデータの書き込みを無効化することができる。
【0051】データバス8でのデータ化けについては、データバス8自体に誤り訂正等の回路と付加ビットを施す方法もあるが、本実施の形態では、データバス8に付加ビットを増やす必要がなく、また、ハードウェアも比較的少ない量で実現できるといった効果もある。
【0052】また、書き込みデータを一時保留するハードウェアのみを用意し、データ値が正常であるかどうかの検出をソフトウェアで行う方法も考えられるが、ソフトウェアでの検出はプログラムコードの増大と制御レジスタへの書き込み時間の増大を招くという欠点がある。この方法と比べると、本実施の形態は、ライト命令を3回実行するだけでよく、プログラムコード量を少なくでき、かつ、制御レジスタへの書き込み時間を短くできるといった効果がある。
【0053】また、ステップ2(902)では、データ値を反転値としなければならないので、CPU6の暴走などにより、同じ命令コードを繰り返し実行し、同一レジスタへの連続書き込みが行われるといった事態が発生した場合でも、この書き込み動作を無効化することができる。
【0054】次に、図12乃至図18を参照して、本発明の他の実施の形態について説明する。この実施の形態の基本的な構成及び動作は、図1乃至図11を参照して上述した実施の形態の場合と同様であるが、ライトプロテクトの対象となるレジスタを3つとした点で異なっている。図12は、本実施の形態の構成例を示すブロック図である。
【0055】同図に示したように、各ブロックは図1に示した実施の形態の場合と基本的に同様であるが、本実施の形態の場合、レジスタ1、レジスタ2、及びレジスタ3の3つのレジスタを、ライトプロテクトの対象としている。従って、これら3つのレジスタ1,2,3への書き込み用データ、及びライト信号は、ライトプロテクト回路11から供給されるようになっている。
【0056】図13は、図12のライトプロテクト回路11の構成例を示すブロック図である。同図に示すように、ライトプロテクト回路11は、ライトデータ設定バッファ21、比較回路31、対象レジスタ検出41、ステップカウンタ51、シーケンスエラー検出61、プロテクトライト信号生成71、AND素子81、及びOR素子91から構成されている。
【0057】ここで、ライトデータ設定バッファ21の接続及び構成は、図2に示したライトデータ設定バッファ20の場合と同様であるので、その説明は省略する。また比較回路31の接続及び構成も、図2に示した比較回路30の場合と同様であるので、その説明は省略する。また、シーケンスエラー検出61は、図2に示したシーケンスエラー検出60と比べると、入力信号の1つが、信号sel_reg1から信号preg_onに変更されているが、その中身の構成及び動作は図2に示したシーケンスエラー検出60の場合と同様であるので、その説明は省略する。同じ理由で、プロテクトライト信号生成71も、図2に示したプロテクトライト信号生成70と比べると、入力信号の1つが、信号sel_reg1から信号preg_onに変更されているが、本ブロック自体の構成及び動作は図2に示したプロテクトライト信号生成70の場合と同様であるので、その説明は省略する。また、AND素子81も、図2に示したAND素子80と比べると、入力信号の1つが、信号sel_reg1から信号sel_p_orに変更されているが、AND素子81の構成及び動作は、図2に示したAND素子80の場合と同様であるので、その説明は省略する。
【0058】対象レジスタ検出41は、特定シーケンスの対象レジスタが、3ステップで同一であるかどうかを検出するブロックであり、図14に示すように構成されている。同図に示すように、対象レジスタ検出41は、OR素子411,412、Dフリップフロップ回路413,414、AND素子415,416,417、OR素子418から構成されている。OR素子411にはセレクト信号sel_reg1、sel_reg3が入力され、これらの信号の論理和が演算され、演算結果がDフリップフロップ回路413に供給される。OR素子412にはセレクト信号sel_reg2、sel_reg3が入力され、これらの信号の論理和が演算され、演算結果がDフリップフロップ回路414に供給される。Dフリップフロップ回路413には、OR素子411からの出力信号と、AND素子81から出力される信号wr_dbが入力され、信号wr_dbの立ち下がりのタイミングで、OR素子411からの出力信号をAND素子415に供給し、OR素子411からの出力信号の反転値をAND素子416に供給し、OR素子411からの出力信号をAND素子417に供給するようになっている。また、Dフリップフロップ回路414には、OR素子412からの出力信号と、AND素子81から出力される信号wr_dbが入力され、信号wr_dbの立ち下がりのタイミングで、OR素子412からの出力信号の反転値をAND素子415に供給し、OR素子412からの出力信号をAND素子416に供給し、OR素子412からの出力信号をAND素子417に供給するようになっている。また、AND素子415には、セレクト信号sel_reg1が入力され、AND素子416には、セレクト信号sel_reg2が入力され、AND素子417には、セレクト信号sel_reg3が入力されるようになっている。図14において、保持回路(Dフリップフロップ回路)413が保持する値sel_info[0]、及び保持回路414が保持する値sel_info[1]は、ステップ1(811)時点での特定シーケンスの対象レジスタを示すものであり、図14の中の一覧表に示すような情報を保持している。
【0059】保持回路413及び保持回路414が保持する値は、ステップ1(811)時点の書き込みで更新される。この保持回路413及び保持回路414の値sel_info[1:0]を、ステップ1(811)時点での対象レジスタの情報として扱い、ステップ2(812)時点、及びステップ3(813)時点における対象レジスタと、ステップ1(811)時点における対象レジスタとが同一レジスタであるかどうかを、AND素子415,416,417で検出する。これらAND素子415,416,417の出力信号をそれぞれOR素子418で受け取り、特定シーケンスの各ステップでの対象レジスタが同一であるか否かを検出し、検出結果としての検出信号preg_onを生成し、出力する。
【0060】この対象レジスタ検出41は、プロテクト対象レジスタの数を1つとする場合には不要であるが、複数のレジスタをプロテクト対象とする場合は、それらのレジスタを区別するために必ず必要であり、対象レジスタ検出41の出力信号sel_infoのビット数は、プロテクト対象レジスタが2個の場合は1ビット、プロテクト対象レジスタが3又は4個の場合は2ビット、プロテクト対象レジスタが5乃至8個の場合は3ビットとなるように構成される。
【0061】ステップカウンタ51は、プロテクト対象レジスタが複数(この例の場合、3つ)になったため、図1に示した実施の形態のステップカウンタ50とは少し構成が異なる。即ち、図15の状態遷移図に示す通り、ステップ1(811)の書き込み実施時点(ライト信号wrの立ち下がり発生時点でsel_p_or=1の場合)で使用する信号がsel_reg1からsel_p_orとなり、ステップ2(812)の書き込み実施時点(ライト信号wrの立ち下がり時点で(dbz_eq=1)かつ(preg_on=1)の場合)で使用する信号がsel_reg1からpreg_onとなる。図15の状態遷移図に従って動作するように回路化したものを図16に示す。
【0062】図16は、ステップカウンタ51の構成例を示すブロック図である。同図に示すように、ステップカウンタ51は、AND素子511,512、Dフリップフロップ回路513,514から構成されている。AND素子511は、信号sel_p_or、カウント信号stpcnt[0]の反転値、stpcnt[1]の反転値を入力し、入力された値の論理積を演算し、演算結果をDフリップフロップ回路513に供給するようになっている。AND素子512は、一致信号dbz_eqの値、信号preg_onの値、カウント信号stpcnt[0]の値、stpcnt[1]の反転値をそれぞれ入力し、入力した値の論理積を演算し、演算結果をDフリップフロップ回路514に供給するようになっている。Dフリップフロップ回路514は、ライト信号wrの立ち下がりのタイミングで、AND素子512の出力信号をカウント信号stpcnt[1]として出力するようになっている。
【0063】OR素子91は、3つあるプロテクト対象レジスタ(レジスタ1,2,3)のうちのいずれかが、現在選択されているかどうかを示す信号sel_p_orを生成するためのものである。この信号sel_p_orは、ステップカウンタ51及びAND素子81のブロックで使用される。
【0064】次に、本実施の形態の動作について説明する。本実施の形態は、図1乃至図11を参照して上述した実施の形態の場合とは、プロテクト対象レジスタがレジスタ1,2,3の3つになっている点が異なっているが、基本的な動作は、図1乃至図11を参照して上述した実施の形態の場合と同様であるので、その詳細な説明は省略する。
【0065】図17は、レジスタ2へデータ値12ABhを書き込む場合のタイミング図を示している。この例の場合も、図7に示したタイミング図と基本的に同様にして、レジスタ2にデータ12ABhが書き込まれる。図18は、シーケンスエラー発生時の例として、3つ目のケースであるステップ2(812)後のライトで、対象レジスタ以外のレジスタに書き込みを行った場合のタイミング図である。この例の場合、ステップ3(813)において、信号wr_pregの値が0のままとなり、信号sq_errorの値が1となり、レジスタ2へのデータ12ABhの書き込みは行われない。
【0066】以上説明したように、本実施の形態は、複数のレジスタをライトプロテクトの対象にする場合の例であり、システムの必要性に応じて、プロテクトの対象となるレジスタの個数を自由に変更できるという効果が得られる。
【0067】次に、本発明のさらに他の実施の形態について説明する。上記各実施の形態では、特定シーケンスを図6に示した3ステップで構成しているが、本実施の形態では、さらにステップを増やし、図24に示すように4ステップで構成している。
【0068】図24に示した特定シーケンスのフローは、図6に示した上記各実施の形態でのフローのステップ1の前に、コマンドレジスタへ特定値(この例の場合、55AAh)を書き込むというステップを追加している。ステップ2以降は、上記各実施の形態での3ステップ(ステップ1(901)、ステップ2(902)、ステップ3(903))と同様である。
【0069】本実施の形態の場合、図25に示した4つのステップ(ステップ1(921)、ステップ2(922)、ステップ3(923)、ステップ4(924))を踏んだ場合にのみ、対象レジスタへのデータの書き込みが有効となり、対象レジスタへ設定したいデータが書き込まれる。
【0070】ここで、ステップ1(921)、ステップ2(922)、及びステップ3(923)での書き込み動作は、特定シーケンスを構成するステップに過ぎず、これら各ステップの時点では、書き込みは無効で、ライト信号(wr_preg)のパルスが出力されない。ステップ1(921)乃至ステップ4(924)までの書き込みを順序よく実施した場合にのみ、ステップ4時点での書き込みが有効となり、ライト信号(wr_preg)のパルスが出力される。
【0071】なお、これらのステップを踏まず、ステップ1(921)とステップ2(922)の間、ステップ2(922)とステップ3(923)の間、或いはステップ3(923)とステップ4(924)の間に、他の書き込み動作が行われた場合には、特定シーケンスでの書き込みは無効となり、シーケンスエラーが検出される。再度書き込みを試みる場合は、再び最初のステップ1(921)から書き込み動作を始めなければならない。
【0072】図19は、本実施の形態の構成例を示すブロック図である。各ブロックは、図1に示した実施の形態の場合とほぼ同様であるが、本実施の形態の場合、アドレスデコーダ9において、コマンドレジスタの選択信号sel_cmdを生成し、ライトプロテクト回路12へ供給している点が異なっている。
【0073】ここで、コマンドレジスタについてであるが、コマンドレジスタは、特定シーケンスを構成するためのものであり、レジスタと呼んではいるが、実際には実体(保持回路)がなく、アドレスのみ割り付けられるものとする。
【0074】図20は、図19のライトプロテクト回路12の構成例を示すブロック図である。同図に示すように、ライトプロテクト回路12は、ライトデータ設定バッファ22、比較回路32、ステップカウンタ52、シーケンスエラー検出62、プロテクトライト信号生成72、及びAND素子82から構成される。
【0075】ここで、図20に示したライトデータ設定バッファ22、プロテクトライト信号生成72、及びAND素子82は、図2に示したライトデータ設定バッファ20、プロテクトライト信号生成70、及びAND素子80とそれぞれ接続及び構成が同一であるので、その説明は省略する。
【0076】図20に示すように、比較回路32は、図2に示した比較回路30と比べると、データバス8の値(data[15:0])と特定値55AAhを比較し、一致信号55aa_eqを出力する比較器324が新たに追加されている点が異なっている。
【0077】図21は、ステップカウンタ52のカウント信号の状態遷移を示している。ステップ数が4つになったことにより、カウント信号の値に応じた4つの状態(stpcnt[1:0]=00b、stpcnt[1:0]=01b、stpcnt[1:0]=10b、stpcnt[1:0]=11b)が示されている。カウント信号stpcnt[1:0]の値が00bの状態で、ステップ1(821)の書き込みを行うと、カウント信号stpcnt[1:0]の値は01bに遷移し、ステップ2(822)の書き込みを行うと、カウント信号stpcnt[1:0]の値は10bに遷移し、ステップ3(823)の書き込みを行うと、カウント信号stpcnt[1:0]の値は11bに遷移する。それ以外の書き込みが発生すると、カウント信号stpcnt[1:0]の値は00bに戻る。
【0078】図22は、図21に示した状態遷移図に従って動作し、カウント信号stpcnt[1:0]を出力する回路の例を示している。AND素子521には、信号sel_cmdの値、信号55aa_eqの値、カウント信号の1ビット目の値(stpcnt[0])の反転値、カウント信号の2ビット目の値(stpcnt[1])の反転値が入力され、各値の論理積を演算し、演算結果を出力するようになっている。AND素子522には、信号sel_reg1の値、信号dbz_eqの値、カウント信号の1ビット目の値(stpcnt[0])の反転値、カウント信号の2ビット目の値(stpcnt[1])が入力され、各値の論理積を演算し、演算結果を出力するようになっている。
【0079】AND素子523には、信号sel_reg1の値、カウント信号の1ビット目の値(stpcnt[0])、カウント信号の2ビット目の値(stpcnt[1])の反転値が入力され、各値の論理積を演算し、演算結果を出力するようになっている。AND素子524には、信号sel_reg1の値、信号dbz_eqの値、カウント信号の1ビット目の値(stpcnt[0])の反転値、カウント信号の2ビット目の値(stpcnt[1])が入力され、各値の論理積を演算し、演算結果を出力するようになっている。
【0080】OR素子525は、AND素子521,522からの出力信号を入力し、論理和演算を行い、演算結果を出力するようになっている。OR素子526は、AND素子523,524からの出力信号を入力し、論理和演算を行い、演算結果を出力するようになっている。
【0081】Dフリップフロップ回路527のD0端子には、OR素子525からの出力値と、ライト信号wrの反転値が入力され、ライト信号の立ち下がり毎に、OR素子525からの出力値を入力し、カウント信号stpcnt[0]として出力するようになっている。また、Dフリップフロップ回路528には、OR素子526からの出力値と、ライト信号wrの反転値が入力され、ライト信号の立ち下がり毎に、OR素子526からの出力値を入力し、カウント信号stpcnt[1]として出力するようになっている。
【0082】シーケンスエラー検出62は、本実施の形態では6つのケースをエラーとして検出している。1つ目は、最近の書き込み動作がコマンドレジスタへの55AAhライトではない状態で、プロテクト対象レジスタ1への書き込みを行った場合、2つ目は、ステップ1(821)の後の最初の書き込み動作が、対象とするレジスタ以外に対する場合、3つ目は、ステップ2(822)の後の最初の書き込み動作が、対象とするレジスタ以外に対する場合、4つ目は、ステップ2(822)の後の最初の書き込み動作が、対象とするレジスタであるが、設定したい値の反転値(ステップ2(822)での書き込み値の反転値)以外の値を書き込んだ場合、5つ目は、ステップ3(823)の後の最初の書き込み動作が、対象とするレジスタ以外に対する場合、そして6つ目は、ステップ3(823)の後の最初の書き込み動作が、対象とするレジスタであるが、設定したい値(ステップ2(822)での書き込み値)以外の値を書き込んだ場合である。これら6つのケースが発生した場合を、シーケンスエラーとして検出する。
【0083】図23は、シーケンスエラー検出62の構成例を示すブロック図である。同図に示すように、シーケンスエラー検出62は、AND素子621乃至626と、OR素子627と、Dフリップフロップ回路628とから構成されている。AND素子621にて1つ目のケース、AND素子622にて2つ目のケース、AND素子623にて3つ目のケース、AND素子624にて4つ目のケース、AND素子625にて5つ目のケース、AND素子626にて6つ目のケースをそれぞれ検出し、これらの検出信号をwr信号パルスでDフリップフロップ回路628に取り込み、エラー信号sq_errorを生成し、出力している。
【0084】なお、本実施の形態の場合、4ステップの特定シーケンスになっているが、基本的な動作は、上述した各実施の形態の場合と同様である。図25は、プロテクト対象のレジスタ1にデータ12ABhを書き込む場合のタイミング図である。ステップ1(821)において、信号sel_cmdの値が1となり、data[15:0]の値が55AAhとなるので、比較器324の出力信号55aa_eqの値が1となる。従って、図22のAND素子521の入力信号である信号sel_cmd、信号55aa_eq、カウント信号stpcnt[0]、stpcnt[1]の値がそれぞれ1となるので、AND素子521の出力信号の値は1となる。これにより、ライト信号wrの立ち下がりで、カウント信号stpcnt[0]の値が1となる。これにより、ステップカウンタ52の出力するカウント信号stpcnt[1:0]=01bとなる。
【0085】ステップ2(822)においては、信号sel_reg1の値が1となり、カウント信号stpcnt[0]の値が1、stpcnt[1]の反転値が1となるので、AND素子523の出力信号の値は1となる。従って、ステップカウンタ52の出力するカウント信号stpcnt[1:0]=10bとなる。
【0086】ステップ3(823)においては、信号sel_reg1の値が1、一致信号dbz_eqの値が1、カウント信号stpcnt[1]の値が1、stpcnt[0]の反転値が1となり、AND素子524の出力信号の値が1となる、また、AND素子522の出力信号の値も1となるので、ステップカウンタ52の出力するカウント信号stpcnt[1:0]の値は11bとなる。
【0087】ステップ4(824)においては、信号sel_reg1の値が1、比較器322から出力される一致信号db_eqの値が1、ステップカウンタ52から出力されるカウント信号stpcnt[1]=1、stpcnt[]=1となるので、ライト信号wrの立ち上がりで、ライトプロテクト回路12より出力される信号wr_pregの値が1となり、プロテクト対象レジスタ1に対してデータ12ABhが書き込まれる。
【0088】図26は、最近の書き込み動作がコマンドレジスタへの55AAhライトではない状態で、プロテクト対象レジスタ1への書き込みを行った場合(1つ目のケース)に、シーケンスエラーが発生したときのタイミング図である。この場合、信号sel_reg1の値が1、カウント信号stpcnt[0]の反転値が1、stpcnt[1]の反転値が1となるので、図23のAND素子621の出力信号の値が1となり、OR素子627の出力信号pr_sq_errorの値が1となる。これにより、ライト信号wrの立ち上がりで、Dフリップフロップ回路628にOR素子627からの出力信号pr_sq_errorが取り込まれ、sq_error信号として出力される。
【0089】図27は、ステップ3後のライトで設定したい値以外の値をライトし、シーケンスエラーが発生した場合のタイミング図である。同図に示すように、ステップ3の後、レジスタ1に対して、データ1111hの書き込みを行った場合、カウント信号stpcnt[0]=1、カウント信号stpcnt[1]=1、信号db_eqの値が0のままとなるので、AND素子626の出力が1となり、wr信号の立ち上がりで、エラー信号sq_errorの出力値が1となる。また、wr_pregの値は0のままとなり、wr_pregの値も0のままとなる。
【0090】以上、本実施の形態では、特定シーケンスのステップ数を4つに増やし、かつコマンドレジスタという別レジスタの概念を追加しているので、CPU6の暴走などによる同一レジスタへのランダム値の連続誤書き込みについても、無効化できるという効果がある。
【0091】また、データバス上のデータ化けについては、データバス自体に誤り訂正等の回路と付加ビットを施す方法もあるが、上記各実施の形態では、データバスに付加ビットを増やす必要がなく、またハードウェアも比較的少ない量で実現可能である。
【0092】また、書き込みデータを一時保留するハードウェアのみを用意し、データ値が正常であるかどうかの検出をソフトウェアで行う方法も考えられるが、ソフトウェアでの検出はプログラムコードの増大と制御レジスタへの書き込み時間の増大を招くという欠点がある。この方法と比べると、上記各実施の形態は、ライト命令を3回実行するだけでよく、プログラムコード量を少なくでき、かつ、制御レジスタへの書き込み時間を短くできるといった効果がある。
【0093】なお、上記実施の形態の構成及び動作は例であって、本発明の趣旨を逸脱しない範囲で適宜変更することができることは言うまでもない。
【0094】
【発明の効果】以上の如く、本発明に係るライトプロテクト方法によれば、所定のレジスタへ所定のデータを書き込むためのライト動作が、所定のシーケンスで行われたか否かを判定し、上記レジスタへデータを書き込むためのライト動作が、上記シーケンスで行われたと判定された場合にのみ、上記レジスタへのデータの書き込みが行われるように制御するようにしたので、所定のレジスタへの不正な書き込みを無効化することができる。




 

 


     NEWS
会社検索順位 特許の出願数の順位が発表

URL変更
平成6年
平成7年
平成8年
平成9年
平成10年
平成11年
平成12年
平成13年


 
   お問い合わせ info@patentjp.com patentjp.com   Copyright 2007-2013