説明

マイコンシミュレータ、そのシミュレーション方法、プログラム、及びコンピュータ読み取り可能な媒体

【課題】オブジェクトコードをホストコードに変換してシミュレーションを実行するに際し、シミュレーション速度及び精度の向上を両立可能なマイコンシミュレータ等の提供。
【解決手段】シミュレーション実行時に、1つのオブジェクトコードから2種類のホストコード(速度優先型コード、精度優先型コード)を生成し、シミュレーション実行時にブレイクポイントや命令実行イベント等の有無に応じて、当該2種類のホストコードを切り替えながら実行する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、マイコンシミュレータ、そのシミュレーション方法、プログラム、及びコンピュータ読み取り可能な媒体に関し、より詳しくは、ソースプログラムをコンパイルして得られるオブジェクトコードをホストコードに変換してシミュレーションを行う、マイコンシミュレータ、そのシミュレーション方法、プログラム、及びコンピュータ読み取り可能な媒体に関する。
【背景技術】
【0002】
一般的なマイコンシミュレータでは、ソースプログラム(C言語、その他のプログラミング言語によって記述されたプログラム或いはコード)を、電子機器に実際に搭載されるMPU(以下、ターゲットMPU)のコンパイラにてコンパイルすることにより得られるオブジェクトコード群をリンクして生成される実行ファイルを実行することにより、シミュレーション作業を行うことが一般的である。
【0003】
近年では、シミュレーション時間の更なる高速化を図るため、前記オブジェクトコードを、シミュレーションを実行するホストコンピュータのCPU上で動作可能な命令コード(以下、「ホストコード」という。)に再変換した上でシミュレーションを行うことが知られている。
【0004】
下記の特許文献1では、ターゲットMPUの動作のシミュレーションを実行する際、クロスコードと対応するコードを言語処理プログラムにより生成してそのコードを実行し、シミュレーションを高速に行う技術が記載されている。
【0005】
【特許文献1】特開平06−019743号公報
【発明の開示】
【発明が解決しようとする課題】
【0006】
しかし、特許文献1に記載のシミュレーション方法では、全てのオブジェクトコードを全て一律にネイティブMPUに対応するコードに変換してシミュレーションを行うため、シミュレーション時間の短縮には寄与するものの、シミュレータ上でブレイクポイントの設定や命令実行イベントを発生させた際に、実際のターゲットMPUの動作とタイミングのずれが生じ、シミュレーションの精度が悪化する、という問題点が生じていた。
【0007】
また、シミュレーションの精度を高めるためには、ネイティブコードへの変換後に命令単位でサイクル数、プログラムカウンタ数等の調整処理が必要となるが、その一方で前記調整処理を行うとネイティブコードの命令数が増加するため、結果的にシミュレーション時間が増加し、オブジェクトコードをネイティブMPUに対応するコードに変換する意義が失われる、という問題点が生じていた。
【0008】
上記の問題を鑑み、シミュレーションの実行精度を確保しつつ、シミュレーション速度を低下させることのない、マイコンシミュレータ、そのシミュレーション方法、プログラム、及びコンピュータ読み取り可能な媒体の提供が望まれていた。
【課題を解決するための手段】
【0009】
上記の課題を解決するためになされた本願の第1発明は、ソースプログラムをコンパイルして得られるオブジェクトコードをホストコードに変換してシミュレーションを実行する、マイコンシミュレータであって、ブレイクポイント或いは命令実行イベントの有無に応じて、前記オブジェクトコードから分割条件の異なる複数種のホストコードを生成する、コード変換部と、前記複数種のホストコードのうち何れかのホストコードを実行する、実行制御部と、を少なくとも有することを特徴とする、マイコンシミュレータを提供することを要旨とする。
【0010】
また、本願の第2発明は、前記コード変換部は、前記オブジェクトコードを所定の条件で分割し当該分割単位でホストコードへの変換及びMPU同期処理を行った速度優先型ホストコードを生成するとともに、ブレイクポイント或いは命令実行イベントを検知した場合、前記オブジェクトコードを前記所定の条件よりも分割頻度の高い条件で分割し、当該分割単位でホストコードへの変換及びMPU同期処理を行った精度優先型ホストコードを生成し、前記実行制御部は、ブレイクポイント或いは命令実行イベントの有無に応じて前記精度優先型ホストコード又は速度優先型ホストコードを切り替えながら実行することを特徴とする、本願の第1発明に記載のマイコンシミュレータを提供することを要旨とする。
【0011】
また、本願の第3発明は、ソースプログラムをコンパイルして得られるオブジェクトコードをホストコードに変換してシミュレーションを実行する、マイコンシミュレータのシミュレーション方法であって、コード変換部が、ブレイクポイント或いは命令実行イベントの有無を判定し、当該有無に応じて、前記オブジェクトコードから分割条件の異なる複数種のホストコードを生成し、実行制御部が、前記複数種のホストコードのうち何れかのホストコードを実行することを特徴とする、マイコンシミュレータのシミュレーション方法を提供することを要旨とする。
【0012】
また、本願の第4発明は、ソースプログラムをコンパイルして得られるオブジェクトコードをホストコードに変換してシミュレーションを実行するマイコンシミュレータを、ブレイクポイント或いは命令実行イベントの有無に応じて、前記オブジェクトコードから分割条件の異なる複数種のホストコードを生成する、コード変換部と、前記複数種のホストコードのうち何れかのホストコードを実行する、実行制御部と、として少なくとも機能させるための、プログラムを提供することを要旨とする。
【0013】
また、本願の第5発明は、本願の第4発明に記載のプログラムを少なくとも記録したコンピュータ読み取り可能な媒体を提供することを要旨とする。
【0014】
ここで、MPU同期処理とは、サイクル数の加算、PCの加算、命令数の設定、実行後処理関数(割り込み、命令イベントのチェックと実行を行う関数)等の命令(以下、MPU同期処理命令)を変換済みのホストコードに挿入する処理をいう。
【0015】
また、前記コード変換部での速度優先型ホストコードの生成におけるオブジェクトコードの分割条件には、例えば以下の条件を使用することができる。
[分割条件1]
オブジェクトコードの命令を順番に解析し、条件分岐命令であった場合に、当該条件分岐命令の後ろと当該条件分岐命令による分岐先の手前でオブジェクトコードを分割する。
[分割条件2]
ユーザが任意に設定したサイクル数単位でオブジェクトコードを分割する。
【0016】
また、前記コード変換部での精度優先型ホストコードの生成におけるオブジェクトコードの分割条件には、例えば以下の条件を使用することができる。
[分割条件3]
シミュレーション精度が確保できる程度の最適な命令数単位(例:1、2命令毎など)でオブジェクトコードを分割する。
[分割条件4]
ブレイクポイント或いは命令実行イベントの前後のみを最適な命令数単位(例:1、2命令毎など)で分割し、その他の部分を前記分割条件1と同様の条件で分割する。
【発明の効果】
【0017】
本願発明によれば、以下の効果のうち何れか一つを少なくとも得ることができる。
(1)オブジェクトコードのうち、シミュレーション精度を優先したい箇所或いはシミュレーション速度を優先したい箇所に応じて、オブジェクトコードから生成された複数のホストコードのうち、何れかのホストコードを選択的に切り替えながらシミュレーションを行うことができ、シミュレーション精度及び速度の両方を確保したシミュレーションが可能となる。
(2)ブレイクポイント或いは命令実行イベント等が存在しない箇所は、分割数(MPU同期処理を行った実行ブロック数)の少ないホストコードを実行することにより、シミュレーション速度を確保することができる。
(3)ブレイクポイント或いは命令実行イベント等が存在する箇所は、分割数(MPU同期処理を行った実行ブロック数)の多いホストコードを実行することにより、シミュレーションの精度を確保することができる。
(4)オブジェクトコードからホストコードを生成する際の条件(速度優先型ホストコードの生成条件、精度優先型ホストコードの生成条件、当該2種類のホストコードの実行条件)を予め設定してある複数の条件からユーザが適宜選択することにより、シミュレーション実行時の状況に応じたシミュレーション精度、速度の調整が可能となる。
【発明を実施するための最良の形態】
【0018】
以下、本願発明の実施例について説明する。但し、本実施例はあくまで一例であって、本実施例の記載によって本願発明の範囲を制限するものではない。
【実施例】
【0019】
(1)マイコンシミュレータの全体構成
図1は、本発明のマイコンシミュレータの構成を示す概略図である。
本実施例におけるマイコンシミュレータ1は、全体制御部2と、GUI制御部3と、シミュレーション管理部4と、を少なくとも含む。
【0020】
全体制御部2は、マイコンシミュレータ全体の制御を行う機能を有する。
GUI制御部3は、マイコンシミュレータ1上のGUI(Graphical User Interface)を制御する機能を有する。
シミュレーション管理部4は、シミュレーション実行時に、オブジェクトコード5からホストコードを生成して実行する機能を有する。
全体制御部2及びGUI制御部3は、ターゲットMPUの種類に依存しない処理を行うのに対し、シミュレーション管理部4は、ターゲットMPU、ホストMPUに依存する処理を行うため、その種類毎に個別に作成される。
【0021】
(2)シミュレーション管理部4
シミュレーション管理部4は、メモリ管理部41と、コード変換部42と、実行制御部43と、からなる。
【0022】
メモリ管理部41は、マイコンシミュレータ1の起動後に、全体制御部2がロードしたリンク済みのオブジェクトコード5を、シミュレーション管理部が別途具備する内部メモリ(図示せず)に保存する機能、を少なくとも有する。
【0023】
コード変換部42は、シミュレーション開始時にターゲットMPUのプログラムカウンタの指すアドレスのターゲットコードをメモリ管理部41から取り出し、シミュレーション実行中のブレイクポイント或いは命令実行イベントの有無に応じて、前記オブジェクトコード5から分割条件の異なる複数種のホストコードを生成する機能を有する。なお、本実施例におけるコード変換部42では、オブジェクトコード5から2種類のホストコード(速度型、精度型)を生成する。
【0024】
実行制御部43は、前記コード管理部42で生成された複数種のホストコードを管理し、シミュレーション実行中のブレイクポイント或いは命令実行イベントの有無に応じて複数種のホストコードのうち、何れか一方のホストコードを実行することで、ターゲットMPUの命令をシミュレーションする機能を少なくとも有する。なお、本実施例における実行制御部43では、2種類のホストコードを切り替えながら実行することで、ターゲットMPUの命令をシミュレーションする。
【0025】
次に、マイコンシミュレータ1、メモリ管理部41、コード変換部42、及び実行制御部43の動作について説明する。
【0026】
(3)マイコンシミュレータの全体処理
マイコンシミュレータ1の全体処理について、図2のフローチャートを用いて説明する。
【0027】
GUI制御部3及び全体制御部2を経由してシミュレーションの実行命令を受け付けると、コード変換部42は、実行制御部43に対し、ターゲットMPUのプログラムカウンタの指すアドレスのオブジェクトコードが、既に変換済みであるか否かどうかを調べる。(s100)。
【0028】
ターゲットMPUのプログラムカウンタの指すアドレスのオブジェクトコードが変換されていない場合には、当該オブジェクトコードをメモリ管理部41から取り出し、後述する速度型ホストコードの生成処理を行う(s200)。なお、変換済みである場合には前記生成処理をスキップすることができる。
【0029】
次に、ブレイクポイント或いは命令実行イベントの有無を検出する(s300)。
ブレイクポイント或いは命令実行イベントがある場合には、先にメモリ管理部41から取り出したオブジェクトコードと同じオブジェクトコードから、精度型ホストコードを生成し、実行する。(s400、s500)。ブレイクポイント或いは命令実行イベントがない場合には、生成済みの速度優先型ホストコードを実行する(s600)。
【0030】
上記シミュレーション実行後は、プログラムカウンタの更新を行い(s700)、シミュレーションが終了するまで上記の処理を繰り返す(s800)。
【0031】
(4)速度優先型ホストコードの生成処理
次に、コード変換部における速度優先型ホストコードの生成処理について、図3のフローチャートを用いて説明する。図3は、速度優先型ホストコード生成処理において、前記分割条件1を適用した場合のフローチャートである。
【0032】
初めに、ロードしたオブジェクトコードの命令を先頭から順番に調べていく(s210)。
次に、前記命令が分岐命令であるか否かを調べる(s220)。
前記命令が分岐命令でない場合には、次の命令を調べ(s250)、分岐命令が発見されるまで当該処理を繰り返す。
一方、前記命令が分岐命令である場合には、当該分岐命令の後ろと、当該分岐命令に分岐先アドレスの前とで、オブジェクトコードを分割する(s230)なお、当該分割したブロックを「実行ブロック」とする。
【0033】
次に、前記命令が無条件分岐命令であるか否かを調べる(s240)。
前記命令が無条件分岐命令でない場合には、次の命令を調べ(s250)、分岐命令が発見されるまで当該処理を繰り返す。
一方、前記命令が無条件分岐命令である場合には、当該分岐命令の後ろでオブジェクトコードを分割する(s260)。なお、当該分割ブロックを「コンバートブロック」とする。
【0034】
最後に、分割した実行ブロック毎に、オブジェクトコードをホストコードに変換し、MPU同期処理を行う(s270)。以上の処理によって生成されたホストコードを、速度優先型ホストコードとする。
【0035】
速度優先型ホストコードを生成する際のコンバートブロック及び実行ブロックの生成イメージを図5(a)に示す。
【0036】
図5(a)に記載のオブジェクトコードを上の行から順番に読みこんでいくと、初めに無条件分岐命令であるJMP命令を検出するため、当該命令の後ろでコンバートブロックとしてオブジェクトコードが分割される。なお、コンバートブロックとして分割した際には、実行ブロックとしても分割されることとなる。
【0037】
次に分岐先情報(label:)を検出する。分岐先情報を先に検出した際には、後にその分岐先の手前の行でオブジェクトコードを分割できるよう、分岐先箇所の情報を保持しておく。そして、当該分岐元である「bcc label」が記載されてある行(条件分岐命令)まで読み込んだ際には、当該条件分岐命令の後ろでオブジェクトコードを分割しつつ、前記分岐先箇所の手前でオブジェクトコードを分割し、実行ブロックを生成する。
【0038】
再度、無条件分岐命令(JMP命令)を検出した際には、当該命令の後ろでブジェクトコードが分割されコンバートブロックが生成される。
【0039】
その後、生成された実行ブロック毎にホストコードへと変換するとともに当該実行ブロック単位でMPU同期処理を行い、速度優先型ホストコードを生成する。
【0040】
上記の処理をオブジェクトコードの最終行まで繰り返すことによって、オブジェクトコードから速度優先型ホストコード群を生成するものである。
【0041】
(5)精度優先型ホストコードの生成処理
次に、コード変換部における精度優先型ホストコードの生成処理について、図4のフローチャートを用いて説明する。図4は、精度優先型ホストコード生成処理において、前記分割条件3を適用した場合のフローチャートである。
【0042】
初めに、ロードしたオブジェクトコードの命令を先頭から順番に調べていく(s510)。
次に、前記命令の後ろでオブジェクトコードを分割し、当該分割したブロックを実行ブロックとする(s520)。
【0043】
次に、前記命令が無条件分岐命令であるか否かを調べる(s530)。
前記命令が無条件分岐命令でない場合には、次の命令を調べ(s540)、分岐命令が発見されるまで当該処理を繰り返す。
一方、前記命令が無条件分岐命令である場合には、当該分岐命令の後ろでオブジェクトコードを分割し、コンバートブロックを生成する(s550)。
【0044】
最後に、分割した実行ブロック毎に、オブジェクトコードをホストコードに変換し、MPU同期処理を行う(s560)。以上の処理によって生成されたホストコードを、精度優先型ホストコードとする。
【0045】
精度優先型ホストコードを生成する際のコンバートブロック及び実行ブロックの生成イメージを図5(b)に示す。
【0046】
前記の速度優先型ホストコードの生成処理と同様に、コンバートブロックへの分割処理と並行してオブジェクトコードを1命令毎に分割した実行ブロック群を生成する。その後、生成された実行ブロック毎にホストコードへと変換するとともに当該実行ブロック単位でMPU同期処理を行い、精度度優先型ホストコードを生成する。
【0047】
上記の処理をオブジェクトコードの最終行まで繰り返すことによって、オブジェクトコードから精度度優先型ホストコード群を生成するものである。
【0048】
(6)ホストコードの具体例
図6は、同一のオブジェクトコード5から、速度優先型ホストコード及び精度優先型ホストコードを生成した場合の具体例を示す図である。
図6(a)に示す速度優先型ホストコードは、数命令毎にMPU同期処理命令6が挿入されているのに対し、図6(b)に示す精度優先型ホストコードは、1命令毎にMPU同期処理命令6が挿入されている。
【0049】
(7)シミュレーション結果
本発明によるシミュレーション方法と、従来のシミュレーション方法を比較した表を、下記の表1に示す。
表1に記載の条件で同一のオブジェクトコードを異なるシミュレーションエンジンで実行した場合、インタプリタ型のシミュレーションエンジン、及びホストコード型のシミュレーションエンジン)と比較して、本願発明のホストコード切り替え型は、高いMIPS値を得ることができた。
【0050】
【表1】

・ターゲットMPU:SH1/2
・テストプロ:dhrystone
・周辺部品及び割り込みの存在無しと仮定
【0051】
本願発明のその他の実施例には、前記シミュレーション方法を情報処理装置に実行させるためのプログラム、及びそのプログラムを少なくとも記録したコンピュータ読み取り可能な媒体が含まれる。
【0052】
また、速度優先型ホストコードの生成処理、コンバートブロックの生成処理、精度優先型ホストコードの生成処理の先後を入れ替えたり、或いは並列実行してもよい。
【図面の簡単な説明】
【0053】
【図1】本発明のマイコンシミュレータの構成を示す概略図。
【図2】マイコンシミュレータの全体処理を示すフローチャート。
【図3】コード変換部での速度優先型ホストコードの生成処理を示すフローチャート。
【図4】コード変換部での精度優先型ホストコードの生成処理を示すフローチャート。
【図5】コンバートブロック及び実行ブロックの生成イメージを示す図。
【図6】同一のオブジェクトコードから、速度優先型ホストコード及び精度優先型ホストコードを生成した場合の具体例を示す図。
【符号の説明】
【0054】
1 :マイコンシミュレータ
2 :全体制御部
3 :GUI制御部
4 :シミュレーション管理部
41 :メモリ管理部
42 :コード変換部
43 :実行制御部
5 :オブジェクトコード
6 :MPU同期処理命令

【特許請求の範囲】
【請求項1】
ソースプログラムをコンパイルして得られるオブジェクトコードをホストコードに変換してシミュレーションを実行する、マイコンシミュレータであって、
ブレイクポイント或いは命令実行イベントの有無に応じて、前記オブジェクトコードから分割条件の異なる複数種のホストコードを生成する、コード変換部と、
前記複数種のホストコードのうち何れかのホストコードを実行する、実行制御部と、
を少なくとも有することを特徴とする、マイコンシミュレータ。
【請求項2】
前記コード変換部は、
前記オブジェクトコードを所定の条件で分割し当該分割単位でホストコードへの変換及びMPU同期処理を行った速度優先型ホストコードを生成するとともに、ブレイクポイント或いは命令実行イベントを検知した場合、前記オブジェクトコードを前記所定の条件よりも分割頻度の高い条件で分割し、当該分割単位でホストコードへの変換及びMPU同期処理を行った精度優先型ホストコードを生成し、
前記実行制御部は、
ブレイクポイント或いは命令実行イベントの有無に応じて前記精度優先型ホストコード又は速度優先型ホストコードを切り替えながら実行することを特徴とする、
請求項1に記載のマイコンシミュレータ。
【請求項3】
ソースプログラムをコンパイルして得られるオブジェクトコードをホストコードに変換してシミュレーションを実行する、マイコンシミュレータのシミュレーション方法であって、
コード変換部が、ブレイクポイント或いは命令実行イベントの有無を判定し、当該有無に応じて、前記オブジェクトコードから分割条件の異なる複数種のホストコードを生成し、
実行制御部が、前記複数種のホストコードのうち何れかのホストコードを実行することを特徴とする、
マイコンシミュレータのシミュレーション方法。
【請求項4】
ソースプログラムをコンパイルして得られるオブジェクトコードをホストコードに変換してシミュレーションを実行するマイコンシミュレータを、
ブレイクポイント或いは命令実行イベントの有無に応じて、前記オブジェクトコードから分割条件の異なる複数種のホストコードを生成する、コード変換部と、
前記複数種のホストコードのうち何れかのホストコードを実行する、実行制御部と、
として少なくとも機能させるための、プログラム。
【請求項5】
請求項4に記載のプログラムを少なくとも記録したコンピュータ読み取り可能な媒体。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate


【公開番号】特開2010−33354(P2010−33354A)
【公開日】平成22年2月12日(2010.2.12)
【国際特許分類】
【出願番号】特願2008−195170(P2008−195170)
【出願日】平成20年7月29日(2008.7.29)
【出願人】(591266814)ガイオ・テクノロジー株式会社 (3)
【Fターム(参考)】