(57)【要約】【課題】周期処理と非周期処理とを混在させた環境でマイクロプロセッサを作動させる際、時間のずれを生じさせずに周期的に周期処理を実行する。【解決手段】一周期に相当するサイクル数をカウントするカウンタ３２６から当該カウンタ３２６がカウントするカウント数と、停止タイミングレジスタ３２７から非周期プログラムの実行を停止させる停止タイミングを示すサイクル数と、をプログラムカウンタ制御ユニット３１２にそれぞれ入力する。プログラムカウンタ制御ユニット３１２は、カウンタ３２６のカウント数と停止タイミングを示すサイクル数とが一致したとき、プログラムカウンタ３２３のアドレスの更新を停止し、カウンタ３２６が一周期をカウントし終えた場合、周期プログラムレジスタ３２５に格納された周期プログラムの先頭アドレスをプログラムカウンタ３２３に格納させて周期プログラムの実行を開始させる。【選択図】図２
2008077294.tif 000002
【特許請求の範囲】
【請求項１】
一定数のサイクル数を一周期とし、前記一周期の始まりと共に実行される周期プログラムと当該周期プログラムが終了した後に実行される非周期プログラムとを前記一周期内で前記各プログラムを構成する各命令を実行するようになっており、前記一周期を繰り返し実行することによって前記周期プログラムを周期的に実行するマイクロプロセッサであって、
前記非周期プログラムの実行を停止させる停止タイミングを示すサイクル数を格納する停止タイミングレジスタ（３２７）と、
前記一周期に相当するサイクル数をカウントする時間計測手段（３２６）と、
前記周期プログラムの先頭アドレスを格納する周期プログラムレジスタ（３２５）と、
前記周期プログラムもしくは前記非周期プログラムを実行すべくフェッチする命令のフェッチプログラムアドレスを格納すると共に、前記フェッチする命令を読み出す度に前記フェッチプログラムアドレスを更新するプログラムカウンタ（３２３）と、
前記時間計測手段（３２６）から当該時間計測手段（３２６）がカウントするカウント数と前記停止タイミングレジスタ（３２７）から前記停止タイミングを示すサイクル数とをそれぞれ入力すると共に、前記時間計測手段（３２６）がカウントするサイクル数と前記停止タイミングを示すサイクル数とが一致したとき、前記プログラムカウンタ（３２３）を停止することで前記非周期プログラムの実行を中断させるようになっており、この後、前記時間計測手段（３２６）から入力されるカウント数が前記一周期の終わりを示すカウント数に一致した場合、前記周期プログラムレジスタ（３２５）に格納された前記周期プログラムの先頭アドレスを前記プログラムカウンタ（３２３）に格納させることで、前記周期プログラムの実行を開始させるプログラムカウンタ制御ユニット（３１２）と、を備えていることを特徴とするマイクロプロセッサ。
【請求項２】
一定数のサイクル数を一周期とし、前記一周期の始まりと共に実行される周期プログラムと当該周期プログラムが終了した後に実行される非周期プログラムとを前記一周期内で前記各プログラムを構成する各命令を実行するようになっており、前記一周期を繰り返し実行することによって前記周期プログラムを周期的に実行するマイクロプロセッサであって、
前記一周期に相当するサイクル数をカウントする時間計測手段（３２６）と、
前記周期プログラムの先頭アドレスを格納する周期プログラムレジスタ（３２５）と、
前記周期プログラムもしくは前記非周期プログラムを実行すべくフェッチする命令のフェッチプログラムアドレスを格納すると共に、前記フェッチする命令を読み出す度に前記フェッチプログラムアドレスを更新するプログラムカウンタ（３２３）と、
前記命令を実行してから完了するまでに必要な最大サイクル数を前記非周期プログラムの実行を停止させるための最大実行サイクル数とし、外部にデータを読み書きするために必要な最大のサイクル数を示す最大ウェイトサイクル数を前記最大実行サイクル数に加えることで停止タイミングを示すサイクル数を取得する停止タイミング生成ユニット（３１３）と、
前記時間計測手段（３２６）から当該時間計測手段（３２６）がカウントするカウント数と前記停止タイミング生成ユニット（３１３）から前記停止タイミングを示すサイクル数とをそれぞれ入力すると共に、前記時間計測手段（３２６）がカウントするサイクル数と前記停止タイミングを示すサイクル数とが一致したとき、前記プログラムカウンタ（３２３）を停止することで前記非周期プログラムの実行を中断させるようになっており、この後、前記時間計測手段（３２６）から入力されるカウント数が前記一周期の終わりを示すカウント数に一致した場合、前記周期プログラムレジスタ（３２５）に格納された前記周期プログラムの先頭アドレスを前記プログラムカウンタ（３２３）に格納させることで、前記周期プログラムの実行を開始させるプログラムカウンタ制御ユニット（３１２）と、を備えていることを特徴とするマイクロプロセッサ。
【請求項３】
前記最大実行サイクル数は、パイプラインストールが起こった場合の命令の最大サイクル数を示すことを特徴とする請求項２に記載のマイクロプロセッサ。
【請求項４】
前記プログラムカウンタ制御ユニット（３１２）は、更新を停止させた前記プログラムカウンタ（３２３）のフェッチプログラムアドレスを外部に退避させるようになっており、前記周期プログラムの実行が終了した後、前記外部に退避させた前記非周期プログラムのフェッチプログラムアドレスを前記プログラムカウンタ（３２３）に入力させることで、中断した非周期プログラムの実行を再開させるようになっていることを特徴とする請求項１ないし３のいずれか１つに記載のマイクロプロセッサ。
【請求項５】
前記プログラムカウンタ（３２３）から当該プログラムカウンタ（３２３）が示す前記フェッチプログラムアドレスを入力することで当該フェッチプログラムアドレスの履歴を格納するプログラムカウンタバッファ（３１４）を備えており、
前記プログラムカウンタ制御ユニット（３１２）は、前記プログラムカウンタバッファ（３１４）から選び出した前記フェッチプログラムアドレスを外部に退避させるようになっており、前記周期プログラムの実行が終了した後、外部に退避させた前記フェッチプログラムアドレスを前記プログラムカウンタ（３２３）に格納させることで、中断した非周期プログラムの実行を再開させるようになっていることを特徴とする請求項１ないし３のいずれか１つに記載のマイクロプロセッサ。
【請求項６】
一定数のサイクル数を一周期とし、前記一周期の始まりと共に実行される周期プログラムと当該周期プログラムが終了した後に実行される非周期プログラムとを前記一周期内で前記各プログラムを構成する各命令を実行するようになっており、前記一周期を繰り返し実行することによって前記周期プログラムを周期的に実行するマイクロプロセッサであって、
前記一周期に相当するサイクル数をカウントする時間計測手段（３２６）と、
前記周期プログラムの先頭アドレスを格納する周期プログラムレジスタ（３２５）と、
前記周期プログラムもしくは前記非周期プログラムを実行すべくフェッチする命令のフェッチプログラムアドレスを格納すると共に、前記フェッチする命令を読み出す度に前記フェッチプログラムアドレスを更新するプログラムカウンタ（３２３）と、
前記プログラムカウンタ（３２３）から当該プログラムカウンタ（３２３）が示す前記フェッチプログラムアドレスを入力することで当該フェッチプログラムアドレスの履歴を格納するプログラムカウンタバッファ（３１４）と、
前記時間計測手段（３２６）から入力されるカウント数が前記一周期の終わりを示すカウント数に一致する場合に実行中となる前記非周期プログラムの命令を実行しないと判定すると共に、その命令の開始について前記一周期の終わりを示すカウント数から遡ったサイクル数を取得し、前記プログラムカウンタバッファ（３１４）から当該サイクル数に対応したフェッチプログラムアドレスを選び出すようになっており、前記時間計測手段（３２６）から入力されるカウント数が前記一周期の始まりを示すカウント数になった場合、前記周期プログラムレジスタ（３２５）に格納された前記周期プログラムの先頭アドレスを前記プログラムカウンタ（３２３）に格納させることで、前記周期プログラムの実行を開始させるプログラムカウンタ制御ユニット（３１２）と、を備えていることを特徴とするマイクロプロセッサ。
【請求項７】
前記プログラムカウンタ制御ユニット（３１２）が外部にデータを読み書きするために必要な最大のサイクル数を示す最大ウェイトサイクル数を見積もることで前記一周期の終わりを示すカウント数に一致する場合に実行中となる前記非周期プログラムの命令を実行しないと判定することを特徴とする請求項６に記載のマイクロプロセッサ。
【請求項８】
前記プログラムカウンタ制御ユニット（３１２）は、前記プログラムカウンタバッファ（３１４）から選び出した前記フェッチプログラムアドレスを外部に退避させるようになっており、前記周期プログラムの実行が終了した後、外部に退避させた前記フェッチプログラムアドレスを前記プログラムカウンタ（３２３）に格納させることで、中断した非周期プログラムの実行を再開させるようになっていることを特徴とする請求項６に記載のマイクロプロセッサ。
【請求項９】
前記プログラムカウンタバッファ（３１４）から入力されるフェッチプログラムアドレスを格納する保存用レジスタ（３２８）が備えられており、
前記プログラムカウンタ制御ユニット（３１２）は、前記プログラムカウンタバッファ（３１４）から選び出した前記フェッチプログラムアドレスを前記保存用レジスタ（３２８）に退避させるようになっており、前記周期プログラムの実行が終了した後、前記保存用レジスタ（３２８）に退避させた前記フェッチプログラムアドレスを前記プログラムカウンタ（３２３）に格納させることで、中断した非周期プログラムの実行を再開させるようになっていることを特徴とする請求項６に記載のマイクロプロセッサ。
【請求項１０】
請求項１ないし９のいずれか１つに記載のマイクロプロセッサと、
前記周期プログラムおよび前記非周期プログラムを格納する第１記憶手段（１００）と、
前記マイクロプロセッサによってデータが書き込まれる第２記憶手段（２００）と、を備えていることを特徴とするマイクロコンピュータ。
【請求項１１】
前記第１記憶手段（１００）には、前記周期プログラムを周期的に実行させるための前記一周期に相当する一定数のカウント数を前記時間計測手段（３２６）に設定する開始タイミング設定命令が格納されており、
前記マイクロプロセッサは、前記周期プログラムを実行するに際し、前記開始タイミング設定命令を実行することで、前記時間計測手段（３２６）に前記一周期に相当する一定数のサイクル数を設定するようになっていることを特徴とする請求項１０に記載のマイクロコンピュータ。
【請求項１２】
前記第１記憶手段（１００）には、前記周期プログラムの実行が終了した後、前記非周期プログラムへ分岐する非周期プログラム開始命令が格納されており、
前記マイクロプロセッサは、前記周期プログラムの実行後、前記非周期プログラム開始命令を実行することにより、前記非周期プログラムの実行を開始するようになっていることを特徴とする請求項１０または１１に記載のマイクロプロセッサ。
【請求項１３】
前記第１記憶手段（１００）には、前記周期プログラムの先頭アドレスを前記周期プログラムレジスタ（３２５）に書き込む周期プログラムレジスタ設定命令が格納されており、
前記マイクロプロセッサは、当該マイクロプロセッサのリセット後、前記開始タイミング設定命令の実行前に前記周期プログラムレジスタ設定命令を実行するようになっていることを特徴とする請求項１０ないし１２のいずれか１つに記載のマイクロコンピュータ。
【請求項１４】
前記第１記憶手段（１００）には、前記停止タイミングレジスタ（３２７）に前記非周期プログラムの実行を停止させる前記停止タイミングを示すサイクル数を書き込む停止タイミングレジスタ設定命令が格納されており、
前記マイクロプロセッサは、当該マイクロプロセッサのリセット後、前記開始タイミング設定命令の実行前に前記停止タイミングレジスタ設定命令の実行するようになっていることを特徴とする請求項１１ないし１３のいずれか１つに記載のマイクロコンピュータ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイクロプロセッサおよびそれを用いたマイクロコンピュータに関し、特に、正確な時間で起動しなければならない周期プログラムと時間に依存しない非周期プログラムとが混在する環境において、周期プログラムを開始する際のプログラム開始／停止手法に関するものである。
【背景技術】
【０００２】
従来より、マイクロプロセッサ（いわゆるＣＰＵ）外部にタイマ回路を設け、当該タイマ回路を用いたプログラムの割り込みによって周期処理を開始させる方法が知られている。具体的には、タイマ回路から一定周期で割り込み信号をマイクロプロセッサに入力し、単独最高レベルの割り込みをマイクロプロセッサに発生させる。これにより、マイクロプロセッサにおいて割り込みルーチン内で周期処理を周期的に実行することができるようになっている。
【０００３】
しかしながら、最高レベルの割り込みであっても、マイクロプロセッサが直ちにこの割り込みを受け付けるとは限らない。すなわち、例えば、複数のバスサイクルを必要とするメモリ転送命令においてメモリ転送を行っている最中や、分岐命令の処理シーケンス中や、他の割り込みの起動・復帰シーケンス中等では、これら各処理が完了するまで一切の割り込みが禁止される。つまり、上記のような割り込み禁止区間中にタイマ回路からの割り込みが発生した場合、上記各処理が終了するまで割り込みの開始が待たされるため、周期処理の周期性を完全に確保できないという問題が生じる。
【０００４】
そこで、各処理の実行時間を一定に保つ時間調整手段をマイクロプロセッサに備えることで、プログラム実行の周期性を確保する方法が、例えば特許文献１で提案されている。具体的に、特許文献１では、命令コードを実行する処理ユニットと、処理ユニットで実行される命令コード間の時間調整を行う時間調整手段と、外部バスとのインタフェースの役割を担うバッファとを備えたマイクロプロセッサが提案されている。
【０００５】
また、時間調整手段は、命令コード間の時間を計測する時間計測手段と、特定時間（所望の同期時間）を設定する特定時間設定手段と、時間計測手段で計測された時間と特定時間設定手段で設定された特定時間との差分を演算する差分演算手段と、差分演算手段で得られた差分に見合う時間だけアイドル状態を挿入するアイドル状態挿入手段とを備えている。
【０００６】
上記構成を有するマイクロプロセッサでは、時間計測手段にて命令コード間の時間が計測され、差分演算手段にて時間計測手段で計測された時間と特定時間設定手段で設定された特定時間との差分が演算される（同期化命令）。そして、アイドル状態挿入手段にて差分演算手段で得られた差分に見合う時間だけアイドル状態が挿入される。
【０００７】
このように、周期プログラムを実行した後、マイクロプロセッサの時間調整手段において同期化命令を行ってアイドル状態を設けることにより、処理ユニットで実行される各命令コード間の時間調整が行なわれる。これにより、周期処理の周期性が確保されるようになっている。
【特許文献１】特開平５−２３３２７７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、上記従来の技術では、周期処理を周期的に実行しているものの、マイクロプロセッサにアイドル状態を設けているため、マイクロプロセッサの処理能力の低下や処理能力の無駄が生じている。
【０００９】
そこで、本発明者らは、マイクロプロセッサに周期処理を周期的に実行させると共に、マイクロプロセッサが上記アイドル状態の場合には、マイクロプロセッサに非周期処理を実行させることで、マイクロプロセッサの処理能力の有効利用を図ることを考えた。
【００１０】
しかしながら、アイドル状態で非周期処理を実行させようとすると、マイクロプロセッサで処理されるプログラムにあらかじめ同期化命令を記述しなければならない。このため、周期処理と非周期処理とが混在する環境に    マイクロプロセッサを適用することを考えた場合、非周期処理を周期処理の周期に合わせるようにする同期化命令を挿入しなければならない。このようなプログラム実行環境では、非周期処理を作成するプログラマが周期処理の周期や同期化命令の挿入タイミングを熟慮してアプリケーションを設計しなければならないため、プログラム開発が煩雑になるという問題がある。
【００１１】
したがって、周期処理と非周期処理とが混在する環境にマイクロプロセッサを適用する場合、上記のように、マイクロプロセッサにタイマ回路から周期的に割り込み信号を入力することで、マイクロプロセッサに周期処理を周期的に実行させ、周期処理の間に非周期処理を実行させるようにすることが考えられる。
【００１２】
しかし、上述のように、マイクロプロセッサの処理状態によっては割り込みが後回しにされてしまい、周期処理の実行タイミングに遅れが生じてしまう。これにより、この遅れが時間経過と共に蓄積されることで、周期処理が周期的に実行されなくなってしまう。
【００１３】
本発明は、上記点に鑑み、周期処理と非周期処理とを混在させた環境でマイクロプロセッサを作動させる際、周期処理を時間のずれを生じさせずに周期的に実行させることができるマイクロプロセッサおよびそれを用いたマイクロコンピュータを提供することを目的とする。
【課題を解決するための手段】
【００１４】
上記目的を達成するため、本発明の第１の特徴では、プログラムカウンタ制御ユニット（３１２）は、一周期に相当するサイクル数をカウントする時間計測手段（３２６）から当該時間計測手段（３２６）がカウントするカウント数を入力すると共に、停止タイミングレジスタ（３２７）から非周期プログラムの実行を停止させる停止タイミングを示すサイクル数を入力する。
【００１５】
そして、プログラムカウンタ制御ユニット（３１２）は、時間計測手段（３２６）がカウントするカウント数と停止タイミングを示すサイクル数とを比較し、それぞれが一致したときには、プログラムカウンタ（３２３）を停止して非周期プログラムの実行を中断させる。
【００１６】
この後、プログラムカウンタ制御ユニット（３１２）は、時間計測手段（３２６）から入力されるカウント数が一周期の終わりを示すカウント数に一致した場合、周期プログラムレジスタ（３２５）に格納された周期プログラムの先頭アドレスをプログラムカウンタ（３２３）に格納させることで、周期プログラムの実行を開始させることを特徴とする。
【００１７】
このように、時間計測手段（３２６）のカウント数が停止タイミングを示すサイクル数と一致したとき、非周期プログラムの実行を中断させることで、周期プログラムの開始タイミングの際に非周期プログラムが実行されていない状態とすることができる。すなわち、周期プログラムの実行タイミングで非周期プログラムが実行中にならないようにすることができ、周期プログラムを周期的に実行させることができる。
【００１８】
また、周期プログラムを周期的に実行させる場合、上記のように周期プログラム開始前に非周期プログラムの実行を中断させるため、マイクロプロセッサの外部から割り込み信号を入力する必要はなく、周期プログラムを時間のずれを生じさせずに周期的に実行させることができる。
【００１９】
本発明の第２の特徴では、プログラムカウンタ制御ユニット（３１２）は、上記と同様に非周期プログラムの実行を中断させた後、時間計測手段（３２６）から入力されるカウント数が一周期の終わりを示すカウント数に一致した場合、周期プログラムレジスタ（３２５）に格納された周期プログラムの先頭アドレスをプログラムカウンタ（３２３）に格納させることで、周期プログラムの実行を開始させることを特徴とする。
【００２０】
このように、時間計測手段（３２６）のカウント数が停止タイミングを示すサイクル数と一致したとき、非周期プログラムの実行を中断させ、周期プログラムを実行させることで、周期プログラムを時間のずれを生じさせずに周期的に実行させることができる。
【００２１】
また、命令を実行することで次の命令がストールする場合、非周期プログラムの実行を停止させる停止タイミングを示すサイクル数を規定することで、時間計測手段（３２６）が一周期分のカウント数をカウントしてしまう前に命令を完了できるようにすることができる。したがって、周期プログラムを周期的に実行させようとしたとき、非周期プログラムを確実に終了させておくことができ、周期プログラムを確実に周期的に実行させることができる。
【００２２】
ここで、最大実行サイクル数を、パイプラインストールが起こった場合の命令の最大サイクル数であると定義することができる。これにより、マイクロプロセッサがパイプライン処理を行う場合でも最大サイクル数を持つ処理（すなわち非周期プログラム）を確実に停止することができる。
【００２３】
また、プログラムカウンタ制御ユニット（３１２）は、更新を停止させたプログラムカウンタ（３２３）のフェッチプログラムアドレスを外部（例えば後述する第２記憶手段（２００））に退避させる。そして、周期プログラムの実行終了後、プログラムカウンタ制御ユニット（３１２）は、外部に退避させた非周期プログラムのフェッチプログラムアドレスをプログラムカウンタ（３２３）に入力させることで、中断した非周期プログラムの実行を再開させる。これにより、一周期の終わりと共に中断させた非周期プログラムについて、中断した命令から再開させることができる。
【００２４】
上記マイクロプロセッサの構成においては、プログラムカウンタ（３２３）から当該プログラムカウンタ（３２３）が示すフェッチプログラムアドレスを入力することで当該フェッチプログラムアドレスの履歴を格納するプログラムカウンタバッファ（３１４）を備えるようにすることもできる。
【００２５】
これにより、プログラムカウンタ制御ユニット（３１２）は、プログラムカウンタバッファ（３１４）から選び出したフェッチプログラムアドレスを外部に退避させるようになっており、周期プログラムの実行が終了した後、外部に退避させたフェッチプログラムアドレスをプログラムカウンタ（３２３）に格納させることで、中断した非周期プログラムの実行を再開させることができる。
【００２６】
本発明の第３の特徴では、マイクロプロセッサに、プログラムカウンタ（３２３）からフェッチプログラムアドレスを入力してその履歴を格納するプログラムカウンタバッファ（３１４）を備えるようにする。
【００２７】
また、プログラムカウンタ制御ユニット（３１２）は、時間計測手段（３２６）から入力されるカウント数が一周期の終わりを示すカウント数に一致する場合に実行中となる非周期プログラムの命令を実行しないと判定する。
【００２８】
この後、プログラムカウンタ制御ユニット（３１２）は実行しないと判定した命令の開始について一周期の終わりを示すカウント数から遡ったサイクル数を取得し、プログラムカウンタバッファ（３１４）から当該サイクル数に対応したフェッチプログラムアドレスを選び出す。
【００２９】
そして、プログラムカウンタ制御ユニット（３１２）は、時間計測手段（３２６）から入力されるカウント数が一周期の始まりを示すカウント数になった場合、周期プログラムの実行を開始させることを特徴とする。
【００３０】
このように、一周期が終了する際、非周期プログラムの命令が完了しないその命令のフェッチプログラムアドレスをプログラムカウンタバッファ（３１４）から選び出し、非周期プログラムを中断して再び一周期のカウントを開始することで、周期プログラムを一周期の始まりから確実に実行させることができる。
【００３１】
また、非周期プログラムにおいて実行を完了できない命令のフェッチプログラムアドレスをプログラムカウンタバッファ（３１４）から選び出しているので、上記のような非周期プログラムの中断後周期プログラムの開始までのサイクル数を削減することができる。これにより、一周期内で非周期プログラムを実行できる期間をより長くすることができる。
【００３２】
さらに、プログラムカウンタ制御ユニット（３１２）が外部にデータを読み書きするために必要な最大のサイクル数を示す最大ウェイトサイクル数を見積もることで一周期の終わりを示すカウント数に一致する場合に実行中となる非周期プログラムの命令を実行しないと判定するようにすることもできる。
【００３３】
上記プログラムカウンタ制御ユニット（３１２）は、プログラムカウンタバッファ（３１４）から選び出したフェッチプログラムアドレスを外部に退避させることができる。そして、周期プログラムの実行終了後、プログラムカウンタ制御ユニット（３１２）は外部に退避させたフェッチプログラムアドレスをプログラムカウンタ（３２３）に格納させることで、中断した非周期プログラムの実行を再開させることができる。
【００３４】
これにより、上記と同様に、中断させた非周期プログラムについて、中断した命令から非周期プログラムの実行を再開させることができる。
【００３５】
また、マイクロプロセッサに、プログラムカウンタバッファ（３１４）から入力されるフェッチプログラムアドレスを格納する保存用レジスタ（３２８）を備える。そして、プログラムカウンタ制御ユニット（３１２）は、プログラムカウンタバッファ（３１４）から選び出したフェッチプログラムアドレスを前記保存用レジスタ（３２８）に退避させる。周期プログラムの実行終後、プログラムカウンタ制御ユニット（３１２）は、保存用レジスタ（３２８）に退避させたフェッチプログラムアドレスをプログラムカウンタ（３２３）に格納させることで、中断した非周期プログラムの実行を再開させることができる。このようにしても、中断させた非周期プログラムの実行を再開させることができる。
【００３６】
上記マイクロプロセッサと、周期プログラムおよび非周期プログラムを格納する第１記憶手段（１００）と、マイクロプロセッサによってデータが書き込まれる第２記憶手段（２００）と、を備えたマイクロコンピュータを構成することもできる。
【００３７】
このうち、第１記憶手段（１００）に、周期プログラムを周期的に実行させるための前記一周期に相当する一定数のカウント数を時間計測手段（３２６）に設定する開始タイミング設定命令を格納することができる。そして、マイクロプロセッサに開始タイミング設定命令を実行させることで、時間計測手段（３２６）に一周期に相当する一定数のサイクル数を設定することができる。
【００３８】
これにより、周期プログラムの実行を開始する際、一周期を一定数のサイクル数として規定することができる。そして、周期プログラムの実行を開始する際、常に上記開始タイミング設定命令を行って一周期に相当するカウント数を設定することで、周期プログラムを周期的に実行させることができる。
【００３９】
また、第１記憶手段（１００）に、周期プログラムの実行が終了した後、非周期プログラムへ分岐する非周期プログラム開始命令を格納することができる。そして、マイクロプロセッサに、周期プログラムの実行後、非周期プログラム開始命令を実行させることで、非周期プログラムの実行を開始することができる。
【００４０】
さらに、第１記憶手段（１００）に、周期プログラムの先頭アドレスを周期プログラムレジスタ（３２５）に書き込む周期プログラムレジスタ設定命令を格納することができる。そして、マイクロプロセッサに、当該マイクロプロセッサのリセット後、開始タイミング設定命令の実行前に、周期プログラムレジスタ設定命令を実行させることができる。これにより、一周期の始まりにおいて周期プログラムレジスタ（３２５）に格納されたアドレスに従って周期プログラムが実行されるようにすることができる。
【００４１】
さらに、第１記憶手段（１００）に、停止タイミングレジスタ（３２７）に非周期プログラムの実行を停止させる停止タイミングを示すサイクル数を書き込む停止タイミングレジスタ設定命令を格納することができる。そして、マイクロプロセッサ、当該マイクロプロセッサのリセット後、開始タイミング設定命令の実行前に停止タイミングレジスタ設定命令の実行させることができる。
【００４２】
なお、上記各手段の括弧内の符号は、後述する実施形態に記載の具体的手段との対応関係を示すものである。
【発明を実施するための最良の形態】
【００４３】
以下、本発明の実施形態について図に基づいて説明する。なお、以下の各実施形態相互において、互いに同一もしくは均等である部分には、図中、同一符号を付してある。
【００４４】
（第１実施形態）
以下、本発明の第１実施形態について図を参照して説明する。本実施形態に係るマイクロプロセッサは、いわゆるマイクロコンピュータを構成するＣＰＵに該当するものであり、周期処理（以下、周期プログラムという）と非周期処理（以下、非周期プログラムという）とを実行することにより、所望の処理を行うものである。
【００４５】
具体的に、マイクロプロセッサは、周期プログラムを周期的に実行すると共に、周期プログラムと周期プログラムとの間に非周期プログラムを実行する。周期プログラムとしては、例えばＰＷＭ制御の周期パルスの生成、タイマのカウント、通信処理を行うものが採用され、非周期プログラムとしては、例えば周期的な実行を必要としないアプリケーションを実行するためのものが採用される。
【００４６】
図１は、本発明の第１実施形態に係るマイクロコンピュータのブロック構成図である。この図に示されるように、マイクロコンピュータＭ１（以下、マイコンという）は、ＲＯＭ１００（本発明の第１記憶手段に相当）と、ＲＡＭ２００（本発明の第２記憶手段に相当）と、ＣＰＵ３００とを備えて構成されており、各々がプログラムのアドレスを転送するために用いられるアドレスバス４００、データを転送するために用いられるデータバス５００に接続されている。
【００４７】
ＲＯＭ１００は、読み出し専用の記録媒体である。このＲＯＭ１００には、マイコンＭ１が搭載された製品に上記に示したような周期的な処理を実行させる周期プログラムと、マイコンＭ１が搭載された製品の製品機能等を実現させるアプリケーションとしての非周期プログラムと、が書き込まれており、それぞれＣＰＵ３００にて読み出されて実行されるようになっている。
【００４８】
ＲＡＭ２００は、データの書き換えが可能である記憶媒体であり、ＣＰＵ３００が周期プログラムや非周期プログラムを実行する上でデータの書き込み・読み出しを行う際に用いられる。
【００４９】
ＣＰＵ３００は、ＲＯＭ１００に記憶された周期プログラムを周期的に実行すると共に、周期プログラムの処理の間に非周期プログラムを実行するものである。すなわち、ＣＰＵ３００は、アドレスバス４００およびデータバス５００を介してＲＯＭ１００に内蔵された各プログラムを読み出すと共に、読み出した命令を解釈し、解釈した命令に従ってデータの移動や演算、加工等を行う。
【００５０】
図２は、本発明の第１実施形態に係るＣＰＵ３００のブロック構成図である。このＣＰＵ３００は、プログラムの実行状況を制御する制御ユニット３１０と、データの格納や算術・論理演算を実行するデータパス３２０と、を備えて構成されている。
【００５１】
このうち、制御ユニット３１０は、命令デコード３１１と、プログラムカウンタ制御ユニット３１２と、を備えている。命令デコード３１１は、ＲＯＭ１００から取り込んだプログラムが示す命令コードをデータパス３２０を介して格納すると共に、取り込んだ命令コードを解読する。また、プログラムカウンタ制御ユニット３１２は、命令デコード３１１にて解読された命令に基づいて演算制御信号を出力することによってデータパス３２０を制御する。
【００５２】
データパス３２０は、ロードストアユニット３２１と、実行ユニット３２２と、プログラムカウンタ３２３（以下、ＰＣという）と、レジスタファイル３２４と、を備えて構成されている。
【００５３】
ロードストアユニット３２１は、ＣＰＵ３００の外部（例えばＲＯＭ１００）からのデータ読み込み、および外部（例えばＲＡＭ２００）へのデータ書き込みを制御するものである。実行ユニット３２２は、命令デコード３１１で解読された命令コードに従い、プログラムカウンタ制御ユニット３１２から入力される演算制御信号に応じて算術・論理演算を実行するものである。
【００５４】
ＰＣ３２３は、次に実行する命令が格納されているＲＯＭ１００のフェッチプログラムアドレスを示すものである。すなわち、ＣＰＵ３００がＲＯＭ１００から命令（プログラム）の読み込みを行なう際、その命令を読み出すためのフェッチプログラムアドレスがＰＣ３２３からロードストアユニット３２１を介してアドレスバス４００に出力される。また、ＣＰＵ３００がＲＯＭ１００から命令を読み込む度に読み取った命令の分だけＰＣ３２３のフェッチプログラムアドレスの値が増加するようになっている。
【００５５】
また、レジスタファイル３２４は、実行ユニット３２２により実行された結果のデータもしくはＣＰＵ３００の外部より取り込まれたデータを格納するものである。このようなレジスタファイル３２４は、プログラムの実行タイミングの精度が要求される周期プログラムの先頭アドレスを格納する周期プログラムレジスタ３２５と、マシンサイクルに同期してカウントダウンするカウンタ３２６（本発明の時間計測手段に相当）と、プログラムの実行タイミングの精度が要求されない非周期プログラムの停止タイミングを格納する停止タイミングレジスタ３２７とを備えて構成されている。
【００５６】
以上が、本実施形態に係るマイコンＭ１の構成である。このような構成を有するマイコンＭ１において、ＣＰＵ３００は、メモリから命令を読み込むＩＦ（フェッチ）ステージと、命令を解読するＤＥＣ（デコード）ステージと、解読された命令に従って算術・演算やメモリアクセス等のアドレス演算を行うＥＸＥ（実行）ステージと、データのメモリ（例えばＲＡＭ２００）への読み書きを行うＭＡ（メモリアクセス）ステージと、メモリから読み込んだ結果や算術演算の結果をレジスタ（例えばレジスタファイル３２４）に書き込むＷＢ（ライトバック）ステージからなるパイプライン処理を行うようになっている。このパイプライン処理について、図３を参照して説明する。
【００５７】
図３は、ＣＰＵ３００が実行するパイプライン処理の一例を示した図である。まず、本実施形態では、ＣＰＵ３００で実行される命令を以下の３種類とする。
（１）論理・算術命令Ａ：ＲＡＭ２００もしくはＲＯＭ１００へのアクセスを必要とせず、レジスタファイル３２４から格納データを読み込み演算し、演算結果をレジスタファイル３２４に書き込む動作をする命令
（２）ロードストア命令Ｂ：ＣＰＵ３００の外部メモリ（ＲＡＭ２００もしくはＲＯＭ１００）からレジスタファイル３２４へデータを書き込むためのロードデータを読み込むロード命令、レジスタファイル３２４から外部メモリへストアデータを書き込むストア命令
（３）分岐命令Ｃ：レジスタファイル３２４の格納データから分岐先アドレスを取得してＰＣ３２３に書き込み、分岐先アドレスが書き込まれる前のＰＣ３２３のアドレスを退避ＰＣとしてレジスタファイル３２４に格納する動作を行う命令（つまり、ＰＣ３２３のアドレスを変更してプログラムの命令順序を変更する命令）
上記各命令のうち、命令Ａおよび命令Ｃは４サイクル、命令Ｂは５サイクルで１つの命令を処理するようになっている。プログラムは、これら各命令に従って構成され、ＲＯＭ１００に格納される。そして、上記各命令によって構成されたプログラムは、図３に示されるようにＣＰＵ３００にて処理されていく。
【００５８】
具体的に、図３に示されるサイクル０において、ＰＣ３２３のアドレスが０ｘ００である場合、ＩＦステージが実行される。すなわち、アドレス０ｘ００を示すフェッチプログラムアドレスがＰＣ３２３からロードストアユニット３２１、アドレスバス４００を介してＲＯＭ１００に入力される。そして、ＲＯＭ１００に記憶されたプログラムのアドレス０ｘ００の命令がデータパス３２０を介してＣＰＵ３００に入力される。なお、ＣＰＵ３００がＲＯＭ１００からアドレス０ｘ００の命令Ａを読み込んだ際、ＰＣ３２３のフェッチプログラムアドレスの値が０ｘ０１に増加される。
【００５９】
次に、サイクル１では、アドレス０ｘ００の命令ＡについてはＤＥＣステージが実行される。すなわち、図２に示されるＣＰＵ３００の命令デコード３１１にて命令が解読され、解読された命令がプログラムカウンタ制御ユニット３１２に入力される。また、ＰＣ３２３のアドレス０ｘ０１について上記と同様に命令ＡのＩＦステージが実行される。
【００６０】
続いて、サイクル２では、アドレス０ｘ００の命令ＡについてはＥＸＥステージが実行される。すなわち、プログラムカウンタ制御ユニット３１２から実行ユニット３２２に演算制御信号が入力され、命令に従った演算が実行される。また、アドレス０ｘ０１の命令Ａについては上記と同様に命令ＡのＤＥＣステージが実行される。さらに、ＰＣ３２３のアドレス０ｘ０２について上記と同様に命令ＡのＩＦステージが実行される。
【００６１】
この後、サイクル３では、アドレス０ｘ００の命令ＡについてはＷＢステージが実行される。すなわち、実行ユニット３２２にて実行された演算の結果がレジスタファイル３２４に書き込まれる。また、アドレス０ｘ０１の命令Ａについては上記と同様に命令ＡのＥＸＥステージが実行され、アドレス０ｘ０２の命令Ａについては上記と同様に命令ＡのＤＥＣステージが実行される。さらに、ＰＣ３２３のアドレス０ｘ０３について命令ＢのＩＦステージが実行される。以後、サイクル数の増加に伴い、上記各アドレスの各ステージが順を追って実行されていくこととなる。
【００６２】
ここで、上記アドレス０ｘ０３の命令Ｂが実行される場合、ＥＸＥステージの後、ＭＡステージが実行されることとなる。この場合、アドレス０ｘ０３のＭＡステージと同じサイクル（サイクル６）で実行される下位のアドレスの各ステージ（図３に示される例では、アドレス０ｘ０４の命令ＡのＥＸＥステージ、アドレス０ｘ０５の命令ＡのＤＥＣステージ、アドレス０ｘ０７の命令Ｃ（０ｘＡ０への分岐）のＩＦステージ）はストールされ、実行されない。
【００６３】
具体的には、アドレス０ｘ０３の命令ＢのＭＡステージ実行中（サイクル６）は、プログラムカウンタ制御ユニット３１２からＰＣ３２３にプログラムカウンタストール信号が入力され、ＰＣ３２３のアドレスの更新が停止される。また、制御ユニット３１０からロードストアユニット３２１にフェッチ／ロードストア許可信号が入力されることでロードストアが許可されるように制御が行われることで、他命令のパイプラインがストールされる。これにより、２サイクル必要となるが、メモリアクセスが必要な命令のみ、ＩＦステージとＭＡステージとの競合を避けることができる。
【００６４】
このようにＩＦステージとＭＡステージとの競合を避ける理由としては、ＣＰＵ３００からＲＡＭ２００にデータが書き込まれるためにＭＡステージによってデータパス３２０が占有されるからであり、他の命令ステージがデータパス３２０を使用できなくなるからである。上記のようにしてストールされたサイクル６の各ステージは、次のサイクル７で実行されることとなる。
【００６５】
すなわち、アドレス０ｘ０７の命令ＣのＩＦステージがサイクル７で実行される。この場合、アドレス０ｘ０３のＷＢステージ時にＰＣ３２３の値が分岐先アドレス０ｘＡ０に書き換えられて分岐が行われる。このため、図３においてアドレス０ｘ０８、０ｘ０９の各命令Ａを破棄するため、プログラムカウンタ制御ユニット３１２にてＷＢ停止信号が生成されてレジスタファイル３２４に入力されることで実行ユニット３２２からレジスタファイル３２４に対するデータの書き込みが停止される。また、制御ユニット３１０からロードストアユニット３２１にフェッチ／ロードストア許可信号が入力され、ロードストアユニット３２１にてＩＦステージのみ許可するように制御される。こうして分岐されたアドレス０ｘＡ０以降の各命令が実行されていくこととなる。
【００６６】
以上が、サイクルを追うごとにＣＰＵ３００でプログラムの各命令が実行されていくパイプライン処理の一例である。
【００６７】
次に、上記のようにパイプライン処理を行うＣＰＵ３００にて、実行サイクルのズレなく周期プログラムを周期的に実行する作動について説明する。本実施形態では、５０サイクルごとに演算を行う必要がある周期プログラムを周期的に実行する場合について説明する。
【００６８】
図４は、周期プログラムを周期的に実行する内容を示した図である。この図に示されるように、本実施形態では、周期プログラムレジスタ３２５の設定を行うプログラム、停止タイミングレジスタ３２７の設定を行うプログラム、周期プログラム、非周期プログラムが実行されるようになっている。このうち、周期プログラムレジスタ３２５の設定を行うプログラムおよび停止タイミングレジスタ３２７の設定を行うプログラムはＣＰＵ３００の起動時に実行されるのみであり、その後は周期プログラムおよび非周期プログラムが繰り返し実行されていく。これら各プログラムは、それぞれＲＯＭ１００に記憶されている。
【００６９】
すなわち、周期プログラムおよび非周期プログラムを実行するに際し、まず、ＣＰＵ３００のリセット直後（もしくはＣＰＵ３００に電源が供給された直後）に実行するプログラムのアドレス（ＣＰＵ３００からＲＯＭ１００にアクセスするアドレス）により周期プログラムレジスタ３２５の設定を行うプログラムが実行される。この周期プログラムレジスタ３２５の設定を行うプログラムは、周期プログラムを周期的に実行すべく、周期プログラムの先頭アドレスを周期プログラムレジスタ３２５に書き込む周期プログラムレジスタ設定命令を実行するためのプログラムである。
【００７０】
上述のように、周期プログラムレジスタ３２５の設定を行うプログラムは、そのアドレスが例えば０ｘ００とされ、ＣＰＵ３００がＲＯＭ１００にアクセスすることにより読み出されて実行される。
【００７１】
続いて、停止タイミングレジスタ３２７の設定を行うプログラムが実行される。この停止タイミングレジスタ３２７の設定を行うプログラムは、停止タイミングレジスタ３２７に周期プログラム起動準備期間を書き込む停止タイミングレジスタ設定命令を実行するためのプログラムである。周期プログラム起動準備期間とは、非周期プログラムを停止させてから周期プログラムが開始するまでの期間である。
【００７２】
また、本実施形態では、停止タイミングを「最大の処理サイクル数＋非周期処理の再開アドレスを退避するために必要なサイクル数」と定義する。このうち、最大の処理サイクル数とは、ＤＥＣステージからＭＡステージまでのサイクル数に相当する。
【００７３】
このような定義に従い、本実施形態では、周期プログラム起動準備期間が例えば６サイクルとされ、この周期プログラム起動準備期間が停止タイミングとしてプログラムカウンタ制御ユニット３１２に入力される。なお、この周期プログラムレジスタ３２５の設定を行うプログラムは、そのアドレスが例えば０ｘ０２とされる。
【００７４】
この後、周期プログラムが実行される。この周期プログラムは、カウンタ設定を行う命令と、カウンタ設定後に実行される周期プログラムを実行する命令と、周期プログラムの実行が完了した後、非周期処理へ分岐する命令と、により構成されている。
【００７５】
カウンタ設定を行う命令は、周期プログラムを行う周期をカウントするためのカウント数をカウンタ３２６に設定する開始タイミング設定命令であり、当該命令が実行されることでレジスタファイル３２４のカウンタ３２６にカウント数（本実施形態では５０）が書き込まれると共に、カウントダウンが開始され、カウント値がプログラムカウンタ制御ユニット３１２に入力される。
【００７６】
上記カウンタ設定を行う命令が実行された後、周期プログラムを実行する命令により周期プログラムが実行される。この周期プログラムは、上述のように、ＰＷＭ制御の周期パルスの生成やタイマのカウントを行うプログラムである。この周期プログラムが実行されていく間、カウンタ３２６にてカウントダウンが行われる。
【００７７】
そして、周期プログラムの実行が終了した後、非周期プログラムへ分岐する非周期プログラム開始命令が実行される。これにより、非周期プログラムの実行が開始される。この非周期プログラムは、上述のように、アプリケーションを実行するプログラムである。カウンタ３２６のカウントダウンと共に非周期プログラムが実行され、停止タイミングレジスタ３２７の値（本実施形態では６）とカウンタ３２６の値とが一致したサイクルから、周期プログラム起動準備期間が開始される。
【００７８】
このプログラム起動準備期間における処理シーケンスを、図５を参照して説明する。図５は、非周期プログラムから周期プログラムに切り替わる処理シーケンスを示した図である。この図に示されるように、周期プログラム起動準備期間の第１サイクル(図５のカウント値６、停止タイミング)において、プログラムカウンタ制御ユニット３１２からＰＣ３２３にＰＣストール信号が入力されてＰＣ３２３の値の更新が停止され、命令フェッチ動作が停止される。これにより、周期プログラム起動準備期間の第１サイクルの時点でＤＥＣステージ以降が実行中となっている命令はＷＢステージまで通常通り実行される。
【００７９】
非周期処理停止シーケンス中に分岐命令のＷＢステージが実行された場合、通常の分岐命令を実行する場合と同様にＰＣ３２３の値がＰＣストール信号より優先して分岐先アドレスに書き換えられる。そして、以後の命令が破棄され、プログラムカウンタ制御ユニット３１２からレジスタファイル３２４にＷＢ停止信号が入力され、制御ユニット３１０からロードストアユニット３２１にフェッチ／ロードストア停止信号が入力されることで、メモリ書き込み・ＷＢステージが禁止される。
【００８０】
カウンタ３２６のカウント値が１のとき、プログラムカウンタ制御ユニット３１２から実行ユニットに対して開始プログラム読み込みトリガ信号が発行され、実行ユニットでは周期プログラムレジスタの値がＰＣ３２３にロードされる。また、カウント値が１の時点でＰＣ３２３に書き込まれていたアドレス（非周期プログラムの最終アドレス；退避ＰＣ）は、実行ユニット３２２およびロードストアユニット３２１を通じて、ＲＡＭ２００に書き込まれる（ＰＣＭＡ）。そして、カウント０のとき、周期プログラムレジスタ３２５に書き込まれているアドレスと同じアドレスからプログラムが開始される。
【００８１】
このようにして１周期が確実に終了し、再び周期プログラムが実行されることとなる。そして、非周期プログラムへの分岐が行われた場合、先に実行された非周期プログラムＡの最終アドレスがＲＡＭ２００からロードストアユニット３２１を介してレジスタファイル３２４に書き込まれ、格納データとして実行ユニット３２２を介してＰＣ３２３に書き込まれる。これにより、図４に示される非周期プログラムＢが非周期プログラムＡの続きとして実行される。以後、上記周期プログラムおよび非周期プログラムが周期ごとに繰り返し実行される。
【００８２】
以上説明したように、本実施形態では、一定のカウント数で構成される１周期内で周期プログラムと非周期プログラムとをＣＰＵ３００に実行させる場合、周期プログラムが終了した後は直ちに非周期プログラムを実行させる。また、非周期プログラムを実行させた後、上記１周期の残りカウントが非周期プログラムを停止させるカウント値（停止タイミング）になった場合、当該残りカウントを周期プログラム起動準備期間としてこの期間内で非周期プログラムを中断させることで周期プログラムを周期的に実行することが特徴となっている。
【００８３】
このようにすることで、プログラム開発の煩雑さを低減させることができる。すなわち、非周期プログラムの実行を停止タイミングで停止させることで、周期プログラムを周期的に実行させるための割り込み信号を必要とせずとも、周期プログラムを周期的に実行させることができる。これにより、周期プログラムの周期的実行に遅れを生じさせることはなく、周期処理を確実に周期的に実行させることができる。
【００８４】
また、周期プログラム終了後に直ちに非周期プログラムを実行させることができるので、ＣＰＵ３００がアイドル状態になる時間をなくすことができると共に、ＣＰＵ３００の処理能力の有効利用を図ることができる。
【００８５】
（第２実施形態）
本実施形態では、第１実施形態と異なる部分についてのみ説明する。本実施形態では、非周期プログラムを構成する命令にＭＡステージが含まれているものがある場合における周期プログラム起動準備期間の処理について説明する。
【００８６】
図６は、本実施形態に係る非周期プログラムから周期プログラムに切り替わる処理シーケンスを示した図である。第１実施形態と同様に、周期プログラム起動準備期間の第１サイクル(図６のカウント値６、停止タイミング)において、プログラムカウンタ制御ユニット３１２からＰＣ３２３にＰＣストール信号が入力されてＰＣ３２３の値の更新が停止され、命令フェッチ動作が停止される。これにより、命令にＭＡステージが含まれていたとしても、すなわち、周期プログラム起動準備期間にＤＥＣステージが実行されている命令については、ＷＢステージまで通常通り実行される。
【００８７】
しかしながら、周期プログラム起動準備期間にＩＦステージが実行される命令については、カウンタ３２６のカウント値が１のときにＰＣ３２３に書き込まれていた当該命令のアドレス（退避ＰＣ）が、ＰＣＭＡサイクルにて実行ユニット３２２およびロードストアユニット３２１を通じて、ＲＡＭ２００に書き込まれることで退避される。これにより、次の周期において非周期プログラムが実行される際、退避されたアドレスの命令から実行させるようにすることができる。
【００８８】
このように、命令にＭＡステージが含まれていたとしても、周期プログラム起動準備期間で非周期プログラムを中断させ、その後に周期プログラムを周期的に実行させることができる。
【００８９】
（第３実施形態）
本実施形態では、第１、第２実施形態と異なる部分についてのみ説明する。本実施形態では、周期プログラム起動準備期間に非周期プログラムの分岐命令が実行される場合における周期プログラム起動準備期間の処理について説明する。
【００９０】
図７は、本実施形態に係る非周期プログラムから周期プログラムに切り替わる処理シーケンスを示した図である。この図に示されるように、分岐命令Ｃ（０ｘ５３へ分岐）が実行された場合、当該分岐命令のＥＸＥステージは周期プログラム起動準備期間の第１サイクル（カウント値＝６）で実行されるが、分岐命令Ｃ後の命令Ａは当然実行されない。
【００９１】
このような場合、分岐命令ＣのＥＸＥステージが実行されることで、周期プログラム起動準備期間の第２サイクル（カウント値＝５）のＰＣ３２３のアドレスが分岐先のアドレスに変更される。そして、カウンタ３２６のカウント値が１のときにＰＣ３２３に書き込まれていた分岐先のアドレス（退避ＰＣ）が、ＰＣＭＡサイクルにて実行ユニット３２２およびロードストアユニット３２１を通じて、ＲＡＭ２００に書き込まれることで退避される。これにより、次の周期において非周期プログラムが実行される際、分岐先のアドレスの命令から実行させるようにすることができる。
【００９２】
このように、周期プログラム起動準備期間に分岐命令が実行されたとしても、次の周期にて非周期プログラムを実行させる際、分岐先のアドレスから命令を実行させることができる。
【００９３】
（第４実施形態）
本実施形態では、上記各実施形態と異なる部分についてのみ説明する。上記各実施形態では、周期プログラムを開始する前に停止タイミングを設定している。当該停止タイミングはプログラム開発者にて任意に設定可能であるので、例えば３に設定された場合、カウンタ３２６のカウント値が１になったときに実行中である命令のＷＢステージが終了する前にカウント値が０となり、正常に非周期プログラムが停止できないという状況が予想される。そこで、本実施形態では、非周期プログラムを正常に停止させる停止タイミング生成ユニットを設けることが特徴となっている。
【００９４】
図８は、本実施形態に係るＣＰＵのブロック構成図である。第１実施形態の図１で示されたＣＰＵ３００に対して、本実施形態では、図８に示されるように、制御ユニット３１０に停止タイミング生成ユニット３１３が備えられており、当該停止タイミング生成ユニット３１３にカウンタ３２６からカウント値が入力されるようになっている。
【００９５】
また、データパス３２０のレジスタファイル３２４から停止タイミングレジスタ３２７をなくし、レジスタファイル３２４が周期プログラムレジスタ３２５およびカウンタ３２６にて構成されている。
【００９６】
本実施形態では、停止タイミングを、ＣＰＵ３００で実行される処理の最大サイクル数と定義し、当該停止タイミングを停止タイミング生成ユニット３１３に格納する。これにより、カウンタ３２６のカウント値とＣＰＵ３００で実行される処理の最大サイクル数を比較することで、カウント値が０になる前に最大サイクル数をもつ処理を完了できることを保証する。
【００９７】
例えば、図６に示されるパイプライン処理を実行する場合、メモリアクセスなどによるパイプラインストールなどを考慮すると、ＣＰＵ３００で実行される処理の最大サイクル数を、（マイコンＭ１で実行する命令の中で最大の実行サイクル数を持つ）ロードストア命令がＤＥＣステージからＭＡステージまで実行完了するまでにかかる最大のサイクル数５にＰＣＭＡサイクルを加えた合計のサイクル数６とすることができる。しかしながら、図６に示される場合ではＭＡステージを含んだ命令が実行される可能性があるため、このことを考慮した最大サイクル数を設定する必要がある。
【００９８】
そこで、この最大サイクル数に最大ウェイトサイクルを加える。最大ウェイトサイクルとは、ＭＡステージで実行中止されるサイクルを含めたときのサイクル数であり、図６に示される場合では２である。すなわち、ロードストアステージにかかるサイクル数は２であることを意味する。したがって、ＣＰＵ３００で実行される処理の最大サイクル数を、最大ウェイトサイクルを考慮した８とすることにより、カウンタ３２６のカウント値が０になる前に処理を完了することができる。
【００９９】
上記最大ウェイトサイクルは、ＣＰＵ３００を製造する際に停止タイミング生成ユニット３１３にハード的に格納することができる他、ＣＰＵ３００の外部端子として与えることもできる。
【０１００】
また、停止タイミングはあらかじめ停止タイミング生成ユニット３１３に格納されているため、停止タイミングレジスタ３２７を不要とすると共に、図４に示される停止タイミングレジスタ設定も行わなくても良い。
【０１０１】
以上のように、ＭＡステージによってストールされる他の命令のステージを考慮した停止タイミングを設定することにより、非周期プログラムを確実に完了することができる。
【０１０２】
（第５実施形態）
本実施形態では、上記各実施形態と異なる部分についてのみ説明する。上記各実施形態では、停止タイミングで命令フェッチを終了してしまう。例えば、図５に示されるように、周期プログラム起動準備期間において、ＩＦステージとなるアドレス０ｘ２４の命令は、周期プログラム実行サイクル前に実行することが可能な命令であっても実行されない。そこで、本実施形態では、周期プログラム実行サイクルまでにできるだけ多くの命令を実行することが特徴となっている。
【０１０３】
図９は、本実施形態に係るＣＰＵのブロック構成図である。第１実施形態の図１で示されたＣＰＵ３００に対して、本実施形態では、図９に示されるように、制御ユニット３１０にプログラムカウンタバッファ３１４（以下、ＰＣバッファという）が備えられている。また、データパス３２０は図８に示されるものと同様の構成になっている。
【０１０４】
上記ＰＣバッファ３１４は、ＰＣ３２３から当該ＰＣ３２３が示すアドレスをＰＣ値として随時入力することにより、ＰＣ３２３のアドレスを履歴として格納するものである。
【０１０５】
また、本実施形態では、プログラムカウンタ制御ユニットはカウンタ３２６のカウント値とパイプラインの実行状態をモニタし、カウント値が１になるＰＣＭＡサイクル以前に完了できる命令を全て実行し、実行できない命令のＰＣ３２３のアドレスを退避ＰＣ（非周期プログラム退避用）としてＲＡＭ２００に書き込む。具体的に、図９および図１０を参照して説明する。
【０１０６】
図１０は、本実施形態に係る非周期プログラムから周期プログラムに切り替わる処理シーケンスを示した図である。この図に示されるように、カウンタ３２６のカウント値が４のときにＩＦステージを実行する命令Ａは、カウント値が１のときにＷＢステージを実行することができ、命令を完了することができる。しかし、カウンタ３２６のカウント値が３のときにＩＦステージを実行する命令は、カウント値が０になってもＷＢステージを実行することができず、命令を完了することができない。
【０１０７】
したがって、本実施形態では、プログラムカウンタ制御ユニット３１２では、カウント値が１のときにＰＣＭＡが実行される際にＥＸＥステージが実行される命令を実行しないという判定がなされ、その命令が何サイクル前のアドレスのものかという情報が取得される。図１０に示される場合では、ＰＣ３２３のアドレスが０ｘ２６の命令が実行されない場合に該当し、ＰＣＭＡの「２サイクル前」であるという情報が取得される。つまり、０ｘ２６のアドレスが退避されるアドレスとなる。
【０１０８】
そして、カウンタ３２６のカウンタ値が１になり、ＰＣＭＡサイクルに移行したとき、ＰＣＭＡから２サイクル前まで遡ったＰＣ３２３の値（０ｘ２６）を選び出すべく、退避ＰＣ選択信号がプログラムカウンタ制御ユニット３１２からＰＣバッファ３１４に入力される。これにより、ＰＣバッファ３１４に格納されたＰＣ３２３のアドレスの履歴のうち、退避ＰＣ選択信号に応じたアドレス（図１０の場合０ｘ２６）が実行ユニット３２２に入力され、ロードストア命令のアドレスとしてロードストアユニット３２１、データバス５００を介してＲＡＭ２００に記憶される。
【０１０９】
すなわち、本実施形態では、ＰＣＭＡサイクルである１カウント分が周期プログラム起動準備期間に相当し、上記各実施形態の場合と比較して短縮されている。したがって、周期プログラム実行サイクルまでにできるだけ多くの命令を実行することができる。
【０１１０】
なお、図９に示されるように、プログラムカウンタ制御ユニット３１２に最大ウェイトサイクルが入力されるようにし、プログラムカウンタ制御ユニット３１２が外部にデータを読み書きするために必要な最大のサイクル数を示す最大ウェイトサイクル数を見積もることで一周期の終わりを示すカウント数に一致する場合に実行中となる非周期プログラムの命令を実行しないと判定するようにしても良い。
【０１１１】
（第６実施形態）
本実施形態では、第５実施形態と異なる部分についてのみ説明する。本実施形態では、非周期プログラムを構成する命令にＭＡステージが含まれているものがある場合について説明する。
【０１１２】
図１１は、本実施形態に係る非周期プログラムから周期プログラムに切り替わる処理シーケンスを示した図である。例えば、カウンタ３２６のカウント値が７（ＰＣ３２３のアドレス０ｘ２２）にＩＦステージが実行される命令は、カウント値が１のときにＷＢステージが実行され、命令が完了する。しかし、ＰＣ３２３のアドレスが０ｘ２４のときに実行される命令は、当該命令よりも前に実行された命令に含まれるＭＡステージによってカウンタ３２６のカウンタ値が１になるまでにＷＢステージまでを完了することができない。
【０１１３】
したがって、本実施形態では、プログラムカウンタ制御ユニット３１２にてＰＣＭＡサイクルから４サイクル前のＰＣ３２３のアドレス０ｘ２４からスタートする命令が実行されないと判定され、当該判定によってＰＣＭＡの「４サイクル前」であるという情報が退避ＰＣ選択信号としてＰＣバッファ３１４に入力される。
【０１１４】
これにより、上述のように、カウンタ３２６の値が１になるまでに完了できない命令のアドレスがＰＣバッファ３１４から選び出され、ＲＡＭ２００に退避される。そして、次の周期において周期プログラムが終了した後、退避されたアドレスが示す命令から再び非周期プログラムが実行されることとなる。
【０１１５】
このように、命令にＭＡステージが含まれていたとしても、カウンタ３２６のカウンタ値が１になるまでに完了できない命令を退避させることができる。
【０１１６】
（第７実施形態）
本実施形態では、第５、第６実施形態と異なる部分についてのみ説明する。本実施形態では、周期プログラム起動準備期間に非周期プログラムの分岐命令が実行される場合について説明する。
【０１１７】
図１２は、本実施形態に係る非周期プログラムから周期プログラムに切り替わる処理シーケンスを示した図である。この図に示されるように、分岐命令Ｃ（０ｘ５３へ分岐）が実行された後、ＰＣ３２３のアドレス０ｘ５３が示す命令のＩＦステージが実行される。当該アドレス０ｘ５３が示す命令はカウント値が１になるまでに完了するが、ＰＣ３２３のアドレス０ｘ５４が示す命令はカウント値が１になるまでにＷＢステージを完了できないため問題となる。
【０１１８】
このような場合も、上記第５、第６実施形態と同様に、プログラムカウンタ制御ユニット３１２にてＰＣＭＡサイクルから何サイクル前にスタートした命令が実行できないかが判定され、そのサイクル数に応じたアドレス（図１２では０ｘ５４）がＰＣバッファ３１４から選び出され、ＲＡＭ２００に記憶されることとなる。
【０１１９】
このように、分岐命令後の命令が周期プログラム起動準備期間内で終了できなくても、その命令のアドレスを退避させることで、次の周期にて非周期プログラムを実行させる際、分岐先のアドレスから命令を実行させることができる。
【０１２０】
（第８実施形態）
本実施形態では、上記各実施形態と異なる部分についてのみ説明する。上記各実施形態では、カウンタ３２６のカウント値が１のときにＰＣＭＡサイクルとなり、１サイクル使用して退避ＰＣをＲＡＭ２００に退避させているが、本実施形態ではＰＣＭＡサイクルそのものを無くしてしまうことが特徴となっている。
【０１２１】
図１３は、本実施形態に係るＣＰＵのブロック構成図である。制御ユニット３１０は、図９に示される構成と同様である。また、データパス３２０のうちレジスタファイル３２４に退避プログラムカウンタレジスタ３２８（本発明の保存用レジスタに相当、以下、退避ＰＣレジスタという）が設けられている。当該退避ＰＣレジスタ３２８は、ＰＣバッファ３１４から入力される退避ＰＣ（非周期プログラム退避用）を格納するレジスタである。なお、データパス３２０においてレジスタファイル３２４を除くその他の構成は図９に示されるものと同様である。
【０１２２】
図１４は、本実施形態に係る非周期プログラムから周期プログラムに切り替わる処理シーケンスを示した図である。この図に示されるように、ＰＣ３２３のアドレス０ｘ２７の命令は、カウント値が１になるまでにＥＸＥステージを実行できないため、退避される。
【０１２３】
このような場合、図１４に示されるように、カウンタ３２６のカウント値が１から０に切り替わる瞬間に周期プログラムレジスタ３２５から周期プログラムの先頭アドレスがＰＣ３２３にロードされると共に、退避ＰＣがＰＣバッファ３１４から退避ＰＣレジスタ３２８に格納される。
【０１２４】
このように、退避ＰＣレジスタ３２８に非周期プログラムのうち次回実行すべき命令のＰＣ３２３のアドレスを保存している。このため、周期プログラムの終了時に実行される非周期処理へサブルーチン分岐させる際、当該分岐命令として非周期プログラム開始命令を設けることで、退避ＰＣレジスタ３２８に格納されたアドレスをＰＣ３２３にロードさせる。これにより、ＲＡＭ２００へのアクセスを行わずに１命令で非周期プログラムを再開することができる。
【０１２５】
以上説明したように、本実施形態では、上記各実施形態のように周期プログラム起動準備期間に相当するものが存在せず、カウンタ３２６のカウンタ値のみによって非周期プログラムから周期プログラムへの切り替えをスムーズに行うことができる。このような場合であっても、非周期プログラムを確実に中断させ、周期プログラムを周期的に実行させることができる。
【０１２６】
（他の実施形態）
上記各実施形態では、退避させるＰＣ３２３のアドレスをＲＡＭ２００に記憶させているが、ハードディスクや不揮発性メモリ等の他の記憶媒体に記憶させるようにしても構わない。
【０１２７】
上記各実施形態で示された一周期を示すサイクル数（５０）は一例であって、他のサイクル数（例えば１００）であっても構わない。また、カウンタ３２６にサイクル数をカウントさせるに際し、カウントアップ、カウントダウンのいずれのカウント方法を採用しても構わない。
【０１２８】
第１、第２実施形態で示されたマイクロプロセッサの各構成において、制御ユニット３１０にＰＣ３２３から当該ＰＣ３２３が示すフェッチプログラムアドレスを入力することで当該フェッチプログラムアドレスの履歴を格納するＰＣバッファ３１４を備える。そして、プログラムカウンタ制御ユニット３１２が、ＰＣバッファ３１４から選び出したフェッチプログラムアドレスを外部に退避させると共に、周期プログラムの実行が終了した後、外部に退避させたフェッチプログラムアドレスをＰＣ３２３に格納させることで、中断した非周期プログラムの実行を再開させるようにしても良い。
【図面の簡単な説明】
【０１２９】
【図１】本発明の第１実施形態に係るマイクロコンピュータのブロック構成図である。
【図２】本発明の第１実施形態に係るＣＰＵのブロック構成図である。
【図３】ＣＰＵが実行するパイプライン処理の一例を示した図である。
【図４】周期プログラムを周期的に実行する内容を示した図である。
【図５】非周期プログラムから周期プログラムに切り替わる処理シーケンスを示した図である。
【図６】第２実施形態に係る非周期プログラムから周期プログラムに切り替わる処理シーケンスを示した図である。
【図７】第３実施形態に係る非周期プログラムから周期プログラムに切り替わる処理シーケンスを示した図である。
【図８】第４実施形態に係るＣＰＵのブロック構成図である。
【図９】第５実施形態に係るＣＰＵのブロック構成図である。
【図１０】第５実施形態に係る非周期プログラムから周期プログラムに切り替わる処理シーケンスを示した図である。
【図１１】第６実施形態に係る非周期プログラムから周期プログラムに切り替わる処理シーケンスを示した図である。
【図１２】第７実施形態に係る非周期プログラムから周期プログラムに切り替わる処理シーケンスを示した図である。
【図１３】第８実施形態に係るＣＰＵのブロック構成図である。
【図１４】第８実施形態に係る非周期プログラムから周期プログラムに切り替わる処理シーケンスを示した図である。
【符号の説明】
【０１３０】
１００…ＲＯＭ、２００…ＲＡＭ、３００…ＣＰＵ、３１２…プログラムカウンタ制御ユニット、３１３…停止タイミング生成ユニット、３１４…プログラムカウンタバッファ、３２３…プログラムカウンタ、３２５…周期プログラムレジスタ、３２６…カウンタ、３２７…停止タイミングレジスタ、３２８…保存用レジスタ。
【図１】
2008077294.tif 000003
【図２】
2008077294.tif 000004
【図３】
2008077294.tif 000005
【図４】
2008077294.tif 000006
【図５】
2008077294.tif 000007
【図６】
2008077294.tif 000008
【図７】
2008077294.tif 000009
【図８】
2008077294.tif 000010
【図９】
2008077294.tif 000011
【図１０】
2008077294.tif 000012
【図１１】
2008077294.tif 000013
【図１２】
2008077294.tif 000014
【図１３】
2008077294.tif 000015
【図１４】
2008077294.tif 000016