我读到过在Verilog函数中不允许使用非阻塞赋值。有人能对此提出一个合理的解释吗?
发布于 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。
发布于 2012-08-21 01:02:02
尽量不要想Verilog中的函数,就像C中的函数:
Verilog中的函数被设计成一种开发人员友好的方式,可以一次在多个地方实例化相同的组合逻辑,而不必重新编写它/为它创建一个模块。许多Verilog的“新手”试图将函数合理化,就像它们是C函数一样,虽然它们是“返回”一个值,但最终更容易(也更正确)地将它们概念化为组合门块。
请注意,这与“任务”不同,“任务”通常用于“按顺序”执行任务,在测试环境中可能比函数更有用。
当你学习Verilog时,尽量不要把你写的HDL简化为“代码”,因为它是一种不同的思维方式。
编辑:去掉了我的一些糟糕的解释
https://stackoverflow.com/questions/12035942
复制相似问题