为什么在Verilog函数中不允许无阻塞分配?

问题描述 投票:5回答:2

我已经阅读到,在Verilog函数中不允许使用非阻塞分配。谁能对此提出合理的解释?

verilog system-verilog hdl
2个回答
8
投票

IEEE Verilog标准(1364-2001),“ 10.3.4功能规则”部分指出:

一个功能不得具有任何非阻塞分配。

[1800-2009 IEEE Std对此进行了详细说明:

功能应无延迟执行。因此,一个过程 功能应立即返回。不阻塞的陈述 允许在函数内部;特别是非阻塞式分配 事件触发器,时钟驱动器和fork-join_none构造应 允许在函数内部。

旨在使功能在Verilog事件队列中易于评估。如果需要提前时间,请使用task而不是function


0
投票

不要像C语言中的函数那样考虑Verilog中的函数:

Verilog中的函数被设计为对开发人员友好的方法,可以在多个位置一次实例化相同的组合逻辑,而不必重新编写/为其创建模块。 Verilog的许多“新手”都试图使函数合理化,例如它们是C函数,尽管它们“返回”值,但最终更容易(而且更正确)将它们概念化为组合门。

请注意,这与“任务”不同,后者更通常用于“按顺序”执行事物,在测试平台情况下可能比函数更有用

在学习Verilog时,请尽量不要合理化以“代码”形式编写的HDL,因为这是另一种思维方式。

编辑:做出我的不好的解释

© www.soinside.com 2019 - 2024. All rights reserved.