JP7019711B2 - デバッグシステムおよびデバッグ方法 - Google Patents

デバッグシステムおよびデバッグ方法 Download PDF

Info

Publication number
JP7019711B2
JP7019711B2 JP2019548360A JP2019548360A JP7019711B2 JP 7019711 B2 JP7019711 B2 JP 7019711B2 JP 2019548360 A JP2019548360 A JP 2019548360A JP 2019548360 A JP2019548360 A JP 2019548360A JP 7019711 B2 JP7019711 B2 JP 7019711B2
Authority
JP
Japan
Prior art keywords
debug
hardware
hll
command
controller circuit
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.)
Active
Application number
JP2019548360A
Other languages
English (en)
Other versions
JP2020509507A (ja
Inventor
ビジャレアル,ジェイソン
サンクロジ,マヘシュ
デューム,ニクヒル・エイ
ディーパク,クマール
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Xilinx Inc
Original Assignee
Xilinx Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Xilinx Inc filed Critical Xilinx Inc
Publication of JP2020509507A publication Critical patent/JP2020509507A/ja
Application granted granted Critical
Publication of JP7019711B2 publication Critical patent/JP7019711B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3648Software debugging using additional hardware
    • G06F11/3656Software debugging using additional hardware using a specific debug interface
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3636Software debugging by tracing the execution of the program
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/22Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
    • G06F11/26Functional testing
    • G06F11/273Tester hardware, i.e. output processing circuits
    • G06F11/277Tester hardware, i.e. output processing circuits with comparison between actual response and known fault-free response
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3628Software debugging of optimised code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3648Software debugging using additional hardware
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3664Environments for testing or debugging software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/32Circuit design at the digital level
    • G06F30/33Design verification, e.g. functional simulation or model checking
    • G06F30/3308Design verification, e.g. functional simulation or model checking using simulation
    • G06F30/331Design verification, e.g. functional simulation or model checking using simulation with hardware acceleration, e.g. by using field programmable gate array [FPGA] or emulation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Evolutionary Computation (AREA)
  • Geometry (AREA)
  • Debugging And Monitoring (AREA)

Description

技術分野
本開示は、一般に、回路記述に変換されたソフトウェアのデバッグに関する。
背景
ソフトウェアシステムの性能を改善する1つの手法は、選択したセクションをハードウェアアクセラレータとして実装することである。計算の複雑性が高く、全ての実行時間の大部分を消費するシステムのセクションは、ハードウェアアクセラレータの実装に適する候補である。ハードウェアアクセラレータは、例えば、特定用途向け集積回路(ASIC)、グラフィックスプロセッシングユニット(GPU)、またはフィールドプログラマブルゲートアレイ(FPGA)上で実行する回路であってもよい。ハードウェアアクセラレータを作成するときにソフトウェア設計者が採用する一般的な手法は、ハイレベル合成(HLS)ツールを用いて、指定されたセクションの元のハイレベル言語(HLL)仕様を回路の同等のレジスタ転送レベル(RTL)仕様または他のハードウェア記述言語(HDL)仕様に変換することである。
生成されたRTL仕様が機能上HLL仕様と同様であるかもしれないが、ソフトウェア設計者は、システム開発時に実装された回路をデバッグする必要がある。タイミング、同時実行性および競合状態などの問題は、HLL仕様を開発する際に分からなくても、ハードウェアをテストする際に表面化する可能性がある。また、ソフトウェアおよびハードウェアライブラリ実装の違い、誤った変換、またはメモリアクセスの違いは、実装の問題をもたらす可能性がある。
FPGAハードウェア内の回路実装のデバッグは、ハードウェア設計をインストルメント化することによって容易になる。回路設計を合成する前に、設計者は、個々の信号を監視する追加のデバッグ回路(集積ロジックアナライザ)を指定することができる。しかしながら、デバッグ回路を指定するために、設計者は、トレースすべき内部の低レベル信号および波形を生成するために設定すべきトリガを知る必要がある。設計者は、複数の合成反復が必要になり、各反復が設計の変更および異なる信号のトレースに関与することを分かるだろう。
概要
開示されたソフトウェア仕様の回路実装をデバッグする方法は、コンピュータシステム上で実行するハードウェアデバッグサーバを用いて、第1のHLLデバッグコマンドをハードウェアデバッグコマンドに変換することを含む。このハードウェアデバッグコマンドは、プログラマブル集積回路(IC)上のソフトウェア仕様の回路実装の条件の1つ以上の値、および当該条件の1つ以上の値を格納するプログラマブルIC上の1つ以上の格納要素を指定する。第1のハードウェアデバッグコマンドは、プログラマブルIC上のデバッグコントローラ回路に送信され、デバッグコントローラ回路は、ソフトウェア仕様の回路実装に与える単一パルスのクロック信号を生成する。単一パルスを生成した後、デバッグコントローラ回路は、ハードウェアデバッグコマンドによって指定された1つ以上の格納要素から1つ以上の値を読み取り、1つ以上の値が条件を満たしているか否かを判断する。デバッグコントローラ回路は、1つ以上の格納要素から読み取られた1つ以上の値が条件を満たしていないことに応じて、別の単一パルスのクロック信号を生成する。1つ以上の格納要素から読み取られた1つ以上の値が条件を満たしていることに応じて、クロック信号のパルスの生成が中断され、1つ以上の格納要素から読み取られた1つ以上の値が条件を満たしていることに応じて、ブレークポイントを示すデータが出力される。
必要に応じて、データを出力することは、デバッグコントローラ回路を用いて、ブレークポイントメッセージをハードウェアデバッグサーバに送信することを含むことができ、ブレークポイントメッセージは、1つ以上の格納要素と、1つ以上の格納要素から読み取られた1つ以上の値とを指定することができる。方法は、ハードウェアデバッグサーバを用いて、ブレークポイントメッセージによって指定された1つ以上の値および1つ以上の格納要素に対応するHLLソフトウェア仕様の行を決定することと、ハードウェアデバッグサーバを用いて、HLLソフトウェア仕様の行を示すデータを出力することとをさらに含むことができる。
必要に応じて、変換することは、相互参照データベースから、第1のHLLデバッグコマンドによって指定された1つ以上のHLL要素と相互参照されるハードウェア有限状態マシンの1つ以上の要素と、ハードウェア有限状態マシンの1つ以上の要素と相互参照されるプログラマブルIC上の1つ以上の格納要素とを決定することを含むことができる。
必要に応じて、HLLソフトウェア仕様の行を決定することは、相互参照データベースから、ブレークポイントによって示されたハードウェア有限状態マシンの要素と相互参照されるHLLソフトウェア仕様の行を決定することを含むことができる。
必要に応じて、方法は、ハードウェアデバッグサーバを用いて、第2のHLLデバッグコマンドを第2のハードウェアデバッグコマンドに変換することを含むことができ、第2のHLLデバッグコマンドは、読み取りリクエストおよびHLLソフトウェア仕様の変数の名前を指定し、第2のハードウェアデバッグコマンドは、読み取りリクエストおよびプログラマブルICの格納要素を指定する。また、方法は、第2のハードウェアデバッグコマンドをプログラマブルIC上のデバッグコントローラ回路に送信することと、デバッグコントローラ回路を用いて、第2のハードウェアデバッグコマンドによって指定された格納要素の値を読み取ることと、第2のハードウェアデバッグコマンドに対する第1の応答を、デバッグコントローラ回路からハードウェアデバッグサーバに送信することとを含み、第1の応答は、格納要素のIDおよび格納要素の値を含み、第1の応答を、変数の名前および格納要素の値を有する第2の応答に変換することと、ハードウェアデバッグサーバを用いて、第2の応答を出力することとをさらに含むことができる。
必要に応じて、方法は、デバッグコントローラ回路を用いて、第1のハードウェアデバッグコマンドに応じて、1つ以上の値および1つ以上の格納要素の仕様をプログラマブルIC上のメモリに格納することをさらに含むことができる。
必要に応じて、1つ以上の格納要素の仕様は、プログラマブルIC上の構成メモリのフレームおよびオフセットを指定することができる。
必要に応じて、方法は、ハードウェアデバッグサーバを用いて、HLLソフトウェア仕様を実行するための第2のHLLデバッグコマンドを、プログラマブルIC上のソフトウェア仕様の回路実装に与えるクロック信号のフリーランニングを指定する第2のハードウェアデバッグコマンドに変換することをさらに含むことができる。また、方法は、第2のハードウェアデバッグコマンドをデバッグコントローラ回路に送信することと、デバッグコントローラ回路を用いて、クロックモードをフリーランニングモードに設定することと、フリーランニングモードに応じて、デバッグコントローラ回路を用いて、ソフトウェア仕様の回路実装に与えるクロック信号のパルスを連続的に生成することと、フリーランニングモードに応じて、1つ以上の値の読み取りおよび1つ以上の値が条件を満たしているか否かの判断をバイパスすることとをさらに含むことができる。
必要に応じて、方法は、ハードウェアデバッグサーバを用いて、HLLソフトウェア仕様をシングルステップするための第2のHLLデバッグコマンドを、プログラマブルIC上のソフトウェア仕様の回路実装に与えるクロック信号のシングルステップを指定する第2のハードウェアデバッグコマンドに変換することをさらに含むことができる。また、方法は、第2のハードウェアデバッグコマンドをデバッグコントローラ回路に送信することと、デバッグコントローラ回路を用いて、クロックモードをシングルステップに設定することとをさらに含むことができる。単一パルスのクロック信号を生成することは、第2のハードウェアデバッグコマンドに応じて実行されてもよく、別の単一パルスのクロック信号を生成することは、クロック信号のシングルステップを指定する別のハードウェアデバッグコマンドに応じて実行されてもよい。
必要に応じて、方法は、ハードウェアデバッグサーバを用いて、第2のHLLデバッグコマンドを第2のハードウェアデバッグコマンドに変換することをさらに含むことができ、第2のHLLデバッグコマンドは、書き込みリクエスト、HLLソフトウェア仕様の変数の名前、および値を指定し、第2のハードウェアデバッグコマンドは、書き込みリクエスト、プログラマブルICの格納要素、および値を指定する。また、方法は、第2のハードウェアデバッグコマンドをプログラマブルIC上のデバッグコントローラ回路に送信することと、デバッグコントローラ回路を用いて、値を第2のハードウェアデバッグコマンドによって指定された格納要素に書き込むこととをさらに含むことができる。
開示されたデバッグシステムは、プログラマブル集積回路(IC)と、プログラマブルICに連結されたプロセッサと、プロセッサに連結されたメモリ配列とを含む。プログラマブルICには、プログラマブルICは、ハイレベル言語(HLL)ソフトウェア仕様の回路実装と、回路実装に連結されたデバッグコントローラ回路とを含む。メモリ配列は、プロセッサによって実行されると、プロセッサに第1のHLLデバッグコマンドを、回路実装の条件の1つ以上の値と条件の1つ以上の値を格納するプログラマブルIC上の1つ以上の格納要素とを指定する第1のハードウェアデバッグコマンドに変換することを実行させる命令で構成されている。プロセッサは、第1のハードウェアデバッグコマンドをデバッグコントローラ回路に送信する。デバッグコントローラ回路は、ソフトウェア仕様の回路実装に与える単一パルスのクロック信号を生成するように構成されている。デバッグコントローラ回路は、単一パルスを生成した後、第1のハードウェアデバッグコマンドによって指定された1つ以上の格納要素から1つ以上の値を読み取り、1つ以上の値が条件を満たしているか否かを判断する。デバッグコントローラ回路は、1つ以上の格納要素から読み取られた1つ以上の値が条件を満たしていないことに応じて、別の単一パルスのクロック信号を生成する。デバッグ制御回路は、1つ以上の格納要素から読み取られた1つ以上の値が条件を満たしていることに応じて、クロック信号のパルスの生成を中断し、ブレークポイントを示すデータを出力する。
必要に応じて、デバッグコントローラ回路は、ハードウェアデバッグサーバにブレークポイントメッセージを送信するようにさらに構成されてもよい。ブレークポイントメッセージは、1つ以上の格納要素と、1つ以上の格納要素から読み取られた1つ以上の値を指定することができる。メモリ配列は、プロセッサによって実行されると、ハードウェアデバッグサーバを用いて、ブレークポイントメッセージによって指定された1つ以上の値および1つ以上の格納要素に対応するHLLソフトウェア仕様の行を決定することと、ハードウェアデバッグサーバを用いて、HLLソフトウェア仕様の行を示すデータを出力することとをプロセッサに実行させる命令でさらに構成されてもよい。
必要に応じて、変換を実行するための命令は、相互参照データベースから、第1のHLLデバッグコマンドによって指定された1つ以上のHLL要素と相互参照されるハードウェア有限状態マシンの1つ以上の要素と、ハードウェア有限状態マシンの1つ以上の要素と相互参照されるプログラマブルIC上の1つ以上の格納要素とを決定するための命令を含むことができる。
必要に応じて、HLLソフトウェア仕様の行を決定するための命令は、相互参照データベースから、ブレークポイントによって示されたハードウェア有限状態マシンの要素と相互参照されるHLLソフトウェア仕様の行を決定するための命令を含むことができる。
必要に応じて、メモリ配列は、プロセッサによって実行されると、プロセッサに、ハードウェアデバッグサーバを用いて、第2のHLLデバッグコマンドを第2のハードウェアデバッグコマンドに変換することを実行させる命令でさらに構成されてもよく、第2のHLLデバッグコマンドは、読み取りリクエストおよびHLLソフトウェア仕様の変数の名前を指定し、第2のハードウェアデバッグコマンドは、読み取りリクエストおよびプログラマブルICの格納要素を指定し、第2のハードウェアデバッグコマンドをプログラマブルIC上のデバッグコントローラ回路に送信することを実行させる命令でさらに構成されてもよい。第2のハードウェアデバッグコマンドによって指定された格納要素の値を読み取り、第2のハードウェアデバッグコマンドに対する第1の応答を、デバッグコントローラ回路からハードウェアデバッグサーバに送信するようにさらに構成されてもよい。第1の応答は、格納要素のIDおよび格納要素の値を含む。メモリは、プロセッサによって実行されると、第1の応答を、変数の名前および格納要素の値を有する第2の応答に変換することと、ハードウェアデバッグサーバを用いて、第2の応答を出力することとをプロセッサに実行させる命令でさらに構成されてもよい。
必要に応じて、デバッグコントローラ回路は、第1のハードウェアデバッグコマンドに応じて、1つ以上の値および1つ以上の格納要素の仕様をプログラマブルIC上のメモリに格納するようにさらに構成されてもよい。
必要に応じて、1つ以上の格納要素の仕様は、プログラマブルIC上の構成メモリのフレームおよびオフセットを指定することができる。
必要に応じて、メモリ配列は、プロセッサによって実行されると、プロセッサに、HLLソフトウェア仕様を実行するための第2のHLLデバッグコマンドを、プログラマブルIC上のソフトウェア仕様の回路実装に与えるクロック信号のフリーランニングを指定する第2のハードウェアデバッグコマンドに変換することと、第2のハードウェアデバッグコマンドをデバッグコントローラ回路に送信することとを実行させる命令でさらに構成されてもよい。デバッグコントローラ回路は、デバッグコントローラ回路を用いて、クロックモードをフリーランニングモードに設定し、フリーランニングモードに応じて、ソフトウェア仕様の回路実装に与えるクロック信号のパルスを連続的に生成し、フリーランニングモードに応じて、1つ以上の値の読み取りおよび1つ以上の値が条件を満たしているか否かの判断をバイパスするようにさらに構成されてもよい。
必要に応じて、メモリ配列は、プロセッサによって実行されると、プロセッサに、HLLソフトウェア仕様をシングルステップするための第2のHLLデバッグコマンドを、プログラマブルIC上のソフトウェア仕様の回路実装に与えるクロック信号のシングルステップを指定する第2のハードウェアデバッグコマンドに変換することと、第2のハードウェアデバッグコマンドをデバッグコントローラ回路に送信することとを実行させる命令でさらに構成されてもよい。デバッグコントローラ回路は、クロックモードをシングルステップに設定するようにさらに構成されてもよい。単一パルスのクロック信号を生成することは、第2のハードウェアデバッグコマンドに応じて実行されてもよく、別の単一パルスのクロック信号を生成することは、クロック信号のシングルステップを指定する別のハードウェアデバッグコマンドに応じて実行されてもよい。
必要に応じて、メモリ配列は、プロセッサによって実行されると、プロセッサに、第2のHLLデバッグコマンドを第2のハードウェアデバッグコマンドに変換することを実行させる命令でさらに構成されてもよい。第2のHLLデバッグコマンドは、書き込みリクエスト、HLLソフトウェア仕様の変数の名前、および値を指定し、第2のハードウェアデバッグコマンドは、書き込みリクエスト、プログラマブルICの格納要素、および値を指定する。メモリ配列は、プロセッサによって実行されると、プロセッサに、第2のハードウェアデバッグコマンドをプログラマブルIC上のデバッグコントローラ回路に送信することを実行させる命令でさらに構成されてもよい。デバッグコントローラ回路は、値を第2のハードウェアデバッグコマンドによって指定された格納要素に書き込むようにさらに構成されてもよい。
他の特徴は、以下の詳細な説明および特許請求の範囲を検討することによって理解される。
方法およびシステムの様々な態様および特徴は、図面を参照すると共に、以下の詳細な説明を検討することによって明らかになる。
ソフトウェアデバッグ技術および手法を使用したハードウェアアクセラレータのデバッグをサポートするシステムの実装を示す図である。 一実現例に係るデバッグコントローラ回路の回路図を示す図である。 相互参照データベースの生成を示すデータフロー図。 一実現例に係るハードウェアデバッグサーバのコンポーネントを示す図である。 第1のリスナスレッドを実装するプロセスを示すフローチャートである。 第2のリスナスレッドを実装するプロセスを示すフローチャートである。 コマンドスレッドを実装するプロセスを示すフローチャートである。 ハードウェアデバッグサーバからのコマンドを処理し、ハードウェアアクセラレータからハードウェアデバッグサーバにデバッグ出力を報告する際にデバッグコントローラ回路によって実行されるプロセスを示すフローチャートである。 HLLプログラム変数「counter」を処理するためのHLLソースコードおよびHLSによって生成されたRTLコードの同等部分を示す図である。 デバッグコントローラ回路およびハードウェアアクセラレータを実装できるプログラマブル集積回路(IC)を示す図である。
詳細な説明
以下の記載において、多くの特定の詳細を用いて、本明細書に開示された特定の実施例を説明する。しかしながら、当業者なら、以下に記載された特定の詳細がなくても、1つ以上の他の実施例および/またはこれらの実施例の変形例を実施できることが明らかであろう。場合によって、本明細書に記載の実施例の説明を不明瞭にしないために、周知の特徴を詳細に説明しない。図面を簡単にするために、異なる図面において、同一の参照番号を用いて、同一要素または同一要素の追加のインスタンスを指す場合がある。
ソフトウェア設計者がよく知っているデバッグ環境は、集積ロジックアナライザおよび波形ビューアを備えるハードウェアデバッグ環境とは本質的に違う。ソフトウェアデバッガは、連続的に実行しているプログラムコードの特定の命令または行にブレークポイントを設定し、変数を検査および編集するなどの機能を提供する。これらの変数の値は、プログラム実行中にレジスタまたはメモリに格納される。ソフトウェアデバッガは、ソースコードレベルでデバッグ情報を表示する。これにより、ソフトウェア設計者は、ソフトウェアデバッガの所望の動作および実行中プログラムの状態をHLLプログラムの名前および命令文に容易に関連付けることができる。
集積ロジックアナライザおよび波形ビューアを備えるハードウェアデバッグ環境は、信号レベルで動作する。集積ロジックアナライザは、信号状態に基づいてブレークポイントを設定し、信号状態をトレースし、波形を表示し、およびレジスタを検査することができる。しかしながら、実装された回路が元々HLLで指定されたため、設計者は、HLLプログラムの要素と実装された回路の信号名および特定のレジスタとの関連付けに不慣れな場合がある。したがって、設計者は、デバッグ作業を遅らせる可能性がある。
開示された方法およびシステムは、ソフトウェア設計者がよく知っているソフトウェアデバッグ環境とハードウェアデバッグ環境との間のギャップを埋める。方法およびシステムは、ソフトウェアデバッガのデバッグ機能、例えば、HLLプログラムコードの特定の行にブレークポイントを設定する機能、変数のHLL名で変数の値を検査する機能、およびメモリの内容を検査する機能をサポートする。システムは、HLL構文とRTL構文と間のマッピング、およびRTL構文とRTL構文を実装する回路要素と間のマッピングを処理する。システムによって提供されたマッピングおよび変換によって、ソフトウェア設計者は、ソフトウェアデバッガ環境で作業しているようにハードウェアアクセラレータをデバッグすることができる。
開示された実現例において、コンピュータシステム上で動作しているハードウェアデバッグサーバは、ソフトウェアデバッガフロントエンドからデバッグコマンドを受信する。このデバッグコマンドは、HLLソフトウェア仕様においてブレークポイントの設定を指定する。ハードウェアデバッグサーバは、デバッグコマンドをハードウェアデバッグコマンドに変換する。このハードウェアデバッグコマンドは、ソフトウェア仕様の回路実装の条件の1つ以上の値を指定し、条件の1つ以上の値を格納する1つ以上の格納要素を指定する。回路の実装は、プログラマブルIC上で動作する。ハードウェアデバッグサーバは、ハードウェアデバッグコマンドをプログラマブルIC上のデバッグコントローラ回路に送信し、デバッグコントローラ回路は、回路実装に与える単一パルスのクロック信号を生成する。次に、デバッグコントローラ回路は、ハードウェアデバッグコマンドによって指定された格納要素から値を読み取り、この値が条件を満たしているか否かを判断する。格納要素から読み取られた値が条件を満たしていない場合、デバッグコントローラ回路は、別の単一パルスのクロック信号を生成する。格納要素から読み取られた値が条件を満たしている場合、デバッグコントローラ回路は、ブレークポイントを示す信号を出力し、ハードウェアデバッグサーバから別のコマンドを受信するまで、クロック信号のパルスの生成を中断する。
図1は、ソフトウェアデバッグ技術および手法を使用したハードウェアアクセラレータのデバッグをサポートするシステム100の実装を示している。システムは、GDBなどのソフトウェアデバッガと、HLLソースコードから生成されたハードウェアアクセラレータとの間の対話をサポートする。システムによって提供されたハードウェアアクセラレータのビューは、HLLソースコードをデバッグする際にはソフトウェアデバッガによって提供される。システムは、HLLデバッガフロントエンド102と、ハードウェアデバッグサーバ106と、ハードウェアアクセラレータ108およびデバッグコントローラ回路112を実装したプログラマブルIC110とを含む。
ハードウェアデバッグサーバは、コンピュータシステム104上で実行する。一実現例において、HLLデバッガフロントエンドは、コンピュータシステム104上で実行することもできる。代替的には、デバッガフロントエンドは、LANまたはインターネットなどのネットワークに接続しているネットワークインターフェイスを介して、コンピュータシステム104に連結された別のコンピュータシステム(図示せず)上で実行することができる。HLLデバッガフロントエンド102およびハードウェアデバッグサーバ106は、TCP/IPなどのプロトコルを使用して通信可能に接続することができる。
ソフトウェアのデバッグをサポートするがハードウェアアクセラレータのデバッグをサポートしないいくつかの従来のソフトウェアデバッガは、ソフトウェアデバッグサーバを含む。これによって、1つのコンピュータシステム上で動作しているデバッガフロントエンドは、別のコンピュータシステム上で動作しているソフトウェアのデバッグを制御することができる。一実施例において、HLLデバッガフロントエンド102は、GNUデバッガ、GDBなどの一般的に利用可能なソフトウェアデバッガの一部であってもよい。HLLデバッガフロントエンドは、元のHLLソースコードに関して実行中のプログラムの状態を表示するときに、DWARF情報などの標準形式のデバッグ情報を使用する。HLLソースコード内の変数名は、ハードウェアレジスタから読み取られた対応の値と共に表示される。一実現例において、HLLデバッガフロントエンド102は、ソフトウェアデバッグサーバと通信する際に使用されたプロトコルと同様のプロトコルを使用して、ハードウェアデバッグサーバ106と通信する。GDBのHLLデバッガフロントエンドを含む実現例において、デバッガフロントエンドは、ソフトウェアデバッグサーバと通信する際に使用されたプロトコルと同様のプロトコル、すなわち、リモートシリアルプロトコル(RSP)を使用して、ハードウェアデバッグサーバと通信する。
ハードウェアデバッグサーバ106は、デバッガフロントエンド102とデバッグコントローラ回路112との間のコマンドおよびデータを変換する。ハードウェアデバッグサーバは、例えばPCIeなどのバスインターフェイスを介して、デバッグコントローラ回路に接続する。デバッグコントローラ回路は、HLLプログラムコードから実装された回路であるハードウェア回路108に与えるクロック信号を制御し、コマンドを処理してハードウェアアクセラレータからの値を返すことによって、ハードウェアデバッグサーバとハードウェアアクセラレータとの間の対話を処理する。ハードウェアデバッグサーバによって、HLLデバッガフロントエンドは、ソフトウェアをデバッグする時と同様に、ハードウェアアクセラレータをデバッグすることができる。ハードウェアデバッグサーバは、ハードウェアシミュレーションのセマンティクスおよび詳細を抽象化し、ソフトウェア指向ビューをユーザに提示する。
HLSツールは、ハードウェアアクセラレータを生成する際に、ハードウェアアクセラレータを囲む隔離回路114も生成する。隔離回路は、HLLプログラムコードによって指定されたインターフェイスに準拠し、ハードウェアアクセラレータとプログラマブルIC110の他の回路との間にバリアを提供する。隔離回路によって、デバッグコントローラ回路112は、シングルステップモードにある場合またはブレークポイントにヒットした場合、ハードウェアアクセラレータに与えるクロック信号を停止できると共に、プログラマブルIC上の他の回路に与えるクロック信号をアクティブのままに維持することができる。
加速ソフトウェアデバッグ情報116は、HLLデバッガフロントエンド102に提供される。加速ソフトウェアデバッグ情報116は、ハードウェアアクセラレータ108を生成したHLLソースプログラムコードをデバッグするために使用されるデバッグシンボルを含む。一実現例において、加速ソフトウェアデバッグ情報116は、HLSツールによって生成されたDWARF情報であってもよい。HLSツールは、HLLプログラムコードの中間表現を生成して、最適化の前に、CPUをターゲットとした実行可能な関連デバッグ情報116を生成するプロセスに中間表現を渡す。
また、加速ソフトウェアデバッグ情報116は、ハードウェアデバッグサーバ106によって相互参照データベース118を構築する際に使用される。相互参照データベースは、HLLプログラムコードから生成されたRTL状態マシンの要素およびハードウェアアクセラレータ108の要素によって相互参照されるRTLステートマシンの要素によって相互参照される加速ソフトウェアデバッグ情報を含む。
1つのデバッグシナリオにおいて、ハードウェアデバッグサーバ106は、デバッガフロントエンドから、HLLソフトウェア仕様にブレークポイントを設定するためのハイレベル言語(HLL)デバッグコマンドを受信する。ハードウェアアクセラレータをデバッグしている人物は、デバッガフロントエンドと対話することによって、ハードウェアアクセラレータ108を生成したHLLソフトウェア仕様から、特定の命令または行番号を選択する。当業者は、既知のHLSツールを使用して、HLLソースコードから、シミュレーションに適した回路設計記述および対応するハードウェアモデルを生成できることを認識するであろう。
HLLデバッグコマンドの受信に応じて、ハードウェアデバッグサーバは、HLLデバッグコマンドを、条件と、条件の1つ以上の値を格納するプログラマブルIC110上の1つ以上の格納要素とを指定するハードウェアデバッグコマンドに変換する。その後、ハードウェアデバッグサーバは、このハードウェアデバッグコマンドをデバッグコントローラ回路112に送信する。デバッグコントローラ回路は、当該ハードウェアデバッグコマンドに応じて、ハードウェアアクセラレータに提供されるクロック信号の各サイクルの後でブレークポイントの条件が満たされているか否かを判断する。ブレークポイントコマンドは、プログラマブルICの格納要素を指定する。デバッグコントローラ回路は、単一パルスのクロック信号を生成した後、格納要素から値を読み取る。この値がブレークポイントの条件を満たしている場合、デバッグコントローラ回路は、ハードウェアアクセラレータに与えるクロックパルスの生成を中断し、ハードウェアデバッグサーバ106に信号を出力する。当該値がブレークポイントの条件を満たしていない場合、デバッグコントローラ回路は、フリーランニングクロックモードで動作している場合に、ハードウェアアクセラレータに別のクロックパルスを提供することができる。シングルステップモードで動作している場合に、デバッグコントローラ回路は、ハードウェアデバッグサーバからの別のコマンドを待つ。
ブレークポイントがハードウェアデバッグサーバに送信されると、ハードウェアデバッグサーバは、ブレークポイントに対応するHLLソフトウェア仕様の行番号、命令または命令文を決定する。その後、ハードウェアデバッグサーバは、HLLソフトウェア仕様の行番号、命令または命令文、およびブレークポイントを示すしるしをHLLデバッガフロントエンドに出力する。
ハードウェアデバッグサーバ106およびHLLデバッガフロントエンド102を動作させるデータ処理システムは、1つ以上のプロセッサ回路(または「プロセッサ」)、例えば、システムバスまたは他の適切な回路を介してメモリおよびストレージ配列に接続された中央処理装置(CPU)を含む。システムは、HLLデバッガフロントエンドおよびハードウェアデバッグサーバを実装するプログラムコードを格納し、プロセッサは、システムバスを介してメモリおよびストレージ配列から入手したプログラムコードを実行する。データ処理システムのメモリは、1つ以上の物理メモリ装置、例えば、ローカルメモリおよび永続記憶装置を含むことができる。ローカルメモリは、一般に、プログラムコードを実際に実行する際に使用されるランダムアクセスメモリまたは他の非永続メモリ装置を指す。永続記憶装置は、ハードディスクドライブ(HDD)、ソリッドステートドライブ(SSD)、または他の永続データ記憶装置として実装することができる。また、システム100は、実行中にローカルメモリおよび永続記憶装置からプログラムコードおよびデータを取得する回数を減らすために、少なくともいくつかのプログラムコードおよびデータの一時的な記憶を提供する1つ以上のキャッシュメモリ(図示せず)を含むこともできる。データ処理システムは、入力/出力(I/O)装置、例えば、ユーザ入力装置またはディスプレイ装置をさらに含むことができる。データ処理システムのネットワークアダプタは、プライベートネットワークまたはパブリックネットワークを介して、システムを他のコンピュータシステム、リモートプリンタおよび/またはリモート記憶装置に接続することができる。
図2は、一実現例に係るデバッグコントローラ回路112の回路図を示している。デバッグコントローラ回路は、プログラマブルICのプログラマブルロジックリソースに実装することができ、またはハードワイヤード回路として実装することができる。デバッグコントローラ回路の制御クロック生成装置202は、制御クロック信号214を生成するように構成される。制御クロック信号214は、単一パルスまたはプログラマブルICに提供されるクロック信号の周波数で自由に生成されてもよく、停止されてもよい。制御クロックをハードウェアアクセラレータに提供することによって、デバッグコントローラ回路は、ハードウェアアクセラレータのステップ実行、停止、または自由実行を行うことができる。デバッグコントローラは、プログラマブルICの構成メモリにアクセスできるため、変数の値の読み取りおよび書き込みを行うことができる。制御クロックおよび構成メモリのアクセスの組み合わせによって、デバッグコントローラ回路は、制御クロック信号の各サイクル後に条件をチェックすることにより、ハードウェアブレークポイントおよびウォッチポイントを実装する。
デバッグコントローラのブレークポイントおよびリードバック回路204は、AXIバス接続などの外部インターフェイス回路206を介して、命令を受け取る。外部インターフェイス回路は、可変データを送り返し、ブレークポイントにヒットしたことを報告する際にも使用される。デバッグコントローラ回路は、外部インターフェイスから命令を受け入れ、命令を解釈し、命令によって指定された動作を実行する。ブレークポイントを設定するためのコマンド、ハードウェアアクセラレータを停止するためのコマンド、ハードウェアアクセラレータを実行するためのコマンド、変数を読み取るためのコマンド、またはブレークポイントステッピングモードで実行するためのコマンドは全て、外部インターフェイスから受け取る。
デバッグコントローラがブレークポイントを設定するための命令を受信すると、ブレークポイントおよびリードバック回路204は、ブレークポイントのフレームおよびオフセット情報(「ブレークポイント情報」)208をローカルメモリ210に格納する。ブレークポイント情報は、プログラマブルICの構成メモリ要素のフレームおよびオフセット並びにチェック条件を含む値を指定することができる。
ブレークポイント情報を用いてデバッグコントローラ回路をプログラムした後、ブレークポイントおよびリードバック回路204は、開始命令に従って、デバッグモードの動作を開始する。デバッグモードにおいて、ブレークポイントおよびリードバック回路は、単一パルスの制御クロック信号を出力するように制御クロック生成装置202に指示する。これによって、ハードウェアアクセラレータの動作を1つのクロックサイクルで進める。パルスの後、ブレークポイントおよびリードバック回路は、プログラマブルICの構成メモリから読み取るために、構成アクセスインターフェイス回路212に与える信号を生成する。構成アクセスインターフェイス回路は、プログラマブルIC上の標準機能として含まれた回路であってもよい。
ブレークポイントおよびリードバック回路は、読み取る構成メモリの位置を決定するために、メモリ210からブレークポイント情報208を読み取る。ブレークポイントおよびリードバック回路は、構成アクセスインターフェイス212に読み取りコマンドを発行し、構成アクセスインターフェイス212は、構成メモリの特定のフレームを読み取る。構成アクセスインターフェイスがフレームのデータ値を返すと、ブレークポイントおよびリードバック回路は、フレームデータを解析し、指定されたオフセットの値をメモリ210から読み取られたブレークポイント情報の値と比較する。ブレークポイントの条件が満たされると、ブレークポイントおよびリードバック回路は、制御クロック信号214のさらなるパルスの発行を停止するように制御クロック発生器202に指示し、外部インターフェイス回路206を介してハードウェアデバッガサーバにブレークポイントヒットを報告する。ブレークポイントの条件が満たされておらず且つデバッグクロックモードがフリーランニングモードである場合、ブレークポイントおよびリードバック回路クロックは、単一パルスの制御クロック信号214を再度発行するように制御クロック生成装置202に指示する。このプロセスは、繰り返される。ブレークポイントの条件が満たされておらず且つデバッグクロックモードがシングルステップモードである場合、ブレークポイントおよびリードバック回路は、ハードウェアデバッグサーバからの別のコマンドを待機して、実行コマンドまたはステップコマンドを受信すると、単一パルスの制御クロック信号を発行するように制御クロック生成装置に指示する。
図3は、相互参照データベース118の生成を示すデータフロー図である。HLSツール304は、ハードウェアアクセラレータによって実装される機能を指定するためのHLLプログラム302を入力する。HLSツールは、ハードウェアデバッグサーバ106によって使用される複数バージョンのデバッグ情報を生成する。HLSツールフローの開始時に、フロントエンド解析の後且つ最適化の前に、HLSツールは、特定のCPUに提供される実行可能プログラム(図示せず)を生成する。実行可能プログラムは、元のHLLプログラム302に関連するシンボルをHLLデバッガフロントエンド(図1の102)に提供するときに使用される関連のハイレベルデバッグ情報306を含む。また、ハイレベルデバッグ情報は、ハードウェアデバッグサーバ106によって相互参照データベース118を構築するときに使用される。一実現例において、ハイレベルデバッグ情報は、DWARFデバッグ情報である。
HLSツール304の最適化および予定パスにおいて、HLSツールは、マッピング情報308およびハードウェアモデル310を生成する。マッピング情報308は、HLLプログラム302の要素とハードウェアモデルの要素との関連付けを指定する。一実現例において、ハードウェアモデルは、RTL有限状態マシンである。この場合、アクティブ状態は、シミュレーション中に同時に処理されるHLLプログラムの命令文を指定する。
動作合成ツール312は、ハードウェアモデル310を入力し、ハードウェアアクセラレータを実装するようにプログラマブルICをプログラミングするための構成データを生成する過程において、ハードウェアモデルの要素とプログラマブルIC上の構成メモリ要素または格納位置とのマッピングを生成する。例えば、マッピング情報は、プログラマブルロジックの構成メモリのフレームおよびオフセットにマッピングされるRTL有限状態マシンの要素を指定することができる。
ハードウェアデバッグサーバ106は、ハイレベルデバッグ情報306、マッピング情報308およびマッピング情報314を入力し、HLL要素とハードウェアモデルとのマッピング308およびハイレベルデバッグ情報306を相互参照する相互参照データベース118を生成する。また、相互参照データベースは、ハードウェアモデルの要素およびプログラマブルICの格納位置/要素を相互参照するマッピング情報314を含む。シミュレーションの間に、ハードウェアデバッグサーバ106は、ハードウェアモデルを用いてデータベース118に照会することによって、デバッガフロントエンド(図1の102)からのコマンドによって指定されたHLLプログラム要素に対応するハードウェアモデルの要素および格納位置/要素を検索すると共に、デバッグコントローラ回路(図1の112)から返されたデータによって参照された格納位置/要素に対応するHLLプログラム要素を検索する。マッピング情報を使用すると、プログラマブルIC上のハードウェアステートマシンの状態および格納要素/位置に対応する条件で、HLLプログラムの行番号のブレークポイント、命令文または命令を実現することができる。
ブレークポイントを適用できるHLLプログラム302の行と対応するハードウェア状態マシン要素とのマッピングを構築することは、HLS生成ハードウェアモデル310の構造に依存する。一実現例において、ハードウェアモデルは、HLL命令文がRTL信号の条件に対応する有限状態マシンを含む。ハードウェアデバッグサーバ106は、相互参照データベース118に照会することによって、HLLデバッガフロントエンドからのブレークポイントコマンドをハードウェア有限状態マシン上の同等の条件に変換することができる。ハードウェア有限状態マシンの条件は、プログラマブルICの格納位置/要素の条件に変換することができる。変換されたブレークポイント情報は、ローカルメモリ208に条件付きブレークポイント情報を格納するデバッグコントローラ回路112に入力することができる。ハードウェアデバッグサーバは、相互参照データベースに照会することによって、ソフトウェアデバッガフロントエンドからの、変数の値を要求するコマンドを、デバッグコントローラからの、ハードウェア信号および変数の値を要求するリクエストに変換することができる。
HLLプログラムレベルの変数は、言語で定義された具体的なベースタイプに基づいて構築された複雑なタイプシステムを有する。HLSツールを用いてハイレベル言語プログラムを合成する場合、生成されたハードウェアは通常、最適化され且つビットベクトルにフラット化されたHLLタイプを有する。例えば、HLSツールは、ハイレベル言語で「int」として宣言された変数が17の下位ビットのみを使用していることを判断し、ハイレベル言語用の32ビットレジスタではなく、17ビットレジスタおよびビットベクトルを含むハードウェアを合成することができる。
HLSツールは、HLL構文とRTL構文との完全なマッピングを提供するために、タイプの変換を取り込む。表1は、タイプをHLL構文からRTL構文にまたはその逆に変換する際に使用されるマッピング情報のタイプのテキストビューを示している。各RTLタイプを元のタイプに直接マッピングすることは、符号拡張またはゼロ拡張などの変換ルールを含む。さらに、HLSツールは、ハイレベル言語構文を多くの異なるRTLレジスタまたは信号に格納するハードウェアの作成を決定することができる。マッピングは、これらの多くのRTL信号を元のハイレベル表現に戻す方法を指定する。このマッピングの実装および格納は、バイナリエンコーディングを介して実行することができる。
Figure 0007019711000001
HLSで生成されたRTLにおいて、HLL変数は、単一のレジスタだけでなく、異なるクロックサイクルにアクティブになるまたはHLSツールによって行われたパイプライン化決定に基づいて全て同時にアクティブになる複数のレジスタおよび信号として実装することができる。マッピング情報308は、有限状態マシンの状態レジスタおよび任意のパイプラインステージの起動レジスタを構成するレジスタおよび信号のセットを指定する。表2は、HLL変数「counter」の位置情報のマッピング位置の一例を示している。
Figure 0007019711000002
全てのHLL変数に対して、HLSツールは、これらの状態レジスタの様々な構成と、変数がクロックサイクルに位置しているアクティブ信号を表す他のRTL信号のリストとのマッピングを作成する。表2に示すテキスト例は、HLSツールによって出力されたメタデータのバイナリエンコーディングを表し、特定のビットの全ての順列が単一のマッピングに対して有効であることを表すワイルドカードを含む。
特定のFSM状態がアクティブになると、元のHLLプログラムのソースコードの各行は、RTLコードで実行を開始する。特定のRTL条件が真のときに、例えば、状態レジスタが特定の構成にあるときやメモリフェッチが完了したときに、FSMの状態は、アクティブになる。
表3に示すように、相互参照データベースは、元のHLLプログラムの行と、生成されたパイプライン情報を含み、FSM状態の実行の開始を表す構成に対応する生成されたRTLモデルの条件とのマッピングを保持する。注意すべきことは、生成されたRTLモデルが、利用可能なリソースを最大限に活用し且つスループットを最大化にするために、複数の命令文を同時にまたは順番をずらして開始する可能性があるため、マッピングは、1対1ではないことである。
Figure 0007019711000003
HLSツールは、HLLプログラム内のポインタ変数をRTLレジスタおよび信号に変換する。ポインタ変数を実装する実際のメモリは、プログラマブルIC上のローカルRAMであってもよく、接続されたDDRメモリであってもよい。HLSツールによって出力され、相互参照データベースに保存されているマッピング情報は、メモリ空間の分割および分配を指定するため、ハードウェアデバッグサーバは、ポインタを逆参照し、リンクに沿って保存された値に辿り着くことができる。
プログラマブルIC上で動作するハードウェアアクセラレータ回路のソフトウェア中心ビューをサポートするために、ハードウェアモデルの要素は、ハードウェアモデルの要素を実装するプログラマブルICの格納位置/要素にマッピングされる。マッピング情報は、合成、プレイス&ルート、およびビットストリーム生成時に生成される。マッピング情報は、ハードウェアモデルの信号からプログラマブルICの格納位置/要素への直接リンクを提供する。例えば、FPGAにおいて、格納位置/要素は、構成メモリのフレームおよびオフセットとして指定される。マッピング情報は、ユーザによるHLLプログラムの変数およびコードラインの指定により、デバッグ処理中にハードウェアアクセラレータの検査をサポートする。
表4の例は、RTL信号と、RTL信号を実装するプログラマブルICの構成メモリの特定のフレームおよびオフセットとの関連付けを示している。
Figure 0007019711000004
図4は、一実現例に係るハードウェアデバッグサーバ106のコンポーネントを示す。ハードウェアデバッグサーバは、2つのリスナスレッド404および406と、コマンドスレッド408とを含むマルチスレッドのスタンドアロンプログラムとして実装することができる。リスナスレッド404は、コマンド用のHLLデバッガフロントエンドとの接続を監視し、リスナスレッド406は、応答用のデバッグコントローラ回路との接続を監視する。リスナスレッド404および406は、コマンドおよび応答をコマンド先入先出(FIFO)データ構造402に書き込む。コマンドスレッド408は、コマンドFIFOからコマンドおよび応答を読み取り、相互参照データベース118を用いてこれらのコマンドおよび応答を変換して、変換したコマンドをデバッグコントローラ回路に送信し、変換した応答をHLLデバッガフロントエンドに送信する。
図5は、リスナスレッド404を実装するプロセスを示すフローチャートである。ブロック422において、リスナスレッドは、例えばTCP/IPソケット接続を介して、HLLデバッガフロントエンドからのコマンドをリッスンする。ブロック424において、リスナスレッド404は、HLLデバッグコマンドを受け取り、ブロック426において、リスナスレッドは、コマンドをコマンドFIFO402に格納する。次いで、リスナスレッド426は、ブロック422に戻り、HLLデバッガフロントエンドからの別のコマンドをリッスンする。
図6は、リスナスレッド406を実装するプロセスを示すフローチャートである。ブロック452において、リスナスレッド406は、例えばPCIe接続を介して、デバッグコントローラ回路からの応答をリッスンする。ブロック454において、リスナスレッド406は、デバッグコントローラ回路からの応答出力を受け取り、ブロック456において、リスナスレッドは、出力をコマンドFIFO402に格納する。次いで、リスナスレッド406は、ブロック452に戻り、HLLデバッガフロントエンドからの別のコマンドをリッスンする。
図7は、コマンドスレッド408を実施するプロセスを示すフローチャートである。ブロック502において、コマンドスレッドは、コマンドFIFOからエントリを読み取り、ブロック504において、コマンドスレッドは、コマンドをデコードする。コマンドおよび応答の両方がコマンドFIFOに格納され、コマンドスレッドによって処理されるため、「コマンド」という用語を用いて、HLLデバッガフロントエンドからのコマンドおよびデバッグコントローラ回路からの応答の両方を指す。
判断ブロック506は、ブロック504のデコードに基づいて、コマンドスレッドによる処理を切り替える。ブロック508~518の処理は、HLLデバッガフロントエンドからのコマンドに適用することができ、ブロック520~524の処理は、デバッグコントローラ回路からのコマンドに適用することができる。
デコードされたコマンドがブレークポイントコマンドである場合、コマンドスレッドは、ブロック508において、HLLブレークポイントコマンドをデバッグコントローラ回路用のブレークポイント情報に変換する。コマンドスレッドは、相互参照データベースにおいて、HLLブレークポイントコマンドのHLL要素に関連付けられている有限状態マシンの要素を検索する。次に、コマンドスレッドは、相互参照データベースにおいて、有限状態マシンの要素に関連付けられているプログラマブルICの格納要素を検索する。変換されたブレークポイントコマンドは、ブレークポイント条件を指定し、ブレークポイント条件によって参照されたプログラマブルICの格納要素を特定する。
デコードされたコマンドがHLL変数の値の読み取りを指定している場合、コマンドスレッドは、ブロック510において、HLLコマンドをデバッグコントローラ回路用用のハードウェアデバッグコマンドに変換する。コマンドスレッドは、相互参照データベースにおいて、HLLデバッグ読み取りコマンドのHLL要素に関連付けられている有限状態マシンの要素を検索する。次に、コマンドスレッドは、相互参照データベースにおいて、有限状態マシンの要素に関連付けられているプログラマブルICの格納要素を検索する。変換された読み取りコマンドは、読み取り処理を指定し、読み取り処理によって参照されるプログラマブルICの格納要素を特定する。
デコードされたコマンドがHLL変数の値の書き込みを指定している場合、コマンドスレッドは、ブロック512において、HLLコマンドをデバッグコントローラ回路用のハードウェアデバッグコマンドに変換する。コマンドスレッドは、相互参照データベースにおいて、HLLデバッグ書き込みコマンドのHLL要素に関連付けられている有限状態マシンの要素を検索する。次に、コマンドスレッドは、相互参照データベースにおいて、有限状態マシンの要素に関連付けられているプログラマブルICの格納要素を検索する。変換された書き込みコマンドは、書き込み処理を指定し、書き込み処理によって参照されるプログラマブルICの格納要素を特定する。
デコードされたコマンドがHLLプログラムのシングルステップを指定している場合、コマンドスレッドは、ブロック514において、コマンドをデバッグコントローラ回路用のハードウェアデバッグコマンドに変換する。変換されたコマンドは、ハードウェアアクセラレータに与える制御クロック信号のシングルステップを指定する。
デコードされたコマンドがHLLプログラムの実行を指定している場合、コマンドスレッドは、ブロック516において、コマンドをデバッグコントローラ回路のハードウェアデバッグコマンドに変換する。変換されたコマンドは、ハードウェアアクセラレータに与える制御クロック信号のフリーランニングを指定する。
コマンドスレッドは、ブロック518において、変換されたコマンドをデバッグコントローラ回路に送信し、ブロック502に戻ってコマンドFIFOからの別のコマンドを処理する。
デコードされたコマンドがデバッグコントローラ回路からのブレークポイント条件を満たした場合、コマンドスレッドは、ブロック520において、デバッグコントローラ回路からのブレークポイント情報をHLLデバッガフロントエンド用のHLLブレークポイント情報に変換する。
デバッグコントローラ回路からのブレークポイント情報は、ブレークポイント条件、プログラマブルICの1つ以上の格納要素、および1つ以上の格納要素から読み取られた1つ以上の値を指定する。コマンドスレッドは、相互参照データベースを使用して、ブレークポイント情報によって特定された格納要素に関連付けられている有限状態マシンの要素を検索する。次に、コマンドスレッドは、相互参照データベース(例えば、表3)を使用して、ブレークポイント条件、格納要素の値および有限状態マシンの要素に対応するブレークポイントを判断する。コマンドスレッドは、相互参照データベースから、ブレークポイントに関連付けられたHLLプログラムコードの行番号を決定し、HLLプログラムコードの行を示すブレークポイントデータを、HLLデバッガフロントエンドに出力する。
デコードされたコマンドが読み取りコマンドに応じて返された値を示す場合、コマンドスレッドは、ブロック522において、デバッグコントローラ回路からの値を、値のHLL表現(例えば、表1)と一致する値に変換する。また、デバッグコントローラ回路からの応答は、値を読み取ったプログラマブルICの格納要素を指定する。コマンドスレッドは、相互参照データベースを使用して、コマンドに特定された格納要素に関連付けられている有限状態マシンの要素を検索すると共に、有限状態マシンの要素に関連付けられているHLL変数名を検索する。コマンドスレッドは、変換された値およびHLL変数名を、HLLデバッガフロントエンドの応答に合併する。
ブロック524において、コマンドスレッドは、ブロック520および522で生成されたHLLデバッグデータをHLLデバッガフロントエンドに送信する。プロセスは、ブロック502に戻って、コマンドFIFOからのさらなるコマンドを処理する。
図8は、ハードウェアデバッグサーバからのコマンドを処理し、ハードウェアアクセラレータからハードウェアデバッグサーバにデバッグ出力を報告する際にデバッグコントローラ回路によって実行されるプロセスを示すフローチャートである。デバッグコントローラ回路は、ブロック602において、アイドル状態でハードウェアデバッグサーバからのコマンドを待つ。デバッグコントローラ回路は、ブロック604において、ハードウェアデバッグサーバからコマンドを受信してデコードする。
判断ブロック606は、ブロック604のデコードに基づいて、デバッグコントローラ回路による処理を切り替える。コマンドがブレークポイントコマンドである場合、デバッグコントローラ回路は、ブロック608において、ブレークポイント条件、1つ以上の値および1つ以上の格納要素を指定するブレークポイント情報をプログラマブルIC上のメモリに格納する。次いで、プロセスは、ブロック602に戻り、ハードウェアデバッグサーバからの別のコマンドを待つ。
コマンドが読み取りコマンドである場合、デバッグコントローラ回路は、ブロック610において、読み取りコマンドを構成コマンドアクセスインターフェイスに発行して、コマンドによって指定されたプログラマブルICの格納要素から読み取る。デバッグコントローラ回路は、プログラマブルICの構成メモリから読み取られた値をハードウェアデバッグサーバに返し、ブロック602で別のコマンドを待つ。
コマンドが書き込みコマンドである場合、デバッグコントローラ回路は、ブロック612において、書き込みコマンドを構成アクセスインターフェイスに発行して、書き込みコマンドによって指定された値を、コマンドによって指定されたプログラマブルICの格納要素に書き込む。次いで、デバッグコントローラ回路は、ブロック602で別のコマンドを待つ。
デバッグコントローラ回路は、ハードウェアデバッグサーバによって変換されたコマンドに応じて、フリーランニングモード、シングルステップモード、またはステップツーブレークポイントモードで、ハードウェアアクセラレータに制御クロック信号を提供することができる。シングルステップコマンドに応じて、デバッグコントローラ回路は、ブロック614において、クロックモードをシングルステップモードに設定する。ステップツーブレークポイントコマンドに応じて、デバッグコントローラ回路は、ブロック616において、クロックモードをステップツーブレークポイントに設定する。フリーランニングコマンドに応じて、デバッグコントローラ回路は、ブロック618において、クロックモードをフリーランニングに設定する。
クロックモードがフリーランニングモードである場合、判断ブロック620は、デバッグコントローラ回路をブロック622に切換え、デバッグコントローラ回路は、別のコマンドを利用できるまで、制御クロック信号のパルスを連続的に生成する。別のコマンドを利用できる場合、プロセスは、ブロック604に進む。フリーランニングモードで動作している時に、デバッグコントローラ回路は、メモリ位置からの値の読み取りおよびブレークポイントの条件が満たされているか否かの判断をバイパスする。
クロックモードがシングルステップモードおよびステップツーブレークポイントモードである場合、デバッグコントローラ回路は、ブロック624において、ハードウェアアクセラレータに与える単一パルスの制御クロック信号を生成する。単一パルスの制御クロック信号を生成した後、デバッグコントローラ回路は、ブロック626において、ローカルメモリに格納されたブレークポイント情報によって特定された格納要素から値を読み取る。
デバッグコントローラ回路は、ブロック628において、プログラマブルICの構成メモリから読み取られた値を用いて、ブレークポイント情報によって指定された条件を評価する。ブレークポイントの条件が満たされた場合、判断ブロック630は、プロセスをブロック632に切換え、デバッグコントローラ回路は、ブレークポイントが満たされたことを示すデータを出力する。データは、ブレークポイントメッセージによって特定され、満たされたブレークポイントの情報を示すことができる。ブレークポイントが満たされると、デバッグコントローラ回路は、ブロック602に戻り、ハードウェアデバッグサーバからの別のコマンドを待つ。
ブレークポイント条件が満たされていない場合、デバッグコントローラは、判断ブロック634において、クロックモードに従って進む。クロックモードがステップツーブレイクポイントモードである場合、デバッグコントローラ回路は、ブロック624において、ハードウェアアクセラレータに与える別の単一パルスの制御クロック信号を生成する。クロックモードがシングルステップモードである場合、デバッグコントローラは、ブロック602に進み、別のコマンドを待つ。
図9は、HLLプログラム変数「counter」を処理するためのHLLソースコード702およびHLSによって生成されたRTLコード704の同等部分を示している。HLLソースコードは、関数命令文、変数宣言、割り当て命令文、制御命令文、スコープデリミタ、および空白行を含む12行を有する。
HLL変数「counter」は、RTLの5ビットレジスタにマップされる。各レジスタは、生成されたFSMマシンの異なる段階にアクティブになる。レジスタは、
reg [4:0] vadd_counter_reg_95;
reg [4:0] ap_pipeline_reg_iter1_vadd_counter_reg_95;
reg [4:0] ap_pipeline_reg_iter2_vadd_counter_reg_95;
reg [4:0] ap_pipeline_reg_iter3_vadd_counter_reg_95;
reg [4:0] ap_pipeline_reg_iter4_vadd_counter_reg_95;
reg [4:0] ap_pipeline_reg_iter5_vadd_counter_reg_95;
reg [4:0] ap_pipeline_reg_iter6_vadd_counter_reg_95;
reg [4:0] ap_pipeline_reg_iter7_vadd_counter_reg_95;
reg [4:0] ap_pipeline_reg_iter8_vadd_counter_reg_95;
を含む。
HLL命令文「counter += 1」は、「always」ブロックの「if」部分およびRTL命令文にマッピングする。シミュレーション中に、条件「(ap_CS_fsm_pp0_stage0 == 1’b1) & (ap_enable_reg_pp0_iter0 == 1’b1) & (exitcond_fu_146_p2 == 1’b0)」がメインクロックのポジティブエッジで真である場合、「vadd_counter_reg_95 <= p_reg2mem_0_i_i_fu_152」が実行される。
HLL命令文「counter = 1」は、「always」ブロックの「else if」部分およびRTL命令文にマッピングする。シミュレーション中に、条件「(ap_CS_fsm_state1 == 1’b1) & ~(ap_start == 1’b0)」がメインクロックのポジティブエッジで真である場合、「vadd_counter_reg_95 <= ap_const_lv5_0」が実行される。
HLLデバッガフロントエンド102からHLLライン6および10を指定するブレークポイントコマンドを受信したことに応じて、ハードウェアデバッグサーバ106は、HLLブレークポイントコマンドを、ブレークポイント条件およびプログラマブルICの格納要素を指定するブレークポイント情報に変換して、デバッグコントローラ回路112に送信する。デバッグコントローラ回路は、このブレークポイント情報をローカルメモリに格納する。デバッガフロントエンドからの、HLLコードライン6にブレークポイントを設定するコマンドに応じて、ハードウェアデバッグサーバは、条件「(ap_CS_fsm_state1 == 1’b1) & ~(ap_start == 1’b0)」が、ハードウェアアクセラレータがRTL命令文「vadd_counter_reg_95 <= ap_const_lv5_0」の機能を実行する前のメインクロックのポジティブエッジで真である場合、デバッグコントローラ回路がハードウェアアクセラレータにクロックパルスを提供することを停止させるブレークポイント情報を生成する。デバッガフロントエンドからの、HLLコードライン10にブレークポイントを設定するコマンドに応じて、ハードウェアデバッグサーバは、条件「(ap_CS_fsm_pp0_stage0 == 1’b1) & (ap_enable_reg_pp0_iter0 == 1’b1) & (exitcond_fu_146_p2 == 1’b0)」が、ハードウェアアクセラレータがRTL命令文「vadd_counter_reg_95 <= p_reg2mem_0_i_i_fu_152」の機能を実行する前のメインクロックのポジティブエッジで真である場合、デバッグコントローラ回路がハードウェアアクセラレータにクロックパルスを提供することを停止させるブレークポイント情報を生成する。
図10は、デバッグコントローラ回路およびハードウェアアクセラレータを実装できるプログラマブル集積回路(IC)800を示している。プログラマブルICは、フィールドプログラマブルゲートアレイ(FPGA)ロジックおよび他のプログラマブルリソースを含むシステムオンチップ(SOC)として呼ばれることもある。FPGAロジックは、アレイに配列されたいくつかの異なるタイプのプログラマブルロジックブロック含むことができる。例えば、図10に示されたプログラマブルIC800は、マルチギガビットトランシーバ(MGT)801、構成可能なロジックブロック(CLB)802、ランダムアクセスメモリブロック(BRAM)803、入力/出力ブロック(IOB)804、設定およびクロッキングロジック(CONFIG/CLOCKS)805、デジタル信号処理ブロック(DSP)806、専用入力/出力ブロック(I/O)807(例えば、設定ポートおよびクロックポート)、および他のプログラマブルロジック808(例えば、デジタルクロックマネージャ、アナログデジタルコンバータおよびシステム監視ロジック)を含む多数の異なるプログラマブルタイルを備える。また、FPGAロジックを備えるプログラマブルICの一部は、専用プロセッサブロック(PROC)810並びに内部および外部の再設定ポート(図示せず)を含む。
一部のFPGAロジックにおいて、各プログラマブルタイルは、隣接する各タイルに位置する対応の相互接続要素との標準化接続を備えるプログラマブル相互接続要素(INT)811を含む。したがって、プログラマブル相互接続要素を互いに接続することによって、図示されたFPGAロジックのプログラマブル相互接続構造を実現する。図10の上部の例示によって示すように、プログラマブル相互接続要素INT811は、同一タイル内のプログラマブルロジック要素との接続を含む。
例えば、CLB802には、ユーザロジックを実装するようにプログラムできる構成可能なロジック要素CLE812と、単一のプログラマブル相互接続要素INT811とを含むことができる。BRAM803は、1つ以上のプログラマブル相互接続要素の他に、BRAMロジック要素(BRL)813を含むことができる。一般的には、タイルに含まれる相互接続要素の数は、タイルの高さに依存する。図示された実施形態において、BRAMタイルは、5つのCLBと同様の高さを有するが、他の数(例えば、4つ)のCLBと同様の高さを有してもよい。DSPタイル806は、適切な数のプログラマブル相互接続要素の他に、DSPロジックプリミティブ(DSPL)814を含むことができる。IOB804は、例えば、1つのインスタンスのプログラマブル相互接続要素INT811に加えて、2つのインスタンスの入力/出力ロジック要素(IOL)815のを含むことができる。当業者には明らかなように、例えば、I/Oロジック要素815に接続された実際のI/Oボンドパッドは、上述に例示されたさまざまなロジックブロック上に積層された金属を用いて製造され、一般的に入力/出力ロジック要素815の面積に限定されない。
図示された実施形態において、(図10に網掛けで示された)ダイ中央付近のコラム領域は、設定、クロックおよび他の制御ロジックに使用される。このコラムから延在する水平領域809は、プログラマブルICの全幅に亘ってクロックおよび設定信号を分配するように構成されている。「コラム」領域および「水平」領域を言及する場合、縦向きで図面を観察することを意味する。
図10に示されたアーキテクチャを利用する一部のプログラマブルICは、プログラマブルICの大部分を構成する規則的なコラム状構造を乱す追加のロジックブロックを含む。追加のロジックブロックは、プログラマブルブロックおよび/または専用ロジックであってもよい。例えば、図10に示されたプロセッサブロックPROC810は、複数列のCLBおよびBRAMを跨る。
なお、図10は、単に例示的なSOCアーキテクチャを図示することを意図している。コラム内のロジックブロックの数、コラムの相対幅、コラムの数および順番、コラムに包含されたロジックブロックの種類、ロジックブロックの相対サイズ、および図10の上部に示された相互接続/ロジック実装は、単に例示的なものである。例えば、実際のプログラマブルICにおいて、ユーザロジックの効率的な実装を容易にするために、一般的に、CLBの2つ以上の隣接する列は、CLBの出現する箇所に含まれる。
特定の実装は、これらの処理/動作を実行するようにコンピュータ(または他の電子装置)によって実行される命令を格納したマシンまたはコンピュータ可読媒体を含むコンピュータプログラム製品(例えば不揮発性メモリ装置)に関する。
場合によって、各々の図面に態様および特徴を説明したが、理解すべきことは、組み合わせを明示的に示していなくてもまたは組み合わせとして明示的に説明していなくても、1つの図面の特徴を別の図面の特徴と組み合わせることができることである。
本発明のシステムおよび方法は、さまざまな認証システムに適用可能であると考えられる。他の態様および特徴は、明細書を参照すれば当業者にとって明白であろう。システムおよび方法は、ソフトウェアを実行するように構成された1つ以上のプロセッサとして、特定用途向け集積回路(ASIC)として、またはプログラマブルロジック装置上のロジックとして実装することができる。なお、本明細書および図面は例示のみとして見なされるべきであり、本発明の範囲は、特許請求の範囲によって示される。

Claims (15)

  1. デバッグ方法であって、
    コンピュータシステム上で実行するハードウェアデバッグサーバを用いて、第1のハイレベル言語(HLL)デバッグコマンドを、プログラマブル集積回路(IC)上のHLLソフトウェア仕様の回路実装の条件の1つ以上の値と、前記条件の前記1つ以上の値を格納する前記プログラマブルIC上の1つ以上の格納要素とを指定する第1のハードウェアデバッグコマンドに変換することと、
    前記第1のハードウェアデバッグコマンドを前記プログラマブルIC上のデバッグコントローラ回路に送信することと、
    前記デバッグコントローラ回路を用いて、前記ソフトウェア仕様の前記回路実装に与える単一パルスのクロック信号を生成することと、
    前記単一パルスを生成した後、前記デバッグコントローラ回路を用いて、前記第1のハードウェアデバッグコマンドによって指定された前記1つ以上の格納要素から1つ以上の値を読み取ることと、
    前記1つ以上の値が前記条件を満たしているか否かを判断することと、
    前記1つ以上の格納要素から読み取られた前記1つ以上の値が前記条件を満たしていないことに応じて、別の単一パルスの前記クロック信号を生成することと、
    前記1つ以上の格納要素から読み取られた前記1つ以上の値が前記条件を満たしていることに応じて、前記クロック信号のパルスの生成を中断することと、
    前記1つ以上の格納要素から読み取られた前記1つ以上の値が前記条件を満たしていることに応じて、ブレークポイントを示すデータを出力することとを含む、方法。
  2. 前記データを出力することは、前記デバッグコントローラ回路を用いて、ブレークポイントメッセージを前記ハードウェアデバッグサーバに送信することを含み、前記ブレークポイントメッセージは、前記1つ以上の格納要素と、前記1つ以上の格納要素から読み取られた前記1つ以上の値とを指定し、
    前記方法は、
    前記ハードウェアデバッグサーバを用いて、前記ブレークポイントメッセージによって指定された前記1つ以上の値および前記1つ以上の格納要素に対応する前記HLLソフトウェア仕様の行を決定することと、
    前記ハードウェアデバッグサーバを用いて、前記HLLソフトウェア仕様の前記行を示すデータを出力することとをさらに含む、請求項1に記載の方法。
  3. 前記変換することは、相互参照データベースから、前記第1のHLLデバッグコマンドによって指定された1つ以上のHLL要素と相互参照されるハードウェア有限状態マシンの1つ以上の要素と、前記ハードウェア有限状態マシンの前記1つ以上の要素と相互参照される前記プログラマブルIC上の前記1つ以上の格納要素とを決定することを含み、
    前記HLLソフトウェア仕様の前記行を決定することは、前記相互参照データベースから、前記ブレークポイントによって示された前記ハードウェア有限状態マシンの要素と相互参照される前記HLLソフトウェア仕様の前記行を決定することを含む、請求項2に記載の方法。
  4. 前記ハードウェアデバッグサーバを用いて、第2のHLLデバッグコマンドを第2のハードウェアデバッグコマンドに変換することを含み、前記第2のHLLデバッグコマンドは、読み取りリクエストおよび前記HLLソフトウェア仕様の変数の名前を指定し、前記第2のハードウェアデバッグコマンドは、読み取りリクエストおよび前記プログラマブルICの格納要素を指定し、
    前記第2のハードウェアデバッグコマンドを前記プログラマブルIC上の前記デバッグコントローラ回路に送信することと、
    前記デバッグコントローラ回路を用いて、前記第2のハードウェアデバッグコマンドによって指定された前記格納要素の値を読み取ることと、
    前記第2のハードウェアデバッグコマンドに対する第1の応答を、前記デバッグコントローラ回路から前記ハードウェアデバッグサーバに送信することとを含み、前記第1の応答は、前記格納要素のIDおよび前記格納要素の前記値を含み、
    前記第1の応答を、前記変数の前記名前および前記格納要素の前記値を有する第2の応答に変換することと、
    前記ハードウェアデバッグサーバを用いて、前記第2の応答を出力することとをさらに含む、請求項1~3のいずれか1項に記載の方法。
  5. 前記デバッグコントローラ回路を用いて、前記第1のハードウェアデバッグコマンドに応じて、前記1つ以上の値および前記1つ以上の格納要素の仕様を前記プログラマブルIC上のメモリに格納することをさらに含む、請求項1~4のいずれか1項に記載の方法。
  6. 前記ハードウェアデバッグサーバを用いて、前記HLLソフトウェア仕様を実行するための第2のHLLデバッグコマンドを、前記プログラマブルIC上の前記ソフトウェア仕様の前記回路実装に与える前記クロック信号のフリーランニングを指定する第2のハードウェアデバッグコマンドに変換することと、
    前記第2のハードウェアデバッグコマンドを前記デバッグコントローラ回路に送信することと、
    前記デバッグコントローラ回路を用いて、クロックモードをフリーランニングモードに設定することと、
    前記フリーランニングモードに応じて、前記デバッグコントローラ回路を用いて、前記ソフトウェア仕様の前記回路実装に与える前記クロック信号のパルスを連続的に生成することと、
    前記フリーランニングモードに応じて、前記1つ以上の値の読み取りおよび前記1つ以上の値が前記条件を満たしているか否かの判断をバイパスすることとをさらに含む、請求項1に記載の方法。
  7. 前記ハードウェアデバッグサーバを用いて、前記HLLソフトウェア仕様をシングルステップするための第2のHLLデバッグコマンドを、前記プログラマブルIC上の前記ソフトウェア仕様の前記回路実装に与える前記クロック信号のシングルステップを指定する第2のハードウェアデバッグコマンドに変換することと、
    前記第2のハードウェアデバッグコマンドを前記デバッグコントローラ回路に送信することと、
    前記デバッグコントローラ回路を用いて、クロックモードをシングルステップに設定することとをさらに含み、
    前記単一パルスのクロック信号を生成することは、前記第2のハードウェアデバッグコマンドに応じて実行され、
    前記別の単一パルスの前記クロック信号を生成することは、前記クロック信号のシングルステップを指定する別のハードウェアデバッグコマンドに応じて実行される、請求項1に記載の方法。
  8. 前記ハードウェアデバッグサーバを用いて、第2のHLLデバッグコマンドを第2のハードウェアデバッグコマンドに変換することをさらに含み、前記第2のHLLデバッグコマンドは、書き込みリクエスト、前記HLLソフトウェア仕様の変数の名前、および値を指定し、前記第2のハードウェアデバッグコマンドは、書き込みリクエスト、前記プログラマブルICの格納要素、および前記値を指定し、
    前記第2のハードウェアデバッグコマンドを前記プログラマブルIC上の前記デバッグコントローラ回路に送信することと、
    前記デバッグコントローラ回路を用いて、前記値を前記第2のハードウェアデバッグコマンドによって指定された前記格納要素に書き込むこととをさらに含む、請求項1に記載の方法。
  9. デバッグシステムであって、
    プログラマブル集積回路(IC)を備え、前記プログラマブルICは、ハイレベル言語(HLL)ソフトウェア仕様の回路実装と、前記回路実装に連結されたデバッグコントローラ回路とを含み、
    前記プログラマブルICに接続されたプロセッサと、
    前記プロセッサに連結されたメモリ配列とを備え、前記メモリ配列は、前記プロセッサによって実行されると、前記プロセッサに以下の動作を実行させる命令で構成され、
    前記動作は、
    第1のHLLデバッグコマンドを、前記回路実装の条件の1つ以上の値と前記条件の前記1つ以上の値を格納する前記プログラマブルIC上の1つ以上の格納要素とを指定する第1のハードウェアデバッグコマンドに変換することと、
    前記第1のハードウェアデバッグコマンドを前記デバッグコントローラ回路に送信することとを含み、
    前記デバッグコントローラ回路は、
    前記ソフトウェア仕様の前記回路実装に与える単一パルスのクロック信号を生成し、
    前記単一パルスを生成した後、前記第1のハードウェアデバッグコマンドによって指定された前記1つ以上の格納要素から前記1つ以上の値を読み取り、
    前記1つ以上の値が前記条件を満たしているか否かを判断し、
    前記1つ以上の格納要素から読み取られた前記1つ以上の値が前記条件を満たしていないことに応じて、別の単一パルスの前記クロック信号を生成し、
    前記1つ以上の格納要素から読み取られた前記1つ以上の値が前記条件を満たしていることに応じて、前記クロック信号のパルスの生成を中断し、
    前記1つ以上の格納要素から読み取られた前記1つ以上の値が前記条件を満たしていることに応じて、ブレークポイントを示すデータを出力するように構成されている、システム。
  10. 前記デバッグコントローラ回路は、前記ハードウェアデバッグサーバにブレークポイントメッセージを送信するようにさらに構成され、前記ブレークポイントメッセージは、前記1つ以上の格納要素と、前記1つ以上の格納要素から読み取られた前記1つ以上の値とを指定し、
    前記メモリ配列は、前記プロセッサによって実行されると、前記プロセッサに、
    前記ハードウェアデバッグサーバを用いて、前記ブレークポイントメッセージによって指定された前記1つ以上の値および前記1つ以上の格納要素に対応する前記HLLソフトウェア仕様の行を決定することと、
    前記ハードウェアデバッグサーバを用いて、前記HLLソフトウェア仕様の前記行を示すデータを出力することとを実行させる命令でさらに構成されている、請求項9に記載のシステム。
  11. 前記変換を実行するための命令は、相互参照データベースから、前記第1のHLLデバッグコマンドによって指定された1つ以上のHLL要素と相互参照されるハードウェア有限状態マシンの1つ以上の要素と、前記ハードウェア有限状態マシンの前記1つ以上の要素と相互参照される前記プログラマブルICの前記1つ以上の格納要素とを決定するための命令を含み、
    前記HLLソフトウェア仕様の前記行を決定するための命令は、前記相互参照データベースから、前記ブレークポイントによって示された前記ハードウェア有限状態マシンの要素と相互参照される前記HLLソフトウェア仕様の前記行を決定するための命令を含む、請求項10に記載のシステム。
  12. 前記メモリ配列は、前記プロセッサによって実行されると、前記プロセッサに、
    前記ハードウェアデバッグサーバを用いて、第2のHLLデバッグコマンドを第2のハードウェアデバッグコマンドに変換することを実行させる命令でさらに構成され、前記第2のHLLデバッグコマンドは、読み取りリクエストおよび前記HLLソフトウェア仕様の変数の名前を指定し、前記第2のハードウェアデバッグコマンドは、読み取りリクエストおよび前記プログラマブルICの格納要素を指定し、
    前記第2のハードウェアデバッグコマンドを前記プログラマブルIC上の前記デバッグコントローラ回路に送信することを実行させる命令でさらに構成され、
    前記デバッグコントローラ回路は、
    前記第2のハードウェアデバッグコマンドによって指定された前記格納要素の値を読み取り、
    前記第2のハードウェアデバッグコマンドに対する第1の応答を前記ハードウェアデバッグサーバに送信するようにさらに構成され、前記第1の応答は、前記格納要素のIDおよび前記格納要素の前記値を含み、
    前記メモリは、前記プロセッサによって実行されると、前記プロセッサに、
    前記第1の応答を、前記変数の前記名前および前記格納要素の前記値を有する第2の応答に変換することと、
    前記ハードウェアデバッグサーバを用いて、前記第2の応答を出力することとを実行させる命令でさらに構成されている、請求項9~11のいずれか1項に記載のシステム。
  13. 前記メモリ配列は、前記プロセッサによって実行されると、前記プロセッサに、
    前記HLLソフトウェア仕様を実行するための第2のHLLデバッグコマンドを、前記プログラマブルIC上の前記ソフトウェア仕様の前記回路実装に与える前記クロック信号のフリーランニングを指定する第2のハードウェアデバッグコマンドに変換することと、
    前記第2のハードウェアデバッグコマンドを前記デバッグコントローラ回路に送信することとを実行させる命令でさらに構成され、
    前記デバッグコントローラ回路は、
    前記デバッグコントローラ回路を用いて、クロックモードをフリーランニングモードに設定し、
    前記フリーランニングモードに応じて、前記ソフトウェア仕様の前記回路実装に与える前記クロック信号のパルスを連続的に生成し、
    前記フリーランニングモードに応じて、前記1つ以上の値の読み取りおよび前記1つ以上の値が前記条件を満たしているか否かの判断をバイパスするようにさらに構成されている、請求項9に記載のシステム。
  14. 前記メモリ配列は、前記プロセッサによって実行されると、前記プロセッサに、
    前記HLLソフトウェア仕様をシングルステップするための第2のHLLデバッグコマンドを、前記プログラマブルIC上の前記ソフトウェア仕様の前記回路実装に与える前記クロック信号のシングルステップを指定する第2のハードウェアデバッグコマンドに変換することと、
    前記第2のハードウェアデバッグコマンドを前記デバッグコントローラ回路に送信することとを実行させる命令でさらに構成され、
    前記デバッグコントローラ回路は、クロックモードをシングルステップに設定するようにさらに構成され、
    前記単一パルスの前記クロック信号を生成することは、前記第2のハードウェアデバッグコマンドに応じて実行され、
    前記別の単一パルスの前記クロック信号を生成することは、前記クロック信号のシングルステップを指定する別のハードウェアデバッグコマンドに応じて実行される、請求項9に記載のシステム。
  15. 前記メモリ配列は、前記プロセッサによって実行されると、前記プロセッサに、
    第2のHLLデバッグコマンドを第2のハードウェアデバッグコマンドに変換することを実行させる命令でさらに構成され、前記第2のHLLデバッグコマンドは、書き込みリクエスト、前記HLLソフトウェア仕様の変数の名前、および値を指定し、前記第2のハードウェアデバッグコマンドは、書き込みリクエスト、前記プログラマブルICの格納要素、および値を指定し、
    前記第2のハードウェアデバッグコマンドを前記プログラマブルIC上の前記デバッグコントローラ回路に送信することを実行させる命令でさらに構成され、
    前記デバッグコントローラ回路は、前記値を前記第2のハードウェアデバッグコマンドによって指定された前記格納要素に書き込むようにさらに構成されている、請求項9に記載のシステム。
JP2019548360A 2017-03-06 2018-02-12 デバッグシステムおよびデバッグ方法 Active JP7019711B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/451,068 US10235272B2 (en) 2017-03-06 2017-03-06 Debugging system and method
US15/451,068 2017-03-06
PCT/US2018/017876 WO2018164811A1 (en) 2017-03-06 2018-02-12 Debugging system and method

Publications (2)

Publication Number Publication Date
JP2020509507A JP2020509507A (ja) 2020-03-26
JP7019711B2 true JP7019711B2 (ja) 2022-02-15

Family

ID=61283351

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2019548360A Active JP7019711B2 (ja) 2017-03-06 2018-02-12 デバッグシステムおよびデバッグ方法

Country Status (6)

Country Link
US (1) US10235272B2 (ja)
EP (1) EP3593250B1 (ja)
JP (1) JP7019711B2 (ja)
KR (1) KR102521517B1 (ja)
CN (1) CN110603528B (ja)
WO (1) WO2018164811A1 (ja)

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10235272B2 (en) * 2017-03-06 2019-03-19 Xilinx, Inc. Debugging system and method
US10762211B2 (en) * 2018-04-12 2020-09-01 United States Of America, As Represented By The Secretary Of The Navy Source code diagnostic instrument
US10599553B2 (en) * 2018-04-27 2020-03-24 International Business Machines Corporation Managing cloud-based hardware accelerators
US20200004666A1 (en) * 2018-07-02 2020-01-02 International Business Machines Corporation Debug boundaries for hardware accelerators
US10831975B2 (en) 2018-11-29 2020-11-10 International Business Machines Corporation Debug boundaries in a hardware accelerator
JP7073285B2 (ja) * 2019-01-09 2022-05-23 ルネサスエレクトロニクス株式会社 動作検証プログラム、動作同期方法及び異常検出装置
US11106437B2 (en) 2019-01-14 2021-08-31 Microsoft Technology Licensing, Llc Lookup table optimization for programming languages that target synchronous digital circuits
US11144286B2 (en) 2019-01-14 2021-10-12 Microsoft Technology Licensing, Llc Generating synchronous digital circuits from source code constructs that map to circuit implementations
US11093682B2 (en) 2019-01-14 2021-08-17 Microsoft Technology Licensing, Llc Language and compiler that generate synchronous digital circuits that maintain thread execution order
US11275568B2 (en) 2019-01-14 2022-03-15 Microsoft Technology Licensing, Llc Generating a synchronous digital circuit from a source code construct defining a function call
US10810343B2 (en) 2019-01-14 2020-10-20 Microsoft Technology Licensing, Llc Mapping software constructs to synchronous digital circuits that do not deadlock
US11113176B2 (en) 2019-01-14 2021-09-07 Microsoft Technology Licensing, Llc Generating a debugging network for a synchronous digital circuit during compilation of program source code
US11442104B1 (en) 2019-02-25 2022-09-13 Marvell Asia Pte, Ltd. Configurable integrated logic analyzer
JP7202225B2 (ja) * 2019-03-12 2023-01-11 ローム株式会社 半導体装置及びデバッグシステム
CN113454607B (zh) * 2019-03-21 2023-08-22 杭州飞步科技有限公司 调试方法、装置及片上系统
US11347624B1 (en) * 2019-06-28 2022-05-31 Meta Platforms, Inc. Systems and methods for application exception handling
KR20210014365A (ko) * 2019-07-30 2021-02-09 에스케이하이닉스 주식회사 컨트롤러 및 그 동작 방법
US11442844B1 (en) 2020-06-01 2022-09-13 Xilinx, Inc. High speed debug hub for debugging designs in an integrated circuit
US11249872B1 (en) 2020-06-26 2022-02-15 Xilinx, Inc. Governor circuit for system-on-chip
CN116384305B (zh) * 2023-06-05 2023-08-01 英诺达(成都)电子科技有限公司 数据通信方法、装置、系统、设备及计算机存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001209556A (ja) 1999-11-18 2001-08-03 Yokogawa Electric Corp 検証支援システム
WO2008020513A1 (fr) 2006-08-14 2008-02-21 Nec Corporation débogueur et procédé de débogage
JP2011258185A (ja) 2010-06-11 2011-12-22 International Business Maschines Corporation デバッグ・プログラム、デバッグ・システム、および方法

Family Cites Families (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0719711B2 (ja) * 1986-05-30 1995-03-06 松下電器産業株式会社 マグネツトロ−ルの製造方法
US5678028A (en) * 1994-10-25 1997-10-14 Mitsubishi Electric Information Technology Center America, Inc. Hardware-software debugger using simulation speed enhancing techniques including skipping unnecessary bus cycles, avoiding instruction fetch simulation, eliminating the need for explicit clock pulse generation and caching results of instruction decoding
US6055649A (en) * 1997-11-19 2000-04-25 Texas Instruments Incorporated Processor test port with scan chains and data streaming
US5995744A (en) 1997-11-24 1999-11-30 Xilinx, Inc. Network configuration of programmable circuits
US6212650B1 (en) 1997-11-24 2001-04-03 Xilinx, Inc. Interactive dubug tool for programmable circuits
US6263489B1 (en) 1998-04-30 2001-07-17 Hewlett-Packard Company Method and apparatus for debugging of optimized code
US20060117274A1 (en) * 1998-08-31 2006-06-01 Tseng Ping-Sheng Behavior processor system and method
US6985980B1 (en) 2000-11-03 2006-01-10 Xilinx, Inc. Diagnostic scheme for programmable logic in a system on a chip
US6744274B1 (en) * 2001-08-09 2004-06-01 Stretch, Inc. Programmable logic core adapter
US7308564B1 (en) 2003-03-27 2007-12-11 Xilinx, Inc. Methods and circuits for realizing a performance monitor for a processor from programmable logic
US7523351B2 (en) * 2004-09-27 2009-04-21 Ceva D.S.P. Ltd System and method for providing mutual breakpoint capabilities in computing device
US7805593B1 (en) 2005-03-24 2010-09-28 Xilinx, Inc. Real-time performance monitoring using a system implemented in an integrated circuit
US8327200B1 (en) 2009-04-02 2012-12-04 Xilinx, Inc. Integrated circuit providing improved feed back of a signal
US8214701B1 (en) 2009-04-17 2012-07-03 Altera Corporation Hardware and software debugging
FR2945396A1 (fr) * 2009-05-07 2010-11-12 St Microelectronics Grenoble 2 Procede et dispositif d'analyse de la propagation de transactions dans un reseau multi-protocoles d'un systeme sur puce
US8402442B1 (en) 2009-07-28 2013-03-19 Xilinx, Inc. Common debugger method and system
JP5526725B2 (ja) * 2009-11-20 2014-06-18 富士通株式会社 ハードウェアブレークポイントを用いたデバッグ方法、デバッグ処理プログラム及びデバッグ装置
US8595561B1 (en) 2010-10-27 2013-11-26 Xilinx, Inc. Integrated debugging within an integrated circuit having an embedded processor
US8595555B1 (en) 2011-01-13 2013-11-26 Xilinx, Inc. Debugging an integrated circuit with an embedded processor
US9256408B2 (en) 2012-01-20 2016-02-09 Qualcomm Incorporated Optimizing texture commands for graphics processing unit
US9959186B2 (en) * 2012-11-19 2018-05-01 Teradyne, Inc. Debugging in a semiconductor device test environment
US9292414B2 (en) * 2012-11-26 2016-03-22 Nvidia Corporation System, method, and computer program product for debugging graphics programs locally utilizing a system with a single GPU
US8775986B1 (en) * 2013-02-25 2014-07-08 Xilinx, Inc. Software debugging of synthesized hardware
US9262299B1 (en) 2013-05-31 2016-02-16 Cadence Design Systems, Inc. Simulation observability and control of all hardware and software components of a virtual platform model of an electronics system
US9575869B2 (en) * 2015-02-25 2017-02-21 Red Hat, Inc. Service implementation based debugger for service oriented architecture projects
US10235272B2 (en) * 2017-03-06 2019-03-19 Xilinx, Inc. Debugging system and method

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001209556A (ja) 1999-11-18 2001-08-03 Yokogawa Electric Corp 検証支援システム
WO2008020513A1 (fr) 2006-08-14 2008-02-21 Nec Corporation débogueur et procédé de débogage
JP2011258185A (ja) 2010-06-11 2011-12-22 International Business Maschines Corporation デバッグ・プログラム、デバッグ・システム、および方法

Also Published As

Publication number Publication date
WO2018164811A1 (en) 2018-09-13
KR102521517B1 (ko) 2023-04-12
EP3593250A1 (en) 2020-01-15
CN110603528A (zh) 2019-12-20
US10235272B2 (en) 2019-03-19
US20180253368A1 (en) 2018-09-06
EP3593250B1 (en) 2021-09-08
KR20190121378A (ko) 2019-10-25
JP2020509507A (ja) 2020-03-26
CN110603528B (zh) 2023-11-14

Similar Documents

Publication Publication Date Title
JP7019711B2 (ja) デバッグシステムおよびデバッグ方法
US10255400B1 (en) Debugging system and method
US7584456B1 (en) Method and apparatus for debugging embedded systems having read only memory
EP1913410B1 (en) Method and system for debug and test using replicated logic
JP7036814B2 (ja) デバッギングシステム及び方法
US8214701B1 (en) Hardware and software debugging
US9235670B2 (en) Method and an apparatus for automatic generation of verification environment for processor design and verification
JP5751669B2 (ja) 言語変換処理方法及び言語変換処理プログラム
US9946823B2 (en) Dynamic control of design clock generation in emulation
JP2005346517A (ja) 検証装置および検証方法
Gao et al. Software and hardware co-verification technology based on virtual prototyping of RF SOC
Lee et al. Hardware observability framework for minimally intrusive online monitoring of embedded systems
Li et al. A readback based general debugging framework for soft-core processors
US10726182B1 (en) Operator aware finite state machine for circuit design simulation
US10754759B1 (en) Breakpointing circuitry that evaluates breakpoint conditions while running clock to target circuit
US10621067B1 (en) Data unit breakpointing circuits and methods
US8229725B1 (en) Method and apparatus for modeling processor-based circuit models
Monson et al. Using shadow pointers to trace C pointer values in FPGA circuits
Xie et al. A novel intelligent verification platform based on a structured analysis model
Velguenkar The Design of a Debugger Unit for a RISC Processor Core
Portas et al. CoChrono: A Unified Hardware/Software Performance Analysis Tool for SoC-FPGA Codesign
Wang et al. Uniform SystemC Co-Simulation Methodology for System-on-Chip Designs
Lipsky Multicore debug and performance optimization IP for complex SoCs
Hsu Step back to see more [transaction level SoC debugging and verification]
Wilcox Hardware-Based Verification: Advantages of hardware-software co-verification

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20210209

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20211222

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20220104

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20220202

R150 Certificate of patent or registration of utility model

Ref document number: 7019711

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150