完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
之前了解过这两个赋值的区别,但今天碰上一个在零时延赋值引起的竞争状态的实例中,还是有点不懂:
always @ (posedge GlobalClk) RegB = RegA; always @ (posedge GlobalClk) RegC = RegB; 由于过程性赋值立即发生,即没有任何时延,所以根据首先执行哪一条always语句,RegC取不同的值,这就产生了竞争。 书上说使用非阻塞性赋值可以避免产生竞争状态,为什么??求助... |
|
相关推荐
6 个讨论
|
|
并发执行的机制是这样的: 比如你提交的非阻塞赋值语句 begin RegB< = RegA; RegC< = RegB; end 两条赋值语句被执行之前,表达式右边的RegA、RegB都只准备好初值但是并不赋值给左边,只有等到执行end语句时才将它们的值同时赋给左边。所以end之后RegB、RegC的值分别是RegA、RegB的初值。没有赋值操作的冲突,自然没有竞争了。上述两条非阻塞赋值语句可以调换顺序而不影响结果。 但如果是阻塞赋值,则end时三个变量的值相同 RegA== RegB==RegC。但这种阻塞赋值调换语句顺序则结果与前不同:先是RegC==RegB,后RegB==RegA。RegB的值发生变化了。 阻塞赋值与非阻塞赋值使用时应小心考虑,因为语法都没有错误,但是可能出现非期望的结果。 不知上述解释当否。 |
|
|
|
|
|
只有小组成员才能发言,加入小组>>
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-28 17:23 , Processed in 0.531552 second(s), Total 52, Slave 44 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号