部分抄自李锐博恩博客:https://blog.csdn.net/Reborn_Lee/article/details/107888798

1.先再次说一下仿真时间`timescale 1ns/1ps 的定义

·timescale 定义仿真时间单位与精度,1ns是时间单位,即在仿真中用#10表示延迟10ns。1ps表示时间精度,比如你写 #3.5547968525 a <= 1;c <= 1;,那么它时间精度也只会有1ps(即在3.555ns时赋值语句便生效)。

2.最常见赋值间延迟语句

module top_module;reg  a, b, c, q;initial begin$monitor("[%0t] a=%0b b=%0b c=%0b q=%0b", $time, a, b, c, q);// Initialize all signals to 0 at time 0a <= 0;b <= 0;c <= 0;q <= 0;// Inter-assignment delay: Wait for #5 time units// and then assign a and c to 1. Note that 'a' and 'c'// gets updated at the end of current timestep#5  a <= 1;c <= 1;// Inter-assignment delay: Wait for #5 time units// and then assign 'q' with whatever value RHS gets// evaluated to#5 q <= a & b | c;#20;endendmodule

仿真结果


解读:0时刻结束时,a,b,c,q非阻塞赋值,全部被赋值为0;
延迟5ns结束后,a,c,非阻塞赋值,被赋值为1;
再延迟5ns结束时,q被非阻塞赋值。

Inter-assignment delay: Wait for #5 time units and then assign a and c to 1. Note that ‘a’ and ‘c’ gets updated at the end of current timestep
这是很基础的一句话,这句话说明了Verilog这门语言的基本特点,或者说Verilog中非阻塞赋值的基本特点,如下:

// Inter-assignment delay: Wait for #5 time units// and then assign a and c to 1. Note that 'a' and 'c'// gets updated at the end of current timestep#5  a <= 1;c <= 1;

这条语句,在第5ns时候虽然给a与c均赋值了1,但是此刻并不生效,而会在当前时间步长结束时生效,例如,我们在此刻加一个语句,使用a与c的值:

  // Inter-assignment delay: Wait for #5 time units// and then assign a and c to 1. Note that 'a' and 'c'// gets updated at the end of current timestep#5  a <= 1;c <= 1;q <= a&c;

对上面这句话的理解可以是,在5ns这一时刻,将1这个值传递给a和c,但是传递总是需要时间的,而在5ns这一时刻,会捕获a&c的值,然后将这个值传递给q。捕获时还没来得及更新,自然是捕获的旧值。

3.赋值内延迟语句

module tb;reg  a, b, c, q;initial begin$monitor("[%0t] a=%0b b=%0b c=%0b q=%0b", $time, a, b, c, q);// Initialize all signals to 0 at time 0a <= 0;b <= 0;c <= 0;q <= 0;// Inter-assignment delay: Wait for #5 time units// and then assign a and c to 1. Note that 'a' and 'c'// gets updated at the end of current timestep#5  a <= 1;c <= 1;// Intra-assignment delay: First execute the statement// then wait for 5 time units and then assign the evaluated// value to qq <= #5 a & b | c;#20;end
endmodule


在第5ns时候,a,b,q右边的值同时捕获,a和c在第5s被非阻塞赋值,也就是在第5ns末有效。
第5ns时,q值捕获到右边的表达式值,为0,然后再经过5秒,把这个0赋值给q.即q是在第5秒捕获到数据,但是在第10秒被赋值。

为了对比,我们在第5ns时,对a和c都进行阻塞赋值:
#5 a = 1;
c = 1;
q <= a & b | c;

#5 q <= a & b | c;
a = 1;
c = 1;

其实,阻塞赋值非阻塞赋值的本质区别就是。阻塞赋值,捕获完一个赋值一个,然后进行下一个,后面的赋值过程会被前一个堵住;而非阻塞赋值,全部同时捕获,然后同时赋值,赋值过程没有前后之分。
通过上面两个图,我们可以看出,当阻塞赋值,非阻塞赋值同时使用时,阻塞赋值会阻塞非阻塞赋值,非阻塞赋值内部还是同时捕获同时赋值。

#5 a = 1;
c = 1;
q <=#5 a & b | c;


这个的话,就是先阻塞赋值,将a,c进行赋值,然后同时在5ns这个时刻捕获q的值,然后再过5ns将这个值赋值给q。因为q的捕获被a,c的赋值过程给阻塞了,所以q捕获的是a,q的新值。

仿真时间`timescale 1ns/1ps 的定义 延迟赋值与阻塞赋值非阻塞赋值的一个小问题相关推荐

  1. Verilog 非阻塞赋值的仿真/综合问题

    源文件作者:Clifford E. Cummings    (Sunburst Design, Inc.)  原标题:Nonblocking Assignments in Verilog Synthe ...

  2. Multisim10中仿真时间步长与数码显示管的类型有关

    用Multisim10仿真一个数字频率计数器,单个模块仿真很顺利,无论是计数部分还是秒脉冲发生电路都正常工作,但最后连起来仿真的时候就无语了,由于要测量1s内的输入信号的频率,按道理说如果输入信号是1 ...

  3. 【UVM基础】仿真时间与运行时间

    仿真时间:指$time函数打印出的时间. 类似$display的语句是不消耗仿真时间的,而类似@(posedge top.clk)等语句是要消耗仿真时间的. 运行时间:实际仿真中所消耗的CPU时间,通 ...

  4. Simulink仿真时间、步长、精度和解法器设置

    在Simulink模型中Configuration Parameters里的Solver页设置仿真时间.步长.精度和解法器. 一.仿真时间:注意这里的时间概念与真实的时间并不一样,只是计算机仿真中对时 ...

  5. simulink模型中的仿真时间和仿真步长的区别

    一.仿真时间 图中的stop Time处所指的就是仿真时间的设置. 但需要注意的一点就是:这里所指的时间概念与真实的时间是不一样的,只是计算机仿真中对时间的一种表示. 二.仿真步长 快捷键 ctrl+ ...

  6. 时间单位—关于秒的定义

    时间的单位可以从极小到极大,下面的描述是想传达一种超大时间跨度的感受.  一渺秒(十亿分之一秒的十亿分之一)  科学家是用渺秒来对瞬时事件进行计时的.  研究人员已经用稳定的高速激光产生了仅持续250 ...

  7. cocos 时间函数需要什么引用_Cocos实战篇[3.4]——仿COC的一个小Demo总结

    [唠叨] 今天结束了本学期任务最为艰巨的项目实训课程,由于项目组里其他成员基本都已经找到实习了,然后他们都去实习了.只留下我和一个小伙伴在一起搞项目实训的小游戏.经过一个月与小伙伴的配合开发,做了一个 ...

  8. php mysql主从延迟_如何解决主从数据库同步延迟问题?php连接 mysql 数据库如何添加一个公共的配置文件50...

    在上一篇文章中,小编为您详细介绍了关于<图上属标注的什么样元器件?火车购票明明显示无座为什么样乘车后却发现有很多空座>相关知识.本篇中小编将再为您讲解标题如何解决主从数据库同步延迟问题?p ...

  9. 解决时间插件mobiscroll在使用过程中的一个小缺陷

    最近在写一个web项目时,需要有一个根据年份查询当年入职人员资料的功能,于是我选择了mobiscroll这个插件做了时间滚轮.一开始感觉效果不错,但是在测试的时候发现了一个小bug. 因为在同一个页面 ...

最新文章

  1. UE4创建第一人称射击游戏学习教程 Unreal Engine 4: Create Your Own First-Person Shooter
  2. mysql tomcat 自动重连_基于tomcat+mysql的c/s模式下的系统自动更新
  3. Vue 入门,Vue属性和指令
  4. 微软10亿美元投资的OpenAI如何组织员工学习新知识?这里有一份课程与书籍清单...
  5. java中字符流 字节流_理解Java中字符流与字节流的区别
  6. 什么是pretext tasks?
  7. 李开复:走向全球的两大路径,中美何以各占其一
  8. address already in use: jvm_bind
  9. 一样的Java,不一样的HDInsight大数据开发体验
  10. 对Kernel panic-not syncing:No init found...init=option to kernel错误总结!
  11. 诺基亚E63凤凰刷机实战
  12. OrCAD PSpice仿真流程——Cadence 17.4
  13. 第四章 ARMA模型的特性
  14. 淘宝天猫融合能拉回“出淘”的用户吗?
  15. LabVIEW编程LabVIEW开发Thorlabs电机例程与相关资料
  16. Android自定义控件的步骤
  17. Mac 安装 nvm
  18. FPGA 控制 nand flash读写
  19. “守法规知礼让、安全文明出行”背后需要良好的交通环境支撑 | 聚焦守法知礼...
  20. 大物知识点复习框架——光学

热门文章

  1. linux oracle流复制文件,【学习笔记】Oracle ASM linux dd命令复制asm中文件 操作磁盘或者分区...
  2. 77岁老爷爷6次考研,老爷爷考的这所学校你敢考吗?
  3. PHP_微信公众号开发(1)
  4. python--打印星星
  5. 都整理好了,总有一个你用得上
  6. java获取视频首帧图片用于界面展示
  7. fiddler监控手机端https请求显示tunnel to ......443
  8. 数据挖掘(一)频繁模式挖掘算法的实现和对比
  9. 北京:2100名号贩子信息已录入医院人脸识别系统
  10. 算法工程师 数据挖掘工程师_数据工程师的崛起