From 299f0a21ee03a319d1759ddd1ffeb9c5838f47d0 Mon Sep 17 00:00:00 2001 From: Pierre Guillod Date: Sat, 21 Dec 2024 15:33:04 +0100 Subject: [PATCH] fullcustom update, semicustom tweaks --- fullcustom/environment.yml | 401 ++++++++++++++++++++------------- fullcustom/environment.yml.tpl | 17 ++ fullcustom/fullcustom.ipynb | 20 +- semicustom/semicustom.ipynb | 26 +-- 4 files changed, 283 insertions(+), 181 deletions(-) create mode 100644 fullcustom/environment.yml.tpl diff --git a/fullcustom/environment.yml b/fullcustom/environment.yml index 19fa0ee..626f53a 100644 --- a/fullcustom/environment.yml +++ b/fullcustom/environment.yml @@ -6,172 +6,259 @@ channels: dependencies: - _libgcc_mutex=0.1=conda_forge - _openmp_mutex=4.5=2_gnu - - anyio=3.6.2=pyhd8ed1ab_0 - - argon2-cffi=21.3.0=pyhd8ed1ab_0 - - argon2-cffi-bindings=21.2.0=py37h540881e_2 - - attrs=22.2.0=pyh71513ae_0 - - backcall=0.2.0=pyh9f0ad1d_0 - - backports=1.0=pyhd8ed1ab_3 - - backports.functools_lru_cache=1.6.4=pyhd8ed1ab_0 - - beautifulsoup4=4.12.2=pyha770c72_0 - - bleach=6.0.0=pyhd8ed1ab_0 - - brotli=1.0.9=h166bdaf_8 - - brotli-bin=1.0.9=h166bdaf_8 - - bzip2=1.0.8=h7f98852_4 - - ca-certificates=2022.12.7=ha878542_0 - - cairo=1.16.0=h35add3b_1015 - - certifi=2022.12.7=pyhd8ed1ab_0 - - cffi=1.15.1=py37h43b0acd_1 - - cycler=0.11.0=pyhd8ed1ab_0 - - debugpy=1.5.1=py37h295c915_0 - - decorator=5.1.1=pyhd8ed1ab_0 + - alsa-lib=1.2.13=hb9d3cd8_0 + - anyio=4.7.0=pyhd8ed1ab_0 + - argon2-cffi=23.1.0=pyhd8ed1ab_1 + - argon2-cffi-bindings=21.2.0=py310ha75aee5_5 + - arrow=1.3.0=pyhd8ed1ab_1 + - asttokens=3.0.0=pyhd8ed1ab_1 + - async-lru=2.0.4=pyhd8ed1ab_1 + - attrs=24.3.0=pyh71513ae_0 + - babel=2.16.0=pyhd8ed1ab_1 + - beautifulsoup4=4.12.3=pyha770c72_1 + - bleach=6.2.0=pyhd8ed1ab_1 + - brotli=1.1.0=hb9d3cd8_2 + - brotli-bin=1.1.0=hb9d3cd8_2 + - brotli-python=1.1.0=py310hf71b8c6_2 + - bzip2=1.0.8=h4bc722e_7 + - ca-certificates=2024.12.14=hbcca054_0 + - cached-property=1.5.2=hd8ed1ab_1 + - cached_property=1.5.2=pyha770c72_1 + - cairo=1.18.2=h3394656_1 + - certifi=2024.12.14=pyhd8ed1ab_0 + - cffi=1.17.1=py310h8deb56e_0 + - charset-normalizer=3.4.0=pyhd8ed1ab_1 + - comm=0.2.2=pyhd8ed1ab_1 + - contourpy=1.3.1=py310h3788b33_0 + - cycler=0.12.1=pyhd8ed1ab_1 + - cyrus-sasl=2.1.27=h54b06d7_7 + - dbus=1.13.6=h5008d03_3 + - debugpy=1.8.11=py310hf71b8c6_0 + - decorator=5.1.1=pyhd8ed1ab_1 - defusedxml=0.7.1=pyhd8ed1ab_0 - - entrypoints=0.4=pyhd8ed1ab_0 - - expat=2.5.0=hcb278e6_1 - - flit-core=3.8.0=pyhd8ed1ab_0 + - double-conversion=3.3.0=h59595ed_0 + - entrypoints=0.4=pyhd8ed1ab_1 + - exceptiongroup=1.2.2=pyhd8ed1ab_1 + - executing=2.1.0=pyhd8ed1ab_1 + - expat=2.6.4=h5888daf_0 - font-ttf-dejavu-sans-mono=2.37=hab24e00_0 - font-ttf-inconsolata=3.000=h77eed37_0 - font-ttf-source-code-pro=2.038=h77eed37_0 - - font-ttf-ubuntu=0.83=hab24e00_0 - - fontconfig=2.14.2=h14ed4e7_0 + - font-ttf-ubuntu=0.83=h77eed37_3 + - fontconfig=2.15.0=h7e30c49_1 - fonts-conda-ecosystem=1=0 - fonts-conda-forge=1=0 - - fonttools=4.25.0=pyhd3eb1b0_0 - - freetype=2.12.1=hca18f0e_1 - - gettext=0.21.1=h27087fc_0 - - icu=72.1=hcb278e6_0 - - idna=3.4=pyhd8ed1ab_0 - - importlib-metadata=4.11.4=py37h89c1867_0 - - importlib_resources=5.12.0=pyhd8ed1ab_0 - - ipykernel=6.15.0=pyh210e3f2_0 - - ipython=7.33.0=py37h89c1867_0 - - ipython_genutils=0.2.0=py_1 - - jedi=0.18.2=pyhd8ed1ab_0 - - jinja2=3.1.2=pyhd8ed1ab_1 - - jpeg=9e=h0b41bf4_3 - - jsonschema=4.17.3=pyhd8ed1ab_0 - - jupyter_client=7.0.6=pyhd8ed1ab_0 - - jupyter_core=4.11.2=py37h06a4308_0 - - jupyter_server=1.23.4=py37h06a4308_0 - - jupyterlab_pygments=0.2.2=pyhd8ed1ab_0 - - kiwisolver=1.4.4=py37h7cecad7_0 - - ld_impl_linux-64=2.40=h41732ed_0 - - libblas=3.9.0=16_linux64_openblas - - libbrotlicommon=1.0.9=h166bdaf_8 - - libbrotlidec=1.0.9=h166bdaf_8 - - libbrotlienc=1.0.9=h166bdaf_8 - - libcblas=3.9.0=16_linux64_openblas - - libexpat=2.5.0=hcb278e6_1 + - fonttools=4.55.3=py310h89163eb_0 + - fqdn=1.5.1=pyhd8ed1ab_1 + - freetype=2.12.1=h267a509_2 + - gdstk=0.9.58=py310h6b9049c_0 + - graphite2=1.3.13=h59595ed_1003 + - h11=0.14.0=pyhd8ed1ab_1 + - h2=4.1.0=pyhd8ed1ab_1 + - harfbuzz=9.0.0=hda332d3_1 + - hpack=4.0.0=pyhd8ed1ab_1 + - httpcore=1.0.7=pyh29332c3_1 + - httpx=0.28.1=pyhd8ed1ab_0 + - hyperframe=6.0.1=pyhd8ed1ab_1 + - icu=75.1=he02047a_0 + - idna=3.10=pyhd8ed1ab_1 + - importlib-metadata=8.5.0=pyha770c72_1 + - importlib_resources=6.4.5=pyhd8ed1ab_1 + - ipykernel=6.29.5=pyh3099207_0 + - ipython=8.30.0=pyh707e725_0 + - ipywidgets=8.1.5=pyhd8ed1ab_1 + - isoduration=20.11.0=pyhd8ed1ab_1 + - jedi=0.19.2=pyhd8ed1ab_1 + - jinja2=3.1.4=pyhd8ed1ab_1 + - json5=0.10.0=pyhd8ed1ab_1 + - jsonpointer=3.0.0=py310hff52083_1 + - jsonschema=4.23.0=pyhd8ed1ab_1 + - jsonschema-specifications=2024.10.1=pyhd8ed1ab_1 + - jsonschema-with-format-nongpl=4.23.0=hd8ed1ab_1 + - jupyter=1.1.1=pyhd8ed1ab_1 + - jupyter-lsp=2.2.5=pyhd8ed1ab_1 + - jupyter_client=8.6.3=pyhd8ed1ab_1 + - jupyter_console=6.6.3=pyhd8ed1ab_1 + - jupyter_core=5.7.2=pyh31011fe_1 + - jupyter_events=0.11.0=pyhd8ed1ab_0 + - jupyter_server=2.15.0=pyhd8ed1ab_0 + - jupyter_server_terminals=0.5.3=pyhd8ed1ab_1 + - jupyterlab=4.3.4=pyhd8ed1ab_0 + - jupyterlab_pygments=0.3.0=pyhd8ed1ab_2 + - jupyterlab_server=2.27.3=pyhd8ed1ab_1 + - jupyterlab_widgets=3.0.13=pyhd8ed1ab_1 + - keyutils=1.6.1=h166bdaf_0 + - kiwisolver=1.4.7=py310h3788b33_0 + - krb5=1.21.3=h659f571_0 + - lcms2=2.16=hb7c19ff_0 + - ld_impl_linux-64=2.43=h712a8e2_2 + - lerc=4.0.0=h27087fc_0 + - libblas=3.9.0=26_linux64_openblas + - libbrotlicommon=1.1.0=hb9d3cd8_2 + - libbrotlidec=1.1.0=hb9d3cd8_2 + - libbrotlienc=1.1.0=hb9d3cd8_2 + - libcblas=3.9.0=26_linux64_openblas + - libclang-cpp19.1=19.1.6=default_hb5137d0_0 + - libclang13=19.1.6=default_h9c6a7e4_0 + - libcups=2.3.3=h4637d8d_4 + - libdeflate=1.23=h4ddbbb0_0 + - libdrm=2.4.124=hb9d3cd8_0 + - libedit=3.1.20191231=he28a2e2_2 + - libegl=1.7.0=ha4b6fd6_2 + - libexpat=2.6.4=h5888daf_0 - libffi=3.4.2=h7f98852_5 - - libgcc-ng=12.2.0=h65d4601_19 - - libgfortran-ng=12.2.0=h69a702a_19 - - libgfortran5=12.2.0=h337968e_19 - - libglib=2.74.1=h606061b_1 - - libgomp=12.2.0=h65d4601_19 - - libiconv=1.17=h166bdaf_0 - - liblapack=3.9.0=16_linux64_openblas - - libnsl=2.0.0=h7f98852_0 - - libopenblas=0.3.21=pthreads_h78a6416_3 - - libpng=1.6.39=h753d276_0 - - libsodium=1.0.18=h36c2ea0_1 - - libsqlite=3.40.0=h753d276_0 - - libstdcxx-ng=12.2.0=h46fd767_19 - - libtiff=4.0.10=hc3755c2_1005 + - libgcc=14.2.0=h77fa898_1 + - libgcc-ng=14.2.0=h69a702a_1 + - libgfortran=14.2.0=h69a702a_1 + - libgfortran5=14.2.0=hd5240d6_1 + - libgl=1.7.0=ha4b6fd6_2 + - libglib=2.82.2=h2ff4ddf_0 + - libglvnd=1.7.0=ha4b6fd6_2 + - libglx=1.7.0=ha4b6fd6_2 + - libgomp=14.2.0=h77fa898_1 + - libiconv=1.17=hd590300_2 + - libjpeg-turbo=3.0.0=hd590300_1 + - liblapack=3.9.0=26_linux64_openblas + - libllvm19=19.1.6=ha7bfdaf_0 + - liblzma=5.6.3=hb9d3cd8_1 + - libnsl=2.0.1=hd590300_0 + - libntlm=1.8=hb9d3cd8_0 + - libopenblas=0.3.28=pthreads_h94d23a6_1 + - libopengl=1.7.0=ha4b6fd6_2 + - libpciaccess=0.18=hd590300_0 + - libpng=1.6.44=hadc24fc_0 + - libpq=17.2=h3b95a9b_1 + - libsodium=1.0.20=h4ab18f5_0 + - libsqlite=3.47.2=hee588c1_0 + - libstdcxx=14.2.0=hc0a3c3a_1 + - libstdcxx-ng=14.2.0=h4852527_1 + - libtiff=4.7.0=hd9ff511_3 - libuuid=2.38.1=h0b41bf4_0 - - libxcb=1.13=h7f98852_1004 - - libzlib=1.2.13=h166bdaf_4 - - lz4-c=1.9.3=h9c3ff4c_1 - - magic=8.3.389_0_g1d8fcca=20230412_103222 - - markupsafe=2.1.1=py37h7f8727e_0 - - matplotlib-base=3.5.3=py37hf395dca_2 - - matplotlib-inline=0.1.6=pyhd8ed1ab_0 - - mistune=2.0.5=pyhd8ed1ab_0 + - libwebp-base=1.4.0=hd590300_0 + - libxcb=1.17.0=h8a09558_0 + - libxcrypt=4.4.36=hd590300_1 + - libxkbcommon=1.7.0=h2c5496b_1 + - libxml2=2.13.5=h8d12d68_1 + - libxslt=1.1.39=h76b75d6_0 + - libzlib=1.3.1=hb9d3cd8_2 + - magic=8.3.464_0_gcb73ebf=20240223_100318 + - markupsafe=3.0.2=py310h89163eb_1 + - matplotlib=3.10.0=py310hff52083_0 + - matplotlib-base=3.10.0=py310h68603db_0 + - matplotlib-inline=0.1.7=pyhd8ed1ab_1 + - mistune=3.0.2=pyhd8ed1ab_1 - munkres=1.1.4=pyh9f0ad1d_0 - - nbclassic=0.5.5=pyhb4ecaf3_1 - - nbclient=0.5.13=pyhd8ed1ab_0 - - nbconvert=7.3.1=pyhd8ed1ab_0 - - nbconvert-core=7.3.1=pyhd8ed1ab_0 - - nbconvert-pandoc=7.3.1=pyhd8ed1ab_0 - - nbformat=5.8.0=pyhd8ed1ab_0 - - ncurses=6.3=h27087fc_1 - - nest-asyncio=1.5.6=pyhd8ed1ab_0 - - netgen=1.5.251_0_gd111fa0=20230412_103222 - - ngspice-lib=38=h7017330_0 - - notebook=6.5.4=pyha770c72_0 - - notebook-shim=0.2.2=pyhd8ed1ab_0 - - numpy=1.21.6=py37h976b520_0 - - olefile=0.46=pyh9f0ad1d_1 - - open_pdks.sky130a=1.0.404_0_gbb4b48f=20230408_010602 - - openssl=3.1.0=h0b41bf4_0 - - packaging=23.1=pyhd8ed1ab_0 - - pandoc=2.19.2=h32600fe_2 + - mysql-common=9.0.1=h266115a_3 + - mysql-libs=9.0.1=he0572af_3 + - nbclient=0.10.2=pyhd8ed1ab_0 + - nbconvert-core=7.16.4=pyhff2d567_2 + - nbformat=5.10.4=pyhd8ed1ab_1 + - ncurses=6.5=he02047a_1 + - nest-asyncio=1.6.0=pyhd8ed1ab_1 + - netgen=1.5.272_0_g178af5f=20240223_100318 + - ngspice-lib=41=hb224a76_0 + - notebook=7.3.1=pyhd8ed1ab_0 + - notebook-shim=0.2.4=pyhd8ed1ab_1 + - numpy=2.2.0=py310h5851e9f_0 + - open_pdks.sky130a=1.0.471_0_g97d0844=20240223_100318 + - openjpeg=2.5.3=h5fbd93e_0 + - openldap=2.6.9=he970967_0 + - openssl=3.4.0=hb9d3cd8_0 + - overrides=7.7.0=pyhd8ed1ab_1 + - packaging=24.2=pyhd8ed1ab_2 - pandocfilters=1.5.0=pyhd8ed1ab_0 - - parso=0.8.3=pyhd8ed1ab_0 - - pcre2=10.40=hc3806b6_0 - - pexpect=4.8.0=pyh1a96a4e_2 - - pickleshare=0.7.5=py_1003 - - pillow=6.2.1=py37h6b7be26_0 - - pip=23.0.1=pyhd8ed1ab_0 - - pixman=0.40.0=h36c2ea0_0 - - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_0 - - ply=3.11=py_1 - - prometheus_client=0.16.0=pyhd8ed1ab_0 - - prompt-toolkit=3.0.38=pyha770c72_0 - - psutil=5.9.0=py37h5eee18b_0 - - pthread-stubs=0.4=h36c2ea0_1001 - - ptyprocess=0.7.0=pyhd3deb0d_0 - - pycparser=2.21=pyhd8ed1ab_0 - - pygments=2.15.0=pyhd8ed1ab_0 - - pyparsing=3.0.9=pyhd8ed1ab_0 - - pyrsistent=0.18.0=py37heee7806_0 - - pyspice=1.5=py37h89c1867_1 - - python=3.7.12=hf930737_100_cpython - - python-dateutil=2.8.2=pyhd8ed1ab_0 - - python-fastjsonschema=2.16.3=pyhd8ed1ab_0 - - python_abi=3.7=3_cp37m - - pyyaml=6.0=py37h540881e_4 - - pyzmq=19.0.2=py37hac76be4_2 + - parso=0.8.4=pyhd8ed1ab_1 + - pcre2=10.44=hba22ea6_2 + - pexpect=4.9.0=pyhd8ed1ab_1 + - pickleshare=0.7.5=pyhd8ed1ab_1004 + - pillow=11.0.0=py310hfeaa1f3_0 + - pip=24.3.1=pyh8b19718_2 + - pixman=0.44.2=h29eaf8c_0 + - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_2 + - platformdirs=4.3.6=pyhd8ed1ab_1 + - ply=3.11=pyhd8ed1ab_3 + - prometheus_client=0.21.1=pyhd8ed1ab_0 + - prompt-toolkit=3.0.48=pyha770c72_1 + - prompt_toolkit=3.0.48=hd8ed1ab_1 + - psutil=6.1.0=py310ha75aee5_0 + - pthread-stubs=0.4=hb9d3cd8_1002 + - ptyprocess=0.7.0=pyhd8ed1ab_1 + - pure_eval=0.2.3=pyhd8ed1ab_1 + - pycparser=2.22=pyh29332c3_1 + - pygments=2.18.0=pyhd8ed1ab_1 + - pyparsing=3.2.0=pyhd8ed1ab_2 + - pyside6=6.8.1=py310hfd10a26_0 + - pysocks=1.7.1=pyha55dd90_7 + - pyspice=1.5=py310hff52083_1 + - python=3.10.16=he725a3c_1_cpython + - python-dateutil=2.9.0.post0=pyhff2d567_1 + - python-fastjsonschema=2.21.1=pyhd8ed1ab_0 + - python-json-logger=2.0.7=pyhd8ed1ab_0 + - python_abi=3.10=5_cp310 + - pytz=2024.2=pyhd8ed1ab_1 + - pyyaml=6.0.2=py310ha75aee5_1 + - pyzmq=26.2.0=py310h71f11fc_3 + - qhull=2020.2=h434a139_5 + - qt6-main=6.8.1=h9d28a51_0 - readline=8.2=h8228510_1 - - scipy=1.7.3=py37hf2a6cf1_0 - - send2trash=1.8.0=pyhd8ed1ab_0 - - setuptools=67.6.1=pyhd8ed1ab_0 - - six=1.16.0=pyh6c4a22f_0 - - sniffio=1.3.0=pyhd8ed1ab_0 - - soupsieve=2.3.2.post1=pyhd8ed1ab_0 - - sqlite=3.40.0=h4ff8645_0 - - terminado=0.17.1=pyh41d4057_0 - - tinycss2=1.2.1=pyhd8ed1ab_0 - - tk=8.6.12=h27826a3_0 - - tornado=6.2=py37h540881e_0 - - traitlets=5.9.0=pyhd8ed1ab_0 - - typing-extensions=4.5.0=hd8ed1ab_0 - - typing_extensions=4.5.0=pyha770c72_0 - - wcwidth=0.2.6=pyhd8ed1ab_0 - - webencodings=0.5.1=py_1 - - websocket-client=1.5.1=pyhd8ed1ab_0 - - wheel=0.40.0=pyhd8ed1ab_0 - - xorg-kbproto=1.0.7=h7f98852_1002 - - xorg-libice=1.0.10=h7f98852_0 - - xorg-libsm=1.2.3=hd9c2040_1000 - - xorg-libx11=1.8.4=h0b41bf4_0 - - xorg-libxau=1.0.9=h7f98852_0 - - xorg-libxdmcp=1.1.3=h7f98852_0 - - xorg-libxext=1.3.4=h0b41bf4_2 - - xorg-libxrender=0.9.10=h7f98852_1003 - - xorg-renderproto=0.11.1=h7f98852_1002 - - xorg-xextproto=7.3.0=h0b41bf4_1003 - - xorg-xproto=7.0.31=h7f98852_1007 - - xschem=3.1.0_525_gc71c15e9=20230412_103222 - - xz=5.2.6=h166bdaf_0 + - referencing=0.35.1=pyhd8ed1ab_1 + - requests=2.32.3=pyhd8ed1ab_1 + - rfc3339-validator=0.1.4=pyhd8ed1ab_1 + - rfc3986-validator=0.1.1=pyh9f0ad1d_0 + - rpds-py=0.22.3=py310h505e2c1_0 + - scipy=1.14.1=py310hfcf56fc_2 + - send2trash=1.8.3=pyh0d859eb_1 + - setuptools=75.6.0=pyhff2d567_1 + - six=1.17.0=pyhd8ed1ab_0 + - sniffio=1.3.1=pyhd8ed1ab_1 + - soupsieve=2.5=pyhd8ed1ab_1 + - stack_data=0.6.3=pyhd8ed1ab_1 + - terminado=0.18.1=pyh0d859eb_0 + - tinycss2=1.4.0=pyhd8ed1ab_0 + - tk=8.6.13=noxft_h4845f30_101 + - tomli=2.2.1=pyhd8ed1ab_1 + - tornado=6.4.2=py310ha75aee5_0 + - traitlets=5.14.3=pyhd8ed1ab_1 + - types-python-dateutil=2.9.0.20241206=pyhd8ed1ab_0 + - typing-extensions=4.12.2=hd8ed1ab_1 + - typing_extensions=4.12.2=pyha770c72_1 + - typing_utils=0.1.0=pyhd8ed1ab_1 + - tzdata=2024b=hc8b5060_0 + - unicodedata2=15.1.0=py310ha75aee5_1 + - uri-template=1.3.0=pyhd8ed1ab_1 + - urllib3=2.2.3=pyhd8ed1ab_1 + - wayland=1.23.1=h3e06ad9_0 + - wcwidth=0.2.13=pyhd8ed1ab_1 + - webcolors=24.11.1=pyhd8ed1ab_0 + - webencodings=0.5.1=pyhd8ed1ab_3 + - websocket-client=1.8.0=pyhd8ed1ab_1 + - wheel=0.45.1=pyhd8ed1ab_1 + - widgetsnbextension=4.0.13=pyhd8ed1ab_1 + - xcb-util=0.4.1=hb711507_2 + - xcb-util-cursor=0.1.5=hb9d3cd8_0 + - xcb-util-image=0.4.0=hb711507_2 + - xcb-util-keysyms=0.4.1=hb711507_0 + - xcb-util-renderutil=0.3.10=hb711507_0 + - xcb-util-wm=0.4.2=hb711507_0 + - xkeyboard-config=2.43=hb9d3cd8_0 + - xorg-libice=1.1.2=hb9d3cd8_0 + - xorg-libsm=1.2.5=he73a12e_0 + - xorg-libx11=1.8.10=h4f16b4b_1 + - xorg-libxau=1.0.12=hb9d3cd8_0 + - xorg-libxcomposite=0.4.6=hb9d3cd8_2 + - xorg-libxcursor=1.2.3=hb9d3cd8_0 + - xorg-libxdamage=1.1.6=hb9d3cd8_0 + - xorg-libxdmcp=1.1.5=hb9d3cd8_0 + - xorg-libxext=1.3.6=hb9d3cd8_0 + - xorg-libxfixes=6.0.1=hb9d3cd8_0 + - xorg-libxi=1.8.2=hb9d3cd8_0 + - xorg-libxrandr=1.5.4=hb9d3cd8_0 + - xorg-libxrender=0.9.12=hb9d3cd8_0 + - xorg-libxtst=1.2.5=hb9d3cd8_3 + - xorg-libxxf86vm=1.1.6=hb9d3cd8_0 + - xschem=3.4.4_558_g6405ac4c=20240223_100318 - yaml=0.2.5=h7f98852_2 - - zeromq=4.3.4=h9c3ff4c_1 - - zipp=3.15.0=pyhd8ed1ab_0 - - zlib=1.2.13=h166bdaf_4 - - zstd=1.4.9=ha95c52a_0 - - pip: - - dataclasses-json==0.5.6 - - gdstk==0.9.37 - - marshmallow==3.19.0 - - marshmallow-enum==1.5.1 - - mypy-extensions==1.0.0 - - typing-inspect==0.8.0 + - zeromq=4.3.5=h3b0a872_7 + - zipp=3.21.0=pyhd8ed1ab_1 + - zstandard=0.23.0=py310ha39cb0e_1 + - zstd=1.5.6=ha6fb4c9_0 diff --git a/fullcustom/environment.yml.tpl b/fullcustom/environment.yml.tpl new file mode 100644 index 0000000..ec82e73 --- /dev/null +++ b/fullcustom/environment.yml.tpl @@ -0,0 +1,17 @@ +name: fullcustom +channels: + - litex-hub + - conda-forge + - defaults +dependencies: + - jupyter + - magic + - matplotlib + - netgen + - numpy + - open_pdks.sky130a + - pyspice + - python + - scipy + - xschem + - gdstk diff --git a/fullcustom/fullcustom.ipynb b/fullcustom/fullcustom.ipynb index 15e105c..f88ffc4 100644 --- a/fullcustom/fullcustom.ipynb +++ b/fullcustom/fullcustom.ipynb @@ -40,9 +40,9 @@ "\n", "### Using the _Magic_ VLSI layout tool\n", "\n", - "[_Magic_](http://opencircuitdesign.com/magic/) cells (`.mag`) are used to store and manage the layouts. They can be edited using _Magic_ commands or using _Magic_'s GUI.\n", + "[_Magic_](http://opencircuitdesign.com/magic/) cells (`.mag`) are used to store and manage layouts. They can be edited using _Magic_ commands or using _Magic_'s GUI.\n", "\n", - "An existing _inverter_ design as well as its dependencies is imported and converted to _Graphic Design System_ (`.gds`) file for viewing and manufacturing and a _SPICE_ (`.spice`) file for simulation:" + "An existing _inverter_ design is imported and converted into a _Graphic Design System_ (`.gds`) file for viewing and manufacturing and a _SPICE_ (`.spice`) file for simulation:" ] }, { @@ -78,7 +78,7 @@ "source": [ "### Display the inverter layout\n", "\n", - "The `.gds` file can be converted to vector graphics for displaying:" + "The `.gds` file can be converted into a `.svg` file for displaying:" ] }, { @@ -167,9 +167,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "scrolled": false - }, + "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", @@ -226,7 +224,7 @@ "metadata": {}, "outputs": [], "source": [ - "!export PDK_ROOT={CONDA_DIR}/share/pdk/; \\\n", + "!export PDK_ROOT={CONDA_DIR}/share/pdk/;\\\n", "xschem --rcfile {CONDA_DIR}/share/pdk/sky130A/libs.tech/xschem/xschemrc" ] }, @@ -242,8 +240,8 @@ "\n", "Open it with _xschem_ and generate the netlist by:\n", "\n", - " * Selecting _Spice netlist_ in the _Options_ toolbar menu. (This will produce a netlist in a format accepted by the _LVS_ tool.)\n", - " * Selecting _LVS netlist: Top level is a .subckt_ in the _Simulation_ toolbar menu. (This will encapsulate the circuit in a subcircuit. The _LVS_ tool fails otherwose.)\n", + " * Selecting \"Spice netlist\" in the _Options_ toolbar menu. (This will produce a netlist in a format accepted by the _LVS_ tool.)\n", + " * Selecting \"LVS netlist: Top level is a .subckt\" in the _Simulation_ toolbar menu. (This will encapsulate the circuit in a subcircuit. The _LVS_ tool fails otherwise.)\n", " \n", "Click on _Netlist_ (top right) to generate the netlist. It is generated by default under the user repository:\n", "\n", @@ -340,9 +338,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.12" + "version": "3.10.16" } }, "nbformat": 4, - "nbformat_minor": 1 + "nbformat_minor": 4 } diff --git a/semicustom/semicustom.ipynb b/semicustom/semicustom.ipynb index b4e9faa..106a65b 100644 --- a/semicustom/semicustom.ipynb +++ b/semicustom/semicustom.ipynb @@ -140,7 +140,7 @@ "{\n", " \"DESIGN_NAME\": \"xor3\",\n", " \"VERILOG_FILES\": \"dir::../v/xor3.v\",\n", - " \"CLOCK_TREE_SYNTH\": false,\n", + " \"RUN_CTS\": false,\n", " \"CLOCK_PORT\": null,\n", " \"FP_SIZING\": \"absolute\",\n", " \"DIE_AREA\": \"0 0 35 45\",\n", @@ -156,7 +156,7 @@ "metadata": {}, "source": [ "## Workflow\n", - "The provided `flow.tcl` is a script describing the OpenROAD workflow. A _GDS_ file will be generated using the RTL circuit description, the PDK and the configuration file." + "The provided `flow.tcl` is a script describing the OpenROAD workflow. A `.gds` file will be generated using the RTL circuit description, the PDK and the configuration file." ] }, { @@ -220,7 +220,7 @@ "source": [ "### Reporting\n", "\n", - "Many reports are available under:\n", + "Extensive reports are available under:\n", "\n", "```\n", "freeechips/semicustom/runs/RUN_YYYY.MM.DD_HH.MM.SS/reports/.\n", @@ -258,7 +258,7 @@ "\n", "## Sequential circuits in Verilog\n", "\n", - "The tutorial above focuses on combinational circuits. Sequential circuits can obviously be described in Verilog as well. Sequential blocks feature an `always` block. Refer to the vendor's reference to get the sensitivity list's syntax (e.g. to determine if reset is synchronous or asynchronous).\n", + "We focused on combinational circuits. Sequential circuits can obviously be described in Verilog as well. Sequential blocks feature an `always` block. Refer to the vendor's reference to get the sensitivity list's syntax (e.g. to determine if reset is synchronous or asynchronous).\n", "\n", "
\n", "\n", @@ -393,7 +393,7 @@ "{\n", " \"DESIGN_NAME\": \"cnt\",\n", " \"VERILOG_FILES\": \"dir::../v/cnt.v\",\n", - " \"CLOCK_TREE_SYNTH\": true,\n", + " \"RUN_CTS\": true,\n", " \"CLOCK_PORT\": \"clk\",\n", " \"FP_SIZING\": \"absolute\",\n", " \"DIE_AREA\": \"0 0 40 50\",\n", @@ -470,18 +470,18 @@ " \n", "#[test]\n", "fn find_max_impl_test() {\n", - " let _= assert_eq(find_max_impl(u32[4]:[45,3,15,6]), u32:45);\n", - " let _= assert_eq(find_max_impl(u32[4]:[3,45,15,6]), u32:45);\n", - " let _= assert_eq(find_max_impl(u32[4]:[15,3,45,6]), u32:45);\n", - " let _= assert_eq(find_max_impl(u32[4]:[6,3,15,45]), u32:45);\n", + " assert_eq(find_max_impl(u32[4]:[45,3,15,6]), u32:45);\n", + " assert_eq(find_max_impl(u32[4]:[3,45,15,6]), u32:45);\n", + " assert_eq(find_max_impl(u32[4]:[15,3,45,6]), u32:45);\n", + " assert_eq(find_max_impl(u32[4]:[6,3,15,45]), u32:45);\n", "}\n", "\n", "#[test]\n", "fn find_max_test() {\n", - " let _= assert_eq(find_max(u32[1]:[39]), u32:39);\n", - " let _= assert_eq(find_max(u32[2]:[4,90]), u32:90);\n", - " let _= assert_eq(find_max(u32[3]:[7,21,15]), u32:21);\n", - " let _= assert_eq(find_max(u32[8]:[1,3,45,1,5,56,0,34]), u32:56);\n", + " assert_eq(find_max(u32[1]:[39]), u32:39);\n", + " assert_eq(find_max(u32[2]:[4,90]), u32:90);\n", + " assert_eq(find_max(u32[3]:[7,21,15]), u32:21);\n", + " assert_eq(find_max(u32[8]:[1,3,45,1,5,56,0,34]), u32:56);\n", "}" ] },