6

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

4

2 回答 2

8

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

函数不应有任何非阻塞赋值。

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

功能应无延迟地执行。因此,调用函数的进程应立即返回。函数内部应允许不阻塞的语句;具体来说,函数内部应允许非阻塞分配、事件触发器、时钟驱动和 fork-join_none 构造。

目的是让函数在 Verilog 事件队列中易于评估。如果您需要提前时间,请使用 atask而不是 a function

于 2012-08-20T13:09:58.330 回答
0

尽量不要像 C 中的函数那样考虑 Verilog 中的函数:

Verilog 中的函数旨在成为一种对开发人员友好的方式,可以一次在多个位置实例化相同的组合逻辑,而不必重新编写它/为其创建一个模块。许多 Verilog 的“新手”试图将函数合理化,就像它们是 C 函数一样,虽然它们“返回”一个值,但最终将它们概念化为组合门块更容易(也更正确)。

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

当您学习 Verilog 时,尽量不要将您编写的 HDL 合理化为“代码”,因为它是一种不同的思维方式。

编辑:我拿出了一些不好的解释

于 2012-08-20T17:02:02.267 回答