在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
12
返回列表 发新帖
楼主: frankjintao

[讨论] always的敏感信号是clk,描述语句中可以是“="的赋值语句吗?

[复制链接]
发表于 2012-12-13 18:41:07 | 显示全部楼层
也在学习verilog,always在描述组合逻辑的时候用‘=’,在描述时序逻辑的时候使用‘<=',开始的时候尽量形成良好的编写代码风格,否则以后就不好改了。
发表于 2012-12-15 00:14:42 | 显示全部楼层
还真不清楚诶
发表于 2012-12-16 12:07:03 | 显示全部楼层
1. always语句里本来就是既可以用阻塞赋值,也可以用非阻塞赋值,只是好的代码风格要求我们在时序逻辑always块中用非阻塞赋值,组合逻辑always块中用阻塞赋值。
2. 把时序逻辑中的<=替换成=后,会出现逻辑功能的变化。两者是有区别的
3. 7楼说的只有一个变量所以无关,我觉得不是这样的。因为=不仅是阻塞一个always块吧,如果有两个always块都用的=赋值,也是要等到前面一个always块赋值后才能赋值后面一个always块。
发表于 2012-12-17 16:24:45 | 显示全部楼层
你可以阻塞赋值看成顺序执行就可以了。
 楼主| 发表于 2012-12-17 21:19:31 | 显示全部楼层
always块里只有一个变量赋值,不存在阻塞的问题。好的,一个变量被赋值可以用“=”号,不会被阻塞。记住了。谢谢大神们!
发表于 2012-12-17 21:45:11 | 显示全部楼层
回复 14# kekeguda


   不会阻塞其他always块的,你想它是always,相当于forever的概念,每个时钟上升沿都会进入进程,是并行的概念。
发表于 2012-12-17 23:08:23 | 显示全部楼层
回复 17# mengnantiger

不是这样的,它的源程序中用到了两个阻塞赋值的always块,而且两者的触发条件是一样的,这时候赋值不是并行的,而是先对前面的进行赋值。我写了个程序验证了一下,确实是这样。
程序代码:
always_test.bmp

测试代码:
testbench.bmp    
运行结果对比:
results.bmp

可以看到把阻塞赋值换成非阻塞赋值是由明显差别的,例如时刻205,如果是非阻塞赋值,那么205时刻执行时q和cond都是0,q执行加1操作变成1;而换成阻塞赋值后,205时刻cond先变成1,然后执行q的操作,所以q执行了减1操作变成15
发表于 2012-12-17 23:31:24 | 显示全部楼层
不过lz这里的代码中的几个阻塞赋值always块没有相互引用的关系,所以这里阻塞跟非阻塞结果是一样的
发表于 2012-12-18 22:30:38 | 显示全部楼层
回复 18# kekeguda

我明白你的意思,最后的阻塞和非阻塞的结果你应该贴反了,从编译器的角度讲如果用 = ,会出现你说的阻塞住下一个always进程,感觉这是一种竞争,不知道别的编译器会不会都是这样,但是这个东西上板之后两种赋值方式的效果就应该是一样的了,为了模拟实际的情况,不妨在每个阻塞赋值后面加一个 #1 试试。
发表于 2012-12-27 12:14:19 | 显示全部楼层
学习~~~~~~~~~~~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-3-4 21:35 , Processed in 0.025784 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表