(57)【要約】【課題】  トレース情報の量を削減し、それによって、トレース情報を出力する端子の数を削減し、半導体装置の規模を削減する。【解決手段】  半導体装置は、命令を実行する演算部と、演算部で使用する情報を保持するレジスタと、レジスタに対応して設けられ、第１の値または第２の値に設定されるフラグを保持する記憶部と、演算部により実行された命令に基づいてレジスタに格納された情報を再現することが困難な場合にフラグを第１の値に設定し、演算部により実行された命令に基づいてレジスタに格納された情報を再現可能な場合にフラグを第２の値に設定するフラグ制御部と、メモリにアクセスする命令が演算部により実行される場合に、メモリのアクセスに使用される値であって、第１の値に設定されたフラグに対応するレジスタに格納された値をトレース情報として出力するトレース制御部とを有する。【選択図】    図１
2015072551.tif 000002
【特許請求の範囲】
【請求項１】
命令を実行する演算部と、
前記演算部で使用する情報を保持するレジスタと、
前記レジスタに対応して設けられ、第１の値または第２の値に設定されるフラグを保持する記憶部と、
前記演算部により実行された命令に基づいて前記レジスタに格納された情報を再現することが困難な場合に前記フラグを前記第１の値に設定し、前記演算部により実行された命令に基づいて前記レジスタに格納された情報を再現可能な場合に前記フラグを前記第２の値に設定するフラグ制御部と、
メモリにアクセスする命令が前記演算部により実行される場合に、前記メモリのアクセスに使用される値であって、前記第１の値に設定された前記フラグに対応する前記レジスタに格納された値をトレース情報として出力するトレース制御部
を備えることを特徴とする半導体装置。
【請求項２】
前記トレース制御部は、前記第１の値に設定された前記フラグに対応する前記レジスタに格納されたデータをメモリに書き込む命令が前記演算部により実行される場合に、前記メモリに書き込むデータをトレース情報として出力するデータ出力部を備えること
を特徴とする請求項１記載の半導体装置。
【請求項３】
前記データ出力部は、前記メモリから読み出したデータを前記レジスタに格納する命令が前記演算部により実行される場合に、前記レジスタに格納するデータを前記トレース情報として出力すること
を特徴とする請求項２記載の半導体装置。
【請求項４】
前記データ出力部は、前記第２の値に設定された前記フラグに対応する前記レジスタに格納されたデータを前記メモリに書き込む命令が前記演算部により実行される場合に、前記メモリに書き込むデータの前記トレース情報としての出力を禁止するマスク部を備えること
を特徴とする請求項２または請求項３記載の半導体装置。
【請求項５】
前記トレース制御部は、前記第１の値に設定された前記フラグに対応する前記レジスタに格納されたアドレスが示す前記メモリの記憶領域にアクセスする命令が前記演算部により実行される場合に、前記レジスタに格納されたアドレスを前記トレース情報として出力するアドレス出力部を備えること
を特徴とする請求項１ないし請求項４のいずれか１項記載の半導体装置。
【請求項６】
前記アドレス出力部は、前記第２の値に設定された前記フラグに対応する前記レジスタに格納されたアドレスが示す前記メモリの記憶領域にアクセスする命令が前記演算部により実行される場合に、前記レジスタに格納されたアドレスの前記トレース情報としての出力を禁止するマスク部を備えること
を特徴とする請求項５項記載の半導体装置。
【請求項７】
前記フラグ制御部は、前記第１の値に設定された前記フラグに対応する前記レジスタの少なくとも１つを使用した演算命令が前記演算部により実行される場合に、演算結果が格納される前記レジスタに対応する前記フラグを前記第１の値に設定すること
を特徴とする請求項１ないし請求項６のいずれか１項記載の半導体装置。
【請求項８】
前記フラグ制御部は、前記メモリからデータを読み出す命令が前記演算部により実行される場合に、前記メモリから読み出したデータが格納される前記レジスタに対応する前記フラグを前記第１の値に設定すること
を特徴とする請求項１ないし請求項７のいずれか１項記載の半導体装置。
【請求項９】
前記フラグ制御部は、即値を前記レジスタに格納する命令が前記演算部により実行される場合に、即値が格納される前記レジスタに対応する前記フラグを前記第２の値に設定すること
を特徴とする請求項１ないし請求項８のいずれか１項記載の半導体装置。
【請求項１０】
前記フラグ制御部は、前記第２の値に設定された前記フラグに対応する前記レジスタを使用した演算命令が前記演算部により実行される場合に、演算結果が格納される前記レジスタに対応する前記フラグを前記第２の値に設定すること
を特徴とする請求項１ないし請求項９のいずれか１項記載の半導体装置。
【請求項１１】
命令を実行する演算部と、前記演算部で使用する情報を保持するレジスタとを備える半導体装置の動作制御方法であって、
前記レジスタに対応して設けられる記憶部のフラグを、前記演算部による命令の実行結果に応じて、前記演算部により実行された命令に基づいて前記レジスタに格納された情報を再現することが困難な場合に第１の値に設定し、前記演算部により実行された命令に基づいて前記レジスタに格納された情報を再現可能な場合に第２の値に設定し、
メモリにアクセスする命令が前記演算部により実行される場合に、前記メモリのアクセスに使用される値であって、前記第１の値に設定された前記フラグに対応する前記レジスタに格納された値をトレース情報として出力すること
を特徴とする半導体装置の動作制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体装置および半導体装置の動作制御方法に関する。
【背景技術】
【０００２】
プロセッサを含むシステム装置の開発では、プロセッサが実行するプログラムの実行結果がトレースされ、トレースされた情報は、トレースバッファに格納される。そして、トレースバッファに格納された情報に基づいてプログラムの実行結果がエミュレータ機能を用いて再現され、プログラムおよびシステム装置のデバッグを実施する手法が有用である。
【０００３】
例えば、同じトレース情報が繰り返し生成される場合、冗長なトレース情報の生成を回避することで、トレースバッファに格納されるトレース情報の量は削減される（例えば、特許文献１参照）。また、アドレスが即値で指定されるコール命令やジャンプ命令等のトレース情報を生成しないことで、トレースバッファに格納されるトレース情報の量は削減される（例えば、特許文献２参照）。さらに、所望のトレース情報を選択的にトレースバッファに格納することで、トレースバッファに格納されるトレース情報の量は削減される（例えば、特許文献３参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００４−３８９８１号公報
【特許文献２】特表２００１−５１９９４７号公報
【特許文献３】特開昭６１−５２７４８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、メモリにアクセスする命令で使用されるレジスタの値を、トレース情報として出力するか否かを判定することで、トレース情報の量を削減する手法は提案されていない。
【０００６】
本件開示の半導体装置および半導体装置の動作制御方法は、トレース情報の量を削減し、それによって、トレース情報を出力する端子の数を削減し、半導体装置の規模を削減することを目的とする。
【課題を解決するための手段】
【０００７】
一つの観点によれば、半導体装置は、命令を実行する演算部と、演算部で使用する情報を保持するレジスタと、レジスタに対応して設けられ、第１の値または第２の値に設定されるフラグを保持する記憶部と、演算部により実行された命令に基づいてレジスタに格納された情報を再現することが困難な場合にフラグを第１の値に設定し、演算部により実行された命令に基づいてレジスタに格納された情報を再現可能な場合にフラグを第２の値に設定するフラグ制御部と、メモリにアクセスする命令が演算部により実行される場合に、メモリのアクセスに使用される値であって、第１の値に設定されたフラグに対応するレジスタに格納された値をトレース情報として出力するトレース制御部とを有する。
【０００８】
別の観点によれば、半導体装置の動作制御方法は、命令を実行する演算部と、演算部で使用する情報を保持するレジスタとを備える半導体装置の動作制御方法であって、レジスタに対応して設けられる記憶部のフラグを、演算部による命令の実行結果に応じて、演算部により実行された命令に基づいてレジスタに格納された情報を再現することが困難な場合に第１の値に設定し、演算部により実行された命令に基づいてレジスタに格納された情報を再現可能な場合に第２の値に設定し、メモリにアクセスする命令が演算部により実行される場合に、メモリのアクセスに使用される値であって、第１の値に設定されたフラグに対応するレジスタに格納された値をトレース情報として出力する。
【発明の効果】
【０００９】
本件開示の半導体装置および半導体装置の動作制御方法は、トレース情報を出力する端子の数を削減することができ、半導体装置の規模を削減することができる。
【図面の簡単な説明】
【００１０】
【図１】半導体装置および半導体装置の動作制御方法の一実施形態を示す図である。
【図２】半導体装置および半導体装置の動作制御方法の別の実施形態を示す図である。
【図３】図２に示したプロセッサの例を示す図である。
【図４】図３に示したフラグ制御部によりフラグを書き替える条件の例を示す図である。
【図５】図３に示したフラグ制御部によるフラグの書き替え動作の例を示す図である。
【図６】図２に示したトレース制御部の例を示す図である。
【図７】図６に示したトレース制御部の動作の例を示す図である。
【図８】図２に示したプロセッサが実行するプログラムの記述の例を示す図である。
【図９】図８に示したプログラムをプロセッサが実行する場合における半導体装置の動作の例を示す図である。
【図１０】図８に示したプログラムをプロセッサが実行する場合に出力されるトレース情報の例を示す図である。
【図１１】図２に示したエミュレータの動作の例を示す図である。
【図１２】図１１に示したエミュレータの動作により復元されたプロセッサの実行履歴の例を示す図である。
【発明を実施するための形態】
【００１１】
以下、図面を用いて実施形態を説明する。信号が伝達される信号線には、信号名と同じ符号を使用する。図中の二重の四角印は、外部端子を示す。外部端子は、例えば、半導体チップ上のパッド、あるいは半導体チップが収納されるパッケージのリードである。
【００１２】
図１は、半導体装置および半導体装置の動作制御方法の一実施形態を示す。例えば、この実施形態の半導体装置ＳＥＭ１は、演算部ＯＰＵ、レジスタＲＥＧ、記憶部ＭＵ、フラグ制御部ＦＣＮＴおよびトレース制御部ＴＣＮＴを有する。演算部ＯＰＵは、例えば、メモリＭＥＭから供給される命令ＩＮＳを実行する。レジスタＲＥＧは、演算部ＯＰＵで使用する値を保持する。
【００１３】
記憶部ＭＵは、レジスタＲＥＧに対応して設けられ、第１の値（例えば、”０”）または第２の値（例えば、”１”）に設定されるフラグＦＬＧを保持する。なお、半導体装置ＳＥＭ１は、複数のレジスタＲＥＧと、複数のレジスタＲＥＧにそれぞれ対応する複数のフラグＦＬＧを含む記憶部ＭＵを有してもよい。
【００１４】
フラグ制御部ＦＣＮＴは、演算部ＯＰＵによる命令の実行結果に応じて、演算部ＯＰＵにより実行された命令ＩＮＳに基づいてレジスタＲＥＧに格納された値を再現することが困難な場合に、フラグＦＬＧを第１の値に設定する。フラグ制御部ＦＣＮＴは、演算部ＯＰＵにより実行された命令ＩＮＳに基づいてレジスタＲＥＧに格納された値を再現可能な場合に、フラグＦＬＧを第２の値に設定する。
【００１５】
トレース制御部ＴＣＮＴは、メモリＭＥＭにアクセスする命令が演算部ＯＰＵにより実行される場合、メモリアクセスに使用される値であって、第１の値に設定されたフラグＦＬＧに対応するレジスタＲＥＧに格納された値をトレース情報ＴＲＩとして出力する。換言すれば、トレース制御部ＴＣＮＴは、メモリアクセスに使用される値であって、第２の値に設定されたフラグＦＬＧに対応するレジスタＲＥＧに格納された値をトレース情報ＴＲＩとして出力することを禁止する。
【００１６】
例えば、トレース制御部ＴＣＮＴは、第１の値に設定されたフラグＦＬＧに対応するレジスタＲＥＧに格納されたデータをメモリＭＥＭに書き込む命令が演算部ＯＰＵにより実行される場合に、メモリＭＥＭに書き込むデータをトレース情報ＴＲＩとして出力する。トレース制御部ＴＣＮＴは、第２の値に設定されたフラグＦＬＧに対応するレジスタＲＥＧに格納されたデータをメモリＭＥＭに書き込む命令が演算部ＯＰＵにより実行される場合に、メモリＭＥＭに書き込むデータのトレース情報ＴＲＩとしての出力を禁止する。
【００１７】
あるいは、トレース制御部ＴＣＮＴは、第１の値に設定されたフラグＦＬＧに対応するレジスタＲＥＧに格納されたアドレスを用いてメモリＭＥＭにアクセスする命令が実行される場合、レジスタＲＥＧに格納されたアドレスをトレース情報ＴＲＩとして出力する。トレース制御部ＴＣＮＴは、第２の値に設定されたフラグＦＬＧに対応するレジスタＲＥＧに格納されたアドレスを用いてメモリＭＥＭにアクセスする命令が実行される場合、レジスタＲＥＧに格納されたアドレスのトレース情報ＴＲＩとしての出力を禁止する。
【００１８】
例えば、トレース情報ＴＲＩは、エミュレータＥＭＬに転送される。なお、トレース情報ＴＲＩは、トレースバッファを介してエミュレータＥＭＬに転送されてもよい。エミュレータＥＭＬは、半導体装置ＳＥＭ１からのトレース情報ＴＲＩと、演算部ＯＰＵにより実行される命令が記述されたソースプログラムＳＰＧＭとに基づいて、実行履歴ＥＬＩＳＴを出力する。例えば、実行履歴ＥＬＩＳＴは、演算部ＯＰＵが実行した命令、演算部ＯＰＵが命令を実行した際のレジスタＲＥＧの値、およびメモリＭＥＭにアクセスしたときのアドレスおよびデータの値等が含まれる。
【００１９】
この実施形態では、レジスタＲＥＧに対応して設けられる記憶部ＭＵに設定されるフラグＦＬＧの値に応じて、演算部ＯＰＵの動作により使用されたレジスタＲＥＧに格納された値をトレース情報ＴＲＩとして出力するか否かが判断される。そして、演算部ＯＰＵにより既に実行された命令ＩＮＳに基づいてレジスタＲＥＧに格納された値を再現することが困難な場合に、再現が困難な値がトレース情報ＴＲＩとして出力される。換言すれば、演算部ＯＰＵにより既に実行された命令ＩＮＳに基づいてレジスタＲＥＧに格納された値を再現可能な場合に、トレース情報ＴＲＩは出力されない。
【００２０】
これにより、トレース情報ＴＲＩの量を従来に比べて削減することができる。トレース情報ＴＲＩの量の削減により、トレース情報ＴＲＩを出力するために半導体装置ＳＥＭ１に設けられる端子の数を従来に比べて削減することができる。また、トレース情報ＴＲＩが、トレースバッファを介してエミュレータＥＭＬに転送される場合には、トレースバッファの記憶容量を従来に比べて削減することができる。この結果、半導体装置ＳＥＭ１の規模を削減することができ、半導体装置ＳＥＭ１が搭載されるシステムの規模を削減することができ、システムコストの削減に寄与することができる。
【００２１】
また、トレース情報ＴＲＩを出力するために半導体装置ＳＥＭ１に設けられる端子の数を削減しない場合、演算部ＯＰＵの動作とともにリアルタイムでトレース可能な命令数を従来に比べて増やすことができる。例えば、演算部ＯＰＵの動作周波数が高くなる場合にも、演算部ＯＰＵが実行する命令に同期してリアルタイムでトレース情報ＴＲＩを出力することができ、半導体装置ＳＥＭ１が搭載されるシステムのデバッグ性能を向上することができる。
【００２２】
図２は、半導体装置および半導体装置の動作制御方法の別の実施形態を示す。図１に示した実施形態で説明した要素と同一または同様の要素については、同一の符号を付し、これ等については、詳細な説明を省略する。例えば、この実施形態の半導体装置ＳＥＭ２は、トレースバッファ６０とともにデバッグ基板ＤＢＧＢ上に搭載される。なお、デバッグが完了した半導体装置ＳＥＭ２は、システム基板等に搭載され、出荷される。
【００２３】
例えば、半導体装置ＳＥＭ２は、プロセッサ１０、メモリ２０、周辺回路３０およびユーザロジック４０と、プロセッサ１０に接続されたトレース制御部５０とを有する。プロセッサ１０、メモリ２０、周辺回路３０およびユーザロジック４０は、システムバスＳＢＵＳを介して互いに接続される。例えば、デバッグ基板ＤＢＧＢは、コネクタおよびケーブル等を介してエミュレータ１００に接続される。なお、半導体装置ＳＥＭ２は、図２に示した構成に限定されない。例えば、トレースバッファ６０は、半導体装置ＳＥＭ２に搭載されてもよく、周辺回路３０およびユーザロジック４０は、ユーザのシステム仕様に応じて選択的に半導体メモリＭＥＭに搭載されてもよい。
【００２４】
エミュレータ１００は、ＩＣＥ（In Circuit Emulator）等のコンピュータであり、入力装置１１０、出力装置１２０および記憶装置１３０に接続される。例えば、入力装置１１０は、キーボードやマウスであり、出力装置１２０は、ディスプレイやプリンタであり、記憶装置１３０はハードディスクドライブ等である。
【００２５】
エミュレータ１００は、プログラムを実行することにより、トレースバッファ６０に蓄積されたトレース情報ＴＲＩと、記憶装置１３０に記憶されたソースプログラムとに基づいて、プロセッサ１０により実行された命令を再現する。なお、プロセッサ１０は、ソースプログラムをアセンブルすることにより生成される機械語の命令（メモリ２０に格納）を実行する。すなわち、プロセッサ１０が実行する命令と、記憶装置１３０に記憶されたソースプログラムに含まれる命令とは、互いに対応している。そして、デバッグ基板ＤＢＧＢ、エミュレータ１００、入力装置１１０、出力装置１２０および記憶装置１３０により、半導体装置ＳＥＭ２の開発を支援するデバッグシステムＤＢＧＳＹＳが構築される。
【００２６】
例えば、プロセッサ１０は、メモリ２０に格納された命令を実行するＣＰＵ（Central Processing Unit）等である。プロセッサ１０の例は、図３に示す。メモリ２０は、例えば、ＳＲＡＭ（Static Random Access Memory）であり、プロセッサ１０が実行する命令および命令の実行で使用するデータ等を記憶する。例えば、周辺回路３０は、ＤＭＡＣ（Direct Memory Access Controller）、通信回路、タイマまたはＡＤＣ（Analog to Digital Converter）等である。ユーザロジック４０は、ユーザ毎に実現される固有の論理回路であり、例えば、ＦＰＧＡ（Field Programmable Gate Array）等のプログラマブルロジックデバイスである。
【００２７】
トレース制御部５０は、プロセッサ１０による命令の実行結果に基づいて、トレースバッファ６０に出力するトレース情報ＴＲＩを決定する。例えば、トレース制御部５０からトレースバッファ６０にトレース情報ＴＲＩを出力する信号線は、プロセッサ１０による命令の実行を中断することなく、トレース情報ＴＲＩをリアルタイムでトレースバッファ６０に転送できるバス幅に設定される。トレース制御部５０の例は、図６に示す。また、トレース制御部５０によるトレースバッファ６０に出力するトレース情報ＴＲＩの決定手法は、図７で説明する。
【００２８】
トレースバッファ６０は、例えば、ＤＲＡＭ（Dynamic Random Access Memory）等のメモリであり、トレース制御部５０から出力されるトレース情報ＴＲＩを蓄積する。
【００２９】
図３は、図２に示したプロセッサ１０の例を示す。例えば、プロセッサ１０は、クロックに同期して動作する命令フェッチ部ＩＦＵ、命令デコーダＩＤ、レジスタ部ＲＥＧＵ、演算部ＯＰＵ、フラグ制御部ＦＣＮＴ、セレクタＳＥＬ、プログラムカウンタＰＣ、インクリメンタＩＮＣ、アドレスバスＡＢおよびデータバスＤＢを有する。なお、プロセッサ１０の構成は、図３に限定されない。
【００３０】
命令フェッチ部ＩＦＵは、システムバスＳＢＵＳおよびデータバスＤＢを介してメモリ２０から読み出される命令をフェッチし、フェッチした命令を命令デコーダＩＤに出力する。命令デコーダＩＤは、命令フェッチ部ＩＦＵから供給される命令をデコードし、プロセッサ１０の各部の動作を制御する制御信号を生成する。制御信号は、タイミング信号を含んでもよい。例えば、命令デコーダＩＤは、加算命令をデコードした場合、演算部ＯＰＵの演算器ＯＰを加算器として動作させる制御信号と、加算に使用するレジスタＲＥＧを選択する制御信号等とを出力する。また、命令デコーダＩＤは、デコードした命令に即値が含まれる場合、即値をデータバスＤＢに出力し、レジスタＲＥＧに転送する。
【００３１】
レジスタ部ＲＥＧＵは、複数のレジスタＲＥＧと、各レジスタＲＥＧに対応する記憶部ＭＵを有する。例えば、レジスタＲＥＧは、汎用レジスタである。記憶部ＭＵのフラグＦＬＧは、プロセッサ１０により既に実行された命令をたどることにより、対応するレジスタＲＥＧに保持された値が命令毎に復元可能な場合、例えば、”１”に設定される。フラグＦＬＧは、対応するレジスタＲＥＧに保持された値が、プロセッサ１０により既に実行された命令をたどっても命令毎に復元が困難な場合、例えば、”０”に設定される。フラグＦＬＧは、フラグ制御部ＦＣＮＴにより書き替えられる。フラグＦＬＧに設定される”０”は、第１の値の一例であり、フラグＦＬＧに設定される”１”は、第２の値の一例である。
【００３２】
演算部ＯＰＵは、演算器ＯＰおよびロード／ストア部ＬＳＵを有する。例えば、演算器ＯＰは、命令デコーダＩＤによりデコードされた命令にしたがって、レジスタＲＥＧに格納されたデータ、即値またはメモリ２０から読み出されるデータを用いて、四則演算または論理演算を実行する。
【００３３】
ロード／ストア部ＬＳＵは、命令デコーダＩＤがロード命令およびストア命令等のメモリ２０にアクセスする命令をデコードした場合に、メモリ２０に対するデータ転送を実行する。ロード／ストア部ＬＳＵは、ロード命令では、レジスタＲＥＧの１つに格納されたアドレスをアドレスバスＡＢに出力してメモリ２０の記憶領域にアクセスする。記憶領域から読み出されたデータは、データバスＤＢを介してレジスタＲＥＧの１つに格納される。ロード／ストア部ＬＳＵは、ストア命令では、レジスタＲＥＧの１つに格納されたデータをデータバスＤＢに出力し、レジスタＲＥＧの別の１つに格納されたアドレスをアドレスバスＡＢに出力する。そして、データは、メモリ２０においてアドレスが示す記憶領域に書き込まれる。なお、プロセッサ１０は、メモリ２０のアクセスを制御する制御信号をメモリ２０に出力する。
【００３４】
また、ロード／ストア部ＬＳＵは、命令の実行に使用するアドレスを示すアドレス情報ＡＤおよび命令の実行に使用するデータを示すデータ情報ＤＴを、トレース制御部５０のデータトレース生成部ＤＴＧＥＮに出力する。ロード／ストア部ＬＳＵは、メモリ２０にアクセスする命令を実行することを示すメモリアクセス情報ＭＡを、データトレース生成部ＤＴＧＥＮに出力する。ロード／ストア部ＬＳＵは、メモリ２０にアクセスする命令がストア命令またはロード命令のいずれであるかを示すストアロード情報Ｓ／Ｌをデータトレース生成部ＤＴＧＥＮに出力する。例えば、ストアロード情報Ｓ／Ｌは、ストア命令の実行時に”１”に設定され、ロード命令の実行時に”０”に設定される。
【００３５】
演算部ＯＰＵは、命令の実行／非実行を示す実行情報ＥＸＥをトレース制御部５０の命令トレース生成部ＩＴＧＥＮに出力する。演算部ＯＰＵは、命令が実行された場合に実行情報ＥＸＥを”Ｅ”に設定し、条件付きの命令で条件が成立しない場合に実行情報ＥＸＥを”Ｎ”に設定する。例えば、”Ｅ”は、実行情報ＥＸＥを”１”に設定することにより示され、”Ｎ”は、実行情報ＥＸＥを”０”に設定することにより示される。例えば、条件付きの命令は、分岐命令である。演算部ＯＰＵは、分岐条件の不成立によりプログラムカウンタＰＣの値がインクリメントされる場合に実行情報ＥＸＥを”Ｎ”に設定し、分岐条件の成立によりプログラムカウンタＰＣの値が分岐先にジャンプする場合に実行情報ＥＸＥを”Ｅ”に設定する。実行情報ＥＸＥ（”Ｅ”、”Ｎ”）の出力例は、図９および図１０に示す。
【００３６】
フラグ制御部ＦＣＮＴは、演算部ＯＰＵによる演算の実行毎に、フラグＦＬＧの値を受ける。フラグ制御部ＦＣＮＴは、演算部ＯＰＵで使用したレジスタＲＥＧがデータを保持する場合、レジスタＲＥＧに対応するフラグＦＬＧの値を、データフラグ線ＤＦＬＧを介してトレース制御部５０のデータトレース生成部ＤＴＧＥＮに出力する。また、フラグ制御部ＦＣＮＴは、演算部ＯＰＵで使用したレジスタＲＥＧがアドレスを保持する場合、レジスタＲＥＧに対応するフラグＦＬＧの値を、アドレスフラグ線ＡＦＬＧを介してトレース制御部５０のデータトレース生成部ＤＴＧＥＮに出力する。例えば、演算部ＯＰＵで使用したレジスタＲＥＧがデータまたはアドレスを保持するか否かを示す情報は、演算器ＯＰおよびロード／ストア部ＬＳＵからフラグ制御部ＦＣＮＴにそれぞれ出力される。
【００３７】
また、フラグ制御部ＦＣＮＴは、演算器ＯＰおよびロード／ストア部ＬＳＵによる命令の実行結果に応じて、フラグ書き替え線ＦＷＲに値を出力し、演算部ＯＰＵで使用したレジスタＲＥＧに対応するフラグＦＬＧの値を書き替える。フラグ制御部ＦＣＮＴによるフラグＦＬＧの書き替えの例は、図４および図５に示す。
【００３８】
プログラムカウンタＰＣは、演算部ＯＰＵが次に実行する命令を格納したメモリ２０のアドレスを示す。インクリメンタＩＮＣは、命令デコーダＩＤからの制御信号の１つに応じて、プログラムカウンタＰＣから出力されるアドレスをインクリメントしてセレクタＳＥＬに出力する。
【００３９】
セレクタＳＥＬは、インクリメンタＩＮＣから出力されるアドレスまたはデータバスＤＢを介して命令デコーダＩＤから供給される分岐アドレス（即値）を、命令デコーダＩＤからの制御信号の１つに応じて選択する。セレクタＳＥＬは、選択したアドレスをプログラムカウンタＰＣに転送する。例えば、分岐命令の分岐条件が成立し、次の命令のフェッチ先がインクリメンタＩＮＣから出力されるアドレスと相違する場合、セレクタＳＥＬは、命令デコーダＩＤから供給される分岐アドレスを選択する。
【００４０】
図４は、図３に示したフラグ制御部ＦＣＮＴによりフラグＦＬＧを書き替える条件の例を示す。図４に示す条件は、命令デコーダＩＤ、演算器ＯＰおよびロード／ストア部ＬＳＵからの情報に基づいて、フラグ制御部ＦＣＮＴにより判定される。
【００４１】
フラグ制御部ＦＣＮＴは、レジスタＲＥＧに即値が格納される命令が実行されることを判定した場合、即値が代入されるレジスタＲＥＧに対応するフラグＦＬＧを”１”に書き替える（条件Ａ）。即値は、プロセッサ１０が実行する命令を記述したプログラム（例えば、図８に示すプログラム）中に記述されており、プログラムから再現可能である。
【００４２】
フラグ制御部ＦＣＮＴは、”１”に設定されたフラグＦＬＧに対応するレジスタＲＥＧおよび即値を使用して演算が実行されることを判定した場合、演算結果が格納されるレジスタＲＥＧに対応するフラグＦＬＧを”１”に書き替える（条件Ｂ）。換言すれば、レジスタＲＥＧに書き込まれる値が、プロセッサにより実行された命令（プログラム）をたどることにより判別可能な場合、値が格納されるレジスタに対応するフラグＦＬＧは”１”に設定される。条件Ａおよび条件Ｂでは、再現可能な値が格納されるレジスタＲＥＧに対応するフラグＦＬＧに”１”を設定することで、再現可能な値がトレース情報ＴＲＩとして出力されることを抑止することができ、トレース情報ＴＲＩの量を従来に比べて削減できる。
【００４３】
フラグ制御部ＦＣＮＴは、”０”に設定されたフラグＦＬＧに対応するレジスタＲＥＧの少なくとも１つを使用して演算が実行される場合、演算結果が格納されるレジスタＲＥＧに対応するフラグＦＬＧを”０”に書き替える（条件Ｃ）。また、フラグ制御部ＦＣＮＴは、メモリ２０にアクセスする命令により値が書き込まれるレジスタＲＥＧに対応するフラグＦＬＧを”０”に書き替える（条件Ｄ）。換言すれば、レジスタＲＥＧに書き込まれる値の判別が、プロセッサにより実行された命令（プログラム）をたどっても困難である場合、値が格納されるレジスタに対応するフラグＦＬＧは”０”に設定される。条件Ｃおよび条件Ｄでは、再現が困難な値が格納されるレジスタＲＥＧに対応するフラグＦＬＧに”０”が設定される。このため、エミュレータ１００等は、トレース情報ＴＲＩに基づいて、演算部ＯＰＵ（すなわち、プロセッサ１０）により実行された命令の履歴を正しく生成することができる。
【００４４】
フラグ制御部ＦＣＮＴは、命令の実行によりレジスタＲＥＧの値が書き替えられないことを判定した場合、フラグＦＬＧを書き替えない（条件Ｅ）。
【００４５】
図５は、図３に示したフラグ制御部ＦＣＮＴによるフラグＦＬＧの書き替え動作の例を示す。なお、図５では、フラグ制御部ＦＣＮＴがフローを順次に実行する例を示しているが、実際には、図５に示すフローは、フラグ制御部ＦＣＮＴのハードウェアが動作することにより、並列に実行される。すなわち、図４に示した条件Ａ、Ｂ、Ｃ、Ｄ、Ｅは、それぞれの判定回路により並列に判定される。
【００４６】
フラグ制御部ＦＣＮＴは、ステップＳ１００においてレジスタＲＥＧに即値を格納する命令の実行を示す情報を命令デコーダＩＤから受けた場合、ステップＳ１０２において即値が格納されたレジスタＲＥＧに対応するフラグＦＬＧを”１”に設定する（条件Ａ）。例えば、レジスタＲＥＧに即値が格納される命令は、転送命令ＭＯＶ等である。
【００４７】
フラグ制御部ＦＣＮＴは、ステップＳ１００においてレジスタＲＥＧに即値が格納される命令が実行されないと判定した場合、ステップＳ１０４の判定を実行する。フラグ制御部ＦＣＮＴは、ステップＳ１０４において演算命令の実行を示す情報を演算器ＯＰから受けた場合、ステップＳ１０６において、”０”に設定されたフラグＦＬＧに対応するレジスタＲＥＧの少なくとも１つを使用して演算が実行されるか否かを判定する。例えば、演算命令は、加算命令ＡＤＤ、減算命令ＳＵＢおよび乗算命令ＭＵＬ等である。
【００４８】
そして、”０”に設定されたフラグＦＬＧに対応するレジスタＲＥＧの少なくとも１つを使用して演算が実行される場合、ステップＳ１１２において、データが格納されるレジスタＲＥＧに対応するフラグＦＬＧの値が”０”に設定される（条件Ｃ）。一方、”０”に設定されたフラグＦＬＧに対応するレジスタＲＥＧを使用して演算が実行されない場合、ステップＳ１０８において、フラグ制御部ＦＣＮＴは、演算結果が格納されるレジスタＲＥＧに対応するフラグＦＬＧに”１”を設定する（条件Ｂ）。換言すれば、ステップＳ１０８は、演算命令で使用する引数が、”１”に設定されたフラグＦＬＧに対応するレジスタＲＥＧに格納される場合（オペランドがレジスタ参照）、あるいは即値である場合に実行される。
【００４９】
演算命令の実行を示す情報を演算器ＯＰから受けない場合、フラグ制御部ＦＣＮＴは、演算命令以外の命令が実行されたと判定し、ステップＳ１１０において、レジスタＲＥＧに値が書き込まれるか否かを判定する。例えば、演算命令以外の命令は、ストア命令ＳＴＲ、ロード命令ＬＤＲ、コンペア命令ＣＭＰおよび分岐命令ＢＮＥ等である。そして、フラグ制御部ＦＣＮＴは、レジスタＲＥＧに値が書き込まれる命令が実行されると判定した場合、ステップＳ１１２において、データが格納されるレジスタＲＥＧに対応するフラグＦＬＧの値を”０”に設定する（条件Ｄ）。例えば、レジスタＲＥＧに値が書き込まれる命令は、ロード命令ＬＤＲである。
【００５０】
一方、フラグ制御部ＦＣＮＴは、ステップＳ１１０において、レジスタＲＥＧに値が書き込まれないと判定した場合、フラグＦＬＧの値を書き替えない（条件Ｅ）。
【００５１】
図６は、図２に示したトレース制御部５０の例を示す。トレース制御部５０は、命令トレース生成部ＩＴＧＥＮおよびデータトレース生成部ＤＴＧＥＮを有する。命令トレース生成部ＩＴＧＥＮは、演算部ＯＰＵから出力される実行情報ＥＸＥ（”Ｅ”または”Ｎ”）を受け、受けた実行情報ＥＸＥをトレース情報ＴＲＩとしてトレースバッファ６０に出力する。
【００５２】
データトレース生成部ＤＴＧＥＮは、アンド回路ＡＮＤ、データ出力部ＤＯＵＴおよびアドレス出力部ＡＯＵＴを有する。データトレース生成部ＤＴＧＥＮは、イネーブル端子ＥＮで受けるメモリアクセス情報ＭＡがメモリ２０にアクセスする命令の実行を示す場合に動作する。
【００５３】
アンド回路ＡＮＤは、ストアロード情報Ｓ／Ｌが論理０の場合、すなわち、ロード命令が実行された場合に論理０を出力する。アンド回路ＡＮＤは、ストアロード情報Ｓ／Ｌが論理１、かつデータフラグ信号ＤＦＬＧが論理０の場合、すなわち、ストア命令の実行によりメモリ２０に格納するデータを保持するレジスタＲＥＧに対応するフラグＦＬＧが”０”の場合に論理０を出力する。アンド回路ＡＮＤは、ストアロード情報Ｓ／Ｌが論理１、かつデータフラグ信号ＤＦＬＧが論理１の場合、すなわち、ストア命令の実行によりメモリ２０に格納するデータを保持するレジスタＲＥＧに対応するフラグＦＬＧが”１”の場合に論理１を出力する。
【００５４】
データ出力部ＤＯＵＴは、メモリアクセス情報ＭＡがメモリ２０にアクセスする命令の実行を示す場合に動作し、メモリアクセス情報ＭＡがメモリ２０にアクセスする命令の非実行を示す場合に動作を停止する。データ出力部ＤＯＵＴは、論理０をディセーブル端子ＤＩＳで受ける期間にオンし、論理１をディセーブル端子ＤＩＳで受ける期間にオフするスイッチＤＳＷを有する。すなわち、データ出力部ＤＯＵＴは、論理０をディセーブル端子ＤＩＳで受ける期間に、演算部ＯＰＵからのデータ情報ＤＴをトレースバッファ６０に出力する。
【００５５】
データ出力部ＤＯＵＴは、メモリアクセス情報ＭＡがメモリ２０にアクセスする命令の非実行を示す期間と、論理１をディセーブル端子ＤＩＳで受ける期間とに、データ情報ＤＴのトレースバッファ６０への出力を禁止する。例えば、データ出力部ＤＯＵＴは、ロード命令が実行される場合、およびストア命令の実行によりメモリ２０に格納するデータを保持するレジスタＲＥＧに対応するフラグＦＬＧが”０”の場合、データ情報ＤＴをトレースバッファ６０に出力する。
【００５６】
アンド回路ＡＮＤおよび論理１をディセーブル端子ＤＩＳで受ける期間にオフするスイッチＤＳＷは、レジスタＲＥＧに格納されたデータのトレース情報ＴＲＩとしての出力を禁止するマスク部の一例である。アンド回路ＡＮＤおよびスイッチＤＳＷにより、データのトレース情報ＴＲＩとしての出力を禁止することで、演算部ＯＰＵにより実行される命令が記述されたプログラム（例えば、図８に示すプログラム）から再現可能なデータ情報ＤＴは、トレース情報ＴＲＩとして出力されない。このため、トレース情報ＴＲＩの量を従来に比べて削減できる。
【００５７】
アドレス出力部ＡＯＵＴは、メモリアクセス情報ＭＡがメモリ２０にアクセスする命令の実行を示す場合に動作し、メモリアクセス情報ＭＡがメモリ２０にアクセスする命令の非実行を示す場合に動作を停止する。アドレス出力部ＡＯＵＴは、論理０のアドレスフラグ信号ＡＦＬＧをディセーブル端子ＤＩＳで受ける期間にオンし、論理１のアドレスフラグ信号ＡＦＬＧをディセーブル端子ＤＩＳで受ける期間にオフするスイッチＡＳＷを有する。すなわち、アドレス出力部ＡＯＵＴは、論理０をディセーブル端子ＤＩＳで受ける期間に、演算部ＯＰＵからのアドレス情報ＡＤをトレースバッファ６０に出力する。
【００５８】
アドレス出力部ＡＯＵＴは、メモリアクセス情報ＭＡがメモリ２０にアクセスする命令の非実行を示す期間と、論理１をディセーブル端子ＤＩＳで受ける期間とに、アドレス情報ＡＤのトレースバッファ６０への出力を禁止する。例えば、アドレス出力部ＡＯＵＴは、命令の実行で使用するレジスタＲＥＧに格納された値がアドレスとして使用され、アドレスを格納するレジスタＲＥＧに対応するフラグＦＬＧが”０”の場合に、アドレス情報ＡＤをトレースバッファ６０に出力する。
【００５９】
論理１をディセーブル端子ＤＩＳで受ける期間にオフするスイッチＡＳＷは、レジスタＲＥＧに格納されたアドレスのトレース情報ＴＲＩとしての出力を禁止するマスク部の一例である。スイッチＡＳＷにより、アドレスのトレース情報ＴＲＩとしての出力を禁止することで、演算部ＯＰＵにより実行される命令が記述されたプログラムから再現可能なアドレスは、トレース情報ＴＲＩとして出力されない。このため、トレース情報ＴＲＩの量を従来に比べて削減することができる。
【００６０】
図７は、図６に示したトレース制御部５０の動作の例を示す。なお、図７では、トレース制御部５０がフローを順次に実行する例を示している。しかし、実際には、トレース制御部５０の命令トレース生成部ＩＴＧＥＮ、データ出力部ＤＯＵＴおよびアドレス出力部ＡＯＵＴは、並列に動作するため、図７に示すフローは並列に実行される。例えば、ステップＳ２０２、Ｓ２０４、Ｓ２０８、Ｓ２１２の判定は、図７に示す順序ではなく、同時に実行されてもよい。
【００６１】
ステップＳ２０２において、データトレース生成部ＤＴＧＥＮは、ロード／ストア部ＬＳＵからのメモリアクセス情報ＭＡに基づいて、メモリアクセス命令（ロード命令ＬＤＲまたはストア命令ＳＴＲ）が実行されるか否かを判定する。例えば、メモリアクセス情報ＭＡがメモリ２０にアクセスする命令の実行を示す場合、処理はステップＳ２０４に移行され、メモリアクセス情報ＭＡがメモリ２０にアクセスする命令の非実行を示す場合、処理はステップＳ２１６に移行される。
【００６２】
ステップＳ２０４において、データ出力部ＤＯＵＴは、ストアロード情報Ｓ／Ｌの論理レベルに基づいてロード命令ＬＤＲが実行されるか否かを判定する。ロード命令ＬＤＲが実行される場合、処理はステップＳ２０６に移行され、ロード命令ＬＤＲが実行されない場合、ストア命令ＳＴＲが実行されるため、処理はステップＳ２０８に移行される。
【００６３】
ステップＳ２０６において、データ出力部ＤＯＵＴは、レジスタＲＥＧにロードしたデータ（データ情報ＤＴ）をトレース情報ＴＲＩとして出力する。ステップＳ２０６の後、処理はステップＳ２１２に移行される。ロード命令ＬＤＲによりメモリ２０から読み出され、レジスタＲＥＧに格納されるデータは、演算部ＯＰＵが実行する命令が記述されたプログラム（例えば、図２に示すソースプログラム）から再現することが困難である。すなわち、演算部ＯＰＵにより既に実行された命令をたどることでは再現が困難なデータをトレース情報ＴＲＩとして出力することで、図１２に示すように、演算部ＯＰＵ（すなわち、プロセッサ１０）により実行された命令の履歴を正しく生成することができる。
【００６４】
一方、ストア命令ＳＴＲが実行される場合、ステップＳ２０８において、データ出力部ＤＯＵＴは、メモリ２０に書き込むデータを格納したレジスタＲＥＧに対応するフラグＦＬＧが”０”か否かを判定する。メモリ２０に書き込むデータを格納するレジスタＲＥＧに対応するフラグＦＬＧが”０”の場合、処理はステップＳ２１０に移行され、メモリ２０に書き込むデータを格納するレジスタＲＥＧに対応するフラグＦＬＧが”０”でない場合、処理はステップＳ２１２に移行される。
【００６５】
ステップＳ２１０において、データ出力部ＤＯＵＴは、メモリ２０に書き込むデータ（データ情報ＤＴ）をトレース情報ＴＲＩとして出力する。この後、処理はステップＳ２１２に移行される。”０”に設定されたフラグＦＬＧに対応するレジスタＲＥＧに保持され、ストア命令ＳＴＲによりメモリ２０に書き込まれるデータは、演算部ＯＰＵが実行する命令が記述されたプログラムから再現することが困難である。すなわち、演算部ＯＰＵにより既に実行された命令をたどることでは再現が困難なデータをトレース情報ＴＲＩとして出力することで、図１２に示すように、演算部ＯＰＵ（すなわち、プロセッサ１０）により実行された命令の履歴を正しく生成することができる。
【００６６】
ステップＳ２１２において、アドレス出力部ＡＯＵＴは、アドレスを格納するレジスタＲＥＧに対応するフラグＦＬＧが”０”か否かを判定する。アドレスを格納するレジスタＲＥＧに対応するフラグＦＬＧが”０”の場合、処理はステップＳ２１４に移行され、アドレスを格納するレジスタＲＥＧに対応するフラグＦＬＧが”０”でない場合、処理はステップＳ２１６に移行される。
【００６７】
ステップＳ２１４において、アドレス出力部ＡＯＵＴは、レジスタＲＥＧに格納されるアドレス（アドレス情報ＡＤ）をトレース情報ＴＲＩとして出力する。”０”に設定されたフラグＦＬＧに対応するレジスタＲＥＧに保持され、メモリ２０のアクセスに使用されるアドレスは、演算部ＯＰＵが実行する命令が記述されたプログラムから再現することが困難である。すなわち、演算部ＯＰＵにより既に実行された命令をたどることでは再現が困難なアドレスをトレース情報ＴＲＩとして出力することで、図１２に示すように、演算部ＯＰＵ（すなわち、プロセッサ１０）により実行された命令の履歴を正しく生成することができる。
【００６８】
ステップＳ２１６において、命令トレース生成部ＩＴＧＥＮは、演算部ＯＰＵから出力される実行情報ＥＸＥ（”Ｅ”または”Ｎ”）をトレース情報ＴＲＩとしてトレースバッファ６０に出力する。
【００６９】
図８は、図２に示したプロセッサ１０が実行するプログラムの記述の例を示す。この例では、１番地から１６番地に１６個の命令が記述される。プログラム中の符号ｒ０、ｒ１、ｒ２、ｒ３、ｒ４は、それぞれレジスタＲＥＧを示し、符号＃に続く数値は即値を示す。かぎ括弧で囲まれたレジスタは、レジスタに格納された値をアドレスとして使用することを示す（レジスタ間接）。
【００７０】
１番地の転送命令ＭＯＶでは、レジスタＲ０に即値１０００が格納される。２番地のロード命令ＬＤＲでは、レジスタｒ０に格納されたアドレスが示すメモリ２０の記憶領域から読み出した値がレジスタｒ２に格納される。３番地の転送命令ＭＯＶでは、レジスタｒ１に即値１００が格納される。４番地のストア命令ＳＴＲでは、レジスタｒ１に格納された値が、レジスタｒ２に格納されたアドレスが示すメモリ２０の記憶領域に書き込まれる。５番目の転送命令ＭＯＶでは、レジスタＲ２に即値２が格納される。
【００７１】
６番地の減算命令ＳＵＢでは、レジスタｒ０の値からレジスタｒ１の値を引いた値がレジスタｒ０に格納される。７番地の乗算命令ＭＵＬでは、レジスタｒ０の値を３倍した値がレジスタｒ３に格納される。８番地のロード命令ＬＤＲでは、レジスタｒ０に格納されたアドレスが示すメモリ２０の記憶領域から読み出した値がレジスタｒ４に格納される。９番地のストア命令ＳＴＲでは、レジスタｒ２に格納された値が、レジスタｒ３に格納されたアドレスが示すメモリ２０の記憶領域に書き込まれる。１０番地の減算命令ＳＵＢでは、レジスタｒ２の値から”１”を引いた値がレジスタｒ２に格納される。
【００７２】
１１番地の比較命令ＣＭＰでは、レジスタｒ２に格納された値と”０”とが比較される。１２番地の分岐命令ＢＮＥでは、レジスタｒ２の値が”０”でない場合、６番地に分岐される。すなわち、１０番地の減算命令ＳＵＢでカウンタとして機能するレジスタｒ２の値が”０”より大きい間、６番地から１２番地の命令が繰り返される。
【００７３】
１３番地の加算命令ＡＤＤでは、レジスタｒ０の値とレジスタｒ３の値とを加算した値がレジスタｒ０に格納される。１４番地のロード命令ＬＤＲでは、レジスタｒ０に格納されたアドレスが示すメモリ２０の記憶領域から読み出した値がレジスタｒ２に格納される。１５番地のストア命令ＳＴＲでは、レジスタｒ２に格納された値が、レジスタｒ３に格納されたアドレスが示すメモリ２０の記憶領域に書き込まれる。１６番地の加算命令ＡＤＤでは、レジスタｒ２の値とレジスタｒ０の値とを加算した値がレジスタｒ３に格納される。
【００７４】
図９は、図８に示したプログラムをプロセッサ１０が実行する場合における半導体装置ＳＥＭ２の動作の例を示す。図９では、レジスタＲＥＧとフラグＦＬＧのペアをレジスタｒ０、ｒ１、ｒ２、ｒ３、ｒ４として示す。命令の前に括弧で示した数値は、命令が格納された番地を示す。白抜きの矢印は、命令がプロセッサ１０により実行されることを示す。レジスタＲＥＧの下側に付した矢印は、トレース制御部５０から出力されるトレース情報ＴＲＩを示す。
【００７５】
フラグＦＬＧに示した”−”は、レジスタＲＥＧに値が格納されていない無効状態を示す。なお、値が格納されていないレジスタＲＥＧに対応するフラグＦＬＧは、”０”に設定されてもよい。また、各フラグＦＬＧを２ビットとし、フラグＦＬＧが有効であるか無効であるかの情報を上位ビットに設定し、図４に示した”０”、”１”を下位ビットに設定してもよい。この場合、フラグＦＬＧの”１０”は、プロセッサ１０により既に実行された命令をたどることではレジスタＲＥＧに格納された値を再現することが困難なことを示す。フラグＦＬＧの”１１”は、プロセッサ１０により既に実行された命令をたどることでレジスタＲＥＧに格納された値を再現可能なことを示す。フラグＦＬＧの”１０”は、第１の値の一例であり、フラグＦＬＧの”１１”は、第２の値の一例である。
【００７６】
まず、１番地の転送命令ＭＯＶの実行によるレジスタｒ０への即値１０００の格納は、図４に示した条件Ａに該当するため、フラグ制御部ＦＣＮＴは、レジスタｒ０のフラグＦＬＧを”１”に設定する。図７に示したステップＳ２０２の判定は、”偽（Ｎｏ）”であるため、トレース制御部５０は、命令の実行を示す実行情報ＥＸＥ（”Ｅ”）をトレース情報ＴＲＩとして出力する（図９（ａ））。
【００７７】
２番地のロード命令ＬＤＲの実行によるレジスタｒ２への”５００”の格納は、図４に示した条件Ｄに該当するため、フラグ制御部ＦＣＮＴは、レジスタｒ２のフラグＦＬＧを”０”に設定する。図７に示したステップＳ２０２、Ｓ２０４の判定は、ともに”真（Ｙｅｓ）”である。このため、トレース制御部５０は、命令の実行を示す実行情報ＥＸＥ（”Ｅ”）とともに、メモリ２０から読み出したデータ（５００）を示すデータ情報ＤＴをトレース情報ＴＲＩとして出力する（図９（ｂ））。
【００７８】
一方、図７に示したステップＳ２１２の判定は、”偽（Ｎｏ）”であるため、トレース制御部５０は、レジスタｒ０に格納されたアドレス情報ＡＤ（１０００）のトレース情報ＴＲＩとしての出力を禁止する。なお、２番地のロード命令ＬＤＲにおいて、レジスタｒ０のフラグＦＬＧが”０”の場合、図７に示したステップＳ２１２の判定は、”真（Ｙｅｓ）”となる。この場合、レジスタｒ０に格納されたアドレス情報ＡＤ（１０００）も、トレース情報ＴＲＩとして出力される。
【００７９】
３番地の転送命令ＭＯＶでは、１番地の転送命令ＭＯＶと同様に、フラグ制御部ＦＣＮＴは、レジスタｒ１のフラグＦＬＧを”１”に設定し、トレース制御部５０は、実行情報ＥＸＥ（”Ｅ”）をトレース情報ＴＲＩとして出力する（図９（ｃ））。
【００８０】
４番地のストア命令ＳＴＲの実行によるレジスタｒ２の値のメモリ２０への書き込みは、条件Ｅに該当するため、フラグ制御部ＦＣＮＴは、フラグＦＬＧを書き替えず、図７に示したステップＳ２０８の判定は”偽（Ｎｏ）”である。このため、トレース制御部５０は、メモリ２０に書き込んだデータ（１００）を示すデータ情報ＤＴのトレース情報ＴＲＩとしての出力を禁止する。一方、図７に示したステップＳ２１２の判定は”真（Ｙｅｓ）”であるため、トレース制御部５０は、データの書き込み先のアドレス情報ＡＤ（５００）を、実行情報ＥＸＥ（”Ｅ”）とともにトレース情報ＴＲＩとして出力する（図９（ｄ））。
【００８１】
５番目の転送命令ＭＯＶでは、フラグ制御部ＦＣＮＴおよびトレース制御部５０は、１番地の転送命令ＭＯＶと同様に動作する。そして、実行情報ＥＸＥ（”Ｅ”）がトレース情報ＴＲＩとして出力される（図９（ｅ））。
【００８２】
６番地の減算命令ＳＵＢの実行により使用されるレジスタｒ０、ｒ１のフラグＦＬＧは、”１”に設定されており、図４に示した条件Ｂに該当する。このため、フラグ制御部ＦＣＮＴは、演算結果を格納するレジスタｒ０のフラグＦＬＧを”１”に設定する。なお、フラグ制御部ＦＣＮＴは、フラグＦＬＧに設定された値と、フラグＦＬＧを書き替える値が同じ場合、フラグＦＬＧの書き替え動作を禁止してもよい。図７に示したステップＳ２０２の判定は、”偽（Ｎｏ）”であるため、トレース制御部５０は、実行情報ＥＸＥ（”Ｅ”）をトレース情報ＴＲＩとして出力する（図９（ｆ））。
【００８３】
７番地の乗算命令ＭＵＬの実行により使用されるレジスタｒ０のフラグＦＬＧは、”１”に設定されており、図４に示した条件Ｂに該当する。このため、フラグ制御部ＦＣＮＴは、演算結果を格納するレジスタｒ３のフラグＦＬＧを”１”に設定する。図７に示したステップＳ２０２の判定は、”偽（Ｎｏ）”であるため、トレース制御部５０は、実行情報ＥＸＥ（”Ｅ”）をトレース情報ＴＲＩとして出力する（図９（ｇ））。
【００８４】
８番地のロード命令ＬＤＲの実行によるレジスタｒ４への”１０１０１”の格納は、図４に示した条件Ｄに該当するため、フラグ制御部ＦＣＮＴは、レジスタｒ４のフラグＦＬＧを”０”に設定する。図７に示したステップＳ２０２、Ｓ２０４の判定は、ともに”真（Ｙｅｓ）”である。このため、トレース制御部５０は、メモリ２０から読み出したデータ（１０１０１）を示すデータ情報ＤＴを、実行情報ＥＸＥ（”Ｅ”）とともにトレース情報ＴＲＩとして出力する（図９（ｈ））。
【００８５】
９番地のストア命令ＳＴＲの実行によるレジスタｒ２の値のメモリ２０への書き込みは、条件Ｅに該当するため、フラグ制御部ＦＣＮＴは、フラグＦＬＧの書き替えをしない。図７に示したステップＳ２０２の判定は、”真（Ｙｅｓ）”であり、ステップＳ２０４の判定は、”偽（Ｎｏ）”であり、ステップＳ２０８の判定は、”偽（Ｎｏ）”である。このため、トレース制御部５０は、メモリ２０に書き込んだデータ（１００）を示すデータ情報ＤＴのトレース情報ＴＲＩとしての出力を禁止する。また、図７に示したステップＳ２１２の判定は”偽（Ｎｏ）”であるため、トレース制御部５０は、データの書き込み先のアドレス情報ＡＤ（５００）のトレース情報ＴＲＩとしての出力を禁止する。これにより、実行情報ＥＸＥ（”Ｅ”）がトレース情報ＴＲＩとして出力される（図９（ｉ））。
【００８６】
１０番地の減算命令ＳＵＢでは、フラグ制御部ＦＣＮＴおよびトレース制御部５０は、６番地の減算命令ＳＵＢと同様に動作する。そして、実行情報ＥＸＥ（”Ｅ”）がトレース情報ＴＲＩとして出力される（図９（ｊ））。
【００８７】
１１番地の比較命令ＣＭＰは、条件Ｅに該当するため、フラグ制御部ＦＣＮＴは、フラグＦＬＧの書き替えをしない。図７に示したステップＳ２０２の判定は、”偽（Ｎｏ）”であるため、トレース制御部５０は、実行情報ＥＸＥ（”Ｅ”）をトレース情報ＴＲＩとして出力する（図９（ｋ））。
【００８８】
１２番地の分岐命令ＢＮＥは、条件Ｅに該当するため、フラグ制御部ＦＣＮＴは、フラグＦＬＧの書き替えをしない。図７に示したステップＳ２０２の判定は、”偽（Ｎｏ）”である。また、レジスタｒ２の値は”０”でないため、分岐命令ＢＮＥによる条件が成立し、トレース制御部５０は、実行情報ＥＸＥ（”Ｅ”）をトレース情報ＴＲＩとして出力する（図９（ｌ））。
【００８９】
以降、６番地から１１番地の命令が再び実行され、フラグ制御部ＦＣＮＴおよびトレース制御部５０は、図９（ｆ）、（ｇ）、（ｈ）、（ｉ）、（ｊ）、（ｋ）に示した動作と同様に動作する（図９（ｍ）、（ｎ）、（ｏ）、（ｐ）、（ｑ）、（ｒ））。
【００９０】
２回目の１２番地の分岐命令ＢＮＥは、条件Ｅに該当するため、フラグ制御部ＦＣＮＴは、フラグＦＬＧの書き替えをしない。図７に示したステップＳ２０２の判定は、”偽（Ｎｏ）”である。また、レジスタｒ２の値は”０”であり、分岐命令ＢＮＥによる条件が成立しないため、トレース制御部５０は、実行情報ＥＸＥ（”Ｎ”）をトレース情報ＴＲＩとして出力する（図９（ｓ））。
【００９１】
１３番地の加算命令ＡＤＤの実行により使用されるレジスタｒ０、ｒ３のフラグＦＬＧは、”１”に設定されており、図４に示した条件Ｂに該当する。このため、フラグ制御部ＦＣＮＴは、演算結果を格納するレジスタｒ０のフラグＦＬＧを”１”に設定する。図７に示したステップＳ２０２の判定は、”偽（Ｎｏ）”であるため、トレース制御部５０は、実行情報ＥＸＥ（”Ｅ”）をトレース情報ＴＲＩとして出力する（図９（ｔ））。
【００９２】
１４番地のロード命令ＬＤＲの実行によるレジスタｒ２への”３０３０３”の格納は、図４に示した条件Ｄに該当するため、フラグ制御部ＦＣＮＴは、レジスタｒ２のフラグＦＬＧを”０”に設定する。図７に示したステップＳ２０２、Ｓ２０４の判定は、ともに”真（Ｙｅｓ）”である。このため、トレース制御部５０は、メモリ２０から読み出したデータ（３０３０３）を示すデータ情報ＤＴを、実行情報ＥＸＥ（”Ｅ”）とともにトレース情報ＴＲＩとして出力する（図９（ｕ））。
【００９３】
１５番地のストア命令ＳＴＲの実行によるレジスタｒ２の値のメモリ２０への書き込みは、条件Ｅに該当するため、フラグ制御部ＦＣＮＴは、フラグＦＬＧの書き替えをしない。図７に示したステップＳ２０２の判定は、”真（Ｙｅｓ）”であり、ステップＳ２０４の判定は、”偽（Ｎｏ）”であり、ステップＳ２０８の判定は、”真（Ｙｅｓ）”である。このため、トレース制御部５０は、メモリ２０に書き込んだデータ（３０３０３）を示すデータ情報ＤＴを実行情報ＥＸＥ（”Ｅ”）とともにトレース情報ＴＲＩとして出力する（図９（ｖ））。一方、図７に示したステップＳ２１２の判定は”偽（Ｎｏ）”であるため、トレース制御部５０は、データの書き込み先のアドレス情報ＡＤ（２４００）のトレース情報ＴＲＩとしての出力を禁止する。
【００９４】
１６番地の加算命令ＡＤＤの実行により使用されるレジスタｒ２のフラグＦＬＧは、”０”に設定されており、図４に示した条件Ｃに該当する。このため、フラグ制御部ＦＣＮＴは、演算結果を格納するレジスタｒ３のフラグＦＬＧを”０”に設定する。図７に示したステップＳ２０２の判定は、”偽（Ｎｏ）”であるため、トレース制御部５０は、実行情報ＥＸＥ（”Ｅ”）をトレース情報ＴＲＩとして出力する（図９（ｗ））。
【００９５】
図１０は、図８に示したプログラムをプロセッサ１０が実行する場合に出力されるトレース情報ＴＲＩの例を示す。実行される命令と、命令の実行により更新されるレジスタＲＥＧおよびフラグＦＬＧと、トレース制御部５０から出力されるトレース情報ＴＲＩは、図９と同じである。なお、図１０では、レジスタｒ０に対応するフラグＦＬＧを符号ｆｒ０で示し、レジスタｒ１に対応するフラグＦＬＧを符号ｆｒ１で示す。レジスタｒ２に対応するフラグＦＬＧを符号ｆｒ２で示し、レジスタｒ３に対応するフラグＦＬＧを符号ｆｒ３で示し、レジスタｒ４に対応するフラグＦＬＧを符号ｆｒ４で示す。
【００９６】
図１０の右端に大きいかぎ括弧で示したトレース情報は、図６に示したデータトレース生成部ＤＴＧＥＮを持たないトレース制御部が出力するトレース情報ＴＲＩの例を示す。データトレース生成部ＤＴＧＥＮがない場合、ロード命令およびストア命令において、プロセッサ１０とメモリ２０との間で授受される全てのアドレス情報ＡＤおよびデータ情報ＤＴが、トレース情報ＴＲＩとして出力される。これに対して、データトレース生成部ＤＴＧＥＮを持つトレース制御部５０では、プロセッサ１０により既に実行された命令をたどることにより復元可能なデータ情報ＤＴおよびアドレス情報ＡＤは、トレース情報ＴＲＩとしての出力が禁止される。
【００９７】
これにより、トレース情報ＴＲＩとしてトレースバッファ６０に転送する情報量を、データトレース生成部ＤＴＧＥＮがない場合に比べて削減できる。例えば、図１０では、トレース情報ＴＲＩとして出力するデータ情報ＤＴおよびアドレス情報ＡＤは、１６個から６個に減らすことができる（６２．５％の削減効果）。この結果、プロセッサ１０による命令の実行を中断することなく、トレース情報ＴＲＩをリアルタイムでトレースバッファ６０に転送できるトレース情報線ＴＲＩのビット幅を、データトレース生成部ＤＴＧＥＮがない場合に比べて小さくすることができる。換言すれば、半導体装置ＳＥＭ２において、トレース情報ＴＲＩを出力する端子の数をデータトレース生成部ＤＴＧＥＮがない場合に比べて減らすことができ、半導体装置ＳＥＭ２のチップサイズを削減することができる。さらに、トレース情報ＴＲＩとして保持する情報量が削減できるため、トレースバッファ６０の記憶容量を減らすことができる。この結果、半導体装置ＳＥＭ２の製造コストを削減することができ、トレース機能を有するデバッグ基板ＤＢＧＢのコストを削減することができる。
【００９８】
一方、トレース情報線ＴＲＩのビット幅を小さくしない場合、リアルタイムでトレース可能な命令数を従来に比べて増やすことができる。したがって、プロセッサ１０の動作周波数が高くなる場合にも、プロセッサ１０が実行する命令に同期してリアルタイムでトレース情報ＴＲＩを出力することができ、半導体装置ＳＥＭ２が搭載されるシステムのデバッグ性能を向上することができる。
【００９９】
図１１は、図２に示したエミュレータ１００の動作の例を示す。すなわち、図１１は、トレースバッファ６０に格納されたトレース情報ＴＲＩに基づいて、プロセッサ１０により実行された命令の実行履歴をエミュレータ１００により再現する例を示す。エミュレータ１００は、図２に示したプログラムを実行することで、図１１に示す動作を実現する。
【０１００】
まず、ステップＳ３００において、エミュレータ１００は、図２に示した記憶装置１３０に格納されたソースプログラムから１つの番地に対応する命令を読み出す。次に、ステップＳ３０２において、エミュレータ１００は、ステップＳ３００で読み出した命令に対応するトレース情報ＴＲＩをトレースバッファ６０から読み出す。なお、エミュレータ１００は、トレース情報ＴＲＩに含まれる実行情報ＥＸＥ（”Ｅ”）の数をカウントすることにより、読み出す命令と読み出すトレース情報ＴＲＩとを一致させる。また、エミュレータ１００は、トレース情報ＴＲＩに含まれる実行情報ＥＸＥ（”Ｎ”）を検出することにより、分岐命令後の分岐先を判定する。
【０１０１】
次に、ステップＳ３０４において、エミュレータ１００は、読み出したトレース情報ＴＲＩにデータ情報ＤＴまたはアドレス情報ＡＤの少なくともいずれかが含まれるか否かを判定する。読み出したトレース情報ＴＲＩにデータ情報ＤＴまたはアドレス情報ＡＤの少なくともいずれかが含まれる場合、処理はステップＳ３０６に移行される。読み出したトレース情報ＴＲＩにデータ情報ＤＴおよびアドレス情報ＡＤが含まれない場合、処理はステップＳ３０８に移行される。
【０１０２】
ステップＳ３０６において、エミュレータ１００は、トレース情報ＴＲＩを用いて、プロセッサ１０の実行により変化したレジスタＲＥＧの値の一部と、メモリ２０のアクセスに使用したデータおよびアドレスとの一部を再現する。ここで、トレース情報ＴＲＩは、データ情報ＤＴまたはアドレス情報ＡＤの一方、あるいはデータ情報ＤＴまたはアドレス情報ＡＤの両方を含む。例えば、図１０に示した２番地のロード命令ＬＤＲでは、レジスタｒ２に格納されるデータ”５００”が再現され、４番地のストア命令ＳＴＲでは、データを書き込むメモリ２０のアドレス”５００”が再現される。図１０に示した１５番地のストア命令ＳＴＲでは、メモリ２０に書き込むデータ”３０３０３”が再現される。
【０１０３】
ステップＳ３０８において、エミュレータ１００は、既に再現した情報からプロセッサ１０による命令の実行により変化したレジスタＲＥＧの値およびフラグＦＬＧの値と、メモリ２０のアクセスに使用したデータおよびアドレスを再現する。
【０１０４】
次に、ステップＳ３１０において、エミュレータ１００は、プロセッサ１０により実行された全ての命令が再現されたか否かを判定する。プロセッサ１０により実行された全ての命令が再現された場合、プロセッサ１０が実行した命令の再現処理は終了する。プロセッサ１０により実行された全ての命令が再現されていない場合、処理はステップＳ３１２に移行される。なお、所定の範囲の命令列の再現が図２に示した入力装置１１０を介して指定された場合、エミュレータ１００は、ステップＳ３１０において、所定の範囲の命令列が再現されたか否かを判定する。
【０１０５】
ステップＳ３１２において、再現した命令が分岐命令であるか否かを判定する。再現した命令が分岐命令である場合、処理はステップＳ３１４に移行され、再現した命令が分岐命令でない場合、処理はステップＳ３１８に移行される。
【０１０６】
ステップＳ３１４において、エミュレータ１００は、分岐命令で条件が成立したか否かを判定する。分岐命令で条件が成立した場合、処理はステップＳ３１６に移行され、分岐命令で条件が成立しない場合、処理はステップＳ３１８に移行される。例えば、図１０に示した１回目の分岐命令ＢＮＥでは、条件が成立するため（レジスタｒ２の値が”０”でない）、処理がステップＳ３１６に移行する。図１０に示した２回目の分岐命令ＢＮＥでは、条件が成立しないため（レジスタｒ２の値が”０”）、処理はステップＳ３１８に移行する。
【０１０７】
ステップＳ３１６において、エミュレータ１００は、次に再現する命令の番地を分岐先の番地に変更し、処理をステップＳ３００に戻す。ステップＳ３１８において、エミュレータ１００は、今回命令を再現した番地をインクリメントして、次に再現する命令の番地を求め、処理をステップＳ３００に戻す。
【０１０８】
図１２は、図１１に示したエミュレータ１００の動作により復元されたプロセッサ１０の実行履歴の例を示す。例えば、図１２に示す実行履歴は、エミュレータ１００により、出力装置１２０である表示装置またはプリンタに出力される。なお、図１２において、下線を付した数値は、トレース情報ＴＲＩから再現された情報を示す。実際の実行履歴では、数値に下線は付かない。
【０１０９】
実行履歴では、プロセッサ１０により実行された命令と番地とが、符号Ｃｏｄｅと符号ＰＣとで示される。各命令の実行後のレジスタＲＥＧ（ｒ０、ｒ１、ｒ２、ｒ３、ｒ４）の値と、フラグＦＬＧ（ｆｒ０、ｆｒ１、ｆｒ２、ｆｒ３、ｆｒ４）の値が符号Ｒｅｇｉｓｔｅｒｓとして示される。ロード命令ＬＤＲの実行によりメモリ２０に出力されたアドレスと、メモリ２０から読み出されたデータとが、アドレス情報ＡＤおよびデータ情報ＤＴとして符号Ｍｅｍｏｒｙ  Ａｃｃｅｓｓの符号Ｒｅａｄの領域に示される。ストア命令ＳＴＲの実行によりメモリ２０に出力されたアドレスおよびデータが、アドレス情報ＡＤおよびデータ情報ＤＴとして符号Ｍｅｍｏｒｙ  Ａｃｃｅｓｓの符号Ｗｒｉｔｅの領域に示される。
【０１１０】
以上、図２から図１２に示した実施形態においても、図１に示した実施形態と同様に、トレース情報ＴＲＩを出力する端子の数を削減することができ、半導体装置ＳＥＭ２の規模を削減することができる。また、トレースバッファ６０の記憶容量を従来に比べて削減することができ、半導体装置ＳＥＭ１が搭載されるシステムの規模を削減することができ、システムコストの削減に寄与することができる。さらに、トレース情報ＴＲＩを出力するために半導体装置ＳＥＭ２に設けられる端子の数を削減しない場合、演算部ＯＰＵの動作とともにリアルタイムでトレース可能な命令数を従来に比べて増やすことができる。すなわち、演算部ＯＰＵの動作周波数が高くなる場合にも、演算部ＯＰＵが実行する命令に同期してリアルタイムでトレース情報ＴＲＩを出力することができ、半導体装置ＳＥＭ２が搭載されるデバッグシステムＤＢＧＳＹＳのデバッグ性能を向上することができる。
【０１１１】
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
【符号の説明】
【０１１２】
１０…プロセッサ；２０…メモリ；３０…周辺回路；４０…ユーザロジック；５０…トレース制御部；１００…エミュレータ；１１０…入力装置；１２０…出力装置；１３０…記憶装置；ＡＢ…アドレスバス；ＡＤ…アドレス情報；ＡＦＬＧ…アドレスフラグ信号；ＡＮＤ…アンド回路；ＡＯＵＴ…アドレス出力部；ＤＢ…データバス；ＤＢＧＢ…デバッグ基板；ＤＢＧＳＹＳ…デバッグシステム；ＤＦＬＧ…データフラグ信号；ＤＩＳ…ディセーブル端子；ＤＯＵＴ…データ出力部；ＤＴ…データ情報；ＤＴＧＥＮ…データトレース生成部；ＥＬＩＳＴ…実行履歴；ＥＭＬ…エミュレータ；ＥＮ…イネーブル端子；ＥＸＥ…実行情報；ＦＣＮＴ…フラグ制御部；ＦＬＧ…フラグ；ＦＷＲ…フラグ書き替え線；ＩＤ…命令デコーダ；ＩＦＵ…命令フェッチ部；ＩＮＣ…インクリメンタ；ＩＮＳ…命令；ＩＴＧＥＮ…命令トレース生成部；ＬＳＵ…ロード／ストア部；ＭＡ…メモリアクセス情報；ＭＥＭ…メモリ；ＭＵ…記憶部；ＯＰ…演算器；ＯＰＵ…演算部；ＰＣ…プログラムカウンタ；ＲＥＧ…レジスタ；ＲＥＧＵ…レジスタ部；ＳＢＵＳ…システムバス；ＳＥＬ…セレクタ；ＳＥＭ１、ＳＥＭ２…半導体装置；Ｓ／Ｌ…ストアロード情報；ＳＰＧＭ…ソースプログラム；ＴＣＮＴ…トレース制御部
【図１】
2015072551.tif 000003
【図２】
2015072551.tif 000004
【図３】
2015072551.tif 000005
【図４】
2015072551.tif 000006
【図５】
2015072551.tif 000007
【図６】
2015072551.tif 000008
【図７】
2015072551.tif 000009
【図８】
2015072551.tif 000010
【図９】
2015072551.tif 000011
【図１０】
2015072551.tif 000012
【図１１】
2015072551.tif 000013
【図１２】
2015072551.tif 000014