From e3424f7193286e4c68bbf76c5517e2a5cde290b3 Mon Sep 17 00:00:00 2001 From: abejgonzalez Date: Fri, 3 Mar 2023 16:50:00 -0800 Subject: [PATCH 1/4] Remove chisel-testers submodule --- .github/scripts/check-commit.sh | 2 +- .gitmodules | 3 --- docs/Tools/Chisel-Testers.rst | 7 ------- docs/Tools/index.rst | 1 - tools/chisel-testers | 1 - 5 files changed, 1 insertion(+), 13 deletions(-) delete mode 100644 docs/Tools/Chisel-Testers.rst delete mode 160000 tools/chisel-testers diff --git a/.github/scripts/check-commit.sh b/.github/scripts/check-commit.sh index 11d12599..a9c0300b 100755 --- a/.github/scripts/check-commit.sh +++ b/.github/scripts/check-commit.sh @@ -88,7 +88,7 @@ dir="software" branches=("master" "dev") search -submodules=("DRAMSim2" "axe" "barstools" "chisel-testers" "dsptools" "rocket-dsp-utils" "torture") +submodules=("DRAMSim2" "axe" "barstools" "dsptools" "rocket-dsp-utils" "torture") dir="tools" branches=("master" "dev") search diff --git a/.gitmodules b/.gitmodules index 5d4b8226..82e73819 100644 --- a/.gitmodules +++ b/.gitmodules @@ -31,9 +31,6 @@ [submodule "tools/dsptools"] path = tools/dsptools url = https://github.com/ucb-bar/dsptools.git -[submodule "tools/chisel-testers"] - path = tools/chisel-testers - url = https://github.com/freechipsproject/chisel-testers.git [submodule "generators/sha3"] path = generators/sha3 url = https://github.com/ucb-bar/sha3.git diff --git a/docs/Tools/Chisel-Testers.rst b/docs/Tools/Chisel-Testers.rst deleted file mode 100644 index 9570dd61..00000000 --- a/docs/Tools/Chisel-Testers.rst +++ /dev/null @@ -1,7 +0,0 @@ -Chisel Testers -============================== - -`Chisel Testers `__ is a library for writing tests for Chisel designs. -It provides a Scala API for interacting with a DUT. -It can use multiple backends, including things such as Treadle and Verilator. -See :ref:`Tools/Treadle:Treadle and FIRRTL Interpreter` and :ref:`sw-rtl-sim-intro` for more information on these simulation methods. diff --git a/docs/Tools/index.rst b/docs/Tools/index.rst index fecb2043..88161269 100644 --- a/docs/Tools/index.rst +++ b/docs/Tools/index.rst @@ -11,7 +11,6 @@ The following pages will introduce them, and how we can use them in order to gen Chisel FIRRTL Treadle - Chisel-Testers Dsptools Barstools Dromajo diff --git a/tools/chisel-testers b/tools/chisel-testers deleted file mode 160000 index ce4e027e..00000000 --- a/tools/chisel-testers +++ /dev/null @@ -1 +0,0 @@ -Subproject commit ce4e027e5f3d871df59236b8471ea3e5be40130e From 317e0db4fd996d64d9fd8d0363bf975f7bc59163 Mon Sep 17 00:00:00 2001 From: Abraham Gonzalez Date: Mon, 6 Mar 2023 14:00:20 -0800 Subject: [PATCH 2/4] Config finder `make` target (#1328) * Add config-finder make target * Add recursive functionality * Add config finder to CI * Workaround bash argument limit failures --- .github/workflows/chipyard-full-flow.yml | 13 ++++ common.mk | 16 ++++- docs/Customization/Keys-Traits-Configs.rst | 6 ++ scripts/config-finder.py | 76 ++++++++++++++++++++++ 4 files changed, 110 insertions(+), 1 deletion(-) create mode 100755 scripts/config-finder.py diff --git a/.github/workflows/chipyard-full-flow.yml b/.github/workflows/chipyard-full-flow.yml index 22382571..23bc7152 100644 --- a/.github/workflows/chipyard-full-flow.yml +++ b/.github/workflows/chipyard-full-flow.yml @@ -81,6 +81,19 @@ jobs: export MAKEFLAGS="-j32" ./build-setup.sh -f + run-cfg-finder: + name: run-cfg-finder + needs: [setup-repo] + runs-on: ferry + steps: + - name: Run config finder + run: | + cd ${{ env.REMOTE_WORK_DIR }} + eval "$(conda shell.bash hook)" + source env.sh + cd sims/verilator + make find-config-fragments + run-tutorial: name: run-tutorial needs: [setup-repo] diff --git a/common.mk b/common.mk index b1738926..02c55b16 100644 --- a/common.mk +++ b/common.mk @@ -54,6 +54,7 @@ HELP_COMMANDS += \ " run-tests = run all assembly and benchmark tests" \ " launch-sbt = start sbt terminal" \ " {shutdown,start}-sbt-server = shutdown or start sbt server if using ENABLE_SBT_THIN_CLIENT" \ +" find-config-fragments = list all config. fragments and their locations (recursive up to CONFIG_FRAG_LEVELS=$(CONFIG_FRAG_LEVELS))" ######################################################################################### # include additional subproject make fragments @@ -393,8 +394,21 @@ start-sbt-server: check-thin-client cd $(base_dir) && $(SBT) "exit" ######################################################################################### -# print help text +# print help text (and other help) ######################################################################################### +# helper to add newlines (avoid bash argument too long) +define \n + + +endef + +CONFIG_FRAG_LEVELS ?= 3 +.PHONY: find-config-fragments +find-config-fragments: $(SCALA_SOURCES) + rm -rf /tmp/scala_files.f + @$(foreach file,$(SCALA_SOURCES),echo $(file) >> /tmp/scala_files.f${\n}) + $(base_dir)/scripts/config-finder.py -l $(CONFIG_FRAG_LEVELS) /tmp/scala_files.f + .PHONY: help help: @for line in $(HELP_LINES); do echo "$$line"; done diff --git a/docs/Customization/Keys-Traits-Configs.rst b/docs/Customization/Keys-Traits-Configs.rst index c92ad201..364f31cb 100644 --- a/docs/Customization/Keys-Traits-Configs.rst +++ b/docs/Customization/Keys-Traits-Configs.rst @@ -75,3 +75,9 @@ We can use this config fragment when composing our configs. .. note:: Readers who want more information on the configuration system may be interested in reading :ref:`cdes`. + +Chipyard Config Fragments +------------------------- + +For discoverability, users can run ``make find-config-fragments`` to see a list of config. fragments +(config. fragments that match "class NAME extends CONFIG\n" on a single line and a subset of their children) and their file path in a fully initialized Chipyard repository. diff --git a/scripts/config-finder.py b/scripts/config-finder.py new file mode 100755 index 00000000..a7377939 --- /dev/null +++ b/scripts/config-finder.py @@ -0,0 +1,76 @@ +#!/usr/bin/env python3 + +import argparse +import subprocess +from collections import defaultdict +import re +from copy import deepcopy +import os + +cy_path = os.path.dirname(os.path.dirname(os.path.realpath(__file__))) + +# from https://gist.github.com/angstwad/bf22d1822c38a92ec0a9 +def deep_merge(a: dict, b: dict) -> dict: + """Merge two dicts and return a singular dict""" + result = deepcopy(a) + for bk, bv in b.items(): + av = result.get(bk) + if isinstance(av, dict) and isinstance(bv, dict): + result[bk] = deep_merge(av, bv) + else: + result[bk] = deepcopy(bv) + return result + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description='Pretty print all configs given a filelist of scala files') + parser.add_argument('FILE', type=str, help='Filelist of scala files to search within') + parser.add_argument('-l', '--levels', default=0, type=int, help='Number of levels to recursively look for configs') + args = parser.parse_args() + + files = [] + with open(args.FILE, 'r') as f: + files = f.read().splitlines() + + cmd = ['grep', '-o', r"class \+.* \+extends \+Config"] + files + r = subprocess.run(cmd, check=True, capture_output=True) + + base_file_path_dict = defaultdict(list) + for l in r.stdout.decode("UTF-8").splitlines(): + match = re.match(r"^(.*):class +([a-zA-Z_$][a-zA-Z\d_$]*).* +extends", l) + if match: + base_file_path_dict[match.group(1)].append(match.group(2)) + + levels = [] + for level in range(args.levels): + if level == 0: + # use the base + dict_to_use = base_file_path_dict + else: + # use the level-1 dict + assert len(levels) > 0 + dict_to_use = levels[-1] + + file_path_dict = defaultdict(list) + + for configs in dict_to_use.values(): + for config in configs: + cmd = ['grep', '-o', r"class \+.* \+extends \+" + f"{config}"] + files + r = subprocess.run(cmd, capture_output=True) + + for l in r.stdout.decode("UTF-8").splitlines(): + match = re.match(r"^(.*):class +([a-zA-Z_$][a-zA-Z\d_$]*).* +extends", l) + if match: + file_path_dict[match.group(1)].append(match.group(2)) + + levels.append(file_path_dict) + + final_dict = base_file_path_dict + for dct in levels: + final_dict = deep_merge(final_dict, dct) + + print(f"Finding all one-line config. fragments (up to {args.levels} levels)\n") + for k, v in final_dict.items(): + print(f"{k.replace(cy_path, 'chipyard')}:") + for e in v: + print(f" {e}") + print("") From 2ef3b58cfaa0086859e78a44762ad2c3041ff58d Mon Sep 17 00:00:00 2001 From: joey0320 Date: Mon, 6 Mar 2023 18:12:08 -0800 Subject: [PATCH 3/4] Revert "bump barstools" This reverts commit af2a146397fc83463426f87c575c223e1703f037. --- tools/barstools | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/barstools b/tools/barstools index 39b4af7d..30900965 160000 --- a/tools/barstools +++ b/tools/barstools @@ -1 +1 @@ -Subproject commit 39b4af7da9725acb56ffd809b3679facf7fee6b2 +Subproject commit 30900965f0cc2d5046e2160dd9c700805a8e0542 From 02fd30b2f890ab9b66f77068ee2f1407928afa92 Mon Sep 17 00:00:00 2001 From: joey0320 Date: Mon, 6 Mar 2023 18:26:03 -0800 Subject: [PATCH 4/4] Fix makefile --- common.mk | 14 ++++++++------ vlsi/Makefile | 2 ++ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/common.mk b/common.mk index 02c55b16..3d598552 100644 --- a/common.mk +++ b/common.mk @@ -29,10 +29,6 @@ EXTRA_SIM_SOURCES ?= EXTRA_SIM_REQS ?= ENABLE_CUSTOM_FIRRTL_PASS += $(ENABLE_VLSI_FLOW) - -$(info $$ENABLE_CUSTOM_FIRRTL_PASS is [${ENABLE_CUSTOM_FIRRTL_PASS}]) -$(info $$ENABLE_VLSI_FLOW is [${ENABLE_VLSI_FLOW}]) - #---------------------------------------------------------------------------- HELP_SIMULATION_VARIABLES += \ " EXTRA_SIM_FLAGS = additional runtime simulation flags (passed within +permissive)" \ @@ -165,6 +161,7 @@ SFC_MFC_TARGETS = \ $(GEN_COLLATERAL_DIR) SFC_REPL_SEQ_MEM = --infer-rw --repl-seq-mem -c:$(MODEL):-o:$(SFC_SMEMS_CONF) +MFC_BASE_LOWERING_OPTIONS = emittedLineLength=2048,noAlwaysComb,disallowLocalVariables,verifLabels,locationInfoStyle=wrapInAtSquareBracket # DOC include start: FirrtlCompiler # There are two possible cases for this step. In the first case, SFC @@ -177,13 +174,18 @@ SFC_REPL_SEQ_MEM = --infer-rw --repl-seq-mem -c:$(MODEL):-o:$(SFC_SMEMS_CONF) # hack: lower to low firrtl if Fixed types are found # hack: when using dontTouch, io.cpu annotations are not removed by SFC, # hence we remove them manually by using jq before passing them to firtool -$(SFC_LEVEL) $(EXTRA_FIRRTL_OPTIONS) $(FINAL_ANNO_FILE) &: $(FIRRTL_FILE) $(EXTRA_ANNO_FILE) $(SFC_EXTRA_ANNO_FILE) +$(SFC_LEVEL) $(EXTRA_FIRRTL_OPTIONS) $(FINAL_ANNO_FILE) $(MFC_LOWERING_OPTIONS) &: $(FIRRTL_FILE) $(EXTRA_ANNO_FILE) $(SFC_EXTRA_ANNO_FILE) ifeq (,$(ENABLE_CUSTOM_FIRRTL_PASS)) $(eval SFC_LEVEL := $(if $(shell grep "Fixed<" $(FIRRTL_FILE)), low, none)) $(eval EXTRA_FIRRTL_OPTIONS += $(if $(shell grep "Fixed<" $(FIRRTL_FILE)), $(SFC_REPL_SEQ_MEM),)) else $(eval SFC_LEVEL := low) $(eval EXTRA_FIRRTL_OPTIONS += $(SFC_REPL_SEQ_MEM)) +endif +ifeq (,$(ENABLE_VLSI_FLOW)) + $(eval MFC_LOWERING_OPTIONS = $(MFC_BASE_LOWERING_OPTIONS)) +else + $(eval MFC_LOWERING_OPTIONS = $(MFC_BASE_LOWERING_OPTIONS),disallowPackedArrays) endif if [ $(SFC_LEVEL) = low ]; then jq -s '[.[][]]' $(EXTRA_ANNO_FILE) $(SFC_EXTRA_ANNO_FILE) > $(FINAL_ANNO_FILE); fi if [ $(SFC_LEVEL) = none ]; then cat $(EXTRA_ANNO_FILE) > $(FINAL_ANNO_FILE); fi @@ -215,7 +217,7 @@ $(SFC_MFC_TARGETS) &: $(FIRRTL_FILE) $(FINAL_ANNO_FILE) $(VLOG_SOURCES) $(SFC_LE --disable-annotation-classless \ --disable-annotation-unknown \ --mlir-timing \ - --lowering-options=emittedLineLength=2048,noAlwaysComb,disallowLocalVariables,disallowPackedArrays,verifLabels,locationInfoStyle=wrapInAtSquareBracket \ + --lowering-options=$(MFC_LOWERING_OPTIONS) \ --repl-seq-mem \ --repl-seq-mem-file=$(MFC_SMEMS_CONF) \ --repl-seq-mem-circuit=$(MODEL) \ diff --git a/vlsi/Makefile b/vlsi/Makefile index ab8438d5..f54067e3 100644 --- a/vlsi/Makefile +++ b/vlsi/Makefile @@ -51,6 +51,8 @@ else OBJ_DIR ?= $(vlsi_dir)/$(VLSI_OBJ_DIR)/$(long_name)-$(VLSI_TOP) endif +ENABLE_VLSI_FLOW ?= 1 + ######################################################################################### # general rules #########################################################################################