diff --git a/.github/workflows/chipyard-full-flow.yml b/.github/workflows/chipyard-full-flow.yml index 7fe09a23a4..f07548d0d7 100644 --- a/.github/workflows/chipyard-full-flow.yml +++ b/.github/workflows/chipyard-full-flow.yml @@ -107,6 +107,51 @@ jobs: source env.sh cd sims/verilator make verilog + - name: VLSI test + run: | + cd ${{ env.REMOTE_WORK_DIR }} + eval "$(conda shell.bash hook)" + source env.sh + + cd vlsi + export tutorial=sky130-openroad + # TODO: consider setting VLSI_TOP=RocketTile + + # NOTE: most conda installs are in separate conda envs because they mess up + # each other's versions (for no apparent reason) and we need the latest versions + conda config --add channels defaults + conda config --add channels litex-hub + + # installs for example-sky130.yml + conda create -y --prefix ./.conda-sky130 open_pdks.sky130a=1.0.399_0_g63dbde9 + git clone https://github.com/rahulk29/sram22_sky130_macros.git + echo "" >> example-sky130.yml + echo "# tutorial configs" >> example-sky130.yml + echo "technology.sky130.sky130A: $PWD/.conda-sky130/share/pdk/sky130A" >> example-sky130.yml + echo "technology.sky130.sram22_sky130_macros: $PWD/sram22_sky130_macros" >> example-sky130.yml + + # installs for example-openroad.yml + conda create -y --prefix ./.conda-yosys yosys=0.27_4_gb58664d44 + conda create -y --prefix ./.conda-openroad openroad=2.0_7070_g0264023b6 + conda create -y --prefix ./.conda-klayout klayout=0.28.5_98_g87e2def28 + conda create -y --prefix ./.conda-signoff magic=8.3.376_0_g5e5879c netgen=1.5.250_0_g178b172 + echo "" >> example-openroad.yml + echo "# tutorial configs" >> example-openroad.yml + echo "synthesis.yosys.yosys_bin: $PWD/.conda-yosys/bin/yosys" >> example-openroad.yml + echo "par.openroad.openroad_bin: $PWD/.conda-openroad/bin/openroad" >> example-openroad.yml + echo "par.openroad.klayout_bin: $PWD/.conda-klayout/bin/klayout" >> example-openroad.yml + echo "drc.magic.magic_bin: $PWD/.conda-signoff/bin/magic" >> example-openroad.yml + echo "lvs.netgen.netgen_bin: $PWD/.conda-signoff/bin/netgen" >> example-openroad.yml + + conda config --remove channels litex-hub + conda config --remove channels defaults + + make buildfile + make syn + make par + make drc + make lvs + cleanup: name: cleanup diff --git a/conda-reqs/chipyard.yaml b/conda-reqs/chipyard.yaml index c2f6e02052..19cac294de 100644 --- a/conda-reqs/chipyard.yaml +++ b/conda-reqs/chipyard.yaml @@ -103,7 +103,7 @@ dependencies: # hammer packages - sty - pip: - - hammer-vlsi[asap7]==1.0.1 + - hammer-vlsi[asap7]==1.0.4 # doc requirements - sphinx diff --git a/conda-reqs/conda-lock-reqs/conda-requirements-esp-tools-linux-64.conda-lock.yml b/conda-reqs/conda-lock-reqs/conda-requirements-esp-tools-linux-64.conda-lock.yml index 5ce4f1e117..605024eba0 100644 --- a/conda-reqs/conda-lock-reqs/conda-requirements-esp-tools-linux-64.conda-lock.yml +++ b/conda-reqs/conda-lock-reqs/conda-requirements-esp-tools-linux-64.conda-lock.yml @@ -21,7 +21,7 @@ metadata: - url: nodefaults used_env_vars: [] content_hash: - linux-64: 9bd3b3b16bcfb572bdf13d61fd0396b9b21a5b53c4885e1ab7519a54f016cea2 + linux-64: 54c064cc392aed21ebf9caa5c4333f9d4a072c30165d37a56916a3c39dd86eb9 platforms: - linux-64 sources: @@ -2466,20 +2466,6 @@ package: platform: linux-64 url: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.4-py39hf939315_1.tar.bz2 version: 1.4.4 -- category: main - dependencies: - libgcc-ng: '>=12' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* *_cp39 - hash: - md5: a0238daacd28c07735c6bc75aedf2014 - sha256: bbae929b429f39a10432e86d87bf02864e6640287245de71edeac6b3c29b0ff7 - manager: conda - name: lazy-object-proxy - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/lazy-object-proxy-1.9.0-py39h72bdee0_0.conda - version: 1.9.0 - category: main dependencies: jpeg: '>=9e,<10a' @@ -2759,18 +2745,6 @@ package: platform: linux-64 url: https://conda.anaconda.org/conda-forge/noarch/pastel-0.2.1-pyhd8ed1ab_0.tar.bz2 version: 0.2.1 -- category: main - dependencies: - python: '>=3.7' - hash: - md5: f3e7301de38fd621c902faf8087bc564 - sha256: 7258b7f6a8e5fcd5e5a22e0a85b89e03e9cf5049d1591bc98420fd080007f25d - manager: conda - name: pathable - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/pathable-0.4.3-pyhd8ed1ab_0.tar.bz2 - version: 0.4.3 - category: main dependencies: python: '>=3.6' @@ -2783,18 +2757,6 @@ package: platform: linux-64 url: https://conda.anaconda.org/conda-forge/noarch/pkginfo-1.9.6-pyhd8ed1ab_0.conda version: 1.9.6 -- category: main - dependencies: - python: '>=3.6' - hash: - md5: 89e3c7cdde7d3aaa2aee933b604dd07f - sha256: 7d055ffc8a02bf781a89d069db3454b453605cdaff300b82cedcc7133283e47e - manager: conda - name: pkgutil-resolve-name - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_0.tar.bz2 - version: 1.3.10 - category: main dependencies: python: '>=3.8' @@ -3226,14 +3188,14 @@ package: dependencies: python: '>=3.7' hash: - md5: 2d93b130d148d7fc77e583677792fc6a - sha256: 70c57b5ac94cd32e78f1a2fa2c38572bfac85b901a6a99aa254a9e8e126c132d + md5: 43e7d9e50261fb11deb76e17d8431aac + sha256: f81eee64fcdfb379e27d01773b34041fbf7f9e86f33b157c9925d19e0a442452 manager: conda name: typing_extensions optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.4.0-pyha770c72_0.tar.bz2 - version: 4.4.0 + url: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.5.0-pyha770c72_0.conda + version: 4.5.0 - category: main dependencies: libgcc-ng: '>=12' @@ -3968,19 +3930,6 @@ package: platform: linux-64 url: https://conda.anaconda.org/ucb-bar/linux-64/qemu-5.0.0-hb15d774_0.tar.bz2 version: 5.0.0 -- category: main - dependencies: - python: '>=3.5' - six: '' - hash: - md5: fed45fc5ea0813240707998abe49f520 - sha256: 7c7052b51de0b5c558f890bb11f8b5edbb9934a653d76be086b1182b9f54185d - manager: conda - name: rfc3339-validator - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_0.tar.bz2 - version: 0.1.4 - category: main dependencies: pyasn1: '>=0.1.3' @@ -4051,16 +4000,16 @@ package: version: 2.28.11.15 - category: main dependencies: - typing_extensions: 4.4.0 pyha770c72_0 + typing_extensions: 4.5.0 pyha770c72_0 hash: - md5: be969210b61b897775a0de63cd9e9026 - sha256: 6f129b1bc18d111dcf3abaec6fcf6cbee00f1b77bb42d0f0bc8d85f8faa65cf0 + md5: b3c594fde1a80a1fc3eb9cc4a5dfe392 + sha256: 6da5e15fa533620ae2e7aca9a7d16013eed3a73ac64c47d7c3bf3deec39b63b9 manager: conda name: typing-extensions optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.4.0-hd8ed1ab_0.tar.bz2 - version: 4.4.0 + url: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.5.0-hd8ed1ab_0.conda + version: 4.5.0 - category: main dependencies: libgcc-ng: '>=9.3.0' @@ -4283,20 +4232,19 @@ package: dependencies: attrs: '>=17.4.0' importlib-metadata: '' - importlib_resources: '>=1.4.0' - pkgutil-resolve-name: '>=1.3.10' - pyrsistent: '!=0.17.0,!=0.17.1,!=0.17.2,>=0.14.0' - python: '>=3.7' - typing_extensions: '' + pyrsistent: '>=0.14.0' + python: '>=3.6' + setuptools: '' + six: '>=1.11.0' hash: - md5: 723268a468177cd44568eb8f794e0d80 - sha256: 4f68a23430d1afc5c9b41c46fbac0ade33c0bf57a293c646bfdd6dc65350eada + md5: 66125e28711d8ffc04a207a2b170316d + sha256: d74a3ddd3c3dd9bd7b00110a196e3af90490c5660674f18bfd53a8fdf91de418 manager: conda name: jsonschema optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.17.3-pyhd8ed1ab_0.conda - version: 4.17.3 + url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-3.2.0-pyhd8ed1ab_3.tar.bz2 + version: 3.2.0 - category: main dependencies: elfutils: '>=0.187,<0.188.0a0' @@ -4501,14 +4449,14 @@ package: types-awscrt: '' typing_extensions: '' hash: - md5: 1284ea7cf431f599298c3e86922cb6ef - sha256: 949071f4ffaada1a7df890a0eca82507446f427d913272bae109c39f42b03361 + md5: 038f7d8f0f0b7cae4aee87bfbd09bd06 + sha256: 4c3babde56c86a3d0f83add59002275f8e8fd328acf432377c86ceb82b693131 manager: conda name: botocore-stubs optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/botocore-stubs-1.29.87-pyhd8ed1ab_0.conda - version: 1.29.87 + url: https://conda.anaconda.org/conda-forge/noarch/botocore-stubs-1.29.88-pyhd8ed1ab_0.conda + version: 1.29.88 - category: main dependencies: clang-format: 15.0.7 default_had23c3d_1 @@ -4580,22 +4528,6 @@ package: platform: linux-64 url: https://conda.anaconda.org/conda-forge/noarch/jsonpickle-2.2.0-pyhd8ed1ab_0.tar.bz2 version: 2.2.0 -- category: main - dependencies: - jsonschema: '>=4.0.0,<5.0.0' - pathable: '>=0.4.1,<0.5.0' - python: '>=3.6' - pyyaml: '>=5.1' - typing_extensions: '>=4.3.0,<5.0.0' - hash: - md5: a0266083a9eb9c4871fb27c1b30681b7 - sha256: 6bc2645c224994d2f456a59972aaf194937e373381bd5ae2c12052577b8a1db4 - manager: conda - name: jsonschema-spec - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-spec-0.1.2-pyhd8ed1ab_0.tar.bz2 - version: 0.1.2 - category: main dependencies: elfutils: '>=0.187,<0.188.0a0' @@ -4640,19 +4572,17 @@ package: version: 3.7.1 - category: main dependencies: - attrs: '>=19.2.0' - jsonschema: '>=4.0.0,<5.0.0' + jsonschema: '>=3.0.0,<5.0.0' python: '>=3.7' - rfc3339-validator: '' hash: - md5: 8b32c5ef540b6afe23ea8e75dd400fbb - sha256: 8e69b65ffdc0d71f5d924c34d8e45bb2ca169573db29ede1844a46a2c8e3a5d0 + md5: 277aff70bb1def188c9c016ba4564e23 + sha256: 0c2f971f86211f2b6db431de9d8ab4c9e38eed5422bd06f93cd8be3cbb882a2c manager: conda name: openapi-schema-validator optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/openapi-schema-validator-0.4.3-pyhd8ed1ab_0.conda - version: 0.4.3 + url: https://conda.anaconda.org/conda-forge/noarch/openapi-schema-validator-0.2.3-pyhd8ed1ab_0.tar.bz2 + version: 0.2.3 - category: main dependencies: alsa-lib: '>=1.2.8,<1.2.9.0a0' @@ -4889,22 +4819,20 @@ package: version: 2.54.4 - category: main dependencies: - importlib_resources: '>=5.8.0,<6.0.0' - jsonschema: '>=4.0.0,<5.0.0' - jsonschema-spec: '>=0.1.1,<0.2.0' - lazy-object-proxy: '>=1.7.1,<2.0.0' - openapi-schema-validator: '>=0.4.2,<0.5' + jsonschema: '>=3.2.0,<5.0.0' + openapi-schema-validator: '>=0.2.0,<0.3.0' python: '>=3.7' pyyaml: '>=5.1' + setuptools: '' hash: - md5: 243b7dc9b3e129a2e7d5f2ca690f337c - sha256: 3053d96adb90a7dd6002c1151531485d9973a94050139a233701c3c25f94e0ea + md5: 5ff3ff67d18fd4938c4ae38c3baf21bb + sha256: 11f24d36001aaba0a7197ff7b9a07ab943d05f969b13e5a9c4ffec13eca19cd0 manager: conda name: openapi-spec-validator optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/openapi-spec-validator-0.5.5-pyhd8ed1ab_0.conda - version: 0.5.5 + url: https://conda.anaconda.org/conda-forge/noarch/openapi-spec-validator-0.4.0-pyhd8ed1ab_1.tar.bz2 + version: 0.4.0 - category: main dependencies: cfgv: '>=2.0.0' @@ -4946,14 +4874,14 @@ package: pysocks: '>=1.5.6,<2.0,!=1.5.7' python: <4.0 hash: - md5: 01f33ad2e0aaf6b5ba4add50dad5ad29 - sha256: f2f09c44e47946ce631dbc9a8a79bb463ac0f4122aaafdbcc51f200a1e420ca6 + md5: 27db656619a55d727eaf5a6ece3d2fd6 + sha256: 213bdf6c3a5d721fa83b45d527d3ecd340f9547c0d6bbd0b8d9d746ec9a1fb4b manager: conda name: urllib3 optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/urllib3-1.26.14-pyhd8ed1ab_0.conda - version: 1.26.14 + url: https://conda.anaconda.org/conda-forge/noarch/urllib3-1.26.15-pyhd8ed1ab_0.conda + version: 1.26.15 - category: main dependencies: jmespath: '>=0.7.1,<2.0.0' @@ -5321,20 +5249,19 @@ package: version: 2.0.0 - category: main dependencies: - boto3: '>=1.19.5,<2' - jsonschema: '>=3.2,<5' - pydantic: ~=1.10.2 - python: '>=3.7' - typing_extensions: ~=4.4.0 + boto3: ~=1.5 + jsonschema: ~=3.2 + python: '>=3.6' + six: ~=1.15 hash: - md5: 1136b4bb3893069daeb272a3d6aecd7b - sha256: 9d9316f995fa2aedd97a8495b1a8b87265d3d8fc0771c8a0e51da7c3c1a0571c + md5: 6a8ad721f4edea85a40070c78f379dd4 + sha256: d9b2ff5fdf1e8de7cf80f2a14a7cb76c65c0bae18a2fe51700e6ed3c71fdb5b5 manager: conda name: aws-sam-translator optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/aws-sam-translator-1.60.1-pyhd8ed1ab_0.conda - version: 1.60.1 + url: https://conda.anaconda.org/conda-forge/noarch/aws-sam-translator-1.55.0-pyhd8ed1ab_0.conda + version: 1.55.0 - category: main dependencies: azure-core: '>=1.11.0,<2.0.0' @@ -5506,14 +5433,14 @@ package: werkzeug: <2.2.0,>=0.5 xmltodict: '' hash: - md5: 24a19f3ea233ebd0cc0b8e6e0bc5df58 - sha256: 55e3f4fd163518afd72e926d88011cc47933779c97523b4d64b3680f99bd787b + md5: 7b8eaea28d5c08c8539c3b35a07fe3d1 + sha256: 47f8f38a9eff042ebd7754fa6c36739021c0e6cdca1848cc4b0138cfc4043ace manager: conda name: moto optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/moto-4.1.3-pyhd8ed1ab_0.conda - version: 4.1.3 + url: https://conda.anaconda.org/conda-forge/noarch/moto-4.1.4-pyhd8ed1ab_0.conda + version: 4.1.4 - category: main dependencies: {} hash: @@ -5607,13 +5534,13 @@ package: pyyaml: '>=6.0,<7.0' ruamel.yaml: '>=0.17.21,<0.18.0' hash: - sha256: f476c58c84d01bda7a642b09514a4ecd798503fdd47fe466b83a7945d44fcb93 + sha256: 6bcd6cef086b6b6b6ab00822699d436451ef5f8f8460e07cad7c05ab6d05bfcf manager: pip name: hammer-vlsi optional: false platform: linux-64 - url: https://files.pythonhosted.org/packages/85/0f/7fcab088a5e2780d165bbea5ea3974b0f2286ddc98499e98aa29609bd0ee/hammer_vlsi-1.0.1-py3-none-any.whl - version: 1.0.1 + url: https://files.pythonhosted.org/packages/65/f8/5ec3f1e3c629724fec4613e13c3da9be114b306ae452cd1e0f75eaf694a6/hammer_vlsi-1.0.4-py3-none-any.whl + version: 1.0.4 - category: main dependencies: asttokens: '>=2,<3' diff --git a/conda-reqs/conda-lock-reqs/conda-requirements-riscv-tools-linux-64.conda-lock.yml b/conda-reqs/conda-lock-reqs/conda-requirements-riscv-tools-linux-64.conda-lock.yml index 73748d1fb6..803b93c23c 100644 --- a/conda-reqs/conda-lock-reqs/conda-requirements-riscv-tools-linux-64.conda-lock.yml +++ b/conda-reqs/conda-lock-reqs/conda-requirements-riscv-tools-linux-64.conda-lock.yml @@ -21,7 +21,7 @@ metadata: - url: nodefaults used_env_vars: [] content_hash: - linux-64: 3ef38211139adc6c0c849eaed6fd59c2a3c880282f0f47f25fe54bc05c510201 + linux-64: 01a33092d9b6501c87e830b4dd22683af0a3c8f5ede87d42d7a079b5c345161b platforms: - linux-64 sources: @@ -2449,20 +2449,6 @@ package: platform: linux-64 url: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.4-py39hf939315_1.tar.bz2 version: 1.4.4 -- category: main - dependencies: - libgcc-ng: '>=12' - python: '>=3.9,<3.10.0a0' - python_abi: 3.9.* *_cp39 - hash: - md5: a0238daacd28c07735c6bc75aedf2014 - sha256: bbae929b429f39a10432e86d87bf02864e6640287245de71edeac6b3c29b0ff7 - manager: conda - name: lazy-object-proxy - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/lazy-object-proxy-1.9.0-py39h72bdee0_0.conda - version: 1.9.0 - category: main dependencies: jpeg: '>=9e,<10a' @@ -2742,18 +2728,6 @@ package: platform: linux-64 url: https://conda.anaconda.org/conda-forge/noarch/pastel-0.2.1-pyhd8ed1ab_0.tar.bz2 version: 0.2.1 -- category: main - dependencies: - python: '>=3.7' - hash: - md5: f3e7301de38fd621c902faf8087bc564 - sha256: 7258b7f6a8e5fcd5e5a22e0a85b89e03e9cf5049d1591bc98420fd080007f25d - manager: conda - name: pathable - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/pathable-0.4.3-pyhd8ed1ab_0.tar.bz2 - version: 0.4.3 - category: main dependencies: python: '>=3.6' @@ -2766,18 +2740,6 @@ package: platform: linux-64 url: https://conda.anaconda.org/conda-forge/noarch/pkginfo-1.9.6-pyhd8ed1ab_0.conda version: 1.9.6 -- category: main - dependencies: - python: '>=3.6' - hash: - md5: 89e3c7cdde7d3aaa2aee933b604dd07f - sha256: 7d055ffc8a02bf781a89d069db3454b453605cdaff300b82cedcc7133283e47e - manager: conda - name: pkgutil-resolve-name - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_0.tar.bz2 - version: 1.3.10 - category: main dependencies: python: '>=3.8' @@ -3226,14 +3188,14 @@ package: dependencies: python: '>=3.7' hash: - md5: 2d93b130d148d7fc77e583677792fc6a - sha256: 70c57b5ac94cd32e78f1a2fa2c38572bfac85b901a6a99aa254a9e8e126c132d + md5: 43e7d9e50261fb11deb76e17d8431aac + sha256: f81eee64fcdfb379e27d01773b34041fbf7f9e86f33b157c9925d19e0a442452 manager: conda name: typing_extensions optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.4.0-pyha770c72_0.tar.bz2 - version: 4.4.0 + url: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.5.0-pyha770c72_0.conda + version: 4.5.0 - category: main dependencies: libgcc-ng: '>=12' @@ -3968,19 +3930,6 @@ package: platform: linux-64 url: https://conda.anaconda.org/ucb-bar/linux-64/qemu-5.0.0-hb15d774_0.tar.bz2 version: 5.0.0 -- category: main - dependencies: - python: '>=3.5' - six: '' - hash: - md5: fed45fc5ea0813240707998abe49f520 - sha256: 7c7052b51de0b5c558f890bb11f8b5edbb9934a653d76be086b1182b9f54185d - manager: conda - name: rfc3339-validator - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_0.tar.bz2 - version: 0.1.4 - category: main dependencies: pyasn1: '>=0.1.3' @@ -4051,16 +4000,16 @@ package: version: 2.28.11.15 - category: main dependencies: - typing_extensions: 4.4.0 pyha770c72_0 + typing_extensions: 4.5.0 pyha770c72_0 hash: - md5: be969210b61b897775a0de63cd9e9026 - sha256: 6f129b1bc18d111dcf3abaec6fcf6cbee00f1b77bb42d0f0bc8d85f8faa65cf0 + md5: b3c594fde1a80a1fc3eb9cc4a5dfe392 + sha256: 6da5e15fa533620ae2e7aca9a7d16013eed3a73ac64c47d7c3bf3deec39b63b9 manager: conda name: typing-extensions optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.4.0-hd8ed1ab_0.tar.bz2 - version: 4.4.0 + url: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.5.0-hd8ed1ab_0.conda + version: 4.5.0 - category: main dependencies: libgcc-ng: '>=9.3.0' @@ -4283,20 +4232,19 @@ package: dependencies: attrs: '>=17.4.0' importlib-metadata: '' - importlib_resources: '>=1.4.0' - pkgutil-resolve-name: '>=1.3.10' - pyrsistent: '!=0.17.0,!=0.17.1,!=0.17.2,>=0.14.0' - python: '>=3.7' - typing_extensions: '' + pyrsistent: '>=0.14.0' + python: '>=3.6' + setuptools: '' + six: '>=1.11.0' hash: - md5: 723268a468177cd44568eb8f794e0d80 - sha256: 4f68a23430d1afc5c9b41c46fbac0ade33c0bf57a293c646bfdd6dc65350eada + md5: 66125e28711d8ffc04a207a2b170316d + sha256: d74a3ddd3c3dd9bd7b00110a196e3af90490c5660674f18bfd53a8fdf91de418 manager: conda name: jsonschema optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.17.3-pyhd8ed1ab_0.conda - version: 4.17.3 + url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-3.2.0-pyhd8ed1ab_3.tar.bz2 + version: 3.2.0 - category: main dependencies: elfutils: '>=0.187,<0.188.0a0' @@ -4501,14 +4449,14 @@ package: types-awscrt: '' typing_extensions: '' hash: - md5: 1284ea7cf431f599298c3e86922cb6ef - sha256: 949071f4ffaada1a7df890a0eca82507446f427d913272bae109c39f42b03361 + md5: 038f7d8f0f0b7cae4aee87bfbd09bd06 + sha256: 4c3babde56c86a3d0f83add59002275f8e8fd328acf432377c86ceb82b693131 manager: conda name: botocore-stubs optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/botocore-stubs-1.29.87-pyhd8ed1ab_0.conda - version: 1.29.87 + url: https://conda.anaconda.org/conda-forge/noarch/botocore-stubs-1.29.88-pyhd8ed1ab_0.conda + version: 1.29.88 - category: main dependencies: clang-format: 15.0.7 default_had23c3d_1 @@ -4580,22 +4528,6 @@ package: platform: linux-64 url: https://conda.anaconda.org/conda-forge/noarch/jsonpickle-2.2.0-pyhd8ed1ab_0.tar.bz2 version: 2.2.0 -- category: main - dependencies: - jsonschema: '>=4.0.0,<5.0.0' - pathable: '>=0.4.1,<0.5.0' - python: '>=3.6' - pyyaml: '>=5.1' - typing_extensions: '>=4.3.0,<5.0.0' - hash: - md5: a0266083a9eb9c4871fb27c1b30681b7 - sha256: 6bc2645c224994d2f456a59972aaf194937e373381bd5ae2c12052577b8a1db4 - manager: conda - name: jsonschema-spec - optional: false - platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-spec-0.1.2-pyhd8ed1ab_0.tar.bz2 - version: 0.1.2 - category: main dependencies: elfutils: '>=0.187,<0.188.0a0' @@ -4640,19 +4572,17 @@ package: version: 3.7.1 - category: main dependencies: - attrs: '>=19.2.0' - jsonschema: '>=4.0.0,<5.0.0' + jsonschema: '>=3.0.0,<5.0.0' python: '>=3.7' - rfc3339-validator: '' hash: - md5: 8b32c5ef540b6afe23ea8e75dd400fbb - sha256: 8e69b65ffdc0d71f5d924c34d8e45bb2ca169573db29ede1844a46a2c8e3a5d0 + md5: 277aff70bb1def188c9c016ba4564e23 + sha256: 0c2f971f86211f2b6db431de9d8ab4c9e38eed5422bd06f93cd8be3cbb882a2c manager: conda name: openapi-schema-validator optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/openapi-schema-validator-0.4.3-pyhd8ed1ab_0.conda - version: 0.4.3 + url: https://conda.anaconda.org/conda-forge/noarch/openapi-schema-validator-0.2.3-pyhd8ed1ab_0.tar.bz2 + version: 0.2.3 - category: main dependencies: alsa-lib: '>=1.2.8,<1.2.9.0a0' @@ -4889,22 +4819,20 @@ package: version: 2.54.4 - category: main dependencies: - importlib_resources: '>=5.8.0,<6.0.0' - jsonschema: '>=4.0.0,<5.0.0' - jsonschema-spec: '>=0.1.1,<0.2.0' - lazy-object-proxy: '>=1.7.1,<2.0.0' - openapi-schema-validator: '>=0.4.2,<0.5' + jsonschema: '>=3.2.0,<5.0.0' + openapi-schema-validator: '>=0.2.0,<0.3.0' python: '>=3.7' pyyaml: '>=5.1' + setuptools: '' hash: - md5: 243b7dc9b3e129a2e7d5f2ca690f337c - sha256: 3053d96adb90a7dd6002c1151531485d9973a94050139a233701c3c25f94e0ea + md5: 5ff3ff67d18fd4938c4ae38c3baf21bb + sha256: 11f24d36001aaba0a7197ff7b9a07ab943d05f969b13e5a9c4ffec13eca19cd0 manager: conda name: openapi-spec-validator optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/openapi-spec-validator-0.5.5-pyhd8ed1ab_0.conda - version: 0.5.5 + url: https://conda.anaconda.org/conda-forge/noarch/openapi-spec-validator-0.4.0-pyhd8ed1ab_1.tar.bz2 + version: 0.4.0 - category: main dependencies: cfgv: '>=2.0.0' @@ -4946,14 +4874,14 @@ package: pysocks: '>=1.5.6,<2.0,!=1.5.7' python: <4.0 hash: - md5: 01f33ad2e0aaf6b5ba4add50dad5ad29 - sha256: f2f09c44e47946ce631dbc9a8a79bb463ac0f4122aaafdbcc51f200a1e420ca6 + md5: 27db656619a55d727eaf5a6ece3d2fd6 + sha256: 213bdf6c3a5d721fa83b45d527d3ecd340f9547c0d6bbd0b8d9d746ec9a1fb4b manager: conda name: urllib3 optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/urllib3-1.26.14-pyhd8ed1ab_0.conda - version: 1.26.14 + url: https://conda.anaconda.org/conda-forge/noarch/urllib3-1.26.15-pyhd8ed1ab_0.conda + version: 1.26.15 - category: main dependencies: jmespath: '>=0.7.1,<2.0.0' @@ -5321,20 +5249,19 @@ package: version: 2.0.0 - category: main dependencies: - boto3: '>=1.19.5,<2' - jsonschema: '>=3.2,<5' - pydantic: ~=1.10.2 - python: '>=3.7' - typing_extensions: ~=4.4.0 + boto3: ~=1.5 + jsonschema: ~=3.2 + python: '>=3.6' + six: ~=1.15 hash: - md5: 1136b4bb3893069daeb272a3d6aecd7b - sha256: 9d9316f995fa2aedd97a8495b1a8b87265d3d8fc0771c8a0e51da7c3c1a0571c + md5: 6a8ad721f4edea85a40070c78f379dd4 + sha256: d9b2ff5fdf1e8de7cf80f2a14a7cb76c65c0bae18a2fe51700e6ed3c71fdb5b5 manager: conda name: aws-sam-translator optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/aws-sam-translator-1.60.1-pyhd8ed1ab_0.conda - version: 1.60.1 + url: https://conda.anaconda.org/conda-forge/noarch/aws-sam-translator-1.55.0-pyhd8ed1ab_0.conda + version: 1.55.0 - category: main dependencies: azure-core: '>=1.11.0,<2.0.0' @@ -5506,14 +5433,14 @@ package: werkzeug: <2.2.0,>=0.5 xmltodict: '' hash: - md5: 24a19f3ea233ebd0cc0b8e6e0bc5df58 - sha256: 55e3f4fd163518afd72e926d88011cc47933779c97523b4d64b3680f99bd787b + md5: 7b8eaea28d5c08c8539c3b35a07fe3d1 + sha256: 47f8f38a9eff042ebd7754fa6c36739021c0e6cdca1848cc4b0138cfc4043ace manager: conda name: moto optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/moto-4.1.3-pyhd8ed1ab_0.conda - version: 4.1.3 + url: https://conda.anaconda.org/conda-forge/noarch/moto-4.1.4-pyhd8ed1ab_0.conda + version: 4.1.4 - category: main dependencies: {} hash: @@ -5607,13 +5534,13 @@ package: pyyaml: '>=6.0,<7.0' ruamel.yaml: '>=0.17.21,<0.18.0' hash: - sha256: f476c58c84d01bda7a642b09514a4ecd798503fdd47fe466b83a7945d44fcb93 + sha256: 6bcd6cef086b6b6b6ab00822699d436451ef5f8f8460e07cad7c05ab6d05bfcf manager: pip name: hammer-vlsi optional: false platform: linux-64 - url: https://files.pythonhosted.org/packages/85/0f/7fcab088a5e2780d165bbea5ea3974b0f2286ddc98499e98aa29609bd0ee/hammer_vlsi-1.0.1-py3-none-any.whl - version: 1.0.1 + url: https://files.pythonhosted.org/packages/65/f8/5ec3f1e3c629724fec4613e13c3da9be114b306ae452cd1e0f75eaf694a6/hammer_vlsi-1.0.4-py3-none-any.whl + version: 1.0.4 - category: main dependencies: asttokens: '>=2,<3' diff --git a/docs/Customization/Firrtl-Transforms.rst b/docs/Customization/Firrtl-Transforms.rst index 4a46720747..1113bde63f 100644 --- a/docs/Customization/Firrtl-Transforms.rst +++ b/docs/Customization/Firrtl-Transforms.rst @@ -10,15 +10,18 @@ Transforms are a powerful tool to take in the FIRRTL IR that is emitted from Chi The Scala FIRRTL Compiler and the MLIR FIRRTL Compiler ------------------------------------------------------ -In Chipyard, two FIRRTL compilers work together to compile Chisel into Verilog. The Scala FIRRTL compiler(SFC) and the MLIR FIRRTL compiler(MFC). -They are basically doing the same thing, except that MFC is written in C++ which makes compilation much faster. In the default setting, the SFC will compile Chisel into CHIRRTL and MFC will -compile CHIRRTL into Verilog(as of now, we are using SFC as a backup for cases when MFC doesn't work, e.g., when the design is using Fixed types). By setting the ``ENABLE_CUSTOM_FIRRTL_PASS`` env variable to a non-zero value, we can make the SFC compile Chisel into LowFIRRTL so that our custom FIRRTL passes are applied. +In Chipyard, two FIRRTL compilers work together to compile Chisel into Verilog. The Scala FIRRTL compiler (SFC) and the MLIR FIRRTL compiler (MFC). +They are basically doing the same thing, except that MFC is written in C++ which makes compilation much faster (the generated Verilog will be different). In the default setting, the SFC will compile Chisel into CHIRRTL and MFC will +compile CHIRRTL into Verilog (as of now, we are using SFC as a backup for cases when MFC doesn't work, e.g., when the design is using Fixed types). By setting the ``ENABLE_CUSTOM_FIRRTL_PASS`` env variable to a non-zero value, +we can make the SFC compile Chisel into LowFIRRTL so that our custom FIRRTL passes are applied. + +For more information on MLIR FIRRTL Compiler, please visit https://mlir.llvm.org/ and https://circt.llvm.org/. Where to add transforms ----------------------- -In Chipyard, the FIRRTL compiler is called multiple times to create a "Top" file that contains the DUT and a "Harness" file containing the test harness, which instantiates the DUT. -The "Harness" file does not contain the DUT's module definition or any of its submodules. +In Chipyard, the FIRRTL compiler is called multiple times to create a "Top" file that contains the DUT and a "Model" file containing the test harness, which instantiates the DUT. +The "Model" file does not contain the DUT's module definition or any of its submodules. This is done by the ``tapeout`` SBT project (located in ``tools/barstools/tapeout``) which calls ``GenerateModelStageMain`` (a function that wraps the multiple FIRRTL compiler calls and extra transforms). .. literalinclude:: ../../common.mk diff --git a/docs/Tools/FIRRTL.rst b/docs/Tools/FIRRTL.rst index e9e6425a9d..2e88218f26 100644 --- a/docs/Tools/FIRRTL.rst +++ b/docs/Tools/FIRRTL.rst @@ -3,8 +3,10 @@ FIRRTL `FIRRTL `__ is an intermediate representation of your circuit. It is emitted by the Chisel compiler and is used to translate Chisel source files into another representation such as Verilog. -Without going into too much detail, FIRRTL is consumed by a FIRRTL compiler (another Scala program) which passes the circuit through a series of circuit-level transformations. +Without going into too much detail, FIRRTL is consumed by FIRRTL compilers which passes the circuit through a series of circuit-level transformations. An example of a FIRRTL pass (transformation) is one that optimizes out unused signals. Once the transformations are done, a Verilog file is emitted and the build process is done. -For more information on please visit their `website `__. +To see how FIRRTL is transformed to Verilog in Chipyard, please visit the :ref:`firrtl-transforms` section. + +For more information on FIRRTL, please visit their `website `__. diff --git a/generators/firechip/src/main/scala/BridgeBinders.scala b/generators/firechip/src/main/scala/BridgeBinders.scala index d442c95909..4d64a8ad24 100644 --- a/generators/firechip/src/main/scala/BridgeBinders.scala +++ b/generators/firechip/src/main/scala/BridgeBinders.scala @@ -242,3 +242,14 @@ class WithDefaultFireSimBridges extends Config( new WithTracerVBridge ++ new WithFireSimIOCellModels ) + +// Shorthand to register all of the provided mmio-only bridges above +class WithDefaultMMIOOnlyFireSimBridges extends Config( + new WithSerialBridge ++ + new WithUARTBridge ++ + new WithBlockDeviceBridge ++ + new WithFASEDBridge ++ + new WithFireSimMultiCycleRegfile ++ + new WithFireSimFAME5 ++ + new WithFireSimIOCellModels +) diff --git a/generators/firechip/src/main/scala/TargetConfigs.scala b/generators/firechip/src/main/scala/TargetConfigs.scala index bfdaad63f1..35846c0f03 100644 --- a/generators/firechip/src/main/scala/TargetConfigs.scala +++ b/generators/firechip/src/main/scala/TargetConfigs.scala @@ -282,3 +282,9 @@ class FireSimNoMemPortConfig extends Config( new testchipip.WithBackingScratchpad ++ new WithFireSimConfigTweaks ++ new chipyard.RocketConfig) + +class FireSimRocketMMIOOnlyConfig extends Config( + new WithDefaultMMIOOnlyFireSimBridges ++ + new WithDefaultMemModel ++ + new WithFireSimConfigTweaks ++ + new chipyard.RocketConfig) diff --git a/vlsi/Makefile b/vlsi/Makefile index ab8438d50c..8259e7a6ec 100644 --- a/vlsi/Makefile +++ b/vlsi/Makefile @@ -46,9 +46,9 @@ VLSI_MODEL_DUT_NAME ?= chiptop # If overriding, this should be relative to $(vlsi_dir) VLSI_OBJ_DIR ?= build ifneq ($(CUSTOM_VLOG),) - OBJ_DIR ?= $(vlsi_dir)/$(VLSI_OBJ_DIR)/custom-$(VLSI_TOP) + OBJ_DIR ?= $(vlsi_dir)/$(VLSI_OBJ_DIR)/$(VLSI_TOP) else - OBJ_DIR ?= $(vlsi_dir)/$(VLSI_OBJ_DIR)/$(long_name)-$(VLSI_TOP) + OBJ_DIR ?= $(vlsi_dir)/$(VLSI_OBJ_DIR)/$(long_name)-$(TOP) endif ######################################################################################### @@ -118,6 +118,12 @@ endif $(SYN_CONF): $(VLSI_RTL) mkdir -p $(dir $@) + echo "sim.inputs:" > $@ + echo " input_files:" >> $@ + for x in $$(cat $(VLSI_RTL)); do \ + echo ' - "'$$x'"' >> $@; \ + done + echo " input_files_meta: 'append'" >> $@ echo "synthesis.inputs:" >> $@ echo " top_module: $(VLSI_TOP)" >> $@ echo " input_files:" >> $@ diff --git a/vlsi/sim.mk b/vlsi/sim.mk index 5623f9d320..1f5b530d3b 100644 --- a/vlsi/sim.mk +++ b/vlsi/sim.mk @@ -10,7 +10,7 @@ $(SIM_CONF): $(sim_common_files) echo " top_module: $(VLSI_TOP)" >> $@ echo " tb_name: ''" >> $@ # don't specify -top echo " input_files:" >> $@ - for x in $$(cat $(sim_common_files)); do \ + for x in $$(comm -23 <(cat $(MODEL_MODS_FILELIST) $(MODEL_BB_MODS_FILELIST) | sort -u) <(sort $(VLSI_RTL))) $(MODEL_SMEMS_FILE) $(SIM_FILE_REQS); do \ echo ' - "'$$x'"' >> $@; \ done echo " input_files_meta: 'append'" >> $@