为什么功能不能延迟?

时间:2018-03-05 17:04:04

标签: vhdl verilog system-verilog

Verilog和VHDL都禁止功能延迟。此外,任务/过程不能具有返回值。这意味着这样的代码:

if (my_function(arg) > 0) begin (...) end

必须替换为

int r;
my_task(arg, r);
if (r > 0) begin (...) end

如果需要延迟。为什么这个限制?看起来甚至SystemVerilog类的成员函数都有它,这对我来说没什么意义。

对于合成,显然不能支持延迟,但是当遇到延迟时让综合工具产生错误是完全可以接受的,就像always / process块中的延迟一样。

1 个答案:

答案 0 :(得分:1)

任务和函数的规则是相同的,无论它们是否是类方法。一个函数必须永远不会阻塞,并且调用一个函数,无论它是否返回一个值(void)都会形成一个它会阻塞的保证。

Verilog的这条规则是必需的,因为函数是表达式的一部分,并且在表达式的中间永远不会有延迟。现在它用于显示意图,SystemVerilog中的其他规则利用了这种非阻塞意图。 (即DPI)。