初步实现python生成测试用例,并挂接.v文件,无需手工写.v文件

This commit is contained in:
2025-07-30 22:59:06 +08:00
parent 2968b6d546
commit 9cf5346b3d
11 changed files with 359 additions and 24 deletions

View File

@@ -56,7 +56,7 @@ class GenPkt(object):
self.pkt_sub_pkt = self.pkt_sub_pkt + 1
self.sub_pkt.append([0, dev_idx, ptype, addr, cmd, len, data])
def gen(self, filename="pkt_verilog_test.v", filetype=0):
def gen(self, filename="pkt_verilog_test.v", filetype=0, appendgen=False, gen_name=None):
pkt_len = 4
for sp in self.sub_pkt:
if sp[0] != 0:
@@ -155,24 +155,35 @@ class GenPkt(object):
i = i + 1
#print("pkt_len:%d, data_len:%d"%(pkt_len, pkt_len - 4))
f = open(filename, "wt+")
open_mode = "wt+"
if appendgen:
open_mode = "at"
f = open(filename, open_mode)
if filetype == 1:
for md in self.sub_pkt:
if md[0] == 1:
f.write("%s\n"%(md[1],))
define_str = "`define DEF_"
pos1 = filename.rfind("/")
if (pos1 < -1):
pos1 = 0
else:
pos1 = pos1 + 1
if appendgen and (gen_name == None):
print("Error, gen_name not define.")
raise "Error, gen_name not define."
if not appendgen:
pos1 = filename.rfind("/")
if (pos1 < -1):
pos1 = 0
else:
pos1 = pos1 + 1
pos2 = filename.rfind(".")
if (pos1 > pos2):
define_str = define_str + filename[pos1:]
pos2 = filename.rfind(".")
if (pos1 > pos2):
define_str = define_str + filename[pos1:]
else:
define_str = define_str + filename[pos1:pos2]
else:
define_str = define_str + filename[pos1:pos2]
define_str = define_str + gen_name
f.write(define_str + "_len \t%d\n"%(pkt_len))
f.write(define_str + "_sm(array) \\\n\tarray``[%d]=8'h%02X;\\\n\tarray``[%d]=8'h%02X;\n"%(
@@ -329,4 +340,46 @@ def setting_ebmmu_regs(regmap, index, vaddr, raddr, size, p, enable):
regmap[index * 0xa + 7] = (size >> 8) & 0xff
regmap[index * 0xa + 8] = p & 0x3
regmap[index * 0xa + 9] = enable & 0x1
regmap[index * 0xa + 9] = enable & 0x1
__run_list=list()
__pre_include_path='./generated/shin'
__pre_gen_log_path='./generated/log'
def add_tc_2_runlist(filename):
code_f = filename + '.vh'
if code_f in __run_list:
print("Error, Testcase duplicate name")
raise "DUPLICATE NAME"
__run_list.append(code_f)
def gen_tc_runlist():
runlist_file = __pre_include_path + '/tc_runlist.vh'
f = open(runlist_file, "wt+")
for tc in __run_list:
f.write(f'\t`include "{tc}"\n')
f.close()
def genTcStartFrameCode(tcname, des):
upper_name = tcname.upper()
code_str = f'''\tbegin:{upper_name}_TESTCASE\n'''\
+f'''\t\t`BEGIN_TESTCASE("{__pre_gen_log_path}/{tcname}_tc.log");\n'''\
+'''\t\t_t_start = $realtime;\n'''\
+'''\t\t#1000\n'''\
+f'''\t\t$fdisplay(spidata_file,"\\n\\n测试用例{upper_name}");\n'''
if len(des) > 0:
code_str = code_str + '''\t\t$fdisplay(spidata_file,"''' + '-' * 80 + '''");\n'''
code_str = code_str + f'''\t\t$fdisplay(spidata_file,"{des}");\n'''
code_str = code_str + '''\t\t$fdisplay(spidata_file,"''' + '-' * 80 + '''");\n'''
return code_str
def genTcEndFrameCode(tcname):
upper_name = tcname.upper()
return f'''\t\t_t_end = $realtime;\n'''\
+'''\t\t$fdisplay(spidata_file, "该测试用例运行时间:%t\\n", _t_end - _t_start);\n'''\
+f'''\t\t`END_TESTCASE("{__pre_gen_log_path}/{tcname}_tc.log");\n'''\
+'''\tend\n'''