(57)【特許請求の範囲】
【請求項１】
周辺デバイスの次に起きる変化点までのクロック数を計算して出力する次変化点クロック数取得部と前記周辺デバイスの変化点の情報を保持する変化点情報テーブルを備えた周辺シミュレーション部と、
前記次変化点クロック数取得部から出力されたクロック数を記憶する設定クロック数記憶部を備えた制御部を有し、
命令実行にかかったクロック数をカウントした値が前記設定クロック数記憶部に記憶している次の変化点までのクロック値に達した時、または前記周辺デバイスのシミュレーションに関係する命令が実行された時にのみ、前記周辺デバイスのシミュレーションを実行する
ことを特徴とするシミュレーション装置。
【請求項２】
前記次変化点クロック数取得部は、前記周辺デバイスの次に起きる変化点として割り込み発生までのクロック数を計算して出力する
ことを特徴とする請求項１に記載のシミュレーション装置。
【請求項３】
前記次変化点クロック数取得部は、前記周辺デバイスの次に起きる変化点として端子への信号出力までのクロック数を計算して出力する
ことを特徴とする請求項１または２に記載のシミュレーション装置。
【請求項４】
次の変化点までのクロック値を前記次変化点クロック数取得部から取得し、
前記設定クロック数記憶部に記憶し、
命令が実行されるたびに命令実行にかかったクロック数をカウントしていく際に、前記命令実行にかかったクロック数をカウントした値が前記設定クロック数記憶部に記憶している次の変化点までのクロック値に達した時、または実行した命令が周辺デバイスのシミュレーションに関係する命令であった時に、周辺デバイスのシミュレーションを呼び出す
ことを特徴とする請求項１乃至３のいずれか一項に記載のシミュレーション装置。
【請求項５】
シミュレーションの起動指示情報をコンソールから入力する入力部と、
命令を入力ファイルから入力するファイル入力部と、
入力された命令を保持するプログラムメモリ部と、
前記プログラムメモリ部より命令を読み出す命令フェッチ部と、
前記読み出された命令を受けて命令解析する命令解析部と、
前記命令解析部の命令解析結果による命令を実行する命令実行部と、
前記各周辺デバイス（不図示）のシミュレーションを行う前記周辺シミュレーション部と、
割り込みシミュレーションを行う割り込み制御部と、
ＰＳＷ及びＰＣの値を管理するＰＳＷ／ＰＣ管理部と、
前記周辺デバイスのシミュレーションに関係する命令を指示入力に従ってかつクロック信号に同期して実行する操作命令実行部と、
前記命令実行部の動作により経過したクロック数を記憶するクロック数カウント部と、
前記周辺デバイスの次に発生する変化点までのクロック数を取得する前記次変化点クロック数取得部と、
前記周辺デバイスの変化点情報を保持する前記変化点情報テーブルと、
前記次変化点クロック数取得部から得たクロック数を記憶する前記設定クロック数記憶部と、
前記クロック数カウント部の計数値が前記設定クロック数記憶部に記憶したクロック値を越えた時に前記クロック数カウント部に記憶されたクロック数分だけ前記周辺デバイスのシミュレーションを実行する周辺シミュレーション実行制御部と、
前記クロック数カウント部、前記周辺シミュレーション実行制御部及び前記設定クロック数記憶部を備え出力部ならびに前記入力部を介して前記コンソールに対するデータの入出力を行う制御部を有する
ことを特徴とする請求項１乃至４のいずれか一項に記載のシミュレーション装置。
【請求項６】
前記制御部は、
プログラムをコンパイルする際にコンパイラが出力した命令クロック数予測情報を記憶するプログラム命令クロック数予測情報テーブルと、
前記周辺デバイスのシミュレーションを呼び出す位置を特定する周辺デバイスのシミュレーション呼び出し位置特定部を有する
ことを特徴とする請求項１乃至５のいずれか一項に記載のシミュレーション装置。
【請求項７】
プログラムがダウンロードされた際にプログラムの前記命令クロック数予測情報を前記プログラム命令クロック数予測情報テーブルに記憶し、
プログラム実行が開始された際に前記周辺デバイスのシミュレーション呼び出し位置特定部が前記周辺デバイスのシミュレーションを呼び出す位置を特定する
ことを特徴とする請求項６に記載のシミュレーション装置。
【請求項８】
周辺デバイスの次に起きる変化点までのクロック数を計算して出力する次変化点クロック数取得工程と前記周辺デバイスの変化点の情報を変化点情報テーブルに保持する工程を備えた周辺シミュレーション工程と、
前記次変化点クロック数取得工程から出力されたクロック数を記憶する設定クロック数記憶工程を備えた制御工程を有し、
命令実行にかかったクロック数をカウントした値が前記設定クロック数記憶工程に記憶している次の変化点までのクロック値に達した時、または前記周辺デバイスのシミュレーションに関係する命令が実行された時にのみ、前記周辺デバイスのシミュレーションを実行する
ことを特徴とするマイクロプロセッサ用ソフトウェアシミュレーション方法。
【請求項９】
前記周辺デバイスの次に起きる変化点として割り込み発生までのクロック数を計算して出力する前記次変化点クロック数取得工程と前記周辺デバイスの変化点の情報を前記変化点情報テーブルに保持する工程を有する
ことを特徴とする請求項８に記載のマイクロプロセッサ用ソフトウェアシミュレーション方法。
【請求項１０】
前記周辺デバイスの次に起きる変化点として端子への信号出力までのクロック数を計算して出力する前記次変化点クロック数取得工程と前記周辺デバイスの変化点の情報を前記変化点情報テーブルに保持する工程を有する
ことを特徴とする請求項８または９に記載のマイクロプロセッサ用ソフトウェアシミュレーション方法。
【請求項１１】
次の変化点までのクロック値を前記次変化点クロック数取得工程から取得する工程と、
前記設定クロック数記憶工程に記憶する工程と、
命令が実行されるたびに命令実行にかかったクロック数をカウントしていく際に、前記命令実行にかかったクロック数をカウントした値が前記設定クロック数記憶工程に記憶している次の変化点までのクロック値に達した時、または実行した命令が周辺デバイスのシミュレーションに関係する命令であった時に、周辺デバイスのシミュレーションを呼び出す工程を有する
ことを特徴とする請求項８乃至１０のいずれか一項に記載のマイクロプロセッサ用ソフトウェアシミュレーション方法。
【請求項１２】
前記制御工程は、
プログラムをコンパイルする際にコンパイラが出力した命令クロック数予測情報をプログラム命令クロック数予測情報テーブルに記憶する工程と、
前記周辺デバイスのシミュレーションを呼び出す位置を特定する周辺デバイスのシミュレーション呼び出し位置特定工程を有する
ことを特徴とする請求項８乃至１１のいずれか一項に記載のマイクロプロセッサ用ソフトウェアシミュレーション方法。
【請求項１３】
プログラムがダウンロードされた際にプログラムの前記命令クロック数予測情報を前記プログラム命令クロック数予測情報テーブルに記憶する工程と、
プログラム実行が開始された際に前記周辺デバイスのシミュレーション呼び出し位置特定工程が前記周辺デバイスのシミュレーションを呼び出す位置を特定する工程を有する
ことを特徴とする請求項１２に記載のマイクロプロセッサ用ソフトウェアシミュレーション方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、マイクロプロセッサ用ソフトウェアシミュレーション技術に係り、特に１命令毎に周辺デバイスのシミュレーションを呼び出さなくても周辺デバイスの割り込みを正確にシミュレーションするとともに、シミュレーション速度を向上できるシミュレーション装置及びマイクロプロセッサ用ソフトウェアシミュレーション方法に関する。
【０００２】
【従来の技術】
マイクロプロセッサ用ソフトウェアシミュレーションを実行する従来のシミュレーション装置の一例が、特開平８−３２８９０５号公報に記載されている。
【０００３】
図７は、上記従来技術のシミュレーション装置を説明するための機能ブロック図である。図７において、１０１はシミュレーション装置、１０２はコンソール、１０３は入力ファイル、１０４はファイル入力部、１０５は出力部、１０６は入力部、１０７は制御部、１０８は実行命令カウント部、１０９はクロック数カウント部、１１０は周辺シミュレーション実行制御部、１１１はプログラムメモリ部、１１２は命令フェッチ部、１１３は命令解析部、１１４は命令実行部、１１５は操作命令実行部、１１６は周辺シミュレーション部、１１７は割り込み制御部、１１８はＰＳＷ／ＰＣ管理部（Ｐｒｏｇｒａｍ  Ｓｔａｔｕｓ  Ｗｏｒｄ：プログラム状態語／Ｐｒｏｇｒａｍ  Ｃｏｕｎｔｅｒ管理部）を示している。
【０００４】
図７に示すように、従来のシミュレーション装置１０１は、シミュレーションの起動指示情報をコンソール１０２から入力する入力部１０６と、命令を入力ファイル１０３から入力する入力するファイル入力部１０４と、入力された命令を保持するプログラムメモリ部１１１と、当該プログラムメモリ部１１１より命令を読み出す命令フェッチ部１１２と、当該読み出された命令を受けて命令解析する命令解析部１１３と、当該命令解析部１１３の命令解析結果による命令を実行する命令実行部１１４と、周辺デバイスのシミュレーションを行う周辺シミュレーション部１１６と、割り込みシミュレーションを行う割り込み制御部１１７と、ＰＳＷ（Ｐｒｏｇｒａｍ  Ｓｔａｔｕｓ  Ｗｏｒｄ）及びＰＣ（Ｐｒｏｇｒａｍ  Ｃｏｕｎｔｅｒ）の値を管理するＰＳＷ／ＰＣ管理部１１８と、周辺デバイスのシミュレーションに関係する命令を指示入力に従ってかつクロック信号に同期して実行する操作命令実行部１１５と、実行された命令数を計数する実行命令カウント部１０８と、命令実行部１１４の動作により経過したクロック数を記憶するクロック数カウント部１０９と、当該実行命令カウント部１０８の計数値が閾値を越えた時に当該クロック数カウント部１０９に記憶されたクロック数分周辺デバイスのシミュレーションを実行する周辺シミュレーション実行制御部１１０と、実行命令カウント部１０８、クロック数カウント部１０９及び周辺シミュレーション実行制御部１１０を備え出力部１０５ならびに入力部１０６を介してコンソール２に対するデータの入出力を行う制御部１０７を中心にして構成されている。
【０００５】
次にシミュレーション装置１０１の動作について説明する。図８は、従来のシミュレーション装置１０１の動作を説明するためのフローチャートである。
【０００６】
まず、処理開始後にプログラムをダウンロードしてプログラムメモリ部１１１に記憶する。コンソール１０２（ユーザ）から入力部１０６にシミュレーション実行の要求があると、制御部１０７が命令フェッチ部１１２を制御し、命令フェッチ部１１２はプログラムメモリ部１１１からまず１命令を取り出す。命令解析部１１３で、命令の解析処理を行い、命令実行部１１４に処理を移す（ステップＳ１０１：命令フェッチ及び解析処理）。
【０００７】
命令実行部１１４では解析した情報を基に命令の実行処理（ステップＳ１０２：命令実行処理）を行い、ＰＣ（プログラムカウンタ）を更新し（ステップＳ１０３：実行命令カウント処理）、処理を制御部１０７に戻す。命令を実行するたびに命令の数をカウントし、同時に命令のクロック数をクロック数カウント部１０９に記憶させる（ステップＳ１０４：クロック数カウント処理）。
【０００８】
続いて、フェッチした命令が割り込み処理終了命令か否かを判定する（ステップＳ１０５）。割り込み処理終了命令であった場合（ステップＳ１０５のＹＥＳ）には、ＰＳＷ／ＰＣ復帰処理を実行し（ステップＳ１０６）、その後に、フェッチした命令が周辺命令か否かを判定する（ステップＳ１０８）。割り込み処理終了命令でない場合（ステップＳ１０５のＮＯ）には、ＰＣ更新処理を実行し（ステップＳ１０７）、その後に、フェッチした命令が周辺関連処理命令か否かを判定する（ステップＳ１０８）。
【０００９】
フェッチした命令が周辺関連処理命令でない場合（ステップＳ１０８のＮＯ）、実行命令カウント数が設定した値より大きいか否かを判定する（ステップＳ１１０）。
【００１０】
実行した命令が周辺関連処理命令でない場合（ステップＳ１０８のＮＯ）であって、カウントした命令数が予め設定していた値に達していない場合（ステップＳ１１０のＮＯ、実行命令カウント数が設定した値より小さい場合）、ステップＳ１０１にジャンプして制御部１０７に処理を戻し、次の命令の処理に移る。
【００１１】
実行した命令が周辺関連処理命令でなく（ステップＳ１０８のＮＯ）、カウントした命令数が予め設定していた値に達した場合（ステップＳ１１０のＹＥＳ：実行命令カウント数が設定した値より大きい場合）、制御部１０７から周辺シミュレーション部１１６に処理を移してステップＳ１０９の周辺シミュレーション処理を実行し、クロック数カウント部１０９に記憶していたクロック数分、タイマ／シリアルなどの周辺デバイスのシミュレーションを実行し、タイマ値をカウントしたり、シリアル転送を行ったりする。以後、命令フェッチ〜周辺デバイスのシミュレーション実行の一連の動作を繰り返す。
【００１２】
一方、フェッチした命令が周辺関連処理命令である場合（ステップＳ１０８のＹＥＳ）、周辺シミュレーション処理を実行する（ステップＳ１０９）。
【００１３】
周辺デバイスのシミュレーションの実行で割り込み（タイマのオーバーフロー割り込み、シリアルの転送終了割り込みなど）等の割り込みコントロール処理（ステップＳ１１１）を行い、割り込みが発生する場合（ステップＳ１１２のＹＥＳ）は、ＰＳＷ／ＰＣの退避（ステップＳ１１３、ＰＳＷ／ＰＣ退避処理）及びＰＣへの割り込みハンドラのアドレスの設定をＰＳＷ／ＰＣ管理部１１８で行うことで（ステップＳ１１４、割り込みベクタ処理）、次の命令の処理で割り込みハンドラ内に記述された命令の処理に移る。
【００１４】
一方、割り込みが発生しない場合（ステップＳ１１２のＮＯ）は、ステップＳ１０１へジャンプする。
【００１５】
このように、複数の命令の実行毎に、そのクロック数分周辺デバイスのシミュレーションを実行することにより、１命令実行毎に周辺デバイスのシミュレーションを実行する方法より、周辺デバイスのシミュレーションを呼び出す回数を減少させることができるため、全体のシミュレーション速度を向上させることができた。
【００１６】
【発明が解決しようとする課題】
しかしながら、従来技術には、周辺デバイスの割り込みが正確にシミュレーションできない可能性があるという問題点があった。
【００１７】
その理由は、ほとんどの周辺デバイスは、設定した条件が成立すると割り込みを発生させるからである。例えば、周辺デバイスがタイマの場合、カウントアップしていったタイマの値が、コンペアレジスタに設定した値と同じになったとき、割り込みを発生させる。このときにカウントアップするタイミングは、命令には依存せず、クロックに依存するため、周辺デバイスのシミュレーションに関係ない命令でもカウントアップの対象になる。ところが、従来のシミュレーション装置１０１の場合、数命令のうち、最初の方の命令の実行で、ある周辺デバイスの割り込みが発生するクロックに達しても、数命令分実行した後でないと割り込みを起こすことができないため、その分遅延が生じるという問題点があった。
【００１８】
さらに詳しく、図９を参照して従来技術で問題が生じるケースを説明する。図９は、従来技術の問題点を説明するためのプログラムの実行上の命令の並びの模式図である。
【００１９】
従来のシミュレーション装置１０１では、図９（Ａ）に示すように、プログラム上の処理の並びがプログラムの実行上の命令の並びであり、いずれも周辺デバイス（図中「周辺」と表記）のシミュレーションに関係のない命令である（第１の仮定）。また、命令［１］を実行した後で周辺デバイスの処理を実行した際に、ある周辺デバイスの割り込み命令（割り込み命令［１］、割り込み命令［２］、割り込み命令［３］）が起きた場合、割り込みハンドラの中で３つの命令を処理する（第２の仮定）。また、上記３つの割り込み命令（割り込み命令［１］、割り込み命令［２］、割り込み命令［３］）に一度周辺デバイスのシミュレーションを実行する（第３の仮定）。
【００２０】
また、従来のシミュレーション装置１０１においては、１命令毎に周辺デバイスのシミュレーションを実行するシミュレータの動作は、図９（Ｂ）のように動作する。すなわち、命令［１］を実行した後で、割り込みハンドラに処理が移り、３つの割り込み命令（割り込み命令［１］、割り込み命令［２］、割り込み命令［３］）を実行した後、通常の処理に移り、命令［２］、命令［３］及び命令［４］を実行する（第４の仮定）。
【００２１】
しかしながら、従来のシミュレーション装置１０１においては、図９（Ｃ）に示すように、命令［１］、命令［２］及び命令［３］を実行した後に、割り込みハンドラに処理が移り、３つの割り込み命令（割り込み命令［１］、割り込み命令［２］、割り込み命令［３］）を実行した後、通常の処理に移り、命令［４］を実行する。このように、従来のシミュレーション装置１０１は、本来の処理の流れとは異なる処理を行うため、プログラムによっては異常をきたす可能性があるという問題点があった。
【００２２】
本発明は斯かる問題点を鑑みてなされたものであり、その目的とするところは、１命令毎に周辺デバイスのシミュレーションを呼び出さなくても周辺デバイスの割り込みを正確にシミュレーションするとともに、シミュレーション速度を向上できるシミュレーション装置及びマイクロプロセッサ用ソフトウェアシミュレーション方法を提供する点にある。
【００２３】
【課題を解決するための手段】
この発明の請求項１に記載の発明の要旨は、周辺デバイスの次に起きる変化点までのクロック数を計算して出力する次変化点クロック数取得部と前記周辺デバイスの変化点の情報を保持する変化点情報テーブルを備えた周辺シミュレーション部と、前記次変化点クロック数取得部から出力されたクロック数を記憶する設定クロック数記憶部を備えた制御部を有し、命令実行にかかったクロック数をカウントした値が前記設定クロック数記憶部に記憶している次の変化点までのクロック値に達した時、または前記周辺デバイスのシミュレーションに関係する命令が実行された時にのみ、前記周辺デバイスのシミュレーションを実行することを特徴とするシミュレーション装置に存する。
また、この発明の請求項２に記載の発明の要旨は、前記次変化点クロック数取得部は、前記周辺デバイスの次に起きる変化点として割り込み発生までのクロック数を計算して出力することを特徴とする請求項１に記載のシミュレーション装置に存する。
また、この発明の請求項３に記載の発明の要旨は、前記次変化点クロック数取得部は、前記周辺デバイスの次に起きる変化点として端子への信号出力までのクロック数を計算して出力することを特徴とする請求項１または２に記載のシミュレーション装置に存する。
また、この発明の請求項４に記載の発明の要旨は、次の変化点までのクロック値を前記次変化点クロック数取得部から取得し、前記設定クロック数記憶部に記憶し、命令が実行されるたびに命令実行にかかったクロック数をカウントしていく際に、前記命令実行にかかったクロック数をカウントした値が前記設定クロック数記憶部に記憶している次の変化点までのクロック値に達した時、または実行した命令が周辺デバイスのシミュレーションに関係する命令であった時に、周辺デバイスのシミュレーションを呼び出すことを特徴とする請求項１乃至３のいずれか一項に記載のシミュレーション装置に存する。
また、この発明の請求項５に記載の発明の要旨は、シミュレーションの起動指示情報をコンソールから入力する入力部と、命令を入力ファイルから入力するファイル入力部と、入力された命令を保持するプログラムメモリ部と、前記プログラムメモリ部より命令を読み出す命令フェッチ部と、前記読み出された命令を受けて命令解析する命令解析部と、前記命令解析部の命令解析結果による命令を実行する命令実行部と、前記周辺デバイスのシミュレーションを行う前記周辺シミュレーション部と、割り込みシミュレーションを行う割り込み制御部と、ＰＳＷ及びＰＣの値を管理するＰＳＷ／ＰＣ管理部と、前記周辺デバイスのシミュレーションに関係する命令を指示入力に従ってかつクロック信号に同期して実行する操作命令実行部と、前記命令実行部の動作により経過したクロック数を記憶するクロック数カウント部と、前記周辺デバイスの次に発生する変化点までのクロック数を取得する前記次変化点クロック数取得部と、前記周辺デバイスの変化点情報を保持する前記変化点情報テーブルと、前記次変化点クロック数取得部から得たクロック数を記憶する前記設定クロック数記憶部と、前記クロック数カウント部の計数値が前記設定クロック数記憶部に記憶したクロック値を越えた時に前記クロック数カウント部に記憶されたクロック数分だけ前記周辺デバイスのシミュレーションを実行する周辺シミュレーション実行制御部と、前記クロック数カウント部、前記周辺シミュレーション実行制御部及び前記設定クロック数記憶部を備え出力部ならびに前記入力部を介して前記コンソールに対するデータの入出力を行う制御部を有することを特徴とする請求項１乃至４のいずれか一項に記載のシミュレーション装置に存する。
また、この発明の請求項６に記載の発明の要旨は、前記制御部は、プログラムをコンパイルする際にコンパイラが出力した命令クロック数予測情報を記憶するプログラム命令クロック数予測情報テーブルと、前記周辺デバイスのシミュレーションを呼び出す位置を特定する周辺デバイスのシミュレーション呼び出し位置特定部を有することを特徴とする請求項１乃至５のいずれか一項に記載のシミュレーション装置に存する。
また、この発明の請求項７に記載の発明の要旨は、プログラムがダウンロードされた際にプログラムの前記命令クロック数予測情報を前記プログラム命令クロック数予測情報テーブルに記憶し、プログラム実行が開始された際に前記周辺デバイスのシミュレーション呼び出し位置特定部が前記周辺デバイスのシミュレーションを呼び出す位置を特定することを特徴とする請求項６に記載のシミュレーション装置に存する。
また、この発明の請求項８に記載の発明の要旨は、周辺デバイスの次に起きる変化点までのクロック数を計算して出力する次変化点クロック数取得工程と前記周辺デバイスの変化点の情報を変化点情報テーブルに保持する工程を備えた周辺シミュレーション工程と、前記次変化点クロック数取得工程から出力されたクロック数を記憶する設定クロック数記憶工程を備えた制御工程を有し、命令実行にかかったクロック数をカウントした値が前記設定クロック数記憶工程に記憶している次の変化点までのクロック値に達した時、または前記周辺デバイスのシミュレーションに関係する命令が実行された時にのみ、前記周辺デバイスのシミュレーションを実行することを特徴とするマイクロプロセッサ用ソフトウェアシミュレーション方法に存する。
また、この発明の請求項９に記載の発明の要旨は、前記周辺デバイスの次に起きる変化点として割り込み発生までのクロック数を計算して出力する前記次変化点クロック数取得工程と前記周辺デバイスの変化点の情報を前記変化点情報テーブルに保持する工程を有することを特徴とする請求項８に記載のマイクロプロセッサ用ソフトウェアシミュレーション方法に存する。
また、この発明の請求項１０に記載の発明の要旨は、前記周辺デバイスの次に起きる変化点として端子への信号出力までのクロック数を計算して出力する前記次変化点クロック数取得工程と前記周辺デバイスの変化点の情報を前記変化点情報テーブルに保持する工程を有することを特徴とする請求項８または９に記載のマイクロプロセッサ用ソフトウェアシミュレーション方法に存する。
また、この発明の請求項１１に記載の発明の要旨は、次の変化点までのクロック値を前記次変化点クロック数取得工程から取得する工程と、前記設定クロック数記憶工程に記憶する工程と、命令が実行されるたびに命令実行にかかったクロック数をカウントしていく際に、前記命令実行にかかったクロック数をカウントした値が前記設定クロック数記憶工程に記憶している次の変化点までのクロック値に達した時、または実行した命令が周辺デバイスのシミュレーションに関係する命令であった時に、周辺デバイスのシミュレーションを呼び出す工程を有することを特徴とする請求項８乃至１０のいずれか一項に記載のマイクロプロセッサ用ソフトウェアシミュレーション方法に存する。
また、この発明の請求項１２に記載の発明の要旨は、前記制御工程は、プログラムをコンパイルする際にコンパイラが出力した命令クロック数予測情報をプログラム命令クロック数予測情報テーブルに記憶する工程と、前記周辺デバイスのシミュレーションを呼び出す位置を特定する周辺デバイスのシミュレーション呼び出し位置特定工程を有することを特徴とする請求項８乃至１１のいずれか一項に記載のマイクロプロセッサ用ソフトウェアシミュレーション方法に存する。
また、この発明の請求項１３に記載の発明の要旨は、プログラムがダウンロードされた際にプログラムの前記命令クロック数予測情報を前記プログラム命令クロック数予測情報テーブルに記憶する工程と、プログラム実行が開始された際に前記周辺デバイスのシミュレーション呼び出し位置特定工程が前記周辺デバイスのシミュレーションを呼び出す位置を特定する工程を有することを特徴とする請求項１２に記載のマイクロプロセッサ用ソフトウェアシミュレーション方法に存する。
【００２４】
【発明の実施の形態】
本発明は、周辺デバイスの次に起きる変化点（割り込み発生、端子への信号出力など）までのクロック数を計算して出力する次変化点クロック数取得部と、各周辺デバイス（不図示）の変化点の情報を保持する変化点情報テーブルを周辺シミュレーション部に設けるとともに、次変化点クロック数取得部から出力されたクロック数を記憶する設定クロック数記憶部を制御部に設け、以下の条件（第１の条件、第２の条件）のいずれかを満足したときにのみ、周辺デバイスのシミュレーションを実行する点に特徴を有している。
【００２５】
第１の条件：命令実行にかかったクロック数をカウントしていき、カウントした値が設定クロック数記憶部に記憶している次の変化点までのクロック値に達した時。
【００２６】
第２の条件：周辺デバイスのシミュレーションに関係する命令が実行された時。
【００２７】
上記条件に従って、周辺デバイスのシミュレーションを実行し、必要な間隔で周辺デバイスのシミュレーションを呼び出すことにより、最小回数で周辺デバイスのシミュレーションの呼び出しが可能になり、シミュレーション速度を向上できるようになるといった効果を奏する。
【００２８】
シミュレーション装置では、次の変化点までのクロック値を次変化点クロック数取得部から取得し、設定クロック数記憶部に記憶する。命令が実行されるたびに命令実行にかかったクロック数をカウントしていき、カウントした値が設定クロック数記憶部に記憶している次の変化点までのクロック値に達した時、または実行した命令が周辺デバイスのシミュレーションに関係する命令であった時に、周辺デバイスのシミュレーションを呼び出す。
【００２９】
このようにして、周辺デバイスのシミュレーションを呼び出す回数を減らすことにより、シミュレーション速度を向上できるようになるといった効果を奏する。以下、本発明の実施の形態を図面に基づいて詳細に説明する。
【００３０】
（第１の実施の形態）
図１は、本発明の第１の実施の形態に係るシミュレーション装置１を説明するための機能ブロック図である。図１において、１は本実施の形態のシミュレーション装置、２はコンソール、３は入力ファイル、４はファイル入力部、５は出力部、６は入力部、７は制御部、９はクロック数カウント部、１０は周辺シミュレーション実行制御部、１１はプログラムメモリ部、１２は命令フェッチ部、１３は命令解析部、１４は命令実行部、１５は操作命令実行部、１６は周辺シミュレーション部、１７は割り込み制御部、１８はＰＳＷ／ＰＣ管理部、１９は次変化点クロック数取得部、２０は変化点情報テーブル、２１は設定クロック数記憶部を示している。
【００３１】
図１を参照すると、本本実施の形態のシミュレーション装置１は、シミュレーションの起動指示情報をコンソール２（ユーザ）から入力する入力部６と、命令を入力ファイル３から入力するファイル入力部４と、入力された命令を保持するプログラムメモリ部１１と、当該プログラムメモリ部１１より命令を読み出す命令フェッチ部１２と、当該読み出された命令を受けて命令解析する命令解析部１３と、当該命令解析部１３の命令解析結果による命令を実行する命令実行部１４と、各周辺デバイス（不図示）のシミュレーションを行う周辺シミュレーション部１６と、割り込みシミュレーションを行う割り込み制御部１７と、ＰＳＷ（Ｐｒｏｇｒａｍ  Ｓｔａｔｕｓ  Ｗｏｒｄ）及びＰＣ（Ｐｒｏｇｒａｍ  Ｃｏｕｎｔｅｒ）の値を管理するＰＳＷ／ＰＣ管理部１８と、周辺デバイスのシミュレーションに関係する命令を指示入力に従ってクロック信号に同期して実行する操作命令実行部１５と、命令実行部１４の動作により経過したクロック数を記憶するクロック数カウント部９と、各周辺デバイス（不図示）の次に発生する変化点までのクロック数を取得する次変化点クロック数取得部１９と、各周辺デバイス（不図示）の変化点情報を保持する変化点情報テーブル２０と、次変化点クロック数取得部１９から得たクロック数を記憶する設定クロック数記憶部２１と、クロック数カウント部９の計数値が設定クロック数記憶部２１に記憶したクロック値を越えた時に当該クロック数カウント部９に記憶されたクロック数分周辺デバイスのシミュレーションを実行する周辺シミュレーション実行制御部１０と、クロック数カウント部９、周辺シミュレーション実行制御部１０及び設定クロック数記憶部２１を備え出力部５ならびに入力部６を介してコンソール２に対するデータの入出力を行う制御部７を中心にして構成されている。
【００３２】
次にシミュレーション装置１の動作について説明する。シミュレーション装置１は、周辺シミュレーション部１６に、周辺デバイスの次に起きる変化点（割り込み発生、端子への信号出力など）までのクロック数を計算して出力する次変化点クロック数取得部１９と、各周辺デバイス（不図示）の変化点の情報を保持する変化点情報テーブル２０を設け、さらに、制御部７に、次変化点クロック数取得部１９から出力されたクロック数を記憶する設定クロック数記憶部２１を設け、以下の条件（第１の条件、第２の条件）のいずれかを満足したときにのみ、周辺デバイスのシミュレーションを実行する点に特徴を有している。
【００３３】
第１の条件：命令実行にかかったクロック数をカウントしていき、カウントした値が設定クロック数記憶部２１に記憶している次の変化点までのクロック値に達した時。
【００３４】
第２の条件：周辺デバイスのシミュレーションに関係する命令が実行された時。
【００３５】
上記条件に従って、周辺デバイスのシミュレーションを実行し、必要な間隔で周辺デバイスのシミュレーションを呼び出すことにより、最小回数で周辺デバイスのシミュレーションの呼び出しが可能になり、シミュレーション速度を向上できるようになるといった効果を奏する。
【００３６】
シミュレーション装置１では、図１に示すように、次の変化点までのクロック値を次変化点クロック数取得部１９から取得し、設定クロック数記憶部２１に記憶する。命令が実行されるたびに命令実行にかかったクロック数をカウントしていき、カウントした値が設定クロック数記憶部２１に記憶している次の変化点までのクロック値に達した時、または実行した命令が周辺デバイスのシミュレーションに関係する命令であった時に、周辺デバイスのシミュレーションを呼び出す。
【００３７】
このようにして、周辺デバイスのシミュレーションを呼び出す回数を減らすことにより、シミュレーション速度を向上できるようになるといった効果を奏する。
【００３８】
次に、図２のフローチャートを参照して本実施の形態の全体の動作（マイクロプロセッサ用ソフトウェアシミュレーション方法）について詳細に説明する。図２は、本発明の第１の実施の形態に係るマイクロプロセッサ用ソフトウェアシミュレーション方法を説明するためのフローチャートである。
【００３９】
まず、プログラム実行を開始した後、次の変化点までのクロック取得処理に移る（ステップＳ１５、次変化点クロック数取得処理）。ここではまず、制御部７が周辺シミュレーション部１６の次変化点クロック数取得部１９にクロック数を要求する。
【００４０】
次変化点クロック数取得部１９では、各周辺デバイス（不図示）から次の変化点までのクロック数を取得しようとする（ただし、全ての周辺デバイスが起動していない場合は、各周辺デバイス（不図示）は規定してある最大値を返す）。
【００４１】
次変化点クロック数取得部１９は上記で取得した値を設定クロック数記憶部２１に設定する。
【００４２】
次に、命令フェッチ部１２がプログラムメモリ部１１から命令を取り出し、命令解析部１３が命令の解析を行い（ステップＳ１：命令フェッチ及び解析処理）、命令実行部１４が命令の実行処理を行い（ステップＳ２：命令実行処理）、制御部７に処理を移して、クロック数カウント部９が命令の実行クロック数をカウントする（ステップＳ４：クロック数カウント処理）。
【００４３】
ステップＳ２の命令実行処理で実行した命令が割り込み処理終了命令か否かを判定する（ステップＳ５：割り込み処理終了命令の判定）。
【００４４】
ステップＳ２の命令実行処理で実行した命令が割り込み処理終了命令の場合（ステップＳ５のＹＥＳ）はＰＳＷ／ＰＣを復帰させる処理（ステップＳ６：ＰＳＷ／ＰＣ復帰処理）を行う（ステップＳ６）。
【００４５】
一方、ステップＳ２の命令実行処理で実行した命令が割り込み処理終了命令でない場合（ステップＳ５のＮＯ）は、ＰＣを更新する（ステップＳ７：ＰＣ更新処理）。
【００４６】
次に、ステップＳ２の命令実行処理で実行した命令が周辺関連処理命令か否かを判定する（ステップＳ８）。
【００４７】
ステップＳ２の命令実行処理で実行した命令が周辺関連処理命令でない場合（ステップＳ８のＮＯ）、命令の実行にかかったクロック数をカウントし、カウントしたクロック数が設定した値より大きいか否かの判定を行う。カウントしたクロック数が設定クロック数記憶部２１に設定された値未満ならば（ステップＳ１６のＮＯ）、次の命令の取り出しと解析処理（ステップＳ１（命令フェッチ及び解析処理））に戻る。
【００４８】
一方、カウントしたクロック数が設定した値に達していた場合（ステップＳ１６のＹＥＳ）と、ステップＳ２の命令実行処理で実行した命令が周辺関連処理命令であれば（ステップＳ８のＹＥＳ）、周辺シミュレーション部１６が周辺シミュレーションの処理を行う（ステップＳ９：周辺シミュレーション処理）。
【００４９】
周辺シミュレーションの処理（ステップＳ９：周辺シミュレーション処理）後に、割り込みコントロール処理（ステップＳ１１）を行い、その後に、割り込みが発生しているか否かを判定する（ステップＳ１２）。
【００５０】
割り込みが発生しているか否かを判定した結果（ステップＳ１２）、割り込みが発生する場合（ステップＳ１２のＹＥＳ）は、ＰＳＷ／ＰＣ管理部１８がＰＳＷ／ＰＣを退避させ（ステップＳ１３：ＰＳＷ／ＰＣ退避処理）、割り込みベクタの処理を行う（ステップＳ１４：割り込みベクタ処理）。一方、割り込みが発生しているか否かを判定した結果（ステップＳ１２）、割り込みが発生していない場合（ステップＳ１２のＮＯ）は、ステップＳ１５（次変化点クロック数取得処理）に復帰する。
【００５１】
この後、次の命令の処理に移るが、周辺シミュレーションの処理を行ったので、周辺デバイスの次の変化点までのクロック数取得処理（ステップＳ１５、次変化点クロック数取得処理）を行い、取得したクロック数の値を設定クロック数記憶部２１に設定する。
【００５２】
次に、図３を参照して具体例を用いて説明する。図３は、ある時点からの各周辺デバイス（不図示）の変化点の位置を表した模式図である。図３においては、時間軸は下（紙面下方）に伸びており、各周辺デバイス（不図示）の変化点には黒丸（●）をマークしている。図３の右端の数字（上から順に、６００，１０００，５００，８００，７００：周辺処理プログラムが実行される間隔（クロック数））は、周辺デバイスのシミュレーションが実行される間隔（クロック数）である。
【００５３】
シミュレーションが実行されると、まず、次変化点クロック数取得部１９からクロック数として６００が設定され、当該６００クロック分だけ命令を実行した後に、周辺デバイスのシミュレーションを実行する。
【００５４】
当該周辺デバイスのシミュレーションを実行した後に、次変化点クロック数取得部１９はクロック数として１０００を制御部７に返却し、設定クロック数を１０００にする。
【００５５】
次に、１０００クロック分だけ命令を実行し、その後、周辺デバイスのシミュレーションを実行する。
【００５６】
当該周辺デバイスのシミュレーションを実行した後に、次変化点クロック数取得部１９は５００を制御部７に返却し、設定クロック数を５００にする。
【００５７】
その後は、同様の処理を繰り返す。クロック数が図３中の４０００クロックに到達した時点では、周辺デバイスのシミュレーションの呼び出しは５回で済むことになる。
【００５８】
仮に、従来技術で３命令に一度周辺デバイスのシミュレーションを実行すると設定し、３命令の実行クロックの平均が１０クロックとした場合、４０００クロックまでに４００回呼び出されるので、本実施の形態での呼び出し回数は従来技術の８０分の１で済むことになる。
【００５９】
図４は、周辺デバイスのシミュレーションが実行される間隔を説明するための動作図である。本実施の形態では、図３の具体例に示す周辺デバイス（図中周辺と表記）のシミュレーションが実行される間隔は、図４のように、数１０、数１００命令（命令［１］…命令［１００］→命令［１０１］…命令［３１０］→命令［３１１］…命令［４０５］→命令［４０６］…）毎になりうる。このため、実際の周辺シミュレーション部１６の次の変化点までの間隔はまちまちではあるが、平均しても数命令分よりも多くなるため、周辺デバイスのシミュレーションを呼び出す回数を大幅に減少させることになる。
【００６０】
以上説明したように第１の実施の形態によれば、以下に掲げる効果を奏する。まず第１の効果は、１命令毎に周辺デバイスのシミュレーションを呼び出さなくても、周辺デバイスの割り込みが正確にシミュレーションできることである。その理由は、周辺デバイスの割り込みが発生するまでのクロック数を計算して、そのクロック数分命令を実行した後に、周辺デバイスのシミュレーションを呼び出すため、周辺デバイスの割り込みの発生タイミングで、周辺シミュレーションを実行できるためである。
【００６１】
そして第２の効果は、シミュレーション速度を向上できることである。その理由は、平均すると数１０から数１００命令に一度しか周辺デバイスのシミュレーションを呼び出さないので、従来技術に比べて呼び出し回数を大幅に減少でき、関数の呼び出しにかかる時間を短縮できるためである。
【００６２】
（第２の実施の形態）
次に、本発明の第２の実施の形態について図面を参照して詳細に説明する。なお、第１の実施の形態において既に記述したものと同一の部分については、同一符号を付し、重複した説明は省略する。
【００６３】
図５は、本発明の第２の実施の形態に係るシミュレーション装置１を説明するための機能ブロック図である。図５において、２２はプログラム命令クロック数予測情報テーブル、２３は周辺デバイスのシミュレーション呼び出し位置特定部を示している。
【００６４】
図５を参照すると、本実施の形態のシミュレーション装置１は、制御部７にプログラム命令クロック数予測情報テーブル２２と周辺デバイスのシミュレーション呼び出し位置特定部２３を付加した点に特徴を有している。
【００６５】
プログラム命令クロック数予測情報テーブル２２は、プログラムをコンパイルする際、コンパイラが出力した命令クロック数予測情報を記憶する。
【００６６】
ほとんどの命令の実行クロック数は一定であるため、プログラムのコードが分かると各命令にかかるクロック数が予測でき、設定クロック数記憶部２１に記憶しているクロック数に達するのはどの位置なのか計算することができる。その結果、命令を続けて実行し、その位置まで周辺デバイスのシミュレーションを呼び出す必要がないので、１命令実行毎にクロック数カウント部９のクロック値と設定クロック数記憶部２１に記憶しているクロック値とを比較する必要がなくなる。
【００６７】
ただし、メモリ操作命令はメモリへのアクセス時間がメモリの種類やバスの状態等によって異なるので、一定ではない。また、分岐命令ではどのアドレスにジャンプするかは、条件によって異なる。この２種類の命令に関しては、その命令の位置で、命令にかかるクロック数の計算、または分岐先を特定し、周辺デバイスのシミュレーションを呼び出す位置の再特定を行う必要がある。
【００６８】
次に、図５及び図６のフローチャートを参照して本実施の形態の変更箇所の動作について詳細に説明する。図６は、本発明の第２の実施の形態に係るマイクロプロセッサ用ソフトウェアシミュレーション方法を説明するためのフローチャートである。なお、第１の実施の形態において図２を用いて説明した動作と共通の動作については、重複した説明を省略する。
【００６９】
まず、プログラムがダウンロードされると、プログラムの命令クロック数予測情報を、プログラム命令クロック数予測情報テーブル２２に記憶する。プログラム実行が開始された際に周辺デバイスのシミュレーション呼び出し位置特定部２３が周辺デバイスのシミュレーションを呼び出す位置を特定する（図５のステップＳ１７：周辺デバイスのシミュレーション呼び出し位置の特定）。
【００７０】
ステップＳ２の命令実行処理を行った後、ステップＳ２の命令実行処理で実行した命令がメモリ操作命令または分岐命令か否かを判定する（ステップＳ１８：メモリ操作命令または分岐命令の判定）。
【００７１】
ステップＳ２の命令実行処理で実行した命令がメモリ操作命令または分岐命令である場合（ステップＳ１８のＹＥＳ）、周辺デバイスのシミュレーションの呼び出し位置を再特定（ステップＳ１９：周辺デバイスのシミュレーション呼び出し位置の再特定）し、その後に、ステップＳ５の割り込み処理終了命令の判定を実行する。一方、ステップＳ２の命令実行処理で実行した命令がメモリ操作命令または分岐命令でない場合（ステップＳ１８のＮＯ）は、ステップＳ５の割り込み処理終了命令の判定を実行する。
【００７２】
また、ステップＳ２の命令実行処理で実行した命令が周辺関連処理命令か否かを判定（ステップＳ８）した結果、ステップＳ２の命令実行処理で実行した命令が周辺関連処理命令でない場合は（ステップＳ８のＮＯ）、実行した位置が周辺デバイスのシミュレーションを呼び出す位置か判定する（ステップＳ２０：周辺シミュレーションを呼び出す位置かの判定）。
【００７３】
ステップＳ２０の実行の結果、周辺シミュレーションを呼び出す位置であった場合は（ステップＳ２０のＹＥＳ）、周辺シミュレーション処理（ステップＳ９）に移る。周辺シミュレーションを呼び出す位置でない場合は（ステップＳ２０のＮＯ）、ステップＳ１の処理（命令フェッチ及び解析処理）に戻る。
【００７４】
以上説明したように第２の実施の形態によれば、上記第１の実施の形態と同様の効果を奏する。
【００７５】
なお、本発明が上記各実施の形態に限定されず、本発明の技術思想の範囲内において、上記各実施の形態は適宜変更され得ることは明らかである。また上記構成部材の数、位置、形状等は上記各実施の形態に限定されず、本発明を実施する上で好適な数、位置、形状等にすることができる。また、各図において、同一構成要素には同一符号を付している。
【００７６】
【発明の効果】
本発明は以上のように構成されているので、以下に掲げる効果を奏する。まず第１の効果は、１命令毎に周辺デバイスのシミュレーションを呼び出さなくても、周辺デバイスの割り込みが正確にシミュレーションできることである。その理由は、周辺デバイスの割り込みが発生するまでのクロック数を計算して、そのクロック数分命令を実行した後に、周辺デバイスのシミュレーションを呼び出すため、周辺デバイスの割り込みの発生タイミングで、周辺シミュレーションを実行できるためである。
【００７７】
そして第２の効果は、シミュレーション速度を向上できることである。その理由は、平均すると数１０から数１００命令に一度しか周辺デバイスのシミュレーションを呼び出さないので、従来技術に比べて呼び出し回数を大幅に減少でき、関数の呼び出しにかかる時間を短縮できるためである。
【図面の簡単な説明】
【図１】本発明の第１の実施の形態に係るシミュレーション装置を説明するための機能ブロック図である。
【図２】本発明の第１の実施の形態に係るマイクロプロセッサ用ソフトウェアシミュレーション方法を説明するためのフローチャートである。
【図３】ある時点からの各周辺デバイスの変化点の位置を表した模式図である。
【図４】周辺デバイスのシミュレーションが実行される間隔を説明するための動作図である。
【図５】本発明の第２の実施の形態に係るシミュレーション装置を説明するための機能ブロック図である。
【図６】本発明の第２の実施の形態に係るマイクロプロセッサ用ソフトウェアシミュレーション方法を説明するためのフローチャートである。
【図７】従来技術のシミュレーション装置を説明するための機能ブロック図である。
【図８】従来のシミュレーション装置の動作を説明するためのフローチャートである。
【図９】従来技術の問題点を説明するためのプログラムの実行上の命令の並びの模式図である。
【符号の説明】
１…シミュレーション装置
２…コンソール
３…入力ファイル
４…ファイル入力部
５…出力部
６…入力部
７…制御部
９…クロック数カウント部
１０…周辺シミュレーション実行制御部
１１…プログラムメモリ部
１２…命令フェッチ部
１３…命令解析部
１４…命令実行部
１５…操作命令実行部
１６…周辺シミュレーション部
１７…割り込み制御部
１８…ＰＳＷ／ＰＣ管理部
１９…次変化点クロック数取得部
２０…変化点情報テーブル
２１…設定クロック数記憶部
２２…プログラム命令クロック数予測情報テーブル
２３…周辺デバイスのシミュレーション呼び出し位置特定部
【図１】
0003638505.tif 000002
【図２】
0003638505.tif 000003
【図３】
0003638505.tif 000004
【図４】
0003638505.tif 000005
【図５】
0003638505.tif 000006
【図６】
0003638505.tif 000007
【図７】
0003638505.tif 000008
【図８】
0003638505.tif 000009
【図９】
0003638505.tif 000010