Modified the configure script to allow 3rd party libraries to be either installed by default (requiring --disable) or ignored by default (requiring --enable). Moved the SRAM library to the "ignored by default" list because it takes so long to build. Added all of the OSU standard cell libraries (hs/ms/ls each for 12T, 15T, and 18T). Added a straight-through analog pad for high-speed I/O, especially for the "caravan" analog variant of the "caravel" harness chip.
diff --git a/Makefile.in b/Makefile.in index a98af99..cb4286b 100644 --- a/Makefile.in +++ b/Makefile.in
@@ -83,11 +83,16 @@ CPP = common/preproc.py common_install: - mkdir -p @prefix@/pdk/bin/ - cp common/cleanup_unref.py @prefix@/pdk/bin/ - cp common/soc_floorplanner.py @prefix@/pdk/bin/ - ${CPP} -DPREFIX=@prefix@ common/create_project.py \ - @prefix@/pdk/bin/create_project.py + @if test -w @prefix@ ; then \ + mkdir -p @prefix@/pdk/bin/ ;\ + cp common/cleanup_unref.py @prefix@/pdk/bin/ ;\ + cp common/soc_floorplanner.py @prefix@/pdk/bin/ ;\ + ${CPP} -DPREFIX=@prefix@ common/create_project.py \ + @prefix@/pdk/bin/create_project.py ;\ + echo "Common install: Done." ;\ + else \ + echo "Common install: @prefix@ is not writeable (ignoring)." ;\ + fi #---------------------------------------------------
diff --git a/README.md b/README.md index 310dc7d..80a0b60 100644 --- a/README.md +++ b/README.md
@@ -52,13 +52,13 @@ At a minimum you will want to pass a configure option to declare the location of the PDK vendor source distribution (which can be obtained separately), - ./configure --with-[PDK_name]-source=[path] + ./configure --enable-[PDK_name]-pdk=[path] The open_pdks version of the PDK can be built locally within open_pdks without the need to declare an install target or run "make install". However, it is recommended to declare a target location and install there, using - ./configure --with-[PDK_name]-source=[path] --with-[PDK_name]-local-path=[path] + ./configure --enable-[PDK_name]-pdk=[path] --with-[PDK_name]-local-path=[path] followed by "make" and "make install".
diff --git a/scripts/configure b/scripts/configure index 824d296..b0e3e58 100755 --- a/scripts/configure +++ b/scripts/configure
@@ -588,9 +588,13 @@ ac_subst_vars='LTLIBOBJS LIBOBJS EF_STYLE +SKY130_OSU_T18_PATH +SKY130_OSU_T15_PATH +SKY130_OSU_T12_PATH +SKY130_OSU_PATH +SKY130_SRAM_MACROS_PATH XSCHEM_SKY130_PATH SKY130_ML_XX_HD_PATH -SKY130_SRAM_MACROS_PATH PATCH MAGIC XSCHEM_DISABLED @@ -666,9 +670,13 @@ enable_openlane enable_qflow enable_xschem -enable_sram_sky130 enable_alpha_sky130 enable_xschem_sky130 +enable_sram_sky130 +enable_osu_sky130 +enable_osu_t12_sky130 +enable_osu_t15_sky130 +enable_osu_t18_sky130 with_ef_style ' ac_precious_vars='build_alias @@ -1327,15 +1335,27 @@ Enable or disable xschem setup [default=enabled] - --enable-sram-sky130[=path] - Install sky130_sram_macros. If path is omitted, it'll be - downloaded. [default=enabled] --enable-alpha-sky130[=path] - Install sky130_ml_xx_hd. If path is omitted, it'll be - downloaded. [default=enabled] + Install sky130_ml_xx_hd. If path is omitted, the repository + will be downloaded. [default=enabled] --enable-xschem-sky130[=path] - Install xschem_sky130. If path is omitted, it'll be - downloaded. [default=enabled] + Install xschem_sky130. If path is omitted, the repository + will be downloaded. [default=enabled] + --enable-sram-sky130[=path] + Install sky130_sram_macros. If path is omitted, the repository + will be downloaded. [default=enabled] + --enable-osu-sky130[=path] + Install sky130_osu. If path is omitted, the repository + will be downloaded. [default=enabled] + --enable-osu-t12-sky130[=path] + Install sky130_osu_t12. If path is omitted, the repository + will be downloaded. [default=enabled] + --enable-osu-t15-sky130[=path] + Install sky130_osu_t15. If path is omitted, the repository + will be downloaded. [default=enabled] + --enable-osu-t18-sky130[=path] + Install sky130_osu_t18. If path is omitted, the repository + will be downloaded. [default=enabled] Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] @@ -2441,46 +2461,7 @@ # Other installations (libraries or tools if applicable) - - - - - - - # echo target targetvar flag location - - SKY130_SRAM_MACROS_PATH="" - - # Check whether --enable-sram-sky130 was given. -if test "${enable_sram_sky130+set}" = set; then : - enableval=$enable_sram_sky130; - if test "$enableval" == "yes" -o "$enableval" == "YES"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Package 'sky130_sram_macros' will be installed automatically during make." >&5 -$as_echo "$as_me: Package 'sky130_sram_macros' will be installed automatically during make." >&6;} - export SKY130_SRAM_MACROS_PATH=../sources/sky130_sram_macros - elif test "$enableval" == "no" -o "$enableval" == "NO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Disabling package 'sky130_sram_macros'" >&5 -$as_echo "$as_me: Disabling package 'sky130_sram_macros'" >&6;} - export SKY130_SRAM_MACROS_PATH="" - else - SKY130_SRAM_MACROS_PATH=$enableval - { $as_echo "$as_me:${as_lineno-$LINENO}: Enabling package 'sky130_sram_macros' at $SKY130_SRAM_MACROS_PATH" >&5 -$as_echo "$as_me: Enabling package 'sky130_sram_macros' at $SKY130_SRAM_MACROS_PATH" >&6;} - fi - SKY130_SRAM_MACROS_PATH=`realpath $SKY130_SRAM_MACROS_PATH` - -else - - { $as_echo "$as_me:${as_lineno-$LINENO}: Package 'sky130_sram_macros' will be installed automatically during make." >&5 -$as_echo "$as_me: Package 'sky130_sram_macros' will be installed automatically during make." >&6;} - SKY130_SRAM_MACROS_PATH=../sources/sky130_sram_macros - - -fi - - - - +# Optional installations (like the above, but disabled by default) @@ -2570,6 +2551,212 @@ + + + + + # echo target targetvar flag location + + SKY130_SRAM_MACROS_PATH="" + + # Check whether --enable-sram-sky130 was given. +if test "${enable_sram_sky130+set}" = set; then : + enableval=$enable_sram_sky130; + if test "$enableval" == "yes" -o "$enableval" == "YES"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Package 'sky130_sram_macros' will be installed automatically during make." >&5 +$as_echo "$as_me: Package 'sky130_sram_macros' will be installed automatically during make." >&6;} + export SKY130_SRAM_MACROS_PATH=../sources/sky130_sram_macros + elif test "$enableval" == "no" -o "$enableval" == "NO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Disabling package 'sky130_sram_macros'" >&5 +$as_echo "$as_me: Disabling package 'sky130_sram_macros'" >&6;} + export SKY130_SRAM_MACROS_PATH="" + else + SKY130_SRAM_MACROS_PATH=$enableval + { $as_echo "$as_me:${as_lineno-$LINENO}: Enabling package 'sky130_sram_macros' at $SKY130_SRAM_MACROS_PATH" >&5 +$as_echo "$as_me: Enabling package 'sky130_sram_macros' at $SKY130_SRAM_MACROS_PATH" >&6;} + fi + SKY130_SRAM_MACROS_PATH=`realpath $SKY130_SRAM_MACROS_PATH` + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: Package 'sky130_sram_macros' will not be installed." >&5 +$as_echo "$as_me: Package 'sky130_sram_macros' will not be installed." >&6;} + + +fi + + + + + + + + + + + + + # echo target targetvar flag location + + SKY130_OSU_PATH="" + + # Check whether --enable-osu-sky130 was given. +if test "${enable_osu_sky130+set}" = set; then : + enableval=$enable_osu_sky130; + if test "$enableval" == "yes" -o "$enableval" == "YES"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Package 'sky130_osu' will be installed automatically during make." >&5 +$as_echo "$as_me: Package 'sky130_osu' will be installed automatically during make." >&6;} + export SKY130_OSU_PATH=../sources/sky130_osu + elif test "$enableval" == "no" -o "$enableval" == "NO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Disabling package 'sky130_osu'" >&5 +$as_echo "$as_me: Disabling package 'sky130_osu'" >&6;} + export SKY130_OSU_PATH="" + else + SKY130_OSU_PATH=$enableval + { $as_echo "$as_me:${as_lineno-$LINENO}: Enabling package 'sky130_osu' at $SKY130_OSU_PATH" >&5 +$as_echo "$as_me: Enabling package 'sky130_osu' at $SKY130_OSU_PATH" >&6;} + fi + SKY130_OSU_PATH=`realpath $SKY130_OSU_PATH` + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: Package 'sky130_osu' will not be installed." >&5 +$as_echo "$as_me: Package 'sky130_osu' will not be installed." >&6;} + + +fi + + + + + + + + + + + + + # echo target targetvar flag location + + SKY130_OSU_T12_PATH="" + + # Check whether --enable-osu-t12-sky130 was given. +if test "${enable_osu_t12_sky130+set}" = set; then : + enableval=$enable_osu_t12_sky130; + if test "$enableval" == "yes" -o "$enableval" == "YES"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Package 'sky130_osu_t12' will be installed automatically during make." >&5 +$as_echo "$as_me: Package 'sky130_osu_t12' will be installed automatically during make." >&6;} + export SKY130_OSU_T12_PATH=../sources/sky130_osu_t12 + elif test "$enableval" == "no" -o "$enableval" == "NO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Disabling package 'sky130_osu_t12'" >&5 +$as_echo "$as_me: Disabling package 'sky130_osu_t12'" >&6;} + export SKY130_OSU_T12_PATH="" + else + SKY130_OSU_T12_PATH=$enableval + { $as_echo "$as_me:${as_lineno-$LINENO}: Enabling package 'sky130_osu_t12' at $SKY130_OSU_T12_PATH" >&5 +$as_echo "$as_me: Enabling package 'sky130_osu_t12' at $SKY130_OSU_T12_PATH" >&6;} + fi + SKY130_OSU_T12_PATH=`realpath $SKY130_OSU_T12_PATH` + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: Package 'sky130_osu_t12' will not be installed." >&5 +$as_echo "$as_me: Package 'sky130_osu_t12' will not be installed." >&6;} + + +fi + + + + + + + + + + + + + # echo target targetvar flag location + + SKY130_OSU_T15_PATH="" + + # Check whether --enable-osu-t15-sky130 was given. +if test "${enable_osu_t15_sky130+set}" = set; then : + enableval=$enable_osu_t15_sky130; + if test "$enableval" == "yes" -o "$enableval" == "YES"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Package 'sky130_osu_t15' will be installed automatically during make." >&5 +$as_echo "$as_me: Package 'sky130_osu_t15' will be installed automatically during make." >&6;} + export SKY130_OSU_T15_PATH=../sources/sky130_osu_t15 + elif test "$enableval" == "no" -o "$enableval" == "NO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Disabling package 'sky130_osu_t15'" >&5 +$as_echo "$as_me: Disabling package 'sky130_osu_t15'" >&6;} + export SKY130_OSU_T15_PATH="" + else + SKY130_OSU_T15_PATH=$enableval + { $as_echo "$as_me:${as_lineno-$LINENO}: Enabling package 'sky130_osu_t15' at $SKY130_OSU_T15_PATH" >&5 +$as_echo "$as_me: Enabling package 'sky130_osu_t15' at $SKY130_OSU_T15_PATH" >&6;} + fi + SKY130_OSU_T15_PATH=`realpath $SKY130_OSU_T15_PATH` + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: Package 'sky130_osu_t15' will not be installed." >&5 +$as_echo "$as_me: Package 'sky130_osu_t15' will not be installed." >&6;} + + +fi + + + + + + + + + + + + + # echo target targetvar flag location + + SKY130_OSU_T18_PATH="" + + # Check whether --enable-osu-t18-sky130 was given. +if test "${enable_osu_t18_sky130+set}" = set; then : + enableval=$enable_osu_t18_sky130; + if test "$enableval" == "yes" -o "$enableval" == "YES"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Package 'sky130_osu_t18' will be installed automatically during make." >&5 +$as_echo "$as_me: Package 'sky130_osu_t18' will be installed automatically during make." >&6;} + export SKY130_OSU_T18_PATH=../sources/sky130_osu_t18 + elif test "$enableval" == "no" -o "$enableval" == "NO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Disabling package 'sky130_osu_t18'" >&5 +$as_echo "$as_me: Disabling package 'sky130_osu_t18'" >&6;} + export SKY130_OSU_T18_PATH="" + else + SKY130_OSU_T18_PATH=$enableval + { $as_echo "$as_me:${as_lineno-$LINENO}: Enabling package 'sky130_osu_t18' at $SKY130_OSU_T18_PATH" >&5 +$as_echo "$as_me: Enabling package 'sky130_osu_t18' at $SKY130_OSU_T18_PATH" >&6;} + fi + SKY130_OSU_T18_PATH=`realpath $SKY130_OSU_T18_PATH` + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: Package 'sky130_osu_t18' will not be installed." >&5 +$as_echo "$as_me: Package 'sky130_osu_t18' will not be installed." >&6;} + + +fi + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: Tools enabled for PDK setup installation: klayout magic netgen irsim openlane qflow xschem" >&5 $as_echo "$as_me: Tools enabled for PDK setup installation: klayout magic netgen irsim openlane qflow xschem" >&6;}
diff --git a/scripts/configure.ac b/scripts/configure.ac index be17018..63de958 100755 --- a/scripts/configure.ac +++ b/scripts/configure.ac
@@ -168,7 +168,7 @@ flag, AS_HELP_STRING( [--enable-flag@<:@=path@:>@], - [Install target. If path is omitted, it'll be downloaded. @<:@default=enabled@:>@] + [Install target. If path is omitted, the repository will be downloaded. @<:@default=enabled@:>@] ), [ if test "$enableval" == "yes" -o "$enableval" == "YES"; then AC_MSG_NOTICE([Package 'target' will be installed automatically during make.]) @@ -192,10 +192,53 @@ AC_SUBST(targetvar[]_PATH) ]) -M4_GEN_INSTALLATION(sky130_sram_macros, sram-sky130, ../sources) +# Optional installations (like the above, but disabled by default) +AC_DEFUN([M4_OPT_INSTALLATION], [ + m4_define([target], $1) + m4_define([targetvar], [m4_normalize(m4_esyscmd(echo target | tr "a-z-" "A-Z_"))]) + m4_define([flag], $2) + m4_define([location], $3) + + # echo target targetvar flag location + + targetvar[]_PATH="" + + AC_ARG_ENABLE( + flag, + AS_HELP_STRING( + [--enable-flag@<:@=path@:>@], + [Install target. If path is omitted, the repository will be downloaded. @<:@default=enabled@:>@] + ), [ + if test "$enableval" == "yes" -o "$enableval" == "YES"; then + AC_MSG_NOTICE([Package 'target' will be installed automatically during make.]) + export targetvar[]_PATH=location/target + elif test "$enableval" == "no" -o "$enableval" == "NO"; then + AC_MSG_NOTICE([Disabling package 'target']) + export targetvar[]_PATH="" + else + targetvar[]_PATH=$enableval + AC_MSG_NOTICE([Enabling package 'target' at $[]targetvar[]_PATH]) + fi + targetvar[]_PATH=`realpath $[]targetvar[]_PATH` + ],[ + AC_MSG_NOTICE([Package 'target' will not be installed.]) + ] + ) + + $4 + + AC_SUBST(targetvar[]_PATH) +]) + M4_GEN_INSTALLATION(sky130_ml_xx_hd, alpha-sky130, ../sources) M4_GEN_INSTALLATION(xschem_sky130, xschem-sky130, ../sources) +M4_OPT_INSTALLATION(sky130_sram_macros, sram-sky130, ../sources) +M4_OPT_INSTALLATION(sky130_osu, osu-sky130, ../sources) +M4_OPT_INSTALLATION(sky130_osu_t12, osu-t12-sky130, ../sources) +M4_OPT_INSTALLATION(sky130_osu_t15, osu-t15-sky130, ../sources) +M4_OPT_INSTALLATION(sky130_osu_t18, osu-t18-sky130, ../sources) + AC_DEFUN([M4_GEN_WITH_TOOLS], [ m4_foreach_w(tool, $1, [ m4_define([toolvar], [m4_normalize(m4_esyscmd(echo tool | tr "a-z-" "A-Z_"))])
diff --git a/scripts/download.sh b/scripts/download.sh index 1bfadc1..a4188d9 100755 --- a/scripts/download.sh +++ b/scripts/download.sh
@@ -1,10 +1,10 @@ -#!/bin/sh +#!/bin/bash # # download.sh -- # Download a tarball from the specified URL to the specified target # directory, untar it, and remove the tarball file. # -# Usage: download.sh <url> <target_dir> +# Usage: download.sh <url> <target_dir> [<strip>] # # where: # @@ -13,6 +13,8 @@ # tarball will be downloaded to the directory above this, # untarred while renaming to <target_dir>, and then the tarball # file will be deleted. +# <strip> is the number of directory levels to strip off the front of the +# tarball contents. Defaults to 1 if not specified. # # Neither curl or wget are guaranteed to be included in all *nix systems, @@ -39,7 +41,14 @@ echo "Downloading $1 to $2" $DL_CMD $2.tar.gz $1 +if [ $# -gt 2 ]; then + snum=$3 +else + snum=1 +fi + mkdir -p $2 -tar -xf $2.tar.gz --strip-components 1 -C $2 +echo "Untarring and removing $2.tar.gz" +tar -xf $2.tar.gz --strip-components $snum -C $2 rm $2.tar.gz exit 0
diff --git a/sky130/Makefile.in b/sky130/Makefile.in index 3e10159..5afc129 100644 --- a/sky130/Makefile.in +++ b/sky130/Makefile.in
@@ -78,25 +78,52 @@ # External (third-party) libraries and tool setups are the following (enabled # by default): # -# --enable-alpha-lib[=<path>] +# --enable-alpha-sky130[=<path>] # If enabled, install the sky130_ml_xx_hd font library from # Paul Schulz on github. If <path> is not specified, then the # font library will be cloned from the git repository and # installed. # -# --enable-xschem[=<path>] +# --enable-xschem-sky130[=<path>] # If enabled, install the Sky130 setup for the xschem schematic # editor. If <path> is specified, then the xschem setup is # expected to be found rooted at the given path. If not # specified, then the xschem setup will be cloned from the # repository and installed. # -# --enable-sram-lib[=<path>] +# External (third-party) libraries and tool setups are the following (disabled +# by default): +# +# --enable-sram-sky130[=<path>] # If enabled, install the sky130_sram_macros library from # efabless on github. If <path> is not specified, then # the SRAM library will be cloned from the repository and # installed. # +# --enable-osu-sky130[=<path>] +# If enabled, install the sky130_osu_sc library from +# foss-eda-tools on googlesource. If <path> is not +# specified, then the OSU standard cell library will be +# clones from the repository and installed. +# +# --enable-osu-t12-sky130[=<path>] +# If enabled, install the sky130_osu_sc_t12 libraries from +# foss-eda-tools on googlesource. If <path> is not +# specified, then the OSU standard cell library will be +# clones from the repository and installed. +# +# --enable-osu-t15-sky130[=<path>] +# If enabled, install the sky130_osu_sc_t15 libraries from +# foss-eda-tools on googlesource. If <path> is not +# specified, then the OSU standard cell library will be +# clones from the repository and installed. +# +# --enable-osu-t18-sky130[=<path>] +# If enabled, install the sky130_osu_sc_t18 libraries from +# foss-eda-tools on googlesource. If <path> is not +# specified, then the OSU standard cell library will be +# clones from the repository and installed. +# # The variables below are substituted from the configuration options: # # SKYWATER_PATH: points to vendor sources @@ -177,11 +204,19 @@ ALPHA_PATH = @SKY130_ML_XX_HD_PATH@ XSCHEM_PATH = @XSCHEM_SKY130_PATH@ SRAM_PATH = @SKY130_SRAM_MACROS_PATH@ +OSU_PATH = @SKY130_OSU_PATH@ +OSU_T12_PATH = @SKY130_OSU_T12_PATH@ +OSU_T15_PATH = @SKY130_OSU_T15_PATH@ +OSU_T18_PATH = @SKY130_OSU_T18_PATH@ PDK_URL = https://github.com/google/skywater-pdk ALPHA_URL = https://github.com/PaulSchulz/sky130_pschulz_xx_hd/archive/master.tar.gz XSCHEM_URL = https://github.com/StefanSchippers/xschem_sky130/archive/main.tar.gz SRAM_URL = https://github.com/efabless/sky130_sram_macros/archive/main.tar.gz +OSU_URL = https://foss-eda-tools.googlesource.com/skywater-pdk/libs/sky130_osu_sc/+archive/refs/heads/master.tar.gz +OSU_T12_URL = https://foss-eda-tools.googlesource.com/skywater-pdk/libs/sky130_osu_sc_t12/+archive/refs/heads/master.tar.gz +OSU_T15_URL = https://foss-eda-tools.googlesource.com/skywater-pdk/libs/sky130_osu_sc_t15/+archive/refs/heads/master.tar.gz +OSU_T18_URL = https://foss-eda-tools.googlesource.com/skywater-pdk/libs/sky130_osu_sc_t18/+archive/refs/heads/master.tar.gz # NOTE: Install destination is the git repository of the technology platform. # Once updated in git, the git project can be distributed to all hosts. @@ -345,7 +380,7 @@ all: all-a # Handle prerequisites (fetch and install the PDK and requested libraries) -prerequisites: pdk-repo alpha-repo xschem-repo sram-repo +prerequisites: pdk-repo alpha-repo xschem-repo sram-repo osu-repo osu-t12-repo osu-t15-repo osu-t18-repo pdk-repo: if test "x${SKYWATER_PATH}" != "x" ; then \ @@ -370,9 +405,9 @@ sram-repo: if test "x${SRAM_PATH}" != "x" ; then \ if test -d "${SRAM_PATH}" ; then \ - echo "Using existing installation of alphanumeric library from ${SRAM_PATH}" ; \ + echo "Using existing installation of SRAM macro library from ${SRAM_PATH}" ; \ else \ - echo "Downloading alphanumeric library from ${SRAM_URL}" ; \ + echo "Downloading SRAM macro library from ${SRAM_URL}" ; \ ../scripts/download.sh ${SRAM_URL} ${SRAM_PATH} ; \ fi ; \ fi @@ -387,6 +422,46 @@ fi ; \ fi +osu-repo: + if test "x${OSU_PATH}" != "x" ; then \ + if test -d "${OSU_PATH}" ; then \ + echo "Using existing installation of OSU standard cell library from ${OSU_PATH}" ; \ + else \ + echo "Downloading OSU standard cell library from ${OSU_URL}" ; \ + ../scripts/download.sh ${OSU_URL} ${OSU_PATH} 0 ; \ + fi ; \ + fi + +osu-t12-repo: + if test "x${OSU_T12_PATH}" != "x" ; then \ + if test -d "${OSU_T12_PATH}" ; then \ + echo "Using existing installation of OSU T12 standard cell library from ${OSU_T12_PATH}" ; \ + else \ + echo "Downloading OSU standard T12 cell library from ${OSU_T12_URL}" ; \ + ../scripts/download.sh ${OSU_T12_URL} ${OSU_T12_PATH} 0 ; \ + fi ; \ + fi + +osu-t15-repo: + if test "x${OSU_T15_PATH}" != "x" ; then \ + if test -d "${OSU_T15_PATH}" ; then \ + echo "Using existing installation of OSU T15 standard cell library from ${OSU_T15_PATH}" ; \ + else \ + echo "Downloading OSU standard T15 cell library from ${OSU_T15_URL}" ; \ + ../scripts/download.sh ${OSU_T15_URL} ${OSU_T15_PATH} 0 ; \ + fi ; \ + fi + +osu-t18-repo: + if test "x${OSU_T18_PATH}" != "x" ; then \ + if test -d "${OSU_T18_PATH}" ; then \ + echo "Using existing installation of OSU T18 standard cell library from ${OSU_T18_PATH}" ; \ + else \ + echo "Downloading OSU standard T18 cell library from ${OSU_T18_URL}" ; \ + ../scripts/download.sh ${OSU_T18_URL} ${OSU_T18_PATH} 0 ; \ + fi ; \ + fi + all-a: prerequisites echo "Starting sky130A PDK staging on "`date` > ${SKY130A}_make.log ${MAKE} general-a @@ -591,8 +666,9 @@ ${CPP} -quiet ${SKY130A_DEFS} openlane/sky130_osu_sc_t18/tracks.info \ ${OPENLANE_STAGING_A}/sky130_osu_sc_t18/tracks.info -vendor-a: - # Modify the LEF files to update hs and ms libraries +vendor-a: primitive-a io-a digital-a alpha-a sram-a osu-base-a osu-t12-a osu-t15-a osu-t18-a + +primitive-a: # Install device subcircuits from vendor files ${STAGE} -source ${SKYWATER_LIBS_PATH} -target ${STAGING_PATH}/${SKY130A} \ -ngspice sky130_fd_pr/latest/models/* \ @@ -622,10 +698,12 @@ cat ./custom/models/spinit >> \ ${STAGING_PATH}/${SKY130A}/libs.tech/ngspice/spinit +io-a: # Install custom additions to I/O pad library ${STAGE} -source ./custom -target ${STAGING_PATH}/${SKY130A} \ -verilog %l/verilog/*.v \ -cdl %l/cdl/*.cdl \ + -spice %l/spice/*.spice \ -gds %l/gds/*.gds options=custom/scripts/gds_import_setup.tcl \ -lef %l/lef/*.lef compile-only rename=sky130_ef_io \ -library general sky130_fd_io 2>&1 | tee -a ${SKY130A}_make.log @@ -660,6 +738,8 @@ # when writing HVI to GDS during hierarchical adjustments. ${ADDPROP} ${STAGING_PATH}/${SKY130A} sky130_fd_io sky130_fd_io__top_gpiov2 \ "MASKHINTS_HVI 1346 17198 5828 19224 13700 1890 15920 2360 24 17522 1778 20612" -mag + +digital-a: # Install all SkyWater digital standard cells. ${STAGE} -source ${SKYWATER_LIBS_PATH} -target ${STAGING_PATH}/${SKY130A} \ -techlef %l/latest/tech/*.tlef \ @@ -710,10 +790,18 @@ patch -p1 -f -d ${STAGING_PATH}/${SKY130A}/libs.ref/sky130_fd_sc_hdll/techlef \ < custom/patches/hdll_minenclosed.squeaky.patch \ 2>&1 | tee -a ${SKY130A}_make.log || true + +alpha-a: # Install alphanumeric library. ${STAGE} -source ${ALPHA_PATH}/.. -target ${STAGING_PATH}/${SKY130A} \ -mag %l/mag/*.mag filter=custom/scripts/text2m5.py \ -library general sky130_ml_xx_hd 2>&1 | tee -a ${SKY130A}_make.log + # Install text2mag.py script for alphanumeric library + mkdir -p ${STAGING_PATH}/${SKY130A}/libs.ref/sky130_ml_xx_hd/scripts + cp custom/scripts/text2mag.py \ + ${STAGING_PATH}/${SKY130A}/libs.ref/sky130_ml_xx_hd/scripts + +sram-a: # Install SRAM library. ${STAGE} -source ${SRAM_PATH}/.. -target ${STAGING_PATH}/${SKY130A} \ -lef %l/*/*.lef \ @@ -729,19 +817,104 @@ rename=sram_1rw1r_32_256_8_sky130.spice \ -verilog %l/*/*.v \ -library general sky130_sram_macros 2>&1 | tee -a ${SKY130A}_make.log - # Install text2mag.py script for alphanumeric library - mkdir -p ${STAGING_PATH}/${SKY130A}/libs.ref/sky130_ml_xx_hd/scripts - cp custom/scripts/text2mag.py \ - ${STAGING_PATH}/${SKY130A}/libs.ref/sky130_ml_xx_hd/scripts + +osu-base-a: # Install OSU digital standard cells. - ${STAGE} -source ${SKYWATER_LIBS_PATH} -target ${STAGING_PATH}/${SKY130A} \ - -techlef %l/latest/lef/sky130_osu_sc.tlef rename=sky130_osu_sc_t18.tlef \ + ${STAGE} -source ${OSU_PATH} -target ${STAGING_PATH}/${SKY130A} \ + -techlef %l/tech/sky130_osu_sc.lef rename=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 \ options=custom/scripts/gds_import_setup.tcl \ - -library digital sky130_osu_sc_t18 2>&1 | tee -a ${SKY130A}_make.log + -library digital sky130_osu_sc 2>&1 | tee -a ${SKY130A}_make.log + +osu-t12-a: + # Install OSU T12 hs digital standard cells. + ${STAGE} -source ${OSU_T12_PATH} -target ${STAGING_PATH}/${SKY130A} \ + -techlef sky130_osu_sc_12T.tlef rename=sky130_osc_sc_12t_hs.tlef \ + -spice 12T_hs/cdl/*.spice compile-only exclude=*.*.spice \ + -lef 12T_hs/lef/*.lef \ + -lib 12T_hs/lib/*.lib \ + -gds 12T_hs/gds/*.gds compile-only \ + options=custom/scripts/gds_import_setup.tcl \ + -library digital sky130_osu_sc_12t_hs 2>&1 | tee -a ${SKY130A}_make.log + # Install OSU T12 ms digital standard cells. + ${STAGE} -source ${OSU_T12_PATH} -target ${STAGING_PATH}/${SKY130A} \ + -techlef sky130_osu_sc_12T.tlef rename=sky130_osc_sc_12t_ms.tlef \ + -spice 12T_ms/cdl/*.spice compile-only exclude=*.*.spice \ + -lef 12T_ms/lef/*.lef \ + -lib 12T_ms/lib/*.lib \ + -gds 12T_ms/gds/*.gds compile-only \ + options=custom/scripts/gds_import_setup.tcl \ + -library digital sky130_osu_sc_12t_ms 2>&1 | tee -a ${SKY130A}_make.log + # Install OSU T12 ls digital standard cells. + ${STAGE} -source ${OSU_T12_PATH} -target ${STAGING_PATH}/${SKY130A} \ + -techlef sky130_osu_sc_12T.tlef rename=sky130_osc_sc_12t_ls.tlef \ + -spice 12T_ls/cdl/*.spice compile-only exclude=*.*.spice \ + -lef 12T_ls/lef/*.lef \ + -lib 12T_ls/lib/*.lib \ + -gds 12T_ls/gds/*.gds compile-only \ + options=custom/scripts/gds_import_setup.tcl \ + -library digital sky130_osu_sc_12t_ls 2>&1 | tee -a ${SKY130A}_make.log + +osu-t15-a: + # Install OSU T15 hs digital standard cells. + ${STAGE} -source ${OSU_T15_PATH} -target ${STAGING_PATH}/${SKY130A} \ + -techlef sky130_osu_sc_15T.tlef rename=sky130_osc_sc_15t_hs.tlef \ + -spice 15T_hs/cdl/*.spice compile-only exclude=*.*.spice \ + -lef 15T_hs/lef/*.lef \ + -lib 15T_hs/lib/*.lib \ + -gds 15T_hs/gds/*.gds compile-only \ + options=custom/scripts/gds_import_setup.tcl \ + -library digital sky130_osu_sc_15t_hs 2>&1 | tee -a ${SKY130A}_make.log + # Install OSU T15 ms digital standard cells. + ${STAGE} -source ${OSU_T15_PATH} -target ${STAGING_PATH}/${SKY130A} \ + -techlef sky130_osu_sc_15T.tlef rename=sky130_osc_sc_15t_ms.tlef \ + -spice 15T_ms/cdl/*.spice compile-only exclude=*.*.spice \ + -lef 15T_ms/lef/*.lef \ + -lib 15T_ms/lib/*.lib \ + -gds 15T_ms/gds/*.gds compile-only \ + options=custom/scripts/gds_import_setup.tcl \ + -library digital sky130_osu_sc_15t_ms 2>&1 | tee -a ${SKY130A}_make.log + # Install OSU T15 ls digital standard cells. + ${STAGE} -source ${OSU_T15_PATH} -target ${STAGING_PATH}/${SKY130A} \ + -techlef sky130_osu_sc_15T.tlef rename=sky130_osc_sc_15t_ls.tlef \ + -spice 15T_ls/cdl/*.spice compile-only exclude=*.*.spice \ + -lef 15T_ls/lef/*.lef \ + -lib 15T_ls/lib/*.lib \ + -gds 15T_ls/gds/*.gds compile-only \ + options=custom/scripts/gds_import_setup.tcl \ + -library digital sky130_osu_sc_15t_ls 2>&1 | tee -a ${SKY130A}_make.log + +osu-t18-a: + # Install OSU T18 hs digital standard cells. + ${STAGE} -source ${OSU_T18_PATH} -target ${STAGING_PATH}/${SKY130A} \ + -techlef sky130_osu_sc_18T.tlef rename=sky130_osc_sc_18t_hs.tlef \ + -spice 18T_hs/cdl/*.spice compile-only exclude=*.*.spice \ + -lef 18T_hs/lef/*.lef \ + -lib 18T_hs/lib/*.lib \ + -gds 18T_hs/gds/*.gds compile-only \ + options=custom/scripts/gds_import_setup.tcl \ + -library digital sky130_osu_sc_18t_hs 2>&1 | tee -a ${SKY130A}_make.log + # Install OSU T18 ms digital standard cells. + ${STAGE} -source ${OSU_T18_PATH} -target ${STAGING_PATH}/${SKY130A} \ + -techlef sky130_osu_sc_18T.tlef rename=sky130_osc_sc_18t_ms.tlef \ + -spice 18T_ms/cdl/*.spice compile-only exclude=*.*.spice \ + -lef 18T_ms/lef/*.lef \ + -lib 18T_ms/lib/*.lib \ + -gds 18T_ms/gds/*.gds compile-only \ + options=custom/scripts/gds_import_setup.tcl \ + -library digital sky130_osu_sc_18t_ms 2>&1 | tee -a ${SKY130A}_make.log + # Install OSU T18 ls digital standard cells. + ${STAGE} -source ${OSU_T18_PATH} -target ${STAGING_PATH}/${SKY130A} \ + -techlef sky130_osu_sc_18T.tlef rename=sky130_osc_sc_18t_ls.tlef \ + -spice 18T_ls/cdl/*.spice compile-only exclude=*.*.spice \ + -lef 18T_ls/lef/*.lef \ + -lib 18T_ls/lib/*.lib \ + -gds 18T_ls/gds/*.gds compile-only \ + options=custom/scripts/gds_import_setup.tcl \ + -library digital sky130_osu_sc_18t_ls 2>&1 | tee -a ${SKY130A}_make.log install: if test "x${DIST_PATH}" == "x" ; then \
diff --git a/sky130/custom/sky130_fd_io/gds/sky130_ef_io__analog.gds b/sky130/custom/sky130_fd_io/gds/sky130_ef_io__analog.gds new file mode 100644 index 0000000..1a0bfc8 --- /dev/null +++ b/sky130/custom/sky130_fd_io/gds/sky130_ef_io__analog.gds Binary files differ
diff --git a/sky130/custom/sky130_fd_io/lef/sky130_ef_io__analog_pad.lef b/sky130/custom/sky130_fd_io/lef/sky130_ef_io__analog_pad.lef new file mode 100644 index 0000000..a7dd292 --- /dev/null +++ b/sky130/custom/sky130_fd_io/lef/sky130_ef_io__analog_pad.lef
@@ -0,0 +1,345 @@ +VERSION 5.7 ; + NOWIREEXTENSIONATPIN ON ; + DIVIDERCHAR "/" ; + BUSBITCHARS "[]" ; +MACRO sky130_fd_ef__analog_pad + CLASS BLOCK ; + FOREIGN sky130_ef_io__analog_pad ; + ORIGIN 0.000 0.000 ; + SIZE 75.000 BY 200.000 ; + PIN P_CORE + PORT + LAYER met3 ; + RECT 24.720 0.000 49.720 82.350 ; + END + END P_CORE + PIN VSSA + PORT + LAYER met4 ; + RECT 0.000 36.735 1.270 40.185 ; + END + PORT + LAYER met4 ; + RECT 0.000 56.405 75.000 56.735 ; + END + PORT + LAYER met4 ; + RECT 0.000 47.735 75.000 48.065 ; + END + PORT + LAYER met4 ; + RECT 0.000 51.645 1.270 52.825 ; + END + PORT + LAYER met4 ; + RECT 73.730 36.735 75.000 40.185 ; + END + PORT + LAYER met4 ; + RECT 73.730 56.405 75.000 56.735 ; + END + PORT + LAYER met4 ; + RECT 73.730 47.735 75.000 48.065 ; + END + PORT + LAYER met4 ; + RECT 73.730 51.645 75.000 52.825 ; + END + PORT + LAYER met5 ; + RECT 73.730 36.840 75.000 40.085 ; + END + PORT + LAYER met5 ; + RECT 0.000 47.735 1.270 56.735 ; + END + PORT + LAYER met5 ; + RECT 0.000 36.840 1.270 40.085 ; + END + PORT + LAYER met5 ; + RECT 73.730 47.735 75.000 56.735 ; + END + END VSSA + PIN VSSD + PORT + LAYER met4 ; + RECT 0.000 41.585 1.270 46.235 ; + END + PORT + LAYER met4 ; + RECT 73.730 41.585 75.000 46.235 ; + END + PORT + LAYER met5 ; + RECT 0.000 41.685 1.270 46.135 ; + END + PORT + LAYER met5 ; + RECT 73.730 41.685 75.000 46.135 ; + END + END VSSD + PIN AMUXBUS_B + PORT + LAYER met4 ; + RECT 0.000 48.365 75.000 51.345 ; + END + PORT + LAYER met4 ; + RECT 73.730 48.365 75.000 51.345 ; + END + END AMUXBUS_B + PIN AMUXBUS_A + PORT + LAYER met4 ; + RECT 0.000 53.125 75.000 56.105 ; + END + PORT + LAYER met4 ; + RECT 73.730 53.125 75.000 56.105 ; + END + END AMUXBUS_A + PIN VDDIO_Q + PORT + LAYER met4 ; + RECT 0.000 64.085 1.270 68.535 ; + END + PORT + LAYER met4 ; + RECT 73.730 64.085 75.000 68.535 ; + END + PORT + LAYER met5 ; + RECT 73.730 64.185 75.000 68.435 ; + END + PORT + LAYER met5 ; + RECT 0.000 64.185 1.270 68.435 ; + END + END VDDIO_Q + PIN VDDIO + PORT + LAYER met4 ; + RECT 0.000 70.035 1.270 95.000 ; + END + PORT + LAYER met4 ; + RECT 0.000 19.785 1.270 24.435 ; + END + PORT + LAYER met4 ; + RECT 73.730 70.035 75.000 95.000 ; + END + PORT + LAYER met4 ; + RECT 73.730 19.785 75.000 24.435 ; + END + PORT + LAYER met5 ; + RECT 0.000 19.885 1.270 24.335 ; + END + PORT + LAYER met5 ; + RECT 0.000 70.035 1.270 94.985 ; + END + PORT + LAYER met5 ; + RECT 73.730 19.885 75.000 24.335 ; + END + PORT + LAYER met5 ; + RECT 73.730 70.035 75.000 94.985 ; + END + END VDDIO + PIN VSWITCH + PORT + LAYER met4 ; + RECT 0.000 31.885 1.270 35.335 ; + END + PORT + LAYER met4 ; + RECT 73.730 31.885 75.000 35.335 ; + END + PORT + LAYER met5 ; + RECT 73.730 31.985 75.000 35.235 ; + END + PORT + LAYER met5 ; + RECT 0.000 31.985 1.270 35.235 ; + END + END VSWITCH + PIN VSSIO + PORT + LAYER met4 ; + RECT 0.000 25.835 1.270 30.485 ; + END + PORT + LAYER met4 ; + RECT 73.730 25.835 75.000 30.485 ; + END + PORT + LAYER met4 ; + RECT 0.000 175.785 1.270 200.000 ; + END + PORT + LAYER met4 ; + RECT 0.630 191.600 0.640 191.610 ; + END + PORT + LAYER met4 ; + RECT 73.730 175.785 75.000 200.000 ; + END + PORT + LAYER met4 ; + RECT 74.360 191.600 74.370 191.610 ; + END + PORT + LAYER met5 ; + RECT 73.730 25.935 75.000 30.385 ; + END + PORT + LAYER met5 ; + RECT 73.730 175.785 75.000 200.000 ; + END + PORT + LAYER met5 ; + RECT 0.000 175.785 1.270 200.000 ; + END + PORT + LAYER met5 ; + RECT 0.000 25.935 1.270 30.385 ; + END + END VSSIO + PIN VDDA + PORT + LAYER met4 ; + RECT 0.000 14.935 0.965 18.385 ; + END + PORT + LAYER met4 ; + RECT 74.035 14.935 75.000 18.385 ; + END + PORT + LAYER met5 ; + RECT 0.000 15.035 0.965 18.285 ; + END + PORT + LAYER met5 ; + RECT 74.035 15.035 75.000 18.285 ; + END + END VDDA + PIN VCCD + PORT + LAYER met4 ; + RECT 0.000 8.885 1.270 13.535 ; + END + PORT + LAYER met4 ; + RECT 73.730 8.885 75.000 13.535 ; + END + PORT + LAYER met5 ; + RECT 0.000 8.985 1.270 13.435 ; + END + PORT + LAYER met5 ; + RECT 73.730 8.985 75.000 13.435 ; + END + END VCCD + PIN VCCHIB + PORT + LAYER met4 ; + RECT 0.000 2.035 1.270 7.485 ; + END + PORT + LAYER met4 ; + RECT 73.730 2.035 75.000 7.485 ; + END + PORT + LAYER met5 ; + RECT 0.000 2.135 1.270 7.385 ; + END + PORT + LAYER met5 ; + RECT 73.730 2.135 75.000 7.385 ; + END + END VCCHIB + PIN VSSIO_Q + PORT + LAYER met4 ; + RECT 0.000 58.235 1.270 62.685 ; + END + PORT + LAYER met4 ; + RECT 73.730 58.235 75.000 62.685 ; + END + PORT + LAYER met5 ; + RECT 73.730 58.335 75.000 62.585 ; + END + PORT + LAYER met5 ; + RECT 0.000 58.335 1.270 62.585 ; + END + END VSSIO_Q + PIN P_PAD + PORT + LAYER met5 ; + RECT 7.050 105.120 67.890 165.945 ; + END + END P_PAD + OBS + LAYER li1 ; + RECT 2.905 48.265 72.045 181.100 ; + LAYER met1 ; + RECT 4.250 46.255 70.440 48.855 ; + LAYER met2 ; + RECT 4.250 46.255 70.440 48.855 ; + LAYER met3 ; + RECT 0.455 82.750 74.250 173.315 ; + RECT 0.455 14.905 24.320 82.750 ; + RECT 50.120 14.905 74.250 82.750 ; + LAYER met4 ; + RECT 1.670 175.385 73.330 200.000 ; + RECT 0.965 95.400 74.035 175.385 ; + RECT 1.670 69.635 73.330 95.400 ; + RECT 0.965 68.935 74.035 69.635 ; + RECT 1.670 63.685 73.330 68.935 ; + RECT 0.965 63.085 74.035 63.685 ; + RECT 1.670 57.835 73.330 63.085 ; + RECT 0.965 57.135 74.035 57.835 ; + RECT 1.670 51.745 73.330 52.725 ; + RECT 0.965 46.635 74.035 47.335 ; + RECT 1.670 41.185 73.330 46.635 ; + RECT 0.965 40.585 74.035 41.185 ; + RECT 1.670 36.335 73.330 40.585 ; + RECT 0.965 35.735 74.035 36.335 ; + RECT 1.670 31.485 73.330 35.735 ; + RECT 0.965 30.885 74.035 31.485 ; + RECT 1.670 25.435 73.330 30.885 ; + RECT 0.965 24.835 74.035 25.435 ; + RECT 1.670 19.385 73.330 24.835 ; + RECT 0.965 18.785 74.035 19.385 ; + RECT 1.365 14.535 73.635 18.785 ; + RECT 0.965 13.935 74.035 14.535 ; + RECT 1.670 8.485 73.330 13.935 ; + RECT 0.965 7.885 74.035 8.485 ; + RECT 1.670 2.035 73.330 7.885 ; + LAYER met5 ; + RECT 2.870 174.185 72.130 200.000 ; + RECT 0.000 167.545 75.000 174.185 ; + RECT 0.000 103.520 5.450 167.545 ; + RECT 69.490 103.520 75.000 167.545 ; + RECT 0.000 96.585 75.000 103.520 ; + RECT 2.870 36.840 72.130 96.585 ; + RECT 0.000 36.835 75.000 36.840 ; + RECT 2.870 18.285 72.130 36.835 ; + RECT 2.565 15.035 72.435 18.285 ; + RECT 2.870 2.135 72.130 15.035 ; + END +END sky130_fd_io__analog_pad +END LIBRARY +
diff --git a/sky130/custom/sky130_fd_io/spice/sky130_ef_io__analog_pad.spice b/sky130/custom/sky130_fd_io/spice/sky130_ef_io__analog_pad.spice new file mode 100644 index 0000000..ee7b06b --- /dev/null +++ b/sky130/custom/sky130_fd_io/spice/sky130_ef_io__analog_pad.spice
@@ -0,0 +1,40 @@ +* NGSPICE file created from sky130_ef_io__analog_pad.ext - technology: sky130A + +.subckt sky130_fd_io__pad_esd VSUBS m4_960_20297# m5_1354_20528# +R0 m4_960_20297# m5_1354_20528# sky130_fd_pr__res_generic_m5 w=2.5284e+08u l=100000u +.ends + +.subckt sky130_fd_io__com_busses_esd VSUBS sky130_fd_io__com_bus_hookup_0/VCCD sky130_fd_io__com_bus_hookup_0/VSWITCH ++ sky130_fd_io__com_bus_hookup_0/AMUXBUS_A sky130_fd_io__com_bus_hookup_0/VSSIO sky130_fd_io__com_bus_hookup_0/AMUXBUS_B ++ sky130_fd_io__com_bus_hookup_0/VDDA sky130_fd_io__com_bus_hookup_0/VDDIO sky130_fd_io__com_bus_hookup_0/VSSIO_Q ++ sky130_fd_io__pad_esd_0/m5_1354_20528# sky130_fd_io__pad_esd_0/m4_960_20297# sky130_fd_io__com_bus_hookup_0/VDDIO_Q ++ sky130_fd_io__com_bus_hookup_0/VSSA sky130_fd_io__com_bus_hookup_0/VSSD sky130_fd_io__com_bus_hookup_0/VCCHIB +Xsky130_fd_io__pad_esd_0 VSUBS sky130_fd_io__pad_esd_0/m4_960_20297# sky130_fd_io__pad_esd_0/m5_1354_20528# ++ sky130_fd_io__pad_esd +.ends + +.subckt sky130_fd_io__simple_pad_and_busses VSUBS sky130_fd_io__com_busses_esd_0/sky130_fd_io__com_bus_hookup_0/VSWITCH ++ sky130_fd_io__com_busses_esd_0/sky130_fd_io__com_bus_hookup_0/VDDA sky130_fd_io__com_busses_esd_0/sky130_fd_io__com_bus_hookup_0/VSSIO ++ sky130_fd_io__com_busses_esd_0/sky130_fd_io__com_bus_hookup_0/VCCHIB sky130_fd_io__com_busses_esd_0/sky130_fd_io__com_bus_hookup_0/VDDIO ++ m3_99_16575# sky130_fd_io__com_busses_esd_0/sky130_fd_io__com_bus_hookup_0/VSSIO_Q ++ sky130_fd_io__com_busses_esd_0/sky130_fd_io__com_bus_hookup_0/AMUXBUS_A sky130_fd_io__com_busses_esd_0/sky130_fd_io__pad_esd_0/m5_1354_20528# ++ sky130_fd_io__com_busses_esd_0/sky130_fd_io__com_bus_hookup_0/AMUXBUS_B sky130_fd_io__com_busses_esd_0/sky130_fd_io__com_bus_hookup_0/VSSA ++ sky130_fd_io__com_busses_esd_0/sky130_fd_io__com_bus_hookup_0/VDDIO_Q sky130_fd_io__com_busses_esd_0/sky130_fd_io__com_bus_hookup_0/VSSD ++ w_818_9944# sky130_fd_io__com_busses_esd_0/sky130_fd_io__com_bus_hookup_0/VCCD +Xsky130_fd_io__com_busses_esd_0 VSUBS sky130_fd_io__com_busses_esd_0/sky130_fd_io__com_bus_hookup_0/VCCD ++ sky130_fd_io__com_busses_esd_0/sky130_fd_io__com_bus_hookup_0/VSWITCH sky130_fd_io__com_busses_esd_0/sky130_fd_io__com_bus_hookup_0/AMUXBUS_A ++ sky130_fd_io__com_busses_esd_0/sky130_fd_io__com_bus_hookup_0/VSSIO sky130_fd_io__com_busses_esd_0/sky130_fd_io__com_bus_hookup_0/AMUXBUS_B ++ sky130_fd_io__com_busses_esd_0/sky130_fd_io__com_bus_hookup_0/VDDA sky130_fd_io__com_busses_esd_0/sky130_fd_io__com_bus_hookup_0/VDDIO ++ sky130_fd_io__com_busses_esd_0/sky130_fd_io__com_bus_hookup_0/VSSIO_Q sky130_fd_io__com_busses_esd_0/sky130_fd_io__pad_esd_0/m5_1354_20528# ++ m3_99_16575# sky130_fd_io__com_busses_esd_0/sky130_fd_io__com_bus_hookup_0/VDDIO_Q ++ sky130_fd_io__com_busses_esd_0/sky130_fd_io__com_bus_hookup_0/VSSA sky130_fd_io__com_busses_esd_0/sky130_fd_io__com_bus_hookup_0/VSSD ++ sky130_fd_io__com_busses_esd_0/sky130_fd_io__com_bus_hookup_0/VCCHIB sky130_fd_io__com_busses_esd +.ends + +.subckt sky130_ef_io__analog_pad P_CORE VSSA VSSD AMUXBUS_B AMUXBUS_A VDDIO_Q VDDIO ++ VSWITCH VSSIO VDDA VCCD VCCHIB VSSIO_Q P_PAD +Xsky130_fd_io__simple_pad_and_busses_0 sky130_fd_io__simple_pad_and_busses_0/VSUBS ++ VSWITCH VDDA VSSIO VCCHIB VDDIO P_CORE VSSIO_Q AMUXBUS_A P_PAD AMUXBUS_B VSSA VDDIO_Q ++ VSSD sky130_fd_io__simple_pad_and_busses_0/VSUBS VCCD sky130_fd_io__simple_pad_and_busses +.ends +
diff --git a/sky130/custom/sky130_fd_io/verilog/sky130_ef_io__analog_pad.v b/sky130/custom/sky130_fd_io/verilog/sky130_ef_io__analog_pad.v new file mode 100644 index 0000000..f172cd5 --- /dev/null +++ b/sky130/custom/sky130_fd_io/verilog/sky130_ef_io__analog_pad.v
@@ -0,0 +1,210 @@ +/** + * Copyright 2020 The SkyWater PDK Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +`ifndef SKY130_EF_IO__ANALOG_PAD_V +`define SKY130_EF_IO__ANALOG_PAD_V + +/** + * analog_pad: Analog PAD. + * + * Verilog top module. + * + * WARNING: This file is autogenerated, do not modify directly! + */ + +`timescale 1ns / 1ps +`default_nettype none + +`ifdef USE_POWER_PINS + +`ifdef FUNCTIONAL + +/* + * Copyright 2020 The SkyWater PDK Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 +*/ + +module sky130_ef_io__analog_pad (AMUXBUS_A, AMUXBUS_B, P_PAD, P_CORE + ,VCCD, VCCHIB, VDDA, VDDIO, VDDIO_Q, VSSA, VSSD, VSSIO, VSSIO_Q, VSWITCH + ); +inout AMUXBUS_A; +inout AMUXBUS_B; +inout P_PAD; +inout P_CORE; +inout VCCD; +inout VCCHIB; +inout VDDA; +inout VDDIO; +inout VDDIO_Q; +inout VSSA; +inout VSSD; +inout VSSIO; +inout VSSIO_Q; +inout VSWITCH; +wire pwr_good = VDDIO===1 && VSSIO===0; +wire pad_sw = pwr_good===1 ? 1'b1 : 1'bx; +tranif1 x_pad (P_PAD, P_CORE, pad_sw); +endmodule + +`else // FUNCTIONAL + +/* + * Copyright 2020 The SkyWater PDK Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 +*/ + +module sky130_ef_io__analog_pad (AMUXBUS_A, AMUXBUS_B, P_PAD, P_CORE + ,VCCD, VCCHIB, VDDA, VDDIO, VDDIO_Q, VSSA, VSSD, VSSIO, VSSIO_Q, VSWITCH + ); +inout AMUXBUS_A; +inout AMUXBUS_B; +inout P_PAD; +inout P_CORE; +inout VCCD; +inout VCCHIB; +inout VDDA; +inout VDDIO; +inout VDDIO_Q; +inout VSSA; +inout VSSD; +inout VSSIO; +inout VSSIO_Q; +inout VSWITCH; +wire pwr_good = VDDIO===1 && VSSIO===0; +wire pad_sw = pwr_good===1 ? 1'b1 : 1'bx; +tranif1 x_pad (P_PAD, P_CORE, pad_sw); +endmodule + +`endif // FUNCTIONAL + +`else // USE_POWER_PINS + +`ifdef FUNCTIONAL + +/* + * Copyright 2020 The SkyWater PDK Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 +*/ + +module sky130_ef_io__analog_pad (AMUXBUS_A, AMUXBUS_B, P_PAD, P_CORE + ); +inout AMUXBUS_A; +inout AMUXBUS_B; +inout P_PAD; +inout P_CORE; +supply1 VCCD; +supply1 VCCHIB; +supply1 VDDA; +supply1 VDDIO; +supply1 VDDIO_Q; +supply0 VSSA; +supply0 VSSD; +supply0 VSSIO; +supply0 VSSIO_Q; +supply1 VSWITCH; +wire pwr_good = 1; +wire pad_sw = pwr_good===1 ? 1'b1 : 1'bx; +tranif1 x_pad (P_PAD, P_CORE, pad_sw); +endmodule + +`else // FUNCTIONAL + +/* + * Copyright 2020 The SkyWater PDK Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 +*/ + +module sky130_ef_io__analog_pad (AMUXBUS_A, AMUXBUS_B, P_PAD, P_CORE + ); +inout AMUXBUS_A; +inout AMUXBUS_B; +inout P_PAD; +inout P_CORE; +supply1 VCCD; +supply1 VCCHIB; +supply1 VDDA; +supply1 VDDIO; +supply1 VDDIO_Q; +supply0 VSSA; +supply0 VSSD; +supply0 VSSIO; +supply0 VSSIO_Q; +supply1 VSWITCH; +wire pwr_good = 1; +wire pad_sw = pwr_good===1 ? 1'b1 : 1'bx; +tranif1 x_pad (P_PAD, P_CORE, pad_sw); +endmodule + +`endif // FUNCTIONAL + +`endif // USE_POWER_PINS + +`default_nettype wire +`endif // SKY130_EF_IO__ANALOG_PAD_V