Files
eb001/tb/shinTest/gen_pkt.py

851 lines
29 KiB
Python
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python
#encoding=utf-8
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()
def clean(self):
self.pkt_buf = list() #bytearray(b'\0' * 2048)
self.pkt_type = 0
self.pkt_sub_pkt = 0
self.sub_pkt = list()
def setPktType(self, type):
if (type != 0) and (type != 1):
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 > 2048:
print('Error, bad pkt_len:', pkt_len)
return
print("pkt_len:%d, data_len:%d"%(pkt_len, pkt_len - 4))
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)
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
#工作计数
#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
#数据
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]
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):
return '''\n//写入发送长度\n'''\
+ '''$fdisplay(spidata_file, "--写数据交换长度");\n'''\
+ '''`DEF_%s_sm(txBuf);\n'''%(gen_name, )\
+ '''spi_trans( (`MST_TX%d_LEN_ADDR), (`SPI_WRITE), (2), (`IF_IDX(0)) );\n'''%(sm_idx,)\
+ '''spi_trans( (`MST_RX%d_LEN_ADDR), (`SPI_WRITE), (2), (`IF_IDX(0)) );\n'''%(sm_idx,)
def genWriteTransPktCode(gen_name, sm_idx):
return '''\n$fdisplay(spidata_file, "<<发包:");\n'''\
+ '''`DEF_%s(txBuf);\n'''%(gen_name, )\
+ '''spi_trans( (`MST_TX%d_ADDR), (`SPI_WRITE), (`DEF_%s_len), (`IF_IDX(0)) );\n'''%(sm_idx, gen_name, )
def genTrgTransPktCode(gen_name, sm_idx):
return '''\n//请求发送\n'''\
+ '''$fdisplay(spidata_file, "--请求发送");\n'''\
+ '''txBuf[0+3] = `MST_TX_TRIGGER(%d);\n'''%(sm_idx, )\
+ '''spi_trans( (16'h20), (`SPI_WRITE), (1), (`IF_IDX(0)) );\n'''
def genReadAckPktCode(gen_name, sm_idx):
return '''\n//等待回包\n'''\
+ '''@(posedge isResp) #5 begin end\n'''\
+ '''$fdisplay(spidata_file, ">>回包:");\n'''\
+ '''spi_trans( (`MST_RX%d_ADDR), (`SPI_READ), (`DEF_%s_len), (`IF_IDX(0)) );\n'''%(sm_idx, gen_name,)
def genEnableInsertTimeCode(pos, enableTime=True, enableDelay=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, )\
+ '''spi_trans( (16'h24), (`SPI_WRITE), (2), (`IF_IDX(0)) );\n'''
def genDisableInsertTimeCode():
return '''\n//清除替换时间戳替换地址\n'''\
+ '''$fdisplay(spidata_file, "--清除时间戳插入");\n'''\
+ '''txBuf[0+3] = 8'h00;\n'''\
+ '''txBuf[1+3] = 8'h00;\n'''\
+ '''spi_trans( (16'h24), (`SPI_WRITE), (2), (`IF_IDX(0)) ); //清除替换时间戳替换地址寄存器\n'''
def genCheckInsertTimeCode():
return '''\n//检查替换时间戳替换地址\n'''\
+ '''$fdisplay(spidata_file, "--检查时间戳插入");\n'''\
+ '''spi_trans( (16'h24), (`SPI_READ), (2), (`IF_IDX(0)) ); //检查替换时间戳替换地址寄存器\n'''
if __name__ == '__main__':
genPkt = GenPkt()
#-------------------------------------------------------------------------
#>>>>>>嗅探数据包
genPkt.setPktType(1)
gen_file_def = "detect_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)
#-------------------------------------------------------------------------
#>>>>>>普通数据包 sm1
genPkt.clean()
genPkt.setPktType(0)
#subPkt参数索引、索引类型、地址、命令、长度、数据
#genPkt.addSubPkt(0x02, 0, 0x0830, 0x2, 56, None)
genPkt.addSubPkt(0x01, 0, 0x00, 0x0, 64, None)
genPkt.addSubPkt(0x03, 0, 0xc0, 0x0, 64, None)
#genPkt.addSubPkt(10, 2, 0x300, 0x2, 4, None)
#genPkt.addSubPkt(11, 1, 0x300, 0x2, 4, None)
gen_file_def = "sm1_pkt"
sm_idx = 1
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)
#-------------------------------------------------------------------------
#>>>>>>普通数据包 sm2
genPkt.clean()
genPkt.setPktType(0)
#subPkt参数索引、索引类型、地址、命令、长度、数据
#genPkt.addSubPkt(0x02, 0, 0x0830, 0x2, 56, None)
genPkt.addSubPkt(0x01, 0, 0x00, 0xd, 128, None)
#genPkt.addSubPkt(10, 2, 0x300, 0x2, 4, None)
#genPkt.addSubPkt(11, 1, 0x300, 0x2, 4, None)
gen_file_def = "sm2_pkt"
sm_idx = 2
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)
#-------------------------------------------------------------------------
#>>>>>>交换数据 SMx
genPkt.clean()
genPkt.setPktType(0)
#subPkt参数索引、索引类型、地址、命令、长度、数据
data = bytearray(b"\0" * 10)
data[0] = 16
data[1] = 0
genPkt.addSubPkt(random.randint(0, 2048), 0, 0x0302, 0xe, 2, data) #0x030a, 0xe, 2, data)
data = bytearray(b"\0"*100)
for i in range(100):
data[i] = i + 1
genPkt.addSubPkt(random.randint(0, 2048), 0, 0x0800, 0xe, 16, data) #0x1800, 0xe, 16, data)
gen_file_def = "sm3_pkt"
sm_idx = 3
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)
#-------------------------------------------------------------------------
#>>>>>>普通数据包
genPkt.clean()
genPkt.setPktType(0)
#subPkt参数索引、索引类型、地址、命令、长度、数据
#genPkt.addSubPkt(0x02, 0, 0x0830, 0x2, 56, None)
genPkt.addSubPkt(0x01, 0, 0x0840, 0x1, 56, None)
genPkt.addSubPkt(0x03, 0, 0x1040, 0x0, 56, None)
for i in range(5):
genPkt.addSubPkt(random.randint(100, 4000), 0,
random.randint(0, 65536), 0x0,
56, None)
#genPkt.addSubPkt(10, 2, 0x300, 0x2, 4, None)
#genPkt.addSubPkt(11, 1, 0x300, 0x2, 4, None)
gen_file_def = "seq_0_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)
#-------------------------------------------------------------------------
#>>>>>>普通数据包0,用来操作sync
genPkt.clean()
genPkt.setPktType(0)
data = bytearray(b"\0"*100)
data[0] = 0 #0x0300
data[1] = 0 #0x0301
data[2] = 64 #0x302 长度1
data[3] = 0 #0x303 长度2
data[4] = 0
data[5] = 0
data[6] = 64
data[7] = 0
data[8] = 0
data[9] = 0
data[10] = 64
data[11] = 0
data[12] = 0
data[13] = 0
data[14] = 64
data[15] = 0
#subPkt参数索引、索引类型、地址、命令、长度、数据
genPkt.addSubPkt(0x02, 0, 0x0300, 0x1, 4, data) #sm0
genPkt.addSubPkt(0x01, 0, 0x0308, 0x1, 4, data) #sm2
genPkt.addSubPkt(0x03, 0, 0x0310, 0x1, 4, data) #sm4
genPkt.addSubPkt(0x04, 0, 0x0318, 0x1, 4, data) #sm6
data = bytearray(b"\0"*100)
for i in range(64):
data[i] = i
data[10] = ord('B')
data[11] = ord('A')
genPkt.addSubPkt(0x02, 0, 0x0800, 0x1, 64, data)
data = bytearray(b"\0"*100)
for i in range(64):
data[i] = i
data[11] = ord('B')
data[12] = ord('A')
genPkt.addSubPkt(0x01, 0, 0x1800, 0x1, 64, data)
data = bytearray(b"\0"*100)
for i in range(64):
data[i] = i
data[12] = ord('B')
data[13] = ord('A')
genPkt.addSubPkt(0x03, 0, 0x2800, 0x1, 64, data)
data = bytearray(b"\0"*100)
for i in range(64):
data[i] = i
data[13] = ord('B')
data[14] = ord('A')
genPkt.addSubPkt(0x04, 0, 0x3800, 0x1, 64, data)
gen_file_def = "seq_1_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)
#-------------------------------------------------------------------------
#>>>>>>普通数据包2
genPkt.clean()
genPkt.setPktType(0)
#subPkt参数索引、索引类型、地址、命令、长度、数据
genPkt.addSubPkt(3, 0, 0x3000, 0x0, 129, b"\0"*129)
genPkt.addSubPkt(4, 0, 0x4000, 0x0, 140, b"\0"*140)
genPkt.addSubPkt(1, 0, 0x1000, 0x0, 128, b"\0"*128)
genPkt.addSubPkt(2, 0, 0x2000, 0x0, 152, b"\0"*152)
genPkt.addSubPkt(1, 0, 0x0306, 0x0, 2, b"\0"*2)
genPkt.addSubPkt(2, 0, 0x030e, 0x0, 2, b"\0"*2)
genPkt.addSubPkt(3, 0, 0x0316, 0x0, 2, b"\0"*2)
genPkt.addSubPkt(4, 0, 0x031e, 0x0, 2, b"\0"*2)
gen_file_def = "seq_2_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)
#-------------------------------------------------------------------------
#>>>>>>普通数据包3
genPkt.clean()
genPkt.setPktType(0)
#subPkt参数索引、索引类型、地址、命令、长度、数据
genPkt.addSubPkt(3, 0, 0x0100, 0x2, 32, b"\0"*129)
genPkt.addSubPkt(4, 0, 0x0100, 0x2, 32, b"\0"*140)
genPkt.addSubPkt(1, 0, 0x0100, 0x2, 32, b"\0"*128)
genPkt.addSubPkt(2, 0, 0x0100, 0x2, 32, b"\0"*152)
genPkt.addSubPkt(2, 0, 0x0120, 0x2, 2, b"\x05"*32)
gen_file_def = "seq_3_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)
#-------------------------------------------------------------------------
#>>>>>>同步数据包
genPkt.clean()
genPkt.setPktType(0)
#subPkt参数索引、索引类型、地址、命令、长度、数据
genPkt.addSubPkt(0x0, 0, random.randint(0, 65535), 0xc, 12, b'\0'*12)
genPkt.addBeforeExc(genEnableInsertTimeCode(0xc))
gen_file_def = "sync_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)
+genCheckInsertTimeCode()) #+genDisableInsertTimeCode())
genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1)
#-------------------------------------------------------------------------
#>>>>>>设置同步信号的数据包
genPkt.clean()
genPkt.setPktType(0)
genPkt.addBeforeExc(
'''spi_trans( (16'h0100), (`SPI_READ), (8), (`IF_IDX(0)));\n'''
+ '''_temp_time = rxBuf[3] + (rxBuf[4] << 8) + (rxBuf[5] << 16) + (rxBuf[6] << 24) + (rxBuf[7] << 32) + (rxBuf[8] << 40) + (rxBuf[9] << 48) + (rxBuf[10] << 56);\n'''
+ '''_temp_time = _temp_time + 32'h2000;\n\n''')
#subPkt参数索引、索引类型、地址、命令、长度、数据
data = [0,] * 100 #bytearray(b"\0" * 100)
data[0] = 0xff #地址0x120
data[2] = 0xa
data[4] = 0xa
data[6] = 0xa
data[8] = 0xa
data[16] = '''(_temp_time & 8'hff)''' #地址0x130, sync同步点
data[17] = '''(_temp_time >> 8) & 8'hff''' #地址0x131
data[18] = '''(_temp_time >> 16) & 8'hff'''
data[19] = '''(_temp_time >> 24) & 8'hff'''
data[24] = 0x00 #地址0x138, sync周期 4B
data[25] = 0x10 #地址0x139
data[28] = 0x81 #sync1偏移
data[29] = 0x0
data[36] = 0x20#sync3偏移
data[37] = 0x00
genPkt.addSubPkt(random.randint(0, 2048), 0, 0x120, 0xe, 0x28, data)
gen_file_def = "sync_sig_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)
#-------------------------------------------------------------------------
#>>>>>>设置同步信号的数据包2
genPkt.clean()
genPkt.setPktType(0)
gen_file_def = "sync_sig2_pkt"
sm_idx = 3
genPkt.addBeforeExc(
'''spi_trans( (16'h0100), (`SPI_READ), (8), (`IF_IDX(0)));\n'''
+ '''_temp_time = rxBuf[3] + (rxBuf[4] << 8) + (rxBuf[5] << 16) + (rxBuf[6] << 24) + (rxBuf[7] << 32) + (rxBuf[8] << 40) + (rxBuf[9] << 48) + (rxBuf[10] << 56);\n'''
+ '''_temp_time = _temp_time + 32'h3000;\n\n''')
#subPkt参数索引、索引类型、地址、命令、长度、数据
data = [0,] * 100 #bytearray(b"\0" * 100)
data[0] = 0x0f #地址0x120
data[2] = 0xa
data[4] = 0xa
data[6] = 0xa
data[8] = 0xa
data[16] = '''(_temp_time & 8'hff)''' #地址0x130, sync同步点
data[17] = '''(_temp_time >> 8) & 8'hff''' #地址0x131
data[18] = '''(_temp_time >> 16) & 8'hff'''
data[19] = '''(_temp_time >> 24) & 8'hff'''
data[24] = 0x80 #地址0x138, sync周期 4B
data[25] = 0x00 #地址0x139
data[28] = 0x0 #sync1偏移
data[29] = 0x0
data[36] = 0x0#sync3偏移
data[37] = 0x0
genPkt.addSubPkt(0, 0, 0x120, 0xe, 0x28, data)
data = [0,] * 100 #bytearray(b"\0" * 100)
data[0] = 0x0f #地址0x120
data[2] = 0xa
data[4] = 0xa
data[6] = 0xa
data[8] = 0xa
data[16] = '''(_temp_time & 8'hff)''' #地址0x130, sync同步点
data[17] = '''(_temp_time >> 8) & 8'hff''' #地址0x131
data[18] = '''(_temp_time >> 16) & 8'hff'''
data[19] = '''(_temp_time >> 24) & 8'hff'''
data[24] = 0x00 #地址0x138, sync周期 4B
data[25] = 0x01 #地址0x139
data[28] = 0x0 #sync1偏移
data[29] = 0x0
data[36] = 0x0 #sync3偏移
data[37] = 0x0
genPkt.addSubPkt(3, 0, 0x120, 0x1, 0x28, data)
data = [0,] * 100 #bytearray(b"\0" * 100)
data[0] = 0x0f #地址0x120
data[2] = 0xa
data[4] = 0xa
data[6] = 0xa
data[8] = 0xa
data[16] = '''(_temp_time & 8'hff)''' #地址0x130, sync同步点
data[17] = '''(_temp_time >> 8) & 8'hff''' #地址0x131
data[18] = '''(_temp_time >> 16) & 8'hff'''
data[19] = '''(_temp_time >> 24) & 8'hff'''
data[24] = 0x00 #地址0x138, sync周期 4B
data[25] = 0x02 #地址0x139
data[28] = 0x0 #sync1偏移
data[29] = 0x0
data[36] = 0x0 #sync3偏移
data[37] = 0x0
genPkt.addSubPkt(4, 0, 0x120, 0x1, 0x28, data)
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)
#-------------------------------------------------------------------------
#>>>>>>设置同步信号的数据包3
genPkt.clean()
genPkt.setPktType(0)
gen_file_def = "sync_sig3_pkt"
sm_idx = 3
genPkt.addBeforeExc(
'''spi_trans( (16'h0100), (`SPI_READ), (8), (`IF_IDX(0)));\n'''
+ '''_temp_time = rxBuf[3] + (rxBuf[4] << 8) + (rxBuf[5] << 16) + (rxBuf[6] << 24) + (rxBuf[7] << 32) + (rxBuf[8] << 40) + (rxBuf[9] << 48) + (rxBuf[10] << 56);\n'''
+ '''_temp_time = _temp_time + 32'h3000;\n\n''')
#subPkt参数索引、索引类型、地址、命令、长度、数据
data = [0,] * 100 #bytearray(b"\0" * 100)
data[0] = 0x0f #地址0x120
data[2] = 0xa
data[4] = 0xa
data[6] = 0xa
data[8] = 0xa
data[16] = '''(_temp_time & 8'hff)''' #地址0x130, sync同步点
data[17] = '''(_temp_time >> 8) & 8'hff''' #地址0x131
data[18] = '''(_temp_time >> 16) & 8'hff'''
data[19] = '''(_temp_time >> 24) & 8'hff'''
data[24] = 0x80 #地址0x138, sync周期 4B
data[25] = 0x00 #地址0x139
data[28] = 0x0 #sync1偏移
data[29] = 0x0
data[36] = 0x0#sync3偏移
data[37] = 0x0
genPkt.addSubPkt(0, 0, 0x120, 0xe, 0x28, data)
data = [0,] * 100 #bytearray(b"\0" * 100)
data[0] = 0x0f #地址0x120
data[2] = 0xa
data[4] = 0xa
data[6] = 0xa
data[8] = 0xa
data[16] = '''(_temp_time & 8'hff)''' #地址0x130, sync同步点
data[17] = '''(_temp_time >> 8) & 8'hff''' #地址0x131
data[18] = '''(_temp_time >> 16) & 8'hff'''
data[19] = '''(_temp_time >> 24) & 8'hff'''
data[24] = 0x00 #地址0x138, sync周期 4B
data[25] = 0x01 #地址0x139
data[28] = 0x0 #sync1偏移
data[29] = 0x0
data[36] = 0x0 #sync3偏移
data[37] = 0x0
genPkt.addSubPkt(3, 0, 0x120, 0x1, 0x28, data)
data = [0,] * 100 #bytearray(b"\0" * 100)
data[0] = 0x0f #地址0x120
data[2] = 0xa
data[4] = 0xa
data[6] = 0xa
data[8] = 0xa
data[16] = '''(_temp_time & 8'hff)''' #地址0x130, sync同步点
data[17] = '''(_temp_time >> 8) & 8'hff''' #地址0x131
data[18] = '''(_temp_time >> 16) & 8'hff'''
data[19] = '''(_temp_time >> 24) & 8'hff'''
data[24] = 0x00 #地址0x138, sync周期 4B
data[25] = 0x02 #地址0x139
data[28] = 0x0 #sync1偏移
data[29] = 0x0
data[36] = 0x0 #sync3偏移
data[37] = 0x0
genPkt.addSubPkt(4, 0, 0x120, 0x1, 0x28, data)
data = [0,] * 100 #bytearray(b"\0" * 100)
data[0] = 0x0f #地址0x120
data[2] = 0xa
data[4] = 0xa
data[6] = 0xa
data[8] = 0xa
data[16] = '''(_temp_time & 8'hff)''' #地址0x130, sync同步点
data[17] = '''(_temp_time >> 8) & 8'hff''' #地址0x131
data[18] = '''(_temp_time >> 16) & 8'hff'''
data[19] = '''(_temp_time >> 24) & 8'hff'''
data[24] = 0x00 #地址0x138, sync周期 4B
data[25] = 0x04 #地址0x139
data[28] = 0x0 #sync1偏移
data[29] = 0x0
data[36] = 0x0 #sync3偏移
data[37] = 0x0
genPkt.addSubPkt(2, 0, 0x120, 0x1, 0x28, data)
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)
#-------------------------------------------------------------------------
#>>>>>>设置顺序地址
genPkt.clean()
genPkt.setPktType(0)
data = bytearray(b"\0" * 2)
data[0] = 0x3f
data[1] = 0xff
#subPkt参数索引、索引类型、地址、命令、长度、数据
genPkt.addSubPkt(0x0, 0, random.randint(0, 65535), 0xb, 2, data)
gen_file_def = "set_addr_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)
#-------------------------------------------------------------------------
#>>>>>>广播读
genPkt.clean()
genPkt.setPktType(0)
#subPkt参数索引、索引类型、地址、命令、长度、数据
genPkt.addSubPkt(0x0, 0, 0xc0, 0xd, 4, b"\0"*4)
genPkt.addSubPkt(0x1, 0, 0xc0, 0x0, 4, b"\0"*4)
genPkt.addSubPkt(0x2, 0, 0xc0, 0x0, 4, b"\0"*4)
genPkt.addSubPkt(0x3, 0, 0xc0, 0x0, 4, b"\0"*4)
genPkt.addSubPkt(0x4, 0, 0xc0, 0x0, 4, b"\0"*4)
genPkt.addSubPkt(random.randint(0, 2048), 0, 0xc0, 0xd, 4, b"\0"*4)
genPkt.addSubPkt(random.randint(0, 2048), 0, 0xc0, 0xd, 4, b"\0"*4)
genPkt.addSubPkt(random.randint(0, 2048), 0, 0xc0, 0xd, 4, b"\0"*4)
genPkt.addSubPkt(random.randint(0, 2048), 0, 0xc0, 0xd, 4, b"\0"*4)
gen_file_def = "bc_r_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)
#-------------------------------------------------------------------------
#>>>>>>广播写
genPkt.clean()
genPkt.setPktType(0)
#subPkt参数索引、索引类型、地址、命令、长度、数据
data = bytearray(b"\0" * 2)
data[0] = 32
data[1] = 0
genPkt.addSubPkt(random.randint(0, 2048), 0, 0x0302, 0xe, 2, data)
data = bytearray(b"\0"*100)
for i in range(100):
data[i] = i + 1
genPkt.addSubPkt(random.randint(0, 2048), 0, 0x0800, 0xe, 32, data)
gen_file_def = "bc_w_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)
#-------------------------------------------------------------------------
#>>>>>>广播读写
genPkt.clean()
genPkt.setPktType(0)
#subPkt参数索引、索引类型、地址、命令、长度、数据
data = bytearray(b"\0"*100)
for i in range(4):
data[i] = i + 1
genPkt.addSubPkt(random.randint(0, 2048), 0, 0x00c0, 0xf, 4, data)
gen_file_def = "bc_rw_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)