跳转至

ILA

进阶功能

本章节属于拓展功能,其主要目的是给大家一个做一个简单的进阶参考。进阶实验的目的是锻炼大家的自学能力。因此对本章节内容的答疑可能不会被接受。特此声明。

在一些较为复杂的硬件设计项目中,由于仿真较慢,可能会遇到在无法仿真的情况下出现错误需要调试的情况。这时 ILA(Integrated Logic Analyzer, 集成逻辑分析仪)在线调试自己的设计,抓取在实际运行时部分信号的波形。

在本节中,我们将介绍在项目中例化使用 ILA 的方法。

引入 IP 核

  1. 在 IP 目录中找到 ILA (Integrated Logic Analyzer), 双击开始配置 IP 核。

  2. 进行 ILA 的配置

    • Number Of Probes: 需要抓取的信号数量。
    • Sample Depth: 抓取深度,即抓取多少个周期的信号。
    • Number Of Comparators: 每个信号的比较逻辑门数量。这个我们会在后面讲触发的时候具体解释。

    剩下的配置不要更改。

    注意在 GUI 界面上配置的 ILA 最多只能够抓取 64 个信号。如要抓取更多信号,请自行学习 tcl 命令生成 ILA。但一般来讲 64 个信号已经相当够用了。

    同时也请注意,ILA 使用 BRAM 存储抓取的信号。由于 BRAM 资源有限,请不要设置过大的 depth,一般 1024 已经足够。

  3. 在后面的几页中,每页有若干信号,用来配置 ILA 每个探针的宽度,即要抓取的信号的位宽。

    一般我们会在设计中先例化 ILA 进行接线,再来到这里配置信号宽度。(注意项目中的 ip 核可以双击打开进行配置,但不能改名字)

信号和使用

ILA 的信号相当简单:

  • clk:时钟信号,输入,确定信号抓取的频率,一般与整个设计的时钟相同。
  • probe(x):输入,你要抓取的第 x 个信号

然而在使用 ILA 时,要确保该信号不会在综合或布线时被优化掉,因此需要在需要抓取的信号前加入 (* MARK_DEBUG = "TRUE" *)。一个例子如下:

(* MARK_DEBUG = "TRUE" *) wire[3:0] signal_a;
(* MARK_DEBUG = "TRUE" *) reg[3:0]  signal_b;

ila_0 ila(
  .clk(clk_i),
  .probe0(signal_a),
  .probe1(signal_b)
);

注意,在 module 中定义的 input, output, inout 信号不能抓取。

关于在云平台上 ILA 的使用方法,以及触发,我们将在后面的例子中进行说明。

更详细的说明和使用方法可以去 Xilinx 官方文档网站查看: ILA 文档


最后更新: 2022年11月14日
作者:Jiajie Chen (3.33%), cuibst (96.67%)