[SystemVerilog语法拾遗] systemverilog中各种延时方式详解
最近在做系统集成的时候经常会用到模块间信号连接的时候增加delay的操作,而systemverilog语法中支持各式各样的delay添加方法。
sv中有3种类型的赋值: 阻塞赋值、非阻塞赋值和连续赋值。
延时(#1)写的位置有2种:
当延时(#1)写在整个表达式最前面时,三种类型的赋值,延时结果一致是:等待_忽略中间变化再计算
当延时(= #1)写在等于号(=)后面时:
1.连续赋值语法错误排除。
2.阻塞赋值是:先计算后延时再赋值
3.非阻塞赋值是:直接跟随
这样组合下来总共有6中添加延时的方式,如下图所示:

延时分类图示
下文为转载文章,详细介绍各种delay方式的示例原理,最后补充说明文章中一处错误的讲解。
Verilog语法之延时
说明
LHS: Left-Hand-Side,左式;
RHS: Right-Hand-Side,右式;
`timescale 1ns/100ps;
连续赋值中的延时
LHS中加延时
assign #2 y = ~a;
描述:非门的延时为2ns,输入端信号变化到输出端体现出来需要2ns时间。即a发生变化后,经过2ns时间,y才发生变化。
注意:任意小于2ns的信号变化脉冲都被过滤掉。例如:

本文详细介绍了SystemVerilog中的阻塞赋值、非阻塞赋值和连续赋值三种赋值方式下的延时处理,以及#1延时的不同使用位置。同时纠正了一个关于无损delay的常见误解。
最低0.47元/天 解锁文章
1130

被折叠的 条评论
为什么被折叠?



