(57)【要約】  【課題】    内蔵不揮発性メモリのデータのうち所定の必要なプログラム又はデータは、外部メモリ空間から読み出し可能としながら、秘匿する必要のあるプログラム又はデータの読み出しに対するセキュリティ向上を図る。  【解決手段】  マイクロコンピュータ１００において、内蔵不揮発性メモリ１２０はプログラム及びデータを格納する例えば３個の記憶領域を備える。エリアレジスタ１４０は、前記内蔵不揮発性メモリ１２０の各記憶領域毎にプログラム又はデータの読み出しを許可するか否かを記憶する。比較手段１５０は、前記エリアレジスタ１４０が記憶する読み出し不許可領域とＣＰＵ１１０がアクセスする記憶領域とが一致するか否かを比較し、その比較結果が一致するときには、データ無効化手段１６０は、内蔵不揮発性メモリ１２０から読み出されるプログラム又はデータを無効化する。【選択図】    図１
2005157740.tif 000002
【特許請求の範囲】
【請求項１】
プログラム及びデータを格納する１個又は複数個の記憶領域を有する不揮発性メモリと、
前記不揮発性メモリの各記憶領域毎にデータの読み出しを許可するか否かを記憶する保護領域記憶手段と、
現在アクセスされる前記不揮発性メモリの記憶領域が前記保護領域記憶手段が記憶する読み出し不許可領域と一致するか否かを比較する比較手段と、
前記比較手段の比較結果を受け、この比較結果が一致であるとき、前記不揮発性メモリの記憶領域から読み出されるプログラム又はデータを無効化するデータ無効化手段と、
前記不揮発性メモリにアクセスし、この不揮発性メモリが格納するプログラム又はデータを前記データ無効化手段を介して読み出す制御部とを備えた
ことを特徴とするマイクロコンピュータ。
【請求項２】
請求項１記載のマイクロコンピュータにおいて、
他のプログラム及びデータを格納する前記不揮発性メモリ以外のメモリを備え、
前記制御部は、
アクセスが前記不揮発性メモリ以外のメモリに分岐する前に、前記不揮発性メモリの記憶領域のうち所定の記憶領域を読み出し不許可領域として前記保護領域記憶手段に設定するシーケンス制御を行う
ことを特徴とするマイクロコンピュータ。
【請求項３】
請求項１記載のデータ無効化手段として、プログラム又はデータの無効化を設定する命令を作成すると共に、少なくとも１つの再配置可能な機械語プログラムを読み込んで、再配置可能な番地を変更する機能を有するローダ・リンカにおいて、
制御転移命令を検出する機能と、
前記制御転移命令を検出する機能が抽出した制御転移先空間を外部空間であると判定する機能と、
前記制御転移命令の前に、前記データ無効化手段としてプログラム又はデータの無効化を設定する命令を挿入する機能とを備え、
前記読み込んだ再配置可能な機械語プログラム中の制御転移命令の転移先が外部空間であるとき、前記制御転移命令の前に前記プログラム又はデータの無効化を設定する命令を挿入した絶対機械語プログラムを出力する
ことを特徴とするローダ・リンカ。
【請求項４】
前記請求項３記載のローダ・リンカを備える言語処理系において、
少なくとも１つの骨子になる原始プログラムを読み込んで、原始プログラムを出力する前処理系と、
前記前処理系からの原始プログラムを読み込んで、アセンブリプログラムを出力するコンパイラと、
前記コンパイラからのアセンブリプログラムを読み込んで、再配置可能機械コードを出力するアセンブラとを備え、
前記ローダ・リンカは、前記アセンブラからの再配置可能機械コードを読み込んで、この再配置可能機械コードを少なくとも１つのライブラリと結合して、絶対機械コードを出力するものであり、
前記骨子になる原始プログラム中には、前記保護領域記憶手段での読み出し不許可領域の開始を表すマクロ及び終了を表すマクロが含まれ、
前記前処理系は、前記マクロを構文解析して前記原始プログラムに展開する機能を有し、
前記コンパイラは、前記マクロが展開された前記原始プログラムを構文解析して、前記マクロが展開されたアセンブリプログラムを展開する機能を有し、
前記アセンブラは、前記マクロが展開されたアセンブリプログラムを構文解析して、前記マクロが展開された再配置可能機械語コードを展開する機能を有し、
前記ローダ・リンカは、
プログラム又はデータの無効化を設定する命令が挿入された前記絶対機械語プログラムを展開するとき、前記読み出し不許可領域の開始及び終了を表すマクロを構文解析して、前記プログラム又はデータを無効化する設定データを算出する機能を有する
ことを特徴とする言語処理系。
【請求項５】
前記請求項１記載のマイクロコンピュータを備えた情報処理装置において、
前記マイクロコンピュータが有するデータ無効化手段として、プログラム又はデータの無効化を設定する命令を有し、
前記プログラム又はデータの無効化を設定する命令には、制御転移命令と、前記マイクロコンピュータが有する保護領域記憶手段に設定する読み出し不許可情報とが含まれる
ことを特徴とする情報処理装置。
【請求項６】
請求項１記載のマイクロコンピュータにおいて、
前記制御部が実行しているプログラムが前記不揮発性メモリに格納されたプログラムであるか否かを判定する判定手段を備え、
前記データ無効化手段は、
前記判定手段の判定結果を受け、この判定結果が前記不揮発性メモリに格納されたプログラムであるとき、前記比較手段の比較結果が一致であっても、不揮発性メモリの記憶領域から読み出されるプログラム又はデータの無効化を行わない
ことを特徴とするマイクロコンピュータ。
【請求項７】
請求項１、２又は６記載のマイクロコンピュータにおいて、
特定の認証手続きがなされたか否かを判定する認証手段を備え、
前記保護領域記憶手段は、
前記認証手段の認証結果を受け、特定の認証手続きがなされていないとき、読み出し不許可領域又は読み出し許可領域への情報の書き換えを行わない
ことを特徴とするマイクロコンピュータ。
【請求項８】
請求項７記載のマイクロコンピュータにおいて、
前記認証手段は、
予め特定のキーコードを保持し、前記特定の認証手続きとして、入力されるキーコードと前記予め保持しているキーコードとの比較を行う
ことを特徴とするマイクロコンピュータ。
【請求項９】
請求項１、２又は６記載のマイクロコンピュータにおいて、
前記制御部が実行しているプログラムが前記不揮発性メモリに格納されたプログラムであるか否かを判定する判定手段を備え、
前記保護領域記憶手段は、
前記判定手段の判定結果を受け、この判定結果が前記不揮発性メモリに格納されたプログラムでないとき、読み出し不許可領域又は読み出し許可領域への情報の書き換えを行わない
ことを特徴とするマイクロコンピュータ。
【請求項１０】
プログラム及びデータを格納する記憶領域を有する不揮発性メモリと、
他のプログラム及びデータを格納する記憶領域を有する揮発性メモリと、
前記実行しているプログラムが前記不揮発性メモリに格納されたプログラムであるか、前記揮発性メモリに格納されたプログラムであるか、又はその何れにも該当しないかを判定する判定手段と、
前記判定手段の判定結果を受け、その判定結果が前記不揮発性メモリに格納されたプログラムであるときには、不揮発性メモリに格納されたプログラムであることを記憶し、前記揮発性メモリに格納されたプログラムであるときには、既に記憶した内容を保持し、何れにも該当しないときには、何れにも該当しないことを記憶する判定結果記憶手段と、
前記判定結果記憶手段の記憶内容を受け、この記憶内容が前記不揮発性メモリに格納されたプログラムでないとき、前記不揮発性メモリから読み出されるプログラム又はデータを無効化するデータ無効化手段と、
前記不揮発性メモリが格納するプログラム又はデータを前記データ無効化手段を介して読み出す制御部とを備えた
ことを特徴とするマイクロコンピュータ。
【請求項１１】
プログラム及びデータを格納する記憶領域を有する不揮発性メモリと、
随時バス制御に介入して前記不揮発性メモリに対してプログラム又はデータの読み出しを行うダイレクトメモリアクセス手段と、
前記不揮発性メモリに格納されたプログラム及びデータ及び前記ダイレクトメモリアクセス手段にアクセスする制御部と、
現在実行しているプログラムが前記不揮発性メモリに格納されたプログラムであるか否かを判定する判定手段と、
前記判定手段の判定結果を受け、前記制御部が前記ダイレクトメモリアクセス手段をアクセスした時の前記判定手段の判定結果を格納する判定結果記憶手段と、
前記判定結果記憶手段が格納する判定結果を受け、この判定結果が前記不揮発性メモリに格納されたプログラムでないとき、前記不揮発性メモリから読み出されるプログラム又はデータを無効化するデータ無効化手段とを備え、
前記制御部は、前記不揮発性メモリが格納するプログラム又はデータを前記データ無効化手段を介して読み出す
ことを特徴とするマイクロコンピュータ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、不揮発性メモリを内蔵したマイクロコンピュータに格納されたデータ読み出しに対するセキュリティに関する。
【背景技術】
【０００２】
従来、この種のセキュリティは、特許文献１に記載されるように、外部メモリや内蔵揮発性メモリに該当するアドレスよりオペコードをフェッチした場合には、内蔵不揮発性メモリに該当するアドレスに格納された秘匿性のあるデータを読み出せないようにしたものである。
【特許文献１】特開平６−９６２３５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかしながら、従来のセキュリティ回路では、外部メモリ及び内蔵揮発性メモリに該当するアドレスよりオペコードフェッチした場合、内蔵不揮発性メモリに該当するアドレスの全領域が読み出し不可能になる。そのため、内蔵不揮発性メモリに配置されたテーブルデータを読み出すといった必要な読み出しまで制限されてしまい、外部メモリにプログラムを配置することができないという問題があった。
【０００４】
本発明はかかる課題に鑑み、その目的は、内蔵不揮発性メモリに該当するアドレスに格納されたプログラム及びデータのうち、外部メモリ及び内蔵揮発性メモリに該当するアドレスから読み出すことが必要なデータについては読み出すことを可能にしつつ、不正ユーザに読み出されたくないプログラム及びデータについては、その読み出しを不可能にするようにして、セキュリティ向上を図ることにある。
【課題を解決するための手段】
【０００５】
前記目的を達成するために、本発明では、内蔵不揮発性メモリの記憶領域のうち、秘匿すべき所定の記憶領域を読み出し不許可領域として設定し、外部メモリ又は内蔵揮発性メモリに該当するアドレスに配置されたプログラムが前記内蔵不揮発性メモリの読み出し不許可領域からのプログラム又はデータの読み出しを指示しているか否かを判断して、その読み出しを禁止又は許可することとする。
【０００６】
すなわち、具体的に、請求項１記載の発明のマイクロコンピュータは、プログラム及びデータを格納する１個又は複数個の記憶領域を有する不揮発性メモリと、前記不揮発性メモリの各記憶領域毎にデータの読み出しを許可するか否かを記憶する保護領域記憶手段と、現在アクセスされる前記不揮発性メモリの記憶領域が前記保護領域記憶手段が記憶する読み出し不許可領域と一致するか否かを比較する比較手段と、前記比較手段の比較結果を受け、この比較結果が一致であるとき、前記不揮発性メモリの記憶領域から読み出されるプログラム又はデータを無効化するデータ無効化手段と、前記不揮発性メモリにアクセスし、この不揮発性メモリが格納するプログラム又はデータを前記データ無効化手段を介して読み出す制御部とを備えたことを特徴とする。
【０００７】
請求項２記載の発明は、前記請求項１記載のマイクロコンピュータにおいて、他のプログラム及びデータを格納する前記不揮発性メモリ以外のメモリを備え、前記制御部は、アクセスが前記不揮発性メモリ以外のメモリに分岐する前に、前記不揮発性メモリの記憶領域のうち所定の記憶領域を読み出し不許可領域として前記保護領域記憶手段に設定するシーケンス制御を行うことを特徴とする。
【０００８】
請求項３記載の発明のローダ・リンカは、前記請求項１記載のデータ無効化手段として、プログラム又はデータの無効化を設定する命令を作成すると共に、少なくとも１つの再配置可能な機械語プログラムを読み込んで、再配置可能な番地を変更する機能を有するローダ・リンカにおいて、制御転移命令を検出する機能と、前記制御転移命令を検出する機能が抽出した制御転移先空間を外部空間であると判定する機能と、前記制御転移命令の前に、前記データ無効化手段としてプログラム又はデータの無効化を設定する命令を挿入する機能とを備え、前記読み込んだ再配置可能な機械語プログラム中の制御転移命令の転移先が外部空間であるとき、前記制御転移命令の前に前記プログラム又はデータの無効化を設定する命令を挿入した絶対機械語プログラムを出力することを特徴とする。
【０００９】
請求項４記載の発明の言語処理系は、前記請求項３記載のローダ・リンカを備える言語処理系において、少なくとも１つの骨子になる原始プログラムを読み込んで、原始プログラムを出力する前処理系と、前記前処理系からの原始プログラムを読み込んで、アセンブリプログラムを出力するコンパイラと、前記コンパイラからのアセンブリプログラムを読み込んで、再配置可能機械コードを出力するアセンブラとを備え、前記ローダ・リンカは、前記アセンブラからの再配置可能機械コードを読み込んで、この再配置可能機械コードを少なくとも１つのライブラリと結合して、絶対機械コードを出力するものであり、前記骨子になる原始プログラム中には、前記保護領域記憶手段での読み出し不許可領域の開始を表すマクロ及び終了を表すマクロが含まれ、前記前処理系は、前記マクロを構文解析して前記原始プログラムに展開する機能を有し、前記コンパイラは、前記マクロが展開された前記原始プログラムを構文解析して、前記マクロが展開されたアセンブリプログラムを展開する機能を有し、前記アセンブラは、前記マクロが展開されたアセンブリプログラムを構文解析して、前記マクロが展開された再配置可能機械語コードを展開する機能を有し、前記ローダ・リンカは、プログラム又はデータの無効化を設定する命令が挿入された前記絶対機械語プログラムを展開するとき、前記読み出し不許可領域の開始及び終了を表すマクロを構文解析して、前記プログラム又はデータを無効化する設定データを算出する機能を有することを特徴とする。
【００１０】
請求項５記載の発明は、前記請求項１記載のマイクロコンピュータを備えた情報処理装置において、前記マイクロコンピュータが有するデータ無効化手段として、プログラム又はデータの無効化を設定する命令を有し、前記プログラム又はデータの無効化を設定する命令には、制御転移命令と、前記マイクロコンピュータが有する保護領域記憶手段に設定する読み出し不許可情報とが含まれることを特徴とする。
【００１１】
請求項６記載の発明は、前記請求項１記載のマイクロコンピュータにおいて、前記制御部が実行しているプログラムが前記不揮発性メモリに格納されたプログラムであるか否かを判定する判定手段を備え、前記データ無効化手段は、前記判定手段の判定結果を受け、この判定結果が前記不揮発性メモリに格納されたプログラムであるとき、前記比較手段の比較結果が一致であっても、不揮発性メモリの記憶領域から読み出されるプログラム又はデータの無効化を行わないことを特徴とする。
【００１２】
請求項７記載の発明は、前記請求項１、２又は６記載のマイクロコンピュータにおいて、特定の認証手続きがなされたか否かを判定する認証手段を備え、前記保護領域記憶手段は、前記認証手段の認証結果を受け、特定の認証手続きがなされていないとき、読み出し不許可領域又は読み出し許可領域への情報の書き換えを行わないことを特徴とする。
【００１３】
請求項８記載の発明は、前記請求項７記載のマイクロコンピュータにおいて、前記認証手段は、予め特定のキーコードを保持し、前記特定の認証手続きとして、入力されるキーコードと前記予め保持しているキーコードとの比較を行うことを特徴とする。
【００１４】
請求項９記載の発明は、前記請求項１、２又は６記載のマイクロコンピュータにおいて、前記制御部が実行しているプログラムが前記不揮発性メモリに格納されたプログラムであるか否かを判定する判定手段を備え、前記保護領域記憶手段は、前記判定手段の判定結果を受け、この判定結果が前記不揮発性メモリに格納されたプログラムでないとき、読み出し不許可領域又は読み出し許可領域への情報の書き換えを行わないことを特徴とする。
【００１５】
請求項１０記載の発明のマイクロコンピュータは、プログラム及びデータを格納する記憶領域を有する不揮発性メモリと、他のプログラム及びデータを格納する記憶領域を有する揮発性メモリと、前記実行しているプログラムが前記不揮発性メモリに格納されたプログラムであるか、前記揮発性メモリに格納されたプログラムであるか、又はその何れにも該当しないかを判定する判定手段と、前記判定手段の判定結果を受け、その判定結果が前記不揮発性メモリに格納されたプログラムであるときには、不揮発性メモリに格納されたプログラムであることを記憶し、前記揮発性メモリに格納されたプログラムであるときには、既に記憶した内容を保持し、何れにも該当しないときには、何れにも該当しないことを記憶する判定結果記憶手段と、前記判定結果記憶手段の記憶内容を受け、この記憶内容が前記不揮発性メモリに格納されたプログラムでないとき、前記不揮発性メモリから読み出されるプログラム又はデータを無効化するデータ無効化手段と、前記不揮発性メモリが格納するプログラム又はデータを前記データ無効化手段を介して読み出す制御部とを備えたことを特徴とする。
【００１６】
請求項１１記載の発明のマイクロコンピュータは、プログラム及びデータを格納する記憶領域を有する不揮発性メモリと、随時バス制御に介入して前記不揮発性メモリに対してプログラム又はデータの読み出しを行うダイレクトメモリアクセス手段と、前記不揮発性メモリに格納されたプログラム及びデータ及び前記ダイレクトメモリアクセス手段にアクセスする制御部と、現在実行しているプログラムが前記不揮発性メモリに格納されたプログラムであるか否かを判定する判定手段と、前記判定手段の判定結果を受け、前記制御部が前記ダイレクトメモリアクセス手段をアクセスした時の前記判定手段の判定結果を格納する判定結果記憶手段と、前記判定結果記憶手段が格納する判定結果を受け、この判定結果が前記不揮発性メモリに格納されたプログラムでないとき、前記不揮発性メモリから読み出されるプログラム又はデータを無効化するデータ無効化手段とを備え、前記制御部は、前記不揮発性メモリが格納するプログラム又はデータを前記データ無効化手段を介して読み出すことを特徴とする。
【００１７】
以上により、請求項１、２記載の発明では、アクセスが内蔵不揮発性メモリ以外の外部メモリや内蔵揮発性メモリに該当するアドレスに分岐する前に、内蔵不揮発性メモリに読み出し不許可領域を設定するシーケンス制御を行うことにより、内蔵不揮発性メモリに該当するアドレスの範囲の中でも、読み出し不許可領域以外の領域、すなわち読み出し許可領域が外部メモリや内蔵揮発性メモリに該当するアドレスに配置されたプログラムによってアクセスされた場合には、その読み出し許可領域からのプログラムやデータの読み出しが行われ、一方、内蔵不揮発性メモリ内の読み出し不許可領域がアクセスされた場合には、その読み出し許可領域からのプログラムやデータの読み出しが無効化される。
【００１８】
また、請求項３、４記載の発明では、前記請求項１、２に記載したマイクロコンピュータに使用されるプログラムであって、外部メモリ等に格納されたプログラムによって内蔵不揮発性メモリ内の読み出し不許可領域のプログラム又はデータを読み出される際にその読み出されたプログラム又は命令を無効化するための命令を含んだソフトウェアが容易に生成される。
【００１９】
更に、請求項５記載の発明では、内蔵不揮発性メモリ内の読み出し不許可領域の情報を設定する命令と、制御転移命令との２つの命令を１つの命令で記述でき、命令コードサイズが削減される。
【００２０】
加えて、請求項６記載の発明では、制御部が内蔵不揮発性メモリ内のプログラムを実行しているときには、データ無効化手段は内蔵不揮発性メモリ内の読み出し不許可領域から読み出されるプログラム又はデータを無効化しないので、一旦した読み出し不許可領域であるとの設定を解除することなく、その読み出し不許可領域内のプログラム又はデータを必要に応じて読み出すことが可能である。
【００２１】
また、請求項７、８記載の発明では、保護領域記憶手段での読み出し不許可領域を許可領域に変更する書き換えについては、特定の認証手続きが必要であるので、この認証手続きを知らない不正ユーザは内蔵不揮発性メモリ内の読み出し不許可領域からのプログラム又はデータを読み出すことが極めて困難になり、一層にセキュリティが向上する。
【００２２】
更に、請求項９記載の発明では、制御部が実行しているプログラムが内蔵不揮発性メモリ内のプログラムである場合に限って、内蔵不揮発性メモリの読み出し不許可領域に格納されたプログラムを読み出しすることができるので、アクセスが内蔵不揮発性メモリ以外のメモリに該当するアドレスに分岐する前に、内蔵不揮発性メモリの読み出し不許可領域であるとの設定の書換えを禁止する必要がない。
【００２３】
加えて、請求項１０記載の発明では、内蔵不揮発性メモリ内のプログラムを実行して内蔵揮発性メモリに該当するアドレスに分岐した場合には、この内蔵揮発性メモリのプログラムを実行して内蔵不揮発性メモリの読み出し不許可領域のプログラムを読み出すことが可能である。
【００２４】
また、請求項１１記載の発明では、マイクロコンピュータにダイレクトアクセスメモリ手段を備える場合に、不正ユーザが外部メモリや内蔵揮発性メモリのプログラムを改変して、前記ダイレクトアクセスメモリ手段を利用して内蔵不揮発性メモリの読み出し不許可領域のプログラム又はデータの読み出しを試みても、そのダイレクトアクセスメモリ手段の利用が外部メモリや内蔵揮発性メモリ内のプログラムに基づくときには、そのような不許可領域からのプログラム又はデータの読み出しはできない。
【発明の効果】
【００２５】
以上説明したように、本発明のマイクロコンピュータによれば、内蔵不揮発性メモリ内の記憶領域に読み出し不許可領域を設定したので、その不許可領域以外の記憶領域に格納されたプログラムやデータを外部メモリ又は内蔵揮発性メモリ内のプログラムから必要に応じて読み出すことを可能にしつつ、不正ユーザが前記不許可領域に格納された秘匿が必要なプログラムやデータを読み出そうと試みても、その読み出しを不可能にでき、セキュリティを向上させることができる。
【発明を実施するための最良の形態】
【００２６】
以下、本発明の実施形態を図面に基づいて詳細に説明する。
【００２７】
（実施形態１）
以下、本発明の第１の実施形態について、図１〜図４を参照して説明する。
【００２８】
図１は本発明のマイクロコンピュータのブロック図である。図１において、マイクロコンピュータ１００は、ＣＰＵ（制御部）１１０と、内蔵不揮発性メモリ１２０と、内蔵揮発性メモリ１３０と、エリアレジスタ（保護領域記憶手段）１４０と、比較手段１５０と、データ無効化手段１６０とによって構成されている。また、１８０は前記マイクロコンピュータ１００の外部に接続される外部メモリである。
【００２９】
アドレスバスＢ１０１は、ＣＰＵ１１０と、内蔵不揮発性メモリ１２０と、内蔵揮発性メモリ１３０と、比較手段１５０と、外部メモリ１８０とを各々接続する。ここでは説明を簡単にするため、８ビットバス幅とする。データバスＢ１０２は、ＣＰＵ１１０と、内蔵揮発性メモリ１３０と、エリアレジスタ１４０と、データ無効化手段１６０と、外部メモリ１８０とを各々接続する。ここでは説明を簡単にするため、４ビットバス幅とする。エリアレジスタライト信号Ｓ１０３は、ＣＰＵ１１０と、エリアレジスタ１４０とを接続する。リードイネーブル信号Ｓ１０４は、ＣＰＵ１１０と、内蔵不揮発性メモリ１２０と、内蔵揮発性メモリ１３０と、外部メモリ１８０とを各々接続する。ライトイネーブル信号Ｓ１０５は、ＣＰＵ１１０と、内蔵揮発性メモリ１３０とを接続する。ＲＯＭバスＢ１０６は、内蔵不揮発性メモリ１２０と、データ無効化手段１６０とを接続する。エリア信号Ｓ１４１は、エリアレジスタ１４０と、比較手段１５０とを接続する。一致信号Ｓ１５１は、比較手段１５０と、データ無効化手段１６０とを接続する。
【００３０】
内蔵不揮発性メモリ１２０は、プログラム及びデータを格納しており、リードイネーブル信号Ｓ１０４が‘１’であれば、アドレスバスＢ１０１のアドレスに該当するメモリ領域に格納されているプログラム及びデータをＲＯＭバスＢ１０６に出力する。また、内蔵不揮発性メモリ１２０は、アドレスに応じてｎ個のエリアに分割されている。ここでは説明を簡単にするため、３個のエリアに分割されているものとする。
【００３１】
図２は、内蔵不揮発性メモリ１２０のメモリ領域とアドレスの関係を示す図である。図２で、内蔵不揮発性メモリ１２０のメモリ領域は、３つのエリアに分割されており、エリア０はアドレス００Ｈから１ＦＨまで、エリア１はアドレス２０Ｈから３ＦＨまで、エリア２はアドレス４０Ｈから５ＦＨまでとする。すなわち、エリア０は８ビット幅のアドレスバスＢ１０１の上位３ビットが‘０００’の領域、同様にエリア１は上位３ビットが‘００１’、エリア２は上位３ビットが‘０１０’の領域となる。
【００３２】
内蔵揮発性メモリ１３０は、プログラム及びデータを格納保持する。リードイネーブル信号Ｓ１０４が‘１’であれば、アドレスバスＢ１０１のアドレスに該当するメモリ領域に格納されているプログラム及びデータを、データバスＢ１０２に出力する。また、内蔵揮発性メモリ１３０は、ライトイネーブル信号Ｓ１０５が‘１’ならば、データバスＢ１０２のプログラム及びデータを、アドレスバスＢ１０１のアドレスに該当するメモリ領域に格納保持する。
【００３３】
エリアレジスタ１４０は、エリアレジスタライト信号Ｓ１０３が‘１’であれば、データバスＢ１０２のデータを格納保持し、保持したデータをエリア信号Ｓ１４１として出力する。また、エリアレジスタ１４０は、内蔵不揮発性メモリ１２０のメモリ領域の個数と同数のビット幅を有しており、各ビットを最上位ビットから各々エリアフラグ２、エリアフラグ１、エリアフラグ０という。また、ここでは説明を簡単にするため、ビット幅を３ビットとし、初期値を‘０００’とする。
【００３４】
エリアレジスタ１４０の各ビットは、内蔵不揮発性メモリ１２０のメモリ領域を構成する各エリアと、各々１対１で対応しており、各ビットがセットされれば、そのビットに対応したエリアは、読み出し保護の対象エリアとなる。例えば、エリアフラグ１がセットされた時はエリア１が読み出し保護の対象エリアとなり、読み出し時に、比較手段１５０にてアドレスの比較判定が行われる。
【００３５】
比較手段１５０は、アドレスバスＢ１０１のアドレスが、エリアレジスタ１４０で設定したエリアに該当するか否かを判定し、判定結果を一致信号Ｓ１５１に出力する。ここで、比較手段１５０の比較機能を、図３を用いて説明する。図３は、比較手段１５０の比較機能を説明する図である。図３は左から、エリアレジスタ１４０のエリアフラグ２の値、エリアフラグ１の値、エリアフラグ０の値、アドレスバスＢ１０１のビット７の値、ビット６の値、５の値、ビット４の値、一致信号Ｓ１５１の値である。
【００３６】
例えば、エリアレジスタ１４０が出力するエリア信号Ｓ１４１のデータが‘１００’、アドレスバスＢ１０１のアドレスが‘５２Ｈ’ならば、アドレスの上位４ビットが‘０１０１’であるため、比較手段１５０が出力する一致信号Ｓ１５１は‘１’となる。また、エリアレジスタ１４０が出力するエリア信号Ｓ１４１のデータが‘１００’、アドレスバスＢ１０１のアドレスが‘３２Ｈ’ならば、アドレスの上位４ビットが‘００１１’であるため、一致信号Ｓ１５１は‘０’となる。このようにして、比較手段１５０は、アドレスバスＢ１０１のアドレスが、エリアレジスタ１４０で設定した内蔵不揮発性メモリ１２０のエリアに該当するか否かを判定し、該当すれば‘１’を、非該当ならば‘０’を一致信号Ｓ１５１に出力する。
【００３７】
データ無効化手段１６０は、一致信号Ｓ１５１が‘１’であれば、内蔵不揮発性メモリ１２０からＲＯＭバスＢ１０６に出力された読み出しデータを無効化し、データバスＢ１０２に何も出力しない。また、一致信号Ｓ１５１が‘０’であれば、内蔵不揮発性メモリ１２０からＲＯＭバスＢ１０６に出力された読み出しデータを、データバスＢ１０２に乗せ換えて出力する。
【００３８】
外部メモリ１８０は、プログラム及びデータが格納されており、リードイネーブル信号Ｓ１０４が‘１’であれば、アドレスバスＢ１０１のアドレスに該当するアドレスに格納されているプログラム及びデータをデータバスＢ１０２に出力する。
【００３９】
ＣＰＵ１１０は、アドレスバスＢ１０１に内蔵揮発性メモリ１２０に該当するアドレスを出力すると共に、リードイネーブル信号Ｓ１０４に‘１’を出力し、順次、内蔵不揮発性メモリ１２０に格納されているプログラムを、ＲＯＭバスＢ１０６、無効化手段１４０を介してデータバスＢ１０２から読み出し、解読した結果に従い各種制御を行う。また、内蔵不揮発性メモリ１２０から読み出したプログラムが、内蔵揮発性メモリ１３０又は外部メモリ１８０への分岐命令である場合には、アドレスバスＢ１０１に内蔵揮発性メモリ１３０又は外部メモリ１８０の該当するアドレスを出力すると共に、リードイネーブル信号Ｓ１０４に‘１’を出力し、内蔵揮発性メモリ１３０又は外部メモリ１８０に格納されているプログラムを、データバスＢ１０２から読み出し、解読した結果に従い各種制御を行う。
【００４０】
また、ＣＰＵ１１０は、ライトイネーブル信号Ｓ１０５に‘１’、アドレスバスＢ１０１に内蔵揮発性メモリ１３０に該当するアドレスを各々出力すると共に、データバスＢ１０２にデータを出力し、内蔵揮発性メモリ１３０に任意の値を書込むことができる。また、ＣＰＵ１１０は、データバスＢ１０２にデータを出力すると共にエリアレジスタライト信号Ｓ１０３に‘１’を出力し、エリアレジスタ１４０を任意の値に書き換えることができる。
【００４１】
以上のように構成された本発明の第１の実施形態による、内蔵不揮発性メモリ１２０に格納されたプログラム及びデータ読み出し保護動作について説明する。
【００４２】
内蔵不揮発性メモリ１２０を構成する各エリアのうち、不正ユーザに読み出されたくないプログラム及びデータを格納しているなど、読み出し保護の対象にしたいエリア（以下、保護エリアという）を、仮にエリア２として、マイクロコンピュータ１００の動作を図４を用いて説明する。図４は、マイクロコンピュータ１００の各メモリ領域に格納されたプログラムと、内蔵不揮発性メモリ１２０の読み出し保護状態をプログラムの実行順に説明する図である。
【００４３】
先ず、（Ａ）のプログラムスタート時、ＣＰＵ１１０は、アドレスバスＢ１０１に、内蔵不揮発性メモリ１２０に該当するアドレスを出力すると共に、リードイネーブル信号Ｓ１０４に‘１’を出力し、内蔵不揮発性メモリ１２０に格納されているプログラムを読み出そうとする。この時、エリアレジスタ１４０が格納するデータの初期値は‘０００’であるため、比較手段１５０は、エリア信号Ｓ１４１のデータ‘０００’から保護エリアに設定されているエリアがないと判断し、一致信号Ｓ１５１に‘０’を出力する。データ無効化手段１６０は、一致信号Ｓ１５１が‘０’であるため、内蔵不揮発性メモリ１２０からＲＯＭバスＢ１０６に出力されたプログラムを、データバスＢ１０２に乗せ換えて出力する。
【００４４】
このように、ＣＰＵ１１０は順次、内蔵不揮発性メモリ１２０の該当アドレスに格納されているプログラムを、ＲＯＭバスＢ１０６及びデータ無効化手段１６０を介してデータバスＢ１０２から読み出し、解読した結果に従い各種制御を行う。
【００４５】
次に、ＣＰＵ１１０が（Ｂ）のプログラムを読み出すと、ＣＰＵ１１０は、アドレスバスＢ１０１に、エリア２に該当するアドレスを出力すると共に、リードイネーブル信号Ｓ１０４に‘１’を出力する。エリアレジスタ１４０が格納するデータは初期値‘０００’のままであるため、比較手段１５０は、エリア信号Ｓ１４１のデータ‘０００’から保護エリアに設定されているエリアがないと判断し、一致信号Ｓ１５１に‘０’を出力する。データ無効化手段１６０は、一致信号Ｓ１５１が‘０’であるため、内蔵不揮発性メモリ１２０からＲＯＭバスＢ１０６に出力されたプログラム及びデータを、データバスＢ１０２に乗せ換えて出力する。
【００４６】
次に、ＣＰＵ１１０が（Ｃ）のプログラムを読み出すと、ＣＰＵ１１０は、次に実行するプログラム（Ｄ）が外部メモリ１８０に該当するアドレスへの分岐命令であるため、予めエリアレジスタ１４０にフラグを立ててエリア２を保護エリアに設定し、外部メモリ１８０に該当するアドレスに配置されたプログラムからエリア２に格納したプログラム及びデータが読み出されないようにするため、データバスＢ１０２にデータ‘１００’を出力すると共に、エリアレジスタライト信号Ｓ１０３に‘１’を出力する。エリアレジスタ１４０は、データ‘１００’を格納保持し、エリア信号Ｓ１４１にデータ‘１００’を出力する。これにより、エリア２が保護エリアに設定される。
【００４７】
次に、ＣＰＵ１１０が（Ｄ）のプログラムを読み出すと、ＣＰＵ１１０は、プログラムの読み出し先を外部メモリ１８０の該当アドレスへと変更し、アドレスバスＢ１０１に該当アドレスを出力すると共に、リードイネーブル信号Ｓ１０４に‘１’を出力し、順次、外部メモリ１８０の該当アドレスに格納されているプログラムをデータバスＢ１０２から読み出し、解読した結果に従い各種制御を行う。
【００４８】
次に、ＣＰＵ１１０が（Ｅ）のプログラムを読み出すと、ＣＰＵ１１０は、アドレスバスＢ１０１に、エリア１に該当するアドレスを出力すると共に、リードイネーブル信号Ｓ１０４に‘１’を出力する。比較手段１５０は、エリア信号Ｓ１４１のデータ‘１００’から保護エリアがエリア２であると判断し、且つ、アドレスバスＢ１０１のアドレスがエリア１に該当するため、比較手段１５０は一致信号Ｓ１５１に‘０’を出力する。
【００４９】
データ無効化手段１６０は、一致信号Ｓ１５１が‘０’であるため、内蔵不揮発性メモリ１２０からＲＯＭバスＢ１０６に出力されたプログラム及びデータを、データバスＢ１０２に乗せ換えて出力する。このように、内蔵不揮発性メモリ１２０の保護エリア以外に格納されたプログラム及びデータは、外部メモリ１８０に格納されたプログラムからでも利用することが可能である。
【００５０】
次に、ＣＰＵ１１０が（Ｆ）のプログラムを読み出すと、ＣＰＵ１１０は、プログラムの読み出し先を、内蔵不揮発性メモリ１２０の該当アドレスへと変更し、アドレスバスＢ１０１に該当アドレスを出力すると共に、リードイネーブル信号Ｓ１０４に‘１’を出力し、順次、内蔵不揮発性メモリ１２０の該当アドレスに格納されているプログラムを、ＲＯＭバスＢ１０６及びデータ無効化手段１６０を介してデータバスＢ１０２から読み出し、解読した結果に従い各種制御を行う。
【００５１】
次に、ＣＰＵ１１０が（Ｇ）のプログラムを読み出すと、ＣＰＵ１１０は、保護エリアを解除するために、データバスＢ１０２にデータ‘０００’を出力すると共に、エリアレジスタライト信号Ｓ１０３に‘１’を出力する。エリアレジスタ１４０は、データ‘０００’を格納保持し、エリア信号Ｓ１４１にデータ‘０００’を出力する。これにより、各エリアの読み出し保護は解除される。
【００５２】
次に、ＣＰＵ１１０が（Ｈ）のプログラムを読み出すと、ＣＰＵ１１０は、アドレスバスＢ１０１に、エリア２に該当するアドレスを出力すると共に、リードイネーブル信号Ｓ１０４に‘１’を出力する。比較手段１５０は、エリア信号Ｓ１４１のデータ‘０００’から保護エリアに設定されているエリアがないと判断し、一致信号Ｓ１５１に‘０’を出力する。データ無効化手段１６０は、一致信号Ｓ１５１が‘０’であるため、内蔵不揮発性メモリ１２０からＲＯＭバスＢ１０６に出力されたプログラム及びデータを、データバスＢ１０２に乗せ換えて出力する。
【００５３】
ここで、不正ユーザが外部メモリ１８０に格納されたプログラムを改変し、（Ｅ）のプログラムを、エリア２からデータ及びプログラムを読み出す記述にしたとする。この時のプログラム（Ａ）〜（Ｄ）のマイクロコンピュータ１００の動作は、前述した動作と同じである。
【００５４】
次に、ＣＰＵ１１０が、改変された（Ｅ）のプログラムを読み出すと、ＣＰＵ１１０は、アドレスバスＢ１０１に、エリア２に該当するアドレスを出力すると共に、リードイネーブル信号Ｓ１０４に‘１’を出力する。比較手段１５０は、エリア信号Ｓ１４１のデータ‘１００’から保護エリアがエリア２であると判断し、且つ、アドレスバスＢ１０１のアドレスがエリア２に該当するため、比較手段１５０は一致信号Ｓ１５１に‘１’を出力する。データ無効化手段１６０は、一致信号Ｓ１５１が‘１’であるため、内蔵不揮発性メモリ１２０からＲＯＭバスＢ１０６に出力されたプログラム及びデータを、データバスＢ１０２に出力しない。これにより、内蔵不揮発性メモリ１２０の保護エリアに格納されたプログラム及びデータは、データバスＢ１０２等から、マイクロコンピュータ１００の外部へ出力されることはない。
【００５５】
以上のように、マイクロコンピュータを、３個のメモリ領域で構成した内蔵不揮発性メモリ１２０と、内蔵不揮発性メモリ１２０のメモリ領域数と同数の３ビットのビット幅を持つエリアレジスタ１４０と、比較手段１５０と、データ無効化手段１６０とで構成し、なおかつ、外部メモリ１８０に該当するアドレスへ分岐する前に保護エリアを設定するプログラムを記述することで、保護エリアに設定したエリア以外の内蔵不揮発性メモリ１２０に格納されたプログラム及びデータを、外部メモリ１８０に該当するアドレスからでも必要に応じて読み出すことができつつ、不正ユーザが外部メモリ１８０を改変し、内蔵不揮発性メモリ１２０に格納されたプログラム及びデータを読み出そうと試みても、保護エリアに格納されたデータは読み出すことができず、セキュリティが向上する。
【００５６】
尚、前記説明において、外部メモリ１８０に該当するアドレスへ分岐する場合を例にとって説明したが、内蔵揮発性メモリ１３０に該当するアドレスへ分岐する場合も、同様にエリアレジスタ１４０で保護エリアを設定することで、不正ユーザが内蔵揮発性メモリ１３０にプログラムを転送、実行して、内蔵不揮発性メモリ１２０に格納されたプログラム及びデータを読み出そうと試みても、保護エリアに格納されたデータは読み出すことができず、セキュリティが向上する。
【００５７】
また、前記説明において、内蔵不揮発性メモリ１２０は均等容量の３個のメモリ領域で構成されているとしたが、内蔵不揮発性メモリ１２０はｎ個（ｎは１以上の整数）のメモリ領域で構成し、任意のアドレスマッピングであっても良いのは勿論である。
【００５８】
また、前記説明において、データ無効化手段１６０は、データ無効化の方法として、内蔵不揮発性メモリ１２０から読み出したプログラム及びデータをデータバスＢ１０２に何も出力しないとしたが、他に、リードイネーブル信号Ｓ１０４に‘１’を出力しない、アドレスバスＢ１０１に該当アドレスを与えない、データバスＢ１０２に任意のデータを出力するなどといった、該当するアドレスに格納されたプログラム及びデータが読み出されない構成であれば良い。
【００５９】
（実施形態２）
以下、本発明の第２の実施形態について、図５〜図６を参照して説明する。
【００６０】
図６は本発明の第２の実施形態に用いるアドレス空間を示す。同図において、メモリ空間５００はアドレスに応じて２つの領域に分割されており、アドレス００Ｈから７ＦＨまでのメモリ空間５１０、５２０は内蔵メモリ領域に該当し、アドレス８０ＨからＦＦＨまでのメモリ空間５３０は外部メモリ領域に該当するとする。８ビット幅のアドレスの最上位１ビットが、‘０’の領域が内蔵メモリ領域のアクセスを表し、内部空間であることを示す。８ビット幅のアドレスの最上位１ビットが、‘１’の領域が外部メモリ領域のアクセスを表し、外部空間であることを示す。
【００６１】
図５は本発明第２の実施形態で用いる言語処理系を示す。同図において、６００は再配置可能機械語プログラム、６１０は言語処理系、６２０は制御転移命令検出部、６３０は制御転移先空間判定部、６４０はデータ無効化手段を設定する命令挿入部、６５０は絶対機械語プログラム、６６０はライブラリである。
【００６２】
説明を簡単にするために、下記に示めすようであるとする。再配置機械語プログラム６００は、１０ビットの’０’と’１’のビットの集まりで表すとする。機械語は２ビットの処理内容を表すオペコードと、８ビットの処理対象データを表すオペランドで表すとする。オペコード’００’は制御転移命令を表し、オペコード’０１’はデータ転送命令を表す。オペコード’１０’、’１１’は前記制御転移命令、データ転送命令以外の命令であることを表すとする。
制御転移命令のオペランドは、図６に示すアドレスであるとし、オペランドに示されたアドレスに制御転移を行うものとする。データ転送命令のオペランドは８ビットのうち、４ビットは転送するデータ、４ビットは転送先アドレスを表すとする。言語処理系６１０に入力する再配置可能機械語プログラム６００は１つとする。
【００６３】
言語処理系６１０の出力は、再配置可能機械語プログラム６００とライブラリ６６０とを結合し、再配置可能な番地を絶対番地に変更した後の絶対機械語プログラム６５０であるとする。
【００６４】
制御転移命令検出部６２０は、入力された再配置機械語プログラム６００のオペコードが‘００’であることを検出する機能を備える。すなわち、制御転移命令検出部６２０は、再配置機械語プログラム６００が、制御転移命令であることを検出する機能を備える。
【００６５】
制御転移先空間判定部６３０は、制御転移命令検出部５２０において、制御転移命令であると検出された再配置機械語プログラム６００のオペランドのアドレスが、前記図６に示すように８ビット幅のアドレスの最上位１ビットが‘１’であるかを検出する機能を備える。すなわち、制御転移先空間判定部６３０は、再配置機械語プログラム６００が、制御転移命令であり、且つ外部メモリ領域への制御転移命令であることを検出する機能を備える。
【００６６】
本発明の第２の実施形態に用いるデータ無効化手段を設定する命令は、前記第１の実施形態におけるエリアレジスタ１４０に対して、表す内蔵空間へのアクセスを無効化する設定を行う命令とする。説明を簡単にするために、エリアレジスタ１４０のアドレスを‘１１１１’、エリアレジスタ１４０に内蔵空間へのアクセスを無効化する設定データを‘１１１１’とする。すなわち、本発明の第２の実施形態に用いるデータ無効化手段を設定する命令は、オペコード’０１’で、転送するデータ‘１１１１’、転送先アドレスを‘１１１１’であるとする。
【００６７】
データ無効化手段を設定する命令挿入部６４０は、制御転移命令検出部６２０において、制御転移命令であると検出され、且つ、制御転移先空間判定部６３０において、制御転移先アドレスが外部メモリ領域のアクセスであると検出された再配置機械語プログラム６００の前に、データ無効化手段を設定する命令を挿入する。
【００６８】
すなわち、本発明の第２の実施形態に用いるデータ無効化手段を設定する命令オペコード’０１’で、転送するデータ‘１１１１’、転送先アドレスを‘１１１１’を挿入するとする。
【００６９】
以上のように構成された本発明の第２の実施形態による、言語処理系の動作について説明する。
【００７０】
言語処理系６１０に入力する再配置可能機械語プログラム６００を‘００１００００００’とする。制御転移命令検出部６２０は、再配置可能機械語プログラム６００を読み込み、入力された再配置機械語プログラム６００のオペコードが‘００’であることを検出し、再配置機械語プログラム６００が、制御転移命令であることを検出する。引き続き、制御転移先空間判定部６３０は、再配置可能機械語プログラム６００を読み込み、再配置機械語プログラム６００のオペランドのアドレスが、８ビット幅のアドレスの最上位１ビットが‘１’であるかを検出し、再配置機械語プログラム６００が、制御転移命令で、且つ外部メモリ領域への制御転移命令であることを検出する。
【００７１】
引き続き、データ無効化手段を設定する命令挿入部６４０は、再配置可能機械語プログラム６００を読み込み、前記制御転移先空間判定部６３０において、再配置機械語プログラム６００が、制御転移命令で、且つ外部メモリ領域への制御転移命令であることを検出し、再配置機械語プログラム６００の前に、データ無効化手段を設定する命令‘０１１１１１１１１１’を挿入する。
【００７２】
以上のように、本発明の第２の実施形態によると、本発明の第１の実施形態の集積回路に使用するソフトウェアを容易に発生可能となり、開発期間が短縮する。
【００７３】
尚、説明を簡単にするために、再配置機械語プログラム６００は１０ビットであるとしたが、何ビットでもよい。言語処理系６１０に入力する再配置可能機械語プログラム６００は１つとしたが、幾つでもよい。
【００７４】
データ無効化手段を設定する命令挿入部６４０は、再配置機械語プログラム６００の直前にデータ無効化手段を設定する命令を挿入しているが、再配置機械語プログラム６００の前であればよい。
【００７５】
（実施形態３）
以下、本発明の第３の実施形態について、図７〜図８を参照して説明する。
【００７６】
説明を簡単にするために下記に示すようであるとする。図７は、本発明の第３の実施形態で用いる言語処理系を示す。７００は言語処理系、７０１は骨子になる原始プログラム、７０２は前処理系、７０３は原始プログラム、７０４はコンパイラ、７０５はアセンブリプログラム、７０６はアセンブラ、７０７は再配置可能機械コード、７０８はローダ・リンカ、７０９はライブラリ、７１０は絶対機械コードである。
【００７７】
言語処理系７００は、骨子になる原始プログラム７０１を入力とし、原始プログラム７０３を出力とする前処理系７０２と、原始プログラム７０３を入力とし、アセンブリプログラム７０５を出力とするコンパイラ７０４と、アセンブリプログラム７０５を入力とし再配置可能機械コード７０７を出力とするアセンブラ７０６と、再配置可能機械コード７０７とライブラリ７０９を入力とし絶対機械コード７１０を出力とするローダ・リンカ７０８とを備える。
【００７８】
図８は、本発明第３の実施形態で用いる図７における言語例を示す。同図において、７０１は骨子になる原始プログラム、９１１、９１２は、骨子になる原始プログラム７０１における前記第１の実施形態におけるアクセス無効化領域の開始を表すマクロと終了を表すマクロである。前処理系７０２は、骨子になる原始プログラム７０１におけるアクセス無効化領域の開始を表すマクロと終了を表すマクロ９１１、９１２を構文解析して、原始プログラム７０３に前記アクセス無効化領域の開始を表すマクロと終了を表すマクロ９１３、９１４を展開する機能を備える。
【００７９】
コンパイラ７０４は、原始プログラム７０３におけるアクセス無効化領域の開始を表すマクロと終了を表すマクロ９１３、９１４を構文解析して、アセンブリプログラム７０５に前記アクセス無効化領域の開始を表すマクロと終了を表すマクロ９１５、９１６を展開する機能を備える。アセンブラ７０６は、前記アセンブリプログラム７０５におけるアクセス無効化領域の開始を表すマクロと終了を表すマクロ９１５、９１６を構文解析して、再配置可能機械コード７０７に前記アクセス無効化領域の開始を表すマクロと終了を表すマクロ９１７、９１８を展開する機能を備える。
【００８０】
ローダ・リンカ７０８は、再配置可能機械コード７０７における前記アクセス無効化領域の開始を表すマクロと終了を表すマクロ９１７、９１８を構文解析して、前記アクセス無効化手段として無効化する設定データを算出し、前記アクセス無効化手段を設定する命令９１９を展開する機能を備える。
【００８１】
以上のように構成された本発明の実施形態３での言語処理系の動作について説明する。
【００８２】
前記アクセス無効化領域の開始を表すマクロと終了を表すマクロ８１１、８１２を含む骨子になる原始プログラム７０１を前処理系７０２に入力する。前処理系７０２は、構文解析して、原始プログラム７０３に前記アクセス無効化領域の開始を表すマクロと終了を表すマクロを展開する。前記アクセス無効化領域の開始を表すマクロと終了を表すマクロを含む原始プログラム７０３をコンパイラ７０４に入力する。
【００８３】
コンパイラ７０４は、構文解析して、アセンブリプログラム７０５に前記アクセス無効化領域の開始を表すマクロと終了を表すマクロを展開する。前記アクセス無効化領域の開始を表すマクロと終了を表すマクロを含むアセンブリプログラム７０５をアセンブラ７０６に入力する。
【００８４】
アセンブラ７０６は、構文解析して、再配置可能機械コード７０７に前記アクセス無効化領域の開始を表すマクロと終了を表すマクロを展開する。前記第アクセス無効化領域の開始を表すマクロと終了を表すマクロを含む再配置可能機械コード７０７をローダ・リンカ７０８に入力する。ローダ・リンカ７０８は、構文解析して、絶対機械コード７１０に前記クセス無効化手段として無効化する設定データを算出し、前記アクセス無効化手段を設定する命令を展開する。
【００８５】
以上のように、本実施形態３によると、本発明の第１の実施形態の集積回路に使用するソフトウェアを容易に発生可能となり、開発期間が短縮する。
【００８６】
（実施形態４）
以下、本発明の第４の実施形態について説明する。
【００８７】
説明を簡単にするために、下記に示すようであるとする。本発明の第４の実施形態に用いる情報処理装置は、制御転移命令の引数として、外部空間アドレスとエリアレジスタ１４０に設定するアクセス無効化情報とを備える制御転移命令を備えることを特徴とする情報処理装置である。
【００８８】
本発明の第４の実施形態に用いる制御転移命令を用いると、
（１）エリアレジスタ１４０に設定するアクセス無効化情報をエリアレジスタ１４０に設定
（２）制御転移命令の引数に示された外部空間アドレスに転移
という２つの動作を１命令で表すことが可能となる。
【００８９】
前記第１の実施形態のマイクロコンピュータに使用するアクセス無効化手段として、
（１）エリアレジスタ１４０にアクセス無効化情報を設定する命令
（２）制御転移命令の引数に示された外部空間アドレスに転移する命令
と複数命令で実現されてきたが、以上のように、本発明第４の実施形態によると、２つの動作が１つの命令で実現でき、命令コードサイズを削減することが可能となる。
【００９０】
（実施形態５）
以下、本発明の第５の実施形態について、図２〜図３、図６、図９〜図１１を参照して説明する。
【００９１】
図９は本発明のマイクロコンピュータのブロック図である。同図では、図１と同一名称のものは、異なる符号を付しているが、同一構成であるので、その説明を省略する。図９において、マイクロコンピュータ１０００は、ＣＰＵ１０１０と、内部不揮発性メモリ１０２０と、内部揮発性メモリ１０３０と、エリアレジスタ１０４０と、比較手段１０５０と、データ無効化手段１０６０と、二入力一出力のアンドゲート１０７０とによって構成されている。また、前記ＣＰＵ１０１０は内部に空間判定手段（判定手段）１０１１を備えている。１０８０は前記マイクロコンピュータ１０００の外部に接続される外部メモリである。
【００９２】
アドレスバスＢ１００１は、ＣＰＵ１０１０と、内蔵不揮発性メモリ１０２０と、内蔵揮発性メモリ１０３０と、比較手段１０５０と、外部メモリ１０８０とを各々接続する。ここでは説明を簡単にするため、８ビットバス幅とする。データバスＢ１００２は、ＣＰＵ１０１０と、内蔵揮発性メモリ１０３０と、エリアレジスタ１０４０と、データ無効化手段１０６０と、外部メモリ１０８０とを各々接続する。ここでは説明を簡単にするため、４ビットバス幅とする。
【００９３】
また、エリアレジスタライト信号Ｓ１００３は、ＣＰＵ１０１０と、エリアレジスタ１０４０とを接続する。リードイネーブル信号Ｓ１００４は、ＣＰＵ１０１０と、内蔵不揮発性メモリ１０２０と、内蔵揮発性メモリ１０３０と、外部メモリ１０８０とを各々接続する。ライトイネーブル信号Ｓ１００５は、ＣＰＵ１０１０と、内蔵揮発性メモリ１０３０とを接続する。ＲＯＭバスＢ１００６は、内蔵不揮発性メモリ１０２０と、データ無効化手段１０６０とを接続する。空間信号Ｓ１００７は、ＣＰＵ１０１０と、アンドゲート１０７０とを接続する。エリア信号Ｓ１０４１は、エリアレジスタ１０４０と、比較手段１０５０とを接続する。一致信号Ｓ１０５１は、比較手段１０５０と、アンドゲート１０７０とを接続する。無効化信号Ｓ１０７１は、アンドゲート１０７０と、データ無効化手段１０６０とを接続する。
【００９４】
内蔵不揮発性メモリ１０２０は、実施形態１で説明した通り、プログラム及びデータを格納しており、リードイネーブル信号Ｓ１００４が‘１’であれば、アドレスバスＢ１００１のアドレスに該当するメモリ領域に格納されているプログラム及びデータをＲＯＭバスＢ１００６に出力する。また、内蔵不揮発性メモリ１０２０は、アドレスに応じてｎ個のエリアに分割されている。ここでは説明を簡単にするため、３個のエリアに分割されているものとする。
【００９５】
以下、実施形態１と共通する構成について、別の実施形態であるので、再度説明する。図２は、内蔵不揮発性メモリ１０２０のメモリ領域とアドレスの関係を示す図である。図２で、内蔵不揮発性メモリ１０２０のメモリ領域は、３つのエリアに分割されており、エリア０はアドレス００Ｈから１ＦＨまで、エリア１はアドレス２０Ｈから３ＦＨまで、エリア２はアドレス４０Ｈから５ＦＨまでとする。すなわち、エリア０は８ビット幅のアドレスバスＢ１００１の上位３ビットが‘０００’の領域、同様にエリア１は上位３ビットが‘００１’、エリア２は上位３ビットが‘０１０’の領域となる。
【００９６】
内蔵揮発性メモリ１０３０は、プログラム及びデータを格納保持する。リードイネーブル信号Ｓ１００４が‘１’であれば、アドレスバスＢ１００１のアドレスに該当するメモリ領域に格納されているプログラム及びデータを、データバスＢ１００２に出力する。また、内蔵揮発性メモリ１０３０は、ライトイネーブル信号Ｓ１００５が‘１’ならば、データバスＢ１００２のプログラム及びデータを、アドレスバスＢ１００１のアドレスに該当するメモリ領域に格納保持する。
【００９７】
エリアレジスタ１０４０は、エリアレジスタライト信号Ｓ１００３が‘１’であれば、データバスＢ１００２のデータを格納保持し、保持したデータをエリア信号Ｓ１０４１に出力する。また、エリアレジスタ１０４０は、内蔵不揮発性メモリ１０２０のメモリ領域の個数と同数のビット幅を有しており、各ビットを最上位ビットから各々エリアフラグ２、エリアフラグ１、エリアフラグ０という。また、ここでは説明を簡単にするため、ビット幅を３ビットとし、初期値を‘０００’とする。
【００９８】
エリアレジスタ１０４０の各ビットは、内蔵不揮発性メモリ１０２０のメモリ領域を構成する各エリアと、各々１対１で対応しており、各ビットがセットされれば、そのビットに対応したエリアは、読み出し保護の対象エリアとなる。例えば、エリアフラグ１がセットされた時はエリア１が読み出し保護の対象エリアとなり、読み出し時に、比較手段１０５０にてアドレスの比較判定が行われる。
【００９９】
比較手段１０５０は、アドレスバスＢ１００１のアドレスが、エリアレジスタ１０４０で設定したエリアに該当するか否かを判定し、判定結果を一致信号Ｓ１０５１に出力する。ここで、比較手段１０５０の比較機能を、図３を用いて説明する。図３は、比較手段１０５０の比較機能を説明する図である。図３は左から、エリアレジスタ１０４０のエリアフラグ２の値、エリアフラグ１の値、エリアフラグ０の値、アドレスバスＢ１００１のビット７の値、ビット６の値、５の値、ビット４の値、一致信号Ｓ１０５１の値である。
【０１００】
例えば、エリアレジスタ１０４０が出力するエリア信号Ｓ１０４１のデータが‘１００’、アドレスバスＢ１００１のアドレスが‘５２Ｈ’ならば、アドレスの上位４ビットが‘０１０１’であるため、比較手段１０５０が出力する一致信号Ｓ１０５１は‘１’となる。また、エリアレジスタ１０４０が出力するエリア信号Ｓ１０４１のデータが‘１００’、アドレスバスＢ１００１のアドレスが‘３２Ｈ’ならば、アドレスの上位４ビットが‘００１１’であるため、一致信号Ｓ１０５１は‘０’となる。このようにして、比較手段１０５０は、アドレスバスＢ１００１のアドレスが、エリアレジスタ１０４０で設定した内蔵不揮発性メモリ１０２０のエリアに該当するか否かを判定し、該当すれば‘１’を、非該当ならば‘０’を一致信号Ｓ１０５１に出力する。
【０１０１】
そして、本実施形態の特徴として、アンドゲート１０７０は、比較手段１０５０が出力する一致信号Ｓ１０５１と、後述する空間判定手段１０１１が出力する空間信号Ｓ１００７との論理積を無効化信号Ｓ１０７１として出力する。すなわち、アンドゲート１０７０は、空間信号Ｓ１００７が‘０’の時に、無効化信号Ｓ１０７１に‘０’を出力し、一致信号Ｓ１０５１の値を無効化する。
【０１０２】
データ無効化手段１０６０は、無効化信号Ｓ１０７１が‘１’であれば、内蔵不揮発性メモリ１０２０からＲＯＭバスＢ１００６に出力された読み出しデータを無効化し、データバスＢ１００２に何も出力しない。また、無効化信号Ｓ１０７１が‘０’であれば、内蔵不揮発性メモリ１０２０からＲＯＭバスＢ１００６に出力された読み出しデータを、データバスＢ１００２に乗せ換えて出力する。
【０１０３】
外部メモリ１０８０は、プログラム及びデータが格納されており、リードイネーブル信号Ｓ１００４が‘１’であれば、アドレスバスＢ１００１のアドレスに該当するアドレスに格納されているプログラム及びデータをデータバスＢ１００２に出力する。
【０１０４】
ＣＰＵ１０１０は、空間判定手段１０１１を備えており、空間判定手段１０１１は、ＣＰＵ１０１０が現在実行中のプログラムが、どのメモリ空間に格納されているかを判定し、判定結果を空間信号Ｓ１００７に出力する。
【０１０５】
ここで、マイクロコンピュータ１０００のメモリ空間について、図６を用いて説明する。図６で、マイクロコンピュータ１０００のメモリ空間はアドレスに応じて３つの領域に分割されており、アドレス００Ｈから５ＦＨまでは図２で示される内蔵不揮発性メモリ１０２０に該当し、同様に、アドレス６０Ｈから７ＦＨまでは内蔵揮発性メモリ１０３０、アドレス１００ＨからＦＦＨまでは外部メモリ１０８０に該当する。すなわち、内蔵不揮発性メモリ１０２０は、８ビット幅のアドレスバスＢ１００１の上位３ビットが‘０００’又は‘００１’又は‘０１０’の領域、同様に内蔵揮発性メモリ１０３０は上位３ビットが‘０１１’、外部メモリ１０８０は、最上位ビットが‘１’の領域となる。
【０１０６】
以上のようなメモリ空間に対する、空間判定手段１０１１の空間判定機能を、図１０を用いて説明する。図１０は空間判定手段１０１１の空間判定機能を説明する図である。図１０は左から、ＣＰＵ１０１０が現在実行しているプログラムが格納されているアドレス（以下、実行アドレスという）のビット７の値、ビット６の値、ビット５の値、ビット４の値、該当するメモリ、空間信号Ｓ１００７の値である。例えば、実行アドレスが‘５２Ｈ’ならば、実行アドレスの上位４ビットが‘０１０１’であるため、空間判定手段１０１１が出力する空間信号Ｓ１００７は‘０’となる。また、実行アドレスが‘９２Ｈ’ならば、実行アドレスの上位４ビットが‘１０００’であるため、空間信号Ｓ１００７は‘１’となる。このようにして、空間判定手段１０１１は、実行アドレスが、マイクロコンピュータ１０００のどのメモリのアドレスに該当するか判定し、内蔵不揮発性メモリ１０２０のアドレスに該当すれば‘０’を、非該当ならば‘１’を空間信号Ｓ１００７に出力する。
【０１０７】
また、ＣＰＵ１０１０は、アドレスバスＢ１００１に内蔵不揮発性メモリ１０２０に該当するアドレスを出力すると共に、リードイネーブル信号Ｓ１００４に‘１’を出力し、順次、内蔵不揮発性メモリ１０２０に格納されているプログラムを、ＲＯＭバスＢ１００６、無効化手段１０４０を介してデータバスＢ１００２から読み出し、解読した結果に従い各種制御を行う。また、内蔵不揮発性メモリ１０２０から読み出したプログラムが、内蔵揮発性メモリ１０３０又は外部メモリ１０８０への分岐命令である場合には、アドレスバスＢ１００１に内蔵揮発性メモリ１０３０又は外部メモリ１０８０の該当するアドレスを出力すると共に、リードイネーブル信号Ｓ１００４に‘１’を出力し、内蔵揮発性メモリ１０３０又は外部メモリ１０８０に格納されているプログラムを、データバスＢ１００２から読み出し、解読した結果に従い各種制御を行う。
【０１０８】
また、ＣＰＵ１０１０は、ライトイネーブル信号Ｓ１００５に‘１’、アドレスバスＢ１００１に内蔵揮発性メモリ１０３０に該当するアドレスを各々出力すると共に、データバスＢ１００２にデータを出力し、内蔵揮発性メモリ１０３０に任意の値を書込むことができる。また、ＣＰＵ１０１０は、データバスＢ１００２にデータを出力すると共にエリアレジスタライト信号Ｓ１００３に‘１’を出力し、エリアレジスタ１０４０を任意の値に書き換えることができる。
【０１０９】
以上のように構成された本発明の第５の実施形態における内蔵不揮発性メモリ１０２０に格納されたプログラム及びデータ読み出し保護動作について説明する。
【０１１０】
内蔵不揮発性メモリ１０２０を構成する各エリアのうち、不正ユーザに読み出されたくないプログラム及びデータを格納しているなど、読み出し保護の対象にしたいエリア（以下、保護エリアという）を、仮にエリア２として、マイクロコンピュータ１０００の動作を図１１を用いて説明する。図１１は、マイクロコンピュータ１０００の各メモリ領域に格納されたプログラムと、内蔵不揮発性メモリ１０２０の読み出し保護状態をプログラムの実行順に説明する図である。
【０１１１】
先ず、（Ａ）のプログラムスタート時、ＣＰＵ１０１０は、アドレスバスＢ１００１に、内蔵不揮発性メモリ１０２０に該当するアドレスを出力すると共に、リードイネーブル信号Ｓ１００４に‘１’を出力し、内蔵不揮発性メモリ１０２０に格納されているプログラムを読み出そうとする。この時、空間判定手段１０１１は、ＣＰＵ１０１０が内蔵不揮発性メモリ１０２０に該当するアドレスのプログラムを実行中であるため、空間信号Ｓ１００７に‘０’を出力する。また、エリアレジスタ１０４０が格納するデータの初期値は‘０００’であるため、比較手段１０５０は、エリア信号Ｓ１０４１のデータ‘０００’から保護エリアに設定されているエリアがないと判断し、一致信号Ｓ１０５１に‘０’を出力する。アンドゲート１０７１は、空間信号Ｓ１００７が‘０’、一致信号Ｓ１０５１が‘０’であるため、無効化信号Ｓ１０７１に‘０’を出力する。データ無効化手段１０６０は、無効化信号Ｓ１０７１が‘０’であるため、内蔵不揮発性メモリ１０２０からＲＯＭバスＢ１００６に出力されたプログラムを、データバスＢ１００２に乗せ換えて出力する。
【０１１２】
このように、ＣＰＵ１０１０は順次、内蔵不揮発性メモリ１０２０の該当アドレスに格納されているプログラムを、ＲＯＭバスＢ１００６及びデータ無効化手段１０６０を介してデータバスＢ１００２から読み出し、解読した結果に従い各種制御を行う。
【０１１３】
次に、ＣＰＵ１０１０が（Ｂ）のプログラムを読み出すと、ＣＰＵ１０１０は、エリア２を保護エリアに設定するように、データバスＢ１００２にデータ‘１００’を出力すると共に、エリアレジスタライト信号Ｓ１００３に‘１’を出力する。エリアレジスタ１０４０は、データ‘１００’を格納保持し、エリア信号Ｓ１０４１にデータ‘１００’を出力する。これにより、エリア２が保護エリアに設定される。
【０１１４】
次に、ＣＰＵ１０１０が（Ｃ）のプログラムを読み出すと、ＣＰＵ１０１０は、アドレスバスＢ１００１に、エリア２に該当するアドレスを出力すると共に、リードイネーブル信号Ｓ１００４に‘１’を出力する。プログラム（Ｃ）は内蔵不揮発性メモリ１０２０に配置されているので、空間判定手段１０１１は、空間信号Ｓ１００７に‘０’を出力する。比較手段１０５０は、エリア信号Ｓ１０４１のデータ‘１００’から保護エリアがエリア２であると判断し、且つ、アドレスバスＢ１００１のアドレスがエリア２に該当するため、比較手段１０５０は一致信号Ｓ１０５１に‘１’を出力する。アンドゲート１０７１は、空間信号Ｓ１００７が‘０’、一致信号が‘１’であるため、無効化信号Ｓ１０７１に‘０’を出力する。データ無効化手段１０６０は、無効化手段Ｓ１０７１が‘０’であるため、内蔵不揮発性メモリ１０２０からＲＯＭバスＢ１００６に出力されたプログラム及びデータを、データバスＢ１００２に乗せ換えて出力する。このように、エリアレジスタ１０４０で保護エリアを設定していても、内蔵不揮発性メモリ１０２０に格納されたプログラムを実行している限り、空間信号Ｓ１００７が‘０’であるために、一致信号Ｓ１０５１は無効化され、内蔵不揮発性メモリ１０２０の保護エリアに格納されたプログラム及びデータを利用することが可能である。
【０１１５】
次に、ＣＰＵ１０１０が（Ｄ）のプログラムを読み出すと、ＣＰＵ１０１０は、プログラムの読み出し先を外部メモリ１０８０の該当アドレスへと変更し、アドレスバスＢ１００１に該当アドレスを出力すると共に、リードイネーブル信号Ｓ１００４に‘１’を出力し、順次、外部メモリ１０８０の該当アドレスに格納されているプログラムをデータバスＢ１００２から読み出し、解読した結果に従い各種制御を行う。
【０１１６】
次に、ＣＰＵ１０１０が（Ｅ）のプログラムを読み出すと、ＣＰＵ１０１０は、アドレスバスＢ１００１に、エリア１に該当するアドレスを出力すると共に、リードイネーブル信号Ｓ１００４に‘１’を出力する。プログラム（Ｅ）は外部メモリ１０８０に配置されているので、空間判定手段１０１１は、空間信号Ｓ１００７に‘１’を出力する。比較手段１０５０は、エリア信号Ｓ１０４１のデータ‘１００’から保護エリアがエリア２であると判断し、且つ、アドレスバスＢ１００１のアドレスがエリア１に該当するため、比較手段１０５０は一致信号Ｓ１０５１に‘０’を出力する。アンドゲート１０７１は、空間信号Ｓ１００７が‘１’、一致信号が‘０’であるため、無効化信号Ｓ１０７１に‘０’を出力する。
【０１１７】
データ無効化手段１０６０は、無効化信号Ｓ１０７１が‘０’であるため、内蔵不揮発性メモリ１０２０からＲＯＭバスＢ１００６に出力されたプログラム及びデータを、データバスＢ１００２に乗せ換えて出力する。このように、内蔵不揮発性メモリ１０２０の保護エリア以外に格納されたプログラム及びデータは、外部メモリ１０８０に格納されたプログラムからでも利用することが可能である。
【０１１８】
次に、ＣＰＵ１０１０が（Ｆ）のプログラムを読み出すと、ＣＰＵ１０１０は、プログラムの読み出し先を、内蔵不揮発性メモリ１０２０の該当アドレスへと変更し、アドレスバスＢ１００１に該当アドレスを出力すると共に、リードイネーブル信号Ｓ１００４に‘１’を出力し、順次、内蔵不揮発性メモリ１０２０の該当アドレスに格納されているプログラムを、ＲＯＭバスＢ１００６及びデータ無効化手段１０６０を介してデータバスＢ１００２から読み出し、解読した結果に従い各種制御を行う。
【０１１９】
次に、ＣＰＵ１０１０が（Ｇ）のプログラムを読み出すと、ＣＰＵ１０１０は、アドレスバスＢ１００１に、エリア２に該当するアドレスを出力すると共に、リードイネーブル信号Ｓ１００４に‘１’を出力する。プログラム（Ｇ）は内蔵不揮発性メモリ１０２０に配置されているので、空間判定手段１０１１は、空間信号Ｓ１００７に‘０’を出力する。比較手段１０５０は、エリア信号Ｓ１０４１のデータ‘１００’から保護エリアがエリア２であると判断し、且つ、アドレスバスＢ１００１のアドレスがエリア２に該当するため、比較手段１０５０は一致信号Ｓ１０５１に‘１’を出力する。アンドゲート１０７１は、空間信号Ｓ１００７が‘０’、一致信号が‘１’であるため、無効化信号Ｓ１０７１に‘０’を出力する。データ無効化手段１０６０は、無効化手段Ｓ１０７１が‘０’であるため、内蔵不揮発性メモリ１０２０からＲＯＭバスＢ１００６に出力されたプログラム及びデータを、データバスＢ１００２に乗せ換えて出力する。
【０１２０】
ここで、不正ユーザが外部メモリ１０８０に格納されたプログラムを改変し、（Ｅ）のプログラムを、エリア２からデータ及びプログラムを読み出す記述にしたとする。この時のプログラム（Ａ）〜（Ｄ）のマイクロコンピュータ１０００の動作は、前述した動作と同じである。
【０１２１】
次に、ＣＰＵ１０１０が、改変された（Ｅ）のプログラムを読み出すと、ＣＰＵ１０１０は、アドレスバスＢ１００１に、エリア２に該当するアドレスを出力すると共に、リードイネーブル信号Ｓ１００４に‘１’を出力する。改変されたプログラム（Ｅ）は外部メモリ１０８０に配置されているので、空間判定手段１０１１は、空間信号Ｓ１００７に‘１’を出力する。比較手段１０５０は、エリア信号Ｓ１０４１のデータ‘１００’から保護エリアがエリア２であると判断し、且つ、アドレスバスＢ１００１のアドレスがエリア２に該当するため、比較手段１０５０は一致信号Ｓ１０５１に‘１’を出力する。アンドゲート１０７１は、空間信号Ｓ１００７が‘１’、一致信号が‘１’であるため、無効化信号Ｓ１０７１に‘１’を出力する。
【０１２２】
データ無効化手段１０６０は、無効化信号Ｓ１０７１が‘１’であるため、内蔵不揮発性メモリ１０２０からＲＯＭバスＢ１００６に出力されたプログラム及びデータを、データバスＢ１００２に出力しない。
【０１２３】
このように、外部メモリ１０８０に格納されたプログラムを実行している限り、空間信号Ｓ１００７が‘１’を出力して一致信号Ｓ１０５１を有効にするため、内蔵不揮発性メモリ１０２０の保護エリアに格納されたプログラム及びデータは、データバスＢ１００２等から、マイクロコンピュータ１０００の外部へ出力されることはない。
【０１２４】
以上のように、マイクロコンピュータを、空間判定手段１０１１を備えたＣＰＵ１０１０と、３個のメモリ領域で構成した内蔵不揮発性メモリ１０２０と、内蔵不揮発性メモリ１０２０のメモリ領域数と同数の３ビットのビット幅を持つエリアレジスタ１０４０と、比較手段１０５０と、データ無効化手段１０６０と、アンドゲート１０７０とで構成し、なおかつ、保護エリアを設定するプログラムを記述することで、保護エリアに設定したエリア以外の内蔵不揮発性メモリ１０２０に格納されたプログラム及びデータを、外部メモリ１０８０に該当するアドレスからでも必要に応じて読み出すことができつつ、不正ユーザが外部メモリ１０８０を改変し、内蔵不揮発性メモリ１０２０に格納されたプログラム及びデータを読み出そうと試みても、保護エリアに格納されたデータは読み出すことができず、セキュリティが向上する。
【０１２５】
また、保護エリアを一度設定すれば、外部メモリ１０８０に該当するアドレスへ分岐する前に保護エリアの設定をその都度行うことなく読み出し保護を実現することが可能であり、ＣＰＵ１０１０が内蔵不揮発性メモリ１０２０に該当するアドレスに格納されたプログラムで実行している限りは、空間判定手段１０１１が出力する空間信号Ｓ１００７によって一致信号Ｓ１０５１を無効化することにより、保護エリアを解除することなく、保護エリアに設定した内蔵不揮発性メモリ１０２０に格納されたプログラム及びデータを必要に応じて読み出すことができる。
【０１２６】
尚、前記説明において、外部メモリ１０８０に該当するアドレスへ分岐する場合を例にとって説明したが、エリアレジスタ１０４０で保護エリアを設定することで、内蔵揮発性メモリ１０３０に該当するアドレスへ分岐する場合も、不正ユーザが内蔵揮発性メモリ１０３０に、プログラムを転送、実行して、内蔵不揮発性メモリ１０２０に格納されたプログラム及びデータを読み出そうと試みても、保護エリアに格納されたデータは読み出すことができず、セキュリティが向上する。
【０１２７】
また、前記説明において、内蔵不揮発性メモリ１０２０は均等容量の３個のメモリ領域で構成されているとしたが、内蔵不揮発性メモリ１０２０はｎ個（ｎは１以上の整数）のメモリ領域で構成し、任意のアドレスマッピングであっても、本発明を実施することが可能である。
【０１２８】
更に、前記説明において、データ無効化手段１０６０は、データ無効化の方法として、内蔵不揮発性メモリ１０２０から読み出したプログラム及びデータをデータバスＢ１００２に何も出力しないとしたが、リードイネーブル信号Ｓ１００４に‘１’を出力しない、アドレスバスＢ１００１に該当アドレスを与えない、データバスＢ１００２に任意のデータを出力するなどといった、該当するアドレスに格納されたプログラム及びデータが読み出されない構成であれば良い。
【０１２９】
また、前記説明において、空間判定手段１０１１をＣＰＵ１０１０が備えるとしたが、ＣＰＵ１０１０が実行している、保護エリアに格納されたプログラム及びデータを読み出すプログラムが格納されたメモリ領域を判定できる判定手段があれば、ＣＰＵ１０１０が備えなくても良い。
【０１３０】
（実施形態６）
以下、本発明の第６の実施形態について、図２〜図３、図１２〜図１３を参照して説明する。
【０１３１】
図１２は本発明のマイクロコンピュータのブロック図である。同図では、図１と同一名称のものは、異なる符号を付しているが、同一構成であるので、その説明を省略する。図１２において、マイクロコンピュータ１１００は、ＣＰＵ１１１０と、内部不揮発性メモリ１１２０と、内部揮発性メモリ１１３０と、エリアレジスタ１１４０と、比較手段１１５０と、データ無効化手段１１６０と、二入力一出力のアンドゲート１１７０と、キーコード比較手段（認証手段）１１９０とによって構成されている。また、１１８０は、マイクロコンピュータ１１００の外部に接続される外部メモリである。
【０１３２】
アドレスバスＢ１１０１は、ＣＰＵ１１１０と、内蔵不揮発性メモリ１１２０と、内蔵揮発性メモリ１１３０と、比較手段１１５０と、外部メモリ１１８０とを各々接続する。ここでは説明を簡単にするため、８ビットバス幅とする。
【０１３３】
データバスＢ１１０２は、ＣＰＵ１１１０と、内蔵揮発性メモリ１１３０と、エリアレジスタ１１４０と、データ無効化手段１１６０と、キーコード比較手段１１９０と、外部メモリ１１８０とを各々接続する。ここでは説明を簡単にするため、４ビットバス幅とする。エリアレジスタライト信号Ｓ１１０３は、ＣＰＵ１１１０と、アンドゲート１１７０とを接続する。リードイネーブル信号Ｓ１１０４は、ＣＰＵ１１１０と、内蔵不揮発性メモリ１１２０と、内蔵揮発性メモリ１１３０と、外部メモリ１１８０とを各々接続する。ライトイネーブル信号Ｓ１１０５は、ＣＰＵ１１１０と、内蔵揮発性メモリ１１３０とを接続する。ＲＯＭバスＢ１１０６は、内蔵不揮発性メモリ１１２０と、データ無効化手段１１６０とを接続する。キーコード比較信号Ｓ１１０９は、ＣＰＵ１１１０と、キーコード比較手段１１９０とを接続する。キーコード一致信号Ｓ１１９１は、キーコード比較手段１１９０と、アンドゲート１１７０とを接続する。書換え許可信号Ｓ１１７１は、アンドゲート１１７０と、エリアレジスタ１１４０とを接続する。エリア信号Ｓ１１４１は、エリアレジスタ１１４０と、比較手段１１５０とを接続する。一致信号Ｓ１１５１は、比較手段１１５０と、データ無効化手段１１６０とを接続する。
【０１３４】
内蔵不揮発性メモリ１１２０は、プログラム及びデータを格納しており、リードイネーブル信号Ｓ１１０４が‘１’であれば、アドレスバスＢ１１０１のアドレスに該当するメモリ領域に格納されているプログラム及びデータをＲＯＭバスＢ１１０６に出力する。また、内蔵不揮発性メモリ１１２０は、アドレスに応じてｎ個のエリアに分割されている。ここでは説明を簡単にするため、３個のエリアに分割されているものとする。
【０１３５】
図２は、内蔵不揮発性メモリ１１２０のメモリ領域とアドレスの関係を示す図である。図２において、内蔵不揮発性メモリ１１２０のメモリ領域は、３つのエリアに分割されており、エリア０はアドレス００Ｈから１ＦＨまで、エリア１はアドレス２０Ｈから３ＦＨまで、エリア２はアドレス４０Ｈから５ＦＨまでとする。すなわち、エリア０は８ビット幅のアドレスバスＢ１１０１の上位３ビットが‘０００’の領域、同様にエリア１は上位３ビットが‘００１’、エリア２は上位３ビットが‘０１０’の領域となる。
【０１３６】
内蔵揮発性メモリ１１３０は、プログラム及びデータを格納保持する。リードイネーブル信号Ｓ１１０４が‘１’であれば、アドレスバスＢ１１０１のアドレスに該当するメモリ領域に格納されているプログラム及びデータを、データバスＢ１１０２に出力する。また、内蔵揮発性メモリ１１３０は、ライトイネーブル信号Ｓ１１０５が‘１’ならば、データバスＢ１１０２のプログラム及びデータを、アドレスバスＢ１１０１のアドレスに該当するメモリ領域に格納、保持する。
【０１３７】
キーコード比較手段１１９０は、ＣＰＵ１１１０が出力するキーコード比較信号Ｓ１１０９が‘１’であれば、データバスＢ１１０２のデータを格納保持する。また、格納したデータと、キーコード比較手段１１９０が予め格納しているキーコードとを比較し、一致すれば‘１’、不一致ならば‘０’を、キーコード一致信号Ｓ１１９１に出力する。ここでは説明を簡単にするため、キーコードを‘１０１０’とし、初期状態では、キーコードとの比較は一致とする。
【０１３８】
アンドゲート１１７０は、キーコード比較手段１１９０が出力するキーコード一致信号Ｓ１１９１と、ＣＰＵ１１１０が出力するエリアレジスタライト信号Ｓ１１０３との論理積を、書換え許可信号Ｓ１１７１に出力する。すなわち、アンドゲート１１７０は、キーコード比較が一致し、ＣＰＵ１１１０がエリアレジスタライト信号Ｓ１１０３に‘１’を出力した時に、書換え許可信号Ｓ１１７１に‘１’を出力する。
【０１３９】
エリアレジスタ１１４０は、書換え許可信号Ｓ１１７１が‘１’であれば、データバスＢ１１０２のデータを格納保持し、保持したデータをエリア信号Ｓ１１４１に出力する。また、エリアレジスタ１１４０は、内蔵不揮発性メモリ１１２０のメモリ領域の個数と同数のビット幅を有しており、各ビットを最上位ビットから各々エリアフラグ２、エリアフラグ１、エリアフラグ０という。また、ここでは説明を簡単にするため、ビット幅を３ビットとし、初期値を‘０００’とする。
【０１４０】
エリアレジスタ１１４０の各ビットは、内蔵不揮発性メモリ１１２０のメモリ領域を構成する各エリアと、各々１対１で対応しており、各ビットがセットされれば、そのビットに対応したエリアは、読み出し保護の対象エリアとなる。例えば、エリアフラグ１がセットされた時はエリア１が読み出し保護の対象エリアとなり、読み出し時に、比較手段１１５０にてアドレスの比較判定が行われる。
【０１４１】
比較手段１１５０は、アドレスバスＢ１１０１のアドレスが、エリアレジスタ１１４０で設定したエリアに該当するか否かを判定し、判定結果を一致信号Ｓ１１５１に出力する。ここで、比較手段１１５０の比較機能を、図３を用いて説明する。図３は、比較手段１１５０の比較機能を説明する図である。図３は左から、エリアレジスタ１１４０のエリアフラグ２の値、エリアフラグ１の値、エリアフラグ０の値、アドレスバスＢ１１０１のビット７の値、ビット６の値、５の値、ビット４の値、一致信号Ｓ１１５１の値である。
【０１４２】
例えば、エリアレジスタ１１４０が出力するエリア信号Ｓ１１４１のデータが‘１００’、アドレスバスＢ１１０１のアドレスが‘５２Ｈ’ならば、アドレスの上位４ビットが‘０１０１’であるため、比較手段１１５０が出力する一致信号Ｓ１１５１は‘１’となる。また、エリアレジスタ１１４０が出力するエリア信号Ｓ１１４１のデータが‘１００’、アドレスバスＢ１１０１のアドレスが‘３２Ｈ’ならば、アドレスの上位４ビットが‘００１１’であるため、一致信号Ｓ１１５１は‘０’となる。このようにして、比較手段１１５０は、アドレスバスＢ１１０１のアドレスが、エリアレジスタ１１４０で設定した内蔵不揮発性メモリ１１２０のエリアに該当するか否かを判定し、該当すれば‘１’を、非該当ならば‘０’を一致信号Ｓ１１５１に出力する。
【０１４３】
データ無効化手段１１６０は、一致信号Ｓ１１５１が‘１’であれば、内蔵不揮発性メモリ１１２０からＲＯＭバスＢ１１０６に出力された読み出しデータを無効化し、データバスＢ１１０２に何も出力しない。また、一致信号Ｓ１１５１が‘０’であれば、内蔵不揮発性メモリ１１２０からＲＯＭバスＢ１１０６に出力された読み出しデータを、データバスＢ１１０２に乗せ換えて、出力する。
【０１４４】
外部メモリ１１８０は、プログラム及びデータが格納されており、リードイネーブル信号Ｓ１１０４が‘１’であれば、アドレスバスＢ１１０１のアドレスに該当するアドレスに格納されているプログラム及びデータをデータバスＢ１１０２に出力する。
【０１４５】
ＣＰＵ１１１０は、アドレスバスＢ１１０１に内蔵揮発性メモリ１１２０に該当するアドレスを出力すると共に、リードイネーブル信号Ｓ１１０４に‘１’を出力し、順次、内蔵不揮発性メモリ１１２０に格納されているプログラムを、ＲＯＭバスＢ１１０６、無効化手段１１４０を介してデータバスＢ１１０２から読み出し、解読した結果に従い各種制御を行う。また、内蔵不揮発性メモリ１１２０から読み出したプログラムが、内蔵揮発性メモリ１１３０又は外部メモリ１１８０への分岐命令である場合には、アドレスバスＢ１１０１に内蔵揮発性メモリ１１３０又は外部メモリ１１８０の該当するアドレスを出力すると共に、リードイネーブル信号Ｓ１１０４に‘１’を出力し、内蔵揮発性メモリ１１３０又は外部メモリ１１８０に格納されているプログラムを、データバスＢ１１０２から読み出し、解読した結果に従い各種制御を行う。
【０１４６】
また、ＣＰＵ１１１０は、ライトイネーブル信号Ｓ１１０５に‘１’、アドレスバスＢ１１０１に内蔵揮発性メモリ１１３０に該当するアドレスを各々出力すると共に、データバスＢ１１０２にデータを出力し、内蔵揮発性メモリ１１３０に任意の値を書込むことができる。
【０１４７】
また、ＣＰＵ１１１０は、キーコード比較信号Ｓ１１０９に‘１’、データバスＢ１１０２に比較するデータを各々出力することにより、キーコード比較手段１１９０に、キーコードの比較をさせることができる。また、ＣＰＵ１１１０は、キーコード一致信号Ｓ１１９１が‘１’の時、すなわちキーコードが一致している時に、データバスＢ１１０２にデータを出力すると共にエリアレジスタライト信号Ｓ１１０３に‘１’を出力し、エリアレジスタ１１４０を任意の値に書き換えることができる。
【０１４８】
以上のように構成された本発明の第６の実施形態において、内蔵不揮発性メモリ１１２０に格納されたプログラム及びデータ読み出し保護動作について説明する。
【０１４９】
内蔵不揮発性メモリ１１２０を構成する各エリアのうち、不正ユーザに読み出されたくないプログラム及びデータを格納しているなど、読み出し保護の対象にしたいエリア（以下、保護エリアという）を、仮にエリア２として、マイクロコンピュータ１１００の動作を図１３を用いて説明する。図１３は、マイクロコンピュータ１１００の各メモリ領域に格納されたプログラムと、内蔵不揮発性メモリ１１２０の読み出し保護状態をプログラムの実行順に説明する図である。
【０１５０】
先ず、（Ａ）のプログラムスタート時、ＣＰＵ１１１０は、アドレスバスＢ１１０１に、内蔵不揮発性メモリ１１２０に該当するアドレスを出力すると共に、リードイネーブル信号Ｓ１１０４に‘１’を出力し、内蔵不揮発性メモリ１１２０に格納されているプログラムを読み出そうとする。この時、エリアレジスタ１１４０が格納するデータの初期値は‘０００’であるため、比較手段１１５０は、エリア信号Ｓ１１４１のデータ‘０００’から保護エリアに設定されているエリアがないと判断し、一致信号Ｓ１１５１に‘０’を出力する。データ無効化手段１１６０は、一致信号Ｓ１１５１が‘０’であるため、内蔵不揮発性メモリ１１２０からＲＯＭバスＢ１１０６に出力されたプログラムを、データバスＢ１１０２に乗せ換えて出力する。
【０１５１】
このように、ＣＰＵ１１１０は順次、内蔵不揮発性メモリ１１２０の該当アドレスに格納されているプログラムを、ＲＯＭバスＢ１１０６及びデータ無効化手段１１６０を介してデータバスＢ１１０２から読み出し、解読した結果に従い各種制御を行う。
【０１５２】
次に、ＣＰＵ１１１０が（Ｂ）のプログラムを読み出すと、ＣＰＵ１１１０は、アドレスバスＢ１１０１に、エリア２に該当するアドレスを出力すると共に、リードイネーブル信号Ｓ１１０４に‘１’を出力する。エリアレジスタ１１４０が格納するデータは初期値‘０００’のままであるため、比較手段１１５０は、エリア信号Ｓ１１４１のデータ‘０００’から保護エリアに設定されているエリアがないと判断し、一致信号Ｓ１１５１に‘０’を出力する。データ無効化手段１１６０は、一致信号Ｓ１１５１が‘０’であるため、内蔵不揮発性メモリ１１２０からＲＯＭバスＢ１１０６に出力されたプログラム及びデータを、データバスＢ１１０２に乗せ換えて、出力する。
【０１５３】
次に、ＣＰＵ１１１０が（Ｃ）のプログラムを読み出すと、ＣＰＵ１１１０は、エリア２を保護エリアに設定するために、データバスＢ１１０２にデータ‘１００’を出力すると共に、エリアレジスタライト信号Ｓ１１０３に‘１’を出力する。キーコード比較手段１１９０は、初期状態ではキーコード比較は一致しているため、キーコード一致信号Ｓ１１９１に‘１’を出力する。アンドゲート１１７０は、キーコード一致信号Ｓ１１９１が‘１’、エリアレジスタライト信号Ｓ１１０３が‘１’であるため、書換え許可信号Ｓ１１７１に‘１’を出力する。エリアレジスタ１１４０は、書換え許可信号Ｓ１１７１が‘１’であるため、データ‘１００’を格納保持し、エリア信号Ｓ１１４１にデータ‘１００’を出力する。これにより、エリア２が保護エリアに設定される。
【０１５４】
次に、ＣＰＵ１１１０が（Ｄ）のプログラムを読み出すと、ＣＰＵ１１１０は、キーコードと異なるデータでキーコードの比較を行い、エリアレジスタ１１４０の書換え禁止状態に設定するように、データバスＢ１１０２にキーコードと異なるデータを出力すると共に、キーコード比較信号Ｓ１１０９に‘１’を出力する。キーコード比較手段１１９０は、キーコードと異なるデータを格納保持し、予め格納されているキーコード‘１０１０’と比較し、不一致であるので、キーコード一致信号Ｓ１１９１に‘０’を出力する。これにより、エリアレジスタ１１４０の書換え禁止状態は設定される。
【０１５５】
次に、ＣＰＵ１１１０が（Ｅ）のプログラムを読み出すと、ＣＰＵ１１１０は、プログラムの読み出し先を外部メモリ１１８０の該当アドレスへと変更し、アドレスバスＢ１１０１に該当アドレスを出力すると共に、リードイネーブル信号Ｓ１１０４に‘１’を出力し、順次、外部メモリ１１８０の該当アドレスに格納されているプログラムをデータバスＢ１１０２から読み出し、解読した結果に従い各種制御を行う。
【０１５６】
次に、ＣＰＵ１１１０が（Ｆ）のプログラムを読み出すと、ＣＰＵ１１１０は、アドレスバスＢ１１０１に、エリア１に該当するアドレスを出力すると共に、リードイネーブル信号Ｓ１１０４に‘１’を出力する。比較手段１１５０は、エリア信号Ｓ１１４１のデータ‘１００’から保護エリアがエリア２であると判断し、且つ、アドレスバスＢ１１０１のアドレスがエリア１に該当するため、比較手段１１５０は一致信号Ｓ１１５１に‘０’を出力する。
【０１５７】
データ無効化手段１１６０は、一致信号Ｓ１１５１が‘０’であるため、内蔵不揮発性メモリ１１２０からＲＯＭバスＢ１１０６に出力されたプログラム及びデータを、データバスＢ１１０２に乗せ換えて出力する。このように、内蔵不揮発性メモリ１１２０の保護エリア以外に格納されたプログラム及びデータは、外部メモリ１１８０に格納されたプログラムからでも利用することが可能である。
【０１５８】
次に、ＣＰＵ１１１０が（Ｇ）のプログラムを読み出すと、ＣＰＵ１１１０は、プログラムの読み出し先を、内蔵不揮発性メモリ１１２０の該当アドレスへと変更し、アドレスバスＢ１１０１に該当アドレスを出力すると共に、リードイネーブル信号Ｓ１１０４に‘１’を出力し、順次、内蔵不揮発性メモリ１１２０の該当アドレスに格納されているプログラムを、ＲＯＭバスＢ１１０６及びデータ無効化手段１１６０を介してデータバスＢ１１０２から読み出し、解読した結果に従い各種制御を行う。
【０１５９】
次に、ＣＰＵ１１１０が（Ｈ）のプログラムを読み出すと、ＣＰＵ１１１０は、キーコードの比較を行い、エリアレジスタ１１４０の書換え禁止状態を解除するように、データバスＢ１１０２にデータ‘１０１０’を出力すると共に、キーコード比較信号Ｓ１１０９に‘１’を出力する。キーコード比較手段１１９０は、データ‘１０１０’を格納保持し、予め格納されているキーコード‘１０１０’と比較し、一致しているので、キーコード一致信号Ｓ１１９１に‘１’を出力する。これにより、エリアレジスタ１１４０の書換え禁止状態は解除される。
【０１６０】
次に、ＣＰＵ１１１０が（Ｉ）のプログラムを読み出すと、ＣＰＵ１１１０は、保護エリアを解除するように、データバスＢ１１０２にデータ‘０００’を出力すると共に、エリアレジスタライト信号Ｓ１１０３に‘１’を出力する。アンドゲート１１７０は、キーコード一致信号Ｓ１１９１が‘１’、エリアレジスタライト信号Ｓ１１０３が‘１’であるため、書換え許可信号Ｓ１１７１に‘１’を出力する。エリアレジスタ１１４０は、書換え許可信号Ｓ１１７１が‘１’であるため、データ‘０００’を格納保持し、エリア信号Ｓ１１４１にデータ‘０００’を出力する。これにより、各エリアの読み出し保護は解除される。
【０１６１】
次に、ＣＰＵ１１１０が（Ｊ）のプログラムを読み出すと、ＣＰＵ１１１０は、アドレスバスＢ１１０１に、エリア２に該当するアドレスを出力すると共に、リードイネーブル信号Ｓ１１０４に‘１’を出力する。エリアレジスタ１１４０が格納するデータは‘０００’であるため、比較手段１１５０は、エリア信号Ｓ１１４１のデータ‘０００’から保護エリアに設定されているエリアがないと判断し、一致信号Ｓ１１５１に‘０’を出力する。データ無効化手段１１６０は、一致信号Ｓ１１５１が‘０’であるため、内蔵不揮発性メモリ１１２０からＲＯＭバスＢ１１０６に出力されたプログラム及びデータを、データバスＢ１１０２に乗せ換えて出力する。
【０１６２】
ここで、不正ユーザが外部メモリ１１８０に格納されたプログラムを改変し、（Ｆ）のプログラムを、保護エリアの解除プログラム（Ｆ１）と、エリア２からデータ及びプログラムを読み出すプログラム（Ｆ２）とに変更したとする。この時のプログラム（Ａ）〜（Ｅ）のマイクロコンピュータ１１００の動作は、前述した動作と同じである。
【０１６３】
次に、ＣＰＵ１１１０が、改変された（Ｆ１）のプログラムを読み出すと、ＣＰＵ１１１０は、保護エリアを解除するために、データバスＢ１１０２にデータ‘０００’を出力すると共に、エリアレジスタライト信号Ｓ１１０３に‘１’を出力する。アンドゲート１１７０は、キーコード一致信号Ｓ１１９１が‘０’、エリアレジスタライト信号Ｓ１１０３が‘１’であるため、書換え許可信号Ｓ１１７１に‘０’を出力する。エリアレジスタ１１４０は、書換え許可信号Ｓ１１７１が‘０’であるため、データ‘０００’を格納せず前値を保持しつづけ、エリア信号Ｓ１１４１にデータ‘１００’を出力する。このため、エリア２は保護エリアに設定されたままである。
【０１６４】
次に、ＣＰＵ１１１０が、改変された（Ｆ２）のプログラムを読み出すと、ＣＰＵ１１００は、アドレスバスＢ１１０１に、エリア２に該当するアドレスを出力すると共に、リードイネーブル信号Ｓ１１０４に‘１’を出力する。比較手段１１５０は、エリア信号Ｓ１１４１のデータ‘１００’から保護エリアがエリア２であると判断し、且つ、アドレスバスＢ１１０１のアドレスがエリア２に該当するため、比較手段１１５０は一致信号Ｓ１１５１に‘１’を出力する。データ無効化手段１１６０は、一致信号Ｓ１１５１が‘１’であるため、内蔵不揮発性メモリ１１２０からＲＯＭバスＢ１１０６に出力されたプログラム及びデータを、データバスＢ１１０２に出力しない。
【０１６５】
このように、キーコード比較で一致しない限り、エリアレジスタ１０４０が格納するデータを書換えることができないため、キーコードを知らない不正ユーザが保護エリアを解除することはできない。これにより、内蔵不揮発性メモリ１１２０の保護エリアに格納されたプログラム及びデータは、データバスＢ１１０２等から、マイクロコンピュータ１１００の外部へ出力されることはない。
【０１６６】
以上のように、マイクロコンピュータを、３個のメモリ領域で構成した内蔵不揮発性メモリ１１２０と、内蔵不揮発性メモリ１１２０のメモリ領域数と同数の３ビットのビット幅を持つエリアレジスタ１１４０と、比較手段１１５０と、データ無効化手段１１６０と、アンドゲート１１７０と、キーコード比較手段１１９０とで構成し、更に、外部メモリ１１８０に該当するアドレスへ分岐する前に、保護エリアの設定と、更に、エリアレジスタ１１４０の書換えを禁止に設定をするプログラムを記述することにより、保護エリアに設定したエリア以外の内蔵不揮発性メモリ１１２０に格納されたプログラム及びデータを外部メモリ１１８０に該当するアドレスからでも必要に応じて読み出すことができつつ、不正ユーザが外部メモリ１１８０を改変して、内蔵不揮発性メモリ１１２０に格納されたプログラム及びデータを読み出そうと試みても、キーコードを知らない不正ユーザはエリアレジスタ１１４０を書換えて保護エリアを解除できないため、保護エリアに格納されたデータ及びプログラムを読み出すことができず、セキュリティが向上する。
【０１６７】
尚、前記説明において、外部メモリ１１８０に該当するアドレスへ分岐する場合を例にとって説明したが、エリアレジスタ１１４０で保護エリアを設定し、エリアレジスタ１１４０の書換えを禁止に設定することにより、内蔵揮発性メモリ１１３０に該当するアドレスへ分岐する場合も、不正ユーザが内蔵揮発性メモリ１１３０に、プログラムを転送、実行して、内蔵不揮発性メモリ１１２０に格納されたプログラム及びデータを読み出そうと試みても、キーコードを知らない不正ユーザはエリアレジスタ１１４０を書換えて保護エリアを解除できないため、保護エリアに格納されたデータは読み出すことができず、セキュリティが向上する。
【０１６８】
また、前記説明において、内蔵不揮発性メモリ１１２０は均等容量の３個のメモリ領域で構成されているとしたが、内蔵不揮発性メモリ１１２０はｎ個（ｎは１以上の整数）のメモリ領域で構成し、任意のアドレスマッピングであっても良い。
【０１６９】
また、前記説明において、データ無効化手段１１６０は、データ無効化の方法として、内蔵不揮発性メモリ１１２０から読み出したプログラム及びデータをデータバスＢ１１０２に何も出力しないとしたが、リードイネーブル信号Ｓ１１０４に‘１’を出力しない、アドレスバスＢ１１０１に該当アドレスを与えない、データバスＢ１１０２に任意のデータを出力する、などといった、該当するアドレスに格納されたプログラム及びデータが読み出されない構成であれば良い。
【０１７０】
また、前記説明において、キーコード比較手段１１９０は、予め格納されているキーコードを４ビットのデータ‘１０１０’としたが、任意ビット幅の任意データとしても、本発明を実施することが可能であり、ビット幅を増やすことにより、更にセキュリティを向上させることができる。
【０１７１】
（実施形態７）
以下、本発明の第７の実施形態について、図２〜図４、図６、図１０、図１４を参照して説明する。
【０１７２】
図１４は本発明のマイクロコンピュータのブロック図である。同図では、図１及び図１２と同一名称のものは、異なる符号を付しているが、同一構成であるので、その説明を省略する。図１４において、マイクロコンピュータ１２００は、ＣＰＵ１２１０と、内部不揮発性メモリ１２２０と、内部揮発性メモリ１２３０と、エリアレジスタ１２４０と、比較手段１２５０と、データ無効化手段１２６０と、二入力一出力のアンドゲート１２７０と、インバータ１２７５とによって構成されている。また、前記ＣＰＵ１２１０は内部に空間判定手段（判定手段）１２１１を備えている。１２８０は前記マイクロコンピュータ１２００の外部に接続される外部メモリである。
【０１７３】
アドレスバスＢ１２０１は、ＣＰＵ１２１０と、内蔵不揮発性メモリ１２２０と、内蔵揮発性メモリ１２３０と、比較手段１２５０と、外部メモリ１２８０とを各々接続する。ここでは説明を簡単にするため、８ビットバス幅とする。データバスＢ１２０２は、ＣＰＵ１２１０と、内蔵揮発性メモリ１２３０と、エリアレジスタ１２４０と、データ無効化手段１２６０と、外部メモリ１２８０とを各々接続する。ここでは説明を簡単にするため、４ビットバス幅とする。エリアレジスタライト信号Ｓ１２０３は、ＣＰＵ１２１０と、アンドゲート１２７０とを接続する。リードイネーブル信号Ｓ１２０４は、ＣＰＵ１２１０と、内蔵不揮発性メモリ１２２０と、内蔵揮発性メモリ１２３０と、外部メモリ１２８０とを各々接続する。ライトイネーブル信号Ｓ１２０５は、ＣＰＵ１２１０と、内蔵揮発性メモリ１２３０とを接続する。ＲＯＭバスＢ１２０６は、内蔵不揮発性メモリ１２２０と、データ無効化手段１２６０とを接続する。
【０１７４】
更に、空間信号Ｓ１２０７は、ＣＰＵ１２１０と、アンドゲート１２７０とを接続する。反転空間信号Ｓ１２７７は、インバータ１２７５と、アンドゲート１２７０とを接続する。書換え許可信号Ｓ１２７１は、アンドゲート１２７０と、エリアレジスタ１２４０とを接続する。エリア信号Ｓ１２４１は、エリアレジスタ１２４０と、比較手段１２５０とを接続する。一致信号Ｓ１２５１は、比較手段１２５０と、データ無効化手段１２６０とを接続する。
【０１７５】
内蔵不揮発性メモリ１２２０は、プログラム及びデータを格納しており、リードイネーブル信号Ｓ１２０４が‘１’であれば、アドレスバスＢ１２０１のアドレスに該当するメモリ領域に格納されているプログラム及びデータをＲＯＭバスＢ１２０６に出力する。また、内蔵不揮発性メモリ１２２０は、アドレスに応じてｎ個のエリアに分割されている。ここでは説明を簡単にするため、３個のエリアに分割されているものとする。
【０１７６】
図２は、内蔵不揮発性メモリ１２２０のメモリ領域とアドレスの関係を示す図である。図２で、内蔵不揮発性メモリ１２２０のメモリ領域は、３つのエリアに分割されており、エリア０はアドレス００Ｈから１ＦＨまで、エリア１はアドレス２０Ｈから３ＦＨまで、エリア２はアドレス４０Ｈから５ＦＨまでとする。すなわち、エリア０は８ビット幅のアドレスバスＢ１２０１の上位３ビットが‘０００’の領域、同様にエリア１は上位３ビットが‘００１’、エリア２は上位３ビットが‘０１０’の領域となる。
【０１７７】
内蔵揮発性メモリ１２３０は、プログラム及びデータを格納保持する。リードイネーブル信号Ｓ１２０４が‘１’であれば、アドレスバスＢ１２０１のアドレスに該当するメモリ領域に格納されているプログラム及びデータを、データバスＢ１２０２に出力する。また、内蔵揮発性メモリ１２３０は、ライトイネーブル信号Ｓ１２０５が‘１’ならば、データバスＢ１２０２のプログラム及びデータを、アドレスバスＢ１２０１のアドレスに該当するメモリ領域に格納、保持する。
【０１７８】
インバータ１２７５は、後述する空間判定手段１２１１が出力する空間信号Ｓ１２０７を、極性を反転して、反転空間信号Ｓ１２７７に出力する。
【０１７９】
アンドゲート１２７０は、インバータ１２７５が出力する反転空間信号Ｓ１２７７と、ＣＰＵ１２１０が出力するエリアレジスタライト信号Ｓ１２０３との論理積を、書換え許可信号Ｓ１２７１として出力する。すなわち、アンドゲート１２７０は、反転空間信号Ｓ１２７７が‘０’の時に、書換え許可信号Ｓ１２７１として‘０’を出力し、エリアレジスタライト信号Ｓ１２０３の値を無効化する。
【０１８０】
エリアレジスタ１２４０は、書換え許可信号Ｓ１２７１が‘１’であれば、データバスＢ１２０２のデータを格納保持し、保持したデータをエリア信号Ｓ１２４１に出力する。また、エリアレジスタ１２４０は、内蔵不揮発性メモリ１２２０のメモリ領域の個数と同数のビット幅を有しており、各ビットを最上位ビットから各々エリアフラグ２、エリアフラグ１、エリアフラグ０という。また、ここでは説明を簡単にするため、ビット幅を３ビットとし、初期値を‘０００’とする。
【０１８１】
エリアレジスタ１２４０の各ビットは、内蔵不揮発性メモリ１２２０のメモリ領域を構成する各エリアと、各々１対１で対応しており、各ビットがセットされれば、そのビットに対応したエリアは、読み出し保護の対象エリアとなる。例えば、エリアフラグ１がセットされた時はエリア１が読み出し保護の対象エリアとなり、読み出し時に、比較手段１２５０にてアドレスの比較判定が行われる。
【０１８２】
比較手段１２５０は、アドレスバスＢ１２０１のアドレスが、エリアレジスタ１２４０で設定したエリアに該当するか否かを判定し、判定結果を一致信号Ｓ１２５１に出力する。ここで、比較手段１２５０の比較機能を、図３を用いて説明する。図３は、比較手段１２５０の比較機能を説明する図である。図３は左から、エリアレジスタ１２４０のエリアフラグ２の値、エリアフラグ１の値、エリアフラグ０の値、アドレスバスＢ１２０１のビット７の値、ビット６の値、５の値、ビット４の値、一致信号Ｓ１２５１の値である。
【０１８３】
例えば、エリアレジスタ１２４０が出力するエリア信号Ｓ１２４１のデータが‘１００’、アドレスバスＢ１２０１のアドレスが‘５２Ｈ’ならば、アドレスの上位４ビットが‘０１０１’であるため、比較手段１２５０が出力する一致信号Ｓ１２５１は‘１’となる。また、エリアレジスタ１２４０が出力するエリア信号Ｓ１２４１のデータが‘１００’、アドレスバスＢ１２０１のアドレスが‘３２Ｈ’ならば、アドレスの上位４ビットが‘００１１’であるため、一致信号Ｓ１２５１は‘０’となる。このようにして、比較手段１２５０は、アドレスバスＢ１２０１のアドレスが、エリアレジスタ１２４０で設定した内蔵不揮発性メモリ１２２０のエリアに該当するか否かを判定し、該当すれば‘１’を、非該当ならば‘０’を一致信号Ｓ１２５１に出力する。
【０１８４】
データ無効化手段１２６０は、一致信号Ｓ１２５１が‘１’であれば、内蔵不揮発性メモリ１２２０からＲＯＭバスＢ１２０６に出力された読み出しデータを無効化し、データバスＢ１２０２に何も出力しない。また、一致信号Ｓ１２５１が‘０’であれば、内蔵不揮発性メモリ１２２０からＲＯＭバスＢ１２０６に出力された読み出しデータを、データバスＢ１２０２に乗せ換えて出力する。
【０１８５】
外部メモリ１２８０は、プログラム及びデータが格納されており、リードイネーブル信号Ｓ１２０４が‘１’であれば、アドレスバスＢ１２０１のアドレスに該当するアドレスに格納されているプログラム及びデータをデータバスＢ１２０２に出力する。
【０１８６】
ＣＰＵ１２１０は、空間判定手段１２１１を備えている。この空間判定手段１２１１は、ＣＰＵ１２１０が現在実行中のプログラムが、どのメモリに格納されているかを判定し、判定結果を空間信号Ｓ１２０７に出力する。
【０１８７】
ここで、マイクロコンピュータ１２００のメモリ空間について、図６を用いて説明する。図６で、マイクロコンピュータ１２００のメモリ空間はアドレスに応じて３つの領域に分割されており、アドレス００Ｈから５ＦＨまでは内蔵不揮発性メモリ１２２０に該当し、同様に、アドレス６０Ｈから７ＦＨまでは内蔵揮発性メモリ１２３０、アドレス８０ＨからＦＦＨまでは外部メモリ１２８０に該当する。すなわち、内蔵不揮発性メモリ１２２０は、８ビット幅のアドレスバスＢ１２０１の上位３ビットが‘０００’又は‘００１’又は‘０１０’の領域、同様に内蔵揮発性メモリ１２３０は上位３ビットが‘０１１’、外部メモリ１２８０は、最上位ビットが‘１’の領域となる。
【０１８８】
以上のようなメモリ空間に対する空間判定手段１２１１の空間判定機能を、図１０を用いて説明する。図１０は空間判定手段１２１１の空間判定機能を説明する図である。図１０は左から、ＣＰＵ１２１０が現在実行しているプログラムが格納されているアドレス（以下、実行アドレスという）のビット７の値、ビット６の値、ビット５の値、ビット４の値、該当するメモリ、空間信号Ｓ１２０７の値である。例えば、実行アドレスが‘５２Ｈ’ならば、実行アドレスの上位４ビットが‘０１０１’であるため、空間判定手段１２１１が出力する空間信号Ｓ１２０７は‘０’となる。また、実行アドレスが‘８２Ｈ’ならば、実行アドレスの上位４ビットが‘１０００’であるため、空間信号Ｓ１２０７は‘１’となる。このようにして、空間判定手段１２１１は、実行アドレスが、マイクロコンピュータ１２００のどのメモリのアドレスに該当するか判定し、内蔵不揮発性メモリ１２２０のアドレスに該当すれば‘０’を、非該当ならば‘１’を空間信号Ｓ１２０７に出力する。
【０１８９】
また、ＣＰＵ１２１０は、アドレスバスＢ１２０１に内蔵不揮発性メモリ１２２０に該当するアドレスを出力すると共に、リードイネーブル信号Ｓ１２０４に‘１’を出力し、順次、内蔵不揮発性メモリ１２２０に格納されているプログラムを、ＲＯＭバスＢ１２０６、無効化手段１２４０を介してデータバスＢ１２０２から読み出し、解読した結果に従い各種制御を行う。また、内蔵不揮発性メモリ１２２０から読み出したプログラムが、内蔵揮発性メモリ１２３０又は外部メモリ１２８０への分岐命令である場合には、アドレスバスＢ１２０１に内蔵揮発性メモリ１２３０又は外部メモリ１２８０の該当するアドレスを出力すると共に、リードイネーブル信号Ｓ１２０４に‘１’を出力し、内蔵揮発性メモリ１２３０又は外部メモリ１２８０に格納されているプログラムを、データバスＢ１２０２から読み出し、解読した結果に従い各種制御を行う。
【０１９０】
また、ＣＰＵ１２１０は、ライトイネーブル信号Ｓ１２０５に‘１’、アドレスバスＢ１２０１に内蔵揮発性メモリ１２３０に該当するアドレスを各々出力すると共に、データバスＢ１２０２にデータを出力し、内蔵揮発性メモリ１２３０に任意の値を書込むことができる。
【０１９１】
また、ＣＰＵ１２１０は、反転空間信号Ｓ１２７７が‘１’の時、すなわち、内蔵不揮発性メモリ１２２０に該当するアドレスのプログラムを実行中であれば、データバスＢ１２０２にデータを出力すると共にエリアレジスタライト信号Ｓ１２０３に‘１’を出力し、エリアレジスタ１２４０を任意の値に書き換えることができる。
【０１９２】
以上のように構成された本発明の第７の実施形態において、内蔵不揮発性メモリ１２２０に格納されたプログラム及びデータ読み出し保護動作について説明する。
【０１９３】
内蔵不揮発性メモリ１２２０を構成する各エリアのうち、不正ユーザに読み出されたくないプログラム及びデータを格納しているなど、読み出し保護の対象にしたいエリア（以下、保護エリアという）を、仮にエリア２として、マイクロコンピュータ１２００の動作を図４を用いて説明する。図４は、マイクロコンピュータ１２００の各メモリ領域に格納されたプログラムと、内蔵不揮発性メモリ１２２０の読み出し保護状態をプログラムの実行順に説明する図である。
【０１９４】
先ず、（Ａ）のプログラムスタート時、ＣＰＵ１２１０は、アドレスバスＢ１２０１に、内蔵不揮発性メモリ１２２０に該当するアドレスを出力すると共に、リードイネーブル信号Ｓ１２０４に‘１’を出力し、内蔵不揮発性メモリ１２２０に格納されているプログラムを読み出そうとする。この時、エリアレジスタ１２４０が格納するデータの初期値は‘０００’であるため、比較手段１２５０は、エリア信号Ｓ１２４１のデータ‘０００’から保護エリアに設定されているエリアがないと判断し、一致信号Ｓ１２５１に‘０’を出力する。データ無効化手段１２６０は、一致信号Ｓ１２５１が‘０’であるため、内蔵不揮発性メモリ１２２０からＲＯＭバスＢ１２０６に出力されたプログラムをデータバスＢ１２０２に乗せ換えて、出力する。
【０１９５】
このように、ＣＰＵ１２１０は順次、内蔵不揮発性メモリ１２２０の該当アドレスに格納されているプログラムを、ＲＯＭバスＢ１２０６及びデータ無効化手段１２６０を介してデータバスＢ１２０２から読み出し、解読した結果に従い各種制御を行う。
【０１９６】
次に、ＣＰＵ１２１０が（Ｂ）のプログラムを読み出すと、ＣＰＵ１２１０は、アドレスバスＢ１２０１に、エリア２に該当するアドレスを出力すると共に、リードイネーブル信号Ｓ１２０４に‘１’を出力する。エリアレジスタ１２４０が格納するデータは初期値‘０００’のままであるため、比較手段１２５０は、エリア信号Ｓ１２４１のデータ‘０００’から保護エリアに設定されているエリアがないと判断し、一致信号Ｓ１２５１に‘０’を出力する。データ無効化手段１２６０は、一致信号Ｓ１２５１が‘０’であるため、内蔵不揮発性メモリ１２２０からＲＯＭバスＢ１２０６に出力されたプログラム及びデータを、データバスＢ１２０２に乗せ換えて出力する。
【０１９７】
次に、ＣＰＵ１２１０が（Ｃ）のプログラムを読み出すと、ＣＰＵ１２１０は、内蔵不揮発性メモリ１２２０のエリア２を保護エリアに設定するために、データバスＢ１２０２にデータ‘１００’を出力すると共に、エリアレジスタライト信号Ｓ１２０３に‘１’を出力する。プログラム（Ｃ）は内蔵不揮発性メモリ１２２０に配置されているので、空間判定手段１２１１は、空間信号Ｓ１２０７に‘０’を出力する。インバータ１２７５は、空間信号Ｓ１２０７の極性を反転し、反転空間信号Ｓ１２７７に‘１’を出力する。アンドゲート１２７０は、反転空間信号Ｓ１２７７が‘１’、エリアレジスタライト信号Ｓ１２０３が‘１’であるため、書換え許可信号Ｓ１２７１に‘１’を出力する。エリアレジスタ１２４０は、書換え許可信号Ｓ１２７１が‘１’であるため、データバスＢ１２０２のデータデータ‘１００’を格納保持し、エリア信号Ｓ１２４１にデータ‘１００’を出力する。これにより、エリア２が保護エリアに設定される。
【０１９８】
次に、ＣＰＵ１２１０が（Ｄ）のプログラムを読み出すと、ＣＰＵ１２１０は、プログラムの読み出し先を外部メモリ１２８０の該当アドレスへと変更し、アドレスバスＢ１２０１に該当アドレスを出力すると共に、リードイネーブル信号Ｓ１２０４に‘１’を出力し、順次、外部メモリ１２８０の該当アドレスに格納されているプログラムをデータバスＢ１２０２から読み出し、解読した結果に従い各種制御を行う。
【０１９９】
次に、ＣＰＵ１２１０が（Ｅ）のプログラムを読み出すと、ＣＰＵ１２１０は、アドレスバスＢ１２０１に、エリア１に該当するアドレスを出力すると共に、リードイネーブル信号Ｓ１２０４に‘１’を出力する。比較手段１２５０は、エリア信号Ｓ１２４１のデータ‘１００’から保護エリアがエリア２であると判断し、且つ、アドレスバスＢ１２０１のアドレスがエリア１に該当するため、比較手段１２５０は一致信号Ｓ１２５１に‘０’を出力する。
【０２００】
データ無効化手段１２６０は、一致信号Ｓ１２５１が‘０’であるため、内蔵不揮発性メモリ１２２０からＲＯＭバスＢ１２０６に出力されたプログラム及びデータを、データバスＢ１２０２に乗せ換えて出力する。このように、内蔵不揮発性メモリ１２２０の保護エリア以外に格納されたプログラム及びデータは、外部メモリ１２８０に格納されたプログラムからでも利用することが可能である。
【０２０１】
次に、ＣＰＵ１２１０が（Ｆ）のプログラムを読み出すと、ＣＰＵ１２１０は、プログラムの読み出し先を、内蔵不揮発性メモリ１２２０の該当アドレスへと変更し、アドレスバスＢ１２０１に該当アドレスを出力すると共に、リードイネーブル信号Ｓ１２０４に‘１’を出力し、順次、内蔵不揮発性メモリ１２２０の該当アドレスに格納されているプログラムを、ＲＯＭバスＢ１２０６及びデータ無効化手段１２６０を介してデータバスＢ１２０２から読み出し、解読した結果に従い各種制御を行う。
【０２０２】
次に、ＣＰＵ１２１０が（Ｇ）のプログラムを読み出すと、ＣＰＵ１２１０は、保護エリアを解除するために、データバスＢ１２０２にデータ‘０００’を出力すると共に、エリアレジスタライト信号Ｓ１２０３に‘１’を出力する。プログラム（Ｇ）は内蔵不揮発性メモリ１２２０に配置されているので、空間判定手段１２１１は、空間信号Ｓ１２０７に‘０’を出力する。インバータ１２７５は、空間信号Ｓ１２０７の極性を反転し、反転空間信号Ｓ１２７７に‘１’を出力する。アンドゲート１２７０は、反転空間信号Ｓ１２７７が‘１’、エリアレジスタライト信号Ｓ１２０３が‘１’であるため、書換え許可信号Ｓ１２７１に‘１’を出力する。エリアレジスタ１２４０は、書換え許可信号Ｓ１２７１が‘１’であるため、データバスＢ１２０２のデータデータ‘０００’を格納保持し、エリア信号Ｓ１２４１にデータ‘０００’を出力する。これにより、各エリアの読み出し保護は解除される。
【０２０３】
次に、ＣＰＵ１２１０が（Ｈ）のプログラムを読み出すと、ＣＰＵ１２１０は、アドレスバスＢ１２０１に、エリア２に該当するアドレスを出力すると共に、リードイネーブル信号Ｓ１２０４に‘１’を出力する。エリアレジスタ１２４０が格納するデータは‘０００’であるため、比較手段１２５０は、エリア信号Ｓ１２４１のデータ‘０００’から保護エリアに設定されているエリアがないと判断し、一致信号Ｓ１２５１に‘０’を出力する。データ無効化手段１２６０は、一致信号Ｓ１２５１が‘０’であるため、内蔵不揮発性メモリ１２２０からＲＯＭバスＢ１２０６に出力されたプログラム及びデータを、データバスＢ１２０２に乗せ換えて出力する。
【０２０４】
ここで、不正ユーザが外部メモリ１２８０に格納されたプログラムを改変し、（Ｅ）のプログラムを、（Ｅ１）保護エリアを解除するプログラム、（Ｅ２）エリア２からデータ及びプログラムを読み出すプログラムにしたとする。この時のプログラム（Ａ）〜（Ｄ）のマイクロコンピュータ１２００の動作は、前述した動作と同じである。
【０２０５】
次に、ＣＰＵ１２１０が、改変された（Ｅ１）のプログラムを読み出すと、ＣＰＵ１２１０は、保護エリアを解除するように、データバスＢ１２０２にデータ‘０００’を出力すると共に、エリアレジスタライト信号Ｓ１２０３に‘１’を出力する。改変されたプログラム（Ｅ１）は外部メモリ１２８０に配置されているので、空間判定手段１２１１は、空間信号Ｓ１２０７に‘１’を出力する。インバータ１２７５は、空間信号Ｓ１２０７の極性を反転し、反転空間信号Ｓ１２７７に‘０’を出力する。アンドゲート１２７０は、反転空間信号Ｓ１２７７が‘０’、エリアレジスタライト信号Ｓ１２０３が‘１’であるため、書換え許可信号Ｓ１２７１に‘０’を出力する。エリアレジスタ１２４０は、書換え許可信号Ｓ１２７１が‘０’であるため、データバスＢ１２０２のデータ‘０００’を格納せず前値を保持しつづけ、エリア信号Ｓ１２４１にデータ‘１００’を出力する。このため、エリア２は保護エリアに設定されたままである。
【０２０６】
次に、ＣＰＵ１２１０が、改変された（Ｅ２）のプログラムを読み出すと、ＣＰＵ１２００は、アドレスバスＢ１２０１に、エリア２に該当するアドレスを出力すると共に、リードイネーブル信号Ｓ１２０４に‘１’を出力する。比較手段１２５０は、エリア信号Ｓ１２４１のデータ‘１００’から保護エリアがエリア２であると判断し、且つ、アドレスバスＢ１２０１のアドレスがエリア２に該当するため、比較手段１２５０は一致信号Ｓ１２５１に‘１’を出力する。データ無効化手段１２６０は、一致信号Ｓ１２５１が‘１’であるため、内蔵不揮発性メモリ１２２０からＲＯＭバスＢ１２０６に出力されたプログラム及びデータを、データバスＢ１２０２に出力しない。
【０２０７】
このように、外部メモリ１２８０に格納されたプログラムを実行している限り、空間信号Ｓ１２０７が‘１’を出力し、反転空間信号Ｓ１２７７は‘０’出力してエリアレジスタライト信号Ｓ１２０３を無効にするため、エリアレジスタ１２４０が格納するデータを書換えることができず、保護エリアを解除することはできない。これにより、内蔵不揮発性メモリ１２２０の保護エリアに格納されたプログラム及びデータは、データバスＢ１２０２等から、マイクロコンピュータ１２００の外部へ出力されることはない。
【０２０８】
以上のように、マイクロコンピュータを、空間判定手段１２１１を備えたＣＰＵ１２１０と、３個のメモリ領域で構成した内蔵不揮発性メモリ１２２０と、内蔵不揮発性メモリ１２２０のメモリ領域数と同数の３ビットのビット幅を持つエリアレジスタ１２４０と、比較手段１２５０と、データ無効化手段１２６０と、アンドゲート１２７０と、インバータ１２７５とで構成し、更に、外部メモリ１２８０に該当するアドレスへ分岐する前に、保護エリアを設定するプログラムを記述することにより、保護エリアに設定したエリア以外の内蔵不揮発性メモリ１２２０に格納されたプログラム及びデータを、外部メモリ１２８０に該当するアドレスからでも必要に応じて読み出すことができつつ、不正ユーザが外部メモリ１２８０を改変して、内蔵不揮発性メモリ１２２０に格納されたプログラム及びデータを読み出そうと試みても、保護エリアに格納されたデータ及びプログラムを読み出すことができず、セキュリティが向上する。
【０２０９】
更に、エリアレジスタ１２４０の書換え許可と書換え禁止との両者間の切換えを、ＣＰＵ１２１０が現在実行しているプログラムが格納されているアドレスに応じて行うので、外部メモリ１２８０に該当するアドレスへ分岐する前に、エリアレジスタ１２４０に格納されたデータ書換え禁止の設定をその都度行う必要がなくなり、不正ユーザが外部メモリ１２８０を改変して、エリアレジスタ１２４０に格納されたデータを書換えて保護エリアを解除しようとしても、外部メモリ１２８０に該当するアドレスに格納されたプログラムを実行している限りは、保護エリアを解除できないため、セキュリティが更に向上する。
【０２１０】
尚、前記説明において、外部メモリ１２８０に該当するアドレスへ分岐する場合を例にとって説明したが、エリアレジスタ１２４０で保護エリアを設定することにより、内蔵揮発性メモリ１２３０に該当するアドレスへ分岐する場合にも、不正ユーザが内蔵揮発性メモリ１２３０にプログラムを転送、実行して、内蔵不揮発性メモリ１２２０に格納されたプログラム及びデータを読み出そうと試みても、保護エリアに格納されたデータは読み出すことができず、セキュリティが向上する。なおかつ、内蔵揮発性メモリ１２３０に該当するアドレスに格納されているプログラムを実行している限りは、エリアレジスタ１２４０を書換えて保護エリアを解除できないため、保護エリアに格納されたデータは読み出すことができず、セキュリティが向上する。
【０２１１】
また、前記説明において、内蔵不揮発性メモリ１２２０は均等容量の３個のメモリ領域で構成されているとしたが、内蔵不揮発性メモリ１２２０はｎ個（ｎは１以上の整数）のメモリ領域で構成し、任意のアドレスマッピングであっても良い。
【０２１２】
また、前記説明において、データ無効化手段１２６０は、データ無効化の方法として、内蔵不揮発性メモリ１２２０から読み出したプログラム及びデータをデータバスＢ１２０２に何も出力しないとしたが、リードイネーブル信号Ｓ１２０４に‘１’を出力しない、アドレスバスＢ１２０１に該当アドレスを与えない、データバスＢ１２０２に任意のデータを出力する、などといった、該当するアドレスに格納されたプログラム及びデータが読み出されない構成であれば良い。
【０２１３】
また、前記説明において、空間判定手段１２１１をＣＰＵ１２１０が備えるとしたが、ＣＰＵ１２１０が実行している、保護エリアに格納されたプログラム及びデータを読み出すプログラムが格納されたメモリ領域を判定できる判定手段があれば、ＣＰＵ１２１０が備えなくても良い。
【０２１４】
（実施形態８）
以下、本発明の第８の実施形態について、図２〜図３、図６、図１５〜図１７を参照して説明する。
【０２１５】
図１５は本発明のマイクロコンピュータのブロック図である。同図では、図１及び図９と同一名称のものは、異なる符号を付しているが、同一構成であるので、その説明を省略する。図１５において、マイクロコンピュータ１３００は、ＣＰＵ（制御部）１３１０と、内部不揮発性メモリ１３２０と、内蔵揮発性メモリ１３３０と、エリアレジスタ１３４０と、比較手段１３５０と、データ無効化手段１３６０と、二入力一出力のアンドゲート１３７０と、空間情報保持手段（判定結果記憶手段）１３９５とによって構成されている。また、前記ＣＰＵ１３１０は内部に空間判定手段（判定手段）１３１１を備えている。１３８０は前記マイクロコンピュータ１３００の外部に接続される外部メモリである。
【０２１６】
アドレスバスＢ１３０１は、ＣＰＵ１３１０と、内蔵不揮発性メモリ１３２０と、内蔵揮発性メモリ１３３０と、比較手段１３５０と、外部メモリ１３８０とを各々接続する。ここでは説明を簡単にするため、８ビットバス幅とする。データバスＢ１３０２は、ＣＰＵ１３１０と、内蔵揮発性メモリ１３３０と、エリアレジスタ１３４０と、データ無効化手段１３６０と、外部メモリ１３８０とを各々接続する。ここでは説明を簡単にするため、４ビットバス幅とする。
【０２１７】
また、エリアレジスタライト信号Ｓ１３０３は、ＣＰＵ１３１０と、エリアレジスタ１３４０とを接続する。リードイネーブル信号Ｓ１３０４は、ＣＰＵ１３１０と、内蔵不揮発性メモリ１３２０と、内蔵揮発性メモリ１３３０と、外部メモリ１３８０とを各々接続する。ライトイネーブル信号Ｓ１３０５は、ＣＰＵ１３１０と、内蔵揮発性メモリ１３３０とを接続する。ＲＯＭバスＢ１３０６は、内蔵不揮発性メモリ１３２０と、データ無効化手段１３６０とを接続する。外部空間信号Ｓ１３０７は、ＣＰＵ１３１０と、空間情報保持手段１３９５とを接続する。内部空間信号Ｓ１３０８は、ＣＰＵ１３１０と、空間情報保持手段１３９５とを接続する。無効化許可信号Ｓ１３９６は、空間情報保持手段１３９５と、アンドゲート１３７０とを接続する。エリア信号Ｓ１３４１は、エリアレジスタ１３４０と、比較手段１３５０とを接続する。一致信号Ｓ１３５１は、比較手段１３５０と、アンドゲート１３７０とを接続する。無効化信号Ｓ１３７１は、アンドゲート１３７０と、データ無効化手段１３６０とを接続する。
【０２１８】
内蔵不揮発性メモリ１３２０は、プログラム及びデータを格納しており、リードイネーブル信号Ｓ１３０４が‘１’であれば、アドレスバスＢ１３０１のアドレスに該当するメモリ領域に格納されているプログラム及びデータをＲＯＭバスＢ１３０６に出力する。また、内蔵不揮発性メモリ１３２０は、アドレスに応じてｎ個のエリアに分割されている。ここでは説明を簡単にするため、３個のエリアに分割されているものとする。
【０２１９】
図２は、内蔵不揮発性メモリ１３２０のメモリ領域とアドレスの関係を示す図である。図２で、内蔵不揮発性メモリ１３２０のメモリ領域は、３つのエリアに分割されており、エリア０はアドレス００Ｈから１ＦＨまで、エリア１はアドレス２０Ｈから３ＦＨまで、エリア２はアドレス４０Ｈから５ＦＨまでとする。すなわち、エリア０は８ビット幅のアドレスバスＢ１３０１の上位３ビットが‘０００’の領域、同様にエリア１は上位３ビットが‘００１’、エリア２は上位３ビットが‘０１０’の領域となる。
【０２２０】
内蔵揮発性メモリ１３３０は、プログラム及びデータを格納保持する。リードイネーブル信号Ｓ１３０４が‘１’であれば、アドレスバスＢ１３０１のアドレスに該当するメモリ領域に格納されているプログラム及びデータを、データバスＢ１３０２に出力する。また、内蔵揮発性メモリ１３３０は、ライトイネーブル信号Ｓ１３０５が‘１’ならば、データバスＢ１３０２のプログラム及びデータを、アドレスバスＢ１３０１のアドレスに該当するメモリ領域に格納保持する。
【０２２１】
エリアレジスタ１３４０は、エリアレジスタライト信号Ｓ１３０３が‘１’であれば、データバスＢ１３０２のデータを格納保持し、保持したデータをエリア信号Ｓ１３４１に出力する。また、エリアレジスタ１３４０は、内蔵不揮発性メモリ１３２０のメモリ領域の個数と同数のビット幅を有しており、各ビットを最上位ビットから各々エリアフラグ２、エリアフラグ１、エリアフラグ０という。また、ここでは説明を簡単にするため、ビット幅を３ビットとし、初期値を‘０００’とする。
【０２２２】
エリアレジスタ１３４０の各ビットは、内蔵不揮発性メモリ１３２０のメモリ領域を構成する各エリアと、各々１対１で対応しており、各ビットがセットされれば、そのビットに対応したエリアは、読み出し保護の対象エリアとなる。例えば、エリアフラグ１がセットされた時はエリア１が読み出し保護の対象エリアとなり、読み出し時に、比較手段１３５０にてアドレスの比較判定が行われる。
【０２２３】
比較手段１３５０は、アドレスバスＢ１３０１のアドレスが、エリアレジスタ１３４０で設定したエリアに該当するか否かを判定し、判定結果を一致信号Ｓ１３５１に出力する。ここで、比較手段１３５０の比較機能を、図３を用いて説明する。図３は、比較手段１３５０の比較機能を説明する図である。図３は左から、エリアレジスタ１３４０のエリアフラグ２の値、エリアフラグ１の値、エリアフラグ０の値、アドレスバスＢ１３０１のビット７の値、ビット６の値、５の値、ビット４の値、一致信号Ｓ１３５１の値である。
【０２２４】
例えば、エリアレジスタ１３４０が出力するエリア信号Ｓ１３４１のデータが‘１００’、アドレスバスＢ１３０１のアドレスが‘５２Ｈ’ならば、アドレスの上位４ビットが‘０１０１’であるため、比較手段１３５０が出力する一致信号Ｓ１３５１は‘１’となる。また、エリアレジスタ１３４０が出力するエリア信号Ｓ１３４１のデータが‘１００’、アドレスバスＢ１３０１のアドレスが‘３２Ｈ’ならば、アドレスの上位４ビットが‘００１１’であるため、一致信号Ｓ１３５１は‘０’となる。このようにして、比較手段１３５０は、アドレスバスＢ１３０１のアドレスが、エリアレジスタ１３４０で設定した内蔵不揮発性メモリ１３２０のエリアに該当するか否かを判定し、該当すれば‘１’を、非該当ならば‘０’を一致信号Ｓ１３５１に出力する。
【０２２５】
アンドゲート１３７０は、比較手段１３５０が出力する一致信号Ｓ１３５１と、後述する空間情報保持手段１３９５が出力する無効化許可信号Ｓ１３９６との論理積を無効化信号Ｓ１３７１に出力する。すなわち、アンドゲート１３７０は、無効化許可信号Ｓ１３９６が‘０’の時に、無効化信号Ｓ１３７１に‘０’を出力し、一致信号Ｓ１３５１の値を無効化する。
【０２２６】
データ無効化手段１３６０は、無効化信号Ｓ１３７１が‘１’であれば、内蔵不揮発性メモリ１３２０からＲＯＭバスＢ１３０６に出力された読み出しデータを無効化し、データバスＢ１３０２に何も出力しない。また、無効化信号Ｓ１３７１が‘０’であれば、内蔵不揮発性メモリ１３２０からＲＯＭバスＢ１３０６に出力された読み出しデータを、データバスＢ１３０２に乗せ換えて出力する。
【０２２７】
外部メモリ１３８０には、プログラム及びデータが格納されており、リードイネーブル信号Ｓ１３０４が‘１’であれば、アドレスバスＢ１３０１のアドレスに該当するアドレスに格納されているプログラム及びデータをデータバスＢ１３０２に出力する。
【０２２８】
ＣＰＵ１３１０は、空間判定手段１３１１を備えており、空間判定手段１３１１は、ＣＰＵ１３１０が現在実行中のプログラムが、どのメモリに格納されているかを判定し、判定結果を外部空間信号Ｓ１３０７及び内部空間信号Ｓ１３０８に出力する。
【０２２９】
ここで、マイクロコンピュータ１３００のメモリ空間について、図６を用いて説明する。図６において、マイクロコンピュータ１３００のメモリ空間はアドレスに応じて３つの領域に分割されており、アドレス００Ｈから５ＦＨまでは図２で示される内蔵不揮発性メモリ１３２０に該当し、同様に、アドレス６０Ｈから７ＦＨまでは内蔵揮発性メモリ１３３０、アドレス８０ＨからＦＦＨまでは外部メモリ１３８０に該当する。すなわち、内蔵不揮発性メモリ１３２０は、８ビット幅のアドレスバスＢ１３０１の上位３ビットが‘０００’又は‘００１’又は‘０１０’の領域、同様に内蔵揮発性メモリ１３３０は上位３ビットが‘０１１’、外部メモリ１３８０は、最上位ビットが‘１’の領域となる。
【０２３０】
以上のようなメモリ空間に対する、空間判定手段１３１１の空間判定機能を、図１６を用いて説明する。図１６は空間判定手段１３１１の空間判定機能を説明する図である。図１６は左から、ＣＰＵ１３１０が現在実行しているプログラムが格納されているアドレス（以下、実行アドレスという）のビット７の値、ビット６の値、ビット５の値、ビット４の値、該当するメモリ、外部空間信号Ｓ１３０７の値、内部空間信号Ｓ１３０８の値である。例えば、実行アドレスが‘５２Ｈ’ならば、実行アドレスの上位４ビットが‘０１０１’であるため、空間判定手段１３１１が出力する外部空間信号Ｓ１３０７は‘０’、内部空間信号Ｓ１３０８は‘１’となる。また、実行アドレスが‘８２Ｈ’ならば、実行アドレスの上位４ビットが‘１０００’であるため、外部空間信号Ｓ１３０７は‘１’、内部空間信号Ｓ１３０８は‘０’となる。このようにして、空間判定手段１３１１は、実行アドレスが、マイクロコンピュータ１３００のどのメモリのアドレスに該当するか判定し、内蔵不揮発性メモリ１３２０のアドレスに該当すれば内部空間信号Ｓ１３０８に‘１’を出力し、外部メモリ１３８０のアドレスに該当すれば、外部空間信号Ｓ１３０７に‘１’を出力する。
【０２３１】
また、ＣＰＵ１３１０は、アドレスバスＢ１３０１に内蔵不揮発性メモリ１３２０に該当するアドレスを出力すると共に、リードイネーブル信号Ｓ１３０４に‘１’を出力し、順次、内蔵不揮発性メモリ１３２０に格納されているプログラムを、ＲＯＭバスＢ１３０６、無効化手段１３４０を介してデータバスＢ１３０２から読み出し、解読した結果に従い各種制御を行う。また、内蔵不揮発性メモリ１３２０から読み出したプログラムが、内蔵揮発性メモリ１３３０又は外部メモリ１３８０への分岐命令である場合には、アドレスバスＢ１３０１に内蔵揮発性メモリ１３３０又は外部メモリ１３８０の該当するアドレスを出力すると共に、リードイネーブル信号Ｓ１３０４に‘１’を出力し、内蔵揮発性メモリ１３３０又は外部メモリ１３８０に格納されているプログラムを、データバスＢ１３０２から読み出し、解読した結果に従い各種制御を行う。  また、ＣＰＵ１３１０は、ライトイネーブル信号Ｓ１３０５に‘１’、アドレスバスＢ１３０１に内蔵揮発性メモリ１３３０に該当するアドレスを各々出力すると共に、データバスＢ１３０２にデータを出力し、内蔵揮発性メモリ１３３０に任意の値を書込むことができる。また、ＣＰＵ１３１０は、データバスＢ１３０２にデータを出力すると共にエリアレジスタライト信号Ｓ１３０３に‘１’を出力し、エリアレジスタ１３４０を任意の値に書き換えることができる。
【０２３２】
空間情報保持手段１３９５は、空間判定手段１３１１が出力する外部空間信号Ｓ１３０７が‘１’であれば、無効化許可信号Ｓ１３９６に‘１’を出力し、保持する。また、空間判定手段１３１１が出力する内部空間信号Ｓ１３０８が‘１’であれば、無効化許可信号Ｓ１３９６に‘０’を出力し、保持する。すなわち、空間情報保持手段１３９５は、実行アドレスが外部メモリ１３８０に該当していれば‘１’を、内蔵不揮発性メモリ１３２０に該当すれば‘０’を、内蔵揮発性メモリ１３３０に該当すれば、分岐前のメモリ領域が外部メモリ１３８０ならば‘１’を、内蔵不揮発性メモリ１３２０に該当すれば‘０’を保持している。
【０２３３】
以上のように構成された本発明の第８の実施形態による、内蔵不揮発性メモリ１３２０に格納されたプログラム及びデータ読み出し保護動作について説明する。
【０２３４】
内蔵不揮発性メモリ１３２０を構成する各エリアのうち、不正ユーザに読み出されたくないプログラム及びデータを格納しているなど、読み出し保護の対象にしたいエリア（以下、保護エリアという）を、仮にエリア２として、マイクロコンピュータ１３００の動作を図１７を用いて説明する。図１７は、マイクロコンピュータ１３００の各メモリ領域に格納されたプログラムと、内蔵不揮発性メモリ１３２０の読み出し保護状態をプログラムの実行順に説明する図である。
【０２３５】
先ず、（Ａ）のプログラムスタート時、ＣＰＵ１３１０は、アドレスバスＢ１３０１に、内蔵不揮発性メモリ１３２０に該当するアドレスを出力すると共に、リードイネーブル信号Ｓ１３０４に‘１’を出力し、内蔵不揮発性メモリ１３２０に格納されているプログラムを読み出そうとする。この時、空間判定手段１３１１は、ＣＰＵ１３１０が内蔵不揮発性メモリ１３２０に該当するアドレスに配置されたプログラム（Ａ）を実行中であるため、外部空間信号Ｓ１３０７に‘０’、内部空間信号Ｓ１３０８に‘１’を出力する。空間情報保持手段１３９５は、外部空間信号Ｓ１３０７が‘０’、内部空間信号Ｓ１３０８が‘１’であるため、無効化許可信号Ｓ１３９６に‘０’を出力し、保持する。また、エリアレジスタ１３４０が格納するデータの初期値は‘０００’であるため、比較手段１３５０は、エリア信号Ｓ１３４１のデータ‘０００’から保護エリアに設定されているエリアがないと判断し、一致信号Ｓ１３５１に‘０’を出力する。アンドゲート１３７１は、無効化許可信号Ｓ１３９６が‘０’、一致信号Ｓ１３５１が‘０’であるため、無効化信号Ｓ１３７１に‘０’を出力する。データ無効化手段１３６０は、無効化信号Ｓ１３７１が‘０’であるため、内蔵不揮発性メモリ１３２０からＲＯＭバスＢ１３０６に出力されたプログラムを、データバスＢ１３０２に乗せ換えて出力する。
【０２３６】
このように、ＣＰＵ１３１０は順次、内蔵不揮発性メモリ１３２０の該当アドレスに格納されているプログラムを、ＲＯＭバスＢ１３０６及びデータ無効化手段１３６０を介してデータバスＢ１３０２から読み出し、解読した結果に従い各種制御を行う。
【０２３７】
次に、ＣＰＵ１３１０が（Ｂ）のプログラムを読み出すと、ＣＰＵ１３１０は、内蔵不揮発性メモリ１３２０のエリア２を保護エリアに設定するように、データバスＢ１３０２にデータ‘１００’を出力すると共に、エリアレジスタライト信号Ｓ１３０３に‘１’を出力する。エリアレジスタ１３４０は、データ‘１００’を格納保持し、エリア信号Ｓ１３４１にデータ‘１００’を出力する。これにより、エリア２が保護エリアに設定される。
【０２３８】
次に、ＣＰＵ１３１０が（Ｃ）のプログラムを読み出すと、内蔵不揮発性メモリ１３２０のエリア２に格納された後述するプログラム（Ｅ）を内蔵揮発性メモリ１３３０に転送するために、先ず第１の手順として、エリア２に格納されたプログラム（Ｅ）を読み出すため、ＣＰＵ１３１０は、アドレスバスＢ１３０１に、エリア２に該当するアドレスを出力すると共に、リードイネーブル信号Ｓ１３０４に‘１’を出力する。この時、空間判定手段１３１１は、ＣＰＵ１３１０が内蔵不揮発性メモリ１３２０に該当するアドレスに配置されたプログラム（Ｃ）を実行中であるため、外部空間信号Ｓ１３０７に‘０’、内部空間信号Ｓ１３０８に‘１’を出力する。また、比較手段１３５０は、エリア信号Ｓ１３４１のデータ‘１００’から保護エリアがエリア２であると判断し、且つ、アドレスバスＢ１３０１のアドレスがエリア２に該当するため、比較手段１３５０は一致信号Ｓ１３５１に‘１’を出力する。空間情報保持手段１３９５は、外部空間信号Ｓ１３０７が‘０’、内部空間信号Ｓ１３０８が‘１’であるため、無効化許可信号Ｓ１３９６に‘０’を出力し、保持する。アンドゲート１３７１は、無効化許可信号Ｓ１３９６が‘０’、一致信号Ｓ１３５１が‘１’であるため、無効化信号Ｓ１３７１に‘０’を出力する。データ無効化手段１３６０は、無効化手段Ｓ１３７１が‘０’であるため、内蔵不揮発性メモリ１３２０からＲＯＭバスＢ１３０６に出力されたプログラムを、データバスＢ１３０２に乗せ換えて出力する。
【０２３９】
このように、エリアレジスタ１３４０で保護エリアを設定していても、内蔵不揮発性メモリ１３２０に格納されたプログラムを実行している限り、無効化許可信号Ｓ１３９６が‘０’であるために、一致信号Ｓ１３５１は無効化され、内蔵不揮発性メモリ１３２０の保護エリアに格納されたプログラム及びデータを利用することが可能である。
【０２４０】
次に、第２の手順として、エリア２から読み出したプログラム（Ｅ）を内蔵揮発性メモリ１３３０に書込むように、ＣＰＵ１３１０は、ライトイネーブル信号Ｓ１３０５に‘１’、アドレスバスＢ１３０１に内蔵揮発性メモリ１３３０に該当するアドレスを各々出力すると共に、前述した内蔵不揮発性メモリ１３２０から読み出したプログラムをデータバスＢ１３０２に出力する。内蔵揮発性メモリ１３３０は、ライトイネーブル信号Ｓ１３０５が‘１’であるため、データバスＢ１３０２のプログラムを、アドレスバスＢ１３０１のアドレスに該当するメモリ領域に格納保持する。
【０２４１】
以上のように、第１、第２の手順を繰り返すことで、内蔵不揮発性メモリ１３２０のエリア２に格納されたプログラム（Ｅ）を、内蔵揮発性メモリ１３３０へ転送する。
【０２４２】
次に、ＣＰＵ１３１０が（Ｄ）のプログラムを読み出すと、ＣＰＵ１３１０は、プログラムの読み出し先をプログラム（Ｃ）でプログラムを転送した内蔵揮発性メモリ１３３０の該当アドレスへと変更し、アドレスバスＢ１３０１に該当アドレスを出力すると共に、リードイネーブル信号Ｓ１３０４に‘１’を出力し、順次、内蔵揮発性メモリ１３３０の該当アドレスに格納されているプログラムをデータバスＢ１３０２から読み出し、解読した結果に従い各種制御を行う。
【０２４３】
次に、ＣＰＵ１３１０が前記プログラム（Ｃ）で内蔵揮発性メモリ１３３０に転送した（Ｅ）のプログラムを読み出すと、ＣＰＵ１３１０は、アドレスバスＢ１３０１に、内蔵不揮発性メモリ１３２０のエリア２に該当するアドレスを出力すると共に、リードイネーブル信号Ｓ１３０４に‘１’を出力する。この時、空間判定手段１３１１は、ＣＰＵ１３１０が内蔵不揮発性メモリ１３２０に該当するアドレスに配置されたプログラム（Ｅ）を実行中であるため、外部空間信号Ｓ１３０７に‘０’、内部空間信号Ｓ１３０８に‘０’を出力する。空間情報保持手段１３９５は、外部空間信号Ｓ１３０７が‘０’、内部空間信号Ｓ１３０８が‘０’であるため、前値‘０’を保持し続け、無効化許可信号Ｓ１３９６に‘０’出力し続ける。比較手段１３５０は、エリア信号Ｓ１３４１のデータ‘１００’から保護エリアがエリア２であると判断し、且つ、アドレスバスＢ１３０１のアドレスがエリア２に該当するため、比較手段１３５０は一致信号Ｓ１３５１に‘１’を出力する。アンドゲート１３７１は、無効化許可信号Ｓ１３９６が‘０’、一致信号Ｓ１３５１が‘１’であるため、無効化信号Ｓ１３７１に‘０’を出力する。データ無効化手段１３６０は、無効化信号Ｓ１３７１が‘０’であるため、内蔵不揮発性メモリ１３２０からＲＯＭバスＢ１３０６に出力されたプログラム及びデータを、データバスＢ１３０２に乗せ換えて、出力する。
【０２４４】
このように、エリアレジスタ１３４０で保護エリアを設定していても、内蔵不揮発性メモリ１３２０に格納されたプログラムを実行して、内蔵揮発性メモリ１３３０に該当するアドレスへ分岐しても、内蔵揮発性メモリ１３３０に格納されたプログラムを実行している限り、空間情報保持手段１３６０は無効化許可信号Ｓ１３９６を‘０’に保持するため、一致信号Ｓ１３５１は無効化され、内蔵不揮発性メモリ１３２０の保護エリアに格納されたプログラム及びデータを利用することが可能である。
【０２４５】
ここで、例えば、内蔵不揮発性メモリ１３２０がフラッシュメモリに代表される書換え可能な不揮発性メモリの場合を考える。書換え可能な不揮発性メモリでは、データの書換え方法の１つとして、ユーザセットに実装した状態で書換え可能な、外部からシリアルデータを入力して書換えを行う方法が取られている。この方法では、内蔵不揮発性メモリ１３２０に格納された書換えプログラムを内蔵揮発性メモリ１３３０に転送し、転送したプログラムを実行して内蔵不揮発性メモリ１３２０の書換えを行う。この時、書換えが正常に完了しているか否かを確認するために、内蔵揮発性メモリ１３３０に転送したプログラムを実行して、内蔵不揮発性メモリ１３２０に格納されたプログラム及びデータを読み出す必要がある。従来の技術では、内蔵揮発性メモリ１３３０に格納されたプログラムを実行して内蔵不揮発性メモリ１３２０に格納されたプログラム及びデータを読み出すことは常に禁止されていたが、本発明によれば、前記説明のように、内蔵不揮発性メモリ１３２０に格納されたプログラムを実行することによって内蔵揮発性メモリ１３３０に該当するアドレスへ分岐した場合は、内蔵不揮発性メモリ１３２０の保護エリアに格納されたプログラム及びデータを利用することが可能である。
【０２４６】
次に、ＣＰＵ１３１０が（Ｆ）のプログラムを読み出すと、ＣＰＵ１３１０は、プログラムの読み出し先を外部メモリ１３８０の該当アドレスへと変更し、アドレスバスＢ１３０１に該当アドレスを出力すると共に、リードイネーブル信号Ｓ１３０４に‘１’を出力し、順次、外部メモリ１３８０の該当アドレスに格納されているプログラムをデータバスＢ１３０２から読み出し、解読した結果に従い各種制御を行う。
【０２４７】
ここで、不正ユーザが、外部メモリ１３８０に格納されたプログラムを改変して、プログラム（Ｆ）に続く（Ｇ）のプログラムを下記（Ｇ１）〜（Ｇ３）の３つのプログラムに変更したとする。
【０２４８】
（Ｇ１）外部メモリ１３８０に格納された後述するプログラム（Ｇ３）を、内蔵揮発性メモリ１３３０に転送するプログラム
【０２４９】
（Ｇ２）プログラム（Ｇ１）を転送した先の内蔵揮発性メモリ１３２０に該当アドレスへ分岐するプログラム
【０２５０】
（Ｇ３）内蔵揮発性メモリ１３３０のエリア２に該当するアドレスに格納されたプログラム及びデータを読み出し、読み出したプログラム及びデータを外部メモリ１３８０に該当するアドレスに出力するプログラム
【０２５１】
この時のプログラム（Ａ）〜（Ｆ）のマイクロコンピュータ１３００の動作は、前述した動作と同じである。
【０２５２】
次に、ＣＰＵ１３１０が、改変された（Ｇ１）のプログラムを読み出すと、外部メモリ１３８０に格納されたプログラム（Ｇ３）を内蔵揮発性メモリ１３３０に転送するように、先ず、ＣＰＵ１３１０は、アドレスバスＢ１３０１に、プログラム（Ｇ３）が格納された外部メモリ１３８０に該当するアドレスを出力すると共に、リードイネーブル信号Ｓ１３０４に‘１’を出力し、外部メモリ１３８０の該当アドレスに格納されているプログラム（Ｇ３）をデータバスＢ１３０２から読み出す。
【０２５３】
次に、読み出したプログラム（Ｇ３）を内蔵揮発性メモリ１３３０に書込むように、ＣＰＵ１３１０は、ライトイネーブル信号Ｓ１３０５に‘１’、アドレスバスＢ１３０１に内蔵揮発性メモリ１３３０に該当するアドレスを各々出力すると共に、前述した内蔵不揮発性メモリ１３２０から読み出したプログラムをデータバスＢ１３０２に出力する。内蔵揮発性メモリ１３３０は、ライトイネーブル信号Ｓ１３０５が‘１’であるため、データバスＢ１３０２のプログラムを、アドレスバスＢ１３０１のアドレスに該当するメモリ領域に格納保持する。
【０２５４】
以上を繰り返すことにより、外部メモリ１３８０に格納されたプログラム（Ｇ３）を内蔵揮発性メモリ１３３０へ転送する。
【０２５５】
次に、ＣＰＵ１３１０が、改変された（Ｇ２）のプログラムを読み出すと、ＣＰＵ１３１０は、プログラムの読み出し先をプログラム（Ｇ３）が転送された内蔵揮発性メモリ１３３０の該当アドレスへと変更し、アドレスバスＢ１３０１に該当アドレスを出力すると共に、リードイネーブル信号Ｓ１３０４に‘１’を出力する。この時、空間判定手段１３１１は、ＣＰＵ１３１０が内蔵不揮発性メモリ１３２０に該当するアドレスに配置されたプログラム（Ｇ２）を実行中であるため、外部空間信号Ｓ１３０７に'１'、内部空間信号Ｓ１３０８に'０'を出力する。空間情報保持手段１３９５は、外部空間信号Ｓ１３０７が'１'、内部空間信号Ｓ１３０８が'０'であるため、無効化許可信号Ｓ１３９６に'１'を出力し保持する。
【０２５６】
以降、順次、内蔵揮発性メモリ１３３０の該当アドレスに格納されているプログラム（Ｇ３）をデータバスＢ１３０２から読み出し、解読した結果に従い各種制御を行う。
【０２５７】
ＣＰＵ１３１０が、内蔵揮発性メモリ１３３０に転送されたプログラム（Ｇ３）を読み出すと、ＣＰＵ１３１０は、アドレスバスＢ１３０１に、エリア２に該当するアドレスを出力すると共に、リードイネーブル信号Ｓ１３０４に‘１’を出力する。この時、空間判定手段１３１１は、ＣＰＵ１３１０が内蔵不揮発性メモリ１３２０に該当するアドレスに転送されたプログラム（Ｇ３）を実行中であるため、外部空間信号Ｓ１３０７に‘０’、内部空間信号Ｓ１３０８に‘０’を出力する。空間情報保持手段１３９５は、外部空間信号Ｓ１３０７が‘０’、内部空間信号Ｓ１３０８が‘０’であるため、前値‘１’を保持し続け、無効化許可信号Ｓ１３９６に‘１’出力し続ける。また、比較手段１３５０は、エリア信号Ｓ１３４１のデータ‘１００’から保護エリアがエリア２であると判断し、且つ、アドレスバスＢ１３０１のアドレスがエリア２に該当するため、比較手段１３５０は一致信号Ｓ１３５１に‘１’を出力する。アンドゲート１３７１は、無効化許可信号Ｓ１３９６が‘１’、一致信号Ｓ１３５１が‘１’であるため、無効化信号Ｓ１３７１に‘１’を出力する。データ無効化手段１３６０は、無効化信号Ｓ１３７１が‘１’であるため、内蔵不揮発性メモリ１３２０からＲＯＭバスＢ１３０６に出力されたプログラム及びデータを、データバスＢ１３０２に出力しない。
【０２５８】
このように、外部メモリ１３８０に格納されたプログラムにより、内蔵揮発性メモリ１３３０に該当するアドレスへ分岐した場合は、内蔵揮発性メモリ１３３０に格納されたプログラムを実行している限り、無効化許可信号Ｓ１３９６が‘１’を出力し続けて一致信号Ｓ１３５１を有効にするので、内蔵不揮発性メモリ１０２０の保護エリアに格納されたプログラム及びデータは、データバスＢ１３０２等から、マイクロコンピュータ１３００の外部へ出力されることはない。
【０２５９】
以上のように、マイクロコンピュータを、空間判定手段１３１１を備えたＣＰＵ１３１０と、３個のメモリ領域で構成した内蔵不揮発性メモリ１３２０と、内蔵不揮発性メモリ１３２０のメモリ領域数と同数の３ビットのビット幅を持つエリアレジスタ１３４０と、比較手段１３５０と、データ無効化手段１３６０と、アンドゲート１３７０と、空間情報保持手段１３９５で構成し、更に、保護エリアを設定するプログラムを記述することにより、内蔵不揮発性メモリ１３２０に格納されたプログラムを実行して、内蔵揮発性メモリ１３３０に該当するアドレスへ分岐した時は、内蔵揮発性メモリ１３３０に格納されたプログラムを実行している限り、無効化許可信号Ｓ１３９６によって一致信号Ｓ１３５１を無効化することにより、内蔵不揮発性メモリ１３２０の保護エリアに格納されたプログラム及びデータを利用することができる。これにより、内蔵不揮発性メモリ１３２０に格納されたプログラムによって、内蔵揮発性メモリ１３３０に該当するアドレスへ分岐する前に、保護エリアの設定解除を行う必要はない。
【０２６０】
尚、前記説明において、内蔵不揮発性メモリ１３２０は均等容量の３個のメモリ領域で構成されているとしたが、内蔵不揮発性メモリ１３２０はｎ個（ｎは１以上の整数）のメモリ領域で構成し、任意のアドレスマッピングであっても良い。
【０２６１】
また、前記説明において、データ無効化手段１３６０は、データ無効化の方法として、内蔵不揮発性メモリ１３２０から読み出したプログラム及びデータをデータバスＢ１３０２に何も出力しないとしたが、リードイネーブル信号Ｓ１３０４に‘１’を出力しない、アドレスバスＢ１３０１に該当アドレスを与えない、データバスＢ１３０２に任意のデータを出力する、などといった、該当するアドレスに格納されたプログラム及びデータが読み出されない構成であれば良い。
【０２６２】
また、前記説明において、空間判定手段１３１１をＣＰＵ１３１０が備えるとしたが、ＣＰＵ１３１０が実行している、保護エリアに格納されたプログラム及びデータを読み出すプログラムが格納されたメモリ領域を判定できる判定手段があれば、ＣＰＵ１３１０が備えなくても良い。
【０２６３】
（実施形態９）
以下、本発明の第９の実施形態について、図６、図１０、図１８〜図２０を参照して説明する。
【０２６４】
図１８は本発明のマイクロコンピュータのブロック図である。同図では、図１と同一名称のものは、異なる符号を付しているが、同一構成であるので、その説明を省略する。図１８において、マイクロコンピュータ１４００は、ＣＰＵ（制御部）１４１０と、内部不揮発性メモリ１４２０と、内蔵揮発性メモリ１４３０と、データ無効化手段１４６０と、ダイレクトメモリアクセスコントローラ１４９０（以下、ＤＭＡＣという）とによって構成されている。また、前記ＣＰＵ１４１０は内部に空間判定手段（判定手段）１４１１を備えている。１４８０は前記マイクロコンピュータ１４００の外部に接続される外部メモリである。
【０２６５】
アドレスバスＢ１４０１は、ＣＰＵ１４１０と、内蔵不揮発性メモリ１４２０と、内蔵揮発性メモリ１４３０と、外部メモリ１４８０と、ＤＭＡＣ（ダイレクトメモリアクセス手段）１４９０とを各々接続する。ここでは説明を簡単にするため、８ビットバス幅とする。データバスＢ１４０２は、ＣＰＵ１４１０と、内蔵揮発性メモリ１４３０と、データ無効化手段１４６０と、外部メモリ１４８０と、ＤＭＡＣ１４９０とを各々接続する。ここでは説明を簡単にするため、４ビットバス幅とする。リードイネーブル信号Ｓ１４０４は、ＣＰＵ１４１０と、内蔵不揮発性メモリ１４２０と、内蔵揮発性メモリ１４３０と、外部メモリ１４８０と、ＤＭＡＣ１４９０とを各々接続する。ライトイネーブル信号Ｓ１４０５は、ＣＰＵ１４１０と、内蔵揮発性メモリ１４３０と、ＤＭＡＣ１４９０とを各々接続する。ＲＯＭバスＢ１４０６は、内蔵不揮発性メモリ１４２０と、データ無効化手段１４６０とを接続する。
【０２６６】
更に、空間信号Ｓ１４０７は、ＣＰＵ１４１０と、ＤＭＡＣ１４９０とを接続する。ソースレジスタライト信号Ｓ１４０８は、ＣＰＵ１４１０と、ＤＭＡＣ１４９０とを接続する。ディストレジスタライト信号Ｓ１４０９は、ＣＰＵ１４１０と、ＤＭＡＣ１４９０とを接続する。ソース信号Ｓ１４９７は、ＤＭＡＣ１４９０と、データ無効化手段１４６０とを接続する。ＤＭＡ起動信号Ｓ１４９８は、マイクロコンピュータ１４００の外部から、ＤＭＡＣ１４９０に入力される。ＤＭＡアクティブ信号Ｓ１４９４は、ＣＰＵ１４１０と、ＤＭＡＣ１４９０とを接続する。
【０２６７】
内蔵不揮発性メモリ１４２０は、プログラム及びデータを格納しており、リードイネーブル信号Ｓ１４０４が‘１’であれば、アドレスバスＢ１４０１のアドレスに該当するメモリ領域に格納されているプログラム及びデータをＲＯＭバスＢ１４０６に出力する。
【０２６８】
内蔵揮発性メモリ１４３０は、プログラム及びデータを格納保持する。リードイネーブル信号Ｓ１４０４が‘１’であれば、アドレスバスＢ１４０１のアドレスに該当するメモリ領域に格納されているプログラム及びデータを、データバスＢ１４０２に出力する。また、内蔵揮発性メモリ１４３０は、ライトイネーブル信号Ｓ１４０５が‘１’ならば、データバスＢ１４０２のプログラム及びデータを、アドレスバスＢ１４０１のアドレスに該当するメモリ領域に格納保持する。
【０２６９】
ＤＭＡＣ１４９０は、ＤＭＡ起動信号Ｓ１４９８が‘１’になれば、ソースレジスタ１４９１に格納されたアドレスに該当するメモリ領域から、後述するディストレジスタ１４９２に格納されたアドレスに該当するメモリ領域へ、ＣＰＵ１４１０を介さずにプログラム及びデータを転送するダイレクトメモリアクセスコントローラである。
【０２７０】
ＤＭＡＣ１４９０は、プログラム及びデータを読み出すアドレスを格納するソースレジスタ１４９１と、プログラム及びデータを書き込む先のアドレスを格納するディストレジスタ１４９２と、ソースレジスタ１４９１を書き換えた時にＣＰＵ１４１０が実行しているプログラムが格納されているアドレス情報を格納する空間レジスタ（判定結果記憶手段）１４９３を備えている。
【０２７１】
ＤＭＡＣ１４９０は、ソースレジスタライト信号Ｓ１４０８が‘１’ならば、データバスＢ１４０２のデータを、ソースレジスタ１４９１に格納保持すると同時に、後述する空間判定手段１４１１が出力する空間信号Ｓ１４０７のデータを、空間レジスタ１４９３に格納する。空間レジスタ１４９３が格納するデータの初期値は‘０’とする。
【０２７２】
また、ＤＭＡＣ１４９０は、ディストレジスタライト信号Ｓ１４０９が‘１’ならば、データバスＢ１４０２のデータを、ディストレジスタ１４９１に格納保持する。
【０２７３】
更に、ＤＭＡＣ１４９０は、マイクロコンピュータ１４００の外部から入力されるＤＭＡ起動信号Ｓ１４９８が‘１’になれば、空間レジスタ１４９３に格納されたデータをソース信号Ｓ１４９７に出力し、ＤＭＡアクティブ信号Ｓ１４９４に‘１’を出力する。
【０２７４】
次に、ＤＭＡＣ１４９０は、ソースレジスタ１４９１に格納されたアドレスをアドレスバスＢ１４０１に出力すると共に、リードイネーブル信号Ｓ１４０４に‘１’を出力し、該当アドレスに格納されたプログラム及びデータをデータバスＢ１４０２から読み出す。
【０２７５】
続いて、ＤＭＡＣ１４９０は、読み出したプログラム及びデータをデータバスＢ１４０２に出力し、ディストレジスタ１４９２に格納されたアドレスをアドレスバスＢ１４０１に出力すると共に、ライトイネーブル信号Ｓ１４０５に‘１’を出力し、該当アドレスにデータを書き込む。書き込みが完了するとソース信号Ｓ１４９７に‘０’、ＤＭＡアクティブ信号Ｓ１４９４に‘０’を出力する。
【０２７６】
データ無効化手段１４６０は、ソース信号Ｓ１４９７が‘１’であれば、内蔵不揮発性メモリ１４２０からＲＯＭバスＢ１４０６に出力された読み出しデータを無効化し、データバスＢ１４０２に何も出力しない。また、ソース信号Ｓ１４９７が‘０’であれば、内蔵不揮発性メモリ１４２０からＲＯＭバスＢ１４０６に出力された読み出しデータを、データバスＢ１４０２に乗せ換えて出力する。
【０２７７】
外部メモリ１４８０は、プログラム及びデータが格納されており、リードイネーブル信号Ｓ１４０４が‘１’であれば、アドレスバスＢ１４０１のアドレスに該当するアドレスに格納されているプログラム及びデータをデータバスＢ１４０２に出力する。
【０２７８】
ＣＰＵ１４１０は、空間判定手段１４１１を備えており、空間判定手段１４１１は、ＣＰＵ１４１０が現在実行中のプログラムが、どのメモリに格納されているかを判定し、判定結果を外部空間信号Ｓ１４０７及び空間信号Ｓ１４０８に出力する。
【０２７９】
ここで、マイクロコンピュータ１４００のメモリ空間について、図６を用いて説明する。図６で、マイクロコンピュータ１４００のメモリ空間はアドレスに応じて３つの領域に分割されており、アドレス００Ｈから５ＦＨまでは内蔵不揮発性メモリ１４２０に該当し、同様に、アドレス６０Ｈから７ＦＨまでは内蔵揮発性メモリ１４３０、アドレス８０ＨからＦＦＨまでは外部メモリ１４８０に該当する。すなわち、内蔵不揮発性メモリ１４２０は、８ビット幅のアドレスバスＢ１４０１の上位３ビットが‘０００’又は‘００１’又は‘０１０’の領域、同様に内蔵揮発性メモリ１４３０は上位３ビットが‘０１１’、外部メモリ１４８０は、最上位ビットが‘１’の領域となる。
【０２８０】
以上のようなメモリ空間に対する、空間判定手段１４１１の空間判定機能を、図１０を用いて説明する。図１０は空間判定手段１４１１の空間判定機能を説明する図である。図１０は左から、ＣＰＵ１４１０が現在実行しているプログラムが格納されているアドレス（以下、実行アドレスという）のビット７の値、ビット６の値、ビット５の値、ビット４の値、該当するメモリ、空間信号Ｓ１４０７の値である。例えば、実行アドレスが‘５２Ｈ’ならば、実行アドレスの上位４ビットが‘０１０１’であるため、空間判定手段１４１１が出力する空間信号Ｓ１４０７は‘０’となる。また、実行アドレスが‘８２Ｈ’ならば、実行アドレスの上位４ビットが‘１０００’であるため、空間信号Ｓ１４０７は‘１’となる。このようにして、空間判定手段１４１１は、実行アドレスが、マイクロコンピュータ１４００のどのメモリのアドレスに該当するか判定し、内蔵不揮発性メモリ１４２０のアドレスに該当すれば‘０’を、非該当ならば‘１’を空間信号Ｓ１４０７に出力する。
【０２８１】
また、ＣＰＵ１４１０は、ＤＭＡアクティブ信号Ｓ１４９４が‘０’であれば、後述する各種制御を実行し、ＤＭＡアクティブ信号Ｓ１４９４が‘１’であれば、各種制御を停止する。
【０２８２】
更に、ＣＰＵ１４１０は、アドレスバスＢ１４０１に内蔵不揮発性メモリ１４２０に該当するアドレスを出力すると共に、リードイネーブル信号Ｓ１４０４に‘１’を出力し、順次、内蔵不揮発性メモリ１４２０に格納されているプログラムを、ＲＯＭバスＢ１４０６、無効化手段１４４０を介してデータバスＢ１４０２から読み出し、解読した結果に従い各種制御を行う。また、内蔵不揮発性メモリ１４２０から読み出したプログラムが、内蔵揮発性メモリ１４３０又は外部メモリ１４８０への分岐命令である場合には、アドレスバスＢ１４０１に内蔵揮発性メモリ１４３０又は外部メモリ１４８０の該当するアドレスを出力すると共に、リードイネーブル信号Ｓ１４０４に‘１’を出力し、内蔵揮発性メモリ１４３０又は外部メモリ１４８０に格納されているプログラムを、データバスＢ１４０２から読み出し、解読した結果に従い各種制御を行う。
【０２８３】
また、ＣＰＵ１４１０は、ライトイネーブル信号Ｓ１４０５に‘１’、アドレスバスＢ１４０１に内蔵揮発性メモリ１４３０に該当するアドレスを各々出力すると共に、データバスＢ１４０２にデータを出力し、内蔵揮発性メモリ１４３０に任意の値を書込むことができる。また、ＣＰＵ１４１０は、データバスＢ１４０２にデータを出力すると共にエリアレジスタライト信号Ｓ１４０３に‘１’を出力し、エリアレジスタ１４４０を任意の値に書き換えることができる。また、ＣＰＵ１４１０は、データバスＢ１４０２にデータを出力すると共にソースレジスタライト信号Ｓ１４０８に‘１’を出力して、ソースレジスタ１４９１を任意の値に書き換えることができる。また、ＣＰＵ１４１０は、データバスＢ１４０２にデータを出力すると共にディストレジスタライト信号Ｓ１４０９に‘１’を出力して、ディストレジスタ１４９１を任意の値に書き換えることができる。
【０２８４】
以上のように構成された本発明の第９の実施形態において、内蔵不揮発性メモリ１４２０に格納されたプログラム及びデータ読み出し保護動作について、マイクロコンピュータ１４００の動作を図１９〜図２０を用いて説明する。
【０２８５】
図１９は、マイクロコンピュータ１４００の各メモリ領域に格納されたプログラムをプログラムの実行順に説明する図である。図１９において、先ず、（Ａ）のプログラムスタート時、ＣＰＵ１４１０は、アドレスバスＢ１４０１に、内蔵不揮発性メモリ１４２０に該当するアドレスを出力すると共に、リードイネーブル信号Ｓ１４０４に‘１’を出力し、内蔵不揮発性メモリ１４２０に格納されているプログラムを読み出そうとする。また、ＤＭＡＣ１４９０は起動していないためソース信号Ｓ１４９７に‘０’を出力する。データ無効化手段１４６０は、ソース信号Ｓ１４９７が‘０’であるため、内蔵不揮発性メモリ１４２０からＲＯＭバスＢ１４０６に出力されたプログラムを、データバスＢ１４０２に乗せ換えて出力する。
【０２８６】
このように、ＣＰＵ１４１０は順次、内蔵不揮発性メモリ１４２０の該当アドレスに格納されているプログラムを、ＲＯＭバスＢ１４０６及びデータ無効化手段１４６０を介してデータバスＢ１４０２から読み出し、解読した結果に従い各種制御を行う。
【０２８７】
次に、ＣＰＵ１４１０が（Ｂ）のプログラムを読み出すと、先ず、ソースレジスタ１４９１に内蔵不揮発性メモリ１４２０に該当するアドレスを書き込むように、ＣＰＵ１４１０は、データバスＢ１４０２に内蔵不揮発性メモリ１４２０に該当するアドレスを出力すると共に、ソースレジスタライト信号Ｓ１４０８に‘１’を出力する。この時、空間判定手段１４１１は、ＣＰＵ１４１０が内蔵不揮発性メモリ１４２０に該当するアドレスに配置されたプログラム（Ｂ）を実行中であるため、空間信号Ｓ１４０７に‘０’を出力する。ＤＭＡＣ１４９０は、ソースレジスタライト信号Ｓ１４０８が‘１’であるため、データバスＢ１４０２に出力されている内蔵不揮発性メモリ１４２０に該当するアドレスをソースレジスタ１４９１に格納保持すると同時に、空間レジスタ１４９３に空間信号Ｓ１４０７のデータ‘０’を格納保持する。また、ＤＭＡＣ１４９０は起動していないため、ソース信号Ｓ１４９７に‘０’を出力する。
【０２８８】
次に、ディストレジスタ１４９２に内蔵揮発性メモリ１４３０に該当するアドレスを書き込むように、ＣＰＵ１４１０は、データバスＢ１４０２に内蔵揮発性メモリ１４３０に該当するアドレスを出力すると共に、ディストレジスタライト信号Ｓ１４０９に‘１’を出力する。ＤＭＡＣ１４９０は、ディストレジスタライト信号Ｓ１４０９が‘１’であるため、ディストレジスタ１４９２にデータバスＢ１４０２に出力されている内蔵揮発性メモリ１４３０に該当するアドレスを格納、保持する。
【０２８９】
次に、プログラム（Ｃ）のタイミングでＤＭＡＣ１４９０を起動するように、マイクロコンピュータ１４００の外部からＤＭＡ起動信号Ｓ１４９８に‘１’を入力する。ＤＭＡＣ１４９０は、ＤＭＡ起動信号Ｓ１４９８が‘１’であるため、空間レジスタ１４９３のデータ‘０’をソース信号Ｓ１４９７に出力し、ＤＭＡアクティブ信号Ｓ１４９４に‘１’を出力する。ＣＰＵ１４１０は、ＤＭＡアクティブ信号Ｓ１４９４が‘１’であるため、各種制御を停止する。
【０２９０】
次に、ＤＭＡＣ１４９０は、アドレスバスＢ１４０１に、ソースレジスタ１４９１に格納された内蔵不揮発性メモリ１４２０に該当するアドレスを出力すると共に、リードイネーブル信号Ｓ１４０４に‘１’を出力する。データ無効化手段１４６０は、ソース信号Ｓ１４９７が‘０’であるため、内蔵不揮発性メモリ１４２０からＲＯＭバスＢ１４０６に出力されたプログラム及びデータを、データバスＢ１４０２に乗せ換えて、出力する。
【０２９１】
次に、ＤＭＡＣ１４９０は、ライトイネーブル信号Ｓ１４０５に‘１’、アドレスバスＢ１４０１に、ディストレジスタ１４９２に格納された内蔵揮発性メモリ１４３０に該当するアドレスを出力すると共に、不揮発性メモリ１４２０に該当するアドレスから読み出したプログラム及びデータをデータバスＢ１４０２に出力する。内蔵揮発性メモリ１４３０は、ライトイネーブル信号Ｓ１４０５が‘１’であるため、データバスＢ１４０２のプログラム及びデータを、アドレスバスＢ１４０１のアドレスに該当するメモリ領域に格納、保持する。
【０２９２】
以上を繰り返すことにより、内蔵不揮発性メモリ１４２０に格納されたプログラム及びデータを内蔵揮発性メモリ１４３０に転送する。
【０２９３】
次に、プログラム及びデータ転送が完了すれば、ＤＭＡＣ１４９０は、ＤＭＡアクティブ信号として‘０’を出力する。ＣＰＵ１４１０は、ＤＭＡアクティブ信号Ｓ１４９４が‘０’であるため、各種制御を再開する。
【０２９４】
次に、ＣＰＵ１４１０が（Ｄ）のプログラムを読み出すと、ＣＰＵ１４１０は、プログラムの読み出し先を外部メモリ１４８０の該当アドレスへと変更し、アドレスバスＢ１４０１に該当アドレスを出力すると共に、リードイネーブル信号Ｓ１４０４に‘１’を出力し、順次、外部メモリ１４８０の該当アドレスに格納されているプログラムをデータバスＢ１４０２から読み出し、解読した結果に従い各種制御を行う。
【０２９５】
続いて、ＣＰＵ１４１０が（Ｅ）のプログラムを読み出すと、ＣＰＵ１４１０は、プログラムの読み出し先を内蔵不揮発性メモリ１４２０の該当アドレスへと変更し、アドレスバスＢ１４０１に該当アドレスを出力すると共に、リードイネーブル信号Ｓ１４０４に‘１’を出力し、順次、内蔵不揮発性メモリ１４２０の該当アドレスに格納されているプログラムをデータバスＢ１４０２から読み出し、解読した結果に従い各種制御を行う。
【０２９６】
ここで、不正ユーザが外部メモリ１４８０に格納されたプログラムを改変し、内蔵不揮発性メモリ１４２０に該当するアドレスに格納されたプログラム及びデータを読み出そうとした場合の、マイクロコンピュータ１４００の動作を図２０を用いて説明する。図２０は、図１９のプログラム（Ｅ）を不正ユーザが改変した場合の、マイクロコンピュータ１４００の各メモリ領域に格納されたプログラムをプログラムの実行順に説明する図である。
【０２９７】
不正ユーザが（Ｅ）のプログラムを下記（Ｅ１）及び（Ｅ２）の２つのプログラムに改変したとする。
【０２９８】
（Ｅ１）内蔵不揮発性メモリ１４２０に該当するアドレスに格納されたプログラム及びデータを、外部メモリ１４８０に該当するアドレスへ転送するように、ＤＭＡＣ１４９０を設定するプログラム
【０２９９】
（Ｅ２）内蔵不揮発性メモリ１４２０へ分岐するプログラム
【０３００】
また、不正ユーザは、ＣＰＵ１４１０がプログラム（Ｅ２）を実行し、プログラムの読み出しを内蔵不揮発性メモリ１４２０に該当するアドレスに変更した後の（Ｆ）のタイミングにおいて、ＤＭＡＣ１４９０を起動するように、ＤＭＡ起動信号Ｓ１４９９に‘１’を入力したとする。
【０３０１】
この時のプログラム（Ａ）〜（Ｄ）のマイクロコンピュータ１４００の動作は、前述した動作と同じである。
【０３０２】
次に、ＣＰＵ１４１０が、改変された（Ｅ１）のプログラムを読み出すと、先ず、ソースレジスタ１４９１に内蔵不揮発性メモリ１４２０に該当するアドレスを書き込むように、ＣＰＵ１４１０は、データバスＢ１４０２に内蔵不揮発性メモリ１４２０に該当するアドレスを出力すると共に、ソースレジスタライト信号Ｓ１４０８に‘１’を出力する。この時、空間判定手段１４１１は、ＣＰＵ１４１０が外部メモリ１４８０に該当するアドレスに配置された改変されたプログラム（Ｅ１）を実行中であるため、空間信号Ｓ１４０７に‘１’を出力する。ＤＭＡＣ１４９０は、ソースレジスタライト信号Ｓ１４０８が‘１’であるため、データバスＢ１４０２に出力されている内蔵不揮発性メモリ１４２０に該当するアドレスをソースレジスタ１４９１に格納、保持すると同時に、空間レジスタ１４９３に空間信号Ｓ１４０７のデータ‘１’を格納保持する。また、ＤＭＡＣ１４９０は起動していないため、ソース信号Ｓ１４９７に‘０’を出力する。
【０３０３】
次に、ディストレジスタ１４９２に、外部メモリ１４８０に該当するアドレスを書き込むように、ＣＰＵ１４１０は、データバスＢ１４０２に外部メモリ１４８０に該当するアドレスを出力すると共に、ディストレジスタライト信号Ｓ１４０９に‘１’を出力する。ＤＭＡＣ１４９０は、ディストレジスタライト信号Ｓ１４０９が‘１’であるため、ディストレジスタ１４９２にデータバスＢ１４０２に出力されている外部メモリ１４８０に該当するアドレスを格納保持する。
【０３０４】
続いて、ＣＰＵ１４１０が、改変された（Ｅ２）のプログラムを読み出すと、ＣＰＵ１４１０は、プログラムの読み出し先を内蔵不揮発性メモリ１４２０の該当アドレスへと変更し、アドレスバスＢ１４０１に該当アドレスを出力すると共に、リードイネーブル信号Ｓ１４０４に‘１’を出力し、順次、内蔵不揮発性メモリ１４２０の該当アドレスに格納されているプログラムをデータバスＢ１４０２から読み出し、解読した結果に従い各種制御を行う。
【０３０５】
次に、（Ｆ）のプログラムにおいて、ＤＭＡＣ１４９０を起動するために、マイクロコンピュータ１４００の外部からＤＭＡ起動信号Ｓ１４９８に‘１’を入力する。ＤＭＡＣ１４９０は、ＤＭＡ起動信号Ｓ１４９８が‘１’であるため、空間レジスタ１４９３のデータ‘１’をソース信号Ｓ１４９７に出力し、ＤＭＡアクティブ信号Ｓ１４９４に‘１’を出力する。ＣＰＵ１４１０は、ＤＭＡアクティブ信号Ｓ１４９４が‘１’であるため、各種制御を停止する。
【０３０６】
次に、ＤＭＡＣ１４９０は、アドレスバスＢ１４０１に、ソースレジスタ１４９１に格納された、内蔵不揮発性メモリ１４２０に該当するアドレスを出力すると共に、リードイネーブル信号Ｓ１４０４に‘１’を出力する。データ無効化手段１４６０は、ソース信号Ｓ１４９７が‘１’であるため、内蔵不揮発性メモリ１４２０からＲＯＭバスＢ１４０６に出力されたプログラム及びデータを、データバスＢ１４０２に出力しない。
【０３０７】
このように、外部メモリ１４８０に該当するアドレスに配置されたプログラムにより、ＤＭＡＣ１４９０のソースレジスタ１４９１を書換えた場合は、ソース信号Ｓ１４９７が‘１’を出力してデータ無効化手段１４６０を有効にするので、内蔵不揮発性メモリ１４２０に格納されたプログラム及びデータは、マイクロコンピュータ１４００の外部へ出力されることはない。
【０３０８】
以上のように、マイクロコンピュータを、空間判定手段１４１１を備えたＣＰＵ１４１０と、内蔵不揮発性メモリ１４２０と、データ無効化手段１４６０と、空間レジスタ１４９３を備えたＤＭＡＣ１４９０で構成することにより、不正ユーザが外部メモリ１４８０を改変し、ＤＭＡＣ１４９０を利用して内蔵不揮発性メモリ１４２０に格納されたプログラム及びデータの読み出しを試みても、外部メモリ１４８０に該当するアドレスに配置されたプログラムでＤＭＡＣ１４９０を設定する限り、内蔵不揮発性メモリ１４２０に格納されたプログラム及びデータを読み出すことができず、セキュリティが向上する。
【０３０９】
尚、前記説明において、外部メモリ１４８０に該当するアドレスへ分岐する場合を例にとって説明したが、内蔵揮発性メモリ１４３０に該当するアドレスへ分岐する場合も、不正ユーザが内蔵揮発性メモリ１４３０にプログラムを転送、実行して、ＤＭＡＣ１４９０を介して内蔵不揮発性メモリ１４２０に格納されたプログラム及びデータを読み出そうと試みても、内蔵不揮発性メモリ１４２０に格納されたデータは読み出すことができず、セキュリティが向上する。
【０３１０】
尚、内蔵不揮発性メモリ１４２０は、任意のアドレスマッピングであっても良いのは勿論である。
【０３１１】
また、前記説明において、データ無効化手段１４６０は、データ無効化の方法として、内蔵不揮発性メモリ１４２０から読み出したプログラム及びデータをデータバスＢ１４０２に何も出力しないとしたが、リードイネーブル信号Ｓ１４０４に‘１’を出力しない、アドレスバスＢ１４０１に該当アドレスを与えない、データバスＢ１４０２に任意のデータを出力する、などといった、該当するアドレスに格納されたプログラム及びデータが読み出されない構成であれば良い。
【０３１２】
更に、前記説明において、空間判定手段１４１１をＣＰＵ１４１０が備えるとしたが、ＣＰＵ１４１０が実行しているプログラムが格納されたメモリ領域を判定できる判定手段があれば、ＣＰＵ１４１０が備えなくても良い。
【０３１３】
また、前記説明において、ＤＭＡＣ１４９０の起動要因として、マイクロコンピュータ１４００外部からＤＭＡ起動信号Ｓ１４９８を入力する構成としたが、ＣＰＵ１４１０が実行するプログラム要因以外であれば良い。
【産業上の利用可能性】
【０３１４】
以上説明したように、本発明のマイクロコンピュータによれば、内蔵不揮発性メモリ内の記憶領域に読み出し不許可領域を設定して、その不許可領域以外の記憶領域に格納されたプログラムやデータを外部メモリ又は内蔵揮発性メモリ内のプログラムから必要に応じて読み出すことを可能にしつつ、不正ユーザが前記不許可領域に格納された秘匿が必要なプログラムやデータを読み出そうと試みても、その読み出しを不可能にできるので、セキュリティを向上したマイクロコンピュータ等として有用である。
【図面の簡単な説明】
【０３１５】
【図１】本発明の第１の実施形態におけるマイクロコンピュータの構成を示すブロック図である。
【図２】同マイクロコンピュータに備える内蔵不揮発性メモリのメモリ領域の割り当て構成を示す図である。
【図３】同マイクロコンピュータに備える比較手段の動作を説明する図である。
【図４】同マイクロコンピュータの動作を説明する図である。
【図５】本発明の第２の実施形態におけるローダ・リンカの動作を説明する図である。
【図６】同実施形態でのマイクロコンピュータのメモリ空間を説明する図である。
【図７】本発明の第３の実施形態における言語処理系の動作を説明する図である。
【図８】同言語処理系での言語例を示す図である。
【図９】本発明の第５の実施形態におけるマイクロコンピュータの構成を示すブロック図である。
【図１０】同マイクロコンピュータに備える空間判定手段の動作を説明する図である。
【図１１】同マイクロコンピュータの動作を説明する図である。
【図１２】本発明の第６の実施形態におけるマイクロコンピュータの構成を示すブロック図である。
【図１３】同マイクロコンピュータの動作を説明する図である。
【図１４】本発明の第７の実施形態におけるマイクロコンピュータの構成を示すブロック図である。
【図１５】本発明の第８の実施形態におけるマイクロコンピュータの構成を示すブロック図である。
【図１６】同マイクロコンピュータに備える空間判定手段の動作を説明する図である。
【図１７】同マイクロコンピュータの動作を説明する図である。
【図１８】本発明の第９の実施形態におけるマイクロコンピュータの構成を示すブロック図である。
【図１９】同マイクロコンピュータの正常動作を説明する図である。
【図２０】同マイクロコンピュータにおいて不正ユーザが外部メモリのプログラムを改変した場合の動作を説明する図である。
【符号の説明】
【０３１６】
１００、１０００、１１００、１２００、１３００、１４００  マイクロコンピュータ
１１０、１０１０、１１１０、１２１０、１３１０、１４１０  ＣＰＵ（制御部）
１２０、１０２０、１１２０、１２２０、１３２０、１４２０  内蔵不揮発性メモリ
１３０、１０３０、１１３０、１２３０、１３３０、１４３０  内蔵揮発性メモリ
１４０、１０４０、１１４０、１２４０、１３４０    エリアレジスタ（保護領域記憶手段）
１５０、１０５０、１１５０、１２５０、１３５０    比較手段
１６０、１０６０、１１６０、１２６０、１３６０、１４６０    データ無効化手段
１８０、１０８０、１１８０、１２８０、１３８０、１４８０    外部メモリ
６１０、７０８          ローダ・リンカ
７０２      前処理系
７０４      コンパイラ
７０６      アッセンブラ
１１９０    キーコード比較手段（認証手段）
１０１１、１１１１、１２１１、１３１１、１４１１  空間判定手段（判定手段）
１０７０、１１７０、１２７０、１３７０            二入力一出力アンドゲート
１３９５          空間情報保持手段（判定結果記憶手段）
１２７５          インバータ
１４９０          ＤＭＡＣ（ダイレクトメモリアクセス手段）
１４９１          ソースレジスタ
１４９２          ディストレジスタ
１４９３          空間レジスタ（判定結果記憶手段）
Ｂ１０１、Ｂ１００１、Ｂ１１０１、
Ｂ１２０１、Ｂ１３０１、Ｂ１４０１        アドレスバス
Ｂ１０２、Ｂ１００２、Ｂ１１０２、
Ｂ１２０２、Ｂ１３０２、Ｂ１４０２        データバス
Ｓ１０３、Ｓ１００３、Ｓ１１０３、
Ｓ１２０３、Ｓ１３０３                    エリアレジスタライト信号
Ｓ１０４、Ｓ１００４、Ｓ１１０４、
Ｓ１２０４、Ｓ１５０４３Ｓ１４０４        リードイネーブル信号
Ｓ１０５、Ｓ１００５、Ｓ１１０５、
Ｓ１２０５、Ｓ１３０５、Ｓ１４０５        ライトイネーブル信号
Ｂ１０６、Ｂ１００６、Ｂ１１０６、
Ｂ１２０６、Ｂ１３０６、Ｂ１４０６        ＲＯＭバス
Ｓ１４１、Ｓ１０４１、Ｓ１１４１、Ｓ１２４１、Ｓ１３４１      エリア信号
Ｓ１５１、Ｓ１０５１、Ｓ１１５１、Ｓ１２５１、Ｓ１３５１      一致信号
Ｓ１００７、Ｓ１１０７、Ｓ１２０７              空間信号
Ｓ１５１、Ｓ１０７１、Ｓ１３７１、Ｓ１４７１    無効化信号
Ｓ１１０９                キーコード比較信号
Ｓ１１７１、Ｓ１２７１    書換え許可信号
Ｓ１１９１                キーコード一致信号
Ｓ１２７７                反転空間信号
Ｓ１３０７                外部空間信号
Ｓ１３０８                内部空間信号
Ｓ１３９６                無効化許可信号
Ｓ１４０８                ソースレジスタライト信号
Ｓ１４０９                ディストレジスタライト信号
Ｓ１４９４                ＤＭＡアクティブ信号
Ｓ１４９７                ソース信号
Ｓ１４９８                ＤＭＡ起動信号
【図１】
2005157740.tif 000003
【図２】
2005157740.tif 000004
【図３】
2005157740.tif 000005
【図４】
2005157740.tif 000006
【図５】
2005157740.tif 000007
【図６】
2005157740.tif 000008
【図７】
2005157740.tif 000009
【図８】
2005157740.tif 000010
【図９】
2005157740.tif 000011
【図１０】
2005157740.tif 000012
【図１１】
2005157740.tif 000013
【図１２】
2005157740.tif 000014
【図１３】
2005157740.tif 000015
【図１４】
2005157740.tif 000016
【図１５】
2005157740.tif 000017
【図１６】
2005157740.tif 000018
【図１７】
2005157740.tif 000019
【図１８】
2005157740.tif 000020
【図１９】
2005157740.tif 000021
【図２０】
2005157740.tif 000022