xilinx: Add FDDRCPE and FDDRRSE blackbox cells.
authorMarcelina Kościelnicka <mwk@0x04.net>
Wed, 16 Dec 2020 23:24:48 +0000 (00:24 +0100)
committerMarcelina Kościelnicka <mwk@0x04.net>
Thu, 17 Dec 2020 02:25:07 +0000 (03:25 +0100)
These are necessary primitives for proper DDR support on Virtex 2 and
Spartan 3.

techlibs/xilinx/cells_xtra.py
techlibs/xilinx/cells_xtra.v

index f086291ab2debaf8f6a066b4d0893ed81e7f9568..4eb8ddb1921157c797c413a8a276e1f863bed9f4 100644 (file)
@@ -188,6 +188,11 @@ CELLS = [
 
     # I/O logic.
     # Virtex 2, Spartan 3.
+    # Note: these two are not officially listed in the HDL library guide, but
+    # they are more fundamental than OFDDR* and are necessary to construct
+    # differential DDR outputs (OFDDR* can only do single-ended).
+    Cell('FDDRCPE', port_attrs={'C0': ['clkbuf_sink'], 'C1': ['clkbuf_sink']}),
+    Cell('FDDRRSE', port_attrs={'C0': ['clkbuf_sink'], 'C1': ['clkbuf_sink']}),
     Cell('IFDDRCPE', port_attrs={'C0': ['clkbuf_sink'], 'C1': ['clkbuf_sink'], 'D': ['iopad_external_pin']}),
     Cell('IFDDRRSE', port_attrs={'C0': ['clkbuf_sink'], 'C1': ['clkbuf_sink'], 'D': ['iopad_external_pin']}),
     Cell('OFDDRCPE', port_attrs={'C0': ['clkbuf_sink'], 'C1': ['clkbuf_sink'], 'Q': ['iopad_external_pin']}),
index 3021f6b5a0a65588fcaac1318cae7e1028c262ca..9a246c30887f64d9640bc7b1080f5a789745bc47 100644 (file)
@@ -5301,6 +5301,34 @@ module DSP48E2 (...);
     input RSTP;
 endmodule
 
+module FDDRCPE (...);
+    parameter INIT = 1'b0;
+    (* clkbuf_sink *)
+    input C0;
+    (* clkbuf_sink *)
+    input C1;
+    input CE;
+    input D0;
+    input D1;
+    input CLR;
+    input PRE;
+    output Q;
+endmodule
+
+module FDDRRSE (...);
+    parameter INIT = 1'b0;
+    output Q;
+    (* clkbuf_sink *)
+    input C0;
+    (* clkbuf_sink *)
+    input C1;
+    input CE;
+    input D0;
+    input D1;
+    input R;
+    input S;
+endmodule
+
 module IFDDRCPE (...);
     output Q0;
     output Q1;