From f9b938ad55851693ff0a922e8223cee56fce555b Mon Sep 17 00:00:00 2001 From: abejgonzalez Date: Sun, 9 Oct 2022 17:08:18 -0700 Subject: [PATCH] Update all --- common.mk | 69 +++++++----- conda-reqs/chipyard.yaml | 5 + ...irements-esp-tools-linux-64.conda-lock.yml | 87 ++++++++++++-- ...ements-riscv-tools-linux-64.conda-lock.yml | 87 ++++++++++++-- conda-requirements-riscv-tools.yaml | 1 + scripts/dump-mods.py | 84 -------------- scripts/split-mems-conf.py | 81 +++++++++++++ scripts/split-module-files.py | 106 ++++++++++++++++++ tools/barstools | 2 +- variables.mk | 15 ++- 10 files changed, 399 insertions(+), 138 deletions(-) delete mode 100755 scripts/dump-mods.py create mode 100755 scripts/split-mems-conf.py create mode 100755 scripts/split-module-files.py diff --git a/common.mk b/common.mk index 87078369..59156a00 100644 --- a/common.mk +++ b/common.mk @@ -111,22 +111,25 @@ $(FIRRTL_FILE) $(ANNO_FILE) &: $(SCALA_SOURCES) $(sim_files) $(SCALA_BUILDTOOL_D --legacy-configs $(CONFIG_PACKAGE):$(CONFIG) \ $(EXTRA_CHISEL_OPTIONS)) +define firtool_extra_anno_contents +[ + { + "class":"sifive.enterprise.firrtl.MarkDUTAnnotation", + "target":"~$(MODEL)|$(TOP)" + }, + { + "class": "sifive.enterprise.firrtl.TestHarnessHierarchyAnnotation", + "filename": "$(FIRTOOL_TB_MOD_HIER_JSON)" + }, + { + "class": "sifive.enterprise.firrtl.ModuleHierarchyAnnotation", + "filename": "$(FIRTOOL_MOD_HIER_JSON)" + } +] +endef +export firtool_extra_anno_contents $(FINAL_ANNO_FILE) $(FIRTOOL_EXTRA_ANNO_FILE): $(ANNO_FILE) - echo " \ - [\ - {\ - \"class\":\"sifive.enterprise.firrtl.MarkDUTAnnotation\",\ - \"target\":\"~$(MODEL)|$(TOP)\"\ - },\ - {\ - \"class\": \"sifive.enterprise.firrtl.TestHarnessHierarchyAnnotation\",\ - \"filename\": \"$(FIRTOOL_TB_MOD_HIER_JSON)\"\ - },\ - {\ - \"class\": \"sifive.enterprise.firrtl.ModuleHierarchyAnnotation\",\ - \"filename\": \"$(FIRTOOL_MOD_HIER_JSON)\"\ - } - ]" > $(FIRTOOL_EXTRA_ANNO_FILE) + echo "$$firtool_extra_anno_contents" > $(FIRTOOL_EXTRA_ANNO_FILE) jq -s '[.[][]]' $(ANNO_FILE) $(FIRTOOL_EXTRA_ANNO_FILE) > $@ .PHONY: firrtl @@ -135,7 +138,7 @@ firrtl: $(FIRRTL_FILE) $(FINAL_ANNO_FILE) ######################################################################################### # create verilog files rules and variables ######################################################################################### -CIRCT_TARGETS = $(TOP_SMEMS_CONF) $(FIRTOOL_MOD_HIER_JSON) $(FIRTOOL_TB_MOD_HIER_JSON) +CIRCT_TARGETS = $(FIRTOOL_SMEMS_CONF) $(FIRTOOL_MOD_HIER_JSON) $(FIRTOOL_TB_MOD_HIER_JSON) $(FIRTOOL_SMEMS_JSON) $(FIRTOOL_TB_SMEMS_JSON) # DOC include start: FirrtlCompiler $(TOP_TARGETS) $(HARNESS_TARGETS) &: $(FIRRTL_FILE) $(ANNO_FILE) $(VLOG_SOURCES) @@ -165,17 +168,19 @@ $(TOP_TARGETS) $(HARNESS_TARGETS) &: $(FIRRTL_FILE) $(ANNO_FILE) $(VLOG_SOURCES) $(CIRCT_TARGETS): firrtl_temp @echo "" > /dev/null +# hack: lower to middle firrtl if Fixed types are found firrtl_temp: $(FIRRTL_FILE) $(FINAL_ANNO_FILE) $(VLOG_SOURCES) $(call run_scala_main,tapeout,barstools.tapeout.transforms.GenerateTop,\ + --output-file $(SFC_FIRRTL_FILE) \ + --target-dir $(build_dir) \ --input-file $(FIRRTL_FILE) \ --annotation-file $(FINAL_ANNO_FILE) \ - --out-fir-file $(SFC_FIRRTL_FILE) \ --out-anno-file $(SFC_ANNO_FILE) \ --log-level $(FIRRTL_LOGLEVEL) \ --allow-unrecognized-annotations \ - -X none \ + -X $(if $(shell grep "Fixed<" $(FIRRTL_FILE)),middle,none) \ $(EXTRA_FIRRTL_OPTIONS)) - $(SCRATCH_HOME)/circt/build/bin/firtool \ + firtool \ --export-module-hierarchy \ --emit-metadata \ --format=fir \ @@ -188,19 +193,30 @@ firrtl_temp: $(FIRRTL_FILE) $(FINAL_ANNO_FILE) $(VLOG_SOURCES) --lowering-options=disallowPackedArrays,emittedLineLength=8192,noAlwaysComb,disallowLocalVariables \ --repl-seq-mem \ --repl-seq-mem-circuit=$(MODEL) \ - --repl-seq-mem-file=$(TOP_SMEMS_CONF) \ + --repl-seq-mem-file=$(FIRTOOL_SMEMS_CONF) \ --split-verilog \ -o $(build_dir) \ $(SFC_FIRRTL_FILE) - sed -i 's/.*/& /' $(TOP_SMEMS_CONF) # need trailing space for SFC macrocompiler + sed -i 's/.*/& /' $(FIRTOOL_SMEMS_CONF) # need trailing space for SFC macrocompiler # DOC include end: FirrtlCompiler -$(TOP_MODS_FILELIST) $(ALL_MODS_FILELIST): $(FIRTOOL_TB_MOD_HIER_JSON) $(FIRTOOL_FILELIST) - $(base_dir)/scripts/dump-mods.py --dut-top $(TOP) --hier-json $(FIRTOOL_TB_MOD_HIER_JSON) --dut-mods $(TOP_MODS_FILELIST) --filelist $(FIRTOOL_FILELIST) --build_dir $(build_dir) +$(TOP_MODS_FILELIST) $(TB_MODS_FILELIST) $(ALL_MODS_FILELIST) &: $(FIRTOOL_TB_MOD_HIER_JSON) $(FIRTOOL_FILELIST) + $(base_dir)/scripts/split-module-files.py \ + --tb-hier-json $(FIRTOOL_TB_MOD_HIER_JSON) \ + --dut $(TOP) \ + --out-dut-filelist $(TOP_MODS_FILELIST) \ + --out-tb-filelist $(TB_MODS_FILELIST) \ + --in-all-filelist $(FIRTOOL_FILELIST) \ + --build-dir $(build_dir) sed -e 's;^;$(build_dir)/;' $(FIRTOOL_FILELIST) > $(ALL_MODS_FILELIST) -.PHONY: temp -temp: $(TOP_MODS_FILELIST) +$(TOP_SMEMS_CONF) $(HARNESS_SMEMS_CONF) &: $(FIRTOOL_SMEMS_JSON) $(FIRTOOL_TB_SMEMS_JSON) $(FIRTOOL_SMEMS_CONF) + $(base_dir)/scripts/split-mems-conf.py \ + --in-smems-conf $(FIRTOOL_SMEMS_CONF) \ + --in-dut-smems-json $(FIRTOOL_SMEMS_JSON) \ + --in-tb-smems-json $(FIRTOOL_TB_SMEMS_JSON) \ + --out-dut-smems-conf $(TOP_SMEMS_CONF) \ + --out-tb-smems-conf $(HARNESS_SMEMS_CONF) # This file is for simulation only. VLSI flows should replace this file with one containing hard SRAMs MACROCOMPILER_MODE ?= --mode synflops @@ -214,9 +230,10 @@ $(HARNESS_SMEMS_FILE) $(HARNESS_SMEMS_FIR) &: $(HARNESS_SMEMS_CONF) | $(TOP_SMEM ######################################################################################## # remove duplicate files and headers in list of simulation file inputs ######################################################################################## -$(sim_common_files): $(sim_files) $(ALL_MODS_FILELIST) $(TOP_SMEMS_FILE) +$(sim_common_files): $(sim_files) $(ALL_MODS_FILELIST) $(TOP_SMEMS_FILE) $(HARNESS_SMEMS_FILE) sort -u $(sim_files) $(ALL_MODS_FILELIST) | grep -v '.*\.\(svh\|h\)$$' > $@ echo "$(TOP_SMEMS_FILE)" >> $@ + echo "$(HARNESS_SMEMS_FILE)" >> $@ ######################################################################################### # helper rule to just make verilog files diff --git a/conda-reqs/chipyard.yaml b/conda-reqs/chipyard.yaml index cbce236b..acd70dcd 100644 --- a/conda-reqs/chipyard.yaml +++ b/conda-reqs/chipyard.yaml @@ -29,6 +29,11 @@ dependencies: - binutils - dromajo # from ucb-bar channel - https://github.com/riscv-boom/dromajo +<<<<<<< HEAD:conda-reqs/chipyard.yaml +======= + - esp-tools # from ucb-bar channel - https://github.com/ucb-bar/esp-tools-feedstock + - firtool # from ucb-bar channel - https://github.com/ucb-bar/firtool-feedstock +>>>>>>> 3e131170 (Update all):conda-requirements-esp-tools.yaml # firemarshal deps - python>=3.8 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 512f5aa3..e830a95a 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 @@ -9,7 +9,11 @@ # To update a single package to the latest version compatible with the version constraints in the source: # conda-lock lock --lockfile conda-requirements-esp-tools-linux-64.conda-lock.yml --update PACKAGE # To re-solve the entire environment, e.g. after changing a version constraint in the source file: +<<<<<<< HEAD:conda-reqs/conda-lock-reqs/conda-requirements-esp-tools-linux-64.conda-lock.yml # conda-lock -f /scratch/buildbot/firesim/target-design/chipyard/conda-requirements-esp-tools.yaml -f /scratch/abejgonza/cy-fix/conda-reqs/chipyard.yaml -f /scratch/abejgonza/cy-fix/conda-reqs/esp-tools.yaml --lockfile conda-requirements-esp-tools-linux-64.conda-lock.yml +======= +# conda-lock -f /scratch/buildbot/firesim/target-design/chipyard/conda-requirements-esp-tools.yaml -f /scratch/abejgonza/cy-circt/conda-requirements-esp-tools.yaml --lockfile conda-requirements-esp-tools-linux-64.conda-lock.yml +>>>>>>> 3e131170 (Update all):conda-requirements-esp-tools-linux-64.conda-lock.yml metadata: channels: - url: ucb-bar @@ -19,13 +23,17 @@ metadata: - url: nodefaults used_env_vars: [] content_hash: - linux-64: 5075908599b7f10581bbf1452b4be082245ad6ac58a589e4d111d2ecd0f96b42 + linux-64: 46faccb4f0f152fc79912dbcd442a9cd0d3378720908f86cd06f3496fd584e06 platforms: - linux-64 sources: - /scratch/buildbot/firesim/target-design/chipyard/conda-requirements-esp-tools.yaml +<<<<<<< HEAD:conda-reqs/conda-lock-reqs/conda-requirements-esp-tools-linux-64.conda-lock.yml - /scratch/abejgonza/cy-fix/conda-reqs/chipyard.yaml - /scratch/abejgonza/cy-fix/conda-reqs/esp-tools.yaml +======= + - /scratch/abejgonza/cy-circt/conda-requirements-esp-tools.yaml +>>>>>>> 3e131170 (Update all):conda-requirements-esp-tools-linux-64.conda-lock.yml package: - category: main dependencies: {} @@ -821,6 +829,18 @@ package: platform: linux-64 url: https://conda.anaconda.org/conda-forge/linux-64/nettle-3.8.1-hc379101_1.tar.bz2 version: 3.8.1 +- category: main + dependencies: + libgcc-ng: '>=12' + hash: + md5: 5be58359dbbf568c1ec0be87e0c6cb1b + sha256: f6c470ba56c43e5f6c75fd28b05256fd8f5d54d76df29c0652496bf3b104ae2b + manager: conda + name: oniguruma + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/oniguruma-6.9.8-h166bdaf_0.tar.bz2 + version: 6.9.8 - category: main dependencies: ca-certificates: '' @@ -1117,6 +1137,23 @@ package: version: 4.6.0 - category: main dependencies: +<<<<<<< HEAD:conda-reqs/conda-lock-reqs/conda-requirements-esp-tools-linux-64.conda-lock.yml +======= + libgcc-ng: '>=12' + libstdcxx-ng: '>=12' + ncurses: '>=6.3,<7.0a0' + hash: + md5: e6019194c1a4915a153c09516dcca08a + sha256: null + manager: conda + name: firtool + optional: false + platform: linux-64 + url: https://conda.anaconda.org/ucb-bar/linux-64/firtool-1.16.0-0_h1234567_g14ac3cb0e.tar.bz2 + version: 1.16.0 +- category: main + dependencies: +>>>>>>> 3e131170 (Update all):conda-requirements-esp-tools-linux-64.conda-lock.yml libgcc-ng: '>=7.5.0' libstdcxx-ng: '>=7.5.0' m4: '' @@ -1149,6 +1186,22 @@ package: version: 12.1.0 - category: main dependencies: +<<<<<<< HEAD:conda-reqs/conda-lock-reqs/conda-requirements-esp-tools-linux-64.conda-lock.yml +======= + libgcc-ng: '>=7.5.0' + oniguruma: '>=6.9.3,<6.10.0a0' + hash: + md5: 8578ae83310b8c9f5717f1aa65054f36 + sha256: 00e69aec19174e61c70b652bb62c77c0947a27d6720bda0cb8d5be654020804a + manager: conda + name: jq + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/jq-1.6-h36c2ea0_1000.tar.bz2 + version: '1.6' +- category: main + dependencies: +>>>>>>> 3e131170 (Update all):conda-requirements-esp-tools-linux-64.conda-lock.yml libopenblas: '>=0.3.21,<1.0a0' hash: md5: d9b7a8639171f6c6fa0a983edabcfe2b @@ -3045,14 +3098,14 @@ package: dependencies: python: '>=3.7' hash: - md5: a3508a0c850745b875de88aea4c40cc5 - sha256: bb6920451dad059ca31581ca6e36c5f1534fad8a8efe869c7eb9c9e3846b4f53 + md5: 6f3fd8c9e0ab504010fb4216d5919c24 + sha256: 7740d6fcd4fffb895a93c765388382b58ea78e005180cee88078eb18e59f7f06 manager: conda name: zipp optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/zipp-3.8.1-pyhd8ed1ab_0.tar.bz2 - version: 3.8.1 + url: https://conda.anaconda.org/conda-forge/noarch/zipp-3.9.0-pyhd8ed1ab_0.tar.bz2 + version: 3.9.0 - category: main dependencies: python: '>=3.6' @@ -4308,17 +4361,27 @@ package: version: 5.10.0 - category: main dependencies: - cryptography: '>=35.0' + cryptography: '>=38.0.0,<39' python: '>=3.6' hash: +<<<<<<< HEAD:conda-reqs/conda-lock-reqs/conda-requirements-esp-tools-linux-64.conda-lock.yml md5: 2e7e3630919d29c8216bfa2cd643d79e sha256: 72af60a6164a380730c00ee996bda265267b53a99662d7ceb2ec6ed47dd74a0b +======= + md5: fbfa0a180d48c800f922a10a114a8632 + sha256: 42f04dded77ac2597108378d62b121697d0e982aba7b20a462a7239030563628 +>>>>>>> 3e131170 (Update all):conda-requirements-esp-tools-linux-64.conda-lock.yml manager: conda name: pyopenssl optional: false platform: linux-64 +<<<<<<< HEAD:conda-reqs/conda-lock-reqs/conda-requirements-esp-tools-linux-64.conda-lock.yml url: https://conda.anaconda.org/conda-forge/noarch/pyopenssl-22.0.0-pyhd8ed1ab_1.tar.bz2 version: 22.0.0 +======= + url: https://conda.anaconda.org/conda-forge/noarch/pyopenssl-22.1.0-pyhd8ed1ab_0.tar.bz2 + version: 22.1.0 +>>>>>>> 3e131170 (Update all):conda-requirements-esp-tools-linux-64.conda-lock.yml - category: main dependencies: pytest: '>=3.6.0' @@ -4879,18 +4942,18 @@ package: pyyaml: '>=5.1' requests: '>=2' ruamel.yaml: '' - setuptools: '' - toml: '' + tomli: '' + toolz: <1.0.0,>=0.12.0 typing-extensions: '' hash: - md5: 2d1c6d733a45b168eef7acc6212109ed - sha256: 023ffdae76edde9f2d3fc6a8696cc8d8a60d61b2b8ae6d951f4e4802e47ef606 + md5: 496c81a0d226177dbabb5fa495fadda9 + sha256: 39b181da4620222ba831dc9570f600753c52bb8f649bfef036d2c79245a4c145 manager: conda name: conda-lock optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/conda-lock-1.1.1-pyhd8ed1ab_0.tar.bz2 - version: 1.1.1 + url: https://conda.anaconda.org/conda-forge/noarch/conda-lock-1.1.3-pyhd8ed1ab_0.tar.bz2 + version: 1.1.3 - category: main dependencies: boto3: '' 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 2caaf372..d6577c5c 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 @@ -9,7 +9,11 @@ # To update a single package to the latest version compatible with the version constraints in the source: # conda-lock lock --lockfile conda-requirements-riscv-tools-linux-64.conda-lock.yml --update PACKAGE # To re-solve the entire environment, e.g. after changing a version constraint in the source file: +<<<<<<< HEAD:conda-reqs/conda-lock-reqs/conda-requirements-riscv-tools-linux-64.conda-lock.yml # conda-lock -f /scratch/buildbot/firesim/target-design/chipyard/conda-requirements-riscv-tools.yaml -f /scratch/abejgonza/cy-fix/conda-reqs/chipyard.yaml -f /scratch/abejgonza/cy-fix/conda-reqs/riscv-tools.yaml --lockfile conda-requirements-riscv-tools-linux-64.conda-lock.yml +======= +# conda-lock -f /scratch/buildbot/firesim/target-design/chipyard/conda-requirements-riscv-tools.yaml -f /scratch/abejgonza/cy-circt/conda-requirements-riscv-tools.yaml --lockfile conda-requirements-riscv-tools-linux-64.conda-lock.yml +>>>>>>> 3e131170 (Update all):conda-requirements-riscv-tools-linux-64.conda-lock.yml metadata: channels: - url: ucb-bar @@ -19,13 +23,17 @@ metadata: - url: nodefaults used_env_vars: [] content_hash: - linux-64: e0eaa8e6d532cfd33d97846ae17a35f71e62c135ff3edb6236f6d8d592b10e7a + linux-64: 6254f362fb6c8b59402fb3d4adb4b1023218ec62be09f7f75dfc5980e3233e50 platforms: - linux-64 sources: - /scratch/buildbot/firesim/target-design/chipyard/conda-requirements-riscv-tools.yaml +<<<<<<< HEAD:conda-reqs/conda-lock-reqs/conda-requirements-riscv-tools-linux-64.conda-lock.yml - /scratch/abejgonza/cy-fix/conda-reqs/chipyard.yaml - /scratch/abejgonza/cy-fix/conda-reqs/riscv-tools.yaml +======= + - /scratch/abejgonza/cy-circt/conda-requirements-riscv-tools.yaml +>>>>>>> 3e131170 (Update all):conda-requirements-riscv-tools-linux-64.conda-lock.yml package: - category: main dependencies: {} @@ -821,6 +829,18 @@ package: platform: linux-64 url: https://conda.anaconda.org/conda-forge/linux-64/nettle-3.8.1-hc379101_1.tar.bz2 version: 3.8.1 +- category: main + dependencies: + libgcc-ng: '>=12' + hash: + md5: 5be58359dbbf568c1ec0be87e0c6cb1b + sha256: f6c470ba56c43e5f6c75fd28b05256fd8f5d54d76df29c0652496bf3b104ae2b + manager: conda + name: oniguruma + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/oniguruma-6.9.8-h166bdaf_0.tar.bz2 + version: 6.9.8 - category: main dependencies: ca-certificates: '' @@ -1117,6 +1137,23 @@ package: version: 4.6.0 - category: main dependencies: +<<<<<<< HEAD:conda-reqs/conda-lock-reqs/conda-requirements-riscv-tools-linux-64.conda-lock.yml +======= + libgcc-ng: '>=12' + libstdcxx-ng: '>=12' + ncurses: '>=6.3,<7.0a0' + hash: + md5: e6019194c1a4915a153c09516dcca08a + sha256: null + manager: conda + name: firtool + optional: false + platform: linux-64 + url: https://conda.anaconda.org/ucb-bar/linux-64/firtool-1.16.0-0_h1234567_g14ac3cb0e.tar.bz2 + version: 1.16.0 +- category: main + dependencies: +>>>>>>> 3e131170 (Update all):conda-requirements-riscv-tools-linux-64.conda-lock.yml libgcc-ng: '>=7.5.0' libstdcxx-ng: '>=7.5.0' m4: '' @@ -1149,6 +1186,22 @@ package: version: 12.1.0 - category: main dependencies: +<<<<<<< HEAD:conda-reqs/conda-lock-reqs/conda-requirements-riscv-tools-linux-64.conda-lock.yml +======= + libgcc-ng: '>=7.5.0' + oniguruma: '>=6.9.3,<6.10.0a0' + hash: + md5: 8578ae83310b8c9f5717f1aa65054f36 + sha256: 00e69aec19174e61c70b652bb62c77c0947a27d6720bda0cb8d5be654020804a + manager: conda + name: jq + optional: false + platform: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/jq-1.6-h36c2ea0_1000.tar.bz2 + version: '1.6' +- category: main + dependencies: +>>>>>>> 3e131170 (Update all):conda-requirements-riscv-tools-linux-64.conda-lock.yml libopenblas: '>=0.3.21,<1.0a0' hash: md5: d9b7a8639171f6c6fa0a983edabcfe2b @@ -3045,14 +3098,14 @@ package: dependencies: python: '>=3.7' hash: - md5: a3508a0c850745b875de88aea4c40cc5 - sha256: bb6920451dad059ca31581ca6e36c5f1534fad8a8efe869c7eb9c9e3846b4f53 + md5: 6f3fd8c9e0ab504010fb4216d5919c24 + sha256: 7740d6fcd4fffb895a93c765388382b58ea78e005180cee88078eb18e59f7f06 manager: conda name: zipp optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/zipp-3.8.1-pyhd8ed1ab_0.tar.bz2 - version: 3.8.1 + url: https://conda.anaconda.org/conda-forge/noarch/zipp-3.9.0-pyhd8ed1ab_0.tar.bz2 + version: 3.9.0 - category: main dependencies: python: '>=3.6' @@ -4308,17 +4361,27 @@ package: version: 5.10.0 - category: main dependencies: - cryptography: '>=35.0' + cryptography: '>=38.0.0,<39' python: '>=3.6' hash: +<<<<<<< HEAD:conda-reqs/conda-lock-reqs/conda-requirements-riscv-tools-linux-64.conda-lock.yml md5: 2e7e3630919d29c8216bfa2cd643d79e sha256: 72af60a6164a380730c00ee996bda265267b53a99662d7ceb2ec6ed47dd74a0b +======= + md5: fbfa0a180d48c800f922a10a114a8632 + sha256: 42f04dded77ac2597108378d62b121697d0e982aba7b20a462a7239030563628 +>>>>>>> 3e131170 (Update all):conda-requirements-riscv-tools-linux-64.conda-lock.yml manager: conda name: pyopenssl optional: false platform: linux-64 +<<<<<<< HEAD:conda-reqs/conda-lock-reqs/conda-requirements-riscv-tools-linux-64.conda-lock.yml url: https://conda.anaconda.org/conda-forge/noarch/pyopenssl-22.0.0-pyhd8ed1ab_1.tar.bz2 version: 22.0.0 +======= + url: https://conda.anaconda.org/conda-forge/noarch/pyopenssl-22.1.0-pyhd8ed1ab_0.tar.bz2 + version: 22.1.0 +>>>>>>> 3e131170 (Update all):conda-requirements-riscv-tools-linux-64.conda-lock.yml - category: main dependencies: pytest: '>=3.6.0' @@ -4879,18 +4942,18 @@ package: pyyaml: '>=5.1' requests: '>=2' ruamel.yaml: '' - setuptools: '' - toml: '' + tomli: '' + toolz: <1.0.0,>=0.12.0 typing-extensions: '' hash: - md5: 2d1c6d733a45b168eef7acc6212109ed - sha256: 023ffdae76edde9f2d3fc6a8696cc8d8a60d61b2b8ae6d951f4e4802e47ef606 + md5: 496c81a0d226177dbabb5fa495fadda9 + sha256: 39b181da4620222ba831dc9570f600753c52bb8f649bfef036d2c79245a4c145 manager: conda name: conda-lock optional: false platform: linux-64 - url: https://conda.anaconda.org/conda-forge/noarch/conda-lock-1.1.1-pyhd8ed1ab_0.tar.bz2 - version: 1.1.1 + url: https://conda.anaconda.org/conda-forge/noarch/conda-lock-1.1.3-pyhd8ed1ab_0.tar.bz2 + version: 1.1.3 - category: main dependencies: boto3: '' diff --git a/conda-requirements-riscv-tools.yaml b/conda-requirements-riscv-tools.yaml index cc7ec901..bbc06729 100644 --- a/conda-requirements-riscv-tools.yaml +++ b/conda-requirements-riscv-tools.yaml @@ -27,6 +27,7 @@ dependencies: - dromajo # from ucb-bar channel - https://github.com/riscv-boom/dromajo - riscv-tools # from ucb-bar channel - https://github.com/ucb-bar/riscv-tools-feedstock + - firtool # from ucb-bar channel - https://github.com/ucb-bar/firtool-feedstock # firemarshal deps - python>=3.8 diff --git a/scripts/dump-mods.py b/scripts/dump-mods.py deleted file mode 100755 index b0b1b8ce..00000000 --- a/scripts/dump-mods.py +++ /dev/null @@ -1,84 +0,0 @@ -#!/usr/bin/env python -import json -import argparse -from typing import List, Optional -# Schema of json emitted by circt -""" -{ - "instance_name": "TestHarness", - "module_name": "TestHarness", - "instances": [ - { - "instance_name": "chiptop", - "module_name": "ChipTop", - "instances": [ - { - "instance_name": "system", - "module_name": "DigitalTop", - "instances": [ ] - }, ... - ] - }, - { - "instance_name": "simdram", - "module_name": "SimDRAM", - "instances": [] - }, - ] -} -""" -def get_modules(js: dict) -> List[str]: - if 'instances' not in js: - return js['module_name'] - else: - mods = [] - for mod in js['instances']: - mods.extend(get_modules(mod)) - return [js['module_name']] + mods -def find_mod_by_name(js: dict, name: str) -> Optional[List[dict]]: - if 'instances' not in js: - return None - else: - mods = [] - for mod in js['instances']: - if mod['module_name'] == name: - mods.append(mod) - other_mods = find_mod_by_name(mod, name) - if other_mods is not None: - mods.extend(other_mods) - return mods -if __name__ == "__main__": - parser = argparse.ArgumentParser(description='Convert circt hierarchy json into DUT and test harness filelists') - parser.add_argument('--hier-json', type=str, required=True, help='path to hierarchy JSON emitted by firtool') - parser.add_argument('--dut-top', type=str, required=True, help='name of the DUT top-level module') - parser.add_argument('--filelist', type=str, required=True, help='input filelist') - parser.add_argument('--build_dir', type=str, required=True, help='build_dir') - parser.add_argument('--dut-mods', type=str, required=True, help='dut mods') - args = parser.parse_args() - with open(args.hier_json) as f: - j = json.load(f) - dut_tops = find_mod_by_name(j, args.dut_top) - assert dut_tops is not None - assert len(dut_tops) == 1 - dut_top = dut_tops[0] - dut_mods = set(get_modules(dut_top)) - tb_mods = set(get_modules(j)) - dut_mods - both_mods = dut_mods.intersection(tb_mods) - #print(dut_mods) - #print(tb_mods) - #print(both_mods) - assert len(both_mods) == 0 - - - with open(args.dut_mods, 'w') as df: - with open(args.filelist) as fl: - for path in fl: - writeOut = True - for dm in dut_mods: - if dm in path: - # don't write - writeOut = False - break - - if writeOut: - df.write(f"{args.build_dir}/{path}") diff --git a/scripts/split-mems-conf.py b/scripts/split-mems-conf.py new file mode 100755 index 00000000..c5946ccf --- /dev/null +++ b/scripts/split-mems-conf.py @@ -0,0 +1,81 @@ +#!/usr/bin/env python + +import json +import argparse +from typing import List, Optional + +# Schema of json emitted by circt +""" +{ + "module_name": "mem_ext", + "depth": 512, + "width": 64, + "masked": true, + "read": false, + "write": false, + "readwrite": true, + "mask_granularity": 8, + "extra_ports": [], + "hierarchy": [ + "TestHarness.ram.srams.mem.mem_ext" + ] +} +""" + +def get_modules(js: dict) -> List[str]: + if 'instances' not in js: + return js['module_name'] + else: + mods = [] + for mod in js['instances']: + mods.extend(get_modules(mod)) + return [js['module_name']] + mods + +def find_mod_by_name(js: dict, name: str) -> Optional[List[dict]]: + if 'instances' not in js: + return None + else: + mods = [] + for mod in js['instances']: + if mod['module_name'] == name: + mods.append(mod) + other_mods = find_mod_by_name(mod, name) + if other_mods is not None: + mods.extend(other_mods) + return mods + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description='Use CIRCT (firtool) smems JSONs to create DUT and test harness smems confs') + parser.add_argument('--in-smems-conf', type=str, required=True, help='') + parser.add_argument('--in-dut-smems-json', type=str, required=True, help='') + parser.add_argument('--in-tb-smems-json', type=str, required=True, help='') + parser.add_argument('--out-dut-smems-conf', type=str, required=True, help='') + parser.add_argument('--out-tb-smems-conf', type=str, required=True, help='') + args = parser.parse_args() + + with open(args.in_smems_conf) as isc: + with open(args.in_dut_smems_json) as idsj: + with open(args.in_tb_smems_json) as itsj: + idsj_data = json.load(idsj) + itsj_data = json.load(itsj) + + dut_mods = set() + for e in idsj_data: + dut_mods.add(e['module_name']) + + tb_mods = set() + for e in itsj_data: + tb_mods.add(e['module_name']) + + with open(args.out_dut_smems_conf, "w") as odsc: + with open(args.out_tb_smems_conf, "w") as otsc: + for l in isc: + sl = l.split() + name = sl[1] + + if name in dut_mods: + odsc.write(l) + elif name in tb_mods: + otsc.write(l) + else: + assert False, "Unable to find smem CONF module in firtool emitted JSON files." diff --git a/scripts/split-module-files.py b/scripts/split-module-files.py new file mode 100755 index 00000000..d68de231 --- /dev/null +++ b/scripts/split-module-files.py @@ -0,0 +1,106 @@ +#!/usr/bin/env python + +import json +import argparse +from typing import List, Optional + +# Schema of json emitted by circt +""" +{ + "instance_name": "TestHarness", + "module_name": "TestHarness", + "instances": [ + { + "instance_name": "chiptop", + "module_name": "ChipTop", + "instances": [ + { + "instance_name": "system", + "module_name": "DigitalTop", + "instances": [ ] + }, ... + ] + }, + { + "instance_name": "simdram", + "module_name": "SimDRAM", + "instances": [] + }, + ] +} +""" + +def get_modules(js: dict) -> List[str]: + if 'instances' not in js: + return js['module_name'] + else: + mods = [] + for mod in js['instances']: + mods.extend(get_modules(mod)) + return [js['module_name']] + mods + +def find_mod_by_name(js: dict, name: str) -> Optional[List[dict]]: + if 'instances' not in js: + return None + else: + mods = [] + for mod in js['instances']: + if mod['module_name'] == name: + mods.append(mod) + other_mods = find_mod_by_name(mod, name) + if other_mods is not None: + mods.extend(other_mods) + return mods + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description='Convert CIRCT (firtool) hierarchy JSON into DUT and test harness filelists') + parser.add_argument('--tb-hier-json', type=str, required=True, help='Path to hierarchy JSON emitted by firtool. Must include DUT as a module.') + parser.add_argument('--dut', type=str, required=True, help='Name of the DUT module.') + parser.add_argument('--out-dut-filelist', type=str, required=True, help='Path to output filelist including all modules under the DUT.') + parser.add_argument('--out-tb-filelist', type=str, required=True, help='Path to output filelist including all modules under the top-most module but not modules under the DUT.') + parser.add_argument('--in-all-filelist', type=str, required=True, help='Path to input filelist that has all modules (relative paths).') + parser.add_argument('--build-dir', type=str, required=True, help='Path to where module sources are located (combined with --in-all-filelist gives the absolute path to module sources).') + args = parser.parse_args() + + with open(args.tb_hier_json) as f: + j = json.load(f) + + dut_tops = find_mod_by_name(j, args.dut) + assert dut_tops is not None + assert len(dut_tops) == 1 + dut_top = dut_tops[0] + + dut_mods = set(get_modules(dut_top)) + tb_mods = set(get_modules(j)) - dut_mods + both_mods = dut_mods.intersection(tb_mods) + assert len(both_mods) == 0 + + with open(args.out_dut_filelist, 'w') as df: + with open(args.in_all_filelist) as fl: + # add paths that correspond to modules to output file + for path in fl: + writeOut = True + for dm in dut_mods: + if dm in path: + # don't write + writeOut = False + break + + # prepend the build directory to get filelist with absolute paths + if writeOut: + df.write(f"{args.build_dir}/{path}") + + with open(args.out_tb_filelist, 'w') as df: + with open(args.in_all_filelist) as fl: + # add paths that correspond to modules to output file + for path in fl: + writeOut = True + for dm in tb_mods: + if dm in path: + # don't write + writeOut = False + break + + # prepend the build directory to get filelist with absolute paths + if writeOut: + df.write(f"{args.build_dir}/{path}") diff --git a/tools/barstools b/tools/barstools index 2635bb4f..cf758898 160000 --- a/tools/barstools +++ b/tools/barstools @@ -1 +1 @@ -Subproject commit 2635bb4f80131ea7355abf18e6fcd06574bd49ab +Subproject commit cf75889804f640eb5f053396974f5a3f6b8372b6 diff --git a/variables.mk b/variables.mk index 11dbf3d6..343a516d 100644 --- a/variables.mk +++ b/variables.mk @@ -153,16 +153,25 @@ SFC_ANNO_FILE ?= $(build_dir)/$(long_name).sfc.anno.json FIRTOOL_MOD_HIER_JSON ?= $(build_dir)/modulehierarchy.json FIRTOOL_TB_MOD_HIER_JSON ?= $(build_dir)/tbmodulehierarchy.json +FIRTOOL_SMEMS_CONF ?= $(build_dir)/$(long_name).mems.conf +FIRTOOL_SMEMS_JSON ?= $(build_dir)/metadata/seq_mems.json +FIRTOOL_TB_SMEMS_JSON ?= $(build_dir)/metadata/tb_seq_mems.json -TOP_SMEMS_CONF ?= $(build_dir)/$(long_name).mems.conf -TOP_SMEMS_FILE ?= $(build_dir)/$(long_name).mems.v -TOP_SMEMS_FIR ?= $(build_dir)/$(long_name).mems.fir +TOP_SMEMS_CONF ?= $(build_dir)/$(long_name).top.mems.conf +TOP_SMEMS_FILE ?= $(build_dir)/$(long_name).top.mems.v +TOP_SMEMS_FIR ?= $(build_dir)/$(long_name).top.mems.fir + +HARNESS_SMEMS_CONF ?= $(build_dir)/$(long_name).harness.mems.conf +HARNESS_SMEMS_FILE ?= $(build_dir)/$(long_name).harness.mems.v +HARNESS_SMEMS_FIR ?= $(build_dir)/$(long_name).harness.mems.fir FIRTOOL_FILELIST ?= $(build_dir)/filelist.f # all module files to include (includes top modules) ALL_MODS_FILELIST ?= $(build_dir)/$(long_name).all.f # top module files to include TOP_MODS_FILELIST ?= $(build_dir)/$(long_name).top.f +# tb module files to include (not including top modules) +TB_MODS_FILELIST ?= $(build_dir)/$(long_name).tb.f BOOTROM_FILES ?= bootrom.rv64.img bootrom.rv32.img BOOTROM_TARGETS ?= $(addprefix $(build_dir)/, $(BOOTROM_FILES))