From f42e4c3dfad3ecf77c6fea2ca32d7c7fd0083e63 Mon Sep 17 00:00:00 2001 From: bacon Date: Wed, 28 May 2025 10:34:26 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=90=8C=E6=AD=A5=E7=9A=84?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E7=94=A8=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tb/shinTest/ShinTopSpiTb.v | 57 +++++++++++++------------------------- tb/shinTest/gen_pkt.py | 20 +++++++------ 2 files changed, 31 insertions(+), 46 deletions(-) diff --git a/tb/shinTest/ShinTopSpiTb.v b/tb/shinTest/ShinTopSpiTb.v index deea31f..6c07a6e 100644 --- a/tb/shinTest/ShinTopSpiTb.v +++ b/tb/shinTest/ShinTopSpiTb.v @@ -11,6 +11,8 @@ //`define ENABLE_EXCHG_DATA_SEQ2_TEST //`define ENABLE_EXCHG_DATA_BC_TEST `define ENABLE_SYNC_TEST +`define ENABLE_SYNC_SIG0_TEST +`define ENABLE_SYNC_SIG1_TEST module ShinTopSpiTb( @@ -950,7 +952,7 @@ initial begin ---------------------------------------------------------------------------------------------------------*/ // 同步 - begin:SYNC_TESTCASE + begin:SYNC_TESTCASE0 _t_start = $time; #1000 @@ -986,40 +988,16 @@ initial begin spi_trans( (16'h25), (`SPI_WRITE), (2), (`IF_IDX(0)) ); //清除替换时间戳替换地址寄存器 + _t_end = $time; + $fdisplay(spidata_file, "该测试用例运行时间:%2tns", (_t_end - _t_start) / 1000); + end +`endif + +`ifdef ENABLE_SYNC_SIG0_TEST + begin:SYNC_TESTCASE1 + _t_start = $time; + #1000 `include "sync_sig_pkt.vh" - `DEF_sync_sig_pkt_sm(txBuf); - spi_trans( (`MST_TX_LEN_ADDR), (`SPI_WRITE), (2), (`IF_IDX(0)) ); - spi_trans( (`MST_RX_LEN_ADDR), (`SPI_WRITE), (2), (`IF_IDX(0)) ); - - spi_trans( (16'h0100), (`SPI_READ), (8), (`IF_IDX(0))); - _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); - /* - $fdisplay(spidata_file, "读取时间:%d\n", _temp_time); - */ - _temp_time = _temp_time + 32'h3000; - /* - $fdisplay(spidata_file, "读取时间:%2h %2h %2h\n", - (_temp_time & 8'hff), - ((_temp_time >> 8) & 8'hff), - ((_temp_time >> 16) & 8'hff)); - */ - - $fdisplay(spidata_file, "<<发包:"); - `DEF_sync_sig_pkt(txBuf); - - txBuf[16 + 3 + 12] = (_temp_time & 8'hff); - txBuf[17 + 3 + 12] = (_temp_time >> 8) & 8'hff; - txBuf[18 + 3 + 12] = (_temp_time >> 16) & 8'hff; - - spi_trans( (`MST_TX_ADDR), (`SPI_WRITE), (`DEF_sync_sig_pkt_len), (`IF_IDX(0)) ); //写入SM1 - - //发布请求 - txBuf[0+3] = `MST_TX_TRG; - spi_trans( (16'h20), (`SPI_WRITE), (1), (`IF_IDX(0)) );//发送SM0 接收SM0, 请求发送 - @(posedge isResp) #5 begin end - $fdisplay(spidata_file, ">>回包:"); - spi_trans( (`MST_RX_ADDR), (`SPI_READ), (`DEF_sync_sig_pkt_len), (`IF_IDX(0)) );//读一下SM0的切换地址,将fifo弹出 //spi_trans( (16'h0100), (`SPI_READ), (32), (`IF_IDX(0)) ); spi_trans( (16'h0100), (`SPI_READ), (16'h48), (`IF_IDX(1)) ); @@ -1027,8 +1005,8 @@ initial begin spi_trans( (16'h0100), (`SPI_READ), (16'h48), (`IF_IDX(3)) ); spi_trans( (16'h0100), (`SPI_READ), (16'h48), (`IF_IDX(4)) ); - /* - #10000 + + #100000 //清脉冲 txBuf[0+3] = 0; //负载0x122 sync0脉冲宽度 txBuf[1+3] = 0; //负载0x123 @@ -1042,11 +1020,14 @@ initial begin spi_trans( (16'h0122), (`SPI_WRITE), (8), (`IF_IDX(2)) ); //slv2 spi_trans( (16'h0122), (`SPI_WRITE), (8), (`IF_IDX(3)) ); //slv2 spi_trans( (16'h0122), (`SPI_WRITE), (8), (`IF_IDX(4)) ); //slv2 - */ + + #100000 _t_end = $time; $fdisplay(spidata_file, "该测试用例运行时间:%2tns", (_t_end - _t_start) / 1000); end +`endif +`ifdef ENABLE_SYNC_SIG1_TEST begin:SYNC_TESTCASE2 _t_start = $time; #1000 @@ -1075,7 +1056,7 @@ initial begin spi_trans( (16'h40), (`SPI_WRITE), (1), (`IF_IDX(1)) );//复位从站2 */ - #2000000 + #1000000 $display("Testcase Finished! Time Out !!!"); $fclose(spidata_file); $stop; diff --git a/tb/shinTest/gen_pkt.py b/tb/shinTest/gen_pkt.py index 5c4d8f9..93998d2 100755 --- a/tb/shinTest/gen_pkt.py +++ b/tb/shinTest/gen_pkt.py @@ -432,20 +432,26 @@ if __name__ == '__main__': 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 = bytearray(b"\0" * 100) + 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] = 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[24] = 0x00 #地址0x138, sync周期 4B + data[25] = 0x10 #地址0x139 data[28] = 0x81 #sync1偏移 data[29] = 0x0 @@ -456,7 +462,6 @@ if __name__ == '__main__': 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) @@ -464,7 +469,6 @@ if __name__ == '__main__': +genTrgTransPktCode(gen_file_def, sm_idx) +genReadAckPktCode(gen_file_def, sm_idx)) - ''' genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1)