> 文章列表 > xilinx FPGA在线调试方法总结(vivado+ila+vio)

xilinx FPGA在线调试方法总结(vivado+ila+vio)

xilinx FPGA在线调试方法总结(vivado+ila+vio)

本文主要介绍xilinx FPGA开发过程中常用的调试方法,包括ILA、VIO和TCL命令等等,详细介绍了如何使用。

一、FPGA调试基本原则

根据实际的输出结果表现,来推测可能的原因,再在模块中加ILA信号,设置抓信号条件,逐步定位问题模块和原因,最终解决bug。

二、FPGA常用调试方法

1、调用IP

(1)ILA

第1步:在vivado中,打开IP核目录(IP Catalog),在搜索框中输入ILA(不区分大小写),按图示方式进行选择即可。

xilinx FPGA在线调试方法总结(vivado+ila+vio)

第2步:设置ILA参数

探针数根据需要采集的信号数设定,或者直接设定一个信号;

采样数据深度可根据实际需要和资源消耗情况进行设置,一般选择默认的1024即可;

xilinx FPGA在线调试方法总结(vivado+ila+vio)

第3步:测量信号的位宽进行设置

xilinx FPGA在线调试方法总结(vivado+ila+vio)
xilinx FPGA在线调试方法总结(vivado+ila+vio)

第4步:在IP source区,打开ILA,添加例化模板, 在代码中插入例化,把VIO的输出口连接到模块的输入。

ila_0 u_ila( .clk(clk), .probe0(probe0), .probe1(probe1), .probe2(probe2));

(2)VIO IP

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

第1步: 例化一个VIO核,根据需要设定输入输出的数目

xilinx FPGA在线调试方法总结(vivado+ila+vio)

第2步:设置vio输出端口的位宽与初始值:

xilinx FPGA在线调试方法总结(vivado+ila+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窗口中选择需要调试的网络节点,进行调试。

xilinx FPGA在线调试方法总结(vivado+ila+vio)

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

xilinx FPGA在线调试方法总结(vivado+ila+vio)

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

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

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

xilinx FPGA在线调试方法总结(vivado+ila+vio)

(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 ilaset_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调试方法总结,希望大家阅读完后,有所收获。