fullcustom update, semicustom tweaks

This commit is contained in:
Pierre Guillod 2024-12-21 15:33:04 +01:00
parent 1616cef7d3
commit 299f0a21ee
4 changed files with 283 additions and 181 deletions

View file

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

View file

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

View file

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

View file

@ -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",
"<blockquote><details>\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>(u32[1]:[39]), u32:39);\n",
" let _= assert_eq(find_max<u32:2>(u32[2]:[4,90]), u32:90);\n",
" let _= assert_eq(find_max<u32:3>(u32[3]:[7,21,15]), u32:21);\n",
" let _= assert_eq(find_max<u32:8>(u32[8]:[1,3,45,1,5,56,0,34]), u32:56);\n",
" assert_eq(find_max<u32:1>(u32[1]:[39]), u32:39);\n",
" assert_eq(find_max<u32:2>(u32[2]:[4,90]), u32:90);\n",
" assert_eq(find_max<u32:3>(u32[3]:[7,21,15]), u32:21);\n",
" assert_eq(find_max<u32:8>(u32[8]:[1,3,45,1,5,56,0,34]), u32:56);\n",
"}"
]
},