Verilog系列:【28】敏感信号列表中的运算

在使用Verilog进行设计时,经常会遇到这样的问题:在敏感信号列表中的信号之间可以在敏感信号列表中进行计算吗?答案是肯定的,但是这样做有可能会带来许多潜在的仿真错误。本文将以具体示例进行分析。

1.敏感信号列表前的@

该符号的作用是等待其后敏感信号列表中的信号发生变化,从而进行后续代码的执行。如果敏感信号列表中的信号没有发生变化,将一直挂起在@处。

2.敏感信号列表中的“or”

“or”并非运算符,仅是作为敏感信号列表中信号之间的分隔符,可用“,”代替。当敏感信号列表中得任意信号发生变化都会触发后续事件的执行。

3.敏感信号列表中的运算符

当敏感信号列表中中存在运算,执行的顺序是:现进行运算,再判断运算后的结果是否与之前运算的结果一致,如果一致后续事件不会被执行,反之后续事件将会执行。

【示例】

仿真结果如下:

仿真结果分析:

在1ns和3ns处,s1_var和s2_var都发生了变化,因此p1和p2后续的进程都被执行;

在4ns处,s1_var未发生变化,s2_var发生了变化,但是p2的敏感信号列表中存在运算,即“s1_var & s2_var”,该运算结果并未发生变化,所以对于敏感信号列表来说,其列表中并未发生任何变化,所以p2不会被执行。与此形成对比的是p1后续的进程被有效执行,主要是因为其中的s2_var发生了变化。

4.注意事项

·        修改组合逻辑的敏感信号列表为“@*”方式,这样当后续对应的进程中相关被读取的信号发生变化都不会导致进行挂起等待;

·        合理在敏感信号列表中使用相关运算,确定该运算为期望的结构。但是该方法强烈不推荐,建议将相关运算发在敏感信号表外,将连续赋值后结果放入敏感信号列表;

·        例如:


全部评论
没接触过这个,看着很厉害
点赞 回复 分享
发布于 2022-08-30 10:56 陕西

相关推荐

06-15 02:05
已编辑
南昌航空大学 数据分析师
Eason三木:你如果想干技术岗,那几个发公众号合唱比赛的经历就去掉,优秀团员去掉,求职没用。然后CET4这种不是奖项,是技能,放到下面的专业技能里或者单独列一个英语能力。 另外好好改改你的排版,首行缩进完全没有必要,行间距好好调调,别让字和标题背景黏在一起,你下面说能做高质量PPT你得展现出来啊,你这简历排版我用PPT做的都能比你做的好。 然后自我评价,你如果要干数据工程师,抗压能力强最起码得有吧。
简历中的项目经历要怎么写
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-15 17:32
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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