Merge pull request #1859 from ucb-bar/remove_sfc_level
Remove legacy SFC flags
This commit is contained in:
55
common.mk
55
common.mk
@@ -16,10 +16,8 @@ HELP_COMPILATION_VARIABLES += \
|
|||||||
" EXTRA_SIM_LDFLAGS = additional LDFLAGS for building simulators" \
|
" EXTRA_SIM_LDFLAGS = additional LDFLAGS for building simulators" \
|
||||||
" EXTRA_SIM_SOURCES = additional simulation sources needed for simulator" \
|
" EXTRA_SIM_SOURCES = additional simulation sources needed for simulator" \
|
||||||
" EXTRA_SIM_REQS = additional make requirements to build the simulator" \
|
" EXTRA_SIM_REQS = additional make requirements to build the simulator" \
|
||||||
" ENABLE_CUSTOM_FIRRTL_PASS = if set, enable custom firrtl passes (SFC lowers to LowFIRRTL & MFC converts to Verilog)" \
|
|
||||||
" ENABLE_YOSYS_FLOW = if set, add compilation flags to enable the vlsi flow for yosys(tutorial flow)" \
|
" ENABLE_YOSYS_FLOW = if set, add compilation flags to enable the vlsi flow for yosys(tutorial flow)" \
|
||||||
" EXTRA_CHISEL_OPTIONS = additional options to pass to the Chisel compiler" \
|
" EXTRA_CHISEL_OPTIONS = additional options to pass to the Chisel compiler" \
|
||||||
" EXTRA_BASE_FIRRTL_OPTIONS = additional options to pass to the Scala FIRRTL compiler" \
|
|
||||||
" MFC_BASE_LOWERING_OPTIONS = override lowering options to pass to the MLIR FIRRTL compiler" \
|
" MFC_BASE_LOWERING_OPTIONS = override lowering options to pass to the MLIR FIRRTL compiler" \
|
||||||
" ASPECTS = comma separated list of Chisel aspect flows to run (e.x. chipyard.upf.ChipTopUPFAspect)"
|
" ASPECTS = comma separated list of Chisel aspect flows to run (e.x. chipyard.upf.ChipTopUPFAspect)"
|
||||||
|
|
||||||
@@ -161,20 +159,11 @@ define mfc_extra_anno_contents
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
endef
|
endef
|
||||||
define sfc_extra_low_transforms_anno_contents
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"class": "firrtl.stage.RunFirrtlTransformAnnotation",
|
|
||||||
"transform": "tapeout.transforms.ExtraLowTransforms"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
endef
|
|
||||||
export mfc_extra_anno_contents
|
export mfc_extra_anno_contents
|
||||||
export sfc_extra_low_transforms_anno_contents
|
export sfc_extra_low_transforms_anno_contents
|
||||||
$(EXTRA_ANNO_FILE) $(MFC_EXTRA_ANNO_FILE) $(SFC_EXTRA_ANNO_FILE) &: $(ANNO_FILE)
|
$(FINAL_ANNO_FILE) $(MFC_EXTRA_ANNO_FILE) &: $(ANNO_FILE)
|
||||||
echo "$$mfc_extra_anno_contents" > $(MFC_EXTRA_ANNO_FILE)
|
echo "$$mfc_extra_anno_contents" > $(MFC_EXTRA_ANNO_FILE)
|
||||||
echo "$$sfc_extra_low_transforms_anno_contents" > $(SFC_EXTRA_ANNO_FILE)
|
jq -s '[.[][]]' $(ANNO_FILE) $(MFC_EXTRA_ANNO_FILE) > $(FINAL_ANNO_FILE)
|
||||||
jq -s '[.[][]]' $(ANNO_FILE) $(MFC_EXTRA_ANNO_FILE) > $(EXTRA_ANNO_FILE)
|
|
||||||
|
|
||||||
.PHONY: firrtl
|
.PHONY: firrtl
|
||||||
firrtl: $(FIRRTL_FILE) $(FINAL_ANNO_FILE)
|
firrtl: $(FIRRTL_FILE) $(FINAL_ANNO_FILE)
|
||||||
@@ -192,30 +181,9 @@ SFC_MFC_TARGETS = \
|
|||||||
$(MFC_BB_MODS_FILELIST) \
|
$(MFC_BB_MODS_FILELIST) \
|
||||||
$(GEN_COLLATERAL_DIR)
|
$(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,disallowPortDeclSharing,locationInfoStyle=wrapInAtSquareBracket
|
MFC_BASE_LOWERING_OPTIONS ?= emittedLineLength=2048,noAlwaysComb,disallowLocalVariables,verifLabels,disallowPortDeclSharing,locationInfoStyle=wrapInAtSquareBracket
|
||||||
|
|
||||||
# DOC include start: FirrtlCompiler
|
# DOC include start: FirrtlCompiler
|
||||||
# There are two possible cases for this step. In the first case, SFC
|
|
||||||
# compiles Chisel to CHIRRTL, and MFC compiles CHIRRTL to Verilog. Otherwise,
|
|
||||||
# when custom FIRRTL transforms are included or if a Fixed type is used within
|
|
||||||
# the dut, SFC compiles Chisel to LowFIRRTL and MFC compiles it to Verilog.
|
|
||||||
# Users can indicate to the Makefile of custom FIRRTL transforms by setting the
|
|
||||||
# "ENABLE_CUSTOM_FIRRTL_PASS" variable.
|
|
||||||
#
|
|
||||||
# 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) &: $(FIRRTL_FILE)
|
|
||||||
ifeq (,$(ENABLE_CUSTOM_FIRRTL_PASS))
|
|
||||||
echo $(if $(shell grep "Fixed<" $(FIRRTL_FILE)), low, none) > $(SFC_LEVEL)
|
|
||||||
echo "$(EXTRA_BASE_FIRRTL_OPTIONS)" $(if $(shell grep "Fixed<" $(FIRRTL_FILE)), "$(SFC_REPL_SEQ_MEM)",) > $(EXTRA_FIRRTL_OPTIONS)
|
|
||||||
else
|
|
||||||
echo low > $(SFC_LEVEL)
|
|
||||||
echo "$(EXTRA_BASE_FIRRTL_OPTIONS)" "$(SFC_REPL_SEQ_MEM)" > $(EXTRA_FIRRTL_OPTIONS)
|
|
||||||
endif
|
|
||||||
|
|
||||||
$(MFC_LOWERING_OPTIONS):
|
$(MFC_LOWERING_OPTIONS):
|
||||||
mkdir -p $(dir $@)
|
mkdir -p $(dir $@)
|
||||||
ifeq (,$(ENABLE_YOSYS_FLOW))
|
ifeq (,$(ENABLE_YOSYS_FLOW))
|
||||||
@@ -224,13 +192,7 @@ else
|
|||||||
echo "$(MFC_BASE_LOWERING_OPTIONS),disallowPackedArrays" > $@
|
echo "$(MFC_BASE_LOWERING_OPTIONS),disallowPackedArrays" > $@
|
||||||
endif
|
endif
|
||||||
|
|
||||||
$(FINAL_ANNO_FILE): $(EXTRA_ANNO_FILE) $(SFC_EXTRA_ANNO_FILE) $(SFC_LEVEL)
|
$(SFC_MFC_TARGETS) &: $(TAPEOUT_CLASSPATH_TARGETS) $(FIRRTL_FILE) $(FINAL_ANNO_FILE) $(MFC_LOWERING_OPTIONS)
|
||||||
if [ $(shell cat $(SFC_LEVEL)) = low ]; then jq -s '[.[][]]' $(EXTRA_ANNO_FILE) $(SFC_EXTRA_ANNO_FILE) > $@; fi
|
|
||||||
if [ $(shell cat $(SFC_LEVEL)) = none ]; then cat $(EXTRA_ANNO_FILE) > $@; fi
|
|
||||||
touch $@
|
|
||||||
|
|
||||||
$(SFC_MFC_TARGETS) &: private TMP_DIR := $(shell mktemp -d -t cy-XXXXXXXX)
|
|
||||||
$(SFC_MFC_TARGETS) &: $(TAPEOUT_CLASSPATH_TARGETS) $(FIRRTL_FILE) $(FINAL_ANNO_FILE) $(SFC_LEVEL) $(EXTRA_FIRRTL_OPTIONS) $(MFC_LOWERING_OPTIONS)
|
|
||||||
rm -rf $(GEN_COLLATERAL_DIR)
|
rm -rf $(GEN_COLLATERAL_DIR)
|
||||||
$(call run_jar_scala_main,$(TAPEOUT_CLASSPATH),tapeout.transforms.GenerateModelStageMain,\
|
$(call run_jar_scala_main,$(TAPEOUT_CLASSPATH),tapeout.transforms.GenerateModelStageMain,\
|
||||||
--no-dedup \
|
--no-dedup \
|
||||||
@@ -240,13 +202,9 @@ $(SFC_MFC_TARGETS) &: $(TAPEOUT_CLASSPATH_TARGETS) $(FIRRTL_FILE) $(FINAL_ANNO_F
|
|||||||
--input-file $(FIRRTL_FILE) \
|
--input-file $(FIRRTL_FILE) \
|
||||||
--annotation-file $(FINAL_ANNO_FILE) \
|
--annotation-file $(FINAL_ANNO_FILE) \
|
||||||
--log-level $(FIRRTL_LOGLEVEL) \
|
--log-level $(FIRRTL_LOGLEVEL) \
|
||||||
--allow-unrecognized-annotations \
|
-X none \
|
||||||
-X $(shell cat $(SFC_LEVEL)) \
|
--allow-unrecognized-annotations)
|
||||||
$(shell cat $(EXTRA_FIRRTL_OPTIONS)))
|
-mv $(SFC_FIRRTL_BASENAME).lo.fir $(SFC_FIRRTL_FILE)
|
||||||
-mv $(SFC_FIRRTL_BASENAME).lo.fir $(SFC_FIRRTL_FILE) 2> /dev/null # Optionally change file type when SFC generates LowFIRRTL
|
|
||||||
@if [ $(shell cat $(SFC_LEVEL)) = low ]; then cat $(SFC_ANNO_FILE) | jq 'del(.[] | select(.target | test("io.cpu"))?)' > $(TMP_DIR)/unnec-anno-deleted.sfc.anno.json; fi
|
|
||||||
@if [ $(shell cat $(SFC_LEVEL)) = low ]; then cat $(TMP_DIR)/unnec-anno-deleted.sfc.anno.json | jq 'del(.[] | select(.class | test("SRAMAnnotation"))?)' > $(TMP_DIR)/unnec-anno-deleted2.sfc.anno.json; fi
|
|
||||||
@if [ $(shell cat $(SFC_LEVEL)) = low ]; then cat $(TMP_DIR)/unnec-anno-deleted2.sfc.anno.json > $(SFC_ANNO_FILE) && rm $(TMP_DIR)/unnec-anno-deleted.sfc.anno.json && rm $(TMP_DIR)/unnec-anno-deleted2.sfc.anno.json; fi
|
|
||||||
firtool \
|
firtool \
|
||||||
--format=fir \
|
--format=fir \
|
||||||
--export-module-hierarchy \
|
--export-module-hierarchy \
|
||||||
@@ -262,7 +220,6 @@ $(SFC_MFC_TARGETS) &: $(TAPEOUT_CLASSPATH_TARGETS) $(FIRRTL_FILE) $(FINAL_ANNO_F
|
|||||||
--split-verilog \
|
--split-verilog \
|
||||||
-o $(GEN_COLLATERAL_DIR) \
|
-o $(GEN_COLLATERAL_DIR) \
|
||||||
$(SFC_FIRRTL_FILE)
|
$(SFC_FIRRTL_FILE)
|
||||||
-mv $(SFC_SMEMS_CONF) $(MFC_SMEMS_CONF) 2> /dev/null
|
|
||||||
$(SED) -i 's/.*/& /' $(MFC_SMEMS_CONF) # need trailing space for SFC macrocompiler
|
$(SED) -i 's/.*/& /' $(MFC_SMEMS_CONF) # need trailing space for SFC macrocompiler
|
||||||
touch $(MFC_BB_MODS_FILELIST) # if there are no BB's then the file might not be generated, instead always generate it
|
touch $(MFC_BB_MODS_FILELIST) # if there are no BB's then the file might not be generated, instead always generate it
|
||||||
# DOC include end: FirrtlCompiler
|
# DOC include end: FirrtlCompiler
|
||||||
|
|||||||
@@ -8,12 +8,9 @@ modify Chisel-elaborated RTL.
|
|||||||
As mentioned in Section :ref:`Tools/FIRRTL:firrtl`, transforms are modifications that happen on the FIRRTL IR that can modify a circuit.
|
As mentioned in Section :ref:`Tools/FIRRTL:firrtl`, transforms are modifications that happen on the FIRRTL IR that can modify a circuit.
|
||||||
Transforms are a powerful tool to take in the FIRRTL IR that is emitted from Chisel and run analysis or convert the circuit into a new form.
|
Transforms are a powerful tool to take in the FIRRTL IR that is emitted from Chisel and run analysis or convert the circuit into a new form.
|
||||||
|
|
||||||
The Scala FIRRTL Compiler and the MLIR FIRRTL Compiler
|
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).
|
In Chipyard, the LLVM-based MLIR FIRRTL compiler (CIRCT or MFC) compiles Chisel into Verilog.
|
||||||
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/.
|
For more information on MLIR FIRRTL Compiler, please visit https://mlir.llvm.org/ and https://circt.llvm.org/.
|
||||||
|
|
||||||
|
|||||||
@@ -170,7 +170,6 @@ TAPEOUT_CLASSPATH_TARGETS ?= $(subst :, ,$(TAPEOUT_CLASSPATH))
|
|||||||
# chisel generated outputs
|
# chisel generated outputs
|
||||||
FIRRTL_FILE ?= $(build_dir)/$(long_name).fir
|
FIRRTL_FILE ?= $(build_dir)/$(long_name).fir
|
||||||
ANNO_FILE ?= $(build_dir)/$(long_name).anno.json
|
ANNO_FILE ?= $(build_dir)/$(long_name).anno.json
|
||||||
EXTRA_ANNO_FILE ?= $(build_dir)/$(long_name).extra.anno.json
|
|
||||||
CHISEL_LOG_FILE ?= $(build_dir)/$(long_name).chisel.log
|
CHISEL_LOG_FILE ?= $(build_dir)/$(long_name).chisel.log
|
||||||
|
|
||||||
# chisel anno modification output
|
# chisel anno modification output
|
||||||
@@ -180,7 +179,6 @@ FINAL_ANNO_FILE ?= $(build_dir)/$(long_name).appended.anno.json
|
|||||||
# scala firrtl compiler (sfc) outputs
|
# scala firrtl compiler (sfc) outputs
|
||||||
SFC_FIRRTL_BASENAME ?= $(build_dir)/$(long_name).sfc
|
SFC_FIRRTL_BASENAME ?= $(build_dir)/$(long_name).sfc
|
||||||
SFC_FIRRTL_FILE ?= $(SFC_FIRRTL_BASENAME).fir
|
SFC_FIRRTL_FILE ?= $(SFC_FIRRTL_BASENAME).fir
|
||||||
SFC_EXTRA_ANNO_FILE ?= $(build_dir)/$(long_name).extrasfc.anno.json
|
|
||||||
SFC_ANNO_FILE ?= $(build_dir)/$(long_name).sfc.anno.json
|
SFC_ANNO_FILE ?= $(build_dir)/$(long_name).sfc.anno.json
|
||||||
|
|
||||||
# firtool compiler outputs
|
# firtool compiler outputs
|
||||||
@@ -195,7 +193,6 @@ MFC_TOP_SMEMS_JSON = $(GEN_COLLATERAL_DIR)/metadata/seq_mems.json
|
|||||||
MFC_MODEL_SMEMS_JSON = $(GEN_COLLATERAL_DIR)/metadata/tb_seq_mems.json
|
MFC_MODEL_SMEMS_JSON = $(GEN_COLLATERAL_DIR)/metadata/tb_seq_mems.json
|
||||||
|
|
||||||
# macrocompiler smems in/output
|
# macrocompiler smems in/output
|
||||||
SFC_SMEMS_CONF ?= $(build_dir)/$(long_name).sfc.mems.conf
|
|
||||||
TOP_SMEMS_CONF ?= $(build_dir)/$(long_name).top.mems.conf
|
TOP_SMEMS_CONF ?= $(build_dir)/$(long_name).top.mems.conf
|
||||||
TOP_SMEMS_FILE ?= $(GEN_COLLATERAL_DIR)/$(long_name).top.mems.v
|
TOP_SMEMS_FILE ?= $(GEN_COLLATERAL_DIR)/$(long_name).top.mems.v
|
||||||
TOP_SMEMS_FIR ?= $(build_dir)/$(long_name).top.mems.fir
|
TOP_SMEMS_FIR ?= $(build_dir)/$(long_name).top.mems.fir
|
||||||
@@ -228,8 +225,6 @@ sim_files ?= $(build_dir)/sim_files.f
|
|||||||
# single file that contains all files needed for VCS or Verilator simulation (unique and without .h's)
|
# single file that contains all files needed for VCS or Verilator simulation (unique and without .h's)
|
||||||
sim_common_files ?= $(build_dir)/sim_files.common.f
|
sim_common_files ?= $(build_dir)/sim_files.common.f
|
||||||
|
|
||||||
SFC_LEVEL ?= $(build_dir)/.sfc_level
|
|
||||||
EXTRA_FIRRTL_OPTIONS ?= $(build_dir)/.extra_firrtl_options
|
|
||||||
MFC_LOWERING_OPTIONS ?= $(build_dir)/.mfc_lowering_options
|
MFC_LOWERING_OPTIONS ?= $(build_dir)/.mfc_lowering_options
|
||||||
|
|
||||||
#########################################################################################
|
#########################################################################################
|
||||||
|
|||||||
Reference in New Issue
Block a user