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

深入理解 Verilog 门延迟:精准时序助力可靠数字设计

数字元件是二值实体,只能保持 0 或 1。然而 0→1 和 1→0 的转换存在过渡延迟,每个门元件将输入值传播到输出也需要时间。

例如,两输入与门需在两输入均为 1 时将输出切换为 1,任一输入变 0 时切换回 0。这些门及引脚间延迟可在实例化逻辑基本单元时指定。

上升、下降与关断延迟

门输出从某值变为 1 所需时间称为上升延迟;从某值变为 0 称为下降延迟;从某值变为高阻态称为关断延迟。

这些延迟实际上适用于任何信号,因为实际电路中所有信号都可能随时上升或下降,不限于门输出。有三种方式表示门延迟,双延迟格式适用于输出不转高阻的大多数基本单元。例如三延迟格式不能用于与门,因为其输出对任何输入组合都不会变为 Z。

 // 单延迟:用于三种转换延迟 or #(<delay>) o1 (out, a, b); // 双延迟:用于上升和下降转换 or #(<rise>, <fall>) o1 (out, a, b); // 三延迟:用于上升、下降和关断转换 or #(<rise>, <fall>, <turn_off>) o1 (out, a, b); 

若仅指定单个延迟,三种延迟均使用该值。若指定两个延迟,第一个代表上升,第二个代表下降。若指定三个,分别代表上升、下降和关断延迟。

单延迟格式

 module des ( input a, b, output out1, out2); // 与门延迟 2 时间单位 and #(2) o1 (out1, a, b); // bufif0 门延迟 3 时间单位 bufif0 #(3) b1 (out2, a, b); endmodule 
 module tb; reg a, b; wire out1, out2; des d0 (.out1(out1), .out2(out2), .a(a), .b(b)); initial begin {a, b} <= 0; $monitor ("T=%0t a=%0b b=%0b and=%0b bufif0=%0b", $time, a, b, out1, out2); #10 a <= 1; #10 b <= 1; #10 a <= 0; #10 b <= 0; end endmodule 

可见与门输出在输入变化后 2 个时间单位改变。例如 b 在 a 已为 1 时于 T=20 变 1,输出直到 T=22 才变 1。同理 a 在 T=30 回 0,输出在 T=32 更新。

bufif0 指定 3 时间单位门延迟,故当 a 已为 1 时 b 从 0 变 1,输出经 3 个时间单位在 T=23 更新为 Z。

仿真日志

 ncsim> run T=0 a=0 b=0 and=x bufif0=x T=2 a=0 b=0 and=0 bufif0=x T=3 a=0 b=0 and=0 bufif0=0 T=10 a=1 b=0 and=0 bufif0=0 T=13 a=1 b=0 and=0 bufif0=1 T=20 a=1 b=1 and=0 bufif0=1 T=22 a=1 b=1 and=1 bufif0=1 T=23 a=1 b=1 and=1 bufif0=z T=30 a=0 b=1 and=1 bufif0=z T=32 a=0 b=1 and=0 bufif0=z T=40 a=0 b=0 and=0 bufif0=z T=43 a=0 b=0 and=0 bufif0=0 ncsim: *W,RNQUIE: Simulation is complete. 

双延迟格式

将上述测试平台应用于显式指定上升/下降延迟的模型:

 module des ( input a, b, output out1, out2); and #(2, 3) o1 (out1, a, b); bufif0 #(4, 5) b1 (out2, a, b); endmodule 

仿真日志

 ncsim> run T=0 a=0 b=0 and=x bufif0=x T=3 a=0 b=0 and=0 bufif0=x T=5 a=0 b=0 and=0 bufif0=0 T=10 a=1 b=0 and=0 bufif0=0 T=14 a=1 b=0 and=0 bufif0=1 T=20 a=1 b=1 and=0 bufif0=1 T=22 a=1 b=1 and=1 bufif0=1 T=24 a=1 b=1 and=1 bufif0=z T=30 a=0 b=1 and=1 bufif0=z T=33 a=0 b=1 and=0 bufif0=z T=40 a=0 b=0 and=0 bufif0=z T=45 a=0 b=0 and=0 bufif0=0 ncsim: *W,RNQUIE: Simulation is complete. 

三延迟格式

 module des ( input a, b, output out1, out2); and #(2, 3) o1 (out1, a, b); bufif0 #(5, 6, 7) b1 (out2, a, b); endmodule 

仿真日志

 ncsim> run T=0 a=0 b=0 and=x bufif0=x T=3 a=0 b=0 and=0 bufif0=x T=6 a=0 b=0 and=0 bufif0=0 T=10 a=1 b=0 and=0 bufif0=0 T=15 a=1 b=0 and=0 bufif0=1 T=20 a=1 b=1 and=0 bufif0=1 T=22 a=1 b=1 and=1 bufif0=1 T=27 a=1 b=1 and=1 bufif0=z T=30 a=0 b=1 and=1 bufif0=z T=33 a=0 b=1 and=0 bufif0=z T=40 a=0 b=0 and=0 bufif0=z T=46 a=0 b=0 and=0 bufif0=0 ncsim: *W,RNQUIE: Simulation is complete. 

最小/典型/最大延迟

芯片不同区域、不同温度等工艺变化导致延迟不一。Verilog 为上述每种延迟类型提供最小、典型、最大三个值控制。每个数字门和晶体管单元基于工艺节点都有最小/典型/最大延迟,通常由晶圆厂库提供。

对每种延迟类型——上升、下降、关断——可分别指定 min、typ、max 三值。

 module des ( input a, b, output out1, out2); and #(2:3:4, 3:4:5) o1 (out1, a, b); bufif0 #(5:6:7, 6:7:8, 7:8:9) b1 (out2, a, b); endmodule 

仿真日志

 ncsim> run T=0 a=0 b=0 and=x bufif0=x T=4 a=0 b=0 and=0 bufif0=x T=7 a=0 b=0 and=0 bufif0=0 T=10 a=1 b=0 and=0 bufif0=0 T=16 a=1 b=0 and=0 bufif0=1 T=20 a=1 b=1 and=0 bufif0=1 T=23 a=1 b=1 and=1 bufif0=1 T=28 a=1 b=1 and=1 bufif0=z T=30 a=0 b=1 and=1 bufif0=z T=34 a=0 b=1 and=0 bufif0=z T=40 a=0 b=0 and=0 bufif0=z T=47 a=0 b=0 and=0 bufif0=0 ncsim: *W,RNQUIE: Simulation is complete. 

Verilog

  1. Verilog 入门:数字电路设计完整教程
  2. 掌握 Verilog 拼接操作:实用指南
  3. 深入理解 Verilog 赋值语句:类型、语法与最佳实践
  4. Verilog阻塞与非阻塞赋值:关键区别详解
  5. 理解Verilog延时控制:时序技术与最佳实践
  6. 深入理解 Verilog 中的赋值间延迟与赋值内延迟
  7. Verilog 门级建模:从硬件原理图到代码的桥梁
  8. Verilog 门级设计实战:与/或/非门与 2x1 多路选择器
  9. Verilog 时钟发生器设计与实现指南
  10. 掌握 Verilog 数学函数:高效硬件设计的利器
  11. 掌握 Verilog $timeformat:精度控制与显示格式化
  12. 理解与打印 Verilog 任意作用域下的 Timescale