Added tri-state I/O extraction for GreenPak

This commit is contained in:
Andrew Zonenberg 2016-05-03 22:53:29 -07:00
parent 66095153fd
commit dcee3256d5
5 changed files with 29 additions and 2 deletions

View 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))

View File

@ -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

View 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;

View 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);

View 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");