OpenCores
URL https://opencores.org/ocsvn/fpu/fpu/trunk

Subversion Repositories fpu

[/] [fpu/] [trunk/] [verilog/] [post_norm.v] - Diff between revs 2 and 5

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 2 Rev 5
Line 33... Line 33...
/////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////
 
 
 
 
`timescale 1ns / 100ps
`timescale 1ns / 100ps
 
 
module post_norm( clk, fpu_op, sign, rmode, fract_in, exp_in, exp_ovf,
module post_norm( clk, fpu_op, opas, sign, rmode, fract_in, exp_in, exp_ovf,
                opa_dn, opb_dn, rem_00, div_opa_ldz, output_zero, out,
                opa_dn, opb_dn, rem_00, div_opa_ldz, output_zero, out,
                ine, overflow, underflow);
                ine, overflow, underflow, f2i_out_sign);
input           clk;
input           clk;
input   [2:0]    fpu_op;
input   [2:0]    fpu_op;
 
input           opas;
input           sign;
input           sign;
input   [1:0]    rmode;
input   [1:0]    rmode;
input   [47:0]   fract_in;
input   [47:0]   fract_in;
input   [1:0]    exp_ovf;
input   [1:0]    exp_ovf;
input   [7:0]    exp_in;
input   [7:0]    exp_in;
Line 50... Line 51...
input   [4:0]    div_opa_ldz;
input   [4:0]    div_opa_ldz;
input           output_zero;
input           output_zero;
output  [30:0]   out;
output  [30:0]   out;
output          ine;
output          ine;
output          overflow, underflow;
output          overflow, underflow;
 
output          f2i_out_sign;
 
 
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
//
//
// Local Wires and registers
// Local Wires and registers
//
//
Line 70... Line 72...
wire    [7:0]    exp_out_final;
wire    [7:0]    exp_out_final;
reg     [7:0]    exp_out_rnd;
reg     [7:0]    exp_out_rnd;
wire            op_dn = opa_dn | opb_dn;
wire            op_dn = opa_dn | opb_dn;
wire            op_mul = fpu_op[2:0]==3'b010;
wire            op_mul = fpu_op[2:0]==3'b010;
wire            op_div = fpu_op[2:0]==3'b011;
wire            op_div = fpu_op[2:0]==3'b011;
 
wire            op_i2f = fpu_op[2:0]==3'b100;
 
wire            op_f2i = fpu_op[2:0]==3'b101;
reg     [5:0]    fi_ldz;
reg     [5:0]    fi_ldz;
 
 
wire            g, r, s;
wire            g, r, s;
wire            round, round2, round2a, round2_fasu, round2_fmul;
wire            round, round2, round2a, round2_fasu, round2_fmul;
wire    [7:0]    exp_out_rnd0, exp_out_rnd1, exp_out_rnd2, exp_out_rnd2a;
wire    [7:0]    exp_out_rnd0, exp_out_rnd1, exp_out_rnd2, exp_out_rnd2a;
Line 119... Line 123...
wire    [5:0]    fi_ldz_mi22;
wire    [5:0]    fi_ldz_mi22;
wire            exp_zero;
wire            exp_zero;
wire    [6:0]    ldz_all;
wire    [6:0]    ldz_all;
wire    [7:0]    ldz_dif;
wire    [7:0]    ldz_dif;
 
 
 
wire    [8:0]    div_scht1a;
 
wire    [7:0]    f2i_shft;
 
wire    [55:0]   exp_f2i_1;
 
wire            f2i_zero, f2i_max;
 
wire    [7:0]    f2i_emin;
 
wire    [7:0]    conv_shft;
 
wire    [7:0]    exp_i2f, exp_f2i, conv_exp;
 
wire            round2_f2i;
 
 
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
//
//
// Normalize and Round Logic
// Normalize and Round Logic
//
//
 
 
Line 187... Line 200...
 
 
wire            exp_in_80;
wire            exp_in_80;
wire            rmode_00, rmode_01, rmode_10, rmode_11;
wire            rmode_00, rmode_01, rmode_10, rmode_11;
 
 
// Misc common signals
// Misc common signals
 
 
assign exp_in_ff        = &exp_in;
assign exp_in_ff        = &exp_in;
assign exp_in_00        = !(|exp_in);
assign exp_in_00        = !(|exp_in);
assign exp_in_80        = exp_in[7] & !(|exp_in[6:0]);
assign exp_in_80        = exp_in[7] & !(|exp_in[6:0]);
assign exp_out_ff       = &exp_out;
assign exp_out_ff       = &exp_out;
assign exp_out_00       = !(|exp_out);
assign exp_out_00       = !(|exp_out);
Line 208... Line 220...
assign rmode_11 = (rmode==2'b11);
assign rmode_11 = (rmode==2'b11);
 
 
// Fasu Output will be denormalized ...
// Fasu Output will be denormalized ...
assign dn = !op_mul & !op_div & (exp_in_00 | (exp_next_mi[8] & !fract_in[47]) );
assign dn = !op_mul & !op_div & (exp_in_00 | (exp_next_mi[8] & !fract_in[47]) );
 
 
 
 
// ---------------------------------------------------------------------
// ---------------------------------------------------------------------
// Fraction Normalization
// Fraction Normalization
wire    [8:0]    div_scht1a;
parameter       f2i_emax = 8'h9d;
 
 
 
// Incremented fraction for rounding
assign fract_out_pl1 = fract_out + 1;
assign fract_out_pl1 = fract_out + 1;
 
 
 
// Special Signals for f2i
 
assign f2i_emin = rmode_00 ? 8'h7e : 8'h7f;
 
assign f2i_zero = (!opas & (exp_in<f2i_emin)) | (opas & (exp_in>f2i_emax)) | (opas & (exp_in<f2i_emin) & (fract_in_00 | !rmode_11));
 
assign f2i_max = (!opas & (exp_in>f2i_emax)) | (opas & (exp_in<f2i_emin) & !fract_in_00 & rmode_11);
 
 
// Claculate various shifting options
// Claculate various shifting options
 
 
assign {shft_co,shftr_mul} = (!exp_ovf[1] & exp_in_00) ? {1'b0, exp_out} : exp_in_mi1 ;
assign {shft_co,shftr_mul} = (!exp_ovf[1] & exp_in_00) ? {1'b0, exp_out} : exp_in_mi1 ;
assign {div_shft1_co, div_shft1} = exp_in_00 ? {1'b0, div_opa_ldz} : div_scht1a;
assign {div_shft1_co, div_shft1} = exp_in_00 ? {1'b0, div_opa_ldz} : div_scht1a;
 
 
Line 228... Line 245...
assign div_shft4  = div_opa_ldz-exp_in;
assign div_shft4  = div_opa_ldz-exp_in;
 
 
assign div_dn    = op_dn & div_shft1_co;
assign div_dn    = op_dn & div_shft1_co;
assign div_nr    = op_dn & exp_ovf[1]  & !(|fract_in[46:23]) & (div_shft3>8'h16);
assign div_nr    = op_dn & exp_ovf[1]  & !(|fract_in[46:23]) & (div_shft3>8'h16);
 
 
 
assign f2i_shft  = exp_in-8'h7d;
 
 
// Select shifting direction
// Select shifting direction
assign left_right = op_div ? lr_div : op_mul ? lr_mul : 1;
assign left_right = op_div ? lr_div : op_mul ? lr_mul : 1;
 
 
assign lr_div =         (op_dn & !exp_ovf[1] & exp_ovf[0])     ? 1 :
assign lr_div =         (op_dn & !exp_ovf[1] & exp_ovf[0])     ? 1 :
Line 239... Line 257...
                        (op_dn & div_shft1_co)                 ? 0 :
                        (op_dn & div_shft1_co)                 ? 0 :
                        (op_dn & exp_out_00)                   ? 1 :
                        (op_dn & exp_out_00)                   ? 1 :
                        (!op_dn & exp_out_00 & !exp_ovf[1])    ? 1 :
                        (!op_dn & exp_out_00 & !exp_ovf[1])    ? 1 :
                        exp_ovf[1]                             ? 0 :
                        exp_ovf[1]                             ? 0 :
                                                                 1;
                                                                 1;
 
 
assign lr_mul =         (shft_co | (!exp_ovf[1] & exp_in_00) |
assign lr_mul =         (shft_co | (!exp_ovf[1] & exp_in_00) |
                        (!exp_ovf[1] & !exp_in_00 & (exp_out1_co | exp_out_00) )) ?     1 :
                        (!exp_ovf[1] & !exp_in_00 & (exp_out1_co | exp_out_00) )) ?     1 :
                        ( exp_ovf[1] | exp_in_00 ) ?                                    0 :
                        ( exp_ovf[1] | exp_in_00 ) ?                                    0 :
                                                                                        1;
                                                                                        1;
 
 
// Select Left and Right shift value
// Select Left and Right shift value
assign fasu_shift  = (dn | exp_out_00) ? (exp_in_00 ? 8'h2 : exp_in_pl1[7:0]) : {2'h0, fi_ldz};
assign fasu_shift  = (dn | exp_out_00) ? (exp_in_00 ? 8'h2 : exp_in_pl1[7:0]) : {2'h0, fi_ldz};
assign shift_right = op_div ? shftr_div : shftr_mul;
assign shift_right = op_div ? shftr_div : shftr_mul;
assign shift_left  = op_div ? shftl_div : op_mul ? shftl_mul : fasu_shift;
 
 
assign conv_shft = op_f2i ? f2i_shft : {2'h0, fi_ldz};
 
 
 
assign shift_left  = op_div ? shftl_div : op_mul ? shftl_mul : (op_f2i | op_i2f) ? conv_shft : fasu_shift;
 
 
assign shftl_mul =      (shft_co |
assign shftl_mul =      (shft_co |
                        (!exp_ovf[1] & exp_in_00) |
                        (!exp_ovf[1] & exp_in_00) |
                        (!exp_ovf[1] & !exp_in_00 & (exp_out1_co | exp_out_00))) ? exp_in_pl1[7:0] : {2'h0, fi_ldz};
                        (!exp_ovf[1] & !exp_in_00 & (exp_out1_co | exp_out_00))) ? exp_in_pl1[7:0] : {2'h0, fi_ldz};
 
 
assign shftl_div =      ( op_dn & exp_out_00 & !(!exp_ovf[1] & exp_ovf[0]))      ? div_shft1[7:0] :
assign shftl_div =      ( op_dn & exp_out_00 & !(!exp_ovf[1] & exp_ovf[0]))      ? div_shft1[7:0] :
                        (!op_dn & exp_out_00 & !exp_ovf[1])                     ? exp_in[7:0] :
                        (!op_dn & exp_out_00 & !exp_ovf[1])                     ? exp_in[7:0] :
                                                                                 {2'h0, fi_ldz};
                                                                                 {2'h0, fi_ldz};
 
 
assign shftr_div =      (op_dn & exp_ovf[1])                   ? div_shft3 :
assign shftr_div =      (op_dn & exp_ovf[1])                   ? div_shft3 :
                        (op_dn & div_shft1_co)                 ? div_shft4 :
                        (op_dn & div_shft1_co)                 ? div_shft4 :
                                                                 div_shft2;
                                                                 div_shft2;
// Do the actual shifting
// Do the actual shifting
assign fract_in_shftr   = (|shift_right[7:6]) ? 0 : fract_in>>shift_right[5:0];
assign fract_in_shftr   = (|shift_right[7:6]) ? 0 : fract_in>>shift_right[5:0];
assign fract_in_shftl   = (|shift_left[7:6] ) ? 0 : fract_in<<shift_left[5:0];
assign fract_in_shftl   = (|shift_left[7:6] | (f2i_zero & op_f2i)) ? 0 : fract_in<<shift_left[5:0];
 
 
 
 
// Chose final fraction output
// Chose final fraction output
assign {fract_out,fract_trunc} = left_right ? fract_in_shftl : fract_in_shftr;
assign {fract_out,fract_trunc} = left_right ? fract_in_shftl : fract_in_shftr;
 
 
 
 
// ---------------------------------------------------------------------
// ---------------------------------------------------------------------
// Exponent Normalization
// Exponent Normalization
 
 
assign fi_ldz_mi1    = fi_ldz - 1;
assign fi_ldz_mi1    = fi_ldz - 1;
assign fi_ldz_mi22   = fi_ldz - 22;
assign fi_ldz_mi22   = fi_ldz - 22;
Line 282... Line 299...
assign exp_in_pl1    = exp_in  + 1;     // 9 bits - includes carry out
assign exp_in_pl1    = exp_in  + 1;     // 9 bits - includes carry out
assign exp_in_mi1    = exp_in  - 1;     // 9 bits - includes carry out
assign exp_in_mi1    = exp_in  - 1;     // 9 bits - includes carry out
assign exp_out1_mi1  = exp_out1 - 1;
assign exp_out1_mi1  = exp_out1 - 1;
 
 
assign exp_next_mi  = exp_in_pl1 - fi_ldz_mi1;  // 9 bits - includes carry out
assign exp_next_mi  = exp_in_pl1 - fi_ldz_mi1;  // 9 bits - includes carry out
 
 
assign exp_fix_diva = exp_in - fi_ldz_mi22;
assign exp_fix_diva = exp_in - fi_ldz_mi22;
assign exp_fix_divb = exp_in - fi_ldz_mi1;
assign exp_fix_divb = exp_in - fi_ldz_mi1;
 
 
assign exp_zero  = (exp_ovf[1] & !exp_ovf[0] & op_mul & (!exp_rnd_adj2a | !rmode[1])) | (op_mul & exp_out1_co);
assign exp_zero  = (exp_ovf[1] & !exp_ovf[0] & op_mul & (!exp_rnd_adj2a | !rmode[1])) | (op_mul & exp_out1_co);
assign {exp_out1_co, exp_out1} = fract_in[47] ? exp_in_pl1 : exp_next_mi;
assign {exp_out1_co, exp_out1} = fract_in[47] ? exp_in_pl1 : exp_next_mi;
assign exp_out = op_div ? exp_div : exp_zero ? 8'h0 : dn ? {6'h0, fract_in[47:46]} : exp_out1;
 
 
assign f2i_out_sign =  !opas ? ((exp_in<f2i_emin) ? 0 : (exp_in>f2i_emax) ? 0 : opas) :
 
                               ((exp_in<f2i_emin) ? 0 : (exp_in>f2i_emax) ? 1 : opas);
 
 
 
assign exp_i2f   = fract_in_00 ? (opas ? 8'h9e : 0) : (8'h9e-fi_ldz);
 
assign exp_f2i_1 = {{8{fract_in[47]}}, fract_in }<<f2i_shft;
 
assign exp_f2i   = f2i_zero ? 0 : f2i_max ? 8'hff : exp_f2i_1[55:48];
 
assign conv_exp  = op_f2i ? exp_f2i : exp_i2f;
 
 
 
assign exp_out = op_div ? exp_div : (op_f2i | op_i2f) ? conv_exp : exp_zero ? 8'h0 : dn ? {6'h0, fract_in[47:46]} : exp_out1;
 
 
assign ldz_all   = div_opa_ldz + fi_ldz;
assign ldz_all   = div_opa_ldz + fi_ldz;
assign ldz_dif   = fi_ldz_2 - div_opa_ldz;
assign ldz_dif   = fi_ldz_2 - div_opa_ldz;
assign fi_ldz_2a = 6'd23 - fi_ldz;
assign fi_ldz_2a = 6'd23 - fi_ldz;
assign fi_ldz_2  = {fi_ldz_2a[6], fi_ldz_2a[6:0]};
assign fi_ldz_2  = {fi_ldz_2a[6], fi_ldz_2a[6:0]};
 
 
assign div_exp1  = exp_in_mi1 + fi_ldz_2;       // 9 bits - includes carry out
assign div_exp1  = exp_in_mi1 + fi_ldz_2;       // 9 bits - includes carry out
 
 
assign div_exp2  = exp_in_pl1 - ldz_all;
assign div_exp2  = exp_in_pl1 - ldz_all;
assign div_exp3  = exp_in + ldz_dif;
assign div_exp3  = exp_in + ldz_dif;
 
 
assign exp_div =(opa_dn & opb_dn)                                       ? div_exp3 :
assign exp_div =(opa_dn & opb_dn)                                       ? div_exp3 :
                 opb_dn                                                 ? div_exp1[7:0] :
                 opb_dn                                                 ? div_exp1[7:0] :
Line 319... Line 348...
 
 
// Round to nearest even
// Round to nearest even
assign round = (g & r) | (r & s) ;
assign round = (g & r) | (r & s) ;
assign {exp_rnd_adj0, fract_out_rnd0} = round ? fract_out_pl1 : {1'b0, fract_out};
assign {exp_rnd_adj0, fract_out_rnd0} = round ? fract_out_pl1 : {1'b0, fract_out};
assign exp_out_rnd0 =  exp_rnd_adj0 ? exp_out_pl1 : exp_out;
assign exp_out_rnd0 =  exp_rnd_adj0 ? exp_out_pl1 : exp_out;
assign ovf0 = exp_out_final_ff & !rmode_01;
assign ovf0 = exp_out_final_ff & !rmode_01 & !op_f2i;
 
 
// round to zero
// round to zero
assign fract_out_rnd1 = (exp_out_ff & !op_div & !dn) ? 23'h7fffff : fract_out;
assign fract_out_rnd1 = (exp_out_ff & !op_div & !dn & !op_f2i) ? 23'h7fffff : fract_out;
assign exp_fix_div    = (fi_ldz>23) ? exp_fix_diva : exp_fix_divb;
assign exp_fix_div    = (fi_ldz>22) ? exp_fix_diva : exp_fix_divb;
assign exp_out_rnd1   = (g & r & s & exp_in_ff) ? (op_div ? exp_fix_div : exp_next_mi[7:0]) :
assign exp_out_rnd1   = (g & r & s & exp_in_ff) ? (op_div ? exp_fix_div : exp_next_mi[7:0]) :
                        exp_out_ff ? exp_in : exp_out;
                        (exp_out_ff & !op_f2i) ? exp_in : exp_out;
 
 
assign ovf1 = exp_out_ff & !dn;
assign ovf1 = exp_out_ff & !dn;
 
 
// round to +inf (UP) and -inf (DOWN)
// round to +inf (UP) and -inf (DOWN)
//assign r_sign = rmode_11 ? !sign : sign;
 
assign r_sign = sign;
assign r_sign = sign;
 
 
assign round2a = !exp_out_fe | !fract_out_7fffff | (exp_out_fe & fract_out_7fffff);
assign round2a = !exp_out_fe | !fract_out_7fffff | (exp_out_fe & fract_out_7fffff);
assign round2_fasu = ((r | s) & !r_sign) & (!exp_out[7] | (exp_out[7] & round2a));
assign round2_fasu = ((r | s) & !r_sign) & (!exp_out[7] | (exp_out[7] & round2a));
 
 
Line 349... Line 376...
                                                ( exp_ovf[1] & !exp_ovf[0] & exp_out1_co)
                                                ( exp_ovf[1] & !exp_ovf[0] & exp_out1_co)
                                        )
                                        )
                        )
                        )
                );
                );
 
 
assign round2 = (op_mul | op_div) ? round2_fmul : round2_fasu;
assign round2_f2i = rmode_10 & (( |fract_in[23:0] & !opas & (exp_in<8'h80 )) | (|fract_trunc));
 
assign round2 = (op_mul | op_div) ? round2_fmul : op_f2i ? round2_f2i : round2_fasu;
 
 
assign {exp_rnd_adj2a, fract_out_rnd2a} = round2 ? fract_out_pl1 : {1'b0, fract_out};
assign {exp_rnd_adj2a, fract_out_rnd2a} = round2 ? fract_out_pl1 : {1'b0, fract_out};
assign exp_out_rnd2a  = exp_rnd_adj2a ? (exp_ovf[1] & op_mul) ? exp_out_mi1 : exp_out_pl1 : exp_out;
assign exp_out_rnd2a  = exp_rnd_adj2a ? ((exp_ovf[1] & op_mul) ? exp_out_mi1 : exp_out_pl1) : exp_out;
 
 
assign fract_out_rnd2 = (r_sign & exp_out_ff & !op_div & !dn) ? 23'h7fffff : fract_out_rnd2a;
assign fract_out_rnd2 = (r_sign & exp_out_ff & !op_div & !dn & !op_f2i) ? 23'h7fffff : fract_out_rnd2a;
assign exp_out_rnd2   = (r_sign & exp_out_ff) ? 8'hfe      : exp_out_rnd2a;
assign exp_out_rnd2   = (r_sign & exp_out_ff & !op_f2i) ? 8'hfe      : exp_out_rnd2a;
 
 
 
 
// Choose rounding mode
// Choose rounding mode
always @(rmode or exp_out_rnd0 or exp_out_rnd1 or exp_out_rnd2)
always @(rmode or exp_out_rnd0 or exp_out_rnd1 or exp_out_rnd2)
        case(rmode)     // synopsys full_case parallel_case
        case(rmode)     // synopsys full_case parallel_case
Line 425... Line 453...
                                (rmode[1] & !exp_ovf[1] & exp_ovf[0] & exp_in_00 & !r_sign)
                                (rmode[1] & !exp_ovf[1] & exp_ovf[0] & exp_in_00 & !r_sign)
                                )
                                )
                ) | (op_div & rmode[1] & exp_in_ff & op_dn & !r_sign & (fi_ldz_2 < 24)  & (exp_out_rnd!=8'hfe) );
                ) | (op_div & rmode[1] & exp_in_ff & op_dn & !r_sign & (fi_ldz_2 < 24)  & (exp_out_rnd!=8'hfe) );
 
 
assign fract_out_final =        (inf_out | ovf0 | output_zero) ? 23'h0 :
assign fract_out_final =        (inf_out | ovf0 | output_zero) ? 23'h0 :
                                max_num ? 23'h7fffff :
                                (max_num | (f2i_max & op_f2i) ) ? 23'h7fffff :
                                fract_out_rnd;
                                fract_out_rnd;
 
 
assign exp_out_final =  ((op_div & exp_ovf[1] & !exp_ovf[0]) | output_zero) ? 8'h00 :
assign exp_out_final =  ((op_div & exp_ovf[1] & !exp_ovf[0]) | output_zero) ? 8'h00 :
                        ((op_div & exp_ovf[1] &  exp_ovf[0] & rmode_00) | inf_out) ? 8'hff :
                        ((op_div & exp_ovf[1] &  exp_ovf[0] & rmode_00) | inf_out | (f2i_max & op_f2i) ) ? 8'hff :
                        max_num ? 8'hfe :
                        max_num ? 8'hfe :
                        exp_out_rnd;
                        exp_out_rnd;
 
 
 
 
// ---------------------------------------------------------------------
// ---------------------------------------------------------------------
Line 489... Line 517...
                        (!rmode_00 & max_num) |
                        (!rmode_00 & max_num) |
                        (exp_in[7] & op_dn & exp_out_ff) |
                        (exp_in[7] & op_dn & exp_out_ff) |
                        (exp_ovf[0] & (exp_ovf[1] | exp_out_ff) );
                        (exp_ovf[0] & (exp_ovf[1] | exp_out_ff) );
 
 
assign overflow  = op_div ? overflow_fdiv : (ovf0 | ovf1);
assign overflow  = op_div ? overflow_fdiv : (ovf0 | ovf1);
assign ine = (r & !dn) | (s & !dn) | max_num | (op_div & !rem_00);
 
 
wire            f2i_ine;
 
 
 
assign f2i_ine =        (f2i_zero & !fract_in_00 & !opas) |
 
                        (|fract_trunc) |
 
                        (f2i_zero & (exp_in<8'h80) & opas & !fract_in_00) |
 
                        (f2i_max & rmode_11 & (exp_in<8'h80));
 
 
 
 
 
 
 
assign ine =    op_f2i ? f2i_ine :
 
                op_i2f ? (|fract_trunc) :
 
                ((r & !dn) | (s & !dn) | max_num | (op_div & !rem_00));
 
 
// ---------------------------------------------------------------------
// ---------------------------------------------------------------------
// Debugging Stuff
// Debugging Stuff
 
 
// synopsys translate_off
// synopsys translate_off
Line 505... Line 545...
wire    [7:0]    exp_out_del;
wire    [7:0]    exp_out_del;
wire    [22:0]   fract_out_del;
wire    [22:0]   fract_out_del;
wire    [47:0]   fract_in_del;
wire    [47:0]   fract_in_del;
wire            overflow_del;
wire            overflow_del;
wire    [1:0]    exp_ovf_del;
wire    [1:0]    exp_ovf_del;
wire    [22:0]   fract_out_x_del;
wire    [22:0]   fract_out_x_del, fract_out_rnd2a_del;
wire    [24:0]   trunc_xx_del;
wire    [24:0]   trunc_xx_del;
wire            exp_rnd_adj2a_del;
wire            exp_rnd_adj2a_del;
wire    [22:0]   fract_dn_del;
wire    [22:0]   fract_dn_del;
wire    [4:0]    div_opa_ldz_del;
wire    [4:0]    div_opa_ldz_del;
wire    [23:0]   fracta_div_del;
wire    [23:0]   fracta_div_del;
Line 518... Line 558...
wire    [7:0]    fi_ldz_2_del;
wire    [7:0]    fi_ldz_2_del;
wire            inf_out_del, max_out_del;
wire            inf_out_del, max_out_del;
wire    [5:0]    fi_ldz_del;
wire    [5:0]    fi_ldz_del;
wire            rx_del;
wire            rx_del;
wire            ez_del;
wire            ez_del;
 
wire            lr;
 
wire    [7:0]    shr, shl, exp_div_del;
 
 
delay2 #26 ud000(clk, test.u0.fracta, fracta_del);
delay2 #26 ud000(clk, test.u0.fracta, fracta_del);
delay2 #26 ud001(clk, test.u0.fractb, fractb_del);
delay2 #26 ud001(clk, test.u0.fractb, fractb_del);
delay1  #2 ud002(clk, {g,r,s}, grs_del);
delay1  #2 ud002(clk, {g,r,s}, grs_del);
delay1  #0 ud004(clk, dn, dn_del);
delay1  #0 ud004(clk, dn, dn_del);
Line 541... Line 583...
delay1  #0 ud025(clk, inf_out, inf_out_del);
delay1  #0 ud025(clk, inf_out, inf_out_del);
delay1  #0 ud026(clk, max_num, max_num_del);
delay1  #0 ud026(clk, max_num, max_num_del);
delay1  #5 ud027(clk, fi_ldz, fi_ldz_del);
delay1  #5 ud027(clk, fi_ldz, fi_ldz_del);
delay1  #0 ud028(clk, rem_00, rx_del);
delay1  #0 ud028(clk, rem_00, rx_del);
 
 
 
delay1  #0 ud029(clk, left_right, lr);
 
delay1  #7 ud030(clk, shift_right, shr);
 
delay1  #7 ud031(clk, shift_left, shl);
 
delay1 #22 ud032(clk, fract_out_rnd2a, fract_out_rnd2a_del);
 
 
 
delay1  #7 ud033(clk, exp_div, exp_div_del);
 
 
always @(test.error_event)
always @(test.error_event)
   begin
   begin
 
 
        $display("\n----------------------------------------------");
        $display("\n----------------------------------------------");
 
 
        $display("ERROR: GRS: %b exp_ovf: %b dn: %h exp_in: %h exp_out: %h, exp_rnd_adj2a: %b",
        $display("ERROR: GRS: %b exp_ovf: %b dn: %h exp_in: %h exp_out: %h, exp_rnd_adj2a: %b",
                        grs_del, exp_ovf_del, dn_del, exp_in_del, exp_out_del, exp_rnd_adj2a_del);
                        grs_del, exp_ovf_del, dn_del, exp_in_del, exp_out_del, exp_rnd_adj2a_del);
 
 
        $display("      div_opa: %b, div_opb: %b, rem_00: %b",
        $display("      div_opa: %b, div_opb: %b, rem_00: %b, exp_div: %h",
                        fracta_div_del, fractb_div_del, rx_del);
                        fracta_div_del, fractb_div_del, rx_del, exp_div_del);
 
 
 
        $display("      lr: %b, shl: %h, shr: %h",
 
                        lr, shl, shr);
 
 
 
 
        $display("       overflow: %b, fract_in=%b  fa:%h fb:%h",
        $display("       overflow: %b, fract_in=%b  fa:%h fb:%h",
                        overflow_del, fract_in_del, fracta_del, fractb_del);
                        overflow_del, fract_in_del, fracta_del, fractb_del);
 
 
        $display("       div_opa_ldz: %h, div_inf: %b, inf_out: %b, max_num: %b, fi_ldz: %h, fi_ldz_2: %h",
        $display("       div_opa_ldz: %h, div_inf: %b, inf_out: %b, max_num: %b, fi_ldz: %h, fi_ldz_2: %h",
                        div_opa_ldz_del, div_inf_del, inf_out_del, max_num_del, fi_ldz_del, fi_ldz_2_del);
                        div_opa_ldz_del, div_inf_del, inf_out_del, max_num_del, fi_ldz_del, fi_ldz_2_del);
 
 
        $display("       fract_out_x: %b, fract_trunc: %b\n",
        $display("       fract_out_x: %b, fract_out_rnd2a_del: %h, fract_trunc: %b\n",
                        fract_out_x_del, trunc_xx_del);
                        fract_out_x_del, fract_out_rnd2a_del, trunc_xx_del);
   end
   end
 
 
 
 
// synopsys translate_on
// synopsys translate_on
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.