Vivado ロジックアナライザの実行手順

FPGA

Vivadoでビルドインのロジックアナライザを使ってデバッグする場合の手順です。

1. Vivadoのプロジェクトを準備する

デバッグを行うデザインを含むVivadoのプロジェクトを用意します。

2. HDLにマークをつける

デバッグを行う信号にマークを付けます。Verilogの場合は(* mark_debug = “true” *)です。次の例では、AXIマスタモジュールのポート宣言部分に(* mark_debug = “true” *)を追加しています。(Block Design内の信号を観測する場合の手順はこちら。)

  // AXI Master
  //   write port(デバッグ対象デザインのVerilogファイル)
  (* mark_debug = "true" *)   output [P_AXI_M_AWID-1:0] o_awid_m;
  (* mark_debug = "true" *)   output [P_AXI_M_AWADDR-1:0] o_awaddr_m;
  (* mark_debug = "true" *)   output [P_AXI_M_AWLEN-1:0] o_awlen_m;
  (* mark_debug = "true" *)   output [P_AXI_M_AWSIZE-1:0] o_awsize_m;
  (* mark_debug = "true" *)   output [P_AXI_M_AWBURST-1:0] o_awburst_m;
  (* mark_debug = "true" *)   output [P_AXI_M_AWLOCK-1:0] o_awlock_m;
  (* mark_debug = "true" *)   output [P_AXI_M_AWCACHE-1:0] o_awcache_m;
  (* mark_debug = "true" *)   output [P_AXI_M_AWUSER-1:0] o_awuser_m;
  (* mark_debug = "true" *)   output [P_AXI_M_AWPROT-1:0] o_awprot_m;
  (* mark_debug = "true" *)   output o_awvalid_m;
  (* mark_debug = "true" *)   input  i_awready_m;
  (* mark_debug = "true" *)   output [P_AXI_M_WID-1:0] o_wid_m;
  (* mark_debug = "true" *)   output [P_AXI_M_WDATA-1:0] o_wdata_m;
  (* mark_debug = "true" *)   output [P_AXI_M_WSTRB-1:0] o_wstrb_m;
  (* mark_debug = "true" *)   output o_wlast_m;
  (* mark_debug = "true" *)   output o_wvalid_m;
  (* mark_debug = "true" *)   input  i_wready_m;
  (* mark_debug = "true" *)   input  [P_AXI_M_BID-1:0] i_bid_m;
  (* mark_debug = "true" *)   input  [P_AXI_M_BRESP-1:0] i_bresp_m;
  (* mark_debug = "true" *)   input  i_bvalid_m;
  (* mark_debug = "true" *)   output o_bready_m;

3.論理合成

mark_debugを付けたHDLでVivadoの”Run Synthesis”を実行します。

4.デバッグのセットアップ

通常は”Run Implementation”に進むところですが、その前に”Open Synthesized Design”を実行します。

合成後のデザインを開く。

合成後のデザインを開く

次にメニューからTools->Set Up Debug…を実行します。

Set Up Debug...の実行

Set Up Debug…の実行

Set Up Debugウィンドウが現れます。Nextをクリックします。

Set Up Debugその1

Set Up Debugその1

HDLでmark_debugを追加した信号が表示されます。ここで、論理合成時にクロックが推定できなかった信号は、Clock Domainがundefinedになります。例えば、固定信号などをmark_debugにするとundeginedになる場合があります。

Set Up Debugその2

Set Up Debugその2

このような場合は、undefined部分を右クリックして、Select Clock Domainで明示的にクロックを指定します。

Set Up Debugその3

Set Up Debugその3

ここではFCLK_CLK0をundefinedに指定しています。

Set Up Debugその4

Set Up Debugその4

undefinedが消えます。Nextをクリックします。

Set Up Debugその5

Set Up Debugその5

ロジックアナライザのオプションを指定します。サンプル数などを設定します。Nextをクリックします。

Set Up Debugその6

Set Up Debugその6

設定終了です。Finishをクリックします。

Set Up Debugその7

Set Up Debugその7

デバッグ用の追加データが自動的に生成されます。

Debugコアの生成

Debugコアの生成

5. Implementation実行とBitstream生成

通常の手順で”Run Implementation”と”Generate Bitstream”を実行します。
この時、制約条件ファイルの.xdcには次のようなデバッグに関する情報が追加されます。

create_debug_core u_ila_0 ila
set_property ALL_PROBE_SAME_MU true [get_debug_cores u_ila_0]
set_property ALL_PROBE_SAME_MU_CNT 1 [get_debug_cores u_ila_0]
:
:

6. デバッグ画面の表示

Hardware Managerを開き、”Open target”をクリックします。

Hardware ManagerのOpen target

Hardware ManagerのOpen target

Auto Connectをクリックします。

Hardware ManagerのAuto Connect

Hardware ManagerのAuto Connect

ターゲットが認識されるので、”Program device”でbitstreamをダウンロードします。

bitstreamのダウンロード

bitstreamのダウンロード

ZynqデバイスのFCLK_CLK0など、PSからのクロックをロジックアナライザに使用している場合は、Xilinx SDKでプログラムを実行してクロック供給を有効にします。その後、”Refresh device”を実行します。

Refresh Device

Refresh Device

デバッグ画面が表示されます。

デバッグ画面

デバッグ画面

7. デバッグ

Debug Probesでトリガに使う信号を選び、ドラッグ&ドロップでBasic Trigger Setupに設定します。Compare Valueにはトリガ条件を指定します。

トリガーのセットアップ

トリガーのセットアップ

波形ウィンドウを表示するために、まずは適当にトリガーをかけます。

トリガボタン

トリガボタン

表示したい信号をDebug Probesで選択し、右クリックで表示されるAdd Probes to Waveformを実行します。

波形ウィンドウへの信号追加

波形ウィンドウへの信号追加

信号が波形表示されます。

波形表示

波形表示

まとめ

Vivadoのロジックアナライザはmark_debugで指定した信号名がそのまま表示されるので便利です。ISEのChipscopeだと自分で信号名を付けていたので不便でした。やっとQuartus IIのSignaTapIIと同じ感覚でデバッグできるようになりました。

追記

この記事で使用したVivadoのバージョンは2014.3だったのですが、新しいバージョンではロジックアナライザのユーザー・インターフェースが少し変わっているようです。例えば、Vivado 2015.4は次のようなユーザー・インターフェースになっています。

Vivado 2015.4のロジックアナライザ表示

Vivado 2015.4のロジックアナライザ表示

Debug Probesが見当たりませんが、Window->Debug Probesで表示できるようです。ただ、Waveformへの波形の追加はWavefromウィンドウのAddボタンから行えるので、Debug Probesは不要かもしれません。

WaveformのAddボタンから観測信号を追加

WaveformのAddボタンから観測信号を追加

同様に、トリガーの設定もTrigger SetupのAdd Probe(s)ボタンから簡単に行えるようです。

トリガー信号の追加

トリガー信号の追加

タイトルとURLをコピーしました