sky130: add support for sky130_osu_sc_t18 Initial support for the t18 variant of OSU sky130. Good enough to build the spm design from OpenLane, but requires a few fixes in sky130_osu_sc_t18 and in OpenRoad.
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