首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >verilog always@(*)非阻塞赋值

verilog always@(*)非阻塞赋值
EN

Stack Overflow用户
提问于 2014-03-23 07:27:48
回答 3查看 538关注 0票数 0

我读过的任何地方都说过,不要在always@(*)块中使用<=运算符,但我的教授在我们的一项作业中使用了他的解决方案,他也在该行业工作。如果可以做到这一点,他们的理由是什么?

EN

回答 3

Stack Overflow用户

发布于 2014-03-24 18:02:58

简而言之,只要理解调度的含义,在任何情况下,您都可以使用阻塞或非阻塞赋值。如果您了解调度模型,则可以使用NBAs (即<=,在这里不是“运算符”)在组合过程中,这是你的教授所做的。请注意,在组合代码中使用NBAs可能会潜在地降低模拟速度。

问题是,实际上没有人真正理解“对日程安排的影响”,所以大多数人使用指导方针。您应该阅读的使用NBAs的指南在this paper中。如果你不明白的话,可以问一问。这太复杂了,难以概括,但本文建议不要在组合代码中使用NBAs。

这些只是指导方针,许多(有知识的)人不喜欢它们。请记住,指南之所以存在,是因为语言的设计和定义都很糟糕。还要记住,编写指南的人往往不欣赏这一点,并喜欢认为他们的指南有很好的理由。

票数 1
EN

Stack Overflow用户

发布于 2014-03-23 21:50:21

在LRM中,它说

“隐式event_expression @*是一种方便的简写方式,它通过添加语句读取的所有网络和变量来消除这些问题。”

在Verilog中,当您使用<=非阻塞分配并希望引用触发器或锁存器时,您的always@(...)敏感列表必须包含边沿触发时钟和复位信号。

为了使语法更加明确和清晰,您应该对时钟和复位信号使用always_ffalways_latch,而不仅仅是always @*

票数 0
EN

Stack Overflow用户

发布于 2014-03-24 14:57:50

通常=用于组合逻辑,<=用于顺序logic.however,但也有某些例外。时钟建模就是一个例子,如Verilog Blocking Assignment中所述。然而,对于你的问题,我相信101个gotchas中的Gotcha 30 (组合逻辑中的非阻塞赋值)可以解释它( http://books.google.com/books?id=_VGghBpoK6cC&printsec=frontcover&dq=Verilog+and+SystemVerilog+Gotchas&hl=en&sa=X&ei=F9cvU_WhJYzdoASLoYHwBw&ved=0CCwQ6AEwAA#v=onepage&q=Verilog%20and%20SystemVerilog%20Gotchas&f=false)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22585038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档