forked from Github_Repos/cvw
		
	fixed compilation errors
This commit is contained in:
		
							parent
							
								
									8420b1e87c
								
							
						
					
					
						commit
						6b39b8c702
					
				@ -1,2 +1,2 @@
 | 
			
		||||
vsim -do "do wally-pipelined.do rv64gc imperas64d"
 | 
			
		||||
vsim -do "do wally-pipelined.do rv32e imperas64d"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,7 +1,7 @@
 | 
			
		||||
 | 
			
		||||
`include "wally-config.vh"
 | 
			
		||||
// largest length in IEU/FPU
 | 
			
		||||
`define LGLEN 64//((`NF<`XLEN) ? `XLEN : `NF)
 | 
			
		||||
`define LGLEN ((`NF<`XLEN) ? `XLEN : `NF)
 | 
			
		||||
 | 
			
		||||
module fcvt (
 | 
			
		||||
    input logic             XSgnE,          // input's sign
 | 
			
		||||
 | 
			
		||||
@ -1,11 +1,11 @@
 | 
			
		||||
`include "wally-config.vh"
 | 
			
		||||
 | 
			
		||||
module unpack ( 
 | 
			
		||||
    input logic  [`FLEN-1:0]        X, Y, Z,    // inputs from register file
 | 
			
		||||
    input logic  [`FMTBITS-1:0]     FmtE,       // format signal 00 - single 01 - double 11 - quad 10 - half
 | 
			
		||||
    input logic  [$signed(`FLEN)-$signed(1):0]        X, Y, Z,    // inputs from register file
 | 
			
		||||
    input logic  [$signed(`FMTBITS)-$signed(1):0]     FmtE,       // format signal 00 - single 01 - double 11 - quad 10 - half
 | 
			
		||||
    output logic                    XSgnE, YSgnE, ZSgnE,    // sign bits of XYZ
 | 
			
		||||
    output logic [`NE-1:0]          XExpE, YExpE, ZExpE,    // exponents of XYZ (converted to largest supported precision)
 | 
			
		||||
    output logic [`NF:0]            XManE, YManE, ZManE,    // mantissas of XYZ (converted to largest supported precision)
 | 
			
		||||
    output logic [$signed(`NE)-$signed(1):0]          XExpE, YExpE, ZExpE,    // exponents of XYZ (converted to largest supported precision)
 | 
			
		||||
    output logic [$signed(`NF):0]            XManE, YManE, ZManE,    // mantissas of XYZ (converted to largest supported precision)
 | 
			
		||||
    output logic                    XNaNE, YNaNE, ZNaNE,    // is XYZ a NaN
 | 
			
		||||
    output logic                    XSNaNE, YSNaNE, ZSNaNE, // is XYZ a signaling NaN
 | 
			
		||||
    output logic                    XDenormE, ZDenormE,   // is XYZ denormalized
 | 
			
		||||
@ -14,7 +14,7 @@ module unpack (
 | 
			
		||||
    output logic                    XExpMaxE                        // does X have the maximum exponent (NaN or Inf)
 | 
			
		||||
);
 | 
			
		||||
 
 | 
			
		||||
    logic [`NF-1:0] XFracE, YFracE, ZFracE; //Fraction of XYZ
 | 
			
		||||
    logic [$signed(`NF)-$signed(1):0] XFracE, YFracE, ZFracE; //Fraction of XYZ
 | 
			
		||||
    logic           XExpNonZero, YExpNonZero, ZExpNonZero; // is the exponent of XYZ non-zero
 | 
			
		||||
    logic           XFracZero, YFracZero, ZFracZero; // is the fraction zero
 | 
			
		||||
    logic           YExpMaxE, ZExpMaxE;  // is the exponent all 1s
 | 
			
		||||
 | 
			
		||||
@ -25,9 +25,11 @@ module testbenchfp;
 | 
			
		||||
 | 
			
		||||
  logic               clk=0;
 | 
			
		||||
  logic [31:0]        TestNum=0;    // index for the test
 | 
			
		||||
  logic [31:0]        FmaTestNum=0;    // index for the test
 | 
			
		||||
  logic [31:0]        OpCtrlNum=0;  // index for OpCtrl
 | 
			
		||||
  logic [31:0]        errors=0;     // how many errors
 | 
			
		||||
  logic [31:0]        VectorNum=0;  // index for test vector
 | 
			
		||||
  logic [31:0]        FmaVectorNum=0;  // index for test vector
 | 
			
		||||
  logic [31:0]        FrmNum=0;     // index for rounding mode
 | 
			
		||||
  logic [`FLEN*4+7:0] TestVectors[46464:0];     // list of test vectors
 | 
			
		||||
  logic [`FLEN*4+7:0] FmaRneVectors[6133248:0]; // list of fma rne test vectors
 | 
			
		||||
@ -646,18 +648,20 @@ module testbenchfp;
 | 
			
		||||
  // Read the first test
 | 
			
		||||
  initial begin
 | 
			
		||||
    $display("\n\nRunning %s vectors", Tests[TestNum]);
 | 
			
		||||
    $display("Running FMA precision %d", FmaTestNum);
 | 
			
		||||
    $readmemh({`PATH, Tests[TestNum]}, TestVectors);
 | 
			
		||||
    $readmemh({`PATH, FmaRneTests[TestNum]}, FmaRneVectors);
 | 
			
		||||
    $readmemh({`PATH, FmaRuTests[TestNum]}, FmaRuVectors);
 | 
			
		||||
    $readmemh({`PATH, FmaRdTests[TestNum]}, FmaRdVectors);
 | 
			
		||||
    $readmemh({`PATH, FmaRzTests[TestNum]}, FmaRzVectors);
 | 
			
		||||
    $readmemh({`PATH, FmaRnmTests[TestNum]}, FmaRnmVectors);
 | 
			
		||||
    $readmemh({`PATH, FmaRneTests[FmaTestNum]}, FmaRneVectors);
 | 
			
		||||
    $readmemh({`PATH, FmaRuTests[FmaTestNum]}, FmaRuVectors);
 | 
			
		||||
    $readmemh({`PATH, FmaRdTests[FmaTestNum]}, FmaRdVectors);
 | 
			
		||||
    $readmemh({`PATH, FmaRzTests[FmaTestNum]}, FmaRzVectors);
 | 
			
		||||
    $readmemh({`PATH, FmaRnmTests[FmaTestNum]}, FmaRnmVectors);
 | 
			
		||||
    // set the test index to 0
 | 
			
		||||
    TestNum = 0;
 | 
			
		||||
    FmaTestNum = 0;
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  // set a the signals for all tests
 | 
			
		||||
  always_comb FmaFmtVal = FmaFmt[TestNum];
 | 
			
		||||
  always_comb FmaFmtVal = FmaFmt[FmaTestNum];
 | 
			
		||||
  always_comb UnitVal = Unit[TestNum];
 | 
			
		||||
  always_comb FmtVal = Fmt[TestNum];
 | 
			
		||||
  always_comb OpCtrlVal = OpCtrl[OpCtrlNum];
 | 
			
		||||
@ -676,7 +680,7 @@ module testbenchfp;
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  // extract the inputs (X, Y, Z, SrcA) and the output (Ans, AnsFlg) from the current test vector
 | 
			
		||||
  readfmavectors readfmarnevectors (.clk, .TestVector(FmaRneVectors[VectorNum]), .Ans(FmaRneAns), .AnsFlg(FmaRneAnsFlg), 
 | 
			
		||||
  readfmavectors readfmarnevectors (.clk, .TestVector(FmaRneVectors[FmaVectorNum]), .Ans(FmaRneAns), .AnsFlg(FmaRneAnsFlg), 
 | 
			
		||||
                                    .XSgnE(FmaRneXSgn), .YSgnE(FmaRneYSgn), .ZSgnE(FmaRneZSgn),
 | 
			
		||||
                                    .XExpE(FmaRneXExp), .YExpE(FmaRneYExp), .ZExpE(FmaRneZExp), 
 | 
			
		||||
                                    .XManE(FmaRneXMan), .YManE(FmaRneYMan), .ZManE(FmaRneZMan), 
 | 
			
		||||
@ -686,7 +690,7 @@ module testbenchfp;
 | 
			
		||||
                                    .XZeroE(FmaRneXZero), .YZeroE(FmaRneYZero), .ZZeroE(FmaRneZZero),
 | 
			
		||||
                                    .XInfE(FmaRneXInf), .YInfE(FmaRneYInf), .ZInfE(FmaRneZInf), .FmaModFmt, .FmaFmt(FmaFmtVal),
 | 
			
		||||
                                    .X(FmaRneX), .Y(FmaRneY), .Z(FmaRneZ));
 | 
			
		||||
  readfmavectors readfmarzvectors (.clk, .TestVector(FmaRzVectors[VectorNum]), .Ans(FmaRzAns), .AnsFlg(FmaRzAnsFlg), 
 | 
			
		||||
  readfmavectors readfmarzvectors (.clk, .TestVector(FmaRzVectors[FmaVectorNum]), .Ans(FmaRzAns), .AnsFlg(FmaRzAnsFlg), 
 | 
			
		||||
                                    .XSgnE(FmaRzXSgn), .YSgnE(FmaRzYSgn), .ZSgnE(FmaRzZSgn), .FmaModFmt,
 | 
			
		||||
                                    .XExpE(FmaRzXExp), .YExpE(FmaRzYExp), .ZExpE(FmaRzZExp), 
 | 
			
		||||
                                    .XManE(FmaRzXMan), .YManE(FmaRzYMan), .ZManE(FmaRzZMan), 
 | 
			
		||||
@ -696,7 +700,7 @@ module testbenchfp;
 | 
			
		||||
                                    .XZeroE(FmaRzXZero), .YZeroE(FmaRzYZero), .ZZeroE(FmaRzZZero),
 | 
			
		||||
                                    .XInfE(FmaRzXInf), .YInfE(FmaRzYInf), .ZInfE(FmaRzZInf), .FmaFmt(FmaFmtVal),
 | 
			
		||||
                                    .X(FmaRzX), .Y(FmaRzY), .Z(FmaRzZ));
 | 
			
		||||
  readfmavectors readfmaruvectors (.clk, .TestVector(FmaRuVectors[VectorNum]), .Ans(FmaRuAns), .AnsFlg(FmaRuAnsFlg), 
 | 
			
		||||
  readfmavectors readfmaruvectors (.clk, .TestVector(FmaRuVectors[FmaVectorNum]), .Ans(FmaRuAns), .AnsFlg(FmaRuAnsFlg), 
 | 
			
		||||
                                    .XSgnE(FmaRuXSgn), .YSgnE(FmaRuYSgn), .ZSgnE(FmaRuZSgn), .FmaModFmt,
 | 
			
		||||
                                    .XExpE(FmaRuXExp), .YExpE(FmaRuYExp), .ZExpE(FmaRuZExp), 
 | 
			
		||||
                                    .XManE(FmaRuXMan), .YManE(FmaRuYMan), .ZManE(FmaRuZMan), 
 | 
			
		||||
@ -706,7 +710,7 @@ module testbenchfp;
 | 
			
		||||
                                    .XZeroE(FmaRuXZero), .YZeroE(FmaRuYZero), .ZZeroE(FmaRuZZero),
 | 
			
		||||
                                    .XInfE(FmaRuXInf), .YInfE(FmaRuYInf), .ZInfE(FmaRuZInf), .FmaFmt(FmaFmtVal),
 | 
			
		||||
                                    .X(FmaRuX), .Y(FmaRuY), .Z(FmaRuZ));
 | 
			
		||||
  readfmavectors readfmardvectors (.clk, .TestVector(FmaRdVectors[VectorNum]), .Ans(FmaRdAns), .AnsFlg(FmaRdAnsFlg), 
 | 
			
		||||
  readfmavectors readfmardvectors (.clk, .TestVector(FmaRdVectors[FmaVectorNum]), .Ans(FmaRdAns), .AnsFlg(FmaRdAnsFlg), 
 | 
			
		||||
                                    .XSgnE(FmaRdXSgn), .YSgnE(FmaRdYSgn), .ZSgnE(FmaRdZSgn), .FmaModFmt,
 | 
			
		||||
                                    .XExpE(FmaRdXExp), .YExpE(FmaRdYExp), .ZExpE(FmaRdZExp), 
 | 
			
		||||
                                    .XManE(FmaRdXMan), .YManE(FmaRdYMan), .ZManE(FmaRdZMan), 
 | 
			
		||||
@ -716,7 +720,7 @@ module testbenchfp;
 | 
			
		||||
                                    .XZeroE(FmaRdXZero), .YZeroE(FmaRdYZero), .ZZeroE(FmaRdZZero),
 | 
			
		||||
                                    .XInfE(FmaRdXInf), .YInfE(FmaRdYInf), .ZInfE(FmaRdZInf), .FmaFmt(FmaFmtVal),
 | 
			
		||||
                                    .X(FmaRdX), .Y(FmaRdY), .Z(FmaRdZ));
 | 
			
		||||
  readfmavectors readfmarnmvectors (.clk, .TestVector(FmaRnmVectors[VectorNum]), .Ans(FmaRnmAns), .AnsFlg(FmaRnmAnsFlg), 
 | 
			
		||||
  readfmavectors readfmarnmvectors (.clk, .TestVector(FmaRnmVectors[FmaVectorNum]), .Ans(FmaRnmAns), .AnsFlg(FmaRnmAnsFlg), 
 | 
			
		||||
                                    .XSgnE(FmaRnmXSgn), .YSgnE(FmaRnmYSgn), .ZSgnE(FmaRnmZSgn), .FmaModFmt,
 | 
			
		||||
                                    .XExpE(FmaRnmXExp), .YExpE(FmaRnmYExp), .ZExpE(FmaRnmZExp), 
 | 
			
		||||
                                    .XManE(FmaRnmXMan), .YManE(FmaRnmYMan), .ZManE(FmaRnmZMan),
 | 
			
		||||
@ -1024,130 +1028,158 @@ end
 | 
			
		||||
    //    - the sign of the NaN does not matter for the opperations being tested
 | 
			
		||||
    //    - when 2 or more NaNs are inputed the NaN that is propigated doesn't matter
 | 
			
		||||
    case (FmaFmtVal)
 | 
			
		||||
      4'b11: FmaRneNaNGood =((FmaRneAnsFlg[4]&(FmaRneRes[`Q_LEN-2:0] === {{`Q_NE+1{1'b1}}, {`Q_NF-1{1'b0}}})) |
 | 
			
		||||
      4'b11: FmaRneNaNGood =(((`IEEE754==0)&(FmaRneRes === {1'b0, {`Q_NE+1{1'b1}}, {`Q_NF-1{1'b0}}})) |
 | 
			
		||||
                            (FmaRneAnsFlg[4]&(FmaRneRes[`Q_LEN-2:0] === {{`Q_NE+1{1'b1}}, {`Q_NF-1{1'b0}}})) |
 | 
			
		||||
                            (FmaRneXNaN&(FmaRneRes[`Q_LEN-2:0] === {FmaRneX[`Q_LEN-2:`Q_NF],1'b1,FmaRneX[`Q_NF-2:0]})) | 
 | 
			
		||||
                            (FmaRneYNaN&(FmaRneRes[`Q_LEN-2:0] === {FmaRneY[`Q_LEN-2:`Q_NF],1'b1,FmaRneY[`Q_NF-2:0]})) | 
 | 
			
		||||
                            (FmaRneZNaN&(FmaRneRes[`Q_LEN-2:0] === {FmaRneZ[`Q_LEN-2:`Q_NF],1'b1,FmaRneZ[`Q_NF-2:0]})));
 | 
			
		||||
      4'b01: FmaRneNaNGood =((FmaRneAnsFlg[4]&(FmaRneRes[`D_LEN-2:0] === {{`D_NE+1{1'b1}}, {`D_NF-1{1'b0}}})) |
 | 
			
		||||
      4'b01: FmaRneNaNGood =(((`IEEE754==0)&(FmaRneRes === {1'b0, {`D_NE+1{1'b1}}, {`D_NF-1{1'b0}}})) |
 | 
			
		||||
                            (FmaRneAnsFlg[4]&(FmaRneRes[`D_LEN-2:0] === {{`D_NE+1{1'b1}}, {`D_NF-1{1'b0}}})) |
 | 
			
		||||
                            (FmaRneXNaN&(FmaRneRes[`D_LEN-2:0] === {FmaRneX[`D_LEN-2:`D_NF],1'b1,FmaRneX[`D_NF-2:0]})) | 
 | 
			
		||||
                            (FmaRneYNaN&(FmaRneRes[`D_LEN-2:0] === {FmaRneY[`D_LEN-2:`D_NF],1'b1,FmaRneY[`D_NF-2:0]})) | 
 | 
			
		||||
                            (FmaRneZNaN&(FmaRneRes[`D_LEN-2:0] === {FmaRneZ[`D_LEN-2:`D_NF],1'b1,FmaRneZ[`D_NF-2:0]})));
 | 
			
		||||
      4'b00: FmaRneNaNGood =((FmaRneAnsFlg[4]&(FmaRneRes[`S_LEN-2:0] === {{`S_NE+1{1'b1}}, {`S_NF-1{1'b0}}})) |
 | 
			
		||||
      4'b00: FmaRneNaNGood =(((`IEEE754==0)&(FmaRneRes === {1'b0, {`S_NE+1{1'b1}}, {`S_NF-1{1'b0}}})) |
 | 
			
		||||
                            (FmaRneAnsFlg[4]&(FmaRneRes[`S_LEN-2:0] === {{`S_NE+1{1'b1}}, {`S_NF-1{1'b0}}})) |
 | 
			
		||||
                            (FmaRneXNaN&(FmaRneRes[`S_LEN-2:0] === {FmaRneX[`S_LEN-2:`S_NF],1'b1,FmaRneX[`S_NF-2:0]})) | 
 | 
			
		||||
                            (FmaRneYNaN&(FmaRneRes[`S_LEN-2:0] === {FmaRneY[`S_LEN-2:`S_NF],1'b1,FmaRneY[`S_NF-2:0]})) | 
 | 
			
		||||
                            (FmaRneZNaN&(FmaRneRes[`S_LEN-2:0] === {FmaRneZ[`S_LEN-2:`S_NF],1'b1,FmaRneZ[`S_NF-2:0]})));
 | 
			
		||||
      4'b10: FmaRneNaNGood =((FmaRneAnsFlg[4]&(FmaRneRes[`H_LEN-2:0] === {{`H_NE+1{1'b1}}, {`H_NF-1{1'b0}}})) |
 | 
			
		||||
      4'b10: FmaRneNaNGood =(((`IEEE754==0)&(FmaRneRes === {1'b0, {`H_NE+1{1'b1}}, {`H_NF-1{1'b0}}})) |
 | 
			
		||||
                            (FmaRneAnsFlg[4]&(FmaRneRes[`H_LEN-2:0] === {{`H_NE+1{1'b1}}, {`H_NF-1{1'b0}}})) |
 | 
			
		||||
                            (FmaRneXNaN&(FmaRneRes[`H_LEN-2:0] === {FmaRneX[`H_LEN-2:`H_NF],1'b1,FmaRneX[`H_NF-2:0]})) | 
 | 
			
		||||
                            (FmaRneYNaN&(FmaRneRes[`H_LEN-2:0] === {FmaRneY[`H_LEN-2:`H_NF],1'b1,FmaRneY[`H_NF-2:0]})) | 
 | 
			
		||||
                            (FmaRneZNaN&(FmaRneRes[`H_LEN-2:0] === {FmaRneZ[`H_LEN-2:`H_NF],1'b1,FmaRneZ[`H_NF-2:0]})));
 | 
			
		||||
    endcase
 | 
			
		||||
    case (FmaFmtVal)
 | 
			
		||||
      4'b11: FmaRzNaNGood = ((FmaRzAnsFlg[4]&(FmaRzRes[`Q_LEN-2:0] === {{`Q_NE+1{1'b1}}, {`Q_NF-1{1'b0}}})) |
 | 
			
		||||
      4'b11: FmaRzNaNGood = (((`IEEE754==0)&(FmaRneRes === {1'b0, {`Q_NE+1{1'b1}}, {`Q_NF-1{1'b0}}})) |
 | 
			
		||||
                            (FmaRzAnsFlg[4]&(FmaRzRes[`Q_LEN-2:0] === {{`Q_NE+1{1'b1}}, {`Q_NF-1{1'b0}}})) |
 | 
			
		||||
                            (FmaRzXNaN&(FmaRzRes[`Q_LEN-2:0] === {FmaRzX[`Q_LEN-2:`Q_NF],1'b1,FmaRzX[`Q_NF-2:0]})) | 
 | 
			
		||||
                            (FmaRzYNaN&(FmaRzRes[`Q_LEN-2:0] === {FmaRzY[`Q_LEN-2:`Q_NF],1'b1,FmaRzY[`Q_NF-2:0]})) | 
 | 
			
		||||
                            (FmaRzZNaN&(FmaRzRes[`Q_LEN-2:0] === {FmaRzZ[`Q_LEN-2:`Q_NF],1'b1,FmaRzZ[`Q_NF-2:0]})));
 | 
			
		||||
      4'b01: FmaRzNaNGood = ((FmaRzAnsFlg[4]&(FmaRzRes[`D_LEN-2:0] === {{`D_NE+1{1'b1}}, {`D_NF-1{1'b0}}})) |
 | 
			
		||||
      4'b01: FmaRzNaNGood = (((`IEEE754==0)&(FmaRneRes === {1'b0, {`D_NE+1{1'b1}}, {`D_NF-1{1'b0}}})) |
 | 
			
		||||
                            (FmaRzAnsFlg[4]&(FmaRzRes[`D_LEN-2:0] === {{`D_NE+1{1'b1}}, {`D_NF-1{1'b0}}})) |
 | 
			
		||||
                            (FmaRzXNaN&(FmaRzRes[`D_LEN-2:0] === {FmaRzX[`D_LEN-2:`D_NF],1'b1,FmaRzX[`D_NF-2:0]})) | 
 | 
			
		||||
                            (FmaRzYNaN&(FmaRzRes[`D_LEN-2:0] === {FmaRzY[`D_LEN-2:`D_NF],1'b1,FmaRzY[`D_NF-2:0]})) | 
 | 
			
		||||
                            (FmaRzZNaN&(FmaRzRes[`D_LEN-2:0] === {FmaRzZ[`D_LEN-2:`D_NF],1'b1,FmaRzZ[`D_NF-2:0]})));
 | 
			
		||||
      4'b00: FmaRzNaNGood = ((FmaRzAnsFlg[4]&(FmaRzRes[`S_LEN-2:0] === {{`S_NE+1{1'b1}}, {`S_NF-1{1'b0}}})) |
 | 
			
		||||
      4'b00: FmaRzNaNGood = (((`IEEE754==0)&(FmaRneRes === {1'b0, {`S_NE+1{1'b1}}, {`S_NF-1{1'b0}}})) |
 | 
			
		||||
                            (FmaRzAnsFlg[4]&(FmaRzRes[`S_LEN-2:0] === {{`S_NE+1{1'b1}}, {`S_NF-1{1'b0}}})) |
 | 
			
		||||
                            (FmaRzXNaN&(FmaRzRes[`S_LEN-2:0] === {FmaRzX[`S_LEN-2:`S_NF],1'b1,FmaRzX[`S_NF-2:0]})) | 
 | 
			
		||||
                            (FmaRzYNaN&(FmaRzRes[`S_LEN-2:0] === {FmaRzY[`S_LEN-2:`S_NF],1'b1,FmaRzY[`S_NF-2:0]})) | 
 | 
			
		||||
                            (FmaRzZNaN&(FmaRzRes[`S_LEN-2:0] === {FmaRzZ[`S_LEN-2:`S_NF],1'b1,FmaRzZ[`S_NF-2:0]})));
 | 
			
		||||
      4'b10: FmaRzNaNGood = ((FmaRzAnsFlg[4]&(FmaRzRes[`H_LEN-2:0] === {{`H_NE+1{1'b1}}, {`H_NF-1{1'b0}}})) |
 | 
			
		||||
      4'b10: FmaRzNaNGood = (((`IEEE754==0)&(FmaRneRes === {1'b0, {`H_NE+1{1'b1}}, {`H_NF-1{1'b0}}})) |
 | 
			
		||||
                            (FmaRzAnsFlg[4]&(FmaRzRes[`H_LEN-2:0] === {{`H_NE+1{1'b1}}, {`H_NF-1{1'b0}}})) |
 | 
			
		||||
                            (FmaRzXNaN&(FmaRzRes[`H_LEN-2:0] === {FmaRzX[`H_LEN-2:`H_NF],1'b1,FmaRzX[`H_NF-2:0]})) | 
 | 
			
		||||
                            (FmaRzYNaN&(FmaRzRes[`H_LEN-2:0] === {FmaRzY[`H_LEN-2:`H_NF],1'b1,FmaRzY[`H_NF-2:0]})) | 
 | 
			
		||||
                            (FmaRzZNaN&(FmaRzRes[`H_LEN-2:0] === {FmaRzZ[`H_LEN-2:`H_NF],1'b1,FmaRzZ[`H_NF-2:0]})));
 | 
			
		||||
    endcase
 | 
			
		||||
    case (FmaFmtVal)
 | 
			
		||||
      4'b11: FmaRuNaNGood = ((FmaRuAnsFlg[4]&(FmaRuRes[`Q_LEN-2:0] === {{`Q_NE+1{1'b1}}, {`Q_NF-1{1'b0}}})) |
 | 
			
		||||
      4'b11: FmaRuNaNGood = (((`IEEE754==0)&(FmaRneRes === {1'b0, {`Q_NE+1{1'b1}}, {`Q_NF-1{1'b0}}})) |
 | 
			
		||||
                            (FmaRuAnsFlg[4]&(FmaRuRes[`Q_LEN-2:0] === {{`Q_NE+1{1'b1}}, {`Q_NF-1{1'b0}}})) |
 | 
			
		||||
                            (FmaRuXNaN&(FmaRuRes[`Q_LEN-2:0] === {FmaRuX[`Q_LEN-2:`Q_NF],1'b1,FmaRuX[`Q_NF-2:0]})) | 
 | 
			
		||||
                            (FmaRuYNaN&(FmaRuRes[`Q_LEN-2:0] === {FmaRuY[`Q_LEN-2:`Q_NF],1'b1,FmaRuY[`Q_NF-2:0]})) | 
 | 
			
		||||
                            (FmaRuZNaN&(FmaRuRes[`Q_LEN-2:0] === {FmaRuZ[`Q_LEN-2:`Q_NF],1'b1,FmaRuZ[`Q_NF-2:0]})));
 | 
			
		||||
      4'b01: FmaRuNaNGood = ((FmaRuAnsFlg[4]&(FmaRuRes[`D_LEN-2:0] === {{`D_NE+1{1'b1}}, {`D_NF-1{1'b0}}})) |
 | 
			
		||||
      4'b01: FmaRuNaNGood = (((`IEEE754==0)&(FmaRneRes === {1'b0, {`D_NE+1{1'b1}}, {`D_NF-1{1'b0}}})) |
 | 
			
		||||
                            (FmaRuAnsFlg[4]&(FmaRuRes[`D_LEN-2:0] === {{`D_NE+1{1'b1}}, {`D_NF-1{1'b0}}})) |
 | 
			
		||||
                            (FmaRuAnsFlg[4]&(FmaRuRes[`Q_LEN-2:0] === {{`D_NE+1{1'b1}}, {`D_NF{1'b0}}})) |
 | 
			
		||||
                            (FmaRuXNaN&(FmaRuRes[`D_LEN-2:0] === {FmaRuX[`D_LEN-2:`D_NF],1'b1,FmaRuX[`D_NF-2:0]})) | 
 | 
			
		||||
                            (FmaRuYNaN&(FmaRuRes[`D_LEN-2:0] === {FmaRuY[`D_LEN-2:`D_NF],1'b1,FmaRuY[`D_NF-2:0]})) | 
 | 
			
		||||
                            (FmaRuZNaN&(FmaRuRes[`D_LEN-2:0] === {FmaRuZ[`D_LEN-2:`D_NF],1'b1,FmaRuZ[`D_NF-2:0]})));
 | 
			
		||||
      4'b00: FmaRuNaNGood = ((FmaRuAnsFlg[4]&(FmaRuRes[`S_LEN-2:0] === {{`S_NE+1{1'b1}}, {`S_NF-1{1'b0}}})) |
 | 
			
		||||
      4'b00: FmaRuNaNGood = (((`IEEE754==0)&(FmaRneRes === {1'b0, {`S_NE+1{1'b1}}, {`S_NF-1{1'b0}}})) |
 | 
			
		||||
                            (FmaRuAnsFlg[4]&(FmaRuRes[`S_LEN-2:0] === {{`S_NE+1{1'b1}}, {`S_NF-1{1'b0}}})) |
 | 
			
		||||
                            (FmaRuXNaN&(FmaRuRes[`S_LEN-2:0] === {FmaRuX[`S_LEN-2:`S_NF],1'b1,FmaRuX[`S_NF-2:0]})) | 
 | 
			
		||||
                            (FmaRuYNaN&(FmaRuRes[`S_LEN-2:0] === {FmaRuY[`S_LEN-2:`S_NF],1'b1,FmaRuY[`S_NF-2:0]})) | 
 | 
			
		||||
                            (FmaRuZNaN&(FmaRuRes[`S_LEN-2:0] === {FmaRuZ[`S_LEN-2:`S_NF],1'b1,FmaRuZ[`S_NF-2:0]})));
 | 
			
		||||
      4'b10: FmaRuNaNGood = ((FmaRuAnsFlg[4]&(FmaRuRes[`H_LEN-2:0] === {{`H_NE+1{1'b1}}, {`H_NF-1{1'b0}}})) |
 | 
			
		||||
      4'b10: FmaRuNaNGood = (((`IEEE754==0)&(FmaRneRes === {1'b0, {`H_NE+1{1'b1}}, {`H_NF-1{1'b0}}})) |
 | 
			
		||||
                            (FmaRuAnsFlg[4]&(FmaRuRes[`H_LEN-2:0] === {{`H_NE+1{1'b1}}, {`H_NF-1{1'b0}}})) |
 | 
			
		||||
                            (FmaRuXNaN&(FmaRuRes[`H_LEN-2:0] === {FmaRuX[`H_LEN-2:`H_NF],1'b1,FmaRuX[`H_NF-2:0]})) | 
 | 
			
		||||
                            (FmaRuYNaN&(FmaRuRes[`H_LEN-2:0] === {FmaRuY[`H_LEN-2:`H_NF],1'b1,FmaRuY[`H_NF-2:0]})) | 
 | 
			
		||||
                            (FmaRuZNaN&(FmaRuRes[`H_LEN-2:0] === {FmaRuZ[`H_LEN-2:`H_NF],1'b1,FmaRuZ[`H_NF-2:0]})));
 | 
			
		||||
    endcase
 | 
			
		||||
    case (FmaFmtVal)
 | 
			
		||||
      4'b11: FmaRdNaNGood = ((FmaRdAnsFlg[4]&(FmaRdRes[`Q_LEN-2:0] === {{`Q_NE+1{1'b1}}, {`Q_NF-1{1'b0}}})) |
 | 
			
		||||
      4'b11: FmaRdNaNGood = (((`IEEE754==0)&(FmaRneRes === {1'b0, {`Q_NE+1{1'b1}}, {`Q_NF-1{1'b0}}})) |
 | 
			
		||||
                            (FmaRdAnsFlg[4]&(FmaRdRes[`Q_LEN-2:0] === {{`Q_NE+1{1'b1}}, {`Q_NF-1{1'b0}}})) |
 | 
			
		||||
                            (FmaRdXNaN&(FmaRdRes[`Q_LEN-2:0] === {FmaRdX[`Q_LEN-2:`Q_NF],1'b1,FmaRdX[`Q_NF-2:0]})) | 
 | 
			
		||||
                            (FmaRdYNaN&(FmaRdRes[`Q_LEN-2:0] === {FmaRdY[`Q_LEN-2:`Q_NF],1'b1,FmaRdY[`Q_NF-2:0]})) | 
 | 
			
		||||
                            (FmaRdZNaN&(FmaRdRes[`Q_LEN-2:0] === {FmaRdZ[`Q_LEN-2:`Q_NF],1'b1,FmaRdZ[`Q_NF-2:0]})));
 | 
			
		||||
      4'b01: FmaRdNaNGood = ((FmaRdAnsFlg[4]&(FmaRdRes[`D_LEN-2:0] === {{`D_NE+1{1'b1}}, {`D_NF-1{1'b0}}})) |
 | 
			
		||||
      4'b01: FmaRdNaNGood = (((`IEEE754==0)&(FmaRneRes === {1'b0, {`D_NE+1{1'b1}}, {`D_NF-1{1'b0}}})) |
 | 
			
		||||
                            (FmaRdAnsFlg[4]&(FmaRdRes[`D_LEN-2:0] === {{`D_NE+1{1'b1}}, {`D_NF-1{1'b0}}})) |
 | 
			
		||||
                            (FmaRdXNaN&(FmaRdRes[`D_LEN-2:0] === {FmaRdX[`D_LEN-2:`D_NF],1'b1,FmaRdX[`D_NF-2:0]})) | 
 | 
			
		||||
                            (FmaRdYNaN&(FmaRdRes[`D_LEN-2:0] === {FmaRdY[`D_LEN-2:`D_NF],1'b1,FmaRdY[`D_NF-2:0]})) | 
 | 
			
		||||
                            (FmaRdZNaN&(FmaRdRes[`D_LEN-2:0] === {FmaRdZ[`D_LEN-2:`D_NF],1'b1,FmaRdZ[`D_NF-2:0]})));
 | 
			
		||||
      4'b00: FmaRdNaNGood = ((FmaRdAnsFlg[4]&(FmaRdRes[`S_LEN-2:0] === {{`S_NE+1{1'b1}}, {`S_NF-1{1'b0}}})) |
 | 
			
		||||
      4'b00: FmaRdNaNGood = (((`IEEE754==0)&(FmaRneRes === {1'b0, {`S_NE+1{1'b1}}, {`S_NF-1{1'b0}}})) |
 | 
			
		||||
                            (FmaRdAnsFlg[4]&(FmaRdRes[`S_LEN-2:0] === {{`S_NE+1{1'b1}}, {`S_NF-1{1'b0}}})) |
 | 
			
		||||
                            (FmaRdXNaN&(FmaRdRes[`S_LEN-2:0] === {FmaRdX[`S_LEN-2:`S_NF],1'b1,FmaRdX[`S_NF-2:0]})) | 
 | 
			
		||||
                            (FmaRdYNaN&(FmaRdRes[`S_LEN-2:0] === {FmaRdY[`S_LEN-2:`S_NF],1'b1,FmaRdY[`S_NF-2:0]})) | 
 | 
			
		||||
                            (FmaRdZNaN&(FmaRdRes[`S_LEN-2:0] === {FmaRdZ[`S_LEN-2:`S_NF],1'b1,FmaRdZ[`S_NF-2:0]})));
 | 
			
		||||
      4'b10: FmaRdNaNGood = ((FmaRdAnsFlg[4]&(FmaRdRes[`H_LEN-2:0] === {{`H_NE+1{1'b1}}, {`H_NF-1{1'b0}}})) |
 | 
			
		||||
      4'b10: FmaRdNaNGood = (((`IEEE754==0)&(FmaRneRes === {1'b0, {`H_NE+1{1'b1}}, {`H_NF-1{1'b0}}})) |
 | 
			
		||||
                            (FmaRdAnsFlg[4]&(FmaRdRes[`H_LEN-2:0] === {{`H_NE+1{1'b1}}, {`H_NF-1{1'b0}}})) |
 | 
			
		||||
                            (FmaRdXNaN&(FmaRdRes[`H_LEN-2:0] === {FmaRdX[`H_LEN-2:`H_NF],1'b1,FmaRdX[`H_NF-2:0]})) | 
 | 
			
		||||
                            (FmaRdYNaN&(FmaRdRes[`H_LEN-2:0] === {FmaRdY[`H_LEN-2:`H_NF],1'b1,FmaRdY[`H_NF-2:0]})) | 
 | 
			
		||||
                            (FmaRdZNaN&(FmaRdRes[`H_LEN-2:0] === {FmaRdZ[`H_LEN-2:`H_NF],1'b1,FmaRdZ[`H_NF-2:0]})));
 | 
			
		||||
    endcase
 | 
			
		||||
    case (FmaFmtVal)
 | 
			
		||||
      4'b11: FmaRnmNaNGood =((FmaRnmAnsFlg[4]&(FmaRnmRes[`Q_LEN-2:0] === {{`Q_NE+1{1'b1}}, {`Q_NF-1{1'b0}}})) |
 | 
			
		||||
      4'b11: FmaRnmNaNGood =(((`IEEE754==0)&(FmaRneRes === {1'b0, {`Q_NE+1{1'b1}}, {`Q_NF-1{1'b0}}})) |
 | 
			
		||||
                            (FmaRnmAnsFlg[4]&(FmaRnmRes[`Q_LEN-2:0] === {{`Q_NE+1{1'b1}}, {`Q_NF-1{1'b0}}})) |
 | 
			
		||||
                            (FmaRnmXNaN&(FmaRnmRes[`Q_LEN-2:0] === {FmaRnmX[`Q_LEN-2:`Q_NF],1'b1,FmaRnmX[`Q_NF-2:0]})) | 
 | 
			
		||||
                            (FmaRnmYNaN&(FmaRnmRes[`Q_LEN-2:0] === {FmaRnmY[`Q_LEN-2:`Q_NF],1'b1,FmaRnmY[`Q_NF-2:0]})) | 
 | 
			
		||||
                            (FmaRnmZNaN&(FmaRnmRes[`Q_LEN-2:0] === {FmaRnmZ[`Q_LEN-2:`Q_NF],1'b1,FmaRnmZ[`Q_NF-2:0]})));
 | 
			
		||||
      4'b01: FmaRnmNaNGood =((FmaRnmAnsFlg[4]&(FmaRnmRes[`D_LEN-2:0] === {{`D_NE+1{1'b1}}, {`D_NF-1{1'b0}}})) |
 | 
			
		||||
      4'b01: FmaRnmNaNGood =(((`IEEE754==0)&(FmaRneRes === {1'b0, {`D_NE+1{1'b1}}, {`D_NF-1{1'b0}}})) |
 | 
			
		||||
                            (FmaRnmAnsFlg[4]&(FmaRnmRes[`D_LEN-2:0] === {{`D_NE+1{1'b1}}, {`D_NF-1{1'b0}}})) |
 | 
			
		||||
                            (FmaRnmXNaN&(FmaRnmRes[`D_LEN-2:0] === {FmaRnmX[`D_LEN-2:`D_NF],1'b1,FmaRnmX[`D_NF-2:0]})) | 
 | 
			
		||||
                            (FmaRnmYNaN&(FmaRnmRes[`D_LEN-2:0] === {FmaRnmY[`D_LEN-2:`D_NF],1'b1,FmaRnmY[`D_NF-2:0]})) | 
 | 
			
		||||
                            (FmaRnmZNaN&(FmaRnmRes[`D_LEN-2:0] === {FmaRnmZ[`D_LEN-2:`D_NF],1'b1,FmaRnmZ[`D_NF-2:0]})));
 | 
			
		||||
      4'b00: FmaRnmNaNGood =((FmaRnmAnsFlg[4]&(FmaRnmRes[`S_LEN-2:0] === {{`S_NE+1{1'b1}}, {`S_NF-1{1'b0}}})) |
 | 
			
		||||
      4'b00: FmaRnmNaNGood =(((`IEEE754==0)&(FmaRneRes === {1'b0, {`S_NE+1{1'b1}}, {`S_NF-1{1'b0}}})) |
 | 
			
		||||
                            (FmaRnmAnsFlg[4]&(FmaRnmRes[`S_LEN-2:0] === {{`S_NE+1{1'b1}}, {`S_NF-1{1'b0}}})) |
 | 
			
		||||
                            (FmaRnmXNaN&(FmaRnmRes[`S_LEN-2:0] === {FmaRnmX[`S_LEN-2:`S_NF],1'b1,FmaRnmX[`S_NF-2:0]})) | 
 | 
			
		||||
                            (FmaRnmYNaN&(FmaRnmRes[`S_LEN-2:0] === {FmaRnmY[`S_LEN-2:`S_NF],1'b1,FmaRnmY[`S_NF-2:0]})) | 
 | 
			
		||||
                            (FmaRnmZNaN&(FmaRnmRes[`S_LEN-2:0] === {FmaRnmZ[`S_LEN-2:`S_NF],1'b1,FmaRnmZ[`S_NF-2:0]})));
 | 
			
		||||
      4'b10: FmaRnmNaNGood =((FmaRnmAnsFlg[4]&(FmaRnmRes[`H_LEN-2:0] === {{`H_NE+1{1'b1}}, {`H_NF-1{1'b0}}})) |
 | 
			
		||||
      4'b10: FmaRnmNaNGood =(((`IEEE754==0)&(FmaRneRes === {1'b0, {`H_NE+1{1'b1}}, {`H_NF-1{1'b0}}})) |
 | 
			
		||||
                            (FmaRnmAnsFlg[4]&(FmaRnmRes[`H_LEN-2:0] === {{`H_NE+1{1'b1}}, {`H_NF-1{1'b0}}})) |
 | 
			
		||||
                            (FmaRnmXNaN&(FmaRnmRes[`H_LEN-2:0] === {FmaRnmX[`H_LEN-2:`H_NF],1'b1,FmaRnmX[`H_NF-2:0]})) | 
 | 
			
		||||
                            (FmaRnmYNaN&(FmaRnmRes[`H_LEN-2:0] === {FmaRnmY[`H_LEN-2:`H_NF],1'b1,FmaRnmY[`H_NF-2:0]})) | 
 | 
			
		||||
                            (FmaRnmZNaN&(FmaRnmRes[`H_LEN-2:0] === {FmaRnmZ[`H_LEN-2:`H_NF],1'b1,FmaRnmZ[`H_NF-2:0]})));
 | 
			
		||||
    endcase
 | 
			
		||||
    if (UnitVal !== `CVTFPUNIT & UnitVal !== `CVTINTUNIT)
 | 
			
		||||
      case (FmtVal)
 | 
			
		||||
        4'b11: NaNGood =  ((AnsFlg[4]&(Res[`Q_LEN-2:0] === {{`Q_NE+1{1'b1}}, {`Q_NF-1{1'b0}}})) |
 | 
			
		||||
        4'b11: NaNGood =  (((`IEEE754==0)&(Res === {1'b0, {`Q_NE+1{1'b1}}, {`Q_NF-1{1'b0}}})) |
 | 
			
		||||
                          (AnsFlg[4]&(Res[`Q_LEN-2:0] === {{`Q_NE+1{1'b1}}, {`Q_NF-1{1'b0}}})) |
 | 
			
		||||
                          (XNaN&(Res[`Q_LEN-2:0] === {X[`Q_LEN-2:`Q_NF],1'b1,X[`Q_NF-2:0]})) | 
 | 
			
		||||
                          (YNaN&(Res[`Q_LEN-2:0] === {Y[`Q_LEN-2:`Q_NF],1'b1,Y[`Q_NF-2:0]})) |
 | 
			
		||||
                          (ZNaN&(Res[`Q_LEN-2:0] === {Z[`Q_LEN-2:`Q_NF],1'b1,Z[`Q_NF-2:0]})));
 | 
			
		||||
        4'b01: NaNGood =  ((AnsFlg[4]&(Res[`D_LEN-2:0] === {{`D_NE+1{1'b1}}, {`D_NF-1{1'b0}}})) |
 | 
			
		||||
        4'b01: NaNGood =  (((`IEEE754==0)&(Res === {1'b0, {`D_NE+1{1'b1}}, {`D_NF-1{1'b0}}})) |
 | 
			
		||||
                          (AnsFlg[4]&(Res[`D_LEN-2:0] === {{`D_NE+1{1'b1}}, {`D_NF-1{1'b0}}})) |
 | 
			
		||||
                          (XNaN&(Res[`D_LEN-2:0] === {X[`D_LEN-2:`D_NF],1'b1,X[`D_NF-2:0]})) | 
 | 
			
		||||
                          (YNaN&(Res[`D_LEN-2:0] === {Y[`D_LEN-2:`D_NF],1'b1,Y[`D_NF-2:0]})) |
 | 
			
		||||
                          (ZNaN&(Res[`D_LEN-2:0] === {Z[`D_LEN-2:`D_NF],1'b1,Z[`D_NF-2:0]})));
 | 
			
		||||
        4'b00: NaNGood =  ((AnsFlg[4]&(Res[`S_LEN-2:0] === {{`S_NE+1{1'b1}}, {`S_NF-1{1'b0}}})) |
 | 
			
		||||
        4'b00: NaNGood =  (((`IEEE754==0)&(Res === {1'b0, {`S_NE+1{1'b1}}, {`S_NF-1{1'b0}}})) |
 | 
			
		||||
                          (AnsFlg[4]&(Res[`S_LEN-2:0] === {{`S_NE+1{1'b1}}, {`S_NF-1{1'b0}}})) |
 | 
			
		||||
                          (XNaN&(Res[`S_LEN-2:0] === {X[`S_LEN-2:`S_NF],1'b1,X[`S_NF-2:0]})) | 
 | 
			
		||||
                          (YNaN&(Res[`S_LEN-2:0] === {Y[`S_LEN-2:`S_NF],1'b1,Y[`S_NF-2:0]})) |
 | 
			
		||||
                          (ZNaN&(Res[`S_LEN-2:0] === {Z[`S_LEN-2:`S_NF],1'b1,Z[`S_NF-2:0]})));
 | 
			
		||||
        4'b10: NaNGood =  ((AnsFlg[4]&(Res[`H_LEN-2:0] === {{`H_NE+1{1'b1}}, {`H_NF-1{1'b0}}})) |
 | 
			
		||||
        4'b10: NaNGood =  (((`IEEE754==0)&(Res === {1'b0, {`H_NE+1{1'b1}}, {`H_NF-1{1'b0}}})) |
 | 
			
		||||
                          (AnsFlg[4]&(Res[`H_LEN-2:0] === {{`H_NE+1{1'b1}}, {`H_NF-1{1'b0}}})) |
 | 
			
		||||
                          (XNaN&(Res[`H_LEN-2:0] === {X[`H_LEN-2:`H_NF],1'b1,X[`H_NF-2:0]})) | 
 | 
			
		||||
                          (YNaN&(Res[`H_LEN-2:0] === {Y[`H_LEN-2:`H_NF],1'b1,Y[`H_NF-2:0]})) |
 | 
			
		||||
                          (ZNaN&(Res[`H_LEN-2:0] === {Z[`H_LEN-2:`H_NF],1'b1,Z[`H_NF-2:0]})));
 | 
			
		||||
      endcase
 | 
			
		||||
    else if (UnitVal === `CVTFPUNIT) // if converting from floating point to floating point OpCtrl contains the final FP format
 | 
			
		||||
      case (OpCtrlVal[1:0]) 
 | 
			
		||||
        2'b11: NaNGood = ((AnsFlg[4]&(Res[`Q_LEN-2:0] === {{`Q_NE+1{1'b1}}, {`Q_NF-1{1'b0}}})) |
 | 
			
		||||
        2'b11: NaNGood = (((`IEEE754==0)&(Res === {1'b0, {`Q_NE+1{1'b1}}, {`Q_NF-1{1'b0}}})) |
 | 
			
		||||
                          (AnsFlg[4]&(Res[`Q_LEN-2:0] === {{`Q_NE+1{1'b1}}, {`Q_NF-1{1'b0}}})) |
 | 
			
		||||
                          (AnsNaN&(Res[`Q_LEN-2:0] === Ans[`Q_LEN-2:0])) | 
 | 
			
		||||
                          (XNaN&(Res[`Q_LEN-2:0] === {X[`Q_LEN-2:`Q_NF],1'b1,X[`Q_NF-2:0]})) | 
 | 
			
		||||
                          (YNaN&(Res[`Q_LEN-2:0] === {Y[`Q_LEN-2:`Q_NF],1'b1,Y[`Q_NF-2:0]})));
 | 
			
		||||
        2'b01: NaNGood = ((AnsFlg[4]&(Res[`D_LEN-2:0] === {{`D_NE+1{1'b1}}, {`D_NF-1{1'b0}}})) |
 | 
			
		||||
        2'b01: NaNGood = (((`IEEE754==0)&(Res === {1'b0, {`D_NE+1{1'b1}}, {`D_NF-1{1'b0}}})) |
 | 
			
		||||
                          (AnsFlg[4]&(Res[`D_LEN-2:0] === {{`D_NE+1{1'b1}}, {`D_NF-1{1'b0}}})) |
 | 
			
		||||
                          (AnsNaN&(Res[`D_LEN-2:0] === Ans[`D_LEN-2:0])) | 
 | 
			
		||||
                          (XNaN&(Res[`D_LEN-2:0] === {X[`D_LEN-2:`D_NF],1'b1,X[`D_NF-2:0]})) | 
 | 
			
		||||
                          (YNaN&(Res[`D_LEN-2:0] === {Y[`D_LEN-2:`D_NF],1'b1,Y[`D_NF-2:0]})));
 | 
			
		||||
        2'b00: NaNGood = ((AnsFlg[4]&(Res[`S_LEN-2:0] === {{`S_NE+1{1'b1}}, {`S_NF-1{1'b0}}})) |
 | 
			
		||||
        2'b00: NaNGood = (((`IEEE754==0)&(Res === {1'b0, {`S_NE+1{1'b1}}, {`S_NF-1{1'b0}}})) |
 | 
			
		||||
                          (AnsFlg[4]&(Res[`S_LEN-2:0] === {{`S_NE+1{1'b1}}, {`S_NF-1{1'b0}}})) |
 | 
			
		||||
                          (AnsNaN&(Res[`S_LEN-2:0] === Ans[`S_LEN-2:0])) | 
 | 
			
		||||
                          (XNaN&(Res[`S_LEN-2:0] === {X[`S_LEN-2:`S_NF],1'b1,X[`S_NF-2:0]})) | 
 | 
			
		||||
                          (YNaN&(Res[`S_LEN-2:0] === {Y[`S_LEN-2:`S_NF],1'b1,Y[`S_NF-2:0]})));
 | 
			
		||||
        2'b10: NaNGood = ((AnsFlg[4]&(Res[`H_LEN-2:0] === {{`H_NE+1{1'b1}}, {`H_NF-1{1'b0}}})) |
 | 
			
		||||
        2'b10: NaNGood = (((`IEEE754==0)&(Res === {1'b0, {`H_NE+1{1'b1}}, {`H_NF-1{1'b0}}})) |
 | 
			
		||||
                          (AnsFlg[4]&(Res[`H_LEN-2:0] === {{`H_NE+1{1'b1}}, {`H_NF-1{1'b0}}})) |
 | 
			
		||||
                          (AnsNaN&(Res[`H_LEN-2:0] === Ans[`H_LEN-2:0])) | 
 | 
			
		||||
                          (XNaN&(Res[`H_LEN-2:0] === {X[`H_LEN-2:`H_NF],1'b1,X[`H_NF-2:0]})) | 
 | 
			
		||||
                          (YNaN&(Res[`H_LEN-2:0] === {Y[`H_LEN-2:`H_NF],1'b1,Y[`H_NF-2:0]})));
 | 
			
		||||
@ -1182,7 +1214,7 @@ end
 | 
			
		||||
    else if ((UnitVal === `CVTINTUNIT) & ~(((WriteIntVal&~OpCtrlVal[0]&AnsFlg[4]&XSgn&(Res[`XLEN-1:0] === (`XLEN)'(0))) | 
 | 
			
		||||
            (WriteIntVal&OpCtrlVal[0]&AnsFlg[4]&(~XSgn|XNaN)&OpCtrlVal[1]&(Res[`XLEN-1:0] === {1'b0, {`XLEN-1{1'b1}}})) | 
 | 
			
		||||
            (WriteIntVal&OpCtrlVal[0]&AnsFlg[4]&(~XSgn|XNaN)&~OpCtrlVal[1]&(Res[`XLEN-1:0] === {{`XLEN-32{1'b0}}, 1'b0, {31{1'b1}}})) | 
 | 
			
		||||
            (~(WriteIntVal&~OpCtrlVal[0]&AnsFlg[4]&XSgn)&(Res === Ans | NaNGood | NaNGood === 1'bx))) & (ResFlg === AnsFlg | AnsFlg === 5'bx))) begin
 | 
			
		||||
            (~(WriteIntVal&~OpCtrlVal[0]&AnsFlg[4]&XSgn&~XNaN)&(Res === Ans | NaNGood | NaNGood === 1'bx))) & (ResFlg === AnsFlg | AnsFlg === 5'bx))) begin
 | 
			
		||||
      errors += 1;
 | 
			
		||||
      $display("There is an error in %s", Tests[TestNum]);
 | 
			
		||||
      $display("inputs: %h %h %h\nSrcA: %h\n Res: %h %h\n Ans: %h %h", X, Y, Z, SrcA, Res, ResFlg, Ans, AnsFlg);
 | 
			
		||||
@ -1222,15 +1254,46 @@ end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    VectorNum += 1; // increment the vector
 | 
			
		||||
    FmaVectorNum += 1; // increment the vector
 | 
			
		||||
 | 
			
		||||
    // check to see if there more vectors in this test
 | 
			
		||||
    // *** fix this so that fma and other run sepratly - re-add fma num
 | 
			
		||||
    if (TestVectors[VectorNum][0] === 1'bx & 
 | 
			
		||||
        FmaRneVectors[VectorNum][0] === 1'bx & 
 | 
			
		||||
        FmaRzVectors[VectorNum][0] === 1'bx & 
 | 
			
		||||
        FmaRuVectors[VectorNum][0] === 1'bx & 
 | 
			
		||||
        FmaRdVectors[VectorNum][0] === 1'bx & 
 | 
			
		||||
        FmaRnmVectors[VectorNum][0] === 1'bx) begin // if reached the end of file
 | 
			
		||||
    if ((FmaRneVectors[FmaVectorNum][0] === 1'bx & 
 | 
			
		||||
        FmaRzVectors[FmaVectorNum][0] === 1'bx & 
 | 
			
		||||
        FmaRuVectors[FmaVectorNum][0] === 1'bx & 
 | 
			
		||||
        FmaRdVectors[FmaVectorNum][0] === 1'bx & 
 | 
			
		||||
        FmaRnmVectors[FmaVectorNum][0] === 1'bx & FmaRneTests[FmaTestNum] !== "" )) begin // if reached the end of file
 | 
			
		||||
 | 
			
		||||
      // increment the test
 | 
			
		||||
      FmaTestNum += 1;
 | 
			
		||||
 | 
			
		||||
      // clear the vectors
 | 
			
		||||
      for(int i=0; i<46465; i++) TestVectors[i] = {`FLEN*4+8{1'bx}};
 | 
			
		||||
      // read next files
 | 
			
		||||
      $readmemh({`PATH, FmaRneTests[FmaTestNum]}, FmaRneVectors);
 | 
			
		||||
      $readmemh({`PATH, FmaRuTests[FmaTestNum]}, FmaRuVectors);
 | 
			
		||||
      $readmemh({`PATH, FmaRdTests[FmaTestNum]}, FmaRdVectors);
 | 
			
		||||
      $readmemh({`PATH, FmaRzTests[FmaTestNum]}, FmaRzVectors);
 | 
			
		||||
      $readmemh({`PATH, FmaRnmTests[FmaTestNum]}, FmaRnmVectors);
 | 
			
		||||
 | 
			
		||||
      // set the vector index back to 0
 | 
			
		||||
      FmaVectorNum = 0;
 | 
			
		||||
 | 
			
		||||
      // if no more Tests - finish
 | 
			
		||||
      if(Tests[TestNum] === "" & 
 | 
			
		||||
        FmaRneTests[FmaTestNum] === "" & 
 | 
			
		||||
        FmaRzTests[FmaTestNum] === "" & 
 | 
			
		||||
        FmaRuTests[FmaTestNum] === "" & 
 | 
			
		||||
        FmaRdTests[FmaTestNum] === "" & 
 | 
			
		||||
        FmaRnmTests[FmaTestNum] === "") begin
 | 
			
		||||
        $display("\nAll Tests completed with %d errors\n", errors);
 | 
			
		||||
        $stop;
 | 
			
		||||
      end 
 | 
			
		||||
 | 
			
		||||
      $display("Running FMA precision %d", FmaTestNum);
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    if (TestVectors[VectorNum][0] === 1'bx & Tests[TestNum] !== "") begin // if reached the end of file
 | 
			
		||||
 | 
			
		||||
      // increment the test
 | 
			
		||||
      TestNum += 1;
 | 
			
		||||
@ -1239,11 +1302,11 @@ end
 | 
			
		||||
      for(int i=0; i<46465; i++) TestVectors[i] = {`FLEN*4+8{1'bx}};
 | 
			
		||||
      // read next files
 | 
			
		||||
      $readmemh({`PATH, Tests[TestNum]}, TestVectors);
 | 
			
		||||
      $readmemh({`PATH, FmaRneTests[TestNum]}, FmaRneVectors);
 | 
			
		||||
      $readmemh({`PATH, FmaRuTests[TestNum]}, FmaRuVectors);
 | 
			
		||||
      $readmemh({`PATH, FmaRdTests[TestNum]}, FmaRdVectors);
 | 
			
		||||
      $readmemh({`PATH, FmaRzTests[TestNum]}, FmaRzVectors);
 | 
			
		||||
      $readmemh({`PATH, FmaRnmTests[TestNum]}, FmaRnmVectors);
 | 
			
		||||
      $readmemh({`PATH, FmaRneTests[FmaTestNum]}, FmaRneVectors);
 | 
			
		||||
      $readmemh({`PATH, FmaRuTests[FmaTestNum]}, FmaRuVectors);
 | 
			
		||||
      $readmemh({`PATH, FmaRdTests[FmaTestNum]}, FmaRdVectors);
 | 
			
		||||
      $readmemh({`PATH, FmaRzTests[FmaTestNum]}, FmaRzVectors);
 | 
			
		||||
      $readmemh({`PATH, FmaRnmTests[FmaTestNum]}, FmaRnmVectors);
 | 
			
		||||
 | 
			
		||||
      // set the vector index back to 0
 | 
			
		||||
      VectorNum = 0;
 | 
			
		||||
@ -1255,11 +1318,11 @@ end
 | 
			
		||||
 | 
			
		||||
      // if no more Tests - finish
 | 
			
		||||
      if(Tests[TestNum] === "" & 
 | 
			
		||||
        FmaRneTests[TestNum] === "" & 
 | 
			
		||||
        FmaRzTests[TestNum] === "" & 
 | 
			
		||||
        FmaRuTests[TestNum] === "" & 
 | 
			
		||||
        FmaRdTests[TestNum] === "" & 
 | 
			
		||||
        FmaRnmTests[TestNum] === "") begin
 | 
			
		||||
        FmaRneTests[FmaTestNum] === "" & 
 | 
			
		||||
        FmaRzTests[FmaTestNum] === "" & 
 | 
			
		||||
        FmaRuTests[FmaTestNum] === "" & 
 | 
			
		||||
        FmaRdTests[FmaTestNum] === "" & 
 | 
			
		||||
        FmaRnmTests[FmaTestNum] === "") begin
 | 
			
		||||
        $display("\nAll Tests completed with %d errors\n", errors);
 | 
			
		||||
        $stop;
 | 
			
		||||
      end 
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user