(57)【特許請求の範囲】
【請求項１】
複数のオリジナルコードを記憶したＲＯＭと、
第１の値を少なくとも１つのビットに加算し、または前記第１の値または第２の値を少なくとも１つのビットに設定することによって、アドレスを更新するプログラムカウンタと、
少なくとも１つの挿入コードと、前記挿入コードのアドレスを保持したレジスタと、
前記プログラムカウンタのアドレスに応じて、前記レジスタ内の前記プログラムカウンタで指定されるアドレスに対応する挿入コードか、前記ＲＯＭ内の前記プログラムカウンタで指定されるアドレスのオリジナルコードのいずれかを選択する選択回路と、
前記選択回路で選択されたコードを実行する命令実行部とを備え、
前記複数のオリジナルコードおよび前記挿入コードのうちの少なくとも１つが、マルチサイクル命令であり、
前記プログラムカウンタは、マルチサイクル命令の実行時には、アドレスの更新を停止する、マイクロコンピュータ。
【請求項２】
前記ＲＯＭ内の複数のオリジナルコードのアドレスは、最下位から２ビット目以上のビットが有効であり、
前記レジスタは、
前記保持している挿入コードのアドレスの最下位ビットを除くビットと前記プログラムカウンタのアドレスの最下位ビットを除くビットとが一致したときに、第１の信号を出力し、
前記第１の信号を出力し、かつ前記プログラムカウンタのアドレスの最下位ビットが前記第１の値のときに、第２の信号を出力するとともに、前記保持している挿入コードを出力し、
前記プログラムカウンタは、前記第１の信号を受けたときに、最下位ビットに前記第１の値を加算し、前記第１の信号を受けないときに、最下位から２番目のビットに前記第１の値を加算し、
前記選択回路は、前記第２の信号を受けたときに、前記挿入コードを選択し、前記第２の信号を受けなかったときに、前記オリジナルコードを選択する、請求項１に記載のマイクロコンピュータ。
【請求項３】
前記ＲＯＭ内の複数のオリジナルコードのアドレスは、最下位から２ビット目以上のビットが有効であり、
前記レジスタは、
前記保持している挿入コードのアドレスの最下位ビットを除くビットと前記プログラムカウンタのアドレスの最下位ビットを除くビットとが一致したときに、第１の信号を出力し、
前記第１の信号を出力し、かつ前記保持している挿入コードのアドレスの最下位ビットと前記プログラムカウンタのアドレスの最下位ビットが一致するときに、第２の信号を出力するとともに、前記保持している挿入コードを出力し、
前記プログラムカウンタは、前記第１の信号を受けたときに、最下位ビットに前記第１の値を加算し、前記第１の信号を受けないときに、最下位から２番目のビットに前記第１の値を加算し、
前記選択回路は、前記第２の信号を受けたときに、前記挿入コードを選択し、前記第２の信号を受けなかったときに、前記オリジナルコードを選択する、請求項１に記載のマイクロコンピュータ。
【請求項４】
前記ＲＯＭ内の複数のオリジナルコードのアドレスは、最下位からｎビット目以上のビットが有効であり、
前記レジスタは、
前記保持している挿入コードのアドレスの最上位ビットを除くビットと前記プログラムカウンタのアドレスの最上位ビットを除くビットとが一致したときに、第１の信号を出力し、
前記第１の信号を出力し、かつ前記プログラムカウンタのアドレスの最上位ビットが前記第１の値のときに、第２の信号を出力するとともに、前記保持している挿入コードを出力し、
前記プログラムカウンタは、前記第１の信号を受けたときに、最上位ビットに前記第１の値を加算し、前記第１の信号を受けないときに、最下位からｎビット目に前記第１の値を加算し、
前記選択回路は、前記第２の信号を受けたときに、前記挿入コードを選択し、前記第２の信号を受けなかったときに、前記オリジナルコードを選択する、請求項１に記載のマイクロコンピュータ。
【請求項５】
前記ＲＯＭ内の複数のオリジナルコードのアドレスは、最下位からｎビット目以上かつ最上位ビットを除くビットが有効であり、
前記レジスタは、
前記保持している挿入コードのアドレスの最上位ビットを除くビットと前記プログラムカウンタのアドレスの最上位ビットを除くビットとが一致し、かつ前記プログラムカウンタのアドレスの最上位ビットが前記第１の値のときに、第１の信号を出力するとともに、前記保持している挿入コードを出力し、
前記プログラムカウンタは、前記第１の信号を受けたときに、最上位ビットに前記第１の値を加算し、前記第１の信号を受けないときに、最下位からｎビット目に前記第１の値を加算し、かつ最上位ビットを前記第２の値にし、
前記選択回路は、前記第１の信号を受けたときに、前記挿入コードを選択し、前記第１の信号を受けなかったときに、前記オリジナルコードを選択する、請求項１に記載のマイクロコンピュータ。
【請求項６】
前記ＲＯＭ内の複数のオリジナルコードのアドレスは、最下位から（ｎ＋１）ビット目以上のビットが有効であり、
前記レジスタは、
最大で２n-１個の挿入コードと、前記挿入コードのアドレスを保持し、
前記保持している挿入コードのアドレスの最下位からｎ個のビットを除くビットと前記プログラムカウンタのアドレスの最下位からｎ個のビットを除くビットとが一致したときに、第１の信号を出力し、
前記第１の信号を出力し、かつ前記保持している挿入コードのアドレスの最下位からｎ個のビットと前記プログラムカウンタのアドレスの最下位からｎ個のビットとが一致したときに、第２の信号を出力するとともに、前記プログラムカウンタのアドレスに対応する前記保持している挿入コードを出力し、
前記プログラムカウンタは、前記第１の信号を受けたときに、最下位ビットに前記第１の値を加算し、前記第１の信号を受けなかったときに、最下位から（ｎ＋１）番目のビットに前記第１の値を加算し、
前記選択回路は、前記第２の信号を受けたときに、前記挿入コードを選択し、前記第２の信号を受けなかったときに、前記オリジナルコードを選択する、請求項１に記載のマイクロコンピュータ。
【請求項７】
前記レジスタは、
複数の挿入コードを連続して挿入するときに最後の挿入コードを出力する場合には、前記第２の信号を出力するとともに、同時に挿入エンドを示す挿入エンド信号を出力する、請求項６に記載のマイクロコンピュータ。
【請求項８】
前記プログラムカウンタは、前記挿入エンド信号を受けたときには、前記第１の信号を受けたときでも、最下位から（ｎ＋１）番目のビットに前記第１の値を加算し、最下位からｎ個のビットを前記第２の値にする、請求項７に記載のマイクロコンピュータ。
【請求項９】
前記プログラムカウンタは、前記挿入エンド信号を受けたときには、最下位からｎ個のビットを前記第１の値にする、請求項７に記載のマイクロコンピュータ。
【請求項１０】
前記ＲＯＭ内の複数のオリジナルコードのアドレスは、最下位からｍビット目以上のビットが有効であり、
前記レジスタは、
最大で２n-１個の挿入コードと、前記挿入コードのアドレスを保持し、
前記保持している挿入コードのアドレスの最上位からｎ個のビットを除くビットと前記プログラムカウンタのアドレスの最上位からｎ個のビットを除くビットとが一致したときに、第１の信号を出力し、
前記第１の信号を出力し、かつ前記保持している挿入コードのアドレスの最上位からｎ個のビットと前記プログラムカウンタのアドレスの最上位からｎ個のビットとが一致したときに、第２の信号を出力するとともに、前記プログラムカウンタのアドレスに対応する前記保持している挿入コードを出力し、
前記プログラムカウンタは、前記第１の信号を受けたときに、最上位からｎ番目のビットに前記第１の値を加算し、前記第１の信号を受けなかったときに、最下位からｍ番目のビットに前記第１の値を加算し、
前記選択回路は、前記第２の信号を受けたときに、前記挿入コードを選択し、前記第２の信号を受けなかったときに、前記オリジナルコードを選択する、請求項１に記載のマイクロコンピュータ。
【請求項１１】
前記レジスタは、
複数の挿入コードを連続して挿入するときに最後の挿入コードを出力する場合には、前記第２の信号を出力するとともに、挿入エンドを示す挿入エンド信号を出力する、請求項１０に記載のマイクロコンピュータ。
【請求項１２】
前記プログラムカウンタは、前記挿入エンド信号を受けたときには、前記第１の信号を
受けたときでも、最下位からｍ番目のビットに前記第１の値を加算し、かつ最上位からｎ個のビットを前記第２の値にする、請求項１１に記載のマイクロコンピュータ。
【請求項１３】
前記ＲＯＭ内の複数のオリジナルコードのアドレスは、最下位からｍビット目以上のビットが有効であり、
前記レジスタは、
最大で２n-１個の挿入コードと、前記挿入コードのアドレスを保持し、
前記保持している挿入コードのアドレスの最上位からｎ個のビットを除くビットと前記プログラムカウンタのアドレスの最上位からｎ個のビットを除くビットとが一致し、かつ前記保持している挿入コードのアドレスの最上位からｎ個のビットと前記プログラムカウンタのアドレスの最上位からｎ個のビットとが一致したときに、第１の信号を出力するとともに、前記プログラムカウンタのアドレスに対応する前記保持している挿入コードを出力し、
前記プログラムカウンタは、前記第１の信号を受けたときに、最上位からｎ番目のビットに前記第１の値を加算し、前記第１の信号を受けなかったときに、最下位からｍ番目のビットに前記第１の値を加算し、かつ最上位からｎ個のビットを前記第２の値にし、
前記選択回路は、前記第１の信号を受けたときに、前記挿入コードを選択し、前記第１の信号を受けなかったときに、前記オリジナルコードを選択する、請求項１に記載のマイクロコンピュータ。
【請求項１４】
前記レジスタは、ステータスビットを保持し、
前記選択回路は、前記ステータスビットの値が前記第２の値のときに、前記プログラムカウンタのアドレスに係わらず、前記オリジナルコードを選択する、請求項１に記載のマイクロコンピュータ。
【請求項１５】
半導体基板に電気的に消去および書込みが可能な不揮発性メモリと、前記不揮発性メモリをアクセス可能な中央処理装置と、前記中央処理装置からのアクセスに従い所定のシーケンスで前記不揮発性メモリの制御を行う不揮発性メモリ制御回路を備え、
前記不揮発性メモリ制御回路は、
所定のシーケンスで実行される複数の命令コードがＭ個の有効ビットで指定されるアドレスに格納されたＲＯＭと、
前記ＲＯＭに格納された命令コードを選択するアドレス更新するＫ（＞Ｍ）ビット出力のプログラムカウンタと、
前記所定のシーケンスで実行される複数の命令コードの間に挿入する挿入コードと前記挿入コードの挿入先を示すアドレスを保持したレジスタ回路と、
前記プログラムカウンタからのアドレスと前記レジスタ回路に保持された挿入コードの挿入先を示すアドレスとの一致検出結果に応じて、前記ＲＯＭに格納された命令コードと前記レジスタ回路に保持された挿入コードのいずれかを選択するコード選択回路と、
前記コード選択回路で選択されたコードを実行する命令実行部とを備え、
前記プログラムカウンタは、コード挿入時に前記Ｍ個の有効ビット中の最下位ビットへの1ビット加算を前記Ｍ個の有効ビット外の出力ビットへの1ビット加算に切り替える加算値選択回路を備え、
前記命令実行部は、少なくとも１つのマルチサイクル命令を実行可能であり、前記マルチサイクル命令の実行時に前記プログラムカウンタへアドレスの更新停止を指示する、マイクロコンピュータ。
【請求項１６】
前記挿入コードの挿入先を示すアドレスを保持したレジスタは、前記プログラムカウンタの出力と同じビット数（Ｋビット）のビットデータを保持する、請求項１５記載のマイクロコンピュータ。
【請求項１７】
半導体基板に電気的に消去および書込みが可能な不揮発性メモリと、所定のシーケンスで前記不揮発性メモリの制御を行う不揮発性メモリ制御回路を備え、
前記不揮発性メモリ制御回路は、
所定のシーケンスで実行される複数の命令コードがＭ個の有効ビットで指定されるアドレスに格納されたＲＯＭと、
前記ＲＯＭに格納された命令コードを選択するアドレス更新するＫ（＞Ｍ）ビット出力のプログラムカウンタと、
前記所定のシーケンスで実行される複数の命令コードの間に挿入する挿入コードと前記挿入コードの挿入先を示すアドレスを保持したレジスタ回路と、
前記プログラムカウンタからのアドレスと前記レジスタ回路に保持された挿入コードの挿入先を示すアドレスとの一致検出結果に応じて、前記ＲＯＭに格納された命令コードと前記レジスタ回路に保持された挿入コードのいずれかを選択するコード選択回路と、
前記コード選択回路で選択されたコードを実行する命令実行部とを備え、
前記プログラムカウンタは、コード挿入時に前記Ｍ個の有効ビット中の最下位ビットへの1ビット加算を前記Ｍ個の有効ビットと異なる出力ビットへの1ビット加算に切り替える加算値選択回路を備え、
前記命令実行部は、少なくとも１つのマルチサイクル命令を実行可能であり、前記マルチサイクル命令の実行時に前記プログラムカウンタへアドレスの更新停止を指示する、不揮発性半導体装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイクロコンピュータおよび不揮発性半導体装置に関し、特にオリジナルのコードに追加のコードを挿入する機能を備えたマイクロコンピュータおよび不揮発性半導体装置に関する。
【背景技術】
【０００２】
従来から、マイクロコンピュータのＲＯＭ（Read  Only  Memory)に記録されたプログラムを変更する方法が知られている。【０００３】
特許文献１（特開平１０−２７７０４号公報）の装置は、修正アドレスレジスタと比較回路とを備える。ＲＯＭフェッチアドレスと修正アドレスレジスタの値を比較回路で比較し、その結果を命令解読器へ送出し、命令解読器では比較回路での一致を検出するとマイクロ命令の実行によりＲＡＭ上の所定のアドレスから修正プログラムの開始アドレスを取得し、プログラムの実行を同ＲＡＭ内の修正プログラムの開始番地へ分岐させるという構成を有する。【０００４】
特許文献２（特開平８−９５９４６号公報）の装置は、命令キュー、フェッチポインタ、内蔵ＲＯＭのバグ部分のアドレスを格納するレジスタ、レジスタとフェッチポインタの内容を比較する比較回路の出力結果によりメモリ上のプログラム又は特定の分岐命令を出力する選択回路を備える。フェッチポインタの内容がレジスタの内容と一致した時点で、選択回路から分岐命令を命令キューへ転送し、ＣＰＵは該分岐命令の実行により修正プログラムに移行し、バグ部分の実行が回避される。【０００５】
特許文献３（特開２００４−４６３１８号公報）の装置は、命令データ列が記憶されたメモリと、命令レジスタ、及び、メモリに記憶された命令データのうち命令レジスタに出力すべき特定命令データが記憶された特定命令アドレスを示すプログラムカウンタを有するＣＰＵとを備える。さらに、この装置は、外部から書き込み可能で、命令データ列に追加する追加命令データとこの追加命令データを追加する位置を示す追加アドレスとからなるデータ−アドレス対を記憶可能に構成されてなる追加命令記憶手段と、プログラムカウンタの示す特定命令アドレスと追加命令記憶手段に記憶された追加アドレスとを比較して特定命令データと追加命令データのいずれかを選択する。特定命令アドレスと追加アドレスとが一致したとき、プログラムカウンタは特定命令アドレスの更新を停止する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平１０−２７７０４号公報
【特許文献２】特開平８−９５９４６号公報
【特許文献３】特開２００４−４６３１８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、特許文献１および特許文献２の装置では、コードの挿入と変更が可能であるが、必要とするハードウエア量が大きいという問題がある。また、分岐ジャンプに伴うオーバーヘッド時間によって、装置の性能が劣化する。【０００８】
特許文献３の装置では、コードの挿入が可能であるが、コードの挿入時にプログラムカウンタが１サイクル停止するため、マルチサイクル命令への適用が困難である。その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【０００９】
本実施の一実施形態のマイクロコンピュータは、第１の値または第２の値を加算することによって、アドレスを更新し、マルチサイクル命令の実行時には、アドレスの更新を停止するプログラムカウンタと、プログラムカウンタのアドレスに応じて、レジスタ内のプログラムカウンタで指定されるアドレスに対応する挿入コードか、ＲＯＭ内のプログラムカウンタで指定されるアドレスのオリジナルコードのいずれかを選択する選択回路と、選択回路で選択されたコードを実行する命令実行部とを備える。
【発明の効果】
【００１０】
本発明の一実施形態のマイクロコンピュータおよび不揮発性半導体装置によれば、コードの挿入が可能で、かつマルチサイクル命令の実行が可能となる。
【図面の簡単な説明】
【００１１】
【図１】（ａ）は、ＲＯＭに記録されているコード（オリジナルコード）と、挿入するコードの例を表わす図である。（ｂ）は、コード変更機能を備えたマイクロコンピュータＡの変更後のコードを表わす図である。（ｃ）は、コード挿入機能を備えたマイクロコンピュータＢのＲＯＭの変更後のコードを表わす図である。
【図２】（ａ）は、ＲＯＭに記録されているコード（オリジナルコード）と、変更するコードの例を表わす図である。（ｂ）は、コード変更機能を備えたマイクロコンピュータＡの変更後のコードを表わす図である。（ｃ）は、コード挿入機能を備えたマイクロコンピュータＢの変更後のコードを表わす図である。
【図３】（ａ）は、単一サイクル方式における命令のフェッチおよび実行のタイミングを表わす図である。（ｂ）は、マルチサイクル方式における命令のフェッチおよび実行のタイミングを表わす図である。
【図４】特許文献３において、ＲＯＭに記録されているコード（オリジナルコード）の一部がマルチサイクル命令の場合において単一サイクル命令を挿入する場合のタイミング図である。
【図５】（ａ）は、ＲＯＭに記録されているコード（オリジナルコード）の一部がマルチサイクル命令の場合において、単一サイクル命令を挿入しても、正常に動作する場合のタイミング図である。（ｂ）は、ＲＯＭに記録されているコード（オリジナルコード）が単一サイクル命令の場合において、マルチサイクル命令を挿入しても、正常に動作する場合のタイミング図である。
【図６】本実施の形態のマイクロコンピュータの構成を表わす図である。
【図７】第１の実施形態のフラッシュメモリ制御部２の構成を表わす図である。
【図８】命令実行部１５とプログラムカウンタ１２の機能を説明するための図である。
【図９】プログラムカウンタ１２の構成を表わす図である。
【図１０】挿入コードレジスタセットブロック１７の構成を表わす図である。
【図１１】コード挿入用レジスタセット２９−０の構成を表わす図である。
【図１２】コード選択回路１４の構成を表わす図である。
【図１３】（ａ）は、コード挿入用レジスタセット２９−ｉのアドレスレジスタ３１に保持されている値の例を示す図である。（ｂ）は、（ａ）の条件下でのタイミング図である。
【図１４】（ａ）は、コード挿入用レジスタセット２９−ｉのアドレスレジスタ３１に保持されている値の例を示す図である。（ｂ）は、オリジナルコードと挿入コードを表わす図である。（ｃ）は、（ａ）および（ｂ）に示す条件下でのタイミング図である。
【図１５】（ａ）は、コード挿入用レジスタセット２９−ｉのアドレスレジスタ３１に保持されている値の例を示す図である。（ｂ）は、オリジナルコードと挿入コードを表わす図である。（ｃ）は、（ａ）および（ｂ）に示す条件下でのタイミング図である。
【図１６】第２の実施形態のフラッシュメモリ制御部１０２の構成を表わす図である。
【図１７】プログラムカウンタ５１の構成を表わす図である。
【図１８】挿入コードレジスタセットブロック５２の構成を表わす図である。
【図１９】コード挿入用レジスタセット５４−０の構成を表わす図である。
【図２０】（ａ）は、コード挿入用レジスタセット２９−ｉのアドレスレジスタ３１に保持されている値の例を示す図である。（ｂ）は、（ａ）の条件下でのタイミング図である。
【図２１】第３の実施形態のフラッシュメモリ制御部３１２の構成を表わす図である。
【図２２】挿入コードレジスタセットブロック１６４に含まれるコード挿入用レジスタセット６４−０の構成を表わす図である。
【図２３】（ａ）は、コード挿入用レジスタセット６４−ｉのアドレスレジスタ３１に保持されている値の例を示す図である。（ｂ）は、（ａ）の条件下でのタイミング図である。
【図２４】第４の実施形態のフラッシュメモリ制御部１０３の構成を表わす図である。
【図２５】第４の実施形態のプログラムカウンタ６５の構成を表わす図である。
【図２６】（ａ）は、コード挿入用レジスタセット５４−ｉのアドレスレジスタ３１に保持されている値の例を示す図である。（ｂ）は、（ａ）の条件下でのタイミング図である。
【図２７】第５の実施形態のフラッシュメモリ制御部３９５の構成を表わす図である。
【図２８】挿入コードレジスタセットブロック３９６に含まれるコード挿入用レジスタセット４０−０の構成を表わす図である。
【図２９】第６の実施形態のフラッシュメモリ制御部４２３の構成を表わす図である。
【図３０】プログラムカウンタ７２の構成を表わす図である。
【図３１】挿入コードレジスタセットブロック４２４に含まれるコード挿入用レジスタセット７１−０の構成を表わす図である。
【図３２】（ａ）は、コード挿入用レジスタセット７１−ｉのアドレスレジスタ３１に保持されている値の例を示す図である。（ｂ）は、（ａ）の条件下でのタイミング図である。
【図３３】第７の実施形態のフラッシュメモリ制御部６２３の構成を表わす図である。
【図３４】プログラムカウンタ７４の構成を表わす図である。
【図３５】挿入コードレジスタセットブロック６２４に含まれるコード挿入用レジスタセット７８−０の構成を表わす図である。
【図３６】（ａ）は、コード挿入用レジスタセット７８−ｉのアドレスレジスタ３１に保持されている値の例を示す図である。（ｂ）は、（ａ）の条件下でのタイミング図である。
【図３７】第８の実施形態のフラッシュメモリ制御部７４２の構成を表わす図である。
【図３８】プログラムカウンタ９１の構成を表わす図である。
【図３９】挿入コードレジスタセットブロック７４３の構成を表わす図である。
【図４０】挿入コードレジスタセットブロック７４３に含まれるコード挿入用レジスタセット８８−０の構成を表わす図である。
【図４１】（ａ）は、コード挿入用レジスタセット８８−ｉのアドレスレジスタ３１に保持されている値の例を示す図である。（ｂ）は、（ａ）の条件下でのタイミング図である。
【図４２】第９の実施形態のフラッシュメモリ制御部３８８の構成を表わす図である。
【図４３】プログラムカウンタ９４の構成を表わす図である。
【図４４】挿入コードレジスタセットブロック３８９の構成を表わす図である。
【図４５】挿入コードレジスタセットブロック３８９に含まれるコード挿入用レジスタセット８６−０の構成を表わす図である。
【図４６】（ａ）は、コード挿入用レジスタセット８６−ｉのアドレスレジスタ３１に保持されている値の例を示す図である。（ｂ）は、（ａ）の条件下でのタイミング図である。
【発明を実施するための形態】
【００１２】
以下、本発明の実施形態について、図面を用いて説明する。
［第１の実施形態］
（コード挿入とコード変更について）
まず、コード変更機能を備えたマイクロコンピュータＡと、コード追加機能を備えたマイクロコンピュータＢにおいて、コード挿入に伴う変更が必要なコード量について説明する。
【００１３】
図１（ａ）は、ＲＯＭに記録されているコード（オリジナルコード）と、挿入するコードの例を表わす図である。図１（ａ）の例では、オリジナルコードが命令０〜１０、１１、１２であり、命令３の後に挿入するコードが命令３′である。
【００１４】
図１（ｂ）は、コード変更機能を備えたマイクロコンピュータＡの変更後のコードを表わす図である。
【００１５】
図１（ｂ）に示すように、アドレス「０ｘ０１０８」に命令３′が記憶される。変更前のＮＯＰ領域がアドレス「０ｘ０１１６」であるため、命令４〜命令１０の格納位置がアドレス「０ｘ０１０Ａ」〜「０ｘ０１１６」に移動する。したがって、必要な変更コード量は「８」である。つまり、挿入する領域からＮＯＰ領域まで変更が必要なため、ＮＯＰ領域の位置によって、膨大な量の変更が必要となる。変更する分だけのレジスタセットを設ける必要となり、ハードウエアが大規模化する。この対策として、ＮＯＰ領域を多く設けることが考えられるが、冗長な処理時間が増えるので、ＣＰＵの処理性能が劣化する。
【００１６】
図１（ｃ）は、コード挿入機能を備えたマイクロコンピュータＢのＲＯＭの変更後のコードを表わす図である。
【００１７】
図１（ｃ）に示すように、アドレス「０ｘ０１０６」に命令３′が記憶される。したがって、必要な変更コード量は「１」である。
【００１８】
次に、コード変更機能を備えたマイクロコンピュータＡと、コード追加機能を備えたマイクロコンピュータＢにおけるコード変更に伴って、変更が必要なコード量について説明する。
【００１９】
図２（ａ）は、ＲＯＭに記録されているコード（オリジナルコード）と、変更するコードの例を表わす図である。図２（ａ）の例では、オリジナルコードが命令０〜１０、１１、１２であり、命令３を命令３′に変更することが示されている。
【００２０】
図２（ｂ）は、コード変更機能を備えたマイクロコンピュータＡの変更後のコードを表わす図である。
【００２１】
図２（ｂ）に示すように、アドレス「０ｘ０１０６」に記憶される命令３が命令３′に変更される。したがって、必要な変更コード量は「１」である。
【００２２】
図２（ｃ）は、コード挿入機能を備えたマイクロコンピュータＢの変更後のコードを表わす図である。
【００２３】
図２（ｃ）に示すように、アドレス「０ｘ０１０４」に命令３′とジャンプ命令「ＪＵＭＰ０１０８」が記憶される。したがって、必要な変更コード量は「２」である。
【００２４】
以上説明したように、コード変更機能を備えたマイクロコンピュータにおいて、コードを挿入する場合に、膨大な量のコードの変更が必要となる場合があり、変更する分だけのレジスタセットを設けることが必要となる。したがって、コード変更機能によって、コードを挿入するのは効率が悪いといえる。
【００２５】
（単一サイクル方式とマルチサイクル方式）
次に、単一サイクル方式とマルチサイクル方式について説明する。以下、サイクルとは、動作タイミングの基準となる、所謂一定周波数の基準クロック信号のサイクルである。
そして、このサイクルに連動してプログラムカウンタの更新が実施されるものとする。
【００２６】
図３（ａ）は、単一サイクル方式における命令のフェッチおよび実行のタイミングを表わす図である。
【００２７】
各サイクルで、プログラムカウンタで示されるＲＯＭのアドレスから命令がフェッチされ（ＩＦステージ）、同時に１つ前のサイクルでフェッチされた命令が実行される（ＥＸステージ）。単一サイクルでは、すべてのサイクルの時間が同一である。
【００２８】
図３（ｂ）は、マルチサイクル方式における命令のフェッチおよび実行のタイミングを表わす図である。
【００２９】
マルチサイクル方式でも、単一サイクル方式と同様に、各サイクルで、プログラムカウンタで示されるＲＯＭのアドレスから命令がフェッチされ（ＩＦステージ）、同時に１つ前のサイクルでフェッチされた命令が実行される（ＥＸステージ）。マルチサイクルでは、少なくとも１つの命令実行が、複数のサイクルに跨って行われる。
【００３０】
単一サイクル方式では、最長パス（最長の命令実行時間）により1サイクルの時間が律速され１サイクルの時間が長くなる、必要ハードウェア量が多くなるなどの欠点がある。そのため、マルチサイクル方式を採用するのが望ましいといえる。マルチサイクル方式を採用する場合には、コード挿入機能もマルチサイクル方式に対応する必要がある。しかしながら、特許文献３の装置は、段落［００４９］に記載されているようにＰＣ更新停止信号は１サイクル分となっており、マルチサイクル方式に対応していない。
【００３１】
（マルチサイクル方式でコード挿入機能を設ける場合の問題点）
次に、ＲＯＭに記録されているコード（オリジナルコード）の一部がマルチサイクル命令の場合において単一サイクル命令を挿入する場合の問題点を説明する。
【００３２】
図４は、特許文献３において、ＲＯＭに記録されているコード（オリジナルコード）の一部がマルチサイクル命令の場合において単一サイクル命令を挿入する場合のタイミング図である。
【００３３】
図４の例では、オリジナルコードの一部である「Ｒ０１０６」がマルチサイクル命令（３サイクル命令）である。このコードのアドレスが「０ｘ０１０６」であり、このコードの後に単一サイクルの挿入コード「Ｃｏｄｅ  ０」を挿入する場合の例が示されている。ここで、「０ｘ・・・・」は、１６進数表示であることを表わす。
【００３４】
第３サイクルにおいて、プログラムカウンタの値がアドレス「０ｘ０１０８」と一致すると、挿入コードＣｏｄｅ０がフェッチされるとともに、プログラムカウンタ更新停止信号は有効となる。しかしながら、第３サイクルにおいては、プログラムカウンタは、マルチサイクル命令を実行するため停止中であるので、プログラムカウンタ更新停止信号は、挿入のためにプログラムカウンタを停止するという役割を果たすことができない。その結果、アドレス「０ｘ０１０８」のＲＯＭのコードがフェッチされず、実行されないことになる。アドレス「０ｘ０１０８」のＲＯＭのコードを実行するために、図４に示すように、ＰＣ更新停止を３サイクル期間停止させる必要があるが、そのためには複雑な制御が必要となる。以下、その理由について説明する。
【００３５】
マルチサイクル命令実行時には、命令実行部からプログラムカウンタの更新を（マルチサイクル数―１）の期間停止するための信号であるＰＣストール信号が出力される。ＰＣストール信号とは、一般的なプロセッサでマルチサイクル命令を実行した時に出力される信号である。そして、このＰＣストール信号とアドレス一致信号から単純な論理を生成し、マルチサイクル命令実行でのコード挿入機能を実現することを検討してみる。
【００３６】
図５（ａ）は、ＲＯＭに記録されているコード（オリジナルコード）の一部がマルチサイクル命令の場合において、単一サイクル命令を挿入しても、正常に動作する場合のタイミング図である。尚、IF実行コード、アドレス、IFステージの実行コード、EXステージの実行コードのタイミング図は、コード挿入を実現するために必要な期待値である。
PCストール信号のタイミング図は、一般的なマルチサイクル方式のマイクロコンピュータにおける動作を示したもの、アドレス一致信号のタイミング図は、単純な比較器を用いた場合の動作を示したものである。
【００３７】
図５（ａ）の例では、オリジナルコードの一部である「Ｒ０１０６」がマルチサイクル命令（３サイクル命令）であり、このコードのアドレスが「０ｘ０１０６」であり、このコードの後に単一サイクルの挿入コード「Ｃｏｄｅ  ０」を挿入する場合の例が示されている。
【００３８】
第３サイクルにおいて、プログラムカウンタの値がアドレス「０ｘ０１０８」と一致すると、アドレス一致信号が４つのサイクルの期間「Ｈ」レベルとなり、ＰＣストール信号が２つのサイクルの期間「Ｈ」レベルとなる。図５（ａ）に示すように、アドレス「０ｘ０１０８」のＲＯＭのコードをフェッチして実行するためには、ＰＣストール信号が「Ｌ」レベルである第５サイクルにおいて、プログラムカウンタの更新を停止させるためのＰＣ更新停止信号を別途発生させる必要がある。図５（ａ）の場合は、１つ前のサイクルでアドレス一致信号とＰＣストール信号がいずれも「Ｈ」レベルであり、かつ現サイクルでアドレス一致信号が「Ｈ」レベル、ＰＣストール信号が「Ｌ」レベルとなるような場合に、新たに設けたＰＣ更新停止信号が「Ｈ」レベルとなるような論理回路を設ける必要がある。
【００３９】
図５（ｂ）は、ＲＯＭに記録されているコード（オリジナルコード）が単一サイクル命令の場合において、マルチサイクル命令を挿入しても、正常に動作する場合のタイミング図である。
【００４０】
図５（ｂ）の例では、オリジナルコードの一部である「Ｒ０１０６」の後に、３サイクル命令である挿入コード「Ｃｏｄｅ  ０」を挿入する場合の例が示されている。
【００４１】
第３サイクルにおいて、プログラムカウンタの値がアドレス「０ｘ０１０８」と一致すると、アドレス一致信号が４つのサイクルの期間「Ｈ」レベルとなり、ＰＣストール信号が第４サイクルから２サイクルの期間「Ｈ」レベルとなる。図５（ｂ）に示すように、アドレス「０ｘ０１０８」のＲＯＭのコードをフェッチして実行するためには、ＰＣストール信号が「Ｌ」レベルである第３サイクルにおいて、プログラムカウンタの更新を停止させるためのＰＣ更新停止信号を発生させる必要がある。図５（ｂ）の場合は、１つ前のサイクルでアドレス一致信号とＰＣストール信号がいずれも「Ｌ」レベルであり、かつ現サイクルでアドレス一致信号が「Ｈ」レベル、ＰＣストール信号が「Ｌ」レベルとなるような場合に、ＰＣ更新停止信号が「Ｈ」レベルとなるような論理回路を設ける必要がある。
【００４２】
以上のように、図５（ａ）と図５（ｂ）の場合では、ＰＣ更新停止信号を生成するために別個の論理回路が必要となる。
【００４３】
また、図５（ａ）の第５サイクルと１つ前のサイクルの第４サイクルと、図５（ｂ）の第６サイクルと１つ前のサイクルの第５サイクルとでは、アドレス一致信号とＰＣストール信号のレベルが同一である。しかしながら、フェッチされるコードは、図５（ａ）では、挿入コードを保持するＣｏｄｅＲｅｇ側であり、図５（ｂ）では、オリジナルコードを保持するＲＯＭ側であり、両者は一致しない。
【００４４】
したがって単純に論理回路を追加するだけでは、コード挿入機能を実現するためのＰＣ更新停止信号と、オリジナルコードか挿入コードかを選択して命令実行部に送るセレクタを切替えるための切り替え信号を生成すること困難である。本実施の形態では、これらの課題を解決して、コード挿入を可能とするマルチサイクル方式のマイクロコンピュータでを実現する。
【００４５】
（第１の実施形態の構成）
図６は、本実施の形態のマイクロコンピュータの構成を表わす図である。同図に示されるマイクロコンピュータは、特に制限されないが、公知の半導体集積回路製造技術により、半導体基板（チップ）に形成される。
【００４６】
図６に示すように、このマイクロコンピュータ１は、ＣＰＵ（Central  Processing  Unit）４と、ＲＡＭ（Random  Access  Memory）５と、周辺装置６と、アナログ入力端子９と、Ａ−Ｄ変換器７と、アナログ出力端子１０と、Ｄ−Ａ変換器８と、Ｉ／Ｏポート１１と、フラッシュメモリ３と、主に、このフラッシュメモリ３の制御を行うフラッシュメモリ制御部２、これらの各種回路間の信号伝達のためのメインデータバス２７３とを備える。
【００４７】
ＣＰＵ４は、マイクロコンピュータ１の全体の処理を制御する。ＣＰＵ４は、フラッシュメモリ３へのアクセスが可能である。
【００４８】
ＲＡＭ５は、各種のデータを記憶し、ＣＰＵ４のワーク領域などに利用される。
周辺装置６は、Ｉ／Ｏポート１１を介して外部との間でデータを授受する。
【００４９】
Ａ−Ｄ変換器７は、アナログ入力端子９から入力されるアナログ信号をデジタル信号に変換する。
【００５０】
Ｄ−Ａ変換器８は、デジタル信号をアナログ信号に変換して、アナログ出力端子１０に出力する。
【００５１】
フラッシュメモリ３は、不揮発性メモリであって、半導体基板に電気的に消去および書込みが可能である。フラッシュメモリ３は、特に制限されないが、ＣＰＵ４の動作プログラムもしくは各種のデータを記憶する。
【００５２】
フラッシュメモリ制御部２は、ＣＰＵ３からのアクセスに従い所定のシーケンスで、フラッシュメモリ３の制御を行なう。フラッシュメモリ制御部２は、フラッシュメモリ３の消去、書込み、読出し等の動作制御をするプログラムが格納されていると共に、それのプログラムの実行も行う。このプログラムには、例えば、フラッシュメモリの書換え動作のエラーをモニタする命令を含む。フラッシュメモリ制御部２は、このエラーをモニタする命令を読み出したときには、エラーを示すレジスタをチェックし、エラーがあればＣＰＵ４にエラーを伝達する。
【００５３】
このようなエラーをモニタする命令は、一定の時間間隔で読み出されるようにプログラム中の一定のアドレスごとに配置されている。この命令の実行は、他の処理性能の劣化を招く。そのため、このプログラムは、適度な間隔で配置する必要がある。一方、処理性能の多少の劣化を犠牲にしても、安全性を重視し、エラーモニタの時間間隔を短縮したい場合がある。
【００５４】
本実施の形態のフラッシュメモリ制御部２は、予め組み込まれ命令であるオリジナルコードからなるプログラムに新たなコードを挿入する機能を有することによって、マイクロコンピュータのハードウェアを変更することなく、このような要求に対応することが可能となる。
【００５５】
図７は、第１の実施形態のフラッシュメモリ制御部２の構成を表わす図である。
図７に示すように、このフラッシュメモリ制御部２は、プログラムカウンタ１２と、フラッシュ制御コード用ＲＯＭ１３と、挿入コードレジスタセットブロック１７と、レジスタ選択信号生成回路１８と、コード選択回路１４と、命令実行部１５と、インタフェースコントローラ１６とを備える。
【００５６】
フラッシュ制御コード用ＲＯＭ１３は、予め組み込まれた命令である複数のオリジナルコードを記憶する。フラッシュ制御コード用ＲＯＭ１３は、プログラムカウンタ１２から出力されるアドレスに格納されているオリジナルコードを出力する。ここで、フラッシュ制御コード用ＲＯＭ１３内の複数のオリジナルコードのアドレスは、プログラムカウンタの出力の最下位から２ビット目以上のビットが有効である。また、本実施の形態におけるフラッシュ制御コード用ＲＯＭ１３は、機能的にはマスクＲＯＭに相当するが、所謂大容量メモリの書込み禁止状態ではなく、予め論理回路等で固定的に組み込まれたものを想定している。
【００５７】
挿入コードレジスタセットブロック１７は、少なくとも１つの挿入コードと、挿入コードのアドレスを保持するレジスタセットを有する。挿入コードレジスタセットブロック１７は、保持している挿入コードのアドレスの最下位ビットを除くビットとプログラムカウンタ１２のアドレスの最下位ビットを除くビットとが一致したときに、第１の信号をプログラムカウンタ１２へ出力し出力する（すなわち、アドレス一致信号を「Ｈ」レベルに設定する。）。挿入コードレジスタセットブロック１７は、第１の信号を出力し、かつプログラムカウンタ１２のアドレスの最下位ビットが「１」のときに、第２の信号をコード選択回路１４へ出力する（すなわち、アドレス完全一致信号を「Ｈ」レベルに設定する）とともに、保持している挿入コードをコードレジスタ出力信号として出力する。
【００５８】
プログラムカウンタ１２は、第１の値または第２の値を加算することによって、カウンタ値であるアドレスを更新する。すなわち、プログラムカウンタ１２は、アドレス一致信号およびＰＣ制御信号に基づいて、カウンタ値を更新し、カウンタ値であるアドレスを内部アドレスバス２３に出力する。プログラムカウンタ１２は、マルチサイクル命令の実行時には、アドレスの更新を停止する。より、具体的には、プログラムカウンタ１２は、第１の信号を受けたときに、最下位ビットに「１」を加算し、第１の信号を受けないときに、最下位から２番目のビットに「１」を加算する。
【００５９】
レジスタ選択信号生成回路１８は、挿入コードレジスタセットブロック１７へ後述するコードレジスタ選択信号０〜ｎおよびアドレスレジスタ選択信号０〜ｎを供給する。コードレジスタ選択信号０〜ｎおよびアドレスレジスタ選択信号０〜ｎは、挿入したいコードと、そのコードを挿入するアドレスとを挿入コードレジスタセットブロック１７に設定する際、選択信号として活性化される。
【００６０】
コード選択回路１４は、プログラムカウンタ１２から出力されるアドレスに応じて変化するアドレス完全一致信号に基づいて、フラッシュ制御コード用ＲＯＭ１３から出力されたオリジナルコードおよび挿入コードレジスタセットブロック１７から出力された挿入コードのいずれかを実行コードとして命令実行部１５に出力する。より具体的には、コード選択回路１４は、第２の信号を受けたときに、挿入コードを選択し、第２の信号を受けなかったときに、オリジナルコードを選択する。
【００６１】
命令実行部１５は、コード選択回路１４から出力される実行コードをフェッチし、フェッチした実行コードを実行する。
【００６２】
本実施の形態では、複数のオリジナルコードおよび挿入コードのうちの少なくとも１つが、マルチサイクル命令であるものとする。すなわち、フラッシュメモリ３の制御において、マルチサイクル命令での処理が必要とされるものとする。
【００６３】
インタフェースコントローラ１６は、メインデータバス２７３に接続され、フラッシュメモリ制御部の外部からの割込みを受けて、命令実行部１５に割込信号を出力する。
【００６４】
命令実行部１５およびインタフェースコントローラ１６は、内部データバス２１を介してフラッシュメモリ３に接続される。
【００６５】
図８は、命令実行部１５とプログラムカウンタ１２の機能を説明するための図である。
図８に示すように、命令実行部１５は、フェッチ部３５と、実行部３６とを備える。フェッチ部３５は、コード選択回路１４から出力される実行コードをフェッチし、実行部３６に出力する。実行部３６は、フェッチされた実行コードを実行する。実行部３６は、即値を示す演算結果ＰＣ、即値の選択を指示する演算結果ＰＣ選択信号、およびＰＣストール信号などのＰＣ制御信号をプログラムカウンタ１２へ出力する。ＰＣストール信号は、マルチサイクル命令の実行時に「Ｈ」レベルに設定される。
【００６６】
図９は、プログラムカウンタ１２の構成を表わす図である。
図９に示すように、プログラムカウンタ１２は、セレクタ２４と、加算器２５と、セレクタ２６と、セレクタ２７と、ＰＣ用レジスタ２８とを備える。
【００６７】
セレクタ２４は、挿入コードレジスタセットブロック１７から出力されるアドレス一致信号が「Ｈ」レベルのときには「０ｘ０１」を出力し、アドレス一致信号が「Ｌ」レベルのときには「０ｘ０２」を出力する。
【００６８】
加算器２５は、ＰＣ用レジスタ２８から出力される１６ビットのアドレスとセレクタ２４から出力される値を加算する。
【００６９】
セレクタ２６は、加算器２５の出力と、命令実行部１５から出力される演算結果ＰＣ（すなわち、即値）とを受ける。セレクタ２６は、命令実行部１５から出力される演算結果ＰＣ選択信号が「Ｈ」レベルのときには演算結果ＰＣを出力し、演算結果ＰＣ選択信号が「Ｌ」レベルのときには、加算器２５の出力を出力する。
【００７０】
セレクタ２７は、セレクタ２６の出力と、ＰＣ用レジスタ２８から出力されるアドレスとを受ける。セレクタ２７は、命令実行部１５から出力されるＰＣストール信号が「Ｈ」レベルのときにはＰＣ用レジスタ２８から出力されるアドレスを出力し、ＰＣストール信号が「Ｌ」レベルのときにはセレクタ２６の出力を出力する。
【００７１】
ＰＣ用レジスタ２８は、セレクタ２７の出力をラッチして、フラッシュ制御コード用ＲＯＭ１３のアドレスとして内部アドレスバス２３へ出力する。
【００７２】
図１０は、挿入コードレジスタセットブロック１７の構成を表わす図である。
図１０に示すように、挿入コードレジスタセットブロック１７は、挿入するコードおよびこのコードを挿入する場所（アドレス）を保持するコード挿入用レジスタセット２９−ｉ（ｉ＝０〜ｎ）と、論理回路ＯＲ１，ＯＲ２，ＯＲ３とを備える。
【００７３】
コード挿入用レジスタセット２９−ｉは、プログラムカウンタ１２から出力されるアドレスと、データバス内を伝送するデータとを受け、さらに、レジスタ選択信号生成回路１８からコードレジスタ選択信号ｉおよびアドレスレジスタ選択信号ｉとを受けて、コード選択回路１４へアドレス一致信号ｉ、アドレス完全一致信号ｉ、およびコードレジスタ出力信号ｉを出力する。付言すれば、コードレジスタ選択信号ｉおよびアドレスレジスタ選択信号ｉにより挿入コードレジスタセットブロック１７内のコード挿入用レジスタセット２９−ｉが選択され、内部データバス２１から伝送される挿入コードおよびアドレスが、選択されたコード挿入用レジスタセット２９−ｉのコード用レジスタおよびアドレス用レジスタに書き込まれる。
【００７４】
論理回路ＯＲ１は、（ｎ＋１）個のアドレス一致信号０〜ｎの論理和をアドレス一致信号として出力する。すなわち、アドレス一致信号０〜ｎの少なくとも１つが「Ｈ」レベルのときに、アドレス一致信号が「Ｈ」レベルとなる。
【００７５】
論理回路ＯＲ２は、（ｎ＋１）個のコードレジスタ出力信号０〜ｎの論理和をコードレジスタ出力信号として出力する。すなわち、（ｎ＋１）個のコードレジスタ出力信号０〜ｎの少なくとも１つが「Ｈ」レベルのビットを有するとき（すなわち、挿入コードが出力されたとき）に、コードレジスタ出力信号が挿入コードとなる。すなわち、（ｎ＋１）個のコードレジスタ出力信号０〜ｎの全ビットのすべてが「Ｌ」レベルのとき（すなわち、挿入コードが出力されないとき）に、コードレジスタ出力信号の全ビットが「Ｌ」となる。
【００７６】
論理回路ＯＲ３は、（ｎ＋１）個のアドレス完全一致信号０〜ｎの論理和をアドレス完全一致信号として出力する。すなわち、（ｎ＋１）個のアドレス完全一致信号０〜ｎの少なくとも１つが「Ｈ」レベルのときに、アドレス完全一致信号が「Ｈ」レベルとなる。
【００７７】
図１１は、コード挿入用レジスタセット２９−０の構成を表わす図である。コード挿入用レジスタセット２９−１〜２９−ｎの構成も、図１１のコード挿入用レジスタセット２９−０の構成と同様である。
【００７８】
図１１に示すように、コード挿入用レジスタセット２９−０は、論理回路ＡＮＤ１と、アドレスレジスタ３１と、アドレス比較器３０と、論理回路ＡＮＤ４と、コードレジスタ３２と、論理回路ＡＮＤ２と、論理回路ＡＮＤ３とを備える。
【００７９】
論理回路ＡＮＤ１は、クロックｃｌｋと、アドレスレジスタ選択信号０とがいずれも「Ｈ」レベルのときに、「Ｈ」レベルの信号をアドレスレジスタ３１の制御端子に出力する。
【００８０】
アドレスレジスタ３１は、制御端子への入力が「Ｈ」レベルのときに、データバスを通じて送られてきた１５ビットのアドレス（つまり、挿入コードを挿入するアドレス）をラッチして保持する。すなわち、クロックｃｌｋに同期してアドレスレジスタ選択信号０を受けつけ、データバスからの信号を挿入コードの挿入先アドレスとして選択されたアドレスレジスタ３１に記憶させる。
【００８１】
アドレス比較器３０は、プログラムカウンタ１２から出力される１６ビットのアドレスのうちの上位１５ビット（アドレス［１５：１］）と、アドレスレジスタ３１に保持されている１５ビットのアドレスとが一致するときに、アドレス一致信号０を「Ｈ」レベルに設定する。
【００８２】
論理回路ＡＮＤ２は、アドレス一致信号０が「Ｈ」レベルであり、プログラムカウンタ１２から出力される１６ビットのアドレスのうちの最下位ビット（アドレス［０］）が「１」のときに、アドレス完全一致信号０を「Ｈ」レベルに設定する。ここで、フラッシュ制御コード用ＲＯＭ１３内の複数のオリジナルコードのアドレスとして有効でない最下位ビットが「１」である時とは、フラッシュ制御コード用ＲＯＭ１３内にないアドレスが指定されていた時ということになる。
【００８３】
論理回路ＡＮＤ４は、クロックｃｌｋと、コードレジスタ選択信号０とがいずれも「Ｈ」レベルのときに、「Ｈ」レベルの信号をコードレジスタ３２の制御端子に出力する。
【００８４】
コードレジスタ３２は、制御端子への入力が「Ｈ」レベルのときに、データバスを通じて送られてきた１６ビットのデータ（つまり、挿入コード）をラッチして保持する。すなわち、クロックｃｌｋに同期してコードレジスタ選択信号０を受けつけ、データバスからの信号を挿入コードとして選択されたコードレジスタに記憶させる。
【００８５】
論理回路ＡＮＤ３は、アドレス完全一致信号０と、コードレジスタ３２の出力とを受ける。論理回路ＡＮＤ３は、アドレス完全一致信号０が「Ｈ」レベルのときに、コードレジスタ３２に保持された１６ビットのデータ（挿入コード）をコードレジスタ出力信号０として出力する。論理回路ＡＮＤ３は、アドレス完全一致信号０が「Ｌ」レベルのときに、１６ビットの「０ｘ００００」をコードレジスタ出力信号０として出力する。
【００８６】
図１２は、コード選択回路１４の構成を表わす図である。
図１２に示すように、コード選択回路１４は、セレクタ３３を含む。
【００８７】
セレクタ３３は、フラッシュ制御コード用ＲＯＭ１３から出力されるオリジナルコードと、挿入コードレジスタセットブロック１７から出力されるコードレジスタ出力信号（挿入コード）とを受ける。セレクタ３３は、アドレス完全一致信号に基づいて、入力される２つの信号のいずれかを出力する。セレクタ３３は、アドレス完全一致信号が「Ｈ」レベルのときには、コードレジスタ出力信号（挿入コード）を出力し、アドレス完全一致信号が「Ｌ」レベルのときには、オリジナルコードを実行コードとして出力する。
【００８８】
（第１の実施形態の動作例１）
次に、オリジナルコードおよび挿入コードが単一サイクル命令の場合の動作例を説明する。
【００８９】
図１３（ａ）は、コード挿入用レジスタセット２９−ｉ（以下、コード挿入用レジスタセット＃ｉ）のアドレスレジスタ３１に保持されている値の例を示す図である。この例では、コード挿入用レジスタセット＃０のアドレスレジスタ３１に「０ｘ０１０６」の上位１５ビット（第２ビット目〜第１６ビット目）が保持されている。ただし、ここで、第１ビット目をＬＳＢ（Least  Significant  bit）とし、第Ｘビット目をＬＳＢよりも（Ｘ−１）ビットだけ上位のビットとする。
【００９０】
また、コード挿入用レジスタセット＃０のコードレジスタ３２に挿入コード「Ｃｏｄｅ  Ｒｅｇ．０」が保持されている。さらに、フラッシュ制御コード用ＲＯＭ１３のアドレス「０ｘ・・・・」には、オリジナルコード「Ｒ・・・・」が保持されているものとする。
【００９１】
図１３（ｂ）は、図１３（ａ）の条件下でのタイミング図である。
第０サイクルでは、プログラムカウンタ１２から出力される１６ビットのアドレス（ＰＣ（Program  Counter)値［１５：０］）は、「０ｘ０１０２」である。また、アドレス「０ｘ０１０２」の上位１５ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ３１に保持されているアドレス「０ｘ０１０６」の上位１５ビットと相違する。その結果、アドレス一致信号およびアドレス完全一致信号が「Ｌ」レベルとなり、コードレジスタ出力信号が「０ｘ００００」となる。フラッシュ制御コード用ＲＯＭ１３から「０ｘ０１０２」のアドレスのオリジナルコードである「Ｒ０１０２」が出力される。コード選択回路１４は、アドレス完全一致信号が「Ｌ」レベルであるので、オリジナルコード「Ｒ０１０２」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力されたオリジナルコード「Ｒ０１００」を実行する。
【００９２】
第１サイクルでは、前サイクルのアドレス一致信号が「Ｌ」レベルであるため、プログラムカウンタ１２のセレクタ２４が「０ｘ０２」を出力する。これにより、プログラムカウンタ１２の出力アドレスは、「０ｘ０２」だけ加算された「０ｘ０１０４」となる。また、アドレス「０ｘ０１０４」の上位１５ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ３１に保持されているアドレス「０ｘ０１０６」の上位１５ビットと相違する。その結果、アドレス一致信号およびアドレス完全一致信号が「Ｌ」レベルとなり、コードレジスタ出力信号が「０ｘ００００」となる。フラッシュ制御コード用ＲＯＭ１３から「０ｘ０１０４」のアドレスのオリジナルコードである「Ｒ０１０４」が出力される。コード選択回路１４は、アドレス完全一致信号が「Ｌ」レベルであるので、オリジナルコード「Ｒ０１０４」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力されたオリジナルコード「Ｒ０１０２」を実行する。
【００９３】
第２サイクルでは、前サイクルのアドレス一致信号が「Ｌ」レベルであるため、プログラムカウンタ１２のセレクタ２４が「０ｘ０２」を出力する。これにより、プログラムカウンタ１２の出力アドレスは、「０ｘ０２」だけ加算された「０ｘ０１０６」となる。アドレス「０ｘ０１０６」の上位１５ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ３１に保持されているアドレス「０ｘ０１０６」の上位１５ビットと一致する。その結果、アドレス一致信号が「Ｈ」レベルとなる（アドレス一致信号０が「Ｈ」レベルとなるため）。一方、プログラムカウンタ１２の出力アドレスの最下位ビットが「０」である。その結果、アドレス完全一致信号が「Ｌ」レベルのままで、コードレジスタ出力信号が「０ｘ００００」のままである。フラッシュ制御コード用ＲＯＭ１３から「０ｘ０１０６」のアドレスのオリジナルコードである「Ｒ０１０６」が出力される。コード選択回路１４は、アドレス完全一致信号が「Ｌ」レベルであるので、オリジナルコード「Ｒ０１０６」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力されたオリジナルコード「Ｒ０１０４」を実行する。
【００９４】
第３サイクルでは、前サイクルのアドレス一致信号が「Ｈ」レベルであるため、プログラムカウンタ１２のセレクタ２４が「０ｘ０１」を出力する。これにより、プログラムカウンタ１２の出力アドレスは、「０ｘ０１」だけ加算された「０ｘ０１０７」となる。アドレス「０ｘ０１０７」の上位１５ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ３１に保持されているアドレス「０ｘ０１０６」の上位１５ビットと一致する。その結果、アドレス一致信号が「Ｈ」レベルとなる（アドレス一致信号０が「Ｈ」レベルとなるため）。また、プログラムカウンタ１２の出力アドレスの最下位ビットが「１」である、その結果、アドレス完全一致信号は「Ｈ」レベルとなる（アドレス完全一致信号０が「Ｈ」レベルとなるため）。さらに、コードレジスタ出力信号は、コードレジスタ３２に保持された挿入コード「Ｃｏｄｅ  Ｒｅｇ．０」となる（コードレジスタ出力信号０が「Ｃｏｄｅ  Ｒｅｇ．０」となるため）。コード選択回路１４は、アドレス完全一致信号が「Ｈ」レベルであるので、挿入コード「Ｃｏｄｅ  Ｒｅｇ．０」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力されたオリジナルコード「Ｒ０１０６」を実行する。
【００９５】
第４サイクルでは、前サイクルのアドレス一致信号が「Ｈ」レベルであるため、プログラムカウンタ１２のセレクタ２４が「０ｘ０１」を出力する。これにより、プログラムカウンタ１２の出力アドレスは、「０ｘ０１」だけ加算された「０ｘ０１０８」となる。アドレス「０ｘ０１０８」の上位１５ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ３１に保持されているアドレス「０ｘ０１０８」の上位１５ビットと相違する。その結果、アドレス一致信号およびアドレス完全一致信号が「Ｌ」レベルとなり、コードレジスタ出力信号が「０ｘ００００」となる。フラッシュ制御コード用ＲＯＭ１３から「０ｘ０１０８」のアドレスのオリジナルコードである「Ｒ０１０８」が出力される。コード選択回路１４は、アドレス完全一致信号が「Ｌ」レベルであるので、オリジナルコード「Ｒ０１０８」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力された挿入コード「Ｃｏｄｅ  Ｒｅｇ．０」を実行する。
【００９６】
第５サイクル以降は、第４サイクルと同様に動作する。
（第１の実施形態の動作例２）
次に、オリジナルコードの一部がマルチサイクル命令であり、挿入コードが単一サイクル命令の場合の動作を説明する。
【００９７】
図１４（ａ）は、コード挿入用レジスタセット２９−ｉ（以下、コード挿入用レジスタセット＃ｉ）のアドレスレジスタ３１に保持されている値の例を示す図である。この例では、コード挿入用レジスタセット＃０のアドレスレジスタ３１に「０ｘ０１０６」の上位１５ビット（第２ビット目〜第１６ビット目）が保持され、コード挿入用レジスタセット＃１のアドレスレジスタ３１に「０ｘ８０００」の上位１５ビットが保持され、コード挿入用レジスタセット＃２のアドレスレジスタ３１に「０ｘ８００２」の上位１５ビットが保持されている。また、コード挿入用レジスタセット＃０のコードレジスタ３２に挿入コード「Ｃｏｄｅ  Ｒｅｇ．０」が保持されている。また、フラッシュ制御コード用ＲＯＭ１３のアドレス「０ｘ・・・・」には、オリジナルコード「Ｒ・・・・」が保持されているものとする。
【００９８】
図１４（ｂ）に示すように、オリジナルコード「Ｒ０１０６」は３サイクル命令、他のオリジナルコードは１サイクル命令、挿入コード「Ｃｏｄｅ  Ｒｅｇ．０」は１サイクル命令とする。
【００９９】
図１４（ｃ）は、図１４（ａ）および（ｂ）に示す条件下でのタイミング図である。
第０サイクルでは、プログラムカウンタ１２から出力される１６ビットのアドレス（ＰＣ値［１５：０］）は、「０ｘ０１０２」である。また、アドレス「０ｘ０１０２」の上位１５ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ３１に保持されているアドレス「０ｘ０１０６」の上位１５ビットと相違する。その結果、アドレス一致信号およびアドレス完全一致信号が「Ｌ」レベルとなり、コードレジスタ出力信号が「０ｘ００００」となる。フラッシュ制御コード用ＲＯＭ１３から「０ｘ０１０２」のアドレスのオリジナルコードである「Ｒ０１０２」が出力される。コード選択回路１４は、アドレス完全一致信号が「Ｌ」レベルであるので、オリジナルコード「Ｒ０１０２」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力されたオリジナルコード「Ｒ０１００」を実行する。
【０１００】
第１サイクルでは、前サイクルのアドレス一致信号が「Ｌ」レベルであるため、プログラムカウンタ１２のセレクタ２４が「０ｘ０２」を出力する。これにより、プログラムカウンタ１２の出力アドレスは、「０ｘ０２」だけ加算された「０ｘ０１０４」となる。アドレス「０ｘ０１０４」の上位１５ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ３１に保持されているアドレス「０ｘ０１０６」の上位１５ビットと相違する。その結果、アドレス一致信号、およびアドレス完全一致信号が「Ｌ」レベルとなり、コードレジスタ出力信号が「０ｘ００００」となる。フラッシュ制御コード用ＲＯＭ１３から「０ｘ０１０４」のアドレスのオリジナルコードである「Ｒ０１０４」が出力される。コード選択回路１４は、アドレス完全一致信号が「Ｌ」レベルであるので、オリジナルコード「Ｒ０１０４」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力されたオリジナルコード「Ｒ０１０２」を実行する。
【０１０１】
第２サイクルでは、前サイクルのアドレス一致信号が「Ｌ」レベルであるため、プログラムカウンタ１２のセレクタ２４が「０ｘ０２」を出力する。これにより、プログラムカウンタ１２の出力アドレスは、「０ｘ０２」だけ加算された「０ｘ０１０６」となる。アドレス「０ｘ０１０６」の上位１５ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ３１に保持されているアドレス「０ｘ０１０６」の上位１５ビットと一致する。その結果、アドレス一致信号が「Ｈ」レベルとなる（アドレス一致信号０が「Ｈ」レベルとなるため）。一方、プログラムカウンタ１２の出力アドレスの最下位ビットが「０」である。その結果、アドレス完全一致信号が「Ｌ」レベルのままで、コードレジスタ出力信号が「０ｘ００００」のままである。フラッシュ制御コード用ＲＯＭ１３から「０ｘ０１０６」のアドレスのオリジナルコードである「Ｒ０１０６」が出力される。コード選択回路１４は、アドレス完全一致信号が「Ｌ」レベルであるので、オリジナルコード「Ｒ０１０６」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力されたオリジナルコード「Ｒ０１０４」を実行する。
【０１０２】
第３サイクルでは、前サイクルのアドレス一致信号が「Ｈ」レベルであるため、プログラムカウンタ１２のセレクタ２４が「０ｘ０１」を出力する。これにより、プログラムカウンタ１２の出力アドレスは、「０ｘ０１」だけ加算された「０ｘ０１０７」となる。また、アドレス「０ｘ０１０７」の上位１５ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ３１に保持されているアドレス「０ｘ０１０６」の上位１５ビットと一致する。その結果、アドレス一致信号が「Ｈ」レベルとなる（アドレス一致信号０が「Ｈ」レベルとなるため）。プログラムカウンタ１２の出力アドレスは、「０ｘ０１」の加算が行われたため最下位ビットが「１」である。その結果、アドレス完全一致信号は「Ｈ」レベルとなる（アドレス完全一致信号０が「Ｈ」レベルとなるため）。さらに、コードレジスタ出力信号は、コードレジスタ３２に保持された挿入コード「Ｃｏｄｅ  Ｒｅｇ．０」となる（コードレジスタ出力信号０が「Ｃｏｄｅ  Ｒｅｇ．０」となるため）。コード選択回路１４は、アドレス完全一致信号が「Ｈ」レベルであるので、挿入コード「Ｃｏｄｅ  Ｒｅｇ．０」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力されたオリジナルコード「Ｒ０１０６」を実行する。ここで、オリジナルコード「Ｒ０１０６」は３サイクル命令のため、実行部３６は、ＰＣストール信号を「Ｈ」レベルに設定する。
【０１０３】
第４サイクルでは、前サイクルでＰＣストール信号が「Ｈ」レベルに設定されたため、プログラムカウンタ１２は、前サイクルと同じアドレス「０ｘ０１０７」を出力する。アドレス「０ｘ０１０７」の上位１５ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ３１に保持されているアドレス「０ｘ０１０６」の上位１５ビットと一致する。その結果、アドレス一致信号が「Ｈ」レベルとなる（アドレス一致信号０が「Ｈ」レベルとなるため）。また、プログラムカウンタ１２の出力アドレスの最下位ビットが「１」である。その結果、アドレス完全一致信号は「Ｈ」レベルとなる（アドレス完全一致信号０が「Ｈ」レベルとなるため）。さらに、コードレジスタ出力信号は、コードレジスタ３２に保持された挿入コード「Ｃｏｄｅ  Ｒｅｇ．０」となる（コードレジスタ出力信号０が「Ｃｏｄｅ  Ｒｅｇ．０」となるため）。コード選択回路１４は、アドレス完全一致信号が「Ｈ」レベルであるので、挿入コード「Ｃｏｄｅ  Ｒｅｇ．０」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、３サイクル命令のオリジナルコード「Ｒ０１０６」を引き続き実行する（２サイクル分の実行終了）。
【０１０４】
第５サイクルでは、前サイクルでＰＣストール信号が「Ｈ」レベルに設定されたため、プログラムカウンタ１２は、前サイクルと同じアドレス「０ｘ０１０７」を出力する。また、アドレス「０ｘ０１０７」の上位１５ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ３１に保持されているアドレス「０ｘ０１０６」の上位１５ビットと一致する。その結果、アドレス一致信号が「Ｈ」レベルとなる（アドレス一致信号０が「Ｈ」レベルとなるため）。プログラムカウンタ１２の出力アドレスの最下位ビットが「１」のため、アドレス完全一致信号は「Ｈ」レベルとなる（アドレス完全一致信号０が「Ｈ」レベルとなるため）。さらに、コードレジスタ出力信号は、コードレジスタ３２に保持された挿入コード「Ｃｏｄｅ  Ｒｅｇ．０」となる（コードレジスタ出力信号０が「Ｃｏｄｅ  Ｒｅｇ．０」となるため）。コード選択回路１４は、アドレス完全一致信号が「Ｈ」レベルであるので、挿入コード「Ｃｏｄｅ  Ｒｅｇ．０」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、３サイクル命令のオリジナルコード「Ｒ０１０６」を引き続き実行する（３サイクル分の実行終了）。実行部３６は、３サイクル命令であるオリジナルコード「Ｒ０１０６」の実行を終了したので、ＰＣストール信号を「Ｌ」レベルに設定する。
【０１０５】
第６サイクルでは、前サイクルのアドレス一致信号が「Ｈ」レベルであるため、プログラムカウンタ１２のセレクタ２４が「０ｘ０１」を出力する。これにより、プログラムカウンタ１２の出力アドレスは、「０ｘ０１」だけ加算された「０ｘ０１０８」となる。また、アドレス「０ｘ０１０８」の上位１５ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ３１に保持されているアドレス「０ｘ０１０６」の上位１５ビットと相違する。その結果、アドレス一致信号およびアドレス完全一致信号が「Ｌ」レベルとなり、コードレジスタ出力信号が「０ｘ００００」となる。フラッシュ制御コード用ＲＯＭ１３から「０ｘ０１０８」のアドレスのオリジナルコードである「Ｒ０１０８」が出力される。コード選択回路１４は、アドレス完全一致信号が「Ｌ」レベルであるので、オリジナルコード「Ｒ０１０８」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力された挿入コード「Ｃｏｄｅ  Ｒｅｇ．０」を実行する。
【０１０６】
第７サイクルでは、前サイクルのアドレス一致信号が「Ｌ」レベルであるため、プログラムカウンタ１２のセレクタ２４が「０ｘ０２」を出力する。これにより、プログラムカウンタ１２の出力アドレスは、「０ｘ０２」だけ加算された「０ｘ０１０Ａ」となる。アドレス「０ｘ０１０Ａ」の上位１５ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ３１に保持されているアドレス「０ｘ０１０６」の上位１５ビットと相違する。その結果、アドレス一致信号およびアドレス完全一致信号が「Ｌ」レベルとなり、コードレジスタ出力信号が「０ｘ００００」となる。フラッシュ制御コード用ＲＯＭ１３から「０ｘ０１０Ａ」のアドレスのオリジナルコードである「Ｒ０１０Ａ」が出力される。コード選択回路１４は、アドレス完全一致信号が「Ｌ」レベルであるので、オリジナルコード「Ｒ０１０Ａ」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力されたオリジナルコード「Ｒ０１０８」を実行する。
【０１０７】
第８サイクル以降は、第７サイクルと同様に動作する。
（第１の実施形態の動作例３）
次に、オリジナルコードが単一サイクル命令であり、挿入コードがマルチサイクル命令の場合の動作を説明する。
【０１０８】
図１５（ａ）は、コード挿入用レジスタセット２９−ｉ（以下、コード挿入用レジスタセット＃ｉ）のアドレスレジスタ３１に保持されている値の例を示す図である。この例では、コード挿入用レジスタセット＃０のアドレスレジスタ３１に「０ｘ０１０６」の上位１５ビットが保持され、コード挿入用レジスタセット＃１のアドレスレジスタ３１に「０ｘ８０００」の上位１５ビットが保持され、コード挿入用レジスタセット＃２のアドレスレジスタ３１に「０ｘ８００２」の上位１５ビットが保持されている。また、コード挿入用レジスタセット＃０のコードレジスタ３２に挿入コード「Ｃｏｄｅ  Ｒｅｇ．０」が保持されている。また、フラッシュ制御コード用ＲＯＭ１３のアドレス「０ｘ・・・・」には、オリジナルコード「Ｒ・・・・」が保持されているものとする。
【０１０９】
図１５（ｂ）に示すように、オリジナルコード「Ｒ０１０６」は１サイクル命令、他のオリジナルコードも同様に１サイクル命令、挿入コード「Ｃｏｄｅ  Ｒｅｇ．０」は３サイクル命令とする。
【０１１０】
図１５（ｃ）は、図１５（ａ）および（ｂ）に示す条件下でのタイミング図である。
第０サイクルでは、プログラムカウンタ１２から出力される１６ビットのアドレス（ＰＣ値［１５：０］）は、「０ｘ０１０２」である。また、アドレス「０ｘ０１０２」の上位１５ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ３１に保持されているアドレス「０ｘ０１０６」の上位１５ビットと相違する。その結果、アドレス一致信号、およびアドレス完全一致信号が「Ｌ」レベルとなり、コードレジスタ出力信号が「０ｘ００００」となる。フラッシュ制御コード用ＲＯＭ１３から「０ｘ０１０２」のアドレスのオリジナルコードである「Ｒ０１０２」が出力される。コード選択回路１４は、アドレス完全一致信号が「Ｌ」レベルであるので、オリジナルコード「Ｒ０１０２」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力されたオリジナルコード「Ｒ０１００」を実行する。
【０１１１】
第１サイクルでは、前サイクルのアドレス一致信号が「Ｌ」レベルであるため、プログラムカウンタ１２のセレクタ２４が「０ｘ０２」を出力する。これにより、プログラムカウンタ１２の出力アドレスは、「０ｘ０２」だけ加算された「０ｘ０１０４」となる。また、アドレス「０ｘ０１０４」の上位１５ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ３１に保持されているアドレス「０ｘ０１０６」の上位１５ビットと相違する。その結果アドレス一致信号、およびアドレス完全一致信号が「Ｌ」レベルとなり、コードレジスタ出力信号が「０ｘ００００」となる。フラッシュ制御コード用ＲＯＭ１３から「０ｘ０１０４」のアドレスのオリジナルコードである「Ｒ０１０４」が出力される。コード選択回路１４は、アドレス完全一致信号が「Ｌ」レベルであるので、オリジナルコード「Ｒ０１０４」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力されたオリジナルコード「Ｒ０１０２」を実行する。
【０１１２】
第２サイクルでは、前サイクルのアドレス一致信号が「Ｌ」レベルであるため、プログラムカウンタ１２のセレクタ２４が「０ｘ０２」を出力する。これにより、プログラムカウンタ１２の出力アドレスは、「０ｘ０２」だけ加算された「０ｘ０１０６」となる。アドレス「０ｘ０１０６」の上位１５ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ３１に保持されているアドレス「０ｘ０１０６」の上位１５ビットと一致する。その結果、アドレス一致信号が「Ｈ」レベルとなる（アドレス一致信号０が「Ｈ」レベルとなるため）。一方、プログラムカウンタ１２の出力アドレスの最下位ビットが「０」のため、アドレス完全一致信号が「Ｌ」レベルのままで、コードレジスタ出力信号が「０ｘ００００」のままである。フラッシュ制御コード用ＲＯＭ１３から「０ｘ０１０６」のアドレスのオリジナルコードである「Ｒ０１０６」が出力される。コード選択回路１４は、アドレス完全一致信号が「Ｌ」レベルであるので、オリジナルコード「Ｒ０１０６」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力されたオリジナルコード「Ｒ０１０４」を実行する。
【０１１３】
第３サイクルでは、前サイクルのアドレス一致信号が「Ｈ」レベルであるため、プログラムカウンタ１２のセレクタ２４が「０ｘ０１」を出力する。これにより、プログラムカウンタ１２の出力アドレスは、「０ｘ０１」だけ加算された「０ｘ０１０７」となる。アドレス「０ｘ０１０７」の上位１５ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ３１に保持されているアドレス「０ｘ０１０６」の上位１５ビットと一致する。その結果、アドレス一致信号が「Ｈ」レベルとなる（アドレス一致信号０が「Ｈ」レベルとなるため）。プログラムカウンタ１２の出力アドレスは、「０ｘ０１」の加算が行われたため最下位ビットが「１」である。その結果、アドレス完全一致信号は「Ｈ」レベルとなる（アドレス完全一致信号０が「Ｈ」レベルとなるため）。さらに、コードレジスタ出力信号は、コードレジスタ３２に保持された挿入コード「Ｃｏｄｅ  Ｒｅｇ．０」となる（コードレジスタ出力信号０が「Ｃｏｄｅ  Ｒｅｇ．０」となるため）。コード選択回路１４は、アドレス完全一致信号が「Ｈ」レベルであるので、挿入コード「Ｃｏｄｅ  Ｒｅｇ．０」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力されたオリジナルコード「Ｒ０１０６」を実行する。
【０１１４】
第４サイクルでは、前サイクルのアドレス一致信号が「Ｈ」レベルであるため、プログラムカウンタ１２のセレクタ２４が「０ｘ０１」を出力する。これにより、プログラムカウンタ１２の出力アドレスは、「０ｘ０１」だけ加算された「０ｘ０１０８」となる。アドレス「０ｘ０１０８」の上位１５ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ３１に保持されているアドレス「０ｘ０１０６」の上位１５ビットと相違する。その結果、アドレス一致信号、およびアドレス完全一致信号が「Ｌ」レベルとなり、コードレジスタ出力信号が「０ｘ００００」となる。フラッシュ制御コード用ＲＯＭ１３から「０ｘ０１０８」のアドレスのオリジナルコードである「Ｒ０１０８」が出力される。コード選択回路１４は、アドレス完全一致信号が「Ｌ」レベルであるので、オリジナルコード「Ｒ０１０８」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力された挿入コード「Ｃｏｄｅ  Ｒｅｇ．０」を実行する。ここで、挿入コード「Ｃｏｄｅ  Ｒｅｇ．０」は３サイクル命令のため、実行部３６は、ＰＣストール信号を「Ｈ」レベルに設定する。
【０１１５】
第５サイクルでは、前サイクルでＰＣストール信号が「Ｈ」レベルに設定されたため、プログラムカウンタ１２は、前サイクルと同じアドレス「０ｘ０１０８」を出力する。アドレス「０ｘ０１０８」の上位１５ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ３１に保持されているアドレス「０ｘ０１０６」の上位１５ビットと相違する。その結果、アドレス一致信号、およびアドレス完全一致信号が「Ｌ」レベルとなり、コードレジスタ出力信号が「０ｘ００００」となる。命令実行部１５の実行部３６は、３サイクル命令の挿入コード「Ｃｏｄｅ  Ｒｅｇ．０」を引き続き実行する（２サイクル分の実行終了）。
【０１１６】
第６サイクルでは、前サイクルでＰＣストール信号が「Ｈ」レベルに設定されたため、プログラムカウンタ１２は、前サイクルと同じアドレス「０ｘ０１０８」を出力する。また、アドレス「０ｘ０１０８」の上位１５ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ３１に保持されているアドレス「０ｘ０１０６」の上位１５ビットと相違する。その結果、アドレス一致信号、およびアドレス完全一致信号が「Ｌ」レベルとなり、コードレジスタ出力信号が「０ｘ００００」となる。命令実行部１５の実行部３６は、３サイクル命令の挿入コード「Ｃｏｄｅ  Ｒｅｇ．０」を引き続き実行する（３サイクル分の実行終了）。実行部３６は、３サイクル命令である挿入コード「Ｃｏｄｅ  Ｒｅｇ．０」の実行を終了したので、ＰＣストール信号を「Ｌ」レベルに設定する。
【０１１７】
第７サイクルでは、前サイクルのアドレス一致信号が「Ｌ」レベルであるため、プログラムカウンタ１２のセレクタ２４が「０ｘ０２」を出力する。これにより、プログラムカウンタ１２の出力アドレスは、「０ｘ０２」だけ加算された「０ｘ０１０Ａ」となる。また、アドレス「０ｘ０１０Ａ」の上位１５ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ３１に保持されているアドレス「０ｘ０１０６」の上位１５ビットと相違する。その結果、アドレス一致信号、アドレス完全一致信号が「Ｌ」レベルとなり、コードレジスタ出力信号が「０ｘ００００」となる。フラッシュ制御コード用ＲＯＭ１３から「０ｘ０１０Ａ」のアドレスのオリジナルコードである「Ｒ０１０Ａ」が出力される。コード選択回路１４は、アドレス完全一致信号が「Ｌ」レベルであるので、オリジナルコード「Ｒ０１０Ａ」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力されたオリジナルコード「Ｒ０１０８」を実行する。
【０１１８】
第８サイクル以降は、第７サイクルと同様に動作する。
［第２の実施形態］
本実施の形態では、複数のオリジナルコードのアドレスは、最下位から（ｋ＋１）ビット目以上のビットが有効である。ただし、ｋは１以上の自然数である。
【０１１９】
（構成）
図１６は、第２の実施形態のフラッシュメモリ制御部１０２の構成を表わす図である。
【０１２０】
図１６のフラッシュメモリ制御部１０２が、図７のフラッシュメモリ制御部２と相違する点は、プログラムカウンタ５１と、挿入コードレジスタセットブロック５２である。
【０１２１】
挿入コードレジスタセットブロック５２は、最大で２k-１個の挿入コードと、挿入コードのアドレスを保持する。挿入コードレジスタセットブロック５２は、保持している挿入コードのアドレスの最下位からｋ個のビットを除くビットとプログラムカウンタ５１のアドレスの最下位からｋ個のビットを除くビットとが一致したときに、第１の信号を出力する（すなわち、アドレス一致信号を「Ｈ」レベルに設定する）。
【０１２２】
挿入コードレジスタセットブロック５２は、第１の信号を出力し、かつ保持している挿入コードのアドレスの最下位からｋ個のビットとプログラムカウンタ５１のアドレスの最下位からｋ個のビットとが一致したときに、第２の信号を出力する（すなわち、アドレス完全一致信号を「Ｈ」レベルに設定する）とともに、プログラムカウンタ５１のアドレスに対応する保持している挿入コードを出力する。
【０１２３】
挿入コードレジスタセットブロック５２は、複数の挿入コードを連続して挿入するときに最後の挿入コードを出力する場合には、第２の信号を出力するとともに、同時に挿入エンドを示す挿入エンド信号を出力する。挿入エンド信号の発生については、後述する。
【０１２４】
プログラムカウンタ５１は、第１の信号を受けたときに、最下位ビットに「１」を加算し、第１の信号を受けなかったときに、最下位から（ｋ＋１）番目のビットに「１」を加算する。プログラムカウンタ５１は、挿入エンド信号を受けたときには、第１の信号を受けたときでも、最下位から（ｋ＋１）番目のビットに「１」を加算し、最下位からｋ個のビットを「０」にする。
【０１２５】
以下の説明では、ｋを５として説明する。
図１７は、プログラムカウンタ５１の構成を表わす図である。
【０１２６】
図１７に示すように、プログラムカウンタ５１は、セレクタ５３と、加算器２５と、論理回路ＡＮＤ７４と、セレクタ２６と、セレクタ２７と、ＰＣ用レジスタ２８とを備える。
【０１２７】
セレクタ５３は、挿入コードレジスタセットブロック５２からアドレス一致信号と挿入エンド信号とを受ける。セレクタ５３は、アドレス一致信号が「Ｈ」レベル、かつ挿入エンド信号が「Ｌ」レベルのときには、「０ｘ０１」を出力する。セレクタ５３は、アドレス一致信号が「Ｈ」レベル、かつ挿入エンド信号が「Ｈ」レベルのとき、アドレス一致信号が「Ｌ」レベル、かつ挿入エンド信号が「Ｈ」レベルのとき、アドレス一致信号が「Ｌ」レベル、かつ挿入エンド信号が「Ｌ」レベルのときには、「０ｘ２０」を出力する。
【０１２８】
加算器２５は、ＰＣ用レジスタ２８から出力される２０ビットのアドレスとセレクタ５３から出力される値を加算する。
【０１２９】
論理回路ＡＮＤ７４は、加算器２５から出力される２０ビットのうちの下位５ビットと、挿入エンド信号の否定の論理積を出力する。すなわち、論理回路ＡＮＤ７４は、挿入エンド信号が「Ｌ」レベルのときには、加算器２５から出力される２０ビットのうちの下位５ビットを出力する。論理回路ＡＮＤ７４は、挿入エンド信号が「Ｈ」レベルのときには、５ビットの「０ｂ０００００」を出力する。ここで、「０ｂ・・・・」は、２進数表示であることを表わす。
【０１３０】
セレクタ２６は、加算器２５から出力される２０ビットのうちの上位１５ビットを上位１５ビットとし、論理回路ＡＮＤ７４から出力される５ビットの信号を下位５ビットとした信号と、命令実行部１５から出力される演算結果ＰＣとを受ける。セレクタ２６は、命令実行部１５から出力される演算結果ＰＣ選択信号が「Ｈ」レベルのときには演算結果ＰＣを出力し、演算結果ＰＣ選択信号が「Ｌ」レベルのときには、加算器２５および論理回路ＡＮＤ７４からの信号を出力する。
【０１３１】
セレクタ２７は、セレクタ２６の出力と、ＰＣ用レジスタ２８から出力されるアドレスとを受ける。セレクタ２７は、命令実行部１５から出力されるＰＣストール信号が「Ｈ」レベルのときにはＰＣ用レジスタ２８から出力されるアドレスを出力し、ＰＣストール信号が「Ｌ」レベルのときにはセレクタ２６から受けた信号を出力する。
【０１３２】
ＰＣ用レジスタ２８は、セレクタ２７の出力をラッチして、フラッシュ制御用コード用ＲＯＭのアドレスとして内部アドレスバス２３へ出力する。
【０１３３】
図１８は、挿入コードレジスタセットブロック５２の構成を表わす図である。
図１８に示すように、挿入コードレジスタセットブロック５２は、コード挿入用レジスタセット５４−ｉ（ｉ＝０〜ｎ）と、論理回路ＯＲ１，ＯＲ２，ＯＲ３，ＯＲ５４とを備える。
【０１３４】
コード挿入用レジスタセット５４−ｉは、プログラムカウンタ５１から出力されるアドレスと、データバス内を伝送するデータとを受け、さらにコード選択回路１４からコードレジスタ選択信号ｉ、アドレスレジスタ選択信号ｉ、アトレスレジスタ２選択信号ｉ、挿入エンドレジスタ選択信号ｉとを受けて、アドレス一致信号ｉ、アドレス完全一致信号ｉ、挿入エンド信号ｉおよびコードレジスタ出力信号ｉを出力する。
【０１３５】
論理回路ＯＲ１は、（ｎ＋１）個のアドレス一致信号０〜ｎの論理和をアドレス一致信号として出力する。すなわち、（ｎ＋１）個のアドレス一致信号０〜ｎの少なくとも１つが「Ｈ」レベルのときに、アドレス一致信号が「Ｈ」レベルとなる。
【０１３６】
論理回路ＯＲ２は、（ｎ＋１）個のコードレジスタ出力信号０〜ｎの論理和をコードレジスタ出力信号として出力する。すなわち、（ｎ＋１）個のコードレジスタ出力信号０〜ｎの少なくとも１つが「Ｈ」レベルのビットを有するとき（すなわち、挿入コードが出力されたとき）に、コードレジスタ出力信号が挿入コードとなる。すなわち、（ｎ＋１）個のコードレジスタ出力信号０〜ｎの全ビットのすべてが「Ｌ」レベルのとき（すなわち、挿入コードが出力されないとき）に、コードレジスタ出力信号の全ビットが「Ｌ」となる。
【０１３７】
論理回路ＯＲ３は、（ｎ＋１）個のアドレス完全一致信号０〜ｎの論理和をアドレス完全一致信号として出力する。すなわち、（ｎ＋１）個のアドレス完全一致信号０〜ｎの少なくとも１つが「Ｈ」レベルのときに、アドレス完全一致信号が「Ｈ」レベルとなる。
【０１３８】
論理回路ＯＲ５４は、（ｎ＋１）個の挿入エンド信号０〜ｎの論理和を挿入エンド信号として出力する。すなわち、（ｎ＋１）個の挿入エンド信号０〜ｎの少なくとも１つが「Ｈ」レベルのときに、挿入エンド信号が「Ｈ」レベルとなる。
【０１３９】
図１８において、アドレス一致信号０〜ｎ、アドレス一致信号は、１ビットの信号である。アドレス完全一致信号０〜ｎ、アドレス完全一致信号は、１ビットの信号である。挿入エンド信号０〜ｎ、挿入エンド信号は、１ビットの信号である。コードレジスタ出力信号０〜ｎ、コードレジスタ出力信号は、１６ビットの信号である。
【０１４０】
図１９は、コード挿入用レジスタセット５４−０の構成を表わす図である。コード挿入用レジスタセット５４−１〜５４−ｎの構成も、図１９のコード挿入用レジスタセット５４−０の構成と同様である。
【０１４１】
図１９に示すように、コード挿入用レジスタセット５４−０は、論理回路ＡＮＤ１と、アドレスレジスタ３１と、アドレス比較器３０と、論理回路ＡＮＤ４と、コードレジスタ３２と、論理回路５４と、アドレスレジスタ５６と、アドレス比較器５７と、論理回路５６と、挿入エンドレジスタ５９と、論理回路ＡＮＤ２と、論理回路５５と、論理回路ＡＮＤ３とを備える。
【０１４２】
論理回路ＡＮＤ１は、クロックｃｌｋと、アドレスレジスタ選択信号０とがいずれも「Ｈ」レベルのときに、「Ｈ」レベルの信号をアドレスレジスタ３１の制御端子に出力する。
【０１４３】
アドレスレジスタ３１は、制御端子への入力が「Ｈ」レベルのときに、データバスを通じて送られてきた１５ビットのアドレス（つまり、挿入コードを挿入するアドレス）をラッチして保持する。
【０１４４】
アドレス比較器３０は、プログラムカウンタ１２から出力される２０ビットのアドレスのうちの上位１５ビット（アドレス［１９：５］）と、アドレスレジスタ３１に保持されている１５ビットのアドレスとが一致するときに、アドレス一致信号０を「Ｈ」レベルに設定する。
【０１４５】
論理回路ＡＮＤ５４は、クロックｃｌｋと、アドレスレジスタ２選択信号０とがいずれも「Ｈ」レベルのときに、「Ｈ」レベルの信号をコードレジスタ３２の制御端子に出力する。
【０１４６】
アドレスレジスタ５６は、制御端子への入力が「Ｈ」レベルのときに、データバスを通じて送られてきた５ビットのアドレスをラッチして保持する。このアドレスレジスタ５６には、複数個の挿入コードを連続して挿入する際の挿入順番を示すアドレスが保持される。
【０１４７】
アドレス比較器５７は、プログラムカウンタ１２から出力される２０ビットのアドレスのうちの下位５ビット（アドレス［４：０］）と、アドレスレジスタ５６に保持されている５ビットのアドレスとが一致するときに、「Ｈ」レベルの一致信号を出力する。
【０１４８】
論理回路ＡＮＤ２は、アドレス一致信号０が「Ｈ」レベルで、アドレス比較器５７から出力される一致信号が「Ｈ」レベルのときに、アドレス完全一致信号０を「Ｈ」レベルに設定する。
【０１４９】
論理回路ＡＮＤ５６は、クロックｃｌｋと、挿入エンドレジスタ選択信号０とがいずれも「Ｈ」レベルのときに、「Ｈ」レベルの信号を挿入エンドレジスタ５９の制御端子に出力する。
【０１５０】
挿入エンドレジスタ５９は、制御端子への入力が「Ｈ」レベルのときに、データバスを通じて送られてきた１ビットのデータ（挿入エンド）をラッチして保持する。コード挿入用レジスタセット５４−０のうち、対応の挿入エンドレジスタ５９に「Ｈ」（「１」）のデータが保持されているということは、その対応のコード挿入用レジスタセットの挿入コードの挿入でコード挿入が一端終了することを示している。
【０１５１】
論理回路ＡＮＤ５５は、アドレス完全一致信号０と、挿入エンドレジスタ５９の出力とを受ける。論理回路ＡＮＤ５５は、アドレス完全一致信号０が「Ｈ」レベルのときに、挿入エンドレジスタ５９に保持された１ビットのデータ（挿入エンド）を挿入エンド信号０として出力する。
【０１５２】
論理回路ＡＮＤ４は、クロックｃｌｋと、コードレジスタ選択信号０とがいずれも「Ｈ」レベルのときに、「Ｈ」レベルの信号をコードレジスタ３２の制御端子に出力する。
【０１５３】
コードレジスタ３２は、制御端子への入力が「Ｈ」レベルのときに、データバスを通じて送られてきた１６ビットのデータ（つまり、挿入コード）をラッチして保持する。
【０１５４】
論理回路ＡＮＤ３は、アドレス完全一致信号０と、コードレジスタ３２の出力とを受ける。論理回路ＡＮＤ３は、アドレス完全一致信号０が「Ｈ」レベルのときに、コードレジスタ３２に保持された１６ビットのデータ（つまり、挿入コード）をコードレジスタ出力信号０として出力する。論理回路ＡＮＤ３は、アドレス完全一致信号０が「Ｌ」レベルのときに、１６ビットの「０ｘ００００」をコードレジスタ出力信号０として出力する。
【０１５５】
図１９において、アドレス一致信号０は、１ビットの信号である。アドレス完全一致信号０は、１ビットの信号である。挿入エンド信号０は、１ビットの信号である。コードレジスタ出力信号０は、１６ビットの信号である。これらの事項は、他の図面でも同様である。
【０１５６】
（第２の実施形態の動作例）
図２０（ａ）は、コード挿入用レジスタセット２９−ｉ（以下、コード挿入用レジスタセット＃ｉ）のアドレスレジスタ３１に保持されている値の例を示す図である。この例では、コード挿入用レジスタセット＃０のアドレスレジスタ３１に「０ｘ０１０６１」の上位１５ビット（第６ビット目〜第２０ビット目）が保持され、アドレスレジスタ５６に「０ｘ０１０６１」の下位５ビット（第１ビット目〜第５ビット目）が保持されている。また、コード挿入用レジスタセット＃０のコードレジスタ３２に挿入コード「Ｃｏｄｅ  Ｒｅｇ．０」が保持され、コード挿入用レジスタセット＃０の挿入エンドレジスタ５９に挿入エンド「０ｂ０」が保持されている。
【０１５７】
コード挿入用レジスタセット＃１のアドレスレジスタ３１に「０ｘ０１０６２」の上位１５ビットが保持され、アドレスレジスタ５６に「０ｘ０１０６２」の下位５ビットが保持されている。また、コード挿入用レジスタセット＃１のコードレジスタ３２に挿入コード「Ｃｏｄｅ  Ｒｅｇ．１」が保持され、コード挿入用レジスタセット＃１の挿入エンドレジスタ５９に挿入エンド「０ｂ１」が保持されている。また、フラッシュ制御コード用ＲＯＭ１３のアドレス「０ｘ・・・・」には、オリジナルコード「Ｒ・・・・」が保持されているものとする。
【０１５８】
図２０（ｂ）は、図２０（ａ）の条件下でのタイミング図である。
第０サイクルでは、プログラムカウンタ５１から出力される２０ビットのアドレス（ＰＣ値［１９：０］）は、「０ｘ０１０２０」である。また、アドレス「０ｘ０１０２０」の上位１５ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ３１に保持されているアドレス「０ｘ０１０６１」の上位１５ビットと相違し、かつコード挿入用レジスタセット＃１のアドレスレジスタ３１に保持されているアドレス「０ｘ０１０６２」の上位１５ビットとも相違するため、アドレス一致信号、およびアドレス完全一致信号が「Ｌ」レベルとなり、コードレジスタ出力信号が「０ｘ００００」となり、挿入エンド信号が「０ｂ０」となる。フラッシュ制御コード用ＲＯＭ１３から「０ｘ０１０２０」のアドレスのオリジナルコードである「Ｒ０１０２０」が出力される。コード選択回路１４は、アドレス完全一致信号が「Ｌ」レベルであるので、オリジナルコード「Ｒ０１０２０」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力されたオリジナルコード「Ｒ０１０００」を実行する。
【０１５９】
第１サイクルでは、前サイクルのアドレス一致信号が「Ｌ」レベルであり、挿入エンド信号が「０ｂ０」であるため、プログラムカウンタ５１のセレクタ５３が「０ｘ２０」を出力する。これにより、プログラムカウンタ５１の出力アドレスは、「０ｘ２０」だけ加算された「０ｘ０１０４０」となる。また、アドレス「０ｘ０１０４０」の上位１５ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ３１に保持されているアドレス「０ｘ０１０６１」の上位１５ビットと相違し、かつコード挿入用レジスタセット＃１のアドレスレジスタ３１に保持されているアドレス「０ｘ０１０６２」の上位１５ビットとも相違する。したがって、アドレス一致信号、およびアドレス完全一致信号が「Ｌ」レベルとなり、コードレジスタ出力信号が「０ｘ００００」となり、挿入エンド信号が「０ｂ０」となる。フラッシュ制御コード用ＲＯＭ１３から「０ｘ０１０２０」のアドレスのオリジナルコードである「Ｒ０１０４０」が出力される。コード選択回路１４は、アドレス完全一致信号が「Ｌ」レベルであるので、オリジナルコード「Ｒ０１０４０」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力されたオリジナルコード「Ｒ０１０２０」を実行する。
【０１６０】
第２サイクルでは、前サイクルのアドレス一致信号が「Ｌ」レベルであり、挿入エンド信号が「０ｂ０」であるため、プログラムカウンタ５１のセレクタ５３が「０ｘ２０」を出力する。これにより、プログラムカウンタ５１の出力アドレスは、「０ｘ２０」だけ加算された「０ｘ０１０６０」となる。また、アドレス「０ｘ０１０６０」の上位１５ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ３１に保持されているアドレス「０ｘ０１０６１」の上位１５ビットと一致し、かつコード挿入用レジスタセット＃１のアドレスレジスタ３１に保持されているアドレス「０ｘ０１０６２」の上位１５ビットとも一致する。その結果、アドレス一致信号が「Ｈ」レベルとなる（アドレス一致信号０およびアドレス一致信号１が「Ｈ」レベルとなるため）。また、アドレス「０ｘ０１０６０」の下位５ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ５６に保持されているアドレス「０ｘ０１０６１」の下位５ビットと相違し、かつコード挿入用レジスタセット＃１のアドレスレジスタ５６に保持されているアドレス「０ｘ０１０６２」の下位５ビットと相違する。その結果、アドレス完全一致信号が「Ｌ」レベルのままである（アドレス完全一致信号０およびアドレス完全一致信号１が「Ｌ」レベルのままのため）。アドレス完全一致信号が「Ｌ」レベルのため、コードレジスタ出力信号が「０ｘ００００」となり、挿入エンド信号が「０ｂ０」となる。フラッシュ制御コード用ＲＯＭ１３から「０ｘ０１０６０」のアドレスのオリジナルコードである「Ｒ０１０６０」が出力される。コード選択回路１４は、アドレス完全一致信号が「Ｌ」レベルであるので、オリジナルコード「Ｒ０１０６０」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力されたオリジナルコード「Ｒ０１０４０」を実行する。
【０１６１】
第３サイクルでは、前サイクルのアドレス一致信号が「Ｈ」レベルであり、挿入エンド信号が「０ｂ０」であるため、プログラムカウンタ５１のセレクタ２４が「０ｘ０１」を出力する。そのため、プログラムカウンタ５１の出力アドレスは、「０ｘ０１」だけ加算された「０ｘ０１０６１」となる。また、アドレス「０ｘ０１０６１」の上位１５ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ３１に保持されているアドレス「０ｘ０１０６１」の上位１５ビットと一致し、かつコード挿入用レジスタセット＃１のアドレスレジスタ３１に保持されているアドレス「０ｘ０１０６２」の上位１５ビットと一致する。その結果、アドレス一致信号が「Ｈ」レベルとなる（アドレス一致信号０およびアドレス一致信号１が「Ｈ」レベルとなるため）。また、アドレス「０ｘ０１０６１」の下位５ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ５６に保持されているアドレス「０ｘ０１０６１」の下位５ビットと一致するため、アドレス完全一致信号は「Ｈ」レベルとなる（アドレス完全一致信号０が「Ｈ」レベルとなるため）。アドレス完全一致信号０が「Ｈ」レベルとなるので、コードレジスタ出力信号０は、コード挿入用レジスタセット＃０のコードレジスタ３２に保持された挿入コード「Ｃｏｄｅ  Ｒｅｇ．０」となる。これにより、コードレジスタ出力信号は、挿入コード「Ｃｏｄｅ  Ｒｅｇ．０」となる。アドレス完全一致信号０が「Ｈ」レベルとなるので、挿入エンド信号０は、コード挿入用レジスタセット＃０の挿入エンドレジスタ５９に保持された挿入エンド「０ｂ０」となる。これにより、挿入エンド信号は、「０ｂ０」となる。コード選択回路１４は、アドレス完全一致信号が「Ｈ」レベルであるので、挿入コード「Ｃｏｄｅ  Ｒｅｇ．０」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力されたオリジナルコード「Ｒ０１０６０」を実行する。
【０１６２】
第４サイクルでは、前サイクルのアドレス一致信号が「Ｈ」レベルであり、挿入エンド信号が「０ｂ０」であるため、プログラムカウンタ５１のセレクタ２４が「０ｘ０１」を出力する。そのため、プログラムカウンタ５１の出力アドレスは、「０ｘ０１」だけ加算された「０ｘ０１０６２」となる。アドレス「０ｘ０１０６２」の上位１５ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ３１に保持されているアドレス「０ｘ０１０６１」の上位１５ビットと一致し、かつコード挿入用レジスタセット＃１のアドレスレジスタ３１に保持されているアドレス「０ｘ０１０６２」の上位１５ビットと一致する。その結果、アドレス一致信号が「Ｈ」レベルとなる（アドレス一致信号０およびアドレス一致信号１が「Ｈ」レベルとなるため）。また、アドレス「０ｘ０１０６２」の下位５ビットは、コード挿入用レジスタセット＃１のアドレスレジスタ５６に保持されているアドレス「０ｘ０１０６２」の下位５ビットと一致するため、アドレス完全一致信号は「Ｈ」レベルとなる（アドレス完全一致信号１が「Ｈ」レベルとなるため）。アドレス完全一致信号１が「Ｈ」レベルとなるので、コードレジスタ出力信号１は、コード挿入用レジスタセット＃１のコードレジスタ３２に保持された挿入コード「Ｃｏｄｅ  Ｒｅｇ．１」となる。これにより、コードレジスタ出力信号は、挿入コード「Ｃｏｄｅ  Ｒｅｇ．１」となる。アドレス完全一致信号１が「Ｈ」レベルとなるので、挿入エンド信号１は、コード挿入用レジスタセット＃１の挿入エンドレジスタ５９に保持された挿入エンド「０ｂ１」となる。これにより、挿入エンド信号は、「０ｂ１」となる。コード選択回路１４は、アドレス完全一致信号が「Ｈ」レベルであるので、挿入コード「Ｃｏｄｅ  Ｒｅｇ．１」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力された挿入コード「Ｃｏｄｅ  Ｒｅｇ．０」を実行する。
【０１６３】
第５サイクルでは、前サイクルのアドレス一致信号が「Ｈ」レベルであり、挿入エンド信号が「０ｂ１」であるため、プログラムカウンタ５１のセレクタ２４が「０ｘ２０」を出力する。また、挿入エンド信号が「０ｂ１」であるので、論理回路７４によって、加算器２５の出力の下位５ビットが「０」となる。その結果、プログラムカウンタ５１の出力アドレスは、「０ｘ０１０８０」となる。アドレス「０ｘ０１０８０」の上位１５ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ３１に保持されているアドレス「０ｘ０１０６１」の上位１５ビットと相違し、かつコード挿入用レジスタセット＃１のアドレスレジスタ３１に保持されているアドレス「０ｘ０１０６２」の上位１５ビットと相違する。その結果、アドレス一致信号が「Ｌ」レベルとなる（アドレス一致信号０およびアドレス一致信号１が「Ｌ」レベルとなるため）。また、アドレス「０ｘ０１０８０」の下位５ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ５６に保持されているアドレス「０ｘ０１０６１」の下位５ビットと相違し、コード挿入用レジスタセット＃１のアドレスレジスタ５６に保持されているアドレス「０ｘ０１０６２」の下位５ビットと相違する。その結果、アドレス完全一致信号は「Ｌ」レベルとなる（アドレス完全一致信号０およびアドレス完全一致信号１が「Ｌ」レベルとなるため）。アドレス完全一致信号が「Ｌ」レベルのため、コードレジスタ出力信号が「０ｘ００００」となり、挿入エンド信号が「０ｂ０」となる。フラッシュ制御コード用ＲＯＭ１３から「０ｘ０１０８０」のアドレスのオリジナルコードである「Ｒ０１０８０」が出力される。コード選択回路１４は、アドレス完全一致信号が「Ｌ」レベルであるので、オリジナルコード「Ｒ０１０８０」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力された挿入コード「Ｃｏｄｅ  Ｒｅｇ．１」を実行する。
【０１６４】
第６サイクルでは、前サイクルのアドレス一致信号が「Ｌ」レベルであり、挿入エンド信号が「０ｂ０」であるため、プログラムカウンタ５１のセレクタ５３が「０ｘ２０」を出力する。これによって、プログラムカウンタ５１の出力アドレスは、「０ｘ２０」だけ加算された「０ｘ０１０Ａ０」となる。アドレス「０ｘ０１０Ａ０」の上位１５ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ３１に保持されているアドレス「０ｘ０１０６１」の上位１５ビットと相違し、かつコード挿入用レジスタセット＃１のアドレスレジスタ３１に保持されているアドレス「０ｘ０１０６２」の上位１５ビットと相違する。その結果、アドレス一致信号、およびアドレス完全一致信号が「Ｌ」レベルとなり、コードレジスタ出力信号が「０ｘ００００」となり、挿入エンド信号が「０ｂ０」となる。フラッシュ制御コード用ＲＯＭ１３から「０ｘ０１０Ａ０」のアドレスのオリジナルコードである「Ｒ０１０Ａ０」が出力される。コード選択回路１４は、アドレス完全一致信号が「Ｌ」レベルであるので、オリジナルコード「Ｒ０１０Ａ０」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力されたオリジナルコード「Ｒ０１０８０」を実行する。
【０１６５】
第７サイクル以降は、第６サイクルと同様に動作する。
以上のように、本実施の形態によれば、プログラムカウンタのアドレスの最下位から所定個数のビット以外のビットでオリジナルコードのアドレスを指定し、最下位から所定個数のビットを用いてコードの挿入を制御するので、２つのオリジナルコードの間に１個以上のコードの挿入が可能で、かつマルチサイクル命令の実行が可能となる。また、第１の実施の形態によれば、プログラムカウンタ１２の出力は１６ビットとして説明したが、本実施の形態では、複数個の命令コードを挿入する為、プログラムカウンタ５１の出力は２０ビットと仮定した。
【０１６６】
［第３の実施形態］
（構成）
図２１は、第３の実施形態のフラッシュメモリ制御部３１２の構成を表わす図である。
【０１６７】
図２１のフラッシュメモリ制御部３１２が、図７の第１の実施形態のフラッシュメモリ制御部２と相違する点は、挿入コードレジスタセットブロック１６４である。
【０１６８】
挿入コードレジスタセットブロック１６４は、保持している挿入コードのアドレスの最下位ビットを除くビットとプログラムカウンタ１２のアドレスの最下位ビットを除くビットとが一致したときに、第１の信号を出力する（すなわち、アドレス一致信号を「Ｈ」レベルに設定する）。挿入コードレジスタセットブロック１６４は、第１の信号を出力し、かつ保持している挿入コードのアドレスの最下位ビットとプログラムカウンタ１２のアドレスの最下位ビットが一致するときに、第２の信号を出力する（すなわち、アドレス一致信号を「Ｈ」レベルに設定する）とともに、保持している挿入コードを出力する。
【０１６９】
図２２は、挿入コードレジスタセットブロック１６４に含まれるコード挿入用レジスタセット６４−０の構成を表わす図である。コード挿入用レジスタセット６４−１〜６４−ｎの構成も、図２２のコード挿入用レジスタセット６４−０の構成と同様である。
【０１７０】
図２２のコード挿入用レジスタセット６４−０が、図１１の第１の実施形態のコード挿入用レジスタセット２９−０と相違する点は、アドレスレジスタ１３１と、一致回路ＮＥＯＲ１を備える点である。
【０１７１】
アドレスレジスタ１３１は、論理回路ＡＮＤ１の出力が「Ｈ」レベルのときに、データバスを通じて送られてきた１６ビットのアドレスをラッチして保持する。
【０１７２】
一致回路ＸＮＯＲ１は、プログラムカウンタ１２から出力される１６ビットのアドレスのうちの最下位ビット（アドレス［０］）と、アドレスレジスタ１３１に保持されている１６ビットのアドレスのうちの最下位ビットとが一致するときに、一致信号を「Ｈ」レベルに設定する。
【０１７３】
論理回路ＡＮＤ２は、アドレス一致信号０が「Ｈ」レベルで、一致回路ＮＲＯＲ１から出力される一致信号が「Ｈ」レベルのときに、アドレス完全一致信号０を「Ｈ」レベルに設定する。
【０１７４】
（第３の実施形態の動作例）
挿入前のオリジナルコードおよび挿入コードが単一サイクル命令の場合の動作例を説明する。
【０１７５】
図２３（ａ）は、コード挿入用レジスタセット６４−ｉ（以下、コード挿入用レジスタセット＃ｉ）のアドレスレジスタ３１に保持されている値の例を示す図である。この例では、コード挿入用レジスタセット＃０のアドレスレジスタ１３１に１６ビットの「０ｘ０１０６」が保持されているとする。また、コード挿入用レジスタセット＃０のコードレジスタ３２に挿入コード「Ｃｏｄｅ  Ｒｅｇ．０」が保持されている。また、フラッシュ制御コード用ＲＯＭ１３のアドレス「０ｘ・・・・」には、オリジナルコード「Ｒ・・・・」が保持されているものとする。
【０１７６】
図２３（ｂ）は、図２３（ａ）の条件下でのタイミング図である。
第０サイクルでは、プログラムカウンタ１２から出力される１６ビットのアドレス（ＰＣ値［１５：０］）は、「０ｘ０１０２」である。アドレス「０ｘ０１０２」の上位１５ビットは、アドレスレジスタ１３１に保持されているアドレス「０ｘ０１０６」の上位１５ビットと相違する。その結果、アドレス一致信号、およびアドレス完全一致信号が「Ｌ」レベルとなり、コードレジスタ出力信号が「０ｘ００００」となる。フラッシュ制御コード用ＲＯＭ１３から「０ｘ０１０２」のアドレスのオリジナルコードである「Ｒ０１０２」が出力される。コード選択回路１４は、アドレス完全一致信号が「Ｌ」レベルであるので、オリジナルコード「Ｒ０１０２」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力されたオリジナルコード「Ｒ０１００」を実行する。
【０１７７】
第１サイクルでは、前サイクルのアドレス一致信号が「Ｌ」レベルであるため、プログラムカウンタ１２のセレクタ２４が「０ｘ０２」を出力する。これにより、プログラムカウンタ１２の出力アドレスは、「０ｘ０２」だけ加算された「０ｘ０１０４」となる。アドレス「０ｘ０１０４」の上位１５ビットは、アドレスレジスタ１３１に保持されているアドレス「０ｘ０１０６」の上位１５ビットと相違する。その結果、アドレス一致信号、アドレス完全一致信号が「Ｌ」レベルとなり、コードレジスタ出力信号が「０ｘ００００」となる。フラッシュ制御コード用ＲＯＭ１３から「０ｘ０１０４」のアドレスのオリジナルコードである「Ｒ０１０４」が出力される。コード選択回路１４は、アドレス完全一致信号が「Ｌ」レベルであるので、オリジナルコード「Ｒ０１０４」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力されたオリジナルコード「Ｒ０１０２」を実行する。
【０１７８】
第２サイクルでは、前サイクルのアドレス一致信号が「Ｌ」レベルであるため、プログラムカウンタ１２のセレクタ２４が「０ｘ０２」を出力するため、プログラムカウンタ１２の出力アドレスは、「０ｘ０２」だけ加算された「０ｘ０１０６」となる。アドレス「０ｘ０１０６」の上位１５ビットは、アドレスレジスタ１３１に保持されているアドレス「０ｘ０１０６」の上位１５ビットと一致するため、アドレス一致信号が「Ｈ」レベルとなる（アドレス一致信号０が「Ｈ」レベルとなるため）。また、アドレス「０ｘ０１０６」の下位１ビットは、アドレスレジスタ１３１に保持されているアドレス「０ｘ０１０６」の下位１ビットと一致するため、アドレス完全一致信号が「Ｈ」レベルとなる（アドレス完全一致信号０が「Ｈ」レベルとなるため）。さらに、コードレジスタ出力信号は、コードレジスタ３２に保持された挿入コード「Ｃｏｄｅ  Ｒｅｇ．０」となる（コードレジスタ出力信号０が「Ｃｏｄｅ  Ｒｅｇ．０」となるため）。コード選択回路１４は、アドレス完全一致信号が「Ｈ」レベルであるので、挿入コード「Ｃｏｄｅ  Ｒｅｇ．０」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力されたオリジナルコード「Ｒ０１０４」を実行する。
【０１７９】
第３サイクルでは、前サイクルのアドレス一致信号が「Ｈ」レベルであるため、プログラムカウンタ１２のセレクタ２４が「０ｘ０１」を出力する。これにより、プログラムカウンタ１２の出力アドレスは、「０ｘ０１」だけ加算された「０ｘ０１０７」となる。アドレス「０ｘ０１０７」の上位１５ビットは、アドレスレジスタ１３１に保持されているアドレス「０ｘ０１０６」の上位１５ビットと一致するため、アドレス一致信号が「Ｈ」レベルとなる（アドレス一致信号０が「Ｈ」レベルとなるため）。また、アドレス「０ｘ０１０７」の下位１ビットは、アドレスレジスタ１３１に保持されているアドレス「０ｘ０１０６」の下位１ビットと相違する。その結果、アドレス完全一致信号が「Ｌ」レベルとなり（アドレス完全一致信号０およびアドレス完全一致信号が「Ｌ」レベルとなるため）、コードレジスタ出力信号が「０ｘ００００」となる。フラッシュ制御コード用ＲＯＭ１３からプログラムカウンタ１２の出力アドレス「０ｘ０１０７」の下位１ビットだけを無視することによって同一となる「０ｘ０１０６」のアドレスのオリジナルコードである「Ｒ０１０６」が出力される。コード選択回路１４は、アドレス完全一致信号が「Ｌ」レベルであるので、オリジナルコード「Ｒ０１０６」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力された挿入コード「Ｃｏｄｅ  Ｒｅｇ．０」を実行する。
【０１８０】
第４サイクルでは、前サイクルのアドレス一致信号が「Ｈ」レベルであるため、プログラムカウンタ１２のセレクタ２４が「０ｘ０１」を出力する。これにより、プログラムカウンタ１２の出力アドレスは、「０ｘ０１」だけ加算された「０ｘ０１０８」となる。アドレス「０ｘ０１０８」の上位１５ビットは、アドレスレジスタ１３１に保持されているアドレス「０ｘ０１０６」の上位１５ビットと相違する。その結果、アドレス一致信号、およびアドレス完全一致信号が「Ｌ」レベルとなり、コードレジスタ出力信号が「０ｘ００００」となる。フラッシュ制御コード用ＲＯＭ１３から「０ｘ０１０８」のアドレスのオリジナルコードである「Ｒ０１０８」が出力される。コード選択回路１４は、アドレス完全一致信号が「Ｌ」レベルであるので、オリジナルコード「Ｒ０１０８」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力されたオリジナルコード「Ｒ０１０６」を実行する。
【０１８１】
第５サイクル以降は、第４サイクルと同様に動作する。
以上のように、本実施の形態によれば、第１の実施形態と同様に、プログラムカウンタのアドレスの最下位ビット以外のビットでオリジナルコードのアドレスを指定し、最下位ビットを用いてコードの挿入を制御するので、２つのオリジナルコードの間に１個のコードの挿入が可能で、かつマルチサイクル命令の実行が可能となる。また、本実施の形態によれば、挿入コードの実行を  オリジナルコードの後に実行するか（後挿入）かオリジナルコードの前に実行するか（前挿入）を選択することができる。
【０１８２】
［第４の実施形態］
（構成）
図２４は、第４の実施形態のフラッシュメモリ制御部１０３の構成を表わす図である。
【０１８３】
図２４のフラッシュメモリ制御部１０３が、図１６の第２の実施形態のフラッシュメモリ制御部１０２と相違する点は、プログラムカウンタ６５である。
【０１８４】
プログラムカウンタ６５は、挿入エンド信号を受けたときには、最下位からｋ個のビットを「１」にする。
【０１８５】
以下では、ｋ＝５として説明する。
図２５は、第４の実施形態のプログラムカウンタ６５の構成を表わす図である。
【０１８６】
図２５に示すように、プログラムカウンタ６５は、セレクタ６８と、加算器２５と、論理回路ＯＲ６８と、セレクタ２６と、セレクタ２７と、ＰＣ用レジスタ２８とを備える。
【０１８７】
セレクタ６８は、挿入コードレジスタセットブロック５２からアドレス一致信号を受ける。セレクタ６８は、アドレス一致信号が「Ｈ」レベルのときには、「０ｘ０１」を出力する。セレクタ６８は、アドレス一致信号が「Ｌ」レベルのときには、「０ｘ２０」を出力する。
【０１８８】
加算器２５は、ＰＣ用レジスタ２８から出力される２０ビットのアドレス「１９：０］とセレクタ６８から出力される値を加算する。
【０１８９】
論理回路ＯＲ６８は、加算器２５から出力される２０ビットのうちの下位５ビットと、挿入エンド信号の論理和を出力する。すなわち、論理回路ＯＲ６８は、挿入エンド信号が「Ｌ」レベルのときには、加算器２５から出力される２０ビットのうちの下位５ビットを出力する。論理回路ＯＲ６８は、挿入エンド信号が「Ｈ」レベルのときには、５ビットの「０ｂ１１１１１」を出力する。
【０１９０】
セレクタ２６は、加算器２５から出力される２０ビットのうちの上位１５ビット（６ビット目〜２０ビット目）を上位１５ビットとし、論理回路ＯＲ６８から出力される５ビットの信号を下位５ビットとした信号と、命令実行部１５から出力される演算結果ＰＣとを受ける。セレクタ２６は、命令実行部１５から出力される演算結果ＰＣ選択信号が「Ｈ」レベルのときには演算結果ＰＣを出力し、演算結果ＰＣ選択信号が「Ｌ」レベルのときには、加算器２５および論理回路５８の信号を出力する。
【０１９１】
セレクタ２７は、セレクタ２６の出力と、ＰＣ用レジスタ２８から出力されるアドレスとを受ける。セレクタ２７は、命令実行部１５から出力されるＰＣストール信号が「Ｈ」レベルのときにはＰＣ用レジスタ２８から出力されるアドレスを出力し、ＰＣストール信号が「Ｌ」レベルのときにはセレクタ２６の出力を出力する。
【０１９２】
ＰＣ用レジスタ２８は、セレクタ２７の出力をラッチして、フラッシュ制御用コード用ＲＯＭのアドレスとして内部アドレスバス２３へ出力する。
【０１９３】
（第４の実施形態の動作例）
図２６（ａ）は、コード挿入用レジスタセット５４−ｉ（以下、コード挿入用レジスタセット＃ｉ）のアドレスレジスタ３１に保持されている値の例を示す図である。この例では、コード挿入用レジスタセット＃０のアドレスレジスタ３１に「０ｘ０１０６０」の上位１５ビットが保持され、アドレスレジスタ５６に「０ｘ０１０６０」の下位５ビットが保持されている。また、コード挿入用レジスタセット＃０のコードレジスタ３２に挿入コード「Ｃｏｄｅ  Ｒｅｇ．０」が保持されている。また、コード挿入用レジスタセット＃０の挿入エンドレジスタ５９に挿入エンド「０ｂ０」が保持されている。コード挿入用レジスタセット＃１のアドレスレジスタ３１に「０ｘ０１０６１」の上位１５ビットが保持され、アドレスレジスタ５６に「０ｘ０１０６１」の下位５ビットが保持されている。また、コード挿入用レジスタセット＃０１コードレジスタ３２に挿入コード「Ｃｏｄｅ  Ｒｅｇ．１」が保持されている。また、コード挿入用レジスタセット＃１の挿入エンドレジスタ５９に挿入エンド「０ｂ１」が保持されている。また、フラッシュ制御コード用ＲＯＭ１３のアドレス「０ｘ・・・・」には、オリジナルコード「Ｒ・・・・」が保持されているものとする。
【０１９４】
図２６（ｂ）は、図２６（ａ）の条件下でのタイミング図である。
第０サイクルでは、プログラムカウンタ６５から出力される２０ビットのアドレス（ＰＣ値［１９：０］）は、「０ｘ０１０２０」である。アドレス「０ｘ０１０２０」の上位１５ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ３１に保持されているアドレス「０ｘ０１０６０」の上位１５ビットと相違し、かつコード挿入用レジスタセット＃１のアドレスレジスタ３１に保持されているアドレス「０ｘ０１０６１」の上位１５ビットと相違する。その結果、アドレス一致信号、およびアドレス完全一致信号が「Ｌ」レベルとなり、コードレジスタ出力信号が「０ｘ００００」となり、挿入エンド信号が「０ｂ０」となる。フラッシュ制御コード用ＲＯＭ１３から「０ｘ０１０２０」のアドレスのオリジナルコードである「Ｒ０１０２０」が出力される。コード選択回路１４は、アドレス完全一致信号が「Ｌ」レベルであるので、オリジナルコード「Ｒ０１０２０」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力されたオリジナルコード「Ｒ０１０００」を実行する。
【０１９５】
第１サイクルでは、前サイクルのアドレス一致信号が「Ｌ」レベルであるため、プログラムカウンタ６５のセレクタ６８が「０ｘ２０」を出力する。これにより、プログラムカウンタ６５の出力アドレスは、「０ｘ２０」だけ加算された「０ｘ０１０４０」となる。アドレス「０ｘ０１０４０」の上位１５ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ３１に保持されているアドレス「０ｘ０１０６１」の上位１５ビットと相違し、かつコード挿入用レジスタセット＃１のアドレスレジスタ３１に保持されているアドレス「０ｘ０１０６２」の上位１５ビットと相違する。その結果、アドレス一致信号、およびアドレス完全一致信号が「Ｌ」レベルとなり、コードレジスタ出力信号が「０ｘ００００」となり、挿入エンド信号が「０ｂ０」となる。フラッシュ制御コード用ＲＯＭ１３から「０ｘ０１０４０」のアドレスのオリジナルコードである「Ｒ０１０４０」が出力される。コード選択回路１４は、アドレス完全一致信号が「Ｌ」レベルであるので、オリジナルコード「Ｒ０１０４０」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力されたオリジナルコード「Ｒ０１０２０」を実行する。
【０１９６】
第２サイクルでは、前サイクルのアドレス一致信号が「Ｌ」レベルであるため、プログラムカウンタ６５のセレクタ６８が「０ｘ２０」を出力する。これにより、プログラムカウンタ６５の出力アドレスは、「０ｘ２０」だけ加算された「０ｘ０１０６０」となる。アドレス「０ｘ０１０６０」の上位１５ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ３１に保持されているアドレス「０ｘ０１０６０」の上位１５ビットと一致し、かつコード挿入用レジスタセット＃１のアドレスレジスタ３１に保持されているアドレス「０ｘ０１０６１」の上位１５ビットと一致するため、アドレス一致信号が「Ｈ」レベルとなる（アドレス一致信号０およびアドレス一致信号１が「Ｈ」レベルとなるため）。また、アドレス「０ｘ０１０６０」の下位５ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ５６に保持されているアドレス「０ｘ０１０６０」の下位５ビットと一致するため、アドレス完全一致信号は「Ｈ」レベルとなる（アドレス完全一致信号０が「Ｈ」レベルとなるため）。アドレス完全一致信号０が「Ｈ」レベルとなるので、コードレジスタ出力信号０は、コード挿入用レジスタセット＃０のコードレジスタ３２に保持された挿入コード「Ｃｏｄｅ  Ｒｅｇ．０」となる。これにより、コードレジスタ出力信号は、挿入コード「Ｃｏｄｅ  Ｒｅｇ．０」となる。アドレス完全一致信号０が「Ｈ」レベルとなるので、挿入エンド信号０は、コード挿入用レジスタセット＃０の挿入エンドレジスタ５９に保持された挿入エンド「０ｂ０」となる。これにより、挿入エンド信号は、「０ｂ０」となる。コード選択回路１４は、アドレス完全一致信号が「Ｈ」レベルであるので、挿入コード「Ｃｏｄｅ  Ｒｅｇ．０」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力されたオリジナルコード「Ｒ０１０４０」を実行する。
【０１９７】
第３サイクルでは、前サイクルのアドレス一致信号が「Ｈ」レベルであるため、プログラムカウンタ６５のセレクタ６８が「０ｘ０１」を出力する。これにより、プログラムカウンタ６５の出力アドレスは、「０ｘ０１」だけ加算された「０ｘ０１０６１」となる。アドレス「０ｘ０１０６１」の上位１５ビット（６ビット目〜２０ビット目）は、コード挿入用レジスタセット＃０のアドレスレジスタ３１に保持されているアドレス「０ｘ０１０６０」の上位１５ビットと一致し、かつコード挿入用レジスタセット＃１のアドレスレジスタ３１に保持されているアドレス「０ｘ０１０６１」の上位１５ビットと一致するたる。その結果、アドレス一致信号が「Ｈ」レベルとなる（アドレス一致信号０およびアドレス一致信号１が「Ｈ」レベルとなるため）。また、アドレス「０ｘ０１０６１」の下位５ビットは、コード挿入用レジスタセット＃１のアドレスレジスタ５６に保持されているアドレス「０ｘ０１０６１」の下位５ビットと一致する。その結果、アドレス完全一致信号は「Ｈ」レベルとなる（アドレス完全一致信号１が「Ｈ」レベルとなるため）。アドレス完全一致信号１が「Ｈ」レベルとなるので、コードレジスタ出力信号１は、コード挿入用レジスタセット＃１のコードレジスタ３２に保持された挿入コード「Ｃｏｄｅ  Ｒｅｇ．１」となる。これにより、コードレジスタ出力信号は、挿入コード「Ｃｏｄｅ  Ｒｅｇ．１」となる。アドレス完全一致信号１が「Ｈ」レベルとなるので、挿入エンド信号１は、コード挿入用レジスタセット＃１の挿入エンドレジスタ５９に保持された挿入エンド「０ｂ１」となる。これにより、挿入エンド信号は、「０ｂ１」となる。コード選択回路１４は、アドレス完全一致信号が「Ｈ」レベルであるので、挿入コード「Ｃｏｄｅ  Ｒｅｇ．１」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力された挿入コード「Ｃｏｄｅ  Ｒｅｇ．０」を実行する。
【０１９８】
第４サイクルでは、前サイクルのアドレス一致信号が「Ｈ」レベルであるため、プログラムカウンタ６５のセレクタ６８が「０ｘ０１」を出力する。また、挿入エンド信号「０ｂ１」のため、論理回路ＯＲ６８によって、加算器２５から出力される２０ビットのアドレスの下位５ビットが「１」となる。その結果、プログラムカウンタ６５の出力アドレスは、「０ｘ０１０７Ｆ」となる。アドレス「０ｘ０１０７Ｆ」の上位１５ビット（６ビット目〜２０ビット目）は、コード挿入用レジスタセット＃０のアドレスレジスタ３１に保持されているアドレス「０ｘ０１０６０」の上位１５ビットと一致し、かつコード挿入用レジスタセット＃１のアドレスレジスタ３１に保持されているアドレス「０ｘ０１０６１」の上位１５ビットと一致する。その結果、アドレス一致信号が「Ｈ」レベルとなる（アドレス一致信号０およびアドレス一致信号１が「Ｈ」レベルとなるため）。また、アドレス「０ｘ０１０７Ｆ」の下位５ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ５６に保持されているアドレス「０ｘ０１０６０」の下位５ビットと相違し、かつコード挿入用レジスタセット＃１のアドレスレジスタ５６に保持されているアドレス「０ｘ０１０６１」の下位５ビットと相違する。その結果、アドレス完全一致信号は「Ｌ」レベルとなる（アドレス完全一致信号０およびアドレス完全一致信号が「Ｌ」レベルとなるため）。アドレス完全一致信号が「Ｌ」レベルとなるのでコードレジスタ出力信号が「０ｘ００００」となり、挿入エンド信号が「０ｂ０」となる。フラッシュ制御コード用ＲＯＭ１３から「０ｘ０１０７Ｆ」のアドレスの下位５ビットを無視することによって同一となるアドレス「０ｘ０１０６０」のオリジナルコードである「Ｒ０１０６０」が出力される。コード選択回路１４は、アドレス完全一致信号が「Ｌ」レベルであるので、オリジナルコード「Ｒ０１０６０」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力された挿入コード「Ｃｏｄｅ  Ｒｅｇ．１」を実行する。
【０１９９】
第５サイクルでは、前サイクルのアドレス一致信号が「Ｈ」レベルであるので、プログラムカウンタ６５のセレクタ６８が「０ｘ０１」を出力する。また、挿入エンド信号が「０ｂ０」のため、論理回路ＯＲ６８によって、加算器２５から出力される２０ビットのアドレスの下位５ビットがそのまま出力される。その結果、プログラムカウンタ６５の出力アドレスは、「０ｘ０１０８０」となる。また、アドレス「０ｘ０１０８０」の上位１５ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ３１に保持されているアドレス「０ｘ０１０６０」の上位１５ビットと相違し、かつコード挿入用レジスタセット＃１のアドレスレジスタ３１に保持されているアドレス「０ｘ０１０６１」の上位１５ビットと相違する。その結果、アドレス一致信号が「Ｌ」レベルとなる（アドレス一致信号０およびアドレス一致信号１が「Ｌ」レベルとなるため）。また、アドレス「０ｘ０１０８０」の下位５ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ５６に保持されているアドレス「０ｘ０１０６０」の下位５ビットと相違し、コード挿入用レジスタセット＃１のアドレスレジスタ５６に保持されているアドレス「０ｘ０１０６１」の下位５ビットと相違する。その結果、アドレス完全一致信号は「Ｌ」レベルとなる（アドレス完全一致信号０およびアドレス完全一致信号１が「Ｌ」レベルとなるため）。アドレス完全一致信号が「Ｌ」レベルのため、コードレジスタ出力信号が「０ｘ００００」となり、挿入エンド信号が「０ｂ０」となる。フラッシュ制御コード用ＲＯＭ１３から「０ｘ０１０８０」のアドレスのオリジナルコードである「Ｒ０１０８０」が出力される。コード選択回路１４は、アドレス完全一致信号が「Ｌ」レベルであるので、オリジナルコード「Ｒ０１０８０」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力されたオリジナルコード「Ｒ０１０６０」を実行する。
【０２００】
第６サイクルでは、前サイクルのアドレス一致信号が「Ｌ」レベルであるので、プログラムカウンタ６５のセレクタ６８が「０ｘ２０」を出力するため、プログラムカウンタ６５の出力アドレスは、「０ｘ２０」だけ加算された「０ｘ０１０Ａ０」となる。アドレス「０ｘ０１０Ａ０」の上位１５ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ３１に保持されているアドレス「０ｘ０１０６０」の上位１５ビットと相違し、かつコード挿入用レジスタセット＃１のアドレスレジスタ３１に保持されているアドレス「０ｘ０１０６１」の上位１５ビットと相違する。その結果、アドレス一致信号、およびアドレス完全一致信号が「Ｌ」レベルとなり、コードレジスタ出力信号が「０ｘ００００」となり、挿入エンド信号が「０ｂ０」となる。フラッシュ制御コード用ＲＯＭ１３から「０ｘ０１０Ａ０」のアドレスのオリジナルコードである「Ｒ０１０Ａ０」が出力される。コード選択回路１４は、アドレス完全一致信号が「Ｌ」レベルであるので、オリジナルコード「Ｒ０１０Ａ０」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力されたオリジナルコード「Ｒ０１０８０」を実行する。
【０２０１】
第７サイクル以降は、第６サイクルと同様に動作する。
以上のように、本実施の形態によれば、第２の実施形態と同様に、プログラムカウンタのアドレスの最下位から所定個数のビット以外のビットでオリジナルコードのアドレスを指定し、最下位から所定個数のビットを用いてコードの挿入を制御するので、２つのオリジナルコードの間に１個以上のコードの挿入が可能で、かつマルチサイクル命令の実行が可能となる。また、本実施の形態によれば、プログラムカウンタからのアドレスがアドレスレジスタの値と一致した場合、挿入コードの実行をオリジナルコードの前に実行していた第２の実施の形態に対し、挿入コードの実行をオリジナルコードの後に実行する。
【０２０２】
［第５の実施形態］
（構成）
図２７は、第５の実施形態のフラッシュメモリ制御部３９５の構成を表わす図である。
【０２０３】
図２７のフラッシュメモリ制御部３９５が、図７の第１の実施形態のフラッシュメモリ制御部２と相違する点は、挿入コードレジスタセットブロック３９６である。
【０２０４】
図２８は、挿入コードレジスタセットブロック３９６に含まれるコード挿入用レジスタセット４０−０の構成を表わす図である。コード挿入用レジスタセット４０−１〜４０−ｎの構成も、図２８のコード挿入用レジスタセット４０−０の構成と同様である。
【０２０５】
図２８のコード挿入用レジスタセット４０−０が、図１１の第１の実施形態のコード挿入用レジスタセット２９−０と相違する点は、論理回路ＡＮＤ６と、ステータスレジスタ３４と、論理回路ＡＮＤ５である。
【０２０６】
論理回路ＡＮＤ６は、クロックｃｌｋと、ステータスレジスタ選択信号０とがいずれも「Ｈ」レベルのときに、「Ｈ」レベルの信号をステータスレジスタ３４の制御端子に出力する。
【０２０７】
ステータスレジスタ３４は、制御端子への入力が「Ｈ」レベルのときに、データバスを通じて送られてきた１ビットのステータス値をラッチして保持する。
【０２０８】
論理回路ＡＮＤ５は、ステータスレジスタ３４の出力と、アドレス比較器３０の出力との論理積をアドレス一致信号０として出力する。したがって、ステータス値が「０」に設定されるときには、アドレス一致信号０、アドレス完全一致信号０が常に「Ｌ」レベルとなる。その結果、コード選択回路１２は、ステータス値が「０」のときに、プログラムカウンタ１２のアドレスに係わらず、フラッシュ制御コード用ＲＯＭ１３から出力されるオリジナルコードを選択する。これによって、本実施の形態で説明するコードの挿入機能が無効となる。
【０２０９】
以上のように、本実施の形態によれば、ステータス値に応じて、コードの挿入機能の有効／無効を切替えることができる。
【０２１０】
［第６の実施形態］
（構成）
図２９は、第６の実施形態のフラッシュメモリ制御部４２３の構成を表わす図である。
【０２１１】
図２９のフラッシュメモリ制御部４２３が、図７の第１の実施形態のフラッシュメモリ制御部１０２と相違する点は、挿入コードレジスタセットブロック４２４とプロラムカウンタ７２である。
【０２１２】
挿入コードレジスタセットブロック４２４は、保持している挿入コードのアドレスの最上位ビットを除くビットとプログラムカウンタ７２のアドレスの最上位ビットを除くビットとが一致したときに、第１の信号を出力する（すなわち、アドレス一致信号を「Ｈ」レベルに設定する）。
【０２１３】
挿入コードレジスタセットブロック４２４は、第１の信号を出力し、かつプログラムカウンタ７２のアドレスの最上位ビットが「１」のときに、第２の信号を出力する（すなわち、アドレス完全一致信号を「Ｈ」レベルに設定する）とともに、保持している挿入コードを出力する。
【０２１４】
プログラムカウンタ７２は、第１の信号を受けたときに、最上位ビットに「１」を加算し、第１の信号を受けないときに、最下位から２ビット目に「１」を加算する。
【０２１５】
図３０は、プログラムカウンタ７２の構成を表わす図である。
図３０に示すように、プログラムカウンタ７２は、セレクタ７３と、加算器２５と、論理回路ＡＮＤ７２と、セレクタ２６と、セレクタ２７と、ＰＣ用レジスタ２８とを備える。
【０２１６】
セレクタ７３は、挿入コードレジスタセットブロック４２４からアドレス一致信号とアドレス完全一致信号とを受ける。セレクタ７３は、アドレス一致信号が「Ｈ」レベル、かつアドレス完全一致信号が「Ｌ」レベルのときには、「０ｘ１００００」を出力する。セレクタ７３は、アドレス一致信号が「Ｌ」レベル、かつアドレス完全一致信号が「Ｈ」レベルのとき、アドレス一致信号が「Ｌ」レベル、かつアドレス完全一致信号が「Ｌ」レベルのとき、またはアドレス一致信号が「Ｈ」レベル、かつアドレス完全一致信号が「Ｈ」レベルのときには、「０ｘ０２」を出力する。
【０２１７】
加算器２５は、ＰＣ用レジスタ２８から出力される１７ビットのアドレス「１６：０］とセレクタ７３から出力される値を加算する。本実施の形態では、１個の命令コードを挿入する為、プログラムカウンタ７２の出力は１７ビットと仮定した。
【０２１８】
論理回路ＡＮＤ７２は、加算器２５から出力される１７ビットのうちの最上位１ビットと、アドレス完全一致信号の否定の論理積を出力する。すなわち、論理回路ＡＮＤ７２は、アドレス完全一致信号が「Ｌ」レベルのときには、加算器２５から出力される１７ビットのうちの最上位１ビットを出力する。論理回路ＡＮＤ７２は、アドレス完全一致信号が「Ｈ」レベルのときには、１ビットの「０ｂ０」を出力する。
【０２１９】
セレクタ２６は、加算器２５から出力される１７ビットのうちの下位１６ビットを下位１６ビットとし、論理回路ＡＮＤ７２から出力される１ビットの信号を最上位１ビットとした信号と、命令実行部１５から出力される演算結果ＰＣとを受ける。セレクタ２６は、命令実行部１５から出力される演算結果ＰＣ選択信号が「Ｈ」レベルのときには演算結果ＰＣを出力し、演算結果ＰＣ選択信号が「Ｌ」レベルのときには、加算器２５および論理回路ＡＮＤ７２からの信号を出力する。
【０２２０】
セレクタ２７は、セレクタ２６の出力と、ＰＣ用レジスタ２８から出力されるアドレスとを受ける。セレクタ２７は、命令実行部１５から出力されるＰＣストール信号が「Ｈ」レベルのときにはＰＣ用レジスタ２８から出力されるアドレスを出力し、ＰＣストール信号が「Ｌ」レベルのときにはセレクタ２６の出力を出力する。
【０２２１】
ＰＣ用レジスタ２８は、セレクタ２７の出力をラッチして、フラッシュ制御用コード用ＲＯＭのアドレスとして内部アドレスバス２３へ出力する。
【０２２２】
図３１は、挿入コードレジスタセットブロック４２４に含まれるコード挿入用レジスタセット７１−０の構成を表わす図である。コード挿入用レジスタセット７１−１〜７１−ｎの構成も、図３１のコード挿入用レジスタセット７１−０の構成と同様である。
【０２２３】
図３１に示すように、コード挿入用レジスタセット７１−０は、論理回路ＡＮＤ１と、アドレスレジスタ３１と、アドレス比較器３０と、論理回路ＡＮＤ４と、コードレジスタ３２と、論理回路ＡＮＤ７１とを備える。
【０２２４】
論理回路ＡＮＤ１は、クロックｃｌｋと、アドレスレジスタ選択信号０とがいずれも「Ｈ」レベルのときに、「Ｈ」レベルの信号をアドレスレジスタ３１の制御端子に出力する。
【０２２５】
アドレスレジスタ３１は、制御端子への入力が「Ｈ」レベルのときに、データバスを通じて送られてきた１６ビットのアドレスをラッチして保持する。
【０２２６】
アドレス比較器３０は、プログラムカウンタ７２から出力される１７ビットのアドレスのうちの下位１６ビット（アドレス［１５：０］）と、アドレスレジスタ３１に保持されている１６ビットのアドレスとが一致するときに、アドレス一致信号０を「Ｈ」レベルに設定する。
【０２２７】
論理回路ＡＮＤ７１は、アドレス一致信号０が「Ｈ」レベルで、プログラムカウンタ７２から出力される１７ビットのアドレスのうちの最上位１ビット（アドレス［１６］）が「１」のときに、アドレス完全一致信号０を「Ｈ」レベルに設定する。
【０２２８】
論理回路ＡＮＤ４は、クロックｃｌｋと、コードレジスタ選択信号０とがいずれも「Ｈ」レベルのときに、「Ｈ」レベルの信号をコードレジスタ３２の制御端子に出力する。
【０２２９】
コードレジスタ３２は、制御端子への入力が「Ｈ」レベルのときに、データバスを通じて送られてきた１６ビットのデータ（つまり、挿入コード）をラッチして保持する。
【０２３０】
（第６の実施形態の動作例）
図３２（ａ）は、コード挿入用レジスタセット７１−ｉ（以下、コード挿入用レジスタセット＃ｉ）のアドレスレジスタ３１に保持されている値の例を示す図である。この例では、コード挿入用レジスタセット＃０のアドレスレジスタ３１に「０ｘ００１０６」の下位１６ビットが保持されている。また、コード挿入用レジスタセット＃０のコードレジスタ３２に挿入コード「Ｃｏｄｅ  Ｒｅｇ．０」が保持されている。また、フラッシュ制御コード用ＲＯＭ１３のアドレス「０ｘ・・・・」には、オリジナルコード「Ｒ・・・・」が保持されているものとする。
【０２３１】
図３２（ｂ）は、図３２（ａ）の条件下でのタイミング図である。
第０サイクルでは、プログラムカウンタ７２から出力される１７ビットのアドレス（ＰＣ値［１６：０］）は、「０ｘ００１０２」である。また、アドレス「０ｘ００１０２」の下位１６ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ３１に保持されているアドレス「０ｘ００１０６」の下位１６ビットと相違する。その結果、アドレス一致信号、およびアドレス完全一致信号が「Ｌ」レベルとなり、コードレジスタ出力信号が「０ｘ０００００」となる。フラッシュ制御コード用ＲＯＭ１３から「０ｘ００１０２」のアドレスのオリジナルコードである「Ｒ００１０２」が出力される。コード選択回路１４は、アドレス完全一致信号が「Ｌ」レベルであるので、オリジナルコード「Ｒ００１０２」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力されたオリジナルコード「Ｒ００１００」を実行する。
【０２３２】
第１サイクルでは、前サイクルのアドレス一致信号が「Ｌ」レベルであり、アドレス完全一致信号が「Ｌ」レベルであるため、プログラムカウンタ７２のセレクタ７３が「０ｘ０２」を出力する。これにより、プログラムカウンタ７２の出力アドレスは、「０ｘ０２」だけ加算された「０ｘ００１０４」となる。アドレス「０ｘ００１０４」の下位１６ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ３１に保持されているアドレス「０ｘ００１０６」の下位１６ビットと相違する。その結果、アドレス一致信号、アドレス完全一致信号が「Ｌ」レベルとなり、コードレジスタ出力信号が「０ｘ０００００」となる。フラッシュ制御コード用ＲＯＭ１３から「０ｘ００１０４」のアドレスのオリジナルコードである「Ｒ００１０４」が出力される。コード選択回路１４は、アドレス完全一致信号が「Ｌ」レベルであるので、オリジナルコード「Ｒ００１０４」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力されたオリジナルコード「Ｒ００１０２」を実行する。
【０２３３】
第２サイクルでは、前サイクルのアドレス一致信号が「Ｌ」レベルであり、アドレス完全一致信号が「Ｌ」レベルであるため、プログラムカウンタ７２のセレクタ２４が「０ｘ０２」を出力する。これにより、プログラムカウンタ７２の出力アドレスは、「０ｘ０２」だけ加算された「０ｘ００１０６」となる。アドレス「０ｘ００１０６」の下位１６ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ３１に保持されているアドレス「０ｘ００１０６」の下位１６ビットと一致する。その結果、アドレス一致信号が「Ｈ」レベルとなる（アドレス一致信号０が「Ｈ」レベルとなるため）。一方、プログラムカウンタ７２の出力アドレスの最上位ビットが「０」のため、アドレス完全一致信号が「Ｌ」レベルのままで、コードレジスタ出力信号が「０ｘ０００００」のままである。フラッシュ制御コード用ＲＯＭ１３から「０ｘ００１０６」のアドレスのオリジナルコードである「Ｒ００１０６」が出力される。コード選択回路１４は、アドレス完全一致信号が「Ｌ」レベルであるので、オリジナルコード「Ｒ００１０６」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力されたオリジナルコード「Ｒ００１０４」を実行する。
【０２３４】
第３サイクルでは、前サイクルのアドレス一致信号が「Ｈ」レベルであり、アドレス完全一致信号が「Ｌ」レベルのため、プログラムカウンタ７２のセレクタ７３が「０ｘ１００００」を出力する。これにより、プログラムカウンタ７２の出力アドレスは、「０ｘ１００００」だけ加算された「０ｘ１０１０６」となる。アドレス「０ｘ１０１０６」の下位１６ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ３１に保持されているアドレス「０ｘ００１０６」の下位１６ビットと一致するため、アドレス一致信号が「Ｈ」レベルとなる（アドレス一致信号０が「Ｈ」レベルとなるため）。プログラムカウンタ７２の出力アドレスの最上位ビットが「１」のため、アドレス完全一致信号は「Ｈ」レベルとなる（アドレス一致信号０が「Ｈ」レベルとなるため）。さらに、コードレジスタ出力信号は、コードレジスタ３２に保持された挿入コード「Ｃｏｄｅ  Ｒｅｇ．０」となる（コードレジスタ出力信号０が「Ｃｏｄｅ  Ｒｅｇ．０」となるため）。コード選択回路１４は、アドレス完全一致信号が「Ｈ」レベルであるので、挿入コード「Ｃｏｄｅ  Ｒｅｇ．０」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力されたオリジナルコード「Ｒ００１０６」を実行する。
【０２３５】
第４サイクルでは、前サイクルのアドレス一致信号が「Ｈ」レベルであり、アドレス完全一致信号が「Ｈ」レベルのため、プログラムカウンタ７２のセレクタ７３が「０ｘ０２」を出力する。アドレス完全一致信号が「Ｈ」レベルなので、論理回路ＡＮＤ７２によって、加算器２５の出力の最上位ビット（１７ビット目）が「０」となる。その結果、プログラムカウンタ７２の出力アドレスは、「０ｘ００１０８」となる。アドレス「０ｘ００１０８」の下位１６ビットは、アドレスレジスタ３１に保持されているアドレス「０ｘ００１０６」の下位１６ビットと相違する。その結果、アドレス一致信号、アドレス完全一致信号が「Ｌ」レベルとなり、コードレジスタ出力信号が「０ｘ０００００」となる。フラッシュ制御コード用ＲＯＭ１３から「０ｘ００１０８」のアドレスのオリジナルコードである「Ｒ００１０８」が出力される。コード選択回路１４は、アドレス完全一致信号が「Ｌ」レベルであるので、オリジナルコード「Ｒ００１０８」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力された挿入コード「Ｃｏｄｅ  Ｒｅｇ．０」を実行する。
【０２３６】
第５サイクル以降は、第４サイクルと同様に動作する。
以上のように、本実施の形態によれば、プログラムカウンタのアドレスの最上位ビット以外のビットでオリジナルコードのアドレスを指定し、最上位ビットを用いてコードの挿入を制御するので、２つのオリジナルコードの間に１個のコードの挿入が可能で、かつマルチサイクル命令の実行が可能となる。
【０２３７】
なお、本実施の形態では、複数のオリジナルコードのアドレスは、最下位から２ビット目以上のビットが有効としたが、これに限定されるものではなく、複数のオリジナルコードのアドレスは、最下位からｎビット目以上のビットが有効としてもよい。ただし、ｎは１以上の自然数である。この場合には、プログラムカウンタ７２は、第１の信号を受けないとき（アドレス一致信号が「Ｌ」レベルのとき）に、最下位からｎビット目に「１」を加算すればよい。尚、本実施の形態以降では、最下位ビットは使用しない構成であるため、各プログラムカウンタおよび挿入コードレジスタセットへのアドレス入力は[１５：１]でも構わないが、[１５：０]でとして記してある。
【０２３８】
［第７の実施形態］
本実施の形態では、複数のオリジナルコードのアドレスは、最下位からｍビット目以上のビットが有効であるとする。
【０２３９】
図３３は、第７の実施形態のフラッシュメモリ制御部６２３の構成を表わす図である。
図３３のフラッシュメモリ制御部６２３が、図１６の第２の実施形態のフラッシュメモリ制御部１０２と相違する点は、挿入コードレジスタセットブロック６２４とプログラムカウンタ７４である。
【０２４０】
挿入コードレジスタセットブロック６２４は、最大で２k-１個の挿入コードと、挿入コードのアドレスを保持する。挿入コードレジスタセットブロック６２４は、保持している挿入コードのアドレスの最上位からｋ個のビットを除くビットとプログラムカウンタ７４のアドレスの最上位からｋ個のビットを除くビットとが一致したときに、第１の信号を出力する（すなわち、アドレス一致信号を「Ｈ」レベルに設定する。）。
【０２４１】
挿入コードレジスタセットブロック６２４は、第１の信号を出力し、かつ保持している挿入コードのアドレスの最上位からｋ個のビットとプログラムカウンタ７４のアドレスの最上位からｋ個のビットとが一致したときに、第２の信号を出力する（アドレス完全一致信号を「Ｈ」レベルに設定する）とともに、プログラムカウンタ７４のアドレスに対応する保持している挿入コードを出力する。
【０２４２】
挿入コードレジスタセットブロック６２４は、複数の挿入コードを連続して挿入するときに最後の挿入コードを出力する場合には、第２の信号を出力するとともに、同時に挿入エンドを示す挿入エンド信号を出力する。
【０２４３】
プログラムカウンタ７４は、第１の信号を受けたときに、最上位からｋ番目のビットに「１」を加算し、第１の信号を受けなかったときに、最下位からｍ番目のビットに「１」を加算する。
【０２４４】
プログラムカウンタ７４は、挿入エンド信号を受けたときには、第１の信号を受けたときでも、最下位からｍ番目のビットに「１」を加算し、かつ最上位からｋ個のビットを「０」にする。
【０２４５】
本実施の形態では、ｍ＝２、ｋ＝４として説明する。
図３４は、プログラムカウンタ７４の構成を表わす図である。
【０２４６】
図３４に示すように、プログラムカウンタ７４は、セレクタ７７と、加算器２５と、論理回路ＡＮＤ７４と、セレクタ２６と、セレクタ２７と、ＰＣ用レジスタ２８とを備える。
【０２４７】
セレクタ７７は、挿入コードレジスタセットブロック６２４からアドレス一致信号と挿入エンド信号とを受ける。セレクタ７７は、アドレス一致信号が「Ｈ」レベル、かつ挿入エンド信号が「Ｌ」レベルのときには、「０ｘ１００００」を出力する。セレクタ７３は、アドレス一致信号が「Ｌ」レベル、かつ挿入エンド信号が「Ｈ」レベルのとき、アドレス一致信号が「Ｌ」レベル、かつ挿入エンド信号が「Ｌ」レベルのとき、またはアドレス一致信号が「Ｈ」レベル、かつ挿入エンド信号が「Ｈ」レベルのときには、「０ｘ０２」を出力する。
【０２４８】
加算器２５は、ＰＣ用レジスタ２８から出力される２０ビットのアドレスとセレクタ７３から出力される値を加算する。
【０２４９】
論理回路ＡＮＤ７４は、加算器２５から出力される２０ビットのうちの上位４ビットと、挿入エンド信号の否定の論理積を出力する。すなわち、論理回路ＡＮＤ７４は、挿入エンド信号が「Ｌ」レベルのときには、加算器２５から出力される２０ビットのうちの上位４ビットを出力する。論理回路ＡＮＤ７４は、挿入エンド信号が「Ｈ」レベルのときには、４ビットの「０ｂ００００」を出力する。
【０２５０】
セレクタ２６は、加算器２５から出力される２０ビットのうちの下位１６ビットを下位１６ビットとし、論理回路ＡＮＤ７４から出力される４ビットの信号を上位４ビットとした信号と、命令実行部１５から出力される演算結果ＰＣとを受ける。セレクタ２６は、命令実行部１５から出力される演算結果ＰＣ選択信号が「Ｈ」レベルのときには演算結果ＰＣを出力し、演算結果ＰＣ選択信号が「Ｌ」レベルのときには、加算器２５および論理回路ＡＮＤ７４からの信号を出力する。
【０２５１】
セレクタ２７は、セレクタ２６の出力と、ＰＣ用レジスタ２８から出力されるアドレスとを受ける。セレクタ２７は、命令実行部１５から出力されるＰＣストール信号が「Ｈ」レベルのときにはＰＣ用レジスタ２８から出力されるアドレスを出力し、ＰＣストール信号が「Ｌ」レベルのときにはセレクタ２６の出力を出力する。
【０２５２】
ＰＣ用レジスタ２８は、セレクタ２７の出力をラッチして、フラッシュ制御用コード用ＲＯＭのアドレスとして内部アドレスバス２３へ出力する。
【０２５３】
図３５は、挿入コードレジスタセットブロック６２４に含まれるコード挿入用レジスタセット７８−０の構成を表わす図である。コード挿入用レジスタセット７８−１〜７８−ｎの構成も、図３５のコード挿入用レジスタセット７８−０の構成と同様である。
【０２５４】
図３５に示すように、コード挿入用レジスタセット７８−０は、論理回路ＡＮＤ１と、アドレスレジスタ３１と、アドレス比較器３０と、論理回路ＡＮＤ４と、コードレジスタ３２と、論理回路５４と、アドレスレジスタ１５６と、アドレス比較器１５７と、論理回路５６と、挿入エンドレジスタ５９と、論理回路ＡＮＤ２と、論理回路５５と、論理回路ＡＮＤ３とを備える。
【０２５５】
論理回路ＡＮＤ１は、クロックｃｌｋと、アドレスレジスタ選択信号０とがいずれも「Ｈ」レベルのときに、「Ｈ」レベルの信号をアドレスレジスタ３１の制御端子に出力する。
【０２５６】
アドレスレジスタ３１は、制御端子への入力が「Ｈ」レベルのときに、データバスを通じて送られてきた１６ビットのアドレスをラッチして保持する。
【０２５７】
アドレス比較器３０は、プログラムカウンタ７４から出力される２０ビットのアドレスのうちの下位１６ビット（アドレス［１５：０］）と、アドレスレジスタ３１に保持されている１６ビットのアドレスとが一致するときに、アドレス一致信号０を「Ｈ」レベルに設定する。
【０２５８】
論理回路ＡＮＤ５４は、クロックｃｌｋと、アドレスレジスタ２選択信号０とがいずれも「Ｈ」レベルのときに、「Ｈ」レベルの信号をコードレジスタ３２の制御端子に出力する。
【０２５９】
アドレスレジスタ１５６は、制御端子への入力が「Ｈ」レベルのときに、データバスを通じて送られてきた４ビットのアドレスをラッチして保持する。
【０２６０】
アドレス比較器５７は、プログラムカウンタ７４から出力される２０ビットのアドレスのうちの上位４ビット（アドレス［１９：１６］）と、アドレスレジスタ１５６に保持されている４ビットのアドレスとが一致するときに、「Ｈ」レベルの一致信号を出力する。
【０２６１】
論理回路ＡＮＤ２は、アドレス一致信号０が「Ｈ」レベルで、アドレス比較器１５７から出力される一致信号が「Ｈ」レベルのときに、アドレス完全一致信号０を「Ｈ」レベルに設定する。
【０２６２】
論理回路ＡＮＤ５６は、クロックｃｌｋと、挿入エンドレジスタ選択信号０とがいずれも「Ｈ」レベルのときに、「Ｈ」レベルの信号を挿入エンドレジスタ５９の制御端子に出力する。
【０２６３】
挿入エンドレジスタ５９は、制御端子への入力が「Ｈ」レベルのときに、データバスを通じて送られてきた１ビットのデータ（挿入エンド）をラッチして保持する。
【０２６４】
論理回路ＡＮＤ５５は、アドレス完全一致信号０と、挿入エンドレジスタ５９の出力とを受ける。論理回路ＡＮＤ５５は、アドレス完全一致信号０が「Ｈ」レベルのときに、挿入エンドレジスタ５９に保持された１ビットのデータ（挿入エンド）を挿入エンド信号０として出力する。
【０２６５】
論理回路ＡＮＤ４は、クロックｃｌｋと、コードレジスタ選択信号０とがいずれも「Ｈ」レベルのときに、「Ｈ」レベルの信号をコードレジスタ３２の制御端子に出力する。
【０２６６】
コードレジスタ３２は、制御端子への入力が「Ｈ」レベルのときに、データバスを通じて送られてきた１６ビットのデータ（つまり、挿入コード）をラッチして保持する。
【０２６７】
論理回路ＡＮＤ３は、アドレス完全一致信号０と、コードレジスタ３２の出力とを受ける。論理回路ＡＮＤ３は、アドレス完全一致信号０が「Ｈ」レベルのときに、コードレジスタ３２に保持された１６ビットのデータ（つまり、挿入コード）をコードレジスタ出力信号０として出力する。論理回路ＡＮＤ３は、アドレス完全一致信号０が「Ｌ」レベルのときに、１６ビットの「０ｘ００００」をコードレジスタ出力信号０として出力する。
【０２６８】
（第７の実施形態の動作例）
図３６（ａ）は、コード挿入用レジスタセット７８−ｉ（以下、コード挿入用レジスタセット＃ｉ）のアドレスレジスタ３１に保持されている値の例を示す図である。この例では、コード挿入用レジスタセット＃０のアドレスレジスタ３１に「０ｘ１０１０６」の下位１６ビットが保持され、アドレスレジスタ１５６に「０ｘ１０１０６」の上位４ビットが保持されている。また、コード挿入用レジスタセット＃０のコードレジスタ３２に挿入コード「Ｃｏｄｅ  Ｒｅｇ．０」が保持されている。また、コード挿入用レジスタセット＃０の挿入エンドレジスタ５９に挿入エンド「０ｂ０」が保持されている。コード挿入用レジスタセット＃１のアドレスレジスタ３１に「０ｘ２０１０６」の下位１６ビットが保持され、アドレスレジスタ１５６に「０ｘ２０１０６」の上位４ビットが保持されている。また、コード挿入用レジスタセット＃０１のコードレジスタ３２に挿入コード「Ｃｏｄｅ  Ｒｅｇ．１」が保持されている。また、コード挿入用レジスタセット＃１の挿入エンドレジスタ５９に挿入エンド「０ｂ１」が保持されている。また、フラッシュ制御コード用ＲＯＭ１３のアドレス「０ｘ・・・・」には、オリジナルコード「Ｒ・・・・」が保持されているものとする。
【０２６９】
図３６（ｂ）は、図３６（ａ）の条件下でのタイミング図である。
第０サイクルでは、プログラムカウンタ７４から出力される２０ビットのアドレス（ＰＣ値［１９：０］）は、「０ｘ００１０２」である。アドレス「０ｘ００１０２」の上位１５ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ３１に保持されているアドレス「０ｘ１０１０６」の下位１６ビットと相違し、かつコード挿入用レジスタセット＃１のアドレスレジスタ３１に保持されているアドレス「０ｘ２０１０６」の下位１６ビットと相違する。その結果、アドレス一致信号、およびアドレス完全一致信号が「Ｌ」レベルとなり、コードレジスタ出力信号が「０ｘ００００」となり、挿入エンド信号が「０ｂ０」となる。フラッシュ制御コード用ＲＯＭ１３から「０ｘ００１０２」のアドレスのオリジナルコードである「Ｒ００１０２」が出力される。コード選択回路１４は、アドレス完全一致信号が「Ｌ」レベルであるので、オリジナルコード「Ｒ００１０２」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力されたオリジナルコード「Ｒ００１００」を実行する。
【０２７０】
第１サイクルでは、前サイクルのアドレス一致信号が「Ｌ」レベルであり、挿入エンド信号が「０ｂ０」であるため、プログラムカウンタ７４のセレクタ７７が「０ｘ０２」を出力する。プログラムカウンタ７４の出力アドレスは、「０ｘ０２」だけ加算された「０ｘ００１０４」となる。アドレス「０ｘ００１０４」の下位１６ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ３１に保持されているアドレス「０ｘ１０１０６」の下位１６ビットと相違し、かつコード挿入用レジスタセット＃１のアドレスレジスタ３１に保持されているアドレス「０ｘ２０１０６」の下位１６ビットと相違する。その結果、アドレス一致信号、およびアドレス完全一致信号が「Ｌ」レベルとなり、コードレジスタ出力信号が「０ｘ００００」となり、挿入エンド信号が「０ｂ０」となる。フラッシュ制御コード用ＲＯＭ１３から「０ｘ００１０４」のアドレスのオリジナルコードである「Ｒ００１０４」が出力される。コード選択回路１４は、アドレス完全一致信号が「Ｌ」レベルであるので、オリジナルコード「Ｒ００１０４」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力されたオリジナルコード「Ｒ００１０２」を実行する。
【０２７１】
第２サイクルでは、前サイクルのアドレス一致信号が「Ｌ」レベルであり、挿入エンド信号が「０ｂ０」であるため、プログラムカウンタ７４のセレクタ７７が「０ｘ０２」を出力する。その結果、プログラムカウンタ７４の出力アドレスは、「０ｘ０２」だけ加算された「０ｘ００１０６」となる。アドレス「０ｘ００１０６」の下位１６ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ３１に保持されているアドレス「０ｘ１０１０６」の下位１６ビットと一致し、かつコード挿入用レジスタセット＃１のアドレスレジスタ３１に保持されているアドレス「０ｘ２０１０６」の下位１６ビットと一致する。その結果、アドレス一致信号が「Ｈ」レベルとなる（アドレス一致信号０およびアドレス一致信号１が「Ｈ」レベルとなるため）。また、アドレス「０ｘ００１０６」の上位４ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ１５６に保持されているアドレス「０ｘ１０１０６」の上位４ビットと相違し、かつコード挿入用レジスタセット＃１のアドレスレジスタ１５６に保持されているアドレス「０ｘ２０１０６」の上位４ビットと相違する。その結果、アドレス完全一致信号が「Ｌ」レベルのままである（アドレス完全一致信号０およびアドレス完全一致信号１が「Ｌ」レベルのままのため）。アドレス完全一致信号が「Ｌ」レベルのため、コードレジスタ出力信号が「０ｘ００００」となり、挿入エンド信号が「０ｂ０」となる。フラッシュ制御コード用ＲＯＭ１３から「０ｘ００１０６」のアドレスのオリジナルコードである「Ｒ００１０６」が出力される。コード選択回路１４は、アドレス完全一致信号が「Ｌ」レベルであるので、オリジナルコード「Ｒ００１０６」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力されたオリジナルコード「Ｒ００１０４」を実行する。
【０２７２】
第３サイクルでは、前サイクルのアドレス一致信号が「Ｈ」レベルであり、挿入エンド信号が「０ｂ０」であるため、プログラムカウンタ７４のセレクタ２４が「０ｘ１００００」を出力する。そのため、プログラムカウンタ７４の出力アドレスは、「０ｘ１００００」だけ加算された「０ｘ１０１０６」となる。また、アドレス「０ｘ１０１０６」の下位１６ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ３１に保持されているアドレス「０ｘ１０１０６」の下位１６ビットと一致し、かつコード挿入用レジスタセット＃１のアドレスレジスタ３１に保持されているアドレス「０ｘ２０１０６」の下位１６ビットと一致するため、アドレス一致信号が「Ｈ」レベルとなる（アドレス一致信号０およびアドレス一致信号１が「Ｈ」レベルとなるため）。また、アドレス「０ｘ１０１０６」の上位４ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ１５６に保持されているアドレス「０ｘ１０１０６」の上位４ビットと一致する。その結果、アドレス完全一致信号は「Ｈ」レベルとなる（アドレス完全一致信号０が「Ｈ」レベルとなるため）。アドレス完全一致信号０が「Ｈ」レベルとなるので、コードレジスタ出力信号０は、コード挿入用レジスタセット＃０のコードレジスタ３２に保持された挿入コード「Ｃｏｄｅ  Ｒｅｇ．０」となる。これにより、コードレジスタ出力信号は、挿入コード「Ｃｏｄｅ  Ｒｅｇ．０」となる。アドレス完全一致信号０が「Ｈ」レベルとなるので、挿入エンド信号０は、コード挿入用レジスタセット＃０の挿入エンドレジスタ５９に保持された挿入エンド「０ｂ０」となる。これにより、挿入エンド信号は、「０ｂ０」となる。コード選択回路１４は、アドレス完全一致信号が「Ｈ」レベルであるので、挿入コード「Ｃｏｄｅ  Ｒｅｇ．０」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力されたオリジナルコード「Ｒ００１０６」を実行する。
【０２７３】
第４サイクルでは、前サイクルのアドレス一致信号が「Ｈ」レベルであり、挿入エンド信号が「０ｂ０」であるため、プログラムカウンタ７４のセレクタ７７が「０ｘ１００００」を出力する。そのため、プログラムカウンタ７４の出力アドレスは、「０ｘ１００００」だけ加算された「０ｘ２０１０６」となる。アドレス「０ｘ２０１０６」の下位１６ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ３１に保持されているアドレス「０ｘ１０１０６」の下位１６ビットと一致し、かつコード挿入用レジスタセット＃１のアドレスレジスタ３１に保持されているアドレス「０ｘ２０１０６」の下位１６ビットと一致する。その結果、アドレス一致信号が「Ｈ」レベルとなる（アドレス一致信号０およびアドレス一致信号１が「Ｈ」レベルとなるため）。また、アドレス「０ｘ２０１０６」の上位４ビットは、コード挿入用レジスタセット＃１のアドレスレジスタ１５６に保持されているアドレス「０ｘ２０１０６」の上位４ビットと一致する。その結果、アドレス完全一致信号は「Ｈ」レベルとなる（アドレス完全一致信号１が「Ｈ」レベルとなるため）。アドレス完全一致信号１が「Ｈ」レベルとなるので、コードレジスタ出力信号１は、コード挿入用レジスタセット＃１のコードレジスタ３２に保持された挿入コード「Ｃｏｄｅ  Ｒｅｇ．１」となる。これにより、コードレジスタ出力信号は、挿入コード「Ｃｏｄｅ  Ｒｅｇ．１」となる。アドレス完全一致信号１が「Ｈ」レベルとなるので、挿入エンド信号１は、コード挿入用レジスタセット＃１の挿入エンドレジスタ５９に保持された挿入エンド「０ｂ１」となる。これにより、挿入エンド信号は、「０ｂ１」となる。コード選択回路１４は、アドレス完全一致信号が「Ｈ」レベルであるので、挿入コード「Ｃｏｄｅ  Ｒｅｇ．１」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力された挿入コード「Ｃｏｄｅ  Ｒｅｇ．０」を実行する。
【０２７４】
第５サイクルでは、前サイクルのアドレス一致信号が「Ｈ」レベルであり、挿入エンド信号が「０ｂ１」であるため、プログラムカウンタ７４のセレクタ２４が「０ｘ０２」を出力する。また、挿入エンド信号が「０ｂ１」なので、論理回路ＡＮＤ７４によって、加算器２５の出力の上位４ビット（１７ビット目〜２０ビット目）が「０」となる。その結果、プログラムカウンタ７４の出力アドレスは、「０ｘ００１０８」となる。アドレス「０ｘ００１０８」の下位１６ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ３１に保持されているアドレス「０ｘ１０１０６」の下位１６ビットと相違し、かつコード挿入用レジスタセット＃１のアドレスレジスタ３１に保持されているアドレス「０ｘ２０１０６」の下位１６ビットと相違する。その結果、アドレス一致信号が「Ｌ」レベルとなる（アドレス一致信号０およびアドレス一致信号１が「Ｌ」レベルとなるため）。また、アドレス「０ｘ００１０８」の上位４ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ１５６に保持されているアドレス「０ｘ１０１０６」の上位４ビットと相違し、コード挿入用レジスタセット＃１のアドレスレジスタ１５６に保持されているアドレス「０ｘ２０１０６」の上位４ビットと相違する。その結果、アドレス完全一致信号は「Ｌ」レベルとなる（アドレス完全一致信号０およびアドレス完全一致信号１が「Ｌ」レベルとなるため）。アドレス完全一致信号が「Ｌ」レベルのため、コードレジスタ出力信号が「０ｘ００００」となり、挿入エンド信号が「０ｂ０」となる。フラッシュ制御コード用ＲＯＭ１３から「０ｘ００１０８」のアドレスのオリジナルコードである「Ｒ００１０８」が出力される。コード選択回路１４は、アドレス完全一致信号が「Ｌ」レベルであるので、オリジナルコード「Ｒ００１０８」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力された挿入コード「Ｃｏｄｅ  Ｒｅｇ．１」を実行する。
【０２７５】
第６サイクルでは、前サイクルのアドレス一致信号が「Ｌ」レベルであり、挿入エンド信号が「０ｂ０」であるため、プログラムカウンタ７４のセレクタ７７が「０ｘ０２」を出力する。これにより、プログラムカウンタ７４の出力アドレスは、「０ｘ０２」だけ加算された「０ｘ００１０Ａ」となる。アドレス「０ｘ００１０Ａ」の下位１６ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ３１に保持されているアドレス「０ｘ１０１０６」の下位１６ビットと相違し、かつコード挿入用レジスタセット＃１のアドレスレジスタ３１に保持されているアドレス「０ｘ２０１０６」の下位１６ビットと相違する。その結果、ｍアドレス一致信号、およびアドレス完全一致信号が「Ｌ」レベルとなり、コードレジスタ出力信号が「０ｘ００００」となり、挿入エンド信号が「０ｂ０」となる。フラッシュ制御コード用ＲＯＭ１３から「０ｘ００１０Ａ」のアドレスのオリジナルコードである「Ｒ００１０Ａ」が出力される。コード選択回路１４は、アドレス完全一致信号が「Ｌ」レベルであるので、オリジナルコード「Ｒ００１０Ａ」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力されたオリジナルコード「Ｒ００１０８」を実行する。
【０２７６】
第７サイクル以降は、第６サイクルと同様に動作する。
以上のように、本実施の形態によれば、プログラムカウンタのアドレスの最上位から所定個数のビット以外のビットでオリジナルコードのアドレスを指定し、最上位から所定個数のビットを用いてコードの挿入を制御するので、２つのオリジナルコードの間に１個以上のコードの挿入が可能で、かつマルチサイクル命令の実行が可能となる。
【０２７７】
［第８の実施形態］
本実施の形態では、複数のオリジナルコードのアドレスは、最下位から２ビット目以上、かつ最上位ビットを除くビットが有効である。
【０２７８】
図３７は、第８の実施形態のフラッシュメモリ制御部７４２の構成を表わす図である。
図３７のフラッシュメモリ制御部７４２が、図７の第１の実施形態のフラッシュメモリ制御部２と相違する点は、挿入コードレジスタセットブロック７４３とプログラムカウンタ９１である。
【０２７９】
挿入コードレジスタセットブロック７４３は、保持している挿入コードのアドレスの最上位ビットを除くビットとプログラムカウンタ９１のアドレスの最上位ビットを除くビットとが一致し、かつプログラムカウンタ９１のアドレスの最上位ビットが「０」のときに、第１の信号を出力する（アドレス完全一致信号を「Ｈ」レベルに設定する）とともに、保持している挿入コードを出力する。
【０２８０】
プログラムカウンタ９１は、第１の信号を受けたときに、最上位ビットに「１」を加算し、第１の信号を受けないときに、最下位から２ビット目に「１」を加算し、かつ最上位ビットを「０」にする。
【０２８１】
図３８は、プログラムカウンタ９１の構成を表わす図である。
図３８のプログラムカウンタ９１が、図３０の第６の実施形態のプログラムカウンタ７２と相違する点は、セレクタ９２と論理回路ＡＮＤ９２である。
【０２８２】
セレクタ９２は、挿入コードレジスタセットブロック７４３からアドレス完全一致信号を受ける。セレクタ９２は、アドレス完全一致信号が「Ｈ」レベルのときには、「０ｘ１００００」を出力する。セレクタ９２は、アドレス完全一致信号が「Ｌ」のときには、「０ｘ０２」を出力する。
【０２８３】
論理回路ＡＮＤ９２は、加算器２５から出力される１７ビットのうちの最上位ビットと、アドレス完全一致信号の論理積を出力する。すなわち、論理回路ＡＮＤ９２は、アドレス完全一致信号が「Ｈ」レベルのときには、加算器２５から出力される１７ビットのうちの最上位ビットを出力する。論理回路ＡＮＤ９２は、アドレス完全一致信号が「Ｌ」レベルのときには、１ビットの「０ｂ０」を出力する。
【０２８４】
図３９は、挿入コードレジスタセットブロック７４３の構成を表わす図である。
図３９に示すように、挿入コードレジスタセットブロック７４３は、挿入するコードおよび挿入するアドレスを保持するコード挿入用レジスタセット８８−ｉ（ｉ＝０〜ｎ）と、論理回路ＯＲ８８，ＯＲ８９とを備える。
【０２８５】
コード挿入用レジスタセット８８−ｉは、プログラムカウンタ９１から出力されるアドレスと、データバス内を伝送するデータとを受け、さらにコード選択回路１４からコードレジスタ選択信号ｉおよびアドレスレジスタ選択信号ｉとを受けて、アドレス完全一致信号ｉ、およびコードレジスタ出力信号ｉを出力する。
【０２８６】
論理回路ＯＲ８８は、（ｎ＋１）個のコードレジスタ出力信号０〜ｎの論理和をコードレジスタ出力信号として出力する。すなわち、（ｎ＋１）個のコードレジスタ出力信号０〜ｎの少なくとも１つが「Ｈ」レベルのビットを有するとき（すなわち、挿入コードが出力されたとき）に、コードレジスタ出力信号が挿入コードとなる。すなわち、（ｎ＋１）個のコードレジスタ出力信号０〜ｎの全ビットのすべてが「Ｌ」レベルのとき（すなわち、挿入コードが出力されないとき）に、コードレジスタ出力信号の全ビットが「Ｌ」となる。
【０２８７】
論理回路ＯＲ８９は、（ｎ＋１）個のアドレス完全一致信号０〜ｎの論理和をアドレス完全一致信号として出力する。すなわち、（ｎ＋１）個のアドレス完全一致信号０〜ｎの少なくとも１つが「Ｈ」レベルのときに、アドレス完全一致信号が「Ｈ」レベルとなる。
【０２８８】
図４０は、挿入コードレジスタセットブロック７４３に含まれるコード挿入用レジスタセット８８−０の構成を表わす図である。コード挿入用レジスタセット８８−１〜８８−ｎの構成も、図４０のコード挿入用レジスタセット８８−０の構成と同様である。
【０２８９】
図４０のコード挿入用レジスタセット８８−０が、図３１の第６の実施形態のコード挿入用レジスタセット７１−０と相違する点は、アドレス比較器３０からアドレス一致信号が外部に出力されない点と、論理回路ＡＮＤ８８である。
【０２９０】
論理回路ＡＮＤ８８は、アドレス比較器３０から出力される信号が「Ｈ」レベルで、プログラムカウンタ９１から出力される１７ビットのアドレスのうちの最上位ビット（アドレス［１６］）が「０」のときに、アドレス完全一致信号０を「Ｈ」レベルに設定する。
【０２９１】
（第８の実施形態の動作例）
図４１（ａ）は、コード挿入用レジスタセット８８−ｉ（以下、コード挿入用レジスタセット＃ｉ）のアドレスレジスタ３１に保持されている値の例を示す図である。この例では、コード挿入用レジスタセット＃０のアドレスレジスタ３１に「０ｘ００１０６」の下位１６ビットが保持されている。また、コード挿入用レジスタセット＃０のコードレジスタ３２に挿入コード「Ｃｏｄｅ  Ｒｅｇ．０」が保持されている。また、フラッシュ制御コード用ＲＯＭ１３のアドレス「０ｘ・・・・」には、オリジナルコード「Ｒ・・・・」が保持されているものとする。
【０２９２】
図４１（ｂ）は、図４１（ａ）の条件下でのタイミング図である。
第０サイクルでは、プログラムカウンタ９１から出力される１７ビットのアドレス（ＰＣ値［１６：０］は、「０ｘ００１０２」である。また、アドレス「０ｘ００１０２」の下位１６ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ３１に保持されているアドレス「０ｘ００１０６」の下位１６ビットと相違する。その結果、アドレス完全一致信号が「Ｌ」レベルとなり、コードレジスタ出力信号が「０ｘ０００００」となる。フラッシュ制御コード用ＲＯＭ１３から「０ｘ００１０２」のアドレスのオリジナルコードである「Ｒ００１０２」が出力される。コード選択回路１４は、アドレス完全一致信号が「Ｌ」レベルであるので、オリジナルコード「Ｒ００１０２」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力されたオリジナルコード「Ｒ００１００」を実行する。
【０２９３】
第１サイクルでは、前サイクルのアドレス完全一致信号が「Ｌ」レベルであるため、プログラムカウンタ９１のセレクタ９２が「０ｘ０２」を出力する。その結果、プログラムカウンタ９１の出力アドレスは、「０ｘ０２」だけ加算された「０ｘ００１０４」となる。アドレス「０ｘ００１０４」の下位１６ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ３１に保持されているアドレス「０ｘ００１０６」の下位１６ビットと相違する。その結果、アドレス完全一致信号が「Ｌ」レベルとなり、コードレジスタ出力信号が「０ｘ０００００」となる。フラッシュ制御コード用ＲＯＭ１３から「０ｘ００１０４」のアドレスのオリジナルコードである「Ｒ００１０４」が出力される。コード選択回路１４は、アドレス完全一致信号が「Ｌ」レベルであるので、オリジナルコード「Ｒ００１０４」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力されたオリジナルコード「Ｒ００１０２」を実行する。
【０２９４】
第２サイクルでは、前サイクルのアドレス完全一致信号が「Ｌ」レベルであるため、プログラムカウンタ９１のセレクタ９２が「０ｘ０２」を出力する。これにより、プログラムカウンタ９１の出力アドレスは、「０ｘ０２」だけ加算された「０ｘ００１０６」となる。アドレス「０ｘ００１０６」の下位１６ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ３１に保持されているアドレス「０ｘ０１０６」の下位１６ビットと一致する。また、アドレス「０ｘ００１０６」の最上位ビット（１７ビット目：アドレス［１６］）は「０」である。その結果、アドレス完全一致信号が「Ｈ」レベルとなる（アドレス完全一致信号０が「Ｈ」レベルとなるため）。さらに、コードレジスタ出力信号は、コードレジスタ３２に保持された挿入コード「Ｃｏｄｅ  Ｒｅｇ．０」となる（コードレジスタ出力信号０が「Ｃｏｄｅ  Ｒｅｇ．０」となるため）。コード選択回路１４は、アドレス完全一致信号が「Ｈ」レベルであるので、挿入コード「Ｃｏｄｅ  Ｒｅｇ．０」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力されたオリジナルコード「Ｒ００１０６」を実行する。
第３サイクルでは、前サイクルのアドレス完全一致信号が「Ｈ」レベルのため、プログラムカウンタ９１のセレクタ９２が「０ｘ１００００」を出力する。これにより、プログラムカウンタ９１の出力アドレスは、「０ｘ１００００」だけ加算された「０ｘ１０１０６」となる。アドレス「０ｘ１０１０６」の下位１６ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ３１に保持されているアドレス「０ｘ００１０６」の下位１６ビットと一致するが、アドレス「０ｘ１０１０６」の最上位ビット（１７ビット目：アドレス［１６］）は「１」である。その結果、アドレス完全一致信号が「Ｌ」レベルとなる（アドレス完全一致信号０が「Ｌ」レベルとなるため）。さらに、コードレジスタ出力信号が「０ｘ０００００」となる。フラッシュ制御コード用ＲＯＭ１３からプログラムカウンタ９１の出力アドレス「０ｘ１０１０６」の最上位ビット（１７ビット目）を「０」にした「０ｘ００１０６」のアドレスのオリジナルコードである「Ｒ００１０６」が出力される。コード選択回路１４は、アドレス完全一致信号が「Ｌ」レベルであるので、オリジナルコード「Ｒ００１０６」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力された挿入コード「Ｃｏｄｅ  Ｒｅｇ．０」を実行する。
【０２９５】
第４サイクルでは、前サイクルのアドレス完全一致信号が「Ｌ」レベルのため、プログラムカウンタ９１のセレクタ９２が「０ｘ００００２」を出力する。さらに、アドレス完全一致信号が「Ｌ」レベルのため、加算器２５の出力アドレスの最上位ビット（１７ビット目）が「０」となる。その結果、プログラムカウンタ９１の出力アドレスは、「０ｘ００１０８」となる。アドレス「０ｘ００１０８」の下位１６ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ３１に保持されているアドレス「０ｘ００１０６」の下位１６ビットと相違する。その結果、アドレス完全一致信号が「Ｌ」レベルとなり、コードレジスタ出力信号が「０ｘ０００００」となる。フラッシュ制御コード用ＲＯＭ１３から「０ｘ００１０８」のアドレスのオリジナルコードである「Ｒ００１０８」が出力される。コード選択回路１４は、アドレス完全一致信号が「Ｌ」レベルであるので、オリジナルコード「Ｒ００１０８」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力されたオリジナルコード「Ｒ００１０６」を実行する。
【０２９６】
第５サイクル以降は、第４サイクルと同様に動作する。
以上のように、本実施の形態によれば、第６の実施形態と同様に、プログラムカウンタのアドレスの最上位ビット以外のビットでオリジナルコードのアドレスを指定し、最上位ビットを用いてコードの挿入を制御するので、２つのオリジナルコードの間に１個以上のコードの挿入が可能で、かつマルチサイクル命令の実行が可能となる。また、本実施の形態によれば、プログラムカウンタからのアドレスがアドレスレジスタの値と一致した場合、挿入コードの実行をオリジナルコードの後に実行していた第６の実施の形態に対し、挿入コードの実行をオリジナルコードの前に実行する。
【０２９７】
なお、本実施の形態では、複数のオリジナルコードのアドレスは、最下位から２ビット目以上かつ最上位ビットを除くビットが有効としたが、これに限定されるものではなく、複数のオリジナルコードのアドレスは、最下位からｎビット目以上かつ最上位ビットを除くビットが有効としてもよい。ただし、ｎは１以上の自然数である。この場合には、プログラムカウンタ９１は、第１の信号を受けないとき（アドレス完全一致信号が「Ｌ」レベルのとき）に、最下位からｎビット目に「１」を加算し、かつ最上位ビットを「０」にすることができる。
【０２９８】
［第９の実施形態］
本実施の形態では、複数のオリジナルコードのアドレスは、最下位からｍビット目以上のビットが有効であるとする。
【０２９９】
図４２は、第９の実施形態のフラッシュメモリ制御部３８８の構成を表わす図である。
図４２のフラッシュメモリ制御部３８８が、図１６の第２の実施形態のフラッシュメモリ制御部１０２と相違する点は、挿入コードレジスタセットブロック３８９と、プロラムカウンタ９４である。
【０３００】
挿入コードレジスタセットブロック３８９は、最大で２k-１個の挿入コードと、挿入コードのアドレスを保持する。挿入コードレジスタセットブロック３８９は、保持している挿入コードのアドレスの最上位からｋ個のビットを除くビットとプログラムカウンタ９４のアドレスの最上位からｋ個のビットを除くビットとが一致し、かつ保持している挿入コードのアドレスの最上位からｋ個のビットとプログラムカウンタ９４のアドレスの最上位からｋ個のビットとが一致したときに、第１の信号を出力する（アドレス完全一致信号を「Ｈ」レベルに設定する）とともに、プログラムカウンタ９４のアドレスに対応する保持している挿入コードを出力する。
【０３０１】
プログラムカウンタ９４は、第１の信号を受けたときに、最上位からｋ番目のビットに「１」を加算し、第１の信号を受けなかったときに、最下位からｍ番目のビットに「１」を加算し、かつ最上位からｋ個のビットを「０」にする。
【０３０２】
以下、本実施の形態では、ｍ＝２、ｋ＝４として説明する。
図４３は、プログラムカウンタ９４の構成を表わす図である。
【０３０３】
図４３のプログラムカウンタ９４が、図３４の第７の実施形態のプログラムカウンタ７４と相違する点は、セレクタ９２と論理回路ＡＮＤ９４である。
【０３０４】
セレクタ９２は、挿入コードレジスタセットブロック３８９からアドレス完全一致信号を受ける。セレクタ９２は、アドレス完全一致信号が「Ｈ」レベルのときには、「０ｘ１００００」を出力する。セレクタ９２は、アドレス完全一致信号が「Ｌ」のときには、「０ｘ０２」を出力する。
【０３０５】
論理回路ＡＮＤ９４は、加算器２５から出力される２０ビットのうちの上位４ビット（１７ビット目〜２０ビット目）と、アドレス完全一致信号の論理積を出力する。すなわち、論理回路ＡＮＤ９４は、アドレス完全一致信号が「Ｈ」レベルのときには、加算器２５から出力される２０ビットのうちの上位４ビットを出力する。論理回路ＡＮＤ９４は、アドレス完全一致信号が「Ｌ」レベルのときには、４ビットの「０ｂ０」を出力する。
【０３０６】
図４４は、挿入コードレジスタセットブロック３８９の構成を表わす図である。
図４４に示すように、挿入コードレジスタセットブロック３８９は、挿入するコードおよび挿入するアドレスを保持するコード挿入用レジスタセット８６−ｉ（ｉ＝０〜ｎ）と、論理回路ＯＲ８８，ＯＲ８９とを備える。
【０３０７】
コード挿入用レジスタセット８６−ｉは、プログラムカウンタ９４から出力されるアドレスと、データバス内を伝送するデータとを受け、さらにコード選択回路１４からコードレジスタ選択信号ｉ、アドレスレジスタ選択信号ｉおよびアドレスレジスタ２選択信号ｉとを受けて、アドレス完全一致信号ｉ、およびコードレジスタ出力信号ｉを出力する。
【０３０８】
論理回路ＯＲ８８は、（ｎ＋１）個のコードレジスタ出力信号０〜ｎの論理和をコードレジスタ出力信号として出力する。すなわち、（ｎ＋１）個のコードレジスタ出力信号０〜ｎの少なくとも１つが「Ｈ」レベルのビットを有するとき（すなわち、挿入コードが出力されたとき）に、コードレジスタ出力信号が挿入コードとなる。すなわち、（ｎ＋１）個のコードレジスタ出力信号０〜ｎの全ビットのすべてが「Ｌ」レベルのとき（すなわち、挿入コードが出力されないとき）に、コードレジスタ出力信号の全ビットが「Ｌ」となる。
【０３０９】
論理回路ＯＲ８９は、（ｎ＋１）個のアドレス完全一致信号０〜ｎの論理和をアドレス完全一致信号として出力する。すなわち、（ｎ＋１）個のアドレス完全一致信号０〜ｎの少なくとも１つが「Ｈ」レベルのときに、アドレス完全一致信号が「Ｈ」レベルとなる。
【０３１０】
図４５は、挿入コードレジスタセットブロック３８９に含まれるコード挿入用レジスタセット８６−０の構成を表わす図である。コード挿入用レジスタセット８６−１〜８６−ｎの構成も、図４５のコード挿入用レジスタセット８６−０の構成と同様である。
【０３１１】
図４５のコード挿入用レジスタセット６４−０が、図３５の第７の実施形態のコード挿入用レジスタセット７８−０と相違する点は、アドレス比較器３０から出力されるアドレス一致信号が外部に出力されない点と、論理回路ＡＮＤ５６および挿入エンドレジスタ５９を含まない点である。
【０３１２】
（第９の実施形態の動作例）
図４６（ａ）は、コード挿入用レジスタセット８６−ｉ（以下、コード挿入用レジスタセット＃ｉ）のアドレスレジスタ３１に保持されている値の例を示す図である。この例では、コード挿入用レジスタセット＃０のアドレスレジスタ３１に「０ｘ００１０６」の下位１６ビットが保持され、アドレスレジスタ１５６に「０ｘ００１０６」の上位４ビット（１７ビット目〜２０ビット目）が保持されている。また、コード挿入用レジスタセット＃０のコードレジスタ３２に挿入コード「Ｃｏｄｅ  Ｒｅｇ．０」が保持されている。コード挿入用レジスタセット＃１のアドレスレジスタ３１に「０ｘ１０１０６」の下位１６ビットが保持され、アドレスレジスタ１５６に「０ｘ１０１０６」の上位４ビット（１７ビット目〜２０ビット目）が保持されている。また、コード挿入用レジスタセット＃１のコードレジスタ３２に挿入コード「Ｃｏｄｅ  Ｒｅｇ．１」が保持されている。また、フラッシュ制御コード用ＲＯＭ１３のアドレス「０ｘ・・・・」には、オリジナルコード「Ｒ・・・・」が保持されているものとする。
【０３１３】
図４６（ｂ）は、図４６（ａ）の条件下でのタイミング図である。
第０サイクルでは、プログラムカウンタ９４から出力される２０ビットのアドレス（ＰＣ値［１９：０］）は、「０ｘ００１０２」である。アドレス「０ｘ００１０２」の下位１６ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ３１に保持されているアドレス「０ｘ００１０６」の下位１６ビットと相違する。その結果、アドレス完全一致信号が「Ｌ」レベルとなり、コードレジスタ出力信号が「０ｘ０００００」となる。フラッシュ制御コード用ＲＯＭ１３から「０ｘ００１０２」のアドレスのオリジナルコードである「Ｒ００１０２」が出力される。コード選択回路１４は、アドレス完全一致信号が「Ｌ」レベルであるので、オリジナルコード「Ｒ００１０２」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力されたオリジナルコード「Ｒ００１００」を実行する。
【０３１４】
第１サイクルでは、前サイクルのアドレス完全一致信号が「Ｌ」レベルであるため、プログラムカウンタ９４のセレクタ９２が「０ｘ０２」を出力する。これにより、プログラムカウンタ９４の出力アドレスは、「０ｘ０２」だけ加算された「０ｘ００１０４」となる。アドレス「０ｘ００１０４」の下位１６ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ３１に保持されているアドレス「０ｘ００１０６」の下位１６ビットと相違する。その結果、アドレス完全一致信号が「Ｌ」レベルとなり、コードレジスタ出力信号が「０ｘ０００００」となる。フラッシュ制御コード用ＲＯＭ１３から「０ｘ００１０４」のアドレスのオリジナルコードである「Ｒ００１０４」が出力される。コード選択回路１４は、アドレス完全一致信号が「Ｌ」レベルであるので、オリジナルコード「Ｒ００１０４」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力されたオリジナルコード「Ｒ００１０２」を実行する。
【０３１５】
第２サイクルでは、前サイクルのアドレス完全一致信号が「Ｌ」レベルであるため、プログラムカウンタ９４のセレクタ９２が「０ｘ０２」を出力する。これにより、プログラムカウンタ９４の出力アドレスは、「０ｘ０２」だけ加算された「０ｘ００１０６」となる。アドレス「０ｘ００１０６」の下位１６ビットは、コード挿入用レジスタセット＃０のアドレスレジスタ３１に保持されているアドレス「０ｘ００１０６」の下位１６ビットと一致する。また、アドレス「０ｘ００１０６」の上位４ビット（１７ビット目〜２０ビット目」アドレス［１６］〜［１９］）は、コード挿入用レジスタセット＃０のアドレスレジスタ１５６に保持されているアドレス「０ｘ０１０６」の上位４ビットと一致する。その結果、アドレス完全一致信号が「Ｈ」レベルとなる（アドレス完全一致信号０が「Ｈ」レベルとなるため）。さらに、コードレジスタ出力信号は、コードレジスタ３２に保持された挿入コード「Ｃｏｄｅ  Ｒｅｇ．０」となる（コードレジスタ出力信号０が「Ｃｏｄｅ  Ｒｅｇ．０」となるため）。コード選択回路１４は、アドレス完全一致信号が「Ｈ」レベルであるので、挿入コード「Ｃｏｄｅ  Ｒｅｇ．０」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力されたオリジナルコード「Ｒ００１０４」を実行する。
【０３１６】
第３サイクルでは、前サイクルのアドレス完全一致信号が「Ｈ」レベルのため、プログラムカウンタ９４のセレクタ９２が「０ｘ１００００」を出力する。これにより、プログラムカウンタ９４の出力アドレスは、「０ｘ１００００」だけ加算された「０ｘ１０１０６」となる。アドレス「０ｘ１０１０６」の下位１６ビットは、コード挿入用レジスタセット＃１のアドレスレジスタ３１に保持されているアドレス「０ｘ１０１０６」の下位１６ビットと一致する。また、アドレス「０ｘ１０１０６」の上位４ビット（１７ビット目〜２０ビット目」アドレス［１６］〜［１９］）は、コード挿入用レジスタセット＃１のアドレスレジスタ１５６に保持されているアドレス「０ｘ１０１０６」の上位４ビットと一致する。その結果、アドレス完全一致信号が「Ｈ」レベルとなる（アドレス完全一致信号１が「Ｈ」レベルとなるため）。さらに、コードレジスタ出力信号は、コードレジスタ３２に保持された挿入コード「Ｃｏｄｅ  Ｒｅｇ．１」となる（コードレジスタ出力信号０が「Ｃｏｄｅ  Ｒｅｇ．１」となるため）。コード選択回路１４は、アドレス完全一致信号が「Ｈ」レベルであるので、挿入コード「Ｃｏｄｅ  Ｒｅｇ．１」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力された挿入コード「Ｃｏｄｅ  Ｒｅｇ．０」を実行する。
【０３１７】
第４サイクルでは、前サイクルのアドレス完全一致信号が「Ｈ」レベルのため、プログラムカウンタ９４のセレクタ９２が「０ｘ１００００」を出力する。これにより、プログラムカウンタ９４の出力アドレスは、「０ｘ１００００」だけ加算された「０ｘ２０１０６」となる。アドレス「０ｘ２０１０６」の下位１６ビットは、コード挿入用レジスタセット＃０および＃１のアドレスレジスタ３１に保持されているアドレス「０ｘ００１０６」，「０ｘ１０１０６」の下位１６ビットと一致する。しかし、アドレス「０ｘ２０１０６」の上位４ビット（１７ビット目〜２０ビット目」アドレス［１６］〜［１９］）は、コード挿入用レジスタセット＃０および＃１のアドレスレジスタ１５６に保持されているアドレス「０ｘ００１０６」、「０ｘ１０１０６」の上位４ビットと相違する。その結果、アドレス完全一致信号が「Ｌ」レベルとなる（アドレス完全一致信号０およびアドレス完全一致信号が「Ｌ」レベルとなるため）。さらに、コードレジスタ出力信号が「０ｘ０００００」となる。フラッシュ制御コード用ＲＯＭ１３からプログラムカウンタ９４の出力アドレス「０ｘ２０１０６」の上位４ビット（１７ビット目〜２０ビット目）を「０」にした「０ｘ００１０６」のアドレスのオリジナルコードである「Ｒ００１０６」が出力される。コード選択回路１４は、アドレス完全一致信号が「Ｌ」レベルであるので、オリジナルコード「Ｒ００１０６」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力された挿入コード「Ｃｏｄｅ  Ｒｅｇ．１」を実行する。
【０３１８】
第５サイクルでは、前サイクルのアドレス完全一致信号が「Ｌ」レベルのため、プログラムカウンタ９４のセレクタ９２が「０ｘ０２」を出力する。さらに、アドレス完全一致信号が「Ｌ」レベルのため、加算器２５の出力アドレスの上位４ビット（１７ビット目〜２０ビット目）が「０」となる。その結果、プログラムカウンタ９４の出力アドレスは、「０ｘ００１０８」となる。また、アドレス「０ｘ００１０８」の下位１６ビットは、アドレスレジスタ３１に保持されているアドレス「０ｘ００１０６」の下位１６ビットと相違するため、アドレス完全一致信号が「Ｌ」レベルとなり、コードレジスタ出力信号が「０ｘ０００００」となる。フラッシュ制御コード用ＲＯＭ１３から「０ｘ００１０８」のアドレスのオリジナルコードである「Ｒ００１０８」が出力される。コード選択回路１４は、アドレス完全一致信号が「Ｌ」レベルであるので、オリジナルコード「Ｒ００１０８」を命令実行部１５のフェッチ部３５に出力する。命令実行部１５の実行部３６は、１つ前のサイクルでフェッチ部３５に出力されたオリジナルコード「Ｒ００１０６」を実行する。
【０３１９】
第６サイクル以降は、第５サイクルと同様に動作する。
以上のように、本実施の形態によれば、第７の実施形態と同様に、プログラムカウンタのアドレスの最上位から所定個数のビット以外のビットでオリジナルコードのアドレスを指定し、最上位から所定個数のビットを用いてコードの挿入を制御するので、２つのオリジナルコードの間に１個以上のコードの挿入が可能で、かつマルチサイクル命令の実行が可能となる。また、本実施の形態によれば、プログラムカウンタからのアドレスがアドレスレジスタの値と一致した場合、挿入コードの実行をオリジナルコードの後に実行していた第７の実施の形態に対し、挿入コードの実行をオリジナルコードの前に実行する。
【０３２０】
（変形例）
本発明は、上記の実施形態に固定されるものではない。たとえば、コードレジスタ値を特定の値に固定することとしてもよい。これにより、挿入可能なコード種類は限定されるが、レジスタのサイズを縮小可能である。
【０３２１】
さらに、コードレジスタ値をＲＯＭに記憶させてもよいし、または論理回路の組み合わせた回路に記憶させることとしてもよい。特定コマンドのみ（たとえばエラーモニタ用コマンド）のみを挿入できるものとしてもよい。
【０３２２】
また、本実施の形態では、フラッシュメモリ制御部が、汎用のプロセッサにも同様の機能を持たせるようにすることも可能である。また、図６に示されるフラッシュメモリ３とフラッシュメモリ制御部２で一つの半導体基板（チップ）に形成された不揮発性半導体装置が構成されることもある。
【０３２３】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲はした説明ではなくて請求の範囲によって示され、請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【０３２４】
１  マイクロコンピュータ、２，１０２，１０３，３１２，３９５，４２３，６２３，７４２  フラッシュメモリ制御部、３  フラッシュメモリ、４  ＣＰＵ、５  ＲＡＭ、６  周辺装置、７  Ａ−Ｄ変換器、８  Ｄ−Ａ変換器、９  アナログ入力端子、１０  アナログ出力端子、１１  Ｉ／Ｏポート、１２，５１，６５，７２，７４，９１，９４  プログラムカウンタ、１３  フラッシュ制御コード用ＲＯＭ、１４  コード選択回路、１５  命令実行部、１６  インタフェースコントローラ、１７，５２，１６４，３９６，３９９，４２４，６２４，７４３  挿入コードレジスタセットブロック、１８  レジスタ選択信号生成回路、２１  内部データバス、２２，２３  内部アドレスバス、２４，２６，２７，３３，５３，６８，７３，７７，９２  セレクタ、２５  加算器、２８  ＰＣ用レジスタ、２９−０〜２９−ｎ，４０−０，５４−０〜５４−ｎ，６４−０，７１−０，７８−０，８６−０〜８６−ｎ，８８−０〜８８−ｎ  コード挿入用レジスタセット、３０，１５７  アドレス比較器、３１，５６，１５６  アドレスレジスタ、３２  コードレジスタ、３４  ステータスレジスタ、３５  フェッチ部、３６  実行部、５９  挿入エンドレジスタ、２７３  メインデータバス、ＯＲ１，ＯＲ２，ＯＲ３，ＯＲ５４，ＯＲ６８，ＯＲ８８，ＯＲ８９，ＡＮＤ１，ＡＮＤ２，ＡＮＤ３，ＡＮＤ４，ＡＮＤ５，ＡＮＤ６，ＡＮＤ５４，ＡＮＤ５５，ＡＮＤ５６，ＡＮＤ７１，ＡＮＤ７２，ＡＮＤ７４，ＡＮＤ８８，ＡＮＤ９２  論理回路、ＮＥＯＲ１  一致回路。
【図１】
0005933685.tif 000002
【図２】
0005933685.tif 000003
【図３】
0005933685.tif 000004
【図４】
0005933685.tif 000005
【図５】
0005933685.tif 000006
【図６】
0005933685.tif 000007
【図７】
0005933685.tif 000008
【図８】
0005933685.tif 000009
【図９】
0005933685.tif 000010
【図１０】
0005933685.tif 000011
【図１１】
0005933685.tif 000012
【図１２】
0005933685.tif 000013
【図１３】
0005933685.tif 000014
【図１４】
0005933685.tif 000015
【図１５】
0005933685.tif 000016
【図１６】
0005933685.tif 000017
【図１７】
0005933685.tif 000018
【図１８】
0005933685.tif 000019
【図１９】
0005933685.tif 000020
【図２０】
0005933685.tif 000021
【図２１】
0005933685.tif 000022
【図２２】
0005933685.tif 000023
【図２３】
0005933685.tif 000024
【図２４】
0005933685.tif 000025
【図２５】
0005933685.tif 000026
【図２６】
0005933685.tif 000027
【図２７】
0005933685.tif 000028
【図２８】
0005933685.tif 000029
【図２９】
0005933685.tif 000030
【図３０】
0005933685.tif 000031
【図３１】
0005933685.tif 000032
【図３２】
0005933685.tif 000033
【図３３】
0005933685.tif 000034
【図３４】
0005933685.tif 000035
【図３５】
0005933685.tif 000036
【図３６】
0005933685.tif 000037
【図３７】
0005933685.tif 000038
【図３８】
0005933685.tif 000039
【図３９】
0005933685.tif 000040
【図４０】
0005933685.tif 000041
【図４１】
0005933685.tif 000042
【図４２】
0005933685.tif 000043
【図４３】
0005933685.tif 000044
【図４４】
0005933685.tif 000045
【図４５】
0005933685.tif 000046
【図４６】
0005933685.tif 000047