本文主要介绍xilinx FPGA开发过程中常用的调试方法,包括ILA、VIO和TCL命令等等,详细介绍了如何使用。
一、FPGA调试基本原则
根据实际的输出结果表现,来推测可能的原因,再在模块中加ILA信号,设置抓信号条件,逐步定位问题模块和原因,最终解决bug。
二、FPGA常用调试方法
1、调用IP
(1)ILA
第1步:在vivado中,打开IP核目录(IP Catalog),在搜索框中输入ILA(不区分大小写),按图示方式进行选择即可。
第2步:设置ILA参数
-
探针数根据需要采集的信号数设定,或者直接设定一个信号;
-
采样数据深度可根据实际需要和资源消耗情况进行设置,一般选择默认的1024即可;
第3步:测量信号的位宽进行设置
第4步:在IP source区,打开ILA,添加例化模板, 在代码中插入例化,把VIO的输出口连接到模块的输入。
ila_0 u_ila(
.clk(clk),
.probe0(probe0),
.probe1(probe1),
.probe2(probe2)
);
(2)VIO IP
VIO的输出可以控制测试模块的输入,VIO的输入可以显示模块的输出值。
第1步: 例化一个VIO核,根据需要设定输入输出的数目
第2步:设置vio输出端口的位宽与初始值:
第3步:在代码中插入例化,把VIO的输出口连接到模块的输入。
vio_0 u_vio(
.clk(clk),
.probe_out0(probe_out0)
);
2、添加调试信号
(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]} ]]
以上就是本次分享的xilinx FPGA调试方法总结,希望大家阅读完后,有所收获。