Extend using A[1] to preserve don't care
authorEddie Hung <eddie@fpgeh.com>
Tue, 9 Jul 2019 19:35:41 +0000 (12:35 -0700)
committerEddie Hung <eddie@fpgeh.com>
Tue, 9 Jul 2019 19:35:41 +0000 (12:35 -0700)
techlibs/xilinx/cells_map.v

index e81ff8f53067e804bfa2e2db8a74dd7a26c2c45b..f20fe253e28ae0aad91ed83e7668e8210afcebc2 100644 (file)
@@ -203,7 +203,15 @@ module \$__XILINX_SHIFTX (A, B, Y);
       MUXF7 fpga_hard_mux (.I0(A[0]), .I1(A[1]), .S(B[0]), .O(Y));
     end
     else if (A_WIDTH <= 4) begin
-      wire [4-1:0] Ax = {{{4-A_WIDTH}{1'bx}}, A};
+      wire [4-1:0] Ax;
+      if (A_WIDTH == 4)
+        assign Ax = A;
+      else
+        // Rather than extend with 1'bx which gets flattened to 1'b0
+        // causing the "don't care" status to get lost, extend with
+        // the same driver of F7B.I0 so that we can optimise F7B away
+        // later
+        assign Ax = {A[1], A};
       \$__XILINX_MUXF78 fpga_hard_mux (.I0(Ax[0]), .I1(Ax[2]), .I2(Ax[1]), .I3(Ax[3]), .S0(B[1]), .S1(B[0]), .O(Y));
     end
     else if (A_WIDTH <= 8) begin