随着FPGA的逻辑越来越多,FPGA的调试也越来越复杂。复杂的逻辑设计每次综合、布局布线之后得出可执行文件的时间也越来越长。因此,FPGA研发工程师必须利用好每次综合出来的结果。所以,为了覆盖更多的疑点问题,FPGA工程师必须抓取更多的信号以获取尽量多的信息来进行分析。
目前,FPGA工程师抓取内部信号有两种:一种是把信号线引到测试接口上,利用逻辑分析仪或者示波器进行信号抓取;一种是利用FPGA内部调试器件JTAG来抓取所需要的信号。前面来说,利用专用仪器的抓取可以获取很深的数据长度,但是位宽有限,而且专用仪器价格也不便宜。后者利用FPGA内部JTAG调试器来抓取,可以抓取较多的信号,但是抓取数据量有限。但是,我们可以通过设置触发条件来抓取必要的数据进行分析,这样就可以降低抓取数据量的要求。
使用FPGA内部调试器JTAG抓取数据也有两种方法:一种是直接通过图形界面进行设置;另外一种是使用ip core例化必要的调试组件,然后把必要的信号连接到对应的ip core接口上。这两种方法的优缺点如下表所示。
表 1 调试系统优缺点
图形界面 |
直接调用ip core |
直观,能够直接看到信号 |
信号名只与ip core接口相关 |
随着信号数量增大资源消耗增大 |
随着信号数量增大资源消耗变化不大 |
不可以动态切换抓取信号 |
通过虚拟IO动态切换抓取信号 |
单一时钟 |
多个时钟 |
抓取信号可能优化而不见了 |
随意抓取信号,不会被优化 |
图形界面比较直观,例如在quartus中,工程综合结束直接点击”Signal Tap Logic Analyzer”通过图形化的界面抓取网表中对应的信号线。图形连接好抓取的信号之后,保存stp文件,quartus接着进行布局布线把对应的抓取信号的组件放进可执行文件中。最好,烧写FPGA可执行文件可以连接JTAG进行测试了。
这里着重聊一聊在quartus中使用ip core搭建调试系统的方法。同样的方法可以运用于Vivado等开发环境。首先我们会利用到两个重要的调试ip core。一个是” Signal Tap Logic Analyzer Intel FPGA IP” (类似于Xilinx的ILA),另外一个是“In System Sources and Probes Intel FPGA IP”(类似于Xilinx的VIO)。前者的作用是抓取信号线,后面的作用是通过JTAG可以修改FPGA内部的信号值。
” Signal Tap Logic Analyzer Intel FPGA IP”如图1所示。你可以通过该ip的图形界面设置需要抓取信号的位宽,存储深度,采取RAM存储还内部是逻辑等参数。在quartus中需要注意的是设置成RAM存储的时候有些器件不支持M9K,生成IP结束后要手动修改一下生成文件。注意还有两个重要的选项是”trigger in”和”trigger out”。这两个分别是本级的触发输入和触发输出。这个可以用作级联触发使用。例如我们例化了两个Signal-Tap的IP,那么第一个触发之后可以把触发信号传递到第二个IP。那么,这样处理的话可以带来很多的增益,比如增加抓取信号位宽。
图 1 Signal Tap Logic Analyzer Intel FPGA IP
“In System Sources and Probes Intel FPGA IP”如图2所示,只要两个信号:probe和source。Source的值可以通过JTAG进行修改。我们只要使用这些信号线作为选通开关,把FPGA内部的信号同选通接到Signa-Tap IP之上。为了不让quartus优化掉该IP,我们一般把source和probe连在一起。
图 2 In System Sources and Probes Intel FPGA IP
利用上面IP设计的系统可以表示成图3所示。多路信号debug_sig通过复用器选出希望观察的信号输入到Signal Tap Logic Analyzer之中。复用器的选择信号由In System Sources and Probes来通过JTAG设置。这里例化两个Signal Tap Logic Analyzer和一个In System Sources and Probes。In System Sources and Probes的source端口可以通过JTAG来配置。Signal Tap Logic Analyzer的trigger out进行OR操作之后输入到trigger in之中。这样的设计就可以进行Signal Tap Logic Analyzer之间进行触发处理。由于只例化有限的Signal Tap Logic Analyzer,因此资源消耗不大。每个Signal Tap Logic Analyzer运行在不同的时钟域之上,实现多时钟信号的抓取。
图 3 基于JTAG的FPGA调试系统
如下图4所示,通过JTAG可以修改source的信号值。右边设置完JTAG之后,可以点击source信号使其值发生翻转。如果要确认是否设置到FPGA之中,可以点击”Instance Manager”旁边的按钮读出信号值,右下角还可以看到波形。
图 4 通过probe修改信号线
编译完FPGA,产生可执行文件之后,点击FILE->CREATE/UPDATE->Create Signal Tap from Design Instance产生stp文件,直接保存就行。导出的stp文件如图5所示,quartus通过打开这个文件可以通过JTAG抓取希望的信号进行分析。
图 5 使用Signal-Tap抓取信号
参考文献
- https://www.intel.com/content/www/us/en/docs/programmable/683819/22-1/system-debugging-tools-overview.html
- https://www.intel.cn/content/www/cn/zh/docs/programmable/683834/20-1/debugging-pr-designs-with-the-logic-analyzer.html
- https://www.xilinx.com/products/intellectual-property/ila.html
- https://www.xilinx.com/products/intellectual-property/vio.html