Как получить знак, мантиссу и показатель реального / короткого в системе verilog - PullRequest
1 голос
/ 10 июля 2019

Мне нужно смоделировать математику с плавающей точкой в ​​системном коде verilog, который в основном требует от меня манипулирования плавающими числами в системном verilog: реальный / короткий.Мне нужна способность определять мантиссу, экспоненту и знак числа с плавающей запятой.

Решение этой проблемы c состоит в том, чтобы ввести его в указатель типа int и затем использовать операторы сдвига: Как получить знак, мантиссу и показатель степени числа с плавающей запятой

Если система verilog поддерживает операторы выбора части / бита для короткого действительного числа, функция должна выглядеть следующим образом:

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

выходные данные должны быть короткими / действительными

1 Ответ

1 голос
/ 10 июля 2019

Поскольку это полезная функция при отладке реализаций с плавающей запятой, в 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
...