【手続補正書】
【提出日】平成17年11月7日(2005.11.7)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【書類名】      明細書
【発明の名称】  記憶データ修正回路
【特許請求の範囲】
【請求項１】  ２N （Ｎは自然数）バイト幅の出力を持ち、アドレス信号が示す２N の倍数のアドレスから記憶された２N バイトのデータを読み出して出力する記憶手段について、出力データの修正を行う記憶データ修正回路であって、
２N バイト幅の修正データを保持するデータレジスタと、
修正アドレスを保持するアドレスレジスタと、
前記アドレス信号および前記修正アドレスを入力とし、前記修正アドレスが、前記アドレス信号が示すアドレスの，以降の２N 個および手前の２N 個のアドレスのうちのいずれかに該当するとき、隣接一致を検出する隣接一致回路と、
前記隣接一致回路が隣接一致を検出したとき、前記記憶手段の出力データおよび前記修正データのいずれかを、バイト単位で、前記アドレス信号および前記修正アドレスに応じて、選択出力する記憶データ選択部とを備え、
前記記憶データ選択部の出力を、修正済記憶データとして出力する
ことを特徴とする記憶データ修正回路。
【請求項２】  請求項１記載の記憶データ修正回路において、
前記記憶データ選択部は、
前記記憶手段の出力データおよび前記修正データを入力とし、バイト単位で、そのいずれかを、選択出力するバイト切替回路と、
前記アドレス信号の第Ｎビット、前記修正アドレスの下位（Ｎ＋１）ビット、および前記隣接一致回路の出力を入力とし、前記バイト切替回路の選択動作の制御を行うバイト切替制御回路とを備えたものである
ことを特徴とする記憶データ修正回路。
【請求項３】  請求項２記載の記憶データ修正回路において、
前記バイト切替制御回路は、
前記バイト切替回路における第Ｍ（Ｍは０≦Ｍ＜（２N ）の整数）バイトの出力として、
前記隣接一致回路によって隣接一致が検出され、かつ、前記アドレス信号の第Ｎビットの値と前記修正アドレスの第Ｎビットの値が等しくかつ前記修正アドレスの下位Ｎビットの値が（Ｍ＋１）未満、または、前記アドレス信号の第Ｎビットの値と前記修正アドレスの第Ｎビットの値が異なりかつ前記修正アドレスの下位Ｎビットの値が（Ｍ＋１）以上である場合は、前記修正データの第Ｍバイトが選択される一方、
そうでない場合は、前記記憶手段の出力の第Ｍバイトが選択されるように、制御するものである
ことを特徴とする記憶データ修正回路。
【請求項４】  請求項１記載の記憶データ修正回路において、
前記修正データを、バイト単位で、前記修正アドレスの下位Ｎビットの値に相当するバイト数分ローテートするデータローテート回路を備え、
前記記憶データ選択部は、
前記修正データの代わりに、前記データローテート回路の出力を、選択対象として入力するものである
ことを特徴とする記憶データ修正回路。
【請求項５】  請求項１記載の記憶データ修正回路において、
前記隣接一致回路は、
下位Ｎビットを除く前記アドレス信号の値から下位Ｎビットを除く前記修正アドレスの値を減算した結果が「０」または「１」のとき、隣接一致を検出するものである
ことを特徴とする記憶データ修正回路。
【請求項６】  ２N （Ｎは自然数）バイト幅の出力を持ち、アドレス信号が示す２N の倍数のアドレスから記憶された２N バイトのデータを読み出して出力する記憶手段について、出力データの修正を行う記憶データ修正回路であって、
２N バイト幅の修正データをそれぞれ保持する複数のデータレジスタと、
前記各データレジスタに対応して設けられ、修正アドレスをそれぞれ保持する複数のアドレスレジスタと、
前記アドレスレジスタおよびデータレジスタの各組合わせに対応してそれぞれ設けられ、前記アドレス信号および対応する前記アドレスレジスタに保持された修正アドレスを入力とし、この修正アドレスが、前記アドレス信号が示すアドレスの，以降の２N 個および手前の（２N −１）個のアドレスのうちのいずれかに該当するとき、隣接一致を検出する複数の隣接一致回路と、
前記複数の隣接一致回路の出力を入力とし、隣接一致を検出した隣接一致回路に対応するデータレジスタに保持された修正データを、選択修正データとして出力するデータレジスタ切替回路と、
前記複数の隣接一致回路の出力を入力とし、隣接一致を検出した隣接一致回路に対応するアドレスレジスタに保持された修正アドレスを、選択修正アドレスとして出力するアドレスレジスタ切替回路と、
前記隣接一致回路が隣接一致を検出したとき、前記記憶手段の出力および前記データレジスタ切替回路から出力された選択修正データのいずれかを、バイト単位で、前記アドレス信号および前記アドレスレジスタ切替回路から出力された選択修正アドレスに応じて、選択出力する記憶データ選択部とを備え、
前記記憶データ選択部の出力を、修正済記憶データとして出力する
ことを特徴とする記憶データ修正回路。
【請求項７】  請求項６記載の記憶データ修正回路において、
前記記憶データ選択部は、
前記記憶手段の出力および前記データレジスタ切替回路から出力された選択修正データを入力とし、バイト単位で、そのいずれかを選択出力するバイト切替回路と、
前記アドレス信号の第Ｎビット、前記アドレスレジスタ切替回路から出力された選択修正アドレスの下位（Ｎ＋１）ビット、および前記複数の隣接一致回路の出力を入力とし、前記バイト切替回路の選択動作の制御を行うバイト切替制御回路とを備えたものである
ことを特徴とする記憶データ修正回路。
【請求項８】  請求項７記載の記憶データ修正回路において、
前記バイト切替制御回路は、
前記バイト切替回路における第Ｍ（Ｍは０≦Ｍ＜（２N ）の整数）バイトの出力として、
前記複数の隣接一致回路のいずれかによって隣接一致が検出され、かつ、前記アドレス信号の第Ｎビットの値と前記選択修正アドレスの第Ｎビットの値が等しくかつ前記選択修正アドレスの下位Ｎビットの値が（Ｍ＋１）未満、または、前記アドレス信号の第Ｎビットの値と前記選択修正アドレスの第Ｎビットの値が異なりかつ前記選択修正アドレスの下位Ｎビットの値が（Ｍ＋１）以上である場合は、前記修正データの第Ｍバイトが選択される一方、
そうでない場合は、前記記憶手段の出力の第Ｍバイトが選択されるように、制御する
ことを特徴とする記憶データ修正回路。
【請求項９】  請求項６記載の記憶データ修正回路において、
前記選択修正データを、バイト単位で、前記選択修正アドレスの下位Ｎビットの値に相当するバイト数分ローテートするデータローテート回路を備え、
前記記憶データ選択部は、
前記選択修正データの代わりに、前記データローテート回路の出力を、選択対象として入力するものである
ことを特徴とする記憶データ修正回路。
【請求項１０】  請求項６記載の記憶データ修正回路において、
前記複数の隣接一致回路は、それぞれ、
下位Ｎビットを除く前記アドレス信号の値から下位Ｎビットを除く前記修正アドレスの値を減算し、この減算結果が「０」のとき、または減算結果が「１」でありかつ前記修正アドレスの下位Ｎビットの値が「０」でないとき、隣接一致を検出するものである
ことを特徴とする記憶データ修正回路。
【請求項１１】  Ｎ（Ｎは２以上の整数）バイト幅の出力を持ち、アドレス信号が示すアドレスから記憶されたデータを読み出して出力する記憶手段の出力データを修正する記憶データ修正回路であって、
Ｎバイト幅の修正データを保持するデータレジスタと、
修正アドレスを保持するアドレスレジスタと、
前記アドレス信号および前記修正アドレスを入力とし、前記修正アドレスが、前記アドレス信号が示すアドレスの，以降のＮ個および手前の（Ｎ−１）個のアドレスのうちのいずれかに該当するとき、隣接一致を検出する隣接一致回路と、
前記記憶手段の出力データおよび前記修正データのいずれかを１バイト単位で分割し、前記隣接一致回路が隣接一致を検出したとき、前記アドレス信号および前記修正アドレスに応じて、分割された前記出力データの第Ｍバイトの値（Ｍは０≦Ｍ＜Ｎを満たす整数）および分割された前記修正データ第Ｍバイトの値のいずれかを選択出力する記憶データ選択部とを備え、
前記記憶データ選択部の出力を、修正済記憶データとして出力する
ことを特徴とする記憶データ修正回路。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、マイクロプロセッサやデジタルシグナルプロセッサ（ＤＳＰ）等のＬＳＩに用いられるマスクＲＯＭのような記憶手段に記録されたデータの、誤りを修正するための回路技術に属する。
【０００２】
【従来の技術】
近年、マイクロプロセッサやＤＳＰ等のデジタルＬＳＩは、年々、その集積度が向上し、大容量のメモリ回路を搭載するようになっている。特に、マスクＲＯＭは、他のメモリ素子と比較してより大容量を集積することが可能であり、主にプロセッサが実行するプログラムの格納に用いられる。
【０００３】
マスクＲＯＭは書き換え不能な記憶素子であり、プロセッサが実行するプログラムやデータは、ＬＳＩの製造段階において書き込まれる。ところが、プログラムの量が大きくなるにつれて、そのプログラムに誤りが含まれる可能性が高くなり、ＬＳＩの製造段階においてプログラムの誤りを完全に除去することは困難になってきている。そこで、ＬＳＩの製造段階でマスクＲＯＭに記録したプログラムやデータに誤りがある場合に、その誤りをＬＳＩの使用時において修正できるような機能が必要になっている。
【０００４】
図７は従来の記憶データ修正回路の一例を示すブロック図である。図７において、マスクＲＯＭ６１はマイクロプロセッサ６２が出力するアドレス信号ＳＡＤが示すアドレスに記憶したデータを、ＲＯＭデータ信号ＳＲＯＭとして出力する。一方、一致回路６５は、アドレス信号ＳＡＤとアドレスレジスタ６６の出力値とを比較し、一致したとき一致信号ＳＣ１を出力する。切替回路６８は、一致信号ＳＣ１が出力されたときはデータレジスタ６９の出力値値を選択する一方、一致信号ＳＣ１が出力されなかったときはＲＯＭデータ信号ＳＲＯＭを選択し、データ信号ＳＤＴとしてマイクロプロセッサ６２に送る。
【０００５】
図７の構成において、マスクＲＯＭ６１に記録されたプログラムやデータに誤りが見つかったときは、誤りのあるアドレスをアドレスレジスタ６６に設定し、修正を行う値をデータレジスタ６９に設定する。これにより、マイクロプロセッサ６２が誤りのないアドレスに対してアクセスを行ったときは、マスクＲＯＭ６１から読み出された値がマイクロプロセッサ６２に送られる。一方、マイクロプロセッサ６２が誤りのあるアドレスに対してアクセスを行ったときは、データレジスタ６９に設定した修正データがマイクロプロセッサ６２に送られる。したがって、マスクＲＯＭ６１に記録された誤ったプログラムやデータを修正することができる。
【０００６】
【発明が解決しようとする課題】
上述した従来の構成では、マイクロプロセッサが誤りのあるアドレスに対してアクセスを行ったとき、マスクＲＯＭから読み出されたデータが、データレジスタに設定した修正データに一括して切り替えられる。
【０００７】
しかしながら、この構成では、複数バイト幅、例えば４バイト幅の出力を持ち、４バイトのデータを一括して読み出す構成のマスクＲＯＭを用いたときには、誤りの修正についても、４バイトアライン（４の倍数）のアドレスから始まる４バイトのデータが一括して修正されることになる。この場合、任意のアドレスから修正を行うことが困難になる。
【０００８】
特に、マイクロプロセッサとして、１命令を構成する命令コードのバイト数が命令種毎に異なる命令体系を持ったものを用いる場合には、プログラム中の１個の命令の命令コードが、マスクＲＯＭにおいて４バイトアラインのアドレスを跨いで配置される場合がある。このようなアクセスの境界を跨ぐ命令について、上述した従来の構成では、その命令のバイト数が４以下であっても、修正することが困難である。
【０００９】
前記の問題に鑑み、本発明は、複数バイト幅出力のマスクＲＯＭのような記憶手段について、任意のアドレスからのデータ修正が可能である記憶データ修正回路を提供することを課題とする。
【００１０】
【課題を解決するための手段】
前記の課題を解決するために、本発明に係る記憶データ修正回路は、修正アドレスまたはこれに隣接したアドレスに対するアクセスを検出する隣接一致回路と、修正アドレスの下位ビットの値に従って記憶手段の出力と修正データとの切り替えをバイト単位で制御する記憶データ選択部とを備えている。
【００１１】
具体的には、請求項１の発明が講じた解決手段は、２N （Ｎは自然数）バイト幅の出力を持ち、アドレス信号が示す２N の倍数のアドレスから記憶された２N バイトのデータを読み出して出力する記憶手段について、出力データの修正を行う記憶データ修正回路として、２N バイト幅の修正データを保持するデータレジスタと、修正アドレスを保持するアドレスレジスタと、前記アドレス信号および前記修正アドレスを入力とし、前記修正アドレスが、前記アドレス信号が示すアドレスの，以降の２N 個および手前の２N 個のアドレスのうちのいずれかに該当するとき、隣接一致を検出する隣接一致回路と、前記隣接一致回路が隣接一致を検出したとき、前記記憶手段の出力データおよび前記修正データのいずれかを、バイト単位で、前記アドレス信号および前記修正アドレスに応じて選択出力する記憶データ選択部とを備え、前記記憶データ選択部の出力を、修正済記憶データとして出力するものである。
【００１２】
請求項１の発明によると、隣接一致回路によって、修正アドレスまたはこれに隣接したアドレスに対するアクセスを検出することができ、検出されたときには、記憶データ選択部によって、記憶手段の出力データおよび修正データのいずれかがバイト単位で、アドレス信号および修正アドレスに応じて選択される。これによって、任意のアドレスからのデータ修正が可能になり、アクセスの境界を跨ぐように記憶された命令コードの修正も可能になる。
【００１３】
そして、請求項２の発明では、前記請求項１の記憶データ修正回路における記憶データ選択部は、前記記憶手段の出力データおよび前記修正データを入力とし、バイト単位でそのいずれかを選択出力するバイト切替回路と、前記アドレス信号の第Ｎビット、前記修正アドレスの下位（Ｎ＋１）ビットおよび前記隣接一致回路の出力を入力とし、前記バイト切替回路の選択動作の制御を行うバイト切替制御回路とを備えたものとする。
【００１４】
さらに、請求項３の発明では、前記請求項２の記憶データ修正回路におけるバイト切替制御回路は、前記バイト切替回路における第Ｍ（Ｍは０≦Ｍ＜（２N ）の整数）バイトの出力として、前記隣接一致回路によって隣接一致が検出され、かつ、前記アドレス信号の第Ｎビットの値と前記修正アドレスの第Ｎビットの値が等しくかつ前記修正アドレスの下位Ｎビットの値が（Ｍ＋１）未満、または、前記アドレス信号の第Ｎビットの値と前記修正アドレスの第Ｎビットの値が異なりかつ前記修正アドレスの下位Ｎビットの値が（Ｍ＋１）以上である場合は、前記修正データの第Ｍバイトが選択される一方、そうでない場合は、前記記憶手段の出力の第Ｍバイトが選択されるように、制御するものとする。この制御は、リトルエンディアンのバイトアドレスが採用されている場合に有効である。
【００１５】
また、請求項４の発明では、前記請求項１の記憶データ修正回路は、前記修正データを、バイト単位で、前記修正アドレスの下位Ｎビットの値に相当するバイト数分ローテートするデータローテート回路を備え、前記記憶データ選択部は、前記修正データの代わりに、前記データローテート回路の出力を選択対象として入力するものとする。
【００１６】
請求項４の発明によると、修正データを、修正を行う並び順のままデータレジスタに、設定することが可能になる。
【００１７】
また、請求項５の発明では、前記請求項１の記憶データ修正回路における隣接一致回路は、下位Ｎビットを除く前記アドレス信号の値から、下位Ｎビットを除く前記修正アドレスの値を減算した結果が「０」または「１」のとき、隣接一致を検出するものとする。
【００１８】
また、請求項６の発明が講じた解決手段は、２N （Ｎは自然数）バイト幅の出力を持ち、アドレス信号が示す２N の倍数のアドレスから記憶された２N バイトのデータを読み出して出力する記憶手段について、出力データの修正を行う記憶データ修正回路として、２N バイト幅の修正データをそれぞれ保持する複数のデータレジスタと、前記各データレジスタに対応して設けられ、修正アドレスをそれぞれ保持する複数のアドレスレジスタと、前記アドレスレジスタおよびデータレジスタの各組合わせに対応してそれぞれ設けられ、前記アドレス信号および対応する前記アドレスレジスタに保持された修正アドレスを入力とし、この修正アドレスが、前記アドレス信号が示すアドレスの，以降の２N 個および手前の（２N −１）個のアドレスのうちのいずれかに該当するとき、隣接一致を検出する複数の隣接一致回路と、前記複数の隣接一致回路の出力を入力とし、隣接一致を検出した隣接一致回路に対応するデータレジスタに保持された修正データを選択修正データとして出力するデータレジスタ切替回路と、前記複数の隣接一致回路の出力を入力とし、隣接一致を検出した隣接一致回路に対応するアドレスレジスタに保持された修正アドレスを選択修正アドレスとして出力するアドレスレジスタ切替回路と、前記隣接一致回路が隣接一致を検出したとき、前記記憶手段の出力および前記データレジスタ切替回路から出力された選択修正データのいずれかをバイト単位で前記アドレス信号および前記アドレスレジスタ切替回路から出力された選択修正アドレスに応じて選択出力する記憶データ選択部とを備え、前記記憶データ選択部の出力を修正済記憶データとして出力するものである。
【００１９】
そして、請求項７の発明では、前記請求項６の記憶データ修正回路における記憶データ選択部は、前記記憶手段の出力および前記データレジスタ切替回路から出力された選択修正データを入力とし、バイト単位でそのいずれかを選択出力するバイト切替回路と、前記アドレス信号の第Ｎビット、前記アドレスレジスタ切替回路から出力された選択修正アドレスの下位（Ｎ＋１）ビットおよび前記複数の隣接一致回路の出力を入力とし、前記バイト切替回路の選択動作の制御を行うバイト切替制御回路とを備えたものとする。
【００２０】
さらに、請求項８の発明では、前記請求項７の記憶データ修正回路におけるバイト切替制御回路は、前記バイト切替回路における第Ｍ（Ｍは０≦Ｍ＜（２N ）の整数）バイトの出力として、前記複数の隣接一致回路のいずれかによって隣接一致が検出され、かつ、前記アドレス信号の第Ｎビットの値と前記選択修正アドレスの第Ｎビットの値が等しくかつ前記選択修正アドレスの下位Ｎビットの値が（Ｍ＋１）未満、または、前記アドレス信号の第Ｎビットの値と前記選択修正アドレスの第Ｎビットの値が異なりかつ前記選択修正アドレスの下位Ｎビットの値が（Ｍ＋１）以上である場合は、前記修正データの第Ｍバイトが選択される一方、そうでない場合は、前記記憶手段の出力の第Ｍバイトが選択されるように制御するものである。この制御は、リトルエンディアンのバイトアドレスが採用されている場合に有効である。
【００２１】
また、請求項９の発明では、前記請求項６の記憶データ修正回路は、前記選択修正データをバイト単位で前記選択修正アドレスの下位Ｎビットの値に相当するバイト数分ローテートするデータローテート回路を備え、前記記憶データ選択部は、前記選択修正データの代わりに、前記データローテート回路の出力を選択対象として入力するものとする。
【００２２】
請求項９の発明によると、修正データを、修正を行う並び順のままデータレジスタに、設定することが可能になる。
【００２３】
また、請求項１０の発明では、前記請求項６の記憶データ修正回路における複数の隣接一致回路はそれぞれ、下位Ｎビットを除く前記アドレス信号の値から下位Ｎビットを除く前記修正アドレスの値を減算し、この減算結果が「０」のとき、または減算結果が「１」でありかつ前記修正アドレスの下位Ｎビットの値が「０」でないとき、隣接一致を検出するものとする。
【００２４】
また、請求項１１の発明が講じた解決手段は、Ｎ（Ｎは２以上の整数）バイト幅の出力を持ち、アドレス信号が示すアドレスから記憶されたデータを読み出して出力する記憶手段の出力データを修正する記憶データ修正回路として、Ｎバイト幅の修正データを保持するデータレジスタと、修正アドレスを保持するアドレスレジスタと、前記アドレス信号および前記修正アドレスを入力とし、前記修正アドレスが、前記アドレス信号が示すアドレスの，以降のＮ個および手前の（Ｎ−１）個のアドレスのうちのいずれかに該当するとき、隣接一致を検出する隣接一致回路と、前記記憶手段の出力データおよび前記修正データのいずれかを１バイト単位で分割し、前記隣接一致回路が隣接一致を検出したとき、前記アドレス信号および前記修正アドレスに応じて、分割された前記出力データの第Ｍバイトの値（Ｍは０≦Ｍ＜Ｎを満たす整数）および分割された前記修正データ第Ｍバイトの値のいずれかを選択出力する記憶データ選択部とを備え、前記記憶データ選択部の出力を、修正済記憶データとして出力するものである。
【００２５】
【発明の実施の形態】
以下、本発明の実施の形態について、図面を参照しながら説明する。
【００２６】
（第１の実施形態）
図１は本発明の第１の実施形態に係る記憶データ修正回路の構成図である。この回路はＬＳＩに内蔵されており、いわゆる１チップマイコンの一部分を構成している。
【００２７】
図１において、マイクロプロセッサ１２は３２ビット構成のプロセッサであり、アドレス信号ＳＡＤを出力してマスクＲＯＭ１１に対するアクセスを行う。記憶手段としてのマスクＲＯＭ１１にはマイクロプロセッサ１２が実行するプログラムが格納されている。
【００２８】
マスクＲＯＭ１１は４（＝２2 ）バイト幅の出力を持ち、４バイト（３２ビット）のデータを一括して読み出すように構成されている。すなわち、アドレス信号ＳＡＤは４の倍数のアドレス（すなわち下位２ビットが「０」）を指定するものであり、マスクＲＯＭ１１は一回の読み出しアクセスにおいて、アドレス信号ＳＡＤが指定する４の倍数のアドレスから始まる連続４バイトのデータをＲＯＭデータ信号ＳＲＯＭとして出力する。なお、マスクＲＯＭ１１は、マイクロプロセッサ１２が実行するプログラム以外に、マイクロプロセッサ１２が処理に用いるデータもその一部に格納する。
【００２９】
マイクロプロセッサ１２は、１個の命令を構成する命令コードのバイト数が命令種毎に異なる命令体系を有しており、これによって、効率的なプログラミングが可能になっている。しかしながら、各命令はマスクＲＯＭ１１の任意のアドレスに記憶されるので、１個の命令を構成する命令コードが、１回の読み出しアクセスによって読み出される範囲（アドレス信号ＳＡＤが指定するアドレスから始まる４バイト）に収まらず、２回またはそれ以上の読み出しアクセスを必要とする範囲にわたって配置される場合がある。
【００３０】
またここでは、マイクロプロセッサ１２はリトルエンディアンのバイトアドレスを採用しているものとする。すなわち、マスクＲＯＭ１１から読み出された４バイトのデータは、アドレス信号ＳＡＤが指定するアドレスのデータから順に、ワード内の第０バイト、第１バイト、第２バイト、第３バイトとして用いられる。
【００３１】
アドレスレジスタ１３は修正アドレスＳＣＡＤを保持し、データレジスタ１４は４バイト（３２ビット）の修正データＳＣＤＴを保持する。アドレスレジスタ１３およびデータレジスタ１４には、シリアル書込クロック信号ＣＬＫおよびシリアル書込データ信号ＷＤＴがそれぞれ入力される。これらの信号ＣＬＫ，ＷＤＴは、図１の修正回路を内蔵する１チップマイコンの外部端子から供給される。そして、シリアル書込データ信号ＷＤＴの値をシリアル書込クロック信号ＣＬＫに同期して変化させることによって、アドレスレジスタ１３とデータレジスタ１４に、修正アドレスＳＣＡＤおよび修正データＳＣＤＴとして、１チップマイコンの外部から任意の値が設定可能になっている。
【００３２】
マイクロプロセッサ１２から出力されたアドレス信号ＳＡＤはマスクＲＯＭ１１以外に、隣接一致回路１５にも入力される。隣接一致回路１５は、入力されたアドレス信号ＳＡＤとアドレスレジスタ１３に設定された修正アドレスＳＣＡＤとの比較を行い、隣接一致信号ＳＣＯを出力する。
【００３３】
隣接一致回路１５は、修正アドレスＳＣＡＤが、アドレス信号ＳＡＤが示すアドレスの，以降の４個のアドレスおよび手前の４個のアドレスに含まれるとき、隣接一致信号ＳＣＯとして“Ｈ”を出力する。すなわち、アドレス信号ＳＡＤが、修正アドレスＳＣＡＤを含む４バイトアラインから始まる４バイトとこれに続く４バイトへのアクセスを指したとき、隣接一致信号ＳＣＯとして“Ｈ”を出力する。具体的には、隣接一致回路１５は、下位２ビットを除いたアドレス信号ＳＡＤの値から下位２ビットを除いた修正アドレスＳＣＡＤの値を減算し、減算結果が「０」または「１」のとき（これは（アドレス信号ＳＡＤ−修正アドレスＳＣＡＤ）の演算結果が「−３」以上「４」以下である場合に相当する）、隣接一致信号ＳＣＯとして“Ｈ”を出力する。
【００３４】
隣接一致信号ＳＣＯは、バイト切替制御回路１８に入力され、バイト切替回路１９の制御に用いられる。バイト切替制御回路１８およびバイト切替回路１９によって、記憶データ選択部１７が構成されている。
【００３５】
図２は記憶データ選択部１７の構成の詳細を示す図である。図２に示すように、バイト切替回路１９は、４バイト幅のＲＯＭデータ信号ＳＲＯＭとデータレジスタ１４から出力された４バイト幅の修正データＳＣＤＴとを入力とする。そして、ＲＯＭデータ信号ＳＲＯＭおよび修正データＳＣＤＴの各バイトに対応して設けられた４個の切替回路１９ａ〜１９ｄによって、バイト単位で、ＲＯＭデータ信号ＳＲＯＭおよび修正データＳＣＤＴのいずれかを選択し、データ信号ＳＤＴとして出力する。出力されたデータ信号ＳＤＴは修正済記憶データとしてマイクロプロセッサ１２に送られる。
【００３６】
各切替回路１９ａ〜１９ｄの選択動作は、バイト切替制御回路１８が出力する４個のバイト切替制御信号ＳＳａ〜ＳＳｄによって、それぞれ制御される。各切替回路１９ａ〜１９ｂは、バイト切替制御信号ＳＳａ〜ＳＳｄが“Ｈ”のときは修正データＳＣＤＴを選択し、そうでないときはＲＯＭデータ信号ＳＲＯＭを選択する。
【００３７】
バイト切替制御回路１８は隣接一致信号ＳＣＯに加えて、修正アドレスＳＣＡＤの下位３（＝２＋１）ビットおよびアドレス信号ＳＡＤの第２ビットを入力とし、バイト切替制御信号ＳＳａ〜ＳＳｄを生成する。バイト切替制御回路１８は、隣接一致信号ＳＣＯが“Ｈ”であり、かつ、以下の条件が成立したとき、切替回路１９ａ〜１９ｄが修正データＳＣＤＴを選択するように、バイト切替制御信号ＳＳａ〜ＳＳｄとして“Ｈ”を出力する。
【００３８】
・バイト切替制御信号ＳＳａ
修正アドレスＳＣＡＤの第２ビットの値がアドレス信号ＳＡＤの第２ビットの値と等しいとき
・バイト切替制御信号ＳＳｂ
修正アドレスＳＣＡＤの第２ビットの値がアドレス信号ＳＡＤの第２ビットの値と等しく、かつ、修正アドレスＳＣＡＤの下位２ビットの値が「３」未満、または、
修正アドレスＳＣＡＤの第２ビットの値がアドレス信号ＳＡＤの第２ビットの値と異なり、かつ、修正アドレスＳＣＡＤの下位２ビットの値が「３」以上のとき
・バイト切替制御信号ＳＳｃ
修正アドレスＳＣＡＤの第２ビットの値がアドレス信号ＳＡＤの第２ビットの値と等しく、かつ、修正アドレスＳＣＡＤの下位２ビットの値が「２」未満、または、
修正アドレスＳＣＡＤの第２ビットの値がアドレス信号ＳＡＤの第２ビットの値と異なり、かつ、修正アドレスＳＣＡＤの下位２ビットの値が「２」以上のとき
・バイト切替制御信号ＳＳｄ
修正アドレスＳＣＡＤの第２ビットの値がアドレス信号ＳＡＤの第２ビットの値と等しく、かつ、修正アドレスＳＣＡＤの下位２ビットの値が「１」未満、または、
修正アドレスＳＣＡＤの第２ビットの値がアドレス信号ＳＡＤの第２ビットの値と異なり、かつ、修正アドレスＳＣＡＤの下位２ビットの値が「１」以上
以上のように構成された記憶データ修正回路について、以下、その動作を説明する。
【００３９】
図３（ａ）は１チップマイコンの製造時にマスクＲＯＭ１１に記憶されたプログラムのリストの一部であって、修正前のものである。ここでは（後述する他のプログラムリストも同様）、最右欄に命令のニーモニックが、中央欄にその命令の命令コード（１６進数表記）が、そして最左欄にその命令が記憶されているアドレス（１６進数表記）が示されている。図３（ａ）のプログラムリストでは３個の命令が記載されており、４０８０番地にはメモリに記憶したデータをレジスタに読み込む命令（ＭＯＶ）が、４０８１番地には読み出したデータを用いて加算を行う命令（ＡＤＤ）が、そして４０８５番地には加算結果をメモリに記録する命令（ＭＯＶ）が、それぞれ配置されている。これらの命令の命令コードのサイズはそれぞれ、１バイト、４バイトおよび３バイトである。ここで、２番目のＡＤＤ命令の命令コードは、２回の読み出しアクセスを必要とする範囲（４０８０番地から始まる４バイトと４０８４番地から始まる４バイト）にわたって配置されている。
【００４０】
図３（ａ）に示すプログラムが修正なしでそのまま用いられる場合には、マスクＲＯＭ１１から４バイト単位で出力されるＲＯＭデータ信号ＳＲＯＭは、そのままマイクロプロセッサ１２に送られる。
【００４１】
まず、４０８０番地から始まる４バイト（順に「７０」「ＦＡ」「Ｃ０」「３４」）がＲＯＭデータ信号ＳＲＯＭとして出力される。このとき、アドレスレジスタ１３には修正アドレスＳＣＡＤが設定されていないので、隣接一致回路１５が隣接一致信号ＳＣＯとして“Ｈ”を出力することはなく、バイト切替制御回路１８から出力されるバイト切替制御信号ＳＳａ〜ＳＳｄはいずれも“Ｌ”のままである。したがって、バイト切替回路１９はＲＯＭデータ信号ＳＲＯＭとして入力される４バイトのデータをそのままデータ信号ＳＤＴとして出力する。この結果、マスクＲＯＭ１１に記憶された４０８０番地から始まる４バイトのデータがそのままマイクロプロセッサ１２に送られる。同様に、４０８４番地から始まる４バイト（順に「１２」「０２」「ＡＢ」「８９」）が、そのままデータ信号ＳＤＴとしてマイクロプロセッサ１２に送られる。
【００４２】
ここで、マスクＲＯＭ１１にプログラムが書き込まれ、１チップマイコンとして製造された後に、４０８１番地のＡＤＤ命令に誤りが発見されたものとする。このとき、図３（ｂ）に示すように、４０８１番地のＡＤＤ命令をサブルーチン分岐命令（ＣＡＬＬ）に置き換えることによって、このプログラムの誤りを修正するものとする。
【００４３】
この修正を行うために、マイクロプロセッサ１２がプログラムを実行する以前例えばリセット期間中に、１チップマイコンの外部端子からシリアル書込クロック信号ＣＬＫとシリアル書込データ信号ＷＤＴによって、アドレスレジスタ１３に修正アドレスＳＣＡＤとして４０８１番地を設定するとともに、データレジスタ１４に修正データＳＣＤＴとして命令コード（ＦＡ，ＦＦ，６７，４５）を設定する。
【００４４】
なお、修正データＳＣＤＴの設定は、修正アドレスＳＣＡＤの下位２ビットの値が示すバイト位置から順に行う必要がある。この例では、修正アドレスＳＣＡＤ（４０８１番地）の下位２ビットの値は「１」であるので、修正データＳＣＤＴの先頭データ「ＦＡ」をデータレジスタ１４の第１バイトに配置し、以降、データ「ＦＦ」「６７」「４５」をそれぞれ第２バイト、第３バイトおよび第０バイトに配置する。
【００４５】
修正アドレスＳＣＡＤおよび修正データＳＣＤＴが設定された後の動作について、説明する。
【００４６】
マイクロプロセッサ１２が４０８０番地をアクセスするとき、プログラム未修正時と同様に、マスクＲＯＭ１１からはＲＯＭデータ信号ＳＲＯＭとして、製造時に書き込まれたデータすなわち「７０」「ＦＡ」「Ｃ０」「３４」が出力される。このとき、隣接一致回路１５は上述したような動作によって、アドレス信号ＳＡＤ（４０８０番地）とアドレスレジスタ１３から出力された修正アドレスＳＣＡＤ（４０８１番地）とを比較し、隣接一致信号ＳＣＯとして“Ｈ”を出力する。
【００４７】
バイト切替制御回路１８は、アドレス信号ＳＡＤの第２ビットが“０”であり、修正アドレスＳＣＡＤの第２ビットが“０”、下位２ビットの値が「１」であることから、バイト切替制御信号ＳＳａ〜ＳＳｃとして“Ｈ”を出力し、バイト切替制御信号ＳＳｄとして“Ｌ”を出力する。これにより、バイト切替回路１９において、切替回路１９ａ〜１９ｃはデータレジスタ１４から出力された修正データＳＣＤＴを選択する一方、切替回路１９ｄは修正前と同様にＲＯＭデータ信号ＳＲＯＭを選択する。この結果、データ信号ＳＤＴとして、第０バイトに「７０」、第１バイトに「ＦＡ」、第２バイトに「ＦＦ」、第３バイトに「６７」が出力される。
【００４８】
また、マイクロプロセッサ１２が４０８４番地をアクセスするとき、プログラム未修正時と同様に、マスクＲＯＭ１１からはＲＯＭデータ信号ＳＲＯＭとして、製造時に書き込まれたデータすなわち「１２」「０２」「ＡＢ」「８９」が出力される。この場合にも、隣接一致回路１５はアドレス信号ＳＡＤ（４０８４番地）と修正アドレスＳＣＡＤ（４０８１番地）とを比較し、隣接一致信号ＳＣＯとして“Ｈ”を出力する。
【００４９】
バイト切替制御回路１８は、アドレス信号ＳＡＤの第２ビットが“１”であるので、ここでは、バイト切替制御信号ＳＳａ〜ＳＳｃとして“Ｌ”を出力し、バイト切替制御信号ＳＳｄとして“Ｈ”を出力する。これにより、バイト切替回路１９において、切替回路１９ａ〜１９ｃはＲＯＭデータ信号ＳＲＯＭを選択する一方、切替回路１９ｄは修正データＳＣＤＴを選択する。この結果、データ信号ＳＤＴとして、第０バイトに「４５」、第１バイトに「０２」、第２バイトに「ＡＢ」、第３バイトに「８９」が出力される。
【００５０】
一方、マイクロプロセッサ１２が４０８０番地と４０８４番地以外をアクセスする場合は、隣接一致回路１５は隣接一致信号ＳＣＯとして“Ｌ”を出力する。これにより、マスクＲＯＭ１１から出力されたＲＯＭデータ信号ＳＲＯＭが、そのままデータ信号ＳＤＴとしてマイクロプロセッサ１２に送られる。
【００５１】
このように、アドレスレジスタ１３に修正アドレスＳＣＡＤとして４０８１番地を設定し、データレジスタ１４に修正データＳＣＤＴとして「４５」「ＦＡ」「ＦＦ」「６７」を設定することによって、４０８０番地に対するアクセスにおいては「７０」「ＦＡ」「ＦＦ」「６７」の４バイトが、４０８４番地に対するアクセスにおいては「４５」「０２」「ＡＢ」「８９」の４バイトが、データ信号ＳＤＴとしてマイクロプロセッサ１２に送られる。この結果、図３（ｂ）に示すようなプログラムの修正が実現される。
【００５２】
以上のように本実施形態によると、隣接一致回路１５とバイト切替制御回路１８の制御により、バイト切替回路１９において、マスクＲＯＭ１１の出力ＳＲＯＭと修正データＳＣＤＴとをバイト単位で選択することによって、図３の例のように２回の読み出しアクセスを必要とする範囲にわたって配置された命令（命令コードが４バイト以下）を、容易に修正することができる。
【００５３】
なお、本実施形態では、マイクロプロセッサ１２はリトルエンディアンのバイトアドレスを採用しているものとしたが、ビッグエンディアンのバイトアドレスを採用したマイクロプロセッサを用いた場合でも、本発明は容易に適用可能である。この場合、バイト切替制御回路１８が出力するバイト切替制御信号ＳＳａ〜ＳＳｄとバイト切替回路１９の切替回路１９ａ〜１９ｄとの対応関係を変更し、各バイト切替制御信号ＳＳａ〜ＳＳｄが、切替回路１９ｄ〜１９ａをそれぞれ制御するようにすればよい。
【００５４】
（第２の実施形態）
図４は本発明の第２の実施形態に係る記憶データ修正回路の構成図である。この回路もＬＳＩに内蔵されており、いわゆる１チップマイコンの一部分を構成している。図４において、図１と共通の構成要素には、図１と同一の符号を付しており、ここではその詳細な説明を省略する。
【００５５】
図４の構成では、アドレスレジスタおよびデータレジスタをそれぞれ２個ずつ設けており、これにより、マスクＲＯＭ１１に記憶されたデータの２箇所の誤りを修正可能になっている。
【００５６】
第１および第２のアドレスレジスタ２３Ａ，２３Ｂは修正アドレスＳＣＡＤ１，ＳＣＡＤ２をそれぞれ保持し、第１および第２のデータレジスタ２４Ａ，２４Ｂは４バイト（３２ビット）の修正データＳＣＤＴ１，ＳＣＤＴ２をそれぞれ保持する。アドレスレジスタ２３Ａ，２３Ｂおよびデータレジスタ２４Ａ，２４Ｂには、第１の実施形態と同様に、シリアル書込クロック信号ＣＬＫおよびシリアル書込データ信号ＷＤＴによって、１チップマイコンの外部から、修正アドレスＳＣＡＤ１，ＳＣＡＤ２および修正データＳＣＤＴ１，ＳＣＤＴ２として、任意の値が設定可能になっている。
【００５７】
第１および第２の隣接一致回路２５Ａ，２５Ｂはそれぞれ、入力されたアドレス信号ＳＡＤと、第１および第２のアドレスレジスタ２３Ａ，２３Ｂに設定された修正アドレスＳＣＡＤ１，ＳＣＡＤ２との比較を行い、隣接一致信号ＳＣＯ１，ＳＣＯ２を出力する。隣接一致回路２５Ａおよび２５Ｂは、各修正アドレスＳＣＡＤ１，ＳＣＡＤ２が、アドレス信号ＳＡＤが示すアドレスの，以降の４個のアドレスおよび手前の３個のアドレスに含まれるとき、隣接一致信号ＳＣＯ１，ＳＣＯ２として“Ｈ”を出力する。
【００５８】
すなわち、修正アドレスＳＣＡＤ１，ＳＣＡＤ２の下位２ビットが“０”でない場合は、アドレス信号ＳＡＤが、修正アドレスＳＣＡＤ１，ＳＣＡＤ２を含む４バイトアラインから始まる４バイトとこれに続く４バイトへのアクセスを指したとき、隣接一致信号ＳＣＯ１，ＳＣＯ２として“Ｈ”を出力する。ところが、修正アドレスＳＣＡＤ１，ＳＣＡＤ２の下位２ビットが“０”の場合は、アドレス信号ＳＡＤが修正アドレスＳＣＡＤ１，ＳＣＡＤ２と一致したときにのみ、隣接一致信号ＳＣＯ１，ＳＣＯ２として“Ｈ”を出力する。この点で、本実施形態に係る隣接一致回路２５Ａ，２５Ｂは、第１の実施形態に係る隣接一致回路１５とは、その動作が異なる。
【００５９】
具体的には、隣接一致回路２５Ａ，２５Ｂは、下位２ビットを除いたアドレス信号ＳＡＤの値から下位２ビットを除いた修正アドレスＳＣＡＤ１，ＳＣＡＤ２の値を減算し、減算結果が「０」のとき、または、減算結果が「１」でありかつ修正アドレスＳＣＡＤ１，ＳＣＡＤ２の下位２ビットが「０」でないとき（これは（アドレス信号ＳＡＤ−修正アドレスＳＣＡＤ１，ＳＣＡＤ２）の演算結果が「−３」以上「３」以下である場合に相当する）、隣接一致信号ＳＣＯ１，ＳＣＯ２として“Ｈ”を出力する。
【００６０】
隣接一致信号ＳＣＯ１，ＳＣＯ２は、データレジスタ切替回路３１およびアドレスレジスタ切替回路３２にそれぞれ入力される。
【００６１】
データレジスタ切替回路３１は、データレジスタ２４Ａ，２４Ｂから出力された修正データＳＣＤＴ１，ＳＣＤＴ２から、隣接一致信号ＳＣＯ１，ＳＣＯ２として“Ｈ”が出力された方の値を選択し、選択修正データＳＳＣＤＴとして出力する。また、アドレスレジスタ切替回路３２は、アドレスレジスタ２３Ａ，２３Ｂから出力された修正アドレスＳＣＡＤ１，ＳＣＡＤ２の下位３ビットから、隣接一致信号ＳＣＯ１，ＳＣＯ２として“Ｈ”が出力された方の値を選択し、選択修正アドレス信号ＳＳＣＡＤとして出力する。
【００６２】
データレジスタ切替回路３１から出力された選択修正データＳＳＣＤＴと、アドレスレジスタ切替回路３２から出力された選択修正アドレス信号ＳＳＣＡＤのうちの下位２ビットは、データローテート回路３３に入力される。データローテート回路３３は、選択修正データＳＳＣＤＴが示す値を、選択修正アドレスＳＳＣＡＤの下位２ビットが示すバイト数分だけローテートさせ、ローテートデータＳＲＴとして出力する。
【００６３】
記憶データ選択部１７は、第１の実施形態と同様の構成からなる。バイト切替制御回路１８は、隣接一致信号ＳＣＯ１，ＳＣＯ２の論理和ＳＳＣＯと選択修正アドレスＳＳＣＡＤとを入力し、第１の実施形態と同様の論理によって、４個のバイト切替制御信号ＳＳａ〜ＳＳｄを生成する。また、バイト切替回路１９は、４バイト幅のＲＯＭデータ信号ＳＲＯＭとデータローテート回路３３から出力されたローテートデータＳＲＴとを入力とする。そして、バイト切替制御信号ＳＳａ〜ＳＳｄの制御によって、バイト単位で、ＲＯＭデータ信号ＳＲＯＭとローテートデータＳＲＴのいずれかを選択し、データ信号ＳＤＴとして出力する。出力されたデータ信号ＳＤＴはマイクロプロセッサ１２に送られる。
【００６４】
以上のように構成された記憶データ修正回路について、以下、その動作を説明する。
【００６５】
図５（ａ）は１チップマイコンの製造時にマスクＲＯＭ１１に記憶されたプログラムのリストの一部であって、修正前のものである。ここでは、４０８１番地のＡＤＤ命令に加えて、４１０５番地のＡＮＤ命令および４１０９番地のＣＭＰ命令にも、製造後に誤りが発見されたものとしている。したがって、図５（ｂ）に示す修正後のプログラムリストでは、４０８１番地のＡＤＤ命令をＣＡＬＬ命令（「ＦＡ」「ＦＦ」「６７」「４５」）に置き換え、さらに、４１０７番地からの４バイトを「０８」「００」「Ａ０」「０８」に置き換えることによって、上述の誤りを修正している。
【００６６】
この修正を行うために、マイクロプロセッサ１２がプログラムを実行する以前例えばリセット期間中に、１チップマイコンの外部端子からシリアル書込クロック信号ＣＬＫとシリアル書込データ信号ＷＤＴによって、アドレスレジスタ２３Ａ，２３Ｂに修正アドレスＳＣＡＤ１，ＳＣＡＤ２として４０８１番地、４１０７番地を設定するとともに、データレジスタ２４Ａ，２４Ｂに修正データＳＣＤＴ１，ＳＣＤＴ２として「ＦＡ」「ＦＦ」「６７」「４５」および「０８」「００」「Ａ０」「０８」をそれぞれ設定する。
【００６７】
なお、本実施形態では、第１の実施形態のように、修正データＳＣＤＴ１，ＳＣＤＴ２の配置を修正アドレスＳＣＡＤ１，ＳＣＡＤ２の下位２ビットの値に従って定める必要はない。すなわち、修正データＳＣＤＴ１，ＳＣＤＴ２は、データレジスタ２４Ａ，２４Ｂの第０バイトから順に配置すればよい。これは、データローテート回路３３を設けたことによって得られた効果であり、データローテート回路３３の具体的な動作については、後述する。
【００６８】
修正アドレスＳＣＡＤ１，ＳＣＡＤ２および修正データＳＣＤＴ１，ＳＣＤＴ２が設定された後の動作について、説明する。
【００６９】
マイクロプロセッサ１２が４０８０番地をアクセスするとき、マスクＲＯＭ１１からはＲＯＭデータ信号ＳＲＯＭとして、製造時に書き込まれたデータすなわち「７０」「ＦＡ」「Ｃ０」「３４」が出力される。このとき、第１の隣接一致回路２５Ａはアドレス信号ＳＡＤ（４０８０番地）と第１のアドレスレジスタ２３Ａから出力された修正アドレスＳＣＡＤ１（４０８１番地）とを比較し、隣接一致信号ＳＣＯ１として“Ｈ”を出力する。一方、第２の隣接一致回路２５Ｂはアドレス信号ＳＡＤ（４０８０番地）と第２のアドレスレジスタ２３Ｂから出力された修正アドレスＳＣＡＤ２（４１０７番地）とを比較し、隣接一致信号ＳＣＯ２として“Ｌ”を出力する。
【００７０】
アドレスレジスタ切替回路３２は、第１の隣接一致信号ＳＣＯ１が“Ｈ”であるので、第１のアドレスレジスタ２３Ａから出力された修正アドレスＳＣＡＤ１（４０８１番地）の下位３ビットを選択し、選択修正アドレスＳＳＣＡＤとして出力する。また、データレジスタ切替回路３１も、第１の隣接一致信号ＳＣＯ１が“Ｈ”であるので、第１のデータレジスタ２４Ａから出力された修正データＳＣＤＴ１を選択し、選択修正データＳＳＣＤＴとして出力する。
【００７１】
このとき、データローテート回路３３に入力される選択修正アドレスＳＳＣＡＤの下位２ビットは、「１」になる。このため、データローテート回路３３は、選択修正データＳＳＣＤＴとして入力されるデータレジスタ２４Ａの出力「ＦＡ」「ＦＦ」「６７」「４５」を１バイト分だけローテートし、ローテートデータ信号ＳＲＴとして「４５」「ＦＡ」「ＦＦ」「６７」を出力する。
【００７２】
バイト切替制御回路１８は、アドレス信号ＳＡＤの第２ビットが“０”であり、選択修正アドレスＳＳＣＡＤの第２ビットが“０”、下位２ビットの値が「１」であることから、バイト切替制御信号ＳＳａ〜ＳＳｃとして“Ｈ”を出力し、バイト切替制御信号ＳＳｄとして“Ｌ”を出力する。これにより、バイト切替回路１９は、データ信号ＳＤＴとして、第０バイトはＲＯＭデータ信号ＳＲＯＭを選択し、第１〜３バイトはローテートデータ信号ＳＲＴを選択する。この結果、データ信号ＳＤＴとして「７０」「ＦＡ」「ＦＦ」「６７」が出力される。
【００７３】
また、マイクロプロセッサ１２が４０８４番地をアクセスするときも同様に、隣接一致回路２５Ａは隣接一致信号ＳＣＯ１として“Ｈ”を出力し、隣接一致回路２５Ｂは隣接一致信号ＳＣＯ２として“Ｌ”を出力する。この結果、データ信号ＳＤＴとして「４５」「０２」「ＡＢ」「８９」が出力される。
【００７４】
マイクロプロセッサ１２が４１０４番地をアクセスするとき、隣接一致回路２５Ａはアドレス信号ＳＡＤ（４１０４番地）と修正アドレスＳＣＡＤ１（４０８１番地）とを比較し、隣接一致信号ＳＣＯ１としてＬ”を出力する一方、隣接一致回路２５Ｂはアドレス信号ＳＡＤ（４１０４番地）と修正アドレスＳＣＡＤ２（４１０７番地）とを比較し、隣接一致信号ＳＣＯ２として“Ｈ”を出力する。したがって、アドレスレジスタ切替回路３２は修正アドレスＳＣＡＤ２（４１０７番地）の下位３ビットを選択し、選択修正アドレスＳＳＣＡＤとして出力する。また、データレジスタ切替回路３１も修正データＳＣＤＴ２を選択し、選択修正データＳＳＣＤＴとして出力する。
【００７５】
このとき、データローテート回路３３に入力される選択修正アドレスＳＳＣＡＤの下位２ビットは、「３」になる。このため、データローテート回路３３は、選択修正データＳＳＣＤＴとして入力されるデータレジスタ２４Ｂの出力「０８」「００」「Ａ０」「０８」を３バイト分ローテートし、ローテートデータ信号ＳＲＴとして「００」「Ａ０」「０８」「０８」を出力する。
【００７６】
バイト切替制御回路１８は、アドレス信号ＳＡＤの第２ビットが“１”であり、選択修正アドレスＳＳＣＡＤの第２ビットが“１”、下位２ビットの値が「３」であることから、バイト切替制御信号ＳＳａ〜ＳＳｃとして“Ｌ”を出力し、バイト切替制御信号ＳＳｄとして“Ｈ”を出力する。これにより、バイト切替回路１９はデータ信号ＳＤＴとして「７１」「ＦＡ」「Ｅ０」「０８」を出力する。
【００７７】
また、マイクロプロセッサ１２が４１０８番地をアクセスするときも同様に、隣接一致回路２５Ａは隣接一致信号ＳＣＯ１として“Ｌ”を出力し、隣接一致回路２５Ｂは隣接一致信号ＳＣＯ２として“Ｈ”を出力する。この結果、データ信号ＳＤＴとして「００」「Ａ０」「０８」「Ｃ８」が出力される。
【００７８】
一方、マイクロプロセッサ１２が４０８０番地、４０８４番地、４１０４番地および４１０８番地以外をアクセスする場合は、隣接一致回路２５Ａ，２５Ｂは隣接一致信号ＳＣＯ１，ＳＣＯ２として“Ｌ”を出力する。これにより、マスクＲＯＭ１１から出力されたＲＯＭデータ信号ＳＲＯＭが、そのままデータ信号ＳＤＴとしてマイクロプロセッサ１２に送られる。
【００７９】
このように、アドレスレジスタ２３Ａ，２３Ｂに修正アドレスＳＣＡＤ１，ＳＣＡＤ２として４０８１番地および４１０７番地を設定し、データレジスタ２４Ａ，２４Ｂに修正データＳＣＤＴ１，ＳＣＤＴ２として「ＦＡ」「ＦＦ」「６７」「４５」および「０８」「００」「Ａ０」「０８」を設定することによって、各修正アドレスＳＣＡＤ１，ＳＣＡＤ２に対してアクセスした場合には修正データＳＣＤＴ１，ＳＣＤＴ２がマイクロプロセッサ１２に送られる。この結果、図５（ｂ）に示すようなプログラムの修正が実現される。
【００８０】
図６（ａ）も１チップマイコンの製造時にマスクＲＯＭ１１に記憶されたプログラムのリストの一部であって、修正前のものである。ここでは、４０８１番地のＡＤＤ命令に加えて、４０８５番地のＭＯＶ命令にも誤りが発見されたものとしている。したがって、図６（ｂ）に示す修正後のプログラムリストでは、４０８１番地から４バイトを「ＦＡ」「ＦＦ」「６７」「４５」に置き換え、さらに４０８５番地からの３バイトを「０２」「ＥＦ」「ＣＤ」に置き換えることによって、上述の誤りを修正している。
【００８１】
このように連続４バイトを越えて修正を行う場合には、本実施形態では、アドレスレジスタ２３Ａ，２３Ｂに修正アドレスＳＣＡＤ１，ＳＣＡＤ２として４バイトアラインのアドレスを設定する。すなわち、アドレスレジスタ２３Ａ，２３Ｂに修正アドレスＳＣＡＤ１，ＳＣＡＤ２として４０８０番地、４０８４番地を設定するとともに、データレジスタ２４Ａ，２４Ｂに修正データＳＣＤＴ１，ＳＣＤＴ２として「７０」「ＦＡ」「ＦＦ」「６７」および「４５」「０２」「ＥＦ」「ＣＤ」をそれぞれ設定する。
【００８２】
このように設定を行った後、マイクロプロセッサ１２が４０８０番地をアクセスするときは、第１の隣接一致信号ＳＣＯ１として“Ｈ”が出力され、第２の隣接一致信号ＳＣＯ２として“Ｌ”が出力される。このとき、データレジスタ２４Ａから出力された修正データＳＣＤＴ１が、データレジスタ切替回路３１から選択修正データＳＳＣＤＴとして出力され、さらにデータローテート回路３３からローテートデータ信号ＳＲＴとして出力される。また、バイト切替制御信号ＳＳａ〜ＳＳｄとして全て“Ｈ”が出力されるので、データ信号ＳＤＴとしては、データレジスタ２４Ａから出力された修正データＳＣＤＴ１の値すなわち「７０」「ＦＡ」「ＦＦ」「６７」が出力される。
【００８３】
また、マイクロプロセッサ１２が４０８４番地をアクセスするときは、第１の隣接一致信号ＳＣＯ１として“Ｌ”が出力され、第２の隣接一致信号ＳＣＯ２として“Ｈ”が出力される。したがって、データ信号ＳＤＴとしては、データレジスタ２４Ｂから出力された修正データＳＣＤＴ２の値すなわち「４５」「０２」「ＥＦ」「ＣＤ」が出力される。この結果、図６（ｂ）に示すようなプログラムの修正が実現される。
【００８４】
以上のように本実施形態によると、アドレスレジスタ、データレジスタおよび隣接一致回路を２個ずつ設けることによって、図５の例のように、２回の読み出しアクセスを必要とする２箇所の修正を行うことが可能になる。また、各隣接一致回路は、修正アドレスが４バイトアラインにあるとき、隣接するアドレスに対するアクセスを判断しないので、４バイト境界のアドレスから始まる４バイト以上のデータを連続して修正することが可能となる。
【００８５】
また、修正データを修正アドレスの下位２ビットの値に相当するバイト数分ローテートするデータローテート回路を設けたことによって、修正データを、修正を行う並び順のままデータレジスタに設定することが可能になる。もちろん、データローテート回路を設けないで、データレジスタ切替回路３１から出力された選択修正データＳＳＣＤＴをそのままバイト切替回路１９に入力させるように構成してもかまわない。ただしこの場合は、第１の実施形態と同様に、修正データの設定を、修正アドレスの下位２ビットの値が示すバイト位置から順に行う必要がある。
【００８６】
一方、本実施形態に係るデータローテート回路を、第１の実施形態に係る構成に設けることによって、本実施形態と同様の効果を得ることができる。すなわち、図１の構成において、データレジスタ１４とバイト切替回路１９との間に、修正データＳＣＤＴを修正アドレスＳＣＡＤの下位２ビットの値に相当するバイト数分ローテートするデータローテート回路を設けることによって、修正データＳＣＤＴを、修正を行う並び順のままデータレジスタ１４に設定することが可能になる。
【００８７】
なお、本実施形態では、アドレスレジスタとデータレジスタ、および隣接一致回路をそれぞれ２組ずつ設けるものとしたが、これらをそれぞれ３組以上設けてもかまわないことは明らかである。
【００８８】
また、上述した各実施形態では、Ｎ＝２とし、マスクＲＯＭ１１は４（＝２2 ）バイトを一括して読み出す構成であるものとしたがが、一般に、２のべき乗に相当する数のバイト幅の出力を持つマスクＲＯＭを用いた場合に、本発明は同様に適用可能であることは明らかである。
【００８９】
また、上述した各実施形態では、修正アドレスおよび修正データは、１チップマイコンの外部端子から設定されるものとしたが、この代わりに、マイクロプロセッサ１２が実行するプログラムによって設定する構成とすることも可能である。この場合、例えば、１チップマイコンの外部または内部に設けたＦｌａｓｈ  ＲＯＭなどの書き換え可能なメモリ素子に修正アドレスおよび修正データを格納しておき、ブートプログラムに、これらの値がアドレスレジスタおよびデータレジスタに設定されるように、プログラミングすればよい。
【００９０】
また、上述した各実施形態では、マスクＲＯＭ１１に記憶された命令コードの修正を行っているが、命令コード以外のデータであっても、同様に修正を行うことは可能である。
【００９１】
また、上述した各実施形態では、マスクＲＯＭに記録されたデータの修正を行うものとしたが、マスクＲＯＭ以外の記憶手段に記録されたデータの修正も、同様に実現できることはいうまでもない。
【００９２】
【発明の効果】
以上のように本発明によると、修正アドレスまたはこれに隣接したアドレスに対するアクセスを検出したとき、記憶手段の出力データおよび修正データのいずれかが、バイト単位で、アドレス信号および修正アドレスに応じて選択される。これによって、任意のアドレスからのデータ修正が可能になり、例えばアクセスの境界を跨ぐように記憶された命令コードの修正も可能になる。
【図面の簡単な説明】
【図１】
本発明の第１の実施形態に係る記憶データ修正回路の構成図である。
【図２】
図１の構成における記憶データ選択部の詳細な構成を示す図である。
【図３】
第１の実施形態における修正対象のプログラム例を示すリストである。
【図４】
本発明の第２の実施形態に係る記憶データ修正回路の構成図である。
【図５】
第２の実施形態における修正対象のプログラム例を示すリストである。
【図６】
第２の実施形態における修正対象のプログラム例を示すリストである。
【図７】
従来の記憶データ修正回路の構成図である。
【符号の説明】
１１  マスクＲＯＭ（記憶手段）
１３  アドレスレジスタ
１４  データレジスタ
１５  隣接一致回路
１７  記憶データ選択部
１８  バイト切替制御回路
１９  バイト切替回路
２３Ａ，２３Ｂ  アドレスレジスタ
２４Ａ，２４Ｂ  データレジスタ
２５Ａ，２５Ｂ  隣接一致回路
３１  データレジスタ切替回路
３２  アドレスレジスタ切替回路
３３  データローテート回路
ＳＡＤ  アドレス信号
ＳＣＡＤ  修正アドレス
ＳＣＤＴ  修正データ
ＳＲＯＭ  ＲＯＭデータ信号（記憶手段の出力データ）
ＳＤＴ  データ信号（修正済記憶データ）
ＳＣＡＤ１，ＳＣＡＤ２  修正アドレス
ＳＣＤＴ１，ＳＣＤＴ２  修正データ
ＳＳＣＡＤ  選択修正アドレス
ＳＳＣＤＴ  選択修正データ
ＳＲＴ  ローテートデータ（データローテート回路の出力）