【IP】在线调试(ILA/VIO/*mark_debug*)

发布时间 2023-05-06 17:03:03作者: AnchorX

 Xilinx FPGA在Vivado中有多种在线调试方法:

1、调用IP

(1)ILA IP核

ILA核的一个应用技巧:

当系统钟为50M或100M等高速时钟时,对于慢速信号,比如2.4k时钟下的信号,ila核需要设置非常大的采样深度才能抓到该信号,这样会非常浪费BRAM资源。这时可以通过二次编译来添加触发条件,从而抓取到慢速信号。

在配置ILA核时,在General Options-Trigger and Storage Settings中勾选Capture Control,将程序下载进板子里后,再在ILA核的Settings界面把Capture Mode改为Basic,就可以在右侧的Capture Setup中添加二次触发的条件了。

 

 

 

ILA核还可以实现FPGA启动的时候触发,以及Advanced Trigger的使用,详见如下帖子:

FPGA启动的时候触发和Vivado ILA Advanced Trigger的使用_vivado ila 触发条件-CSDN博客

 

(2)VIO IP核

VIO的输出可以控制测试模块的输入,VIO的输入可以显示模块的输出值。非常常用。

 

2、添加调试信号*mark_debug*

(1)在Verilog HDL文件中直接添加,特点是防止信号被优化,最大可能保留信号原本的名称。

  在input/output前或在声明变量前添加(* mark_debug = “true” *)

(* mark_debug = "true" *) 
wire done;
(* mark_debug = "true" *) 
reg cnt;

(2)标记Debug mark方法,可以在原理图(block design)或在综合后的网表(Netlist)中添加。

A、在原理图(block design)右击添加“Mark Debug”,工程综合后,在SYNTHESIS > Open Synthesized Design,在Netlist窗口中选择需要调试的网络节点,进行调试。

 或者右键单击任意网络节点,点击Mark Debug,该网络节点会出现小甲虫标记。

 对于已经选中Mark Debug的网络节点,也可以取消调试。右键单击该网络节点,选择Unmark Debug即可。

B、在综合后,Flow Navigator > SYNTHESIS > Open Synthesized Design > Schematic下打开的原理图(Schematic)中通过右键单击选中线路,添加Mark Debug信号,和Unmark Debug信号

点击 Windows > Debug,即可出现Debug窗口,在这里可以观察到已经mark debug的信号。

 

(3)使用Tcl命令,直接修改*.xdc文件,和添加ILA( Integrated Logic Analyzer) IP核完成。

set_property MARK_DEBUG true [get_nets [list {control_reg[0]} {control_reg[1]} \
   {control_reg[2]} {control_reg[3]} {control_reg[4]} {control_reg[5]} \
   {control_reg[6]} {control_reg[7]} {control_reg[8]} {control_reg[9]} \
   {control_reg[10]} {control_reg[11]} {control_reg[12]} {control_reg[13]} \
   {control_reg[14]} {control_reg[15]} {control_reg[16]} {control_reg[17]} \
   {control_reg[18]} {control_reg[19]} {control_reg[20]} {control_reg[21]} \
   {control_reg[22]} {control_reg[23]} {control_reg[24]} {control_reg[25]} \
   {control_reg[26]} {control_reg[27]} {control_reg[28]} {control_reg[29]} \
   {control_reg[30]} {control_reg[31]}]]
create_debug_core u_ila_0 ila
set_property port_width 1 [get_debug_ports u_ila_0/CLK]
connect_debug_port u_ila_0/CLK [get_nets [list wbClk ]]
set_property port_width 32 [get_debug_ports u_ila_0/PROBE0]
connect_debug_port u_ila_0/PROBE0 [get_nets [list {control_reg[0]}
   {control_reg[1]} {control_reg[2]} {control_reg[3]} {control_reg[4]} \
   {control_reg[5]} {control_reg[6]} {control_reg[7]} {control_reg[8]} \
   {control_reg[9]} {control_reg[10]} {control_reg[11]} {control_reg[12]} \
   {control_reg[13]} {control_reg[14]} {control_reg[15]} {control_reg[16]} \
   {control_reg[17]} {control_reg[18]} {control_reg[19]} {control_reg[20]} \
   {control_reg[21]} {control_reg[22]} {control_reg[23]} {control_reg[24]} \
   {control_reg[25]} {control_reg[26]} {control_reg[27]} {control_reg[28]} \
   {control_reg[29]} {control_reg[30]} {control_reg[31]} ]]