Menu Close

Vivado软件 调试工具的使用初步

上一篇文章Vivado软件的使用中简单介绍了创建,编译,下载一个工程等基本开发流程,本文将在此基础上,初步介绍调试工具ILA(Integrated Logic Analyzer),集成内部逻辑分析仪的使用。相对于仿真而言,调试工具具有实时性,基于综合后的真实电路的特点。调试工具实际上增加了额外的电路,消耗FPGA资源。ISE中的调试工具为Chipscope,在Vivado中不再使用Chipscope,而是使用ILA替代了Chipscope相关功能。

本文用到的flow_led_top代码如下:

module flow_led_top
#(parameter end_cnt = 50000000)
(
    input   wire            IN_CLK_50M,
    output  reg [7:0]       LED = 8'hff
);

reg [31:0] cnt = 0;


always @(posedge IN_CLK_50M) 
begin
    if(cnt < (end_cnt - 1))
        cnt <= cnt + 1;
    else
        cnt <= 0;
end


always @(posedge IN_CLK_50M) 
begin
    if(LED == 8'hff)
        LED <= 8'hfe;
    else
    begin
        if(cnt == end_cnt -1)
            LED <= {LED[6:0], LED[7]};
        else
            LED <= LED;
    end
end

endmodule

 

1.工程中加入调试信号(Debug Nets)

以下是两种常用的添加调试信号的方法:

  • 在Verilog HDL文件中直接添加,特点是防止信号被优化,最大可能保留信号原本的名称
  • 在综合后的网表(Netlist)中添加,特点是可以在任何层次结构中添加信号,十分灵活,但可能会被优化,并且不需要源HDL文件(即只有网表的情况)

实际上,在Vivado软件中,调试(debug)还可以使用Tcl命令,直接修改*.xdc文件,和添加ILA( Integrated Logic Analyzer) IP核完成,之后会在Vivado软件调试工具的使用进阶中介绍。

 

1.1 在Verilog HDL文件中直接添加

在Verilog代码中,可以直接将变量(wire或者reg)加进调试网络。方法是在声明变量前添加(* mark_debug = “true” *)。示例如下:

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

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

(* mark_debug = “true” *)也可以添加在input/output前,示例如下:

module flow_led_top (

    input wire IN_CLK_50M,
    (* mark_debug = "true" *) output reg [7:0] LED = 8'hff


);

 

1.2 在综合后的网表中添加

工程综合后,点击SYNTHESIS > Open Synthesized Design。并在右边打开的窗口中找到Netlist,如图1所示。Netlist窗口下列出了当前设计中存在的所有网络节点,在其中选择需要调试的网络节点,进行调试。

图1 Netlist窗口

 

右键单击任意网络节点,点击Mark Debug,如图2所示。该网络节点会出现如图3所示的小甲虫标记。

图2 Mark Debug

 

图3 已经被Mark Debug过的网络节点前出现小甲虫图标。

 

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

图4 Unmark Debug

 

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

图5 在原理图中加入调试信号

 

在打开SYNTHESIS后,点击 Windows > Debug,即可出现如图6所示的Debug窗口,在这里可以观察到已经mark debug的信号。

图6 Debug窗口

 

2.创建 ILA  Debug Core

在完成综合后,点击Flow Navigator > SYNTHESIS > Open Synthesized Design > Set Up Debug,就会弹出如下所示Set Up Debug窗口,点击Next。设置(注意这里无法设置VIO,IBERT和JTAG-to-AXI-Master)主要体现在以下3个方面:

  • 选中网络,并连接到debug core
  • 将选中debug的网络关联到时钟域下
  • 选择额外的debug core配置,比如数据深度等

图7 打开Debug设置界面

 

图8所示设置debug信号,注意信号的时钟域(clock domain),可以通过右键单击信号设置时钟域(Select Clock Domain),设置完成后点击Next。图9所示为debug信号undefined的时钟域。

 

图8 设置debug信号

 

图9 未定义的时钟域

 

在图10所示窗口中设置数据采集深度,勾选Capture control和Advanced trigger,点击Next。Advance trigger(高级触发模式)下可以创建和使用复杂的触发序列。 Capture control(捕获控制)支持基本触发(时间点捕获)外的捕获类型,比如信号变化的间歇捕获。

图10 Debug设置数据深度,触发和捕获

 

图11所示是设置Debug的总结,如果发现需要修改处,可以点击Back返回到对应界面修改。检查后,点击Finish结束设置。

图11 设置总结

 

注意:在设置完成后,需要点击图12中红框的图标,保存调试设置在约束文件中。

图12 保存debug设置

 

保存后,再次查看在源文件的Constraints > constrs_1 可以看到flow_led_top.xdc文件中除了管脚约束外,还有关于debug的信息,如图13所示。

图13 *.xdc文件中新增关于debug的信息

 

3.下载

按照之前在Vivado软件的使用中生成*.bit文件的步骤,进行工程的综合与实现。

  • 工程设计综合

Flow Navigator下,点击SYNTHESIS > Run Synthesis,进行综合,如图14所示。

图14 工程综合

 

弹出如图15所示的窗口,表示已经成功综合。

图15 完成综合

 

  • 工程实现

点击 IMPLEMENTATION > Run Implementation,进行工程布局布线。

图16 工程实现

 

出现图17所示窗口,说明工程成功实现。

图17 完成工程实现

 

  • 生成*.bit文件

点击PROGRAM AND DEBUG > Generate Bitstream,生成*.bit文件,如图18所示。

图18 生成*.bit文件

  • 下载*.bit文件和调试文件( debug probe file, *.ltx)

点击PROGRAM AND DEBUG > Open Hardware Manager,有1,2两种方法open target,如图19所示。

图19 Open Target

 

点击Open Target,出现图20所示窗口,点击Auto Connect

图20 Auto Connect

 

Auto Connect后,Hardware Manager窗口会出现FII-PRX100-D芯片,xc7a100t,如图21所示。

图21 连接到FII-PRX100-D芯片

 

如图22所示,点击xc7a100t,再点击Program Device

图22 Program Device

 

如图23所示,在弹出的窗口里选择正确的*.bit文件以及*.ltx文件(见图中绿色框内)。选择完后,点击Program,即可完成下载。

注意:这一步和之前*.bit文件的下载有区别,需要添加上*.ltx文件,否则无法完成调试。

*.ltx文件存放的路径与*.bit文件一致,都是在“ flow_led/flow_led.runs/impl_1/ ”下。

图23 选择正确的*.bit文件和*.ltx文件

 

4.配置和使用ILA触发条件

成功下载后,可以看到 Vivado 的界面打开了一个新的 hw_ila_1 窗口,如图24所示。

图24  hw_ila_1窗口

 

图25所示为设置hw_ila_1触发条件(trigger setup)窗口抓取模式(capture mode)。Trigger Setup右边的窗口Capture Setup比较少用,在之后的文章中再做介绍。

图25 设置hw_ila_1窗口抓取模式和触发条件

 

触发条件设置(trigger setup)窗口中,点击” + “,选择LED_OBUF[7:0],如图26所示。

图26 设置LED_OBUF[7:0]

 

图27所示为设置触发的条件为LED_OBUF[7:0] == FE。即在operator上选择” == “,value上选择” FE “。那么预期触发的时刻应该是在LED0点亮时。如果选择多个信号,还可以点击红框中所示图标,将多个触发条件的组合逻辑作为最终触发条件,可选的逻辑有AND,OR,NAND,NOR。

 

图27 设置trigger

 

图28所示为ILA调试窗口,有以下几个比较重要的快捷图标:

  1. 添加观察信号,注意只有被添加到调试的信号才可以在ILA的窗口观察到
  2. 重复触发,一旦满足触发条件,会不断重新抓取信号,有时不便于观察信号
  3. 单次触发
  4. 立即触发(即使没有触发条件)
  5. 结束调试

这里,因为设置好了触发条件,点击3,选择单次触发,ILA抓取到的信号如图29所示。

图28 调试窗口

 

从图29所示的窗口中可以看到抓到的波形中有一条红色竖线,红线后,LED_OBUF[7:0]的值是FE。

图29 抓取LED_OBUF[7:0] == FE

 

红线的位置可以更改,通过修改Capture Mode Settings(抓取模式设置)中的 Trigger position in window。比较图29所示的设置为512/1024,基本上在捕捉信号的中心点,试着将Trigger position in window修改为10,即红线的位置应该是10/1024,比较靠前,修改后单次触发,其结果如图31所示。

图30 抓取模式设置(Capture Mode Setting)

 

图31 修改 Trigger position in window到10

 

总结

通过以上的步骤学习 Vivado调试工具的初步用法。 ILA 一般是片上调试(on-chip debugging)工具的首选,因为ILA易于使用,并可以提供高级功能,实现复杂的调试,关于ILA工具的进阶内容,将在Vivado软件调试工具的使用进阶中详细描述。

Posted in FPGA, FPGA 教材教案, Verilog, Verilog, 教材与教案, 文章

发表回复

相关链接