如何在系统verilog中获取real/shortreal的符号、尾数和指数
How to get the sign, mantissa and exponent of a real/shortreal in system verilog
我需要在系统 verilog 代码中对浮点数学建模,这基本上需要我在系统 verilog 中操作浮点数:real/shortreal。我需要能够确定浮点数的尾数、指数和符号。
这个问题的一个c解决方案是将它打字成一个int指针,然后使用移位运算符:
How to get the sign, mantissa and exponent of a floating point number
如果系统 verilog 支持 part/bit select short real 运算符,函数将如下所示:
function automatic shortreal conv2shortreal (bit sign, bit[7:0] exp, bit[22:0] mantissa);
conv2shortreal[31] = sign;
conv2shortreal[30:23] = exp;
conv2shortreal[22:0] = mantissa;
endfunction
输出应该是 shortreal/real
由于在调试 floating-point 实现时这是一个有用的功能,SystemVerilog 具有内置的转换函数(针对 IEEE754):
shortreal r;
bit sign;
bit [7:0] exp;
bit [22:0] mantissa;
r = $bitstoshortreal({sign, exp, mantissa}); // Convert from floating point parts to shortreal
{sign, exp, mantissa} = $shortrealtobits(r); // Convert from short real to floating point parts
我需要在系统 verilog 代码中对浮点数学建模,这基本上需要我在系统 verilog 中操作浮点数:real/shortreal。我需要能够确定浮点数的尾数、指数和符号。
这个问题的一个c解决方案是将它打字成一个int指针,然后使用移位运算符: How to get the sign, mantissa and exponent of a floating point number
如果系统 verilog 支持 part/bit select short real 运算符,函数将如下所示:
function automatic shortreal conv2shortreal (bit sign, bit[7:0] exp, bit[22:0] mantissa);
conv2shortreal[31] = sign;
conv2shortreal[30:23] = exp;
conv2shortreal[22:0] = mantissa;
endfunction
输出应该是 shortreal/real
由于在调试 floating-point 实现时这是一个有用的功能,SystemVerilog 具有内置的转换函数(针对 IEEE754):
shortreal r;
bit sign;
bit [7:0] exp;
bit [22:0] mantissa;
r = $bitstoshortreal({sign, exp, mantissa}); // Convert from floating point parts to shortreal
{sign, exp, mantissa} = $shortrealtobits(r); // Convert from short real to floating point parts