news 2026/4/29 19:42:23

5.【Verilog】Verilog 延迟模型

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
5.【Verilog】Verilog 延迟模型

第一步:分析与整理Verilog 延迟模型

1. 延迟模型的背景与目的

  • 功能仿真 vs 时序仿真:之前的仿真忽略延迟,只验证逻辑功能。实际电路中逻辑门和互连线都有延迟,必须检查设计是否满足时序约束。
  • 时序仿真:向元件或路径中加入实际延迟信息,通过仿真验证时序。
  • 静态时序分析(STA):另一种时序验证技术,不关心逻辑功能,只分析时序路径是否违例。速度快但忽略异步问题。
  • 推荐方法:STA + 时序仿真,两者互补。

2. 三种延迟模型

2.1 分布延迟(Distributed Delay)

  • 定义:将延迟分散到每个独立元件(门、线)上,不同路径延时不同。
  • Verilog 实现
    • 方法1:门级例化时直接指定延迟。
    • 方法2:使用assign #delay连续赋值语句。
  • 示例(4输入与门):
    // 门级例化 module and4(output out, input a, b, c, d); wire an1, an2; and #1 (an1, a, b); and #2 (an2, c, d); and #1.5 (out, an1, an2); endmodule // 连续赋值 module and4(output out, input a, b, c, d); wire an1, an2; assign #1 an1 = a & b; assign #2 an2 = c & d; assign #1.5 out = an1 & an2; endmodule
2.2 集总延迟(Lumped Delay)

  • 定义:将所有路径的累计延迟集中到最后一个门单元上。若不同路径延迟不同,则取最大值作为最终门单元的延迟。
  • Verilog 实现:中间门不加延迟,只在最后输出级门上加最大延迟。
  • 示例(将上述分布延迟改为集总):
    module and4(output out, input a, b, c, d); wire an1, an2; and (an1, a, b); and (an2, c, d); and #3.5 (out, an1, an2); // 取 (1+1.5=2.5) 与 (2+1.5=3.5) 的最大值 3.5 endmodule
2.3 路径延迟(Path Delay)

  • 定义:为每个输入引脚到每个输出引脚的所有路径单独指定延迟。
  • Verilog 实现:使用specify ... endspecify块。
  • 示例
    module and4(output out, input a, b, c, d); specify (a => out) = 2.5; (b => out) = 2.5; (c => out) = 3.5; (d => out) = 3.5; endspecify wire an1, an2; and (an1, a, b); and (an2, c, d); and (out, an1, an2); endmodule

3. 三种延迟模型比较

模型优点缺点适用场景
分布延迟直观,可描述不同单元不同延迟无法描述同一单元不同引脚的不同延迟,大型设计复杂小规模、教学
集总延迟简单,模型容易写精度低,无法区分不同路径延迟非常简单的估算
路径延迟精确,可描述引脚到引脚的延迟,模块内部变化不影响外部说明需要较多信息,但库文件已提供标准单元库、数据手册、大型设计

结论:大多数逻辑门单元库以路径延迟方式提供信息,设计者只需关注输入到输出引脚的延迟,无需关心内部实现。


第二步:费曼教学法 – 通俗讲解延迟模型

作为验证工程师。今天的话题是延迟模型—— 从“理想世界”走进“真实世界”的桥梁。我会先用生活比喻让你秒懂三种模型,然后告诉你在工作中到底怎么用。

一、为什么要有延迟模型?—— 告别“瞬间移动”

想象你是一个物流公司的调度员。之前你们做“功能仿真”,假设所有货物从仓库到客户是瞬间送达(零延迟)。这当然能验证“货物是否配对”,但实际运输需要时间——有的路近(短延迟),有的路远(长延迟)。如果你不加入时间信息,客户永远不知道几点能收到货。

时序仿真就是给每个货物运输加上时间戳,检查是否能在承诺时间内送到。
STA是另一种方法:不关心货物是什么,只计算所有路线的最长/最短时间,快速找出可能迟到的订单。

在实际芯片设计中,我们通常STA + 时序仿真结合使用。今天重点讲时序仿真中的三种延迟模型

二、三种延迟模型的“快递比喻”

1. 分布延迟 —— 每一段路都单独计时

你去寄一个包裹:从 A 到 B 需要 1 小时,B 到 C 需要 2 小时,C 到 D 需要 1.5 小时。你给每一段路分别标上时间。

Verilog 实现:每个门单独加#delay

优点:非常精细,可以模拟不同路径的不同延迟。
缺点:如果包裹要经过 100 个中转站,你就要写 100 个时间,累死人。

工作中什么时候用?
几乎不用。只有教学或极简小电路才会手写。

2. 集总延迟 —— 只算最后一棒的时间

你不管中间中转花多少时间,只算“从第一个网点到最后一个网点”的总时间,然后把这总时间贴在最后一个送货员身上。比如 A→B 1h,B→C 2h,C→D 1.5h,总时间 4.5h,你就告诉 D 点的送货员:“你的派送延迟是 4.5 小时”。

Verilog 实现:中间门不加延迟,只在最后输出门上加最大路径延迟

注意:如果有两条路径到达同一个输出门,一条总时间 2.5h,另一条 3.5h,你只能取最大的 3.5h。这会导致短路径的仿真结果过于悲观(明明可以早到,却被模拟成晚到)。

优点:模型简单,代码少。
缺点:不精确,可能掩盖短路径的时序问题(比如保持时间违例)。

工作中:基本不用,但理解它对理解时序分析有帮助。

3. 路径延迟 —— 每一条“起点→终点”路线分别给时间

你列出所有可能的起点和终点组合:

  • 从 A 到最终输出 → 2.5 小时
  • 从 B 到最终输出 → 2.5 小时
  • 从 C 到最终输出 → 3.5 小时
  • 从 D 到最终输出 → 3.5 小时

Verilog 实现specify块内用(input => output) = delay描述。

优点

  • 精确:每个输入引脚到输出引脚都有独立延迟。
  • 模块内逻辑改变(比如从与门改成与非门),只要输入输出延迟不变,上层调用者无需修改。
  • 标准单元库和数据手册通常都是这种格式。

缺点:需要较多描述,但标准单元库已经帮你写好了,你直接调用即可。

三、三种模型的代码对比(以 4 输入与门为例)

模型代码片段关键特征
分布延迟and #1 (an1, a, b); and #2 (an2, c, d); and #1.5 (out, an1, an2);每个门单独延时
集总延迟and (an1, a, b); and (an2, c, d); and #3.5 (out, an1, an2);只在最后门加最大值
路径延迟specify (a=>out)=2.5; (b=>out)=2.5; (c=>out)=3.5; (d=>out)=3.5; endspecifyspecify块内描述引脚到引脚

四、验证工程师的核心关注点

4.1 何时使用哪种模型?
  • 写 RTL 功能仿真:不加任何延迟(零延迟模型)。
  • 门级网表仿真(GLS):使用路径延迟,因为综合后的网表会反标标准单元库中的延迟信息(通常通过 SDF 文件)。
  • 自定义行为模型:如果需要模拟一个 IP 的输入输出延迟,可以手写specify块。
4.2 为什么路径延迟是主流?

因为标准单元库(如 TSMC 28nm)提供的 Verilog 模型内部就是specify块。例如一个 DFF 的模型:

specify (posedge CK => Q) = (0.12, 0.10); // 上升延迟0.12,下降0.10 (negedge CK => Q) = (0.11, 0.09); $setup(D, posedge CK, 0.05); $hold(posedge CK, D, 0.02); endspecify

这些数据由晶圆厂提供,你直接使用即可。

4.3 工作中如何学习与应用?

步骤1:理解概念,能读懂三种模型
你不必手写复杂的路径延迟,但必须能看懂标准单元库中的specify块。

步骤2:跑一次含 SDF 反标的门级仿真
典型流程:

vlog +delay_mode_path my_design.v gate_library.v vsim -sdfmax /top/inst = design.sdf testbench

观察波形中信号相对于时钟的延迟,理解$setup/$hold违例时的x传播。

步骤3:自己动手写一个简单模块的路径延迟
例如一个 2 输入与非门:

module nand2 (Y, A, B); output Y; input A, B; specify (A => Y) = 0.2; (B => Y) = 0.2; endspecify nand (Y, A, B); endmodule

然后在 testbench 中例化它,通过$display观察延迟效果。

步骤4:对比分布延迟与路径延迟的仿真差异
创建一个有两条路径的电路(例如两个与门汇聚到一个或门),对分布延迟和路径延迟分别仿真,观察一个输入变化到输出变化的时刻,加深理解。

五、常见误区和调试技巧

误区后果正确做法
在 RTL 中乱加#delay不可综合,且可能导致仿真与综合后网表行为不一致RTL 功能仿真用零延迟
以为集总延迟能完全代表路径延迟忽略短路径,可能掩盖保持时间违例门级仿真必须用路径延迟 + SDF
手写路径延迟时忘了写所有路径某些输入组合下输出可能不更新检查 specify 块是否覆盖所有 input→output 组合
specify内的延迟值超过时钟周期时序违例,但仿真可能不自动报错配合$setup/$hold系统任务做检查

一个真实案例
有一次我做门级仿真,发现一个计数器在时钟沿后很久才更新,导致下一级建立时间违例。打开标准单元库的 Verilog 模型,看到 DFF 的CK => Q路径延迟为 0.25ns,而我的时钟周期只有 2ns,看起来没问题。进一步检查发现,该 DFF 的复位引脚有特殊的恢复时间要求,而我没有在specify中检查$recovery。加上之后仿真立即报错,发现复位信号撤除时间离时钟沿太近。教训:路径延迟不只包含传播延迟,还包含时序检查(setup/hold/recovery等)。

六、总结

  • 延迟模型三种:分布(每段路)、集总(最后一段路)、路径(点到点)。
  • 工作中99%用的是路径延迟,而且你基本不会手写,而是使用标准单元库和 SDF。
  • 学习重点:读懂specify块的语法,理解 SDF 反标流程,能够调试时序违例。
  • 终极目标:当你看到波形上某个输出在时钟沿后很晚才变化,能够联想到“这可能是路径延迟太大,或者时序检查失败导致输出为 x”。

费曼收尾:延迟模型就像给电路装上“真实物理定律” —— 信号不能瞬间移动,每个门都有反应时间。掌握了它,你就从“功能验证”迈入了“时序验证”的大门。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/29 19:41:23

BepInEx 6.0.0架构演进与稳定性调优实战解析

BepInEx 6.0.0架构演进与稳定性调优实战解析 【免费下载链接】BepInEx Unity / XNA game patcher and plugin framework 项目地址: https://gitcode.com/GitHub_Trending/be/BepInEx 作为Unity游戏生态中广泛使用的插件扩展框架,BepInEx在6.0.0版本迭代中面临…

作者头像 李华
网站建设 2026/4/29 19:41:21

最大后验概率(MAP)在机器学习中的应用与实践

1. 最大后验概率(MAP)在机器学习中的核心价值在机器学习领域,参数估计是模型训练的基础环节。最大后验概率(Maximum a Posteriori,简称MAP)作为一种贝叶斯统计方法,为我们提供了一种融合先验知识…

作者头像 李华
网站建设 2026/4/29 19:39:23

Horos:开启免费医疗影像处理新时代的macOS专业工具

Horos:开启免费医疗影像处理新时代的macOS专业工具 【免费下载链接】horos Horos™ is a free, open source medical image viewer. The goal of the Horos Project is to develop a fully functional, 64-bit medical image viewer for OS X. Horos is based upon …

作者头像 李华
网站建设 2026/4/29 19:39:22

7个核心模块深度解析:Blazor完整项目架构与开发指南

7个核心模块深度解析:Blazor完整项目架构与开发指南 【免费下载链接】blazor Blazor moved to https://github.com/dotnet/aspnetcore 项目地址: https://gitcode.com/gh_mirrors/bl/blazor Blazor作为微软推出的革命性Web框架,让.NET开发者能够使…

作者头像 李华
网站建设 2026/4/29 19:38:04

告别手动配置!教你用STM32和机智云实现设备上电自联网与断网重连

STM32与机智云深度整合:打造零配置智能硬件连接方案 在智能硬件开发领域,设备联网的便捷性和稳定性直接影响用户体验。传统配网方式需要用户反复操作,而专业级产品需要实现"开箱即用"的体验。本文将深入解析如何基于STM32和机智云平…

作者头像 李华
网站建设 2026/4/29 19:37:47

告别快捷键混乱:机械革命笔记本玩转黑苹果,从键位修改到触控板平替的全套设置

机械革命笔记本黑苹果外设优化指南:从键位映射到触控板平替 当机械革命笔记本遇上黑苹果系统,外设适配往往成为用户体验的最大障碍。不同于原生Mac设备,Windows笔记本的键盘布局、触控板交互和鼠标滚轮方向都与macOS存在显著差异。本文将系统…

作者头像 李华