(57)【特許請求の範囲】
【請求項１】
ＣＰＵと、
このＣＰＵに対する割込みを発生させる１つ以上の周辺回路と、
前記周辺回路が発生させた割込みを制御して、前記ＣＰＵに処理させる割込みコントローラと、
前記割込みを前記ＣＰＵが処理するための割込みハンドラが記憶されるプログラムメモリと、
前記プログラムメモリの一部がロードされる命令キャッシュとを備え、
前記周辺回路は、前記ＣＰＵに対して割込みを発生させる要因となる事象の発生を初期段階で検出すると割込み予告信号を前記割込みコントローラに対して出力し、前記事象の発生が完了した段階で割込み信号を出力し、
前記割込みコントローラは、前記割込み予告信号が入力されると、当該予告信号に対応する割込みハンドラを、前記プログラムメモリから前記命令キャッシュにロードさせる先読み処理を行い、その後、前記割込み予告信号に対応する割込み信号が入力された段階で前記先読み処理が完了していなければ、前記ＣＰＵに対して行う前記割込みの発生通知を保留し、
前記周辺回路は、入力される信号のレベルがアクティブとなっていることを、ｍ回以上連続して検出すると、前記信号がアクティブになったことを要因として割込み信号を発生させ、
前記入力信号のアクティブレベルがｎ（＜ｍ；ｎ，ｍは自然数）回以上連続した段階で、前記割込み予告信号を出力することを特徴とするマイクロコンピュータ。
【請求項２】
ＣＰＵと、
このＣＰＵに対する割込みを発生させる１つ以上の周辺回路と、
前記周辺回路が発生させた割込みを制御して、前記ＣＰＵに処理させる割込みコントローラと、
前記割込みを前記ＣＰＵが処理するための割込みハンドラが記憶されるプログラムメモリと、
前記プログラムメモリの一部がロードされる命令キャッシュとを備え、
前記周辺回路は、前記ＣＰＵに対して割込みを発生させる要因となる事象の発生を初期段階で検出すると割込み予告信号を前記割込みコントローラに対して出力し、前記事象の発生が完了した段階で割込み信号を出力し、
前記割込みコントローラは、前記割込み予告信号が入力されると、当該予告信号に対応する割込みハンドラを、前記プログラムメモリから前記命令キャッシュにロードさせる先読み処理を行い、その後、前記割込み予告信号に対応する割込み信号が入力された段階で前記先読み処理が完了していなければ、前記ＣＰＵに対して行う前記割込みの発生通知を保留し、
前記先読み処理の実行中に、より優先度が高い割込みの予告信号が入力されると、前記先読み処理を中止して、前記優先度が高い割込みに対応する割込みハンドラの先読み処理を開始することを特徴とするマイクロコンピュータ。
【請求項３】
前記周辺回路は、通信機能を備えており、
外部より送信されたデータの受信処理を開始した以降から当該受信処理を完了するまでの間に、前記割込み予告信号を出力することを特徴とする請求項１又は２記載のマイクロコンピュータ。
【請求項４】
前記周辺回路は、タイマ機能を備えており、
タイマ割込み信号を発生させるタイミングよりも所定期間だけ遡行するタイミングで、前記割込み予告信号を出力することを特徴とする請求項１から３の何れか一項に記載のマイクロコンピュータ。
【請求項５】
ＣＰＵと、
このＣＰＵに対する割込みを発生させる１つ以上の周辺回路と、
前記周辺回路が発生させた割込みを制御して、前記ＣＰＵに処理させる割込みコントローラと、
前記割込みを前記ＣＰＵが処理するための割込みハンドラが記憶されるプログラムメモリと、
前記プログラムメモリの一部がロードされるキャッシュメモリと、このキャッシュメモリに対する書き込み及び読み出しを制御するキャッシュコントローラとで構成される命令キャッシュとを備え、
前記割込みコントローラは、前記周辺回路が割込みを発生させると前記ＣＰＵに対して行う前記割込みの発生通知を保留して、当該割込みに対応する割込みハンドラを前記プログラムメモリから前記命令キャッシュにロードさせる先読み処理を行い、
前記キャッシュコントローラは、前記先読み処理の実行中に、前記ＣＰＵからのアクセスにキャッシュミスが発生すると、その時点で前記ＣＰＵが割込み許可状態であった場合は前記先読み処理を優先して実行し、前記ＣＰＵが割込み禁止状態であった場合は、前記先読み処理を中止して、前記ＣＰＵがフェッチしようとする命令を、前記プログラムメモリから前記命令キャッシュにロードさせることを特徴とするマイクロコンピュータ。
【請求項６】
前記キャッシュコントローラは、前記先読み処理を優先して実行する際には、前記割込みコントローラに対して直ちに先読み処理の完了を通知し、
前記割込みコントローラは、先読み処理の完了が通知されると、前記ＣＰＵに対して前記割込みの発生通知を行うことを特徴とする請求項５記載のマイクロコンピュータ。
【請求項７】
前記割込みコントローラは、前記先読み処理の実行中に、より優先度が高い割込みが発生すると前記先読み処理を中止して、前記優先度が高い割込みに対応する割込みハンドラの先読み処理を開始することを特徴とする請求項５又は６記載のマイクロコンピュータ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイクロコンピュータの割込み処理に関する。
【背景技術】
【０００２】
マイクロコンピュータにおいて、ＣＰＵが行う割込み処理を効率的に実行させるための技術は、種々提案されている。例えば特許文献１では、キャッシュメモリからの命令フェッチに並行してプリフェッチバッファに命令をプリフェッチさせることを可能にする構成において、割込みが発生すると、ＣＰＵが割込み処理プログラムに移行するまでの間にレジスタ値の退避等を行う期間を利用して、割込み処理プログラムの先頭アドレスをセットしてプリフェッチさせる技術が開示されている。
【０００３】
特許文献１の技術は、割込み処理プログラムのプリフェッチに要する時間が、ＣＰＵが割込み処理プログラムに移行するまでの期間に収まる場合は効果がある。しかし、割込み処理プログラムのサイズが大きいため、プリフェッチに要する時間が上記の移行期間に収まらない場合は、ＣＰＵの処理が停滞することになる。
【０００４】
また、特許文献２では、割込みが発生した場合に、割込みハンドラ（処理プログラム）がキャッシュメモリにロードされていなければ（キャッシュミス）、割込みハンドラのロードが完了した時点でＣＰＵに対して割込みを要求する技術が開示されている。これにより、キャッシュメモリが割込みハンドラを先読みしている間にＣＰＵは通常処理を継続できるので、処理効率の低下を防止できるとしている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平８−２２１２７０号公報（図１参照）
【特許文献２】特開２００１−３０６３３５号公報（図１参照）
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献２の技術によればＣＰＵの処理効率の低下は防止できるが、割込みが発生した時点からＣＰＵが割込みハンドラの実行を開始するまでの時間，すなわち割込み応答性については、キャッシュメモリが割込みハンドラを先読みしなかった場合と全く変わらない。また、キャッシュメモリが割込みハンドラを先読みしている間に、ＣＰＵにおける通常処理の実行中にキャッシュミスが発生すると、先読みが完了するまでＣＰＵの処理は停滞することになる。
本発明は上記事情に鑑みてなされたものであり、その目的は、割込みをより効率的に処理できるマイクロコンピュータを提供することにある。
【課題を解決するための手段】
【０００７】
請求項１記載のマイクロコンピュータによれば、周辺回路は、ＣＰＵに対して割込みを発生させる要因となる事象の発生を初期段階で検出すると、事前に割込み予告信号を割込みコントローラに対して出力し、前記事象の発生が完了した段階で割込み信号を出力する。そして、割込みコントローラは、割込み予告信号が入力されると、当該予告信号に対応する割込みハンドラをプログラムメモリから命令キャッシュにロードさせる先読み処理を行い、その後、前記割込み予告信号に対応する割込みが発生した段階で先読み処理が完了していなければ、ＣＰＵに対して行う前記割込みの発生通知を保留する。
【０００８】
このように構成すれば、割込みコントローラは、割込み予告信号が出力された時点から割込みハンドラを命令キャッシュにロードさせる先読み処理を開始するので、対応する割込み信号が出力されるまでの期間に先読み処理を完了させることができ、ＣＰＵは、割込み信号が出力されると直ちに割込み処理に移行して、割込みハンドラの実行を開始できる。したがって、割込みが発生した時点から、当該割込みを処理するまでの応答性を向上させることができる。また、前記予告信号に対応する割込み信号が入力された段階で先読み処理が完了していなければ、割込みコントローラがＣＰＵに対して行う前記割込みの発生通知を保留するので、先読み処理が完了した後にＣＰＵに割込みハンドラの実行を開始させることができ、ＣＰＵの処理効率の低下を防止できる。
そして、入力信号レベルがアクティブの状態をｍ回以上連続して検出すると前記信号がアクティブになったと判定して割込み信号を発生させる周辺回路は、前記入力信号のアクティブレベルがｎ（＜ｍ）回以上連続した段階で割込み予告信号を出力する。一般に、上記のように構成される周辺回路は、入力信号のレベルがノイズの影響を受ける可能性があるため、その影響を排除する目的でアクティブの状態を連続してｍ回以上検出するようにしている。したがって、アクティブレベルがｎ（＜ｍ）回以上連続した段階でも、その後に入力信号がアクティブと判定される蓋然性は高いと言えるので、その時点で割込み予告信号を出力すれば、割込みコントローラに割込みの発生を予告することができる。
請求項２記載のマイクロコンピュータによれば、割込みコントローラは、先読み処理の実行中に優先度が高い割込みの予告信号が入力されると、実行中の先読み処理を中止して、前記優先度が高い割込みに対応する割込みハンドラの先読み処理を開始する。したがって、ＣＰＵが先に処理する予定の割込みに対応するハンドラを、先に命令キャッシュにロードすることができる。
【０００９】
請求項３記載のマイクロコンピュータによれば、通信機能を備えている周辺回路は、外部より送信されたデータの受信処理を開始した以降から当該受信処理を完了するまでの間に割込み予告信号を出力する。すなわち、外部よりデータの送信があれば、送信されたデータの受信が完了した時点でＣＰＵに対して割込みを発生させることになるので、受信処理を開始した以降からその受信処理を完了するまでの間に割込み予告信号を出力すれば、割込みコントローラに割込みの発生を予告することができる。
【００１０】
請求項４記載のマイクロコンピュータによれば、タイマ機能を備えている周辺回路は、タイマ割込み信号を発生させるタイミングよりも所定期間だけ遡行するタイミングで割込み予告信号を出力する。すなわち、一定周期でタイマ割込みを発生させる場合は、そのタイマのカウント値によって割込みを発生させるタイミングが決まるので、前記カウント値を参照すれば、タイマ割込み信号を発生させるタイミングよりも遡行するタイミングで割込み予告信号を出力することができる。
【００１３】
請求項５記載のマイクロコンピュータによれば、割込みコントローラは、周辺回路が割込みを発生させるとＣＰＵに対して行う割込みの発生通知を保留して、当該割込みに対応する割込みハンドラをプログラムメモリから命令キャッシュにロードさせる先読み処理を行う。そして、キャッシュコントローラは、先読み処理の実行中にＣＰＵからのアクセスにキャッシュミスが発生すると、その時点でＣＰＵが割込み許可状態であれば先読み処理を優先して実行し、割込み禁止状態であれば先読み処理を中止して、ＣＰＵがフェッチしようとする命令を命令キャッシュにロードさせる。
【００１４】
すなわち、先読み処理の実行中にキャッシュミスが発生しても、ＣＰＵが割込み許可状態であれば先読み処理を優先することで、ＣＰＵに割込み処理を早期に実行させることができる。また、ＣＰＵが割込み禁止状態であれば、割込みの処理が直ちに開始されることはないので、ＣＰＵがフェッチしようとする命令を先に命令キャッシュにロードさせて、現在実行中の処理を優先させる。したがって、ＣＰＵ側の割込みへの対応状態に応じて処理効率を向上させることができる。
【００１５】
請求項６記載のマイクロコンピュータによれば、キャッシュコントローラは、先読み処理を優先して実行する際には、割込みコントローラに対して直ちに先読み処理の完了を通知し、割込みコントローラは、当該通知がなされるとＣＰＵに対して割込みの発生通知を行うので、ＣＰＵを直ちに割込み処理に移行させることができる。
【００１６】
請求項７記載のマイクロコンピュータによれば、割込みコントローラは、先読み処理の実行中に、より優先度が高い割込みが発生すると前記先読み処理を中止して、優先度が高い割込みに対応する割込みハンドラの先読み処理を開始する。したがって、割込みの優先度に対応して割込みハンドラの先読みを行うことができる。
【図面の簡単な説明】
【００１７】
【図１】第１実施例であり、マイクロコンピュータの構成を示す機能ブロック図
【図２】割込みコントローラの内部構成を示す機能ブロック図で
【図３】命令キャッシュの内部構成を示す機能ブロック図
【図４】周辺回路が通信機能を備える場合の構成例を示す図
【図５】動作タイミングチャート
【図６】周辺回路がタイマ機能を備える場合の構成例を示す図
【図７】図５相当図
【図８】周辺回路がインプットキャプチャ機能を備える場合の構成例を示す図
【図９】図５相当図
【図１０】各構成間における処理の流れを示すフロー（シーケンス）図
【図１１】（ａ）は従来構成の場合、（ｂ）は実施例構成の場合の図１０のフローに対応するタイミングチャート
【図１２】第２実施例の動作を示すタイミングチャート
【図１３】図１０の一部相当図
【図１４】第３実施例であり、（ａ）は従来構成の場合、（ｂ）は実施例構成の場合の動作を示すタイミングチャート（その１）
【図１５】同タイミングチャート（その２）
【発明を実施するための形態】
【００１８】
（第１実施例）
以下、第１実施例について図１ないし図１１を参照して説明する。図１は、マイクロコンピュータの構成を示す機能ブロック図である。マイクロコンピュータ１は、ＣＰＵ２，プログラムメモリであるＲＯＭ３，ＲＡＭ４，命令キャッシュ５，データキャッシュ６，割込みコントローラ７，周辺回路８〜１０などで構成されている。ＣＰＵ２，命令キャッシュ５，ＲＯＭ３の間は専用のバスで接続されており、ＲＡＭ４，データキャッシュ６，割込みコントローラ７，周辺回路８〜１０はシステムバス（汎用バス）１１に接続されている。ＣＰＵ２は、システムバス１１に接続されているＲＡＭ４や周辺回路８〜１０に対しては、データキャッシュ６を介してアクセスする。
【００１９】
周辺回路８〜１０は、割込みコントローラ７に対して割込み信号を出力すると共に、その割込み信号を出力する時点よりも以前に、後述する割込み予告信号を出力する。割込みコントローラ７は、ＣＰＵ２に対して割込み要求信号と、その割込み要求の番号を通知する信号（割込み要求番号通知）とを出力し、ＣＰＵ２は、割込みコントローラ７に対して割込み要求受理信号を出力する。また、割込みコントローラ７は、命令キャッシュ５に対して上記割込要求番号通知を、割込み処理先読み要求として出力する。そして、命令キャッシュ５は、割込みコントローラ７に対して先読み完了通知，又は先読み中止通知を出力する。
【００２０】
図２は、割込みコントローラ７の内部構成を示す機能ブロック図である。優先順位指定レジスタ１２には、ＣＰＵ２により各割込み要求番号に対する優先順位が書き込まれて指定され、指定された優先順位データは優先順位判定部１３，１４に出力される。優先順位判定部１３，１４には、それぞれ周辺回路８〜９からの割込み信号，割込み予告信号が入力される。そして、優先順位判定部１３，１４は、複数の割込み信号，割込み予告信号が同時に入力された場合には、それらと各信号について優先順位指定レジスタ１２より与えられる優先順位データとを比較し、優先順位が高く設定されている方の割込み信号，割込み予告信号を選択して出力する。
【００２１】
優先順位判定部１４を介して出力される割込み予告信号は、先読み制御部１５に入力され、優先順位判定部１３を介して出力される割込み信号は、先読み制御部１５，先読み完了制御部１６，割込み要求制御部１７に入力されている。先読み制御部１５は、入力される割込み予告信号に応じた割込み要求番号を、割込み処理先読み要求として出力する。先読み完了制御部１６は、先読み完了通知が入力されると、その時点で先読み制御部１５が出力している割込み処理先読み要求をリセットさせる。割込み要求制御部１７は、入力される割込み信号に応じた割込み要求番号を、割込み要求として出力し、割込み要求受理信号が入力されると、その時点で出力している割込み要求をリセットする。
【００２２】
図３は、命令キャッシュ５の内部構成を示す機能ブロック図である。命令キャッシュ５は、複数のウェイ（ライン）で構成されるキャッシュメモリ１８を備えており、入力されるアドレスは、制御回路（キャッシュコントローラ，ハードウェアロジックで構成される）１９を介してＲＯＭ３側に出力され、キャッシュメモリ１８及びキャッシュタグ比較部２０にも入力されている。キャッシュメモリ１９には、ＲＯＭ３より読み出された命令（命令のデータ）が書き込まれる。キャッシュタグ比較部２０は、入力されたアドレス上位側をキャッシュメモリ１８の各ウェイに付されているタグと比較して、ウェイの１つを選択するためのマルチプレクサ２１に選択信号を出力する。マルチプレクサ２１により選択されたウェイの命令は、ＣＰＵ２に出力される。
【００２３】
割込みコントローラ７より与えられる割込み要求番号はベクタアドレス生成回路２２に入力され、ベクタアドレス生成回路２２は、割込み要求番号に応じて、ＣＰＵ２を割込みハンドラの先頭アドレスに分岐させる命令が格納されているベクタアドレスを制御回路１９及びハンドラアドレス生成部２３に出力する。ハンドラアドレス生成部２３は、入力されるベクタアドレスに対応する割込みハンドラのアドレスを生成し、制御回路１９に出力する。また、ハンドラアドレス生成部２３には、ＲＯＭ３より読み出されてキャッシュメモリ１８に書き込まれる命令が入力されており、ベクタアドレスにより読み出される分岐命令に含まれている分岐先アドレスを抽出することでハンドラアドレスを生成する。制御回路１９には、その他、ＣＰＵ２からの割込み許可状態信号と、割込みコントローラ７からの割込み処理先読み要求とが入力されている。また、制御回路１９は、割込みコントローラ７に対して先読み完了通知，先読み中止通知を出力する。
【００２４】
本実施例におけるマイクロコンピュータ１の動作概要としては、周辺回路８〜９は、発生した割込み要因に応じて、一般的に割込み信号が出力されるタイミングよりも以前の段階で割込み予告信号を出力するように構成されている。すると、割込みコントローラ７が、対応する割込み処理を行うためのベクタ並びにハンドラを、ＲＯＭ３より命令キャッシュ５にロードさせる先読み処理を行うようになっている。そこで次に、割込み予告信号を出力する周辺回路８〜１０の具体構成例について、図４ないし図９を参照して説明する。
【００２５】
図４は、周辺回路８が通信機能を備える場合の構成例であり、（ａ）はＵＡＲＴ（Universal Asynchronous Receiver Transmitter），（ｂ）はＣＡＮ（Controller  Area Network）に対応している。尚、一般的な通信機能に関する説明は省略し、本発明の要旨に係る部分のみ説明する。図４（ａ）に示す周辺回路８Ａについては、受信データに含まれるスタート／ストップビットの検出に伴う制御や、パリティビットの検出に伴う制御を行う制御回路２４が、割込み予告信号並びに割込み信号を出力する。また、図４（ｂ）に示す周辺回路８Ｂについては、受信データ（メッセージ）を複数のメッセージバッファの何れに格納するかを判定したり、ＡＣＫ（アクノリッジ）制御やＣＲＣ（Cyclic Redundancy Check）制御を行う制御回路２５が、割込み予告信号並びに割込み信号を出力する。尚、通信機能については、ＵＡＲＴやＣＡＮに限ることなく、その他の通信プロトコルであっても良い。
【００２６】
図５（ａ），（ｂ）は、図４（ａ），（ｂ）の構成に対応して割込み予告信号を出力するタイミングの一例を示している。図５（ａ）に示すＵＡＲＴの場合、通信バス上にスタートビットが出力されるとデータの送信が開始され、続いて８ビットのデータがシリアルに送信される。そして、パリティビット（Ｐ）に続いてストップビットが出力されると送信が終了する。一般的に、このようなデータを受信した場合の割込み信号は、ストップビットが出力された後に出力される。本実施例では、周辺回路８Ａは、スタートビットを受信した（これが、割込みを発生させる要因となる事象の発生を、初期段階で検出することに相当する）以降から、ストップビットが出力される以前のタイミングで割込み予告信号を出力する。
【００２７】
ここで、割込み予告信号を出力してから割込み信号を出力するまでに、どれ位の時間を確保できるかを具体数値で計算してみる。ボーレートが１０Ｋｂｐｓであるとして、割込み予告信号をパリティビット（Ｐ）の受信後に出力することを想定する。この場合、先読み処理を行うための余裕時間は１ビットの送信期間に相当する１００μｓとなるが、ＣＰＵ２の動作クロック周波数が５０ＭＨｚであるとすれば、５０００サイクル（周期）の間隔がある。したがって、命令キャッシュ５に例えば数１００バイト程度の割込みハンドラを先読みするのに十分な時間が確保できる。また、データＤ７の受信後や、スタートビットの受信後に割込み予告信号を出力することも可能であり、その場合は更に余裕を確保できる。
【００２８】
また、図５（ｂ）に示すＣＡＮの場合、通信バス上にＳＯＦ（Start Of Frame）が出力されるとデータの送信が開始され、続いてＩＤやデータ，ＣＲＣ，ＡＣＫ等がシリアルに送信される。そして、ＥＯＦ（End Of Frame）が出力されると送信が終了し、続くＩＦＳ（Inter Frame Space）で周辺回路８Ｂ内部のデータ転送が開始される。一般には、このよう受信形態の場合の割込み信号は、内部のデータ転送が終了した後に出力される。本実施例では、周辺回路８Ｂは、例えばＤＬＣ（Data Length Code）を受信した以降から、ＥＯＦが出力される以前のタイミングで割込み予告信号を出力する。
【００２９】
ここで、図５（ａ）の場合と同様に、割込み予告信号を出力してから割込み信号を出力するまでどれ位の時間を確保できるかを計算してみる。ボーレートが５００Ｋｂｐｓであるとして、割込み予告信号をＡＣＫの受信後に出力することを想定すると余裕時間は２０μｓとなり、１０００サイクル（周期）の間隔がある。したがって、この場合も割込みハンドラを先読みするのに十分な時間が確保できる。また、ＤＬＣの受信後やデータの受信中または受信後，ＣＲＣの受信後等に割込み予告信号を出力することも可能であり、その場合は更に余裕を確保できる。例えば、ＤＬＣによって受信データの長さが解るので、第何バイトのデータの受信後などを設定することもできる。
【００３０】
尚、例えばＣＲＣチェックにより受信がエラーとなった場合は、ＣＰＵ２に受信エラーを通知するための割込みを発生させる。この場合、命令キャッシュ５及び割込みコントローラ７のステータスはリセットされ、ＣＰＵ２は、受信エラーに対応した処理を行う。
【００３１】
また、図６は、周辺回路９がタイマ機能を備える場合の構成例であり、図７は動作タイミングチャートである。これについても周知の構成部分は説明を省略する。ダウンカウンタ２６のカウント値がゼロ（全ビット０）になるとタイマ割込み信号を出力するので、カウント値がゼロになる以前の段階で（例えばカウント値が０ｘ００Ｆ；下位４ビットがオール１）割込み予告信号を出力する。この場合も確保可能な時間を計算すると、カウンタクロックの周期が０．５μｓであれば、カウント値が０ｘ００Ｆで８μｓとなり４００サイクルの間隔がある。したがって、この場合も割込みハンドラを先読みするのに十分な時間が確保できる。また、カウント値が０ｘ００Ｆより大きな値で割込み予告信号を出力することも可能である。
【００３２】
図８は周辺回路１０がインプットキャプチャ機能を備える場合の構成例であり、図９は動作タイミングチャートである。外部入力端子の信号がアクティブ（例えばハイ）になったことを、サンプリングクロックの４周期分連続して検出すると（図中の丸数字１〜４；４度一致；ｍ＝４）、前記信号がアクティブになったと判定して割込み信号を出力する。一般に、このように構成される周辺回路１０は、入力信号のレベルがノイズの影響を受ける可能性があるため、その影響を排除する目的でアクティブの状態を連続して複数回検出するようにしている。そして、割込み予告信号は、２周期分連続して検出した段階で（２度一致；ｎ＝２）出力する。この場合も確保可能な時間を計算すると、カウンタクロックの周期が１μｓであれば２μｓとなり、１００サイクルの間隔がある。したがって、この場合も割込みハンドラを先読みするのに十分な時間が確保できる。
【００３３】
例えば、ＲＯＭ３より命令キャッシュ５にデータを転送するバスサイズが６４ビットであり、割込みハンドラの容量が２５６バイトであればデータ転送回数は３２回となるので、１回の転送に３サイクルを要しても２μｓの間に転送が可能である。また、データを転送バスサイズが１２８ビットであればデータ転送回数は１／２となるので、割込みハンドラの実際の容量等に応じて、動作クロック周波数等も併せて適宜調整すれば良い。
【００３４】
次に、本実施例の作用について図１０及び図１１を参照して説明する。図１０は、ＣＰＵ２，命令キャッシュ５，割込みコントローラ７，周辺回路８〜１０の間における処理の流れを示すフロー（シーケンス）図である。ＣＰＵ２が、割込み処理以外の通常処理を実行している場合に、周辺回路８〜１０の何れか１つ以上が割込み予告信号を出力すると（Ｓ１）、割込みコントローラ７は、その割込み予告信号に応じた割込み要求番号を命令キャッシュ５に出力する（Ｓ２）。ここで、複数の割込み予告信号が同時に入力された場合は、前述のように優先順位が高い方の割込み要求番号を出力する。
【００３５】
命令キャッシュ５は、入力された割込み要求番号に応じたベクタアドレスを生成してＲＯＭ３に出力し、制御回路１９が対応する分岐命令をキャッシュメモリ１８にロードさせる（Ｓ３）。続いて、ベクタアドレスに対応した割込みハンドラのアドレスをＲＯＭ３に出力し、割込みハンドラをキャッシュメモリ１８にロードさせる（Ｓ４）。これらＳ３，Ｓ４が「先読み処理」に対応する。そして、先読み処理が完了すると、先読み完了通知を割込みコントローラ７に出力し（Ｓ５）、割込みコントローラは上記通知を受理する（Ｓ６）。そして、対応する周辺回路より割込み信号が出力されるまで待機状態となる。
【００３６】
割込み予告信号を出力した周辺回路が割込み信号を出力すると（Ｓ７）、割込みコントローラ７は、対応する割込みハンドラの先読みが完了していることを条件に、その割込み信号に応じた割込み要求（割込みの発生通知）をＣＰＵ２に出力する（Ｓ８）。すなわち、割込み信号が入力された段階で上記の先読みが完了していなければ、割込みコントローラ７はＣＰＵ２に対する割込み要求の出力を保留することになる。またこの場合も、複数の割込み信号が同時に入力された場合は、前述のように優先順位が高い方の割込み信号を出力する。ＣＰＵ２は、割込みの受付を許可している場合は、前記割込み信号を受理したことを通知する信号を割込みコントローラ７に出力する（Ｓ９）。そして、割込みハンドラを実行するための準備（プログラムカウンタ値やフラグ値の退避等）をする移行状態となる。
【００３７】
割込みコントローラ７は、ＣＰＵ２からの割込み受理通知が入力されると、対応する割込み要求番号をＣＰＵ２に出力する（Ｓ１０）。すると、ＣＰＵ２は、前記割込み要求番号に応じたベクタアドレスを出力して命令キャッシュ５にアクセスし（Ｓ１１）、ヒットするので命令キャッシュ５より割込みベクタである分岐命令が読み出される（Ｓ１２）。ここで、Ｓ１１からＣＰＵ２は割込み処理の実行状態となる。ＣＰＵ２は、読み出した分岐命令を実行することで、対応する割込みハンドラの先頭アドレスを出力して命令キャッシュ５にアクセスする（Ｓ１３）。すると、命令キャッシュ５より割込みハンドラの命令が読み出されて（Ｓ１４）、ＣＰＵ２は、読み出した命令を実行する（Ｓ１５）。
【００３８】
図１１（ｂ）は、図１０に示す処理をタイミングチャートで表わしたもので、横軸に示す数字は、目安としてＣＰＵ２に割込み信号（図１０におけるＳ８；割込みコントローラ７がＣＰＵ２に出力する「割込み要求出力」に対応）が出力された時点を基準とするサイクル数である。尚、上述した周辺回路８〜１０の説明で挙げた具体数値例との関連はない。また図１１（ａ）は、比較のため一般的な従来構成の場合を示す。
図１１（ｂ）において、割込み予告信号が１５サイクル前に出力されると、その時点から（割込みコントローラ７の事前処理（Ｓ２）も含む）命令キャッシュ５による割込みベクタ，割込みハンドラの先読み処理が開始される。そして、先読み処理が完了すると、割込みコントローラ７はＣＰＵ２に割込み要求を出力し、ＣＰＵ２は割込み移行処理を開始する。その後に続くハッチング部分はベクタ命令の実行期間であり、それに続く異なるハッチング部分が割込みハンドラの実行期間を示している。
【００３９】
これに対して、図１１（ａ）に示す従来構成の場合は、割込み信号が出力されると、その時点から命令キャッシュへの割込みベクタ及び割込みハンドラの読み込みが開始されるため、ＣＰＵは割込み処理の実行待ち状態となる。そして、命令キャッシュへの読み込みが完了した時点でＣＰＵは割込み処理に移行するので、その間にＣＰＵの処理は停滞することになる。
【００４０】
以上のように本実施例によれば、周辺回路８〜１０は、ＣＰＵ２に対して割込みを発生させる要因となるデータの受信やタイマ割込み，入力信号のアクティブレベルの連続検出等の発生を初期段階で検出すると、事前に割込み予告信号を割込みコントローラ７に出力し、前記事象の発生が完了した段階で割込み信号を出力する。そして、割込みコントローラ７は、割込み予告信号が入力されると、当該予告信号に対応する割込みベクタ及び割込みハンドラを、ＲＯＭ３から命令キャッシュ５にロードさせる先読み処理を行う。
【００４１】
したがって、対応する割込み信号が出力されるまでの期間に命令キャッシュ５への先読み処理を完了させることができ、ＣＰＵ２は、割込みコントローラ７より割込み要求が入力されると、直ちに割込み処理に移行して割込みハンドラの実行を開始でき、割込みが発生した時点から、当該割込みを処理するまでの応答性を向上させることができる。また、割込みコントローラ７は、前記予告信号に対応する割込み信号が入力された段階で先読み処理が完了していなければ、ＣＰＵ２に対して行う割込みの発生通知を保留するので、先読み処理が完了した後にＣＰＵ２に割込みハンドラの実行を開始させることができ、処理効率の低下を防止できる。
【００４２】
また、周辺回路８が通信機能を備える場合は、外部より送信されたデータの受信処理を開始した以降から当該受信処理を完了するまでの間に割込み予告信号を出力する。すなわち、外部よりデータの送信があれば、送信されたデータの受信が完了した時点でＣＰＵ２に対して割込みを発生させることになるので、受信処理を開始した以降からその受信処理を完了するまでの間に割込み予告信号を出力すれば、割込みコントローラ７に割込みの発生を予告することができる。
【００４３】
また、周辺回路９がタイマ機能を備えている場合は、  タイマ割込み信号を発生させるタイミングよりも所定期間だけ遡行するタイミングで割込み予告信号を出力する。すなわち、ダウンカウンタ２６のカウント値によって割込みを発生させるタイミングが決まるので、前記カウント値を参照すれば、タイマ割込み信号を発生させるタイミングよりも遡行するタイミングで割込み予告信号を出力することができる。
【００４４】
また、周辺回路１０が、入力信号レベルがアクティブの状態を４回連続して検出すると前記信号がアクティブになったと判定して割込み信号を発生させるインプットキャプチャ機能を備える場合は、前記入力信号のアクティブレベルが２回連続した段階で割込み予告信号を出力する。すなわち、アクティブレベルが２回連続した段階でも、その後に入力信号がアクティブと判定される蓋然性は高いと言えるので、その時点で割込み予告信号を出力すれば、割込みコントローラ７に割込みの発生を予告することができる。
【００４５】
（第２実施例）
図１２及び図１３は第２実施例であり、第１実施例と同一部分には同一符号を付して説明を省略し、以下異なる部分について説明する。第２実施例の構成は基本的に第１実施例と同様であり、命令キャッシュ５が割込みハンドラの先読みを実行している途中で、より優先度が高い割込みが発生した場合の処理を示す。図１２は、その処理を示すタイミングチャートであり、図１３は図１０の一部相当図である。
【００４６】
２つの周辺回路（１），（２）があり、周辺回路（１）からの割込みの方が優先度が高く設定されている。最初に、周辺回路（２）が割込み予告信号を出力すると（Ｓ１ａ）、割込みコントローラ７は、第１実施例と同様に先読み要求を出力し（Ｓ２ａ）、命令キャッシュ５は、対応する割込みベクタ及び割込みハンドラの先読み処理を開始する（Ｓ３ａ，Ｓ４ａ）。尚、第２実施例では、割込みコントローラ７が命令キャッシュ５に出力する先読み要求と、命令キャッシュ５が割込みコントローラに返す応答通知の内容（データ値）を明示している。
【００４７】
図１２に示すように、先読み要求は８ビットのデータで構成され、第７，第６ビットは動作指示を示し（００：指示無／０１：先読み開始／１１：先読み中止）、第５〜第０ビットは割込み番号を示す。割込み番号は値が小さいほど優先度が高く設定されている。また、応答通知は２ビットのデータで構成され、第１，第０ビットで動作結果を示す（００：動作停止中／０１：先読み中／１０：正常終了／１１：強制終了）。したがって、Ｓ２ａにおいて出力される先読み要求のデータ値は、０ｘ４２となる。
【００４８】
命令キャッシュ５が上記先読み要求に応じた先読み処理の実行中に、周辺回路（１）が割込み予告信号を出力すると（Ｓ１ｂ）、割込みコントローラ７は命令キャッシュ５に対して先読み中止を指示する（Ｓ２ｂ；０ｘＣ２）。すると、命令キャッシュ５は、その時点で先読み処理を終了し、その旨を割込みコントローラ７に通知する（Ｓ１６；０ｘ３）。
【００４９】
割込みコントローラ７は、上記通知を受理すると、周辺回路（１）の割込み予告信号に対応する先読み要求を出力し（Ｓ２ｃ；０ｘ４１）、割込みコントローラ７は、前記要求に対応する先読みを開始する（Ｓ３ｂ，Ｓ４ｂ）。そして、先読みを完了すると先読み完了通知を出力し（Ｓ５ｂ；０ｘ２）、割込みコントローラ７は前記通知を受理する（Ｓ６ｂ）。以降は、第１実施例と同様に処理が行われる。
【００５０】
以上のように第２実施例によれば、割込みコントローラ７は、先読み処理の実行中に優先度が高い割込みの予告信号が入力されると、実行中の先読み処理を中止させて、前記優先度が高い割込みに対応する割込みハンドラの先読み処理を開始する。したがって、ＣＰＵ２が先に処理する予定の割込みに対応するハンドラを、先に命令キャッシュ５にロードすることができる。
【００５１】
（第３実施例）
図１４及び図１５は第３実施例であり、第１実施例と異なる部分について説明する。第３実施例は、命令キャッシュ５が割込み処理に関する先読みを実行している途中で、ＣＰＵ２からのアクセスでキャッシュミスが発生した場合に、両者の競合を調整する制御に関する。尚、この場合の先読み処理は、第１，第２実施例のように周辺回路８〜１０が割込み予告信号を出力する構成を前提としても良いし、割込み予告信号を出力しない構成に適用しても良い。
【００５２】
図１４は、上記の競合状態でＣＰＵ２が割込みの受付を許可している場合であり、（ａ）は一般的な従来構成である。但し、比較のため、命令キャッシュが先読みを開始するタイミングは第３実施例の構成と同じであるとする。従来構成では、命令キャッシュが割込み処理に関する先読みを行っている途中でＣＰＵからのアクセスにキャッシュミスが発生しても先読み処理が完了するまで継続するので、その間ＣＰＵの処理は待機状態となる。そして、先読み処理が完了すると割込みコントローラに完了通知を行い、割込みコントローラがＣＰＵに対して割込み要求を与えるので、ＣＰＵはその時点から割込み処理への移行を開始する。
【００５３】
一方、図１４（ｂ）に示す第３実施例の場合、命令キャッシュ５の制御回路１９は、キャッシュミスの発生を認識すると、その時点で割込みコントローラ７に「先読み完了」を通知するが、先読み処理はそのまま継続する。割込みコントローラ７は、「先読み完了通知」を受理すると、割込み信号の入力があった時点でＣＰＵ２に割込み要求を出力するので、ＣＰＵ２は、その時点から割込み処理に移行することになる。
【００５４】
また、図１５は、図１４と同じ競合状態でＣＰＵ２が割込みの受付を禁止している場合である。（ａ）に示す従来構成では、ＣＰＵからのアクセスにキャッシュミスが発生しても図１４と同様に先読み処理を継続し、先読み処理が完了すると完了通知を行う。続いて、通常処理においてミスが発生して命令のロードを開始し、そのロードが完了するとＣＰＵが待機させていた通常処理を再開する。
【００５５】
図１５（ｂ）に示す第３実施例の場合、命令キャッシュ５の制御回路１９は、キャッシュミスの発生を認識すると、その時点で先読み処理を中止させて割込みコントローラ７に「先読み中止」を通知する。そして、直ちに通常処理においてキャッシュミスが発生した命令のロードを開始し、そのロードが完了するとＣＰＵ２が待機させていた通常処理を再開する。したがって、ＣＰＵ２が割込みの受付を禁止していることで不要な割込み処理に関する先読みを即時中止し、通常処理のロードを開始するので、その分だけＣＰＵ２が待機状態となる期間を削減できる。
【００５６】
以上のように第３実施例によれば、割込みコントローラ７は、周辺回路８〜１０が割込みを発生させるとＣＰＵ２に対して行う割込みの発生通知を保留して、当該割込みに対応する割込みハンドラをＲＯＭ３から命令キャッシュ５にロードさせる先読み処理を行う。そして、命令キャッシュ５の制御回路１９は、先読み処理の実行中にＣＰＵ２からのアクセスにキャッシュミスが発生すると、その時点でＣＰＵ２が割込み許可状態であれば先読み処理を優先して実行し、割込み禁止状態であれば先読み処理を中止して、ＣＰＵ２がフェッチしようとする命令を命令キャッシュ５にロードさせる。
【００５７】
すなわち、ＣＰＵ２が割込み許可状態であれば先読み処理を優先することで、ＣＰＵ２に割込み処理を早期に実行させることができる。また、ＣＰＵ２が割込み禁止状態であれば、割込みの処理が直ちに開始されることはないので、ＣＰＵ２がフェッチしようとする命令を命令キャッシュ５にロードさせて、現在実行中の通常処理を優先させる。したがって、ＣＰＵ２側の割込みへの対応状態に応じて処理効率を向上させることができる。
そして、制御回路１９は、先読み処理を優先して実行する際には、割込みコントローラ７に対して直ちに先読み処理の完了を通知し、割込みコントローラは７、当該通知がなされるとＣＰＵ２に対して割込みの発生通知を行うので、ＣＰＵ２を直ちに割込み処理に移行させることができる。
【００５８】
本発明は、上記し、又は図面に記載した実施例にのみ限定されるものではなく、以下のような変型又は拡張が可能である。
例えば割込みハンドラの先頭アドレスが固定であれば、割込みベクタに関しては先読み処理を行う必要はなく、例えば割込み要求番号が与えられると、ＣＰＵがその割込み要求番号に応じた割込みハンドラを直ちに出力するように構成しても良い。
割込みコントローラは、ＣＰＵが割込み処理に移行するまでの期間分だけ、割込み信号を早めに出力しても良い。
周辺回路の機能は、実施例に示したものに限ることなく、マイクロコンピュータの仕様として必要とされるものであればどのような機能でも良い。また、周辺回路の数も、個別の設計に応じて適宜決定すれば良い。
【００５９】
プログラムメモリは、書き換え可能なフラッシュメモリ等であっても良い。
第３実施例の構成に、第２実施例の構成を組み合わせても良い。
命令キャッシュ５において、キャッシュメモリ１８にアドレス管理情報のフラグ格納領域を設け、先読みが完了した段階でフラグをセットし、ＣＰＵ２がアクセスして読み出した（ヒットした）アドレスのフラグをリセットして、命令の上書きを可能にしても良い。これにより、ＣＰＵ２が割込みの受付を禁止していることで割込み要求が保留された場合に、先読みした命令が上書きされることを防止し、キャッシュミスの発生を回避できる。
通常処理の命令を先読みするキャッシュメモリと、割込み処理に関する命令を先読み処理するキャッシュメモリとが、例えばウェイ（ライン）が異なるように切り分けても良い。これにより、通常処理を実行している途中に割込み処理に関する先読み処理を行った場合に、通常処理の命令を上書きすることを回避できる。
【符号の説明】
【００６０】
図面中、１はマイクロコンピュータ、２はＣＰＵ、３はＲＯＭ（プログラムメモリ）、５は命令キャッシュ、７は割込みコントローラ、８〜１０は周辺回路、１９は制御回路（キャッシュコントローラ）を示す。
【図１】
0005549627.tif 000002
【図２】
0005549627.tif 000003
【図３】
0005549627.tif 000004
【図４】
0005549627.tif 000005
【図５】
0005549627.tif 000006
【図６】
0005549627.tif 000007
【図７】
0005549627.tif 000008
【図８】
0005549627.tif 000009
【図９】
0005549627.tif 000010
【図１０】
0005549627.tif 000011
【図１１】
0005549627.tif 000012
【図１２】
0005549627.tif 000013
【図１３】
0005549627.tif 000014
【図１４】
0005549627.tif 000015
【図１５】
0005549627.tif 000016