vivado调试核ILA使用技巧

  ILA(Integrated Logic Analyzer)IP Core 是 vivado 的调试核,具体如何创建、调用就不详说了。这里主要记录一个 ILA 的使用技巧,可以大大提高调试效率。

  在 Program Device 后,如果添加了 ILA 核,则会出现以下的调试界面

vivado调试核ILA使用技巧_第1张图片

在界面右下方的 Trigger 界面,可以设置触发点,‘+’、‘-’ 分别可以增加、删除触发信号,当满足触发条件时,ILA 会将触发点前后一段的数据抓取并显示。

  默认情况下,对于深度为 Length 的 ILA 核,触发点会在 Length/2 处,前后分别抓取 Length/2 个数据,这对于大部分的时序分析已经足够了。

  然而对于一些变化缓慢的信号,Quartus 中的 Signal Tap 可以使用对应的缓慢时钟取抓取,但在 vivado 中 ILA 时钟必须是自由时钟(即外接晶振的时钟)或者由 PLL IP 输出的时钟(PLL 最低可以输出 5M),而不能使用用户计数分频产生的衍生时钟。这样一来,如何抓取缓变信号(例如以 UART 传输的数据报的内容),就成为一个问题。

  所以重点来了(敲黑板),在 ILA 调试界面的左下 Settings 窗口中,如下图

vivado调试核ILA使用技巧_第2张图片

可以看到几个设置项,Number of windows 项是设置采样窗口的数量(比如这里设为 10 个窗口),Window data depth 设置每个采样窗口的长度(我这里设为了 512),Trigger position in window 是设置在每个窗口中触发点的位置(比如我这里设为 255,对应第 256 个采样点(这个值是从 0 开始的)),则在运行一次 ILA 抓取后,可以看到生成了 10 个黑灰相间的窗口,每个窗口长 512,每个窗口中的触发点(T 红色竖线)都位于当前窗口的第 256 个采样点处。

  如此,抓取缓变信号就很简单了,比如要抓取 UART 传输的数据报内容,就可以把 UART_rx_done 信号作为触发信号,然后设置合适的采样窗口数和窗长,监控 UART_rddat[7:0],这样在执行一次 ILA 后,就可以获得整个报文的字节内容了。

你可能感兴趣的:(数字逻辑,fpga开发)