我已经阅读到,在Verilog函数中不允许使用非阻塞分配。谁能对此提出合理的解释?
IEEE Verilog标准(1364-2001),“ 10.3.4功能规则”部分指出:
一个功能不得具有任何非阻塞分配。
[1800-2009 IEEE Std对此进行了详细说明:
功能应无延迟执行。因此,一个过程 功能应立即返回。不阻塞的陈述 允许在函数内部;特别是非阻塞式分配 事件触发器,时钟驱动器和fork-join_none构造应 允许在函数内部。
旨在使功能在Verilog事件队列中易于评估。如果需要提前时间,请使用task
而不是function
。
不要像C语言中的函数那样考虑Verilog中的函数:
Verilog中的函数被设计为对开发人员友好的方法,可以在多个位置一次实例化相同的组合逻辑,而不必重新编写/为其创建模块。 Verilog的许多“新手”都试图使函数合理化,例如它们是C函数,尽管它们“返回”值,但最终更容易(而且更正确)将它们概念化为组合门。
请注意,这与“任务”不同,后者更通常用于“按顺序”执行事物,在测试平台情况下可能比函数更有用
在学习Verilog时,请尽量不要合理化以“代码”形式编写的HDL,因为这是另一种思维方式。
编辑:做出我的不好的解释