xilinx: Add SRLC16E primitive.
authorMarcin Kościelnicki <marcin@symbioticeda.com>
Tue, 27 Aug 2019 16:08:51 +0000 (18:08 +0200)
committerMarcin Kościelnicki <koriakin@0x04.net>
Tue, 27 Aug 2019 18:27:12 +0000 (20:27 +0200)
Fixes #1331.

techlibs/xilinx/cells_sim.v

index aeef7f8851ba3707fb0b94cd2af7a3024207b687..973e17212ff4a4b47f7ed6e6576894a3cb664037 100644 (file)
@@ -394,7 +394,27 @@ module SRL16E (
       always @(negedge CLK) if (CE) r <= { r[14:0], D };
     end
     else
-        always @(posedge CLK) if (CE) r <= { r[14:0], D };
+      always @(posedge CLK) if (CE) r <= { r[14:0], D };
+  endgenerate
+endmodule
+
+module SRLC16E (
+  output Q,
+  output Q15,
+  input A0, A1, A2, A3, CE, CLK, D
+);
+  parameter [15:0] INIT = 16'h0000;
+  parameter [0:0] IS_CLK_INVERTED = 1'b0;
+
+  reg [15:0] r = INIT;
+  assign Q15 = r[15];
+  assign Q = r[{A3,A2,A1,A0}];
+  generate
+    if (IS_CLK_INVERTED) begin
+      always @(negedge CLK) if (CE) r <= { r[14:0], D };
+    end
+    else
+      always @(posedge CLK) if (CE) r <= { r[14:0], D };
   endgenerate
 endmodule