仿真时间`timescale 1ns/1ps 的定义 延迟赋值与阻塞赋值非阻塞赋值的一个小问题
部分抄自李锐博恩博客: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 的定义 延迟赋值与阻塞赋值非阻塞赋值的一个小问题相关推荐
- Verilog 非阻塞赋值的仿真/综合问题
源文件作者:Clifford E. Cummings (Sunburst Design, Inc.) 原标题:Nonblocking Assignments in Verilog Synthe ...
- Multisim10中仿真时间步长与数码显示管的类型有关
用Multisim10仿真一个数字频率计数器,单个模块仿真很顺利,无论是计数部分还是秒脉冲发生电路都正常工作,但最后连起来仿真的时候就无语了,由于要测量1s内的输入信号的频率,按道理说如果输入信号是1 ...
- 【UVM基础】仿真时间与运行时间
仿真时间:指$time函数打印出的时间. 类似$display的语句是不消耗仿真时间的,而类似@(posedge top.clk)等语句是要消耗仿真时间的. 运行时间:实际仿真中所消耗的CPU时间,通 ...
- Simulink仿真时间、步长、精度和解法器设置
在Simulink模型中Configuration Parameters里的Solver页设置仿真时间.步长.精度和解法器. 一.仿真时间:注意这里的时间概念与真实的时间并不一样,只是计算机仿真中对时 ...
- simulink模型中的仿真时间和仿真步长的区别
一.仿真时间 图中的stop Time处所指的就是仿真时间的设置. 但需要注意的一点就是:这里所指的时间概念与真实的时间是不一样的,只是计算机仿真中对时间的一种表示. 二.仿真步长 快捷键 ctrl+ ...
- 时间单位—关于秒的定义
时间的单位可以从极小到极大,下面的描述是想传达一种超大时间跨度的感受. 一渺秒(十亿分之一秒的十亿分之一) 科学家是用渺秒来对瞬时事件进行计时的. 研究人员已经用稳定的高速激光产生了仅持续250 ...
- cocos 时间函数需要什么引用_Cocos实战篇[3.4]——仿COC的一个小Demo总结
[唠叨] 今天结束了本学期任务最为艰巨的项目实训课程,由于项目组里其他成员基本都已经找到实习了,然后他们都去实习了.只留下我和一个小伙伴在一起搞项目实训的小游戏.经过一个月与小伙伴的配合开发,做了一个 ...
- php mysql主从延迟_如何解决主从数据库同步延迟问题?php连接 mysql 数据库如何添加一个公共的配置文件50...
在上一篇文章中,小编为您详细介绍了关于<图上属标注的什么样元器件?火车购票明明显示无座为什么样乘车后却发现有很多空座>相关知识.本篇中小编将再为您讲解标题如何解决主从数据库同步延迟问题?p ...
- 解决时间插件mobiscroll在使用过程中的一个小缺陷
最近在写一个web项目时,需要有一个根据年份查询当年入职人员资料的功能,于是我选择了mobiscroll这个插件做了时间滚轮.一开始感觉效果不错,但是在测试的时候发现了一个小bug. 因为在同一个页面 ...
最新文章
- UE4创建第一人称射击游戏学习教程 Unreal Engine 4: Create Your Own First-Person Shooter
- mysql tomcat 自动重连_基于tomcat+mysql的c/s模式下的系统自动更新
- Vue 入门,Vue属性和指令
- 微软10亿美元投资的OpenAI如何组织员工学习新知识?这里有一份课程与书籍清单...
- java中字符流 字节流_理解Java中字符流与字节流的区别
- 什么是pretext tasks?
- 李开复:走向全球的两大路径,中美何以各占其一
- address already in use: jvm_bind
- 一样的Java,不一样的HDInsight大数据开发体验
- 对Kernel panic-not syncing:No init found...init=option to kernel错误总结!
- 诺基亚E63凤凰刷机实战
- OrCAD PSpice仿真流程——Cadence 17.4
- 第四章 ARMA模型的特性
- 淘宝天猫融合能拉回“出淘”的用户吗?
- LabVIEW编程LabVIEW开发Thorlabs电机例程与相关资料
- Android自定义控件的步骤
- Mac 安装 nvm
- FPGA 控制 nand flash读写
- “守法规知礼让、安全文明出行”背后需要良好的交通环境支撑 | 聚焦守法知礼...
- 大物知识点复习框架——光学
热门文章
- linux oracle流复制文件,【学习笔记】Oracle ASM linux dd命令复制asm中文件 操作磁盘或者分区...
- 77岁老爷爷6次考研,老爷爷考的这所学校你敢考吗?
- PHP_微信公众号开发(1)
- python--打印星星
- 都整理好了,总有一个你用得上
- java获取视频首帧图片用于界面展示
- fiddler监控手机端https请求显示tunnel to ......443
- 数据挖掘(一)频繁模式挖掘算法的实现和对比
- 北京:2100名号贩子信息已录入医院人脸识别系统
- 算法工程师 数据挖掘工程师_数据工程师的崛起