在SystemVerilog中检查NaN或Inf

时间:2018-07-26 12:15:34

标签: verilog system-verilog

如何检查SystemVerilog中的实变量是否为'Not a Number'(NaN)或无限(Inf)?是否存在诸如C99中的isnan()或isinf()这样的系统任务?

2 个答案:

答案 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

检测任何不是普通数字的实数值。