首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么在Verilog函数中不允许非阻塞赋值?

为什么在Verilog函数中不允许非阻塞赋值?
EN

Stack Overflow用户
提问于 2012-08-20 18:23:24
回答 2查看 3.4K关注 0票数 6

我读到过在Verilog函数中不允许使用非阻塞赋值。有人能对此提出一个合理的解释吗?

EN

回答 2

Stack Overflow用户

发布于 2012-08-20 21:09:58

IEEE Std for Verilog (1364-2001) "10.3.4 Function rules“一节规定:

函数不应具有任何非阻塞赋值。

1800-2009 IEEE标准详细说明了这一点:

函数应无延迟地执行。因此,调用函数的进程应该立即返回。应允许在函数内使用不阻塞的语句;具体地说,应允许在函数内使用非阻塞赋值、事件触发器、时钟驱动和fork-join_none构造。

其目的是为了在Verilog事件队列中简单地计算函数。如果您需要提前时间,请使用task而不是function

票数 8
EN

Stack Overflow用户

发布于 2012-08-21 01:02:02

尽量不要想Verilog中的函数,就像C中的函数:

Verilog中的函数被设计成一种开发人员友好的方式,可以一次在多个地方实例化相同的组合逻辑,而不必重新编写它/为它创建一个模块。许多Verilog的“新手”试图将函数合理化,就像它们是C函数一样,虽然它们是“返回”一个值,但最终更容易(也更正确)地将它们概念化为组合门块。

请注意,这与“任务”不同,“任务”通常用于“按顺序”执行任务,在测试环境中可能比函数更有用。

当你学习Verilog时,尽量不要把你写的HDL简化为“代码”,因为它是一种不同的思维方式。

编辑:去掉了我的一些糟糕的解释

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

https://stackoverflow.com/questions/12035942

复制
相关文章

相似问题

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