ILA即Vivado的integrated logic analyzer
Reference
ug908(chapter 10, chapter)
ILA:集成逻辑分析仪,相当于一个放在FPGA内部的示波器,但是只能看。
VIO:能看也能灌入数据,实时驱动FPGA。这个东西只能在RTL代码当中实现,所以需要实现考虑好要驱动什么线。他的IP核在Debug category目录下。
IBERT:集成式误码率分析仪,可以用于系统内的串行I/O验证和调试。
JTAG-to-AXI Master:用来产生AXI通讯信息以便debug各种AXI协议设备。
Vivado把debugging flow分成三个过程,或者叫三个phase
今天只关注第一阶段。一般情况下,添加debug IP的方式有两种,第一种是在HDL代码当中手动添加(设置mark_debug
自动添加),另一种是在post-synthesis的netlist当中自动添加(使用synthesis之后的set up debug
向导自动添加),或者通过添加约束文件,在约束文件当中设置ILA(page 106)。(请不要以为这两者是互相补充的关系,实际上两者是相互独立的两种方法。)
在添加之前先保存一下constraints和project确保内存当中的constraints和memory当中的constraints内容一致,然后再tcl里面输一下refresh_design
(注:refresh_design
会重新从硬盘上的原始文件读取数据,这可能会覆盖存储在内存当中没有保存的任何修改;保存memory当中的constraints可以使用save_constraints
命令,他会把内存当中任何对当前约束文件的修改保存到硬盘上。)。
Set up debug
在Tools->Set up debug
或者在Flow Navigator的Synthesis选项下的Synthesis Design->Set up debug。具体步骤参考ug908(v2016.4), page 95, chapter 9的内容。这里只是做一个简单的记录。
Nets to Debug
窗口添加要debug的网表的时候,一个单独的时钟域clock domain对应着一个ILA实例化模块,当有多个时钟域的时候每个时钟域都会对应着一个单独的ILA实例化模块,所以监控的时钟域越多,生成的ILA实例化模块的数量就越多,占用的资源也就会越多。Set up debug
建立debug core之后,会多出一个debug窗口,在这个窗口当中可以新建debug core实体,或者修改debug core实体的属性。data
,trigger
或者data and trigger
。当被配置有trigger属性的时候数据将可以被用来作为配置的出发选项或者用来被设置某个指定情况下捕捉,而且此时不占用板子的BRAM空间,但是此时没办法在Waveform窗口显示波形。被配置为data类型的时候优势和缺点则反过来。通过Set up debug
工具设置了需要进行调试的Nets之后可以使用Debug窗口进一步设置。首先一个最明显的变化在Debug窗口会出现若干个ila实例化模块。
不论是通过哪种添加了ILA Core。都会造成Memory当中的Constraints的变动,所以需要将在Memory当中的constraints保存到target才算完成。
唉,总是遇到说constraints读了好多次的错误,好气。明明试过好多次了。
对ILA核的配置对整体的设计时序的收敛特性有一定的影响,一下有一些这方面的建议(ug908,page120):
谨慎选择probe width。这个probe width的宽度越大,对FPGA整体设计的资源和时序占用就越大;
谨慎选择ILA core data depth参数,这个值越大对block RAM的资源占用就越高对整体时序的影响也就越大;
确保驱动ILA核心的时钟是free-running的时钟(没有时钟使能,不可中断)否则可能导致显示结果失败;
在加上debug cores之前应该确保时序已经收敛;一般不要使用ILA来调试时序问题;
如果由于添加了ILA模块导致时序表现恶化,可以遵循以下步骤(参见ug908,page120)
ILA有一种分类叫做System ILA IP,用这个东西可以实现对Post-implemented的设计进行分析和调试(参见ug908-page170)。按照ug908这个说明,system ila应该放到ip block design里面才对。
System ILA debug可以直连AXI协议。连上AXI协议接口线之后,Waveform的窗口会显示每个接口的连线信号,事件。如果有不止一个AXI连到一个ILA上面,各个AXI会以几个不同的slot展现出来。每个slot都会显示各个AXI接线上相关的Read,Write,Address events和Data channel evets。
AXI Channel Events那个组(一般有XXX channel Events和XXX Channel Signal)一般情况下会显示AXI Read Address, Read Data, Write Address或者Write Data的事件。这几种时间有几种不同的响应方式,以Read Address为例,在ILA当中会有两组信号与Read Address的检测对应,一组是Read Address Event,另一组是Read Address Channel Signal Group。
原文:https://www.cnblogs.com/lafiizh/p/11342070.html