Skip to content

Commit 057786c

Browse files
author
M0stafaRady
committed
changes needed to add frigate to the flow
1 parent dbb4263 commit 057786c

File tree

4 files changed

+136
-80
lines changed

4 files changed

+136
-80
lines changed

cocotb/caravel_cocotb/scripts/verify_cocotb/RunFlow.py

Lines changed: 88 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -88,23 +88,13 @@ def set_tag(self):
8888
self.logger.info(f"Run tag: {self.args.tag} ")
8989

9090
def set_paths(self, design_info):
91-
if not os.path.exists(design_info["CARAVEL_ROOT"]) or not os.path.exists(
92-
design_info["MCW_ROOT"]
93-
):
94-
raise NotADirectoryError(
95-
f"CARAVEL_ROOT or MCW_ROOT not a correct directory CARAVEL_ROOT:{design_info['CARAVEL_ROOT']} MCW_ROOT:{design_info['MCW_ROOT']}"
96-
)
97-
if self.args.check_commits:
98-
GitRepoChecker(
99-
design_info["CARAVEL_ROOT"]
100-
) # check repo synced with last commit
101-
GitRepoChecker(
102-
design_info["MCW_ROOT"]
103-
) # check repo synced with last commit
104-
if not os.path.exists(f'{design_info["PDK_ROOT"]}/{design_info["PDK"]}'):
105-
raise NotADirectoryError(
106-
f"PDK_ROOT/PDK is not a directory PDK_ROOT:{design_info['PDK_ROOT']}/{design_info['PDK']}"
107-
)
91+
RUN_PATH = self.args.run_path
92+
SIM_PATH = (
93+
f"{RUN_PATH}/sim"
94+
if self.args.sim_path is None
95+
else f"{self.args.sim_path}/sim"
96+
)
97+
VERILOG_PATH = f"{design_info['MCW_ROOT']}/verilog"
10898
if not os.path.exists(design_info["USER_PROJECT_ROOT"]):
10999
raise NotADirectoryError(
110100
f"USER_PROJECT_ROOT is not a directory USER_PROJECT_ROOT:{design_info['USER_PROJECT_ROOT']}"
@@ -114,36 +104,76 @@ def set_paths(self, design_info):
114104
GitRepoChecker(
115105
design_info["USER_PROJECT_ROOT"]
116106
) # check repo synced with last commit
117-
Paths = namedtuple(
118-
"Paths",
119-
"CARAVEL_ROOT MCW_ROOT PDK_ROOT PDK CARAVEL_VERILOG_PATH VERILOG_PATH CARAVEL_PATH FIRMWARE_PATH RUN_PATH USER_PROJECT_ROOT SIM_PATH",
120-
)
121-
CARAVEL_VERILOG_PATH = f"{design_info['CARAVEL_ROOT']}/verilog"
122-
VERILOG_PATH = f"{design_info['MCW_ROOT']}/verilog"
123-
CARAVEL_PATH = f"{CARAVEL_VERILOG_PATH}"
107+
if not os.path.exists(f'{design_info["PDK_ROOT"]}/{design_info["PDK"]}'):
108+
raise NotADirectoryError(
109+
f"PDK_ROOT/PDK is not a directory PDK_ROOT:{design_info['PDK_ROOT']}/{design_info['PDK']}"
110+
)
124111
if os.path.exists(f"{design_info['MCW_ROOT']}/verilog/dv/fw"):
125112
FIRMWARE_PATH = f"{design_info['MCW_ROOT']}/verilog/dv/fw"
126113
else:
127114
FIRMWARE_PATH = f"{design_info['MCW_ROOT']}/verilog/dv/firmware"
128-
RUN_PATH = self.args.run_path
129-
SIM_PATH = (
130-
f"{RUN_PATH}/sim"
131-
if self.args.sim_path is None
132-
else f"{self.args.sim_path}/sim"
133-
)
134-
self.paths = Paths(
135-
design_info["CARAVEL_ROOT"],
136-
design_info["MCW_ROOT"],
137-
design_info["PDK_ROOT"],
138-
design_info["PDK"],
139-
CARAVEL_VERILOG_PATH,
140-
VERILOG_PATH,
141-
CARAVEL_PATH,
142-
FIRMWARE_PATH,
143-
RUN_PATH,
144-
design_info["USER_PROJECT_ROOT"],
145-
SIM_PATH,
146-
)
115+
116+
if "CARAVEL_ROOT" in design_info:
117+
if not os.path.exists(design_info["CARAVEL_ROOT"]) or not os.path.exists(
118+
design_info["MCW_ROOT"]
119+
):
120+
raise NotADirectoryError(
121+
f"CARAVEL_ROOT or MCW_ROOT not a correct directory CARAVEL_ROOT:{design_info['CARAVEL_ROOT']} MCW_ROOT:{design_info['MCW_ROOT']}"
122+
)
123+
if self.args.check_commits:
124+
GitRepoChecker(
125+
design_info["CARAVEL_ROOT"]
126+
) # check repo synced with last commit
127+
GitRepoChecker(
128+
design_info["MCW_ROOT"]
129+
) # check repo synced with last commit
130+
Paths = namedtuple(
131+
"Paths",
132+
"CARAVEL_ROOT MCW_ROOT PDK_ROOT PDK CARAVEL_VERILOG_PATH VERILOG_PATH CARAVEL_PATH FIRMWARE_PATH RUN_PATH USER_PROJECT_ROOT SIM_PATH",
133+
)
134+
CARAVEL_VERILOG_PATH = f"{design_info['CARAVEL_ROOT']}/verilog"
135+
CARAVEL_PATH = f"{CARAVEL_VERILOG_PATH}"
136+
self.paths = Paths(
137+
design_info["CARAVEL_ROOT"],
138+
design_info["MCW_ROOT"],
139+
design_info["PDK_ROOT"],
140+
design_info["PDK"],
141+
CARAVEL_VERILOG_PATH,
142+
VERILOG_PATH,
143+
CARAVEL_PATH,
144+
FIRMWARE_PATH,
145+
RUN_PATH,
146+
design_info["USER_PROJECT_ROOT"],
147+
SIM_PATH,
148+
)
149+
elif "FRIGATE_ROOT" in design_info:
150+
Paths = namedtuple(
151+
"Paths",
152+
"FRIGATE_ROOT MCW_ROOT PDK_ROOT PDK RUN_PATH VERILOG_PATH FIRMWARE_PATH USER_PROJECT_ROOT SIM_PATH",
153+
)
154+
if not os.path.exists(design_info["FRIGATE_ROOT"]):
155+
raise NotADirectoryError(
156+
f"FRIGATE_ROOT is not a correct directory FRIGATE_ROOT:{design_info['FRIGATE_ROOT']}"
157+
)
158+
if not os.path.exists(design_info["MCW_ROOT"]):
159+
raise NotADirectoryError(
160+
f"MCW_ROOT is not a correct directory MCW_ROOT:{design_info['MCW_ROOT']}"
161+
)
162+
self.paths = Paths(
163+
design_info["FRIGATE_ROOT"],
164+
design_info["MCW_ROOT"],
165+
design_info["PDK_ROOT"],
166+
design_info["PDK"],
167+
RUN_PATH,
168+
VERILOG_PATH,
169+
FIRMWARE_PATH,
170+
design_info["USER_PROJECT_ROOT"],
171+
SIM_PATH,
172+
)
173+
174+
175+
176+
147177

148178
def set_cpu_type(self):
149179
def_h_file = f"{self.paths.FIRMWARE_PATH}/defs.h"
@@ -208,13 +238,22 @@ def set_config_script(self, design_info):
208238
design_configs = dict(
209239
clock=self.args.clk, max_err=self.args.maxerr, PDK=self.args.pdk
210240
)
211-
design_configs.update(
212-
dict(
213-
CARAVEL_ROOT=self.paths.CARAVEL_ROOT,
214-
MCW_ROOT=self.paths.MCW_ROOT,
215-
PDK_ROOT=f'{self.paths.PDK_ROOT}/{design_info["PDK"]}',
241+
if "CARAVEL_ROOT" in self.paths._fields:
242+
design_configs.update(
243+
dict(
244+
CARAVEL_ROOT=self.paths.CARAVEL_ROOT,
245+
MCW_ROOT=self.paths.MCW_ROOT,
246+
PDK_ROOT=f'{self.paths.PDK_ROOT}/{design_info["PDK"]}',
247+
)
248+
)
249+
elif "FRIGATE_ROOT" in self.paths._fields:
250+
design_configs.update(
251+
dict(
252+
FRIGATE_ROOT=self.paths.FRIGATE_ROOT,
253+
MCW_ROOT=self.paths.MCW_ROOT,
254+
PDK_ROOT=f'{self.paths.PDK_ROOT}/{design_info["PDK"]}',
255+
)
216256
)
217-
)
218257
with open(new_config_path, "w") as file:
219258
yaml.dump(design_configs, file)
220259

cocotb/caravel_cocotb/scripts/verify_cocotb/RunRegression.py

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,13 @@ def set_common_macros(self):
4747
paths_macros = [
4848
f'RUN_PATH=\\"{self.paths.RUN_PATH}\\"',
4949
f'TAG=\\"{self.args.tag}\\"',
50-
f'CARAVEL_ROOT=\\"{self.paths.CARAVEL_ROOT}\\"',
5150
f'MCW_ROOT=\\"{self.paths.MCW_ROOT}\\"',
5251
f'USER_PROJECT_ROOT=\\"{self.paths.USER_PROJECT_ROOT}\\"',
5352
]
53+
if "CARAVEL_ROOT" in self.paths._fields:
54+
paths_macros += [f'CARAVEL_ROOT=\\"{self.paths.CARAVEL_ROOT}\\"']
55+
elif "FRIGATE_ROOT" in self.paths._fields:
56+
paths_macros += [f'FRIGATE_ROOT=\\"{self.paths.FRIGATE_ROOT}\\"']
5457

5558
paths_macros.append(f'SIM_PATH=\\"{self.paths.SIM_PATH}/\\"')
5659
if self.args.pdk != "gf180":
@@ -327,21 +330,22 @@ def write_git_log(self):
327330
file_name = f"{self.paths.SIM_PATH}/{self.args.tag}/repos_info.log"
328331
f = open(file_name, "w")
329332
f.write(f"{'#'*4} Caravel repo info {'#'*4}\n")
330-
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(
333+
ROOT_REPO = self.paths.CARAVEL_ROOT if "CARAVEL_ROOT" in self.paths._fields else self.paths.FRIGATE_ROOT if "FRIGATE_ROOT" in self.paths._fields else None
334+
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(
331335
332336
).replace(
333337
".git", ""
334338
)
335-
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(
339+
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(
336340
"\n", " "
337341
)
338342
f.write(f"{repo}\n")
339343
f.write(
340-
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}"
344+
f"Branch name: {run(f'cd {ROOT_REPO};git symbolic-ref --short HEAD', stdout=PIPE, stderr=PIPE, universal_newlines=True, shell=True).stdout}"
341345
)
342346
f.write(
343347
run(
344-
f"cd {self.paths.CARAVEL_ROOT};git show --quiet HEAD",
348+
f"cd {ROOT_REPO};git show --quiet HEAD",
345349
stdout=PIPE,
346350
stderr=PIPE,
347351
universal_newlines=True,
@@ -490,9 +494,8 @@ def unzip_sdf_files(self):
490494
elif self.args.sim != "GL_SDF":
491495
return
492496
# keep caravel sdf dir
493-
sdf_dir = f"{self.paths.CARAVEL_ROOT}/signoff/{'caravan' if self.args.caravan else 'caravel'}/primetime/sdf"
494497
if self.args.sdfs_dir is None:
495-
pass
498+
sdf_dir = f"{self.paths.CARAVEL_ROOT}/signoff/{'caravan' if self.args.caravan else 'caravel'}/primetime/sdf"
496499
else:
497500
sdf_dir = self.args.sdfs_dir
498501
if isinstance(sdf_dir, list):

cocotb/caravel_cocotb/scripts/verify_cocotb/RunTest.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,16 @@ def hex_riscv_command_gen(self):
4545
LINKER_SCRIPT = f"-Wl,-Bstatic,-T,{self.test.linker_script_file},--strip-debug "
4646
CPUFLAGS = "-O2 -g -march=rv32i_zicsr -mabi=ilp32 -D__vexriscv__ -ffreestanding -nostdlib"
4747
# CPUFLAGS = "-O2 -g -march=rv32imc_zicsr -mabi=ilp32 -D__vexriscv__ -ffreestanding -nostdlib"
48+
includes = [
49+
f"-I{ip}" for ip in self.get_ips_fw()
50+
] + [
51+
f"-I{self.paths.FIRMWARE_PATH}",
52+
f"-I{self.paths.FIRMWARE_PATH}/APIs",
53+
f"-I{self.paths.USER_PROJECT_ROOT}/verilog/dv/cocotb",
54+
f"-I{self.paths.VERILOG_PATH}/dv/generated",
55+
f"-I{self.paths.VERILOG_PATH}/dv/",
56+
f"-I{self.paths.VERILOG_PATH}/common/",
57+
]
4858
includes = f" -I{self.paths.FIRMWARE_PATH} -I{self.paths.FIRMWARE_PATH}/APIs -I{self.paths.VERILOG_PATH}/dv/generated -I{self.paths.VERILOG_PATH}/dv/ -I{self.paths.VERILOG_PATH}/common"
4959
includes += f" -I{self.paths.USER_PROJECT_ROOT}/verilog/dv/cocotb {' '.join([f'-I{ip}' for ip in self.get_ips_fw()])}"
5060
elf_command = (
@@ -238,8 +248,6 @@ def _iverilog_docker_command_str(self, command=""):
238248

239249
def find_symbolic_links(self, directory):
240250
sym_links = []
241-
if not os.path.exists(directory):
242-
return sym_links
243251
for root, dirs, files in os.walk(directory):
244252
for dir_name in dirs:
245253
dir_path = os.path.join(root, dir_name)

cocotb/caravel_cocotb/scripts/verify_cocotb/Test.py

Lines changed: 28 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -78,10 +78,11 @@ def set_test_macros(self):
7878
) # using debug register in this test isn't needed
7979

8080
def set_user_project(self):
81+
project = "caravel" if "CARAVEL_ROOT" in self.paths._fields else "frigate" if "FRIGATE_ROOT" in self.paths._fields else None
8182
if self.sim == "RTL":
82-
user_include = f"{self.paths.USER_PROJECT_ROOT}/verilog/includes/includes.rtl.caravel_user_project"
83+
user_include = f"{self.paths.USER_PROJECT_ROOT}/verilog/includes/includes.rtl.{project}_user_project"
8384
else:
84-
user_include = f"{self.paths.USER_PROJECT_ROOT}/verilog/includes/includes.gl.caravel_user_project"
85+
user_include = f"{self.paths.USER_PROJECT_ROOT}/verilog/includes/includes.gl.{project}_user_project"
8586
user_project = f" -f {user_include}"
8687
self.write_includes_file(user_include)
8788
return user_project.replace("\n", "")
@@ -212,9 +213,14 @@ def set_rerun_script(self):
212213
"replace by cocotb path", self.paths.RUN_PATH
213214
)
214215
rerun_script = rerun_script.replace("replace by mgmt Root", self.paths.MCW_ROOT)
215-
rerun_script = rerun_script.replace(
216-
"replace by caravel Root", self.paths.CARAVEL_ROOT
217-
)
216+
if "CARAVEL_ROOT" in self.paths._fields:
217+
rerun_script = rerun_script.replace(
218+
"replace by caravel Root", self.paths.CARAVEL_ROOT
219+
)
220+
elif "FRIGATE_ROOT" in self.paths._fields:
221+
rerun_script = rerun_script.replace(
222+
"replace by caravel Root", self.paths.FRIGATE_ROOT
223+
)
218224
rerun_script = rerun_script.replace(
219225
"replace by orignal rerun script", f"{self.test_dir}/rerun.py"
220226
)
@@ -280,35 +286,32 @@ def write_includes_file(self, file):
280286
paths = self.convert_list_to_include(file)
281287
# write to include file in the top of the file
282288
self.includes_file = f"{self.compilation_dir}/includes.v"
283-
if self.sim == "RTL":
284-
includes = self.convert_list_to_include(
285-
f"{self.paths.VERILOG_PATH}/includes/includes.rtl.caravel"
286-
)
287-
elif self.sim == "GL_SDF":
289+
self.sim_to_include = {
290+
"RTL": "rtl",
291+
"GL_SDF": "gl+sdf",
292+
"GL": "gl",
293+
}
294+
if "CARAVEL_ROOT" in self.paths._fields: # when caravel include file from caravel mgmt
288295
includes = self.convert_list_to_include(
289-
f"{self.paths.VERILOG_PATH}/includes/includes.gl+sdf.caravel"
296+
f"{self.paths.VERILOG_PATH}/includes/includes.{self.sim_to_include[self.sim]}.caravel"
290297
)
291-
elif self.sim == "GL":
298+
elif "FRIGATE_ROOT" in self.paths._fields: # when caravel include file from frigate
292299
includes = self.convert_list_to_include(
293-
f"{self.paths.VERILOG_PATH}/includes/includes.gl.caravel"
300+
f"{self.paths.FRIGATE_ROOT}/verilog/includes/includes.{self.sim_to_include[self.sim]}.frigate"
294301
)
295302
includes = paths + includes
296303
open(self.includes_file, "w").write(includes)
297304
move_defines_to_start(self.includes_file, 'defines.v"')
298305
# copy includes used also
299306
paths = open(file, "r").read()
300307
self.includes_list = f"{self.compilation_dir}/includes"
301-
if self.sim == "RTL":
302-
includes = open(
303-
f"{self.paths.VERILOG_PATH}/includes/includes.rtl.caravel", "r"
304-
).read()
305-
elif self.sim == "GL_SDF":
308+
if "CARAVEL_ROOT" in self.paths._fields: # when caravel include file from caravel mgmt
306309
includes = open(
307-
f"{self.paths.VERILOG_PATH}/includes/includes.gl+sdf.caravel", "r"
310+
f"{self.paths.VERILOG_PATH}/includes/includes.{self.sim_to_include[self.sim]}.caravel", "r"
308311
).read()
309-
elif self.sim == "GL":
312+
elif "FRIGATE_ROOT" in self.paths._fields: # when caravel include file from frigate
310313
includes = open(
311-
f"{self.paths.VERILOG_PATH}/includes/includes.gl.caravel", "r"
314+
f"{self.paths.FRIGATE_ROOT}/verilog/includes/includes.{self.sim_to_include[self.sim]}.frigate", "r"
312315
).read()
313316
includes = paths + includes
314317
open(self.includes_list, "w").write(includes)
@@ -324,7 +327,10 @@ def convert_list_to_include(self, file):
324327
if line and not line.startswith("#"):
325328
# Replace $(VERILOG_PATH) with actual path
326329
line = line.replace("$(VERILOG_PATH)", self.paths.VERILOG_PATH)
327-
line = line.replace("$(CARAVEL_PATH)", self.paths.CARAVEL_PATH)
330+
if "CARAVEL_ROOT" in self.paths._fields:
331+
line = line.replace("$(CARAVEL_PATH)", self.paths.CARAVEL_PATH)
332+
elif "FRIGATE_ROOT" in self.paths._fields:
333+
line = line.replace("$(FRIGATE_VERILOG)", f"{self.paths.FRIGATE_ROOT}/verilog")
328334
line = line.replace(
329335
"$(USER_PROJECT_VERILOG)",
330336
f"{self.paths.USER_PROJECT_ROOT}/verilog",

0 commit comments

Comments
 (0)