是系统verilog中函数中允许的fork.join语句



它们在任务中肯定是允许的,但我找不到,如果函数中允许的话。

提前感谢您的帮助。

是的,函数中允许使用fork...join_none

fork块只能在与join_none匹配的情况下用于函数中。原因是函数必须在零时间内执行。因为fork...join_none将被派生到一个单独的线程/进程中,所以该函数仍然可以在零时间内完成。

这一点在IEEE 1800-2012的第13.4.4节中有明确说明,函数调用产生的后台进程

功能应立即执行。因此,调用函数的进程应立即返回。不阻塞的语句应允许在函数内部使用;特别是,函数内部应允许非阻塞分配、事件触发器、时钟驱动器和fork - join_none构造。

我的模拟工具允许函数中的fork...join_none,但会发出一个警告,即fork...join(可能还有fork...join_any)将转换为begin...end。我在标准中找不到任何关于这方面的内容,这很可能是我没有得到严格编译错误的原因。

请小心,因为不同的模拟器供应商可能会实施不同的规则。在三大模拟器中的两个模拟器中,fork...join_none的功能肯定有效。fork...join/join_any在函数的上下文中没有意义,所以我会完全避免它。

最新更新