aboutsummaryrefslogtreecommitdiffstats
path: root/techlibs/common
diff options
context:
space:
mode:
Diffstat (limited to 'techlibs/common')
-rw-r--r--techlibs/common/mul2dsp.v23
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)