特許第6127883号(P6127883)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社ソシオネクストの特許一覧

特許6127883半導体装置および半導体装置の動作制御方法
<>
  • 特許6127883-半導体装置および半導体装置の動作制御方法 図000002
  • 特許6127883-半導体装置および半導体装置の動作制御方法 図000003
  • 特許6127883-半導体装置および半導体装置の動作制御方法 図000004
  • 特許6127883-半導体装置および半導体装置の動作制御方法 図000005
  • 特許6127883-半導体装置および半導体装置の動作制御方法 図000006
  • 特許6127883-半導体装置および半導体装置の動作制御方法 図000007
  • 特許6127883-半導体装置および半導体装置の動作制御方法 図000008
  • 特許6127883-半導体装置および半導体装置の動作制御方法 図000009
  • 特許6127883-半導体装置および半導体装置の動作制御方法 図000010
  • 特許6127883-半導体装置および半導体装置の動作制御方法 図000011
  • 特許6127883-半導体装置および半導体装置の動作制御方法 図000012
  • 特許6127883-半導体装置および半導体装置の動作制御方法 図000013
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6127883
(24)【登録日】2017年4月21日
(45)【発行日】2017年5月17日
(54)【発明の名称】半導体装置および半導体装置の動作制御方法
(51)【国際特許分類】
   G06F 11/36 20060101AFI20170508BHJP
【FI】
   G06F11/36 136
【請求項の数】11
【全頁数】23
(21)【出願番号】特願2013-207171(P2013-207171)
(22)【出願日】2013年10月2日
(65)【公開番号】特開2015-72551(P2015-72551A)
(43)【公開日】2015年4月16日
【審査請求日】2016年4月26日
(73)【特許権者】
【識別番号】514315159
【氏名又は名称】株式会社ソシオネクスト
(74)【代理人】
【識別番号】100072718
【弁理士】
【氏名又は名称】古谷 史旺
(74)【代理人】
【識別番号】100116001
【弁理士】
【氏名又は名称】森 俊秀
(72)【発明者】
【氏名】松田 稔彦
(72)【発明者】
【氏名】松本 康秀
(72)【発明者】
【氏名】平田 卓也
(72)【発明者】
【氏名】高木 広幸
【審査官】 多賀 実
(56)【参考文献】
【文献】 特開昭52−109845(JP,A)
【文献】 特開平3−158937(JP,A)
【文献】 特開2004−038981(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F11/07
G06F11/28−11/36
(57)【特許請求の範囲】
【請求項1】
命令を実行する演算部と、
前記演算部で使用する情報を保持するレジスタと、
前記レジスタに対応して設けられ、第1の値または第2の値に設定されるフラグを保持する記憶部と、
前記演算部により実行された命令に基づいて前記レジスタに格納された情報を再現することが困難な場合に前記フラグを前記第1の値に設定し、前記演算部により実行された命令に基づいて前記レジスタに格納された情報を再現可能な場合に前記フラグを前記第2の値に設定するフラグ制御部と、
メモリにアクセスする命令が前記演算部により実行される場合に、前記メモリのアクセスに使用される値であって、前記第1の値に設定された前記フラグに対応する前記レジスタに格納された値をトレース情報として出力するトレース制御部
を備えることを特徴とする半導体装置。
【請求項2】
前記トレース制御部は、前記第1の値に設定された前記フラグに対応する前記レジスタに格納されたデータをメモリに書き込む命令が前記演算部により実行される場合に、前記メモリに書き込むデータをトレース情報として出力するデータ出力部を備えること
を特徴とする請求項1記載の半導体装置。
【請求項3】
前記データ出力部は、前記メモリから読み出したデータを前記レジスタに格納する命令が前記演算部により実行される場合に、前記レジスタに格納するデータを前記トレース情報として出力すること
を特徴とする請求項2記載の半導体装置。
【請求項4】
前記データ出力部は、前記第2の値に設定された前記フラグに対応する前記レジスタに格納されたデータを前記メモリに書き込む命令が前記演算部により実行される場合に、前記メモリに書き込むデータの前記トレース情報としての出力を禁止するマスク部を備えること
を特徴とする請求項2または請求項3記載の半導体装置。
【請求項5】
前記トレース制御部は、前記第1の値に設定された前記フラグに対応する前記レジスタに格納されたアドレスが示す前記メモリの記憶領域にアクセスする命令が前記演算部により実行される場合に、前記レジスタに格納されたアドレスを前記トレース情報として出力するアドレス出力部を備えること
を特徴とする請求項1ないし請求項4のいずれか1項記載の半導体装置。
【請求項6】
前記アドレス出力部は、前記第2の値に設定された前記フラグに対応する前記レジスタに格納されたアドレスが示す前記メモリの記憶領域にアクセスする命令が前記演算部により実行される場合に、前記レジスタに格納されたアドレスの前記トレース情報としての出力を禁止するマスク部を備えること
を特徴とする請求項5項記載の半導体装置。
【請求項7】
前記フラグ制御部は、前記第1の値に設定された前記フラグに対応する前記レジスタの少なくとも1つを使用した演算命令が前記演算部により実行される場合に、演算結果が格納される前記レジスタに対応する前記フラグを前記第1の値に設定すること
を特徴とする請求項1ないし請求項6のいずれか1項記載の半導体装置。
【請求項8】
前記フラグ制御部は、前記メモリからデータを読み出す命令が前記演算部により実行される場合に、前記メモリから読み出したデータが格納される前記レジスタに対応する前記フラグを前記第1の値に設定すること
を特徴とする請求項1ないし請求項7のいずれか1項記載の半導体装置。
【請求項9】
前記フラグ制御部は、即値を前記レジスタに格納する命令が前記演算部により実行される場合に、即値が格納される前記レジスタに対応する前記フラグを前記第2の値に設定すること
を特徴とする請求項1ないし請求項8のいずれか1項記載の半導体装置。
【請求項10】
前記フラグ制御部は、前記第2の値に設定された前記フラグに対応する前記レジスタを使用した演算命令が前記演算部により実行される場合に、演算結果が格納される前記レジスタに対応する前記フラグを前記第2の値に設定すること
を特徴とする請求項1ないし請求項9のいずれか1項記載の半導体装置。
【請求項11】
命令を実行する演算部と、前記演算部で使用する情報を保持するレジスタとを備える半導体装置の動作制御方法であって、
前記レジスタに対応して設けられる記憶部のフラグを、前記演算部による命令の実行結果に応じて、前記演算部により実行された命令に基づいて前記レジスタに格納された情報を再現することが困難な場合に第1の値に設定し、前記演算部により実行された命令に基づいて前記レジスタに格納された情報を再現可能な場合に第2の値に設定し、
メモリにアクセスする命令が前記演算部により実行される場合に、前記メモリのアクセスに使用される値であって、前記第1の値に設定された前記フラグに対応する前記レジスタに格納された値をトレース情報として出力すること
を特徴とする半導体装置の動作制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、半導体装置および半導体装置の動作制御方法に関する。
【背景技術】
【0002】
プロセッサを含むシステム装置の開発では、プロセッサが実行するプログラムの実行結果がトレースされ、トレースされた情報は、トレースバッファに格納される。そして、トレースバッファに格納された情報に基づいてプログラムの実行結果がエミュレータ機能を用いて再現され、プログラムおよびシステム装置のデバッグを実施する手法が有用である。
【0003】
例えば、同じトレース情報が繰り返し生成される場合、冗長なトレース情報の生成を回避することで、トレースバッファに格納されるトレース情報の量は削減される(例えば、特許文献1参照)。また、アドレスが即値で指定されるコール命令やジャンプ命令等のトレース情報を生成しないことで、トレースバッファに格納されるトレース情報の量は削減される(例えば、特許文献2参照)。さらに、所望のトレース情報を選択的にトレースバッファに格納することで、トレースバッファに格納されるトレース情報の量は削減される(例えば、特許文献3参照)。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2004−38981号公報
【特許文献2】特表2001−519947号公報
【特許文献3】特開昭61−52748号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、メモリにアクセスする命令で使用されるレジスタの値を、トレース情報として出力するか否かを判定することで、トレース情報の量を削減する手法は提案されていない。
【0006】
本件開示の半導体装置および半導体装置の動作制御方法は、トレース情報の量を削減し、それによって、トレース情報を出力する端子の数を削減し、半導体装置の規模を削減することを目的とする。
【課題を解決するための手段】
【0007】
一つの観点によれば、半導体装置は、命令を実行する演算部と、演算部で使用する情報を保持するレジスタと、レジスタに対応して設けられ、第1の値または第2の値に設定されるフラグを保持する記憶部と、演算部により実行された命令に基づいてレジスタに格納された情報を再現することが困難な場合にフラグを第1の値に設定し、演算部により実行された命令に基づいてレジスタに格納された情報を再現可能な場合にフラグを第2の値に設定するフラグ制御部と、メモリにアクセスする命令が演算部により実行される場合に、メモリのアクセスに使用される値であって、第1の値に設定されたフラグに対応するレジスタに格納された値をトレース情報として出力するトレース制御部とを有する。
【0008】
別の観点によれば、半導体装置の動作制御方法は、命令を実行する演算部と、演算部で使用する情報を保持するレジスタとを備える半導体装置の動作制御方法であって、レジスタに対応して設けられる記憶部のフラグを、演算部による命令の実行結果に応じて、演算部により実行された命令に基づいてレジスタに格納された情報を再現することが困難な場合に第1の値に設定し、演算部により実行された命令に基づいてレジスタに格納された情報を再現可能な場合に第2の値に設定し、メモリにアクセスする命令が演算部により実行される場合に、メモリのアクセスに使用される値であって、第1の値に設定されたフラグに対応するレジスタに格納された値をトレース情報として出力する。
【発明の効果】
【0009】
本件開示の半導体装置および半導体装置の動作制御方法は、トレース情報を出力する端子の数を削減することができ、半導体装置の規模を削減することができる。
【図面の簡単な説明】
【0010】
図1】半導体装置および半導体装置の動作制御方法の一実施形態を示す図である。
図2】半導体装置および半導体装置の動作制御方法の別の実施形態を示す図である。
図3図2に示したプロセッサの例を示す図である。
図4図3に示したフラグ制御部によりフラグを書き替える条件の例を示す図である。
図5図3に示したフラグ制御部によるフラグの書き替え動作の例を示す図である。
図6図2に示したトレース制御部の例を示す図である。
図7図6に示したトレース制御部の動作の例を示す図である。
図8図2に示したプロセッサが実行するプログラムの記述の例を示す図である。
図9図8に示したプログラムをプロセッサが実行する場合における半導体装置の動作の例を示す図である。
図10図8に示したプログラムをプロセッサが実行する場合に出力されるトレース情報の例を示す図である。
図11図2に示したエミュレータの動作の例を示す図である。
図12図11に示したエミュレータの動作により復元されたプロセッサの実行履歴の例を示す図である。
【発明を実施するための形態】
【0011】
以下、図面を用いて実施形態を説明する。信号が伝達される信号線には、信号名と同じ符号を使用する。図中の二重の四角印は、外部端子を示す。外部端子は、例えば、半導体チップ上のパッド、あるいは半導体チップが収納されるパッケージのリードである。
【0012】
図1は、半導体装置および半導体装置の動作制御方法の一実施形態を示す。例えば、この実施形態の半導体装置SEM1は、演算部OPU、レジスタREG、記憶部MU、フラグ制御部FCNTおよびトレース制御部TCNTを有する。演算部OPUは、例えば、メモリMEMから供給される命令INSを実行する。レジスタREGは、演算部OPUで使用する値を保持する。
【0013】
記憶部MUは、レジスタREGに対応して設けられ、第1の値(例えば、”0”)または第2の値(例えば、”1”)に設定されるフラグFLGを保持する。なお、半導体装置SEM1は、複数のレジスタREGと、複数のレジスタREGにそれぞれ対応する複数のフラグFLGを含む記憶部MUを有してもよい。
【0014】
フラグ制御部FCNTは、演算部OPUによる命令の実行結果に応じて、演算部OPUにより実行された命令INSに基づいてレジスタREGに格納された値を再現することが困難な場合に、フラグFLGを第1の値に設定する。フラグ制御部FCNTは、演算部OPUにより実行された命令INSに基づいてレジスタREGに格納された値を再現可能な場合に、フラグFLGを第2の値に設定する。
【0015】
トレース制御部TCNTは、メモリMEMにアクセスする命令が演算部OPUにより実行される場合、メモリアクセスに使用される値であって、第1の値に設定されたフラグFLGに対応するレジスタREGに格納された値をトレース情報TRIとして出力する。換言すれば、トレース制御部TCNTは、メモリアクセスに使用される値であって、第2の値に設定されたフラグFLGに対応するレジスタREGに格納された値をトレース情報TRIとして出力することを禁止する。
【0016】
例えば、トレース制御部TCNTは、第1の値に設定されたフラグFLGに対応するレジスタREGに格納されたデータをメモリMEMに書き込む命令が演算部OPUにより実行される場合に、メモリMEMに書き込むデータをトレース情報TRIとして出力する。トレース制御部TCNTは、第2の値に設定されたフラグFLGに対応するレジスタREGに格納されたデータをメモリMEMに書き込む命令が演算部OPUにより実行される場合に、メモリMEMに書き込むデータのトレース情報TRIとしての出力を禁止する。
【0017】
あるいは、トレース制御部TCNTは、第1の値に設定されたフラグFLGに対応するレジスタREGに格納されたアドレスを用いてメモリMEMにアクセスする命令が実行される場合、レジスタREGに格納されたアドレスをトレース情報TRIとして出力する。トレース制御部TCNTは、第2の値に設定されたフラグFLGに対応するレジスタREGに格納されたアドレスを用いてメモリMEMにアクセスする命令が実行される場合、レジスタREGに格納されたアドレスのトレース情報TRIとしての出力を禁止する。
【0018】
例えば、トレース情報TRIは、エミュレータEMLに転送される。なお、トレース情報TRIは、トレースバッファを介してエミュレータEMLに転送されてもよい。エミュレータEMLは、半導体装置SEM1からのトレース情報TRIと、演算部OPUにより実行される命令が記述されたソースプログラムSPGMとに基づいて、実行履歴ELISTを出力する。例えば、実行履歴ELISTは、演算部OPUが実行した命令、演算部OPUが命令を実行した際のレジスタREGの値、およびメモリMEMにアクセスしたときのアドレスおよびデータの値等が含まれる。
【0019】
この実施形態では、レジスタREGに対応して設けられる記憶部MUに設定されるフラグFLGの値に応じて、演算部OPUの動作により使用されたレジスタREGに格納された値をトレース情報TRIとして出力するか否かが判断される。そして、演算部OPUにより既に実行された命令INSに基づいてレジスタREGに格納された値を再現することが困難な場合に、再現が困難な値がトレース情報TRIとして出力される。換言すれば、演算部OPUにより既に実行された命令INSに基づいてレジスタREGに格納された値を再現可能な場合に、トレース情報TRIは出力されない。
【0020】
これにより、トレース情報TRIの量を従来に比べて削減することができる。トレース情報TRIの量の削減により、トレース情報TRIを出力するために半導体装置SEM1に設けられる端子の数を従来に比べて削減することができる。また、トレース情報TRIが、トレースバッファを介してエミュレータEMLに転送される場合には、トレースバッファの記憶容量を従来に比べて削減することができる。この結果、半導体装置SEM1の規模を削減することができ、半導体装置SEM1が搭載されるシステムの規模を削減することができ、システムコストの削減に寄与することができる。
【0021】
また、トレース情報TRIを出力するために半導体装置SEM1に設けられる端子の数を削減しない場合、演算部OPUの動作とともにリアルタイムでトレース可能な命令数を従来に比べて増やすことができる。例えば、演算部OPUの動作周波数が高くなる場合にも、演算部OPUが実行する命令に同期してリアルタイムでトレース情報TRIを出力することができ、半導体装置SEM1が搭載されるシステムのデバッグ性能を向上することができる。
【0022】
図2は、半導体装置および半導体装置の動作制御方法の別の実施形態を示す。図1に示した実施形態で説明した要素と同一または同様の要素については、同一の符号を付し、これ等については、詳細な説明を省略する。例えば、この実施形態の半導体装置SEM2は、トレースバッファ60とともにデバッグ基板DBGB上に搭載される。なお、デバッグが完了した半導体装置SEM2は、システム基板等に搭載され、出荷される。
【0023】
例えば、半導体装置SEM2は、プロセッサ10、メモリ20、周辺回路30およびユーザロジック40と、プロセッサ10に接続されたトレース制御部50とを有する。プロセッサ10、メモリ20、周辺回路30およびユーザロジック40は、システムバスSBUSを介して互いに接続される。例えば、デバッグ基板DBGBは、コネクタおよびケーブル等を介してエミュレータ100に接続される。なお、半導体装置SEM2は、図2に示した構成に限定されない。例えば、トレースバッファ60は、半導体装置SEM2に搭載されてもよく、周辺回路30およびユーザロジック40は、ユーザのシステム仕様に応じて選択的に半導体メモリMEMに搭載されてもよい。
【0024】
エミュレータ100は、ICE(In Circuit Emulator)等のコンピュータであり、入力装置110、出力装置120および記憶装置130に接続される。例えば、入力装置110は、キーボードやマウスであり、出力装置120は、ディスプレイやプリンタであり、記憶装置130はハードディスクドライブ等である。
【0025】
エミュレータ100は、プログラムを実行することにより、トレースバッファ60に蓄積されたトレース情報TRIと、記憶装置130に記憶されたソースプログラムとに基づいて、プロセッサ10により実行された命令を再現する。なお、プロセッサ10は、ソースプログラムをアセンブルすることにより生成される機械語の命令(メモリ20に格納)を実行する。すなわち、プロセッサ10が実行する命令と、記憶装置130に記憶されたソースプログラムに含まれる命令とは、互いに対応している。そして、デバッグ基板DBGB、エミュレータ100、入力装置110、出力装置120および記憶装置130により、半導体装置SEM2の開発を支援するデバッグシステムDBGSYSが構築される。
【0026】
例えば、プロセッサ10は、メモリ20に格納された命令を実行するCPU(Central Processing Unit)等である。プロセッサ10の例は、図3に示す。メモリ20は、例えば、SRAM(Static Random Access Memory)であり、プロセッサ10が実行する命令および命令の実行で使用するデータ等を記憶する。例えば、周辺回路30は、DMAC(Direct Memory Access Controller)、通信回路、タイマまたはADC(Analog to Digital Converter)等である。ユーザロジック40は、ユーザ毎に実現される固有の論理回路であり、例えば、FPGA(Field Programmable Gate Array)等のプログラマブルロジックデバイスである。
【0027】
トレース制御部50は、プロセッサ10による命令の実行結果に基づいて、トレースバッファ60に出力するトレース情報TRIを決定する。例えば、トレース制御部50からトレースバッファ60にトレース情報TRIを出力する信号線は、プロセッサ10による命令の実行を中断することなく、トレース情報TRIをリアルタイムでトレースバッファ60に転送できるバス幅に設定される。トレース制御部50の例は、図6に示す。また、トレース制御部50によるトレースバッファ60に出力するトレース情報TRIの決定手法は、図7で説明する。
【0028】
トレースバッファ60は、例えば、DRAM(Dynamic Random Access Memory)等のメモリであり、トレース制御部50から出力されるトレース情報TRIを蓄積する。
【0029】
図3は、図2に示したプロセッサ10の例を示す。例えば、プロセッサ10は、クロックに同期して動作する命令フェッチ部IFU、命令デコーダID、レジスタ部REGU、演算部OPU、フラグ制御部FCNT、セレクタSEL、プログラムカウンタPC、インクリメンタINC、アドレスバスABおよびデータバスDBを有する。なお、プロセッサ10の構成は、図3に限定されない。
【0030】
命令フェッチ部IFUは、システムバスSBUSおよびデータバスDBを介してメモリ20から読み出される命令をフェッチし、フェッチした命令を命令デコーダIDに出力する。命令デコーダIDは、命令フェッチ部IFUから供給される命令をデコードし、プロセッサ10の各部の動作を制御する制御信号を生成する。制御信号は、タイミング信号を含んでもよい。例えば、命令デコーダIDは、加算命令をデコードした場合、演算部OPUの演算器OPを加算器として動作させる制御信号と、加算に使用するレジスタREGを選択する制御信号等とを出力する。また、命令デコーダIDは、デコードした命令に即値が含まれる場合、即値をデータバスDBに出力し、レジスタREGに転送する。
【0031】
レジスタ部REGUは、複数のレジスタREGと、各レジスタREGに対応する記憶部MUを有する。例えば、レジスタREGは、汎用レジスタである。記憶部MUのフラグFLGは、プロセッサ10により既に実行された命令をたどることにより、対応するレジスタREGに保持された値が命令毎に復元可能な場合、例えば、”1”に設定される。フラグFLGは、対応するレジスタREGに保持された値が、プロセッサ10により既に実行された命令をたどっても命令毎に復元が困難な場合、例えば、”0”に設定される。フラグFLGは、フラグ制御部FCNTにより書き替えられる。フラグFLGに設定される”0”は、第1の値の一例であり、フラグFLGに設定される”1”は、第2の値の一例である。
【0032】
演算部OPUは、演算器OPおよびロード/ストア部LSUを有する。例えば、演算器OPは、命令デコーダIDによりデコードされた命令にしたがって、レジスタREGに格納されたデータ、即値またはメモリ20から読み出されるデータを用いて、四則演算または論理演算を実行する。
【0033】
ロード/ストア部LSUは、命令デコーダIDがロード命令およびストア命令等のメモリ20にアクセスする命令をデコードした場合に、メモリ20に対するデータ転送を実行する。ロード/ストア部LSUは、ロード命令では、レジスタREGの1つに格納されたアドレスをアドレスバスABに出力してメモリ20の記憶領域にアクセスする。記憶領域から読み出されたデータは、データバスDBを介してレジスタREGの1つに格納される。ロード/ストア部LSUは、ストア命令では、レジスタREGの1つに格納されたデータをデータバスDBに出力し、レジスタREGの別の1つに格納されたアドレスをアドレスバスABに出力する。そして、データは、メモリ20においてアドレスが示す記憶領域に書き込まれる。なお、プロセッサ10は、メモリ20のアクセスを制御する制御信号をメモリ20に出力する。
【0034】
また、ロード/ストア部LSUは、命令の実行に使用するアドレスを示すアドレス情報ADおよび命令の実行に使用するデータを示すデータ情報DTを、トレース制御部50のデータトレース生成部DTGENに出力する。ロード/ストア部LSUは、メモリ20にアクセスする命令を実行することを示すメモリアクセス情報MAを、データトレース生成部DTGENに出力する。ロード/ストア部LSUは、メモリ20にアクセスする命令がストア命令またはロード命令のいずれであるかを示すストアロード情報S/Lをデータトレース生成部DTGENに出力する。例えば、ストアロード情報S/Lは、ストア命令の実行時に”1”に設定され、ロード命令の実行時に”0”に設定される。
【0035】
演算部OPUは、命令の実行/非実行を示す実行情報EXEをトレース制御部50の命令トレース生成部ITGENに出力する。演算部OPUは、命令が実行された場合に実行情報EXEを”E”に設定し、条件付きの命令で条件が成立しない場合に実行情報EXEを”N”に設定する。例えば、”E”は、実行情報EXEを”1”に設定することにより示され、”N”は、実行情報EXEを”0”に設定することにより示される。例えば、条件付きの命令は、分岐命令である。演算部OPUは、分岐条件の不成立によりプログラムカウンタPCの値がインクリメントされる場合に実行情報EXEを”N”に設定し、分岐条件の成立によりプログラムカウンタPCの値が分岐先にジャンプする場合に実行情報EXEを”E”に設定する。実行情報EXE(”E”、”N”)の出力例は、図9および図10に示す。
【0036】
フラグ制御部FCNTは、演算部OPUによる演算の実行毎に、フラグFLGの値を受ける。フラグ制御部FCNTは、演算部OPUで使用したレジスタREGがデータを保持する場合、レジスタREGに対応するフラグFLGの値を、データフラグ線DFLGを介してトレース制御部50のデータトレース生成部DTGENに出力する。また、フラグ制御部FCNTは、演算部OPUで使用したレジスタREGがアドレスを保持する場合、レジスタREGに対応するフラグFLGの値を、アドレスフラグ線AFLGを介してトレース制御部50のデータトレース生成部DTGENに出力する。例えば、演算部OPUで使用したレジスタREGがデータまたはアドレスを保持するか否かを示す情報は、演算器OPおよびロード/ストア部LSUからフラグ制御部FCNTにそれぞれ出力される。
【0037】
また、フラグ制御部FCNTは、演算器OPおよびロード/ストア部LSUによる命令の実行結果に応じて、フラグ書き替え線FWRに値を出力し、演算部OPUで使用したレジスタREGに対応するフラグFLGの値を書き替える。フラグ制御部FCNTによるフラグFLGの書き替えの例は、図4および図5に示す。
【0038】
プログラムカウンタPCは、演算部OPUが次に実行する命令を格納したメモリ20のアドレスを示す。インクリメンタINCは、命令デコーダIDからの制御信号の1つに応じて、プログラムカウンタPCから出力されるアドレスをインクリメントしてセレクタSELに出力する。
【0039】
セレクタSELは、インクリメンタINCから出力されるアドレスまたはデータバスDBを介して命令デコーダIDから供給される分岐アドレス(即値)を、命令デコーダIDからの制御信号の1つに応じて選択する。セレクタSELは、選択したアドレスをプログラムカウンタPCに転送する。例えば、分岐命令の分岐条件が成立し、次の命令のフェッチ先がインクリメンタINCから出力されるアドレスと相違する場合、セレクタSELは、命令デコーダIDから供給される分岐アドレスを選択する。
【0040】
図4は、図3に示したフラグ制御部FCNTによりフラグFLGを書き替える条件の例を示す。図4に示す条件は、命令デコーダID、演算器OPおよびロード/ストア部LSUからの情報に基づいて、フラグ制御部FCNTにより判定される。
【0041】
フラグ制御部FCNTは、レジスタREGに即値が格納される命令が実行されることを判定した場合、即値が代入されるレジスタREGに対応するフラグFLGを”1”に書き替える(条件A)。即値は、プロセッサ10が実行する命令を記述したプログラム(例えば、図8に示すプログラム)中に記述されており、プログラムから再現可能である。
【0042】
フラグ制御部FCNTは、”1”に設定されたフラグFLGに対応するレジスタREGおよび即値を使用して演算が実行されることを判定した場合、演算結果が格納されるレジスタREGに対応するフラグFLGを”1”に書き替える(条件B)。換言すれば、レジスタREGに書き込まれる値が、プロセッサにより実行された命令(プログラム)をたどることにより判別可能な場合、値が格納されるレジスタに対応するフラグFLGは”1”に設定される。条件Aおよび条件Bでは、再現可能な値が格納されるレジスタREGに対応するフラグFLGに”1”を設定することで、再現可能な値がトレース情報TRIとして出力されることを抑止することができ、トレース情報TRIの量を従来に比べて削減できる。
【0043】
フラグ制御部FCNTは、”0”に設定されたフラグFLGに対応するレジスタREGの少なくとも1つを使用して演算が実行される場合、演算結果が格納されるレジスタREGに対応するフラグFLGを”0”に書き替える(条件C)。また、フラグ制御部FCNTは、メモリ20にアクセスする命令により値が書き込まれるレジスタREGに対応するフラグFLGを”0”に書き替える(条件D)。換言すれば、レジスタREGに書き込まれる値の判別が、プロセッサにより実行された命令(プログラム)をたどっても困難である場合、値が格納されるレジスタに対応するフラグFLGは”0”に設定される。条件Cおよび条件Dでは、再現が困難な値が格納されるレジスタREGに対応するフラグFLGに”0”が設定される。このため、エミュレータ100等は、トレース情報TRIに基づいて、演算部OPU(すなわち、プロセッサ10)により実行された命令の履歴を正しく生成することができる。
【0044】
フラグ制御部FCNTは、命令の実行によりレジスタREGの値が書き替えられないことを判定した場合、フラグFLGを書き替えない(条件E)。
【0045】
図5は、図3に示したフラグ制御部FCNTによるフラグFLGの書き替え動作の例を示す。なお、図5では、フラグ制御部FCNTがフローを順次に実行する例を示しているが、実際には、図5に示すフローは、フラグ制御部FCNTのハードウェアが動作することにより、並列に実行される。すなわち、図4に示した条件A、B、C、D、Eは、それぞれの判定回路により並列に判定される。
【0046】
フラグ制御部FCNTは、ステップS100においてレジスタREGに即値を格納する命令の実行を示す情報を命令デコーダIDから受けた場合、ステップS102において即値が格納されたレジスタREGに対応するフラグFLGを”1”に設定する(条件A)。例えば、レジスタREGに即値が格納される命令は、転送命令MOV等である。
【0047】
フラグ制御部FCNTは、ステップS100においてレジスタREGに即値が格納される命令が実行されないと判定した場合、ステップS104の判定を実行する。フラグ制御部FCNTは、ステップS104において演算命令の実行を示す情報を演算器OPから受けた場合、ステップS106において、”0”に設定されたフラグFLGに対応するレジスタREGの少なくとも1つを使用して演算が実行されるか否かを判定する。例えば、演算命令は、加算命令ADD、減算命令SUBおよび乗算命令MUL等である。
【0048】
そして、”0”に設定されたフラグFLGに対応するレジスタREGの少なくとも1つを使用して演算が実行される場合、ステップS112において、データが格納されるレジスタREGに対応するフラグFLGの値が”0”に設定される(条件C)。一方、”0”に設定されたフラグFLGに対応するレジスタREGを使用して演算が実行されない場合、ステップS108において、フラグ制御部FCNTは、演算結果が格納されるレジスタREGに対応するフラグFLGに”1”を設定する(条件B)。換言すれば、ステップS108は、演算命令で使用する引数が、”1”に設定されたフラグFLGに対応するレジスタREGに格納される場合(オペランドがレジスタ参照)、あるいは即値である場合に実行される。
【0049】
演算命令の実行を示す情報を演算器OPから受けない場合、フラグ制御部FCNTは、演算命令以外の命令が実行されたと判定し、ステップS110において、レジスタREGに値が書き込まれるか否かを判定する。例えば、演算命令以外の命令は、ストア命令STR、ロード命令LDR、コンペア命令CMPおよび分岐命令BNE等である。そして、フラグ制御部FCNTは、レジスタREGに値が書き込まれる命令が実行されると判定した場合、ステップS112において、データが格納されるレジスタREGに対応するフラグFLGの値を”0”に設定する(条件D)。例えば、レジスタREGに値が書き込まれる命令は、ロード命令LDRである。
【0050】
一方、フラグ制御部FCNTは、ステップS110において、レジスタREGに値が書き込まれないと判定した場合、フラグFLGの値を書き替えない(条件E)。
【0051】
図6は、図2に示したトレース制御部50の例を示す。トレース制御部50は、命令トレース生成部ITGENおよびデータトレース生成部DTGENを有する。命令トレース生成部ITGENは、演算部OPUから出力される実行情報EXE(”E”または”N”)を受け、受けた実行情報EXEをトレース情報TRIとしてトレースバッファ60に出力する。
【0052】
データトレース生成部DTGENは、アンド回路AND、データ出力部DOUTおよびアドレス出力部AOUTを有する。データトレース生成部DTGENは、イネーブル端子ENで受けるメモリアクセス情報MAがメモリ20にアクセスする命令の実行を示す場合に動作する。
【0053】
アンド回路ANDは、ストアロード情報S/Lが論理0の場合、すなわち、ロード命令が実行された場合に論理0を出力する。アンド回路ANDは、ストアロード情報S/Lが論理1、かつデータフラグ信号DFLGが論理0の場合、すなわち、ストア命令の実行によりメモリ20に格納するデータを保持するレジスタREGに対応するフラグFLGが”0”の場合に論理0を出力する。アンド回路ANDは、ストアロード情報S/Lが論理1、かつデータフラグ信号DFLGが論理1の場合、すなわち、ストア命令の実行によりメモリ20に格納するデータを保持するレジスタREGに対応するフラグFLGが”1”の場合に論理1を出力する。
【0054】
データ出力部DOUTは、メモリアクセス情報MAがメモリ20にアクセスする命令の実行を示す場合に動作し、メモリアクセス情報MAがメモリ20にアクセスする命令の非実行を示す場合に動作を停止する。データ出力部DOUTは、論理0をディセーブル端子DISで受ける期間にオンし、論理1をディセーブル端子DISで受ける期間にオフするスイッチDSWを有する。すなわち、データ出力部DOUTは、論理0をディセーブル端子DISで受ける期間に、演算部OPUからのデータ情報DTをトレースバッファ60に出力する。
【0055】
データ出力部DOUTは、メモリアクセス情報MAがメモリ20にアクセスする命令の非実行を示す期間と、論理1をディセーブル端子DISで受ける期間とに、データ情報DTのトレースバッファ60への出力を禁止する。例えば、データ出力部DOUTは、ロード命令が実行される場合、およびストア命令の実行によりメモリ20に格納するデータを保持するレジスタREGに対応するフラグFLGが”0”の場合、データ情報DTをトレースバッファ60に出力する。
【0056】
アンド回路ANDおよび論理1をディセーブル端子DISで受ける期間にオフするスイッチDSWは、レジスタREGに格納されたデータのトレース情報TRIとしての出力を禁止するマスク部の一例である。アンド回路ANDおよびスイッチDSWにより、データのトレース情報TRIとしての出力を禁止することで、演算部OPUにより実行される命令が記述されたプログラム(例えば、図8に示すプログラム)から再現可能なデータ情報DTは、トレース情報TRIとして出力されない。このため、トレース情報TRIの量を従来に比べて削減できる。
【0057】
アドレス出力部AOUTは、メモリアクセス情報MAがメモリ20にアクセスする命令の実行を示す場合に動作し、メモリアクセス情報MAがメモリ20にアクセスする命令の非実行を示す場合に動作を停止する。アドレス出力部AOUTは、論理0のアドレスフラグ信号AFLGをディセーブル端子DISで受ける期間にオンし、論理1のアドレスフラグ信号AFLGをディセーブル端子DISで受ける期間にオフするスイッチASWを有する。すなわち、アドレス出力部AOUTは、論理0をディセーブル端子DISで受ける期間に、演算部OPUからのアドレス情報ADをトレースバッファ60に出力する。
【0058】
アドレス出力部AOUTは、メモリアクセス情報MAがメモリ20にアクセスする命令の非実行を示す期間と、論理1をディセーブル端子DISで受ける期間とに、アドレス情報ADのトレースバッファ60への出力を禁止する。例えば、アドレス出力部AOUTは、命令の実行で使用するレジスタREGに格納された値がアドレスとして使用され、アドレスを格納するレジスタREGに対応するフラグFLGが”0”の場合に、アドレス情報ADをトレースバッファ60に出力する。
【0059】
論理1をディセーブル端子DISで受ける期間にオフするスイッチASWは、レジスタREGに格納されたアドレスのトレース情報TRIとしての出力を禁止するマスク部の一例である。スイッチASWにより、アドレスのトレース情報TRIとしての出力を禁止することで、演算部OPUにより実行される命令が記述されたプログラムから再現可能なアドレスは、トレース情報TRIとして出力されない。このため、トレース情報TRIの量を従来に比べて削減することができる。
【0060】
図7は、図6に示したトレース制御部50の動作の例を示す。なお、図7では、トレース制御部50がフローを順次に実行する例を示している。しかし、実際には、トレース制御部50の命令トレース生成部ITGEN、データ出力部DOUTおよびアドレス出力部AOUTは、並列に動作するため、図7に示すフローは並列に実行される。例えば、ステップS202、S204、S208、S212の判定は、図7に示す順序ではなく、同時に実行されてもよい。
【0061】
ステップS202において、データトレース生成部DTGENは、ロード/ストア部LSUからのメモリアクセス情報MAに基づいて、メモリアクセス命令(ロード命令LDRまたはストア命令STR)が実行されるか否かを判定する。例えば、メモリアクセス情報MAがメモリ20にアクセスする命令の実行を示す場合、処理はステップS204に移行され、メモリアクセス情報MAがメモリ20にアクセスする命令の非実行を示す場合、処理はステップS216に移行される。
【0062】
ステップS204において、データ出力部DOUTは、ストアロード情報S/Lの論理レベルに基づいてロード命令LDRが実行されるか否かを判定する。ロード命令LDRが実行される場合、処理はステップS206に移行され、ロード命令LDRが実行されない場合、ストア命令STRが実行されるため、処理はステップS208に移行される。
【0063】
ステップS206において、データ出力部DOUTは、レジスタREGにロードしたデータ(データ情報DT)をトレース情報TRIとして出力する。ステップS206の後、処理はステップS212に移行される。ロード命令LDRによりメモリ20から読み出され、レジスタREGに格納されるデータは、演算部OPUが実行する命令が記述されたプログラム(例えば、図2に示すソースプログラム)から再現することが困難である。すなわち、演算部OPUにより既に実行された命令をたどることでは再現が困難なデータをトレース情報TRIとして出力することで、図12に示すように、演算部OPU(すなわち、プロセッサ10)により実行された命令の履歴を正しく生成することができる。
【0064】
一方、ストア命令STRが実行される場合、ステップS208において、データ出力部DOUTは、メモリ20に書き込むデータを格納したレジスタREGに対応するフラグFLGが”0”か否かを判定する。メモリ20に書き込むデータを格納するレジスタREGに対応するフラグFLGが”0”の場合、処理はステップS210に移行され、メモリ20に書き込むデータを格納するレジスタREGに対応するフラグFLGが”0”でない場合、処理はステップS212に移行される。
【0065】
ステップS210において、データ出力部DOUTは、メモリ20に書き込むデータ(データ情報DT)をトレース情報TRIとして出力する。この後、処理はステップS212に移行される。”0”に設定されたフラグFLGに対応するレジスタREGに保持され、ストア命令STRによりメモリ20に書き込まれるデータは、演算部OPUが実行する命令が記述されたプログラムから再現することが困難である。すなわち、演算部OPUにより既に実行された命令をたどることでは再現が困難なデータをトレース情報TRIとして出力することで、図12に示すように、演算部OPU(すなわち、プロセッサ10)により実行された命令の履歴を正しく生成することができる。
【0066】
ステップS212において、アドレス出力部AOUTは、アドレスを格納するレジスタREGに対応するフラグFLGが”0”か否かを判定する。アドレスを格納するレジスタREGに対応するフラグFLGが”0”の場合、処理はステップS214に移行され、アドレスを格納するレジスタREGに対応するフラグFLGが”0”でない場合、処理はステップS216に移行される。
【0067】
ステップS214において、アドレス出力部AOUTは、レジスタREGに格納されるアドレス(アドレス情報AD)をトレース情報TRIとして出力する。”0”に設定されたフラグFLGに対応するレジスタREGに保持され、メモリ20のアクセスに使用されるアドレスは、演算部OPUが実行する命令が記述されたプログラムから再現することが困難である。すなわち、演算部OPUにより既に実行された命令をたどることでは再現が困難なアドレスをトレース情報TRIとして出力することで、図12に示すように、演算部OPU(すなわち、プロセッサ10)により実行された命令の履歴を正しく生成することができる。
【0068】
ステップS216において、命令トレース生成部ITGENは、演算部OPUから出力される実行情報EXE(”E”または”N”)をトレース情報TRIとしてトレースバッファ60に出力する。
【0069】
図8は、図2に示したプロセッサ10が実行するプログラムの記述の例を示す。この例では、1番地から16番地に16個の命令が記述される。プログラム中の符号r0、r1、r2、r3、r4は、それぞれレジスタREGを示し、符号#に続く数値は即値を示す。かぎ括弧で囲まれたレジスタは、レジスタに格納された値をアドレスとして使用することを示す(レジスタ間接)。
【0070】
1番地の転送命令MOVでは、レジスタR0に即値1000が格納される。2番地のロード命令LDRでは、レジスタr0に格納されたアドレスが示すメモリ20の記憶領域から読み出した値がレジスタr2に格納される。3番地の転送命令MOVでは、レジスタr1に即値100が格納される。4番地のストア命令STRでは、レジスタr1に格納された値が、レジスタr2に格納されたアドレスが示すメモリ20の記憶領域に書き込まれる。5番目の転送命令MOVでは、レジスタR2に即値2が格納される。
【0071】
6番地の減算命令SUBでは、レジスタr0の値からレジスタr1の値を引いた値がレジスタr0に格納される。7番地の乗算命令MULでは、レジスタr0の値を3倍した値がレジスタr3に格納される。8番地のロード命令LDRでは、レジスタr0に格納されたアドレスが示すメモリ20の記憶領域から読み出した値がレジスタr4に格納される。9番地のストア命令STRでは、レジスタr2に格納された値が、レジスタr3に格納されたアドレスが示すメモリ20の記憶領域に書き込まれる。10番地の減算命令SUBでは、レジスタr2の値から”1”を引いた値がレジスタr2に格納される。
【0072】
11番地の比較命令CMPでは、レジスタr2に格納された値と”0”とが比較される。12番地の分岐命令BNEでは、レジスタr2の値が”0”でない場合、6番地に分岐される。すなわち、10番地の減算命令SUBでカウンタとして機能するレジスタr2の値が”0”より大きい間、6番地から12番地の命令が繰り返される。
【0073】
13番地の加算命令ADDでは、レジスタr0の値とレジスタr3の値とを加算した値がレジスタr0に格納される。14番地のロード命令LDRでは、レジスタr0に格納されたアドレスが示すメモリ20の記憶領域から読み出した値がレジスタr2に格納される。15番地のストア命令STRでは、レジスタr2に格納された値が、レジスタr3に格納されたアドレスが示すメモリ20の記憶領域に書き込まれる。16番地の加算命令ADDでは、レジスタr2の値とレジスタr0の値とを加算した値がレジスタr3に格納される。
【0074】
図9は、図8に示したプログラムをプロセッサ10が実行する場合における半導体装置SEM2の動作の例を示す。図9では、レジスタREGとフラグFLGのペアをレジスタr0、r1、r2、r3、r4として示す。命令の前に括弧で示した数値は、命令が格納された番地を示す。白抜きの矢印は、命令がプロセッサ10により実行されることを示す。レジスタREGの下側に付した矢印は、トレース制御部50から出力されるトレース情報TRIを示す。
【0075】
フラグFLGに示した”−”は、レジスタREGに値が格納されていない無効状態を示す。なお、値が格納されていないレジスタREGに対応するフラグFLGは、”0”に設定されてもよい。また、各フラグFLGを2ビットとし、フラグFLGが有効であるか無効であるかの情報を上位ビットに設定し、図4に示した”0”、”1”を下位ビットに設定してもよい。この場合、フラグFLGの”10”は、プロセッサ10により既に実行された命令をたどることではレジスタREGに格納された値を再現することが困難なことを示す。フラグFLGの”11”は、プロセッサ10により既に実行された命令をたどることでレジスタREGに格納された値を再現可能なことを示す。フラグFLGの”10”は、第1の値の一例であり、フラグFLGの”11”は、第2の値の一例である。
【0076】
まず、1番地の転送命令MOVの実行によるレジスタr0への即値1000の格納は、図4に示した条件Aに該当するため、フラグ制御部FCNTは、レジスタr0のフラグFLGを”1”に設定する。図7に示したステップS202の判定は、”偽(No)”であるため、トレース制御部50は、命令の実行を示す実行情報EXE(”E”)をトレース情報TRIとして出力する(図9(a))。
【0077】
2番地のロード命令LDRの実行によるレジスタr2への”500”の格納は、図4に示した条件Dに該当するため、フラグ制御部FCNTは、レジスタr2のフラグFLGを”0”に設定する。図7に示したステップS202、S204の判定は、ともに”真(Yes)”である。このため、トレース制御部50は、命令の実行を示す実行情報EXE(”E”)とともに、メモリ20から読み出したデータ(500)を示すデータ情報DTをトレース情報TRIとして出力する(図9(b))。
【0078】
一方、図7に示したステップS212の判定は、”偽(No)”であるため、トレース制御部50は、レジスタr0に格納されたアドレス情報AD(1000)のトレース情報TRIとしての出力を禁止する。なお、2番地のロード命令LDRにおいて、レジスタr0のフラグFLGが”0”の場合、図7に示したステップS212の判定は、”真(Yes)”となる。この場合、レジスタr0に格納されたアドレス情報AD(1000)も、トレース情報TRIとして出力される。
【0079】
3番地の転送命令MOVでは、1番地の転送命令MOVと同様に、フラグ制御部FCNTは、レジスタr1のフラグFLGを”1”に設定し、トレース制御部50は、実行情報EXE(”E”)をトレース情報TRIとして出力する(図9(c))。
【0080】
4番地のストア命令STRの実行によるレジスタr2の値のメモリ20への書き込みは、条件Eに該当するため、フラグ制御部FCNTは、フラグFLGを書き替えず、図7に示したステップS208の判定は”偽(No)”である。このため、トレース制御部50は、メモリ20に書き込んだデータ(100)を示すデータ情報DTのトレース情報TRIとしての出力を禁止する。一方、図7に示したステップS212の判定は”真(Yes)”であるため、トレース制御部50は、データの書き込み先のアドレス情報AD(500)を、実行情報EXE(”E”)とともにトレース情報TRIとして出力する(図9(d))。
【0081】
5番目の転送命令MOVでは、フラグ制御部FCNTおよびトレース制御部50は、1番地の転送命令MOVと同様に動作する。そして、実行情報EXE(”E”)がトレース情報TRIとして出力される(図9(e))。
【0082】
6番地の減算命令SUBの実行により使用されるレジスタr0、r1のフラグFLGは、”1”に設定されており、図4に示した条件Bに該当する。このため、フラグ制御部FCNTは、演算結果を格納するレジスタr0のフラグFLGを”1”に設定する。なお、フラグ制御部FCNTは、フラグFLGに設定された値と、フラグFLGを書き替える値が同じ場合、フラグFLGの書き替え動作を禁止してもよい。図7に示したステップS202の判定は、”偽(No)”であるため、トレース制御部50は、実行情報EXE(”E”)をトレース情報TRIとして出力する(図9(f))。
【0083】
7番地の乗算命令MULの実行により使用されるレジスタr0のフラグFLGは、”1”に設定されており、図4に示した条件Bに該当する。このため、フラグ制御部FCNTは、演算結果を格納するレジスタr3のフラグFLGを”1”に設定する。図7に示したステップS202の判定は、”偽(No)”であるため、トレース制御部50は、実行情報EXE(”E”)をトレース情報TRIとして出力する(図9(g))。
【0084】
8番地のロード命令LDRの実行によるレジスタr4への”10101”の格納は、図4に示した条件Dに該当するため、フラグ制御部FCNTは、レジスタr4のフラグFLGを”0”に設定する。図7に示したステップS202、S204の判定は、ともに”真(Yes)”である。このため、トレース制御部50は、メモリ20から読み出したデータ(10101)を示すデータ情報DTを、実行情報EXE(”E”)とともにトレース情報TRIとして出力する(図9(h))。
【0085】
9番地のストア命令STRの実行によるレジスタr2の値のメモリ20への書き込みは、条件Eに該当するため、フラグ制御部FCNTは、フラグFLGの書き替えをしない。図7に示したステップS202の判定は、”真(Yes)”であり、ステップS204の判定は、”偽(No)”であり、ステップS208の判定は、”偽(No)”である。このため、トレース制御部50は、メモリ20に書き込んだデータ(100)を示すデータ情報DTのトレース情報TRIとしての出力を禁止する。また、図7に示したステップS212の判定は”偽(No)”であるため、トレース制御部50は、データの書き込み先のアドレス情報AD(500)のトレース情報TRIとしての出力を禁止する。これにより、実行情報EXE(”E”)がトレース情報TRIとして出力される(図9(i))。
【0086】
10番地の減算命令SUBでは、フラグ制御部FCNTおよびトレース制御部50は、6番地の減算命令SUBと同様に動作する。そして、実行情報EXE(”E”)がトレース情報TRIとして出力される(図9(j))。
【0087】
11番地の比較命令CMPは、条件Eに該当するため、フラグ制御部FCNTは、フラグFLGの書き替えをしない。図7に示したステップS202の判定は、”偽(No)”であるため、トレース制御部50は、実行情報EXE(”E”)をトレース情報TRIとして出力する(図9(k))。
【0088】
12番地の分岐命令BNEは、条件Eに該当するため、フラグ制御部FCNTは、フラグFLGの書き替えをしない。図7に示したステップS202の判定は、”偽(No)”である。また、レジスタr2の値は”0”でないため、分岐命令BNEによる条件が成立し、トレース制御部50は、実行情報EXE(”E”)をトレース情報TRIとして出力する(図9(l))。
【0089】
以降、6番地から11番地の命令が再び実行され、フラグ制御部FCNTおよびトレース制御部50は、図9(f)、(g)、(h)、(i)、(j)、(k)に示した動作と同様に動作する(図9(m)、(n)、(o)、(p)、(q)、(r))。
【0090】
2回目の12番地の分岐命令BNEは、条件Eに該当するため、フラグ制御部FCNTは、フラグFLGの書き替えをしない。図7に示したステップS202の判定は、”偽(No)”である。また、レジスタr2の値は”0”であり、分岐命令BNEによる条件が成立しないため、トレース制御部50は、実行情報EXE(”N”)をトレース情報TRIとして出力する(図9(s))。
【0091】
13番地の加算命令ADDの実行により使用されるレジスタr0、r3のフラグFLGは、”1”に設定されており、図4に示した条件Bに該当する。このため、フラグ制御部FCNTは、演算結果を格納するレジスタr0のフラグFLGを”1”に設定する。図7に示したステップS202の判定は、”偽(No)”であるため、トレース制御部50は、実行情報EXE(”E”)をトレース情報TRIとして出力する(図9(t))。
【0092】
14番地のロード命令LDRの実行によるレジスタr2への”30303”の格納は、図4に示した条件Dに該当するため、フラグ制御部FCNTは、レジスタr2のフラグFLGを”0”に設定する。図7に示したステップS202、S204の判定は、ともに”真(Yes)”である。このため、トレース制御部50は、メモリ20から読み出したデータ(30303)を示すデータ情報DTを、実行情報EXE(”E”)とともにトレース情報TRIとして出力する(図9(u))。
【0093】
15番地のストア命令STRの実行によるレジスタr2の値のメモリ20への書き込みは、条件Eに該当するため、フラグ制御部FCNTは、フラグFLGの書き替えをしない。図7に示したステップS202の判定は、”真(Yes)”であり、ステップS204の判定は、”偽(No)”であり、ステップS208の判定は、”真(Yes)”である。このため、トレース制御部50は、メモリ20に書き込んだデータ(30303)を示すデータ情報DTを実行情報EXE(”E”)とともにトレース情報TRIとして出力する(図9(v))。一方、図7に示したステップS212の判定は”偽(No)”であるため、トレース制御部50は、データの書き込み先のアドレス情報AD(2400)のトレース情報TRIとしての出力を禁止する。
【0094】
16番地の加算命令ADDの実行により使用されるレジスタr2のフラグFLGは、”0”に設定されており、図4に示した条件Cに該当する。このため、フラグ制御部FCNTは、演算結果を格納するレジスタr3のフラグFLGを”0”に設定する。図7に示したステップS202の判定は、”偽(No)”であるため、トレース制御部50は、実行情報EXE(”E”)をトレース情報TRIとして出力する(図9(w))。
【0095】
図10は、図8に示したプログラムをプロセッサ10が実行する場合に出力されるトレース情報TRIの例を示す。実行される命令と、命令の実行により更新されるレジスタREGおよびフラグFLGと、トレース制御部50から出力されるトレース情報TRIは、図9と同じである。なお、図10では、レジスタr0に対応するフラグFLGを符号fr0で示し、レジスタr1に対応するフラグFLGを符号fr1で示す。レジスタr2に対応するフラグFLGを符号fr2で示し、レジスタr3に対応するフラグFLGを符号fr3で示し、レジスタr4に対応するフラグFLGを符号fr4で示す。
【0096】
図10の右端に大きいかぎ括弧で示したトレース情報は、図6に示したデータトレース生成部DTGENを持たないトレース制御部が出力するトレース情報TRIの例を示す。データトレース生成部DTGENがない場合、ロード命令およびストア命令において、プロセッサ10とメモリ20との間で授受される全てのアドレス情報ADおよびデータ情報DTが、トレース情報TRIとして出力される。これに対して、データトレース生成部DTGENを持つトレース制御部50では、プロセッサ10により既に実行された命令をたどることにより復元可能なデータ情報DTおよびアドレス情報ADは、トレース情報TRIとしての出力が禁止される。
【0097】
これにより、トレース情報TRIとしてトレースバッファ60に転送する情報量を、データトレース生成部DTGENがない場合に比べて削減できる。例えば、図10では、トレース情報TRIとして出力するデータ情報DTおよびアドレス情報ADは、16個から6個に減らすことができる(62.5%の削減効果)。この結果、プロセッサ10による命令の実行を中断することなく、トレース情報TRIをリアルタイムでトレースバッファ60に転送できるトレース情報線TRIのビット幅を、データトレース生成部DTGENがない場合に比べて小さくすることができる。換言すれば、半導体装置SEM2において、トレース情報TRIを出力する端子の数をデータトレース生成部DTGENがない場合に比べて減らすことができ、半導体装置SEM2のチップサイズを削減することができる。さらに、トレース情報TRIとして保持する情報量が削減できるため、トレースバッファ60の記憶容量を減らすことができる。この結果、半導体装置SEM2の製造コストを削減することができ、トレース機能を有するデバッグ基板DBGBのコストを削減することができる。
【0098】
一方、トレース情報線TRIのビット幅を小さくしない場合、リアルタイムでトレース可能な命令数を従来に比べて増やすことができる。したがって、プロセッサ10の動作周波数が高くなる場合にも、プロセッサ10が実行する命令に同期してリアルタイムでトレース情報TRIを出力することができ、半導体装置SEM2が搭載されるシステムのデバッグ性能を向上することができる。
【0099】
図11は、図2に示したエミュレータ100の動作の例を示す。すなわち、図11は、トレースバッファ60に格納されたトレース情報TRIに基づいて、プロセッサ10により実行された命令の実行履歴をエミュレータ100により再現する例を示す。エミュレータ100は、図2に示したプログラムを実行することで、図11に示す動作を実現する。
【0100】
まず、ステップS300において、エミュレータ100は、図2に示した記憶装置130に格納されたソースプログラムから1つの番地に対応する命令を読み出す。次に、ステップS302において、エミュレータ100は、ステップS300で読み出した命令に対応するトレース情報TRIをトレースバッファ60から読み出す。なお、エミュレータ100は、トレース情報TRIに含まれる実行情報EXE(”E”)の数をカウントすることにより、読み出す命令と読み出すトレース情報TRIとを一致させる。また、エミュレータ100は、トレース情報TRIに含まれる実行情報EXE(”N”)を検出することにより、分岐命令後の分岐先を判定する。
【0101】
次に、ステップS304において、エミュレータ100は、読み出したトレース情報TRIにデータ情報DTまたはアドレス情報ADの少なくともいずれかが含まれるか否かを判定する。読み出したトレース情報TRIにデータ情報DTまたはアドレス情報ADの少なくともいずれかが含まれる場合、処理はステップS306に移行される。読み出したトレース情報TRIにデータ情報DTおよびアドレス情報ADが含まれない場合、処理はステップS308に移行される。
【0102】
ステップS306において、エミュレータ100は、トレース情報TRIを用いて、プロセッサ10の実行により変化したレジスタREGの値の一部と、メモリ20のアクセスに使用したデータおよびアドレスとの一部を再現する。ここで、トレース情報TRIは、データ情報DTまたはアドレス情報ADの一方、あるいはデータ情報DTまたはアドレス情報ADの両方を含む。例えば、図10に示した2番地のロード命令LDRでは、レジスタr2に格納されるデータ”500”が再現され、4番地のストア命令STRでは、データを書き込むメモリ20のアドレス”500”が再現される。図10に示した15番地のストア命令STRでは、メモリ20に書き込むデータ”30303”が再現される。
【0103】
ステップS308において、エミュレータ100は、既に再現した情報からプロセッサ10による命令の実行により変化したレジスタREGの値およびフラグFLGの値と、メモリ20のアクセスに使用したデータおよびアドレスを再現する。
【0104】
次に、ステップS310において、エミュレータ100は、プロセッサ10により実行された全ての命令が再現されたか否かを判定する。プロセッサ10により実行された全ての命令が再現された場合、プロセッサ10が実行した命令の再現処理は終了する。プロセッサ10により実行された全ての命令が再現されていない場合、処理はステップS312に移行される。なお、所定の範囲の命令列の再現が図2に示した入力装置110を介して指定された場合、エミュレータ100は、ステップS310において、所定の範囲の命令列が再現されたか否かを判定する。
【0105】
ステップS312において、再現した命令が分岐命令であるか否かを判定する。再現した命令が分岐命令である場合、処理はステップS314に移行され、再現した命令が分岐命令でない場合、処理はステップS318に移行される。
【0106】
ステップS314において、エミュレータ100は、分岐命令で条件が成立したか否かを判定する。分岐命令で条件が成立した場合、処理はステップS316に移行され、分岐命令で条件が成立しない場合、処理はステップS318に移行される。例えば、図10に示した1回目の分岐命令BNEでは、条件が成立するため(レジスタr2の値が”0”でない)、処理がステップS316に移行する。図10に示した2回目の分岐命令BNEでは、条件が成立しないため(レジスタr2の値が”0”)、処理はステップS318に移行する。
【0107】
ステップS316において、エミュレータ100は、次に再現する命令の番地を分岐先の番地に変更し、処理をステップS300に戻す。ステップS318において、エミュレータ100は、今回命令を再現した番地をインクリメントして、次に再現する命令の番地を求め、処理をステップS300に戻す。
【0108】
図12は、図11に示したエミュレータ100の動作により復元されたプロセッサ10の実行履歴の例を示す。例えば、図12に示す実行履歴は、エミュレータ100により、出力装置120である表示装置またはプリンタに出力される。なお、図12において、下線を付した数値は、トレース情報TRIから再現された情報を示す。実際の実行履歴では、数値に下線は付かない。
【0109】
実行履歴では、プロセッサ10により実行された命令と番地とが、符号Codeと符号PCとで示される。各命令の実行後のレジスタREG(r0、r1、r2、r3、r4)の値と、フラグFLG(fr0、fr1、fr2、fr3、fr4)の値が符号Registersとして示される。ロード命令LDRの実行によりメモリ20に出力されたアドレスと、メモリ20から読み出されたデータとが、アドレス情報ADおよびデータ情報DTとして符号Memory Accessの符号Readの領域に示される。ストア命令STRの実行によりメモリ20に出力されたアドレスおよびデータが、アドレス情報ADおよびデータ情報DTとして符号Memory Accessの符号Writeの領域に示される。
【0110】
以上、図2から図12に示した実施形態においても、図1に示した実施形態と同様に、トレース情報TRIを出力する端子の数を削減することができ、半導体装置SEM2の規模を削減することができる。また、トレースバッファ60の記憶容量を従来に比べて削減することができ、半導体装置SEM1が搭載されるシステムの規模を削減することができ、システムコストの削減に寄与することができる。さらに、トレース情報TRIを出力するために半導体装置SEM2に設けられる端子の数を削減しない場合、演算部OPUの動作とともにリアルタイムでトレース可能な命令数を従来に比べて増やすことができる。すなわち、演算部OPUの動作周波数が高くなる場合にも、演算部OPUが実行する命令に同期してリアルタイムでトレース情報TRIを出力することができ、半導体装置SEM2が搭載されるデバッグシステムDBGSYSのデバッグ性能を向上することができる。
【0111】
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
【符号の説明】
【0112】
10…プロセッサ;20…メモリ;30…周辺回路;40…ユーザロジック;50…トレース制御部;100…エミュレータ;110…入力装置;120…出力装置;130…記憶装置;AB…アドレスバス;AD…アドレス情報;AFLG…アドレスフラグ信号;AND…アンド回路;AOUT…アドレス出力部;DB…データバス;DBGB…デバッグ基板;DBGSYS…デバッグシステム;DFLG…データフラグ信号;DIS…ディセーブル端子;DOUT…データ出力部;DT…データ情報;DTGEN…データトレース生成部;ELIST…実行履歴;EML…エミュレータ;EN…イネーブル端子;EXE…実行情報;FCNT…フラグ制御部;FLG…フラグ;FWR…フラグ書き替え線;ID…命令デコーダ;IFU…命令フェッチ部;INC…インクリメンタ;INS…命令;ITGEN…命令トレース生成部;LSU…ロード/ストア部;MA…メモリアクセス情報;MEM…メモリ;MU…記憶部;OP…演算器;OPU…演算部;PC…プログラムカウンタ;REG…レジスタ;REGU…レジスタ部;SBUS…システムバス;SEL…セレクタ;SEM1、SEM2…半導体装置;S/L…ストアロード情報;SPGM…ソースプログラム;TCNT…トレース制御部
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12