blob: 6293c3c195631397871a7ffeff927ec30e231c13 [file] [log] [blame]
module fpu_itof (
Operand_a_DI,
Sign_prenorm_DO,
Exp_prenorm_DO,
Mant_prenorm_DO
);
parameter C_RM = 2;
parameter C_RM_NEAREST = 2'h0;
parameter C_RM_TRUNC = 2'h1;
parameter C_RM_PLUSINF = 2'h2;
parameter C_RM_MINUSINF = 2'h3;
parameter C_PC = 5;
parameter C_OP = 32;
parameter C_MANT = 23;
parameter C_EXP = 8;
parameter C_BIAS = 127;
parameter C_HALF_BIAS = 63;
parameter C_LEADONE_WIDTH = 7;
parameter C_MANT_PRENORM = C_MANT+1;
parameter C_EXP_ZERO = 8'h00;
parameter C_EXP_ONE = 8'h01;
parameter C_EXP_INF = 8'hff;
parameter C_MANT_ZERO = 23'h0;
parameter C_MANT_NAN = 23'h400000;
parameter C_CMD = 4;
parameter C_FPU_ADD_CMD = 4'h0;
parameter C_FPU_SUB_CMD = 4'h1;
parameter C_FPU_MUL_CMD = 4'h2;
parameter C_FPU_DIV_CMD = 4'h3;
parameter C_FPU_I2F_CMD = 4'h4;
parameter C_FPU_F2I_CMD = 4'h5;
parameter C_FPU_SQRT_CMD = 4'h6;
parameter C_FPU_NOP_CMD = 4'h7;
parameter C_FPU_FMADD_CMD = 4'h8;
parameter C_FPU_FMSUB_CMD = 4'h9;
parameter C_FPU_FNMADD_CMD = 4'hA;
parameter C_FPU_FNMSUB_CMD = 4'hB;
parameter C_RM_NEAREST_MAX = 3'h4;
parameter C_EXP_PRENORM = C_EXP+2;
parameter C_MANT_ADDIN = C_MANT+4;
parameter C_MANT_ADDOUT = C_MANT+5;
parameter C_MANT_SHIFTIN = C_MANT+3;
parameter C_MANT_SHIFTED = C_MANT+4;
parameter C_MANT_INT = C_OP-1;
parameter C_INF = 32'h7fffffff;
parameter C_MINF = 32'h80000000;
parameter C_EXP_SHIFT = C_EXP_PRENORM;
parameter C_SHIFT_BIAS = 9'd127;
parameter C_UNKNOWN = 8'd157;
parameter C_PADMANT = 16'b0;
parameter C_MANT_NoHB_ZERO = 23'h0;
parameter C_MANT_PRENORM_IND = 6;
parameter F_QNAN =32'h7FC00000;
input wire [C_OP - 1:0] Operand_a_DI;
output wire Sign_prenorm_DO;
output wire signed [C_EXP_PRENORM - 1:0] Exp_prenorm_DO;
output wire [C_MANT_PRENORM - 1:0] Mant_prenorm_DO;
wire [C_OP - 1:0] Operand_a_D;
wire Sign_int_D;
wire Sign_prenorm_D;
wire [C_MANT_INT - 1:0] Mant_int_D;
wire [C_OP - 1:0] Temp_twos_to_unsigned_D;
wire [C_MANT_PRENORM - 1:0] Mant_prenorm_D;
wire Hb_a_D;
wire signed [C_EXP_PRENORM - 1:0] Exp_prenorm_D;
assign Operand_a_D = Operand_a_DI;
assign Sign_int_D = Operand_a_D[C_OP - 1];
assign Mant_int_D = Operand_a_D[C_MANT_INT - 1:0];
wire Twos_to_unsigned_zero;
assign Temp_twos_to_unsigned_D = ~Operand_a_D + 1'b1;
wire Twos_to_unsigned_zero_D;
assign Twos_to_unsigned_zero_D = ~(|Temp_twos_to_unsigned_D[C_MANT_INT - 1:0]);
assign Sign_prenorm_D = Sign_int_D;
assign Exp_prenorm_D = $signed({2'd0, C_UNKNOWN});
assign Mant_prenorm_D = (Sign_int_D ? {Twos_to_unsigned_zero_D, Temp_twos_to_unsigned_D[C_MANT_INT - 1:0], C_PADMANT} : {1'b0, Mant_int_D, C_PADMANT});
assign Sign_prenorm_DO = Sign_prenorm_D;
assign Exp_prenorm_DO = Exp_prenorm_D;
assign Mant_prenorm_DO = Mant_prenorm_D;
endmodule