(57)【特許請求の範囲】
【請求項１】
メモリに記憶されたプログラムの命令及びデータを先読みしその先読みした命令及びデータを先読みバッファに保持する命令及びデータの先読み方法において、
前記プログラム中に含まれる命令より前に、その命令の存在を示すとともにその命令のジャンプ先のアドレス又はデータのアドレスを付帯した擬似命令を設定し、
その擬似命令を含むプログラムの命令又はデータの先読み時に疑似命令かどうか検出し、擬似命令を検出したとき、その擬似命令に付帯したジャンプ先のアドレス又はデータのアドレスに基づく命令又はデータをメモリから先読みするようしたことを特徴とする命令及びデータの先読み方法。
【請求項２】
前記疑似命令は、無条件分岐命令、条件分岐命令、ＣＡＬＬ命令、データ呼び出しの命令の少なくともいずれか１の命令に対し、その命令の存在を示すことを特徴とする請求項１に記載の命令及びデータの先読み方法。
【請求項３】
前記疑似命令かどうかの検出は、前記メモリに対して前記先読みバッファと並列に接続された疑似命令検出部にて行い、そのメモリからの転送される命令又はデータを先読みバッファと並行して疑似命令検出部に入力させて検出するようにしたことを特徴とする請求項１又は請求項２に記載の命令及びデータの先読み方法。
【請求項４】
前記擬似命令を検出した時、前記疑似命令より後に転送されるその疑似命令に対応する命令が先読み用バッファに転送保持された後に、前記擬似命令に付帯したジャンプ先のアドレス又はデータのアドレスに基づく命令又はデータの先読みしを開始するようにしたことを特徴とする請求項１、請求項２又は請求項３に記載の命令及びデータの先読み方法。
【請求項５】
前記メモリから先読みされる擬似命令に付帯したジャンプ先のアドレス又はデータのアドレスに基づく命令又はデータを、前記先読みバッファとは別に設けた疑似命令用バッファに保持するようにしたことを特徴とする請求項１、請求項２、請求項３又は請求項４に記載の命令及びデータの先読み方法。
【請求項６】
前記擬似命令を検出したとき、擬似命令に付帯したジャンプ先のアドレス又はデータのアドレスに基づく命令又はデータが、少なくとも先読みバッファに保持されていないときに、前記ジャンプ先のアドレス又はデータのアドレスに基づく命令又はデータの先読みしを開始するようにしたことを特徴とする請求項１、請求項２、請求項３、請求項４又は請求項５に記載の命令及びデータの先読み方法。
【請求項７】
メモリに記憶されたプログラムの命令及びデータを先読みバッファに転送し、命令実行部がアドレスカウンタに基づいて前記先読みバッファから前記命令及びデータを読み出し解読し実行するマイクロコントローラにおいて、
先読みバッファに転送される前記プログラムの命令及びデータから、命令より前に該命令の存在を示すとともに該命令のジャンプ先のアドレス又はデータのアドレスを付帯した疑似命令を検出する疑似命令検出部と、
前記疑似命令検出部が疑似命令を検出したとき、該疑似命令の付帯したジャンプ先のアドレス又はデータのアドレスに基づく命令又はデータをメモリから先読みさせるアドレス制御部とを設けたことを特徴とするマイクロコントローラ。
【請求項８】
前記疑似命令は、無条件分岐命令、条件分岐命令、ＣＡＬＬ命令、データ呼び出しの命令の少なくともいずれか１の命令に対し、その命令の存在を示すことを特徴とする請求項７に記載のマイクロコントローラ。
【請求項９】
前記アドレス制御部に基づいて先読みされるジャンプ先のアドレス又はデータのアドレスに基づく命令又はデータを保持する疑似命令用バッファを備えたことを特徴とする請求項７又は請求項８に記載のマイクロコントローラ。
【請求項１０】
前記アドレス制御部は、前記擬似命令検出部が擬似命令を検出したとき、該擬似命令に付帯するジャンプ先のアドレス又はデータのアドレスに基づいて少なくとも先読みバッファにジャンプ先のアドレス又はデータのアドレスに基づく命令又はデータが保持されているかどうかチェックし、保持されていないとき、同ジャンプ先のアドレス又はデータのアドレスに基づく命令又はデータをメモリから先読みさせることを特徴とする請求項７、請求項８又は請求項９に記載のマイクロコントローラ。
【請求項１１】
前記疑似命令検出部は、前記メモリに対して前記先読みバッファと並列に接続されるように、メモリに対して先読みバッファとの間に接続されたデータ線からメモリから転送される命令又はデータを入力し、前記疑似命令及び同疑似命令に付帯するジャンプ先のアドレス又はデータのアドレスを検出するようにしたことを特徴とする請求項７、請求項８、請求項９又は請求項１０に記載のマイクロコントローラ。
【請求項１２】
転送されるオペコード及びオペランドをデータ線から入力し、特定の命令を事前に知らせるために予め設定された擬似命令のオペコードを検出する擬似命令検出回路において、
前記オペコードから求めたその命令長又はオペコードに続くオペランドの数とオペコード及びオペランドの転送周期とでオペコードの転送時期を検出し、オペランドが転送されている時、オペコードの検出動作を無効にし、オペコードが転送されている時、オペコードの検出動作を有効にする検出タイミング回路を設けたことを特徴とする擬似命令検出回路。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、命令及びデータを先読みする先読み機能を備えたマイクロコントローラに好適な命令及びデータの先読み方法、マイクロコントローラ、疑似命令検出回路に関するものである。
【０００２】
【従来の技術】
近年、マイクロコントローラの動作周波数の高速化に伴い、マイクロコントローラの動作速度は日々向上している。マイクロコントローラの動作速度が高速化する一方において、メモリ等の周辺回路の動作速度や、マイクロコントローラのインターフェイスの動作速度がマイクロコントローラの動作速度に追いつかないのが現状である。
【０００３】
そこで、マイクロコントローラはキャッシュメモリを備え、マイクロコントローラの高速動作に対応してシステム全体の処理速度を上げるようにしている。しかしながら、キャッシュメモリを備えたマイクロコントローラにおいても、キャッシュのミスヒットが生じた場合には、主メモリからキャッシュメモリにデータを転送しなければならない。その結果、その転送中、命令実行部は待機状態になることから処理速度は低下する。特に、分岐命令等の命令が多く用いられているプログラムではミスヒットする確率が多くなり、処理速度を著しく低下させる。
【０００４】
そこで、例えば特開平３−１９１４２７号公報において、キャッシュメモリと命令実行部の間にＦＩＦＯメモリを設け、即ちキャッシュメモリからＦＩＦＯメモリに入力された命令が分岐命令がどうかをＦＩＦＯメモリから読み出してチェックする。即ち、命令実行部で処理される前、分岐命令かどうかチェックする。そして、分岐命令である場合には、その分岐先アドレスとキャッシュタグメモリのタグ情報を比較する。そして、比較結果がミスヒットの場合には、その分岐命令の分岐先アドレスにより参照される主メモリのデータ群をキャッシュメモリに転送させる。つまり、命令実行部がその分岐命令を実行する前に検出し、その分岐後の命令を事前にキャッシュメモリに準備させるようにして、キャッシュメモリのミスヒット率を低下させるようにしている。
【０００５】
【発明が解決しようとする課題】
しかしながら、特開平３−１９１４２７号においては、分岐命令かどうかをチェックするために、読み出すための回路、デコード回路、分岐命令の分岐先アドレスを生成するための特別な回路等が必要であった。これら特別な回路は命令実行部と同程度の複雑な回路構成となり回路規模が大型化する問題があった。
【０００６】
又、バッファ（ＦＩＦＯメモリ）に取り込まれて初めて分岐命令かどうかチェックされるため、命令実行部の実行が速くＦＩＦＯメモリに順次取り込まれた命令が命令実行部に速く流れて行く場合には、その分岐後の命令を事前にキャッシュメモリに準備しておくのが遅れるといった問題が生じる。
【０００７】
さらに、特開平３−１９１４２７号においては、分岐命令を事前に検出し、その分岐先の命令を事前にキャッシュメモリに準備しておくことができるが、データについては事前にキャッシュメモリに準備しておくことができず、データの先読みには対応することができなかった。
【０００８】
本発明は、上記問題点を解消するためになされたものであって、その目的は簡単な回路を付加するだけで、命令やデータのミスヒット率を減らしシステム全体の処理速度の向上を図ることができる命令及びデータの先読み方法、マイクロコントローラ、疑似命令検出回路を提供することにある。
【０００９】
【課題を解決するための手段】
請求項１に記載の発明は、メモリに記憶されたプログラムの命令及びデータを先読みしその先読みした命令及びデータを先読みバッファに保持する命令及びデータの先読み方法において、前記プログラム中に含まれる命令より前に、その命令の存在を示すとともにその命令のジャンプ先のアドレス又はデータのアドレスを付帯した擬似命令を設定し、その擬似命令を含むプログラムの命令又はデータの先読み時に疑似命令かどうか検出し、擬似命令を検出したとき、その擬似命令に付帯したジャンプ先のアドレス又はデータのアドレスに基づく命令又はデータをメモリから先読みするようした。
請求項２に記載の発明は、請求項１に記載の命令及びデータの先読み方法において、疑似命令は、無条件分岐命令、条件分岐命令、ＣＡＬＬ命令、データ呼び出しの命令の少なくともいずれか１の命令に対し、その命令の存在を示す。
【００１０】
請求項３に記載の発明は、請求項１又は請求項２に記載の命令及びデータの先読み方法において、前記疑似命令かどうかの検出は、前記メモリに対して前記先読みバッファと並列に接続された疑似命令検出部にて行い、そのメモリからの転送される命令又はデータを先読みバッファと並行して疑似命令検出部に入力させて検出するようにした。
【００１１】
請求項４に記載の発明は、請求項１、請求項２又は請求項３に記載の命令及びデータの先読み方法において、前記擬似命令を検出した時、前記疑似命令より後に転送されるその疑似命令に対応する命令が先読み用バッファに転送保持された後に、前記擬似命令に付帯したジャンプ先のアドレス又はデータのアドレスに基づく命令又はデータの先読みしを開始するようにした。
【００１２】
請求項５に記載の発明は、請求項１、請求項２、請求項３又は請求項４に記載の命令及びデータの先読み方法において、前記メモリから先読みされる擬似命令に付帯したジャンプ先のアドレス又はデータのアドレスに基づく命令又はデータを、前記先読みバッファとは別に設けた疑似命令用バッファに保持するようにした。
【００１３】
請求項６に記載の発明は、請求項１、請求項２、請求項３、請求項４又は請求項５に記載の命令及びデータの先読み方法において、前記擬似命令を検出したとき、擬似命令に付帯したジャンプ先のアドレス又はデータのアドレスに基づく命令又はデータが、少なくとも先読みバッファに保持されていないときに、前記ジャンプ先のアドレス又はデータのアドレスに基づく命令又はデータの先読みしを開始するようにした。
【００１４】
請求項７に記載の発明は、メモリに記憶されたプログラムの命令及びデータを先読みバッファに転送し、命令実行部がアドレスカウンタに基づいて前記先読みバッファから前記命令及びデータを読み出し解読し実行するマイクロコントローラにおいて、先読みバッファに転送される前記プログラムの命令及びデータから、命令より前に該命令の存在を示すとともに該命令のジャンプ先のアドレス又はデータのアドレスを付帯した疑似命令を検出する疑似命令検出部と、前記疑似命令検出部が疑似命令を検出したとき、該疑似命令の付帯したジャンプ先のアドレス又はデータのアドレスに基づく命令又はデータをメモリから先読みさせるアドレス制御部とを設けた。
請求項８に記載の発明は、請求項７に記載のマイクロコントローラにおいて、疑似命令は、無条件分岐命令、条件分岐命令、ＣＡＬＬ命令、データ呼び出しの命令の少なくともいずれか１の命令に対し、その命令の存在を示す。
【００１５】
請求項９に記載の発明は、請求項７又は請求項８に記載のマイクロコントローラにおいて、前記アドレス制御部に基づいて先読みされるジャンプ先のアドレス又はデータのアドレスに基づく命令又はデータを保持する疑似命令用バッファを備えた。
【００１６】
請求項１０に記載の発明は、請求項７、請求項８又は請求項９に記載のマイクロコントローラにおいて、前記アドレス制御部は、前記擬似命令検出部が擬似命令を検出したとき、該擬似命令に付帯するジャンプ先のアドレス又はデータのアドレスに基づいて少なくとも先読みバッファにジャンプ先のアドレス又はデータのアドレスに基づく命令又はデータが保持されているかどうかチェックし、保持されていないとき、同ジャンプ先のアドレス又はデータのアドレスに基づく命令又はデータをメモリから先読みさせる。
【００１７】
請求項１１に記載の発明は、請求項７、請求項８、請求項９又は請求項１０に記載のマイクロコントローラにおいて、前記疑似命令検出部は、前記メモリに対して前記先読みバッファと並列に接続されるように、メモリに対して先読みバッファとの間に接続されたデータ線からメモリから転送される命令又はデータを入力し、前記疑似命令及び同疑似命令に付帯するジャンプ先のアドレス又はデータのアドレスを検出する。
【００１８】
請求項１２に記載の発明は、転送されるオペコード及びオペランドをデータ線から入力し、特定の命令を事前に知らせるために予め設定された擬似命令のオペコードを検出する擬似命令検出回路において、前記オペコードから求めたその命令長又はオペコードに続くオペランドの数とオペコード及びオペランドの転送周期とでオペコードの転送時期を検出し、オペランドが転送されている時、オペコードの検出動作を無効にし、オペコードが転送されている時、オペコードの検出動作を有効にする検出タイミング回路を設けた。
【００２０】
（作用）
請求項１に記載の発明によれば、疑似命令は対応する命令より先に先読みバッファに転送されるため、疑似命令と対応する命令は転送される前に事前にわかる。そして、擬似命令に付帯したジャンプ先のアドレス又はデータのアドレスに基づく命令又はデータをメモリから先読みすることから、疑似命令は対応する命令が命令実行部で実行される時、ミスヒットすることなく直ちにその分岐先アドレスの命令又はデータを命令実行部に取り込むことができる。
請求項２に記載の発明によれば、疑似命令では、無条件分岐命令、条件分岐命令、ＣＡＬＬ命令、データ呼び出しの命令の少なくともいずれか１の命令に対し、その命令の存在が示される。
【００２１】
請求項３に記載の発明によれば、先読みされるメモリからの命令又はデータは、先読みバッファに転送されると同時に疑似命令検出部に転送され疑似命令かどうかが検出される。従って、疑似命令の検出は、先読みバッファに保持された後でなく、メモリから転送された時に検出がなされるため、より早い時期に疑似命令の検出ができる。その結果、擬似命令に付帯したジャンプ先のアドレス又はデータのアドレスに基づく命令又はデータをメモリから先読みする時期をより早くすることができる。又、疑似命令検出部は、先読みバッファに保持された命令又はデータを用いて疑似命令を検出するのではなく、メモリから先読みのために転送されてくる命令又はデータを直接入力し検出している。従って、疑似命令検出部は、先読みバッファとの間で命令又はデータを読み出すための特別な回路を必要としない簡単な回路で構成することができる。
【００２２】
請求項４に記載の発明によれば、疑似命令に対応する命令が先読み用バッファに保持された後に、前記擬似命令に付帯したジャンプ先のアドレス又はデータのアドレスに基づく命令又はデータの先読みを開始するため、ジャンプ先のアドレス又はデータのアドレスに基づく命令又はデータを優先して転送している途中において、先読みバッファに基づく命令が全て命令実行部で実行処理されてしまって待機状態となることはない。
【００２３】
請求項５に記載の発明によれば、先読みバッファとは別に設けた疑似命令用バッファを設け、その疑似命令用バッファに擬似命令に付帯したジャンプ先のアドレス又はデータのアドレスに基づく命令又はデータを保持させるようにした。従って、擬似命令に付帯したジャンプ先のアドレス又はデータのアドレスに基づく命令又はデータを先読みして疑似命令用バッファに保持している間、命令実行部は先読みバッファから命令又はデータを読み出し解読及び処理を実行することができる。
【００２４】
請求項６に記載の発明によれば、擬似命令を検出した時、該擬似命令に付帯するジャンプ先のアドレス又はデータのアドレスに基づいて少なくとも先読みバッファにジャンプ先のアドレス又はデータのアドレスに基づく命令又はデータが保持されてない場合に、メモリから先読み行う。従って、無駄な先読みがなくなり効率の良い先読み処理を行なうことができる。
【００２５】
請求項７に記載の発明によれば、疑似命令は対応する命令より先に先読みバッファに転送されるとともに、疑似命令検出部にて該疑似命令は対応する命令が転送される前に事前にわかる。そして、アドレス制御部にて擬似命令に付帯したジャンプ先のアドレス又はデータのアドレスに基づく命令又はデータはメモリから先読みされる。従って、疑似命令は対応する命令が命令実行部で実行される時、ミスヒットすることなく直ちにその分岐先アドレスの命令又はデータは命令実行部に取り込むことができる。
請求項８に記載の発明によれば、疑似命令では、無条件分岐命令、条件分岐命令、ＣＡＬＬ命令、データ呼び出しの命令の少なくともいずれか１の命令に対し、その命令の存在が示される。
【００２６】
請求項９に記載の発明によれば、先読みバッファとは別に設けた疑似命令用バッファを設け、その疑似命令用バッファに擬似命令に付帯したジャンプ先のアドレス又はデータのアドレスに基づく命令又はデータが保持される。従って、擬似命令に付帯したジャンプ先のアドレス又はデータのアドレスに基づく命令又はデータを先読みして疑似命令用バッファに保持している間、命令実行部は先読みバッファから命令又はデータを読み出し解読及び処理を実行することができる。
【００２７】
請求項１０に記載の発明によれば、アドレス制御部は擬似命令検出部が擬似命令を検出したとき、該擬似命令に付帯するジャンプ先のアドレス又はデータのアドレスに基づいて少なくとも先読みバッファにジャンプ先のアドレス又はデータのアドレスに基づく命令又はデータが保持されてない場合のみに、メモリから先読みさせる。従って、無駄な先読みがなくなり効率の良い先読み処理を行なうことができる。
【００２８】
請求項１１に記載の発明によれば、メモリからの命令又はデータは、先読みバッファに転送されると同時に疑似命令検出部に転送され疑似命令かどうかが検出される。従って、疑似命令の検出は、先読みバッファに保持された後でなく、メモリから転送された時に検出がなされるため、より早い時期に疑似命令の検出ができる。その結果、擬似命令に付帯したジャンプ先のアドレス又はデータのアドレスに基づく命令又はデータをメモリから先読みする時期をより早くすることができる。又、疑似命令検出部は、先読みバッファに保持された命令又はデータを用いて疑似命令を検出するのではなく、メモリから先読みのために転送されてくる命令又はデータを直接入力し検出している。従って、疑似命令検出部は、先読みバッファとの間で命令又はデータを読み出すための特別な回路を必要としない簡単な回路となる。
【００２９】
請求項１２に記載の発明によれば、擬似命令検出回路は、検出タイミング回路により、データ線にオペコードが転送されている時、その転送されているオペコードの検出する。従って、検出タイミング回路により、オペランドに擬似命令のオペコードと同じ値が存在した場合でもそのオペランドを擬似命令のオペコードと誤検出することはない。
【００３１】
【発明の実施の形態】
（第１実施形態）
以下、本発明を具体化した一実施形態を図１〜図４に従って説明する。図１はは、マイクロコントローラの要部ブロック回路を示す。
【００３２】
図１において、マイクロコントローラ１０は、先読み回路部１１と命令実行部１２を備えている。マイクロコントローラ１０は１チップの半導体集積回路装置で形成されている。
【００３３】
先読み回路部１１は、メモリとしてのメインメモリ１３からプログラムの命令及びデータを順次入力し保持する。命令実行部１２は、アドレスカウンタ１４が示すアドレスＡＤを先読み回路部１１に出力し、そのアドレスＡＤの命令又はデータを先読み回路部１１に要求する。先読み回路部１１はその要求に応じて命令又はデータを命令実行部１２に出力する。そして、命令実行部１２は取り込んだ命令又はデータを解読し必要な処理動作を実行する。
【００３４】
又、先読み回路部１１は、メインメモリ１３から転送されてくるプログラムの命令及びデータのうち予め用意されている疑似命令が転送されてきたかどうかチェックするようになっている。
【００３５】
ここで疑似命令とは、組み立てられたプログラム中に存在する分岐命令の前に存在し、その分岐命令の存在を事前に示すための命令である。従って、疑似命令が転送されて来たとき、疑似命令の後にその疑似命令に対応する分岐命令が転送されてくることがわかる。又、この疑似命令は、前記命令実行部１２ではノーオペレーション（ＮＯＰ）命令と同じに取り扱われるように定義されている。
【００３６】
尚、本実施形態では、分岐命令は、無条件分岐命令、条件分岐命令、ＣＡＬＬ命令、及び、データ呼び出しの命令を含む。又、本実施形態では、疑似命令のオペコードは、アセンブラで「１、１、１、１」が割り当てられている。
【００３７】
疑似命令は、命令長が４であって、「命令（オペコード）」、「付加情報（オペランド）」、「上位アドレス（オペランド）」及び「下位アドレス（オペランド）」の順に構成されている。上位アドレスは疑似命令に対応する分岐命令が示す分岐先アドレスＡＤＸ中の上位アドレスを示し、下位アドレスは疑似命令に対応する分岐命令が示す分岐先アドレスＡＤＸ中の下位アドレスを示す。
【００３８】
先読み回路部１１は、疑似命令が転送されると、その疑似命令に付帯する分岐命令が示す分岐先アドレスＡＤＸに対応するプログラムの命令を前記メインメモリ１３から取り込むようになっている。従って、疑似命令の後に転送された分岐命令が命令実行部１２で実行される時には、その分岐先アドレスＡＤＸの命令は既に先読み回路部１１に用意されていることから、ミスヒットすることなく直ちにその分岐先アドレスＡＤＸの命令は命令実行部１２に取り込まれることになる。
【００３９】
図１において、先読み回路部１１は、疑似命令検出部２１、ＦＩＦＯ（ファーストインファーストアウト）メモリよりなる先読みバッファ２２、先読みバッファ用タグメモリ（以下、第１タグという）２３、ＦＩＦＯ（ファーストインファーストアウト）メモリよりなる疑似命令用バッファ２４、疑似命令用バッファ用タグメモリ（以下、第２タグという）２５、アドレス制御部２６、第１及び第２ゲート回路２７，２８、及び、バイパスゲート回路２９を備えている。
【００４０】
疑似命令検出部２１は、メインメモリ１３と先読みバッファ２２との間に設けられ、メインメモリ１３から先読みバッファ２２に順次転送されるプログラムの命令及びデータが疑似命令かどうかチェックする。詳述すると、図２に示すように、疑似命令検出部２１は、メインメモリ１３と先読みバッファ２２との間を結ぶ４ビットのデータ線ＤＬ０〜ＤＬ３に接続され、メインメモリ１３から先読みバッファ２２に順次転送される命令及びデータを直接入力する。
【００４１】
疑似命令検出部１１は、疑似命令検出回路３１、シフトレジスタ３２、付加情報保持回路３３、上位アドレス保持回路３４、下位アドレス保持回路３５とから構成されている。
【００４２】
疑似命令検出回路３１は４入力端子を備えたアンド回路にて構成されていて、その４入力端子は対応するデータ線ＤＬ０〜ＤＬ３に接続されている。疑似命令検出回路３１は、データ線ＤＬ０〜ＤＬ３に転送されている命令又はデータが全てＨレベル（高電位）、即ち「１，１，１，１」の時、該転送されている命令が疑似命令であるとしてＨレベルなる検出信号ＳＸを次段のシフトレジスタ３２に出力する。尚、転送されている命令が疑似命令でないとき、データ線ＤＬ０〜ＤＬ３のうちすくなくとも１つのデータがＬレベル（低電位）になる。従って、疑似命令検出回路３１はＬレベルなる検出信号ＳＸをシフトレジスタ３２に出力する。
【００４３】
シフトレジスタ３２は、検出信号ＳＸの他にリードストローブ信号ＲＳＴを入力する。リードストローブ信号ＲＳＴは、マイクロコントローラ１０内で生成されるクロック信号であって、このリードストローブ信号ＲＳＴの周期で、メインメモリ１３からの命令及びデータが読み込まれるようになっている。
【００４４】
シフトレジスタ３２は３出力端子を備え、各出力端子から対応する保持回路３３〜３５に対して保持信号ＳＦＡ，ＳＦＢ，ＳＦＣを出力するようになっている。つまり、図４に示すように、シフトレジスタ３２は、Ｈレベルの検出信号ＳＸを入力しリードストローブ信号ＲＳＴのＬレベルからＨレベルの立ち上がりで保持する。その保持した状態で、シフトレジスタ３２は次の新たなリードストローブ信号ＲＳＴがＬレベルからＨレベルの立ち上がると、保持信号ＳＦＡのみをＨレベルにする。そして、保持信号ＳＦＡがＨレベルの状態で次のリードストローブ信号ＲＳＴがＬレベルからＨレベルの立ち上がると、シフトレジスタ３２は保持信号ＳＦＡをＬレベルにし保持信号ＳＦＢのみをＨレベルにする。さらに、保持信号ＳＦＢがＨレベルの状態で次のリードストローブ信号ＲＳＴがＬレベルからＨレベルの立ち上がると、シフトレジスタ３２は保持信号ＳＦＢをＬレベルにし保持信号ＳＦＣのみをＨレベルにする。そして、保持信号ＳＦＣのみがＨレベルの状態で、次のリードストローブ信号ＲＳＴがＬレベルからＨレベルの立ち上がると、シフトレジスタ３２は全ての保持信号ＳＦＡ，ＳＦＢ，ＳＦＣをＬレベルにする。
【００４５】
付加情報保持回路３３は、４個のＤ型フリップフロップにて構成されている。各Ｄ型フリップフロップのデータ入力端子は対応するデータ線ＤＬ０〜ＤＬ３に接続されている。各Ｄ型フリップフロップの制御入力端子には保持信号ＳＦＡが入力される。そして、各Ｄ型フリップフロップは、保持信号ＳＦＡのＨレベルの立ち上がりに応答して、その時のデータ線ＤＬ０〜ＤＬ３に転送されている内容を保持する。
【００４６】
つまり、付加情報保持回路３３は、４ビットの疑似命令の転送後であって、次のリードストローブ信号ＲＳＴに基づいて転送される該疑似命令のための４ビットよりなる「付加情報」を保持信号ＳＦＡに応答して保持するようになっている。
【００４７】
上位アドレス保持回路３４は、４個のＤ型フリップフロップにて構成されている。各Ｄ型フリップフロップのデータ入力端子は対応するデータ線ＤＬ０〜ＤＬ３に接続されている。各Ｄ型フリップフロップの制御入力端子には保持信号ＳＦＢが入力される。そして、各Ｄ型フリップフロップは、保持信号ＳＦＢのＨレベルの立ち上がりに応答して、その時のデータ線ＤＬ０〜ＤＬ３に転送されている内容を保持する。
【００４８】
つまり、上位アドレス保持回路３４は、前記４ビットの「付加情報」の転送後であって、次のリードストローブ信号ＲＳＴに基づいて転送される８ビットよりなる分岐先アドレスＡＤＸ中の上位４ビットのアドレス、即ち「上位アドレス」を保持信号ＳＦＢに応答して保持するようになっている。
【００４９】
下位アドレス保持回路３５は、４個のＤ型フリップフロップにて構成されている。各Ｄ型フリップフロップのデータ入力端子は対応するデータ線ＤＬ０〜ＤＬ３に接続されている。各Ｄ型フリップフロップの制御入力端子には保持信号ＳＦＣが入力される。そして、各Ｄ型フリップフロップは、保持信号ＳＦＣのＨレベルの立ち上がりに応答して、その時のデータ線ＤＬ０〜ＤＬ３に転送されている内容を保持する。
【００５０】
つまり、下位アドレス保持回路３５は、前記４ビットの「上位アドレス」の転送後であって、次のリードストローブ信号ＲＳＴに基づいて転送される前記８ビットよりなる分岐先アドレスＡＤＸ中の下位４ビットのアドレス、即ち「下位アドレス」を保持信号ＳＦＣに応答して保持するようになっている。
【００５１】
従って、上位アドレス保持回路３４が保持している「上位アドレス」と、下位アドレス保持回路３５が保持している「下位アドレス」をあわせることによって、リードストローブ信号ＲＳＴの二周期で転送される疑似命令に付帯させた分岐先のアドレスＡＤＸが求まることになる。
【００５２】
先読みバッファ２２は、前記メインメモリ１３とデータ線ＤＬ０〜ＤＬ３を介して接続されている。先読みバッファ２２は、アドレス制御部２６からの第１の取り込み信号ＲＳＴ１に基づいてメインメモリ１３から順次転送されるプログラムの命令及びデータを取り込むようになっている。先読みバッファ２２は、第１ゲート回路２７を介して前記命令実行部１２に接続されている。そして、先読みバッファ２２に取り込まれた命令及びデータは、アドレス制御部２６からの第１のゲート信号ＳＧ１にて第１ゲート回路２７が開くことにより命令実行部１２に転送されるようになっている。
【００５３】
第１タグ２３は、先読みバッファ２２に取り込まれた命令及びデータにおける先頭アドレスと最終アドレスを記憶している。
疑似命令用バッファ２４は、前記メインメモリ１３とデータ線ＤＬ０〜ＤＬ３を介して接続されている。疑似命令用バッファ２４は、アドレス制御部２６からの第２の取り込み信号ＲＳＴ２に基づいてメインメモリ１３から順次転送されるプログラムの命令及びデータを取り込むようになっている。本実施形態では、前記疑似命令検出部１１が疑似命令を検出し、メインメモリ１３から転送されるその疑似命令に付帯した分岐先アドレスＡＤＸに対応するプログラムの命令及びデータが、疑似命令用バッファ２４に取り込まれるようになっている。
【００５４】
疑似命令用バッファ２４は、第２ゲート回路２８を介して前記命令実行部１２に接続されている。そして、疑似命令用バッファ２４に取り込まれた命令及びデータは、アドレス制御部２６からの第２のゲート信号ＳＧ２にて第２ゲート回路２８が開くことにより命令実行部１２に転送されるようになっている。
【００５５】
第２タグ２５は、疑似命令用バッファ２４に取り込まれた命令及びデータにおける先頭アドレスと最終アドレスを記憶している。
又、メインメモリ１３はバイパスゲート回路２９を介して前記命令実行部１２に接続されている。そして、メインメモリ１３から転送される命令及びデータは、アドレス制御部２６からのバイパス信号ＢＰＳにてバイパスゲート回路２９が開くことにより命令実行部１２に転送されるようになっている。
【００５６】
つまり、本実施形態では、メインメモリ１３から各バッファ２３，２４への命令及びデータの取り込み及び各バッファ２３，２４から命令実行部１２への命令及びデータの転送は、アドレス制御部２６が行っている。
【００５７】
図３は、アドレス制御部２６を説明するための回路構成を示す。
図３において、先読み用アドレス比較回路４１は、前記命令実行部１２のアドレスカウンタ１４が示すアドレスＡＤと前記第１タグ２３が保持しているアドレスとを入力して両アドレスを比較する。そして、アドレスカウンタ１４が示すアドレスＡＤと第１タグ２３のアドレスが一致する場合、先読み用アドレス比較回路４１はＬレベルの第１のゲート信号ＳＧ１を第１ゲート回路２７に出力する。従って、Ｌレベルの第１のゲート信号ＳＧ１に応答して第１ゲート回路２７は開く。その結果、アドレスカウンタ１４のアドレスＡＤと一致するアドレスの命令又はデータは、先読みバッファ２２から読み出され、第１ゲート回路２７を介して命令実行部１２に転送される。
【００５８】
反対に、アドレスカウンタ１４が示すアドレスＡＤと先頭アドレスが一致しない場合、先読み用アドレス比較回路４１はＨレベルの第１のゲート信号ＳＧ１を第１ゲート回路２７に出力する。従って、Ｈレベルの第１のゲート信号ＳＧ１に応答して第１ゲート回路２７は閉じる。その結果、先読みバッファ２２の先頭アドレスにある命令又はデータは、第１ゲート回路２７を介して命令実行部１２に転送されない。
【００５９】
疑似命令用アドレス比較回路４２は、前記命令実行部１２のアドレスカウンタ１４が示すアドレスＡＤと前記第２タグ２５が保持しているアドレスとを入力して両アドレスを比較する。そして、アドレスカウンタ１４が示すアドレスＡＤと第２タグ２６のアドレスが一致する場合、疑似命令用アドレス比較回路４２は、Ｌレベルの第２のゲート信号ＳＧ２を第２ゲート回路２８に出力する。従って、Ｌレベルの第２のゲート信号ＳＧ２に応答して第２ゲート回路２８は開く。その結果、アドレスカウンタ１４のアドレスＡＤと一致するアドレスの命令又はデータは、疑似命令用バッファ２４から読み出されて、第２ゲート回路２８を介して命令実行部１２に転送される。
【００６０】
反対に、アドレスカウンタ１４が示すアドレスＡＤと第２タグ２５のアドレスが一致しない場合、疑似命令用アドレス比較回路４２はＨレベルの第２のゲート信号ＳＧ２を第２ゲート回路２８に出力する。従って、Ｈレベルの第２のゲート信号ＳＧ２に応答して第２ゲート回路２８は閉じる。その結果、疑似命令用バッファ２４の命令又はデータは、第２ゲート回路２８を介して命令実行部１２に転送されない。
【００６１】
ナンド回路４３は、第１及び第２のゲート信号ＳＧ１，ＳＧ２を入力する。そして、第１及び第２のゲート信号ＳＧ１，ＳＧ２が共にＨレベルの時（先読み用及び疑似命令用アドレス比較回路４１，４２が共にアドレスＡＤと先頭アドレスが一致しないと判断した時）に、ナンド回路４３はＬレベルの出力信号を出力する。Ｌレベルの出力信号は、待機信号ＷＴとして命令実行部１２に出力する。
【００６２】
そして、命令実行部１２は、Ｌレベルの待機信号ＷＴに応答として命令実行部１２は必要な処理動作を停止する。つまり、待機信号ＷＴがＬレベルの時には新たな命令又はデータが先読みバッファ２２及び疑似命令用バッファ２４から取り込まれないため、命令実行部１２は必要な処理動作を実行することができず、新たな命令又はデータの取り込みを待つ。
【００６３】
又、このナンド回路４３の出力信号（待機信号ＷＴ）は、第３のゲート信号ＳＧ３として第１アドレスゲート回路４４に出力される。第１アドレスゲート回路４４は、アドレスカウンタ１４が示すアドレスＡＤを入力する。第１アドレスゲート回路４４は、Ｌレベルの第３のゲート信号ＳＧ３を入力したとき、アドレスカウンタ１４のアドレスＡＤを次段の第２アドレスゲート回路４５に出力する。第２アドレスゲート回路４５は、第１アドレスゲート回路４４を介してアドレスカウンタ１４のアドレスＡＤを入力すると、該アドレスＡＤをメインメモリ１３に出力する。従って、メインメモリ１３は、該アドレスＡＤの命令及びデータを読み出し先読み回路部１１に出力することになる。
【００６４】
又、このナンド回路４３の出力信号（待機信号ＷＴ）は、バイパス信号ＢＰＳとしてバイパスゲート回路２９に出力される。そして、Ｌレベルのバイパス信号ＢＰＳに応答してバイパスゲート回路２９が開くことにより、メインメモリ１３から取り込まれる命令及びデータは同バイパスゲート回路２９を介して命令実行部１２に直接転送される。反対に、Ｈレベルのバイパス信号ＢＰＳがＨレベルのときバイパスゲート回路２９は閉じる。バイパスゲート回路２９は閉じることにより、メインメモリ１３から取り込まれる命令及びデータは同バイパスゲート回路２９を介して命令実行部１２に転送されることはない。
【００６５】
つまり、命令実行部１２は、先読みバッファ２２及び疑似命令用バッファ２４にアドレスカウンタ１４が示すアドレスＡＤの命令又はデータがない場合のときにメインメモリ１３から転送される命令及びデータをバイパスゲート回路２９を介して直接取り込むことができるようになっている。
【００６６】
先読み用アドレス保持回路４６は、前記第１タグ２３が保持しているその時の最終アドレスを入力しメインメモリ１３から次に先読みバッファ２２に取り込むアドレス（最終アドレスの次のアドレス）を生成し保持する。又、先読み用アドレス保持回路４６は先読みバッファ２２に対してメインメモリ１３からの命令及びデータがこれ以上取り込めないフル状態においては、これ以上の取り込みはできない旨のフルアドレスを生成し保持するようになっている。
【００６７】
先読み用アドレスゲート回路４７は、先読み用アドレス保持回路４６が保持するアドレスを入力するとともに、前記待機信号ＷＴを入力する。
先読み用アドレスゲート回路４７は、Ｈレベルの待機信号ＷＴを入力している時、第１タグ２３が保持しているアドレス（最終アドレスの次のアドレス）を第２アドレスゲート回路４５に出力する。この時、先読み用アドレスゲート回路４７は、第１取り込み信号ＲＳＴ１を生成し、該信号ＲＳＴ１を先読みバッファ２２に出力する。
第２アドレスゲート回路４５は、先読み用アドレスゲート回路４７を介して先読み用アドレス保持回路４６が保持するアドレスを入力すると、該アドレスをメインメモリ１３に出力する。従って、メインメモリ１３は、該アドレスの命令及びデータを読み出し先読み回路部１１に出力することになる。そして、先読み回路部１１の先読みバッファ２２は、前記第１取り込み信号ＲＳＴ１に応答してメインメモリ１３からの命令及びデータを取り込むようになっている。
【００６８】
疑似命令用アドレス保持回路４８は、前記第２タグ２５が保持しているその時の最終アドレスを入力しメインメモリ１３から次に疑似命令用バッファ２４に取り込むアドレス（最終アドレスの次のアドレス）を生成し保持する。又、疑似命令用アドレス保持回路４８は疑似命令用バッファ２４に対してメインメモリ１３からの命令及びデータがこれ以上取り込めないフル状態においては、これ以上の取り込みはできない旨のフルアドレスを生成し保持するようになっている。
【００６９】
疑似命令用アドレスゲート回路４９は、疑似命令用アドレス保持回路４８が保持するアドレスを入力するとともに、前記待機信号ＷＴを入力する。又、疑似命令用アドレスゲート回路４９は、疑似命令検出部３１からの分岐先アドレスＡＤＸを入力する。
【００７０】
疑似命令用アドレスゲート回路４９は、Ｈレベルの待機信号ＷＴを入力している時、分岐先アドレスＡＤＸ又は疑似命令バッファ用タグメモリ２５が保持しているアドレス（最終アドレスの次のアドレス）を第２アドレスゲート回路４５に出力する。この時、疑似命令用アドレスゲート回路４９は、第２取り込み信号ＲＳＴ２を生成し、該信号ＲＳＴ２を疑似命令用バッファ２４に出力する。
【００７１】
第２アドレスゲート回路４５は、疑似命令検出部３１からの分岐先アドレスＡＤＸ又は疑似命令用アドレス保持回路４８が保持するアドレスを入力すると、該アドレスをメインメモリ１３に出力する。従って、メインメモリ１３は、該アドレスの命令及びデータを読み出し先読み回路部１１に出力することになる。そして、先読み回路部１１の疑似命令用バッファ２４は、前記第２取り込み信号ＲＳＴ２に応答してメインメモリ１３からの命令及びデータを取り込むようになっている。
【００７２】
又、本実施形態では、第２アドレスゲート回路４５は、第１アドレスゲート回路４４、先読みアドレスゲート回路４７及び疑似命令用アドレスゲート回路４９からそれぞれアドレスを入力するが、第１アドレスゲート回路４４のアドレスを優先的に選択し、その次に第２アドレスゲート回路４５のアドレスを選択するようになっている。又、本実施形態では、説明の便宜上、疑似命令用アドレスゲート回路４９のアドレスが選択されたとき、第１アドレスゲート回路４４からのアドレスの入力を除き先読みアドレスゲート回路４７からのアドレスの入力があっても、疑似命令用アドレスゲート回路４９のアドレスがフルアドレスになるまで選択し続けるようにしている。そして、選択されたアドレスはメインメモリ１３に出力されるようになっている。
【００７３】
次に上記のように構成したマイクロコントローラ１０の作用について説明する。
今、疑似命令用バッファ２４は何も記憶されていない状態で、メインメモリ１３から先読みバッファ２２にプログラムの命令及びデータがデータ線ＤＬ０〜ＤＬ３を介して順次転送されている場合について説明する。又、先読みバッファ２２に転送されたプログラムの命令及びデータが命令実行部１２に順次転送され実行処理されている。従って、アドレス制御回路部２６の先読み用アドレス比較回路４１は第１のゲート信号ＳＧ１を出力するとともに、ナンド回路４３を介して出力される待機信号ＷＴはＨレベルとなっている。
【００７４】
又、アドレス制御回路部２６の先読み用アドレスゲート回路４７は、第１取り込み信号ＲＳＴ１を出力している。さらに、疑似命令用バッファ２４は何も記憶されていない状態で、アドレス制御回路部２６の疑似命令用アドレスゲート回路４９は第２取り込み信号ＲＳＴ２を出力していない。
【００７５】
従って、第２アドレスゲート回路４５は、先読みアドレスゲート回路４７を介して先読み用アドレス保持回路４６からのアドレスを選択して該アドレスをメインメモリ１３に転送している。
【００７６】
このような状態において、疑似命令検出部２１の疑似命令検出回路３１はそのデータ線ＤＬ０〜ＤＬ３を先読みバッファ２２に転送されていくプログラムの命令及びデータを入力する。そして、疑似命令検出回路３１が、「１，１，１，１」なる疑似命令のオペコードを検出すると、疑似命令検出部２１の上位アドレス保持回路３４及び下位アドレス保持回路３５において、前記疑似命令に付帯させた分岐先のアドレスＡＤＸが保持される。上位アドレス保持回路３４及び下位アドレス保持回路３５に保持された前記疑似命令に付帯させた分岐先のアドレスＡＤＸは、アドレス制御回路部２６の疑似命令用アドレスゲート回路４９に出力される。
【００７７】
疑似命令用アドレスゲート回路４９は、この時点では待機信号ＷＴはＨレベルであり、疑似命令用アドレス保持回路４８は疑似命令用バッファ２４は何も記憶されていないことから、このアドレスＡＤＸを第２アドレスゲート回路４５に出力する。第２アドレスゲート回路４５は、このアドレスＡＤＸを入力すると、先読み用アドレス回路４７からのアドレスがフルアドレスかどうかチェックし、フルアドレスになるまで該アドレスＡＤＸを選択しない。そして、先読み用アドレス回路４７からのアドレスがフルアドレスになると、第２アドレスゲート回路４５は、該アドレスＡＤＸを選択しメインメモリ１３に出力する。該アドレスＡＤＸを選択されると、疑似命令用アドレスゲート回路４９は、第２の取り込み信号ＲＳＴ２を出力する。又、第２アドレスゲート回路４５は、フルアドレスになると、第１の取り込み信号ＲＳＴ１を消失させる。
【００７８】
メインメモリ１３はこのアドレスＡＤＸの命令及びデータを読み出し出力する。この時、疑似命令用アドレスゲート回路４９は、第２取り込み信号ＲＳＴ２を出力しているため、このアドレスＡＤＸの命令及びデータは、疑似命令用バッファ２４に転送される。
【００７９】
アドレスＡＤＸの命令及びデータが疑似命令用バッファ２４に転送されると、第２タグ２５を介して疑似命令用アドレス保持回路４８から疑似命令用アドレスゲート回路４９にアドレスＡＤＸに１加算したアドレスが出力される。疑似命令用アドレスゲート回路４９はこのアドレスＡＤＸに１加算したアドレスを第２アドレスゲート回路４５を介してメインメモリ１３に出力する。アドレスＡＤＸに１加算したアドレスの命令及びデータが読み出され疑似命令用バッファ２４に転送される。
【００８０】
以後、同様な動作が繰り返されて、疑似命令用バッファ２４に分岐先のアドレスＡＤＸを先頭に命令及びデータが記憶される。
やがて、疑似命令用バッファ２４がこれ以上命令及びデータを取り込めないフル状態になると、疑似命令用アドレス保持回路４８からフルアドレスを示すデータが疑似命令用アドレスゲート回路４９に出力される。
【００８１】
疑似命令用アドレスゲート回路４９はこのフルアドレスを示すデータに基づいて第２の取り込み信号ＲＳＴ２の生成を停止し該信号ＲＳＴ２の疑似命令用バッファ２４への出力を停止する。又、疑似命令用アドレスゲート回路４９はこのフルアドレスを示すデータを第２アドレスデータゲート回路４５に出力する。
【００８２】
第２アドレスデータゲート回路４５は、フルアドレスを示すデータに基づいて前記先読み用アドレスゲート回路４７のアドレスを選択する状態になる。前記先読み用アドレスゲート回路４７は、第１タグ２３に基づくアドレスを第２アドレスデータゲート回路４５に出力するとともに、第１の取り込み信号ＲＳＴ１を先読みバッファ２２に出力する。
【００８３】
メインメモリ１３はこの先読み用アドレス保持回路４６からのアドレスの命令及びデータを読み出し出力する。この時、先読み用アドレスゲート回路４７は、第１取り込み信号ＲＳＴ１を出力しているため、このアドレスの命令及びデータは、先読みバッファ２２に転送される。即ち、先読みバッファ２２への命令及びデータの転送が再開される。
【００８４】
アドレスの命令及びデータが先読みバッファ２２に転送されると、先読み用アドレス保持回路４６から先読み用アドレスゲート回路４７に先のアドレスに１加算したアドレスが出力される。先読み用アドレスゲート回路４７はこの１加算されたアドレスを第２アドレスゲート回路４５を介してメインメモリ１３に出力する。１加算されたアドレスの命令及びデータが読み出され先読みバッファ２２に転送される。
【００８５】
以後、同様な動作が繰り返されて、先読みバッファ２２に命令及びデータが記憶される。やがて、先読みバッファ２２がこれ以上命令及びデータを取り込めないフル状態に再びなると、先読み用アドレス保持回路４６からフルアドレスを示すデータが先読み用アドレスゲート回路４７に出力される。
【００８６】
先読み用アドレスゲート回路４７はこのフルアドレスを示すデータに基づいて第１の取り込み信号ＲＳＴ１の生成を停止し該信号ＲＳＴ１の先読みバッファ２２への出力を停止する。又、先読み用アドレスゲート回路４７はこのフルアドレスを示すデータを第２アドレスデータゲート回路４５に出力する。
【００８７】
第２アドレスデータゲート回路４５は、フルアドレスを示すデータに基づいて前記先読み用アドレスゲート回路４７のアドレスを非選択にする状態になり、メインメモリ１３にアドレスを出力するのを停止する。
【００８８】
次に、上記のように構成したマイクロコントローラの特徴について述べる。
（１）本実施形態では、組み立てられたプログラムにおいて、そのプログラム中に存在する分岐命令の前にその分岐命令の存在を事前に示すための疑似命令を設けた。そして、組み立てられたプログラムの命令及びデータを先読みバッファ２２に転送する途中において、疑似命令検出部２１にて転送されている命令が疑似命令かどうか検出するようにした。従って、分岐命令が先読みバッファ２２に転送される前に事前に分岐命令が転送されて来ることがわかる。その結果、疑似命令の後に転送された分岐命令が命令実行部１２で実行される時、その分岐先アドレスＡＤＸの命令を既に疑似命令用バッファ２４に用意させておくことができため、ミスヒットすることなく直ちにその分岐先アドレスＡＤＸの命令は命令実行部１２に取り込むことがてきる。
【００８９】
（２）本実施形態では、疑似命令検出部２１は、メインメモリ１３と先読みバッファ２２との間に接続されたデータ線ＤＬ０〜ＤＬ３と接続し、メインメモリ１３から先読みバッファ２２に転送する途中の命令及びデータを入力して疑似命令を検出する。従って、先読みバッファ２２に転送される前に疑似命令の検出することができる。その結果、疑似命令の後に転送された分岐命令が命令実行部１２で実行される時、その分岐先アドレスＡＤＸの命令を既に疑似命令用バッファ２４に用意させておくことができため、ミスヒットすることなく直ちにその分岐先アドレスＡＤＸの命令は命令実行部１２に取り込むことがてきる。
【００９０】
（３）本実施形態の疑似命令検出部２１は、アンド回路よりなる疑似命令検出回路３１、シフトレジスタ３２、及び、Ｄ型フリップフロップよりなる各保持回路３３〜３４等の非常に簡単な回路で構成したので、マイクロコントローラがより複雑になることが防止できる。
【００９１】
（４）本実施形態では、疑似命令検出部２１は、先読みバッファ２２に転送される前に疑似命令の有無を検出するようにした。つまり、疑似命令の検出のために、先読みバッファ２２との間でデータの授受を行うことがなことから、先読みバッファ２２との間に特別かつ複雑な検出のための回路を設ける必要ない。その結果、マイクロコントローラの回路構成が複雑になることが防止できる。
【００９２】
（５）本実施形態では、分岐命令が示す分岐先ドレスＡＤＸを疑似命令に付帯させた。そして、疑似命令検出部２１は疑似命令の転送を検出したとき、あわせて分岐命令が示す分岐先ドレスＡＤＸを抽出してアドレス制御部２６に出力する。アドレス制御部２６は分岐先ドレスＡＤＸに基づいてメインメモリ１３から命令及びデータを読み出し疑似命令用バッファ２４に転送させるようにした。従って、分岐先アドレスＡＤＸに対応するプログラムの命令は前記メインメモリ１３から取り込むことができ、疑似命令の後に転送された分岐命令が命令実行部１２で実行される時には、その分岐先アドレスＡＤＸの命令は既に疑似命令用バッファ２４に用意されていることから、ミスヒットすることなく直ちにその分岐先アドレスＡＤＸの命令は命令実行部１２に取り込むことがてきる。
【００９３】
（６）本実施形態では、待機信号ＷＴがＨレベルの時、即ち、命令実行部１２がメインメモリ１３から命令及びデータを直接読み出していない期間に、先読みバッファ２２及び疑似命令用バッファ２４に命令及びデータを転送するようにしたので、効率よくメインメモリ１３を使用することができ、メインメモリ１３から単位時間当たりの読み出し命令数の向上を図ることができる。
【００９４】
（７）本実施形態によれば、先読みバッファ２２とは別に疑似命令用バッファ２４を設け、その疑似命令用バッファ２４に擬似命令に付帯したジャンプ先のアドレスＡＤＸに基づく命令及データを転送させるようにした。従って、擬似命令に付帯したジャンプ先のアドレスＡＤＸに基づく命令及データを先読みし疑似命令用バッファ２４に保持している間、命令実行部１２は、停止することはなく、アドレスカウンタ１４に基づいて先読みバッファ２２から命令及びデータを読み出し解読及び処理を実行することができる。
【００９５】
（第２実施形態）
次に、本発明の第２実施形態について説明する。本実施形態は、疑似命令検出部２１が第１実施形態と相違する。従って、説明の便宜上、疑似命令検出部２１についてのみ説明する。
【００９６】
前記実施形態では、疑似命令のオペコードをアセンブラで「１、１、１、１」とし、そのオペコードをアンド回路よりなる疑似命令検出回路３１で検出するようにしたものである。そして、上記実施形態の場合、オペコードに続くオペランドに「１、１、１、１」よりなるオペランドがないものとしている。つまり、「１、１、１、１」よりなるオペランドが存在した場合に、このオペランドによって疑似命令として誤検出してしまうからである。
【００９７】
そこで、本実施形態では、オペランドに「１、１、１、１」よりなるオペランドが存在しても、誤検出しない疑似命令検出回路２１を説明する。
尚、本実施形態では、全てのオペコードは、４ビットよりなり、その上位２ビット（最上位ビットをＤ３、最上位ビットＤ３の次の下位ビットをＤ２とする）は、オペコードに続くオペランドの数を示すように定義されている。
【００９８】
本実施形態では、「Ｄ３、Ｄ２」が「０、０」の時、オペランドの数は無し。「Ｄ３、Ｄ２」が「０、１」の時、オペランドの数は１つ。「Ｄ３、Ｄ２」が「１、０」の時、オペランドの数は２つ。「Ｄ３、Ｄ２」が「１、１」の時、オペランドの数は３つ。
【００９９】
従って、疑似命令のオペコードは「１、１、１、１」であって、その上位２ビットは、「１、１」なので、疑似命令のオペランドの数は３つ、即ち、付加情報、上位アドレス及び下位アドレスの３つのオペランドとなる。又、ある命令のオペコードが「１、０、１、１」のとき、その上位２ビットは、「１、０」なので、その命令のオペランドの数は２つとなる。
【０１００】
図５は、本実施形態の疑似命令検出回路２１を示す。尚、第１実施形態と同じ回路構成については、符号を同じにしその詳細は省略し相違する構成について説明する。
【０１０１】
本実施形態の疑似命令検出回路３１は、５入力よりなるアンド回路より構成され、それぞれデータ線ＤＬ０〜ＤＬ３に接続されている。又、残る１つの入力端子は、検出タイミング回路としてのダウンカウンタ５０に接続されている。本実施形態の疑似命令検出回路３１は、データ線ＤＬ０〜ＤＬ３に転送される命令及びデータが全て「１」であって、ダウンカウンタ５０から出力される出力信号が「１」のとき、Ｈレベルの検出信号ＳＸを出力することになる。
【０１０２】
ダウンカウンタ５０は、セット入力端子が、上位２ビットＤ３、Ｄ２が転送されデータ線ＤＬ３，ＤＬ２に接続されている。そして、ダウンカウンタ５０は、「Ｄ３，Ｄ２」が「０，０」の時に「０」、「Ｄ３，Ｄ２」が「０，１」の時に「１」、「Ｄ３，Ｄ２」が「１，０」の時に「２」、「Ｄ３，Ｄ２」が「１，１」の時に「３」の値を、出力信号が「０」から「１」になるとき保持し、次の新たなリードストローブ信号ＲＳＴの立ち上がりでセットされるようになっている。
【０１０３】
ダウンカウンタ５０は、そのセットされた値を前記リードストローブ信号ＲＳＴの立ち上がりで「１」づつ減算する。そして、ダウンカウンタ５０は、減算値が「０」になった時、「１」の出力信号を疑似命令検出回路３１に出力する。従って、ダウンカウンタ５０は、減算値が「０」以外の時、「０」の出力信号を疑似命令検出回路３１に出力する。その結果、疑似命令検出回路３１は、出力信号が「０」の時には疑似命令の検出ができない。
【０１０４】
ダウンカウンタ５０の出力信号は、同カウンタ５０の制御入力端子に入力される。ダウンカウンタ５０は、制御信号入力端子に出力信号が「０」から「１」になったとき、データ線ＤＬ３，ＤＬ２から上位２ビットＤ３，Ｄ２の値を保持し、保持した後に出力信号を「１」から「０」にする。ダウンカウンタ５０は、制御信号入力端子に出力信号が「０」のときには、データ線ＤＬ３，ＤＬ２から上位２ビットＤ３，Ｄ２の値をセットしない。
【０１０５】
次に上記のよう構成した疑似命令検出部２１の作用を説明する。
今、「１，０，…，…」よりなるオペコードよりなるある命令の後、疑似命令が転送されるものとする。従って、ある命令のオペコードの上位ビットＤ３，Ｄ２は「１，０」てあるため、オペランドの数は２となる。
【０１０６】
そして、ある命令の「１，０，…，…」のオペコードが転送されている状態であって、ダウンカウンタ５０の出力信号が「０」から「１」になった状態で、疑似命令検出回路３１は、オペコードが「１，０，…，…」で「０」を含むので、疑似命令でない判断する。一方、ダウンカウンタ５０は、出力信号の「０」から「１」に応答してこのオペコードの上位ビットＤ３，Ｄ２の「１，０」即ち「２」を保持するとともに、出力信号を「１」から「０」にする。
【０１０７】
そして、ダウンカウンタ５０は、次にリードストローブ信号ＲＳＴの立ち上がりで「２」をセットする。このリードストローブ信号ＲＳＴの立ち上がり時に、「１，０，…，…」のオペコードよりなるある命令の１つ目のオペランドが転送されるが、疑似命令検出回路３１は、出力信号が「０」なのでこのオペランドを入力しても疑似命令の検出をしない。
【０１０８】
続いて、新たなリードストローブ信号ＲＳＴが立ち上がりがでダウンカウンタ５０は、減算値が「１」となる。このリードストローブ信号ＲＳＴの立ち上がり時に、２つ目のオペランドが転送されるが、疑似命令検出回路３１は、出力信号が「０」なのでこのオペランドを入力しても疑似命令の検出はしない。
【０１０９】
２つ目のオペランドが転送されて次の疑似命令のオペコードが転送されると、次の新たなリードストローブ信号ＲＳＴが立ち上がり、その立ち上がりでダウンカウンタ５０は、減算値が「０」となり出力信号を「１」にする。従って、疑似命令検出回路３１は、「１」の出力信号に基づいて検出可能となる。この時、疑似命令における「１，１，１，１」のオペコードが転送されているので、Ｈレベルの検出信号ＳＸを出力する。
【０１１０】
一方、ダウンカウンタ５０は、上位ビットＤ３，Ｄ２の「１，１」即ち「３」を保持し保持した後、出力信号を「１」から「０」にする。以後同様な動作を繰り返し、３つのオペランドが転送されても、その間、疑似命令検出回路３１は、疑似命令の検出は行わない。つまり、疑似命令検出回路３１の検出時期を常にオペーコードが転送されている間に限定している。
【０１１１】
従って、本実施形態では、オペランドに疑似命令と同じ内容のものが存在しても、そのオペランドを疑似命令と誤検出することはない。その結果、プログラムを設計する際の自由度は向上する。
【０１１２】
尚、この第２実施形態では、オペコードからオペランドの数をダウンカウンタ５０にセットしたが、オペランドの数に１加算してなる命令長をダウンカウンタ５０にセットして実施してもよい。この場合には、ダウンカウンタ５０はリードストローブ信号ＲＳＴの立ち上がりで保持及び減算を行なうことになる。
【０１１３】
尚、発明の実施の形態は、上記各実施形態に限定されるものではなく以下のように実施してもよい。
○前記実施形態では、疑似命令検出部２１が疑似命令を検出した時先読みバッファ２２がフルアドレスになった後に、疑似命令検出部２１が検出した分岐命令におけるジャンプ先のアドレスＡＤＸに基づいてメインメモリ１３から命令及びデータを疑似命令用バッファ２４に転送するようにした。
【０１１４】
これを、疑似命令検出部２１が疑似命令を検出した時、先読みバッファ２２への命令及びデータ転送が、その疑似命令に対応する分岐命令が先読みバッファ２２に転送されまで、中止させないようして実施してもよい。
【０１１５】
この場合、疑似命令に付帯する付加情報に疑似命令が転送されてから対応する分岐命令がどれくらい後に転送されるかの情報を記録する。そして、この付加情報を、例えば図３に破線で示すように、先読みアドレス保持回路４６に出力する。先読みアドレス保持回路４６は、この付加情報に基づいて、疑似命令が転送されてから対応する分岐命令の転送が完了したとき、第２アドレスゲート回路４５に対して疑似命令用アドレスゲート４９を優先的に選択させる信号を出力させる機能を持たせる。
【０１１６】
このように、構成することによって、先読みバッファ２２に対する先読みが長くなりすぎて疑似命令に対応する分岐命令が命令実行部１２にて処理される前に、ジャンプ先のアドレスＡＤＸに基づいてメインメモリ１３から命令及びデータを疑似命令用バッファ２４に転送されていないといった問題はなくなる。
【０１１７】
○前記実施形態では、先読みバッファ２２がフルアドレスになった後に、疑似命令検出部２１が検出した分岐命令におけるジャンプ先のアドレスＡＤＸに基づいてメインメモリ１３から命令及びデータを疑似命令用バッファ２４に転送するようにした。
【０１１８】
これを、先読みバッファ２２への命令及びデータ転送を一旦中止し、疑似命令検出部２１が検出した分岐命令におけるジャンプ先のアドレスＡＤＸに基づいてメインメモリ１３から命令及びデータを疑似命令用バッファ２４に転送するようにして実施してもよい。
【０１１９】
この場合、疑似命令検出部２１が疑似命令を検出した時、先読みバッファ２２への命令及びデータ転送が、その疑似命令に対応する分岐命令が先読みバッファ２２に転送されまで、中止させないようして変更して実施してもよい。
【０１２０】
この場合も、疑似命令に付帯する付加情報に疑似命令が転送されてから対応する分岐命令がどれくらい後に転送されるかの情報を記録する。そして、この付加情報を、例えば図３に破線で示すように、先読みアドレス保持回路４６に出力する。先読みアドレス保持回路４６は、この付加情報に基づいて、疑似命令に対する分岐命令が先読みバッファ２２に転送されるまでの間、第２アドレスゲート回路４５に対して優先的に選択させる機能を持たせる。
【０１２１】
このように、構成することによって、疑似命令用バッファ２４にジャンプ先のアドレスＡＤＸに基づいてメインメモリ１３から命令及びデータを転送している途中において、先読みバッファ２２に基づく命令が全て命令実行部１２で実行処理されてしまって待機状態となることが防止できる。
【０１２２】
又、この先読みバッファ２２に分岐命令が転送された後に、疑似命令用バッファ２４へのジャンプ先のアドレスＡＤＸに基づいて命令及びデータの転送する場合について、命令及びデータが疑似命令用バッファ２４にこれ以上取り込めないフル状態になった時、先読みバッファ２２にまだ取り込む余裕があっる時、アドレス制御部２６は、先読みバッファ２２に書き込むようにしてもよい。
【０１２３】
○前記実施形態では、無条件分岐、条件分岐、ＣＡＬＬ命令、データ呼び出しの命令を分岐命令とし、その分岐命令に対して疑似命令を作成したが、分岐命令に対して疑似命令を設定したが、無条件分岐、条件分岐、ＣＡＬＬ命令、データ呼び出しの命令の少なくともいずれか１つの命令に対して疑似分岐命令を設定してもよい。
【０１２４】
○前記実施形態では、疑似命令は命令実行部１２ではノーオペレーション（ＮＯＰ）命令と同じに取り扱われる。そして、疑似命令の命令長は４であるので、命令実行部１２は疑似命令を処理するためにその命令長４のサイクルだけ無駄な処理をすることになる。
【０１２５】
そこで、疑似命令検出部２１が疑似命令を検出した時、アドレス制御部２６にその疑似命令の１つ前の命令又はデータのアドレスを保持させ、命令実行部１２のアドレスカウンタ１４がそのアドレスになり、そして次のアドレスにカウントアップするとき、疑似命令のアドレスを飛ばし疑似命令の次に来る命令又はデータのアドレスまでアップさせる機能を持たせるようにして実施してもよい。
【０１２６】
この場合、命令実行部１２は、疑似命令の処理を実行することなく直ちに疑似命令の次に来る命令又はデータを処理することになり、処理時間の短縮を図ることができる。
【０１２７】
○本実施形態では、疑似命令検出部２１にて疑似命令が検出されると、その疑似命令に付帯する分岐命令が示す分岐先アドレスＡＤＸに対応する命令及びデータをメインメモリ１３から読み出すようにしている。これを疑似命令検出部２１にて検出した分岐先アドレスＡＤＸに基づく命令及びデータが先読みバッファ２２又は疑似命令用バッファ２４に既に保持されているかチェックする機能をバス制御部２６に持たせ、既に保持されている場合には先読みをしないようにし、保持されていない時には疑似命令用バッファ２４に命令及びデータを先読みさせるようにする。この場合、バス制御部２６による既に保持されているかチェックは、例えば分岐先アドレスＡＤＸと第１タグ２３及び第２タグ２５のタグ情報を比較して行う。
【０１２８】
このようにすることにより、無駄な先読みがなくなり、効率の良い先読み処理を行うことができる。
○前記実施形態では、無条件分岐命令、条件分岐命令、ＣＡＬＬ命令、データ呼び出しの命令を１つの擬似命令として取り扱い、オペコードを「１，１，１，１」としたが、これを無条件分岐命令、条件分岐分岐、ＣＡＬＬ命令、及び、データ呼び出しの命令に対してそれぞれ相違するオペコードの擬似命令を設定してもよい。
【０１２９】
そして、無条件分岐命令の擬似命令に付帯する付加情報に、該無条件命令が先読みバッファ２２に転送されるまで先読みし、その後はジャンプ先の命令及びデータを擬似命令用バッファ２４に転送させるような情報を付加する。そして、その付加情報に基づいてアドレス制御部２６に上記動作を実行させるようにしてもよい。
【０１３０】
又、条件分岐命令の擬似命令に付帯する付加情報に、該条件分岐命令が先読みバッファ２２に転送されるまで先読みし、その後はジャンプ先の命令及びデータを擬似命令用バッファ２４に転送させる動作と、先読みバッファ２２に転送する通常の転送動作を行なわせるような情報を付加する。そして、その付加情報に基づいてアドレス制御部２６に上記動作を実行させるようにしてもよい。このとき、交互にかえるタイミングは、その転送する命令及びデータ数の割合で決定して行なってもよい。
【０１３１】
さらに、ＣＡＬＬ命令の擬似命令に付帯する付加情報に、該ＣＡＬＬ命令が先読みバッファ２２に転送されるまで先読みし、続いてジャンプ先の命令及びデータを最後まで擬似命令用バッファ２４に転送させ、その後に再び先読みバッファ２２を使用した先読みを行なわせるような情報を付加する。そして、その付加情報に基づいてアドレス制御部２６に上記動作を実行させるようにしてもよい。
【０１３２】
さらに又、データ呼び出し命令の擬似命令に付帯する付加情報に、該データ呼び出し命令が先読みバッファ２２に転送されるまで先読みし、続いて擬似命令用バッファ２４に必要な分のデータを転送し、その後は引き続き先読みバッファ２２への先読みを行なわせるような情報を付加する。そして、その付加情報に基づいてアドレス制御部２６に上記動作を実行させるようにしてもよい。
【０１３３】
○前記実施形態では、無条件分岐命令、条件分岐命令、ＣＡＬＬ命令、データ呼び出しの命令を１つの擬似命令として取り扱い、オペコードを「１，１，１，１」としたが、これをオペコードは共通とし、無条件分岐命令、条件分岐分岐、ＣＡＬＬ命令、及び、データ呼び出しの命令の区別を付加情報に定義して実施してもよい。
【０１３４】
○前記実施形態では、１つの疑似命令用バッファ２４だけであった。これを無条件分岐命令、条件分岐命令、ＣＡＬＬ命令、データ呼び出しの命令の各命令の対する疑似命令をそれぞれを区別できるようにするとともに、無条件分岐命令、条件分岐命令、ＣＡＬＬ命令、データ呼び出しの命令の各命令のための専用の疑似命令用バッファをそれぞれ設ける。そして、アドレス制御部２６に無条件分岐命令の疑似命令の場合には無条件分岐命令のために設けたバッファにジャンプ先のアドレスの命令及びデータを転送させる等、各命令に対応するバッファにその命令及びデータを転送させる機能をもたせて実施してもよい。
【０１３５】
○又、無条件分岐命令、条件分岐命令、及び、ＣＡＬＬ命令に対する疑似命令のオペーコードを「１，１，１，１」とし、データ呼び出しの命令に対する擬似命令のオペコードを「１，１，１，０」にする。つまり、擬似命令のオペコードの最下位ビットを「０」にして他の疑似命令と相違させて実施してもよい。この場合、疑似命令検出回路３１は、上位３ビットのオペコードをデータ線ＤＬ１〜ＤＬ３から入力する。そして、オペコードの最下位ビットが転送されるデータ線ＤＬ０からその最下位ビットをアドレス制御部２６に出力する。
【０１３６】
そして、アドレス制御部２６に疑似検出回路部２１からの疑似命令の検出に基づいてその時の最下位ビットの内容（「１」か「０」）で、データ呼び出しの命令に対する擬似命令なのか、それ以外の疑似命令なのか判断する機能を持たせる。さらに、データ呼び出しの命令に対する擬似命令の場合には、該データ呼び出し命令が先読みバッファ２２に転送されるまで先読みし、続いて擬似命令用バッファ２４に必要な分のデータを転送し、その後は引き続き先読みバッファ２２への先読みを行なわせる機能をアドレス制御部２６に持たせるようにして実施してもよい。
【０１３７】
○又、疑似命令に付帯する付加情報に優先順位の情報を付加する。そして、その付加情報に基づいて先読みバッファ２２の先読みを優先的に行ったり、疑似命令用バッファ２４の先読みを優先的に実行させる等の機能をバス制御部２６に持たせて実施してもよい。
【０１３８】
○前記実施形態では、先読みバッファ２２及び疑似命令用バッファ２４をＦＩＦＯメモリで構成したが、それぞれキャッシュメモリで構成してもよい。
○前記実施形態では、先読みバッファ２２と疑似命令用バッファ２４をそれぞれ設けたが、これを１つの記憶容量が大きいＦＩＦＯメモリよりなるバッファを共用するようにし、疑似命令が検出されたとき、疑似命令に対する命令がバッファに転送されるまで先読みし、続いてジャンプ先の命令及びデータを最後まで先読みを行なわせる等の機能をバス制御部２６に持たせて実施してもよい。
【０１３９】
【発明の効果】
請求項１，２に記載の発明によれば、ミスヒットすることなく直ちにその分岐先アドレスの命令及びデータを命令実行部に取り込むことができる。
【０１４０】
請求項３に記載の発明によれば、ミスヒットすることなく直ちにその分岐先アドレスの命令及びデータを命令実行部に取り込むことがてきるとともに、簡単な回路で実施することができる。
【０１４１】
請求項４に記載の発明によれば、先読みバッファに基づく命令が全て命令実行部で実行処理されてしまって待機状態となることはなくマイクロコントローラの効率のよい処理動作を可能にすることができる。
【０１４２】
請求項５に記載の発明によれば、擬似命令に付帯したジャンプ先のアドレス又はデータのアドレスに基づく命令及データを先読みし疑似命令用バッファに保持している間、命令実行部は先読みバッファから命令及びデータを読み出し解読及び処理を実行することができ、マイクロコントローラの効率のよい処理動作を可能にすることができる。
【０１４３】
請求項６に記載の発明によれば、無駄な先読みをなくすことができ効率の良い先読み処理を行なうことができる。
請求項７，８に記載の発明によれば、ミスヒットすることなく直ちにその分岐先アドレスの命令及びデータは命令実行部に取り込むことができる。
【０１４４】
請求項９に記載の発明によれば、擬似命令に付帯したジャンプ先のアドレス又はデータのアドレスに基づく命令及データを先読みし疑似命令用バッファに保持している間、命令実行部は先読みバッファから命令及びデータを読み出し解読及び処理を実行することができ、マイクロコントローラの効率のよい処理動作を可能にすることができる。
【０１４５】
請求項１０に記載の発明によれば、無駄な先読みをなくすことができ効率の良い先読み処理を行なうことができる。
請求項１１に記載の発明によれば、ミスヒットすることなく直ちにその分岐先アドレスの命令及びデータを命令実行部に取り込むことがてきるとともに、簡単な回路で実施することができる。
【０１４６】
請求項１２に記載の発明によれば、擬似命令を確実に検出することができる。
【図面の簡単な説明】
【図１】一実施形態を説明するための先読み回路部を備えたマイクロコントローラの要部ブロック回路図
【図２】疑似命令検出部の構成を説明するためのブロック回路図
【図３】アドレス制御部の構成を説明するためのブロック回路図
【図４】疑似命令検出部の動作を説明するためのタイミングチャート
【図５】疑似命令検出部の別例を説明するためのブロック回路図
【符号の説明】
１０  マイクロコントローラ
１１  先読み回路部
１２  命令実行部
１３  メインメモリ
１４  アドレスカウンタ
２１  疑似命令検出部
２２  先読みバッファ
２３  先読みバッファ用タグメモリ
２４  疑似命令用バッファ
２５  疑似命令バッファ用タグメモリ
２６  アドレス制御部
３１  疑似命令検出回路
５０  ダウンカウンタ
ＡＤＸ  分岐先アドレス
ＤＬ０〜ＤＬ３  データ線
【図１】
0003741870.tif 000002
【図２】
0003741870.tif 000003
【図３】
0003741870.tif 000004
【図４】
0003741870.tif 000005
【図５】
0003741870.tif 000006