Verilog整数为32位浮点转换

时间:2016-01-01 13:14:05

标签: floating-point verilog

我正在尝试在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

0 个答案:

没有答案