Line 150... |
Line 150... |
// shift-right the fraction if necessary
|
// shift-right the fraction if necessary
|
assign s_fract_shr_28 = s_fract_sm_28 >> s_exp_diff;
|
assign s_fract_shr_28 = s_fract_sm_28 >> s_exp_diff;
|
|
|
// count the zeros from right to check if result is inexact
|
// count the zeros from right to check if result is inexact
|
always @(s_fract_sm_28)
|
always @(s_fract_sm_28)
|
casex(s_fract_sm_28) // synopsys full_case parallel_case
|
casez(s_fract_sm_28) // synopsys full_case parallel_case
|
28'b???????????????????????????1: s_rzeros <= 0;
|
28'b???????????????????????????1: s_rzeros = 0;
|
28'b??????????????????????????10: s_rzeros <= 1;
|
28'b??????????????????????????10: s_rzeros = 1;
|
28'b?????????????????????????100: s_rzeros <= 2;
|
28'b?????????????????????????100: s_rzeros = 2;
|
28'b????????????????????????1000: s_rzeros <= 3;
|
28'b????????????????????????1000: s_rzeros = 3;
|
28'b???????????????????????10000: s_rzeros <= 4;
|
28'b???????????????????????10000: s_rzeros = 4;
|
28'b??????????????????????100000: s_rzeros <= 5;
|
28'b??????????????????????100000: s_rzeros = 5;
|
28'b?????????????????????1000000: s_rzeros <= 6;
|
28'b?????????????????????1000000: s_rzeros = 6;
|
28'b????????????????????10000000: s_rzeros <= 7;
|
28'b????????????????????10000000: s_rzeros = 7;
|
28'b???????????????????100000000: s_rzeros <= 8;
|
28'b???????????????????100000000: s_rzeros = 8;
|
28'b??????????????????1000000000: s_rzeros <= 9;
|
28'b??????????????????1000000000: s_rzeros = 9;
|
28'b?????????????????10000000000: s_rzeros <= 10;
|
28'b?????????????????10000000000: s_rzeros = 10;
|
28'b????????????????100000000000: s_rzeros <= 11;
|
28'b????????????????100000000000: s_rzeros = 11;
|
28'b???????????????1000000000000: s_rzeros <= 12;
|
28'b???????????????1000000000000: s_rzeros = 12;
|
28'b??????????????10000000000000: s_rzeros <= 13;
|
28'b??????????????10000000000000: s_rzeros = 13;
|
28'b?????????????100000000000000: s_rzeros <= 14;
|
28'b?????????????100000000000000: s_rzeros = 14;
|
28'b????????????1000000000000000: s_rzeros <= 15;
|
28'b????????????1000000000000000: s_rzeros = 15;
|
28'b???????????10000000000000000: s_rzeros <= 16;
|
28'b???????????10000000000000000: s_rzeros = 16;
|
28'b??????????100000000000000000: s_rzeros <= 17;
|
28'b??????????100000000000000000: s_rzeros = 17;
|
28'b?????????1000000000000000000: s_rzeros <= 18;
|
28'b?????????1000000000000000000: s_rzeros = 18;
|
28'b????????10000000000000000000: s_rzeros <= 19;
|
28'b????????10000000000000000000: s_rzeros = 19;
|
28'b???????100000000000000000000: s_rzeros <= 20;
|
28'b???????100000000000000000000: s_rzeros = 20;
|
28'b??????1000000000000000000000: s_rzeros <= 21;
|
28'b??????1000000000000000000000: s_rzeros = 21;
|
28'b?????10000000000000000000000: s_rzeros <= 22;
|
28'b?????10000000000000000000000: s_rzeros = 22;
|
28'b????100000000000000000000000: s_rzeros <= 23;
|
28'b????100000000000000000000000: s_rzeros = 23;
|
28'b???1000000000000000000000000: s_rzeros <= 24;
|
28'b???1000000000000000000000000: s_rzeros = 24;
|
28'b??10000000000000000000000000: s_rzeros <= 25;
|
28'b??10000000000000000000000000: s_rzeros = 25;
|
28'b?100000000000000000000000000: s_rzeros <= 26;
|
28'b?100000000000000000000000000: s_rzeros = 26;
|
28'b1000000000000000000000000000: s_rzeros <= 27;
|
28'b1000000000000000000000000000: s_rzeros = 27;
|
28'b0000000000000000000000000000: s_rzeros <= 28;
|
28'b0000000000000000000000000000: s_rzeros = 28;
|
endcase // casex (s_fract_sm_28)
|
endcase // casex (s_fract_sm_28)
|
|
|
assign s_sticky = (s_exp_diff > s_rzeros) & (|s_fract_sm_28);
|
assign s_sticky = (s_exp_diff > {2'b00,s_rzeros}) & (|s_fract_sm_28);
|
|
|
assign s_fracta_28_o = s_expa_gt_expb ?
|
assign s_fracta_28_o = s_expa_gt_expb ?
|
s_fracta_28 :
|
s_fracta_28 :
|
{s_fract_shr_28[27:1],(s_sticky|s_fract_shr_28[0])};
|
{s_fract_shr_28[27:1],(s_sticky|s_fract_shr_28[0])};
|
|
|