我已经读过在Verilog函数中不允许使用非阻塞赋值。任何人都可以为此提出合理的解释吗?
答案 0 :(得分:8)
IEEE Std for Verilog(1364-2001),section" 10.3.4功能规则"规定:
函数不得有任何非阻塞赋值。
1800-2009 IEEE Std详细阐述了这一点:
函数应无延迟执行。因此,一个过程调用一个 功能应立即返回。不阻止的声明应 被允许进入一个功能;特别是,非阻塞任务, 事件触发器,时钟驱动器和fork-join_none构造应该 被允许进入一个功能。
目的是在Verilog事件队列中简单地评估函数。如果您需要提前时间,请使用task
代替function
。
答案 1 :(得分:0)
尽量不要考虑Verilog中的函数,比如C:
中的函数Verilog中的函数被设计为一种开发人员友好的方式,可以同时在多个位置实例化相同的组合逻辑,而不必再次编写它/为其创建模块。 Verilog的许多“新手”试图使函数合理化,就像它们是C函数一样,当它们“返回”一个值时,最终将它们概念化为组合门的块更容易(也更正确)。
请注意,这与“任务”不同,“任务”通常用于“按顺序”执行操作,这在测试平台情况下可能比函数更有用
当你学习Verilog时,尽量不要将你所写的HDL合理化为“代码”,因为它是一种不同的思维方式。
编辑:我自己做了一些不好的解释