From 18170d00dae5ab20ba5f180fd9cbea1fb0648032 Mon Sep 17 00:00:00 2001 From: bacon Date: Thu, 26 Jun 2025 16:37:12 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=94=9F=E6=88=90=E4=BB=8E?= =?UTF-8?q?=E7=AB=99=E9=80=A0SM=E6=95=B0=E6=8D=AE=E7=9A=84python=E4=BB=A3?= =?UTF-8?q?=E7=A0=81,=E7=94=9F=E6=88=90verilog=E6=B5=8B=E8=AF=95=E4=BB=A3?= =?UTF-8?q?=E7=A0=81;=E4=BF=AE=E6=94=B9=E7=9B=B8=E5=85=B3=E7=9A=84?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E7=94=A8=E4=BE=8B;=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E6=89=93=E5=8D=B0=E7=9A=84=E8=BE=93=E5=87=BA=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tb/shinTest/ShinTopSpiTb.v | 74 +++++++++++++++++--------------------- tb/shinTest/gen_pkt.py | 54 +++++++++++++++++++++++++--- 2 files changed, 83 insertions(+), 45 deletions(-) diff --git a/tb/shinTest/ShinTopSpiTb.v b/tb/shinTest/ShinTopSpiTb.v index 99275b3..8304563 100644 --- a/tb/shinTest/ShinTopSpiTb.v +++ b/tb/shinTest/ShinTopSpiTb.v @@ -9,7 +9,7 @@ `define ENABLE_EXCHG_DATA_SEQ0_TEST //`define ENABLE_EXCHG_DATA_SEQ1_TEST -//`define ENABLE_EXCHG_DATA_SEQ2_TEST +`define ENABLE_EXCHG_DATA_SEQ2_TEST //`define ENABLE_EXCHG_DATA_SEQ3_TEST //`define ENABLE_BC_R_TEST @@ -17,9 +17,9 @@ //`define ENABLE_BC_RW_TEST `define ENABLE_SYNC_TEST -`define ENABLE_SYNC_SIG0_TEST -`define ENABLE_SYNC_SIG1_TEST -`define ENABLE_RESET_TEST +//`define ENABLE_SYNC_SIG0_TEST +//`define ENABLE_SYNC_SIG1_TEST +//`define ENABLE_RESET_TEST //`define ENABLE_EBMMU_TC1_TEST //`define ENABLE_EBMMU_TC2_TEST @@ -457,6 +457,35 @@ task spi_trans( input [15:0] saddress, input [7:0] scmd, input [12:0] slength,in _len = rxBuf[_pos + 5] + (rxBuf[_pos + 4] & 8'h0f) * 256; end end + + begin:PRINT_PKT_COMMENT + integer dev; + integer addr_type; + integer addr; + integer cmd; + integer len; + + if (scmd == 0) begin + addr_type = txBuf[_pos + 1] & 8'h3; + dev = txBuf[_pos] * 256 + ((txBuf[_pos + 1] >> 2) & 8'hff); + addr = txBuf[_pos + 2] * 256 + (txBuf[_pos + 3] & 8'hff); + cmd = (txBuf[_pos + 4] >> 4) & 8'h0f; + len = (txBuf[_pos + 4] & 8'h0f) * 256 + (txBuf[_pos + 5] & 8'hff); + end else begin + addr_type = rxBuf[_pos + 1] & 8'h3; + dev = rxBuf[_pos] * 256 + ((rxBuf[_pos + 1] >> 2) & 8'hff); + addr = rxBuf[_pos + 2] * 256 + (rxBuf[_pos + 3] & 8'hff); + cmd = (rxBuf[_pos + 4] >> 4) & 8'h0f; + len = (rxBuf[_pos + 4] & 8'h0f) * 256 + (rxBuf[_pos + 5] & 8'hff); + end + + if (addr_type == 0) + $fwrite(spidata_file, "// type:%3d dev:%3d addr:0x%04x cmd:0x%1x len:%3d", addr_type, dev, addr[15:0], cmd[3:0], len); + else begin + addr = dev * 65536 + addr; + $fwrite(spidata_file, "// type:%3d addr:0x08x cmd:0x%1x len:%3d", addr_type, addr, cmd[3:0], len); + end + end $fwrite(spidata_file, "\n{{ "); _pos = _pos + 6; @@ -991,43 +1020,6 @@ initial begin $fdisplay(spidata_file, "\n\n测试用例:交换数据读dev1_sm1/dev2_sm3/dev3_sm5/dev4_sm7"); $display("read&write @ %d", s_ShinTop_Mst.interface__io_cReg_timeStamp); - txBuf[3] = 8'h80; - txBuf[4] = 8'h00; - spi_trans((16'h0306), (`SPI_WRITE), (2), (`IF_IDX(1)) );//dev1_sm1 - - txBuf[3] = 8'h98; - txBuf[4] = 8'h00; - spi_trans((16'h030e), (`SPI_WRITE), (2), (`IF_IDX(2)) );//dev2_sm3 - - txBuf[3] = 8'h81; - txBuf[4] = 8'h00; - spi_trans((16'h0316), (`SPI_WRITE), (2), (`IF_IDX(3)) );//dev2_sm3 - - txBuf[3] = 8'h8c; - txBuf[4] = 8'h00; - spi_trans((16'h031e), (`SPI_WRITE), (2), (`IF_IDX(4)) );//dev2_sm3 - - - for (integer i=0; i < 128; i++) begin - txBuf[i + 3] = i + 1; - end - spi_trans( (16'h1000), (`SPI_WRITE), (128), (`IF_IDX(1)) ); - - for (integer i=0; i < 152; i++) begin - txBuf[i + 3] = i + 2; - end - spi_trans( (16'h2000), (`SPI_WRITE), (152), (`IF_IDX(2)) ); - - for (integer i=0; i < 129; i++) begin - txBuf[i + 3] = i + 3; - end - spi_trans( (16'h3000), (`SPI_WRITE), (129), (`IF_IDX(3)) ); - - for (integer i=0; i < 140; i++) begin - txBuf[i + 3] = i + 4; - end - spi_trans( (16'h4000), (`SPI_WRITE), (140), (`IF_IDX(4)) ); - `include "seq_2_pkt.vh" _t_end = $realtime; diff --git a/tb/shinTest/gen_pkt.py b/tb/shinTest/gen_pkt.py index a02e09c..caaff8a 100755 --- a/tb/shinTest/gen_pkt.py +++ b/tb/shinTest/gen_pkt.py @@ -231,7 +231,48 @@ def genCheckInsertTimeCode(): return '''\n//检查替换时间戳替换地址\n'''\ + '''$fdisplay(spidata_file, "--检查时间戳插入");\n'''\ + '''spi_trans( (16'h24), (`SPI_READ), (2), (`IF_IDX(0)) ); //检查替换时间戳替换地址寄存器\n''' + +def genSlvSMWriteData(dev, sm, data_len, data = None): + 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,)\ + + '''spi_trans((16'h0%04x), (`SPI_WRITE), (2), (`IF_IDX(%d)) );\n'''%(smaddr[sm], dev) + + for i in range(data_len): + code = code + '''txBuf[%d + 3] = 8'h%02x;\n'''%(i, data[i]) + + code = code + '''spi_trans( (16'h%04x), (`SPI_WRITE), (%d), (`IF_IDX(%d)) );\n'''%(0x800 + sm * 2048, data_len, dev) + return code + +def genSlvSMReadData(dev, sm, data_len): + 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 + '''spi_trans( (16'h%04x), (`SPI_READ), (%d), (`IF_IDX(%d)) );\n'''%(0x800 + sm * 2048, data_len, dev) + + return code + + if __name__ == '__main__': genPkt = GenPkt() @@ -418,12 +459,17 @@ if __name__ == '__main__': #>>>>>>普通数据包2 genPkt.clean() genPkt.setPktType(0) - + + genPkt.addBeforeExc( genSlvSMWriteData(3, 1, 129) + + genSlvSMWriteData(4, 1, 140) + + genSlvSMWriteData(1, 1, 128) + + genSlvSMWriteData(2, 1, 152)) + #subPkt参数:索引、索引类型、地址、命令、长度、数据 - genPkt.addSubPkt(3, 0, 0x3000, 0x0, 129, b"\0"*129) - genPkt.addSubPkt(4, 0, 0x4000, 0x0, 140, b"\0"*140) + genPkt.addSubPkt(3, 0, 0x1000, 0x0, 129, b"\0"*129) + genPkt.addSubPkt(4, 0, 0x1000, 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(2, 0, 0x1000, 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)