(57)【要約】【課題】エミュレータを用いたプログラム開発において、同時に測定する関数の個数を大幅に増大させ、ゲート数増大および遅延の問題がなく、リアルタイムエミュレーションの関数実行時間及び関数実行回数の測定を行うことができるプログラム開発方法を提供する。【解決手段】プログラム中の各関数に対応したインデックステーブル３を使用して、実行中のプログラムのプログラムカウンタの値（ＰＣ）を関数番号（ＩＤ）に変換し、前記変換された関数番号に基づいて、各関数の実行時間を第１のカウンタ１１で測定して第１のメモリ７に保存し、各関数の実行回数を第２のカウンタ１２で測定して第２のメモリ８に保存することにより、リアルタイムエミュレーションの関数実行時間及び関数実行回数の測定を行うことができる。【選択図】        図１
2004348635.tif 000002
【特許請求の範囲】
【請求項１】
各関数に対応したインデックステーブルと、前記インデックステーブルに基づいて各関数の実行時間を測定する機能と、前記インデックステーブルに基づいて各関数の読み出し回数を測定する機能とを有するハードウェア機構を利用することを特徴とするプログラム開発方法。
【請求項２】
プログラム中の各関数に対応したインデックステーブルを使用して、実行中のプログラムのアドレスを関数番号に変換する工程と、
前記変換された関数番号に基づいて各関数の実行時間および実行回数を測定する工程とを有することを特徴とするプログラム開発方法。
【請求項３】
請求項２記載のプログラム開発方法であって、
前記各関数の実行時間は、前記変換された関数番号が変化するまでのクロック数を第１のカウンタによりカウントすることにより測定され、
前記各関数の実行回数は、前記変換された関数番号が変化した時に第２のカウンタの値に＋１を加えることにより測定されることを特徴とするプログラム開発方法。
【請求項４】
請求項３記載のプログラム開発方法であって、
前記第１のカウンタによりカウントされたクロック数は、関数番号ごとに第１のメモリに保存され、
前記各関数の実行回数は、関数番号ごとに第２のメモリに保存されることを特徴とするプログラム開発方法。
【請求項５】
請求項４記載のプログラム開発方法であって、
前記変換された関数番号が変化した時に、変化前の前記第１のカウンタの値を前記第１のメモリに書き込み、変化後の関数番号に対応する値を前記第１のメモリから読み出し、前記読み出された値を前記第１のカウンタにロードし、前記第１のカウンタにおいてカウントすることを特徴とするプログラム開発方法。
【請求項６】
請求項４または５記載のプログラム開発方法であって、
前記変換された関数番号が変化した時に、変化前の前記第２のカウンタの値を前記第２のメモリに書き込み、変化後の関数番号に対応する値を前記第２のメモリから読み出し、前記読み出された値を前記第２のカウンタにロードし、前記第２のカウンタの値に＋１を加えることを特徴とするプログラム開発方法。
【請求項７】
請求項５または６記載のプログラム開発方法であって、
前記第１のメモリおよび前記第２のメモリはデュアルポートメモリであり、書き込みと読み出しを同時に行うことを特徴とするプログラム開発方法。
【請求項８】
請求項２〜７のいずれか１項に記載のプログラム開発方法であって、
前記実行中のプログラムのアドレスは、前記プログラムが動作する半導体集積回路装置から出力されるプログラムカウンタの値であることを特徴とするプログラム開発方法。
【請求項９】
請求項２〜７のいずれか１項に記載のプログラム開発方法であって、
前記実行中のプログラムのアドレスは、前記プログラムが動作する半導体集積回路装置から出力される分岐アドレスから生成されるプログラムカウンタの値であることを特徴とするプログラム開発方法。
【請求項１０】
請求項２〜７のいずれか１項に記載のプログラム開発方法であって、
測定対象は、前記各関数の実行時間および実行回数に代えて、各タスクの実行時間および実行回数であり、
前記実行中のプログラムのアドレスは、前記プログラムが動作する半導体集積回路装置から出力されるタスクの番号であることを特徴とするプログラム開発方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、プログラム開発方法に関し、特にリアルタイムエミュレーションにおける関数の実行時間および実行回数の測定に適用して有効な技術に関する。
【０００２】
【従来の技術】
本発明者が検討した技術として、例えば、プログラム開発において、プロファイラを利用してプログラムの実行時の動きを分析し、プログラム中で不相応に時間を費やすホットスポットやボトルネックを探し出し、プログラムを修正するなどの対策を取ることにより、プログラムの性能を向上させることが行われる。
【０００３】
プロファイラとは、動作中のプログラムがどの処理をどういった順序で実行したかを監視し記録を残すプログラムである。ユーザは、その記録を分析することにより、プログラムが自分の意図どおりに動作しているか、またプログラムのどの部分がボトルネックとなって処理に時間がかかっているか、などを知ることができる。そして、プログラムの余計な部分を削るなどしてプログラムを高速化することができる。
【０００４】
プロファイラの主な機能としては、例えば、以下のようなものがある。
（１）各関数のアドレス、サイズ、スタックサイズ、関数呼び出し回数、および実行時間などのプロファイルデータをツリー表示する。
（２）関数とグローバル変数のアドレス、サイズ、呼び出し回数、および実行時間などのプロファイルデータをリスト表示する。
（３）関数に着目した呼び出し関係をグラフ表示する。
（４）プロファイル情報ファイルを指定して、動的情報に基づいてモジュール間の最適化を行う。
（５）ソースへのジャンプ、最大・最小の検索、プロファイルデータのセーブを行う。
【０００５】
エミュレータに関連する機能としては、要約すると以下の３点となる。
（１）関数単位のプロファイルデータ合計表示
（２）関数の呼び出し関係
（３）呼び出し関係における関数のプロファイルデータ合計表示
【０００６】
【発明が解決しようとする課題】
ところで、前記のようなエミュレータを用いたプログラム開発方法の技術について、本発明者が検討した結果、以下のようなことが明らかとなった。
【０００７】
例えば、本発明者が本発明の前提として検討したエミュレータの実現方法として、ユーザプログラム実行中に、１分岐ブレーク（チップ内蔵）により分岐（通常／サブルーチン／例外）ごとにブレークし、ある第１のブレークから第２のブレーク間のプロファイルデータを収集する方法がある。しかし、この方法は分岐ごとにブレークするため、実行速度が低くリアルタイム性がない。したがって、ユーザシステム全体での測定に不向きである。さらに、ＯＳタスク単位の測定が不可能である。
【０００８】
ハードウェアによる関数の測定方法として、従来のエミュレータの実現方法は、測定する関数ごとに比較回路およびカウンタを用意しているため、リアルタイムエミュレーションの関数実行時間及び実行回数の測定において、同時に測定できる関数の個数に制限があり（例えば、最大８個）、単純に数万個用に適用することができない。もし、同時に測定できる関数の個数を増やそうとすれば、ゲート数が増大し遅延の問題が生ずる。
【０００９】
そこで、本発明の目的は、エミュレータを用いたプログラム開発において、同時に測定する関数の個数を大幅に増大させ、ゲート数増大および遅延の問題がなく、リアルタイムエミュレーションの関数実行時間及び関数実行回数の測定を行うことができるプログラム開発方法を提供するものである。
【００１０】
本発明の前記並びにその他の目的と新規な特徴は、本明細書の記述及び添付図面から明らかになるであろう。
【００１１】
【課題を解決するための手段】
本願において開示される発明のうち、代表的なものの概要を簡単に説明すれば、次のとおりである。
【００１２】
（１）本発明によるプログラム開発方法は、プログラムを構成する各関数に対応したインデックステーブルと、前記インデックステーブルに基づいて各関数の実行時間を測定する機能と、前記インデックステーブルに基づいて各関数の読み出し回数を測定する機能とを有するハードウェア機構を利用するものである。
【００１３】
（２）本発明によるプログラム開発方法は、プログラム中の各関数に対応したインデックステーブルを使用して、実行中のプログラムのアドレスを関数番号に変換する工程と、前記変換された関数番号に基づいて各関数の実行時間および実行回数を測定する工程とを有するものである。
【００１４】
（３）前記（２）のプログラム開発方法は、前記各関数の実行時間が、前記変換された関数番号が変化するまでのクロック数を第１のカウンタによりカウントすることにより測定され、前記各関数の実行回数が、前記変換された関数番号が変化した時に第２のカウンタの値に＋１を加えることにより測定されるものである。
【００１５】
（４）前記（３）のプログラム開発方法は、前記第１のカウンタによりカウントされたクロック数が、関数番号ごとに第１のメモリに保存され、前記各関数の実行回数が、関数番号ごとに第２のメモリに保存されるものである。
【００１６】
（５）前記（４）のプログラム開発方法は、前記変換された関数番号が変化した時に、変化前の前記第１のカウンタの値を前記第１のメモリに書き込み、変化後の関数番号に対応する値を前記第１のメモリから読み出し、前記読み出された値を前記第１のカウンタにロードし、前記第１のカウンタにおいてカウントするものである。
【００１７】
（６）前記（４）、（５）のプログラム開発方法は、前記変換された関数番号が変化した時に、変化前の前記第２のカウンタの値を前記第２のメモリに書き込み、変化後の関数番号に対応する値を前記第２のメモリから読み出し、前記読み出された値を前記第２のカウンタにロードし、前記第２のカウンタの値に＋１を加えるものである。
【００１８】
（７）前記（５）、（６）のプログラム開発方法は、前記第１のメモリおよび前記第２のメモリがデュアルポートメモリであり、書き込みと読み出しを同時に行うことを特徴とするものである。
【００１９】
（８）前記（２）〜（７）のプログラム開発方法は、前記実行中のプログラムのアドレスが、前記プログラムが動作する半導体集積回路装置から出力されるプログラムカウンタの値であるものである。
【００２０】
（９）前記（２）〜（７）のプログラム開発方法は、前記実行中のプログラムのアドレスが、前記プログラムが動作する半導体集積回路装置から出力される分岐アドレスから生成されるプログラムカウンタの値であるものである。
【００２１】
（１０）前記（２）〜（７）のプログラム開発方法は、測定対象が、各関数の実行時間および実行回数に代えて、各タスクの実行時間および実行回数であり、前記実行中のプログラムのアドレスが、前記プログラムが動作する半導体集積回路装置から出力されるタスクの番号であるものである。
【００２２】
よって、前記（１）〜（１０）のプログラム開発方法によれば、同時に測定する関数の個数に制限がなく、ゲート数増大および遅延の問題がなく、リアルタイムエミュレーションの関数実行時間及び関数実行回数の測定を行うことができる。
【００２３】
また、前記（９）のプログラム開発方法によれば、オンチップデバッガを搭載するマイクロコンピュータにおいても各関数の実行時間および実行回数を測定することができる。
【００２４】
また、前記（１０）のプログラム開発方法によれば、プログラムカウンタの代わりにＯＳタスクの番号（ＩＤ）を入力することにより、タスク単位の測定が可能となる。
【００２５】
【発明の実施の形態】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。なお、実施の形態を説明するための全図において、同一部材には同一の符号を付し、その繰り返しの説明は省略する。
【００２６】
（実施の形態１）
図１は本発明の実施の形態１のプログラム開発方法を適用したリアルタイムプロファイラの構成およびフローを示す概略図、図２は本実施の形態１のプログラム開発方法を適用したリアルタイムプロファイラを有するエミュレータの構成を示すブロック図、図３は本実施の形態１のプログラム開発方法を適用したリアルタイムプロファイラの詳細な構成を示すブロック図、図４は本実施の形態１のプログラム開発方法を適用したリアルタイムプロファイラの動作を示すタイミングチャートである。
【００２７】
まず、図１により、本実施の形態１のプログラム開発方法を適用したリアルタイムプロファイラの構成の概略を説明する。詳細な構成については図３により後述する。本実施の形態１におけるリアルタイムプロファイラ１００は、例えば、エミュレータのプロファイル制御部３９に内蔵され、インデックステーブル（関数ＩＤメモリ）３、第１のメモリ（時間計測メモリ）７、第２のメモリ（実行回数計測メモリ）８、第１のカウンタ（時間計測カウンタ）１１、第２のカウンタ（回数計測カウンタ）１２などのハードウェアから構成されている。
【００２８】
インデックステーブル３は、実行中のユーザプログラム１９のアドレス情報であるプログラムカウンタ（ＰＣ）の値を関数番号（ＩＤ）に変換するアドレス変換テーブルであり、プログラム中の各関数に対応している。インデックステーブル３はメモリなどのハードウェアで構成されている。
【００２９】
第１のメモリ７は、各関数の実行時間に対応するクロックカウント数を各関数ごとに保存するメモリである。
【００３０】
第２のメモリ８は、各関数の実行回数を各関数ごとに保存するメモリである。
【００３１】
第１のカウンタ１１は、各関数の実行時間に対応するクロック数をカウントするカウンタである。
【００３２】
第２のカウンタ１２は、各関数の実行回数をカウントするカウンタである。
【００３３】
次に、図１により、本実施の形態１におけるリアルタイムプロファイラの動作を説明する。本実施の形態１におけるリアルタイムプロファイラは、インデックステーブル３を使用し、実行中のユーザプログラム１９の関数アドレスをＩＤ変換し、ＩＤ（関数番号）に対応するカウンタ処理を行い、ｎ個（ｎ：任意の自然数）の関数単位にクロック（実行時間）の合計および実行回数の合計を算出する。算出は、次のように行われる。
【００３４】
▲１▼  ソフトウェア処理により、各関数に対応する関数番号（ＩＤ）をインデックステーブル３に設定する。
【００３５】
▲２▼  インデックステーブル３により、評価用チップ（ＳＭＣＵ）から出力されたプログラムカウンタの値（ＰＣ）をＩＤ（関数番号）に変換する。
【００３６】
▲３▼  実行時間の測定において、変換されたＩＤが前回のＩＤと同じ場合は、第１のカウンタ１１にてクロックのカウントを継続する。変換されたＩＤが前回のＩＤと異なる場合は、第１のカウンタ１１の値を第１のメモリ７中の前回のＩＤの個所に書き込む。次に、第１のメモリ７から今回のＩＤに対応するカウンタ値を読み出し、第１のカウンタ１１にロードして、その値を初期値としてカウントアップを開始する。
【００３７】
▲４▼  実行回数の測定において、変換されたＩＤが前回のＩＤと同じ場合は、何もしない。変換されたＩＤが前回のＩＤと異なる場合は、第２のカウンタ１２の値を第２のメモリ８中の前回のＩＤの個所に書きこむ。次に、第２のメモリ８から今回のＩＤに対応するカウンタ値を読み出し第２のカウンタ１２にロードして、その値に＋１を加える。
【００３８】
次に、図２により、本実施の形態１におけるリアルタイムプロファイラ１００を有するエミュレータの構成の一例を説明する。本実施の形態１におけるエミュレータ本体４６は、例えば、評価用チップであるスレーブマイクロコンピュータ（ＳＭＣＵ）１、マスタマイクロコンピュータ（ＭＭＣＵ）１４、ホストインタフェース３３、マスタデータバス，アドレスバスからなるコントロールバス３４、エミュレーション制御部３５、ブレーク制御部３６、トレースメモリ部３７、エミュレーションメモリ部３８、プロファイル制御部３９、ＰＣバスを含むエミュレーションバス４０、ユーザインタフェース部４２、ケーブル４３などから構成され、ケーブル４３を介してＣＰＵソケット４４を含むユーザターゲットシステム４５と接続され、ホストインタフェース３３を介してホストコンピュータ３１と接続されている。リアルタイムプロファイラ１００はプロファイル制御部３９に内蔵されている。
【００３９】
次に、図２により、エミュレータの動作を説明する。エミュレータは、エミュレータ本体４６から延長されたケーブル４３の先端プラグがユーザターゲットシステム４５に結合されることにより、ターゲットマイクロプロセッサの機能を代行するようなエミュレーション機能を備える。エミュレータ本体４６は、ユーザターゲットシステム４５上のターゲットマイクロプロセッサの機能を代行するスレーブマイクロコンピュータ１（ＳＭＣＵ）が設けられ、ユーザインタフェース部４２を介してケーブル４３に結合される。スレーブマイクロコンピュータ１とユーザターゲットシステム４５とがやり取りする情報や、スレーブマイクロコンピュータ１の内部状態の情報がエミュレーションバス４０によって与えられ、またエミュレーションバス４０を介してエミュレーションのための各種制御信号や情報がスレーブマイクロコンピュータ１に与えられる。エミュレーションバス４０には、スレーブマイクロコンピュータ１がターゲットマイクロコンピュータの機能を代行する際に所定の状態切り替えを行うエミュレーション制御部３５、スレーブマイクロコンピュータ１の動作を監視し、あらかじめ設定された状態に達した時にプログラム実行を停止させるブレーク制御部３６、データバスやアドレスバス、制御信号を逐次トレースするトレースメモリ部３７、ユーザターゲットシステム４５に含まれるべきデータメモリやプログラムメモリを代行するためのエミュレーションメモリ部３８、ユーザプログラム内の実行時間を計測し、プログラム実行時間の分析をおこなうプロファイル制御部３９が接続される。上記、エミュレーション制御部３５、ブレーク制御部３６、トレースメモリ部３７、エミュレーションメモリ部３８、プロファイル制御部３９はマスタデータバス、アドレスバスからなるコントロールバス３４を通じて、マスタマイクロコンピュータ１４の制御を受ける。コントロールバス３４にはホストインタフェース３３が接続され、マスタマイクロコンピュータ１４とホストコンピュータ３１との間でデータの通信が行われる。
【００４０】
次に、本実施の形態１におけるリアルタイムプロファイラ１００を使用したプログラム開発方法を説明する。次のような手順により、開発プログラムの最適化を図ることが可能である。
（１）リアルタイムプロファイラ１００を利用して、開発プログラムの各関数の実行時間および実行回数を測定する。
（２）測定結果の中で、実行時間および実行回数の多い関数を抽出する。
（３）実行時間および実行回数の多い関数について実装方法（プログラムの組み込み方法）、アルゴリズムに問題がないかを検討する。
（４）問題箇所の修正を行う。
（５）再度、測定を実施し、性能が満たされるまで（１）〜（４）の作業を繰り返す。
【００４１】
次に、図３により、本実施の形態１のプログラム開発方法を適用したリアルタイムプロファイラの詳細な構成の一例を説明する。本実施の形態１におけるリアルタイムプロファイラ１００（図１，図２）は、例えば、エミュレータ本体４６（図２）のプロファイル制御部３９（図２）に内蔵され、関数ＩＤメモリ（インデックステーブル）３、時間計測メモリ（第１のメモリ）７、実行回数計測メモリ（第２のメモリ）８、時間計測カウンタ（第１のカウンタ）１１、回数計測カウンタ（第２のカウンタ）１２、エリア判定レジスタ２、ＩＤ比較回路５、メモリアクセスタイミング制御回路６、フリップフロップ２４などのハードウェアから構成されている。
【００４２】
エリア判定レジスタ２は、測定する関数のアドレス範囲を判定するためのレジスタである。
【００４３】
関数ＩＤメモリ３は、インデックテーブルが保存されるメモリである。
【００４４】
ＩＤ比較回路５は、ＩＤの変化を検出し、ＩＤ変化信号９を出力する回路である。
【００４５】
メモリアクセスタイミング制御回路６は、リアルタイムプロファイラのタイミングを制御する回路である。
【００４６】
時間計測メモリ７および実行回数計測メモリ８は、関数の実行時間および実行回数を保存するためのメモリであり、データの読み出しと書き込みを同時に行うためデュアルポートメモリを使用する。
【００４７】
フリップフロップ２４は、ＩＤが変化した時に、変化前のＩＤを保持するためのフリップフロップである。
【００４８】
評価用チップであるスレーブマイクロコンピュータ（ＳＭＣＵ）１のプログラムカウンタ（ＰＣ）出力がエミュレーションバス４０（図２）内のＰＣバスを介して関数ＩＤメモリ３のアドレス（Ａｄｒ）およびエリア判定レジスタ２に入力し、スレーブマイクロコンピュータ（ＳＭＣＵ）１のクロック出力（ＣＬＫ）が関数ＩＤメモリ３のクロック入力（ＣＫ），ＩＤ比較回路５，エリア判定レジスタ２およびメモリアクセスタイミング制御回路６に入力し、エリア判定レジスタ２の出力が関数ＩＤメモリ３のチップセレクト（ＣＳ）およびメモリアクセスタイミング制御回路６に入力し、ＩＤ比較回路５の出力（ＩＤ変化信号９）はフリップフロップ２４およびメモリアクセスタイミング制御回路６に入力し、メモリアクセスタイミング制御回路６の出力は時間計測メモリ７のレフトチップセレクト（Ｌ−ＣＳ）およびライトチップセレクト（Ｒ−ＣＳ），実行回数計測メモリ８のレフトチップセレクト（Ｌ−ＣＳ）およびライトチップセレクト（Ｒ−ＣＳ），時間計測カウンタ１１のイネーブル（ＥＮ），回数計測カウンタ１２のイネーブル（ＥＮ），時間計測カウンタ１１のロード（ＬＤ）および回数計測カウンタ１２のロード（ＬＤ）に入力し、時間計測メモリ７のレフトアイオー（Ｌ−ＩＯ）出力（時間測定データ１０）は時間計測カウンタ１１のデータ入力（Ｄ）に入力し、実行回数計測メモリ８のレフトアイオー（Ｌ−ＩＯ）出力は回数計測カウンタ１２のデータ入力（Ｄ）に入力し、フリップフロップ２４の出力（Ｑ）は時間計測メモリ７のライトアドレス（Ｒ−Ａｄｒ）および実行回数計測メモリ８のライトアドレス（Ｒ−Ａｄｒ）に入力し、時間計測カウンタ１１の出力（Ｑ）は時間計測メモリ７のライトアイオー（Ｒ−ＩＯ）に入力し、回数計測カウンタ１２の出力（Ｑ）は実行回数計測メモリ８のライトアイオー（Ｒ−ＩＯ）に入力している。
【００４９】
また、関数ＩＤメモリ３のアイオー（Ｉ／Ｏ），フリップフロップ２４のデータ入力（Ｄ），ＩＤ比較回路５の入力，時間計測メモリ７のレフトアドレス（Ｌ−Ａｄｒ），実行回数計測メモリ８のレフトアドレス（Ｌ−Ａｄｒ），時間計測メモリ７のライトアイオー（Ｒ−ＩＯ），実行回数計測メモリ８のライトアイオー（Ｒ−ＩＯ）およびマスタマイクロコンピュータ１４のデータ（Ｄａｔａ）はマスタデータバスを介して相互に接続され、関数ＩＤメモリ３のアドレス（Ａｄｒ），エリア判定レジスタ２の入力，時間計測メモリ７のライトアドレス（Ｒ−Ａｄｒ），実行回数計測メモリ８のライトアドレス（Ｒ−Ａｄｒ）はマスタアドレスバスを介して相互に接続され、マスタマイクロコンピュータ１４のアドレス（Ａｄｄｒ）出力はマスタアドレスバスに入力している。また、時間計測カウンタ１１のクロック入力（ＣＫ）には時間測定サンプルクロック１３が入力している。時間測定サンプルクロック１３には、ＣＰＵクロックまたは他のクロックを使用し、クロックの周波数を変えることにより、測定時間範囲の調整が可能である。
【００５０】
次に、図３および図４により、本実施の形態１におけるリアルタイムプロファイラの動作を説明する。
【００５１】
まず、マスタマイクロコンピュータ（ＭＭＣＵ）１４より、ユーザプログラムエリアのプロファイル測定を行うアドレス範囲をエリア判定レジスタ２に設定する。
【００５２】
次に、マスタマイクロコンピュータ（ＭＭＣＵ）１４より、ユーザプログラムの各関数のＩＤ値（インデックスデータ）を関数ＩＤメモリ３に設定する。
【００５３】
ユーザプログラム実行中、例えば、関数Ａの実行を開始した場合、エミュレーションバス４０に含まれるＰＣバスを介してエミュレータ評価用チップであるＳＭＣＵ１から出力されるＰＣ（プログラムカウンタ値）がエリア判定レジスタ２で設定したアドレス範囲内であれば、関数ＩＤメモリ３がチップセレクトされ、関数のＰＣ値に対応したＩＤデータ値４が出力される。
【００５４】
出力されたＩＤデータ値４はＩＤ比較回路５に入力され、ＩＤデータ値４の変化が検出されるとＩＤ変化信号９によりメモリアクセスタイミング制御回路６が起動される。
【００５５】
メモリアクセスタイミング制御回路６は、時間計測メモリ７、実行回数計測メモリ８へのリード／ライトアクセスを制御するメモリコントローラである。ＩＤ比較回路５からのＩＤ変化信号９により、メモリアクセスタイミング制御回路６内のタイミングコントローラが起動し、時間計測メモリ７からＩＤデータ値４をメモリアドレスとしたデータ内容である関数の時間測定データ１０がレフトアイオー（Ｌ−ＩＯ）を介して読み出され、時間計測カウンタ１１にロードされる。また、同時に実行回数計測メモリ８からもＩＤデータ値４をメモリアドレスとした関数の回数測定データ１５がレフトアイオー（Ｌ−ＩＯ）を介して読み出され、回数計測カウンタ１２にロードされる。
【００５６】
関数ＩＤメモリ３出力のＩＤデータ値４に変化の無い場合（関数Ａ実行中）、時間計測カウンタ１１にロードされた時間計測データは、時間測定サンプルクロック１３によりカウントアップを継続する。回数計測カウンタ１２にロードされた回数測定データ１５は、ＩＤデータ４値が変化した時だけ＋１加算される。
【００５７】
関数Ａの実行を終了し、新たに関数Ｂの実行を開始した場合、関数ＩＤメモリ３出力のＩＤデータ値４は変化し、ＩＤ比較回路５でＩＤ変化信号９により、時間計測カウンタ１１がストップし、時間計測カウンタ１１の値が時間計測メモリ７に書き込まれる。また、回数計測カウンタ１２の値が実行回数計測メモリ８に書き込まれる。これにより、関数Ａの実行時間、実行回数値が更新され、時間計測メモリ７および実行回数計測メモリ８の各々のメモリ領域へ格納されたことになる。
【００５８】
また、新しい関数ＢのＩＤデータ値４をアドレスとする時間計測メモリ７から時間測定データ１０、実行回数計測メモリ８から回数測定データ１５が読み出され、それぞれ時間計測カウンタ１１、回数計測カウンタ１２にロードされ、関数Ｂの実行時間、実行回数の測定を開始する。
【００５９】
関数に対応するＩＤデータを事前にソフト処理により関数ＩＤメモリ３に設定しておき、ＳＭＣＵ１から出力されたＰＣ値を関数ＩＤメモリ３によりＩＤ（関数番号）値に変換し、ＩＤ値の変化をハードウェアで常時監視することにより、どの関数が実行中であるかを検出する。ＩＤ値の変化が無い場合、時間計測カウンタ１１のカウントアップを行い、ＩＤ値の変化があった場合、時間計測カウンタ１１の値、回数計測カウンタ１２の値をメモリに書き込むと同時に、新たな関数に対応するカウンタ値をメモリから読み出し、カウントアップを開始する仕組みである。
【００６０】
時間計測メモリ７および実行回数計測メモリ８は、カウントデータの読み出し／書き込みを同時に制御するため、デュアルポートメモリを使用している。
【００６１】
一回の実行で測定できる関数の個数は、関数ＩＤメモリ３に設定されたＩＤの個数となり、対応する時間計測メモリ７、実行回数計測メモリ８のアドレスにプロファイル測定時のデータが格納され、プログラム実行終了後、ＭＭＣＵ１４によりプロファイルデータ値が読み出され、各関数の実行時間および実行回数の合計が算出される。
【００６２】
時間計測カウンタ１１および回数計測カウンタ１２は、各々１個ずつ持つのみでＩＤの個数分のプロファイル測定が可能であり、ハードウェアの物量が軽減される。
【００６３】
また、関数の実行時間および実行回数の測定をすべてハードウェアにより実現可能なため、リアルタイム性が確保されるとともに、ユーザプログラムへの一切の変更の必要がない。
【００６４】
図４に本実施の形態１におけるリアルタイムプロファイラのタイミングチャートの一例を示す。ＣＬＫはＳＭＣＵ１のクロック出力、エミュレーションバス４０に含まれるＰＣバスはＳＭＣＵ１のＰＣ出力、ＩＤデータ値４は関数ＩＤメモリ３のＩ／Ｏ出力、時間測定データ１０は時間計測メモリ７のＬ−ＩＯ出力、回数測定データ１５は実行回数計測メモリ８のＬ−ＩＯ出力、ＩＤ変化信号９はＩＤ比較回路５の出力、時間測定サンプルクロック１３は時間計測カウンタ１１のＣＫ入力、時間計測カウンタ１１は時間計測カウンタ１１の値、回数計測カウンタ１２は回数計測カウンタ１２の値を示す。
【００６５】
例えば、図４に示すように、ＰＣバスの値“１００〜１０Ｃ”に対応するＩＤデータ値４“１００”をアドレスとする時間計測メモリ７および実行回数計測メモリ８から、それぞれ時間測定データ１０および回数測定データ１５が読み出され、時間計測カウンタ１１および回数計測カウンタ１２にロードされる。ＩＤデータ値４が変化しない場合、時間計測カウンタ１１は時間測定サンプルクロック１３によりカウントアップされ、回数計測カウンタ１２の値は変化の最初のタイミングで＋１加算される。ＩＤデータ値４が変化すると、時間計測メモリ７へ時間計測値（時間計測カウンタ１１の値）を書き戻す。同様に、実行回数計測メモリ８へ実行回数計測値（回数計測カウンタ１２の値）を書き戻す。時間計測メモリ７および実行回数計測メモリ８には、各関数ＩＤに対応した実行時間および実行回数が格納される。続いて、ＰＣバスの値“２００〜２０Ｃ”および“３００〜３０Ｃ”についても、同様にして、ＩＤデータ値４“２００”および“３００”をアドレスとする時間計測メモリ７および実行回数計測メモリ８に各関数ＩＤに対応した実行時間および実行回数が格納される。よって、本実施の形態１のプログラム開発方法によれば、同時に測定する関数の個数を大幅に増大させ、ゲート数増大および遅延の問題がなく、リアルタイムエミュレーションの関数実行時間及び関数実行回数の測定を行うことができる。
【００６６】
（実施の形態２）
図５は本発明の実施の形態２のプログラム開発方法を適用したリアルタイムプロファイラの詳細な構成を示すブロック図である。
【００６７】
図５に示すリアルタイムプロファイラは前記実施の形態１の第１の変形例であり、ＳＭＣＵ１のＰＣ出力値を使用しない場合での実現回路である。具体的には、前記図３に対して、ＳＭＣＵ１の代わりにオンチップデバッガを搭載するマイクロコンピュータ１６が接続され、ＰＣ生成回路１８がエミュレーションバス４０に含まれるＰＣバス上に追加されている。
【００６８】
オンチップデバッガを搭載するマイクロコンピュータ１６は、プログラムの実行において発生する分岐、メモリアクセスなどのイベントのトレースを外部に出力する機能を持っている。図５では、ＰＣ生成において、マイクロコンピュータ１６の分岐アドレス端子から出力され、ＰＣバスを介して供給される分岐ＰＣ値から、ＰＣ生成回路１８においてＰＣ値を作成し、関数ＩＤメモリ３へ出力する。プロファイル測定の実現ブロックは図２の方法と同じである。本実施の形態２は、評価用チップがない場合でも、オンチップデバッグ機能の分岐ＰＣアドレス情報を使用したプロファイル測定を行う一例である。よって、本実施の形態２のプログラム開発方法によれば、オンチップデバッガを搭載するマイクロコンピュータにおいても各関数の実行時間および実行回数を測定することができる。
【００６９】
（実施の形態３）
図６は本発明の実施の形態３のプログラム開発方法を適用したリアルタイムプロファイラの詳細な構成を示すブロック図である。
【００７０】
図６に示すリアルタイムプロファイラは前記実施の形態１の第２の変形例である。具体的には、前記図３に対して、ＳＭＣＵ１の代わりにＩＤレジスタ２３を有するＣＰＵ（中央処理装置）２０が接続され、ＣＰＵ２０のタスクＩＤ出力値がＰＣバスを介して関数ＩＤメモリ３に入力されている。
【００７１】
図６は、リアルタイムＯＳを用いるＣＰＵボード等において、ＣＰＵ２０がＯＳ上で起動されるタスクのＣＰＵ占有時間を測定する場合に、ＣＰＵ２０は、ＯＳ上で起動されうる各タスクに対して、それぞれにあらかじめ割り当てたタスクＩＤを、タスクを駆動する際に、ＣＰＵ２０内のＩＤレジスタ２３に書き込むようにする。時間測定回路は、ＩＤレジスタ２３に書き込まれたタスクＩＤの値を使用し、ＣＰＵ２０がタスクを切り替える際に、ＩＤレジスタ２３にタスクＩＤを書き込むようにすることで、前記実施の形態１の図３で説明したのと同様な方法でタスクの時間測定、実行回数測定を行う。関数ＩＤメモリ３にはタスクＩＤ値をアドレス値とするタスクごとのＩＤアドレスが格納されている。よって、本実施の形態３のプログラム開発方法によれば、プログラムカウンタの代わりにＯＳタスクの番号（ＩＤ）をリアルタイムプロファイラ１００に入力することにより、タスク単位の測定が可能となる。
【００７２】
以上、本発明者によってなされた発明をその実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【００７３】
【発明の効果】
本願において開示される発明のうち、代表的なものによって得られる効果を簡単に説明すれば、以下のとおりである。
【００７４】
すなわち、本発明に従うと、ハードウェアにて実現するため、リアルタイムエミュレーションの測定が可能である。
【００７５】
また、リアルタイムエミュレーションにて測定することで、実動作と差異のない測定結果が得られるため、製品開発の最終フェーズのチューニングに使用することが可能である。
【図面の簡単な説明】
【図１】本発明の実施の形態１のプログラム開発方法を適用したリアルタイムプロファイラの構成およびフローを示す概略図である。
【図２】本発明の実施の形態１のプログラム開発方法を適用したリアルタイムプロファイラを有するエミュレータの構成を示すブロック図である。
【図３】本発明の実施の形態１のプログラム開発方法を適用したリアルタイムプロファイラの詳細な構成を示すブロック図である。
【図４】本発明の実施の形態１のプログラム開発方法を適用したリアルタイムプロファイラの動作を示すタイミングチャートである。
【図５】本発明の実施の形態２のプログラム開発方法を適用したリアルタイムプロファイラの詳細な構成を示すブロック図である。
【図６】本発明の実施の形態３のプログラム開発方法を適用したリアルタイムプロファイラの詳細な構成を示すブロック図である。
【符号の説明】
１    スレーブマイクロコンピュータ（ＳＭＣＵ）
２    エリア判定レジスタ
３    インデックステーブル（関数ＩＤメモリ）
４    ＩＤデータ値
５    ＩＤ比較回路
６    メモリアクセスタイミング制御回路
７    第１のメモリ（時間計測メモリ）
８    第２のメモリ（実行回数計測メモリ）
９    ＩＤ変化信号
１０    時間測定データ
１１    第１のカウンタ（時間計測カウンタ）
１２    第２のカウンタ（回数計測カウンタ）
１３    時間測定サンプルクロック
１４    マスタマイクロコンピュータ（ＭＭＣＵ）
１５    回数測定データ
１６    マイクロコンピュータ
１８    ＰＣ生成回路
１９  ユーザプログラム
２０    ＣＰＵ（中央処理装置）
２３    ＩＤレジスタ
２４    フリップフロップ
３１    ホストコンピュータ
３３    ホストインタフェース
３４    コントロールバス
３５    エミュレーション制御部
３６    ブレーク制御部
３７    トレースメモリ部
３８    エミュレーションメモリ部
３９    プロファイル制御部
４０    エミュレーションバス
４２    ユーザインタフェース部
４３    ケーブル
４４    ＣＰＵソケット
４５    ユーザターゲットシステム
４６    エミュレータ本体
１００    リアルタイムプロファイラ
【図１】
2004348635.tif 000003
【図２】
2004348635.tif 000004
【図３】
2004348635.tif 000005
【図４】
2004348635.tif 000006
【図５】
2004348635.tif 000007
【図６】
2004348635.tif 000008