Vivado ILA觀察信號和調試過程

先簡單介紹一下ILA(Integrated Logic Analyzer)生成方法。這裏有兩種辦法完成Debug Core的配置和實現。

方法一、mark_debug綜合選項+Set Up Debug設定ILA參數。

1、在信號(reg或者wire)聲明處加mark_debug選項,方法如下:

// spi_mosi信號標記爲需要ILA觀測的信號
(* MARK_DEBUG = “TRUE” *) wire spi_mosi;

mark_debug用法的詳細說明請看Xilinx文檔UG901_Synthesis

2、綜合,進行Run Synthesis 

3、Open Synthesized Design,打開Set Up Debug,如圖:

 

 

4、爲ILA Debug Core添加需要觀測的信號,結果如圖:

 

 

每一個信號都要指定一個採樣時鐘域(Clock Domain)。

關於添加方法,還可以在Netlist窗口拖動信號到這個列表內。

注意到Netlist中有些信號名稱前面有了綠色的小蜘蛛(小星星) ,正是Verilog程序中進行mark_debug的信號:

 

5、在Set Up Debug中設定信號採樣收集的深度(Sample of data depth),輸入流水級別數(Input pipe stages),Capture control和Advanced trigger選項。

6、完成ILA配置,保存Debug Setup,Run Implementation

說明:

完成了Debug Setup以後重新進行Implementation,XDC文件中被附加上了配置debug Core的XDC語句,例如:

# 下面這句創建一個新的調試核,名稱u_ila_0
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 4 [get_debug_cores u_ila_0]
set_property C_ADV_TRIGGER true [get_debug_cores u_ila_0]
set_property C_DATA_DEPTH 8192 [get_debug_cores u_ila_0] set_property C_EN_STRG_QUAL true [get_debug_cores u_ila_0] set_property C_INPUT_PIPE_STAGES 3 [get_debug_cores u_ila_0] set_property C_TRIGIN_EN false [get_debug_cores u_ila_0] set_property C_TRIGOUT_EN false [get_debug_cores u_ila_0] # 下面這句爲u_ila_0調試核設定端口clk的寬度爲1 set_property port_width 1 [get_debug_ports u_ila_0/clk] # 下面這句爲u_ila_0調試核設定採樣時鐘信號(clk)爲sys_sam_clk connect_debug_port u_ila_0/clk [get_nets [list sys_pll_01/inst/sys_sam_clk]] set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe0] set_property port_width 21 [get_debug_ports u_ila_0/probe0] # 下面這句爲u_ila_0調試核連接待觀測信號corr_i_quant connect_debug_port u_ila_0/probe0 [get_nets [list {corr_i_quant[0]} {corr_i_quant[1]} {corr_i_quant[2]} {corr_i_quant[3]} {corr_i_quant[4]} {corr_i_quant[5]} {corr_i_quant[6]} {corr_i_quant[7]} {corr_i_quant[8]} {corr_i_quant[9]} {corr_i_quant[10]} {corr_i_quant[11]} {corr_i_quant[12]} {corr_i_quant[13]} {corr_i_quant[14]} {corr_i_quant[15]} {corr_i_quant[16]} {corr_i_quant[17]} {corr_i_quant[18]} {corr_i_quant[19]} {corr_i_quant[20]}]] create_debug_port u_ila_0 probe set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe1] set_property port_width 12 [get_debug_ports u_ila_0/probe1] connect_debug_port u_ila_0/probe1 [get_nets [list {rdq[0]} {rdq[1]} {rdq[2]} {rdq[3]} {rdq[4]} {rdq[5]} {rdq[6]} {rdq[7]} {rdq[8]} {rdq[9]} {rdq[10]} {rdq[11]}]] create_debug_port u_ila_0 probe set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe2] set_property port_width 12 [get_debug_ports u_ila_0/probe2] connect_debug_port u_ila_0/probe2 [get_nets [list {rdi[0]} {rdi[1]} {rdi[2]} {rdi[3]} {rdi[4]} {rdi[5]} {rdi[6]} {rdi[7]} {rdi[8]} {rdi[9]} {rdi[10]} {rdi[11]}]] create_debug_port u_ila_0 probe set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe3] set_property port_width 12 [get_debug_ports u_ila_0/probe3] connect_debug_port u_ila_0/probe3 [get_nets [list {tdi[0]} {tdi[1]} {tdi[2]} {tdi[3]} {tdi[4]} {tdi[5]} {tdi[6]} {tdi[7]} {tdi[8]} {tdi[9]} {tdi[10]} {tdi[11]}]] create_debug_port u_ila_0 probe set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe4] set_property port_width 12 [get_debug_ports u_ila_0/probe4] connect_debug_port u_ila_0/probe4 [get_nets [list {tdq[0]} {tdq[1]} {tdq[2]} {tdq[3]} {tdq[4]} {tdq[5]} {tdq[6]} {tdq[7]} {tdq[8]} {tdq[9]} {tdq[10]} {tdq[11]}]] create_debug_port u_ila_0 probe set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe5] set_property port_width 1 [get_debug_ports u_ila_0/probe5] connect_debug_port u_ila_0/probe5 [get_nets [list bb_sam_clk_5]] create_debug_port u_ila_0 probe set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe6] set_property port_width 1 [get_debug_ports u_ila_0/probe6] connect_debug_port u_ila_0/probe6 [get_nets [list AD_SPI_MOSI_OBUF]] create_debug_port u_ila_0 probe set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe7] set_property port_width 1 [get_debug_ports u_ila_0/probe7] connect_debug_port u_ila_0/probe7 [get_nets [list AD_SPI_CLK_OBUF]] create_debug_port u_ila_0 probe set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe8] set_property port_width 1 [get_debug_ports u_ila_0/probe8] connect_debug_port u_ila_0/probe8 [get_nets [list AD_SPI_EN_B_OBUF]] create_debug_port u_ila_0 probe set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe9] set_property port_width 1 [get_debug_ports u_ila_0/probe9] connect_debug_port u_ila_0/probe9 [get_nets [list AD_SPI_MISO_IBUF]] set_property C_CLK_INPUT_FREQ_HZ 300000000 [get_debug_cores dbg_hub] set_property C_ENABLE_CLK_DIVIDER false [get_debug_cores dbg_hub] set_property C_USER_SCAN_CHAIN 1 [get_debug_cores dbg_hub] connect_debug_port dbg_hub/clk [get_nets sys_ref_clk_BUFG]

 

方法二、HDL文件中例化ILA IP Core。

在IP Catalog中添加ILA核,基本的參數有:需要觀測的信號個數(Number of Probes),採集深度(Sample data depth)和各個信號探頭(Probe)的位寬。

 

調試時需要在Debug Probes 裏面增加信號到波形窗口中!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章