Added tri-state I/O extraction for GreenPak
authorAndrew Zonenberg <azonenberg@drawersteak.com>
Wed, 4 May 2016 05:53:29 +0000 (22:53 -0700)
committerAndrew Zonenberg <azonenberg@drawersteak.com>
Wed, 4 May 2016 05:53:29 +0000 (22:53 -0700)
techlibs/greenpak4/Makefile.inc
techlibs/greenpak4/cells_extract.v [new file with mode: 0644]
techlibs/greenpak4/cells_map.v
techlibs/greenpak4/cells_sim.v
techlibs/greenpak4/synth_greenpak4.cc

index 969b7c80d63191162cf745d678eac27cc3087c46..4e8e9415c57db7f2bd12cf56641572d383094bc5 100644 (file)
@@ -2,6 +2,7 @@
 OBJS += techlibs/greenpak4/synth_greenpak4.o
 OBJS += techlibs/greenpak4/greenpak4_counters.o
 
+$(eval $(call add_share_file,share/greenpak4,techlibs/greenpak4/cells_extract.v))
 $(eval $(call add_share_file,share/greenpak4,techlibs/greenpak4/cells_map.v))
 $(eval $(call add_share_file,share/greenpak4,techlibs/greenpak4/cells_sim.v))
 $(eval $(call add_share_file,share/greenpak4,techlibs/greenpak4/gp_dff.lib))
diff --git a/techlibs/greenpak4/cells_extract.v b/techlibs/greenpak4/cells_extract.v
new file mode 100644 (file)
index 0000000..96feb73
--- /dev/null
@@ -0,0 +1,15 @@
+//Wrapper module to patch up output of iopadmap
+module GP_IOBUF(input IN, output OUT, input OE, inout IO);
+
+       GP_IBUF ibuf(
+               .IN(IO),
+               .OUT(OUT)
+       );
+       
+       $_TBUF_ tbuf(
+               .A(IN),
+               .E(OE),
+               .Y(OUT)
+       );
+
+endmodule
index 1bc0bcda4c6f118c83c37473c921ae906483eae1..b7d750ae06372e0571a849bad31e100021468adc 100644 (file)
@@ -24,6 +24,15 @@ module GP_DFFR(input D, CLK, nRST, output reg Q);
        );
 endmodule
 
+module GP_OBUFT(input IN, input OE, output OUT);
+       GP_IOBUF _TECHMAP_REPLACE_ (
+               .IN(IN),
+               .OE(OE),
+               .IO(OUT),
+               .OUT()
+       );
+endmodule
+
 module \$lut (A, Y);
   parameter WIDTH = 0;
   parameter LUT = 0;
index a8bb538c46576a83824f0a3468405054fddd2691..b419302fd756ddd27ad77ce6ade6a6246d2c572f 100644 (file)
@@ -138,9 +138,9 @@ module GP_IBUF(input IN, output OUT);
        assign OUT = IN;
 endmodule
 
-module GP_IOBUF(input IN, input DIR, output OUT, inout IO);
+module GP_IOBUF(input IN, input OE, output OUT, inout IO);
        assign IN = IO;
-       assign DIR = OE ? OUT : 1'bz;
+       assign IO = OE ? OUT : 1'bz;
 endmodule
 
 module GP_INV(input IN, output OUT);
index 3559e0fad8621698934d8fa345f865651101a729..55412ea2b3d976c31d7e89247c8a5b6203445a2e 100644 (file)
@@ -176,6 +176,8 @@ struct SynthGreenPAK4Pass : public ScriptPass
                if (check_label("map_cells"))
                {
                        run("shregmap -tech greenpak4");
+                       run("iopadmap -bits -inpad GP_IBUF OUT:IN -outpad GP_OBUF IN:OUT -inoutpad GP_IBUF OUT:IN");
+                       run("extract -map +/greenpak4/cells_extract.v -verbose");
                        run("dfflibmap -liberty +/greenpak4/gp_dff.lib");
                        run("techmap -map +/greenpak4/cells_map.v");
                        run("dffinit -ff GP_DFF Q INIT");