リアル
プログラムおよびデバッグ
UG936 (v2019.2) 2019 年 12 月 10 日
この資料は表記のバージョンの英語版を翻訳したもので、内容に相違が生じる場合には原文を優先します。資 料によっては英語版の更新に対応していないものがあります。日本語版は参考用としてご使用の上、最新情報 につきましては、必ず最新英語版をご参照ください。
改訂履歴
次の表に、この文書の改訂履歴を示します。
セクション 改訂内容
2019 年 12 月 10 日 バージョン 2019.2
資料全体。 Vivado 2019.2 用にアップデート。
2019 年 5 月 22 日 バージョン 2019.1
資料全体。 編集上のアップデートのみ。技術内容の変更なし。
第 1 章: Vivado チュートリアルでのデバッグ
... 5目標...5
入門...6
第 2 章: 演習 1: デザインをデバッグするためのネットリストの挿入
...10手順 1: Vivado New Project ウィザードを使用したプロジェクトの作成... 10
手順 2: デザインの合成... 11
手順 3: デバッグ IP のプローブおよび追加...12
手順 4: デザインのインプリメントおよびビットストリームの生成...19
第 3 章: 演習 2: HDL インスタンシエーションを使用したデザインのデバッグ
...20手順 1: Vivado New Project ウィザードを使用したプロジェクトの作成... 20
手順 2: デザインの合成、インプリメント、およびビットストリームの生成...22
第 4 章: 演習 3: Vivado Design Suite でデザインをデバッグするための VIO コアの使用
...23手順 1: Vivado New Project ウィザードを使用したプロジェクトの作成... 24
手順 2: デザインの合成、インプリメント、およびビットストリームの生成...28
第 5 章: 演習 4: Synplify Pro 合成ツールおよび Vivado Design Suite を使用 したデザインのデバッグ
... 30手順 1: Synplify Pro プロジェクトの作成... 30
手順 2: Synplify プロジェクトの合成... 36
手順 3: Synplify Pro で作成したブラック ボックス用の DCP の作成...37
手順 4: Vivado での合成後のプロジェクトの作成...37
手順 5: プロジェクトへのデバッグ ネットの追加... 38
手順 6: デザインのインプリメントおよびビットストリームの生成...41
第 6 章: 演習 5: Vivado ロジック解析を使用したハードウェアでのデバッグ
... 42手順 1: Sine Wave Generator の操作の検証... 42
手順 2: 正弦波シーケンサー ステート マシンのデバッグ (オプション)... 51
第 7 章: 演習 6: ECO フローを使用したインプリメンテーション後のデバッグ
プローブの置換
...67手順...79
手順 1: サンプル デザインへのデバッグ コアの追加...79
手順 2: リファレンス デザインのコンパイル...82
手順 3: 新規 run の作成...83
手順 4: インクリメンタル デバッグの変更...85
手順 5: インクリメンタル コンパイルの実行...87
まとめ... 89
第 9 章: 演習 8: Vivado シリアル解析を使用したシリアル リンクのデバッグ
... 90デザインの概要... 90
手順 1: IBERT デザインの作成、カスタマイズ、および生成...91
手順 2: Vivado プロジェクトへの IBERT コアの追加... 92
手順 3: IBERT デザインの合成、インプリメンテーション、およびビットストリーム生成... 98
手順 4: シリアル I/O 解析を使用した IBERT コアとの対話... 100
第 10 章: 演習 9: Vivado ILA コアを使用した JTAG-AXI トランザクションのデ バッグ
... 115デザインの概要... 115
手順 1: 新規 Vivado プロジェクトの作成、および JTAG-to-AXI および System ILA を含んだ IP インテグレー ター デザインの生成...116
手順 2: KC705 ボードのプログラムおよび JTAG to AXI Master コアとの接続... 126
手順 3: AXI 読み出しトランザクションでトリガーするための ILA アドバンスド トリガー機能の使用... 132
付録 A: その他のリソースおよび法的通知
...136ザイリンクス リソース...136
Documentation Navigator およびデザイン ハブ... 136
お読みください: 重要な法的通知...136
Vivado チュートリアルでのデバッグ
この資料では、複雑な FPGA デザインをデバッグしやすくする目的で、いくつかのチュートリアルがセットになって います。デバッグするときに選択できるデバッグ フローには 4 種類あり、最初の 4 つの演習で各フローを説明しま す。これらの演習では、FPGA デザインをデバッグする場合に推奨される Vivado® Design Suite デバッグ手動が紹介 されています。各演習の手順では、デザインをデバッグしやすくするため、小型の RTL デザインを利用し、さまざま な方法で ILA (Integrated Logic Analyzer) コアを挿入します。5 番目の演習では、Vivado ツールで高速シリアル I/O リ ンクをデバッグします。6 番目の演習では、Vivado ツールで JTAG-AXI トランザクションをデバッグします。最初の 4 つの演習では、ターゲットのハードウェア ボードに接続するまでの手順が説明されています。
サンプルの RTL デザインは、Vivado ロジック解析、ILA、Vivado 統合設計環境 (IDE) との間のフローを全体的に統合 する方法を説明するために使用されています。このチュートリアルをうまく活用するには、Vivado ツール フローの 基本知識がある程度必要です。
トレーニング: ザイリンクス では、この資料に含まれるコンセプトを説明するさまざまなトレーニング コースおよ び QuickTake ビデオを提供しています。次のリンクから関連するコースを参照してください。
• Vivado Design Suite を使用した FPGA の設計 1
• Vivado Design Suite を使用した FPGA の設計 2
• Vivado Design Suite を使用した FPGA の設計 3
• Vivado Design Suite を使用した FPGA の設計 4
• 『Vivado Design Suite ユーザー ガイド: プログラムおよびデバッグ』 (UG908)
目標
これらのチュートリアルは次のことを目標にしています。
• デバッグ プロセスを迅速かつ簡単にする Vivado デザイン環境に統合された Vivado® ロジック解析機能を活用す る方法を紹介する。
• FPGA ロジック デザインに共通の問題をデバッグするため、Vivado IDE および Vivado ロジック解析の使用方法を
具体的に紹介する。
• 高速シリアル リンクをデバッグするため、Vivado シリアル I/O 解析の使用方法を具体的に紹介する。
このチュートリアルを終了すると、次のことができるようになります。
• Vivado 統合設計環境 (IDE) および ILA (Integrated Logic Analyzer) コアを使用して、デザインを検証およびデバッグ する。
• Vivado IDE での RTL プロジェクトの作成、デザインのプローブ、ILA コアの挿入、デザインのインプリメント方
法を理解する。
• Vivado ロジック解析を使用してリアルタイムでデザインをデバッグし、Vivado IDE、および Kintex®-7 デバイス を含む KC705 評価キット基本ボードを使用してデザインを繰り返し実行する。
• シリアル I/O 解析を使用して高速シリアル リンクを解析する。
入門
設定要件
このチュートリアルを開始する前に、チュートリアルに含まれる演習に必要なハードウェアおよびソフトウェア コン ポーネントが揃っていること、またそれらを把握しておいてください。
ソフトウェア
Vivado® Design Suite 2019.2
ハードウェア
• Kintex®-7 FPGA KC705 評価キット基本ボード
• Digilent 社のケーブル
• SMA (Sub-miniature バージョン A) ケーブル 2 本
図 1: 主なコンポーネントを示した KC705 ボード
チュートリアル デザインのコンポーネント
• 共通プッシュボタン (GPIO_BUTTON)
• DIP スイッチ (GPIO_SWITCH)
• LED ディスプレイ (GPIO_LED) VIO コア (演習 3 のみ)
• プッシュボタンスイッチ: デバウンスおよび制御ステートマシン回路の入力になります。プッシュボタンを押す と、High から Low へと遷移します。生成された出力はそれぞれステート マシンへの入力として使用されます。
• DIP スイッチ: デバウンス回路をイネーブルまたはディスエーブルにします 。
• デバウンス回路: この例では、イネーブルになっている場合、クリーンなパルスを提供するか、または High から Low へ遷移します。ボタンを押して放したときの一連のスパイクやグリッチを除去します。
• 正弦波シーケンサーステートマシン: 2 つのプッシュボタンからの入力を取り込んでデコードします。00、01、 10、11 (0 から 3 へ) と遷移し、正弦波を選択し、インジケーター回路の役割を果たします。
• LED ディスプレイ: GPIO_LED_0 および GPIO_LED_1 は、ステートマシン出力のセレクト ステータスを表示し、
それぞれに高、中、低の異なる正弦波周波数を表します。
演習 5 には次のものが含まれています。
• IBERT コア
• IBERT コアをインスタンシエートする最上位ラッパー。
ボード サポートおよびピン配置情報
表 1: KC705 ボード用のピン配置情報
ピン名 ピン位置 説明
CLK_N AD11 [Clock]
CLK_P AD12 [Clock]
GPIO_BUTTONS[0] AA12 [Reset]
GPIO_BUTTONS[1] AG5 正弦波シーケンサー
GPIO_SWITCH Y28 デバウンス回路セレクター
LEDS_n[0] AB8 正弦波セレクト [0]
LEDS_n[1] AA8 正弦波セレクト [1]
LEDS_n[2] AC9 予約済み
LEDS_n[3] AB9 予約済み
デザイン ファイル
1. C: ドライブに /Vivado_Debug という名前のフォルダーを作成します。
2. ザイリンクス ウェブサイトから、リファレンス デザイン ファイルをダウンロードします。
注意: チュートリアルおよびデザイン ファイルは、次のソフトウェア リリースまでにアップデートされたり、変更 されたりする可能性があります。最新版のファイルはザイリンクス ウェブサイトからダウンロードできます。
3. チュートリアルのソースファイルを解凍して/Vivado_Debugフォルダーに抽出します。演習は 6 つあり、そ れぞれに異なるデザイン デバッグ方法を使用します。この中から適切な演習を選択し、手順に沿って演習を完了 します。
• 演習 1: HDL および合成後ネットリスト (ネットリスト挿入方法) でデバッグ用のネットを指定する手順を説明し ます。必須ファイルは次のとおりです。
• debounce.vhd
• fsm.vhd
• sinegen.vhd
• sinegen_demo.vhd
• sine_high/sine_high.xci
• sine_low/sine_low.xci
• sine_mid/sine_mid.xci
• sinegen_demo_kc705.xdc
• 演習 2: ソースの HDL でデバッグ用のネットを指定し (HDL インスタンシエーション方法)、HDL で ILA コアをイ ンスタンシエートする方法を説明します。必須ファイルは次のとおりです。
• debounce.vhd
• fsm.vhd
• sinegen.vhd
• sinegen_demo_inst.vhd
• ila_0/ila_0.xci
• sine_high/sine_high.xci
• sine_low/sine_low.xci
• sine_mid/sine_mid.xci
• sinegen_demo_kc705.xdc
• 演習 3: ハードウェアに物理的にアクセスできなくても、VIO コアを使用してデザインをテストできます。この演 習では、VIO コアをデザインの I/O に接続するため、VIO コアのインスタンシエーションおよびカスタマイズの 手順を説明します。必須ファイルは次のとおりです。
• debounce.vhd
• fsm.vhd
• sinegen.vhd
• sinegen_demo_inst_vio.vhd
• sine_high/sine_high.xci
• sine_low/sine_low.xci
• sine_mid/sine_mid.xci
• ila_0/ila_0.xci
• sinegen_demo_kc705.xdc
使用して実行する手順を説明します。必須ファイルは次のとおりです。
• debounce.vhd
• fsm.vhd
• sign_high.dcp
• sign_low.dcp
• sine_mid.dcp
• sine_high.xci
• sine_low.xci
• sine_mid.xci
• sinegen.edn
• sinegen_synplify.vhd
• synplify_1.sdc
• synplify_1.fdc
• sinegen_demo_kc705.xdc
• 演習 5: 演習 1、2、3、4 で作成したデザインを KC705 ボードに読み込みます。
• 演習 6: ECO フローを使用してデバッグ プローブを置き換え、インプリメンテーション後のデバッグを改善しま す。
• 演習 7: デバッグ フローを高速化するため、インクリメンタル コンパイル フローを使用します。以前のインプリ メンテーション run の結果を使用するこのフローでは、デバッグの変更を加えてからインプリメンテーションを 再実行できます。
• 演習 8: Vivado シリアル I/O 解析を使用して高速シリアル I/O リンクをデバッグします。この演習では、Vivado IP サンプル デザインが使用されます。
• 演習 9: Vivado ILA コアを使用して JTAG-AXI トランザクションをデバッグします。この演習では、Vivado IP サン プルデザインが使用されます。
ボードおよびケーブルの接続
1. Digilent ケーブル コネクタから Digilent ケーブルをコンピューターの USB ポートに接続します。
2. 次のように、2 本の SMA ケーブル (演習 5 のみ) を接続します。
a. 1 本の SMA ケーブルを J19 (TXP) から J17 (RXP) に接続します。
b. もう 1 本の SMA ケーブルを J20 (TXN) から J66 (RXN) に接続します。
ボード上の SMA ケーブルの相対位置が 設定要件 に示されています。
第 2 章
演習 1: デザインをデバッグするためのネ ットリストの挿入
この演習では、ソースの HDL および合成後のネットリストでデバッグするために信号を指定します。それから、ILA
(Integrated Logic Analyzer) コアを作成し、デザインをインプリメンテーションまで進めます。最後に、Vivado® ツー
ルを使用して KC705 ターゲットボードに接続し、Vivado Integrated Logic Analyzer を使用してデザインをデバッグし ます。
手順 1: Vivado New Project ウィザードを使用したプロ ジェクトの作成
プロジェクトを作成するには New Project ウィザードを使用し、プロジェクト名を指定し、RTL ソース ファイルおよ び制約ファイルを追加し、ターゲットデバイスを指定します。
1. Vivado® IDE を起動します。
2. [Getting Started] ページで [Create Project] をクリックして New Project ウィザードを開始します。[Next] をクリ ックします。
3. [Project Name] ページで新規プロジェクトの名前を「proj_netlist」に設定し、プロジェクト ディレクトリ (C:/
Vivado_Debug) を設定します。[Create Project Subdirectory] が選択されていることを確認し [Next] をクリック します。
4. [Project Type] ページで、[Type of Project] を指定し RTL プロジェクトを作成します。[Next] をクリックします。
5. [Add Sources] ページで次のように設定します。
a. [Target Language] を [VHDL] に設定します。
b. [+] 記号をクリックしてから [Add Files] をクリックします。
c. [Add Source Files] ダイアログ ボックスで /src/lab1 ディレクトリを参照します。
d. すべての VHD ソース ファイルを選択し、[OK] をクリックします。
e. ファイルが追加され、[Copy Sources into project] が選択されていることを確認します。
6. [Add] をクリックします。
7. [Add Directories] ダイアログ ボックスで /src/lab1 ディレクトリを参照します。
8. sine_high、sine_low、および sine_mid ディレクトリを選択して [Select] をクリックします。
9. これらのディレクトリが追加されていることを確認します。[Next] をクリックします。
10. [Add Constraints] ダイアログ ボックスで [+] 記号をクリックしてから、[Add Files] をクリックします。
す。
13. [New Project Summary] ページを確認します。上記の手順で設定したとおりにデータが表示されていることを確 認し、[Finish] をクリックします。
注記: プロジェクトの初期化に少し時間がかかる場合があります。
手順 2: デザインの合成
1. 次の図のように [Project Manager] で [Settings] をクリックします。
重要: オプションの手順ですが、[Settings] ダイアログ ボックスの左側で [Synthesis] を選択し、[flatten hierarchy] を [none] に変更します。[none] に変更すると、合成ツールでのバウンダリ最適化実行を防ぐことができます。
2. Vivado® Flow Navigator の [Synthesis] ドロップダウン リストから [Run Synthesis] を選択します。[Launch Runs]
ダイアログ ボックスで、デフォルト設定をすべて受け入れ (ローカル ホストで run を起動する設定のまま)、[OK]
をクリックします。
注記: 合成が実行すると、進捗状況が表示されるので、合成が実行しているのがわかります。完了まで数分がか
3. 次の図のように [Synthesis Completed] ダイアログボックスで [Cancel] をクリックします。デザインのインプリ メンテーションは後で実行します。
手順 3: デバッグ IP のプローブおよび追加
Vivado® ILA コアをデザインに追加するには、Vivado IDE と Vivado ロジック解析とを統合するフローを利用します。
この手順では、次のタスクを実行します。
• プロジェクトにデバッグ ネットを追加。
• Set Up Debug ウィザードを実行。
• デザインをインプリメントし、開く。
• ビットストリームを生成。
プロジェクトへのデバッグ ネットの追加
Vivado® IDE を使用しデバッグネットを追加するには、次の方法があります。
• HDL ファイルに MARK_DEBUG 属性を追加する。
• VHDL:
attribute mark_debug : string;
attribute mark_debug of sine : signal is "true";
attribute mark_debug of sineSel : signal is "true";
• Verilog:
(* mark_debug = "true" *) wire sine;
(* mark_debug = "true" *) wire sineSel;
ともできます。この方法なら、HDL 信号名が合成後に保持される可能性が最も高くなります。
• 合成済みネットリストで信号を右クリックし、[Mark Debug] または [Unmark Debug] を選択する。
この方法なら、Vivado IDE で合成済みネットリストをプローブできるだけでなく、デザインの任意の階層で
MARK_DEBUG 属性を追加/削除できるので、柔軟性があります。また、HDL ソースを変更する必要がありませ
ん。ただし、ネットリストの最適化によりデザイン構造が吸収または統合されると、合成で信号が保持されない 場合があります。
• Tcl プロンプトを使用し、合成済みネットリストに MARK_DEBUG 属性を設定する。
set_property mark_debug true [get_nets -hier [list {sine[*]}]]
現在開いているネットリストに MARK_DEBUG 属性が適用されます。
この方法は、Tcl コマンドで MARK_DEBUG のオン/オフを切り替えることができるので柔軟性があります。また、
HDL ソースを変更する必要がありません。ただし、ネットリストの最適化によりデザイン構造が吸収または統合 されるので、合成で信号が保持されません。
次の手順では、Vivado IDE を使用して、デバッグ ネットを HDL および合成済みデザインに追加する方法を学びます。
ヒント: 作業を進める前に、左側にある Flow Navigator がイネーブルになっていることを確認してください。
このオン/オフを切り替えるには、Ctrl + Q キーを押します。
1. 次の図のように、Flow Navigator の [Synthesis] ドロップダウン リストから [Open Synthesized Design] をクリッ クします。
2. [Window] で [Debug] を選択します。[Debug] ウィンドウが開いたら、ウィンドウがまだ選択されていない場合 は、そのウィンドウをクリックします。
3. [Unassigned Debug Nets] フォルダーを展開します。次の図は、sinegen_demo.vhd で MARK_DEBUG 属性が 設定されているデバッグネットを示しています。
4. [Netlist] ウィンドウの [Nelist] タブを選択し、ネットを展開表示します。次の図のように、デバッグするネットを 選択します。
• GPIO_BUTTONS_IBUF[0] および GPIO_BUTTONS_IBUF[1] - 最上位にある [Nets] フォルダー
• sel(2) - U_SINEGEN 階層にある [Nets] フォルダー
• sine(20)- U_SINEGEN 階層にある [Nets] フォルダー
5. 次の図のように、選択したネットを右クリックし [Mark Debug] を選択します。
6. 次に、[Tcl Console] でデバッグするネットを指定します。次の Tcl コマンドを実行し、U_SINEGEN 階層の下にあ
る「sine(20)」をデバッグ用に指定します。
set_property mark_debug true [get_nets -hier [list {sine[*]}]]
ヒント: [Debug] ウィンドウに、先ほど選択した、割り当てられていないネットが表示されます。次の 2 つの図のよ
うに、[Netlist] ウィンドウには、各スカラーまたはバスの横に緑色の虫の形をしたアイコンも表示されます。このア
イコンは、ネットに mark_debug = true と属性が設定されていることを示します。
Set Up Debug ウィザードの実行
1. [Debug] ウィンドウのツールバーまたは [Tools] メニューから [Set Up Debug] をクリックします。Set Up Debug ウィザードが開きます。
2. Set Up Debug ウィザードが開いたら、[Next] をクリックします。
3. 次の図のように [Nets to Debug] ページですべてのネットがデバッグ用に追加されたことを確認し、[Next] をク リックします。
4. [ILA Core Options] ページの [Trigger and Storage Settings] セクションで [Capture Control] および [Advanced Trigger] の両方を選択します。[Next] をクリックします。
5. [Setup Debug Summary] ページで、すべての情報が正しく、予期どおりであることを確認します。[Finish] をクリ ックします。
[Finish] をクリックすると、ILA コアを挿入する XDC コマンドが生成されます。
手順 4: デザインのインプリメントおよびビットストリー ムの生成
1. Flow Navigator で [Program and Debug] → [Generate Bitstream] をクリックします。
2. [Save Project] ダイアログ ボックスで [Save] をクリックします。これにより、合成結果が古くなってしまうこと を示すメッセージが表示されたら、[OK] をクリックします。新しく指定したネットに MARK_DEBUG プロパテ ィが適用されます。これらの制約は、sinegen_demo_kc705.xdc ファイルを確認するとチェックできます。
3. [No Implementation Results Available] ダイアログ ボックスが開いたら、[Yes] をクリックします。[Launch Runs]
ダイアログ ボックスで、デフォルト設定をすべて受け入れ (ローカル ホストで run を起動する設定のまま)、[OK]
をクリックします。
4. ビットストリームの生成が完了すると、[Bitstream Generation Completed] ダイアログ ボックスが開きます。
[OK] をクリックします。
5. インプリメント済みデザインを開く前に合成済みデザインを閉じるように促すダイアログ ボックスが表示され ます。[Yes] をクリックします。
6. タイミング サマリ レポートで、すべての指定タイミング制約が満たされていることを確認します。
第 6 章: 演習 5: Vivado ロジック解析を使用したハードウェアでのデバッグ に進んで、デザインのデバッグを終了 させてください。
第 3 章
演習 2: HDL インスタンシエーションを使 用したデザインのデバッグ
Vivado® ツールのデバッグ プロービングには 2 つの方法があり、その 1 つが HDL インスタンシエーションを使用し
たデバッグです。このフローを使用する場合は、Vivado IP カタログを使用して ILA IP を生成し、ほかの IP の場合と 同じように手動でデザインにインスタンシエートします。
手順 1: Vivado New Project ウィザードを使用したプロ ジェクトの作成
プロジェクトを作成するには New Project ウィザードを使用し、プロジェクト名を指定し、RTL ソース ファイルおよ び制約ファイルを追加し、ターゲット デバイスを指定します。
1. Vivado® IDE を起動します。
2. [Getting Started] ページで [Create Project] をクリックして New Project ウィザードを開始します。[Next] をクリ ックします。
3. [Project Name] ページで新規プロジェクトの名前を「proj_hdl」に設定し、プロジェクト ディレクトリ (C:/
Vivado_Debug) を設定します。[Create project subdirectory] チェック ボックスがオンになっていることを確認 します。[Next] をクリックします。
4. [Project Type] ページで、[Type of Project] を指定し RTL プロジェクトを作成します。[Next] をクリックします。
5. [Add Sources] ページで次のように設定します。
a. [Target Language] を [VHDL] に設定します。
b. [+] 記号をクリックしてから [Add Directories] をクリックします。
c. [Add Source Directories] ダイアログ ボックスで /src/lab2 ディレクトリを参照し、sine_high、sine_low、
sine_mid、および ila_0 のディレクトリを選択します。[Select] をクリックします。
d. ディレクトリが追加され、[Copy Sources into Project] が選択されていることを確認します。
e. [+] 記号をクリックしてから [Add File] をクリックします。
f. [Add Source Files] ダイアログ ボックスで /src/lab2 ディレクトリを参照し、debounce.vhd、fsn.vhd、
sinegen.vhd、および sinegen_demo_inst.vhd ファイルを選択します。[OK] をクリックします。
g. ソースおよびディレクトリが追加され、[Copy Sources into Project] が選択されていることを確認します。
[Next] をクリックします。
6. [Add Constraints] ダイアログ ボックスで [+] 記号をクリックしてから、[Add Files] をクリックします。
7. /src/lab1ディレクトリを参照してsinegen_demo_kc705.xdcを選択します。[Next] をクリックします。
す。
9. [New Project Summary] ページを確認します。上記の手順で設定したとおりにデータが表示されていることを確 認します。[Finish] をクリックします。
10. Vivado IDE の [Sources] ウィンドウで、sinegen_demo_inst を展開して、この演習用のソースファイルを表示さ せます。ila_0 コアがプロジェクトに追加されている点に注目してください。
11. 次の図のように、sinegen_demo_inst.vhd ファイルをダブルクリックして開き、HDL コードで ILA コアのイ ンスタンシエーションおよびポートマップを確認します。
手順 2: デザインの合成、インプリメント、およびビット ストリームの生成
1. Flow Navigator の [Program and Debug] ドロップダウン リストから [Generate Bitstream] をクリックします。こ れでデザインの合成、インプリメント、ビットストリーム生成が実行されます。
2. [No Implementation Results Available] ダイアログ ボックスが開きます。[Yes] をクリックします。[Launch Runs]
ダイアログ ボックスで、デフォルト設定をすべて受け入れ (ローカル ホストで run を起動する設定のまま)、[OK]
をクリックします。
3. ビットストリームの生成が完了すると、[Bitstream Generation Completed] ダイアログ ボックスが開きます。デ フォルトで [Open Implemented Design] がオンになっています。[OK] をクリックします。
4. [Timing] ウィンドウの [Design Timing Summary] ページで、すべてのタイミング制約が満たされていることを確 認します。
5. 第 6 章: 演習 5: Vivado ロジック解析を使用したハードウェアでのデバッグ に進んで、この演習の残りを終了させ てください。
演習 3: Vivado Design Suite でデザイン をデバッグするための VIO コアの使用
VIO (Virtual Input/Output) は、内部 FPGA 信号をリアルタイムに監視および駆動できるカスタマイズ可能なコアで す。FPGA デザインとインターフェイスするため、入力および出力ポートの数や幅をカスタマイズできます。VIO コ アは監視および駆動しているデザインに同期するので、そのデザインに適用されるデザインクロック制約はすべて、
VIO コアのコンポーネントにも適用されます。このコアにランタイムにアクセスするには、Vivado® ツールのロジッ
ク解析機能を使用する必要があります。次の図は、新しい VIO コアのブロック図です。
図 2: VIO ブロック図
この演習では、VIO コアのインスタンシエーションおよびコンフィギュレーションの手順を説明します。また、VIO コアをデザインの I/O に接続する手順も説明します。このコアを使用すると、ハードウェアへアクセスできない場合 や、ハードウェアがリモートに存在するときにデザインをデバッグできます。
次のポートが作成されます。
• 4 ビットの PROBE_IN0 ポート 1 つ。有限ステートマシン (FSM) からの 2 ビットの正弦波セレクト出力を監視す るのに 2 ビット、ボードのほかの LED 2 つのステートを模倣するのに 2 ビット使用されます。KC705 ボードで表 示される LED を模倣するため、ランタイム中はこれらの 4 ビット信号を LED としてコンフィギュレーションしま す。
• FSM の入力ボタンを駆動するための、2 ビットの PROBE_IN0 ポート 1 つ。1 ビットは、PUSH_BUTTON スイッ チ SW3 を模倣するため、ランタイム中にトグル スイッチとして使用できるようにし、2 番目のビットは PUSH_BUTTON スイッチ SW6 として使用するよう、コンフィギュレーションします。
手順 1: Vivado New Project ウィザードを使用したプロ ジェクトの作成
プロジェクトを作成するには New Project ウィザードを使用し、プロジェクト名を指定し、RTL ソースファイルおよ び制約ファイルを追加し、ターゲット デバイスを指定します。
1. Vivado IDE を起動します。
2. [Getting Started] ページで [Create Project] をクリックして New Project ウィザードを開始します。[Next] をクリ ックします。
3. [Project Name] ページで新規プロジェクトの名前を「[proj_hdl_vio]」に設定し、プロジェクト ディレクトリ (C:/
Vivado_Debug) を設定します。[Create project subdirectory] がオンになっていることを確認します。[Next] を クリックします。
4. [Project Type] ページで、[Type of Project] を [RTL Project] に指定し、プロジェクトを作成します。[Next] をクリ ックします。
5. [Add Sources] ページで次のように設定します。
a. [Target Language] を [VHDL] に設定します。
b. [Add Files] をクリックします。
c. [Add Source Files] ダイアログ ボックスで /src/lab3 ディレクトリを参照します。
d. すべての VHD ソース ファイルを選択し、[OK] をクリックします。
e. ファイルが追加され、[Copy Sources into Project] が選択されていることを確認します。
6. [+] 記号をクリックしてから [Add Directories] をクリックします。
7. [Add Source Directories] ダイアログボックスで/src/lab3ディレクトリを参照し、[sine_high]、[sine_low]、 [sine_mid]、および [ ila_0] ファイルを選択します。[Select] をクリックします。
8. ディレクトリが追加され、[Copy sources into project] が選択されていることを確認します。[Next] をクリックし ます。
9. [Add Constraints] ダイアログ ボックスで [+] 記号をクリックしてから、[Add Files] をクリックします。
10. /src/lab3 ディレクトリを参照して [sinegen_demo_kc705.xdc] を選択します。[Next] をクリックします。
11. [Default Part] ページで、[xc7k325tffg900-2] プラットフォームを指定します。[Boards] をクリックしてから [Kintex-7 KC705 Evaluation Platform] を選択することもできます。[Next] をクリックします。
12. [New Project Summary] ページを確認します。上記の手順で設定したとおりにデータが表示されていることを確 認します。[Finish] をクリックします。
注記: プロジェクトの初期化に少し時間がかかる場合があります。
13. Vivado IDE の [Sources] ウィンドウで、sinegen_demo_inst_vio を展開して、この演習用のソース ファイル を表示させます。ila_0 コアがプロジェクトに追加されている点に注目してください。ただし、vio_0 (VIO コア) が抜けています。
14. この VIO コアを次のようにインスタンシエートしてコンフィギュレーションします 。Flow Navigator で [IP Catalog] をクリックして [Debug & Verification] を展開し、次に [Debug] を展開してから VIO をダブルクリックし ます。[Customize IP] ダイアログ ボックスが開きます。
15. [General Options] タブで [Component Name] をデフォルトの「vio_0」にしたまま、[Input Probe Count] を [1]
に、[Output Probe Count] を [1] に設定し、[Enable Input Probe Activity Detectors] チェック ボックスをオンにし ます。
16. [PROBE_IN Ports] タブで [Probe Width] を [4] に設定します。
17. [PROBE_OUT Ports] タブで [Probe Width] を [2] に、[Initial Value] を [0x0] に設定します。
18. [OK] をクリックして IP を生成します。[Generate Output Products] ダイアログ ボックスが表示されます。
[Generate] をクリックします。アウト オブ コンテキスト モジュールの実行を開始することを示すダイアログ ボ ックスが表示されたら、[OK] をクリックします。
出力ファイルの生成には 1 分弱かかるはずです。これで VIO のカスタマイズが完了しました。このコアは既に 最上位デザインにインスタンシエートされています。
この時点で、[Sources] ウィンドウは次のようになっているはずです。
19. [Sources] ウィンドウで [sinegen_demo_inst.vhd] ファイルをダブルクリックして開き、HDL コードで ILA コアの インスタンシエーションおよびポート マップを確認します。
手順 2: デザインの合成、インプリメント、およびビット ストリームの生成
1. Flow Navigator の [Program and Debug] ドロップダウンリストから [Generate Bitstream] をクリックします。こ れでデザインの合成、インプリメント、ビットストリーム生成が実行されます。
2. [Missing Implementation Results Available] ダイアログ ボックスが開きます。[OK] をクリックします。
3. ビットストリームの生成が完了すると、[Bitstream Generation Completed] ダイアログ ボックスが開きます。デ フォルトで [Open Implemented Design] がオンになっています。[OK] をクリックします。
4. タイミング サマリ レポートを開いて、すべてのタイミング制約が満たされていることを確認します。
5. 第 6 章: 演習 5: Vivado ロジック解析を使用したハードウェアでのデバッグ に進んで、デザインのデバッグを終了 させてください。それから、演習 5 の手順 2 の VIO コアアクティビティの 検証 (演習 3 のみを対象) に進んで、
この演習の残りを終了させてください。
第 5 章
演習 4: Synplify Pro 合成ツールおよび
Vivado Design Suite を使用したデザイン のデバッグ
この簡単なチュートリアルでは、次のことを実行する方法を学びます。
• 波形ジェネレーター デザイン用の Synplify Pro プロジェクトを作成。
• Synplify Pro 制約ファイルおよび VHDL ソース ファイルでデバッグ用にネットを指定。
• EDIF ネットリスト作成のため Synplify Pro プロジェクトを合成。
• Synplify Pro ネットリストをベースにした Vivado® プロジェクトの作成。
• Synplify Pro を使用して合成したデザインをデバッグするため、Vivado® IDE を使用して設定。
手順 1: Synplify Pro プロジェクトの作成
1. Synplify Pro を起動し、[File] → [New] をクリックします。
2. 次の図のように、[File Type] を [Project File (Project)] に設定します。
3. [New File Name] に「[synplify_1]」と入力します。
4. [OK] をクリックします。
5. 新しくディレクトリを作成するよう促すダイアログ ボックスが表示された場合は、[OK] をクリックします。
6. 次の図のように、Synplify Pro のウィンドウの左側で [Add File] をクリックします。
7. [Add Files to Project] ダイアログ ボックスで [Files of Type] を [HDL Files] に変更します。C:\Vivado_Debug
\src\lab4 を参照します。ここに、この演習に必要な VHDL ソース ファイルがすべて表示されています。Ctrl
• debounce.vhd
• fsm.vhd
• sinegen_demo.vhd 8. [Add] をクリックします。
9. 同じダイアログ ボックスで [Files of Type] を [Constraints Files] に変更します。これで synplify_1.sdc ファイルが 表示されます。次の図のように、ファイルを選択して [Add] をクリックします。
10. 同じダイアログ ボックスで [Files of Type] を [FPGA Constraint Files] に変更します。これで synplify_1.fdc ファ イルが表示されます。次の図のように、ファイルを選択して [Add] をクリックします。[OK] をクリックします。
11. 次に、インプリメンテーションのオプションを設定する必要があります。
12. 次の図のように、Synplify Pro のウィンドウで [Implementation Options] をクリックします。
13. 次の図のように [Implementation Options] ダイアログ ボックスが開きます。[Device] タブで [Technology] を [Xilinx Kintex7] に、[Part] を [XC7K325T] に、[Package] を [FFG900]、[Speed] を [-2] を設定します。その他のオ プションはすべてデフォルトのままにしておきます 。[OK] をクリックします。
14. HDL ファイルに属性を設定して、デバッグする必要のあるネット名を保持する必要があります。これらの属性は 既に、このチュートリアルのsinegen_demo.vhdファイルに設定されています。sinegen_demo.vhdファイ ルを開き、次の行を確認します。
15. singen_demo.vhd ファイルからのコードの抜粋に示すように、デバッグ用に信号を指定するため、ソースの HDL ファイルで MARK_DEBUG 属性を指定することもできます。
16. synplify_1.sdc ファイルには、ピン位置、I/O 規格、クロック定義など、さまざまな種類の制約が含まれて います。synplify_1.fdcファイルには、コンパイラの指示子が含まれています。デバッグ用に指定されたネ ットの位置がこちらです。次の図に、デバッグ用に選択された属性およびネットが示されています。
上記の制約では、syn_black_box 属性を使用して sinegen がブラック ボックスとして定義されています。また、
このブロックの I/O が最適化により削除されないように、syn_no_prune 属性が使用されています。最後に、
Vivado® IDE でさらにデバッグするため、sine[20:0] および sel[1:0] の 2 つのネットが合成済みのデザイ
ンに表示されるように、この 2 つのネットに MARK_DEBUG 属性が割り当てられています。これらの属性につい ての詳細は、Synplify Pro のユーザー マニュアルおよび Synplify Pro のリファレンス マニュアルを参照してくだ さい。
手順 2: Synplify プロジェクトの合成
1. プロジェクトをインプリメントする前に、出力ネットリスト ファイルの名前を設定する必要があります。デフォ ルトの出力ネットリスト ファイル名は synplify_1.edf です。この名前を変更するには、Tcl コマンド プロン プトに次のコマンドを入力します。
%project -result_file "./rev_1/sinegen_demo.edf"
このファイルを Vivado® IDE で使用します。
2. 設定をすべて確認したら、Synplify Pro のウィンドウの左側にある [Run] をクリックして、デザインの合成を開始 します。
3. 合成中 [Tcl Script] タブにステータス メッセージが表示されます。警告メッセージが表示されるはずですが、エラ ーメッセージはないはずです。詳細メッセージを確認するには、Synplify Pro コンソールの左下にある
[Messages] タブをクリックします。
4. 合成が完了すると、出力ネットリスト ファイルが rev_1/sinegen_demo.edf に書き込まれます。
[オプション] ネットリストを表示させるには、[View] → [View Result File] をクリックします。
5. [File] → [Save All] をクリックしてプロジェクトを保存してから、[File] → [Exit] をクリックします。
手順 3: Synplify Pro で作成したブラック ボックス用の DCP の作成
Synplify Pro プロジェクトで作成されたブラック ボックス「sinegen」には、Direct Digital Synthesizer IP が含まれて います。このブロック用に合成済みデザインを作成する必要があります。このためには、次の手順に沿って Vivado® IDE で RTL タイプのプロジェクトを作成します。
1. Vivado IDE を起動します。
2. [Create Project] をクリックします。New Project ウィザードが開きます。[Next] をクリックします。
3. [Project Name] を「proj_synplify_netlist」に設定します。[Next] をクリックします。
4. [Project Type] を [RTL Project] に設定します。[Next] をクリックします。
5. [Add Sources] で [Add Files] をクリックし、Vivado_Debug/src/lab4 フォルダーを参照して sinegen.vhd を選択します。[Target Language] を [VHDL] に設定します。[Copy sources into project] チェックボックスがオ ンになっていることを確認します。[Next] をクリックします。
6. もう一度 [Add Files] をクリックし、Vivado_Debug/src/lab4 フォルダーを参照して sine_high.xci、
sine_low.xci、および sine_mid.xci ファイルを選択します。[Next] をクリックします。
7. [Default Parts] で [Boards] をクリックし、[Kintex-7 KC705 Evaluation Platform] およびハードウェアの正しいバー ジョンを選択します。[Next] をクリックします。
8. [New Project Summary] ですべての設定が正しいことを確認します。[Finish] をクリックします。
9. プロジェクトを作成したら、Vivado Flow Navigator で [Project Manager] の下にある [Settings] をクリックしま す。ダイアログ ボックスの左側にある [Synthesis] をクリックします。ダイアログ ボックス右側にあるプルダウ ン メニューで set -flatten_hierarchy を none に設定します。[OK] をクリックします。
10. Vivado IDE の Flow Navigator で [Synthesis] → [Run Synthesis] をクリックします。
11. 合成が完了すると、[Synthesis Completed] ダイアログ ボックスが開きます。[Open Synthesized Design] をオンに して、[OK] をクリックします。
12. Vivado IDE で [File] → [Exit] をクリックします。ダイアログ ボックスが表示されるので、[OK] をクリックしてそ のダイアログ ボックスを終了します。
手順 4: Vivado での合成後のプロジェクトの作成
1. Vivado® IDE を起動します。
2. [Create Project] をクリックします。New Project ウィザードが開きます。[Next] をクリックします。
3. [Project Name] を proj_synplify に設定します。[Next] をクリックします。
4. [Project Type] で [Post-synthesis Project] をクリックします。[Next] をクリックします。
5. [Add Netlist Sources] で [Add Files] をクリックし、Vivado_Debug/synopsys/rev_1 フォルダーを参照して sinegen_demo.edf を選択します。[OK] をクリックします。
6. 前のセクションで作成したネットリスト ファイルを追加します。もう一度 [Add Files] をクリックし、
proj_synplify_netlist/proj_synplify_netlist.runs/synth1 フォルダーを参照して sinegen.dcp を選択します。
前のセクションでサブモジュール IP 用に作成した DCP ファイルを追加します。もう一度 [Add Directories] をク リックし、proj_synplify_netlist/proj_synplify_netlist.srcs/sources_1/ip フォルダーを参照 して次を選択します。
• sine_high
• sine_mid
• sine_low
[Add Source Files] ダイアログ ボックスで [OK] をクリックします。[Add Netlist Sources] ダイアログ ボックス で、[Copy constraints files into project] がオンになっていることをクリックします。[Next] をクリックします。
7. もう一度 [Add Files] をクリックし、Vivado_Debug/src フォルダーを参照して sinegen_demo_kc705.xdc ファイルを選択します。このファイルにはこの Vivado プロジェクトに必要な制約が含まれています。[Add Constraints Files] ダイアログ ボックスで [OK] をクリックします。[Add Constraints (optional)] ダイアログ ボッ クスで、[Copy constraints files into project] がオンになっていることをクリックします。[Next] をクリックしま す。
8. [Default Part] で [Boards] をクリックして [Kintex-7 KC705 Evaluation Platform] および使用しているハードウェ アのバージョン番号を選択します。[Next] をクリックします。
9. [New Project Summary] ですべての設定が正しいことを確認し、[Finish] をクリックします。
10. [Sources] ウィンドウでsinegen_demo.edfが最上位モジュールとして選択されていることを確認します。
手順 5: プロジェクトへのデバッグ ネットの追加
1. Vivado® IDE の Flow Navigator で、[Netlist Analysis] フォルダーから [Open Synthesized Design] をクリックしま す。
2. [Netlist] ウィンドウの [Nelist] タブを選択し、ネットを展開表示します。デバッグ用に次のネットを選択します。
• GPIO_BUTTONS_c(2)
• sine (20)
指定ネットをすべて選択したら、次の図のようにネットを右クリックして [Mark Debug] をクリックします。
3. 次の図のように、デバッグ用に指定したネットがすべて表示されるはずです。
Set Up Debug ウィザードの実行
1. [Debug] ウィンドウで [Set up Debug] アイコンをクリックするか、または [Tools] メニューから [Set up Debug] を クリックします。Set Up Debug ウィザードが開きます。
2. Vivado® ロジック解析デバッグ コアを作成するため、デフォルト設定のままウィザードをクリックしていきま
す。
注記: [Specify Nets to Debug] ダイアログ ボックスで、デバッグ用に指定されているネットのすべてのクロック ドメインが同じであることを確認します。
手順 6: デザインのインプリメントおよびビットストリー ムの生成
1. Flow Navigator の [Program and Debug] ドロップダウン リストから [Generate Bitstream] を選択します。
2. [Save Project] ダイアログ ボックスで [Save] をクリックします。
3. ビットストリームの生成が完了すると、[Bitstream Generation Completed] ダイアログ ボックスが表示され、デ フォルトで [Open Implemented Design] がオンになっています。[OK] をクリックします。
4. インプリメント済みデザインを開く前に合成済みデザインを閉じるように促すダイアログ ボックスが表示され た場合は、[Yes] をクリックします。
5. 第 6 章: 演習 5: Vivado ロジック解析を使用したハードウェアでのデバッグ に進んで、この演習の残りを終了させ てください。
第 6 章
演習 5: Vivado ロジック解析を使用した ハードウェアでのデバッグ
デバッグの最終手順では、ILA (Integrated Logic Analyzer) を使用してハードウェアに接続してデザインをデバッグし ます。作業を続ける前に、KC705 ハードウェアがコンピューターに接続されていることを確認します。
この手順では、次について学びます。
• Vivado® ロジック解析を使用したデザインのデバッグ方法。
• ターゲット ボード (KC705) と通信するため、現在サポートされている Tcl コマンドの使用方法。
• プッシュボタン スイッチの意図していない動作を特定し、回路の問題を発見し、修正する方法。
• デザイン データをトリガーして取り込むための便利なテクニック。
手順 1: Sine Wave Generator の操作の検証
設定を終えたら、Sine Wave Generator が正しく機能していることを検証するため、Vivado ロジック アナライザーを 使用します。検証すべき主な目標は次のとおりです。
• 正弦波の選択がすべて正しい。
• セレクト ロジックが正しく機能する。
ターゲット ボードおよびサーバーの設定
• ターゲット ボードのリモート接続: ターゲット ボードをリモート接続する場合は、KC705 ボードがコンピュータ ーに接続されていて、そこで hw_server アプリケーションが実行されているのを確認する必要があります。ター ゲット ボードをローカル接続する場合は、手順 1 から 5 を飛ばして、「ターゲット ボードのローカル接続」に進 んでください。
1. KC705 ボードの Digilent USB JTAG ケーブルを Windows システムの USB ポートに接続します。
2. ボードが接続されていて電源が入っていることを確認します。
3. ボードの電源サイクルを一巡させて、デバイスをクリアにします。
4. DIP スイッチを (SW11 のピン 1、デバウンス イネーブル) OFF にします。
5. 5.KC705 ボードを 64 ビットの Windows コンピューターに接続し、ローカル ドライブではなくて、ネット ワークから hw_server を実行していることを確認してから、cmdプロンプトを開き、次を入力します。
<Xilinx_Install>\Vivado\2019.x\bin\hw_server
します。
• ターゲット ボードのローカル接続: ターゲット ボードをローカル接続する場合は、KC705 ボードが Windows コ ンピューターに接続されていることを確認し、次の手順を実行します。
1. KC705 ボードの Digilent USB JTAG ケーブルを Windows システムの USB ポートに接続します。
2. ボードが接続されていて電源が入っていることを確認します。
3. ボードの電源サイクルを一巡させて、デバイスをクリアにします。
4. DIP スイッチを (SW13 のピン 1、デバウンス イネーブル) OFF にします。
Vivado ILA (Integrated Logic Analyzer) の使用
1. Flow Navigator で [Program and Debug] → [Open Hardware Manager] をクリックします。
2. ハードウェア マネージャーのウィンドウが開きます。[Open Target] → [Open New Target] をクリックします。
3. Open New Hardware Target ウィザードが開きます。[Next] をクリックします。
4. [Hardware Server Setting] ページの [Connect to] フィールドにサーバーの名前を入力します (またはターゲット がローカル コンピューターの場合は [Local server] を選択します)。[Next] をクリックします。
注記: 接続スピードによりますが、約 10 秒から 15 秒かかる場合があります。
5. 接続するターゲットが複数ある場合は、Select [Hardware Target] ページで複数のエントリが表示されます。この チュートリアルでは、次の図に示すようにターゲットは 1 つのみです。[Next] をクリックします。
6. 次の図のように [Open Hardware Target Summary] ページで [Finish] をクリックします。
7. ハードウェアが完了するまで待ちます。ハードウェアが接続している間に、次の図のようなダイアログ ボックス が表示されます。
ハードウェアとの接続が完了したら、次の図のように [Hardware] ウィンドウが開きます。
注記: [Debug] ビューの [Hardware] タブでは、ハードウェア ターゲットおよび XC7K325T デバイスが JTAG チェ ーンで検出されていることが確認できます。
8. 次に、次の図のように、XC7K325T デバイスを右クリックして [Program Device] を選択し、前に作成しておいた ビットストリーム (拡張子は .bit) を使用して XC7K325T デバイスをプログラムします。
9. 次の図のように、[Program Device] ダイアログ ボックスで、この演習で使用している .bit および .ltx ファイ ルが正しいことを確認し、[Program] をクリックしてデバイスをプログラムします。
注意: プログラムするビットストリームおよびデバッグ プローブのファイル パスは演習ごとに異なります。相対パ スが正しいことを確認します。
注記: デバイスのプログラムが完了するまで待ちます。完了まで数分がかかる場合があります。
10. [Debug] ビューの [Hardware] タブで ILA が検出されていることを確認します。
11. 次の図のように、ILA のダッシュボードが開きます。
正弦波アクティビティの検証
1. ハードウェア ウィンドウで、[Run Trigger Immediate] をクリックして、次の図のようにデータをすぐにトリガー し、取り込みます。
2. 次のずのように、波形ウィンドウで 20 ビットの sine 信号にアクティビティがあることを 検証します。
正弦波の表示
1. 次の図のように、[U_SINEGEN/sine[19:0]] 信号を右クリックし、[Waveform Style] → [Analog] をクリックします。
注意: 波形は正弦波のようには見えません。これは、次に説明するように、基数の設定を [Hex] から [Signed Decimal]
に変更する必要があるからです。
2. [U_SINEGEN/sine[19:0] ]信号を右クリックし、[Radix] → [Signed Decimal] をクリックします。
これで四角い波ではなく、次の図のように高周波数の正弦波が表示されるはずです。
正弦波の表示の修正
中周波数および低周波数の出力正弦波を表示させるには、次の操作を実行します。
1. 次の図のように、GPIO_SW_E プッシュボタンを押して、正弦波シーケンサー回路の電源を一巡させます。
2. [Run Trigger Immediately] をもう一度クリックし、新しく選択された正弦波を確認します。次の図のように中周波 数が確認できるはずです。予期どおりに sel 信号が 0 から 1 に変更になっていることにも注目してください。
3. 手順 1 および 2 を繰り返し、ほかの正弦波出力も表示させます。
注記: 正弦波が遷移していく様子を確認していると、LED が予期される順序で点灯しないことに気づくかもしれ ません。この点については、このチュートリアルの次のセクションでデバッグします。ここでは、各 LED に対 し、正しい正弦波が表示されていることを確認します。波形ウィンドウの信号の配置が前出の 3 つの図で変更に なっている点にも注目してください。
手順 2: 正弦波シーケンサー ステート マシンのデバッグ (オプション)
正弦波の表示を修正したので、正弦波シーケンサー ボタンを押しても、LED が順番に点灯しない可能性があります。
ボタンを押すたびに、GPIO_BUTTONS_re[1] 信号に 1 サイクルのパルスが 1 回あるはずです。これが 2 回以上ある
場合は、LED の動作が不規則になります。このチュートリアルのこのセクションでは、Vivado ロジック解析を使用し
て、正弦波シーケンサー ステート マシンをプローブし、この問題の根本的な原因を確認して修正します。
実際のデバッグプロセスを開始する前に、正弦波シーケンサーステートマシンについてよく理解しておくことが重 要です。
正弦波シーケンサー ステート マシンの概要
正弦波シーケンサー ステート マシンは、4 つある正弦波の中から 1 つを選択し、デザインの最上位にある sine 信号 にそれを駆動します。このステート マシンには入力が 1 つ、出力が 1 つあります。次の図は、このステート マシン の回路図です。この後に続く説明を読みながら、またステート マシン グリッチを表示させ、修正するための手順に 沿いながら、この図を参照してください。
• 入力は「button」という名前のスカラー信号です。button 入力が 1 のとき、ステート マシンはあるステートから 次のステートに遷移します。
• 出力は「Y」という名前の 2 ビットの信号ベクターで、4 つある正弦波ジェネレーターのうちどれが選択されてい るかを示します。
入力信号 button は、正弦波シーケンサー ボタンの Low から High への遷移インジケーターである最上位信号 GPIO_BUTTONS_re[1] に接続します。出力信号 Y は、正弦波を選択する最上位信号 sineSel に接続します。
図 3: 正弦波シーケンサー ボタンの回路図
ステート マシン グリッチの表示
上記の問題を、GPIO_BUTTON [1] 入力信号そのものにデバッグプローブを接続して、トラブルシュートすることは できません。GPIO_BUTTON [1] 入力信号は、FPGA ファブリックからは直接アクセスでき PAD 信号なのです。代わ
りに、GPIO_BUTTON [1] 入力信号の入力バッファーの出力に接続されている GPIO_BUTTON_IBUF 信号の Low から
High への遷移 (立ち上がりエッジ) でトリガーする必要があります。
前に説明したように、グリッチは、GPIO_BUTTONS_IBUF_1 信号に Low から High への遷移が複数あるときに現れま すが、これは断続的に発生します。グリッチの検出にはボタンを数回押す必要があるため、Vivado のロジック解析ツ ールを繰り返しトリガー実行モードに設定します。このモードに設定しておくと、ボタンを繰り返し押す操作と、波 形ビューアーでイベントを 確認する作業が簡単になります。
1. hw_ila_1 の [Settings] タブで、次のように設定します。
• [Trigger mode]: BASIC_ONLY
• [Capture mode]: BASIC
• [Window data depth]: 1024
• [Trigger position in window]: 512
• [Trigger Setup] ウィンドウで [+] 記号を押して、GPIO_BUTTONS_IBUF_1 プローブを追加します。次の図のよ うに、[Value] で [RX] を選択して、値を変更します。
注意: ほかの演習では、GPIO_BUTTONS_IBUF が違ったように表示されていたり、button_in4_in のように別の名前 が付いている可能性があります。2 つの個々のビットとして表示される場合もありますし、1 つのバスに 2 ビットが 一緒になっている場合もあります。このバスのビット 1 を使用して、トリガー コンディションを設定するようにし てください。2 ビット バスの場合は、[Compare Value] のダイアログ ボックスの [Value] フィールドを [RX] に設定し ます。
2. 次の図のように ILA デバッグ コアに [Enable Auto Re-Trigger] を選択します。
注意: 別の演習では、ILA のプロパティ ウィンドウが少し異なっている可能性があります。
Auto Retrigger モードに設定した後、[Run Trigger] または [Run Trigger Immediate] コマンドを実行すると、Auto Retrigger モードをディスエーブルにするまで、ILA コアで次の操作が繰り返し実行されます。
• トリガーの準備。
• トリガーの待機。
• 波形のアップロードおよび表示。
3. KC705 ボード上で、GPIO_BUTTONS_IBUF_1 信号に複数の遷移が見られるまで、[Sine Wave Sequencer] ボタン を押します (10 回以上押す必要がある場合があります)。これは、入力で起きるグリッチの可視化です。グリッチ の例は次の 2 つの図に示されています。
注意: グリッチを表示するには、前の 2 つの手順を何度か繰り返す必要がある場合があります。グリッチを表示でき たら、信号グリッチが次の図とまったく同じ場所にないことを確認できます。
信号グリッチの修正および正しいステート マシン動作の検証
ボタンを押すときに、そのボタンが電気接触をしたり、その接触を切ったりするため、複数の遷移グリッチまたは「バ ウンス」が発生します。この信号バウンスをなくすには、「デバウンス」回路が必要です。
1. KC705 ボードで DIP スイッチの位置を ON または UP に設定し、デバウンス回路をイネーブルにします (図 1 に
「De-bounce Enable」と書いてある箇所)。
2. ILA デバッグ コアでオートリトリガー モードをイネーブルにし、ILA コアで [Run Trigger] をクリックします。
• 正弦波シーケンサー ボタンを 1 回押しても、GPIO_BUTTON_re[1] 信号で複数の遷移が見られなくなってい ることを確認します。
• ボタンを押すたびに、sineSel 信号が 00 から 01、10、11 へと遷移し、00 に戻るのを確認して、ステート マ シンが正しく動作していることを検証します。
VIO コア アクティビティの検証 (演習 3 のみを対象)
1. Flow Navigator の [Program and Debug] から [Open Hardware Manager] をクリックします。
ハードウェア マネージャーのウィンドウが開きます。
2. [Open a new hardware target] をクリックします。
3. Open New Hardware Target ウィザードが開きます。[Next] をクリックします。
4. [Hardware Server Setting] ページの [Connect to] フィールドにサーバーの名前を入力します (またはターゲット がローカル コンピューターの場合は [Local server] を選択します)。
5. [Hardware Targets] ページでターゲットを選択し、正しいターゲットに接続されていることを確認します。ター ゲットが 1 つだけの場合は、それがデフォルトで選択されます。[Next] をクリックします。
9. [Program Device] ダイアログ ボックスで、プログラムするビット ファイルが正しいことを確認します。[OK] を クリックします。
10. FPGA デバイスをプログラムしたら、VIO および ILA コアが [Hardware] ウィンドウに表示されます。
次の図のように、ILA コアのデバッグ ダッシュボードが表示されます。
11. [Run Trigger Immediate] をクリックしてデータをすぐに取り込みます。
12. sine [19:0] 信号にアクティビティがあることを 確認します。
15. 各正弦波出力周波数をサイクルさせるのに GPIO_SW プッシュボタンを使用するのではなく、VIO コアからの仮 想トグル スイッチ push_button_vio を使用します。
16. これで、ILA ダッシュボードのオプションをカスタマイズして、VIO ウィンドウを含めることができるようにな りました。このウィンドウを含めると、VIO 出力ドライバーをトグルさせ、すべての ILA 波形ウィンドウの様子 を 1 つのダッシュボードで確認できるようになります。[Dashboard Options] をスライドさせます。
注記: これで、ILA ダッシュボードに VIO ウィンドウも含まれるようになりました。
18. 次の図のように、[Trigger Setup – hw_ila_1] ウィンドウおよび [hw_vio_1] ウィンドウが横並びになるよう、ウィ ンドウを調整します。
19. [hw_vio_1] ウィンドウで、[+] 記号をクリックし、[hw_vio_1] の下にあるすべてのプローブを 選択します。
20. [OK] をクリックします。
注記: すべてのプローブの 初期値です。
21. [hw_vio_1] ウィンドウのすべてのプローブの 値をメモします。