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

Aka*_*ash 4 verilog hdl

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

too*_*lic 8

IEEE Std for Verilog(1364-2001),"10.3.4功能规则"部分规定:

函数不应具有任何非阻塞分配.

1800-2009 IEEE Std详细阐述了这一点:

功能应无延迟执行.因此,调用函数的进程应立即返回.在一个函数内应允许不阻止的语句; 具体而言,应允许在函数内部使用非阻塞赋值,事件触发器,时钟驱动器和fork-join_none构造.

目的是在Verilog事件队列中简单地评估函数.如果你需要提前时间,请使用task而不是a function.