Verilog系列:【17】阻塞赋值与非阻塞赋值

0 丑话说在前边

RHS:运算符(= or <=)右侧的表达式

LHS:运算符(= or <=)左侧的表达式

竞争(Race Condition):在同一仿真时间槽(time-slot)多条语句同时执行顺序不同时可能产生不同的执行结果的情况。

建议规则一:模拟组合逻辑时使用阻塞赋值。

建议规则二:在过程性语句中,模拟时序逻辑时使用非阻塞赋值。

建议规则三:模拟latch时使用非阻塞赋值。

建议规则四:在同一个过程性语句中同时包括时序逻辑和组合逻辑时,该过程性语句中使用非阻塞赋值。

建议规则五:不要在同一个过程性语句中混用阻塞赋值与非阻塞赋值。

建议规则六:不要在多个过程性语句中对同一个变量进行赋值操作。

建议规则七:如果要观测非阻塞赋值的结果,使用$strobe和$monitor进行观测。

建议规则八:不要使用#0。

1 阻塞赋值

阻塞赋值使用的赋值运算符为“=”。阻塞赋值的过程是立刻执行的,即阻塞赋值运算符右侧表达式求值完后立刻会更新至运算符左侧,并且这个执行的过程不受其他语句执行的影响,其后的语句只有当前的赋值操作执行完成后才能顺序执行。

2 非阻塞赋值

非阻塞赋值使用的赋值运算符为“<=”。非阻塞赋值执行过程为:在当前仿真时间槽(time-slot)开始分析计算获得右侧表达式的值,在当前时间槽执行结束时更新左侧表达式的值,在右侧表达式分析计算和左侧表达式被更新之间,任何其他事件都可以执行,同时也有可能修改已经计算完成的右侧表达式的值,即非阻塞赋值的过程不影响其他语句的执行.

根据非阻塞赋值的特点,其赋值运算符左侧操作数只能为寄存器类型,因此非阻塞赋值只能用于过程性语句中(initial和always),不允许在连续赋值语句中使用非阻塞赋值。

 3 阻塞赋值与非阻塞赋值区别

全部评论
之前还特意学过verilog,后来都忘完了
点赞 回复 分享
发布于 2022-07-26 13:00

相关推荐

牛客37185681...:马德,我感觉这是我面过最恶心的公司,一面是两个女hr,说什么实习前几个月属于试用期,试用期过了才能转成正式实习生,我***笑了,问待遇就是不说,问能不能接受全栈,沙币公司
如果可以选,你最想去哪家...
点赞 评论 收藏
分享
zephory:内容太乱了,根本捕捉不到重点,指导你会的很多,但是看不到具体的强项 个人技能宜精不宜多 项目那块太繁琐了,面试官或者hr只想知道你在项目中看了啥以及具体的收益
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务