aboutsummaryrefslogtreecommitdiffstats
path: root/techlibs
diff options
context:
space:
mode:
authorEddie Hung <eddie@fpgeh.com>2019-04-10 14:51:10 -0700
committerEddie Hung <eddie@fpgeh.com>2019-04-10 14:51:10 -0700
commit3f5dab0d09f881d78fca73c54c20118c52b2e563 (patch)
treef5a3c266367c2f8e14e5746bc49e4e0209782143 /techlibs
parent32561332b21b7b072fa6619f0bbb29a69cb30f33 (diff)
downloadyosys-3f5dab0d09f881d78fca73c54c20118c52b2e563.tar.gz
yosys-3f5dab0d09f881d78fca73c54c20118c52b2e563.tar.bz2
yosys-3f5dab0d09f881d78fca73c54c20118c52b2e563.zip
Fix for when B_SIGNED = 1
Diffstat (limited to 'techlibs')
-rw-r--r--techlibs/xilinx/cells_map.v9
1 files changed, 8 insertions, 1 deletions
diff --git a/techlibs/xilinx/cells_map.v b/techlibs/xilinx/cells_map.v
index ff33cf8ff..758d2ade3 100644
--- a/techlibs/xilinx/cells_map.v
+++ b/techlibs/xilinx/cells_map.v
@@ -28,12 +28,19 @@ module \$shiftx (A, B, Y);
input [B_WIDTH-1:0] B;
output [Y_WIDTH-1:0] Y;
+ parameter [B_WIDTH-1:0] _TECHMAP_CONSTMSK_B_ = 0;
+ parameter [B_WIDTH-1:0] _TECHMAP_CONSTVAL_B_ = 0;
+
generate
genvar i;
if (B_WIDTH < 3) begin
- reg _TECHMAP_FAIL_;
+ wire _TECHMAP_FAIL_;
assign _TECHMAP_FAIL_ = 1;
end
+ // Optimisation to remove B_SIGNED if sign bit of B is constant-0
+ else if (B_SIGNED && _TECHMAP_CONSTMSK_B_[B_WIDTH-1] && _TECHMAP_CONSTVAL_B_[B_WIDTH-1] == 1'b0) begin
+ \$shiftx #(.A_SIGNED(A_SIGNED), .B_SIGNED(0), .A_WIDTH(A_WIDTH), .B_WIDTH(B_WIDTH-1), .Y_WIDTH(Y_WIDTH)) _TECHMAP_REPLACE_ (.A(A), .B(B[B_WIDTH-2:0]), .Y(Y));
+ end
else if (B_WIDTH == 3) begin
localparam a_width0 = Y_WIDTH * (2 ** (B_WIDTH-1));
localparam a_widthN = A_WIDTH - a_width0;