(57)【要約】【課題】オブジェクトコードをホストコードに変換してシミュレーションを実行するに際し、シミュレーション速度及び精度の向上を両立可能なマイコンシミュレータ等の提供。【解決手段】シミュレーション実行時に、１つのオブジェクトコードから２種類のホストコード（速度優先型コード、精度優先型コード）を生成し、シミュレーション実行時にブレイクポイントや命令実行イベント等の有無に応じて、当該２種類のホストコードを切り替えながら実行する。【選択図】図１
2010033354.tif 000002
【特許請求の範囲】
【請求項１】
ソースプログラムをコンパイルして得られるオブジェクトコードをホストコードに変換してシミュレーションを実行する、マイコンシミュレータであって、
ブレイクポイント或いは命令実行イベントの有無に応じて、前記オブジェクトコードから分割条件の異なる複数種のホストコードを生成する、コード変換部と、
前記複数種のホストコードのうち何れかのホストコードを実行する、実行制御部と、
を少なくとも有することを特徴とする、マイコンシミュレータ。
【請求項２】
前記コード変換部は、
前記オブジェクトコードを所定の条件で分割し当該分割単位でホストコードへの変換及びＭＰＵ同期処理を行った速度優先型ホストコードを生成するとともに、ブレイクポイント或いは命令実行イベントを検知した場合、前記オブジェクトコードを前記所定の条件よりも分割頻度の高い条件で分割し、当該分割単位でホストコードへの変換及びＭＰＵ同期処理を行った精度優先型ホストコードを生成し、
前記実行制御部は、
ブレイクポイント或いは命令実行イベントの有無に応じて前記精度優先型ホストコード又は速度優先型ホストコードを切り替えながら実行することを特徴とする、
請求項１に記載のマイコンシミュレータ。
【請求項３】
ソースプログラムをコンパイルして得られるオブジェクトコードをホストコードに変換してシミュレーションを実行する、マイコンシミュレータのシミュレーション方法であって、
コード変換部が、ブレイクポイント或いは命令実行イベントの有無を判定し、当該有無に応じて、前記オブジェクトコードから分割条件の異なる複数種のホストコードを生成し、
実行制御部が、前記複数種のホストコードのうち何れかのホストコードを実行することを特徴とする、
マイコンシミュレータのシミュレーション方法。
【請求項４】
ソースプログラムをコンパイルして得られるオブジェクトコードをホストコードに変換してシミュレーションを実行するマイコンシミュレータを、
ブレイクポイント或いは命令実行イベントの有無に応じて、前記オブジェクトコードから分割条件の異なる複数種のホストコードを生成する、コード変換部と、
前記複数種のホストコードのうち何れかのホストコードを実行する、実行制御部と、
として少なくとも機能させるための、プログラム。
【請求項５】
請求項４に記載のプログラムを少なくとも記録したコンピュータ読み取り可能な媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイコンシミュレータ、そのシミュレーション方法、プログラム、及びコンピュータ読み取り可能な媒体に関し、より詳しくは、ソースプログラムをコンパイルして得られるオブジェクトコードをホストコードに変換してシミュレーションを行う、マイコンシミュレータ、そのシミュレーション方法、プログラム、及びコンピュータ読み取り可能な媒体に関する。
【背景技術】
【０００２】
一般的なマイコンシミュレータでは、ソースプログラム（Ｃ言語、その他のプログラミング言語によって記述されたプログラム或いはコード）を、電子機器に実際に搭載されるＭＰＵ（以下、ターゲットＭＰＵ）のコンパイラにてコンパイルすることにより得られるオブジェクトコード群をリンクして生成される実行ファイルを実行することにより、シミュレーション作業を行うことが一般的である。
【０００３】
近年では、シミュレーション時間の更なる高速化を図るため、前記オブジェクトコードを、シミュレーションを実行するホストコンピュータのＣＰＵ上で動作可能な命令コード（以下、「ホストコード」という。）に再変換した上でシミュレーションを行うことが知られている。
【０００４】
下記の特許文献１では、ターゲットＭＰＵの動作のシミュレーションを実行する際、クロスコードと対応するコードを言語処理プログラムにより生成してそのコードを実行し、シミュレーションを高速に行う技術が記載されている。
【０００５】
【特許文献１】特開平０６−０１９７４３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかし、特許文献１に記載のシミュレーション方法では、全てのオブジェクトコードを全て一律にネイティブＭＰＵに対応するコードに変換してシミュレーションを行うため、シミュレーション時間の短縮には寄与するものの、シミュレータ上でブレイクポイントの設定や命令実行イベントを発生させた際に、実際のターゲットＭＰＵの動作とタイミングのずれが生じ、シミュレーションの精度が悪化する、という問題点が生じていた。
【０００７】
また、シミュレーションの精度を高めるためには、ネイティブコードへの変換後に命令単位でサイクル数、プログラムカウンタ数等の調整処理が必要となるが、その一方で前記調整処理を行うとネイティブコードの命令数が増加するため、結果的にシミュレーション時間が増加し、オブジェクトコードをネイティブＭＰＵに対応するコードに変換する意義が失われる、という問題点が生じていた。
【０００８】
上記の問題を鑑み、シミュレーションの実行精度を確保しつつ、シミュレーション速度を低下させることのない、マイコンシミュレータ、そのシミュレーション方法、プログラム、及びコンピュータ読み取り可能な媒体の提供が望まれていた。
【課題を解決するための手段】
【０００９】
上記の課題を解決するためになされた本願の第１発明は、ソースプログラムをコンパイルして得られるオブジェクトコードをホストコードに変換してシミュレーションを実行する、マイコンシミュレータであって、ブレイクポイント或いは命令実行イベントの有無に応じて、前記オブジェクトコードから分割条件の異なる複数種のホストコードを生成する、コード変換部と、前記複数種のホストコードのうち何れかのホストコードを実行する、実行制御部と、を少なくとも有することを特徴とする、マイコンシミュレータを提供することを要旨とする。
【００１０】
また、本願の第２発明は、前記コード変換部は、前記オブジェクトコードを所定の条件で分割し当該分割単位でホストコードへの変換及びＭＰＵ同期処理を行った速度優先型ホストコードを生成するとともに、ブレイクポイント或いは命令実行イベントを検知した場合、前記オブジェクトコードを前記所定の条件よりも分割頻度の高い条件で分割し、当該分割単位でホストコードへの変換及びＭＰＵ同期処理を行った精度優先型ホストコードを生成し、前記実行制御部は、ブレイクポイント或いは命令実行イベントの有無に応じて前記精度優先型ホストコード又は速度優先型ホストコードを切り替えながら実行することを特徴とする、本願の第１発明に記載のマイコンシミュレータを提供することを要旨とする。
【００１１】
また、本願の第３発明は、ソースプログラムをコンパイルして得られるオブジェクトコードをホストコードに変換してシミュレーションを実行する、マイコンシミュレータのシミュレーション方法であって、コード変換部が、ブレイクポイント或いは命令実行イベントの有無を判定し、当該有無に応じて、前記オブジェクトコードから分割条件の異なる複数種のホストコードを生成し、実行制御部が、前記複数種のホストコードのうち何れかのホストコードを実行することを特徴とする、マイコンシミュレータのシミュレーション方法を提供することを要旨とする。
【００１２】
また、本願の第４発明は、ソースプログラムをコンパイルして得られるオブジェクトコードをホストコードに変換してシミュレーションを実行するマイコンシミュレータを、ブレイクポイント或いは命令実行イベントの有無に応じて、前記オブジェクトコードから分割条件の異なる複数種のホストコードを生成する、コード変換部と、前記複数種のホストコードのうち何れかのホストコードを実行する、実行制御部と、として少なくとも機能させるための、プログラムを提供することを要旨とする。
【００１３】
また、本願の第５発明は、本願の第４発明に記載のプログラムを少なくとも記録したコンピュータ読み取り可能な媒体を提供することを要旨とする。
【００１４】
ここで、ＭＰＵ同期処理とは、サイクル数の加算、ＰＣの加算、命令数の設定、実行後処理関数（割り込み、命令イベントのチェックと実行を行う関数）等の命令（以下、ＭＰＵ同期処理命令）を変換済みのホストコードに挿入する処理をいう。
【００１５】
また、前記コード変換部での速度優先型ホストコードの生成におけるオブジェクトコードの分割条件には、例えば以下の条件を使用することができる。
［分割条件１］
オブジェクトコードの命令を順番に解析し、条件分岐命令であった場合に、当該条件分岐命令の後ろと当該条件分岐命令による分岐先の手前でオブジェクトコードを分割する。
［分割条件２］
ユーザが任意に設定したサイクル数単位でオブジェクトコードを分割する。
【００１６】
また、前記コード変換部での精度優先型ホストコードの生成におけるオブジェクトコードの分割条件には、例えば以下の条件を使用することができる。
［分割条件３］
シミュレーション精度が確保できる程度の最適な命令数単位（例:１、２命令毎など）でオブジェクトコードを分割する。
［分割条件４］
ブレイクポイント或いは命令実行イベントの前後のみを最適な命令数単位（例:１、２命令毎など）で分割し、その他の部分を前記分割条件１と同様の条件で分割する。
【発明の効果】
【００１７】
本願発明によれば、以下の効果のうち何れか一つを少なくとも得ることができる。
（１）オブジェクトコードのうち、シミュレーション精度を優先したい箇所或いはシミュレーション速度を優先したい箇所に応じて、オブジェクトコードから生成された複数のホストコードのうち、何れかのホストコードを選択的に切り替えながらシミュレーションを行うことができ、シミュレーション精度及び速度の両方を確保したシミュレーションが可能となる。
（２）ブレイクポイント或いは命令実行イベント等が存在しない箇所は、分割数（ＭＰＵ同期処理を行った実行ブロック数）の少ないホストコードを実行することにより、シミュレーション速度を確保することができる。
（３）ブレイクポイント或いは命令実行イベント等が存在する箇所は、分割数（ＭＰＵ同期処理を行った実行ブロック数）の多いホストコードを実行することにより、シミュレーションの精度を確保することができる。
（４）オブジェクトコードからホストコードを生成する際の条件（速度優先型ホストコードの生成条件、精度優先型ホストコードの生成条件、当該２種類のホストコードの実行条件）を予め設定してある複数の条件からユーザが適宜選択することにより、シミュレーション実行時の状況に応じたシミュレーション精度、速度の調整が可能となる。
【発明を実施するための最良の形態】
【００１８】
以下、本願発明の実施例について説明する。但し、本実施例はあくまで一例であって、本実施例の記載によって本願発明の範囲を制限するものではない。
【実施例】
【００１９】
（１）マイコンシミュレータの全体構成
図１は、本発明のマイコンシミュレータの構成を示す概略図である。
本実施例におけるマイコンシミュレータ１は、全体制御部２と、ＧＵＩ制御部３と、シミュレーション管理部４と、を少なくとも含む。
【００２０】
全体制御部２は、マイコンシミュレータ全体の制御を行う機能を有する。
ＧＵＩ制御部３は、マイコンシミュレータ１上のＧＵＩ（Graphical User Interface）を制御する機能を有する。
シミュレーション管理部４は、シミュレーション実行時に、オブジェクトコード５からホストコードを生成して実行する機能を有する。
全体制御部２及びＧＵＩ制御部３は、ターゲットＭＰＵの種類に依存しない処理を行うのに対し、シミュレーション管理部４は、ターゲットＭＰＵ、ホストＭＰＵに依存する処理を行うため、その種類毎に個別に作成される。
【００２１】
（２）シミュレーション管理部４
シミュレーション管理部４は、メモリ管理部４１と、コード変換部４２と、実行制御部４３と、からなる。
【００２２】
メモリ管理部４１は、マイコンシミュレータ１の起動後に、全体制御部２がロードしたリンク済みのオブジェクトコード５を、シミュレーション管理部が別途具備する内部メモリ（図示せず）に保存する機能、を少なくとも有する。
【００２３】
コード変換部４２は、シミュレーション開始時にターゲットＭＰＵのプログラムカウンタの指すアドレスのターゲットコードをメモリ管理部４１から取り出し、シミュレーション実行中のブレイクポイント或いは命令実行イベントの有無に応じて、前記オブジェクトコード５から分割条件の異なる複数種のホストコードを生成する機能を有する。なお、本実施例におけるコード変換部４２では、オブジェクトコード５から２種類のホストコード（速度型、精度型）を生成する。
【００２４】
実行制御部４３は、前記コード管理部４２で生成された複数種のホストコードを管理し、シミュレーション実行中のブレイクポイント或いは命令実行イベントの有無に応じて複数種のホストコードのうち、何れか一方のホストコードを実行することで、ターゲットＭＰＵの命令をシミュレーションする機能を少なくとも有する。なお、本実施例における実行制御部４３では、２種類のホストコードを切り替えながら実行することで、ターゲットＭＰＵの命令をシミュレーションする。
【００２５】
次に、マイコンシミュレータ１、メモリ管理部４１、コード変換部４２、及び実行制御部４３の動作について説明する。
【００２６】
（３）マイコンシミュレータの全体処理
マイコンシミュレータ１の全体処理について、図２のフローチャートを用いて説明する。
【００２７】
ＧＵＩ制御部３及び全体制御部２を経由してシミュレーションの実行命令を受け付けると、コード変換部４２は、実行制御部４３に対し、ターゲットＭＰＵのプログラムカウンタの指すアドレスのオブジェクトコードが、既に変換済みであるか否かどうかを調べる。（ｓ１００）。
【００２８】
ターゲットＭＰＵのプログラムカウンタの指すアドレスのオブジェクトコードが変換されていない場合には、当該オブジェクトコードをメモリ管理部４１から取り出し、後述する速度型ホストコードの生成処理を行う（ｓ２００）。なお、変換済みである場合には前記生成処理をスキップすることができる。
【００２９】
次に、ブレイクポイント或いは命令実行イベントの有無を検出する（ｓ３００）。
ブレイクポイント或いは命令実行イベントがある場合には、先にメモリ管理部４１から取り出したオブジェクトコードと同じオブジェクトコードから、精度型ホストコードを生成し、実行する。（ｓ４００、ｓ５００）。ブレイクポイント或いは命令実行イベントがない場合には、生成済みの速度優先型ホストコードを実行する（ｓ６００）。
【００３０】
上記シミュレーション実行後は、プログラムカウンタの更新を行い（ｓ７００）、シミュレーションが終了するまで上記の処理を繰り返す（ｓ８００）。
【００３１】
（４）速度優先型ホストコードの生成処理
次に、コード変換部における速度優先型ホストコードの生成処理について、図３のフローチャートを用いて説明する。図３は、速度優先型ホストコード生成処理において、前記分割条件１を適用した場合のフローチャートである。
【００３２】
初めに、ロードしたオブジェクトコードの命令を先頭から順番に調べていく（ｓ２１０）。
次に、前記命令が分岐命令であるか否かを調べる（ｓ２２０）。
前記命令が分岐命令でない場合には、次の命令を調べ（ｓ２５０）、分岐命令が発見されるまで当該処理を繰り返す。
一方、前記命令が分岐命令である場合には、当該分岐命令の後ろと、当該分岐命令に分岐先アドレスの前とで、オブジェクトコードを分割する（ｓ２３０）なお、当該分割したブロックを「実行ブロック」とする。
【００３３】
次に、前記命令が無条件分岐命令であるか否かを調べる（ｓ２４０）。
前記命令が無条件分岐命令でない場合には、次の命令を調べ（ｓ２５０）、分岐命令が発見されるまで当該処理を繰り返す。
一方、前記命令が無条件分岐命令である場合には、当該分岐命令の後ろでオブジェクトコードを分割する（ｓ２６０）。なお、当該分割ブロックを「コンバートブロック」とする。
【００３４】
最後に、分割した実行ブロック毎に、オブジェクトコードをホストコードに変換し、ＭＰＵ同期処理を行う（ｓ２７０）。以上の処理によって生成されたホストコードを、速度優先型ホストコードとする。
【００３５】
速度優先型ホストコードを生成する際のコンバートブロック及び実行ブロックの生成イメージを図５（ａ）に示す。
【００３６】
図５（ａ）に記載のオブジェクトコードを上の行から順番に読みこんでいくと、初めに無条件分岐命令であるJMP命令を検出するため、当該命令の後ろでコンバートブロックとしてオブジェクトコードが分割される。なお、コンバートブロックとして分割した際には、実行ブロックとしても分割されることとなる。
【００３７】
次に分岐先情報（label：）を検出する。分岐先情報を先に検出した際には、後にその分岐先の手前の行でオブジェクトコードを分割できるよう、分岐先箇所の情報を保持しておく。そして、当該分岐元である「bcc  label」が記載されてある行（条件分岐命令）まで読み込んだ際には、当該条件分岐命令の後ろでオブジェクトコードを分割しつつ、前記分岐先箇所の手前でオブジェクトコードを分割し、実行ブロックを生成する。
【００３８】
再度、無条件分岐命令（JMP命令）を検出した際には、当該命令の後ろでブジェクトコードが分割されコンバートブロックが生成される。
【００３９】
その後、生成された実行ブロック毎にホストコードへと変換するとともに当該実行ブロック単位でＭＰＵ同期処理を行い、速度優先型ホストコードを生成する。
【００４０】
上記の処理をオブジェクトコードの最終行まで繰り返すことによって、オブジェクトコードから速度優先型ホストコード群を生成するものである。
【００４１】
（５）精度優先型ホストコードの生成処理
次に、コード変換部における精度優先型ホストコードの生成処理について、図４のフローチャートを用いて説明する。図４は、精度優先型ホストコード生成処理において、前記分割条件３を適用した場合のフローチャートである。
【００４２】
初めに、ロードしたオブジェクトコードの命令を先頭から順番に調べていく（ｓ５１０）。
次に、前記命令の後ろでオブジェクトコードを分割し、当該分割したブロックを実行ブロックとする（ｓ５２０）。
【００４３】
次に、前記命令が無条件分岐命令であるか否かを調べる（ｓ５３０）。
前記命令が無条件分岐命令でない場合には、次の命令を調べ（ｓ５４０）、分岐命令が発見されるまで当該処理を繰り返す。
一方、前記命令が無条件分岐命令である場合には、当該分岐命令の後ろでオブジェクトコードを分割し、コンバートブロックを生成する（ｓ５５０）。
【００４４】
最後に、分割した実行ブロック毎に、オブジェクトコードをホストコードに変換し、ＭＰＵ同期処理を行う（ｓ５６０）。以上の処理によって生成されたホストコードを、精度優先型ホストコードとする。
【００４５】
精度優先型ホストコードを生成する際のコンバートブロック及び実行ブロックの生成イメージを図５（ｂ）に示す。
【００４６】
前記の速度優先型ホストコードの生成処理と同様に、コンバートブロックへの分割処理と並行してオブジェクトコードを１命令毎に分割した実行ブロック群を生成する。その後、生成された実行ブロック毎にホストコードへと変換するとともに当該実行ブロック単位でＭＰＵ同期処理を行い、精度度優先型ホストコードを生成する。
【００４７】
上記の処理をオブジェクトコードの最終行まで繰り返すことによって、オブジェクトコードから精度度優先型ホストコード群を生成するものである。
【００４８】
（６）ホストコードの具体例
図６は、同一のオブジェクトコード５から、速度優先型ホストコード及び精度優先型ホストコードを生成した場合の具体例を示す図である。
図６（ａ）に示す速度優先型ホストコードは、数命令毎にＭＰＵ同期処理命令６が挿入されているのに対し、図６（ｂ）に示す精度優先型ホストコードは、１命令毎にＭＰＵ同期処理命令６が挿入されている。
【００４９】
（７）シミュレーション結果
本発明によるシミュレーション方法と、従来のシミュレーション方法を比較した表を、下記の表１に示す。
表１に記載の条件で同一のオブジェクトコードを異なるシミュレーションエンジンで実行した場合、インタプリタ型のシミュレーションエンジン、及びホストコード型のシミュレーションエンジン）と比較して、本願発明のホストコード切り替え型は、高いＭＩＰＳ値を得ることができた。
【００５０】
【表１】
2010033354.tif 000003
・ターゲットＭＰＵ：ＳＨ１／２
・テストプロ：ｄｈｒｙｓｔｏｎｅ
・周辺部品及び割り込みの存在無しと仮定
【００５１】
本願発明のその他の実施例には、前記シミュレーション方法を情報処理装置に実行させるためのプログラム、及びそのプログラムを少なくとも記録したコンピュータ読み取り可能な媒体が含まれる。
【００５２】
また、速度優先型ホストコードの生成処理、コンバートブロックの生成処理、精度優先型ホストコードの生成処理の先後を入れ替えたり、或いは並列実行してもよい。
【図面の簡単な説明】
【００５３】
【図１】本発明のマイコンシミュレータの構成を示す概略図。
【図２】マイコンシミュレータの全体処理を示すフローチャート。
【図３】コード変換部での速度優先型ホストコードの生成処理を示すフローチャート。
【図４】コード変換部での精度優先型ホストコードの生成処理を示すフローチャート。
【図５】コンバートブロック及び実行ブロックの生成イメージを示す図。
【図６】同一のオブジェクトコードから、速度優先型ホストコード及び精度優先型ホストコードを生成した場合の具体例を示す図。
【符号の説明】
【００５４】
１    ：マイコンシミュレータ
２    ：全体制御部
３    ：ＧＵＩ制御部
４    ：シミュレーション管理部
４１  ：メモリ管理部
４２  ：コード変換部
４３  ：実行制御部
５    ：オブジェクトコード
６    ：ＭＰＵ同期処理命令
【図１】
2010033354.tif 000004
【図２】
2010033354.tif 000005
【図３】
2010033354.tif 000006
【図４】
2010033354.tif 000007
【図５】
2010033354.tif 000008
【図６】
2010033354.tif 000009