JP2009193165A - デバッグ装置およびデバッグ方法 - Google Patents
デバッグ装置およびデバッグ方法 Download PDFInfo
- Publication number
- JP2009193165A JP2009193165A JP2008030962A JP2008030962A JP2009193165A JP 2009193165 A JP2009193165 A JP 2009193165A JP 2008030962 A JP2008030962 A JP 2008030962A JP 2008030962 A JP2008030962 A JP 2008030962A JP 2009193165 A JP2009193165 A JP 2009193165A
- Authority
- JP
- Japan
- Prior art keywords
- circuit unit
- verification target
- hardware
- target circuit
- instruction
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 17
- 238000012795 verification Methods 0.000 claims abstract description 86
- 230000010076 replication Effects 0.000 claims description 41
- 230000004044 response Effects 0.000 claims description 5
- 230000002950 deficient Effects 0.000 claims 1
- 238000004458 analytical method Methods 0.000 description 6
- 230000003111 delayed effect Effects 0.000 description 6
- 238000010586 diagram Methods 0.000 description 5
- 239000013256 coordination polymer Substances 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 230000002411 adverse Effects 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000007257 malfunction Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000003672 processing method Methods 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3648—Software debugging using additional hardware
- G06F11/3652—Software debugging using additional hardware in-circuit-emulation [ICE] arrangements
Landscapes
- Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Theoretical Computer Science (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
- Test And Diagnosis Of Digital Computers (AREA)
Abstract
【課題】検証対象回路と複製回路との間の命令実行間隔を常に所定命令数にすることのできるハードウェアエミュレータを用いるデバッグ装置およびデバッグ方法を提供する。
【解決手段】ハードウェアエミュレータ1と、ハードウェアエミュレータ1を制御するソフトウェアデバッガ2と、ハードウェアエミュレータ1の出力を解析するハードウェアデバッガ3とを備える。ハードウェアエミュレータ1は、検証対象回路部11と、検証対象回路部11を複製した複製回路部12を有する。検証対象回路部11は、デバッグ制御部13により動作の開始と停止が制御される。複製回路部12は、実行開始遅延部14の制御により、検証対象回路部11より所定の遅延命令数遅れて動作を開始する。プログラムカウンタ制御部15は、検証対象回路部11と複製回路部12との命令実行間隔が所定の遅延命令数を保つようにそれぞれのプログラムカウンタPC1、PC2の更新を制御する。
【選択図】図1
【解決手段】ハードウェアエミュレータ1と、ハードウェアエミュレータ1を制御するソフトウェアデバッガ2と、ハードウェアエミュレータ1の出力を解析するハードウェアデバッガ3とを備える。ハードウェアエミュレータ1は、検証対象回路部11と、検証対象回路部11を複製した複製回路部12を有する。検証対象回路部11は、デバッグ制御部13により動作の開始と停止が制御される。複製回路部12は、実行開始遅延部14の制御により、検証対象回路部11より所定の遅延命令数遅れて動作を開始する。プログラムカウンタ制御部15は、検証対象回路部11と複製回路部12との命令実行間隔が所定の遅延命令数を保つようにそれぞれのプログラムカウンタPC1、PC2の更新を制御する。
【選択図】図1
Description
本発明は、デバッグ装置およびデバッグ方法に関する。
CPUを搭載するシステムLSIの動作検証においては、CPUで実行されるプログラムを利用して検証を進めることが多い。そのとき、CPUに、実績のある既存のCPUを使用する場合、不具合が発生するのは、CPU以外の、新規に設計した回路部分、あるいはプログラムのいずれか、あるいは両方である。
そこで、不具合が発生したときのデバッグを行う場合、まず、LSIの回路とプログラムのどちらに不具合があるか、という切り分けを行い、次に、プログラムのどの命令を実行中に問題が表面化したかを特定し、その命令の数命令前からプログラムの再現実行をさせながら、そのときの回路の動作を解析することが、一般的に行われる。
このようなデバッグを進めときに、LSIの回路動作をシミュレーションで確認すると時間がかかる。特に、大規模LSIでは、その弊害が顕著である。そこで、シミュレータの代わりに、LSIの回路記述データをFPGAなどにマッピングしたハードウェアエミュレータを使用し、CPU動作(ソフトウェア)とハードウェアの協調デバッグを行い、デバッグ時間の短縮を図ることが行われる。
この協調デバッグのために、例えばパーソナルコンピュータ上で動作する、ソフトウェアデバッガおよびハードウェアデバッガが使用される。
デバッグ実行の際は、ソフトウェアデバッガによりブレイクポイントを設定しながらプログラムの実行を徐々に進めて問題が起こったときの命令をプログラムのソースコード上で検出し、その後、ハードウェアエミュレータを再実行させ、問題発生の命令の1〜数命令前から、ハードウェアデバッガによるハードウェアエミュレータ出力の詳細な波形観測を行う、などの方法で問題の発生した回路の特定が行われる。
これにより、デバッグ時間が短縮されるが、それでも、まだ、ハードウェアエミュレータの再実行に時間を要するという問題がある。
これに対して、従来、FPGAに検証対象回路と、これを複製した複製回路とをマッピングし、検証対象回路と複製回路を同時に動作させるときに、複製回路へは検証対象回路よりも遅延させた入力を与え、検証対象回路に不具合が発生したときに、複製回路の実行を停止して、そのときの複製回路の内部状態を取得することにより、不具合発生時点よりも前の時点の回路の状態を直ちに取得できるデバッグシステムが提案されている(例えば、特許文献1参照。)。
しかし、上述のデバッグシステムでは、複製回路の入力へ与えられる遅延が固定である。そのため、CPUにパイプライン処理方式のCPUを使用している場合、ストールの発生などにより命令実行に要するクロック数が一定ではないため、検証対象回路に不具合が発生したときに複製回路で実行されている命令が、検証対象回路で実行された命令よりもいくつ前の命令か不明である、という問題が発生する。
また、場合によっては、不具合の原因となった命令が、複製回路で既に実行されていることもあり、不具合の特定が困難になる、という問題もあった。
米国特許出願公開第2006/0190860号明細書
そこで、本発明の目的は、検証対象回路と複製回路との間の命令実行間隔を常に所定命令数にすることのできるハードウェアエミュレータを用いるデバッグ装置およびデバッグ方法を提供することにある。
本発明の一態様によれば、ハードウェアエミュレータと、前記ハードウェアエミュレータを制御するソフトウェアデバッガと、前記ハードウェアエミュレータの出力を解析するハードウェアデバッガとを備えるデバッグ装置であって、前記ハードウェアエミュレータは、プログラムカウンタにより命令実行の進行が制御されるCPUおよび前記CPUの命令実行に応じて動作する回路を含む検証対象回路部と、前記検証対象回路部を複製した少なくとも1つの複製回路部と、前記ソフトウェアデバッガから動作開始信号が出力されたときに前記検証対象回路部の動作を開始させ、前記ソフトウェアデバッガにより設定されたブレイクポイントに前記検証対象回路部の前記プログラムカウンタの値が達したときに前記検証対象回路部および前記複製回路部の動作を停止させるデバッグ制御手段と、前記検証対象回路部で実行される命令と同じ命令を前記検証対象回路部における命令実行の開始から所定の命令数遅らせて前記複製回路部で実行開始させる実行開始遅延手段と、前記検証対象回路部の前記プログラムカウンタの値の更新と前記複製回路部のプログラムカウンタの値の更新を、前記検証対象回路部および前記複製回路部において実行中の命令の実行がともに終了しているときに同時に行うよう制御するプログラムカウンタ制御手段と、前記ハードウェアデバッガからの要求に応じて前記検証対象回路部または前記複製回路部の出力を前記ハードウェアデバッガへ送出する出力手段とを有することを特徴とするデバッグ装置が提供される。
また、本発明の別の一態様によれば、プログラムカウンタにより命令実行の進行が制御されるCPUおよび前記CPUの命令実行に応じて動作する回路を含む検証対象回路部および前記検証対象回路部を複製した少なくとも1つの複製回路部を搭載するハードウェアエミュレータと、前記ハードウェアエミュレータを制御するソフトウェアデバッガと、前記ハードウェアエミュレータの出力を解析するハードウェアデバッガとを用いるデバッグ方法であって、前記ソフトウェアデバッガにより前記複製回路部における命令の実行開始を前記検証対象回路部における命令実行の開始から遅らせる命令数を設定するステップと、前記ソフトウェアデバッガによりブレイクポイントを設定するステップと、前記ソフトウェアデバッガから動作開始信号を出力して前記検証対象回路部に動作を開始させるステップと、前記設定された命令数遅れて前記検証対象回路部で実行されている命令と同じ命令を前記複製回路部が実行開始するステップと、前記ハードウェアエミュレータが、前記検証対象回路部の前記プログラムカウンタの値の更新と前記複製回路部のプログラムカウンタの値の更新を、前記検証対象回路部および前記複製回路部において実行中の命令の実行がともに終了しているときに同時に行うよう制御しながら、命令実行を進めるステップと、前記ハードウェアエミュレータが、前記検証対象回路部の前記プログラムカウンタの値が前記ブレイクポイントに達したときに前記検証対象回路部および前記複製回路部の動作を停止させるステップと、前記ハードウェアデバッガから前記ハードウェアエミュレータへ出力要求を送り、前記複製回路部の出力を前記ハードウェアデバッガへ送出させるステップとを有することを特徴とするデバッグ方法が提供される。
本発明によれば、ハードウェアエミュレータに搭載される検証対象回路と複製回路との間の命令実行間隔を常に所定命令数にすることができるので、複製回路の状態を観測することにより検証対象回路に不具合が発生したときよりも所定命令数前の動作を解析することができる。
以下、本発明の実施例を図面を参照して説明する。
図1は、本発明の実施例1に係るデバッグ装置の構成の例を示すブロック図である。
本実施例のデバッグ装置は、ハードウェアエミュレータ1と、ハードウェアエミュレータ1を制御するソフトウェアデバッガ2と、ハードウェアエミュレータ1の出力を解析するハードウェアデバッガ3とを備える。
ハードウェアエミュレータ1は、プログラムカウンタPC1により命令実行の進行が制御されるCPU1およびCPU1の命令実行に応じて動作する周辺回路を含む検証対象回路部11と、検証対象回路部11を複製した回路であり、プログラムカウンタPC2により命令実行の進行が制御されるCPU2およびCPU2の命令実行に応じて動作する周辺回路を含む複製回路部12と、ソフトウェアデバッガ2から動作開始信号が出力されたときに検証対象回路部11の動作を開始させ、ソフトウェアデバッガ2により設定されたブレイクポイントに検証対象回路部11のプログラムカウンタPC1の値が達したときに検証対象回路部11および複製回路部12の動作を停止させるデバッグ制御部13と、検証対象回路部11で実行される命令と同じ命令を検証対象回路部11における命令実行の開始からソフトウェアデバッガ2により設定された遅延命令数の分遅らせて複製回路部12で実行開始させる実行開始遅延部14と、検証対象回路部11のプログラムカウンタPC1の値の更新と複製回路部12のプログラムカウンタPC2の値の更新を、検証対象回路部11および複製回路部12において実行中の命令の実行がともに終了しているときに同時に行うよう制御するプログラムカウンタ制御部15と、ハードウェアデバッガ3からの出力要求に応じて検証対象回路部11または複製回路部12の出力をハードウェアデバッガ3へ送出する出力手段16と、を有する。
ソフトウェアデバッガ2は、複製回路部12における命令の実行開始を検証対象回路部11における命令実行の開始からどれだけ遅らせるかを指定する遅延命令数、および、検証対象回路部11のプログラムカウンタPC1に対するブレイクポイントを設定し、動作開始信号を出力することによりハードウェアエミュレータ1にプログラム動作を開始させる。
ハードウェアデバッガ3は、出力要求を出して、検証対象回路部11または複製回路部12の出力を受け取り、例えば波形表示などを行うことにより検証対象回路部11または複製回路部12の動作解析を行うツールである。
ここで、本実施例で用いられるCPU1およびCPU2は、命令実行をパイプライン方式で処理するプロセッサとする。
図2にパイプライン処理方式のCPUにおける命令実行処理の例を示す。ここでは、パイプラインのステージとして、F(命令フェッチ)、D(デコード)、E(実行)、M(メモリアクセス)、W(レジスタライトバック)の5つのステージを備えるものとする。
パイプライン処理では、命令によってあるステージの処理が単位時間内に終わらないときは、パイプライン処理を停止(ストール)させて、その処理の終了を待つことが行われる。
図2では、このCPUにおいて命令1、命令2、命令3、・・・が順次実行されるときに、命令2がEステージを2サイクル、ストールさせ、命令3がEステージを1サイクル、ストールさせたときの各ステージの処理状況を示している。
ここで、Eステージで実行中の命令を「実行命令」と称するものとすると、実行命令の処理時間は、命令1が1サイクル、命令2が3サイクル、命令3が2サイクルとなる。
なお、本実施例で用いるCPUでは、実行命令を変更する際に、プログラムカウンタ変化トリガ信号TGを出力するものとする。図2に示すように、プログラムカウンタ変化トリガ信号TGに‘1’が出力されると、Eステージが次の命令の処理を開始する。
図2に示すように、パイプライン処理方式では、実行命令の処理時間は一定ではなく、命令によって変化する。したがって、ある命令の実行中に不具合が表面化し、デバッグのために、例えば1つ前の命令の実行状況を解析したいとしても、1つ前の命令が何サイクル前に実行されていたかは一概にはわからない。
そこで、本実施例では、複製回路部12が、実行命令の処理サイクルの長短にかかわらず、検証対象回路部11より常に所定の命令数遅れて命令を実行し、検証対象回路部11の処理を停止したときに、所定の命令数前の命令が複製回路部12で必ず実行されているようにする。
そのために、本実施例では、プログラムカウンタ制御部15が、検証対象回路部11のCPU1から出力されるプログラムカウンタ変化トリガ信号TG1と、複製回路部12のCPU2から出力されるプログラムカウンタ変化トリガ信号TG2の出力レベルを監視し、検証対象回路部11のプログラムカウンタPC1の値の更新と複製回路部12のプログラムカウンタPC2の値の更新を、検証対象回路部11および複製回路部12において実行中の命令の実行がともに終了しているときに同時に行うよう制御する。
図3に、プログラムカウンタ制御部15の具体的な回路例を示す。
ここで、まず、プログラムカウンタ制御部15へ入力される各信号の信号レベルについて説明する。
デバッグ制御部13から入力される開始信号は、デバッグ開始時に‘1’レベルのパルスが出力され、その他のときは‘0’レベル状態となっている。また、同じくデバッグ制御部13から入力される停止信号は、通常動作時は‘0’レベルで、検証対象回路部11のプログラムカウンタPC1の値がブレイクポイントの値と一致したときに‘1’となる。
実行開始実行部14から出力される信号は、ソフトウェアでバッガ2により設定された遅延命令数の期間‘1’レベルであり、その後‘0’レベルを保持する。
プログラムカウンタ変化トリガ信号TG1、TG2は、各CPUのEステージで実行命令が実行中は‘0’レベルであり、実行命令を変更させるときに‘1’レベルとなる。
図3では、ANDゲートAND11とAND21により、プログラムカウンタ変化トリガ信号TG1、TG2の変化の状態を監視する。
AND11の出力は、ORゲートOR11、ANDゲートAND12を介して、検証対象回路部11のCPU1のクロックCK1を生成するANDゲートAND13へ入力される。ここで、AND12の出力をクロック停止/動作信号ST1とすると、AND13は、クロック停止/動作信号ST1が‘0’のとき、クロックパルス信号CPをクロックCK1として出力し、クロック停止/動作信号ST1が‘1’のとき、クロックCK1を停止する。
また、AND21の出力は、ORゲートOR21、ANDゲートAND22、ORゲートOR22を介して、複製回路部12のCPU2のクロックCK2を生成するANDゲートAND23へ入力される。ここで、OR22の出力をクロック停止/動作信号ST2とすると、AND23は、クロック停止/動作信号ST2が‘0’のとき、クロックパルス信号CPをクロックCK2として出力し、クロック停止/動作信号ST2が‘1’のとき、クロックCK2を停止する。
この図3に示す回路で、開始信号が‘1’(デバッグ開始)になると、AND12の出力であるクロック停止/動作信号ST1が‘0’となり、AND13からクロックCK1の出力が開始される。同時に、AND22の出力も‘0’となるが、クロック停止/動作信号ST2は、OR22へ入力される実行開始実行部14からの信号により遅延命令数の期間‘1’レベルであり、その後‘0’レベルとなる。クロック停止/動作信号ST2が‘0’レベルになると、AND23からクロックCK2の出力が開始される。
その後、CPU1、CPU2での命令実行中は、プログラムカウンタ変化トリガ信号TG1、TG2の相互関係により、クロックCK1、クロックCK2が停止されることがある。
すなわち、プログラムカウンタ変化トリガ信号TG1が‘1’でプログラムカウンタ変化トリガ信号TG2が‘0’であるときは、AND11が‘1’となり、クロック停止/動作信号ST1が‘1’ となってクロックCK1が停止する。
一方、プログラムカウンタ変化トリガ信号TG1が‘0’でプログラムカウンタ変化トリガ信号TG2が‘1’であるときは、AND21が‘1’となり、クロック停止/動作信号ST2が‘1’ となってクロックCK2が停止する。
その後、検証対象回路部11のプログラムカウンタPC1の値がブレイクポイントの値と一致すると、デバッグ制御部13から入力される停止信号が‘1’となり、OR11、OR21が‘1’となってプログラムカウンタ変化トリガ信号TG1、TG2がとなり、クロックCK1、CK2が、ともに停止する。
図4に、本実施例のハードウェアエミュレータ1の動作の例を波形図で示す。ここでは、ソフトウェアデバッガ2で設定される遅延命令数が「1」、ブレイクポイントが「0x18」である例を示す。また、それぞれプログラムカウンタの値で示す命令は、Eステージの実行に、「0x8」、「0x10」の命令は1サイクルかかり、「0xC」、「0x14」の命令は2サイクルかかるものとする。ここでは、「0x8」、「0x10」の命令を1サイクル命令、「0xC」、「0x14」の命令を2サイクル命令と称する。
次に、各サイクルでの、検証対象回路部11および複製回路部12の動作について説明する。
(サイクルC1)
検証対象回路部11は、2サイクル命令「0xC」の1サイクル目であるのでプログラムカウンタ変化トリガ信号TG1がアサートされず、クロック停止/動作信号ST1をアサートせず、次のサイクルではクロックCK1を出力する。
検証対象回路部11は、2サイクル命令「0xC」の1サイクル目であるのでプログラムカウンタ変化トリガ信号TG1がアサートされず、クロック停止/動作信号ST1をアサートせず、次のサイクルではクロックCK1を出力する。
複製回路部12は、1サイクル命令「0x8」を実行しているため、プログラムカウンタ変化トリガ信号TG2がアサートされる。このとき、プログラムカウンタ変化トリガ信号TG1がアサートされていないため、クロック停止/動作信号ST2をアサートし、次のサイクルではクロックCK2を停止する。
(サイクルC2)
検証対象回路部11は、2サイクル命令「0xC」の2サイクル目であるのでプログラムカウンタ変化トリガ信号TG1がアサートされ、プログラムカウンタ変化トリガ信号TG2もアサートされているので、クロック停止/動作信号ST1をアサートせず、次のサイクルではクロックCK1を出力する。
検証対象回路部11は、2サイクル命令「0xC」の2サイクル目であるのでプログラムカウンタ変化トリガ信号TG1がアサートされ、プログラムカウンタ変化トリガ信号TG2もアサートされているので、クロック停止/動作信号ST1をアサートせず、次のサイクルではクロックCK1を出力する。
複製回路部12は、クロックCK2が停止されているので前サイクルの状態を保持する。プログラムカウンタ変化トリガ信号TG1がアサートされたので、クロック停止/動作信号ST2をデアサートし、次のサイクルではクロックCK2を出力する。
(サイクルC3)
検証対象回路部11は、1サイクル命令「0x10」を実行しているため、プログラムカウンタ変化トリガ信号TG1がアサートされる。このとき、プログラムカウンタ変化トリガ信号TG2がアサートされていないため、クロック停止/動作信号ST1をアサートし、次のサイクルではクロックCK1を停止する。
検証対象回路部11は、1サイクル命令「0x10」を実行しているため、プログラムカウンタ変化トリガ信号TG1がアサートされる。このとき、プログラムカウンタ変化トリガ信号TG2がアサートされていないため、クロック停止/動作信号ST1をアサートし、次のサイクルではクロックCK1を停止する。
複製回路部12は、2サイクル命令「0xC」の1サイクル目であるのでプログラムカウンタ変化トリガ信号TG2がアサートされず、クロック停止/動作信号ST2をアサートせず、次のサイクルではクロックCK2を出力する。
(サイクルC4)
検証対象回路部11は、クロックCK1が停止されているので前サイクルの状態を保持する。プログラムカウンタ変化トリガ信号TG2がアサートされたので、クロック停止/動作信号ST1をデアサートし、次のサイクルではクロックCK1を出力する。
検証対象回路部11は、クロックCK1が停止されているので前サイクルの状態を保持する。プログラムカウンタ変化トリガ信号TG2がアサートされたので、クロック停止/動作信号ST1をデアサートし、次のサイクルではクロックCK1を出力する。
複製回路部12は、2サイクル命令「0xC」の2サイクル目であるのでプログラムカウンタ変化トリガ信号TG2がアサートされ、プログラムカウンタ変化トリガ信号TG1もアサートされているので、クロック停止/動作信号ST2をアサートせず、次のサイクルではクロックCK2を出力する。
(サイクルC5)
検証対象回路部11は、2サイクル命令「0x14」の1サイクル目であるのでプログラムカウンタ変化トリガ信号TG1がアサートされず、クロック停止/動作信号ST1をアサートせず、次のサイクルではクロックCK1を出力する。
検証対象回路部11は、2サイクル命令「0x14」の1サイクル目であるのでプログラムカウンタ変化トリガ信号TG1がアサートされず、クロック停止/動作信号ST1をアサートせず、次のサイクルではクロックCK1を出力する。
複製回路部12は、1サイクル命令「0x10」を実行しているため、プログラムカウンタ変化トリガ信号TG2がアサートされる。このとき、プログラムカウンタ変化トリガ信号TG1がアサートされていないため、クロック停止/動作信号ST2をアサートし、次のサイクルではクロックCK2を停止する。
(サイクルC6)
検証対象回路部11は、2サイクル命令「0x14」の2サイクル目であるのでプログラムカウンタ変化トリガ信号TG1がアサートされ、プログラムカウンタ変化トリガ信号TG2もアサートされているので、クロック停止/動作信号ST1をアサートせず、次のサイクルではクロックCK1を出力する。
検証対象回路部11は、2サイクル命令「0x14」の2サイクル目であるのでプログラムカウンタ変化トリガ信号TG1がアサートされ、プログラムカウンタ変化トリガ信号TG2もアサートされているので、クロック停止/動作信号ST1をアサートせず、次のサイクルではクロックCK1を出力する。
複製回路部12は、クロックCK2が停止されているので前サイクルの状態を保持する。プログラムカウンタ変化トリガ信号TG1がアサートされたので、クロック停止/動作信号ST2をデアサートし、次のサイクルではクロックCK2を出力する。
(サイクルC7)
検証対象回路部11は、プログラムカウンタPC1の値がブレイクポイントの値(0x18)と一致したため、クロック停止/動作信号ST1をアサートする。同時に、複製回路部12も、クロック停止/動作信号ST2をアサートする。
検証対象回路部11は、プログラムカウンタPC1の値がブレイクポイントの値(0x18)と一致したため、クロック停止/動作信号ST1をアサートする。同時に、複製回路部12も、クロック停止/動作信号ST2をアサートする。
このような本実施例によれば、検証対象回路部11と複製回路部12が、互いに相手の命令の実行状況を監視し、自己の命令の実行が終了しても相手の命令が実行中であるときは、自己の命令実行を次に進めず、相手の命令実行終了を待つ。これにより、検証対象回路部11と複製回路部12の命令実行間隔を、常に、ソフトウェアデバッガ2で設定する遅延命令数の値に保つことができる。そのため、検証対象回路部11のプログラムカウンタPC1の値がブレイクポイントの値と一致したときに複製回路部12で実行されている命令が、どの命令であるかを直ちに確定することができる。
このブレイクポイントに到達して動作が停止した複製回路部12の内部状態をハードウェアデバッガ3で解析することにより、不具合の原因が、ソフトウェアデバッガ2で設定した遅延命令数前の命令の実行で発生したものかどうかがわかる。
そのとき、遅延命令数前の命令の実行では不具合が発生していないことがわかったときは、ハードウェアデバッガ3から要求を出して、複製回路部12に動作停止時点以降の動作を実行させ、その内部状態を解析することにより、動作停止以降のどの時点で不具合が発生するかを確認することができる。
本実施例では、実施例1のデバッグ装置を用いたデバッグ方法について示す。
図5は、本実施例のデバッグ方法の処理の流れの例を示すフロー図である。
デバッグの開始にあたっては、まず、ソフトウェアデバッガ2により、複製回路部12に対する遅延命令数の設定(ステップS01)、およびブレイクポイントの設定を行い(ステップS02)、その後、ソフトウェアデバッガ2から動作開始信号を出力する(ステップS03)。
この動作開始信号を受けて、ハードウェアエミュレータ1が動作を開始する。そのとき、ハードウェアエミュレータ1は、検証対象回路部11が先に命令実行を開始し、ステップS01で設定された遅延命令数遅れて、検証対象回路部11で実行されている命令と同じ命令を複製回路部12が実行開始する。
その後、ハードウェアエミュレータ1は、検証対象回路部11のプログラムカウンタPC1の値の更新と複製回路部12のプログラムカウンタPC2の値の更新を、検証対象回路部11および複製回路部12において実行中の命令の実行がともに終了しているときに同時に行うよう制御しながら、命令の実行を進める(ステップS04)。
その後、検証対象回路部11のプログラムカウンタPC1の値が、ソフトウェアデバッガ2により設定されたブレイクポイントに到達すると、ハードウェアエミュレータ1は、検証対象回路部11および複製回路部12の動作を停止させる(ステップS05)。
そこで、ハードウェアデバッガ3からハードウェアエミュレータ1へ出力要求を送り、複製回路部12の出力をハードウェアデバッガ3へ送出させる(ステップS06)。
送出された複製回路部12の出力に対して、ハードウェアデバッガ3による動作解析を行う(ステップS07)。
このハードウェアデバッガ3による動作解析により、検証対象回路部11によるプログラム実行時にブレイクポイントで発生する不具合の原因を追究する。
そのとき、遅延命令数前の命令の実行では不具合が発生していないことがわかったときは、ハードウェアデバッガ3から要求を出して、複製回路部12に動作停止時点以降の動作を実行させる。そして、ハードウェアデバッガ3により、そのときの複製回路部12の内部状態を解析することにより、動作停止以降のどの時点で不具合が発生するかを確認することができる。
なお、この解析で、不具合発生の原因が、さらに以前の命令の実行にあると推察されることもある。そのような場合には、ステップS01で設定する遅延命令数の数を増加させて、図5に示すフローの処理を再度行うようにすればよい。そうすれば、増加させた命令数分だけ遡って、不具合発生原因解析の範囲を広げることができる。
このような本実施例によれば、遅延命令数の設定を行うことにより、不具合の発生した命令から、その遅延命令数前の命令まで、の間の動作解析を直ちに行うことができ、デバッグ作業を効率的に進めることができる。
なお、上述の各実施例では、複製部の数が1個の場合を例にとって説明したが、複製部の数を2個以上としてもよい。その場合、それぞれの複数部に設定する遅延命令数の数を異ならせることにより、不具合が発生したときに解析を開始するポイントを複数用意することができる。これにより、不具合の発生した命令から前の命令へ、命令の実行を遡りながらデバッグするときに、ハードウェアエミュレータを再動作させなくとも複数の解析ポイントにおける複製部の動作状態を1度に得ることができ、デバッグ作業の効率をさらに向上させることができる。
1 ハードウェアエミュレータ
2 ソフトウェアデバッガ
3 ハードウェアデバッガ
11 検証対象回路部
12 複製回路部
13 デバッグ制御部
14 実行開始遅延部
15 プログラムカウンタ制御部
16 出力部
PC1、PC2 プログラムカウンタ
2 ソフトウェアデバッガ
3 ハードウェアデバッガ
11 検証対象回路部
12 複製回路部
13 デバッグ制御部
14 実行開始遅延部
15 プログラムカウンタ制御部
16 出力部
PC1、PC2 プログラムカウンタ
Claims (5)
- ハードウェアエミュレータと、前記ハードウェアエミュレータを制御するソフトウェアデバッガと、前記ハードウェアエミュレータの出力を解析するハードウェアデバッガとを備えるデバッグ装置であって、
前記ハードウェアエミュレータは、
プログラムカウンタにより命令実行の進行が制御されるCPUおよび前記CPUの命令実行に応じて動作する回路を含む検証対象回路部と、
前記検証対象回路部を複製した少なくとも1つの複製回路部と、
前記ソフトウェアデバッガから動作開始信号が出力されたときに前記検証対象回路部の動作を開始させ、前記ソフトウェアデバッガにより設定されたブレイクポイントに前記検証対象回路部の前記プログラムカウンタの値が達したときに前記検証対象回路部および前記複製回路部の動作を停止させるデバッグ制御手段と、
前記検証対象回路部で実行される命令と同じ命令を前記検証対象回路部における命令実行の開始から所定の命令数遅らせて前記複製回路部で実行開始させる実行開始遅延手段と、
前記検証対象回路部の前記プログラムカウンタの値の更新と前記複製回路部のプログラムカウンタの値の更新を、前記検証対象回路部および前記複製回路部において実行中の命令の実行がともに終了しているときに同時に行うよう制御するプログラムカウンタ制御手段と、
前記ハードウェアデバッガからの要求に応じて前記検証対象回路部または前記複製回路部の出力を前記ハードウェアデバッガへ送出する出力手段と
を有することを特徴とするデバッグ装置。 - 前記デバッグ制御手段が、
前記ハードウェアデバッガからの要求に応じて、動作停止時点以降の前記複製回路部の動作を実行させる
ことを特徴とする請求項1に記載のデバッグ装置。 - プログラムカウンタにより命令実行の進行が制御されるCPUおよび前記CPUの命令実行に応じて動作する回路を含む検証対象回路部および前記検証対象回路部を複製した少なくとも1つの複製回路部を搭載するハードウェアエミュレータと、前記ハードウェアエミュレータを制御するソフトウェアデバッガと、前記ハードウェアエミュレータの出力を解析するハードウェアデバッガとを用いるデバッグ方法であって、
前記ソフトウェアデバッガにより前記複製回路部における命令の実行開始を前記検証対象回路部における命令実行の開始から遅らせる命令数を設定するステップと、
前記ソフトウェアデバッガによりブレイクポイントを設定するステップと、
前記ソフトウェアデバッガから動作開始信号を出力して前記検証対象回路部に動作を開始させるステップと、
前記設定された命令数遅れて前記検証対象回路部で実行されている命令と同じ命令を前記複製回路部が実行開始するステップと、
前記ハードウェアエミュレータが、前記検証対象回路部の前記プログラムカウンタの値の更新と前記複製回路部のプログラムカウンタの値の更新を、前記検証対象回路部および前記複製回路部において実行中の命令の実行がともに終了しているときに同時に行うよう制御しながら、命令実行を進めるステップと、
前記ハードウェアエミュレータが、前記検証対象回路部の前記プログラムカウンタの値が前記ブレイクポイントに達したときに前記検証対象回路部および前記複製回路部の動作を停止させるステップと、
前記ハードウェアデバッガから前記ハードウェアエミュレータへ出力要求を送り、前記複製回路部の出力を前記ハードウェアデバッガへ送出させるステップと
を有することを特徴とするデバッグ方法。 - 前記ハードウェアデバッガから指示して、前記複製回路部に動作停止時点以降の動作を実行させる
ことを特徴とする請求項3に記載のデバッグ方法。 - 1回の実行で不具合箇所が特定できないときは、前記検証対象回路部の命令実行の開始を遅らせる命令数を増加させて前記ハードウェアエミュレータを再動作させる
ことを特徴とする請求項3または4に記載のデバッグ方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008030962A JP2009193165A (ja) | 2008-02-12 | 2008-02-12 | デバッグ装置およびデバッグ方法 |
US12/367,761 US20090204384A1 (en) | 2008-02-12 | 2009-02-09 | Debugging device, debugging method and hardware emulator |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008030962A JP2009193165A (ja) | 2008-02-12 | 2008-02-12 | デバッグ装置およびデバッグ方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2009193165A true JP2009193165A (ja) | 2009-08-27 |
Family
ID=40939633
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2008030962A Pending JP2009193165A (ja) | 2008-02-12 | 2008-02-12 | デバッグ装置およびデバッグ方法 |
Country Status (2)
Country | Link |
---|---|
US (1) | US20090204384A1 (ja) |
JP (1) | JP2009193165A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20190070960A (ko) * | 2016-10-25 | 2019-06-21 | 자일링크스 인코포레이티드 | 디버깅 시스템 및 방법 |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8612937B2 (en) * | 2011-08-25 | 2013-12-17 | International Business Corporation | Synchronously debugging a software program using a plurality of virtual machines |
US10962595B1 (en) * | 2017-12-04 | 2021-03-30 | Synopsys, Inc. | Efficient realization of coverage collection in emulation |
KR20210014365A (ko) * | 2019-07-30 | 2021-02-09 | 에스케이하이닉스 주식회사 | 컨트롤러 및 그 동작 방법 |
US11205005B2 (en) | 2019-09-23 | 2021-12-21 | International Business Machines Corporation | Identifying microarchitectural security vulnerabilities using simulation comparison with modified secret data |
US11443044B2 (en) | 2019-09-23 | 2022-09-13 | International Business Machines Corporation | Targeted very long delay for increasing speculative execution progression |
Family Cites Families (29)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5574892A (en) * | 1993-06-30 | 1996-11-12 | Intel Corporation | Use of between-instruction breaks to implement complex in-circuit emulation features |
US5530804A (en) * | 1994-05-16 | 1996-06-25 | Motorola, Inc. | Superscalar processor with plural pipelined execution units each unit selectively having both normal and debug modes |
US5630102A (en) * | 1994-12-19 | 1997-05-13 | Intel Corporation | In-circuit-emulation event management system |
US6567933B1 (en) * | 1999-02-19 | 2003-05-20 | Texas Instruments Incorporated | Emulation suspension mode with stop mode extension |
US6598178B1 (en) * | 1999-06-01 | 2003-07-22 | Agere Systems Inc. | Peripheral breakpoint signaler |
US6470481B2 (en) * | 1999-07-29 | 2002-10-22 | Michael C. Brouhard | State management in a co-verification system |
US7240303B1 (en) * | 1999-11-30 | 2007-07-03 | Synplicity, Inc. | Hardware/software co-debugging in a hardware description language |
US6545549B2 (en) * | 2000-03-02 | 2003-04-08 | Texas Instruments Incorporated | Remotely controllable phase locked loop clock circuit |
US7076420B1 (en) * | 2000-10-26 | 2006-07-11 | Cypress Semiconductor Corp. | Emulator chip/board architecture and interface |
US7765095B1 (en) * | 2000-10-26 | 2010-07-27 | Cypress Semiconductor Corporation | Conditional branching in an in-circuit emulation system |
US6842728B2 (en) * | 2001-03-12 | 2005-01-11 | International Business Machines Corporation | Time-multiplexing data between asynchronous clock domains within cycle simulation and emulation environments |
US7257524B2 (en) * | 2001-09-19 | 2007-08-14 | Quickturn Design Systems, Inc. | Simulation and timing control for hardware accelerated simulation |
US6922821B1 (en) * | 2001-11-15 | 2005-07-26 | Cypress Semiconductor Corp. | System and a method for checking lock step consistency between an in circuit emulation and a microcontroller while debugging process is in progress |
US7774190B1 (en) * | 2001-11-19 | 2010-08-10 | Cypress Semiconductor Corporation | Sleep and stall in an in-circuit emulation system |
US20030182653A1 (en) * | 2002-03-22 | 2003-09-25 | Giuseppe Desoli | Systems and methods for verifying correct execution of emulated code via dynamic state verification |
US7213216B2 (en) * | 2002-08-09 | 2007-05-01 | Synplicity, Inc. | Method and system for debugging using replicated logic and trigger logic |
US7360117B1 (en) * | 2002-10-24 | 2008-04-15 | Verisilicon Holdings (Cayman Islands) Co. Ltd. | In-circuit emulation debugger and method of operation thereof |
US8401835B2 (en) * | 2002-11-22 | 2013-03-19 | Texas Instruments Incorporated | Trigger ordering for trace streams when multiple triggers accumulate |
US7203632B2 (en) * | 2003-03-14 | 2007-04-10 | Xilinx, Inc. | HDL co-simulation in a high-level modeling system |
US7072825B2 (en) * | 2003-06-16 | 2006-07-04 | Fortelink, Inc. | Hierarchical, network-based emulation system |
US7366652B2 (en) * | 2003-06-16 | 2008-04-29 | Springsoft, Inc. | Method of programming a co-verification system |
US20050039169A1 (en) * | 2003-08-14 | 2005-02-17 | Yu-Cheng Hsu | Integrated source code debugging apparatus method and system |
US7346481B1 (en) * | 2004-08-31 | 2008-03-18 | Xilinx, Inc. | Hardware co-simulation breakpoints in a high-level modeling system |
US7475288B2 (en) * | 2004-10-05 | 2009-01-06 | Hans Erich Multhaup | Accelerated hardware emulation environment for processor-based systems |
US7424416B1 (en) * | 2004-11-09 | 2008-09-09 | Sun Microsystems, Inc. | Interfacing hardware emulation to distributed simulation environments |
US7480609B1 (en) * | 2005-01-31 | 2009-01-20 | Sun Microsystems, Inc. | Applying distributed simulation techniques to hardware emulation |
US7653527B2 (en) * | 2005-12-29 | 2010-01-26 | Bull Hn | Runtime selection of code variants in a multiprogram computer hardware emulation system |
US7908574B2 (en) * | 2007-05-09 | 2011-03-15 | Synopsys, Inc. | Techniques for use with automated circuit design and simulations |
JP2008310727A (ja) * | 2007-06-18 | 2008-12-25 | Toshiba Corp | シミュレーション装置及びシミュレーション方法 |
-
2008
- 2008-02-12 JP JP2008030962A patent/JP2009193165A/ja active Pending
-
2009
- 2009-02-09 US US12/367,761 patent/US20090204384A1/en not_active Abandoned
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20190070960A (ko) * | 2016-10-25 | 2019-06-21 | 자일링크스 인코포레이티드 | 디버깅 시스템 및 방법 |
KR102370667B1 (ko) | 2016-10-25 | 2022-03-03 | 자일링크스 인코포레이티드 | 디버깅 시스템 및 방법 |
Also Published As
Publication number | Publication date |
---|---|
US20090204384A1 (en) | 2009-08-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6598178B1 (en) | Peripheral breakpoint signaler | |
JP4266226B2 (ja) | 選択的に有効にされるチェッカーを用いた設計検証システムおよび方法 | |
JP2009193165A (ja) | デバッグ装置およびデバッグ方法 | |
US20080312900A1 (en) | Simulation apparatus and simulation method | |
US7007268B2 (en) | Method and apparatus for debugging in a massively parallel processing environment | |
US10095611B1 (en) | Methodology for unit test and regression framework | |
KR20090118863A (ko) | 오퍼레이팅 시스템 메모리 핫 애드를 시뮬레이션하여 파워온 시간을 감소시키는 방법 | |
JP2001222442A (ja) | パイプライン試験方法、パイプライン試験命令生成方法及びその記憶媒体 | |
JPH05505271A (ja) | コンピュータプログラムをテストし、デバッグする方法 | |
US20190146893A1 (en) | Simulation device, simulation system, simulation method, and simulation program | |
WO2011125280A1 (ja) | デバッグ支援装置、デバッグ支援方法及びデバッグ支援プログラム | |
TW200401112A (en) | System verifying apparatus and method | |
JP2019204388A (ja) | 半導体装置、およびデバッグ方法 | |
JP3953243B2 (ja) | システム分析のためにバス・アービトレーション制御を使用する同期方法及び装置 | |
JPH0320683A (ja) | 集積回路の事象認定試験アーキテクチャ | |
JP7026107B2 (ja) | 処理回路素子に対するトリガ信号のアサーションを制御する装置及び方法 | |
US8332197B2 (en) | Simulation of complex system architecture | |
JP2008107872A (ja) | 半導体集積回路 | |
JP2002041485A (ja) | トランザクション競合試験方式 | |
JP2005031860A (ja) | テストケース生成装置 | |
US20240201729A1 (en) | Event logging based on global clock in system with multiple components | |
JP6949440B2 (ja) | ベクタ生成装置及びベクタ生成用プログラム | |
US7404120B1 (en) | Verification of event handling | |
Kulkarni et al. | Dataset development of GPU block using Scan Dump for Silicon Debug | |
JP2009009201A (ja) | デバッグ装置 |