亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> VHDL

掌握 Xilinx Vivado:集成逻辑分析器 (ILA) 与虚拟输入/输出 (VIO) 调试

本教程将指导您使用 Xilinx Vivado 的 集成逻辑分析器 (ILA) 和 虚拟输入/输出 (VIO) 核对 VHDL 设计进行片上调试与监控。学完后,您将掌握如何插入探针、配置触发条件,并在无需外部设备的情况下精准捕获信号行为。

概述

文中将引用 Vivado 截图。点击图片可放大查看。 可使用侧边栏或移动端弹出导航快速跳转。

ILA 与 VIO

ILA IP 可让您实时探测 FPGA 内部信号,而 VIO IP 则允许从 Vivado 驱动内部信号。两者均免费、高度可配置,并能无缝集成到 Vivado 工作流中。

准备工作

  1. 一块 Xilinx FPGA 开发板
  2. Vivado Design Suite (2020.2 或更新版本)
  3. 基础 VHDL 知识

示例使用 Kintex‑7 KC705 评估套件,但步骤适用于任何现代 Xilinx FPGA。

下载示例工程

下载包含示例设计和 VHDL 文件的 ZIP 包。在 Vivado 中打开 ila_tutorial.xpr 即可查看设计,或继续阅读从头创建。

使用 Vivado 创建工程

启动 Vivado,在欢迎界面点击 Create Project。

掌握 Xilinx Vivado:集成逻辑分析器 (ILA) 与虚拟输入/输出 (VIO) 调试

按向导操作:工程命名为 ila_tutorial(不含空格),选择 RTL Project,添加源文件 counter.vhdl 和 counter_top.vhdl。勾选 Copy sources into project 并继续。

掌握 Xilinx Vivado:集成逻辑分析器 (ILA) 与虚拟输入/输出 (VIO) 调试

添加约束文件 top.xdc 并复制到工程中。根据您的开发板调整时钟和 LED 引脚,并设置正确的时钟周期。

掌握 Xilinx Vivado:集成逻辑分析器 (ILA) 与虚拟输入/输出 (VIO) 调试

从列表中选择您的开发板,点击 Finish 打开工程。

掌握 Xilinx Vivado:集成逻辑分析器 (ILA) 与虚拟输入/输出 (VIO) 调试

设计示例解析

示例由两个串联的 4 位计数器组成。counter.vhdl 实现一个计数器,在使能时递增,并在计数值 12 到 15 之间输出 1 位 trigger 信号。

掌握 Xilinx Vivado:集成逻辑分析器 (ILA) 与虚拟输入/输出 (VIO) 调试

实体声明:

 ---------------------------------------------------------------------------- -- ENTITY DECLARATION. ---------------------------------------------------------------------------- ENTITY counter IS PORT(clk : IN STD_LOGIC; -- 主时钟 reset : IN STD_LOGIC; -- 复位,高有效 enable : IN STD_LOGIC; -- 使能下一个计数器 trigger : OUT STD_LOGIC -- 触发下一个计数器 ); END ENTITY; 

内部信号:

属性用法(稍后解释):

 ATTRIBUTE MARK_DEBUG : STRING; ATTRIBUTE MARK_DEBUG OF count : SIGNAL IS "true"; 

时序逻辑:

 seq_proc: PROCESS (reset, clk) BEGIN -- for seq_proc IF (reset = '1') THEN count <= (OTHERS => '0'); trigger_o <= '0'; ELSIF rising_edge(clk) THEN IF (enable = '1') THEN count <= count + 1; IF (count > x"B" AND count <= x"F") THEN trigger_o <= '1'; ELSE trigger_o <= '0'; END IF; END IF; END IF; END PROCESS; 

counter_top.vhdl 实例化两个计数器。counter_1_inst 始终使能,其 trigger 输出作为 counter_2_inst 的时钟。因此,counter_2_inst 每 16 个周期仅递增 4 次。

掌握 Xilinx Vivado:集成逻辑分析器 (ILA) 与虚拟输入/输出 (VIO) 调试

创建用于复位的 VIO 核

我们将生成一个驱动设计 reset 输入的 VIO,以便从 Vivado 手动切换复位。

打开 IP Catalog,搜索 VIO,双击 VIO (Virtual Input/Output),重命名为 vio_reset。将 Input Probe Count 设为 0,Output Probe Count 设为 1。

掌握 Xilinx Vivado:集成逻辑分析器 (ILA) 与虚拟输入/输出 (VIO) 调试

配置输出探针:宽度 = 1,初始值 = 0x1,点击 OK 和 Generate。

掌握 Xilinx Vivado:集成逻辑分析器 (ILA) 与虚拟输入/输出 (VIO) 调试

综合后,在 counter_top.vhdl 中声明组件并实例化。重新综合前别忘了将 flatten_hierarchy 设为 None。

 COMPONENT vio_reset PORT( clk : IN STD_LOGIC; probe_out0 : OUT STD_LOGIC_VECTOR(0 DOWNTO 0) ); END COMPONENT; 

插入调试探针

可通过三种方法探测信号:

  1. 从 VHDL 源码(通过 MARK_DEBUG 属性)。
  2. 从网表或原理图(右键 Mark Debug)。
  3. 从 XDC/TCL 文件(本文不涉及)。

从 VHDL 文件插入

每个文件声明一次 MARK_DEBUG 属性,然后应用到目标信号:

 ATTRIBUTE MARK_DEBUG : STRING; ATTRIBUTE MARK_DEBUG OF count : SIGNAL IS "true"; 

综合后,count 将出现在 Unassigned Debug Nets 下,带有虫子图标。

掌握 Xilinx Vivado:集成逻辑分析器 (ILA) 与虚拟输入/输出 (VIO) 调试

从网表插入

导航至 Netlist 或 Schematic,定位 trigger 网络,右键选择 Mark Debug,对两个计数器均操作一次。

掌握 Xilinx Vivado:集成逻辑分析器 (ILA) 与虚拟输入/输出 (VIO) 调试 掌握 Xilinx Vivado:集成逻辑分析器 (ILA) 与虚拟输入/输出 (VIO) 调试

创建 ILA 调试核

从 IP Catalog 打开 Set Up Debug。Vivado 会列出所有调试网络及其时钟域。本教程保留全部四个信号。

掌握 Xilinx Vivado:集成逻辑分析器 (ILA) 与虚拟输入/输出 (VIO) 调试

配置 ILA FIFO 深度(1024 足矣)并启用 Capture control。完成向导;Vivado 将生成 ILA 核和一个约束文件。

掌握 Xilinx Vivado:集成逻辑分析器 (ILA) 与虚拟输入/输出 (VIO) 调试

将约束另存为 ila_core.xdc。该文件应用调试属性、创建 ILA 核、配置各探针,并实例化一个连接核与 Vivado 的 dbg_hub。将 hub 的时钟频率更新为设计频率。

掌握 Xilinx Vivado:集成逻辑分析器 (ILA) 与虚拟输入/输出 (VIO) 调试

重新综合、实现并生成比特流。打开 Hardware Manager,自动连接,编程器件并加载 .ltx 探针文件。

掌握 Xilinx Vivado:集成逻辑分析器 (ILA) 与虚拟输入/输出 (VIO) 调试

配置 ILA 触发条件

编程完成后 ILA 仪表板出现。启用 VIO 选项卡并移除不需要的窗口。将 reset 探针添加到 VIO,以便捕获期间切换复位。

掌握 Xilinx Vivado:集成逻辑分析器 (ILA) 与虚拟输入/输出 (VIO) 调试

在 counter_1_inst/trigger 上设置上升沿触发,并设置 32 采样的前触发窗口。

掌握 Xilinx Vivado:集成逻辑分析器 (ILA) 与虚拟输入/输出 (VIO) 调试

单触发运行 ILA

武装触发(状态变为 waiting for trigger),将 reset 切换为 0。触发触发后,ILA 记录事件前 32 个采样,并持续直到 FIFO 满。

掌握 Xilinx Vivado:集成逻辑分析器 (ILA) 与虚拟输入/输出 (VIO) 调试

缩放波形可观察 counter_2_inst 的行为。

掌握 Xilinx Vivado:集成逻辑分析器 (ILA) 与虚拟输入/输出 (VIO) 调试

多触发运行 ILA

复杂场景可串联多个触发。例如:当 counter_1_inst/count == 9 且 counter_2_inst/count > 2 时触发,将 FIFO 分为四个窗口。

掌握 Xilinx Vivado:集成逻辑分析器 (ILA) 与虚拟输入/输出 (VIO) 调试

自动重触发模式

启用 Auto re‑trigger 可捕获偶发或高频事件。配置单触发、设置 FIFO 深度并武装核。

掌握 Xilinx Vivado:集成逻辑分析器 (ILA) 与虚拟输入/输出 (VIO) 调试

捕获模式

捕获模式仅记录满足全局条件的采样。例如:当 counter_1_inst/trigger == 1 且 counter_2_inst/trigger == 0 同时成立时捕获。

掌握 Xilinx Vivado:集成逻辑分析器 (ILA) 与虚拟输入/输出 (VIO) 调试

总结

ILA 和 VIO 是强大且免费的片上调试工具。善用探针、多触发和捕获模式,即可直接在 Vivado 中精准监控和控制复杂 FPGA 设计。

VHDL

  1. 树莓派与 Python 构建远程温度传感器:分步实战指南
  2. RightHand Robotics与Element Logic联手推出集成式机器人分拣系统
  3. 集成电路:数字逻辑门基础
  4. 拓展云疆界:新可用区、容器与多云策略
  5. C# 基础:输入输出核心技巧完全指南
  6. 掌握 C++ 输入输出:cin/cou 完整实战指南
  7. C 语言输入输出(I/O)精通:scanf() 与 printf() 详解
  8. C 语言输入输出完全掌握:标准 I/O 与格式化控制
  9. 精通VHDL与Verilog:编写整洁组合与时序逻辑
  10. 掌握 D 锁存器:设计、工作原理与关键差异
  11. 精通Python输入输出与模块导入:实战指南
  12. 精通 Java 输入输出:打印、读取与格式化数据