vivado中mark_debug和ila ip core对信号进行抓取

发布于:2025-06-23 ⋅ 阅读:(14) ⋅ 点赞:(0)


一、说明
1.使用mark debug的方式需要先综合然后进行抓取的信号的更新,不能直接生成比特文件,否则无法观察到信号;
2.使用ILA的话,例化之后直接生成比特文件,最后可以观察到信号;

二、关于ila的ip
1.直接例化ip;
2.将要分析的信号链接到ip的probe探针上即可;
3.直接生成bitstream,将程序下载到fpga即可进行信号逻辑分析。
4.使用ila的好处就是信号的分析的时钟域是确定的。

三、使用mark_debug进行信号抓取
1.使用mark_debug进行标记;有些信号可能被优化,还需要keep="true"双属性标记才行;
2.在综合后需要添加debug信号,并且要选择正确的时钟域,如果你不选择,时钟域是vivado随机分配的,可能存在时钟域不对;
3.需要保存debug标记到xdc文件中。

四、mark_debug标记容易出现的问题
1. 信号被优化掉 (信号不可见)
问题: 最常遇到的问题!标记的信号可能在综合(Synthesis)或实现(Implementation)阶段被优化工具移除(如常量传播、寄存器合并、未使用信号删除)。

原因与检查:

未驱动/未使用信号: 标记的信号在逻辑中未被实际使用或驱动。

局部变量/中间逻辑: 标记了过于“局部”的信号(如 for 循环内的变量、复杂表达式中间结果),这些信号可能在优化后被吸收到更高级逻辑中。

常量或可折叠逻辑: 标记了被优化器确定为常量或可简化逻辑的输出信号。

解决办法:
Verilog: (* mark_debug = "true", keep = "true" *) reg [7:0] my_signal;

2. 时钟域问题 (采样错误/数据混乱)
问题: ILA 核需要一个采样时钟。如果 mark_debug 信号位于与 ILA 采样时钟不同的时钟域,且未正确处理跨时钟域(CDC),则抓取的数据可能:

全是 X (不定态)。

出现亚稳态,数据值不正确或不稳定。

虽然看起来有值,但相对于 ILA 触发条件或期望时刻是错位的。

原因与检查:

ILA 采样时钟 (clk) 未连接到目标信号的源时钟域。

标记的信号本身就是跨时钟域信号,且 ILA 采样时钟与源或目的时钟都不同步。

解决方法:

明确指定 ILA 采样时钟: 在 setup_debug 向导或 write_debug_probes Tcl 命令中,确保为每个 mark_debug 信号所在的时钟域指定了正确的 ILA 采样时钟。Vivado 通常会自动关联,但需检查。

理解 ILA 的异步捕获: 现代 ILA 支持对慢速异步信号进行过采样(在 ILA 配置中设置 Input Pipe Stages)。这不能替代设计中的 CDC 同步器,但有助于捕获低频异步信号(如复位、使能)。

避免直接标记 CDC 路径: 尽量不要直接标记跨时钟域路径上的信号(如同步器的第一级寄存器输出)。优先标记源时钟域或目标时钟域内已稳定的信号。

检查 ILA 配置: 在生成的 ILA 核的 .xci 文件或 Debug Cores 报告中,确认采样时钟设置正确。

3.Debug Hub/Nexus 并配置连接出现问题
jtag的时钟频率Debug Hub的时钟频率倍率关系不对会造成抓信号失败。


网站公告

今日签到

点亮在社区的每一天
去签到