machxo2: Use attrmvcp pass to move LOC and src attributes from ports/wires to IO...
authorWilliam D. Jones <thor0505@comcast.net>
Sat, 12 Dec 2020 23:09:52 +0000 (18:09 -0500)
committerMarcelina Koƛcielnicka <mwk@0x04.net>
Tue, 23 Feb 2021 16:39:58 +0000 (17:39 +0100)
techlibs/machxo2/cells_sim.v
techlibs/machxo2/synth_machxo2.cc

index 76de392997903e71c90aca4935a0e0ac7e8838ec..3dd41334e73709eb0cc11561ca8322792cec0d55 100644 (file)
@@ -188,3 +188,15 @@ module OSCH #(
        output SEDSTDBY
 );
 endmodule
+
+// IO- "$__" cells for the iopadmap pass. These are temporary cells not meant
+// to be instantiated by the end user. They are required in this file for
+// attrmvcp to work.
+(* blackbox *)
+module  \$__FACADE_OUTPAD (input I, output O); endmodule
+(* blackbox *)
+module  \$__FACADE_INPAD (input I, output O); endmodule
+(* blackbox *)
+module  \$__FACADE_TOUTPAD (input I, OE, output O); endmodule
+(* blackbox *)
+module  \$__FACADE_TINOUTPAD (input I, OE, output O, inout B); endmodule
index c9ab23426780db3592776fc7c805f98986c62f43..ea9b2a0e8427937af24314b9f4cba998a976e84d 100644 (file)
@@ -154,7 +154,7 @@ struct SynthMachXO2Pass : public ScriptPass
        {
                if (check_label("begin"))
                {
-                       run("read_verilog -lib +/machxo2/cells_sim.v");
+                       run("read_verilog -lib -icells +/machxo2/cells_sim.v");
                        run(stringf("hierarchy -check %s", help_mode ? "-top <top>" : top_opt.c_str()));
                }
 
@@ -184,7 +184,11 @@ struct SynthMachXO2Pass : public ScriptPass
                if (check_label("map_ios"))
                {
                        if (!noiopad || help_mode)
+                       {
                                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", "(skip if '-noiopad')");
+                               run("attrmvcp -attr src -attr LOC t:$__FACADE_OUTPAD %x:+[O] t:$__FACADE_TOUTPAD %x:+[O] t:$__FACADE_TINOUTPAD %x:+[B]", "(skip if '-noiopad')");
+                               run("attrmvcp -attr src -attr LOC -driven t:$__FACADE_INPAD %x:+[I]", "(skip if '-noiopad')");
+                       }
                }
 
                if (check_label("map_ffs"))