如何检查SystemVerilog中的实变量是否为'Not a Number'(NaN)或无限(Inf)?是否存在诸如C99中的isnan()或isinf()这样的系统任务?
答案 0 :(得分:0)
您可以这样做:
let isnan(r) = {$realtobits(r)}[62:52] == '1 && {$realtobits(r)}[51:0] != '0;
尽管SystemVerilog LRM引用IEEE 754表示浮点数,但它并未定义可能产生 NaN 或 Inf 的实际运算的结果。因此,请谨慎使用。
答案 1 :(得分:0)
我现在使用
function real_is_number;
input real in;
reg [63:0] in_bits;
begin
in_bits=$realtobits(in);
real_is_number = ~&in_bits[62:52];
end
endfunction
检测任何不是普通数字的实数值。