blob: cf6c3a5eaea7a3bb9dcd687b34f4c05dc037c426 [file] [log] [blame]
module FPU_Fclass (Classification_Input,rst_l,Classification_Output,opcode);
// Parameters
parameter Std = 15; // Std = Std - 1
parameter Man = 9; // Mantissa
// Inputs
input [Std:0] Classification_Input;
input rst_l;
input opcode;
// Outputs
output [31:0] Classification_Output;
//wires
wire Classification_Qnan_Output,Classification_Snan_Output,Classification_Pos_Infinity_Output,Classification_Pos_Normal_Output, Classification_Pos_Subnormal_Output,Classification_Pos_Zero_Output,Classification_Neg_Zero_Output,Classification_Neg_Subnormal_Output,Classification_Neg_Normal_Output,Classification_Neg_Infinity_Output;
// Check to see if reset is either high or low
assign Classification_Output = (rst_l & opcode ) ? { {22{1'b0}}, Classification_Qnan_Output,Classification_Snan_Output,Classification_Pos_Infinity_Output,Classification_Pos_Normal_Output, Classification_Pos_Subnormal_Output,Classification_Pos_Zero_Output,Classification_Neg_Zero_Output,Classification_Neg_Subnormal_Output,Classification_Neg_Normal_Output,Classification_Neg_Infinity_Output} : {32{1'b0}};
// -ve infinity
assign Classification_Neg_Infinity_Output = Classification_Input[Std] & (&(Classification_Input[Std-1:Man+1])) & (&(~Classification_Input[Man:0]));
// +ve infinity
assign Classification_Pos_Infinity_Output = ~Classification_Input[Std] & (&(Classification_Input[Std-1:Man+1])) & (&(~Classification_Input[Man:0]));
// -ve 0
assign Classification_Neg_Zero_Output = Classification_Input[Std] & (&(~Classification_Input[Std-1:0]));
// +ve 0
assign Classification_Pos_Zero_Output = ~Classification_Input[Std] & (&(~Classification_Input[Std-1:0]));
// snan
assign Classification_Snan_Output = &(Classification_Input[Std-1:Man+1]) & (~Classification_Input[Man]) & (|(Classification_Input[Man-1:0]));
// qnan
assign Classification_Qnan_Output = &(Classification_Input[Std-1:Man+1]) & Classification_Input[Man] ;
// +ve normal
assign Classification_Pos_Normal_Output = ( (~Classification_Input[Std]) & ( |(Classification_Input[Std-1:Man+1]) ) ) & (~(& Classification_Input[Std-1:Man+1])) ;
// -ve normal
assign Classification_Neg_Normal_Output = ( (Classification_Input[Std]) & (|(Classification_Input[Std-1:Man+1])) ) & (~(& Classification_Input[Std-1:Man+1])) ;
// +ve subnormal
assign Classification_Pos_Subnormal_Output = ~Classification_Input[Std] & (&(~Classification_Input[Std-1:Man+1])) & (|(Classification_Input[Man:0]));
// -ve subnormal
assign Classification_Neg_Subnormal_Output = Classification_Input[Std] & (&(~Classification_Input[Std-1:Man+1])) & (|(Classification_Input[Man:0]));
endmodule