我正在尝试在32位整数和32位浮点数之间编写转换模块。我认为我得到的输出是正确的,因为二进制匹配在线计算器的输出。我得到1000100101101100000000000000000作为输出。我认为问题可能是位顺序。我尝试移动符号,指数和尾数,但它只是给出了一个不同的错误值。我检查了exp和尾数的十进制值,它们是正确的。我测试的整数值是1456。
module flt_itof(output [31:0] flt_value,
input [31:0] int_value);
integer i;
reg [7:0] exp;
reg [23:0] mantissa;
assign flt_value = {int_value[31], exp, mantissa};
always @* begin
exp = 0;
mantissa = 0;
if(int_value != 32'b0) begin
for(i = 0; i < 32; i = i + 1)
if(int_value[i]) exp = i;
if(exp > 24)
mantissa = int_value >> (exp - 24);
else if(exp < 24)
mantissa = int_value << (24 - exp);
else
mantissa = int_value;
exp = exp + 127;
end
end
endmodule