Merge branch 'master' of opencircuitdesign.com:/home/tim/gitsrc/open_pdks/ into HEAD
Pulling before merging pull request
diff --git a/sky130/Makefile.in b/sky130/Makefile.in
index 2e805da..d509361 100644
--- a/sky130/Makefile.in
+++ b/sky130/Makefile.in
@@ -72,6 +72,7 @@
#--------------------------------------------------------------------
# This Makefile contains bash-isms
SHELL = bash
+MV = mv
REVISION = 20200927
TECH = sky130
@@ -271,7 +272,7 @@
${QFLOW_STAGING_A}/${SKY130A}ls.sh
${CPP} ${SKY130A_DEFS} -DLIBRARY=sky130_fd_sc_ms qflow/${TECH}.sh > \
${QFLOW_STAGING_A}/${SKY130A}ms.sh
- ${CPP} ${SKY130A_DEFS} -DLIBRARY=sky130_osu_sc qflow/sky130osu.sh > \
+ ${CPP} ${SKY130A_DEFS} -DLIBRARY=sky130_osu_sc_t18 qflow/sky130osu.sh > \
${QFLOW_STAGING_A}/${SKY130A}osu.sh
${CPP} ${SKY130A_DEFS} qflow/${TECH}.par > ${QFLOW_STAGING_A}/${SKY130A}hd.par
${CPP} ${SKY130A_DEFS} qflow/${TECH}.par > ${QFLOW_STAGING_A}/${SKY130A}hdll.par
@@ -298,7 +299,7 @@
${CPP} ${SKY130A_DEFS} klayout/${TECH}.lyp > ${KLAYOUT_STAGING_A}/${SKY130A}.lyp
${CPP} ${SKY130A_DEFS} klayout/${TECH}.lyt > ${KLAYOUT_STAGING_A}/${SKY130A}.lyt
-openlane-a: openlane/common_pdn.tcl openlane/config.tcl openlane/sky130_fd_sc_hd/config.tcl openlane/sky130_fd_sc_hs/config.tcl openlane/sky130_fd_sc_ms/config.tcl openlane/sky130_fd_sc_ls/config.tcl openlane/sky130_fd_sc_hdll/config.tcl
+openlane-a: openlane/common_pdn.tcl openlane/config.tcl openlane/sky130_fd_sc_hd/config.tcl openlane/sky130_fd_sc_hs/config.tcl openlane/sky130_fd_sc_ms/config.tcl openlane/sky130_fd_sc_ls/config.tcl openlane/sky130_fd_sc_hdll/config.tcl openlane/sky130_osu_sc_t18/config.tcl
mkdir -p ${OPENLANETOP_STAGING_A}
mkdir -p ${OPENLANE_STAGING_A}
mkdir -p ${OPENLANE_STAGING_A}/sky130_fd_sc_hd
@@ -307,6 +308,7 @@
mkdir -p ${OPENLANE_STAGING_A}/sky130_fd_sc_ms
mkdir -p ${OPENLANE_STAGING_A}/sky130_fd_sc_hdll
mkdir -p ${OPENLANE_STAGING_A}/sky130_fd_sc_hvl
+ mkdir -p ${OPENLANE_STAGING_A}/sky130_osu_sc_t18
rm -f ${OPENLANE_STAGING_A}/common_pdn.info
rm -f ${OPENLANE_STAGING_A}/config.tcl
rm -f ${OPENLANE_STAGING_A}/sky130_fd_sc_hd/config.tcl
@@ -328,6 +330,8 @@
rm -f ${OPENLANE_STAGING_A}/sky130_fd_sc_hvl/config.tcl
rm -f ${OPENLANE_STAGING_A}/sky130_fd_sc_hvl/tracks.info
rm -f ${OPENLANE_STAGING_A}/sky130_fd_sc_hvl/no_synth.cells
+ rm -f ${OPENLANE_STAGING_A}/sky130_osu_sc_t18/config.tcl
+ rm -f ${OPENLANE_STAGING_A}/sky130_osu_sc_t18/tracks.info
${CPP} ${SKY130A_DEFS} openlane/common_pdn.tcl > ${OPENLANE_STAGING_A}/common_pdn.tcl
${CPP} ${SKY130A_DEFS} openlane/config.tcl > ${OPENLANE_STAGING_A}/config.tcl
${CPP} ${SKY130A_DEFS} openlane/sky130_fd_sc_hd/config.tcl > ${OPENLANE_STAGING_A}/sky130_fd_sc_hd/config.tcl
@@ -349,6 +353,8 @@
${CPP} ${SKY130A_DEFS} openlane/sky130_fd_sc_hvl/config.tcl > ${OPENLANE_STAGING_A}/sky130_fd_sc_hvl/config.tcl
${CPP} ${SKY130A_DEFS} openlane/sky130_fd_sc_hvl/tracks.info > ${OPENLANE_STAGING_A}/sky130_fd_sc_hvl/tracks.info
${CPP} ${SKY130A_DEFS} openlane/sky130_fd_sc_hvl/no_synth.cells > ${OPENLANE_STAGING_A}/sky130_fd_sc_hvl/no_synth.cells
+ ${CPP} ${SKY130A_DEFS} openlane/sky130_osu_sc_t18/config.tcl > ${OPENLANE_STAGING_A}/sky130_osu_sc_t18/config.tcl
+ ${CPP} ${SKY130A_DEFS} openlane/sky130_osu_sc_t18/tracks.info > ${OPENLANE_STAGING_A}/sky130_osu_sc_t18/tracks.info
vendor-a:
# Install device subcircuits from vendor files
@@ -429,6 +435,16 @@
${RM} ${STAGING_PATH}/${SKY130A}/libs.ref/sky130_fd_sc_ms/verilog/*.*.v
${RM} ${STAGING_PATH}/${SKY130A}/libs.ref/sky130_fd_sc_ls/verilog/*.*.v
${RM} ${STAGING_PATH}/${SKY130A}/libs.ref/sky130_fd_sc_lp/verilog/*.*.v
+ # Install OSU digital standard cells.
+ ${STAGE} -source ${SKYWATER_PATH} -target ${STAGING_PATH}/${SKY130A} \
+ -techlef %l/latest/lef/sky130_osu_sc.tlef \
+ -cdl %l/latest/cdl/*.cdl ignore=topography compile-only \
+ -lef %l/latest/lef/*.lef compile-only \
+ -lib %l/latest/lib/*.lib \
+ -gds %l/latest/gds/*.gds compile-only \
+ -library digital sky130_osu_sc_t18 |& tee -a ${SKY130A}_install.log
+ # Renaming. Can it be avoided or simplified ?
+ ${MV} ${STAGING_PATH}/${SKY130A}/libs.ref/sky130_osu_sc_t18/techlef/sky130_osu_sc.tlef ${STAGING_PATH}/${SKY130A}/libs.ref/sky130_osu_sc_t18/techlef/sky130_osu_sc_t18.tlef
# Install OSU digital standard cells.
# ${STAGE} -source ${OSU_PATH} -target ${STAGING_PATH}/${SKY130A} \
# -techlef char/techfiles/scs8.lef rename sky130_osu_sc.tlef \
diff --git a/sky130/magic/sky130.magicrc b/sky130/magic/sky130.magicrc
index db999db..7fe3735 100644
--- a/sky130/magic/sky130.magicrc
+++ b/sky130/magic/sky130.magicrc
@@ -60,6 +60,7 @@
addpath ${PDKPATH}/libs.ref/${MAGTYPE}/sky130_fd_sc_ls
addpath ${PDKPATH}/libs.ref/${MAGTYPE}/sky130_fd_sc_ms
addpath ${PDKPATH}/libs.ref/${MAGTYPE}/sky130_osu_sc
+ addpath ${PDKPATH}/libs.ref/${MAGTYPE}/sky130_osu_sc_t18
} else {
addpath ${PDKPATH}/libs.ref/sky130_fd_pr/${MAGTYPE}
addpath ${PDKPATH}/libs.ref/sky130_fd_io/${MAGTYPE}
@@ -71,6 +72,7 @@
addpath ${PDKPATH}/libs.ref/sky130_fd_sc_ls/${MAGTYPE}
addpath ${PDKPATH}/libs.ref/sky130_fd_sc_ms/${MAGTYPE}
addpath ${PDKPATH}/libs.ref/sky130_osu_sc/${MAGTYPE}
+ addpath ${PDKPATH}/libs.ref/sky130_osu_sc_t18/${MAGTYPE}
}
# add path to GDS cells
@@ -86,6 +88,7 @@
path cell +${PDKPATH}/libs.ref/gds/sky130_fd_sc_ls
path cell +${PDKPATH}/libs.ref/gds/sky130_fd_sc_ms
path cell +${PDKPATH}/libs.ref/gds/sky130_osu130
+ path cell +${PDKPATH}/libs.ref/gds/sky130_osu130_t18
} else {
path cell ${PDKPATH}/libs.ref/sky130_fd_pr/gds
path cell +${PDKPATH}/libs.ref/sky130_fd_io/gds
@@ -97,6 +100,7 @@
path cell +${PDKPATH}/libs.ref/sky130_fd_sc_ls/gds
path cell +${PDKPATH}/libs.ref/sky130_fd_sc_ms/gds
path cell +${PDKPATH}/libs.ref/sky130_osu130/gds
+ path cell +${PDKPATH}/libs.ref/sky130_osu130_t18/gds
}
#endif (FULLTECH)
diff --git a/sky130/openlane/sky130_osu_sc_t18/config.tcl b/sky130/openlane/sky130_osu_sc_t18/config.tcl
new file mode 100755
index 0000000..1e5ac36
--- /dev/null
+++ b/sky130/openlane/sky130_osu_sc_t18/config.tcl
@@ -0,0 +1,73 @@
+set current_folder [file dirname [file normalize [info script]]]
+# Technology lib
+
+#ifdef EF_FORMAT
+set ::env(LIB_SYNTH) "$::env(PDK_ROOT)/$::env(PDK)/libs.ref/lib/$::env(STD_CELL_LIBRARY)/sky130_osu_sc_TT_1P8_25C.lib"
+set ::env(LIB_FASTEST) "$::env(PDK_ROOT)/$::env(PDK)/libs.ref/lib/$::env(STD_CELL_LIBRARY)/sky130_osu_sc_FF_1P8_25C.lib"
+set ::env(LIB_SLOWEST) "$::env(PDK_ROOT)/$::env(PDK)/libs.ref/lib/$::env(STD_CELL_LIBRARY)/sky130_osu_sc_SS_1p8_25C.lib"
+#else (!EF_FORMAT)
+set ::env(LIB_SYNTH) "$::env(PDK_ROOT)/$::env(PDK)/libs.ref/$::env(STD_CELL_LIBRARY)/lib/sky130_osu_sc_TT_1P8_25C.lib"
+set ::env(LIB_FASTEST) "$::env(PDK_ROOT)/$::env(PDK)/libs.ref/$::env(STD_CELL_LIBRARY)/lib/sky130_osu_sc_FF_1P8_25C.lib"
+set ::env(LIB_SLOWEST) "$::env(PDK_ROOT)/$::env(PDK)/libs.ref/$::env(STD_CELL_LIBRARY)/lib/sky130_osu_sc_SS_1P8_25C.lib"
+#endif (!EF_FORMAT)
+
+set ::env(LIB_TYPICAL) $::env(LIB_SYNTH)
+
+# Placement site for core cells
+# This can be found in the technology lef (SITE)
+set ::env(PLACE_SITE) "s8_osu130"
+set ::env(PLACE_SITE_WIDTH) 0.11
+set ::env(PLACE_SITE_HEIGHT) 7.2
+
+# welltap and endcap cells
+# Does not exist in OSU cells. Taps are included in each cell.
+# set ::env(FP_WELLTAP_CELL) "sky130_osu_sc_t18__tapvpwrvgnd_1"
+# set ::env(FP_ENDCAP_CELL) "sky130_osu_sc_t18__decap_3"
+
+# defaults (can be overridden by designs):
+set ::env(SYNTH_DRIVING_CELL) "INVX8"
+set ::env(SYNTH_DRIVING_CELL_PIN) "Y"
+# capacitance : 0.037357;
+# update these
+set ::env(SYNTH_CAP_LOAD) "37.357" ; # femtofarad INVX8 pin A cap
+set ::env(SYNTH_MIN_BUF_PORT) "BUFX1 A Y"
+set ::env(SYNTH_TIEHI_PORT) "TIEHI Y"
+set ::env(SYNTH_TIELO_PORT) "TIELO Y"
+
+# Power pins
+set ::env(VDD_PIN) "vdd"
+set ::env(GND_PIN) "gnd"
+
+# cts defaults
+set ::env(CTS_ROOT_BUFFER) CLKBUFX1
+set ::env(CELL_CLK_PORT) CK
+
+# Placement defaults
+set ::env(PL_LIB) $::env(LIB_TYPICAL)
+
+# Fillcell insertion - do decap cell
+set ::env(FILL_CELL) "FILLX"
+set ::env(DECAP_CELL) ""
+set ::env(RE_BUFFER_CELL) "BUFX4"
+
+
+# Diode insertion
+set ::env(DIODE_CELL) "ANTFILL"
+#set ::env(FAKEDIODE_CELL) "sky130_osu_sc_t18__fakediode_2"
+set ::env(DIODE_CELL_PIN) "A"
+
+set ::env(CELL_PAD) 8
+set ::env(CELL_PAD_EXECLUDE) "FILLX*"
+
+# Clk Buffers info CTS data
+set ::env(ROOT_CLK_BUFFER) CLKBUFX1
+set ::env(CLK_BUFFER) CLKBUFX1
+set ::env(CLK_BUFFER_INPUT) A
+set ::env(CLK_BUFFER_OUTPUT) Y
+set ::env(CTS_CLK_BUFFER_LIST) "CLKBUFX1"
+# TODO...
+set ::env(CTS_SQR_CAP) 0.258e-3
+set ::env(CTS_SQR_RES) 0.125
+set ::env(CTS_MAX_CAP) 1.53169
+
+set ::env(FP_PDN_RAIL_WIDTH) 0.48
diff --git a/sky130/openlane/sky130_osu_sc_t18/tracks.info b/sky130/openlane/sky130_osu_sc_t18/tracks.info
new file mode 100644
index 0000000..48f6426
--- /dev/null
+++ b/sky130/openlane/sky130_osu_sc_t18/tracks.info
@@ -0,0 +1,12 @@
+li1 X 0 0.40
+li1 Y 0 0.40
+met1 X 0 0.40
+met1 Y 0 0.40
+met2 Y 0.24 0.48
+met2 X 0.24 0.48
+met3 X 0.37 0.74
+met3 Y 0.37 0.74
+met4 X 0.48 0.96
+met4 Y 0.48 0.96
+met5 X 1.85 3.7
+met5 Y 1.85 3.7
diff --git a/sky130/qflow/sky130osu.sh b/sky130/qflow/sky130osu.sh
index 4afd9bd..168bb64 100644
--- a/sky130/qflow/sky130osu.sh
+++ b/sky130/qflow/sky130osu.sh
@@ -9,21 +9,21 @@
#ifdef EF_FORMAT
set leffile=STAGING_PATH/TECHNAME/libs.ref/lef/sky130_osu130/sky130_osu130.lef
#else (!EF_FORMAT)
-set leffile=STAGING_PATH/TECHNAME/libs.ref/sky130_osu130/lef/sky130_osu130.lef
+set leffile=STAGING_PATH/TECHNAME/libs.ref/LIBRARY/lef/sky130_osu130.lef
#endif (!EF_FORMAT)
# The SPICE netlist containing subcell definitions for all the standard cells
#ifdef EF_FORMAT
set spicefile=STAGING_PATH/TECHNAME/libs.ref/spice/sky130_osu130/sky130_osu130.spice
#else (!EF_FORMAT)
-set spicefile=STAGING_PATH/TECHNAME/libs.ref/sky130_osu130/spice/sky130_osu130.spice
+set spicefile=STAGING_PATH/TECHNAME/libs.ref/LIBRARY/spice/sky130_osu130.spice
#endif (!EF_FORMAT)
# The liberty format file containing standard cell timing and function information
#ifdef EF_FORMAT
set libertyfile=STAGING_PATH/TECHNAME/libs.ref/lib/sky130_osu130/sky130_osu130.lib
#else (!EF_FORMAT)
-set libertyfile=STAGING_PATH/TECHNAME/libs.ref/sky130_osu130/lib/sky130_osu130.lib
+set libertyfile=STAGING_PATH/TECHNAME/libs.ref/LIBRARY/lib/sky130_osu130.lib
#endif (!EF_FORMAT)
# If there is another LEF file containing technology information
@@ -34,7 +34,7 @@
#ifdef EF_FORMAT
set techleffile=STAGING_PATH/TECHNAME/libs.ref/techLEF/sky130_osu130/sky130_osu130_tech.lef
#else (!EF_FORMAT)
-set techleffile=STAGING_PATH/TECHNAME/libs.ref/sky130_osu130/techLEF/sky130_osu130_tech.lef
+set techleffile=STAGING_PATH/TECHNAME/libs.ref/LIBRARY/techLEF/sky130_osu130_tech.lef
#endif (!EF_FORMAT)
#else
# NOTE: There is no technology LEF file for the 3-metal stack!
@@ -52,16 +52,16 @@
set clkbufpin_out=Y ;# Name of output port to buffer cell
set fillcell=FILL ;# Spacer (filler) cell (prefix, if more than one)
-set decapcell="" ;# Decap (filler) cell (prefix, if more than one)
-set antennacell="" ;# Antenna (filler) cell (prefix, if more than one)
-set antennapin_in="" ;# Antenna cell input connection
+set decapcell="DECAP" ;# Decap (filler) cell (prefix, if more than one)
+set antennacell="ANT" ;# Antenna (filler) cell (prefix, if more than one)
+set antennapin_in="A" ;# Antenna cell input connection
set bodytiecell="" ;# Body tie (filler) cell (prefix, if more than one)
# yosys tries to eliminate use of these; depends on source .v
-set tiehi="" ;# Cell to connect to power, if one exists
-set tiehipin_out="" ;# Output pin name of tiehi cell, if it exists
-set tielo="" ;# Cell to connect to ground, if one exists
-set tielopin_out="" ;# Output pin name of tielo cell, if it exists
+set tiehi="TIEHI" ;# Cell to connect to power, if one exists
+set tiehipin_out="Y" ;# Output pin name of tiehi cell, if it exists
+set tielo="TIELO" ;# Cell to connect to ground, if one exists
+set tielopin_out="Y" ;# Output pin name of tielo cell, if it exists
set gndnet="vdd" ;# Name used for ground pins in standard cells
set vddnet="vss" ;# Name used for power pins in standard cells
@@ -72,11 +72,11 @@
set magic_display="XR" ;# magic display, defeat display query and OGL preference
set netgen_setup=STAGING_PATH/TECHNAME/libs.tech/netgen/TECHNAME_setup.tcl ;# netgen setup file for LVS
#ifdef EF_FORMAT
-set gdsfile=STAGING_PATH/TECHNAME/libs.ref/gds/sky130_osu130/sky130_osu130.gds ;# GDS database of standard cells
-set verilogfile=STAGING_PATH/TECHNAME/libs.ref/verilog/sky130_osu130/sky130_osu130.v ;# Verilog models of standard cells
+set gdsfile=STAGING_PATH/TECHNAME/libs.ref/gds/LIBRARY/sky130_osu130.gds ;# GDS database of standard cells
+set verilogfile=STAGING_PATH/TECHNAME/libs.ref/verilog/LIBRARY/sky130_osu130.v ;# Verilog models of standard cells
#else (!EF_FORMAT)
-set gdsfile=STAGING_PATH/TECHNAME/libs.ref/sky130_osu130/gds/sky130_osu130.gds ;# GDS database of standard cells
-set verilogfile=STAGING_PATH/TECHNAME/libs.ref/sky130_osu130/verilog/sky130_osu130.v ;# Verilog models of standard cells
+set gdsfile=STAGING_PATH/TECHNAME/libs.ref/LIBRARY/gds/sky130_osu130.gds ;# GDS database of standard cells
+set verilogfile=STAGING_PATH/TECHNAME/libs.ref/LIBRARY/verilog/sky130_osu130.v ;# Verilog models of standard cells
#endif (!EF_FORMAT)
# Set a conditional default in the project_vars.sh file for this process