machxo2: synth_machxo2 now maps ports to FACADE_IO.
authorWilliam D. Jones <thor0505@comcast.net>
Thu, 26 Nov 2020 18:39:40 +0000 (13:39 -0500)
committerMarcelina Koƛcielnicka <mwk@0x04.net>
Tue, 23 Feb 2021 16:39:58 +0000 (17:39 +0100)
techlibs/machxo2/cells_map.v
techlibs/machxo2/synth_machxo2.cc

index 924df6f25553177a49f7b8d6c3557a9aae748580..a02630703392ce9e21301052909e56b2c488ffd5 100644 (file)
@@ -24,4 +24,11 @@ module \$lut (A, Y);
        LUT4 #(.INIT({rep{LUT}})) _TECHMAP_REPLACE_ (.A(I[0]), .B(I[1]), .C(I[2]), .D(I[3]), .Z(Y));
 endmodule
 
+// DFFs
 module  \$_DFF_P_ (input D, C, output Q); FACADE_FF #(.CEMUX("1"), .CLKMUX("CLK"), .LSRMUX("LSR"), .REGSET("RESET")) _TECHMAP_REPLACE_ (.CLK(C), .LSR(1'b0), .DI(D), .Q(Q)); endmodule
+
+// IO- "$__" cells for the iopadmap pass.
+module  \$__FACADE_OUTPAD (input I, output O); FACADE_IO #(.DIR("OUTPUT")) _TECHMAP_REPLACE_ (.PAD(O), .I(I), .EN(1'b1)); endmodule
+module  \$__FACADE_INPAD (input I, output O); FACADE_IO #(.DIR("INPUT")) _TECHMAP_REPLACE_ (.PAD(I), .O(O)); endmodule
+module  \$__FACADE_TOUTPAD (input I, OE, output O); FACADE_IO #(.DIR("OUTPUT")) _TECHMAP_REPLACE_ (.PAD(O), .I(I), .EN(OE)); endmodule
+module  \$__FACADE_TINOUTPAD (input I, OE, output O, inout B); FACADE_IO #(.DIR("BIDIR")) _TECHMAP_REPLACE_ (.PAD(B), .I(I), .O(O), .EN(OE)); endmodule
index f126f9c32db1bc3fe792a9ea1c55f3af2c58354c..794f25d0afc6db9676ae6fff8a3ab7b46b674d3f 100644 (file)
@@ -173,6 +173,11 @@ struct SynthMachXO2Pass : public ScriptPass
                        run("opt -fast");
                }
 
+               if (check_label("map_ios"))
+               {
+                       run("iopadmap -bits -outpad $__FACADE_OUTPAD I:O -inpad $__FACADE_INPAD O:I -toutpad $__FACADE_TOUTPAD OE:I:O -tinoutpad $__FACADE_TINOUTPAD OE:O:I:B A:top");
+               }
+
                if (check_label("map_ffs"))
                {
                        run("dfflegalize -cell $_DFF_P_ 0");