|
@@ -105,19 +105,19 @@ module adder(
|
|
|
special_cases:
|
|
special_cases:
|
|
|
begin
|
|
begin
|
|
|
//if a is NaN return a
|
|
//if a is NaN return a
|
|
|
- if (a_e == 8'hff && a_m != 0) begin
|
|
|
|
|
- z <= {a_s, a_e, a[22:0]};
|
|
|
|
|
|
|
+ if (a_e == 128 && a_m != 0) begin
|
|
|
|
|
+ z <= {a_s, 8'hff, a[22], a[21:0]};
|
|
|
state <= put_z;
|
|
state <= put_z;
|
|
|
- end else if (b_e == 8'hff && b_m != 0) begin
|
|
|
|
|
- z <= {b_s, b_e, b[22:0]};
|
|
|
|
|
|
|
+ end else if (b_e == 128 && b_m != 0) begin
|
|
|
|
|
+ z <= {b_s, 8'hff, b[22:0]};
|
|
|
state <= put_z;
|
|
state <= put_z;
|
|
|
//if a is inf return inf
|
|
//if a is inf return inf
|
|
|
- end else if (a_e == 8'hff) begin
|
|
|
|
|
|
|
+ end else if (a_e == 128 && a_m == 0) begin
|
|
|
z[31] <= a_s;
|
|
z[31] <= a_s;
|
|
|
z[30:23] <= 255;
|
|
z[30:23] <= 255;
|
|
|
z[22:0] <= 0;
|
|
z[22:0] <= 0;
|
|
|
//if a is inf and signs don't match return nan
|
|
//if a is inf and signs don't match return nan
|
|
|
- if ((b_e == 8'hff) && (a_s != b_s)) begin
|
|
|
|
|
|
|
+ if ((b_e == 128) && (a_s != b_s)) begin
|
|
|
z[31] <= b_s;
|
|
z[31] <= b_s;
|
|
|
z[30:23] <= 255;
|
|
z[30:23] <= 255;
|
|
|
z[22] <= 1;
|
|
z[22] <= 1;
|
|
@@ -125,7 +125,7 @@ module adder(
|
|
|
end
|
|
end
|
|
|
state <= put_z;
|
|
state <= put_z;
|
|
|
//if b is inf return inf
|
|
//if b is inf return inf
|
|
|
- end else if (b_e == 8'hff) begin
|
|
|
|
|
|
|
+ end else if (b_e == 128 && b_m == 0) begin
|
|
|
z[31] <= b_s;
|
|
z[31] <= b_s;
|
|
|
z[30:23] <= 255;
|
|
z[30:23] <= 255;
|
|
|
z[22:0] <= 0;
|
|
z[22:0] <= 0;
|