(57)【要約】【課題】ソフトウェアとハードウェアの協調解析において、どの時点でどの関数が実行されているかを示す情報Ａ中で単位として使用される時間スケールと、エミュレーションにおいてハードウェアの端子の信号等がどの時点でどのような値になっているかの情報Ｂ中で単位として使用される時間スケールとが、異なっている場合でも、情報Ａと情報Ｂを同じ時間軸上で表せるようにする。【解決手段】ソフトウェア波形情報において第１の時間スケールの値が表されており、ハードウェア波形情報に第２の時間スケールの値が表されており、ソフトハード協調解析装置が、これら第１、第２の時間スケールの値を用いることで、共通の時間スケールを用いて、各関数の実行、非実行の区別およびエミュレーションにより発生したハードウェアを通る入出力信号の値を表す統合波形情報を生成する。【選択図】図９
2017027288.tif 000002
【特許請求の範囲】
【請求項１】
所定のハードウェアによるソフトウェアのオブジェクトコード（１２２ａ）の実行を模擬するエミュレーションにおいて、第１の時間スケールを単位として表された一連の第１種タイムカウントのどの範囲で、前記ソフトウェアのソースコードに記述された所定の関数が実行されたかを示す関数トレース情報（１２６）を、記憶媒体から読み出し、読み出した前記関数トレース情報に基づいて、前記一連の第１種タイムカウントの各々における前記関数の実行、非実行の区別が表されると共に前記第１の時間スケールの値が表されたソフトウェア波形情報（１２７）を生成して記憶媒体に記録するソフトウェア波形情報生成手段（１６４）と、
前記第１の時間スケールと異なる第２の時間スケールを単位として表された一連の第２種タイムカウントの各々において前記エミュレーションにより前記ハードウェアの端子を通った入出力信号の値が表されると共に前記第２の時間スケールの値が表されたハードウェア波形情報（１２５）を記憶媒体から読み出すと共に、前記ソフトウェア波形情報を記憶媒体から読み出す波形情報読み出し手段（２１０、２２０）と、
読み出された前記ソフトウェア波形情報中の前記第１の時間スケールの値と読み出された前記ハードウェア波形情報中の前記第２の時間スケールの値とに基づいて、共通の時間スケールを単位として表された一連の共通タイムカウントの各々における前記関数の実行、非実行の区別が表されると共に、前記一連の共通タイムカウントの各々において前記エミュレーションにより前記ハードウェアの端子を通った入出力信号の値が表される統合波形情報（１２８）を生成して記憶媒体に記録する統合手段（２４０、２５０、２６０、２７０、２８０）と、を有することを特徴とするソフトハード協調解析装置。
【請求項２】
前記ソフトウェア波形情報生成手段は、前記エミュレーションを実行する主体が前記エミュレーションの結果として出力したデータ（１２４）から、前記第１の時間スケールの値を取得することを特徴とする請求項１に記載のソフトハード協調解析装置。
【請求項３】
前記統合手段は、前記ソフトウェア波形情報中の関数の名称と前記ハードウェア波形情報中の端子の名称の間に重複がある場合は、重複している端子名と関数名のどちらか一方を変更することで、その重複を解消した後、前記統合波形情報を生成することを特徴とする請求項１または２に記載のソフトハード協調解析装置。
【請求項４】
前記共通の時間スケールは、前記第１の時間スケールおよび前記第２の時間スケールのうち、短い方と同じであることを特徴とする請求項１ないし３のいずれか１つに記載のソフトハード協調解析装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトハード協調解析装置およびソフトハード協調解析装置用のプログラムに関するものである。
【背景技術】
【０００２】
従来、設計したハードウェア（例えばマイクロコンピュータ）の検証を行う際、ハードウェアの解析と当該ハードウェアで実行されるソフトウェアの解析の両方が独立に行われていた。
【０００３】
これに対し、特許文献１では、ソフトウェアとハードウェアの協調解析を目的として、オブジェクトコードのアドレス範囲とそのアドレス領域に格納されている関数とを対応付けるアドレスマップを、コンパイラによって自動的に生成し、取得したアドレスマップの内容とハードウェアから通知された実行アドレスの値とを比較し、どの時点でどの関数が実行されているかを示す情報Ａを特定する技術が開示されている。
【０００４】
また、ハードウェアの検証においては、当該ハードウェアによる上記オブジェクトコードの実行を模擬するエミュレーションにおいて、当該ハードウェアの端子の信号値等がどの時点でどのような値になっているかの情報Ｂが出力されることが知られている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１４−１７０４８２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本願発明者は、上記情報Ａと情報Ｂを同じ時間軸上で表すことを着想した。しかし、上記のような従来技術では、どの時点でどの関数が実行されているかを示す情報中で単位として使用される時間スケールと、上記エミュレーションにおいてハードウェアの端子の信号値等がどの時点でどのような値になっているかの情報中で単位として使用される時間スケールとが、異なっている場合がある。そのような場合は、上記情報Ａと情報Ｂを同じ時間軸上で表すことに困難性が伴う。
【０００７】
本発明は上記点に鑑み、ソフトウェアとハードウェアの協調解析において、どの時点でどの関数が実行されているかを示す情報Ａ中で単位として使用される時間スケールと、エミュレーションにおいてハードウェア内の端子の信号等がどの時点でどのような値になっているかの情報Ｂ中で単位として使用される時間スケールとが、異なっている場合でも、情報Ａと情報Ｂを同じ時間軸上で表せるようにすることを目的とする。
【課題を解決するための手段】
【０００８】
上記目的を達成するための請求項１に記載の発明は、所定のハードウェアによるソフトウェアのオブジェクトコード（１２２ａ）の実行を模擬するエミュレーションにおいて、第１の時間スケールを単位として表された一連の第１種タイムカウントのどの範囲で、前記ソフトウェアのソースコードに記述された所定の関数が実行されたかを示す関数トレース情報（１２６）を、記憶媒体から読み出し、読み出した前記関数トレース情報に基づいて、前記一連の第１種タイムカウントの各々における前記関数の実行、非実行の区別が表されると共に前記第１の時間スケールの値が表されたソフトウェア波形情報（１２７）を生成して記憶媒体に記録するソフトウェア波形情報生成手段（１６４）と、前記第１の時間スケールと異なる第２の時間スケールを単位として表された一連の第２種タイムカウントの各々において前記エミュレーションにより前記ハードウェアの端子を通った入出力信号の値が表されると共に前記第２の時間スケールの値が表されたハードウェア波形情報（１２５）を記憶媒体から読み出すと共に、前記ソフトウェア波形情報を記憶媒体から読み出す波形情報読み出し手段（２１０、２２０）と、読み出された前記ソフトウェア波形情報中の前記第１の時間スケールの値と読み出された前記ハードウェア波形情報中の前記第２の時間スケールの値とに基づいて、共通の時間スケールを単位として表された一連の共通タイムカウントの各々における前記関数の実行、非実行の区別が表されると共に、前記一連の共通タイムカウントの各々において前記エミュレーションにより前記ハードウェアの端子を通った入出力信号の値が表される統合波形情報（１２８）を生成して記憶媒体に記録する統合手段（２４０、２５０、２６０、２７０、２８０）と、を有することを特徴とするソフトハード協調解析装置である。
【０００９】
このように、ソフトウェア波形情報において第１の時間スケールの値が表されており、ハードウェア波形情報に第２の時間スケールの値が表されており、統合手段は、これら第１、第２の時間スケールの値を用いることで、共通の時間スケールを用いて、関数の実行、非実行の区別およびエミュレーションにより発生したハードウェアを通る入出力信号の値を表す統合波形情報を生成することができる。
【００１０】
なお、上記および特許請求の範囲における括弧内の符号は、特許請求の範囲に記載された用語と後述の実施形態に記載される当該用語を例示する具体物等との対応関係を示すものである。
【図面の簡単な説明】
【００１１】
【図１】本発明の実施形態に係るソフトハード協調解析装置１の構成図である。
【図２】演算回路１６の処理内容およびフラッシュメモリ１２内のデータ構成を示す図である。
【図３】ソフトハード協調解析装置における処理手順を示す図である。
【図４】マップ情報１２３のデータ構成を示す図である。
【図５】ＣＰＵ実行ログ１２４のデータ構成を示す図である。
【図６】ハードウェア波形情報１２５のデータ構成を示す図である。
【図７】関数トレース情報１２６のデータ構成を示す図である。
【図８】ソフトウェア波形情報１２７のデータ構成を示す図である。
【図９】波形マージ処理の詳細を示すフローチャートである。
【図１０】統合波形情報に基づく画面表示の一例を示す図である。
【発明を実施するための形態】
【００１２】
以下、本発明の一実施形態について説明する。本実施形態に係るソフトハード協調解析装置１（以下、単に解析装置１という）は、図１に示すように、ＲＯＭ１１、フラッシュメモリ１２、ＲＡＭ１３、操作部１４、ディスプレイ１５、演算回路１６を備えている。
【００１３】
ＲＯＭ１１は、演算回路１６が実行するプログラム等が記録された書き込み不可能な不揮発性記憶媒体である。フラッシュメモリ１２は、演算回路１６が実行するプログラムおよび種々のデータが記録される書き込み可能な不揮発性記憶媒体である。ＲＡＭ１３は、演算回路１６が作業領域として用いる書き込み可能な揮発性記憶媒体である。操作部１４は、解析装置１のユーザの入力操作を受け付ける装置（例えば、キーボード、タッチパネルメカニカルスイッチ）である。ディスプレイ１５は、ユーザに画像を表示する装置である。演算回路１６は、ＲＯＭ１１またはフラッシュメモリ１２に記録されたプログラムを実行することで、種々の処理を実現する。
【００１４】
具体的には、演算回路１６は、ＲＯＭ１１またはフラッシュメモリ１２に記録されたプログラムを実行することで、図２に示すように、コンパイラ１６１、ハードウェアエミュレータ１６２、関数トレース情報生成処理１６３、波形情報生成処理１６４、波形マージ処理１６５、表示処理１６６を実行する。
【００１５】
また、図２に示すように、フラッシュメモリ１２には、ソースコード１２１、マイコンモデル１２２、マップ情報１２３、ＣＰＵ実行ログ１２４、ハードウェア波形情報１２５、関数トレース情報１２６、ソフトウェア波形情報１２７、統合波形情報１２８が記録されるようになっている。
【００１６】
ソースコード１２１は、解析対象のマイクロコンピュータ（ハードウェアの一例に相当する）において実行されるソフトウェアのソースコードである。
【００１７】
マイコンモデル１２２は、ハードウェア記述言語（例えばＳｙｓｔｅｍＣ）によって記述された特定のマイクロコンピュータのモデルを含むデータである。このマイコンモデル１２２には、マイクロコンピュータのモデルのみならず、このマクロコンピュータに接続されるセンサ、アクチュエータに対する入出力情報のデータも含まれている。
【００１８】
このマイコンモデル１２２によって記述されるマイクロコンピュータは、特定のＣＰＵ、ＲＡＭ、ＲＯＭ、割り込みコントローラ（図２中ではＩＮＴＣと記載）、タイマ、入出力ポート（図２中では単にポートと記載）、ＵＡＲＴ等を備える。
【００１９】
また、当該マイクロコンピュータのＲＯＭ中に、当該マイクロコンピュータのＣＰＵが実行するための上記ソフトウェアのオブジェクトコード１２２ａが記憶されているように、マイコンモデル１２２は記述されている。
【００２０】
マップ情報１２３、ＣＰＵ実行ログ１２４、ハードウェア波形情報１２５、関数トレース情報１２６、ソフトウェア波形情報１２７、統合波形情報１２８については後述する。
【００２１】
なお、図２中の矢印は、処理１６１〜１６６においてどのデータが入力されてどのデータを生成するかを表すものである。例えば、コンパイラ１６１においてはソースコード１２１が入力されたオブジェクトコード１２２ａおよびマップ情報１２３が生成される。
【００２２】
以上のような構成の解析装置１の作動について、図３を用いて以下説明する。
【００２３】
まず、解析装置１のユーザは、操作部１４に対して所定のコンパイル開始操作を行う。すると演算回路１６は、コンパイラ１６１の実行を開始し、コンパイラ１６１において、あらかじめフラッシュメモリ１２に記録されているソースコード１２１をコンパイルしてオブジェクトコード１２２ａ（図３においては．ｏｂｊと記している）を生成する。
【００２４】
更に演算回路１６はコンパイラ１６１において、フラッシュメモリ１２にあらかじめ記録されているマイコンモデル１２２中のＲＯＭに、生成したオブジェクトコード１２２ａが記録されているように、当該マイコンモデル１２２を書き換える。
【００２５】
更に演算回路１６はコンパイラ１６１において、ソースコード１２１に記述された複数個の関数の各々について、オブジェクトコード１２２ａ中で当該関数に該当する部分のアドレス範囲を特定する。そして、当該複数個の関数と当該特定した複数個のアドレス範囲とを対応付けたマップ情報１２３（図３においては．ｍａｐと記している）をフラッシュメモリ１２に記録する。図４に、マップ情報１２３のデータ構造例を示す。この例では、ｍａｉｎ関数、ｉｎｔ１関数、ｐｏｒｔＣ関数のそれぞれは、オブジェクトコード１２２ａ中のアドレス範囲Ｒ１〜Ｒ２、Ｒ３〜Ｒ４、Ｒ５〜Ｒ６の部分に該当する。
【００２６】
次に、解析装置１のユーザは、操作部１４に対して所定のエミュレーション開始操作を行う。すると演算回路１６は、ハードウェアエミュレータ１６２の実行を開始する。そして演算回路１６は、ハードウェアエミュレータ１６２において、上述の通りオブジェクトコード１２２ａが追加されたマイコンモデル１２２が表すマイクロコンピュータによるオブジェクトコード１２２ａの実行を模擬するエミュレーションを行う。
【００２７】
このようなハードウェアエミュレータ１６２は、例えば、マイコンモデル１２２がハードウェア記述言語であるＳｙｓｔｅｍＣによって作成されている場合は、上述の通りオブジェクトコード１２２ａが追加されたマイコンモデル１２２をＣ＋＋コンパイラでコンパイルされて生成されたオブジェクトコードが、該当する。また、ハードウェアエミュレータ１６２は、周知のＲＴＬシミュレーションが記述されたオブジェクトコードが該当する。
【００２８】
また、ハードウェアエミュレータ１６２において演算回路１６は、入出力ポートおよびＵＡＲＴからアクチュエータへの信号出力、入出力ポートおよびＵＡＲＴへのセンサからの信号入力も模擬する。
【００２９】
また、ハードウェアエミュレータ１６２において演算回路１６は、上記エミュレーションの結果としてＣＰＵ実行ログ１２４（図３ではＬｏｇと記している）を生成してフラッシュメモリ１２に記録する。
【００３０】
ＣＰＵ実行ログ１２４は、図５に示すように、エミュレーションにおいてマイコンモデル１２２中のＣＰＵが実行するオブジェクトコード１２２ａ中のアドレスと、そのアドレスが実行されるタイムカウントとの対応関係を時間順に複数個表すデータである。
【００３１】
このタイムカウントは、１ナノ秒という時間スケール（第１の時間スケールの一例に相当する）を単位として経時的に増加する一連の第１種タイムカウント（例えば、１ｎｓ、３ｎｓ、５ｎｓ、７ｎｓ、…という一連のタイムカウント）のうちの値である。
【００３２】
ＣＰＵ実行ログ１２４中の各タイムカウントは、単位（１ｎｓ）付きで表されているので、ＣＰＵ実行ログ１２４は時間スケールの情報も含んでいる。
【００３３】
なお、ある時点においてマイコンモデル１２２中のＣＰＵが実行するオブジェクトコード１２２ａ中のアドレスは、その時点におけるＣＰＵ内のプログラムカウンタの値から得られる。
【００３４】
また、ハードウェアエミュレータ１６２において演算回路１６は、上記エミュレーションの結果としてハードウェア波形情報１２５を生成してフラッシュメモリ１２に記録する。
【００３５】
ハードウェア波形情報１２５は、図６に示すように、周知のＶＣＤ（Ｖａｌｕｅ  ｃｈａｎｇｅ  ｄｕｍｐ）フォーマットで記載されており、時間スケール表示部１２５ａ、記号定義部１２５ｂ、および複数個の経時変化部１２５ｃを含んでいる。なお図６では、簡単のため、１つの経時変化部１２５ｃのみが表され、他の経時変化部は表示が省略されている。
【００３６】
時間スケール表示部１２５ａは、経時変化部１２５ｃにおいて表示されるタイムカウントの単位に相当する時間スケール（図６の例では１ピコ秒）を表す部分である。
【００３７】
記号定義部１２５ｂは、上述のエミュレーションによって発生したマイクロコンピュータ内の端子（ポート、ＵＡＲＴ、割り込み端子等）の名称と、当該名称に割り当てられた記号との対応関係が複数個表されている。
【００３８】
より具体的には、記号定義部１２５ｂは、上記端子と１対１に対応する複数個のレコードを有している。１つのレコードは図６では１行で表されている。そして、各レコードは、データ長表示部２５１、記号名表示部２５２、端子名表示部２５３を有している。データ長表示部２５１は、所属先のレコードに対応する端子のデータ長をビット数で表す。記号名表示部２５２は、所属先のレコードに対応する端子に割り当てられる記号名を表す。端子名表示部２５３は所属先のレコードに対応する端子の名称を表す。同じハードウェア波形情報１２５中で、端子の名称および記号の名称いずれも重複なしで例えばランダムに割り当てられている。
【００３９】
経時変化部１２５ｃは、タイムカウント部２５４および、上記端子と１対１に対応する複数個のレコードを有している。タイムカウント部２５４は、所属先のレコードに対応する時点のタイムカウントを表している。
【００４０】
このタイムカウントは、１ピコ秒という時間スケール（第２の時間スケールの一例に相当する）を単位として経時的に増加する一連の第２種タイムカウント（例えば、１０００ｐｓ、２０００ｐｓ、３０００ｐｓ、４０００ｐｓ、…という一連のタイムカウント）のうちの１つの値である。
【００４１】
経時変化部１２５ｃ中の各レコードは図６では１行で表されている。そして、各レコードは、データ値表示部２５５、記号名表示部２５６を有している。データ値表示部２５５は、同じ経時変化部１２５ｃに所属するタイムカウント部２５４が示す時点（すなわちタイムカウント）における、所属先のレコードに対応する端子を通る入出力信号の値を表している。記号名表示部２５６は、所属先のレコードに対応する端子に割り当てられた記号を表している。
【００４２】
このように、ハードウェア波形情報１２５では、第２の時間スケールを単位として表された一連の第２種タイムカウント（ピコ秒を単位とする一連のタイムカウント）の各々において上記エミュレーションにより発生したマイクロコンピュータ内の各端子を通る入出力信号の値が表されると共に当該第２の時間スケールの値が表されている。
【００４３】
次に、解析装置１のユーザは、操作部１４に対して所定の関数トレース情報生成開始操作を行う。すると演算回路１６は、関数トレース情報生成処理１６３の実行を開始する。
【００４４】
演算回路１６は、関数トレース情報生成処理１６３において、マップ情報１２３およびＣＰＵ実行ログ１２４をフラッシュメモリ１２からＲＡＭ１３に読み出し、読み出したマップ情報１２３およびＣＰＵ実行ログ１２４に基づいて関数トレース情報１２６を生成し、生成した関数トレース情報１２６をフラッシュメモリ１２に記録する。
【００４５】
具体的には、演算回路１６は、ＣＰＵ実行ログ１２４中の複数のアドレス（一連の第１種タイムカウントの一例に相当する）の個々について、当該アドレスがマップ情報１２３中の複数のアドレス範囲のうちどのアドレス範囲に包含されるか特定する。そして、特定したアドレス範囲に関数トレース情報１２６で対応付けられている関数名と、当該アドレスにマップ情報１２３で対応付けられているタイムカウントを対応付ける。
【００４６】
例えば、図５中のアドレスｄが図４中のアドレス範囲Ｒ３〜Ｒ４に含まれている場合、当該アドレス範囲Ｒ３〜Ｒ４に対応する関数名ｉｎｔ１が、当該アドレスｄに対応するタイムカウントＤ［ｎｓ］に対応付けられる。
【００４７】
そして、上記のようにして得られた一連のタイムカウントと複数個の関数との対応関係のすべてを、図７に例示するような関数トレース情報１２６として生成し、フラッシュメモリ１２に記録する。
【００４８】
このようにして得られた関数トレース情報１２６は、上記エミュレーションにおいて、第１の時間スケールを単位として表された一連の第１種タイムカウントのどの部分でどの関数が実行されたかを示す。
【００４９】
次に、解析装置１のユーザは、操作部１４に対して所定の波形情報生成開始操作を行う。すると演算回路１６は、波形情報生成処理１６４の実行を開始する。
【００５０】
演算回路１６は、関数トレース情報生成処理１６３において、フラッシュメモリ１２から関数トレース情報１２６をＲＡＭ１３に読み出し、読み出した関数トレース情報１２６に基づいてソフトウェア波形情報１２７を生成し、生成したソフトウェア波形情報１２７をフラッシュメモリ１２に記録する。
【００５１】
具体的には、演算回路１６は、関数トレース情報１２６中の情報に基づいて、図８に示すように、上述の一連の第１種タイムカウントの各々における各関数の実行、非実行の区別が表されると共に第１の時間スケールの値が表されたソフトウェア波形情報を生成する。
【００５２】
ソフトウェア波形情報１２７は、図８に示すように、ハードウェア波形情報１２５と同じ形式の周知のＶＣＤ（Ｖａｌｕｅ  ｃｈａｎｇｅ  ｄｕｍｐ）フォーマットで記載されており、時間スケール表示部１２７ａ、記号定義部１２７ｂ、および複数個の経時変化部１２７ｃを含んでいる。なお図８では、簡単のため、１つの経時変化部１２７ｃのみが表され、他の経時変化部は表示が省略されている。
【００５３】
時間スケール表示部１２７ａは、経時変化部１２７ｃにおいて表示されるタイムカウントの単位に相当する時間スケール（図８の例では１ナノ秒）を表す部分である。
【００５４】
記号定義部１２７ｂは、関数トレース情報１２６中の名称と、当該名称に割り当てられた記号との対応関係が複数個表されている。
【００５５】
より具体的には、記号定義部１２７ｂは、上記関数と１対１に対応する複数個のレコードを有している。１つのレコードは図８では１行で表されている。そして、各レコードは、データ長表示部２７１、記号名表示部２７２、関数名表示部２７３を有している。データ長表示部２７１は、所属先のレコードに対応する関数の実行、非実行のデータのデータ長をビット数で表す。記号名表示部２７２は、所属先のレコードに対応する関数に割り当てられる記号名を表す。関数名表示部２７３は所属先のレコードに対応する関数の名称を表す。同じハードウェア波形情報１２５中で、関数の名称および記号の名称いずれも重複なしで例えばランダムに割り当てられている。
【００５６】
経時変化部１２７ｃは、タイムカウント部２７４および、上記関数名と１対１に対応する複数個のレコードを有している。タイムカウント部２７４は、所属先のレコードに対応する時点のタイムカウントを表している。
【００５７】
このタイムカウントは、１ナノ秒という時間スケール（第１の時間スケールの一例に相当する）を単位として経時的に増加する一連の第１種タイムカウントのうちの１つの値である。
【００５８】
経時変化部１２７ｃ中の各レコードは図８では１行で表されている。そして、各レコードは、データ値表示部２７５、記号名表示部２７６を有している。データ値表示部２７５は、同じ経時変化部１２７ｃに所属するタイムカウント部２７４が示す時点（すなわちタイムカウント）における、所属先のレコードに対応する関数の実行の有無を表している。より具体的には、当該データ値表示部２７５の値は、対応する関数を実行していれば１の値、実行していなければ０の値となっている。記号名表示部２７６は、所属先のレコードに対応する関数に割り当てられた記号を表している。
【００５９】
このように、ソフトウェア波形情報１２７では、第１の時間スケールを単位として表された一連の第１種タイムカウント（ナノ秒を単位とする一連のタイムカウント）の各々における各関数の実行、非実行の区別が表されると共に当該第１の時間スケールの値が表されている。
【００６０】
次に、解析装置１のユーザは、操作部１４に対して所定の波形マージ開始操作を行う。すると演算回路１６は、波形マージ処理１６５の処理を実行する。
【００６１】
演算回路１６は、波形マージ処理１６５において、ハードウェア波形情報１２５およびソフトウェア波形情報１２７に基づいて統合波形情報１２８を生成し、生成した統合波形情報１２８をフラッシュメモリ１２に記録する。
【００６２】
図９に、波形マージ処理１６５の詳細を示す。演算回路１６は、波形マージ処理１６５において、まずステップ２１０で、フラッシュメモリ１２からハードウェア波形情報１２５をＲＡＭ１３に読み出し、続くステップ２２０で、フラッシュメモリ１２からソフトウェア波形情報１２７を読み出す。
【００６３】
続いてステップ２３０では、ハードウェア波形情報１２５の記号定義部１２５ｂに含まれる全レコードから端子名表示部２５３を抽出し、また、ソフトウェア波形情報１２７の記号定義部１２７ｂに含まれる全レコードから関数名表示部２７３を抽出する。そして、抽出した端子名表示部２５３中の端子名（例えばＵＡＲＴ＿１）のすべてと抽出した関数名表示部２７３中の関数名（例えばｆ３）のすべてとの間で、名称の重複が１組でもあるか否かを判定する。
【００６４】
ソフトウェア波形情報１２７中の関数名はソースコード１２１の作成者によって決められ、ハードウェア波形情報１２５中の端子名はマイコンモデル１２２の作成者によって決められるので、重複が発生しない場合も発生する場合もある。重複が１組もなければ、ステップ２４０に進む。
【００６５】
重複が１組以上あれば、重複している各組において、重複している端子名と関数名のどちらか一方をＲＡＭ１３中で変更することで、それらの重複を解消する。例えば、重複している組の関数名の方を、重複相手の端子名とも、読み出された他のすべての変数名とも、読み出された他のすべての関数名とも異なるよう、変更する。このような処理によって端子名と関数名の間の重複がなくなると、ステップ２４０に進む。
【００６６】
続いてステップ２４０では、ハードウェア波形情報１２５の記号定義部１２５ｂに含まれる全レコードから記号名表示部２５２を抽出し、また、ソフトウェア波形情報１２７の記号定義部１２７ｂに含まれる全レコードから記号名表示部２７２を抽出する。そして、抽出した端子名表示部２５３中の記号名（例えばａ５８）のすべてと抽出した記号名表示部２７２中の記号名（例えばｆ３）のすべてとの間で、名称の重複が１組でもあるか否かを判定する。
【００６７】
ソフトウェア波形情報１２７中の記号名は波形情報生成処理１６４において自動的に決められ、ハードウェア波形情報１２５中の記号名はハードウェアエミュレータ１６２において自動的に決められるので、重複が発生しない場合も発生する場合もある。重複が１組もなければ、ステップ２５０に進む。
【００６８】
重複が１組以上あれば、重複している各組において、重複しているハードウェア波形情報１２５中の記号名とソフトウェア波形情報１２７中の記号名のどちらか一方をＲＡＭ１３中で変更することで、それらの重複を解消する。例えば、重複している組のソフトウェア波形情報１２７中の記号名の方を、重複相手の記号名とも、読み出された他のすべての記号名とも異なるよう、変更する。このような処理によって記号名と記号名の間の重複がなくなると、ステップ２５０に進む。
【００６９】
ステップ２５０では、読み出したハードウェア波形情報１２５中の時間スケール表示部１２５ａが示す時間スケール（第２の時間スケールの一例に相当する）と、読み出したソフトウェア波形情報１２７中の時間スケール表示部１２７ａが示す時間スケール（第１の時間スケールの一例に相当する）とを比較し、前者の時間スケールを後者の時間スケールで除算したスケール比を算出する。
【００７０】
上記の例では、第１の時間スケールがナノ秒で、第２の時間スケールがピコ秒となっているので、スケール比は１／１０００である。
【００７１】
続いてステップ２６０では、ステップ２５０で算出したスケール比に基づいて、共通の時間スケール（以下、共通時間スケールという）を決定する。そして決定した共通時間スケールを単位として、ハードウェア波形情報１２５の経時変化部１２５ｃおよびソフトウェア波形情報１２７の経時変化部１２７ｃをＲＡＭ１３中で配列変数化する。配列変数は、周知の通り、インデックスで区別された複数の要素を含む変数である。以下、インデックスおよび要素と称するのは、ＲＡＭ１３中に割り当てられた１つの配列変数のインデックスおよび要素である。
【００７２】
共通時間スケールの詳細な決定方法は、以下の通りである、スケール比が１の場合は、第１、第２の時間スケールが同じなので、その時間スケールを共通時間スケールとして決定する。スケール比が１未満の場合は、第２の時間スケールの方が細かい（すなわち、短い）ので、第２の時間スケールを共通時間スケールとして決定する。スケール比が１より大きいの場合は、第１の時間スケールの方が細かい（すなわち、短い）ので、第１の時間スケールを共通時間スケールとして決定する。つまり、細かい方の時間スケールを、共通時間スケールとして決定する。
【００７３】
配列変数化の方法は、以下の（１）〜（３）の通りである。
【００７４】
（１）スケール比が１の場合は、ハードウェア波形情報１２５中のすべての経時変化部１２５ｃおよびソフトウェア波形情報１２７中のすべての経時変化部１２７ｃの各々に対して、以下の処理［１ａ］を行う。
【００７５】
［１ａ］当該経時変化部中のタイムカウント部の値を特定し、特定した値と同じインデックスを有する要素に、当該経時変化部中のすべて（すなわち、タイムカウント部および全レコード）を追加する。
【００７６】
このように、演算回路１６は、処理［１ａ］を、経時変化部１２５ｃ、１２７ｃのすべてに対して行う。これにより１つの配列変数内で、経時変化部１２５ｃ、１２７ｃの各々が、共通時間スケールを単位として表された共通タイムカウントと値が同じインデックスを有する要素に、含まれる。
【００７７】
（２）スケール比が１未満の場合は、ハードウェア波形情報１２５中のすべての経時変化部１２５ｃの各々に対して、以下の処理［２ａ］を行う。
【００７８】
［２ａ］当該経時変化部１２５ｃ中のタイムカウント部の値を特定し、特定した値と同じインデックスを有する要素に、当該経時変化部１２５ｃ中のすべて（すなわち、タイムカウント部および全レコード）を追加する。
【００７９】
そして更に、ソフトウェア波形情報１２７中のすべての経時変化部１２７ｃの各々に対して、以下の処理［２ｂ］、［２ｃ］を行う。
【００８０】
［２ｂ］当該経時変化部１２７ｃ中のタイムカウント部の値を、上記スケール比で除算する。除算後の値は、共通時間スケールを単位とした表された値になる。
【００８１】
［２ｃ］上記［２ｂ］の除算結果の値と同じインデックスを有する要素に、当該経時変化部１２７ｃ中のタイムカウント部以外のすべて（すなわち、全レコード）を追加する。
【００８２】
このように、演算回路１６は、処理［２ａ］を、経時変化部１２５ｃのすべてに対して行い、処理［２ｂ］、［２ｃ］を、経時変化部１２７ｃのすべてに対して行う。これにより、１つの配列変数内で、経時変化部１２５ｃ、１２７ｃの各々が、共通時間スケールを単位として表された共通タイムカウントと値が同じインデックスを有する要素に、含まれる。
【００８３】
（３）スケール比が１より大きい場合は、ハードウェア波形情報１２５中のすべての経時変化部１２５ｃの各々に対して、以下の処理［３ａ］、［３ｂ］を行う。
【００８４】
［３ａ］当該経時変化部１２５ｃ中のタイムカウント部の値に、上記スケール比を乗算する。乗算後の値は、共通時間スケールを単位とした表された値になる。
【００８５】
［３ｂ］上記［３ａ］の乗算結果の値と同じインデックスを有する要素に、当該経時変化部１２５ｃ中のタイムカウント部以外のすべて（すなわち、全レコード）を追加する。
【００８６】
そして更に、ソフトウェア波形情報１２７中のすべての経時変化部１２７ｃの各々に対して、以下の処理［２ｃ］を行う。
【００８７】
［３ｃ］当該経時変化部１２７ｃ中のタイムカウント部の値を特定し、特定した値と同じインデックスを有する要素に、当該経時変化部１２７ｃ中のタイムカウント部以外のすべて（すなわち、全レコード）を追加する。
【００８８】
このように、演算回路１６は、処理［３ａ］、［３ｂ］を、経時変化部１２５ｃのすべてに対して行い、処理［３ｃ］を、経時変化部１２７ｃのすべてに対して行う。これにより、１つの配列変数内で、経時変化部１２５ｃ、１２７ｃの各々が、共通時間スケールを単位として表された共通タイムカウントと値が同じインデックスを有する要素に、含まれる。なお、上記の処理（１）〜（３）では、ハードウェア波形情報１２５の経時変化部１２５ｃおよびソフトウェア波形情報１２７の経時変化部１２７ｃのうち同じ時点のデータは、同じ１つの要素に含まれる。
【００８９】
以上のように、ステップ２６０では、ソフトウェア波形情報１２７および統合波形情報１２８の経時変化部１２５ｃ、１２７ｃが、共通時間スケールを単位として表された一連の共通タイムカウントと同等のインデックスを有する１つの配列変数に、まとめて格納される。
【００９０】
続いてステップ２７０では、ハードウェア波形情報１２５およびソフトウェア波形情報１２７を、ＲＡＭ１３中で結合して統合波形情報１２８を作成する。
【００９１】
統合波形情報１２８のデータフォーマットは、ハードウェア波形情報１２５、ソフトウェア波形情報１２７と同じ形式の周知のＶＣＤ（Ｖａｌｕｅ  ｃｈａｎｇｅ  ｄｕｍｐ）フォーマットとする。
【００９２】
統合波形情報１２８を作成するため、演算回路１６は、まず、時間スケール表示部１２５ａ、１２７ａと同じ形式の統合時間スケール表示部をＲＡＭ１３中に生成する。この統合時間スケール表示部の値は、共通時間スケールとする。
【００９３】
続いて演算回路１６は、記号定義部１２５ｂ、１２７ｂと同じ形式の統合記号定義部をＲＡＭ１３中に生成する。この統合記号定義部には、記号定義部１２５ｂ、１２７ｂに含まれていたレコードをすべて含める。
【００９４】
続いて演算回路１６は、経時変化部１２５ｃ、１２７ｃと同じ統合経時変化部を生成する。演算回路１６は、上述の配列変数の各要素のうち、ステップ２６０でデータが追加された要素を、インデックスの小さい順に、この統合経時変化部に含める。
【００９５】
そして演算回路１６は、これら統合時間スケール表示部、統合記号定義部、統合経時変化部を、この順に並べたデータを、統合波形情報１２８とする。
【００９６】
続いてステップ２８０では、ステップ２７０で生成した統合波形情報１２８を、フラッシュメモリ１２に記録する。
【００９７】
このように、演算回路１６は、波形マージ処理１６５のステップ２４０〜２８０において、ソフトウェア波形情報１２７中の第１の時間スケールの値とハードウェア波形情報１２５中の第２の時間スケールの値とに基づいて共通時間スケールを特定する（ステップ２５０、２６０）。そして、当該共通時間スケールを単位として表された一連の共通タイムカウントの各々における各関数の実行、非実行の区別が表されると共に、一連の共通タイムカウントの各々におけるエミュレーションにより発生した端子を通る入出力信号の値が表される統合波形情報１２８を生成して記憶媒体に記録する（ステップ２７０、２８０）。
【００９８】
次に、解析装置１のユーザは、操作部１４に対して所定の波形表示操作を行う。すると演算回路１６は、表示処理１６６の処理を実行する。演算回路１６は、表示処理１６６において、フラッシュメモリ１２から統合波形情報１２８を読み出し、読み出した統合波形情報１２８の内容を、ディスプレイ１５に表示する。
【００９９】
このときディスプレイ１５に表示される画像の例を図１０に示す。図１０は、横軸を時間として、各時点における端子の信号内容よび関数の実行、非実行の経時変化を表している。
【０１００】
具体的には図１０では、時点ｔ１から時点ｔ２までの期間においてマイクロコンピュータの外部からＵＡＲＴの端子ＵＡＲＴ＿Ｓにおいて信号が入力されその入力に応じてｔ２からｔ３の期間にＵＡＲＴから割込みコントローラに対して割込み信号３０１が通知される。その結果、その後の時点ｔ３からｔ４の期間において、割り込みコントローラの端子ＩＮＴＣ＿１に割り込みベクタが発生されＣＰＵが割込み処理の準備を開始する。そしてその結果、時点ｔ４から時点ｔ５までの期間に割り込み関数ｉｎｔ１が実行され、その結果、時点ｔ５から時点ｔ６までの期間にポート制御関数ＰｏｒｔＣが実行される。そして、ポート制御関数ＰｏｒｔＣの制御の結果、時点ｔ６から時点ｔ７までの期間にポートのＰＯＲＴ＿１端子からマイクロコンピュータの外部に信号が出力される。そしてその後、時点ｔ８において、ＵＡＲＴの端子ＵＡＲＴ＿Ｓにから再度信号が入力され始める。この画像を見た解析装置１のユーザは、時点ｔ７から時点ｔ８までの期間３００の長さで、時間的余裕を確認することができる。
【０１０１】
このような表示により、解析装置１のユーザは、マイクロコンピュータの端子（ＵＡＲＴ＿Ｓ、ＩＮＴＣ＿１、ＰＯＲＴ＿１）の状態と関数（ｉｎｔ１、ＰｏｒｔＣ）の実行状態を同じ画面で一覧することができる。
【０１０２】
以上説明した通り、本実施形態の解析装置１は、波形マージ処理１６５において、ソフトウェア波形情報１２７中の第１の時間スケールの値とハードウェア波形情報１２５中の第２の時間スケールの値とに基づいて、共通の時間スケールを単位として表された一連の共通タイムカウントの各々における各関数の実行、非実行の区別が表されると共に、一連の共通タイムカウントの各々においてエミュレーションによりマイクロコンピュータの端子を通った入出力信号の値が表される統合波形情報１２８を生成して記憶媒体に記録する（ステップ２４０、２５０、２６０、２７０、２８０）。
【０１０３】
このように、ソフトウェア波形情報１２７において第１の時間スケールの値が表されており、ハードウェア波形情報１２５に第２の時間スケールの値が表されており、解析装置１が、これら第１、第２の時間スケールの値を用いることで、共通の時間スケールを用いて、各関数の実行、非実行の区別およびエミュレーションにより発生したハードウェアを通る入出力信号の値を表す統合波形情報を生成することができる。
【０１０４】
また、演算回路１６は、第１の時間スケールの値を、ハードウェアエミュレータ１６２のエミュレーションを実行する主体（すなわち、演算回路１６自体）から、当該エミュレーションの結果として出力するデータ（すなわち、ＣＰＵ実行ログ１２４）から取得する。このようになっていることで、第１の時間スケールを最も直接的な方法で取得することができる。
【０１０５】
また、解析装置１は、ソフトウェア波形情報１２７中の関数の名称とハードウェア波形情報１２５中の端子の名称の間に重複がある場合は、重複している端子名と関数名のどちらか一方を変更することで、その重複を解消した後、統合波形情報を生成する（ステップ２３０）。このように、統合波形情報１２８を生成する前に端子名と関数名の重複を解消することで、統合波形情報内におけるデータ不整合の発生可能性を低減することができる。
【０１０６】
また、共通の時間スケールは、第１の時間スケールおよび第２の時間スケールのうち、短い方と同じである。このようになっていることで、ハードウェア波形情報１２５とソフトウェア波形情報１２７の時間分解能のどちらも損なうことなく統合波形情報１２８に反映することができる。
【０１０７】
なお、本実施形態においては、解析装置１の演算回路１６が、波形情報生成処理１６４を実行することでソフトウェア波形情報生成手段の一例として機能し、波形マージ処理１６５のステップ２１０、２２０を実行することで波形情報読み出し手段の一例として機能し、ステップ２４０、２５０、２６０、２７０、２８０を実行することで統合手段の一例として機能する。
【０１０８】
（他の実施形態）
なお、本発明は上記した実施形態に限定されるものではなく、特許請求の範囲に記載した範囲内において適宜変更が可能である。また、また、上記実施形態において、実施形態を構成する要素は、特に必須であると明示した場合および原理的に明らかに必須であると考えられる場合等を除き、必ずしも必須のものではない。また、上記実施形態において、実施形態の構成要素の個数、数値、量、範囲等の数値が言及されている場合、特に必須であると明示した場合および原理的に明らかに特定の数に限定される場合等を除き、その特定の数に限定されるものではない。特に、ある量について複数個の値が例示されている場合、特に別記した場合および原理的に明らかに不可能な場合を除き、それら複数個の値の間の値を採用することも可能である。また、上記実施形態において、構成要素等の形状、位置関係等に言及するときは、特に明示した場合および原理的に特定の形状、位置関係等に限定される場合等を除き、その形状、位置関係等に限定されるものではない。また、本発明は、上記実施形態に対する以下のような変形例も許容される。なお、以下の変形例は、それぞれ独立に、上記実施形態に適用および不適用を選択できる。すなわち、以下の変形例のうち明らかに矛盾する組み合わせを除く任意の組み合わせを、上記実施形態に適用することができる。
【０１０９】
（変形例１）
上記実施形態では、ハードウェアエミュレータ１６２というソフトウェアを演算回路１６が実行することによってマイクロコンピュータのエミュレーションが実現されている。しかし、エミュレーションはこのようなソフトウェア的な方法ではなく、ハードウェア的に実現されていてもよい。例えば、当該マイクロコンピュータの回路構成と同等の回路構成が実現するようプログラムされたＦＰＧＡによって、エミュレーションが実現されていてもよいし、あるいは当該マイクロコンピュータをエミュレーションする周知のＩＣＥ（Ｉｎ−Ｃｉｒｃｕｉｔ  Ｅｍｕｌａｔｏｒ）によって実現されていてもよい。
【０１１０】
（変形例２）
上記実施形態では、演算回路１６は、ハードウェアエミュレータ１６２のエミュレーションを実行する主体（すなわち、演算回路１６自体）が、当該エミュレーションの結果として出力するデータ（すなわち、ＣＰＵ実行ログ１２４）から、第１の時間スケールの値を取得する。
【０１１１】
しかし、必ずしもこのようになっておらずともよく、例えば、演算回路１６中のクロックの１単位を第１の時間スケールとして取得するようになっていてもよい。この場合、取得される第１の時間スケールは、例えばＲＯＭ１１中にあらかじめ記録されている。
【０１１２】
この場合、演算回路１６は、ＣＰＵ実行ログ１２４として、プログラムカウンタの値のみを時々刻々とリアルタイムで取得し、ある時点において取得したプログラムカウンタの値と当該時点の自機のクロックのカウント値とを対応付けることで、一連の第１種タイムカウントを特定することができる。
【０１１３】
（変形例３）
上記実施形態では、第１の時間スケールがナノ秒で、第２の時間スケールがピコ秒になっている。しかし、第１の時間スケールと第２の時間スケールの対応関係は、必ずしもこのような例に限らない。第１の時間スケールと第２の時間スケールが異なる場合があれば、上記実施形態の処理を行うことに意義がある。
【符号の説明】
【０１１４】
１                ソフトハード解析装置
１６              演算回路
１６１            コンパイラ
１６２            ハードウェアエミュレータ
１６３            関数トレース情報生成処理
１６４            波形情報生成処理
１６５            波形マージ処理
【図１】
2017027288.tif 000003
【図２】
2017027288.tif 000004
【図３】
2017027288.tif 000005
【図４】
2017027288.tif 000006
【図５】
2017027288.tif 000007
【図６】
2017027288.tif 000008
【図７】
2017027288.tif 000009
【図８】
2017027288.tif 000010
【図９】
2017027288.tif 000011
【図１０】
2017027288.tif 000012