From 9ce0467bd3808b133ce8c1eb0b6548bce468b007 Mon Sep 17 00:00:00 2001 From: joey0320 Date: Thu, 20 Apr 2023 14:26:38 -0700 Subject: [PATCH] fixes --- common.mk | 5 ++- scripts/uniqify-module-names.py | 68 ++++++++++++++++----------------- variables.mk | 1 + vlsi/sim.mk | 2 +- 4 files changed, 38 insertions(+), 38 deletions(-) diff --git a/common.mk b/common.mk index ed02a10e..e507140a 100644 --- a/common.mk +++ b/common.mk @@ -248,6 +248,7 @@ $(TOP_MODS_FILELIST) $(MODEL_MODS_FILELIST) $(ALL_MODS_FILELIST) $(BB_MODS_FILEL --mod-filelist $(MODEL_MODS_FILELIST) \ --gen-collateral-path $(GEN_COLLATERAL_DIR) \ --model-hier-json $(MFC_MODEL_HRCHY_JSON) \ + --out-model-hier-json $(MFC_MODEL_HRCHY_JSON_UNIQUIFIED) \ --dut $(TOP) sort -u $(TOP_MODS_FILELIST) $(MODEL_MODS_FILELIST) $(BB_MODS_FILELIST) > $(ALL_MODS_FILELIST) @@ -259,10 +260,10 @@ $(TOP_BB_MODS_FILELIST) $(MODEL_BB_MODS_FILELIST) &: $(BB_MODS_FILELIST) $(MFC_T --out-top-bb-f $(TOP_BB_MODS_FILELIST) \ --out-model-bb-f $(MODEL_BB_MODS_FILELIST) -$(TOP_SMEMS_CONF) $(MODEL_SMEMS_CONF) &: $(MFC_SMEMS_CONF) $(MFC_MODEL_HRCHY_JSON) +$(TOP_SMEMS_CONF) $(MODEL_SMEMS_CONF) &: $(MFC_SMEMS_CONF) $(MFC_MODEL_HRCHY_JSON_UNIQUIFIED) $(base_dir)/scripts/split-mems-conf.py \ --in-smems-conf $(MFC_SMEMS_CONF) \ - --in-model-hrchy-json $(MFC_MODEL_HRCHY_JSON) \ + --in-model-hrchy-json $(MFC_MODEL_HRCHY_JSON_UNIQUIFIED) \ --dut-module-name $(TOP) \ --model-module-name $(MODEL) \ --out-dut-smems-conf $(TOP_SMEMS_CONF) \ diff --git a/scripts/uniqify-module-names.py b/scripts/uniqify-module-names.py index d6fd6929..858c0a19 100755 --- a/scripts/uniqify-module-names.py +++ b/scripts/uniqify-module-names.py @@ -5,7 +5,7 @@ import argparse import shutil import os import sh - +import datetime parser = argparse.ArgumentParser(description="") @@ -13,28 +13,35 @@ parser.add_argument("--top-filelist", type=str, required=True, help="Abs path to parser.add_argument("--mod-filelist", type=str, required=True, help="Abs path to ..model.f") parser.add_argument("--gen-collateral-path", dest="gcpath", type=str, required=True, help="Abs path to the gen-collateral directory") 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("--out-model-hier-json", type=str, required=True, help="Path to updated hierarchy JSON emitted by this script.") parser.add_argument('--dut', type=str, required=True, help='Name of the DUT module.') args = parser.parse_args() +MODEL_SFX=str(datetime.date.today().year) + +def bash(cmd): + fail = os.system(cmd) + if fail: + print(f'[*] failed to execute {cmd}') + sys.exit(1) + else: + print(cmd) + def get_filelist(filelist): - f = open(filelist, "r") - lines = f.readlines() - f.close() - fnames = [] - for line in lines: - try: - fname = line.split("/")[-1].replace("\n", "") - fnames.append(fname) - except: - print(f"Something is wrong about this line {line}") - + with open(filelist) as f: + lines = f.readlines() + for line in lines: + try: + fname = line.split("/")[-1].strip() + fnames.append(fname) + except: + print(f"Something is wrong about this line '{line}'") return fnames def update_filelist(cur_file, new_file): - sh.sed("-i", f"s/\b{cur_file}\b/{new_file}/", os.path.join(args.gcpath, args.mod_filelist)) - + bash(f"echo \"{args.gcpath}/{new_file}\" >> {os.path.join(args.gcpath, args.mod_filelist)}") def generate_copy(c, sfx): (cur_name, ext) = os.path.splitext(c) @@ -45,23 +52,20 @@ def generate_copy(c, sfx): new_file = os.path.join(args.gcpath, new_file) shutil.copy(cur_file, new_file) - sh.sed("-i", f"s/\b{cur_name}\b/{new_name}/", new_file) + bash(f"sed -i s/\"module {cur_name}\"/\"module {new_name}\"/ {new_file}") return new_file - - -def dfs_update_modules(tree, common_fnames, visited, top_fnames, updated_modules): +def dfs_update_modules(tree, common_fnames, visited, top_fnames): # List of direct submodules to update childs_to_update = list() for child in tree['instances']: # We don't have to change stuff that are under the dut if (child['module_name'] == args.dut) or (child['module_name'] in visited): continue - if dfs_update_modules(child, common_fnames, visited, top_fnames, updated_modules): + if dfs_update_modules(child, common_fnames, visited, top_fnames): childs_to_update.append(child['module_name']) if (child['module_name'] + ".sv") in common_fnames: - child['module_name'] = child['module_name'] + "_Model" - updated_modules.append(child['module_name']) + child['module_name'] = child['module_name'] + "_" + MODEL_SFX cur_module = tree['module_name'] cur_file = cur_module + ".sv" @@ -69,7 +73,7 @@ def dfs_update_modules(tree, common_fnames, visited, top_fnames, updated_modules # cur_file is in the common list, generate a new file if cur_file in common_fnames: - new_file = generate_copy(cur_file, "Model") + new_file = generate_copy(cur_file, MODEL_SFX) update_filelist(cur_file, os.path.basename(new_file)) # has some child to update, but new_file wasn't generated @@ -78,29 +82,23 @@ def dfs_update_modules(tree, common_fnames, visited, top_fnames, updated_modules for submodule_name in childs_to_update: if (submodule_name + ".sv") in common_fnames: - sh.sed("-i", f"s/\b{submodule_name}\b/{submodule_name}_Model/", new_file) + bash(f"sed -i s/\"{submodule_name}\"/\"{submodule_name}_{MODEL_SFX}\"/ {new_file}") visited.add(cur_module) return (new_file is not None) - def main(): top_fnames = set(get_filelist(args.top_filelist)) mod_fnames = set(get_filelist(args.mod_filelist)) common_fnames = top_fnames.intersection(mod_fnames) - imhj = open(args.model_hier_json, "r") - imhj_data = json.load(imhj) - - visited = set() - updated_modules = list() - dfs_update_modules(imhj_data, common_fnames, visited, top_fnames, updated_modules) - - out_file = open(args.model_hier_json, "w") - json.dump(imhj_data, out_file, indent=2) - out_file.close() - + with open(args.model_hier_json) as imhj: + imhj_data = json.load(imhj) + with open(args.out_model_hier_json, "w+") as out_file: + visited = set() + dfs_update_modules(imhj_data, common_fnames, visited, top_fnames) + json.dump(imhj_data, out_file, indent=2) if __name__ == "__main__": main() diff --git a/variables.mk b/variables.mk index eb9620f2..1f659ac7 100644 --- a/variables.mk +++ b/variables.mk @@ -162,6 +162,7 @@ SFC_ANNO_FILE ?= $(build_dir)/$(long_name).sfc.anno.json # firtool compiler outputs MFC_TOP_HRCHY_JSON ?= $(build_dir)/top_module_hierarchy.json MFC_MODEL_HRCHY_JSON ?= $(build_dir)/model_module_hierarchy.json +MFC_MODEL_HRCHY_JSON_UNIQUIFIED ?= $(build_dir)/model_module_hierarchy.uniquified.json MFC_SMEMS_CONF ?= $(build_dir)/$(long_name).mems.conf # hardcoded firtool outputs MFC_FILELIST = $(GEN_COLLATERAL_DIR)/filelist.f diff --git a/vlsi/sim.mk b/vlsi/sim.mk index 1f5b530d..13a7fcc3 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 $$(comm -23 <(cat $(MODEL_MODS_FILELIST) $(MODEL_BB_MODS_FILELIST) | sort -u) <(sort $(VLSI_RTL))) $(MODEL_SMEMS_FILE) $(SIM_FILE_REQS); do \ + for x in $$(cat $(MODEL_MODS_FILELIST) $(MODEL_BB_MODS_FILELIST) | sort -u) $(MODEL_SMEMS_FILE) $(SIM_FILE_REQS); do \ echo ' - "'$$x'"' >> $@; \ done echo " input_files_meta: 'append'" >> $@