From 40b227feccade7066e657ab978eb6f9435c127ae Mon Sep 17 00:00:00 2001 From: bacon Date: Tue, 29 Jul 2025 18:57:45 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=9F=E6=88=90=E6=B5=8B=E8=AF=95=E7=94=A8?= =?UTF-8?q?=E4=BE=8B=E6=95=B0=E6=8D=AE=E7=9A=84python=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E5=A4=AA=E9=95=BF=E4=BA=86,=E5=88=A9=E7=94=A8python=E7=9A=84?= =?UTF-8?q?=E5=8C=85=E7=AD=89=E7=BB=93=E6=9E=84=E5=88=86=E5=89=B2=E4=BB=A3?= =?UTF-8?q?=E7=A0=81,=E5=BD=93=E5=89=8D=E5=88=9D=E6=AD=A5=E5=81=9A?= =?UTF-8?q?=E4=BA=86=E5=88=86=E5=89=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tb/shinTest/gen_pkt.py | 334 +------------------------------ tb/shinTest/pyutils/GenPkt.py | 332 ++++++++++++++++++++++++++++++ tb/shinTest/pyutils/__init__.py | 2 + tb/shinTest/testcase/__init__.py | 2 + tb/shinTest/testcase/readregs.py | 21 ++ 5 files changed, 360 insertions(+), 331 deletions(-) create mode 100644 tb/shinTest/pyutils/GenPkt.py create mode 100644 tb/shinTest/pyutils/__init__.py create mode 100644 tb/shinTest/testcase/__init__.py create mode 100644 tb/shinTest/testcase/readregs.py diff --git a/tb/shinTest/gen_pkt.py b/tb/shinTest/gen_pkt.py index 6eb2ae1..13910a9 100755 --- a/tb/shinTest/gen_pkt.py +++ b/tb/shinTest/gen_pkt.py @@ -1,342 +1,14 @@ #!/usr/bin/env python #encoding=utf-8 import random -import copy import time - -class GenPkt(object): - def __init__(self): - super(GenPkt, self).__init__() - - self.pkt_buf = list() #bytearray(b'\0' * 2048) - self.pkt_type = 0 - self.pkt_sub_pkt = 0 - self.sub_pkt = list() - self.pkt_data = None - - def clean(self): - self.pkt_buf = list() #bytearray(b'\0' * 2048) - self.pkt_type = 0 - self.pkt_sub_pkt = 0 - self.sub_pkt = list() - self.pkt_data = None - - def setPktType(self, type): - if (type != 0) and (type != 1): - print('Error...set type failed:', type) - else: - self.pkt_type = type - - def setPkt(self, type, data = None): - if (type != 0) and (type != 1): - if type == 2: - self.pkt_type = 2 - self.pkt_data = copy.copy(data) - else: - print('Error...set type failed:', type) - else: - self.pkt_type = type - - def addBeforeExc(self, str): - self.sub_pkt.append([1, str]) - - def addAfterExc(self, str): - self.sub_pkt.append([2, str]) - - def addSubPkt(self, dev_idx, ptype, addr, cmd, len, data): - if (len > 2032): - print('Error, bad subpkt len:%d', len) - return - if not (ptype in [0, 2]): - print('Error, bad subpkt type:', ptype) - return - if not (cmd in [0, 1, 2, 0xb, 0xc, 0xd, 0xe, 0xf]): - print('Error, bad cmd:', cmd) - return - - 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): - pkt_len = 4 - for sp in self.sub_pkt: - if sp[0] != 0: - pass - else: - pkt_len = pkt_len + sp[5] + 8 - - if pkt_len > 2044: - print('Error, bad pkt_len:', pkt_len) - return - - i = 4 - if (self.pkt_type == 1): - pkt_len = 4 - ''' - self.pkt_buf[0] = 0 - self.pkt_buf[1] = (self.pkt_type & 0x3) - self.pkt_buf[2] = 0x3f - self.pkt_buf[3] = 0xff - ''' - self.pkt_buf.append(0) - self.pkt_buf.append(self.pkt_type & 0x3) - self.pkt_buf.append(0x3f) - self.pkt_buf.append(0xff) - elif (self.pkt_type == 2): - pkt_len = len(self.pkt_data) - - for d in self.pkt_data: - self.pkt_buf.append(d) - i = pkt_len - #print("-----------------------------", filename, self.pkt_type, pkt_len, self.pkt_buf) - else: - #for i in range(pkt_len): - ''' - self.pkt_buf[0] = ((pkt_len - 4) >> 4) & 0xff - self.pkt_buf[1] = (((pkt_len - 4) << 4) & 0xf0) | (self.pkt_type & 0x3) - self.pkt_buf[2] = 0 - self.pkt_buf[3] = 0 - ''' - self.pkt_buf.append(((pkt_len - 4) >> 4) & 0xff) - self.pkt_buf.append((((pkt_len - 4) << 4) & 0xf0) | (self.pkt_type & 0x3)) - self.pkt_buf.append(0) - self.pkt_buf.append(0) - - for sp in self.sub_pkt: - if sp[0] != 0: - pass - #elif sp[0] == 0: - else: - #设备索引(14bit)+类型(2bit) - temp = ((sp[1] & 0x3fff) << 2) | (sp[2] & 0x3) - - #self.pkt_buf[i] = (temp >> 8) & 0xff - self.pkt_buf.append((temp >> 8) & 0xff) - i = i + 1 - #self.pkt_buf[i] = temp & 0xff - self.pkt_buf.append(temp & 0xff) - i = i + 1 - - #地址 - #self.pkt_buf[i] = (sp[3] >> 8) & 0xff - self.pkt_buf.append((sp[3] >> 8) & 0xff) - i = i + 1 - #self.pkt_buf[i] = sp[3] & 0xff - self.pkt_buf.append(sp[3] & 0xff) - i = i + 1 - - #命令类型(4bit)+长度(12bit) - temp = (sp[4] << 12) | (sp[5] & 0xfff) - - #self.pkt_buf[i] = (temp >> 8) & 0xff - self.pkt_buf.append((temp >> 8) & 0xff) - i = i + 1 - #self.pkt_buf[i] = temp & 0xff - self.pkt_buf.append(temp & 0xff) - i = i + 1 - - #数据 - if sp[6] == None: - for _k in range(sp[5]): - #self.pkt_buf[_k + i] = random.randint(0, 255) - self.pkt_buf.append(random.randint(0, 255)) - else: - for _k in range(sp[5]): - #self.pkt_buf[_k + i] = sp[6][_k] - self.pkt_buf.append(sp[6][_k]) - - i = i + sp[5] - - #工作计数 - #self.pkt_buf[i] = 0 - self.pkt_buf.append(0) - i = i + 1 - #self.pkt_buf[i] = 0 - self.pkt_buf.append(0) - i = i + 1 - - print("pkt_len:%d, data_len:%d"%(pkt_len, pkt_len - 4)) - f = open(filename, "wt+") - 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 - - pos2 = filename.rfind(".") - if (pos1 > pos2): - define_str = define_str + filename[pos1:] - else: - define_str = define_str + filename[pos1:pos2] - - 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"%( - 3, pkt_len & 0xff, - 4, pkt_len >> 8 - )) - - f.write(define_str + "(array) \\\n") - for _k in range(i): - if _k < (i - 1): - if type(self.pkt_buf[_k]) == int: - f.write("\tarray``[%d]=8'h%02X;\\\n"%(3 + _k, self.pkt_buf[_k])) - else: - f.write("\tarray``[%d]=%s;\\\n"%(3 + _k, self.pkt_buf[_k])) - else: - if type(self.pkt_buf[_k]) == int: - f.write("\tarray``[%d]=8'h%02X;\n"%(3 + _k, self.pkt_buf[_k])) - else: - f.write("\tarray``[%d]=%s;\n"%(3 + _k, self.pkt_buf[_k])) - - for md in self.sub_pkt: - if md[0] == 2: - f.write("%s\n"%(md[1],)) - else: - for _k in range(i): - f.write("txBuf[%d]=8'h%02X;\n"%(3 + _k, self.pkt_buf[_k])) - f.close() - - - -def genWriteTransLenCode(gen_name, sm_idx, wlog=True): - return '''\n//写入发送长度\n'''\ - + '''$fdisplay(spidata_file, "--写数据交换长度");\n'''\ - + '''`DEF_%s_sm(txBuf);\n'''%(gen_name, )\ - + '''%s( (`MST_TX%d_LEN_ADDR), (`SPI_WRITE), (2), (`IF_IDX(0)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans", sm_idx,)\ - + '''%s( (`MST_RX%d_LEN_ADDR), (`SPI_WRITE), (2), (`IF_IDX(0)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans", sm_idx,) - -def genWriteTransPktCode(gen_name, sm_idx, wlog=True): - return '''\n$fdisplay(spidata_file, "<<发包:");\n'''\ - + '''`DEF_%s(txBuf);\n'''%(gen_name, )\ - + '''%s( (`MST_TX%d_ADDR), (`SPI_WRITE), (`DEF_%s_len), (`IF_IDX(0)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans", sm_idx, gen_name, ) - -def genTrgTransPktCode(gen_name, sm_idx, wlog=True): - return '''\n//请求发送\n'''\ - + '''$fdisplay(spidata_file, "--请求发送");\n'''\ - + '''txBuf[0+3] = `MST_TX_TRIGGER(%d);\n'''%(sm_idx, )\ - + '''%s( (16'h20), (`SPI_WRITE), (1), (`IF_IDX(0)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans", ) - -def genReadAckPktCode(gen_name, sm_idx, wlog=True): - return '''\n//等待回包\n'''\ - + '''_reset_deadline_ind = 1;\n'''\ - + '''@(posedge isResp or posedge _deadline_ind) #5 begin end\n'''\ - + '''$fdisplay(spidata_file, ">>回包:");\n'''\ - + '''%s( (`MST_RX%d_ADDR), (`SPI_READ), (`DEF_%s_len), (`IF_IDX(0)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans", sm_idx, gen_name,) - -def genEnableInsertTimeCode(pos, enableTime=True, enableDelay=True, wlog=True): - data = pos & 0x3fff - if enableTime: - data = data | 0x8000 - if enableDelay: - data = data | 0x4000 - return '''//写入替换时间戳替换地址\n'''\ - + '''$fdisplay(spidata_file, "--增加时间戳插入");\n'''\ - + '''txBuf[0+3] = 8'h%x;\n'''%(data & 0xff, )\ - + '''txBuf[1+3] = 8'h%x;\n'''%((data >> 8) & 0xff, )\ - + '''%s( (16'h24), (`SPI_WRITE), (2), (`IF_IDX(0)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans",) - -def genDisableInsertTimeCode(wlog=True): - return '''\n//清除替换时间戳替换地址\n'''\ - + '''$fdisplay(spidata_file, "--清除时间戳插入");\n'''\ - + '''txBuf[0+3] = 8'h00;\n'''\ - + '''txBuf[1+3] = 8'h00;\n'''\ - + '''%s( (16'h24), (`SPI_WRITE), (2), (`IF_IDX(0)) ); //清除替换时间戳替换地址寄存器\n'''%("`SPI_TRANS" if wlog else "spi_trans", ) - -def genCheckInsertTimeCode(wlog=True): - return '''\n//检查替换时间戳替换地址\n'''\ - + '''$fdisplay(spidata_file, "--检查时间戳插入");\n'''\ - + '''%s( (16'h24), (`SPI_READ), (2), (`IF_IDX(0)) ); //检查替换时间戳替换地址寄存器\n'''%("`SPI_TRANS" if wlog else "spi_trans", ) - - -def genIFRwDataCode(dev, addr, isWrite = False, data_len=0, data = None, wlog=True): - if isWrite == True: - if (data == None) or (len(data) == 0): - data=list() - - code = '' - idx = 3 - for item in data: - code = code + '''txBuf[%d]=8'h%02x;\n'''%(idx, item & 0xff) - idx = idx + 1 - - code = code + '''%s( (16'h%04x), (`SPI_WRITE), (%d), (`IF_IDX(%d)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans", addr, data_len, dev) - return code - else: - code = '' - code = code + '''%s( (16'h%04x), (`SPI_READ), (%d), (`IF_IDX(%d)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans", addr, data_len, dev) - return code - -def genSlvSMWriteData(dev, sm, data_len, data = None, wlog=True): - smaddr = list() - for i in range(8): - smaddr.append(0x300 + i * 4 + 2) - if not ((sm == 1) or (sm == 3) or (sm == 5) or (sm == 7)): - #写入数据,lvds读;这个空间是lvds写,mcu读 - return '' - if data_len > 2032: - return '' - - if (data != None) and (len(data) != 0) and (len(data) < data_len): - return '' - - if (data == None) or (len(data) == 0): - data = list() - for i in range(data_len): - data.append((i + dev) & 0xff) - - code = '''txBuf[3] = 8'h%02x;\n'''%(data_len & 0xff, )\ - + '''txBuf[4] = 8'h%02x;\n'''%(int(data_len/256) & 0xff,)\ - + '''%s((16'h0%04x), (`SPI_WRITE), (2), (`IF_IDX(%d)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans", smaddr[sm], dev) - - for i in range(data_len): - code = code + '''txBuf[%d + 3] = 8'h%02x;\n'''%(i, data[i]) - - code = code + '''%s( (16'h%04x), (`SPI_WRITE), (%d), (`IF_IDX(%d)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans", 0x800 + sm * 2048, data_len, dev) - return code - -def genSlvSMReadData(dev, sm, data_len, wlog=True): - if not ((sm == 0) or (sm == 2) or (sm == 4) or (sm == 6)): - #写入数据,lvds读;这个空间是lvds写,mcu读 - return '' - if data_len > 2032: - return '' - - code = "" - code = code + '''%s( (16'h%04x), (`SPI_READ), (%d), (`IF_IDX(%d)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans", 0x800 + sm * 2048, data_len, dev) - - return code - -def setting_ebmmu_regs(regmap, index, vaddr, raddr, size, p, enable): - vaddr = int(vaddr) - raddr = int(raddr) - size = int(size) - p = int(p) - enable = int(enable) - regmap[index * 0xa + 0] = (vaddr >> 0) & 0xff - regmap[index * 0xa + 1] = (vaddr >> 8) & 0xff - regmap[index * 0xa + 2] = (vaddr >> 16) & 0xff - regmap[index * 0xa + 3] = (vaddr >> 24) & 0xff - - regmap[index * 0xa + 4] = (raddr >> 0) & 0xff - regmap[index * 0xa + 5] = (raddr >> 8) & 0xff - - regmap[index * 0xa + 6] = (size >> 0) & 0xff - regmap[index * 0xa + 7] = (size >> 8) & 0xff - - regmap[index * 0xa + 8] = p & 0x3 - regmap[index * 0xa + 9] = enable & 0x1 - +from pyutils import * +from testcase import readregs if __name__ == '__main__': random.seed(int(time.time() * 1000)) genPkt = GenPkt() - + #------------------------------------------------------------------------- #>>>>>>嗅探数据包1,正常的嗅探数据包 genPkt.clean() diff --git a/tb/shinTest/pyutils/GenPkt.py b/tb/shinTest/pyutils/GenPkt.py new file mode 100644 index 0000000..c283a03 --- /dev/null +++ b/tb/shinTest/pyutils/GenPkt.py @@ -0,0 +1,332 @@ +#!/usr/bin/env python +#encoding=utf-8 +import copy +import random + +class GenPkt(object): + def __init__(self): + super(GenPkt, self).__init__() + + self.pkt_buf = list() #bytearray(b'\0' * 2048) + self.pkt_type = 0 + self.pkt_sub_pkt = 0 + self.sub_pkt = list() + self.pkt_data = None + + def clean(self): + self.pkt_buf = list() #bytearray(b'\0' * 2048) + self.pkt_type = 0 + self.pkt_sub_pkt = 0 + self.sub_pkt = list() + self.pkt_data = None + + def setPktType(self, type): + if (type != 0) and (type != 1): + print('Error...set type failed:', type) + else: + self.pkt_type = type + + def setPkt(self, type, data = None): + if (type != 0) and (type != 1): + if type == 2: + self.pkt_type = 2 + self.pkt_data = copy.copy(data) + else: + print('Error...set type failed:', type) + else: + self.pkt_type = type + + def addBeforeExc(self, str): + self.sub_pkt.append([1, str]) + + def addAfterExc(self, str): + self.sub_pkt.append([2, str]) + + def addSubPkt(self, dev_idx, ptype, addr, cmd, len, data): + if (len > 2032): + print('Error, bad subpkt len:%d', len) + return + if not (ptype in [0, 2]): + print('Error, bad subpkt type:', ptype) + return + if not (cmd in [0, 1, 2, 0xb, 0xc, 0xd, 0xe, 0xf]): + print('Error, bad cmd:', cmd) + return + + 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): + pkt_len = 4 + for sp in self.sub_pkt: + if sp[0] != 0: + pass + else: + pkt_len = pkt_len + sp[5] + 8 + + if pkt_len > 2044: + print('Error, bad pkt_len:', pkt_len) + return + + i = 4 + if (self.pkt_type == 1): + pkt_len = 4 + ''' + self.pkt_buf[0] = 0 + self.pkt_buf[1] = (self.pkt_type & 0x3) + self.pkt_buf[2] = 0x3f + self.pkt_buf[3] = 0xff + ''' + self.pkt_buf.append(0) + self.pkt_buf.append(self.pkt_type & 0x3) + self.pkt_buf.append(0x3f) + self.pkt_buf.append(0xff) + elif (self.pkt_type == 2): + pkt_len = len(self.pkt_data) + + for d in self.pkt_data: + self.pkt_buf.append(d) + i = pkt_len + #print("-----------------------------", filename, self.pkt_type, pkt_len, self.pkt_buf) + else: + #for i in range(pkt_len): + ''' + self.pkt_buf[0] = ((pkt_len - 4) >> 4) & 0xff + self.pkt_buf[1] = (((pkt_len - 4) << 4) & 0xf0) | (self.pkt_type & 0x3) + self.pkt_buf[2] = 0 + self.pkt_buf[3] = 0 + ''' + self.pkt_buf.append(((pkt_len - 4) >> 4) & 0xff) + self.pkt_buf.append((((pkt_len - 4) << 4) & 0xf0) | (self.pkt_type & 0x3)) + self.pkt_buf.append(0) + self.pkt_buf.append(0) + + for sp in self.sub_pkt: + if sp[0] != 0: + pass + #elif sp[0] == 0: + else: + #设备索引(14bit)+类型(2bit) + temp = ((sp[1] & 0x3fff) << 2) | (sp[2] & 0x3) + + #self.pkt_buf[i] = (temp >> 8) & 0xff + self.pkt_buf.append((temp >> 8) & 0xff) + i = i + 1 + #self.pkt_buf[i] = temp & 0xff + self.pkt_buf.append(temp & 0xff) + i = i + 1 + + #地址 + #self.pkt_buf[i] = (sp[3] >> 8) & 0xff + self.pkt_buf.append((sp[3] >> 8) & 0xff) + i = i + 1 + #self.pkt_buf[i] = sp[3] & 0xff + self.pkt_buf.append(sp[3] & 0xff) + i = i + 1 + + #命令类型(4bit)+长度(12bit) + temp = (sp[4] << 12) | (sp[5] & 0xfff) + + #self.pkt_buf[i] = (temp >> 8) & 0xff + self.pkt_buf.append((temp >> 8) & 0xff) + i = i + 1 + #self.pkt_buf[i] = temp & 0xff + self.pkt_buf.append(temp & 0xff) + i = i + 1 + + #数据 + if sp[6] == None: + for _k in range(sp[5]): + #self.pkt_buf[_k + i] = random.randint(0, 255) + self.pkt_buf.append(random.randint(0, 255)) + else: + for _k in range(sp[5]): + #self.pkt_buf[_k + i] = sp[6][_k] + self.pkt_buf.append(sp[6][_k]) + + i = i + sp[5] + + #工作计数 + #self.pkt_buf[i] = 0 + self.pkt_buf.append(0) + i = i + 1 + #self.pkt_buf[i] = 0 + self.pkt_buf.append(0) + i = i + 1 + + print("pkt_len:%d, data_len:%d"%(pkt_len, pkt_len - 4)) + f = open(filename, "wt+") + 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 + + pos2 = filename.rfind(".") + if (pos1 > pos2): + define_str = define_str + filename[pos1:] + else: + define_str = define_str + filename[pos1:pos2] + + 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"%( + 3, pkt_len & 0xff, + 4, pkt_len >> 8 + )) + + f.write(define_str + "(array) \\\n") + for _k in range(i): + if _k < (i - 1): + if type(self.pkt_buf[_k]) == int: + f.write("\tarray``[%d]=8'h%02X;\\\n"%(3 + _k, self.pkt_buf[_k])) + else: + f.write("\tarray``[%d]=%s;\\\n"%(3 + _k, self.pkt_buf[_k])) + else: + if type(self.pkt_buf[_k]) == int: + f.write("\tarray``[%d]=8'h%02X;\n"%(3 + _k, self.pkt_buf[_k])) + else: + f.write("\tarray``[%d]=%s;\n"%(3 + _k, self.pkt_buf[_k])) + + for md in self.sub_pkt: + if md[0] == 2: + f.write("%s\n"%(md[1],)) + else: + for _k in range(i): + f.write("txBuf[%d]=8'h%02X;\n"%(3 + _k, self.pkt_buf[_k])) + f.close() + + + +def genWriteTransLenCode(gen_name, sm_idx, wlog=True): + return '''\n//写入发送长度\n'''\ + + '''$fdisplay(spidata_file, "--写数据交换长度");\n'''\ + + '''`DEF_%s_sm(txBuf);\n'''%(gen_name, )\ + + '''%s( (`MST_TX%d_LEN_ADDR), (`SPI_WRITE), (2), (`IF_IDX(0)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans", sm_idx,)\ + + '''%s( (`MST_RX%d_LEN_ADDR), (`SPI_WRITE), (2), (`IF_IDX(0)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans", sm_idx,) + +def genWriteTransPktCode(gen_name, sm_idx, wlog=True): + return '''\n$fdisplay(spidata_file, "<<发包:");\n'''\ + + '''`DEF_%s(txBuf);\n'''%(gen_name, )\ + + '''%s( (`MST_TX%d_ADDR), (`SPI_WRITE), (`DEF_%s_len), (`IF_IDX(0)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans", sm_idx, gen_name, ) + +def genTrgTransPktCode(gen_name, sm_idx, wlog=True): + return '''\n//请求发送\n'''\ + + '''$fdisplay(spidata_file, "--请求发送");\n'''\ + + '''txBuf[0+3] = `MST_TX_TRIGGER(%d);\n'''%(sm_idx, )\ + + '''%s( (16'h20), (`SPI_WRITE), (1), (`IF_IDX(0)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans", ) + +def genReadAckPktCode(gen_name, sm_idx, wlog=True): + return '''\n//等待回包\n'''\ + + '''_reset_deadline_ind = 1;\n'''\ + + '''@(posedge isResp or posedge _deadline_ind) #5 begin end\n'''\ + + '''$fdisplay(spidata_file, ">>回包:");\n'''\ + + '''%s( (`MST_RX%d_ADDR), (`SPI_READ), (`DEF_%s_len), (`IF_IDX(0)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans", sm_idx, gen_name,) + +def genEnableInsertTimeCode(pos, enableTime=True, enableDelay=True, wlog=True): + data = pos & 0x3fff + if enableTime: + data = data | 0x8000 + if enableDelay: + data = data | 0x4000 + return '''//写入替换时间戳替换地址\n'''\ + + '''$fdisplay(spidata_file, "--增加时间戳插入");\n'''\ + + '''txBuf[0+3] = 8'h%x;\n'''%(data & 0xff, )\ + + '''txBuf[1+3] = 8'h%x;\n'''%((data >> 8) & 0xff, )\ + + '''%s( (16'h24), (`SPI_WRITE), (2), (`IF_IDX(0)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans",) + +def genDisableInsertTimeCode(wlog=True): + return '''\n//清除替换时间戳替换地址\n'''\ + + '''$fdisplay(spidata_file, "--清除时间戳插入");\n'''\ + + '''txBuf[0+3] = 8'h00;\n'''\ + + '''txBuf[1+3] = 8'h00;\n'''\ + + '''%s( (16'h24), (`SPI_WRITE), (2), (`IF_IDX(0)) ); //清除替换时间戳替换地址寄存器\n'''%("`SPI_TRANS" if wlog else "spi_trans", ) + +def genCheckInsertTimeCode(wlog=True): + return '''\n//检查替换时间戳替换地址\n'''\ + + '''$fdisplay(spidata_file, "--检查时间戳插入");\n'''\ + + '''%s( (16'h24), (`SPI_READ), (2), (`IF_IDX(0)) ); //检查替换时间戳替换地址寄存器\n'''%("`SPI_TRANS" if wlog else "spi_trans", ) + + +def genIFRwDataCode(dev, addr, isWrite = False, data_len=0, data = None, wlog=True): + if isWrite == True: + if (data == None) or (len(data) == 0): + data=list() + + code = '' + idx = 3 + for item in data: + code = code + '''txBuf[%d]=8'h%02x;\n'''%(idx, item & 0xff) + idx = idx + 1 + + code = code + '''%s( (16'h%04x), (`SPI_WRITE), (%d), (`IF_IDX(%d)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans", addr, data_len, dev) + return code + else: + code = '' + code = code + '''%s( (16'h%04x), (`SPI_READ), (%d), (`IF_IDX(%d)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans", addr, data_len, dev) + return code + +def genSlvSMWriteData(dev, sm, data_len, data = None, wlog=True): + smaddr = list() + for i in range(8): + smaddr.append(0x300 + i * 4 + 2) + if not ((sm == 1) or (sm == 3) or (sm == 5) or (sm == 7)): + #写入数据,lvds读;这个空间是lvds写,mcu读 + return '' + if data_len > 2032: + return '' + + if (data != None) and (len(data) != 0) and (len(data) < data_len): + return '' + + if (data == None) or (len(data) == 0): + data = list() + for i in range(data_len): + data.append((i + dev) & 0xff) + + code = '''txBuf[3] = 8'h%02x;\n'''%(data_len & 0xff, )\ + + '''txBuf[4] = 8'h%02x;\n'''%(int(data_len/256) & 0xff,)\ + + '''%s((16'h0%04x), (`SPI_WRITE), (2), (`IF_IDX(%d)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans", smaddr[sm], dev) + + for i in range(data_len): + code = code + '''txBuf[%d + 3] = 8'h%02x;\n'''%(i, data[i]) + + code = code + '''%s( (16'h%04x), (`SPI_WRITE), (%d), (`IF_IDX(%d)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans", 0x800 + sm * 2048, data_len, dev) + return code + +def genSlvSMReadData(dev, sm, data_len, wlog=True): + if not ((sm == 0) or (sm == 2) or (sm == 4) or (sm == 6)): + #写入数据,lvds读;这个空间是lvds写,mcu读 + return '' + if data_len > 2032: + return '' + + code = "" + code = code + '''%s( (16'h%04x), (`SPI_READ), (%d), (`IF_IDX(%d)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans", 0x800 + sm * 2048, data_len, dev) + + return code + +def setting_ebmmu_regs(regmap, index, vaddr, raddr, size, p, enable): + vaddr = int(vaddr) + raddr = int(raddr) + size = int(size) + p = int(p) + enable = int(enable) + regmap[index * 0xa + 0] = (vaddr >> 0) & 0xff + regmap[index * 0xa + 1] = (vaddr >> 8) & 0xff + regmap[index * 0xa + 2] = (vaddr >> 16) & 0xff + regmap[index * 0xa + 3] = (vaddr >> 24) & 0xff + + regmap[index * 0xa + 4] = (raddr >> 0) & 0xff + regmap[index * 0xa + 5] = (raddr >> 8) & 0xff + + regmap[index * 0xa + 6] = (size >> 0) & 0xff + regmap[index * 0xa + 7] = (size >> 8) & 0xff + + regmap[index * 0xa + 8] = p & 0x3 + regmap[index * 0xa + 9] = enable & 0x1 \ No newline at end of file diff --git a/tb/shinTest/pyutils/__init__.py b/tb/shinTest/pyutils/__init__.py new file mode 100644 index 0000000..4943d11 --- /dev/null +++ b/tb/shinTest/pyutils/__init__.py @@ -0,0 +1,2 @@ +# pyutils/__init__.py +from .GenPkt import * diff --git a/tb/shinTest/testcase/__init__.py b/tb/shinTest/testcase/__init__.py new file mode 100644 index 0000000..a66c862 --- /dev/null +++ b/tb/shinTest/testcase/__init__.py @@ -0,0 +1,2 @@ +# testcase/__init__.py +from .readregs import * \ No newline at end of file diff --git a/tb/shinTest/testcase/readregs.py b/tb/shinTest/testcase/readregs.py new file mode 100644 index 0000000..a71bcfb --- /dev/null +++ b/tb/shinTest/testcase/readregs.py @@ -0,0 +1,21 @@ +from pyutils import * +import time +import random + +def tc1(): + random.seed(int(time.time() * 1000)) + genPkt = GenPkt() + + #------------------------------------------------------------------------- + #>>>>>>嗅探数据包1,正常的嗅探数据包 + genPkt.clean() + genPkt.setPktType(1) + gen_file_def = "test_pkt" + sm_idx = 0 + + genPkt.addAfterExc(genWriteTransLenCode(gen_file_def, sm_idx) + +genWriteTransPktCode(gen_file_def, sm_idx) + +genTrgTransPktCode(gen_file_def, sm_idx) + +genReadAckPktCode(gen_file_def, sm_idx)) + genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1) + print("it's a test") \ No newline at end of file