为什么功能不能延迟?

问题描述 投票:0回答:1

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

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

必须被替换

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

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

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

vhdl verilog system-verilog
1个回答
1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.