From 8ce526c22d872f65af8fd409f42f09be3ff3a2d9 Mon Sep 17 00:00:00 2001 From: "N. Engelhardt" Date: Thu, 10 Mar 2022 17:46:08 +0100 Subject: [PATCH] junit: use write_jny instead of write_json --- sbysrc/sby_core.py | 2 +- sbysrc/sby_design.py | 38 +++++++++++++++++++++++--------------- 2 files changed, 24 insertions(+), 16 deletions(-) diff --git a/sbysrc/sby_core.py b/sbysrc/sby_core.py index 1e96d00e..3908f657 100644 --- a/sbysrc/sby_core.py +++ b/sbysrc/sby_core.py @@ -395,7 +395,7 @@ def print_common_prep(): print(cmd, file=f) # the user must designate a top module in [script] print("hierarchy -simcheck", file=f) - print(f"""write_json ../model/design.json""", file=f) + print(f"""write_jny -no-connections ../model/design.json""", file=f) print(f"""write_rtlil ../model/design.il""", file=f) proc = SbyProc( diff --git a/sbysrc/sby_design.py b/sbysrc/sby_design.py index d18d6d9b..8fc78955 100644 --- a/sbysrc/sby_design.py +++ b/sbysrc/sby_design.py @@ -103,26 +103,34 @@ def design_hierarchy(filename): design_json = json.load(filename) def make_mod_hier(instance_name, module_name, hierarchy=""): # print(instance_name,":", module_name) + sub_hierarchy=f"{hierarchy}/{instance_name}" if hierarchy else instance_name mod = SbyModule(name=instance_name, type=module_name) - cells = design_json["modules"][module_name]["cells"] - for cell_name, cell in cells.items(): - sub_hierarchy=f"{hierarchy}/{instance_name}" if hierarchy else instance_name - if cell["type"][0] != '$' or cell["type"].startswith("$paramod"): - mod.submodules[cell_name] = make_mod_hier(cell_name, cell["type"], hierarchy=sub_hierarchy) - if cell["type"] in ["$assume", "$assert", "$cover", "$live"]: - try: - location = cell["attributes"]["src"] - except KeyError: - location = "" - p = SbyProperty(name=cell_name, type=SbyProperty.Type.from_cell(cell["type"]), location=location, hierarchy=sub_hierarchy) - mod.properties.append(p) + for m in design_json["modules"]: + if m["name"] == module_name: + cell_sorts = m["cell_sorts"] + break + else: + raise ValueError(f"Cannot find module {module_name}") + + for sort in cell_sorts: + if sort["type"] in ["$assume", "$assert", "$cover", "$live"]: + for cell in sort["cells"]: + try: + location = cell["attributes"]["src"] + except KeyError: + location = "" + p = SbyProperty(name=cell["name"], type=SbyProperty.Type.from_cell(sort["type"]), location=location, hierarchy=sub_hierarchy) + mod.properties.append(p) + if sort["type"][0] != '$' or sort["type"].startswith("$paramod"): + for cell in sort["cells"]: + mod.submodules[cell["name"]] = make_mod_hier(cell["name"], sort["type"], hierarchy=sub_hierarchy) return mod - for module_name in design_json["modules"]: - attrs = design_json["modules"][module_name]["attributes"] + for m in design_json["modules"]: + attrs = m["attributes"] if "top" in attrs and int(attrs["top"]) == 1: - hierarchy = make_mod_hier(module_name, module_name) + hierarchy = make_mod_hier(m["name"], m["name"]) return hierarchy else: raise ValueError("Cannot find top module")