(57)【特許請求の範囲】
【請求項１】
中央処理装置及び周辺回路を含み前記中央処理装置がプログラムを実行するシステムオンアチップの開発におけるプログラムの性能推定装置であって、
前記中央処理装置のみのシミュレーションを行う命令セットシミュレータであって、前記プログラムの測定区間全体の前記中央処理装置の実行サイクル数をシミュレーションにより演算する命令セットシミュレータと、
前記中央処理装置及び前記周辺回路のエミュレーションを行う論理エミュレータであって、前記プログラムの測定区間の一部の前記中央処理装置の実行サイクル数をエミュレーションにより演算する論理エミュレータと、
前記命令セットシミュレータにより演算された実行サイクル数及び前記論理エミュレータにより演算された実行サイクル数を基に、推定関数を算出し、前記論理エミュレータにおける前記プログラムの未測定区間の実行サイクル数を推定する性能推定部と
を有することを特徴とする性能推定装置。
【請求項２】
前記性能推定部は、前記命令セットシミュレータにより演算されたフレーム毎の実行サイクル数の平均値に対する前記論理エミュレータにより演算されたフレーム毎の実行サイクル数の平均値の割合係数を演算し、前記命令セットシミュレータにより演算されたフレーム毎の実行サイクル数及び前記割合係数を乗算することにより、前記論理エミュレータにおける前記プログラムの未測定区間の実行サイクル数を推定することを特徴とする請求項１記載の性能推定装置。
【請求項３】
前記性能推定部は、前記命令セットシミュレータにより演算されたフレーム毎の実行サイクル数と前記論理エミュレータにより演算されたフレーム毎の実行サイクル数を入力とし最小二乗法を用いた多項式近似により推定関数を演算することにより、前記論理エミュレータにおける前記プログラムの未測定区間の実行サイクル数を推定することを特徴とする請求項１記載の性能推定装置。
【請求項４】
前記命令セットシミュレータは、前記実行サイクル数の他に、前記プログラムのフレーム毎の各関数の関数割合をシミュレーションにより演算し、
前記論理エミュレータは、前記プログラムの前記一部のフレームについてのフレーム毎の各関数の実行サイクル数をエミュレーションにより演算し、
前記性能推定部は、前記命令セットシミュレータにより演算されたフレーム毎の実行サイクル数及び前記フレーム毎の各関数の関数割合を基に前記命令セットシミュレータのフレーム毎の各関数の実行サイクル数を演算し、前記命令セットシミュレータのフレーム毎の各関数の実行サイクル数のフレーム平均値及び前記フレーム毎の各関数の関数割合のフレーム平均値を基に前記命令セットシミュレータの各関数の実行サイクル数のフレーム平均値を演算し、前記論理エミュレータにより演算された各関数の実行サイクル数を基に前記論理エミュレータの各関数の実行サイクル数のフレーム平均値を演算し、前記命令セットシミュレータの各関数の実行サイクル数のフレーム平均値に対する前記論理エミュレータの各関数の実行サイクル数のフレーム平均値の関数毎の割合係数を演算し、前記命令セットシミュレータのフレーム毎の各関数の実行サイクル数及び前記関数毎の割合係数を基に、前記論理エミュレータにおける前記プログラムの他の部分のフレームについてのフレーム毎の実行サイクル数を推定することを特徴とする請求項１記載の性能推定装置。
【請求項５】
前記命令セットシミュレータは、前記実行サイクル数の他に、前記プログラムのフレーム毎の各関数の関数割合をシミュレーションにより演算し、
前記性能推定部は、前記論理エミュレータのエミュレーションの結果を基に前記プログラムのフレーム毎の各関数の関数割合のフレーム平均値を演算し、前記命令セットシミュレータにより演算されたフレーム毎の実行サイクル数のフレーム平均値及び前記命令セットシミュレータのフレーム毎の各関数の関数割合のフレーム平均値を基に前記命令セットシミュレータの各関数の実行サイクル数のフレーム平均値を演算し、前記論理エミュレータにより演算されたフレーム毎の実行サイクル数のフレーム平均値及び前記論理エミュレータのフレーム毎の各関数の関数割合のフレーム平均値を基に前記論理エミュレータの各関数の実行サイクル数のフレーム平均値を演算し、前記命令セットシミュレータの各関数の実行サイクル数のフレーム平均値に対する前記論理エミュレータの各関数の実行サイクル数のフレーム平均値の関数毎の割合係数を演算し、前記命令セットシミュレータのフレーム毎の各関数の実行サイクル数及び前記関数毎の割合係数を基に、前記論理エミュレータにおける前記プログラムの他の部分のフレームについてのフレーム毎の実行サイクル数を推定することを特徴とする請求項１記載の性能推定装置。
【請求項６】
前記論理エミュレータにおいてレジスタ部と制御部とＲＡＭとを有する測定用付加回路が設計データとともに合成され、エミュレータにマッピングされ、実行されることを特徴とする請求項１〜５のいずれか１項に記載の性能推定装置。
【請求項７】
前記測定用付加回路は、測定開始情報と測定終了情報をプログラマブルに設定することが可能なことを特徴とする請求項６記載の性能推定装置。
【請求項８】
前記測定用付加回路は、さらに測定間隔情報をプログラマブルに設定することが可能なことを特徴とする請求項７記載の性能推定装置。
【請求項９】
前記測定用付加回路は、さらにデリミタ情報をプログラマブルに設定することが可能なことを特徴とする請求項７記載の性能推定装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、性能推定装置に関する。
【背景技術】
【０００２】
ＳｏＣは、システムオンアチップ（System-on-a-chip）であり、１つの半導体チップ上にシステムを集積する集積回路である。具体的には、ＳｏＣは、中央処理装置（ＣＰＵ）及び周辺回路を含み、ＣＰＵがプログラムを実行することによりシステムを実現する。ＳｏＣの開発は、ＣＰＵ及び周辺回路を含むハードウェアの開発と上記のプログラムのソフトウェアの開発を含む。
【０００３】
図１は、ＳｏＣにおけるソフトウェアの性能評価工程を示す図である。ハードウェアの開発は、評価ボードを作成し、評価ボードの検証を行う。時刻ｔ３において、評価ボードの作成が完了する場合を示す。時刻ｔ３の後、評価ボードを用いたソフトウェアの性能評価１０２が行われる。時刻ｔ３の前では、評価ボードが存在しないため、ＣＰＵをシミュレーションする命令セットシミュレータ（ＩＳＳ）を用いてソフトウェアの性能評価１０１を行う。評価ボードによる性能評価１０２は、評価精度は高いが、時刻ｔ３の後でないと行えない問題点がある。ＩＳＳによる性能評価１０１は、評価ボード完成時刻ｔ３の前でも行うことができるが、評価精度が低い問題点がある。また、時刻ｔ３の評価ボード完成後でしか正確な評価はできないので、問題点も長期間わからないことになる。
【０００４】
また、割り込みが発生した場合、その割り込みに関する処理を実行した後にエミュレーションを中断し、後続処理のエミュレーションを実行する以前に先行して処理を予測するために、エミュレーションを中断した時点のレジスタの値、ＰＣの値およびメモリデータをシミュレータに転送してシミュレーションを行うマイクロプロセッサのエミュレーション方法が知られている（例えば、特許文献１参照）。
【０００５】
また、仮想周辺デバイスおよび仮想ＩＣＥ等で構成されマイクロコンピュータの実機プログラムを実行するシステムシミュレータを用いて、評価シナリオに記述された操作手順を自動的に実行させて実機プログラムの動作検証を行い、動作検証の出力データを記録するマイクロコンピュータソフトウェアの自動検証システムが知られている（例えば、特許文献２参照）。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平１０−３４０２０５号公報
【特許文献２】特開２００５−２５０９３７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
本発明の目的は、ＳｏＣのソフトウェア開発において評価ボード完成前でも高速かつ高精度で性能を推定することができる性能推定装置を提供することである。
【課題を解決するための手段】
【０００８】
性能推定装置は、中央処理装置及び周辺回路を含み前記中央処理装置がプログラムを実行するシステムオンアチップの開発におけるプログラムの性能推定装置であって、前記中央処理装置のみのシミュレーションを行う命令セットシミュレータであって、前記プログラムの測定区間全体の前記中央処理装置の実行サイクル数をシミュレーションにより演算する命令セットシミュレータと、前記中央処理装置及び前記周辺回路のエミュレーションを行う論理エミュレータであって、前記プログラムの測定区間の一部の前記中央処理装置の実行サイクル数をエミュレーションにより演算する論理エミュレータと、前記命令セットシミュレータにより演算された実行サイクル数及び前記論理エミュレータにより演算された実行サイクル数を基に、推定関数を算出し、前記論理エミュレータにおける前記プログラムの未測定区間の実行サイクル数を推定する性能推定部とを有する。
【発明の効果】
【０００９】
命令セットシミュレータ及び論理エミュレータを用いることにより、評価ボード完成前でも高速かつ高精度で性能を推定することができる。
【図面の簡単な説明】
【００１０】
【図１】ＳｏＣにおけるソフトウェアの性能評価工程を示す図である。
【図２】第１の実施形態による設計及び開発対象のＳｏＣの構成例を示す図である。
【図３】ＳｏＣの開発工程を示す図である。
【図４】第１の実施形態による性能推定装置のハードウェア構成例を示す図である。
【図５】パーソナルコンピュータの構成例を示す図である。
【図６】論理エミュレータの構成例を示す図である。
【図７】命令セットシミュレータ又は論理エミュレータによるＳｏＣのプログラムの性能測定結果の例を示す図である。
【図８】第１の実施形態の性能推定装置の概念図である。
【図９】第１の実施形態の性能推定装置の性能推定方法を説明するための図である。
【図１０】ＳｏＣにおけるソフトウェアの性能評価工程を示す図である。
【図１１】命令セットシミュレータ及び論理エミュレータの構成例を示す図である。
【図１２】性能推定装置の性能推定方法を示すフローチャートである。
【図１３】図１３（Ａ）及び（Ｂ）は命令セットシミュレータの処理例を示す図である。
【図１４】論理エミュレータの処理例を示す図である。
【図１５】性能推定装置の処理を説明するための図である。
【図１６】第２の実施形態による性能推定装置の性能推定方法を示すフローチャートである。
【図１７】命令セットシミュレータの処理例を示す図である。
【図１８】性能推定装置の処理を説明するための図である。
【図１９】第３の実施形態による性能推定装置の性能推定方法を示すフローチャートである。
【図２０】プロファイル解析部の処理例を示す図である。
【図２１】性能推定装置の処理を説明するための図である。
【発明を実施するための形態】
【００１１】
（第１の実施形態）
図２は、第１の実施形態による設計及び開発対象のＳｏＣの構成例を示す図である。ＳｏＣは、システムオンアチップ（System-on-a-chip）であり、１つの半導体チップ上にシステムを集積する集積回路である。例えば、ＳｏＣ２００は、中央処理装置（ＣＰＵ）２０１、メモリ２０２及び周辺回路を含み、ＣＰＵ２０１がメモリ２０２内のプログラムを実行することによりシステムを実現する。なお、ＣＰＵ２０１及びメモリ２０２は、複数あっても良く、ＳｏＣ２００の半導体チップの外部に設けても良い。
【００１２】
図３は、ＳｏＣの開発工程を示す図である。ＳｏＣの開発は、ＣＰＵ２０１、メモリ２０２及び周辺回路２０３を含むハードウェアの設計及び開発と、上記のプログラムのソフトウェアの開発を含む。ハードウェアの設計及び開発は、時刻ｔ１で回路設計を行い、時刻ｔ２で論理シミュレーション及び論理エミュレーションの検証を行い、時刻ｔ３で評価ボードの検証を行う。これに対し、ソフトウェアの開発は、時刻ｔ１１でソフトウェア開発を行い、時刻ｔ１２〜ｔ１３でソフトウェア検証を行う。このソフトウェア検証は、時刻ｔ３の評価ボード作成後では評価ボードを用いて行われるが、期間３０１では評価ボードを用いないで行われるため評価精度が低くなる。時刻ｔ３の評価ボード完成後のソフトウェア検証において、ＳｏＣの問題点（例えば、性能上の問題点）が発覚した場合には、ハードウェアの変更は困難であるため、ソフトウェアの変更により問題点を解決しなくてはならない。場合によっては、ソフトウェアの変更のみでは問題点を解決できず、ハードウェアを設計変更せざるを得ない場合もある。そのため、時刻ｔ３の評価ボード完成前のソフトウェア検証によりＳｏＣの問題点を発見することができれば、ハードウェアの設計変更も容易であり、ＳｏＣ全体の開発の効率を向上させることができる。
【００１３】
図４は、本実施形態による性能推定装置のハードウェア構成例を示す図である。性能推定装置は、相互に接続されたパーソナルコンピュータ（ＰＣ）４０１、論理エミュレータ４０３を制御するホストワークステーション（ＨｏｓｔＷＳ）４０４、及び論理エミュレータ４０３を有する。パーソナルコンピュータ４０１は、プログラムを実行することにより命令セットシミュレータ（ＩＳＳ）４０２の機能を実現することができる。一般的に命令セットシミュレータ４０２は、ＳｏＣ２００内のＣＰＵ２０１のみのシミュレーションを行うことで、高速かつ低精度のソフトウェア性能を評価することができる。これに対し、論理エミュレータ４０３は、ＣＰＵ２０１及び周辺回路２０３のエミュレーションを行うことができるので、低速かつ高精度のソフトウェア性能を評価することができる。命令セットシミュレータ４０２は、論理エミュレータ４０３に対して約１００〜１０００倍高速で動作する。性能推定装置は、命令セットシミュレータ４０２及び論理エミュレータ４０３を用いることにより、ＳｏＣの開発におけるプログラム（ソフトウェア）性能を高速かつ高精度で推定し、評価することができる。
【００１４】
図５は、パーソナルコンピュータ４０１の構成例を示す図である。バス５０１には、ＣＰＵ５０２、ＲＯＭ５０３、ＲＡＭ５０４、ネットワークインタフェース５０５、入力装置５０６、出力装置５０７及び外部記憶装置５０８が接続されている。ＣＰＵ５０２は、データの処理及び演算を行うと共に、バス５０１を介して接続された上記の構成ユニットを制御するものである。ＲＯＭ５０３には、予めブートプログラムが記憶されており、このブートプログラムをＣＰＵ５０２が実行することにより、コンピュータが起動する。外部記憶装置５０８にコンピュータプログラムが記憶されており、そのコンピュータプログラムがＲＡＭ５０４にコピーされ、ＣＰＵ５０２により実行される。このコンピュータは、コンピュータプログラムを実行することにより、命令セットシミュレータ４０２の処理等を行うことができる。図４のホストワークステーション４０４も、パーソナルコンピュータ４０１と同様の構成を有し、コンピュータプログラムを実行することにより、図６のホストワークステーション４０４の機能を実現する。
【００１５】
外部記憶装置５０８は、例えばハードディスク記憶装置等であり、電源を切っても記憶内容が消えない。外部記憶装置５０８は、コンピュータプログラム及び設計データ等を記録媒体に記録したり、記録媒体からコンピュータプログラム等を読み出すことができる。ネットワークインタフェース５０５は、ネットワークに対してコンピュータプログラム及び設計データ等を入出力することができる。入力装置５０６は、例えばキーボード及びポインティングデバイス（マウス）等であり、各種指定又は入力等を行うことができる。出力装置５０７は、ディスプレイ及びプリンタ等であり、表示又は印刷することができる。
【００１６】
図６は、論理エミュレータ４０３とホストワークステーション４０４の構成例を示す図である。論理エミュレータ４０３は、ＦＰＧＡ（Field Programmable Gate Array）６０１及びメモリ６０２を有する。ホストワークステーション４０４は、論理合成部６０５及びローダ６０６を有する。論理合成部６０５は、図２のＳｏＣ２００内のＣＰＵ２０１及び周辺回路２０３を含むハードウェアのＲＴＬ（レジスタ転送レベル）設計データ６０３を論理合成し、ゲートレベル設計データ６０４を生成する。ローダ６０６は、ホストワークステーション４０４上で動作するソフトウェアであり、ゲートレベル設計データ６０４をＦＰＧＡ６０１にマッピングする。メモリ６０２は、図２のＳｏＣ２００内のメモリ２０２をエミュレーションするためのメモリである。これにより、ＦＰＧＡ６０１及びメモリ６０２は、ＳｏＣ２００内のＣＰＵ２０１及び周辺回路２０３を含むハードウェアをエミュレーションすることができる。なお、論理エミュレータ４０３は、ＦＰＧＡ６０１を用いる場合に限定されず、複数のＣＰＵを用いるタイプの論理エミュレータ等でもよい。
【００１７】
図７は、命令セットシミュレータ４０２又は論理エミュレータ４０３によるＳｏＣ２００のプログラムの性能測定結果の例を示す図である。横軸はフレーム番号を示し、縦軸はＣＰＵ２０１の動作周波数を示す。フレームは、プログラムの特定区間を示す。例えば、ＳｏＣ２００のプログラムがオーディオエンコーダのプログラムである場合に、ＳｏＣ２００はオーディオエンコーダとして機能する。オーディオエンコーダは、オーディオデータを例えば１０２４サンプル単位で処理を行う。フレーム番号１は１フレーム目の１０２４サンプル単位のオーディオデータをエンコードするプログラムの処理であり、フレーム番号２は２フレーム目の１０２４サンプル単位のオーディオデータをエンコードするプログラムの処理である。エンコードは、オーディオデータに応じて圧縮率等が異なるため、ＣＰＵ２０１の動作周波数はフレーム番号毎に異なる。ＣＰＵ２０１の動作周波数は、高いほど処理の負荷が大きいことを意味する。オーディオデータをバッファに入力することにより、フレーム番号毎のＣＰＵ２０１の動作周波数の違いを緩和することができる。例えば、動作周波数のフレーム平均値は２２８ＭＨｚになる。ここで、論理エミュレータ４０３は、命令セットシミュレータ４０２に比べて、測定精度は高いが、動作速度が遅いため、すべてのフレーム番号について性能を測定することは困難である。本実施形態では、論理エミュレータ４０３で一部のフレーム番号についてのみ性能を測定し、命令シミュレータ４０２を用いて、他の部分のフレーム番号の性能を推定する。
【００１８】
図８は本実施形態の性能推定装置の概念図であり、図９は本実施形態の性能推定装置の性能推定方法を説明するための図である。図８の破線はデータの流れを示し、実線は処理の流れを示す。図９の縦軸はＣＰＵ２０１の実行サイクル数であり、図７の縦軸と同様に、実行サイクル数が大きいほど処理負荷が大きいことを意味する。性能推定部８００は、図４のパーソナルコンピュータ４０１の処理により実現される。命令セットシミュレータ４０２は、ステップ８０１でプログラムの全体性能を測定し、図９の全体性能測定結果９０２を記憶部８０２に記録する。全体性能測定結果９０２は、例えばフレーム番号１〜５１の全フレームの性能測定結果であり、低精度の測定結果である。論理エミュレータ４０３は、ステップ８０３でプログラムの一部の性能を測定し、図９の一部性能測定結果９０１を記憶部８０４に記録する。一部性能測定結果９０１は、例えばフレーム番号１〜１２の一部のフレームの性能測定結果であり、評価ボードと同等の高精度の測定結果である。性能推定部８００は、ステップ８０５において、記憶部８０２内の全体性能測定結果９０２及び記憶部８０４内の一部性能測定結果９０１を基に、図９の他の部分のフレームの性能推定値９０３を推測し、性能９０１及び９０３を含む全体性能推定結果を記憶部８０６に記録する。他の部分のフレームの性能推定値９０３は、例えばフレーム番号１３〜５０の性能推定値であり、高精度の推定値である。
【００１９】
論理エミュレータ４０３の性能測定結果９０１は高精度であるため、記憶部８０６内の全体性能推定結果として使用することができる。しかし、論理エミュレータ４０３は動作速度が低速であるため、一部のフレームの性能測定結果９０１のみを測定する。命令セットシミュレータ４０２は、性能測定結果９０２が低精度であるが、高速動作可能であるため、全フレームの性能測定結果９０２を測定する。他の部分の性能推定値９０３は、全体性能測定結果９０２及び一部性能測定結果９０１を基に推定されるため、高精度かつ高速に演算することができる。上記の方法により、一部性能測定結果９０１及び他の部分の性能推定値９０３を含む高精度の全体性能推定結果を得ることができる。
【００２０】
図１０は、ＳｏＣにおけるソフトウェアの性能評価工程を示す図である。時刻ｔ３において、評価ボードの作成が完了する場合を示す。時刻ｔ３の後、評価ボードを用いたソフトウェアの性能評価１０２が行われる。時刻ｔ３の前では、評価ボードが存在しないため、ＣＰＵ２０１をシミュレーションする命令セットシミュレータ（ＩＳＳ）４０２を用いてソフトウェアの性能評価１０１を行う。本実施形態では、図８の性能推定方法による性能評価１０３を行う。性能評価１０３は、時刻ｔ３の評価ボード完成前において、命令セットシミュレータ４０２による性能評価１０１に比べて高精度かつ短期間でプログラムの性能を評価することができる。また、性能評価１０３により、評価ボード作成前のハードウェアの設計変更を容易にする。
【００２１】
図１１は、命令セットシミュレータ４０２、論理エミュレータ４０３及びホストワークステーション４０４の構成例を示す図である。ホストワークステーション４０４は、測定用付加回路のＲＴＬ設計データ１１０３を有する。測定用付加回路のＲＴＬ設計データ１１０３は、レジスタ部１１０４、制御部１１０５及びＲＡＭ１１０６のＲＴＬ設計データを有する。ホストワークステーション４０４において、論理合成部６０５は、対象となるＳｏＣ２００のＲＴＬ設計データ６０３及び測定用付加回路のＲＴＬ設計データ１１０３を論理合成し、ゲートレベル設計データ６０４を生成する。ローダ６０６は、ゲートレベル設計データ６０４をＦＰＧＡ６０１にマッピングする。ターゲットプログラム１１０１は、ＳｏＣ２００で動作するプログラムであり、例えばオーディオエンコーダのプログラムである。命令セットシミュレータ４０２は、ターゲットプログラム１１０１を基にシミュレーションを行う。論理エミュレータ４０３は、ターゲットプログラム１１０１を基にエミュレーションを行う。測定用付加回路のＲＴＬ設計データ１１０３は、ＳｏＣ２００には影響を与えない。レジスタ部１１０４には、測定コントロール関数１２０６（図１２）により、測定開始命令、測定終了命令、測定間隔値及び測定範囲を検出するためのデリミタ値が書き込まれる。制御部１１０５は、レジスタ部１１０４を監視し、処理を制御する。また、制御部１１０５は、レジスタ部１１０４に書き込まれた値に応じてターゲットプログラム１１０１のプログラムカウンタ（ＰＣ）値及び実行サイクル数をＲＡＭ１１０６に書き込む。
【００２２】
図１２は、性能推定装置の性能推定方法を示すフローチャートである。命令セットシミュレータ４０２は、ターゲットプログラム１１０１及び入力データ１２０１を入力し、ターゲットプログラム１１０１を基にシミュレーションを行い、図１３（Ａ）に示すように、ターゲットプログラム１１０１の全フレーム（測定区間全体）のフレーム毎のＣＰＵ２０１の実行サイクル数（全体性能測定結果）をシミュレーションにより演算し、記憶部１２０２に記録する。例えば、ターゲットプログラム１１０１はオーディオエンコーダのプログラムであり、入力データ１２０１はオーディオデータである。図１３（Ａ）の実行サイクル数は、図９の全体性能測定結果９０２に対応する。性能解析部１２０３は、図４のパーソナルコンピュータ４０１の処理により実現され、記憶部１２０２内の全体性能測定結果を基に、例えば図１３（Ｂ）に示すように、実行サイクル数が最小のフレーム番号（例えばフレーム番号１）、実行サイクル数が最大のフレーム番号（例えばフレーム番号９）、及び実行サイクル数が平均値のフレーム番号（例えばフレーム番号１１）を性能解析結果として記憶部１２０４に記録する。
【００２３】
入力選択部１２０５は、図４のパーソナルコンピュータ４０１の処理により実現され、記憶部１２０４内の性能解析結果を基に、入力データ１２０１内の一部のフレームに対応する入力データを選択し、論理エミュレータ４０３に出力する。例えば、入力選択部１２０５は、図１３（Ａ）の最小フレーム番号１、最大フレーム番号９及び平均フレーム番号１１を含むフレーム番号１〜１２に対応する入力データ１２０１を選択する。
【００２４】
測定コントロール関数１２０６は、ターゲットプログラム１１０１より呼び出され、論理エミュレータ４０３により実行されるソフトウェアである。制御部１１０５は、測定コントロール関数１２０６が測定用付加回路のレジスタ部１１０４に書き込んだ値を見て、測定の開始及び測定の終了を行い、ターゲットプログラム１１０１のプログラムカウンタ（ＰＣ）値、実行サイクル数及びデリミタ値の出力をＲＡＭ１１０６に書き込む。後に、実行サイクル数とデリミタ値の出力結果よりフレーム単位での実行サイクル数を算出することになる。
【００２５】
論理エミュレータ４０３は、ターゲットプログラム１１０１の処理をエミュレーションする。具体的には、論理エミュレータ４０３では、対象ＳｏＣのゲートレベル設計データ６０４に基づくハードウェアがターゲットプログラム１１０１を実行する。
【００２６】
論理エミュレータ４０３は、図１４に示すように、レジスタ部１１０４で設定した測定間隔値に基づいて、ＣＰＵ２０１の実行サイクル数及びプログラムカウンタ（ＰＣ）値をエミュレーションにより演算し、ＲＡＭ１１０６に書き込む。ホストワークステーション４０４が任意のタイミングでＲＡＭ１１０６に記録されたデータを記憶部１２０７に記録する。記憶部１２０７は、例えば図５の外部記憶装置５０８である。プログラムカウンタ値は、現在、ＣＰＵ２０１により実行されているターゲットプログラム１１０１内のアドレスである。図１４のサイクル番号は、実行サイクル数が例えば１００間隔で付与される番号である。実行サイクル数及びプログラムカウンタ値は、レジスタ部１１０４で設定した測定間隔に基づいて出力される。図１４の場合、例えば１００サイクル毎に出力される。ここで、ターゲットプログラム１１０１は、実行中に測定コントロール関数１２０６により任意のタイミングで測定用付加回路のレジスタ部１１０４にデリミタ値を書き込むことができる。制御部１１０５は、書き込まれたデリミタ値をＲＡＭ１１０６に記録する。この値は、図１４に示すように、実行サイクル数及びプログラムカウンタ値としてそれぞれ例えば「ａａａａａａａａ」、「ｂｂｂｂｂｂｂｂ」が書き込まれる。ターゲットプログラム１１０１にて、測定したい区間の前後でデリミタ値を書き込むことにより、測定区間の実行サイクル数やフレーム単位での実行サイクル数を算出することができる。図１４の場合、測定したい区間の直前に「ａａａａａａａａ」のデリミタ値を出力し、測定したい区間の直後に「ｂｂｂｂｂｂｂｂ」を出力することで、後の処理において、測定終了を示すデリミタ値「ｂｂｂｂｂｂｂｂ」の前の実行サイクル数（例えば「０００７３ａ９５」）から測定開始を示すデリミタ値「ａａａａａａａａ」の後の実行サイクル数（例えば「０００７３９ｃｄ」）を減算することにより、測定したい区間（例えば１フレーム）の実行サイクル数を算出することができる。
【００２７】
測定用付加回路のＲＴＬ設計データ１１０３を設けることにより、論理エミュレータ４０３でのＳｏＣの動作を止めることなく、実行サイクル数及びプログラムカウンタ値を高速に測定することが可能になる。
【００２８】
性能推定部１２０８は、図８の性能推定部８００に対応し、上記のように、記憶部１２０７内のフレーム毎の実行サイクル数を基に、測定終了を示すデリミタ値「ｂｂｂｂｂｂｂｂ」の前の実行サイクル数（例えば「０００７３ａ９５」）から測定開始を示すデリミタ値「ａａａａａａａａ」の後の実行サイクル数（例えば「０００７３９ｃｄ」）を減算することにより、１フレームの実行サイクル数を算出し、例えばフレーム番号１〜１２の論理エミュレータ４０３での一部性能測定結果を記憶部１２０７に書き戻す。測定用付加回路は、上記の測定開始情報のデリミタ値（デリミタ情報）と測定終了情報のデリミタ値と測定間隔値（測定間隔情報）をプログラマブルに設定することが可能である。
【００２９】
図１５は、性能推定装置の処理を説明するための図である。上記のように、記憶部１２０２には、全フレーム番号１〜２０についての命令セットシミュレータ（ＩＳＳ）４０２の実行サイクル数Ｎ１が記録されている。記憶部１２０７には、一部のフレーム番号１〜１２についての論理エミュレータ４０３の実行サイクル数Ｎ２が記録されている。
【００３０】
性能推定部１２０８は、命令セットシミュレータ４０２により演算されたフレーム番号１〜１２のフレーム毎の実行サイクル数Ｎ１の平均値（例えば「９４１８２９」）を演算する。次に、性能推定部１２０８は、論理エミュレータ４０３により演算されたフレーム番号１〜１２のフレーム毎の実行サイクル数Ｎ２の平均値（例えば「１２１１３７６」）を演算する。命令セットシミュレータ４０２は、ＣＰＵ２０１のみをシミュレーションするために実行サイクル数が少なくなる。論理エミュレータ４０３は、ＣＰＵ２０１及び周辺回路２０３をエミュレーションするために実行サイクル数が多くなる。
【００３１】
次に、性能推定部１２０８は、命令セットシミュレータ４０２により演算されたフレーム毎の実行サイクル数Ｎ１の平均値（例えば「９４１８２９」）に対する論理エミュレータ４０３により演算されたフレーム毎の実行サイクル数Ｎ２の平均値（例えば「１２１１３７６」）の割合係数を演算する。例えば、割合係数は、１２１１３７６÷９４１８２９≒１．２８６である。
【００３２】
次に、性能推定部１２０８は、命令セットシミュレータ４０２により演算された他の部分のフレーム番号１３〜２０のフレーム毎の実行サイクル数Ｎ１及び割合係数を乗算することにより、論理エミュレータ４０３におけるプログラムの他の部分（未測定区間）のフレーム番号１３〜２０についてのフレーム毎の実行サイクル数推定値Ｎ３を推定する。例えば、フレーム番号１３の実行サイクル数推定値Ｎ３は、１１３７５７５×１．２８６≒１４６３１４４になる。
【００３３】
ここで、参考のため、フレーム番号１〜１２について、命令セットシミュレータ４０２の実行サイクル数Ｎ１及び割合係数を乗算した結果を実行サイクル数推定値Ｎ３の欄にかっこ書きで示す。そして、その実行サイクル数推定値Ｎ３と論理エミュレータ４０３の実行サイクル数Ｎ２との誤差を図１５に示す。その誤差は、約２％であり、良好な推定が可能であることが分かる。
【００３４】
前記性能推定部１２０８はさらに命令セットシミュレータ４０２により演算されたフレーム番号１〜１２のフレーム毎の実行サイクル数Ｎ１と論理エミュレータ４０３により演算されたフレーム番号１〜１２のフレーム毎の実行サイクル数Ｎ２を入力とし最小二乗法を用いた多項式近似式により次式（１）の推定関数を演算する。
【００３５】
【数１】
0005454349.tif 000002
【００３６】
例えば、図１５の実行サイクル値から演算した推定関数を２次式とした場合、推定係数は、ａ0＝2.75999082147362×105、ａ1＝7.96978741632175×10-1、ａ2＝1.95340650785908×10-7となる。この推定係数を用いた推定関数より、論理エミュレータ４０３の実行サイクル推定値Ｎ４は、次式（２）で表わされる。ここで、Ｎ１は、命令セットシミュレータ４０２の実行サイクル数である。
【００３７】
Ｎ４＝1.95340650785908×10-7×Ｎ１×Ｎ１＋7.96978741632175×10-1×Ｎ１＋2.75999082147362×105      ・・・（２）
【００３８】
この多項式近似を利用した実行サイクル推定値Ｎ４を図１５に示す。論理エミュレータ４０３の実行サイクル数Ｎ２と実行サイクル推定値Ｎ４との誤差は、約０．５７％であり、上記の平均値を利用した実行サイクル推定値Ｎ３よりさらに良好な推定が可能である。
【００３９】
次に、性能推定部１２０８は、フレーム番号１〜１２についての論理エミュレータ４０３のフレーム毎の実行サイクル数Ｎ２及びフレーム番号１３〜２０についてのフレーム毎の実行サイクル数推定値を全体性能推定結果として記憶部１２０９に記録する。この全体性能推定結果は、評価ボードと同等の精度の結果である。
【００４０】
上記のように、論理エミュレータ４０３の測定対象のフレーム番号１〜１２内に、図１３（Ｂ）の特徴的なフレームである最小フレーム番号１、最大フレーム番号９及び平均フレーム番号１１を含ませることにより、実行サイクル数推定値の精度を向上させることができる。なお、上記では、先頭のフレーム番号１〜１２を選択する場合を例に説明したが、先頭フレーム部分に限定されない。
【００４１】
（第２の実施形態）
図１６は、第２の実施形態による性能推定装置の性能推定方法を示すフローチャートである。図１６は、図１２に対して、記憶部１６０１が追加されたものである。以下、本実施形態が第１の実施形態と異なる点を説明する。命令セットシミュレータ４０２は、第１の実施形態の実行サイクル数の他に、図１７に示すように、ターゲットプログラム１１０１のフレーム毎の各関数の関数割合（関数プロファイル）をシミュレーションにより演算し、記憶部１６０１に記録する。ターゲットプログラム１１０１は、例えばＣ言語のプログラムをコンパイルしたマシン語のプログラムである。関数Ａ〜Ｅは、Ｃ言語のプログラム内の全関数である。関数割合は、各関数の実行サイクル数の割合である。
【００４２】
論理エミュレータ４０３は、測定コントロール関数１２０６を基にレジスタ部１１０４に対して測定対象の関数を書き込むことにより指定する。そして、論理エミュレータ４０３は、ターゲットプログラム１１０１の測定区間の一部のフレーム番号１〜１０（図１８）のフレームについてのフレーム毎の各関数の実行サイクル数及びプログラムカウンタ値をエミュレーションにより演算し、ＲＡＭ１１０６に書き込むと共に、記憶部１２０７に記録する。
【００４３】
性能推定部１２０８は、上記のように、記憶部１２０７内のフレーム毎の各関数の実行サイクル数を基に、測定終了を示すデリミタ値「ｂｂｂｂｂｂｂｂ」の前の実行サイクル数から測定開始を示すデリミタ値「ａａａａａａａａ」の後の実行サイクル数を減算することにより、１フレームの各関数の実行サイクル数を算出し、フレーム番号１〜１０（図１８）の論理エミュレータ４０３での一部性能測定結果を記憶部１２０７に書き戻す。
【００４４】
図１８は、性能推定装置の処理を説明するための図である。性能推定部１２０８は、記憶部１２０２内の命令セットシミュレータ４０２により演算されたフレーム毎の実行サイクル数及び記憶部１６０１内のフレーム毎の各関数の関数割合を基に命令セットシミュレータ４０２のフレーム毎の各関数の実行サイクル数を演算する。例えば、フレーム番号１１では、命令セットシミュレータ４０２の実行サイクル数は１５０００００であり、関数Ａ〜Ｃの関数割合はそれぞれ０．４、０．２、０．４である。関数Ａの実行サイクル数は、１５０００００×０．４＝６０００００である。
【００４５】
次に、性能推定部１２０８は、命令セットシミュレータ４０２のフレーム番号１〜１０のフレーム毎の各関数の実行サイクル数のフレーム平均値（例えば「１００００００」）を演算し、フレーム毎の各関数の関数割合のフレーム平均値を演算する。例えば、関数Ａの関数割合のフレーム平均値は０．３である。
【００４６】
次に、性能推定部１２０８は、命令セットシミュレータ４０２のフレーム毎の各関数の実行サイクル数のフレーム平均値及びフレーム毎の各関数の関数割合のフレーム平均値を基に命令セットシミュレータ４０２の各関数の実行サイクル数のフレーム平均値を演算する。例えば、関数Ａの実行サイクル数のフレーム平均値は、１００００００×０．３＝３０００００である。
【００４７】
次に、性能推定部１２０８は、記憶部１２０７内の論理エミュレータ４０３により演算された各関数の実行サイクル数を基に、フレーム番号１〜１０についての論理エミュレータ４０３の各関数の実行サイクル数のフレーム平均値を演算する。例えば、関数Ａの実行サイクル数のフレーム平均値は４０００００である。
【００４８】
次に、性能推定部１２０８は、命令セットシミュレータ４０２の各関数の実行サイクル数のフレーム平均値に対する論理エミュレータ４０３の各関数の実行サイクル数のフレーム平均値の関数毎の割合係数を演算する。例えば、関数Ａの割合係数は、４０００００÷３０００００≒１．３である。
【００４９】
次に、性能推定部１２０８は、フレーム番号１１以降のフレームについての命令セットシミュレータ４０２のフレーム毎の各関数の実行サイクル数及び関数毎の割合係数を基に、論理エミュレータ４０３におけるターゲットプログラム１１０１の他の部分のフレーム番号１１以降のフレームについてのフレーム毎の実行サイクル数推定値を推定する。例えば、フレーム番号１１のフレームにおいて、実行サイクル数推定値は、６０００００×１．３＋３０００００×２＋６０００００×１＝１７８５０００である。ここで、「６０００００」は命令セットシミュレータ４０２のフレーム番号１１の関数Ａの実行サイクル数であり、「１．３」は関数Ａの割合係数であり、「３０００００」は命令セットシミュレータ４０２のフレーム番号１１の関数Ｂの実行サイクル数であり、「２」は関数Ｂの割合係数であり、「６０００００」は命令セットシミュレータ４０２のフレーム番号１１の関数Ｃの実行サイクル数であり、「１」は関数Ｃの割合係数である。
【００５０】
本実施形態によれば、関数毎の割合係数を用いて実行サイクル数推定値を推定するので、高精度の推定が可能になる。
【００５１】
（第３の実施形態）
図１９は、第３の実施形態による性能推定装置の性能推定方法を示すフローチャートである。図１９は、図１６に対して、プロファイル解析部１９０１及び記憶部１９０２が追加されたものである。以下、本実施形態が第２の実施形態と異なる点を説明する。命令セットシミュレータ４０２は第２の実施形態と同じ処理を行い、論理エミュレータ４０３は第１の実施形態と同じ処理を行う。すなわち、命令セットシミュレータ４０２は、第１の実施形態の実行サイクル数の他に、ターゲットプログラム１１０１のフレーム毎の各関数の関数割合をシミュレーションにより演算し、記憶部１６０１に記録する。論理エミュレータ４０３は、ターゲットプログラム１１０１のコンパイル時に生成されるデバック情報及びＭＡＰファイルを記憶部１２０７に記録する。デバック情報及びＭＡＰファイルは、コンパイル前のＣ言語のプログラムの行番号及び関数名とコンパイル後のマシン語のプログラムのアドレスとの対応関係を示すファイルである。
【００５２】
プロファイル解析部１９０１は、図４のパーソナルコンピュータ４０１の処理により実現され、記憶部１２０７内の論理エミュレータ４０３のエミュレーションの結果を基に、図２０に示すように、ターゲットプログラム１１０１のフレーム毎の各関数の実行サイクル数及び関数割合を演算する。例えば、関数Ａの実行サイクル数は「４３５４」であり、関数Ａの関数割合は「２８．１８％」である。
【００５３】
図２１は、性能推定装置の処理を説明するための図である。図２１の命令セットシミュレータ（ＩＳＳ）４０２の欄についての処理は、第２の実施形態（図１８）と同じである。
【００５４】
次に、図２１の論理エミュレータ４０３の欄の処理を説明する。性能推定部１２０８は、論理エミュレータ４０３により演算された例えばフレーム番号１〜１０についてのフレーム毎の実行サイクル数のフレーム平均値を演算する。例えば、フレーム番号１〜１０についての実行サイクル数のフレーム平均値は、「１３０００００」である。
【００５５】
次に、性能推定部１２０８は、図２０の論理エミュレータ４０３のフレーム毎の各関数の関数割合を基に、例えばフレーム番号１〜１０のフレーム毎の各関数の関数割合のフレーム平均値を演算する。例えば、フレーム番号１〜１０についての論理エミュレータ４０３の関数Ａ〜Ｃの関数割合のフレーム平均値は、それぞれ「０．３０８、０．３０８、０．３８５」である。
【００５６】
次に、性能推定部１２０８は、例えばフレーム番号１〜１０について、論理エミュレータ４０３により演算されたフレーム毎の実行サイクル数のフレーム平均値及び論理エミュレータ４０３のフレーム毎の各関数の関数割合のフレーム平均値を基に、論理エミュレータ４０３の各関数の実行サイクル数のフレーム平均値を演算する。例えば、関数Ａの実行サイクル数のフレーム平均値は、１３０００００×０．３０８＝４００４００である。
【００５７】
次に、性能推定部１２０８は、例えばフレーム番号１〜１０について、命令セットシミュレータ４０２の各関数の実行サイクル数のフレーム平均値に対する論理エミュレータ４０３の各関数の実行サイクル数のフレーム平均値の関数毎の割合係数を演算する。例えば、関数Ａの割合係数は、４００４００÷３０００００≒１．３である。
【００５８】
次に、性能推定部１２０８は、例えばフレーム番号１１以降について、命令セットシミュレータ４０２のフレーム毎の各関数の実行サイクル数及び関数毎の割合係数を基に、論理エミュレータ４０３におけるターゲットプログラムの他の部分の例えばフレーム番号１１以降のフレームについてのフレーム毎の実行サイクル数推定値を推定する。例えば、フレーム番号１１の実行サイクル数推定値は、６０００００×１．３＋３０００００×２＋６０００００×１＝１７８５０００である。ここで、「６０００００」はフレーム番号１１の命令セットシミュレータ４０２の関数Ａの実行サイクル数、「１．３」は関数Ａの割合係数、「３０００００」はフレーム番号１１の命令セットシミュレータ４０２の関数Ｂの実行サイクル数、「２」は関数Ｂの割合係数、「６０００００」はフレーム番号１１の命令セットシミュレータ４０２の関数Ｃの実行サイクル数、「１」は関数Ｃの割合係数である。
【００５９】
本実施形態によれば、関数毎の割合係数を用いて実行サイクル数推定値を推定するので、高精度の推定が可能になる。なお、プロファイル解析部１９０１は、性能推定部１２０８内に設けても良い。
【００６０】
以上のように、第１〜第３の実施形態の性能推定装置は、ＣＰＵ２０１及び周辺回路２０３を含みＣＰＵ２０１がプログラムを実行するＳｏＣの開発におけるプログラムの性能推定装置である。命令セットシミュレータ４０２は、ＣＰＵ２０１のみのシミュレーションを行う。具体的には、命令セットシミュレータ４０２は、ターゲットプログラム１１０１の特定区間であるフレーム毎のＣＰＵ２０１の実行サイクル数をシミュレーションにより演算する。論理エミュレータ４０３は、ＣＰＵ２０１及び周辺回路２０３のエミュレーションを行う。具体的には、論理エミュレータ４０３は、ターゲットプログラム１１０１の一部のフレームについてのフレーム毎のＣＰＵ２０１の実行サイクル数をエミュレーションにより演算する。
【００６１】
性能推定部１２０８は、命令セットシミュレータ４０２により演算されたフレーム毎の実行サイクル数及び論理エミュレータ４０３により演算されたフレーム毎の実行サイクル数を基に、命令セットシミュレータ４０２により演算された実行サイクル数に対する論理エミュレータ４０３により演算された実行サイクル数の割合係数を演算する。そして、性能推定部１２０８は、命令セットシミュレータ４０２により演算されたフレーム毎の実行サイクル数及び割合係数を基に、論理エミュレータ４０３におけるターゲットプログラム１１０１の他の部分のフレームについてのフレーム毎の実行サイクル数を推定する。
【００６２】
第１〜第３の実施形態によれば、システム（ハードウェア及びソフトウェアを含む）設計者及びハードウェア設計者に対して、性能推定装置の全体性能推定結果をフィードバックすることにより、実機又は評価ボード作成前にソフトウェア（プログラム）を踏まえたＳｏＣアーキテクチャの全体最適化を実現することができる。
【００６３】
なお、上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【００６４】
２００  ＳｏＣ
２０１  ＣＰＵ
２０２  メモリ
２０３  周辺回路
４０２  命令セットシミュレータ
４０３  論理エミュレータ
８００，１２０８  性能推定部
【図１】
0005454349.tif 000003
【図２】
0005454349.tif 000004
【図３】
0005454349.tif 000005
【図４】
0005454349.tif 000006
【図５】
0005454349.tif 000007
【図６】
0005454349.tif 000008
【図７】
0005454349.tif 000009
【図８】
0005454349.tif 000010
【図９】
0005454349.tif 000011
【図１０】
0005454349.tif 000012
【図１１】
0005454349.tif 000013
【図１２】
0005454349.tif 000014
【図１３】
0005454349.tif 000015
【図１４】
0005454349.tif 000016
【図１５】
0005454349.tif 000017
【図１６】
0005454349.tif 000018
【図１７】
0005454349.tif 000019
【図１８】
0005454349.tif 000020
【図１９】
0005454349.tif 000021
【図２０】
0005454349.tif 000022
【図２１】
0005454349.tif 000023