Rename variables | Small fixes | Move out-srcs to new dir
This commit is contained in:
53
common.mk
53
common.mk
@@ -92,7 +92,7 @@ endif
|
|||||||
#########################################################################################
|
#########################################################################################
|
||||||
# copy over bootrom files
|
# copy over bootrom files
|
||||||
#########################################################################################
|
#########################################################################################
|
||||||
$(build_dir):
|
$(build_dir) $(OUT_DIR):
|
||||||
mkdir -p $@
|
mkdir -p $@
|
||||||
|
|
||||||
$(BOOTROM_TARGETS): $(build_dir)/bootrom.%.img: $(TESTCHIP_RSRCS_DIR)/testchipip/bootrom/bootrom.%.img | $(build_dir)
|
$(BOOTROM_TARGETS): $(build_dir)/bootrom.%.img: $(TESTCHIP_RSRCS_DIR)/testchipip/bootrom/bootrom.%.img | $(build_dir)
|
||||||
@@ -119,11 +119,11 @@ define firtool_extra_anno_contents
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"class": "sifive.enterprise.firrtl.TestHarnessHierarchyAnnotation",
|
"class": "sifive.enterprise.firrtl.TestHarnessHierarchyAnnotation",
|
||||||
"filename": "$(FIRTOOL_TB_MOD_HIER_JSON)"
|
"filename": "$(FIRTOOL_MODEL_HRCHY_JSON)"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"class": "sifive.enterprise.firrtl.ModuleHierarchyAnnotation",
|
"class": "sifive.enterprise.firrtl.ModuleHierarchyAnnotation",
|
||||||
"filename": "$(FIRTOOL_MOD_HIER_JSON)"
|
"filename": "$(FIRTOOL_TOP_HRCHY_JSON)"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
endef
|
endef
|
||||||
@@ -138,7 +138,14 @@ firrtl: $(FIRRTL_FILE) $(FINAL_ANNO_FILE)
|
|||||||
#########################################################################################
|
#########################################################################################
|
||||||
# create verilog files rules and variables
|
# create verilog files rules and variables
|
||||||
#########################################################################################
|
#########################################################################################
|
||||||
CIRCT_TARGETS = $(FIRTOOL_SMEMS_CONF) $(FIRTOOL_MOD_HIER_JSON) $(FIRTOOL_TB_MOD_HIER_JSON) $(FIRTOOL_SMEMS_JSON) $(FIRTOOL_TB_SMEMS_JSON) $(FIRTOOL_FILELIST) $(FIRTOOL_BB_MODS_FILELIST)
|
FIRTOOL_TARGETS = \
|
||||||
|
$(FIRTOOL_SMEMS_CONF) \
|
||||||
|
$(FIRTOOL_TOP_SMEMS_JSON) \
|
||||||
|
$(FIRTOOL_TOP_HRCHY_JSON) \
|
||||||
|
$(FIRTOOL_MODEL_MOD_HRCHY_JSON) \
|
||||||
|
$(FIRTOOL_MODEL_SMEMS_JSON) \
|
||||||
|
$(FIRTOOL_FILELIST) \
|
||||||
|
$(FIRTOOL_BB_MODS_FILELIST)
|
||||||
|
|
||||||
# DOC include start: FirrtlCompiler
|
# DOC include start: FirrtlCompiler
|
||||||
$(TOP_TARGETS) $(HARNESS_TARGETS) &: $(FIRRTL_FILE) $(ANNO_FILE) $(VLOG_SOURCES)
|
$(TOP_TARGETS) $(HARNESS_TARGETS) &: $(FIRRTL_FILE) $(ANNO_FILE) $(VLOG_SOURCES)
|
||||||
@@ -169,19 +176,19 @@ $(CIRCT_TARGETS): firrtl_temp
|
|||||||
@echo "" > /dev/null
|
@echo "" > /dev/null
|
||||||
|
|
||||||
# hack: lower to middle firrtl if Fixed types are found
|
# hack: lower to middle firrtl if Fixed types are found
|
||||||
firrtl_temp: $(FIRRTL_FILE) $(FINAL_ANNO_FILE) $(VLOG_SOURCES)
|
$(FIRTOOL_TARGETS) &: $(FIRRTL_FILE) $(FINAL_ANNO_FILE) $(VLOG_SOURCES)
|
||||||
$(call run_scala_main,tapeout,barstools.tapeout.transforms.GenerateTop,\
|
$(call run_scala_main,tapeout,barstools.tapeout.transforms.GenerateTop,\
|
||||||
--no-dedup \
|
--no-dedup \
|
||||||
--output-file $(SFC_FIRRTL_START) \
|
--output-file $(SFC_FIRRTL_BASENAME) \
|
||||||
--output-annotation-file $(SFC_ANNO_FILE) \
|
--output-annotation-file $(SFC_ANNO_FILE) \
|
||||||
--target-dir $(build_dir) \
|
--target-dir $(OUT_DIR) \
|
||||||
--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 \
|
--allow-unrecognized-annotations \
|
||||||
-X $(if $(shell grep "Fixed<" $(FIRRTL_FILE)),middle,none) \
|
-X $(if $(shell grep "Fixed<" $(FIRRTL_FILE)),middle,none) \
|
||||||
$(EXTRA_FIRRTL_OPTIONS))
|
$(EXTRA_FIRRTL_OPTIONS))
|
||||||
$(if $(shell grep "Fixed<" $(FIRRTL_FILE)),mv $(SFC_FIRRTL_START).mid.fir $(SFC_FIRRTL_FILE),)
|
$(if $(shell grep "Fixed<" $(FIRRTL_FILE)),mv $(SFC_FIRRTL_BASENAME).mid.fir $(SFC_FIRRTL_FILE),)
|
||||||
firtool \
|
firtool \
|
||||||
--export-module-hierarchy \
|
--export-module-hierarchy \
|
||||||
--emit-metadata \
|
--emit-metadata \
|
||||||
@@ -197,30 +204,32 @@ firrtl_temp: $(FIRRTL_FILE) $(FINAL_ANNO_FILE) $(VLOG_SOURCES)
|
|||||||
--repl-seq-mem-circuit=$(MODEL) \
|
--repl-seq-mem-circuit=$(MODEL) \
|
||||||
--repl-seq-mem-file=$(FIRTOOL_SMEMS_CONF) \
|
--repl-seq-mem-file=$(FIRTOOL_SMEMS_CONF) \
|
||||||
--split-verilog \
|
--split-verilog \
|
||||||
-o $(build_dir) \
|
-o $(OUT_DIR) \
|
||||||
$(SFC_FIRRTL_FILE)
|
$(SFC_FIRRTL_FILE)
|
||||||
sed -i 's/.*/& /' $(FIRTOOL_SMEMS_CONF) # need trailing space for SFC macrocompiler
|
sed -i 's/.*/& /' $(FIRTOOL_SMEMS_CONF) # need trailing space for SFC macrocompiler
|
||||||
# DOC include end: FirrtlCompiler
|
# DOC include end: FirrtlCompiler
|
||||||
|
|
||||||
$(TOP_MODS_FILELIST) $(TB_MODS_FILELIST) $(ALL_MODS_FILELIST) $(BB_MODS_FILELIST) &: $(FIRTOOL_TB_MOD_HIER_JSON) $(FIRTOOL_FILELIST) $(FIRTOOL_BB_MODS_FILELIST)
|
$(TOP_MODS_FILELIST) $(MODEL_MODS_FILELIST) $(ALL_MODS_FILELIST) $(BB_MODS_FILELIST) &: $(FIRTOOL_MODEL_MOD_HRCHY_JSON) $(FIRTOOL_FILELIST) $(FIRTOOL_BB_MODS_FILELIST)
|
||||||
$(base_dir)/scripts/split-module-files.py \
|
$(base_dir)/scripts/split-module-files.py \
|
||||||
--tb-hier-json $(FIRTOOL_TB_MOD_HIER_JSON) \
|
--model-hier-json $(FIRTOOL_MODEL_HRCHY_JSON) \
|
||||||
--dut $(TOP) \
|
--dut $(TOP) \
|
||||||
--out-dut-filelist $(TOP_MODS_FILELIST) \
|
--out-dut-filelist $(TOP_MODS_FILELIST) \
|
||||||
--out-tb-filelist $(TB_MODS_FILELIST) \
|
--out-model-filelist $(MODEL_MODS_FILELIST) \
|
||||||
--in-all-filelist $(FIRTOOL_FILELIST) \
|
--in-all-filelist $(FIRTOOL_FILELIST) \
|
||||||
--build-dir $(build_dir)
|
--target-dir $(OUT_DIR)
|
||||||
cat $(TOP_MODS_FILELIST) $(TB_MODS_FILELIST) > $(ALL_MODS_FILELIST)
|
sed -e 's;^;$(OUT_DIR)/;' $(FIRTOOL_BB_MODS_FILELIST) > $(BB_MODS_FILELIST)
|
||||||
sed -i 's/\.\///' $(ALL_MODS_FILELIST)
|
sed -i 's/\.\///' $(TOP_MODS_FILELIST)
|
||||||
sed -e 's;^;$(build_dir)/;' $(FIRTOOL_BB_MODS_FILELIST) > $(BB_MODS_FILELIST)
|
sed -i 's/\.\///' $(MODEL_MODS_FILELIST)
|
||||||
|
sed -i 's/\.\///' $(BB_MODS_FILELIST)
|
||||||
|
sort -u $(TOP_MODS_FILELIST) $(MODEL_MODS_FILELIST) $(BB_MODS_FILELIST) > $(ALL_MODS_FILELIST)
|
||||||
|
|
||||||
$(TOP_SMEMS_CONF) $(HARNESS_SMEMS_CONF) &: $(FIRTOOL_SMEMS_JSON) $(FIRTOOL_TB_SMEMS_JSON) $(FIRTOOL_SMEMS_CONF)
|
$(TOP_SMEMS_CONF) $(HARNESS_SMEMS_CONF) &: $(FIRTOOL_TOP_SMEMS_JSON) $(FIRTOOL_MODEL_SMEMS_JSON) $(FIRTOOL_SMEMS_CONF)
|
||||||
$(base_dir)/scripts/split-mems-conf.py \
|
$(base_dir)/scripts/split-mems-conf.py \
|
||||||
--in-smems-conf $(FIRTOOL_SMEMS_CONF) \
|
--in-smems-conf $(FIRTOOL_SMEMS_CONF) \
|
||||||
--in-dut-smems-json $(FIRTOOL_SMEMS_JSON) \
|
--in-dut-smems-json $(FIRTOOL_TOP_SMEMS_JSON) \
|
||||||
--in-tb-smems-json $(FIRTOOL_TB_SMEMS_JSON) \
|
--in-model-smems-json $(FIRTOOL_MODEL_SMEMS_JSON) \
|
||||||
--out-dut-smems-conf $(TOP_SMEMS_CONF) \
|
--out-dut-smems-conf $(TOP_SMEMS_CONF) \
|
||||||
--out-tb-smems-conf $(HARNESS_SMEMS_CONF)
|
--out-model-smems-conf $(HARNESS_SMEMS_CONF)
|
||||||
|
|
||||||
# This file is for simulation only. VLSI flows should replace this file with one containing hard SRAMs
|
# This file is for simulation only. VLSI flows should replace this file with one containing hard SRAMs
|
||||||
MACROCOMPILER_MODE ?= --mode synflops
|
MACROCOMPILER_MODE ?= --mode synflops
|
||||||
@@ -234,8 +243,8 @@ $(HARNESS_SMEMS_FILE) $(HARNESS_SMEMS_FIR) &: $(HARNESS_SMEMS_CONF) | $(TOP_SMEM
|
|||||||
########################################################################################
|
########################################################################################
|
||||||
# remove duplicate files and headers in list of simulation file inputs
|
# remove duplicate files and headers in list of simulation file inputs
|
||||||
########################################################################################
|
########################################################################################
|
||||||
$(sim_common_files): $(sim_files) $(ALL_MODS_FILELIST) $(BB_MODS_FILELIST) $(TOP_SMEMS_FILE) $(HARNESS_SMEMS_FILE)
|
$(sim_common_files): $(sim_files) $(ALL_MODS_FILELIST) $(TOP_SMEMS_FILE) $(HARNESS_SMEMS_FILE)
|
||||||
sort -u $(sim_files) $(ALL_MODS_FILELIST) $(BB_MODS_FILELIST) | grep -v '.*\.\(svh\|h\)$$' > $@
|
sort -u $(sim_files) $(ALL_MODS_FILELIST) | grep -v '.*\.\(svh\|h\)$$' > $@
|
||||||
echo "$(TOP_SMEMS_FILE)" >> $@
|
echo "$(TOP_SMEMS_FILE)" >> $@
|
||||||
echo "$(HARNESS_SMEMS_FILE)" >> $@
|
echo "$(HARNESS_SMEMS_FILE)" >> $@
|
||||||
|
|
||||||
|
|||||||
@@ -25,41 +25,41 @@ from typing import List, Optional
|
|||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
parser = argparse.ArgumentParser(description='Use CIRCT (firtool) smems JSONs to create DUT and test harness smems confs')
|
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-smems-conf', type=str, required=True, help='Overall smems conf file that contains all memory definitions')
|
||||||
parser.add_argument('--in-dut-smems-json', type=str, required=True, help='')
|
parser.add_argument('--in-dut-smems-json', type=str, required=True, help='JSON indicating which mem modules are in the DUT')
|
||||||
parser.add_argument('--in-tb-smems-json', type=str, required=True, help='')
|
parser.add_argument('--in-model-smems-json', type=str, required=True, help='JSON indicating which mem modules are in the top-most level module (but not in the DUT)')
|
||||||
parser.add_argument('--out-dut-smems-conf', type=str, required=True, help='')
|
parser.add_argument('--out-dut-smems-conf', type=str, required=True, help='Smems conf with only DUT mem module definitions')
|
||||||
parser.add_argument('--out-tb-smems-conf', type=str, required=True, help='')
|
parser.add_argument('--out-model-smems-conf', type=str, required=True, help='Smems conf with only top-most level mem module definitions (not including DUT modules)')
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
with open(args.in_smems_conf) as isc:
|
with open(args.in_smems_conf) as isc, \
|
||||||
with open(args.in_dut_smems_json) as idsj:
|
open(args.in_dut_smems_json) as idsj, \
|
||||||
with open(args.in_tb_smems_json) as itsj:
|
open(args.in_model_smems_json) as itsj:
|
||||||
idsj_data = json.load(idsj)
|
idsj_data = json.load(idsj)
|
||||||
itsj_data = json.load(itsj)
|
itsj_data = json.load(itsj)
|
||||||
|
|
||||||
dut_mods = set()
|
dut_mods = set()
|
||||||
for e in idsj_data:
|
for e in idsj_data:
|
||||||
dut_mods.add(e['module_name'])
|
dut_mods.add(e['module_name'])
|
||||||
|
|
||||||
tb_mods = set()
|
model_mods = set()
|
||||||
for e in itsj_data:
|
for e in itsj_data:
|
||||||
tb_mods.add(e['module_name'])
|
model_mods.add(e['module_name'])
|
||||||
|
|
||||||
with open(args.out_dut_smems_conf, "w") as odsc:
|
with open(args.out_dut_smems_conf, "w") as odsc, \
|
||||||
with open(args.out_tb_smems_conf, "w") as otsc:
|
open(args.out_model_smems_conf, "w") as otsc:
|
||||||
for l in isc:
|
for l in isc:
|
||||||
sl = l.split()
|
sl = l.split()
|
||||||
|
|
||||||
# the line can't be split then stop immediately (normally an empty file)
|
# the line can't be split then stop immediately (normally an empty file)
|
||||||
if len(sl) > 2:
|
if len(sl) > 2:
|
||||||
name = sl[1]
|
name = sl[1]
|
||||||
|
|
||||||
if name in dut_mods:
|
if name in dut_mods:
|
||||||
odsc.write(l)
|
odsc.write(l)
|
||||||
elif name in tb_mods:
|
elif name in model_mods:
|
||||||
otsc.write(l)
|
otsc.write(l)
|
||||||
else:
|
else:
|
||||||
assert False, "Unable to find smem CONF module in firtool emitted JSON files."
|
assert False, "Unable to find smem CONF module in firtool emitted JSON files."
|
||||||
else:
|
else:
|
||||||
exit(0)
|
exit(0)
|
||||||
|
|||||||
@@ -54,15 +54,15 @@ def find_mod_by_name(js: dict, name: str) -> Optional[List[dict]]:
|
|||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
parser = argparse.ArgumentParser(description='Convert CIRCT (firtool) hierarchy JSON into DUT and test harness filelists')
|
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('--model-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('--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-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('--out-model-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('--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).')
|
parser.add_argument('--target-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()
|
args = parser.parse_args()
|
||||||
|
|
||||||
with open(args.tb_hier_json) as f:
|
with open(args.model_hier_json) as f:
|
||||||
j = json.load(f)
|
j = json.load(f)
|
||||||
|
|
||||||
dut_tops = find_mod_by_name(j, args.dut)
|
dut_tops = find_mod_by_name(j, args.dut)
|
||||||
@@ -71,42 +71,41 @@ if __name__ == "__main__":
|
|||||||
dut_top = dut_tops[0]
|
dut_top = dut_tops[0]
|
||||||
|
|
||||||
dut_mods = set(get_modules(dut_top))
|
dut_mods = set(get_modules(dut_top))
|
||||||
tb_mods = set(get_modules(j)) - dut_mods
|
model_mods = set(get_modules(j)) - dut_mods
|
||||||
both_mods = dut_mods.intersection(tb_mods)
|
both_mods = dut_mods.intersection(model_mods)
|
||||||
|
|
||||||
assert len(both_mods) == 0
|
assert len(both_mods) == 0
|
||||||
|
|
||||||
with open(args.out_dut_filelist, 'w') as df:
|
with open(args.out_dut_filelist, 'w') as df, \
|
||||||
with open(args.in_all_filelist) as fl:
|
open(args.in_all_filelist) as fl:
|
||||||
# add paths that correspond to modules to output file
|
# add paths that correspond to modules to output file
|
||||||
for path in fl:
|
for path in fl:
|
||||||
writeOut = False
|
writeOut = False
|
||||||
for dm in dut_mods:
|
for dm in dut_mods:
|
||||||
if dm in path:
|
if dm in path:
|
||||||
writeOut = True
|
writeOut = True
|
||||||
break
|
break
|
||||||
|
|
||||||
# prepend the build directory to get filelist with absolute paths
|
# prepend the target directory to get filelist with absolute paths
|
||||||
if writeOut:
|
if writeOut:
|
||||||
if not args.build_dir in path:
|
if not args.target_dir in path:
|
||||||
df.write(f"{args.build_dir}/{path}")
|
df.write(f"{args.target_dir}/{path}")
|
||||||
else:
|
else:
|
||||||
df.write(f"{path}")
|
df.write(f"{path}")
|
||||||
|
|
||||||
|
with open(args.out_model_filelist, 'w') as df, \
|
||||||
|
open(args.in_all_filelist) as fl:
|
||||||
|
# add paths that correspond to modules to output file
|
||||||
|
for path in fl:
|
||||||
|
writeOut = False
|
||||||
|
for dm in model_mods:
|
||||||
|
if dm in path:
|
||||||
|
writeOut = True
|
||||||
|
break
|
||||||
|
|
||||||
with open(args.out_tb_filelist, 'w') as df:
|
# prepend the target directory to get filelist with absolute paths
|
||||||
with open(args.in_all_filelist) as fl:
|
if writeOut:
|
||||||
# add paths that correspond to modules to output file
|
if not args.target_dir in path:
|
||||||
for path in fl:
|
df.write(f"{args.target_dir}/{path}")
|
||||||
writeOut = False
|
else:
|
||||||
for dm in tb_mods:
|
df.write(f"{path}")
|
||||||
if dm in path:
|
|
||||||
writeOut = True
|
|
||||||
break
|
|
||||||
|
|
||||||
# prepend the build directory to get filelist with absolute paths
|
|
||||||
if writeOut:
|
|
||||||
if not args.build_dir in path:
|
|
||||||
df.write(f"{args.build_dir}/{path}")
|
|
||||||
else:
|
|
||||||
df.write(f"{path}")
|
|
||||||
|
|||||||
@@ -38,13 +38,13 @@ SIM_FILE_REQS += \
|
|||||||
$(ROCKETCHIP_RSRCS_DIR)/vsrc/TestDriver.v
|
$(ROCKETCHIP_RSRCS_DIR)/vsrc/TestDriver.v
|
||||||
|
|
||||||
# copy files but ignore *.h files in *.f since vcs has +incdir+$(build_dir)
|
# copy files but ignore *.h files in *.f since vcs has +incdir+$(build_dir)
|
||||||
$(sim_files): $(SIM_FILE_REQS) | $(build_dir)
|
$(sim_files): $(SIM_FILE_REQS) | $(OUT_DIR)
|
||||||
cp -f $^ $(build_dir)
|
cp -f $^ $(OUT_DIR)
|
||||||
$(foreach file,\
|
$(foreach file,\
|
||||||
$^,\
|
$^,\
|
||||||
$(if $(filter %.h,$(file)),\
|
$(if $(filter %.h,$(file)),\
|
||||||
,\
|
,\
|
||||||
echo "$(addprefix $(build_dir)/, $(notdir $(file)))" >> $@;))
|
echo "$(addprefix $(OUT_DIR)/, $(notdir $(file)))" >> $@;))
|
||||||
|
|
||||||
#########################################################################################
|
#########################################################################################
|
||||||
# import other necessary rules and variables
|
# import other necessary rules and variables
|
||||||
|
|||||||
@@ -66,13 +66,13 @@ SIM_FILE_REQS += \
|
|||||||
$(ROCKETCHIP_RSRCS_DIR)/csrc/remote_bitbang.cc
|
$(ROCKETCHIP_RSRCS_DIR)/csrc/remote_bitbang.cc
|
||||||
|
|
||||||
# copy files and add -FI for *.h files in *.f
|
# copy files and add -FI for *.h files in *.f
|
||||||
$(sim_files): $(SIM_FILE_REQS) | $(build_dir)
|
$(sim_files): $(SIM_FILE_REQS) | $(OUT_DIR)
|
||||||
cp -f $^ $(build_dir)
|
cp -f $^ $(OUT_DIR)
|
||||||
$(foreach file,\
|
$(foreach file,\
|
||||||
$^,\
|
$^,\
|
||||||
$(if $(filter %.h,$(file)),\
|
$(if $(filter %.h,$(file)),\
|
||||||
echo "-FI $(addprefix $(build_dir)/, $(notdir $(file)))" >> $@;,\
|
echo "-FI $(addprefix $(OUT_DIR)/, $(notdir $(file)))" >> $@;,\
|
||||||
echo "$(addprefix $(build_dir)/, $(notdir $(file)))" >> $@;))
|
echo "$(addprefix $(OUT_DIR)/, $(notdir $(file)))" >> $@;))
|
||||||
|
|
||||||
#########################################################################################
|
#########################################################################################
|
||||||
# import other necessary rules and variables
|
# import other necessary rules and variables
|
||||||
@@ -181,7 +181,7 @@ VERILATOR_CXXFLAGS = \
|
|||||||
-DTEST_HARNESS=V$(VLOG_MODEL) \
|
-DTEST_HARNESS=V$(VLOG_MODEL) \
|
||||||
-DVERILATOR \
|
-DVERILATOR \
|
||||||
-include $(build_dir)/$(long_name).plusArgs \
|
-include $(build_dir)/$(long_name).plusArgs \
|
||||||
-include $(build_dir)/verilator.h
|
-include $(OUT_DIR)/verilator.h
|
||||||
|
|
||||||
VERILATOR_LDFLAGS = $(SIM_LDFLAGS)
|
VERILATOR_LDFLAGS = $(SIM_LDFLAGS)
|
||||||
|
|
||||||
|
|||||||
44
variables.mk
44
variables.mk
@@ -143,40 +143,46 @@ ifeq ($(GENERATOR_PACKAGE),hwacha)
|
|||||||
long_name=$(MODEL_PACKAGE).$(CONFIG)
|
long_name=$(MODEL_PACKAGE).$(CONFIG)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# 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
|
||||||
|
|
||||||
|
# chisel anno modification output
|
||||||
FIRTOOL_EXTRA_ANNO_FILE ?= $(build_dir)/$(long_name).extrafirtool.anno.json
|
FIRTOOL_EXTRA_ANNO_FILE ?= $(build_dir)/$(long_name).extrafirtool.anno.json
|
||||||
FINAL_ANNO_FILE ?= $(build_dir)/$(long_name).appended.anno.json
|
FINAL_ANNO_FILE ?= $(build_dir)/$(long_name).appended.anno.json
|
||||||
|
|
||||||
SFC_FIRRTL_FILE ?= $(build_dir)/$(long_name).sfc.fir
|
# scala firrtl compiler (sfc) outputs
|
||||||
SFC_FIRRTL_START ?= $(build_dir)/$(long_name).sfc
|
SFC_FIRRTL_BASENAME ?= $(build_dir)/$(long_name).sfc
|
||||||
|
SFC_FIRRTL_FILE ?= $(SFC_FIRRTL_BASENAME).fir
|
||||||
SFC_ANNO_FILE ?= $(build_dir)/$(long_name).sfc.anno.json
|
SFC_ANNO_FILE ?= $(build_dir)/$(long_name).sfc.anno.json
|
||||||
|
|
||||||
FIRTOOL_MOD_HIER_JSON ?= $(build_dir)/modulehierarchy.json
|
# firtool compiler outputs
|
||||||
FIRTOOL_TB_MOD_HIER_JSON ?= $(build_dir)/tbmodulehierarchy.json
|
FIRTOOL_TOP_HRCHY_JSON ?= $(build_dir)/top_module_hierarchy.json
|
||||||
|
FIRTOOL_MODEL_HRCHY_JSON ?= $(build_dir)/model_module_hierarchy.json
|
||||||
FIRTOOL_SMEMS_CONF ?= $(build_dir)/$(long_name).mems.conf
|
FIRTOOL_SMEMS_CONF ?= $(build_dir)/$(long_name).mems.conf
|
||||||
FIRTOOL_SMEMS_JSON ?= $(build_dir)/metadata/seq_mems.json
|
# hardcoded firtool outputs
|
||||||
FIRTOOL_TB_SMEMS_JSON ?= $(build_dir)/metadata/tb_seq_mems.json
|
FIRTOOL_FILELIST = $(OUT_DIR)/filelist.f
|
||||||
|
FIRTOOL_BB_MODS_FILELIST = $(OUT_DIR)/firrtl_black_box_resource_files.f
|
||||||
|
FIRTOOL_TOP_SMEMS_JSON = $(OUT_DIR)/metadata/seq_mems.json
|
||||||
|
FIRTOOL_MODEL_SMEMS_JSON = $(OUT_DIR)/metadata/tb_seq_mems.json
|
||||||
|
|
||||||
|
# macrocompiler smems in/output
|
||||||
TOP_SMEMS_CONF ?= $(build_dir)/$(long_name).top.mems.conf
|
TOP_SMEMS_CONF ?= $(build_dir)/$(long_name).top.mems.conf
|
||||||
TOP_SMEMS_FILE ?= $(build_dir)/$(long_name).top.mems.v
|
TOP_SMEMS_FILE ?= $(build_dir)/vsrc/$(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
|
||||||
|
|
||||||
HARNESS_SMEMS_CONF ?= $(build_dir)/$(long_name).harness.mems.conf
|
HARNESS_SMEMS_CONF ?= $(build_dir)/$(long_name).harness.mems.conf
|
||||||
HARNESS_SMEMS_FILE ?= $(build_dir)/$(long_name).harness.mems.v
|
HARNESS_SMEMS_FILE ?= $(build_dir)/vsrc/$(long_name).harness.mems.v
|
||||||
HARNESS_SMEMS_FIR ?= $(build_dir)/$(long_name).harness.mems.fir
|
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 module files to include
|
||||||
TOP_MODS_FILELIST ?= $(build_dir)/$(long_name).top.f
|
TOP_MODS_FILELIST ?= $(build_dir)/$(long_name).top.f
|
||||||
# tb module files to include (not including top modules)
|
# model module files to include (not including top modules)
|
||||||
TB_MODS_FILELIST ?= $(build_dir)/$(long_name).tb.f
|
MODEL_MODS_FILELIST ?= $(build_dir)/$(long_name).model.f
|
||||||
# list of all blackbox files (may be included in the top/tb.f files)
|
# list of all blackbox files (may be included in the top/model.f files)
|
||||||
FIRTOOL_BB_MODS_FILELIST ?= $(build_dir)/firrtl_black_box_resource_files.f
|
|
||||||
# this has the build_dir appended
|
# this has the build_dir appended
|
||||||
BB_MODS_FILELIST ?= $(build_dir)/firrtl_black_box_resource_files.final.f
|
BB_MODS_FILELIST ?= $(build_dir)/$(long_name).bb.f
|
||||||
|
# all module files to include (top, model, bb included)
|
||||||
|
ALL_MODS_FILELIST ?= $(build_dir)/$(long_name).all.f
|
||||||
|
|
||||||
BOOTROM_FILES ?= bootrom.rv64.img bootrom.rv32.img
|
BOOTROM_FILES ?= bootrom.rv64.img bootrom.rv32.img
|
||||||
BOOTROM_TARGETS ?= $(addprefix $(build_dir)/, $(BOOTROM_FILES))
|
BOOTROM_TARGETS ?= $(addprefix $(build_dir)/, $(BOOTROM_FILES))
|
||||||
@@ -244,8 +250,12 @@ binary_hex= $(sim_out_name).loadmem_hex
|
|||||||
#########################################################################################
|
#########################################################################################
|
||||||
# build output directory for compilation
|
# build output directory for compilation
|
||||||
#########################################################################################
|
#########################################################################################
|
||||||
|
# output for all project builds
|
||||||
gen_dir=$(sim_dir)/generated-src
|
gen_dir=$(sim_dir)/generated-src
|
||||||
|
# per-project output directory
|
||||||
build_dir=$(gen_dir)/$(long_name)
|
build_dir=$(gen_dir)/$(long_name)
|
||||||
|
# final generated collateral per-project
|
||||||
|
OUT_DIR ?= $(build_dir)/gen-collateral
|
||||||
|
|
||||||
#########################################################################################
|
#########################################################################################
|
||||||
# assembly/benchmark variables
|
# assembly/benchmark variables
|
||||||
|
|||||||
Reference in New Issue
Block a user