System verilog 在SystemVerilog中,有没有在常量函数中使用断言的方法?
我有一个类似的函数System verilog 在SystemVerilog中,有没有在常量函数中使用断言的方法?,system-verilog,System Verilog,我有一个类似的函数 function automatic int divide(int a, int b); check_divides: assert(a % b == 0); return a / b; endfunction 我的模拟器拒绝编译它,并说它不再是一个常量函数 有人知道这是否应该被允许,或者是否有一种方法可以在常量函数中执行这样的断言吗?这在Questa中效果很好。尽管LRM第13.4.3节常量函数中没有任何内容表明这是非法的,但也没有任何
function automatic int divide(int a, int b);
check_divides: assert(a % b == 0);
return a / b;
endfunction
我的模拟器拒绝编译它,并说它不再是一个常量函数
有人知道这是否应该被允许,或者是否有一种方法可以在常量函数中执行这样的断言吗?这在Questa中效果很好。尽管LRM第13.4.3节常量函数中没有任何内容表明这是非法的,但也没有任何内容定义断言的操作块的行为及其对编译的影响 我看过那一部分。当然,一个常量函数应该只能使用其他常量函数和常量系统函数。但据我所知,标准对什么系统函数是常数系统函数是含糊不清的。我还惊讶地发现:“常数函数本身不应该在任何需要常数表达式的上下文中使用常数函数。”为什么不能从常量函数中调用另一个常量函数?函数调用的常规嵌套不是限制。当您调用一个常量函数时,但在执行该函数之前,它必须调用另一个定义参数或范围的常量函数来完成第一个函数的声明。这不是不可能的,但很难实现。