(57)【要約】  ソフトウェア仕様の回路実装をデバッグするための方法は、ハイレベル言語デバッグコマンドを、回路実装（１０８）の条件の値および当該条件の値を格納する格納要素を指定するハードウェアデバッグコマンドに変換すること（１０８）を含む。ハードウェアデバッグコマンドは、回路実装に与える単一パルスのクロック信号を生成する（６２４）デバッグコントローラ回路（１１２）に送信される（５１８）。デバッグコントローラ回路は、ハードウェアデバッグコマンドによって指定された格納要素から値を読み取り（６２６）、この値が条件を満たしているか否かを判断する（６２８）。デバッグコントローラ回路は、格納要素から読み取られた値が条件を満たしていないことに応じて、別の単一パルスのクロック信号を生成する。格納要素から読み取られた値が条件を満たしていることに応じて、クロック信号のパルスの生成を中断し、ブレークポイントを示すデータを出力する（６３２）。
2020509507.tif 000002
【特許請求の範囲】
【請求項１】
デバッグ方法であって、
コンピュータシステム上で実行するハードウェアデバッグサーバを用いて、第１のハイレベル言語（ＨＬＬ）デバッグコマンドを、プログラマブル集積回路（ＩＣ）上のＨＬＬソフトウェア仕様の回路実装の条件の１つ以上の値と、前記条件の前記１つ以上の値を格納する前記プログラマブルＩＣ上の１つ以上の格納要素とを指定する第１のハードウェアデバッグコマンドに変換することと、
前記第１のハードウェアデバッグコマンドを前記プログラマブルＩＣ上のデバッグコントローラ回路に送信することと、
前記デバッグコントローラ回路を用いて、前記ソフトウェア仕様の前記回路実装に与える単一パルスのクロック信号を生成することと、
前記単一パルスを生成した後、前記デバッグコントローラ回路を用いて、前記第１のハードウェアデバッグコマンドによって指定された前記１つ以上の格納要素から１つ以上の値を読み取ることと、
前記１つ以上の値が前記条件を満たしているか否かを判断することと、
前記１つ以上の格納要素から読み取られた前記１つ以上の値が前記条件を満たしていないことに応じて、別の単一パルスの前記クロック信号を生成することと、
前記１つ以上の格納要素から読み取られた前記１つ以上の値が前記条件を満たしていることに応じて、前記クロック信号のパルスの生成を中断することと、
前記１つ以上の格納要素から読み取られた前記１つ以上の値が前記条件を満たしていることに応じて、ブレークポイントを示すデータを出力することとを含む、方法。
【請求項２】
前記データを出力することは、前記デバッグコントローラ回路を用いて、ブレークポイントメッセージを前記ハードウェアデバッグサーバに送信することを含み、前記ブレークポイントメッセージは、前記１つ以上の格納要素と、前記１つ以上の格納要素から読み取られた前記１つ以上の値とを指定し、
前記方法は、
前記ハードウェアデバッグサーバを用いて、前記ブレークポイントメッセージによって指定された前記１つ以上の値および前記１つ以上の格納要素に対応する前記ＨＬＬソフトウェア仕様の行を決定することと、
前記ハードウェアデバッグサーバを用いて、前記ＨＬＬソフトウェア仕様の前記行を示すデータを出力することとをさらに含む、請求項１に記載の方法。
【請求項３】
前記変換することは、相互参照データベースから、前記第１のＨＬＬデバッグコマンドによって指定された１つ以上のＨＬＬ要素と相互参照されるハードウェア有限状態マシンの１つ以上の要素と、前記ハードウェア有限状態マシンの前記１つ以上の要素と相互参照される前記プログラマブルＩＣ上の前記１つ以上の格納要素とを決定することを含み、
前記ＨＬＬソフトウェア仕様の前記行を決定することは、前記相互参照データベースから、前記ブレークポイントによって示された前記ハードウェア有限状態マシンの要素と相互参照される前記ＨＬＬソフトウェア仕様の前記行を決定することを含む、請求項２に記載の方法。
【請求項４】
前記ハードウェアデバッグサーバを用いて、第２のＨＬＬデバッグコマンドを第２のハードウェアデバッグコマンドに変換することを含み、前記第２のＨＬＬデバッグコマンドは、読み取りリクエストおよび前記ＨＬＬソフトウェア仕様の変数の名前を指定し、前記第２のハードウェアデバッグコマンドは、読み取りリクエストおよび前記プログラマブルＩＣの格納要素を指定し、
前記第２のハードウェアデバッグコマンドを前記プログラマブルＩＣ上の前記デバッグコントローラ回路に送信することと、
前記デバッグコントローラ回路を用いて、前記第２のハードウェアデバッグコマンドによって指定された前記格納要素の値を読み取ることと、
前記第２のハードウェアデバッグコマンドに対する第１の応答を、前記デバッグコントローラ回路から前記ハードウェアデバッグサーバに送信することとを含み、前記第１の応答は、前記格納要素のＩＤおよび前記格納要素の前記値を含み、
前記第１の応答を、前記変数の前記名前および前記格納要素の前記値を有する第２の応答に変換することと、
前記ハードウェアデバッグサーバを用いて、前記第２の応答を出力することとをさらに含む、請求項１〜３のいずれか１項に記載の方法。
【請求項５】
前記デバッグコントローラ回路を用いて、前記第１のハードウェアデバッグコマンドに応じて、前記１つ以上の値および前記１つ以上の格納要素の仕様を前記プログラマブルＩＣ上のメモリに格納することをさらに含む、請求項１〜４のいずれか１項に記載の方法。
【請求項６】
前記ハードウェアデバッグサーバを用いて、前記ＨＬＬソフトウェア仕様を実行するための第２のＨＬＬデバッグコマンドを、前記プログラマブルＩＣ上の前記ソフトウェア仕様の前記回路実装に与える前記クロック信号のフリーランニングを指定する第２のハードウェアデバッグコマンドに変換することと、
前記第２のハードウェアデバッグコマンドを前記デバッグコントローラ回路に送信することと、
前記デバッグコントローラ回路を用いて、クロックモードをフリーランニングモードに設定することと、
前記フリーランニングモードに応じて、前記デバッグコントローラ回路を用いて、前記ソフトウェア仕様の前記回路実装に与える前記クロック信号のパルスを連続的に生成することと、
前記フリーランニングモードに応じて、前記１つ以上の値の読み取りおよび前記１つ以上の値が前記条件を満たしているか否かの判断をバイパスすることとをさらに含む、請求項１に記載の方法。
【請求項７】
前記ハードウェアデバッグサーバを用いて、前記ＨＬＬソフトウェア仕様をシングルステップするための第２のＨＬＬデバッグコマンドを、前記プログラマブルＩＣ上の前記ソフトウェア仕様の前記回路実装に与える前記クロック信号のシングルステップを指定する第２のハードウェアデバッグコマンドに変換することと、
前記第２のハードウェアデバッグコマンドを前記デバッグコントローラ回路に送信することと、
前記デバッグコントローラ回路を用いて、クロックモードをシングルステップに設定することとをさらに含み、
前記単一パルスのクロック信号を生成することは、前記第２のハードウェアデバッグコマンドに応じて実行され、
前記別の単一パルスの前記クロック信号を生成することは、前記クロック信号のシングルステップを指定する別のハードウェアデバッグコマンドに応じて実行される、請求項１に記載の方法。
【請求項８】
前記ハードウェアデバッグサーバを用いて、第２のＨＬＬデバッグコマンドを第２のハードウェアデバッグコマンドに変換することをさらに含み、前記第２のＨＬＬデバッグコマンドは、書き込みリクエスト、前記ＨＬＬソフトウェア仕様の変数の名前、および値を指定し、前記第２のハードウェアデバッグコマンドは、書き込みリクエスト、前記プログラマブルＩＣの格納要素、および前記値を指定し、
前記第２のハードウェアデバッグコマンドを前記プログラマブルＩＣ上の前記デバッグコントローラ回路に送信することと、
前記デバッグコントローラ回路を用いて、前記値を前記第２のハードウェアデバッグコマンドによって指定された前記格納要素に書き込むこととをさらに含む、請求項１に記載の方法。
【請求項９】
デバッグシステムであって、
プログラマブル集積回路（ＩＣ）を備え、前記プログラマブルＩＣは、ハイレベル言語（ＨＬＬ）ソフトウェア仕様の回路実装と、前記回路実装に連結されたデバッグコントローラ回路とを含み、
前記プログラマブルＩＣに接続されたプロセッサと、
前記プロセッサに連結されたメモリ配列とを備え、前記メモリ配列は、前記プロセッサによって実行されると、前記プロセッサに以下の動作を実行させる命令で構成され、
前記動作は、
第１のＨＬＬデバッグコマンドを、前記回路実装の条件の１つ以上の値と前記条件の前記１つ以上の値を格納する前記プログラマブルＩＣ上の１つ以上の格納要素とを指定する第１のハードウェアデバッグコマンドに変換することと、
前記第１のハードウェアデバッグコマンドを前記デバッグコントローラ回路に送信することとを含み、
前記デバッグコントローラ回路は、
前記ソフトウェア仕様の前記回路実装に与える単一パルスのクロック信号を生成し、
前記単一パルスを生成した後、前記第１のハードウェアデバッグコマンドによって指定された前記１つ以上の格納要素から前記１つ以上の値を読み取り、
前記１つ以上の値が前記条件を満たしているか否かを判断し、
前記１つ以上の格納要素から読み取られた前記１つ以上の値が前記条件を満たしていないことに応じて、別の単一パルスの前記クロック信号を生成し、
前記１つ以上の格納要素から読み取られた前記１つ以上の値が前記条件を満たしていることに応じて、前記クロック信号のパルスの生成を中断し、
前記１つ以上の格納要素から読み取られた前記１つ以上の値が前記条件を満たしていることに応じて、ブレークポイントを示すデータを出力するように構成されている、システム。
【請求項１０】
前記デバッグコントローラ回路は、前記ハードウェアデバッグサーバにブレークポイントメッセージを送信するようにさらに構成され、前記ブレークポイントメッセージは、前記１つ以上の格納要素と、前記１つ以上の格納要素から読み取られた前記１つ以上の値とを指定し、
前記メモリ配列は、前記プロセッサによって実行されると、前記プロセッサに、
前記ハードウェアデバッグサーバを用いて、前記ブレークポイントメッセージによって指定された前記１つ以上の値および前記１つ以上の格納要素に対応する前記ＨＬＬソフトウェア仕様の行を決定することと、
前記ハードウェアデバッグサーバを用いて、前記ＨＬＬソフトウェア仕様の前記行を示すデータを出力することとを実行させる命令でさらに構成されている、請求項９に記載のシステム。
【請求項１１】
前記変換を実行するための命令は、相互参照データベースから、前記第１のＨＬＬデバッグコマンドによって指定された１つ以上のＨＬＬ要素と相互参照されるハードウェア有限状態マシンの１つ以上の要素と、前記ハードウェア有限状態マシンの前記１つ以上の要素と相互参照される前記プログラマブルＩＣの前記１つ以上の格納要素とを決定するための命令を含み、
前記ＨＬＬソフトウェア仕様の前記行を決定するための命令は、前記相互参照データベースから、前記ブレークポイントによって示された前記ハードウェア有限状態マシンの要素と相互参照される前記ＨＬＬソフトウェア仕様の前記行を決定するための命令を含む、請求項１０に記載のシステム。
【請求項１２】
前記メモリ配列は、前記プロセッサによって実行されると、前記プロセッサに、
前記ハードウェアデバッグサーバを用いて、第２のＨＬＬデバッグコマンドを第２のハードウェアデバッグコマンドに変換することを実行させる命令でさらに構成され、前記第２のＨＬＬデバッグコマンドは、読み取りリクエストおよび前記ＨＬＬソフトウェア仕様の変数の名前を指定し、前記第２のハードウェアデバッグコマンドは、読み取りリクエストおよび前記プログラマブルＩＣの格納要素を指定し、
前記第２のハードウェアデバッグコマンドを前記プログラマブルＩＣ上の前記デバッグコントローラ回路に送信することを実行させる命令でさらに構成され、
前記デバッグコントローラ回路は、
前記第２のハードウェアデバッグコマンドによって指定された前記格納要素の値を読み取り、
前記第２のハードウェアデバッグコマンドに対する第１の応答を前記ハードウェアデバッグサーバに送信するようにさらに構成され、前記第１の応答は、前記格納要素のＩＤおよび前記格納要素の前記値を含み、
前記メモリは、前記プロセッサによって実行されると、前記プロセッサに、
前記第１の応答を、前記変数の前記名前および前記格納要素の前記値を有する第２の応答に変換することと、
前記ハードウェアデバッグサーバを用いて、前記第２の応答を出力することとを実行させる命令でさらに構成されている、請求項９〜１１のいずれか１項に記載のシステム。
【請求項１３】
前記メモリ配列は、前記プロセッサによって実行されると、前記プロセッサに、
前記ＨＬＬソフトウェア仕様を実行するための第２のＨＬＬデバッグコマンドを、前記プログラマブルＩＣ上の前記ソフトウェア仕様の前記回路実装に与える前記クロック信号のフリーランニングを指定する第２のハードウェアデバッグコマンドに変換することと、
前記第２のハードウェアデバッグコマンドを前記デバッグコントローラ回路に送信することとを実行させる命令でさらに構成され、
前記デバッグコントローラ回路は、
前記デバッグコントローラ回路を用いて、クロックモードをフリーランニングモードに設定し、
前記フリーランニングモードに応じて、前記ソフトウェア仕様の前記回路実装に与える前記クロック信号のパルスを連続的に生成し、
前記フリーランニングモードに応じて、前記１つ以上の値の読み取りおよび前記１つ以上の値が前記条件を満たしているか否かの判断をバイパスするようにさらに構成されている、請求項９に記載のシステム。
【請求項１４】
前記メモリ配列は、前記プロセッサによって実行されると、前記プロセッサに、
前記ＨＬＬソフトウェア仕様をシングルステップするための第２のＨＬＬデバッグコマンドを、前記プログラマブルＩＣ上の前記ソフトウェア仕様の前記回路実装に与える前記クロック信号のシングルステップを指定する第２のハードウェアデバッグコマンドに変換することと、
前記第２のハードウェアデバッグコマンドを前記デバッグコントローラ回路に送信することとを実行させる命令でさらに構成され、
前記デバッグコントローラ回路は、クロックモードをシングルステップに設定するようにさらに構成され、
前記単一パルスの前記クロック信号を生成することは、前記第２のハードウェアデバッグコマンドに応じて実行され、
前記別の単一パルスの前記クロック信号を生成することは、前記クロック信号のシングルステップを指定する別のハードウェアデバッグコマンドに応じて実行される、請求項９に記載のシステム。
【請求項１５】
前記メモリ配列は、前記プロセッサによって実行されると、前記プロセッサに、
第２のＨＬＬデバッグコマンドを第２のハードウェアデバッグコマンドに変換することを実行させる命令でさらに構成され、前記第２のＨＬＬデバッグコマンドは、書き込みリクエスト、前記ＨＬＬソフトウェア仕様の変数の名前、および値を指定し、前記第２のハードウェアデバッグコマンドは、書き込みリクエスト、前記プログラマブルＩＣの格納要素、および値を指定し、
前記第２のハードウェアデバッグコマンドを前記プログラマブルＩＣ上の前記デバッグコントローラ回路に送信することを実行させる命令でさらに構成され、
前記デバッグコントローラ回路は、前記値を前記第２のハードウェアデバッグコマンドによって指定された前記格納要素に書き込むようにさらに構成されている、請求項９に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
技術分野
本開示は、一般に、回路記述に変換されたソフトウェアのデバッグに関する。
【背景技術】
【０００２】
背景
ソフトウェアシステムの性能を改善する１つの手法は、選択したセクションをハードウェアアクセラレータとして実装することである。計算の複雑性が高く、全ての実行時間の大部分を消費するシステムのセクションは、ハードウェアアクセラレータの実装に適する候補である。ハードウェアアクセラレータは、例えば、特定用途向け集積回路（ＡＳＩＣ）、グラフィックスプロセッシングユニット（ＧＰＵ）、またはフィールドプログラマブルゲートアレイ（ＦＰＧＡ）上で実行する回路であってもよい。ハードウェアアクセラレータを作成するときにソフトウェア設計者が採用する一般的な手法は、ハイレベル合成（ＨＬＳ）ツールを用いて、指定されたセクションの元のハイレベル言語（ＨＬＬ）仕様を回路の同等のレジスタ転送レベル（ＲＴＬ）仕様または他のハードウェア記述言語（ＨＤＬ）仕様に変換することである。
【０００３】
生成されたＲＴＬ仕様が機能上ＨＬＬ仕様と同様であるかもしれないが、ソフトウェア設計者は、システム開発時に実装された回路をデバッグする必要がある。タイミング、同時実行性および競合状態などの問題は、ＨＬＬ仕様を開発する際に分からなくても、ハードウェアをテストする際に表面化する可能性がある。また、ソフトウェアおよびハードウェアライブラリ実装の違い、誤った変換、またはメモリアクセスの違いは、実装の問題をもたらす可能性がある。
【０００４】
ＦＰＧＡハードウェア内の回路実装のデバッグは、ハードウェア設計をインストルメント化することによって容易になる。回路設計を合成する前に、設計者は、個々の信号を監視する追加のデバッグ回路（集積ロジックアナライザ）を指定することができる。しかしながら、デバッグ回路を指定するために、設計者は、トレースすべき内部の低レベル信号および波形を生成するために設定すべきトリガを知る必要がある。設計者は、複数の合成反復が必要になり、各反復が設計の変更および異なる信号のトレースに関与することを分かるだろう。
【発明の概要】
【課題を解決するための手段】
【０００５】
概要
開示されたソフトウェア仕様の回路実装をデバッグする方法は、コンピュータシステム上で実行するハードウェアデバッグサーバを用いて、第１のＨＬＬデバッグコマンドをハードウェアデバッグコマンドに変換することを含む。このハードウェアデバッグコマンドは、プログラマブル集積回路（ＩＣ）上のソフトウェア仕様の回路実装の条件の１つ以上の値、および当該条件の１つ以上の値を格納するプログラマブルＩＣ上の１つ以上の格納要素を指定する。第１のハードウェアデバッグコマンドは、プログラマブルＩＣ上のデバッグコントローラ回路に送信され、デバッグコントローラ回路は、ソフトウェア仕様の回路実装に与える単一パルスのクロック信号を生成する。単一パルスを生成した後、デバッグコントローラ回路は、ハードウェアデバッグコマンドによって指定された１つ以上の格納要素から１つ以上の値を読み取り、１つ以上の値が条件を満たしているか否かを判断する。デバッグコントローラ回路は、１つ以上の格納要素から読み取られた１つ以上の値が条件を満たしていないことに応じて、別の単一パルスのクロック信号を生成する。１つ以上の格納要素から読み取られた１つ以上の値が条件を満たしていることに応じて、クロック信号のパルスの生成が中断され、１つ以上の格納要素から読み取られた１つ以上の値が条件を満たしていることに応じて、ブレークポイントを示すデータが出力される。
【０００６】
必要に応じて、データを出力することは、デバッグコントローラ回路を用いて、ブレークポイントメッセージをハードウェアデバッグサーバに送信することを含むことができ、ブレークポイントメッセージは、１つ以上の格納要素と、１つ以上の格納要素から読み取られた１つ以上の値とを指定することができる。方法は、ハードウェアデバッグサーバを用いて、ブレークポイントメッセージによって指定された１つ以上の値および１つ以上の格納要素に対応するＨＬＬソフトウェア仕様の行を決定することと、ハードウェアデバッグサーバを用いて、ＨＬＬソフトウェア仕様の行を示すデータを出力することとをさらに含むことができる。
【０００７】
必要に応じて、変換することは、相互参照データベースから、第１のＨＬＬデバッグコマンドによって指定された１つ以上のＨＬＬ要素と相互参照されるハードウェア有限状態マシンの１つ以上の要素と、ハードウェア有限状態マシンの１つ以上の要素と相互参照されるプログラマブルＩＣ上の１つ以上の格納要素とを決定することを含むことができる。
【０００８】
必要に応じて、ＨＬＬソフトウェア仕様の行を決定することは、相互参照データベースから、ブレークポイントによって示されたハードウェア有限状態マシンの要素と相互参照されるＨＬＬソフトウェア仕様の行を決定することを含むことができる。
【０００９】
必要に応じて、方法は、ハードウェアデバッグサーバを用いて、第２のＨＬＬデバッグコマンドを第２のハードウェアデバッグコマンドに変換することを含むことができ、第２のＨＬＬデバッグコマンドは、読み取りリクエストおよびＨＬＬソフトウェア仕様の変数の名前を指定し、第２のハードウェアデバッグコマンドは、読み取りリクエストおよびプログラマブルＩＣの格納要素を指定する。また、方法は、第２のハードウェアデバッグコマンドをプログラマブルＩＣ上のデバッグコントローラ回路に送信することと、デバッグコントローラ回路を用いて、第２のハードウェアデバッグコマンドによって指定された格納要素の値を読み取ることと、第２のハードウェアデバッグコマンドに対する第１の応答を、デバッグコントローラ回路からハードウェアデバッグサーバに送信することとを含み、第１の応答は、格納要素のＩＤおよび格納要素の値を含み、第１の応答を、変数の名前および格納要素の値を有する第２の応答に変換することと、ハードウェアデバッグサーバを用いて、第２の応答を出力することとをさらに含むことができる。
【００１０】
必要に応じて、方法は、デバッグコントローラ回路を用いて、第１のハードウェアデバッグコマンドに応じて、１つ以上の値および１つ以上の格納要素の仕様をプログラマブルＩＣ上のメモリに格納することをさらに含むことができる。
【００１１】
必要に応じて、１つ以上の格納要素の仕様は、プログラマブルＩＣ上の構成メモリのフレームおよびオフセットを指定することができる。
【００１２】
必要に応じて、方法は、ハードウェアデバッグサーバを用いて、ＨＬＬソフトウェア仕様を実行するための第２のＨＬＬデバッグコマンドを、プログラマブルＩＣ上のソフトウェア仕様の回路実装に与えるクロック信号のフリーランニングを指定する第２のハードウェアデバッグコマンドに変換することをさらに含むことができる。また、方法は、第２のハードウェアデバッグコマンドをデバッグコントローラ回路に送信することと、デバッグコントローラ回路を用いて、クロックモードをフリーランニングモードに設定することと、フリーランニングモードに応じて、デバッグコントローラ回路を用いて、ソフトウェア仕様の回路実装に与えるクロック信号のパルスを連続的に生成することと、フリーランニングモードに応じて、１つ以上の値の読み取りおよび１つ以上の値が条件を満たしているか否かの判断をバイパスすることとをさらに含むことができる。
【００１３】
必要に応じて、方法は、ハードウェアデバッグサーバを用いて、ＨＬＬソフトウェア仕様をシングルステップするための第２のＨＬＬデバッグコマンドを、プログラマブルＩＣ上のソフトウェア仕様の回路実装に与えるクロック信号のシングルステップを指定する第２のハードウェアデバッグコマンドに変換することをさらに含むことができる。また、方法は、第２のハードウェアデバッグコマンドをデバッグコントローラ回路に送信することと、デバッグコントローラ回路を用いて、クロックモードをシングルステップに設定することとをさらに含むことができる。単一パルスのクロック信号を生成することは、第２のハードウェアデバッグコマンドに応じて実行されてもよく、別の単一パルスのクロック信号を生成することは、クロック信号のシングルステップを指定する別のハードウェアデバッグコマンドに応じて実行されてもよい。
【００１４】
必要に応じて、方法は、ハードウェアデバッグサーバを用いて、第２のＨＬＬデバッグコマンドを第２のハードウェアデバッグコマンドに変換することをさらに含むことができ、第２のＨＬＬデバッグコマンドは、書き込みリクエスト、ＨＬＬソフトウェア仕様の変数の名前、および値を指定し、第２のハードウェアデバッグコマンドは、書き込みリクエスト、プログラマブルＩＣの格納要素、および値を指定する。また、方法は、第２のハードウェアデバッグコマンドをプログラマブルＩＣ上のデバッグコントローラ回路に送信することと、デバッグコントローラ回路を用いて、値を第２のハードウェアデバッグコマンドによって指定された格納要素に書き込むこととをさらに含むことができる。
【００１５】
開示されたデバッグシステムは、プログラマブル集積回路（ＩＣ）と、プログラマブルＩＣに連結されたプロセッサと、プロセッサに連結されたメモリ配列とを含む。プログラマブルＩＣには、プログラマブルＩＣは、ハイレベル言語（ＨＬＬ）ソフトウェア仕様の回路実装と、回路実装に連結されたデバッグコントローラ回路とを含む。メモリ配列は、プロセッサによって実行されると、プロセッサに第１のＨＬＬデバッグコマンドを、回路実装の条件の１つ以上の値と条件の１つ以上の値を格納するプログラマブルＩＣ上の１つ以上の格納要素とを指定する第１のハードウェアデバッグコマンドに変換することを実行させる命令で構成されている。プロセッサは、第１のハードウェアデバッグコマンドをデバッグコントローラ回路に送信する。デバッグコントローラ回路は、ソフトウェア仕様の回路実装に与える単一パルスのクロック信号を生成するように構成されている。デバッグコントローラ回路は、単一パルスを生成した後、第１のハードウェアデバッグコマンドによって指定された１つ以上の格納要素から１つ以上の値を読み取り、１つ以上の値が条件を満たしているか否かを判断する。デバッグコントローラ回路は、１つ以上の格納要素から読み取られた１つ以上の値が条件を満たしていないことに応じて、別の単一パルスのクロック信号を生成する。デバッグ制御回路は、１つ以上の格納要素から読み取られた１つ以上の値が条件を満たしていることに応じて、クロック信号のパルスの生成を中断し、ブレークポイントを示すデータを出力する。
【００１６】
必要に応じて、デバッグコントローラ回路は、ハードウェアデバッグサーバにブレークポイントメッセージを送信するようにさらに構成されてもよい。ブレークポイントメッセージは、１つ以上の格納要素と、１つ以上の格納要素から読み取られた１つ以上の値を指定することができる。メモリ配列は、プロセッサによって実行されると、ハードウェアデバッグサーバを用いて、ブレークポイントメッセージによって指定された１つ以上の値および１つ以上の格納要素に対応するＨＬＬソフトウェア仕様の行を決定することと、ハードウェアデバッグサーバを用いて、ＨＬＬソフトウェア仕様の行を示すデータを出力することとをプロセッサに実行させる命令でさらに構成されてもよい。
【００１７】
必要に応じて、変換を実行するための命令は、相互参照データベースから、第１のＨＬＬデバッグコマンドによって指定された１つ以上のＨＬＬ要素と相互参照されるハードウェア有限状態マシンの１つ以上の要素と、ハードウェア有限状態マシンの１つ以上の要素と相互参照されるプログラマブルＩＣ上の１つ以上の格納要素とを決定するための命令を含むことができる。
【００１８】
必要に応じて、ＨＬＬソフトウェア仕様の行を決定するための命令は、相互参照データベースから、ブレークポイントによって示されたハードウェア有限状態マシンの要素と相互参照されるＨＬＬソフトウェア仕様の行を決定するための命令を含むことができる。
【００１９】
必要に応じて、メモリ配列は、プロセッサによって実行されると、プロセッサに、ハードウェアデバッグサーバを用いて、第２のＨＬＬデバッグコマンドを第２のハードウェアデバッグコマンドに変換することを実行させる命令でさらに構成されてもよく、第２のＨＬＬデバッグコマンドは、読み取りリクエストおよびＨＬＬソフトウェア仕様の変数の名前を指定し、第２のハードウェアデバッグコマンドは、読み取りリクエストおよびプログラマブルＩＣの格納要素を指定し、第２のハードウェアデバッグコマンドをプログラマブルＩＣ上のデバッグコントローラ回路に送信することを実行させる命令でさらに構成されてもよい。第２のハードウェアデバッグコマンドによって指定された格納要素の値を読み取り、第２のハードウェアデバッグコマンドに対する第１の応答を、デバッグコントローラ回路からハードウェアデバッグサーバに送信するようにさらに構成されてもよい。第１の応答は、格納要素のＩＤおよび格納要素の値を含む。メモリは、プロセッサによって実行されると、第１の応答を、変数の名前および格納要素の値を有する第２の応答に変換することと、ハードウェアデバッグサーバを用いて、第２の応答を出力することとをプロセッサに実行させる命令でさらに構成されてもよい。
【００２０】
必要に応じて、デバッグコントローラ回路は、第１のハードウェアデバッグコマンドに応じて、１つ以上の値および１つ以上の格納要素の仕様をプログラマブルＩＣ上のメモリに格納するようにさらに構成されてもよい。
【００２１】
必要に応じて、１つ以上の格納要素の仕様は、プログラマブルＩＣ上の構成メモリのフレームおよびオフセットを指定することができる。
【００２２】
必要に応じて、メモリ配列は、プロセッサによって実行されると、プロセッサに、ＨＬＬソフトウェア仕様を実行するための第２のＨＬＬデバッグコマンドを、プログラマブルＩＣ上のソフトウェア仕様の回路実装に与えるクロック信号のフリーランニングを指定する第２のハードウェアデバッグコマンドに変換することと、第２のハードウェアデバッグコマンドをデバッグコントローラ回路に送信することとを実行させる命令でさらに構成されてもよい。デバッグコントローラ回路は、デバッグコントローラ回路を用いて、クロックモードをフリーランニングモードに設定し、フリーランニングモードに応じて、ソフトウェア仕様の回路実装に与えるクロック信号のパルスを連続的に生成し、フリーランニングモードに応じて、１つ以上の値の読み取りおよび１つ以上の値が条件を満たしているか否かの判断をバイパスするようにさらに構成されてもよい。
【００２３】
必要に応じて、メモリ配列は、プロセッサによって実行されると、プロセッサに、ＨＬＬソフトウェア仕様をシングルステップするための第２のＨＬＬデバッグコマンドを、プログラマブルＩＣ上のソフトウェア仕様の回路実装に与えるクロック信号のシングルステップを指定する第２のハードウェアデバッグコマンドに変換することと、第２のハードウェアデバッグコマンドをデバッグコントローラ回路に送信することとを実行させる命令でさらに構成されてもよい。デバッグコントローラ回路は、クロックモードをシングルステップに設定するようにさらに構成されてもよい。単一パルスのクロック信号を生成することは、第２のハードウェアデバッグコマンドに応じて実行されてもよく、別の単一パルスのクロック信号を生成することは、クロック信号のシングルステップを指定する別のハードウェアデバッグコマンドに応じて実行されてもよい。
【００２４】
必要に応じて、メモリ配列は、プロセッサによって実行されると、プロセッサに、第２のＨＬＬデバッグコマンドを第２のハードウェアデバッグコマンドに変換することを実行させる命令でさらに構成されてもよい。第２のＨＬＬデバッグコマンドは、書き込みリクエスト、ＨＬＬソフトウェア仕様の変数の名前、および値を指定し、第２のハードウェアデバッグコマンドは、書き込みリクエスト、プログラマブルＩＣの格納要素、および値を指定する。メモリ配列は、プロセッサによって実行されると、プロセッサに、第２のハードウェアデバッグコマンドをプログラマブルＩＣ上のデバッグコントローラ回路に送信することを実行させる命令でさらに構成されてもよい。デバッグコントローラ回路は、値を第２のハードウェアデバッグコマンドによって指定された格納要素に書き込むようにさらに構成されてもよい。
【００２５】
他の特徴は、以下の詳細な説明および特許請求の範囲を検討することによって理解される。
【００２６】
方法およびシステムの様々な態様および特徴は、図面を参照すると共に、以下の詳細な説明を検討することによって明らかになる。
【図面の簡単な説明】
【００２７】
【図１】ソフトウェアデバッグ技術および手法を使用したハードウェアアクセラレータのデバッグをサポートするシステムの実装を示す図である。
【図２】一実現例に係るデバッグコントローラ回路の回路図を示す図である。
【図３】相互参照データベースの生成を示すデータフロー図。
【図４】一実現例に係るハードウェアデバッグサーバのコンポーネントを示す図である。
【図５】第１のリスナスレッドを実装するプロセスを示すフローチャートである。
【図６】第２のリスナスレッドを実装するプロセスを示すフローチャートである。
【図７】コマンドスレッドを実装するプロセスを示すフローチャートである。
【図８】ハードウェアデバッグサーバからのコマンドを処理し、ハードウェアアクセラレータからハードウェアデバッグサーバにデバッグ出力を報告する際にデバッグコントローラ回路によって実行されるプロセスを示すフローチャートである。
【図９】ＨＬＬプログラム変数「counter」を処理するためのＨＬＬソースコードおよびＨＬＳによって生成されたＲＴＬコードの同等部分を示す図である。
【図１０】デバッグコントローラ回路およびハードウェアアクセラレータを実装できるプログラマブル集積回路（ＩＣ）を示す図である。
【発明を実施するための形態】
【００２８】
詳細な説明
以下の記載において、多くの特定の詳細を用いて、本明細書に開示された特定の実施例を説明する。しかしながら、当業者なら、以下に記載された特定の詳細がなくても、１つ以上の他の実施例および／またはこれらの実施例の変形例を実施できることが明らかであろう。場合によって、本明細書に記載の実施例の説明を不明瞭にしないために、周知の特徴を詳細に説明しない。図面を簡単にするために、異なる図面において、同一の参照番号を用いて、同一要素または同一要素の追加のインスタンスを指す場合がある。
【００２９】
ソフトウェア設計者がよく知っているデバッグ環境は、集積ロジックアナライザおよび波形ビューアを備えるハードウェアデバッグ環境とは本質的に違う。ソフトウェアデバッガは、連続的に実行しているプログラムコードの特定の命令または行にブレークポイントを設定し、変数を検査および編集するなどの機能を提供する。これらの変数の値は、プログラム実行中にレジスタまたはメモリに格納される。ソフトウェアデバッガは、ソースコードレベルでデバッグ情報を表示する。これにより、ソフトウェア設計者は、ソフトウェアデバッガの所望の動作および実行中プログラムの状態をＨＬＬプログラムの名前および命令文に容易に関連付けることができる。
【００３０】
集積ロジックアナライザおよび波形ビューアを備えるハードウェアデバッグ環境は、信号レベルで動作する。集積ロジックアナライザは、信号状態に基づいてブレークポイントを設定し、信号状態をトレースし、波形を表示し、およびレジスタを検査することができる。しかしながら、実装された回路が元々ＨＬＬで指定されたため、設計者は、ＨＬＬプログラムの要素と実装された回路の信号名および特定のレジスタとの関連付けに不慣れな場合がある。したがって、設計者は、デバッグ作業を遅らせる可能性がある。
【００３１】
開示された方法およびシステムは、ソフトウェア設計者がよく知っているソフトウェアデバッグ環境とハードウェアデバッグ環境との間のギャップを埋める。方法およびシステムは、ソフトウェアデバッガのデバッグ機能、例えば、ＨＬＬプログラムコードの特定の行にブレークポイントを設定する機能、変数のＨＬＬ名で変数の値を検査する機能、およびメモリの内容を検査する機能をサポートする。システムは、ＨＬＬ構文とＲＴＬ構文と間のマッピング、およびＲＴＬ構文とＲＴＬ構文を実装する回路要素と間のマッピングを処理する。システムによって提供されたマッピングおよび変換によって、ソフトウェア設計者は、ソフトウェアデバッガ環境で作業しているようにハードウェアアクセラレータをデバッグすることができる。
【００３２】
開示された実現例において、コンピュータシステム上で動作しているハードウェアデバッグサーバは、ソフトウェアデバッガフロントエンドからデバッグコマンドを受信する。このデバッグコマンドは、ＨＬＬソフトウェア仕様においてブレークポイントの設定を指定する。ハードウェアデバッグサーバは、デバッグコマンドをハードウェアデバッグコマンドに変換する。このハードウェアデバッグコマンドは、ソフトウェア仕様の回路実装の条件の１つ以上の値を指定し、条件の１つ以上の値を格納する１つ以上の格納要素を指定する。回路の実装は、プログラマブルＩＣ上で動作する。ハードウェアデバッグサーバは、ハードウェアデバッグコマンドをプログラマブルＩＣ上のデバッグコントローラ回路に送信し、デバッグコントローラ回路は、回路実装に与える単一パルスのクロック信号を生成する。次に、デバッグコントローラ回路は、ハードウェアデバッグコマンドによって指定された格納要素から値を読み取り、この値が条件を満たしているか否かを判断する。格納要素から読み取られた値が条件を満たしていない場合、デバッグコントローラ回路は、別の単一パルスのクロック信号を生成する。格納要素から読み取られた値が条件を満たしている場合、デバッグコントローラ回路は、ブレークポイントを示す信号を出力し、ハードウェアデバッグサーバから別のコマンドを受信するまで、クロック信号のパルスの生成を中断する。
【００３３】
図１は、ソフトウェアデバッグ技術および手法を使用したハードウェアアクセラレータのデバッグをサポートするシステム１００の実装を示している。システムは、ＧＤＢなどのソフトウェアデバッガと、ＨＬＬソースコードから生成されたハードウェアアクセラレータとの間の対話をサポートする。システムによって提供されたハードウェアアクセラレータのビューは、ＨＬＬソースコードをデバッグする際にはソフトウェアデバッガによって提供される。システムは、ＨＬＬデバッガフロントエンド１０２と、ハードウェアデバッグサーバ１０６と、ハードウェアアクセラレータ１０８およびデバッグコントローラ回路１１２を実装したプログラマブルＩＣ１１０とを含む。
【００３４】
ハードウェアデバッグサーバは、コンピュータシステム１０４上で実行する。一実現例において、ＨＬＬデバッガフロントエンドは、コンピュータシステム１０４上で実行することもできる。代替的には、デバッガフロントエンドは、ＬＡＮまたはインターネットなどのネットワークに接続しているネットワークインターフェイスを介して、コンピュータシステム１０４に連結された別のコンピュータシステム（図示せず）上で実行することができる。ＨＬＬデバッガフロントエンド１０２およびハードウェアデバッグサーバ１０６は、ＴＣＰ／ＩＰなどのプロトコルを使用して通信可能に接続することができる。
【００３５】
ソフトウェアのデバッグをサポートするがハードウェアアクセラレータのデバッグをサポートしないいくつかの従来のソフトウェアデバッガは、ソフトウェアデバッグサーバを含む。これによって、１つのコンピュータシステム上で動作しているデバッガフロントエンドは、別のコンピュータシステム上で動作しているソフトウェアのデバッグを制御することができる。一実施例において、ＨＬＬデバッガフロントエンド１０２は、ＧＮＵデバッガ、ＧＤＢなどの一般的に利用可能なソフトウェアデバッガの一部であってもよい。ＨＬＬデバッガフロントエンドは、元のＨＬＬソースコードに関して実行中のプログラムの状態を表示するときに、ＤＷＡＲＦ情報などの標準形式のデバッグ情報を使用する。ＨＬＬソースコード内の変数名は、ハードウェアレジスタから読み取られた対応の値と共に表示される。一実現例において、ＨＬＬデバッガフロントエンド１０２は、ソフトウェアデバッグサーバと通信する際に使用されたプロトコルと同様のプロトコルを使用して、ハードウェアデバッグサーバ１０６と通信する。ＧＤＢのＨＬＬデバッガフロントエンドを含む実現例において、デバッガフロントエンドは、ソフトウェアデバッグサーバと通信する際に使用されたプロトコルと同様のプロトコル、すなわち、リモートシリアルプロトコル（ＲＳＰ）を使用して、ハードウェアデバッグサーバと通信する。
【００３６】
ハードウェアデバッグサーバ１０６は、デバッガフロントエンド１０２とデバッグコントローラ回路１１２との間のコマンドおよびデータを変換する。ハードウェアデバッグサーバは、例えばＰＣＩｅなどのバスインターフェイスを介して、デバッグコントローラ回路に接続する。デバッグコントローラ回路は、ＨＬＬプログラムコードから実装された回路であるハードウェア回路１０８に与えるクロック信号を制御し、コマンドを処理してハードウェアアクセラレータからの値を返すことによって、ハードウェアデバッグサーバとハードウェアアクセラレータとの間の対話を処理する。ハードウェアデバッグサーバによって、ＨＬＬデバッガフロントエンドは、ソフトウェアをデバッグする時と同様に、ハードウェアアクセラレータをデバッグすることができる。ハードウェアデバッグサーバは、ハードウェアシミュレーションのセマンティクスおよび詳細を抽象化し、ソフトウェア指向ビューをユーザに提示する。
【００３７】
ＨＬＳツールは、ハードウェアアクセラレータを生成する際に、ハードウェアアクセラレータを囲む隔離回路１１４も生成する。隔離回路は、ＨＬＬプログラムコードによって指定されたインターフェイスに準拠し、ハードウェアアクセラレータとプログラマブルＩＣ１１０の他の回路との間にバリアを提供する。隔離回路によって、デバッグコントローラ回路１１２は、シングルステップモードにある場合またはブレークポイントにヒットした場合、ハードウェアアクセラレータに与えるクロック信号を停止できると共に、プログラマブルＩＣ上の他の回路に与えるクロック信号をアクティブのままに維持することができる。
【００３８】
加速ソフトウェアデバッグ情報１１６は、ＨＬＬデバッガフロントエンド１０２に提供される。加速ソフトウェアデバッグ情報１１６は、ハードウェアアクセラレータ１０８を生成したＨＬＬソースプログラムコードをデバッグするために使用されるデバッグシンボルを含む。一実現例において、加速ソフトウェアデバッグ情報１１６は、ＨＬＳツールによって生成されたＤＷＡＲＦ情報であってもよい。ＨＬＳツールは、ＨＬＬプログラムコードの中間表現を生成して、最適化の前に、ＣＰＵをターゲットとした実行可能な関連デバッグ情報１１６を生成するプロセスに中間表現を渡す。
【００３９】
また、加速ソフトウェアデバッグ情報１１６は、ハードウェアデバッグサーバ１０６によって相互参照データベース１１８を構築する際に使用される。相互参照データベースは、ＨＬＬプログラムコードから生成されたＲＴＬ状態マシンの要素およびハードウェアアクセラレータ１０８の要素によって相互参照されるＲＴＬステートマシンの要素によって相互参照される加速ソフトウェアデバッグ情報を含む。
【００４０】
１つのデバッグシナリオにおいて、ハードウェアデバッグサーバ１０６は、デバッガフロントエンドから、ＨＬＬソフトウェア仕様にブレークポイントを設定するためのハイレベル言語（ＨＬＬ）デバッグコマンドを受信する。ハードウェアアクセラレータをデバッグしている人物は、デバッガフロントエンドと対話することによって、ハードウェアアクセラレータ１０８を生成したＨＬＬソフトウェア仕様から、特定の命令または行番号を選択する。当業者は、既知のＨＬＳツールを使用して、ＨＬＬソースコードから、シミュレーションに適した回路設計記述および対応するハードウェアモデルを生成できることを認識するであろう。
【００４１】
ＨＬＬデバッグコマンドの受信に応じて、ハードウェアデバッグサーバは、ＨＬＬデバッグコマンドを、条件と、条件の１つ以上の値を格納するプログラマブルＩＣ１１０上の１つ以上の格納要素とを指定するハードウェアデバッグコマンドに変換する。その後、ハードウェアデバッグサーバは、このハードウェアデバッグコマンドをデバッグコントローラ回路１１２に送信する。デバッグコントローラ回路は、当該ハードウェアデバッグコマンドに応じて、ハードウェアアクセラレータに提供されるクロック信号の各サイクルの後でブレークポイントの条件が満たされているか否かを判断する。ブレークポイントコマンドは、プログラマブルＩＣの格納要素を指定する。デバッグコントローラ回路は、単一パルスのクロック信号を生成した後、格納要素から値を読み取る。この値がブレークポイントの条件を満たしている場合、デバッグコントローラ回路は、ハードウェアアクセラレータに与えるクロックパルスの生成を中断し、ハードウェアデバッグサーバ１０６に信号を出力する。当該値がブレークポイントの条件を満たしていない場合、デバッグコントローラ回路は、フリーランニングクロックモードで動作している場合に、ハードウェアアクセラレータに別のクロックパルスを提供することができる。シングルステップモードで動作している場合に、デバッグコントローラ回路は、ハードウェアデバッグサーバからの別のコマンドを待つ。
【００４２】
ブレークポイントがハードウェアデバッグサーバに送信されると、ハードウェアデバッグサーバは、ブレークポイントに対応するＨＬＬソフトウェア仕様の行番号、命令または命令文を決定する。その後、ハードウェアデバッグサーバは、ＨＬＬソフトウェア仕様の行番号、命令または命令文、およびブレークポイントを示すしるしをＨＬＬデバッガフロントエンドに出力する。
【００４３】
ハードウェアデバッグサーバ１０６およびＨＬＬデバッガフロントエンド１０２を動作させるデータ処理システムは、１つ以上のプロセッサ回路（または「プロセッサ」）、例えば、システムバスまたは他の適切な回路を介してメモリおよびストレージ配列に接続された中央処理装置（ＣＰＵ）を含む。システムは、ＨＬＬデバッガフロントエンドおよびハードウェアデバッグサーバを実装するプログラムコードを格納し、プロセッサは、システムバスを介してメモリおよびストレージ配列から入手したプログラムコードを実行する。データ処理システムのメモリは、１つ以上の物理メモリ装置、例えば、ローカルメモリおよび永続記憶装置を含むことができる。ローカルメモリは、一般に、プログラムコードを実際に実行する際に使用されるランダムアクセスメモリまたは他の非永続メモリ装置を指す。永続記憶装置は、ハードディスクドライブ（ＨＤＤ）、ソリッドステートドライブ（ＳＳＤ）、または他の永続データ記憶装置として実装することができる。また、システム１００は、実行中にローカルメモリおよび永続記憶装置からプログラムコードおよびデータを取得する回数を減らすために、少なくともいくつかのプログラムコードおよびデータの一時的な記憶を提供する１つ以上のキャッシュメモリ（図示せず）を含むこともできる。データ処理システムは、入力／出力（Ｉ／Ｏ）装置、例えば、ユーザ入力装置またはディスプレイ装置をさらに含むことができる。データ処理システムのネットワークアダプタは、プライベートネットワークまたはパブリックネットワークを介して、システムを他のコンピュータシステム、リモートプリンタおよび／またはリモート記憶装置に接続することができる。
【００４４】
図２は、一実現例に係るデバッグコントローラ回路１１２の回路図を示している。デバッグコントローラ回路は、プログラマブルＩＣのプログラマブルロジックリソースに実装することができ、またはハードワイヤード回路として実装することができる。デバッグコントローラ回路の制御クロック生成装置２０２は、制御クロック信号２１４を生成するように構成される。制御クロック信号２１４は、単一パルスまたはプログラマブルＩＣに提供されるクロック信号の周波数で自由に生成されてもよく、停止されてもよい。制御クロックをハードウェアアクセラレータに提供することによって、デバッグコントローラ回路は、ハードウェアアクセラレータのステップ実行、停止、または自由実行を行うことができる。デバッグコントローラは、プログラマブルＩＣの構成メモリにアクセスできるため、変数の値の読み取りおよび書き込みを行うことができる。制御クロックおよび構成メモリのアクセスの組み合わせによって、デバッグコントローラ回路は、制御クロック信号の各サイクル後に条件をチェックすることにより、ハードウェアブレークポイントおよびウォッチポイントを実装する。
【００４５】
デバッグコントローラのブレークポイントおよびリードバック回路２０４は、ＡＸＩバス接続などの外部インターフェイス回路２０６を介して、命令を受け取る。外部インターフェイス回路は、可変データを送り返し、ブレークポイントにヒットしたことを報告する際にも使用される。デバッグコントローラ回路は、外部インターフェイスから命令を受け入れ、命令を解釈し、命令によって指定された動作を実行する。ブレークポイントを設定するためのコマンド、ハードウェアアクセラレータを停止するためのコマンド、ハードウェアアクセラレータを実行するためのコマンド、変数を読み取るためのコマンド、またはブレークポイントステッピングモードで実行するためのコマンドは全て、外部インターフェイスから受け取る。
【００４６】
デバッグコントローラがブレークポイントを設定するための命令を受信すると、ブレークポイントおよびリードバック回路２０４は、ブレークポイントのフレームおよびオフセット情報（「ブレークポイント情報」）２０８をローカルメモリ２１０に格納する。ブレークポイント情報は、プログラマブルＩＣの構成メモリ要素のフレームおよびオフセット並びにチェック条件を含む値を指定することができる。
【００４７】
ブレークポイント情報を用いてデバッグコントローラ回路をプログラムした後、ブレークポイントおよびリードバック回路２０４は、開始命令に従って、デバッグモードの動作を開始する。デバッグモードにおいて、ブレークポイントおよびリードバック回路は、単一パルスの制御クロック信号を出力するように制御クロック生成装置２０２に指示する。これによって、ハードウェアアクセラレータの動作を１つのクロックサイクルで進める。パルスの後、ブレークポイントおよびリードバック回路は、プログラマブルＩＣの構成メモリから読み取るために、構成アクセスインターフェイス回路２１２に与える信号を生成する。構成アクセスインターフェイス回路は、プログラマブルＩＣ上の標準機能として含まれた回路であってもよい。
【００４８】
ブレークポイントおよびリードバック回路は、読み取る構成メモリの位置を決定するために、メモリ２１０からブレークポイント情報２０８を読み取る。ブレークポイントおよびリードバック回路は、構成アクセスインターフェイス２１２に読み取りコマンドを発行し、構成アクセスインターフェイス２１２は、構成メモリの特定のフレームを読み取る。構成アクセスインターフェイスがフレームのデータ値を返すと、ブレークポイントおよびリードバック回路は、フレームデータを解析し、指定されたオフセットの値をメモリ２１０から読み取られたブレークポイント情報の値と比較する。ブレークポイントの条件が満たされると、ブレークポイントおよびリードバック回路は、制御クロック信号２１４のさらなるパルスの発行を停止するように制御クロック発生器２０２に指示し、外部インターフェイス回路２０６を介してハードウェアデバッガサーバにブレークポイントヒットを報告する。ブレークポイントの条件が満たされておらず且つデバッグクロックモードがフリーランニングモードである場合、ブレークポイントおよびリードバック回路クロックは、単一パルスの制御クロック信号２１４を再度発行するように制御クロック生成装置２０２に指示する。このプロセスは、繰り返される。ブレークポイントの条件が満たされておらず且つデバッグクロックモードがシングルステップモードである場合、ブレークポイントおよびリードバック回路は、ハードウェアデバッグサーバからの別のコマンドを待機して、実行コマンドまたはステップコマンドを受信すると、単一パルスの制御クロック信号を発行するように制御クロック生成装置に指示する。
【００４９】
図３は、相互参照データベース１１８の生成を示すデータフロー図である。ＨＬＳツール３０４は、ハードウェアアクセラレータによって実装される機能を指定するためのＨＬＬプログラム３０２を入力する。ＨＬＳツールは、ハードウェアデバッグサーバ１０６によって使用される複数バージョンのデバッグ情報を生成する。ＨＬＳツールフローの開始時に、フロントエンド解析の後且つ最適化の前に、ＨＬＳツールは、特定のＣＰＵに提供される実行可能プログラム（図示せず）を生成する。実行可能プログラムは、元のＨＬＬプログラム３０２に関連するシンボルをＨＬＬデバッガフロントエンド（図１の１０２）に提供するときに使用される関連のハイレベルデバッグ情報３０６を含む。また、ハイレベルデバッグ情報は、ハードウェアデバッグサーバ１０６によって相互参照データベース１１８を構築するときに使用される。一実現例において、ハイレベルデバッグ情報は、ＤＷＡＲＦデバッグ情報である。
【００５０】
ＨＬＳツール３０４の最適化および予定パスにおいて、ＨＬＳツールは、マッピング情報３０８およびハードウェアモデル３１０を生成する。マッピング情報３０８は、ＨＬＬプログラム３０２の要素とハードウェアモデルの要素との関連付けを指定する。一実現例において、ハードウェアモデルは、ＲＴＬ有限状態マシンである。この場合、アクティブ状態は、シミュレーション中に同時に処理されるＨＬＬプログラムの命令文を指定する。
【００５１】
動作合成ツール３１２は、ハードウェアモデル３１０を入力し、ハードウェアアクセラレータを実装するようにプログラマブルＩＣをプログラミングするための構成データを生成する過程において、ハードウェアモデルの要素とプログラマブルＩＣ上の構成メモリ要素または格納位置とのマッピングを生成する。例えば、マッピング情報は、プログラマブルロジックの構成メモリのフレームおよびオフセットにマッピングされるＲＴＬ有限状態マシンの要素を指定することができる。
【００５２】
ハードウェアデバッグサーバ１０６は、ハイレベルデバッグ情報３０６、マッピング情報３０８およびマッピング情報３１４を入力し、ＨＬＬ要素とハードウェアモデルとのマッピング３０８およびハイレベルデバッグ情報３０６を相互参照する相互参照データベース１１８を生成する。また、相互参照データベースは、ハードウェアモデルの要素およびプログラマブルＩＣの格納位置／要素を相互参照するマッピング情報３１４を含む。シミュレーションの間に、ハードウェアデバッグサーバ１０６は、ハードウェアモデルを用いてデータベース１１８に照会することによって、デバッガフロントエンド（図１の１０２）からのコマンドによって指定されたＨＬＬプログラム要素に対応するハードウェアモデルの要素および格納位置／要素を検索すると共に、デバッグコントローラ回路（図１の１１２）から返されたデータによって参照された格納位置／要素に対応するＨＬＬプログラム要素を検索する。マッピング情報を使用すると、プログラマブルＩＣ上のハードウェアステートマシンの状態および格納要素／位置に対応する条件で、ＨＬＬプログラムの行番号のブレークポイント、命令文または命令を実現することができる。
【００５３】
ブレークポイントを適用できるＨＬＬプログラム３０２の行と対応するハードウェア状態マシン要素とのマッピングを構築することは、ＨＬＳ生成ハードウェアモデル３１０の構造に依存する。一実現例において、ハードウェアモデルは、ＨＬＬ命令文がＲＴＬ信号の条件に対応する有限状態マシンを含む。ハードウェアデバッグサーバ１０６は、相互参照データベース１１８に照会することによって、ＨＬＬデバッガフロントエンドからのブレークポイントコマンドをハードウェア有限状態マシン上の同等の条件に変換することができる。ハードウェア有限状態マシンの条件は、プログラマブルＩＣの格納位置／要素の条件に変換することができる。変換されたブレークポイント情報は、ローカルメモリ２０８に条件付きブレークポイント情報を格納するデバッグコントローラ回路１１２に入力することができる。ハードウェアデバッグサーバは、相互参照データベースに照会することによって、ソフトウェアデバッガフロントエンドからの、変数の値を要求するコマンドを、デバッグコントローラからの、ハードウェア信号および変数の値を要求するリクエストに変換することができる。
【００５４】
ＨＬＬプログラムレベルの変数は、言語で定義された具体的なベースタイプに基づいて構築された複雑なタイプシステムを有する。ＨＬＳツールを用いてハイレベル言語プログラムを合成する場合、生成されたハードウェアは通常、最適化され且つビットベクトルにフラット化されたＨＬＬタイプを有する。例えば、ＨＬＳツールは、ハイレベル言語で「int」として宣言された変数が１７の下位ビットのみを使用していることを判断し、ハイレベル言語用の３２ビットレジスタではなく、１７ビットレジスタおよびビットベクトルを含むハードウェアを合成することができる。
【００５５】
ＨＬＳツールは、ＨＬＬ構文とＲＴＬ構文との完全なマッピングを提供するために、タイプの変換を取り込む。表１は、タイプをＨＬＬ構文からＲＴＬ構文にまたはその逆に変換する際に使用されるマッピング情報のタイプのテキストビューを示している。各ＲＴＬタイプを元のタイプに直接マッピングすることは、符号拡張またはゼロ拡張などの変換ルールを含む。さらに、ＨＬＳツールは、ハイレベル言語構文を多くの異なるＲＴＬレジスタまたは信号に格納するハードウェアの作成を決定することができる。マッピングは、これらの多くのＲＴＬ信号を元のハイレベル表現に戻す方法を指定する。このマッピングの実装および格納は、バイナリエンコーディングを介して実行することができる。
【００５６】
【表１】
2020509507.tif 000003
【００５７】
ＨＬＳで生成されたＲＴＬにおいて、ＨＬＬ変数は、単一のレジスタだけでなく、異なるクロックサイクルにアクティブになるまたはＨＬＳツールによって行われたパイプライン化決定に基づいて全て同時にアクティブになる複数のレジスタおよび信号として実装することができる。マッピング情報３０８は、有限状態マシンの状態レジスタおよび任意のパイプラインステージの起動レジスタを構成するレジスタおよび信号のセットを指定する。表２は、ＨＬＬ変数「counter」の位置情報のマッピング位置の一例を示している。
【００５８】
【表２】
2020509507.tif 000004
【００５９】
全てのＨＬＬ変数に対して、ＨＬＳツールは、これらの状態レジスタの様々な構成と、変数がクロックサイクルに位置しているアクティブ信号を表す他のＲＴＬ信号のリストとのマッピングを作成する。表２に示すテキスト例は、ＨＬＳツールによって出力されたメタデータのバイナリエンコーディングを表し、特定のビットの全ての順列が単一のマッピングに対して有効であることを表すワイルドカードを含む。
【００６０】
特定のＦＳＭ状態がアクティブになると、元のＨＬＬプログラムのソースコードの各行は、ＲＴＬコードで実行を開始する。特定のＲＴＬ条件が真のときに、例えば、状態レジスタが特定の構成にあるときやメモリフェッチが完了したときに、ＦＳＭの状態は、アクティブになる。
【００６１】
表３に示すように、相互参照データベースは、元のＨＬＬプログラムの行と、生成されたパイプライン情報を含み、ＦＳＭ状態の実行の開始を表す構成に対応する生成されたＲＴＬモデルの条件とのマッピングを保持する。注意すべきことは、生成されたＲＴＬモデルが、利用可能なリソースを最大限に活用し且つスループットを最大化にするために、複数の命令文を同時にまたは順番をずらして開始する可能性があるため、マッピングは、１対１ではないことである。
【００６２】
【表３】
2020509507.tif 000005
【００６３】
ＨＬＳツールは、ＨＬＬプログラム内のポインタ変数をＲＴＬレジスタおよび信号に変換する。ポインタ変数を実装する実際のメモリは、プログラマブルＩＣ上のローカルＲＡＭであってもよく、接続されたＤＤＲメモリであってもよい。ＨＬＳツールによって出力され、相互参照データベースに保存されているマッピング情報は、メモリ空間の分割および分配を指定するため、ハードウェアデバッグサーバは、ポインタを逆参照し、リンクに沿って保存された値に辿り着くことができる。
【００６４】
プログラマブルＩＣ上で動作するハードウェアアクセラレータ回路のソフトウェア中心ビューをサポートするために、ハードウェアモデルの要素は、ハードウェアモデルの要素を実装するプログラマブルＩＣの格納位置／要素にマッピングされる。マッピング情報は、合成、プレイス＆ルート、およびビットストリーム生成時に生成される。マッピング情報は、ハードウェアモデルの信号からプログラマブルＩＣの格納位置／要素への直接リンクを提供する。例えば、ＦＰＧＡにおいて、格納位置／要素は、構成メモリのフレームおよびオフセットとして指定される。マッピング情報は、ユーザによるＨＬＬプログラムの変数およびコードラインの指定により、デバッグ処理中にハードウェアアクセラレータの検査をサポートする。
【００６５】
表４の例は、ＲＴＬ信号と、ＲＴＬ信号を実装するプログラマブルＩＣの構成メモリの特定のフレームおよびオフセットとの関連付けを示している。
【００６６】
【表４】
2020509507.tif 000006
【００６７】
図４は、一実現例に係るハードウェアデバッグサーバ１０６のコンポーネントを示す。ハードウェアデバッグサーバは、２つのリスナスレッド４０４および４０６と、コマンドスレッド４０８とを含むマルチスレッドのスタンドアロンプログラムとして実装することができる。リスナスレッド４０４は、コマンド用のＨＬＬデバッガフロントエンドとの接続を監視し、リスナスレッド４０６は、応答用のデバッグコントローラ回路との接続を監視する。リスナスレッド４０４および４０６は、コマンドおよび応答をコマンド先入先出（ＦＩＦＯ）データ構造４０２に書き込む。コマンドスレッド４０８は、コマンドＦＩＦＯからコマンドおよび応答を読み取り、相互参照データベース１１８を用いてこれらのコマンドおよび応答を変換して、変換したコマンドをデバッグコントローラ回路に送信し、変換した応答をＨＬＬデバッガフロントエンドに送信する。
【００６８】
図５は、リスナスレッド４０４を実装するプロセスを示すフローチャートである。ブロック４２２において、リスナスレッドは、例えばＴＣＰ／ＩＰソケット接続を介して、ＨＬＬデバッガフロントエンドからのコマンドをリッスンする。ブロック４２４において、リスナスレッド４０４は、ＨＬＬデバッグコマンドを受け取り、ブロック４２６において、リスナスレッドは、コマンドをコマンドＦＩＦＯ４０２に格納する。次いで、リスナスレッド４２６は、ブロック４２２に戻り、ＨＬＬデバッガフロントエンドからの別のコマンドをリッスンする。
【００６９】
図６は、リスナスレッド４０６を実装するプロセスを示すフローチャートである。ブロック４５２において、リスナスレッド４０６は、例えばＰＣＩｅ接続を介して、デバッグコントローラ回路からの応答をリッスンする。ブロック４５４において、リスナスレッド４０６は、デバッグコントローラ回路からの応答出力を受け取り、ブロック４５６において、リスナスレッドは、出力をコマンドＦＩＦＯ４０２に格納する。次いで、リスナスレッド４０６は、ブロック４５２に戻り、ＨＬＬデバッガフロントエンドからの別のコマンドをリッスンする。
【００７０】
図７は、コマンドスレッド４０８を実施するプロセスを示すフローチャートである。ブロック５０２において、コマンドスレッドは、コマンドＦＩＦＯからエントリを読み取り、ブロック５０４において、コマンドスレッドは、コマンドをデコードする。コマンドおよび応答の両方がコマンドＦＩＦＯに格納され、コマンドスレッドによって処理されるため、「コマンド」という用語を用いて、ＨＬＬデバッガフロントエンドからのコマンドおよびデバッグコントローラ回路からの応答の両方を指す。
【００７１】
判断ブロック５０６は、ブロック５０４のデコードに基づいて、コマンドスレッドによる処理を切り替える。ブロック５０８〜５１８の処理は、ＨＬＬデバッガフロントエンドからのコマンドに適用することができ、ブロック５２０〜５２４の処理は、デバッグコントローラ回路からのコマンドに適用することができる。
【００７２】
デコードされたコマンドがブレークポイントコマンドである場合、コマンドスレッドは、ブロック５０８において、ＨＬＬブレークポイントコマンドをデバッグコントローラ回路用のブレークポイント情報に変換する。コマンドスレッドは、相互参照データベースにおいて、ＨＬＬブレークポイントコマンドのＨＬＬ要素に関連付けられている有限状態マシンの要素を検索する。次に、コマンドスレッドは、相互参照データベースにおいて、有限状態マシンの要素に関連付けられているプログラマブルＩＣの格納要素を検索する。変換されたブレークポイントコマンドは、ブレークポイント条件を指定し、ブレークポイント条件によって参照されたプログラマブルＩＣの格納要素を特定する。
【００７３】
デコードされたコマンドがＨＬＬ変数の値の読み取りを指定している場合、コマンドスレッドは、ブロック５１０において、ＨＬＬコマンドをデバッグコントローラ回路用用のハードウェアデバッグコマンドに変換する。コマンドスレッドは、相互参照データベースにおいて、ＨＬＬデバッグ読み取りコマンドのＨＬＬ要素に関連付けられている有限状態マシンの要素を検索する。次に、コマンドスレッドは、相互参照データベースにおいて、有限状態マシンの要素に関連付けられているプログラマブルＩＣの格納要素を検索する。変換された読み取りコマンドは、読み取り処理を指定し、読み取り処理によって参照されるプログラマブルＩＣの格納要素を特定する。
【００７４】
デコードされたコマンドがＨＬＬ変数の値の書き込みを指定している場合、コマンドスレッドは、ブロック５１２において、ＨＬＬコマンドをデバッグコントローラ回路用のハードウェアデバッグコマンドに変換する。コマンドスレッドは、相互参照データベースにおいて、ＨＬＬデバッグ書き込みコマンドのＨＬＬ要素に関連付けられている有限状態マシンの要素を検索する。次に、コマンドスレッドは、相互参照データベースにおいて、有限状態マシンの要素に関連付けられているプログラマブルＩＣの格納要素を検索する。変換された書き込みコマンドは、書き込み処理を指定し、書き込み処理によって参照されるプログラマブルＩＣの格納要素を特定する。
【００７５】
デコードされたコマンドがＨＬＬプログラムのシングルステップを指定している場合、コマンドスレッドは、ブロック５１４において、コマンドをデバッグコントローラ回路用のハードウェアデバッグコマンドに変換する。変換されたコマンドは、ハードウェアアクセラレータに与える制御クロック信号のシングルステップを指定する。
【００７６】
デコードされたコマンドがＨＬＬプログラムの実行を指定している場合、コマンドスレッドは、ブロック５１６において、コマンドをデバッグコントローラ回路のハードウェアデバッグコマンドに変換する。変換されたコマンドは、ハードウェアアクセラレータに与える制御クロック信号のフリーランニングを指定する。
【００７７】
コマンドスレッドは、ブロック５１８において、変換されたコマンドをデバッグコントローラ回路に送信し、ブロック５０２に戻ってコマンドＦＩＦＯからの別のコマンドを処理する。
【００７８】
デコードされたコマンドがデバッグコントローラ回路からのブレークポイント条件を満たした場合、コマンドスレッドは、ブロック５２０において、デバッグコントローラ回路からのブレークポイント情報をＨＬＬデバッガフロントエンド用のＨＬＬブレークポイント情報に変換する。
【００７９】
デバッグコントローラ回路からのブレークポイント情報は、ブレークポイント条件、プログラマブルＩＣの１つ以上の格納要素、および１つ以上の格納要素から読み取られた１つ以上の値を指定する。コマンドスレッドは、相互参照データベースを使用して、ブレークポイント情報によって特定された格納要素に関連付けられている有限状態マシンの要素を検索する。次に、コマンドスレッドは、相互参照データベース（例えば、表３）を使用して、ブレークポイント条件、格納要素の値および有限状態マシンの要素に対応するブレークポイントを判断する。コマンドスレッドは、相互参照データベースから、ブレークポイントに関連付けられたＨＬＬプログラムコードの行番号を決定し、ＨＬＬプログラムコードの行を示すブレークポイントデータを、ＨＬＬデバッガフロントエンドに出力する。
【００８０】
デコードされたコマンドが読み取りコマンドに応じて返された値を示す場合、コマンドスレッドは、ブロック５２２において、デバッグコントローラ回路からの値を、値のＨＬＬ表現（例えば、表１）と一致する値に変換する。また、デバッグコントローラ回路からの応答は、値を読み取ったプログラマブルＩＣの格納要素を指定する。コマンドスレッドは、相互参照データベースを使用して、コマンドに特定された格納要素に関連付けられている有限状態マシンの要素を検索すると共に、有限状態マシンの要素に関連付けられているＨＬＬ変数名を検索する。コマンドスレッドは、変換された値およびＨＬＬ変数名を、ＨＬＬデバッガフロントエンドの応答に合併する。
【００８１】
ブロック５２４において、コマンドスレッドは、ブロック５２０および５２２で生成されたＨＬＬデバッグデータをＨＬＬデバッガフロントエンドに送信する。プロセスは、ブロック５０２に戻って、コマンドＦＩＦＯからのさらなるコマンドを処理する。
【００８２】
図８は、ハードウェアデバッグサーバからのコマンドを処理し、ハードウェアアクセラレータからハードウェアデバッグサーバにデバッグ出力を報告する際にデバッグコントローラ回路によって実行されるプロセスを示すフローチャートである。デバッグコントローラ回路は、ブロック６０２において、アイドル状態でハードウェアデバッグサーバからのコマンドを待つ。デバッグコントローラ回路は、ブロック６０４において、ハードウェアデバッグサーバからコマンドを受信してデコードする。
【００８３】
判断ブロック６０６は、ブロック６０４のデコードに基づいて、デバッグコントローラ回路による処理を切り替える。コマンドがブレークポイントコマンドである場合、デバッグコントローラ回路は、ブロック６０８において、ブレークポイント条件、１つ以上の値および１つ以上の格納要素を指定するブレークポイント情報をプログラマブルＩＣ上のメモリに格納する。次いで、プロセスは、ブロック６０２に戻り、ハードウェアデバッグサーバからの別のコマンドを待つ。
【００８４】
コマンドが読み取りコマンドである場合、デバッグコントローラ回路は、ブロック６１０において、読み取りコマンドを構成コマンドアクセスインターフェイスに発行して、コマンドによって指定されたプログラマブルＩＣの格納要素から読み取る。デバッグコントローラ回路は、プログラマブルＩＣの構成メモリから読み取られた値をハードウェアデバッグサーバに返し、ブロック６０２で別のコマンドを待つ。
【００８５】
コマンドが書き込みコマンドである場合、デバッグコントローラ回路は、ブロック６１２において、書き込みコマンドを構成アクセスインターフェイスに発行して、書き込みコマンドによって指定された値を、コマンドによって指定されたプログラマブルＩＣの格納要素に書き込む。次いで、デバッグコントローラ回路は、ブロック６０２で別のコマンドを待つ。
【００８６】
デバッグコントローラ回路は、ハードウェアデバッグサーバによって変換されたコマンドに応じて、フリーランニングモード、シングルステップモード、またはステップツーブレークポイントモードで、ハードウェアアクセラレータに制御クロック信号を提供することができる。シングルステップコマンドに応じて、デバッグコントローラ回路は、ブロック６１４において、クロックモードをシングルステップモードに設定する。ステップツーブレークポイントコマンドに応じて、デバッグコントローラ回路は、ブロック６１６において、クロックモードをステップツーブレークポイントに設定する。フリーランニングコマンドに応じて、デバッグコントローラ回路は、ブロック６１８において、クロックモードをフリーランニングに設定する。
【００８７】
クロックモードがフリーランニングモードである場合、判断ブロック６２０は、デバッグコントローラ回路をブロック６２２に切換え、デバッグコントローラ回路は、別のコマンドを利用できるまで、制御クロック信号のパルスを連続的に生成する。別のコマンドを利用できる場合、プロセスは、ブロック６０４に進む。フリーランニングモードで動作している時に、デバッグコントローラ回路は、メモリ位置からの値の読み取りおよびブレークポイントの条件が満たされているか否かの判断をバイパスする。
【００８８】
クロックモードがシングルステップモードおよびステップツーブレークポイントモードである場合、デバッグコントローラ回路は、ブロック６２４において、ハードウェアアクセラレータに与える単一パルスの制御クロック信号を生成する。単一パルスの制御クロック信号を生成した後、デバッグコントローラ回路は、ブロック６２６において、ローカルメモリに格納されたブレークポイント情報によって特定された格納要素から値を読み取る。
【００８９】
デバッグコントローラ回路は、ブロック６２８において、プログラマブルＩＣの構成メモリから読み取られた値を用いて、ブレークポイント情報によって指定された条件を評価する。ブレークポイントの条件が満たされた場合、判断ブロック６３０は、プロセスをブロック６３２に切換え、デバッグコントローラ回路は、ブレークポイントが満たされたことを示すデータを出力する。データは、ブレークポイントメッセージによって特定され、満たされたブレークポイントの情報を示すことができる。ブレークポイントが満たされると、デバッグコントローラ回路は、ブロック６０２に戻り、ハードウェアデバッグサーバからの別のコマンドを待つ。
【００９０】
ブレークポイント条件が満たされていない場合、デバッグコントローラは、判断ブロック６３４において、クロックモードに従って進む。クロックモードがステップツーブレイクポイントモードである場合、デバッグコントローラ回路は、ブロック６２４において、ハードウェアアクセラレータに与える別の単一パルスの制御クロック信号を生成する。クロックモードがシングルステップモードである場合、デバッグコントローラは、ブロック６０２に進み、別のコマンドを待つ。
【００９１】
図９は、ＨＬＬプログラム変数「counter」を処理するためのＨＬＬソースコード７０２およびＨＬＳによって生成されたＲＴＬコード７０４の同等部分を示している。ＨＬＬソースコードは、関数命令文、変数宣言、割り当て命令文、制御命令文、スコープデリミタ、および空白行を含む１２行を有する。
【００９２】
ＨＬＬ変数「counter」は、ＲＴＬの５ビットレジスタにマップされる。各レジスタは、生成されたＦＳＭマシンの異なる段階にアクティブになる。レジスタは、
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;
を含む。
【００９３】
ＨＬＬ命令文「counter += 1」は、「always」ブロックの「if」部分およびＲＴＬ命令文にマッピングする。シミュレーション中に、条件「(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」が実行される。
【００９４】
ＨＬＬ命令文「counter = 1」は、「always」ブロックの「else if」部分およびＲＴＬ命令文にマッピングする。シミュレーション中に、条件「(ap_CS_fsm_state1 == 1’b1) & ~(ap_start == 1’b0)」がメインクロックのポジティブエッジで真である場合、「vadd_counter_reg_95 <= ap_const_lv5_0」が実行される。
【００９５】
ＨＬＬデバッガフロントエンド１０２からＨＬＬライン６および１０を指定するブレークポイントコマンドを受信したことに応じて、ハードウェアデバッグサーバ１０６は、ＨＬＬブレークポイントコマンドを、ブレークポイント条件およびプログラマブルＩＣの格納要素を指定するブレークポイント情報に変換して、デバッグコントローラ回路１１２に送信する。デバッグコントローラ回路は、このブレークポイント情報をローカルメモリに格納する。デバッガフロントエンドからの、ＨＬＬコードライン６にブレークポイントを設定するコマンドに応じて、ハードウェアデバッグサーバは、条件「(ap_CS_fsm_state1 == 1’b1) & ~(ap_start == 1’b0)」が、ハードウェアアクセラレータがＲＴＬ命令文「vadd_counter_reg_95 <= ap_const_lv5_0」の機能を実行する前のメインクロックのポジティブエッジで真である場合、デバッグコントローラ回路がハードウェアアクセラレータにクロックパルスを提供することを停止させるブレークポイント情報を生成する。デバッガフロントエンドからの、ＨＬＬコードライン１０にブレークポイントを設定するコマンドに応じて、ハードウェアデバッグサーバは、条件「(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」の機能を実行する前のメインクロックのポジティブエッジで真である場合、デバッグコントローラ回路がハードウェアアクセラレータにクロックパルスを提供することを停止させるブレークポイント情報を生成する。
【００９６】
図１０は、デバッグコントローラ回路およびハードウェアアクセラレータを実装できるプログラマブル集積回路（ＩＣ）８００を示している。プログラマブルＩＣは、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）ロジックおよび他のプログラマブルリソースを含むシステムオンチップ（ＳＯＣ）として呼ばれることもある。ＦＰＧＡロジックは、アレイに配列されたいくつかの異なるタイプのプログラマブルロジックブロック含むことができる。例えば、図１０に示されたプログラマブルＩＣ８００は、マルチギガビットトランシーバ（ＭＧＴ）８０１、構成可能なロジックブロック（ＣＬＢ）８０２、ランダムアクセスメモリブロック（ＢＲＡＭ）８０３、入力／出力ブロック（ＩＯＢ）８０４、設定およびクロッキングロジック（ＣＯＮＦＩＧ／ＣＬＯＣＫＳ）８０５、デジタル信号処理ブロック（ＤＳＰ）８０６、専用入力／出力ブロック（Ｉ／Ｏ）８０７（例えば、設定ポートおよびクロックポート）、および他のプログラマブルロジック８０８（例えば、デジタルクロックマネージャ、アナログデジタルコンバータおよびシステム監視ロジック）を含む多数の異なるプログラマブルタイルを備える。また、ＦＰＧＡロジックを備えるプログラマブルＩＣの一部は、専用プロセッサブロック（ＰＲＯＣ）８１０並びに内部および外部の再設定ポート（図示せず）を含む。
【００９７】
一部のＦＰＧＡロジックにおいて、各プログラマブルタイルは、隣接する各タイルに位置する対応の相互接続要素との標準化接続を備えるプログラマブル相互接続要素（ＩＮＴ）８１１を含む。したがって、プログラマブル相互接続要素を互いに接続することによって、図示されたＦＰＧＡロジックのプログラマブル相互接続構造を実現する。図１０の上部の例示によって示すように、プログラマブル相互接続要素ＩＮＴ８１１は、同一タイル内のプログラマブルロジック要素との接続を含む。
【００９８】
例えば、ＣＬＢ８０２には、ユーザロジックを実装するようにプログラムできる構成可能なロジック要素ＣＬＥ８１２と、単一のプログラマブル相互接続要素ＩＮＴ８１１とを含むことができる。ＢＲＡＭ８０３は、１つ以上のプログラマブル相互接続要素の他に、ＢＲＡＭロジック要素（ＢＲＬ）８１３を含むことができる。一般的には、タイルに含まれる相互接続要素の数は、タイルの高さに依存する。図示された実施形態において、ＢＲＡＭタイルは、５つのＣＬＢと同様の高さを有するが、他の数（例えば、４つ）のＣＬＢと同様の高さを有してもよい。ＤＳＰタイル８０６は、適切な数のプログラマブル相互接続要素の他に、ＤＳＰロジックプリミティブ（ＤＳＰＬ）８１４を含むことができる。ＩＯＢ８０４は、例えば、１つのインスタンスのプログラマブル相互接続要素ＩＮＴ８１１に加えて、２つのインスタンスの入力／出力ロジック要素（ＩＯＬ）８１５のを含むことができる。当業者には明らかなように、例えば、Ｉ／Ｏロジック要素８１５に接続された実際のＩ／Ｏボンドパッドは、上述に例示されたさまざまなロジックブロック上に積層された金属を用いて製造され、一般的に入力／出力ロジック要素８１５の面積に限定されない。
【００９９】
図示された実施形態において、（図１０に網掛けで示された）ダイ中央付近のコラム領域は、設定、クロックおよび他の制御ロジックに使用される。このコラムから延在する水平領域８０９は、プログラマブルＩＣの全幅に亘ってクロックおよび設定信号を分配するように構成されている。「コラム」領域および「水平」領域を言及する場合、縦向きで図面を観察することを意味する。
【０１００】
図１０に示されたアーキテクチャを利用する一部のプログラマブルＩＣは、プログラマブルＩＣの大部分を構成する規則的なコラム状構造を乱す追加のロジックブロックを含む。追加のロジックブロックは、プログラマブルブロックおよび／または専用ロジックであってもよい。例えば、図１０に示されたプロセッサブロックＰＲＯＣ８１０は、複数列のＣＬＢおよびＢＲＡＭを跨る。
【０１０１】
なお、図１０は、単に例示的なＳＯＣアーキテクチャを図示することを意図している。コラム内のロジックブロックの数、コラムの相対幅、コラムの数および順番、コラムに包含されたロジックブロックの種類、ロジックブロックの相対サイズ、および図１０の上部に示された相互接続／ロジック実装は、単に例示的なものである。例えば、実際のプログラマブルＩＣにおいて、ユーザロジックの効率的な実装を容易にするために、一般的に、ＣＬＢの２つ以上の隣接する列は、ＣＬＢの出現する箇所に含まれる。
【０１０２】
特定の実装は、これらの処理／動作を実行するようにコンピュータ（または他の電子装置）によって実行される命令を格納したマシンまたはコンピュータ可読媒体を含むコンピュータプログラム製品（例えば不揮発性メモリ装置）に関する。
【０１０３】
場合によって、各々の図面に態様および特徴を説明したが、理解すべきことは、組み合わせを明示的に示していなくてもまたは組み合わせとして明示的に説明していなくても、１つの図面の特徴を別の図面の特徴と組み合わせることができることである。
【０１０４】
本発明のシステムおよび方法は、さまざまな認証システムに適用可能であると考えられる。他の態様および特徴は、明細書を参照すれば当業者にとって明白であろう。システムおよび方法は、ソフトウェアを実行するように構成された１つ以上のプロセッサとして、特定用途向け集積回路（ＡＳＩＣ）として、またはプログラマブルロジック装置上のロジックとして実装することができる。なお、本明細書および図面は例示のみとして見なされるべきであり、本発明の範囲は、特許請求の範囲によって示される。
【図１】
2020509507.tif 000007
【図２】
2020509507.tif 000008
【図３】
2020509507.tif 000009
【図４】
2020509507.tif 000010
【図５】
2020509507.tif 000011
【図６】
2020509507.tif 000012
【図７】
2020509507.tif 000013
【図８】
2020509507.tif 000014
【図９】
2020509507.tif 000015
【図１０】
2020509507.tif 000016
【国際調査報告】
2020509507.tif 000017
2020509507.tif 000018
2020509507.tif 000019