工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> VHDL

Xilinx Vivadoをマスターする: 統合ロジック・アナライザ(ILA)とバーチャル入出力(VIO)によるデバッグ

このチュートリアルでは、Xilinx Vivadoの統合ロジック・アナライザ(ILA)とバーチャル入出力(VIO)コアを使用して、VHDL設計をオンチップでデバッグおよび監視する方法を説明します。この記事を読み終える頃には、外部機器を使わずにプローブの挿入、トリガーの設定、正確な信号動作の取得ができるようになります。

概要

この記事ではVivadoのスクリーンショットを参照しています。各画像をクリックすると拡大表示されます。 サイドバーまたはモバイル用のポップアップナビゲーションを使用して、目的のセクションに素早くアクセスできます。

ILAとVIO

ILA IPを使用すると、内部FPGA信号をリアルタイムでプローブできます。一方、VIO IPを使用すると、Vivadoから内部信号を駆動できます。どちらも無料で、高度に設定可能であり、Vivadoワークフローにシームレスに統合されます。

必要なもの

  1. Xilinx FPGAボード
  2. Vivado Design Suite(2020.2以降)
  3. 基本的なVHDLの知識

例ではKintex-7 KC705評価キットを使用していますが、手順は最新のXilinx FPGAであればどれにも適用可能です。

サンプル・プロジェクトのダウンロード

サンプル設計とVHDLファイルを含むZIPファイルをダウンロードしてください。Vivadoでila_tutorial.xprを開いて設計を調べるか、続きを読んでスクラッチから作成してみてください。

Vivadoでプロジェクトを作成する

Vivadoを起動し、ウェルカム画面でCreate Projectをクリックします。

Xilinx Vivadoをマスターする: 統合ロジック・アナライザ(ILA)とバーチャル入出力(VIO)によるデバッグ

ウィザードに従って進めます。プロジェクト名をila_tutorial(スペースなし)に設定し、RTL Projectを選択、ソースとしてcounter.vhdlとcounter_top.vhdlを追加します。Copy sources into projectを有効にして続行します。

Xilinx Vivadoをマスターする: 統合ロジック・アナライザ(ILA)とバーチャル入出力(VIO)によるデバッグ

制約ファイルtop.xdcを追加し、プロジェクトにコピーします。クロックとLEDのピンを使用ボードに合わせて調整し、正しいクロック周期を設定します。

Xilinx Vivadoをマスターする: 統合ロジック・アナライザ(ILA)とバーチャル入出力(VIO)によるデバッグ

リストから使用ボードを選択し、Finishをクリックしてプロジェクトを開きます。

Xilinx Vivadoをマスターする: 統合ロジック・アナライザ(ILA)とバーチャル入出力(VIO)によるデバッグ

設計例の概要

この例は、連鎖した2つの4ビット・カウンターで構成されます。counter.vhdlは、イネーブル時にインクリメントし、カウント値が12から15の間で1ビットのtrigger出力をアサートするカウンターを実装しています。

Xilinx Vivadoをマスターする: 統合ロジック・アナライザ(ILA)とバーチャル入出力(VIO)によるデバッグ

エンティティ宣言:

 ---------------------------------------------------------------------------- -- エンティティ宣言 ---------------------------------------------------------------------------- ENTITY counter IS PORT(clk : IN STD_LOGIC; -- メイン・クロック reset : IN STD_LOGIC; -- リセット、アクティブ・ハイ enable : IN STD_LOGIC; -- 次のカウンターをイネーブル trigger : OUT STD_LOGIC -- 次のカウンターをトリガー ); END ENTITY; 

内部信号:

属性の使用(後で説明):

 ATTRIBUTE MARK_DEBUG : STRING; ATTRIBUTE MARK_DEBUG OF count : SIGNAL IS "true"; 

順序ロジック:

 seq_proc: PROCESS (reset, clk) BEGIN -- for seq_proc IF (reset = '1') THEN count <= (OTHERS => '0'); trigger_o <= '0'; ELSIF rising_edge(clk) THEN IF (enable = '1') THEN count <= count + 1; IF (count > x"B" AND count <= x"F") THEN trigger_o <= '1'; ELSE trigger_o <= '0'; END IF; END IF; END IF; END PROCESS; 

counter_top.vhdlは2つのカウンターをインスタンス化します。counter_1_instは常にイネーブルされ、そのtrigger出力でcounter_2_instをクロックします。したがって、counter_2_instはcounter_1_instの16サイクルごとに4回だけインクリメントされます。

Xilinx Vivadoをマスターする: 統合ロジック・アナライザ(ILA)とバーチャル入出力(VIO)によるデバッグ

リセット用VIOコアの作成

設計のreset入力を駆動するVIOを生成し、Vivadoから手動でトグルできるようにします。

IP Catalogを開き、VIOで検索し、VIO (Virtual Input/Output)をダブルクリック、vio_resetにリネームします。Input Probe Countを0、Output Probe Countを1に設定します。

Xilinx Vivadoをマスターする: 統合ロジック・アナライザ(ILA)とバーチャル入出力(VIO)によるデバッグ

出力プローブを設定: 幅=1、初期値=0x1、次にOKとGenerateをクリック。

Xilinx Vivadoをマスターする: 統合ロジック・アナライザ(ILA)とバーチャル入出力(VIO)によるデバッグ

合成後、counter_top.vhdlでコンポーネントを宣言してインスタンス化します。再合成前にflatten_hierarchyをNoneに設定するのを忘れないでください。

 COMPONENT vio_reset PORT( clk : IN STD_LOGIC; probe_out0 : OUT STD_LOGIC_VECTOR(0 DOWNTO 0) ); END COMPONENT; 

デバッグ・プローブの挿入

信号をプローブするには3つの方法があります:

  1. VHDLソースから(MARK_DEBUG属性経由)
  2. ネットリストまたは回路図から(右クリックでMark Debug)
  3. XDC/TCLファイルから(ここでは扱いません)

VHDLソースからの挿入

ファイルごとに1回MARK_DEBUG属性を宣言し、目的の信号に適用します:

 ATTRIBUTE MARK_DEBUG : STRING; ATTRIBUTE MARK_DEBUG OF count : SIGNAL IS "true"; 

合成済み設計では、countが虫アイコン付きでUnassigned Debug Netsに表示されます。

Xilinx Vivadoをマスターする: 統合ロジック・アナライザ(ILA)とバーチャル入出力(VIO)によるデバッグ

ネットリストからの挿入

NetlistまたはSchematicに移動し、triggerネットを見つけて右クリック、両方のカウンターでMark Debugを選択します。

Xilinx Vivadoをマスターする: 統合ロジック・アナライザ(ILA)とバーチャル入出力(VIO)によるデバッグ Xilinx Vivadoをマスターする: 統合ロジック・アナライザ(ILA)とバーチャル入出力(VIO)によるデバッグ

ILAデバッグ・コアの作成

IP CatalogからSet Up Debugを開きます。Vivadoがすべてのデバッグ・ネットとクロック・ドメインをリストアップします。このチュートリアルでは4つすべての信号を保持します。

Xilinx Vivadoをマスターする: 統合ロジック・アナライザ(ILA)とバーチャル入出力(VIO)によるデバッグ

ILAのFIFO深度を設定(1024で十分)、Capture controlを有効化。ウィザードを完了すると、VivadoがILAコアと制約ファイルを生成します。

Xilinx Vivadoをマスターする: 統合ロジック・アナライザ(ILA)とバーチャル入出力(VIO)によるデバッグ

制約をila_core.xdcとして保存。このファイルはデバッグ属性を適用し、ILAコアを作成し、各プローブを設定し、コアをVivadoに接続するdbg_hubをインスタンス化します。ハブのクロック周波数を設計に合わせて更新してください。

Xilinx Vivadoをマスターする: 統合ロジック・アナライザ(ILA)とバーチャル入出力(VIO)によるデバッグ

再合成、実装、ビットストリーム生成を実行。ハードウェア・マネージャーを開き、自動接続してデバイスをプログラミングし、.ltxプローブ・ファイルも一緒に読み込みます。

Xilinx Vivadoをマスターする: 統合ロジック・アナライザ(ILA)とバーチャル入出力(VIO)によるデバッグ

ILAトリガーの設定

プログラミング後、ILAダッシュボードが表示されます。VIOタブを有効化し、不要なウィンドウを削除。resetプローブをVIOに追加して、取得中にトグルできるようにします。

Xilinx Vivadoをマスターする: 統合ロジック・アナライザ(ILA)とバーチャル入出力(VIO)によるデバッグ

counter_1_inst/triggerに立上がりエッジ条件、プリトリガー・ウィンドウ32サンプルでトリガーを設定します。

Xilinx Vivadoをマスターする: 統合ロジック・アナライザ(ILA)とバーチャル入出力(VIO)によるデバッグ

単一トリガーでのILA実行

トリガーをアーム(ステータスがwaiting for triggerに変化)し、resetを0にトグル。トリガーが発火すると、ILAはイベント前の32サンプルを記録し、FIFOが満杯になるまで継続します。

Xilinx Vivadoをマスターする: 統合ロジック・アナライザ(ILA)とバーチャル入出力(VIO)によるデバッグ

ズームアウトするとcounter_2_instの動作も確認できます。

Xilinx Vivadoをマスターする: 統合ロジック・アナライザ(ILA)とバーチャル入出力(VIO)によるデバッグ

複数トリガーでのILA実行

複雑なシナリオでは、複数のトリガーを連鎖させます。例: counter_1_inst/count == 9かつcounter_2_inst/count > 2でトリガーし、FIFOを4つのウィンドウに分割。

Xilinx Vivadoをマスターする: 統合ロジック・アナライザ(ILA)とバーチャル入出力(VIO)によるデバッグ

自動再トリガー・モード

Auto re-triggerを有効化して、散発的または高頻度で発生するイベントを取得。単一トリガーを設定し、FIFO深度を指定してコアをアームします。

Xilinx Vivadoをマスターする: 統合ロジック・アナライザ(ILA)とバーチャル入出力(VIO)によるデバッグ

キャプチャ・モード

キャプチャ・モードでは、グローバル条件を満たすサンプルのみを記録。例: counter_1_inst/trigger == 1かつcounter_2_inst/trigger == 0が同時に真の場合に取得。

Xilinx Vivadoをマスターする: 統合ロジック・アナライザ(ILA)とバーチャル入出力(VIO)によるデバッグ

結論

ILAとVIOは、オンチップ・デバッグのための強力かつ無料のツールです。プローブ、複数トリガー、キャプチャ・モードを活用することで、複雑なFPGA設計をVivadoから直接、精密に監視および制御できます。

VHDL

  1. Raspberry PiとPythonでリモート温度センサーを構築 – ステップバイステップガイド
  2. RightHand RoboticsとElement Logic、統合ロボットピースピッキングシステムを発表
  3. 広がるクラウドの地平:新ゾーン、コンテナ、マルチクラウド戦略
  4. C# 入出力の基礎:ユーザー入力と出力の基本をマスター
  5. C++入出力完全ガイド:cin/coutの基本から複数入力まで
  6. C言語入出力(I/O)マスター:scanf()とprintf()徹底解説
  7. C言語の入出力マスター:標準関数とファイル操作
  8. VHDLとVerilogのマスター:クリーンな組み合わせ・順序ロジックの書き方
  9. Dラッチ完全マスター:設計、動作原理、フリップフロップとの違い
  10. Python I/Oとモジュールインポート完全マスター: 実践ガイド
  11. Java入出力をマスター:表示、読み取り、データフォーマット