diff options
Diffstat (limited to 'techlibs/common/mul2dsp.v')
-rw-r--r-- | techlibs/common/mul2dsp.v | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/techlibs/common/mul2dsp.v b/techlibs/common/mul2dsp.v index da1c7c0c7..b6aa02834 100644 --- a/techlibs/common/mul2dsp.v +++ b/techlibs/common/mul2dsp.v @@ -8,9 +8,6 @@ $error("Macro DSP_A_MAXWIDTH must be defined"); `ifndef DSP_B_MAXWIDTH
$error("Macro DSP_B_MAXWIDTH must be defined");
`endif
-`ifndef DSP_SIGNEDONLY
-`define DSP_SIGNEDONLY 0
-`endif
`ifndef DSP_NAME
$error("Macro DSP_NAME must be defined");
@@ -33,7 +30,8 @@ module \$mul (A, B, Y); generate
if (A_SIGNED != B_SIGNED)
wire _TECHMAP_FAIL_ = 1;
- else if (`DSP_SIGNEDONLY && !A_SIGNED) begin
+`ifdef DSP_SIGNEDONLY
+ else if (!A_SIGNED) begin
wire [1:0] dummy;
\$mul #(
.A_SIGNED(1),
@@ -47,6 +45,7 @@ module \$mul (A, B, Y); .Y({dummy, Y})
);
end
+`endif
// NB: A_SIGNED == B_SIGNED == 0 from here
else if (A_WIDTH >= B_WIDTH)
\$__mul_gen #(
@@ -109,7 +108,7 @@ module \$__mul_gen (A, B, Y); end
\$__mul_gen #(
- .A_SIGNED(0),
+ .A_SIGNED(sign_headroom),
.B_SIGNED(B_SIGNED),
.A_WIDTH(`DSP_A_MAXWIDTH),
.B_WIDTH(B_WIDTH),
@@ -123,7 +122,7 @@ module \$__mul_gen (A, B, Y); for (i = 1; i < n-1; i=i+1) begin:slice
\$__mul_gen #(
- .A_SIGNED(0),
+ .A_SIGNED(sign_headroom),
.B_SIGNED(B_SIGNED),
.A_WIDTH(`DSP_A_MAXWIDTH),
.B_WIDTH(B_WIDTH),
@@ -164,7 +163,7 @@ module \$__mul_gen (A, B, Y); \$__mul_gen #(
.A_SIGNED(A_SIGNED),
- .B_SIGNED(0),
+ .B_SIGNED(sign_headroom),
.A_WIDTH(A_WIDTH),
.B_WIDTH(`DSP_B_MAXWIDTH),
.Y_WIDTH(partial_Y_WIDTH)
@@ -178,7 +177,7 @@ module \$__mul_gen (A, B, Y); for (i = 1; i < n-1; i=i+1) begin:slice
\$__mul_gen #(
.A_SIGNED(A_SIGNED),
- .B_SIGNED(0),
+ .B_SIGNED(sign_headroom),
.A_WIDTH(A_WIDTH),
.B_WIDTH(`DSP_B_MAXWIDTH),
.Y_WIDTH(partial_Y_WIDTH)
@@ -214,7 +213,13 @@ module \$__mul_gen (A, B, Y); else
wire [`DSP_B_MAXWIDTH-1:0] Bext = B;
- `DSP_NAME _TECHMAP_REPLACE_ (
+ `DSP_NAME #(
+ .A_SIGNED(A_SIGNED),
+ .B_SIGNED(B_SIGNED),
+ .A_WIDTH(`DSP_A_MAXWIDTH),
+ .B_WIDTH(`DSP_B_MAXWIDTH),
+ .Y_WIDTH(`DSP_A_MAXWIDTH+`DSP_B_MAXWIDTH),
+ ) _TECHMAP_REPLACE_ (
.A(Aext),
.B(Bext),
.Y(Y)
|