1. Vivado提供的硬件调试工具 (Debug Features in Xilinx Vivado)
Vivado具有多种调试工具,其中包括:
- ILA(Integrated Logic Analyzer):这是Vivado中的逻辑分析仪,可以用来监测设计中的任何一个线网(net)上的信号波动。ILA不仅支持对单一的信号线或者bus来进行检测,还特别提供对AXI总线调试的支持,可以很方便地观察AXI总线上的信号传递。此外,ILA能够很方便地设计复杂的触发条件。
- ILA(System ILA):与ILA类似,但ILA/System ILA更适合于硬件调试。它能够提供更详细的触发和观察能力。
- VIO(Virtual Input/Output):VIO是一个虚拟的输入/输出设备,可以用于仿真和硬件调试。它允许用户在FPGA上实现虚拟的输入/输出设备,从而可以对设计的输入/输出行为进行测试和验证。
- TCL Debugger:TCL Debugger是一个基于TCL/TK的图形用户界面工具,可以用于调试硬件问题。它提供了一个可视化界面,可以方便地设置触发条件、观察信号以及进行其他调试操作。
- HSD(High Speed Debug):HSD是一个用于调试高速接口的工具,它可以提供高速度、高精度的触发和测量能力。HSD支持多种接口协议,包括PCIe、以太网、HDMI等。
这些工具都是为了帮助用户更好地调试硬件设计,具体使用哪个工具取决于具体的设计需求和调试需求。这里主要介绍ILA和VIO
1.1 ILA/System ILA (Integrated Logic Analyzer)
ILA是FPGA上集成的逻辑分析仪, 可以用来监测设计中的任何一个线网(net)上的信号波动。而且ILA不仅支持对单一的信号线或者bus来进行检测, 还特别提供对AXI总线调试的支持, 可以很方便的观察AXI总线上的信号传递(配合Vivado波形观察窗口里面的自动标注功能)。此外ILA能够很方便的设计复杂的触发(trigger)条件来满足各种需求。总而言之, 如果需要观察信号的话,主要使用ILA。
Vivado提供ILA和System ILA。 这两者的差别在于ILA只能配置成检测普通信号(Native Mode)或者AXI总线信号(AXI Mode)中的其中一种;而System ILA可以同时检测两种信号。 此外ILA可以在不同的阶段被插入到设计中, 但是System ILA只能作为IP在源码(RTL Code)阶段插入到设计中。
1.2 VIO (Virtual Input/Output)
VIO在FPGA上实现虚拟的输入输出设备,来模拟实际应用中的输入输出行为。通过这种方式,开发者可以在不依赖外部硬件设备的情况下,对设计的输入输出行为进行测试和验证。VIO的输入用来监视信号,进行状态指示,与ILA的区别在于VIO不能够显示波形,只能显示每次手动/自动刷新(500ms)时候的当前值;此外VIO是不能配置触发(trigger)条件的。VIO输出用来驱动信号, 它在调试的过程中来模拟外设对设计进行驱动,VIO的信号驱动功能类似于我们在设计时用一个拨动开关来控制FPGA上电路,VIO的输出主要用作低速控制信号, 不适合(速度达不到)用来输出高速数据信号,可以把它理解为虚拟的PCB上的拨动开关+LED (从性能上也停留在开关和LED层面)。
1.3 JTAG-to-AXI Master
这个工具是专门用来调试AXI总线的, 它的一端是AXI的主端口(Master), 另一端是JTAG端口(由Vivado自动控制)。进而它可以在Tcl命令的控制下向AXI奴端口(Slave)发送数据/指令包。与ILA/System ILA的AXI调试功能不同之处在于, JTAG-to-AXI Master是没有图形界面的,只能够在terminal里面通过输入Tcl命令来操作;;而ILA/System ILA是有图形界面,就像时序仿真时那样可以观察信号波形。此外ILA/System ILA只能用来监测AXI总线上的信号;而JTAG-to-AXI Master是为了驱动AXI总线,并发送/读取数据。 如果是为了验证AXI的协议是否被正确implement, 用ILA/System ILA来调试;如果是为了验证包含AXI奴端口的IP的功能是否正确(譬如memory的地址是否正确),则用JTAG-to-AXI Master来调试.
1.4 几种调试工具的对比
总结一下几种工具的差别:
- ILA/System ILA:
- 只能用来观察信号, 但是可以观察线网上的任意信号, 有存储深度, 可以显示波形
- 可以配置复杂的触发条件 -> "数字示波器"
- 可以(以FPGA上时钟的速率)观察高速的信号
- 观察AXI总线时用来调试通信协议是否正确
- VIO:
- 模拟拨动开关+LED灯, 没有存储深度, 不可以显示波形
- 可以用来观察+驱动信号, 但是速率大大受限(最高500ms的刷新率)
- 适用于驱动控制(低速)信号, 适用于观察状态指示(低速)信号
- JTAG-to-AXI Master
- 用来调试包含AXI奴端口的电路, 通过命令行来使用
- 可以驱动AXI总线, 发送/接受AXI的包(数据+命令)
- 主要用来验证电路的功能, 即AXI与内部电路的连接是否正确
2. Vivado是如何实现硬件调试的
最后简要介绍一下Vivado是如何利用上面的工具来实现硬件调试的。上面几种工具在FPGA上被称作Debug Core,我们在调试时插入合适的Debug Core,然后在综合的时候Vivado会自动插入一个叫做Debug Hub的模块。它的作用是连接JTAG (JTAG Boundary Scan, BSCAN)和Debug Cores (ILA/VIO/JTAG-to-AXI)。 这样在我们生成bitstream并烧到FPGA上之后,Vivado Hardware Manager可以通过JTAG来控制Debug Core并接受数据。下
当我们烧入bitstream并用Vivado Hardware Manager来连接我们的FPGA板时, Hardware Manager会首先用JTAG通信来扫描是否有Debug Hub, 然后Debug Hub会继续去扫描是否有Debug Core。
从时钟而言,JTAG的时钟用在JTAG和Debug Hub通信,Debug Hub的时钟用在Debug Hub和Debug Core之间的通信,而各个Debug Core的时钟则用在采样需要监测的信号。
3.参考文献
1. 本文后半部分内容来源于[FPGA硬件debug指南][1] - Vivado调试工具介绍 - 知乎 (zhihu.com)