mirror of
https://github.com/openhwgroup/cvw
synced 2025-02-11 06:05:49 +00:00
Fixed formatting
This commit is contained in:
parent
69711503a8
commit
8c7ea5a47a
@ -27,50 +27,50 @@
|
|||||||
////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
module flags import cvw::*; #(parameter cvw_t P) (
|
module flags import cvw::*; #(parameter cvw_t P) (
|
||||||
input logic Xs, // X sign
|
input logic Xs, // X sign
|
||||||
input logic [P.FMTBITS-1:0] OutFmt, // output format
|
input logic [P.FMTBITS-1:0] OutFmt, // output format
|
||||||
input logic InfIn, // is a Inf input being used
|
input logic InfIn, // is a Inf input being used
|
||||||
input logic XInf, YInf, ZInf, // inputs are infinity
|
input logic XInf, YInf, ZInf, // inputs are infinity
|
||||||
input logic NaNIn, // is a NaN input being used
|
input logic NaNIn, // is a NaN input being used
|
||||||
input logic XSNaN, YSNaN, ZSNaN, // inputs are signaling NaNs
|
input logic XSNaN, YSNaN, ZSNaN, // inputs are signaling NaNs
|
||||||
input logic XZero, YZero, // inputs are zero
|
input logic XZero, YZero, // inputs are zero
|
||||||
input logic [P.NE+1:0] FullRe, // Re with bits to determine sign and overflow
|
input logic [P.NE+1:0] FullRe, // Re with bits to determine sign and overflow
|
||||||
input logic [P.NE+1:0] Me, // exponent of the normalized sum
|
input logic [P.NE+1:0] Me, // exponent of the normalized sum
|
||||||
// rounding
|
// rounding
|
||||||
input logic Plus1, // do you add one for rounding
|
input logic Plus1, // do you add one for rounding
|
||||||
input logic Round, Guard, Sticky, // bits used to determine rounding
|
input logic Round, Guard, Sticky, // bits used to determine rounding
|
||||||
input logic UfPlus1, // do you add one for rounding for the unbounded exponent result
|
input logic UfPlus1, // do you add one for rounding for the unbounded exponent result
|
||||||
// convert
|
// convert
|
||||||
input logic CvtOp, // conversion opperation?
|
input logic CvtOp, // conversion opperation?
|
||||||
input logic ToInt, // convert to integer
|
input logic ToInt, // convert to integer
|
||||||
input logic IntToFp, // convert integer to floating point
|
input logic IntToFp, // convert integer to floating point
|
||||||
input logic Int64, // convert to 64 bit integer
|
input logic Int64, // convert to 64 bit integer
|
||||||
input logic Signed, // convert to a signed integer
|
input logic Signed, // convert to a signed integer
|
||||||
input logic [P.NE:0] CvtCe, // the calculated expoent - Cvt
|
input logic [P.NE:0] CvtCe, // the calculated expoent - Cvt
|
||||||
input logic [1:0] CvtNegResMsbs, // the negitive integer result's most significant bits
|
input logic [1:0] CvtNegResMsbs, // the negitive integer result's most significant bits
|
||||||
// divsqrt
|
// divsqrt
|
||||||
input logic DivOp, // conversion opperation?
|
input logic DivOp, // conversion opperation?
|
||||||
input logic Sqrt, // Sqrt?
|
input logic Sqrt, // Sqrt?
|
||||||
// fma
|
// fma
|
||||||
input logic FmaOp, // Fma opperation?
|
input logic FmaOp, // Fma opperation?
|
||||||
input logic FmaAs, FmaPs, // the product and modified Z signs
|
input logic FmaAs, FmaPs, // the product and modified Z signs
|
||||||
// flags
|
// flags
|
||||||
output logic DivByZero, // divide by zero flag
|
output logic DivByZero, // divide by zero flag
|
||||||
output logic Overflow, // overflow flag to select result
|
output logic Overflow, // overflow flag to select result
|
||||||
output logic Invalid, // invalid flag to select the result
|
output logic Invalid, // invalid flag to select the result
|
||||||
output logic IntInvalid, // invalid integer result to select
|
output logic IntInvalid, // invalid integer result to select
|
||||||
output logic [4:0] PostProcFlg // flags
|
output logic [4:0] PostProcFlg // flags
|
||||||
);
|
);
|
||||||
|
|
||||||
logic SigNaN; // is an input a signaling NaN
|
logic SigNaN; // is an input a signaling NaN
|
||||||
logic Inexact; // final inexact flag
|
logic Inexact; // final inexact flag
|
||||||
logic FpInexact; // floating point inexact flag
|
logic FpInexact; // floating point inexact flag
|
||||||
logic IntInexact; // integer inexact flag
|
logic IntInexact; // integer inexact flag
|
||||||
logic FmaInvalid; // integer invalid flag
|
logic FmaInvalid; // integer invalid flag
|
||||||
logic DivInvalid; // integer invalid flag
|
logic DivInvalid; // integer invalid flag
|
||||||
logic Underflow; // Underflow flag
|
logic Underflow; // Underflow flag
|
||||||
logic ResExpGteMax; // is the result greater than or equal to the maximum floating point expoent
|
logic ResExpGteMax; // is the result greater than or equal to the maximum floating point expoent
|
||||||
logic ShiftGtIntSz; // is the shift greater than the the integer size (use Re to account for possible roundning "shift")
|
logic ShiftGtIntSz; // is the shift greater than the the integer size (use Re to account for possible roundning "shift")
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
// Overflow
|
// Overflow
|
||||||
@ -86,7 +86,7 @@ module flags import cvw::*; #(parameter cvw_t P) (
|
|||||||
// 65 = ...0 0 0 0 0 1 0 0 0 0 0 1
|
// 65 = ...0 0 0 0 0 1 0 0 0 0 0 1
|
||||||
// | or | | or |
|
// | or | | or |
|
||||||
// 33 = ...0 0 0 0 0 0 1 0 0 0 0 1
|
// 33 = ...0 0 0 0 0 0 1 0 0 0 0 1
|
||||||
// | or | | or |
|
// | or | | or |
|
||||||
// larger or equal if:
|
// larger or equal if:
|
||||||
// - any of the bits after the most significan 1 is one
|
// - any of the bits after the most significan 1 is one
|
||||||
// - the most signifcant in 65 or 33 is still a one in the number and
|
// - the most signifcant in 65 or 33 is still a one in the number and
|
||||||
@ -102,9 +102,9 @@ module flags import cvw::*; #(parameter cvw_t P) (
|
|||||||
end else if (P.FPSIZES == 3) begin
|
end else if (P.FPSIZES == 3) begin
|
||||||
always_comb
|
always_comb
|
||||||
case (OutFmt)
|
case (OutFmt)
|
||||||
P.FMT: ResExpGteMax = &FullRe[P.NE-1:0] | FullRe[P.NE];
|
P.FMT: ResExpGteMax = &FullRe[P.NE-1:0] | FullRe[P.NE];
|
||||||
P.FMT1: ResExpGteMax = &FullRe[P.NE1-1:0] | (|FullRe[P.NE:P.NE1]);
|
P.FMT1: ResExpGteMax = &FullRe[P.NE1-1:0] | (|FullRe[P.NE:P.NE1]);
|
||||||
P.FMT2: ResExpGteMax = &FullRe[P.NE2-1:0] | (|FullRe[P.NE:P.NE2]);
|
P.FMT2: ResExpGteMax = &FullRe[P.NE2-1:0] | (|FullRe[P.NE:P.NE2]);
|
||||||
default: ResExpGteMax = 1'bx;
|
default: ResExpGteMax = 1'bx;
|
||||||
endcase
|
endcase
|
||||||
assign ShiftGtIntSz = (|FullRe[P.NE:7]|(FullRe[6]&~Int64)) | ((|FullRe[4:0]|(FullRe[5]&Int64))&((FullRe[5]&~Int64) | FullRe[6]&Int64));
|
assign ShiftGtIntSz = (|FullRe[P.NE:7]|(FullRe[6]&~Int64)) | ((|FullRe[4:0]|(FullRe[5]&Int64))&((FullRe[5]&~Int64) | FullRe[6]&Int64));
|
||||||
@ -120,7 +120,6 @@ module flags import cvw::*; #(parameter cvw_t P) (
|
|||||||
assign ShiftGtIntSz = (|FullRe[P.Q_NE:7]|(FullRe[6]&~Int64)) | ((|FullRe[4:0]|(FullRe[5]&Int64))&((FullRe[5]&~Int64) | FullRe[6]&Int64));
|
assign ShiftGtIntSz = (|FullRe[P.Q_NE:7]|(FullRe[6]&~Int64)) | ((|FullRe[4:0]|(FullRe[5]&Int64))&((FullRe[5]&~Int64) | FullRe[6]&Int64));
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
// calulate overflow flag:
|
// calulate overflow flag:
|
||||||
// if the result is greater than or equal to the max exponent(not taking into account sign)
|
// if the result is greater than or equal to the max exponent(not taking into account sign)
|
||||||
// | and the exponent isn't negitive
|
// | and the exponent isn't negitive
|
||||||
@ -142,7 +141,6 @@ module flags import cvw::*; #(parameter cvw_t P) (
|
|||||||
// | | | | | |
|
// | | | | | |
|
||||||
assign Underflow = ((FullRe[P.NE+1] | (FullRe == 0) | ((FullRe == 1) & (Me == 0) & ~(UfPlus1&Guard)))&(Round|Sticky|Guard))&~(InfIn|NaNIn|DivByZero|Invalid);
|
assign Underflow = ((FullRe[P.NE+1] | (FullRe == 0) | ((FullRe == 1) & (Me == 0) & ~(UfPlus1&Guard)))&(Round|Sticky|Guard))&~(InfIn|NaNIn|DivByZero|Invalid);
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
// Inexact
|
// Inexact
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
@ -199,7 +197,6 @@ module flags import cvw::*; #(parameter cvw_t P) (
|
|||||||
// - don't set flag if an input is NaN or Inf(IEEE says has to be a finite numerator)
|
// - don't set flag if an input is NaN or Inf(IEEE says has to be a finite numerator)
|
||||||
assign DivByZero = YZero&DivOp&~Sqrt&~(XZero|NaNIn|InfIn);
|
assign DivByZero = YZero&DivOp&~Sqrt&~(XZero|NaNIn|InfIn);
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
// final flags
|
// final flags
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
@ -209,7 +206,3 @@ module flags import cvw::*; #(parameter cvw_t P) (
|
|||||||
assign PostProcFlg = {Invalid|(IntInvalid&CvtOp&ToInt), DivByZero, Overflow&~(ToInt&CvtOp), Underflow&~(ToInt&CvtOp), Inexact};
|
assign PostProcFlg = {Invalid|(IntInvalid&CvtOp&ToInt), DivByZero, Overflow&~(ToInt&CvtOp), Underflow&~(ToInt&CvtOp), Inexact};
|
||||||
|
|
||||||
endmodule
|
endmodule
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user