(57)【特許請求の範囲】
【請求項１】
処理中の命令を示すプログラムカウンタを有するパイプラインコントローラと、
パイプラインハザードを起こす命令を記憶する第１レジスタと、
ストールのサイクル数を記憶する第２レジスタと、
前記パイプラインコントローラのパイプライン処理の同期をとるクロックに応答して前記パイプラインコントローラのストール数をカウントするカウント手段を有するストールコントローラとを備えるマイクロコンピュータの制御方法であって、
（イ）前記第１レジスタに記憶された前記パイプラインハザードを起こす命令と前記プログラムカウンタからの前記処理中の命令とが一致したか否かを調べるステップと、
（ロ）前記ステップ（イ）における前記一致に応答して、前記パイプラインコントローラにパイプライン処理のストールを開始させると共に、前記カウント手段によるカウントを開始させるステップと、
（ハ）前記ステップ（ロ）に続いて、前記第２レジスタからの前記ストールのサイクル数と前記カウント手段からの前記パイプラインコントローラのストール数とが一致したか否かを調べるステップと、
（ニ）前記ステップ（ハ）における前記一致に応答して、前記カウント手段のカウントを終了すると共に、前記パイプラインコントローラによるストールを終了させるステップと、
（ホ）前記ステップ（ニ）に続いて、前記カウント手段をリセットするステップとを含む前記マイクロコンピュータの制御方法。
【請求項２】
前記カウント手段は、カウントレジスタ並びに該カウントレジスタの出力及び入力の間に接続された加算回路を有し、該加算回路が前記クロックに応答して前記カウントレジスタのカウントに１を加算して前記カウントレジスタの入力に戻す、請求項１に記載のマイクロコンピュータの制御方法。
【請求項３】
処理中の命令を示すプログラムカウンタを有するパイプラインコントローラと、
第１レジスタと、
第２レジスタと、
前記パイプラインコントローラのパイプライン処理の同期をとるクロックに応答して前記パイプラインコントローラのストール数をカウントするカウント手段を有するストールコントローラとを備えるマイクロコンピュータの制御方法であって、
（ａ）前記第１レジスタにパイプラインハザードを起こす命令を記憶させると共に、前記第２レジスタにストールのサイクル数を記憶させるステップと、
（ｂ）前記ステップ（ａ）に続いて、前記第１レジスタに記憶された前記パイプラインハザードを起こす命令と前記プログラムカウンタからの前記処理中の命令とが一致したか否かを調べるステップと、
（ｃ）前記ステップ（ｂ）における前記一致に応答して、前記パイプラインコントローラにパイプライン処理のストールを開始させると共に、前記カウント手段によるカウントを開始させるステップと、
（ｄ）前記ステップ（ｃ）に続いて、前記第２レジスタからの前記ストールのサイクル数と前記カウント手段からの前記パイプラインコントローラのストール数とが一致したか否かを調べるステップと、
（ｅ）前記ステップ（ｄ）における前記一致に応答して、前記カウント手段のカウントを終了すると共に、前記パイプラインコントローラによるストールを終了させるステップと、
（ｆ）前記ステップ（ｅ）に続いて、前記カウント手段をリセットするステップとを含む前記マイクロコンピュータの制御方法。
【請求項４】
前記カウント手段は、カウントレジスタ並びに該カウントレジスタの出力及び入力の間に接続された加算回路を有し、該加算回路が前記クロックに応答して前記カウントレジスタのカウントに１を加算して前記カウントレジスタの入力に戻す、請求項３に記載のマイクロコンピュータの制御方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ROM（Read Only Memory）に記憶されたコードのバグやパイプラインハザードを回避するマイクロコンピュータに関する。
【０００２】
【従来の技術】
従来、マイクロコンピュータが実行するコードは、外部記憶装置に記憶されている。マイクロコンピュータは、外部記憶装置にアクセスして処理をおこなう。このため、コードにバグが発見された場合、外部記憶装置に記憶されたコードを修正、いわゆるデバッグをおこなうことによって、マイクロコンピュータを正常に動作させることが可能であった。
【０００３】
現在、マイクロコンピュータ内に不揮発性記憶装置を設けることは、技術的、またコスト的に可能である。マイクロコンピュータの記憶装置へのアクセス速度の向上や製造コストの低減から、マイクロコンピュータ内部に記憶装置を設けることが増えると思われる。
【０００４】
しかし、不揮発性記憶装置がROMの場合、ROMに記憶されたコードにバグがあると、デバッグ用コードをROMに挿入または上書きするのは不可能である。デバッグは、マイクロコンピュータの製造からやり直す、またはＩＣＥ（Incircuit Emulator）などの大規模回路を追加する必要が生じ、コスト増加および開発期間の延長を生じさせる。したがって、マイクロコンピュータ内にコードを記憶した記憶装置を設けることはリスクを伴う。
【０００５】
マイクロコンピュータは、パイプラインでデータ処理をおこなうことによって、処理速度を向上させることができる。しかし、図１４ａに示すように、４段のステージを考えた場合、＊で示す箇所のメモリの値を読み出す読み出しステージとメモリに結果を書き込む書き込みステージに、メモリ上の同一アドレスにアクセスする可能性があり、パイプラインハザードが発生する。また、ｉの命令の処理結果をメモリに書き込んだ後、ｉ＋１の命令で、その処理結果を使用する場合も、ｉ＋１が命令を実行するときに処理結果が無いため、パイプラインハザードが発生する。
【０００６】
パイプラインハザードを防ぐ方法としては、図１４ｂに示すように、時間的に後から発生した命令（ｉ＋１やｉ＋２）を数サイクルストールさせることが最も効果的である。これにより、パイプラインで処理する命令の厳しい条件は緩和され、パイプラインハザードが回避される。
【０００７】
マイクロコンピュータがパイプラインハザードを回避するためには、（１）ハードウェアによりパイプラインハザードの発生を防ぐ構造にする、または（２）ソフトウェアによりパイプラインハザードの発生するコードを回避する構造にする。
【０００８】
しかし、（１）は、ハードウェアにバグが存在すれば、ハードウェアを再制作する必要がある。また、（２）は、コンパイラやアセンブラコードにバグがある場合は、それらを修正する必要がある。
【０００９】
これらの不都合を回避するために、パイプラインハザードの発生しにくいコードを記述する、もしくは既存のコードを修正する必要がある。これには、ハードウェア構造の知識が必要不可欠となり、コードを作成する者に負担となる。
【００１０】
【発明が解決しようとする課題】
本発明の目的は、ROMに記憶されたコードのバグやパイプラインハザードを回避するマイクロコンピュータを提供することにある。
【００１１】
【課題を解決するための手段】
本発明のマイクロコンピュータの要旨は、コードが記憶されたROMと、前記コードを実行するマイクロプロセッサーと、デバッグ用コードを挿入、またはデバッグ用コードに上書きする前記コードのアドレスを記憶する第１レジスタと、前記アドレスのコードに対して上書きする命令を記憶する第２レジスタと、前記マイクロプロセッサーが実行するコードのアドレスと第１レジスタに記憶されたアドレスとを比較する回路と、前記コードにおいて、第１レジスタに記憶されたアドレスのコードを前記命令に上書きする回路と、前記第１レジスタに記憶させるアドレス、第２レジスタに記憶させる命令、およびデバッグ用コードを記憶するメモリと、を含むことにある。
【００１２】
他のマイクロコンピュータの要旨は、コードが記憶されたROMと、前記コードを実行するマイクロプロセッサーと、前記コードをデバッグ用コードに上書きするアドレスを監視し、監視の結果によって切り替え信号を発生するアドレスコントローラーと、前記デバッグ用コードを記憶するメモリと、前記切り替え信号を受信し、前記コードとデバッグ用コードを選択する選択手段と、を含むことにある。
【００１３】
さらに他のマイクロコンピュータの要旨は、パイプライン処理をおこなうパイプラインコントローラーと、前記パイプライン処理をストールさせるアドレスまたは命令を記憶する第１レジスタと、前記ストールのサイクル数を記憶する第２レジスタと、前記パイプラインコントローラーが、前記アドレスまたは命令のパイプライン処理のストールを開始した後、該パイプラインコントローラーにストールを解除させるための信号を送るストールコントローラーと、を含むことにある。
【００１４】
【発明の実施の形態】
本発明のマイクロコンピュータの実施形態について図面を用いて説明する。なお、本明細書においてコードは、プログラムや命令などをいう。
【００１５】
先ず、第１実施形態について説明する。第１実施形態は、図１に示すように、マイクロプロセッサーが、ROM１２にアクセスした際、第１レジスタ１６に記憶されたアドレスにアクセスをすると、ROM１２に記憶された命令を実行せずに、メモリ２４に記憶されたデバッグ用コードを実行するものである。
【００１６】
図２に示すように、マイクロコンピュータ１０は、コードが記憶されたROM１２と、コードを実行するマイクロプロセッサー１４と、デバッグ用コードを挿入、またはデバッグ用コードに上書きするコードのアドレスを記憶する第１レジスタ１６と、そのアドレスの命令またはコードに対して上書きする命令を記憶する第２レジスタ１８と、マイクロプロセッサー１４が実行するコードのアドレスと第１レジスタ１６に記憶されたアドレスとを比較するコンパレーター２０と、第１レジスタ１６に記憶されたアドレスのコードを第２レジスタ１８に記憶された命令に上書きするマルチプレクサー２２と、第１レジスタ１６に記憶させるアドレス、第２レジスタ１８に記憶させる命令、およびデバッグ用コードを記憶するメモリ２４と、を含む。
【００１７】
ROM１２は、マイクロコンピュータ１０内に設けられるOnChipROMである。ROMであるので、記憶されたコードは読み出し専用であって、書き換えることはできない。
【００１８】
コンパレーター２０は、マイクロプロセッサー１４がROM１２にアクセスするとき、アクセスするアドレスを受け取り、そのアドレスと第１レジスタ１６に記憶されたアドレスとを比較する回路である。コンパレーター２０は、双方のアドレスが一致した場合に、マルチプレクサー２２に所定信号を送る手段を含む。
【００１９】
マルチプレクサー２２は、コンパレーター２０からの信号を受け取ると、第２レジスタ１８の命令を選択することによって、ROM１２から受け取った命令を第２レジスタ１８に記憶された命令に上書きする回路である。したがって、マルチプレクサー２２がコンパレーター２０からの信号を受け取ると、第２レジスタ１８に記憶された命令がマイクロプロセッサー１４に送られる。
【００２０】
メモリ２４は、上述したアドレス、命令、デバッグ用コードを記憶させるため、データの書き換えが可能であるＲＡＭ（Random Access Memory）を用いるのが好ましい。バグが発見されるたびにデバッグ用コードを追加していくことが可能である。メモリ２４は、マイクロコンピュータ１０の内部以外に、外部に設けても良い。外部にメモリ２４を設けた場合、マイクロコンピュータ１０とメモリ２４は、任意のバスによって接続される。
【００２１】
また、ROM１２のアドレスとメモリ２４のアドレスとは、ロジック的に同一のアドレスが存在しないようにアドレスを割り振る。同一のアドレスが存在しないので、ROM１２からメモリ２４に、マイクロプロセッサー２４がアクセスを変更することができる。
【００２２】
第１および第２レジスタ１６，１８に記憶されるアドレスと命令は、データ・バス２８を介して入力され、記憶される。また、図２中の点線部は、命令を上書きするための回路ブロック２６となっている。
【００２３】
次に、ROM１２およびメモリ２４のコードの一例を示しながら、マイクロコンピュータ１０の動作について説明する。
【００２４】
マイクロプロセッサー１４は、ROM１２の先頭アドレスから順番にアクセスする。図３に示すように、ROM１２に記憶されたコードの初期化ルーチンは、マイクロプロセッサー１４に、ROM１２からメモリ２４へのアクセス変更を実現させるためのコードを含む。コードとしては、指定されたアドレスのコードを呼び出すＣＡＬＬ命令を使用する。このＣＡＬＬ命令で指定されたメモリ２４のアドレス、例えば２０００ｈ番地に、マイクロプロセッサー１４はアクセスを変更する。
【００２５】
メモリ２４の２０００ｈ番地には、マイクロプロセッサー１４が、所定内容を第１レジスタ１６と第２レジスタ１８のそれぞれに転送するための命令が記憶されている。所定内容は、ROM１２に記憶されたコードにおいて、デバッグが必要なアドレスと、デバッグ用コードが記載されたメモリ２４のアドレスへアクセスを変更する命令である。例えば、「MOV regA, #0100h」と「MOV regB, “CALL #2100h”」である。なお、regAは第１レジスタ１６で、regBは第２レジスタ１８である。ＭＯＶ命令はデータなどを転送する命令であり、上記の命令によって、マイクロプロセッサー１４は、データ・バス２８を介して第１レジスタ１６に＃０１００ｈを転送し、第２レジスタ１８にＣＡＬＬ  ＃２１００ｈを転送する。実際、ＣＡＬＬ  ＃２１００ｈは、マイクロプロセッサー１４が処理をおこなうために、１６ビット、３２ビットまたは６４ビットの２進数で示されるコードとなっている。なお、図２中の各レジスタ１６，１８に向かう矢印は、データ・バス２８からの上記アドレスや命令の入力を示す。転送後、ＲＥＴＵＲＮ命令によって、マイクロプロセッサー１４は、メモリ２４からROM１２にアクセスをもどす。
【００２６】
それぞれのレジスタ１６，１８にデバッグが必要なアドレスとアクセスを変更する命令を転送することによって、マイクロプロセッサー１４は、ROM１２のそのアドレスにアクセスをおこなうとき、ROM１２ではなくメモリ２４にアクセスを変更する。アクセスの変更先には、デバッグ用コードが記憶されているため、マイクロプロセッサー１４は、そのデバッグ用コードを実行することによって、デバッグが行える。
【００２７】
また、デバッグ用コードの挿入であるので、デバッグ用コードの後には、ROM１２に記憶されていた命令またはコードを記憶しておく。さらに、その命令やコードの後には、次にデバッグが必要なROM１２のアドレスとデバッグ用コードが記憶されたメモリ２４のアドレスへアクセスを変更する命令を、それぞれ第１レジスタ１６と第２レジスタ１８に転送する命令も記載されている。上記と同じように、マイクロプロセッサー１４は、第１レジスタ１６と第２レジスタ１８に、アドレスと命令を転送する。例えば、第１レジスタ１６に＃０２００ｈ、第２レジスタ１８にＣＡＬＬ  ＃２２００ｈを転送する。次に、マイクロプロセッサー１４が、ROM１２の０２００ｈ番地にアクセスするとき、上記と同じようにデバッグする。
【００２８】
メモリ２４のデバッグ用コードの後に、次にデバッグをおこなうアドレスおよびデバッグ用コードのアドレスを記憶させておくことによって、複数のデバッグが必要であっても、マイクロプロセッサー１４は、順次、ROM１２のコードをデバッグする。コードの最後のデバッグをおこなうとき、次にデバッグをおこなう必要がないので、最後のデバッグ用コードが記憶されたアドレスには、デバッグをおこなうアドレスおよびデバッグ用コードが記憶されたアドレスは記憶されない。
【００２９】
メモリ２４のデバッグ用コードの後には、マイクロプロセッサー１４が、アクセスをメモリ２４からROM１２にもどすためのＲＥＴＵＲＮ命令が記憶されている。したがって、マイクロプロセッサー１４は、メモリ２４のデバッグ用コードでデバッグをおこなった後、ＲＥＴＵＲＮ命令によって、ROM１２にアクセスをもどす。アクセスをもどすアドレスは、ＣＡＬＬ命令によってメモリ２４にアクセスした次のアドレスである。ROM１２にアクセスが戻った後、マイクロプロセッサー１４は、コードを最後まで実行する。
【００３０】
図３の例は、ROM１２の命令またはコードにデバッグ用コードを挿入している。デバッグ用コードの挿入以外に、ROM１２のコードをデバッグ用コードに上書きすることも可能である。その例を、図４を用いて説明する。
【００３１】
ROM１２に記憶されたコードの初期化ルーチンは、メモリ２４にアクセスを変更するコードを含む。メモリ２４の２０００ｈ番地には、図３の例と同じように、第１レジスタ１６と第２レジスタ１８にアドレスとアクセス変更の命令を転送するコードが記憶されている。図３と異なるのは、ＣＡＬＬ命令ではなく、分岐命令であるJUMP命令が記憶されている。マイクロプロセッサー１４が第１レジスタ１６に記憶されたアドレスにアクセスすると、JUMP命令によって、マイクロプロセッサー１４はROM１２からメモリ２４にアクセスを変更する。
【００３２】
メモリ２４のデバッグ用コードの最後に、ROM１２のコードにアクセスを変更するコードを含める。この場合、図３のＲＥＴＵＲＮ命令ではなくJUMP命令を用いる。例えば、JUMP  ＃０２００ｈとすると、ROM１２の０２００ｈ番地にアクセスが変更される。したがって、図４に示すように、ROM１２の０１００ｈ番地から０２００ｈ番地までのコードが処理されずに、メモリ２４のコードが処理される。すなわち、ROM１２に記憶されたコードのバグをメモリ２４のコードに上書きすることができる。
【００３３】
さらに、図５に示すように、ＣＡＬＬ命令とJUMP命令を組み合わせてデバッグをおこなうこともできる。２つの命令を組み合わせることによって、ROM１２に記憶されたコードのデバッグを柔軟におこなうことができる。ＣＡＬＬ命令やJUMP命令を用いて、デバッグが必要な箇所にメモリ２４のデバッグ用コードを挿入したり上書きしたりすることができるため、マイクロプロセッサー１４がデバッグをおこなうに当たって、余分な動作は入っていない。
【００３４】
以上のように、ROM１２に記憶されたコードのデバッグが必要な箇所だけ、メモリ２４にアクセスすることによって、バグを回避することができる。メモリ２４にデバッグの必要なアドレスやデバッグ用コードなどを記憶させてバグを回避しているため、マイクロコンピュータ１０の制作のやり直しやＩＣＥの追加は必要ない。また、メモリ２４が書き換え可能であれば、柔軟にデバッグをおこなうことができる。
【００３５】
次に、第２実施形態について説明する。図６に示すように、第２実施形態の概念は、ROM３２の一部に変わるレジスタまたはＲＡＭなどの書き換え可能なメモリ３８を備えている。マイクロプロセッサーは、図中の矢印で示すように、デバッグを必要とされるROM３２のコードにアクセスが生じた場合、メモリ３８にアクセスをおこない、コードの処理をおこなう。これにより、第１実施形態と同様に、ROM３２のコードをデバッグすることができる。
【００３６】
図７に示すように、マイクロコンピュータ３０を構成するブロックは、コードが記憶されたROM３２と、コードを実行するマイクロプロセッサー３４と、コードのデバッグ用コードを挿入するアドレスを監視し、監視の結果によって切り替え信号を発生するアドレスコントローラー３６と、デバッグ用コードを記憶するメモリ３８と、切り替え信号を受信し、コードとデバッグ用コードを選択する選択手段４０と、を含む。
【００３７】
アドレスコントローラー３６は、図８に示すように、デバッグ用コードに上書きするアドレスを記憶するレジスタ４２と、レジスタ４２に記憶されたアドレスとマイクロプロセッサー３４がアクセスするアドレスとを減算する減算機４４と、減算機４４の結果より切り替え信号を発生するデコーダー４６と、を含む。デバッグが必要なコードが複数のアドレスにまたがる領域であった場合、レジスタ４２に記憶されるアドレスをデバッグが必要なコードの先頭アドレスとすることによって、デバッグが必要なアドレス全てをレジスタ４２に記憶する必要はない。
【００３８】
また、減算機４４は、減算結果の上位ビットをデコーダー４６に送り、かつ下位ビットをメモリ３８に送る手段を含む。メモリ３８は、下位ビットの値がメモリ３８のアドレスと同一になっている場合、そのアドレスのコードを選択手段４０に送る。
【００３９】
デコーダー４６は、上位ビットを受け取ると、上述したように切り替え信号を発生する手段である。切り替え信号は、上位ビットをデコードした信号である。また、切り替え信号は、上位ビットが０であればメモリ３８のコード、０以外であればROM３２のコードを、選択手段４０が選択する信号である。
【００４０】
デバッグをおこなうコードの先頭アドレス、およびデバッグ用コードを記憶する記憶手段（図示せず）を含む。
【００４１】
マイクロコンピュータ３０の動作について説明する。マクロコンピュータ３０の起動時もしくはコード実行中に記憶手段などにアドレスが変化した際に、記憶手段からレジスタ４２に要修正個所の先頭アドレスを、かつメモリ３８にデバッグ用コードを、ＭＯＶ命令もしくはＤＭＡ（Direct Memory Access）により書き込む。すなわち、ROM３２のコードの初期化ルーティンまたは途中のコードに記憶手段にアクセスを変更する命令を挿入しておく。この時、メモリ３８は、図９のメモリマップに示すように、ロジック的に、コードの読み出し時と書き込み時に異なるアドレスを持っており、書き込みアドレスは固定となるように設計しておく。これにより、メモリ３８への書き込みが可能となる。
【００４２】
マイクロプロセッサー３４がコードを処理中は、常にレジスタ４２に記憶されたアドレスと実際にアクセスするアドレスとを減算機４４に入力する。その計算結果の下位ビットをメモリ３８のアドレスとして使用する。また、デコーダー４６が上位ビットをデコード後、選択手段４０がデコードされた上位ビット、すなわち切り替え信号によって、現在アクセスしているアドレスが、デバッグの必要個所か否かを判断する。その結果、マイクロプロセッサー３４に送るコードが、ROM３２かメモリ３８のコードとなる。
【００４３】
マイクロコンピュータ３０により、読み出しアドレスは可変となり任意の場所のコード修正が可能となる。さらに、レジスタ４２の値をデバッグ用コードの書き込みアドレスの先頭値、この例では、ＥＦＦ０ｈに設定することで、ROM３２内部に要修正個所がない場合は、コード修正以外の用途にも有効活用可能である。図８，９では、アドレスを、レジスタはＦＦＦＥｈ、デバッグ用コードは５０００ｈ−５００Ｆｈ、ROMエリアは０００ｈ−ＥＦＦＦｈを想定している。
【００４４】
例えば、図８では、レジスタ４２に５０００ｈ番地が記憶され、メモリ３８の０００ｈ番地から順にデバッグ用コードが記憶されるとする。マイクロプロセッサー３４が、５１００ｈ番地にアクセスしようとすると、減算機４４での減算結果は、上位ビットは０、下位ビットは１００になる。メモリ３８の１００ｈ番地にアクセスされ、１００ｈ番地のコードが選択手段４０に送られる。また、ROM３２からも５１００ｈ番地のコードが選択手段４０に送られる。さらに、デコーダー４６は切り替え信号として、０をデコードした信号を選択手段４０に送る。この０をデコードした信号は、選択手段４０がメモリ３８のコードを選択する信号になる。したがって、選択手段４０は、メモリ３８のコードを選択する。
【００４５】
また、上記の例において、マイクロプロセッサー３４が６１００ｈ番地にアクセスする場合、減算機４４での減算結果は、上位ビットが１になり、下位ビットが１００になる。メモリ３８から選択手段４０に、１００ｈ番地のコードが送られる。ROM３２から選択手段４０には、６１００ｈ番地のコードが送られる。さらに、デコーダー４６は切り替え信号として、１をデコードした信号を選択手段４０に送る。この１をデコードした信号は、選択手段４０がROM３２のコードを選択する信号である。したがって、選択手段４０は、ROM３２のコードを選択する。
【００４６】
以上のように、メモリ３８から同じアドレスのコードが選択手段４０に送られても、切り替え信号によって、メモリ３８のコードかROM３２のコードが選択される。
【００４７】
本発明は、ROM３２にあるコードのデバッグを容易におこなうことができ、マイクロコンピュータ３０の再マスク処理からの製造コスト、開発期間を短縮できる。また、アドレスが変更されないことから要修正以外のコード内に修正領域のアドレスを使用したものがある場合に有効である。また、本発明の構成であれば、要修正個所の任意の場所にアクセスしてもメモリ３８を参照可能であるため、ROM３２内部にはコードではなくデータであるような場合も有効である。さらに、内部で処理を全ておこなう構成であるため、パフォーマンスの劣化は最小限で済むことや、マイクロプロセッサー側から見ても、単に同じアドレスを使用するため、特別な処理が必要ないことが有利な点である。また、回路も単純であり、容易に実現可能である。さらに、コード修正をおこなう必要のない場合は、メモリ３８を拡張メモリとして活用可能である。
【００４８】
次に第３実施形態について説明する。第３実施形態は、ある条件がととのったことをきっかけとして、その条件が発生する箇所のパイプライン処理をストールさせるマイクロコンピュータである。
【００４９】
図１０に示すように、第３実施形態を構成するマイクロコンピュータ５０のブロックは、パイプライン処理をおこなうパイプラインコントローラー５２と、パイプライン処理をストールさせるアドレスまたは命令を記憶する第１レジスタ５４と、ストールのサイクル数を記憶する第２レジスタ５６と、パイプラインコントローラー５２が、所定のアドレスまたは命令のパイプライン処理のストールを開始した後、パイプラインコントローラー５２にストールを解除させるための信号を送るストールコントローラー５８と、を含む。
【００５０】
命令やアドレスなどを特定条件として、第１レジスタ５４に設定する。マイクロプロセッサー（図示せず）は、特定条件を常に把握しており、それを実命令と常に比較しながら、本来の処理をおこなう。この条件が成立した場合、マイクロプロセッサーは、パイプラインコントローラー５２へ情報を送り、パイプラインコントローラー５２は数サイクルストールされる。
【００５１】
第３実施形態を実施するための回路図を図１１に示す。パイプラインハザードの起こりうるアドレスを第１レジスタ５４に、ストールコントローラー５８の機能を有効とするか、またはストールのサイクル数などを第２レジスタ５６に、イニシャライズルーチンを利用して設定する。
【００５２】
ストールコントローラー５８は、パイプラインコントローラー５２のパイプライン処理のストール数をカウントする手段と、第２レジスタ５６のサイクル数とカウントする手段でカウントされたストール数を比較する第１比較回路６４と、を含む。カウントする手段は、ストール数をカウントするために、ストール数を記憶するカウントレジスタ６０と、クロックが入力されるたびに、カウントレジスタ６０に記憶されたストール数に１を加算する加算回路６２と、を含む。カウントレジスタ６０のストール数は、第１比較回路６４と加算回路６２に送られる。加算回路６２は、ストール数に１を加算し、カウントレジスタ６０に送り、カウントレジスタ６０は新たなストール数を記憶する。なお、クロックは、パイプラインコントローラー５２が、パイプライン処理の同期を取るための信号でもある。
【００５３】
第１比較回路６４は、カウントレジスタ６０のストール数と、第２レジスタ５６に記憶されたサイクル数とを比較する回路と、一致したときにストール終了信号を発生する回路と、を含む。
【００５４】
さらに、ストールコントローラー５８は、第１レジスタ５４に記憶されたアドレスと後述するプログラムカウンタ７０からのアドレスとを比較する第２比較回路６６と、第２比較回路６６からの信号とストール終了信号とを同時に受信したときに、パイプラインコントローラー５２にストールを解除する信号としてenable信号を送るＡＮＤ回路６８と、を含む。
【００５５】
以上のように、ストールが発生したときだけ、ストール数をカウントすることによって、マイクロコンピュータ５０の制作後であっても、柔軟にパイプライン処理のストールを制御することができる。
【００５６】
パイプラインコントローラー５２は、図１２に示すように、ストールする条件が一致したときに信号が入力されるＯＲ回路７２を含む。ＯＲ回路７２の入力側を１本空けておき、その１本にストールコントローラー５８のenable信号を入力する。ＯＲ回路７２から信号が出力されることによって、パイプラインコントローラー５２は、パイプライン処理をストールする。なお、ＯＲ回路７２の他の入力は、マイクロコンピュータ５０の初期製作段階で発見されたストールの条件、例えば所定の命令が入力される。
【００５７】
プログラムカウンタ７０は、パイプラインコントローラー５８がパイプライン処理をおこなっているコードのアドレスを第２比較回路６６に送る手段である。
【００５８】
マイクロコンピュータ５０の動作は、図１３のフローチャートに示すように、第１レジスタ５４に記憶されたアドレスとプログラムカウンタ７０のアドレスとを比較する（ステップ１）。アドレスが一致した場合、パイプラインコントローラー５２はストールを開始し、カウントレジスタ６０および加算回路６２は、ストール数をカウントする（ステップ２）。カウントは、カウントレジスタ６０のストール数に１の加算を繰り返すことによっておこなう。第２レジスタ５６に記憶されたストール数とカウンタレジスタ６０に記憶されたストール数とを比較する（ステップ３）。ストール数が一致した場合、ストール数のカウントを中止し、ストールも中止する（ステップ４）。カウントレジスタ６０に記憶されたストール数をリセットする（ステップ５）。
【００５９】
第１レジスタ５４に記憶するデータとしてストールを開始するアドレスとしたが、命令でも良い。この場合、プログラムカウンタ７０から第２比較回路６６に送られるのは、アドレスではなく、処理中の命令である。
【００６０】
第３実施形態によると、パイプラインハザードを最も効果的に回避するパイプラインストールを容易に発生可能である。特定条件は、プログラム可能であり、任意の場所にストールを発生可能である。さらに、レジスタの設定のみでパイプラインストールを発生可能であることから、ハードウェア修正、コード修正、コンパイラの修正と言ったものを必要とせず、開発期間の延長を抑えることができる。ストールを発生させるアドレスを変化させることにより、ハードウェアのデバッグにも有効である。また、実現させる回路も単純で容易に実現可能である。
【００６１】
上記のように、第１から第３実施形態のいずれにおいても、ROMに記憶されたコードを処理するとき、柔軟にデバッグしたりストールしたりすることができ、ROMの再設計などはおこなわなくても良い。
【００６２】
以上、本発明の実施形態について説明したが、本発明は上記の実施形態に減退されることはない。例えば、第１実施形態や第２実施形態では、メモリ２４，３８にデバッグ用コードを記憶したが、ROM１２，３２に記憶されなかった新たなコードを記憶しても良い。この新たなコードによって、マイクロコンピュータがおこなう処理を増やすことができる。
【００６３】
第１および第２実施形態において、メモリ２４，３８を複数にすることも可能である。
【００６４】
その他、本発明は、主旨を逸脱しない範囲で当業者の知識に基づき種々なる改良、修正、変更を加えた態様で実施できるものである。
【００６５】
【発明の効果】
本発明によると、ROMに記憶されたコードのデバッグを簡単におこなうことができ、マイクロコンピュータの製造コストの増加や開発期間の延長を抑えることができる。
【００６６】
また、パイプラインハザードの起こるアドレスや命令を指定するだけでパイプラインハザードを回避することができる。したがって、最初からパイプラインハザードが発生しにくいコードを記述する必要はなく、コードの開発者の負担が減る。
【図面の簡単な説明】
【図１】本発明のマイクロコンピュータがおこなう処理の概念を示す図である。
【図２】本発明のマイクロコンピュータの構成を示す図である。
【図３】  ROMおよびメモリのコードと、マイクロコンピュータがおこなうコードの挿入を示す図である。
【図４】  ROMおよびメモリの他のコードと、マイクロコンピュータがおこなうコードの上書きを示す図である。
【図５】  ROMおよびメモリの他のコードと、マイクロコンピュータがおこなうコードの挿入と上書きを示す図である。
【図６】本発明のマイクロコンピュータがおこなう処理の概念を示す図である。
【図７】本発明のマイクロコンピュータの構成を示す図である。
【図８】本発明のマイクロコンピュータの回路を示す図である。
【図９】本発明のROMおよび予備記憶装置のメモリマップを示す図である。
【図１０】本発明のマイクロコンピュータの構成を示す図である。
【図１１】本発明のマイクロコンピュータの回路を示す図である。
【図１２】本発明のマイクロコンピュータに含まれるパイプラインコントローラーの回路の一部の図である。
【図１３】本発明のマイクロコンピュータがおこなう処理のフローチャートのである。
【図１４】パイプライン処理の一例を示す図であり、（ａ）はパイプラインハザードの危険性があるパイプライン処理であり、（ｂ）は一部の命令をストールさせたパイプライン処理を示す図である。
【符号の説明】
１０，３０，５０：マイクロコンピュータ
１２：ROM
１４，３４：マイクロプロセッサー
１６，５４：第１レジスタ
１８，５６：第２レジスタ
２０：コンパレーター
２２：マルチプレクサー
２４，３８：メモリ
２６：命令を上書きする回路ブロック
２８：データ・バス
３６：アドレスコントローラー
４０：選択手段
４２：レジスタ
４４：減算機
４６：デコーダー
５２：パイプラインコントローラー
５８：ストールコントローラー
６０：カウントレジスタ
６２：加算回路
６４：第１比較回路
６６：第２比較回路
６８：ＡＮＤ回路
７０：プログラムカウンタ
７２：ＯＲ回路
【図１】
0003828040.tif 000002
【図２】
0003828040.tif 000003
【図３】
0003828040.tif 000004
【図４】
0003828040.tif 000005
【図５】
0003828040.tif 000006
【図６】
0003828040.tif 000007
【図７】
0003828040.tif 000008
【図８】
0003828040.tif 000009
【図９】
0003828040.tif 000010
【図１０】
0003828040.tif 000011
【図１１】
0003828040.tif 000012
【図１２】
0003828040.tif 000013
【図１３】
0003828040.tif 000014
【図１４】
0003828040.tif 000015