From 79460208c928e62c608d71c0d6d484293835e8dc Mon Sep 17 00:00:00 2001 From: Andrew Zonenberg Date: Mon, 2 May 2016 20:27:41 -0700 Subject: [PATCH 1/5] Added GP_ABUF cell --- techlibs/greenpak4/cells_sim.v | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/techlibs/greenpak4/cells_sim.v b/techlibs/greenpak4/cells_sim.v index b7dbe81a..04bce877 100644 --- a/techlibs/greenpak4/cells_sim.v +++ b/techlibs/greenpak4/cells_sim.v @@ -13,6 +13,12 @@ module GP_4LUT(input IN0, IN1, IN2, IN3, output OUT); assign OUT = INIT[{IN3, IN2, IN1, IN0}]; endmodule +module GP_ABUF(input wire IN, output wire OUT); + + assign OUT = IN; + +endmodule + module GP_ACMP(input wire PWREN, input wire VIN, input wire VREF, output reg OUT); parameter BANDWIDTH = "HIGH"; From 9fc9d5f1fb1eea47118c00ecad1352ec84fd3047 Mon Sep 17 00:00:00 2001 From: Andrew Zonenberg Date: Mon, 2 May 2016 20:29:39 -0700 Subject: [PATCH 2/5] Added comment to clarify GP_ABUF cell --- techlibs/greenpak4/cells_sim.v | 2 ++ 1 file changed, 2 insertions(+) diff --git a/techlibs/greenpak4/cells_sim.v b/techlibs/greenpak4/cells_sim.v index 04bce877..7555a7ac 100644 --- a/techlibs/greenpak4/cells_sim.v +++ b/techlibs/greenpak4/cells_sim.v @@ -17,6 +17,8 @@ module GP_ABUF(input wire IN, output wire OUT); assign OUT = IN; + //cannot simulate mixed signal IP + endmodule module GP_ACMP(input wire PWREN, input wire VIN, input wire VREF, output reg OUT); From 66095153fd6110dbe84552175d4919f4f5fd75fc Mon Sep 17 00:00:00 2001 From: Andrew Zonenberg Date: Tue, 3 May 2016 22:03:04 -0700 Subject: [PATCH 3/5] Added GreenPak I/O buffer cells --- techlibs/greenpak4/cells_sim.v | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/techlibs/greenpak4/cells_sim.v b/techlibs/greenpak4/cells_sim.v index 7555a7ac..a8bb538c 100644 --- a/techlibs/greenpak4/cells_sim.v +++ b/techlibs/greenpak4/cells_sim.v @@ -134,6 +134,15 @@ module GP_DFFSR(input D, CLK, nSR, output reg Q); end endmodule +module GP_IBUF(input IN, output OUT); + assign OUT = IN; +endmodule + +module GP_IOBUF(input IN, input DIR, output OUT, inout IO); + assign IN = IO; + assign DIR = OE ? OUT : 1'bz; +endmodule + module GP_INV(input IN, output OUT); assign OUT = ~IN; endmodule @@ -161,6 +170,14 @@ module GP_LFOSC(input PWRDN, output reg CLKOUT); endmodule +module GP_OBUF(input IN, output OUT); + assign OUT = IN; +endmodule + +module GP_OBUFT(input IN, input OE, output OUT); + assign OUT = OE ? IN : 1'bz; +endmodule + module GP_PGA(input wire VIN_P, input wire VIN_N, input wire VIN_SEL, output reg VOUT); parameter GAIN = 1; From dcee3256d59907c474542e0dfd24df7c047e6f50 Mon Sep 17 00:00:00 2001 From: Andrew Zonenberg Date: Tue, 3 May 2016 22:53:29 -0700 Subject: [PATCH 4/5] Added tri-state I/O extraction for GreenPak --- techlibs/greenpak4/Makefile.inc | 1 + techlibs/greenpak4/cells_extract.v | 15 +++++++++++++++ techlibs/greenpak4/cells_map.v | 9 +++++++++ techlibs/greenpak4/cells_sim.v | 4 ++-- techlibs/greenpak4/synth_greenpak4.cc | 2 ++ 5 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 techlibs/greenpak4/cells_extract.v diff --git a/techlibs/greenpak4/Makefile.inc b/techlibs/greenpak4/Makefile.inc index 969b7c80..4e8e9415 100644 --- a/techlibs/greenpak4/Makefile.inc +++ b/techlibs/greenpak4/Makefile.inc @@ -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 index 00000000..96feb732 --- /dev/null +++ b/techlibs/greenpak4/cells_extract.v @@ -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 diff --git a/techlibs/greenpak4/cells_map.v b/techlibs/greenpak4/cells_map.v index 1bc0bcda..b7d750ae 100644 --- a/techlibs/greenpak4/cells_map.v +++ b/techlibs/greenpak4/cells_map.v @@ -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; diff --git a/techlibs/greenpak4/cells_sim.v b/techlibs/greenpak4/cells_sim.v index a8bb538c..b419302f 100644 --- a/techlibs/greenpak4/cells_sim.v +++ b/techlibs/greenpak4/cells_sim.v @@ -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); diff --git a/techlibs/greenpak4/synth_greenpak4.cc b/techlibs/greenpak4/synth_greenpak4.cc index 3559e0fa..55412ea2 100644 --- a/techlibs/greenpak4/synth_greenpak4.cc +++ b/techlibs/greenpak4/synth_greenpak4.cc @@ -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"); From deb1eccab5bad3e5a090254e0d3a069a3c474d8b Mon Sep 17 00:00:00 2001 From: Andrew Zonenberg Date: Wed, 4 May 2016 08:06:18 -0700 Subject: [PATCH 5/5] Fixed incorrect signal naming in GP_IOBUF --- techlibs/greenpak4/cells_sim.v | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/techlibs/greenpak4/cells_sim.v b/techlibs/greenpak4/cells_sim.v index b419302f..6c3ffcaa 100644 --- a/techlibs/greenpak4/cells_sim.v +++ b/techlibs/greenpak4/cells_sim.v @@ -139,8 +139,8 @@ module GP_IBUF(input IN, output OUT); endmodule module GP_IOBUF(input IN, input OE, output OUT, inout IO); - assign IN = IO; - assign IO = OE ? OUT : 1'bz; + assign OUT = IO; + assign IO = OE ? IN : 1'bz; endmodule module GP_INV(input IN, output OUT);