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

时间:2012-08-20 10:23:24

标签: verilog hdl

我已经读过在Verilog函数中不允许使用非阻塞赋值。任何人都可以为此提出合理的解释吗?

2 个答案:

答案 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合理化为“代码”,因为它是一种不同的思维方式。

编辑:我自己做了一些不好的解释