Verilog 仿真事件中的延时分析

目录

  • Verilog 仿真事件中的延时分析
    • 1. 电路的延时
    • 2. Verilog 中的时序模型
    • 3. Verilog 中的仿真延迟语句
    • 4. 在 Verilog 建模中增加延时
    • 5. 总结

1. 电路的延时

在实际电路中存在两种延迟,惯性延迟 (Inertial delay) 和传导延迟 (Transport delay)

  • 惯性延迟
    定义:若元件的输入信号的脉冲宽度小于一定值时,元件的输出没有响应,也就是说元件具有一定的惯性。
    产生原因:当脉冲到达时,由于脉冲宽度小于元件本身的延迟,当脉冲结束时,元件的新输出还未建立起来。考虑了电路中存在的大量分布电容。
  • 传导延迟
    定义:输入信号变化到对应输出信号变化经过的时间,类似于物理传输线的延迟。
    产生原因:载流子运动的速度有限,通过导线需要一定的时间。

2. Verilog 中的时序模型

在分析 Verilog HDL 的仿真行为前,我们需要了解 Verilog 中时序模型。
时序模型分为:门级时序模型、过程时序模型。

  • 门级时序模型
    适用范围:所有的连续赋值语句、过程连续赋值语句、门原语、用户自定义原语。
    特点:
    任意时刻输入发生变化,将重新计算输出。
    当之前的的事件未执行完毕时又发生的新的变化,则会撤销之前的事件,开始新的事件。
  • 过程时序模型
    适用范围:过程语句。
    特点:
    当敏感列表发生变化时触发执行。
    当之前的的事件未执行完毕时又发生的新的变化,则不撤销原有事件,同时开始新的事件,如果同时有几个更新事件,它们的执行顺序是不确定的。

3. Verilog 中的仿真延迟语句

Verilog 中的仿真延时语句为 #n,n 表示延时时间,将该语句加在语句中,延迟 n 个时间单位。
延时的添加方法有两种:正规延迟和内定延迟

  • 正规延迟 (#在外面)
    #5 C = A +B
    在 T 时刻执行到该语句时,等待 5 个时间单位,然后计算等号右边的值赋给 C,此时使用的 A B 的值是 T+5 时刻的值。

  • 内定延迟 (#在里面)
    C = #5 A +B
    在 T 时刻执行到该语句时,先计算 A+B 的值,计算后等待 5 个时间单位将值赋给 C,使用的 A B 的值是 T 时刻的值。

4. 在 Verilog 建模中增加延时

两种延时的添加方式和三种赋值方式 (连续赋值、阻塞赋值、非阻塞赋值) 一共形成六中添加延迟的方式。

// 1. 连续赋值+ 正规延迟
assign #5 C = A +B;// 2. 连续赋值+ 内定延迟
assign C = #5 A +B;// 3. 阻塞赋值 + 正规延迟
always @(*) begin#5 C = A +B;
end// 4. 阻塞赋值 + 内定延迟
always @(*) beginC = #5 A +B;
end// 5. 非阻塞赋值 + 正规延迟
always @(*) begin#5 C <= A +B;
end// 6. 非阻塞赋值 + 内定延迟
always @(*) beginC <= #5 A +B;
end

下面对这六种方式逐一分析:

  1. 连续赋值+ 正规延迟
    在 T 时刻执行到该语句时,等待 5 个时间单位,然后计算等号右边的值赋给 C1。
    使用的 A B 的值是 T+5 时刻的值。
    若在等待过程中 A B 的值发生变化再次触发 assign block,根据 assign block 的门级时序模型特点,仿真器会撤销先前的等待事件,然后重新执行语句。
    当变化脉冲小于 5 个时间单位时,等待事件会被撤销,该脉冲将不起作用。
    仿真结果:

    可以看出在 6ns、8ns、9ns、10ns 时刻 A 发生了变化,但皆因持续时间小于 5ns,所以都没有对 C1 产生影响,只有在 12ns 和 18ns 的变化持续时间超过 5ns,作用到 C1 上。

  2. 连续赋值+ 内定延迟
    在 T 时刻执行到该语句时,计算等号右边的值,等待 5 个时间单位后赋给 C2。
    使用的 A B 的值是 T 时刻的值。
    若在等待过程中 A B 的值发生变化再次触发 assign block,根据 assign block 的门级时序模型特点,仿真器会撤销先前的等待事件,然后重新执行语句。
    当变化脉冲小于 5 个时间单位时,等待事件会被撤销,该脉冲将不起作用。
    该种方式有记忆属性,与连续赋值原则不符,为非法语句,编译不能通过。

  3. 阻塞赋值 + 正规延迟
    在 T 时刻执行到该语句时,等待 5 个时间单位,然后计算等号右边的值阻塞赋给 C3。
    使用的 A B 的值是 T+5 时刻的值。
    若在等待过程中 A B 的值发生变化再次触发 always block,根据 always block 的过程时序模型特点,此时还在等待过程,always 语句还未执行结束,不会开始新一轮的事件,仿真器不会对敏感列表反应。
    仿真器忽略延迟时间段的数据变化。
    仿真结果:

    在 6ns 时刻 A 的值发生变化,always block 开始执行,经过 5ns,用 11ns 时刻的 A B 的值计算出结果赋给 C3,而忽略了 8ns 和 10ns 时刻的变化。

  4. 阻塞赋值 + 内定延迟
    在 T 时刻执行到该语句时,计算等号右边的值,等待 5 个时间单位后赋给 C4。
    使用的 A B 的值是 T 时刻的值。
    若在等待过程中 A B 的值发生变化再次触发 always block,根据 always block 的过程时序模型特点,由于赋值方式为阻塞赋值,此时 always 语句还未执行结束,不会开始新一轮的事件,仿真器不会对敏感列表反应。
    仿真器忽略延迟时间段的数据变化。
    仿真结果:

    在 6ns 时刻 A 的值发生变化,always block 开始执行,经过 5ns,用 6ns 时刻的 A B 的变化后的值计算出结果赋给 C4,而忽略了 8ns 和 10ns 时刻的变化。

  5. 非阻塞赋值 + 正规延迟
    在 T 时刻执行到该语句时,等待 5 个时间单位,然后计算等号右边的值非阻塞赋给 C5。
    使用的 A B 的值是 T+5 时刻的值。
    若在等待过程中 A B 的值发生变化再次触发 always block,根据 always block 的过程时序模型特点,此时还在等待过程,always 语句还未执行结束,不会开始新一轮的事件,仿真器不会对敏感列表反应。
    仿真器忽略延迟时间段的数据变化。
    仿真结果:

    在 6ns 时刻 A 的值发生变化,always block 开始执行,经过 5ns,用 11ns 时刻的 A B 的值计算出结果赋给 C5,而忽略了 8ns 和 10ns 时刻的变化。

  6. 非阻塞赋值 + 内定延迟
    在 T 时刻执行到该语句时,计算等号右边的值,等待 5 个时间单位后赋给 C6。
    使用的 A B 的值是 T 时刻的值。
    若在等待过程中 A B 的值发生变化再次触发 always block,根据 always block 的过程时序模型特点,由于赋值方式为非阻塞赋值,将赋值事件放进事件队列后,always 语句执行结束,等待下一次的触发,触发来到时开始新一轮的事件。
    仿真器接受延迟时间段的数据变化,输入的变化延迟会全部反应在输出上。
    仿真结果:

    A B 的每一次变化都触发 always block 的执行,每一次变化都延时 5ns 后反应在 C6 上。

下图为 always block 中的四种延时方式的仿真流程:

// 仿真源码
`timescale 1ns/1ps
module Testbench;
reg A,B;
wire C1,C2;
reg C3,C4,C5,C6;initial beginA = 0; B = 0;C3 = 0; C4 = 0; C5 = 0; C6 = 0;#6 A = 1;#2 A = 0;#1 A = 1;#1 A = 0;#2 A = 1;#6 A = 0;
end// 1. 连续赋值+ 正规延迟
assign #5 C1 = A +B;// 3. 阻塞赋值 + 正规延迟
always @(*) begin#5 C3 = A +B;
end// 4. 阻塞赋值 + 内定延迟
always @(*) beginC4 = #5 A +B;
end// 5. 非阻塞赋值 + 正规延迟
always @(*) begin#5 C5 <= A +B;
end// 6. 非阻塞赋值 + 内定延迟
always @(*) beginC6 <= #5 A +B;
endendmodule

5. 总结

根据上述分析,容易看出惯性延时对应于连续赋值中的正规延迟,而传导延时对应于非阻塞赋值中的内定延迟。
所以仿真中常用 “连续赋值 + 正规延迟“ 模拟惯性延迟,用 ”非阻塞赋值 + 内定延迟“ 模拟传导延迟。

Verilog 仿真事件中的延时分析相关推荐

  1. Verilog初级教程(23)Verilog仿真中的显示任务

    文章目录 前言 正文 Display/Write Tasks Verilog Strobes Verilog Continuous Monitors Verilog Format Specifiers ...

  2. qtabwidget切换tab事件_某超超临界机组初压/限压切换过程中扰动原因分析

    严寒夕  浙江浙能台州第二发电有限责任公司 [摘要]某火电厂汽轮机在初压/限压切换过程中出现负荷瞬时上升问题.从初压/限压切换的逻辑及切换过程中主要参数的变化分析,确定原因为压力控制器指令上升瞬间和转 ...

  3. 【Android 事件分发】事件分发源码分析 ( Activity 中各层级的事件传递 | Activity -> PhoneWindow -> DecorView -> ViewGroup )

    Android 事件分发 系列文章目录 [Android 事件分发]事件分发源码分析 ( 驱动层通过中断传递事件 | WindowManagerService 向 View 层传递事件 ) [Andr ...

  4. matlab中对伺服电机,基于MATLAB仿真的伺服电机动态特性分析

    基于MATLAB仿真的伺服电机动态特性分析 摘要:伺服电机(servo motor )是指在伺服系统中控制机械元件运转的发动机,是一种补助马达间接变速装置.伺服电机可使控制速度,位置精度非常准确,可以 ...

  5. (150)System Verilog仿真结束机制

    (150)System Verilog仿真结束机制 1.1 目录 1)目录 2)FPGA简介 3)System Verilog简介 4)System Verilog仿真结束机制 5)结语 1.2 FP ...

  6. (58)Verilog HDL事件或:or、,

    (58)Verilog HDL事件或:or., 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)Verilog HDL事件或:or., 5)结语 1.2 FPGA简介 F ...

  7. 驱动芯片在应用中的常见问题分析与解决

    驱动芯片在应用中的常见问题分析与解决 通信电源PSU在通讯设备中担任着很重要的角色,PSU问题将会导致整个通讯设备无法正常运作.常见的通信电源PSU拓扑有桥式.推挽以及正在兴起的非隔离IBB架构.所有 ...

  8. 耗时很长的服务器端事件中让客户端得到中间过程信息的合理解决方案

    需求:B/S结构的系统里,用户点一个按钮系统开始发送上千封邮件,要求把发送信息(发送成功数,失败数,剩余数量...)动态实时的反馈给客户. 分析和实施过程当中遇到的问题: 一:最低级的问题 由于客户催 ...

  9. 做微波有源电路的设计仿真 一般都用什么软件 matlab可以吗,MATLAB在有源滤波器仿真设计中的应用...

    MA TLAB 在有源滤波器仿真设计中的应用Ξ王金星 王庆平 贾长朱 杨 刚 陈超英 (天津大学 天津 300072) APPL ICATION OFMATLAB IN DESIGN AND SIM ...

  10. 【Android 事件分发】ItemTouchHelper 源码分析 ( OnItemTouchListener 事件监听器源码分析 二 )

    Android 事件分发 系列文章目录 [Android 事件分发]事件分发源码分析 ( 驱动层通过中断传递事件 | WindowManagerService 向 View 层传递事件 ) [Andr ...

最新文章

  1. 模拟信号与数字信号以及数模隔离简介
  2. 360无痕浏览器_高效使用浏览器,探索你不知道的实用功能
  3. oracle19c安装[ins-35180]无法检查可用内存
  4. Android Touch系统简介(二):实例详解onInterceptTouchEvent与onT
  5. 基于visual Studio2013解决面试题之0802数字最多元素
  6. 如何解读决策树和随机森林的内部工作机制?
  7. PHP实训笔记,【学习笔记19】实验吧 让我进去
  8. 用最简单直白的人类语言解释下jsonP到底是什么鬼
  9. 计网复习第三章part one
  10. 揭秘阿里中台!一文看懂阿里推荐业务的两项利器 | 赠书
  11. 苏炫杰全国计算机等级考试,高二升高三的主题班会
  12. 红旗6.0 sp2 永中office2009不能启动的原因
  13. 后缀为axd 的文件
  14. linux sox录音时间控制,Linux 对音频万能处理的命令——SOX
  15. 【华为云技术分享】深度理解AI概念、算法及如何进行AI项目开发
  16. wallpaper怎么导入视频_怎样制作Wallpaper Engine视频壁纸 制作视频壁纸方法图文教程...
  17. 赵明magic4升鸿蒙,荣耀Magic新机生猛:折叠屏+骁龙888+鸿蒙系统,赵明:超越华为...
  18. C语言宏定义-跟踪调试宏
  19. 《一键下单:杰夫·贝佐斯与亚马逊的崛起》—— 读后总结
  20. python中numpy模块下的np.clip()的用法

热门文章

  1. centos mysql5.6卸载_centos 卸载mysql
  2. csgo修改服务器最大人数,国服CSGO为满足大环境,需全方位多处修改
  3. 高性能Java模板引擎BSL-1.0.1发布
  4. 路由器硬件基础知识--MTU
  5. 关于临时HY学长被安排拉二分题不想翻译找到DYM学长这件事(三)
  6. java date转化为long_Java中把Date类型转换成Long类型
  7. 11-ES2015基础语法
  8. Egret引擎的EUI基础使用教程
  9. pandas从excel导入数据,写入数据库
  10. HDU-6438丨优先队列