|
|
@@ -1,5 +1,5 @@
|
|
|
-module fp_product #(parameter N=16, M=4)(input_a, input_a, ouput_z, clk, reset);
|
|
|
- input logic [N-1:0] input_a, input_a;
|
|
|
+module fp_product #(parameter N=16, M=4)(input_a, input_b, output_z, clk, reset);
|
|
|
+ input logic [N-1:0] input_a, input_b;
|
|
|
input logic clk, reset;
|
|
|
output logic [N-1:0] output_z;
|
|
|
|
|
|
@@ -25,6 +25,7 @@ module fp_product #(parameter N=16, M=4)(input_a, input_a, ouput_z, clk, reset);
|
|
|
b_s <= b[N-1];
|
|
|
b_e <= b[N-2:N-2-M];
|
|
|
b_m <= b[N-3-M:0];
|
|
|
+ output_z <= z;
|
|
|
end
|
|
|
else
|
|
|
begin
|
|
|
@@ -36,7 +37,8 @@ module fp_product #(parameter N=16, M=4)(input_a, input_a, ouput_z, clk, reset);
|
|
|
b <= 0;
|
|
|
b_s <= 0;
|
|
|
b_e <= 0;
|
|
|
- b_m <= 0;
|
|
|
+ b_m <= 0;
|
|
|
+ output_z <= 0;
|
|
|
end
|
|
|
end
|
|
|
|
|
|
@@ -63,7 +65,7 @@ module fp_product #(parameter N=16, M=4)(input_a, input_a, ouput_z, clk, reset);
|
|
|
z_e <= (1 << (M+1)) - 1;
|
|
|
z_m[N-3-M] <= 1;
|
|
|
z_m[N-4-M] <= 0;
|
|
|
- flags <= 2b'01;
|
|
|
+ flags <= 2'b01;
|
|
|
end
|
|
|
else
|
|
|
// Returning infinity
|
|
|
@@ -71,11 +73,11 @@ module fp_product #(parameter N=16, M=4)(input_a, input_a, ouput_z, clk, reset);
|
|
|
z_s <= a_s ^ b_s;
|
|
|
z_e <= (1 << (M+1)) - 1;
|
|
|
z_m <= 0;
|
|
|
- flags <= 2b'10;
|
|
|
+ flags <= 2'b10;
|
|
|
end
|
|
|
end
|
|
|
// If b is infinity then return infinity
|
|
|
- else if (b_s (1<<M))
|
|
|
+ else if (b_s == (1<<M))
|
|
|
begin
|
|
|
//Unless a is zero, then return NaN instead
|
|
|
if (($signed(a_e) == (-1*((1<<M)-1))) && a_m == 0)
|
|
|
@@ -84,7 +86,7 @@ module fp_product #(parameter N=16, M=4)(input_a, input_a, ouput_z, clk, reset);
|
|
|
z_e <= (1 << (M+1)) - 1;
|
|
|
z_m[N-3-M] <= 1;
|
|
|
z_m[N-4-M] <= 0;
|
|
|
- flags <= 2b'01;
|
|
|
+ flags <= 2'b01;
|
|
|
end
|
|
|
else
|
|
|
// Returning infinity
|
|
|
@@ -92,7 +94,7 @@ module fp_product #(parameter N=16, M=4)(input_a, input_a, ouput_z, clk, reset);
|
|
|
z_s <= a_s ^ b_s;
|
|
|
z_e <= (1 << (M+1)) - 1;
|
|
|
z_m <= 0;
|
|
|
- flags <= 2b'10;
|
|
|
+ flags <= 2'b10;
|
|
|
end
|
|
|
end
|
|
|
// If either input is zero then return zero
|
|
|
@@ -179,6 +181,5 @@ module fp_product #(parameter N=16, M=4)(input_a, input_a, ouput_z, clk, reset);
|
|
|
z <= 0;
|
|
|
end
|
|
|
end
|
|
|
-
|
|
|
- output_z <= z;
|
|
|
+
|
|
|
endmodule : fp_product
|