From 28898cde927b7a170d31ebeffe0dcc30645a6511 Mon Sep 17 00:00:00 2001 From: bacon Date: Wed, 28 May 2025 00:40:35 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=87=E7=94=A8=E6=96=B0=E7=9A=84=E7=94=9F?= =?UTF-8?q?=E6=88=90=E5=8C=85=E7=9A=84=E6=9C=BA=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tb/shinTest/ShinTopSpiTb.v | 17 +++++++ tb/shinTest/gen_pkt.py | 94 ++++++++++++++++++++++++++++++++------ 2 files changed, 96 insertions(+), 15 deletions(-) diff --git a/tb/shinTest/ShinTopSpiTb.v b/tb/shinTest/ShinTopSpiTb.v index fa177bd..ae4174e 100644 --- a/tb/shinTest/ShinTopSpiTb.v +++ b/tb/shinTest/ShinTopSpiTb.v @@ -269,6 +269,7 @@ initial begin #3000000 #500000 #1000000 + #2000000 //#10000000 `endif @@ -1214,6 +1215,22 @@ initial begin _t_end = $time; $fdisplay(spidata_file, "该测试用例运行时间:%2tns", (_t_end - _t_start) / 1000); end + + begin:SYNC_TESTCASE2 + _t_start = $time; + #1000 + + `include "sync_sig2_pkt.vh" + + //spi_trans( (16'h0100), (`SPI_READ), (32), (`IF_IDX(0)) ); + spi_trans( (16'h0100), (`SPI_READ), (16'h48), (`IF_IDX(1)) ); + spi_trans( (16'h0100), (`SPI_READ), (16'h48), (`IF_IDX(2)) ); + spi_trans( (16'h0100), (`SPI_READ), (16'h48), (`IF_IDX(3)) ); + spi_trans( (16'h0100), (`SPI_READ), (16'h48), (`IF_IDX(4)) ); + + _t_end = $time; + $fdisplay(spidata_file, "该测试用例运行时间:%2tns", (_t_end - _t_start) / 1000); + end `endif diff --git a/tb/shinTest/gen_pkt.py b/tb/shinTest/gen_pkt.py index 69b6249..87bfe11 100755 --- a/tb/shinTest/gen_pkt.py +++ b/tb/shinTest/gen_pkt.py @@ -23,8 +23,11 @@ class GenPkt(object): else: self.pkt_type = type - def addSentence(self, str): + 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): @@ -161,17 +164,27 @@ class GenPkt(object): f.write(define_str + "(array) \\\n") for _k in range(i): if _k < (i - 1): - f.write("\tarray``[%d]=8'h%02X;\\\n"%(3 + _k, self.pkt_buf[_k])) + 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: - f.write("\tarray``[%d]=8'h%02X;\n"%(3 + _k, self.pkt_buf[_k])) + 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): - if type(self.pkt_buf[_k]) == int: - f.write("txBuf[%d]=8'h%02X;\n"%(3 + _k, self.pkt_buf[_k])) - else: - f.write("txBuf[%d]=`%s;\n"%(3 + _k, self.pkt_buf[_k])) + f.write("txBuf[%d]=8'h%02X;\n"%(3 + _k, self.pkt_buf[_k])) f.close() + + +#def genAfterExc(gen, ) if __name__ == '__main__': genPkt = GenPkt() @@ -364,8 +377,13 @@ if __name__ == '__main__': #>>>>>>设置同步信号的数据包2 genPkt.clean() genPkt.setPktType(0) + gen_file_def = "sync_sig2_pkt" + sm_idx = 0 - genPkt.addSentence(''' ''') + 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) @@ -375,23 +393,69 @@ if __name__ == '__main__': data[6] = 0xa data[8] = 0xa - data[16] = 0x00 #地址0x130, sync同步点 - data[17] = 0x00 #地址0x131 - #data[18] = 0x10 + 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] = 0x81 #sync1偏移 + data[28] = 0x0 #sync1偏移 data[29] = 0x0 - data[36] = 0x20#sync3偏移 - data[37] = 0x00 + 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) - genPkt.gen("./generated/shin/sync_sig2_pkt.vh", 1) + genPkt.addAfterExc( + '''\n//写入发送长度\n''' + + '''`DEF_%s_sm(txBuf);\n'''%(gen_file_def, ) + + '''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,) + + '''\n$fdisplay(spidata_file, "<<发包:");\n''' + + '''`DEF_%s(txBuf);\n'''%(gen_file_def, ) + + '''spi_trans( (`MST_TX%d_ADDR), (`SPI_WRITE), (`DEF_%s_len), (`IF_IDX(0)) );\n'''%(sm_idx, gen_file_def, ) + + #+ '''//写入替换时间戳替换地址\n''' + #+ '''txBuf[0+3] = 8'h0c;\n''' + #+ '''txBuf[1+3] = 8'hc0;\n''' + #+ '''spi_trans( (16'h24), (`SPI_WRITE), (2), (`IF_IDX(0)) );\n''' + + + '''\n//请求发送\n''' + + '''txBuf[0+3] = `MST_TX_TRIGGER(%d);\n'''%(sm_idx, ) + + '''spi_trans( (16'h20), (`SPI_WRITE), (1), (`IF_IDX(0)) );\n''' + + + '''\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_file_def,)) + + genPkt.gen("./generated/shin/%s.vh"%(gen_file_def,), 1)