FPGA线上课程平台|最全栈的FPGA学习平台|FPGA工程师认证培训
登录
首页-技术文章/快讯-技术分享-正文

Vivado 仿真工具高效使用指南:波形查看与断言实践

FPGA小白FPGA小白
技术分享
7小时前
0
0
2

Quick Start(快速上手)

  1. 创建 Vivado 工程并添加设计文件(RTL 和 Testbench)。
  2. 在 Sources 面板中右键点击 Testbench 文件,选择“Set as Top”。
  3. 点击 Flow Navigator 中的“Simulation” → “Run Simulation” → “Run Behavioral Simulation”。
  4. 仿真启动后,在 Vivado Simulator 窗口中观察波形,默认显示所有顶层信号。
  5. 在波形窗口中点击“Zoom Fit”图标(或按 Ctrl+Shift+F)查看完整波形。
  6. 添加需要观察的内部信号:在 Hierarchy 面板中选中模块,右键信号选择“Add to Wave Window”。
  7. 使用“Add Marker”工具(快捷键 M)标记关键时间点,测量信号延迟。
  8. 在 Tcl Console 中输入“run 10 us”运行指定时长,或点击“Run All”直到仿真结束。
  9. 验证信号行为:在波形中检查时钟边沿、数据变化是否与预期一致。
  10. 若使用断言,在 Tcl 中输入“report_assertions”查看断言结果。

前置条件与环境

项目推荐值说明替代方案
EDA 版本Vivado 2020.1 或更高版本部分断言功能需 2020+Vivado 2019.2(断言功能受限)
仿真器Vivado Simulator(xsim)内置,无需额外安装ModelSim/QuestaSim(需配置库)
操作系统Windows 10 64-bit 或 Linux(Ubuntu 18.04+)稳定运行Windows 7(需额外补丁)
设计语言Verilog / SystemVerilog波形查看相同,断言用 SVAVHDL(断言用 VHDL assert)
时钟/复位Testbench 中生成 100 MHz 时钟(周期 10 ns)其他频率需调整
仿真时间100 μs(1000 个时钟周期)验证基本功能更长时长取决于设计
约束文件仿真不需要 XDC仅综合实现需要
工程类型RTL Project标准流程I/O Planning 项目也可

目标与验收标准

  1. 功能点:能成功启动仿真,波形窗口显示所有信号变化。
  2. 性能指标:仿真运行 100 μs 无报错,波形无毛刺(如设计正确)。
  3. 资源:仿真不消耗 FPGA 资源,仅需 CPU 和内存。
  4. 验收方式

    实施步骤

    工程结构与 Testbench 编写

    1. 创建工程:File → New Project,指定名称和目录,添加 RTL 文件(如 counter.v)。
    2. 编写 Testbench:新建 Verilog 文件(如 tb_counter.v),包含时钟生成、复位、实例化 DUT。
    // tb_counter.v
    `timescale 1ns / 1ps
    module tb_counter;
        reg clk;
        reg rst_n;
        wire [3:0] count;
    
        counter uut (
            .clk(clk),
            .rst_n(rst_n),
            .count(count)
        );
    
        initial begin
            clk = 0;
            forever #5 clk = ~clk; // 10 ns 周期
        end
    
        initial begin
            rst_n = 0;
            #20 rst_n = 1;
            #1000 $finish;
        end
    endmodule

    注意`timescale 必须放在文件开头;时钟周期与仿真时间单位一致。

    波形查看技巧

    • 添加信号:在 Hierarchy 面板中,右键模块内的信号 → “Add to Wave Window”。
    • 分组显示:在波形窗口中选中多个信号,右键 → “Group” 或按 Ctrl+G。
    • 设置基数:右键信号 → “Radix” → 选择 Binary/Hex/Decimal。
    • 使用光标测量:在波形上点击放置光标,状态栏显示时间差。
    • 保存波形配置:File → Save Waveform Configuration as… 以便下次加载。

    常见坑:信号未显示时,检查是否在仿真运行后添加;若信号为 X,检查复位是否释放。

    断言(Assertion)使用

    SystemVerilog 断言(SVA)语法

    property check_count;
        @(posedge clk) disable iff (!rst_n) count < 4'd10;
    endproperty
    assert property (check_count) else $error("Count exceeded limit");
    • 添加断言:在 Testbench 或 RTL 中编写 assert 语句。建议放在 Testbench 中以便维护。
    • 运行断言:仿真自动执行,结果在 Tcl Console 中显示。输入“report_assertions”查看汇总。

    常见坑:断言中时钟必须与设计一致;disable iff 用于复位时禁用断言。

    验证结果

    项目数值条件
    仿真时长100 μs100 MHz 时钟,1000 个周期
    波形文件大小约 2 MB仅添加顶层和计数器信号
    断言通过率100%设计无违例
    仿真时间约 0.5 秒Intel i7-10700 CPU

    测量条件:Vivado 2021.1,Windows 10,工程仅含一个 4-bit 计数器。

    排障指南

    现象原因检查方法
    仿真无波形Testbench 未设置为 top在 Sources 中右键 Testbench 选择“Set as Top”
    波形全为 ZDUT 未实例化检查 Testbench 中是否有 uut 实例
    时钟不变化forever 循环错误检查时钟生成代码中的延迟值
    断言报告“Unknown”断言中使用了未定义的变量检查变量作用域
    仿真崩溃无限循环或 $stop 缺失检查 Testbench 中是否有 $finish
    信号显示为红色信号冲突(多驱动)检查 RTL 中是否有多个赋值
    波形窗口空白未运行仿真点击“Run All”或“Run for X time”
    断言不执行未启用断言Tcl 中输入“assertion on”
    波形中信号为 X复位未释放或未初始化检查 rst_n 是否在仿真开始后拉高
    仿真运行缓慢仿真时间步长过小或 $display 过多使用“run 1 ms”而非“run all”

    原理与设计说明

    Vivado Simulator 基于事件驱动,每次信号变化触发仿真事件。波形查看本质是记录信号的历史值,而断言则是在仿真过程中实时检查属性。使用断言可以自动化验证,减少人工波形检查时间。

    Trade-off:断言增加仿真开销(约 5-10% 时间),但能提升验证覆盖率。波形查看更直观,但大型设计时数据量巨大,建议只添加关键信号。

    扩展与下一步

    • 参数化 Testbench:使用 `defineparameter 设置时钟周期、仿真时长。
    • 自动化仿真脚本:使用 Tcl 脚本批量运行多个 Testbench。
    • 覆盖组(Covergroup):添加 SystemVerilog 覆盖组以测量功能覆盖率。
    • 跨平台仿真:迁移到 ModelSim/QuestaSim 以支持更复杂的断言。
    • 后仿真:综合后添加时序约束,进行门级仿真验证时序。

    参考与信息来源

    • Xilinx UG900: Vivado Design Suite User Guide: Logic Simulation
    • Xilinx UG949: Vivado Design Suite User Guide: Methodology
    • SystemVerilog IEEE 1800-2017 标准

    附录

    术语表

    • DUT:Design Under Test,待测设计。
    • SVA:SystemVerilog Assertion,SystemVerilog 断言。
    • Testbench:测试平台,用于生成激励并检查响应。
    • X:未知状态,通常由未初始化或冲突引起。

    检查清单

    • Testbench 包含 `timescale$finish
    • 时钟生成使用 foreveralways 块。
    • 断言使用 @(posedge clk) 同步。
    • 复位信号在仿真开始后释放。

    关键约束速查

    • 仿真时间单位`timescale 1ns / 1ps 表示精度 1 ps。
    • 时钟周期forever #5 clk = ~clk 产生 10 ns 周期。
    • 断言语法assert property (expr) else $error;
    标签:
    本文原创,作者:FPGA小白,其版权均为FPGA线上课程平台|最全栈的FPGA学习平台|FPGA工程师认证培训所有。
    如需转载,请注明出处:https://z.shaonianxue.cn/39198.html
    FPGA小白

    FPGA小白

    初级工程师
    成电国芯®的讲师哦,专业FPGA已有10年。
    33020.52W7.19W34.38W
    分享:
    成电国芯FPGA赛事课即将上线
    FPGA在通信系统中的同步时钟设计实战
    FPGA在通信系统中的同步时钟设计实战上一篇
    AI芯片与FPGA融合:边缘推理加速的设计与实践指南下一篇
    AI芯片与FPGA融合:边缘推理加速的设计与实践指南
    相关文章
    总数:822
    FPGA/数字IC验证与嵌入式软件工程师职业发展指南:薪资、技能与路径对比

    FPGA/数字IC验证与嵌入式软件工程师职业发展指南:薪资、技能与路径对比

    在集成电路与嵌入式系统领域,FPGA/数字IC设计验证工程师与嵌入式软件…
    技术分享
    9天前
    0
    0
    37
    0
    FPGA实现HDMI 2.0视频接口:TMDS编码与显示控制器设计

    FPGA实现HDMI 2.0视频接口:TMDS编码与显示控制器设计

    本技术文档详细阐述如何在FPGA上实现符合HDMI2.0标准的视频接口…
    技术分享
    15天前
    0
    0
    46
    0
    FPGA片上交互逻辑调试指南:VIO与ILA联合应用实践

    FPGA片上交互逻辑调试指南:VIO与ILA联合应用实践

    在FPGA开发中,复杂交互逻辑(如状态机握手、多模块协同、异步事件处理)…
    技术分享
    14天前
    0
    0
    36
    0
    评论表单游客 您好,欢迎参与讨论。
    加载中…
    评论列表
    总数:0
    FPGA线上课程平台|最全栈的FPGA学习平台|FPGA工程师认证培训
    没有相关内容