Для поведенческого кода используйте $ rtoi () или $ realtobits ()
real in1;
integer a1;
wire [63:0] b1;
a1 = $roti(in1); //Truncates fractional part
b1 = $realtobits(in1); //Probably not what you want
Вы можете использовать $ bitstoreal (), если вам нужно привести битовый вектор к реальному типу.
EDIT:
Поэтому, если я правильно следую вашим комментариям, вы создаете модель ALU с плавающей запятой, которая работает с 32-битными значениями данных. В этом случае вы можете использовать real типы данных, поскольку Verilog может обрабатывать этот формат изначально. Конечно, вы не сможете обнаружить определенные ситуации
task [31:0] realAdd(input [31:0] in1, input [31:0] in2, output [31:0] out);
begin
real rIn1,rIn2,rOut;
rIn1 = $bitstoreal(in1);
rIn2 = $bitstoreal(in2);
rOut = rIn1 + rIn2;
out = $realtobits(rOut);
end
endtask
Все эти функции используют двойную точность, поэтому вам нужно будет выполнить тривиальные битовые расширения для обработки входов с одинарной точностью, а также некоторые нетривиальные проверки / усечение границ на выходе. Вы можете избежать этого, используя SystemVerilog, в котором есть функции $ bitstoshortreal () / $ shortrealtobits (), которые работают со значениями одинарной точности.
Если вам нужно оборудование для этого, Computer Organization & Design содержит описание многоцикловой реализации. Как писал Энди, для вашего случая могут быть лучшие ресурсы. Они не просты в разработке.