读懂 DUT、Testbench 与软硬件分工

明确设计边界、激励、检查器与交互接口各自的职责。

先修知识能阅读简单 Verilog 模块。

适用环境通用 RTL 方法;具体工具与器件选项以项目版本为准

验证状态ready/valid 正常与故障变体已软件自检 · 软硬件迁移待设备验证

本文目录画出边界按行为划分,而非按文件划分建立检查闭环原理与信号关系动手步骤与预期结果典型故障:从现象到复测

画出边界

DUT 是被验证的设计。Testbench 产生输入、观察输出,并将行为与预期比较。把顶层连接画出来,标明时钟、复位、输入输出、存储器和外部模型。边界应能解释每一个进入 DUT 的信号由谁驱动。

按行为划分,而非按文件划分

可综合 RTL、文件读写、动态对象和延时激励可能位于同一个文件,但它们适合的执行位置不同。迁移时分别检查综合支持、运行时访问和跨边界通信。将每周期软件交互改成批量事务可能减少通信,但必须保持数据顺序和握手语义。

建立检查闭环

驱动器发出请求,监视器采集实际响应,参考模型计算预期,检查器比较两者。先用短确定性测试排除连接与复位问题,再加入随机测试。只看到波形有跳变,不能证明设计正确。

原理与信号关系

DUT 负责被验证的功能,Testbench 负责产生输入并判断结果。Driver 只在 valid 与 ready 同时为 1 的采样边沿把事务记为已发送;Monitor 必须独立观察实际握手,不能直接把 Driver 的计划当作 DUT 已接收的事实。Scoreboard 保存已接收输入对应的期望值,并与实际输出逐笔比较。软件模型、文件读写和随机激励通常留在主机侧;跨到硬件侧的应是边界清晰、可映射且通信开销可控的部分。

读懂 DUT、Testbench 与软硬件分工:关键关系Driver输入 valid / dataDUT寄存器 + 运算接收端 / Monitor实际输出握手Scoreboard期望队列比较posedge:仅 valid && ready 算一次传输背压 ready 返回上游;停顿期间 valid 与 data 必须保持
读懂 DUT、Testbench 与软硬件分工:关键关系(原创示意,非器件引脚图;窄屏可横向滑动)
一拍输出缓冲的握手判定(均为采样边沿之前的值)
out_validout_readyin_ready本拍含义
0任意1输出槽为空,可以接收输入
100背压:保持 valid 和 data
111旧数据被接受,可同时加载新输入

动手步骤与预期结果

按下面的顺序执行,每一步都留下可复核的证据。若当前步骤的预期条件未满足,先停在该阶段定位原因;不要继续累积后续错误。涉及工具、板卡或专用硬件的步骤,需要使用本工程实际版本和配置,示例数值不能直接替代设备规格。

  1. 下载本文 ready-valid 实验并解压

    预期与判定:目录包含 DUT、独立检查器、运行脚本;需要 Python 3、iverilog 和 vvp。无需商业工具。

  2. 执行 python3 run.py

    预期与判定:正常实现应打印 PASS,脚本还会运行故意损坏的实现,并确认检查器能捕捉故障。

  3. 观察输入与输出计数

    预期与判定:输入被接受时才入队,输出被接受时才出队;排空后计数相等且每个输出等于输入加一的 8 位结果。

  4. 改变背压节奏后重跑

    预期与判定:增大连续 ready=0 的区间;正确实现仍通过,不能以缩短测试或取消背压使故障版通过。

  5. 准备软硬件迁移边界

    预期与判定:记录时钟、复位、端口宽度、参数与事务语义;先迁移 DUT,保留同一个参考模型作为对照。

可综合单级缓冲核心,完整可运行版本见文末实验包;输入为 8 位,复位同步高有效。

SystemVerilog
assign in_ready = !out_valid || out_ready;
always @(posedge clk) begin
  if (rst) begin
    out_valid <= 1'b0;
    out_data <= 8'd0;
  end else if (in_ready) begin
    out_valid <= in_valid;
    if (in_valid) out_data <= in_data + 8'd1;
  end
end

典型故障:从现象到复测

下面的案例是为说明定位方法而构造的教学场景,不代表真实客户事故或本平台设备实测。实践时先确认现象与证据相符,再采用相应修复;若证据不同,应回到前一步缩小范围,避免把同一种表象都归因于同一个问题。

完成检查

  • 每个输入只有明确驱动源
  • 响应有可自动判定的检查器
  • 失败能记录 seed、输入及首个差异

延伸阅读与来源

本文为黄河电子原创教学说明。产品命令与支持范围请以实际安装版本的官方文档为准。

继续阅读

基础

如何选择软件仿真、硬件仿真与 FPGA 原型

从验证目标、可见性和工程投入出发,选择当前阶段的验证方法。

10 分钟
基础

时钟和复位为何决定验证结果

从采样边沿与初始状态理解设计启动过程。

10 分钟
基础

如何准备一个可复现的问题工程

用最少信息重现故障,让同事和 FAE 能够接手分析。

10 分钟