初步实现python生成测试用例,并挂接.v文件,无需手工写.v文件
This commit is contained in:
@@ -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'''
|
||||
|
||||
Reference in New Issue
Block a user