Vivado中Debug操作方式总结(ILA)

本文介绍了在Vivado中进行调试的三种方法:通过ILA IP核、网表标记及代码中Mark_debug。详细讲解了每种方法的具体操作步骤,包括信号的选择、采样深度设置等。

Vivado中提供了多种Debug的操作方式,下面就来总结一下:

方式一:代码中例化ILA IP核

在这里插入图片描述
需要探测多少个信号,信号的位宽是多少,直接选择即可:
在这里插入图片描述
下面界面可以选择探测信号宽度以及触发方式:
在这里插入图片描述

方式二:通过网表标记

综合后生成网表,在网表中设置Debug:Mark Debug
在这里插入图片描述
或者在综合后的原理图中Mark Debug,这和网表debug是一致的:
在这里插入图片描述
在标记Debug后,就等于选择了需要debug的信号,之后在综合设置里设置Debug参数即可:
在这里插入图片描述
选择需要Debug的信号,设置时钟域以及触发方式等:
在这里插入图片描述
选择采样深度:
在这里插入图片描述
之后,重新综合,实现生成bit流文件即可完成debug,准备上板子吧。

注意:有些信号能够Mark Debug,有些则不能,例如模块直接的输入信号不能:
在这里插入图片描述
它经过一个Buf之后就可以:
在这里插入图片描述
最后的输出也不能?
在这里插入图片描述

哎呀, 具体什么个原则我也不知道了,不如就直接在网表中试试吧,如果不行,就找类似的代替呗。

综合后,也许你说自己找不到原理图在哪里,那就看这里:
在这里插入图片描述
方式二已经很实用了吧,不用修改代码!

方式三:代码中Mark_debug

在这里插入图片描述
之后综合,再set up debug,之后的操作同方式二。

最后说一下,set up debug只会对通过在网表中添加的信号起作用,也即如果你之前通过例化ILA IP核已经添加了一些debug信号,那么在set up debug窗口中是不显示的。

通过ILA添加的debug信号和通过在网表中添加的debug信号属于不同的debug core,在调试窗口可以切换。即使都是通过网表添加的debug信号,由于是不同时间添加的以及设置问题也可能属于不同的debug core。

如果一些信号在网表中找不到,可能是被优化掉了,那么可以在代码里的信号前面加上keep标记以使信号避免被优化,如下所示:

(* KEEP="TRUE" *)     wire                     clk_125M;
<think>我们正在讨论Vivado中的调试设置。用户的问题集中在如何设置和使用Vivado的调试功能(setupdebug),包括具体步骤和参数配置。根据之前的对话,我们已经解释了为什么输入输出信号可调试(因为它们必须经过IBUF/OBUF才能被ILA访问)。现在用户希望了解具体的操作步骤。引用内容回顾:[^1]:提到在综合后通过"setupdebug"加入监视信号,但步骤繁琐,并提到有其他方式Debug放入Vivado。[^2]:提到Debug_hub时钟频率可以在xdc中修改,默认为300MHz,以及参考ug908手册。[^3]:描述了一个完整的Vivado工程流程,包括创建块设计、生成输出产品、创建顶层wrapper、综合实现、导出到SDK等,其中调试步骤应该是在生成比特流之前。因此,我们需要给出一个详细的步骤指南,包括如何标记调试信号(MarkDebug)、设置调试(SetUpDebug)以及关键参数配置。步骤分解:1.标记需要调试的信号(MarkDebug)2.运行综合(因为调试设置需要在综合后的网表上进行)3.打开调试设置向导(SetUpDebug)4.配置调试核(ILA)参数,包括采样深度、采样时钟、触发条件等5.完成实现并生成比特流6.硬件连接与调试同时,注意引用中的要点:-Debug_hub的时钟频率(默认为300MHz)可以在XDC约束文件中修改。-参考手册UG908。另外,用户之前的问题中提到了输入输出信号,所以我们在步骤中也要注意如何确保这些信号可调试(即通过IBUF/OBUF)。我们将按照以下结构回答:一、准备工作:在RTL中确保信号可访问二、标记调试信号(MarkDebug)三、运行综合四、设置调试(SetUpDebug)的详细步骤五、关键参数配置六、完成设计流程七、硬件调试最后,生成相关问题。</think>### Vivado中设置和使用调试功能的详细指南 #### 一、调试设置核心流程 1. **标记调试信号** ```tcl # 在Tcl控制台或约束文件中执行 set_property MARK_DEBUG true [get_nets {signal_name}] # 标记单个信号 set_property MARK_DEBUG true [get_nets -of [get_cells {instance_name}]] # 标记实例所有信号 ``` 2. **启动调试向导** - 综合完成后 → Flow Navigator → **SYNTHESIS** → **Set Up Debug** - 或右键综合设计 → **Set Up Debug** 3. **配置ILA参数** ```mermaid graph TD A[选择采样时钟] --> B[设置采样深度] B --> C[配置触发条件] C --> D[选择捕获模式] D --> E[设置存储资源] ``` 关键参数说明: - **采样深度**:决定捕获数据量,通常设置为1024-8192 - **采样时钟**:必须与信号同源或满足$f_{clk} \geq 2 \times f_{sig}$ - **触发位置**:预触发/中心触发/后触发模式选择 4. **调试时钟配置** ```tcl # 在XDC约束文件中修改Debug Hub时钟频率 set_property C_CLK_INPUT_FREQ_HZ 300000000 [get_debug_cores dbg_hub] ``` 默认300MHz,建议保持默认除非有特殊时序需求[^2] #### 二、调试信号处理技巧 1. **输入输出信号处理** - 必须通过IBUF/OBUF访问: ```verilog // 输入信号示例 IBUF ibuf_inst (.I(ext_input), .O(debuggable_sig)); ``` - 使用`DONT_TOUCH`保留关键路径: ```tcl set_property DONT_TOUCH true [get_cells ibuf_inst] ``` 2. **避免信号优化** - 方法1:添加寄存器层级 ```verilog (* keep = "true" *) reg debug_reg; // Verilog属性 ``` - 方法2:约束文件设置 ```tcl set_property KEEP true [get_nets {net_name}] ``` #### 三、硬件调试操作步骤 1. **生成并加载比特流** - 完成实现 → 生成比特流(.bit) - Open Hardware Manager → Open Target → Program Device 2. **触发条件设置** ```mermaid graph LR A[选择触发信号] --> B[设置比较器] B --> C[配置触发序列] C --> D[设置触发位置] ``` - 支持多级触发:最多16级条件组合 - 支持值/边沿/超时触发模式 3. **波形分析工具** - 快捷键操作: - `Ctrl+鼠标滚轮`:水平缩放 - `Shift+鼠标滚轮`:垂直缩放 - `F3`:查找信号 - 测量功能:右键波形 → Measure Time #### 四、高级调试技巧 1. **Zynq PS-PL联合调试** - 步骤: 1. 导出硬件到SDK/Vitis 2. 在SDK中创建应用工程 3. 同时连接JTAG和ILA核 ```mermaid graph TB SDK[SDK调试] -->|ELF文件| PS HW[Hardware Manager] -->|ILA| PL PS -->|AXI信号| PL ``` 2. **虚拟IO调试** - 无需ILA核,通过JTAG直接读写: ```tcl # 写入信号值 set_property PORT.vio_input 1 [get_hw_vios -of [get_hw_devices]] # 读取信号值 get_property PORT.vio_output [get_hw_vios -of [get_hw_devices]] ``` > **调试验证**:使用`report_debug_core`命令检查ILA连接状态,确保所有信号显示"Connected"[^1]。采样深度与资源消耗关系:$$ \text{资源占比} = \frac{\text{采样深度} \times \text{信号宽度}}{ \text{BRAM容量} } \times 100\% $$ #### 五、常见问题解决方案 | 问题现象 | 解决方法 | |---------|---------| | 信号未显示 | 1. 检查MARK_DEBUG属性<br>2. 确认未在综合中被优化 | | 采样数据错误 | 1. 提高采样时钟频率<br>2. 添加时序约束 | | ILA无法连接 | 1. 确认JTAG连接<br>2. 检查debug hub时钟 | 完整流程参考:创建工程 → 综合 → Set Up Debug → 实现 → 生成比特流 → 硬件调试[^3]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值