From 7659bdf51aaa154d370d17f43f31c98c80927691 Mon Sep 17 00:00:00 2001 From: bacon Date: Thu, 17 Jul 2025 19:11:18 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=B8=80=E4=B8=AA=E9=9A=8F?= =?UTF-8?q?=E6=9C=BA=E9=94=99=E8=AF=AF=E5=8C=85=E7=9A=84=E5=8F=91=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tb/shinTest/ShinTopSpiTb.v | 49 ++++++++++++++++++++++++++++++++++---- tb/shinTest/gen_pkt.py | 46 +++++++++++++++++++++++++++++++++++ 2 files changed, 91 insertions(+), 4 deletions(-) diff --git a/tb/shinTest/ShinTopSpiTb.v b/tb/shinTest/ShinTopSpiTb.v index 24e89ac..7f75ab2 100644 --- a/tb/shinTest/ShinTopSpiTb.v +++ b/tb/shinTest/ShinTopSpiTb.v @@ -7,14 +7,15 @@ `define ENABLE_DET_ERR_TEST `define ENABLE_SM1_SEND_TEST //`define ENABLE_SMx_SEND_TEST +`define ENABLE_ERR_PKT1_TEST //`define ENABLE_EXCHG_DATA_SEQ0_TEST //`define ENABLE_EXCHG_DATA_SEQ1_TEST //`define ENABLE_EXCHG_DATA_SEQ2_TEST //`define ENABLE_EXCHG_DATA_SEQ3_TEST -//`define ENABLE_BC_R_TEST -//`define ENABLE_BC_W_TEST +`define ENABLE_BC_R_TEST +`define ENABLE_BC_W_TEST //`define ENABLE_BC_RW_TEST //`define ENABLE_SYNC_TEST @@ -299,7 +300,7 @@ always @(posedge clock or posedge _reset_deadline_ind) begin else begin _deadline_ind_ctr <= _deadline_ind_ctr + 1; end - if (_deadline_ind_ctr >= 10000) begin + if (_deadline_ind_ctr >= 20000) begin _deadline_ind <= 1; end else begin @@ -956,7 +957,7 @@ initial begin //嗅探 _t_start = $realtime; #1000 - $fdisplay(spidata_file, "\n\n测试用例:发送嗅探包,需要在波形文件里检查"); + $fdisplay(spidata_file, "\n\n测试用例:发送错误嗅探包"); `include "detect_err_pkt.vh" @@ -1043,6 +1044,46 @@ initial begin `endif + +`ifdef ENABLE_ERR_PKT1_TEST + begin:ERR_PKT1_TESTCASE + //嗅探 + _t_start = $realtime; + #1000 + $fdisplay(spidata_file, "\n\n测试用例:发送错误数据包"); + + `include "err_pkt1.vh" + + _t_end = $realtime; + $fdisplay(spidata_file, "该测试用例运行时间:%t\n", _t_end - _t_start); + + $fdisplay(spidata_file, "-检查中断"); + spi_trans( (16'h74), (`SPI_READ), (4), (`IF_IDX(0)) ); + spi_trans( (16'h74), (`SPI_READ), (4), (`IF_IDX(1)) ); + spi_trans( (16'h74), (`SPI_READ), (4), (`IF_IDX(2)) ); + spi_trans( (16'h74), (`SPI_READ), (4), (`IF_IDX(3)) ); + spi_trans( (16'h74), (`SPI_READ), (4), (`IF_IDX(4)) ); + + + $fdisplay(spidata_file, "-清除中断"); + txBuf[3] = 8'h00; + txBuf[4] = 8'h00; + txBuf[5] = 8'h00; + txBuf[6] = 8'h60; + spi_trans( (16'h78), (`SPI_WRITE), (4), (`IF_IDX(0)) ); + spi_trans( (16'h78), (`SPI_WRITE), (4), (`IF_IDX(1)) ); + spi_trans( (16'h78), (`SPI_WRITE), (4), (`IF_IDX(2)) ); + spi_trans( (16'h78), (`SPI_WRITE), (4), (`IF_IDX(3)) ); + spi_trans( (16'h78), (`SPI_WRITE), (4), (`IF_IDX(4)) ); + + $fdisplay(spidata_file, "-再次检查中断"); + spi_trans( (16'h74), (`SPI_READ), (4), (`IF_IDX(0)) ); + spi_trans( (16'h74), (`SPI_READ), (4), (`IF_IDX(1)) ); + spi_trans( (16'h74), (`SPI_READ), (4), (`IF_IDX(2)) ); + spi_trans( (16'h74), (`SPI_READ), (4), (`IF_IDX(3)) ); + spi_trans( (16'h74), (`SPI_READ), (4), (`IF_IDX(4)) ); + end +`endif /*--------------------------------------------------------------------------------------------------------- 测试用例 1. 交换数据sm0~sm7 diff --git a/tb/shinTest/gen_pkt.py b/tb/shinTest/gen_pkt.py index 63b1ae5..94b0ac1 100755 --- a/tb/shinTest/gen_pkt.py +++ b/tb/shinTest/gen_pkt.py @@ -334,6 +334,52 @@ if __name__ == '__main__': gen_file_def = "detect_err_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) + + #------------------------------------------------------------------------- + #>>>>>>错误的数据包1 + genPkt.clean() + + data = list() + ''' + for i in range(128): + data.append(random.randint(0, 255)) + ''' + data = data + [0x57, 0x17, 0xfd, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x40] + for i in range(64): + data.append(random.randint(0, 255)) + data = data + [0, 0, 0x00, 0x0c, 0x00, 0xc0, 0x00, 0x40] + for i in range(64): + data.append(random.randint(0, 255)) + data = data + [0, 0] + + genPkt.setPkt(2, data) + gen_file_def = "err_pkt1" + 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() + + data = list() + for i in range(256): + data.append(random.randint(0, 255)) + + genPkt.setPkt(2, data) + gen_file_def = "err_pkt2" + sm_idx = 0 + genPkt.addAfterExc(genWriteTransLenCode(gen_file_def, sm_idx) +genWriteTransPktCode(gen_file_def, sm_idx) +genTrgTransPktCode(gen_file_def, sm_idx)