Skip to content

Commit

Permalink
consider cheetah in the scripts
Browse files Browse the repository at this point in the history
  • Loading branch information
M0stafaRady committed Jan 27, 2025
1 parent dbb4263 commit 5b7e513
Show file tree
Hide file tree
Showing 3 changed files with 114 additions and 63 deletions.
137 changes: 88 additions & 49 deletions cocotb/caravel_cocotb/scripts/verify_cocotb/RunFlow.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,23 +88,13 @@ def set_tag(self):
self.logger.info(f"Run tag: {self.args.tag} ")

def set_paths(self, design_info):
if not os.path.exists(design_info["CARAVEL_ROOT"]) or not os.path.exists(
design_info["MCW_ROOT"]
):
raise NotADirectoryError(
f"CARAVEL_ROOT or MCW_ROOT not a correct directory CARAVEL_ROOT:{design_info['CARAVEL_ROOT']} MCW_ROOT:{design_info['MCW_ROOT']}"
)
if self.args.check_commits:
GitRepoChecker(
design_info["CARAVEL_ROOT"]
) # check repo synced with last commit
GitRepoChecker(
design_info["MCW_ROOT"]
) # check repo synced with last commit
if not os.path.exists(f'{design_info["PDK_ROOT"]}/{design_info["PDK"]}'):
raise NotADirectoryError(
f"PDK_ROOT/PDK is not a directory PDK_ROOT:{design_info['PDK_ROOT']}/{design_info['PDK']}"
)
RUN_PATH = self.args.run_path
SIM_PATH = (
f"{RUN_PATH}/sim"
if self.args.sim_path is None
else f"{self.args.sim_path}/sim"
)
VERILOG_PATH = f"{design_info['MCW_ROOT']}/verilog"
if not os.path.exists(design_info["USER_PROJECT_ROOT"]):
raise NotADirectoryError(
f"USER_PROJECT_ROOT is not a directory USER_PROJECT_ROOT:{design_info['USER_PROJECT_ROOT']}"
Expand All @@ -114,36 +104,76 @@ def set_paths(self, design_info):
GitRepoChecker(
design_info["USER_PROJECT_ROOT"]
) # check repo synced with last commit
Paths = namedtuple(
"Paths",
"CARAVEL_ROOT MCW_ROOT PDK_ROOT PDK CARAVEL_VERILOG_PATH VERILOG_PATH CARAVEL_PATH FIRMWARE_PATH RUN_PATH USER_PROJECT_ROOT SIM_PATH",
)
CARAVEL_VERILOG_PATH = f"{design_info['CARAVEL_ROOT']}/verilog"
VERILOG_PATH = f"{design_info['MCW_ROOT']}/verilog"
CARAVEL_PATH = f"{CARAVEL_VERILOG_PATH}"
if not os.path.exists(f'{design_info["PDK_ROOT"]}/{design_info["PDK"]}'):
raise NotADirectoryError(
f"PDK_ROOT/PDK is not a directory PDK_ROOT:{design_info['PDK_ROOT']}/{design_info['PDK']}"
)
if os.path.exists(f"{design_info['MCW_ROOT']}/verilog/dv/fw"):
FIRMWARE_PATH = f"{design_info['MCW_ROOT']}/verilog/dv/fw"
else:
FIRMWARE_PATH = f"{design_info['MCW_ROOT']}/verilog/dv/firmware"
RUN_PATH = self.args.run_path
SIM_PATH = (
f"{RUN_PATH}/sim"
if self.args.sim_path is None
else f"{self.args.sim_path}/sim"
)
self.paths = Paths(
design_info["CARAVEL_ROOT"],
design_info["MCW_ROOT"],
design_info["PDK_ROOT"],
design_info["PDK"],
CARAVEL_VERILOG_PATH,
VERILOG_PATH,
CARAVEL_PATH,
FIRMWARE_PATH,
RUN_PATH,
design_info["USER_PROJECT_ROOT"],
SIM_PATH,
)

if "CARAVEL_ROOT" in design_info:
if not os.path.exists(design_info["CARAVEL_ROOT"]) or not os.path.exists(
design_info["MCW_ROOT"]
):
raise NotADirectoryError(
f"CARAVEL_ROOT or MCW_ROOT not a correct directory CARAVEL_ROOT:{design_info['CARAVEL_ROOT']} MCW_ROOT:{design_info['MCW_ROOT']}"
)
if self.args.check_commits:
GitRepoChecker(
design_info["CARAVEL_ROOT"]
) # check repo synced with last commit
GitRepoChecker(
design_info["MCW_ROOT"]
) # check repo synced with last commit
Paths = namedtuple(
"Paths",
"CARAVEL_ROOT MCW_ROOT PDK_ROOT PDK CARAVEL_VERILOG_PATH VERILOG_PATH CARAVEL_PATH FIRMWARE_PATH RUN_PATH USER_PROJECT_ROOT SIM_PATH",
)
CARAVEL_VERILOG_PATH = f"{design_info['CARAVEL_ROOT']}/verilog"
CARAVEL_PATH = f"{CARAVEL_VERILOG_PATH}"
self.paths = Paths(
design_info["CARAVEL_ROOT"],
design_info["MCW_ROOT"],
design_info["PDK_ROOT"],
design_info["PDK"],
CARAVEL_VERILOG_PATH,
VERILOG_PATH,
CARAVEL_PATH,
FIRMWARE_PATH,
RUN_PATH,
design_info["USER_PROJECT_ROOT"],
SIM_PATH,
)
elif "CHEETAH_ROOT" in design_info:
Paths = namedtuple(
"Paths",
"CHEETAH_ROOT MCW_ROOT PDK_ROOT PDK RUN_PATH VERILOG_PATH FIRMWARE_PATH USER_PROJECT_ROOT SIM_PATH",
)
if not os.path.exists(design_info["CHEETAH_ROOT"]):
raise NotADirectoryError(
f"CHEETAH_ROOT is not a correct directory CHEETAH_ROOT:{design_info['CHEETAH_ROOT']}"
)
if not os.path.exists(design_info["MCW_ROOT"]):
raise NotADirectoryError(
f"MCW_ROOT is not a correct directory MCW_ROOT:{design_info['MCW_ROOT']}"
)
self.paths = Paths(
design_info["CHEETAH_ROOT"],
design_info["MCW_ROOT"],
design_info["PDK_ROOT"],
design_info["PDK"],
RUN_PATH,
VERILOG_PATH,
FIRMWARE_PATH,
design_info["USER_PROJECT_ROOT"],
SIM_PATH,
)





def set_cpu_type(self):
def_h_file = f"{self.paths.FIRMWARE_PATH}/defs.h"
Expand Down Expand Up @@ -208,13 +238,22 @@ def set_config_script(self, design_info):
design_configs = dict(
clock=self.args.clk, max_err=self.args.maxerr, PDK=self.args.pdk
)
design_configs.update(
dict(
CARAVEL_ROOT=self.paths.CARAVEL_ROOT,
MCW_ROOT=self.paths.MCW_ROOT,
PDK_ROOT=f'{self.paths.PDK_ROOT}/{design_info["PDK"]}',
if "CARAVEL_ROOT" in self.paths._fields:
design_configs.update(
dict(
CARAVEL_ROOT=self.paths.CARAVEL_ROOT,
MCW_ROOT=self.paths.MCW_ROOT,
PDK_ROOT=f'{self.paths.PDK_ROOT}/{design_info["PDK"]}',
)
)
elif "CHEETAH_ROOT" in self.paths._fields:
design_configs.update(
dict(
CHEETAH_ROOT=self.paths.CHEETAH_ROOT,
MCW_ROOT=self.paths.MCW_ROOT,
PDK_ROOT=f'{self.paths.PDK_ROOT}/{design_info["PDK"]}',
)
)
)
with open(new_config_path, "w") as file:
yaml.dump(design_configs, file)

Expand Down
19 changes: 11 additions & 8 deletions cocotb/caravel_cocotb/scripts/verify_cocotb/RunRegression.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,10 +47,13 @@ def set_common_macros(self):
paths_macros = [
f'RUN_PATH=\\"{self.paths.RUN_PATH}\\"',
f'TAG=\\"{self.args.tag}\\"',
f'CARAVEL_ROOT=\\"{self.paths.CARAVEL_ROOT}\\"',
f'MCW_ROOT=\\"{self.paths.MCW_ROOT}\\"',
f'USER_PROJECT_ROOT=\\"{self.paths.USER_PROJECT_ROOT}\\"',
]
if "CARAVEL_ROOT" in self.paths._fields:
paths_macros += [f'CARAVEL_ROOT=\\"{self.paths.CARAVEL_ROOT}\\"']
elif "CHEETAH_ROOT" in self.paths._fields:
paths_macros += [f'CHEETAH_ROOT=\\"{self.paths.CHEETAH_ROOT}\\"']

paths_macros.append(f'SIM_PATH=\\"{self.paths.SIM_PATH}/\\"')
if self.args.pdk != "gf180":
Expand Down Expand Up @@ -326,22 +329,23 @@ def write_command_log(self):
def write_git_log(self):
file_name = f"{self.paths.SIM_PATH}/{self.args.tag}/repos_info.log"
f = open(file_name, "w")
f.write(f"{'#'*4} Caravel repo info {'#'*4}\n")
url = "https://github.com/" + f"{run(f'cd {self.paths.CARAVEL_ROOT};git ls-remote --get-url', stdout=PIPE, stderr=PIPE, universal_newlines=True, shell=True).stdout}".replace(
f.write(f"{'#'*4} {'Caravel' if 'CARAVEL_ROOT' in self.paths._fields else 'Cheetah' if 'CHEETAH_ROOT' in self.paths._fields else None} repo info {'#'*4}\n")
ROOT_REPO = self.paths.CARAVEL_ROOT if "CARAVEL_ROOT" in self.paths._fields else self.paths.CHEETAH_ROOT if "CHEETAH_ROOT" in self.paths._fields else None
url = "https://github.com/" + f"{run(f'cd {ROOT_REPO};git ls-remote --get-url', stdout=PIPE, stderr=PIPE, universal_newlines=True, shell=True).stdout}".replace(
"[email protected]:", ""
).replace(
".git", ""
)
repo = f"Repo: {run(f'cd {self.paths.CARAVEL_ROOT};basename -s .git `git config --get remote.origin.url`', stdout=PIPE, stderr=PIPE, universal_newlines=True, shell=True).stdout} ({url})".replace(
repo = f"Repo: {run(f'cd {ROOT_REPO};basename -s .git `git config --get remote.origin.url`', stdout=PIPE, stderr=PIPE, universal_newlines=True, shell=True).stdout} ({url})".replace(
"\n", " "
)
f.write(f"{repo}\n")
f.write(
f"Branch name: {run(f'cd {self.paths.CARAVEL_ROOT};git symbolic-ref --short HEAD', stdout=PIPE, stderr=PIPE, universal_newlines=True, shell=True).stdout}"
f"Branch name: {run(f'cd {ROOT_REPO};git symbolic-ref --short HEAD', stdout=PIPE, stderr=PIPE, universal_newlines=True, shell=True).stdout}"
)
f.write(
run(
f"cd {self.paths.CARAVEL_ROOT};git show --quiet HEAD",
f"cd {ROOT_REPO};git show --quiet HEAD",
stdout=PIPE,
stderr=PIPE,
universal_newlines=True,
Expand Down Expand Up @@ -490,9 +494,8 @@ def unzip_sdf_files(self):
elif self.args.sim != "GL_SDF":
return
# keep caravel sdf dir
sdf_dir = f"{self.paths.CARAVEL_ROOT}/signoff/{'caravan' if self.args.caravan else 'caravel'}/primetime/sdf"
if self.args.sdfs_dir is None:
pass
sdf_dir = f"{self.paths.CARAVEL_ROOT}/signoff/{'caravan' if self.args.caravan else 'caravel'}/primetime/sdf"
else:
sdf_dir = self.args.sdfs_dir
if isinstance(sdf_dir, list):
Expand Down
21 changes: 15 additions & 6 deletions cocotb/caravel_cocotb/scripts/verify_cocotb/Test.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,10 +78,11 @@ def set_test_macros(self):
) # using debug register in this test isn't needed

def set_user_project(self):
project = "caravel" if "CARAVEL_ROOT" in self.paths._fields else "cheetah" if "CHEETAH_ROOT" in self.paths._fields else None
if self.sim == "RTL":
user_include = f"{self.paths.USER_PROJECT_ROOT}/verilog/includes/includes.rtl.caravel_user_project"
user_include = f"{self.paths.USER_PROJECT_ROOT}/verilog/includes/includes.rtl.{project}_user_project"
else:
user_include = f"{self.paths.USER_PROJECT_ROOT}/verilog/includes/includes.gl.caravel_user_project"
user_include = f"{self.paths.USER_PROJECT_ROOT}/verilog/includes/includes.gl.{project}_user_project"
user_project = f" -f {user_include}"
self.write_includes_file(user_include)
return user_project.replace("\n", "")
Expand Down Expand Up @@ -212,9 +213,14 @@ def set_rerun_script(self):
"replace by cocotb path", self.paths.RUN_PATH
)
rerun_script = rerun_script.replace("replace by mgmt Root", self.paths.MCW_ROOT)
rerun_script = rerun_script.replace(
"replace by caravel Root", self.paths.CARAVEL_ROOT
)
if "CARAVEL_ROOT" in self.paths._fields:
rerun_script = rerun_script.replace(
"replace by caravel Root", self.paths.CARAVEL_ROOT
)
elif "CHEETAH_ROOT" in self.paths._fields:
rerun_script = rerun_script.replace(
"replace by caravel Root", self.paths.CHEETAH_ROOT
)
rerun_script = rerun_script.replace(
"replace by orignal rerun script", f"{self.test_dir}/rerun.py"
)
Expand Down Expand Up @@ -324,7 +330,10 @@ def convert_list_to_include(self, file):
if line and not line.startswith("#"):
# Replace $(VERILOG_PATH) with actual path
line = line.replace("$(VERILOG_PATH)", self.paths.VERILOG_PATH)
line = line.replace("$(CARAVEL_PATH)", self.paths.CARAVEL_PATH)
if "CARAVEL_PATH" in self.paths._fields:
line = line.replace("$(CARAVEL_PATH)", self.paths.CARAVEL_PATH)
elif "CHEETAH_PATH" in self.paths._fields:
line = line.replace("$(CHEETAH_PATH)", self.paths.CHEETAH_PATH)
line = line.replace(
"$(USER_PROJECT_VERILOG)",
f"{self.paths.USER_PROJECT_ROOT}/verilog",
Expand Down

0 comments on commit 5b7e513

Please sign in to comment.