diff --git a/Makefile b/Makefile index 6439bdd..8ba879b 100644 --- a/Makefile +++ b/Makefile @@ -42,13 +42,17 @@ shin: testShin: ./tb/shinTest/gen_pkt.py + mkdir -p generated/log + rm -rf generated/log/* iverilog -Wall \ -o ./tb/build/shinTest.iverilog \ -y ./generated/shin \ -I ./generated/shin \ -D RANDOMIZE_REG_INIT \ ./tb/shinTest/ShinTopSpiTb.v - vvp -N ./tb/build/shinTest.iverilog -lxt2 + vvp -N ./tb/build/shinTest.iverilog -lxt2 || true + ./tb/shinTest/check_testcase.py + vcdShin: gtkwave ./tb/build/wave.vcd & diff --git a/tb/shinTest/ShinTopSpiTb.v b/tb/shinTest/ShinTopSpiTb.v index a978daa..669813a 100644 --- a/tb/shinTest/ShinTopSpiTb.v +++ b/tb/shinTest/ShinTopSpiTb.v @@ -1,40 +1,42 @@ `timescale 1 ns / 1 ps -`define ENABLE_REG_RW_TEST +`define ENABLE_REG_RW1_TEST "generated/log/reg_rw1_tc.log" //`define ENABLE_ENCRYPTION -`define ENABLE_DET_TEST -`define ENABLE_SET_ADDR_TEST -`define ENABLE_INT_INIT_TEST -`define ENABLE_DET_ERR_TEST -`define ENABLE_SM1_SEND_TEST -//`define ENABLE_SMx_SEND_TEST -//`define ENABLE_ERR_PKT1_TEST -//`define ENABLE_ERR_PKT2_TEST -`define ENABLE_ERR_PKT3_TEST +`define ENABLE_DET1_TEST "generated/log/det1_tc.log" +`define ENABLE_DET2_TEST "generated/log/det2_tc.log" +`define ENABLE_SET_ADDR_TEST "generated/log/set_addr_tc.log" +`define ENABLE_INT_INIT_TEST "generated/log/int_init_tc.log" +//`define ENABLE_DET_ERR_TEST +`define ENABLE_SMx_SEND1_TEST "generated/log/sm_send1_tc.log" +`define ENABLE_SMx_SEND2_TEST "generated/log/sm_send2_tc.log" +`define ENABLE_SMx_SEND3_TEST "generated/log/sm_send3_tc.log" +//`define ENABLE_ERR_PKT1_TEST "generated/log/err_pkt1_tc.log" +//`define ENABLE_ERR_PKT2_TEST "generated/log/err_pkt2_tc.log" +//`define ENABLE_ERR_PKT3_TEST "generated/log/err_pkt3_tc.log" -//`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_EXCHG_DATA_SEQ0_TEST "generated/log/exchg_data_seq0_tc.log" +`define ENABLE_EXCHG_DATA_SEQ1_TEST "generated/log/exchg_data_seq1_tc.log" +`define ENABLE_EXCHG_DATA_SEQ2_TEST "generated/log/exchg_data_seq2_tc.log" +`define ENABLE_EXCHG_DATA_SEQ3_TEST "generated/log/exchg_data_seq3_tc.log" -`define ENABLE_BC_R_TEST -`define ENABLE_BC_W_TEST -//`define ENABLE_BC_RW_TEST +`define ENABLE_BC_R_TEST "generated/log/bc_r_tc.log" +`define ENABLE_BC_W_TEST "generated/log/bc_w_tc.log" +`define ENABLE_BC_RW_TEST "generated/log/bc_rw_tc.log" -//`define ENABLE_SYNC_TEST -//`define ENABLE_SYNC_SIG0_TEST -//`define ENABLE_SYNC_SIG1_TEST -//`define ENABLE_RESET_TEST +`define ENABLE_SYNC_TEST "generated/log/sync_tc.log" +`define ENABLE_SYNC_SIG0_TEST "generated/log/sync_sig0_tc.log" +`define ENABLE_SYNC_SIG1_TEST "generated/log/sync_sig1_tc.log" +`define ENABLE_RESET_TEST "generated/log/reset_tc.log" -//`define ENABLE_EBMMU_TC1_TEST -//`define ENABLE_EBMMU_TC2_TEST -//`define ENABLE_EBMMU_TC3_TEST -//`define ENABLE_EBMMU_TC4_TEST -//`define ENABLE_EBMMU_TC5_TEST -//`define ENABLE_EBMMU_TC6_TEST -//`define ENABLE_EBMMU_TC7_TEST +`define ENABLE_EBMMU_TR1_TEST "generated/log/ebmmu_tr1_tc.log" +`define ENABLE_EBMMU_TR2_TEST "generated/log/ebmmu_tr2_tc.log" +`define ENABLE_EBMMU_TR3_TEST "generated/log/ebmmu_tr3_tc.log" +`define ENABLE_EBMMU_TR4_TEST "generated/log/ebmmu_tr4_tc.log" +`define ENABLE_EBMMU_TR5_TEST "generated/log/ebmmu_tr5_tc.log" +`define ENABLE_EBMMU_TR6_TEST "generated/log/ebmmu_tr6_tc.log" +`define ENABLE_EBMMU_TR7_TEST "generated/log/ebmmu_tr7_tc.log" -//`define ENABLE_WD_TC1_TEST +`define ENABLE_WD1_TEST "generated/log/wd1_tc.log" module ShinTopSpiTb( @@ -682,26 +684,59 @@ end txBuf[3 + 15] = 8'h52;\ txBuf[3 + 16] = 8'h01; +`define BEGIN_TESTCASE(filename) \ + integer logh;\ + logh = $fopen(filename, "w") + +`define END_TESTCASE(filename) \ + $fclose(logh) + +`define SPI_TRANS(addr, cmd, len, iface) \ + if (cmd == (`SPI_WRITE)) begin \ + f_write(logh, addr, cmd, len);\ + for (integer _k = 0; _k < len; _k++) begin \ + $fwrite(logh, "8'h%02h ", txBuf[3 + _k]); \ + end \ + spi_trans(addr, cmd, len, iface); \ + end else begin \ + spi_trans(addr, cmd, len, iface); \ + f_write(logh, addr, cmd, len);\ + for (integer _k = 0; _k < len; _k++) begin \ + $fwrite(logh, "8'h%02h ", rxBuf[3 + _k]); \ + end \ + end \ + $fwrite(logh, "\n") + + +task f_write(input [31:0] logh, input [15:0] saddress, input [7:0] scmd, input [12:0] slength); + begin + $fwrite(logh, "16'h%04h 8'h%02h 16'h%04h ", saddress, scmd, slength); + end +endtask + + initial begin #1000 -`ifdef ENABLE_REG_RW_TEST +`ifdef ENABLE_REG_RW1_TEST /*--------------------------------------------------------------------------------------------------------- 测试用例 1. 从IP中读取寄存器,上电后的寄存器期望值为0 ---------------------------------------------------------------------------------------------------------*/ begin:READ_REG_TESTCASE + `BEGIN_TESTCASE(`ENABLE_REG_RW1_TEST); _t_start = $realtime; $fdisplay(spidata_file, "测试用例:从IP中读取寄存器,上电后的寄存器期望值为0"); - spi_trans( (16'h00), (`SPI_READ), (64), (`IF_IQSPI(0)) ); - spi_trans( (16'h00), (`SPI_READ), (64), (`IF_IQSPI(1)) ); - spi_trans( (16'h00), (`SPI_READ), (64), (`IF_IQSPI(2)) ); - spi_trans( (16'h00), (`SPI_READ), (64), (`IF_IQSPI(3)) ); - spi_trans( (16'h00), (`SPI_READ), (64), (`IF_IQSPI(4)) ); + `SPI_TRANS( (16'h00), (`SPI_READ), (64), (`IF_IQSPI(0)) ); + `SPI_TRANS( (16'h00), (`SPI_READ), (64), (`IF_IQSPI(1)) ); + `SPI_TRANS( (16'h00), (`SPI_READ), (64), (`IF_IQSPI(2)) ); + `SPI_TRANS( (16'h00), (`SPI_READ), (64), (`IF_IQSPI(3)) ); + `SPI_TRANS( (16'h00), (`SPI_READ), (64), (`IF_IQSPI(4)) ); _t_end = $realtime; $fdisplay(spidata_file, "该测试用例运行时间:%t\n", _t_end - _t_start); + `END_TESTCASE(`ENABLE_REG_RW1_TEST); end `endif @@ -891,22 +926,23 @@ initial begin end `endif -`ifdef ENABLE_DET_TEST +`ifdef ENABLE_DET1_TEST /*--------------------------------------------------------------------------------------------------------- 测试用例3 ---------------------------------------------------------------------------------------------------------*/ //嗅探 begin:DETECT_DEV_TESTCASE + `BEGIN_TESTCASE(`ENABLE_DET1_TEST); _t_start = $realtime; #1000 $fdisplay(spidata_file, "\n\n测试用例:发送嗅探包,需要在波形文件里检查"); $fdisplay(spidata_file, "-嗅探前,检查链路状态寄存器"); //spi_trans( (16'h00c0), (`SPI_READ), (6), (`IF_IDX(0)) ); - spi_trans( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(1)) ); - spi_trans( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(2)) ); - spi_trans( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(3)) ); - spi_trans( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(4)) ); + `SPI_TRANS( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(1)) ); + `SPI_TRANS( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(2)) ); + `SPI_TRANS( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(3)) ); + `SPI_TRANS( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(4)) ); $fdisplay(spidata_file, "-嗅探"); @@ -917,12 +953,13 @@ initial begin #1000 $fdisplay(spidata_file, "-嗅探后,检查链路状态寄存器"); //spi_trans( (16'h00c0), (`SPI_READ), (6), (`IF_IDX(0)) ); - spi_trans( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(1)) ); - spi_trans( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(2)) ); - spi_trans( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(3)) ); - spi_trans( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(4)) ); + `SPI_TRANS( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(1)) ); + `SPI_TRANS( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(2)) ); + `SPI_TRANS( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(3)) ); + `SPI_TRANS( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(4)) ); _t_end = $realtime; $fdisplay(spidata_file, "该测试用例运行时间:%t\n", _t_end - _t_start); + `END_TESTCASE(`ENABLE_DET1_TEST); end `endif @@ -931,45 +968,48 @@ initial begin 测试用例 ---------------------------------------------------------------------------------------------------------*/ begin:SET_ADDR_TESTCASE + `BEGIN_TESTCASE(`ENABLE_SET_ADDR_TEST); _t_start = $realtime; $fdisplay(spidata_file, "\n\n测试用例:设置顺序索引"); $display("index @ %d", s_ShinTop_Mst.interface__io_cReg_timeStamp); $fdisplay(spidata_file, "-设置顺序地址前,检查顺序地址"); //spi_trans( (16'h0010), (`SPI_READ), (5), (`IF_IDX(0)) ); - spi_trans( (16'h0000), (`SPI_READ), (16), (`IF_IDX(1)) ); - spi_trans( (16'h0000), (`SPI_READ), (16), (`IF_IDX(2)) ); - spi_trans( (16'h0000), (`SPI_READ), (16), (`IF_IDX(3)) ); - spi_trans( (16'h0000), (`SPI_READ), (16), (`IF_IDX(4)) ); + `SPI_TRANS( (16'h0000), (`SPI_READ), (16), (`IF_IDX(1)) ); + `SPI_TRANS( (16'h0000), (`SPI_READ), (16), (`IF_IDX(2)) ); + `SPI_TRANS( (16'h0000), (`SPI_READ), (16), (`IF_IDX(3)) ); + `SPI_TRANS( (16'h0000), (`SPI_READ), (16), (`IF_IDX(4)) ); $fdisplay(spidata_file, "-设置顺序地址"); `include "set_addr_pkt.vh" //测试 - spi_trans( (16'hc0), (`SPI_READ), (6), (`IF_IDX(3)) ); - spi_trans( (16'h0a), (`SPI_READ), (2), (`IF_IDX(1)) ); - spi_trans( (16'h0a), (`SPI_READ), (2), (`IF_IDX(2)) ); - spi_trans( (16'h0a), (`SPI_READ), (2), (`IF_IDX(3)) ); - spi_trans( (16'h0a), (`SPI_READ), (2), (`IF_IDX(4)) ); + `SPI_TRANS( (16'hc0), (`SPI_READ), (6), (`IF_IDX(3)) ); + `SPI_TRANS( (16'h0a), (`SPI_READ), (2), (`IF_IDX(1)) ); + `SPI_TRANS( (16'h0a), (`SPI_READ), (2), (`IF_IDX(2)) ); + `SPI_TRANS( (16'h0a), (`SPI_READ), (2), (`IF_IDX(3)) ); + `SPI_TRANS( (16'h0a), (`SPI_READ), (2), (`IF_IDX(4)) ); //读写 #1000 $fdisplay(spidata_file, "-设置顺序地址后,检查顺序地址"); - spi_trans( (16'h0000), (`SPI_READ), (16), (`IF_IDX(1)) ); - spi_trans( (16'h0000), (`SPI_READ), (16), (`IF_IDX(2)) ); - spi_trans( (16'h0000), (`SPI_READ), (16), (`IF_IDX(3)) ); - spi_trans( (16'h0000), (`SPI_READ), (16), (`IF_IDX(4)) ); + `SPI_TRANS( (16'h0000), (`SPI_READ), (16), (`IF_IDX(1)) ); + `SPI_TRANS( (16'h0000), (`SPI_READ), (16), (`IF_IDX(2)) ); + `SPI_TRANS( (16'h0000), (`SPI_READ), (16), (`IF_IDX(3)) ); + `SPI_TRANS( (16'h0000), (`SPI_READ), (16), (`IF_IDX(4)) ); _t_end = $realtime; $fdisplay(spidata_file, "该测试用例运行时间:%t\n", _t_end - _t_start); + `END_TESTCASE(`ENABLE_SET_ADDR_TEST); end `endif -`ifdef ENABLE_DET_TEST +`ifdef ENABLE_DET2_TEST /*--------------------------------------------------------------------------------------------------------- 测试用例 ---------------------------------------------------------------------------------------------------------*/ begin:DETECT_DEV_TESTCASE_2 + `BEGIN_TESTCASE(`ENABLE_DET2_TEST); //嗅探 _t_start = $realtime; #1000 @@ -977,30 +1017,32 @@ initial begin $fdisplay(spidata_file, "嗅探:使用SM0"); $fdisplay(spidata_file, "-嗅探前,检查链路状态寄存器"); - //spi_trans( (16'h00c0), (`SPI_READ), (6), (`IF_IDX(0)) ); - spi_trans( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(1)) ); - spi_trans( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(2)) ); - spi_trans( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(3)) ); - spi_trans( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(4)) ); + //`SPI_TRANS( (16'h00c0), (`SPI_READ), (6), (`IF_IDX(0)) ); + `SPI_TRANS( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(1)) ); + `SPI_TRANS( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(2)) ); + `SPI_TRANS( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(3)) ); + `SPI_TRANS( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(4)) ); $fdisplay(spidata_file, "-嗅探"); //设置SM1在写入0x3地址触发enq - `include "detect_pkt.vh" + `include "detect_pkt2.vh" $fdisplay(spidata_file, "-嗅探后,检查链路状态寄存器"); - //spi_trans( (16'h00c0), (`SPI_READ), (6), (`IF_IDX(0)) ); - spi_trans( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(1)) ); - spi_trans( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(2)) ); - spi_trans( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(3)) ); - spi_trans( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(4)) ); + //`SPI_TRANS( (16'h00c0), (`SPI_READ), (6), (`IF_IDX(0)) ); + `SPI_TRANS( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(1)) ); + `SPI_TRANS( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(2)) ); + `SPI_TRANS( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(3)) ); + `SPI_TRANS( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(4)) ); _t_end = $realtime; $fdisplay(spidata_file, "该测试用例运行时间:%t\n", _t_end - _t_start); + `END_TESTCASE(`ENABLE_DET2_TEST); end `endif `ifdef ENABLE_DET_ERR_TEST begin:DET_ERR_TEST + `BEGIN_TESTCASE(`ENABLE_DET_ERR_TEST); //嗅探 _t_start = $realtime; #1000 @@ -1012,11 +1054,11 @@ initial begin $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)) ); + `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, "-清除中断"); @@ -1024,23 +1066,25 @@ initial begin 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)) ); + `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)) ); + `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_TESTCASE(`ENABLE_DET_ERR_TEST); end `endif -`ifdef ENABLE_SM1_SEND_TEST +`ifdef ENABLE_SMx_SEND1_TEST begin:SM1_SEND_TESTCASE + `BEGIN_TESTCASE(`ENABLE_SMx_SEND1_TEST); _t_start = $realtime; $fdisplay(spidata_file, "\n单读:使用SM1"); $fdisplay(spidata_file, "-SM1:数据包"); @@ -1049,14 +1093,15 @@ initial begin _t_end = $realtime; $fdisplay(spidata_file, "该测试用例运行时间:%t\n", _t_end - _t_start); + `END_TESTCASE(`ENABLE_SMx_SEND1_TEST); end `endif -`ifdef ENABLE_SMx_SEND_TEST +`ifdef ENABLE_SMx_SEND2_TEST begin:SM2_SEND_TESTCASE - + `BEGIN_TESTCASE(`ENABLE_SMx_SEND2_TEST); _t_start = $realtime; #1000 $display("read&write @ %d", s_ShinTop_Mst.interface__io_cReg_timeStamp); @@ -1068,10 +1113,13 @@ initial begin _t_end = $realtime; $fdisplay(spidata_file, "该测试用例运行时间:%t\n", _t_end - _t_start); + `END_TESTCASE(`ENABLE_SMx_SEND2_TEST); end +`endif - +`ifdef ENABLE_SMx_SEND3_TEST begin:SM3_SEND_TESTCASE + `BEGIN_TESTCASE(`ENABLE_SMx_SEND3_TEST); _t_start = $realtime; #1000 $display("read&write @ %d", s_ShinTop_Mst.interface__io_cReg_timeStamp); @@ -1080,20 +1128,21 @@ initial begin `include "sm3_pkt.vh" - spi_trans( (16'h0800), (`SPI_READ), (16), (`IF_IDX(1)) ); - spi_trans( (16'h0800), (`SPI_READ), (16), (`IF_IDX(2)) ); - spi_trans( (16'h0800), (`SPI_READ), (16), (`IF_IDX(3)) ); - spi_trans( (16'h0800), (`SPI_READ), (16), (`IF_IDX(4)) ); + `SPI_TRANS( (16'h0800), (`SPI_READ), (16), (`IF_IDX(1)) ); + `SPI_TRANS( (16'h0800), (`SPI_READ), (16), (`IF_IDX(2)) ); + `SPI_TRANS( (16'h0800), (`SPI_READ), (16), (`IF_IDX(3)) ); + `SPI_TRANS( (16'h0800), (`SPI_READ), (16), (`IF_IDX(4)) ); _t_end = $realtime; $fdisplay(spidata_file, "该测试用例运行时间:%t\n", _t_end - _t_start); + `END_TESTCASE(`ENABLE_SMx_SEND3_TEST); end - `endif `ifdef ENABLE_ERR_PKT1_TEST begin:ERR_PKT1_TESTCASE + `BEGIN_TESTCASE(`ENABLE_ERR_PKT1_TEST); //嗅探 _t_start = $realtime; #1000 @@ -1105,11 +1154,11 @@ initial begin $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)) ); + `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, "-清除中断"); @@ -1117,23 +1166,25 @@ initial begin 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)) ); + `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)) ); + `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_TESTCASE(`ENABLE_ERR_PKT1_TEST); end `endif `ifdef ENABLE_ERR_PKT2_TEST begin:ERR_PKT2_TESTCASE + `BEGIN_TESTCASE(`ENABLE_ERR_PKT2_TEST); //嗅探 _t_start = $realtime; #1000 @@ -1145,11 +1196,11 @@ initial begin $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)) ); + `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, "-清除中断"); @@ -1157,23 +1208,25 @@ initial begin 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)) ); + `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)) ); + `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_TESTCASE(`ENABLE_ERR_PKT2_TEST); end `endif `ifdef ENABLE_ERR_PKT3_TEST begin:ERR_PKT3_TESTCASE + `BEGIN_TESTCASE(`ENABLE_ERR_PKT3_TEST); //嗅探 _t_start = $realtime; #1000 @@ -1185,11 +1238,11 @@ initial begin $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)) ); + `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, "-清除中断"); @@ -1197,20 +1250,23 @@ initial begin 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)) ); + `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)) ); + `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_TESTCASE(`ENABLE_ERR_PKT3_TEST); end `endif + + /*--------------------------------------------------------------------------------------------------------- 测试用例 1. 交换数据sm0~sm7 @@ -1222,6 +1278,7 @@ initial begin ---------------------------------------------------------------------------------------------------------*/ `ifdef ENABLE_EXCHG_DATA_SEQ0_TEST begin:EXCHG_DATA_SEQ0_TESTCASE + `BEGIN_TESTCASE(`ENABLE_EXCHG_DATA_SEQ0_TEST); _t_start = $realtime; #1000 $fdisplay(spidata_file, "\n\n测试用例:交换数据sm0~sm7"); @@ -1231,11 +1288,13 @@ initial begin _t_end = $realtime; $fdisplay(spidata_file, "该测试用例运行时间:%t\n", _t_end - _t_start); + `END_TESTCASE(`ENABLE_EXCHG_DATA_SEQ0_TEST); end `endif `ifdef ENABLE_EXCHG_DATA_SEQ1_TEST begin:EXCHG_DATA_SEQ1_TESTCASE + `BEGIN_TESTCASE(`ENABLE_EXCHG_DATA_SEQ1_TEST); _t_start = $realtime; #1000 $fdisplay(spidata_file, "\n\n测试用例:交换数据写dev2_sm0/dev1_sm2/dev3_sm4/dev4_sm6"); @@ -1243,13 +1302,13 @@ initial begin `include "seq_1_pkt.vh" - spi_trans( (16'h1800), (`SPI_READ), (64), (`IF_IDX(1)) ); + `SPI_TRANS( (16'h1800), (`SPI_READ), (64), (`IF_IDX(1)) ); $fdisplay(spidata_file, "-嗅探前,检查链路状态寄存器"); - //spi_trans( (16'h00c0), (`SPI_READ), (6), (`IF_IDX(0)) ); - spi_trans( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(1)) ); - spi_trans( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(2)) ); - spi_trans( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(3)) ); - spi_trans( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(4)) ); + //`SPI_TRANS( (16'h00c0), (`SPI_READ), (6), (`IF_IDX(0)) ); + `SPI_TRANS( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(1)) ); + `SPI_TRANS( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(2)) ); + `SPI_TRANS( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(3)) ); + `SPI_TRANS( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(4)) ); $fdisplay(spidata_file, "-嗅探"); //设置SM1在写入0x3地址触发enq @@ -1257,22 +1316,24 @@ initial begin `include "detect_pkt.vh" $fdisplay(spidata_file, "-嗅探后,检查链路状态寄存器"); - //spi_trans( (16'h00c0), (`SPI_READ), (6), (`IF_IDX(0)) ); - spi_trans( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(1)) ); - spi_trans( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(2)) ); - spi_trans( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(3)) ); - spi_trans( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(4)) ); - spi_trans( (16'h0800), (`SPI_READ), (64), (`IF_IDX(2)) ); - spi_trans( (16'h2800), (`SPI_READ), (64), (`IF_IDX(3)) ); - spi_trans( (16'h3800), (`SPI_READ), (64), (`IF_IDX(4)) ); + //`SPI_TRANS( (16'h00c0), (`SPI_READ), (6), (`IF_IDX(0)) ); + `SPI_TRANS( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(1)) ); + `SPI_TRANS( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(2)) ); + `SPI_TRANS( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(3)) ); + `SPI_TRANS( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(4)) ); + `SPI_TRANS( (16'h0800), (`SPI_READ), (64), (`IF_IDX(2)) ); + `SPI_TRANS( (16'h2800), (`SPI_READ), (64), (`IF_IDX(3)) ); + `SPI_TRANS( (16'h3800), (`SPI_READ), (64), (`IF_IDX(4)) ); _t_end = $realtime; $fdisplay(spidata_file, "该测试用例运行时间:%t\n", _t_end - _t_start); + `END_TESTCASE(`ENABLE_EXCHG_DATA_SEQ1_TEST); end `endif `ifdef ENABLE_EXCHG_DATA_SEQ2_TEST begin:EXCHG_DATA_SEQ2_TESTCASE + `BEGIN_TESTCASE(`ENABLE_EXCHG_DATA_SEQ2_TEST); _t_start = $realtime; #1000 $fdisplay(spidata_file, "\n\n测试用例:交换数据读dev1_sm1/dev2_sm3/dev3_sm5/dev4_sm7"); @@ -1282,11 +1343,13 @@ initial begin _t_end = $realtime; $fdisplay(spidata_file, "该测试用例运行时间:%t\n", _t_end - _t_start); + `END_TESTCASE(`ENABLE_EXCHG_DATA_SEQ2_TEST); end `endif `ifdef ENABLE_EXCHG_DATA_SEQ3_TEST begin:EXCHG_DATA_SEQ3_TESTCASE + `BEGIN_TESTCASE(`ENABLE_EXCHG_DATA_SEQ3_TEST); _t_start = $realtime; #1000 $fdisplay(spidata_file, "\n\n测试用例:交换数据读写"); @@ -1296,12 +1359,14 @@ initial begin _t_end = $realtime; $fdisplay(spidata_file, "该测试用例运行时间:%t\n", _t_end - _t_start); + `END_TESTCASE(`ENABLE_EXCHG_DATA_SEQ3_TEST); end `endif `ifdef ENABLE_BC_R_TEST begin:EXCHG_DATA_BC_R_TESTCASE + `BEGIN_TESTCASE(`ENABLE_BC_R_TEST); _t_start = $realtime; #1000 $fdisplay(spidata_file, "\n\n测试用例:广播读"); @@ -1311,11 +1376,13 @@ initial begin _t_end = $realtime; $fdisplay(spidata_file, "该测试用例运行时间:%t\n", _t_end - _t_start); + `END_TESTCASE(`ENABLE_BC_R_TEST); end `endif `ifdef ENABLE_BC_W_TEST begin:EXCHG_DATA_BC_W_TESTCASE + `BEGIN_TESTCASE(`ENABLE_BC_W_TEST); _t_start = $realtime; #1000 $display("read&write @ %d", s_ShinTop_Mst.interface__io_cReg_timeStamp); @@ -1323,18 +1390,20 @@ initial begin $fdisplay(spidata_file, "\n\n测试用例:广播写"); `include "bc_w_pkt.vh" - spi_trans( (16'h0800), (`SPI_READ), (32), (`IF_IDX(1)) ); - spi_trans( (16'h0800), (`SPI_READ), (32), (`IF_IDX(2)) ); - spi_trans( (16'h0800), (`SPI_READ), (32), (`IF_IDX(3)) ); - spi_trans( (16'h0800), (`SPI_READ), (32), (`IF_IDX(4)) ); + `SPI_TRANS( (16'h0800), (`SPI_READ), (32), (`IF_IDX(1)) ); + `SPI_TRANS( (16'h0800), (`SPI_READ), (32), (`IF_IDX(2)) ); + `SPI_TRANS( (16'h0800), (`SPI_READ), (32), (`IF_IDX(3)) ); + `SPI_TRANS( (16'h0800), (`SPI_READ), (32), (`IF_IDX(4)) ); _t_end = $realtime; $fdisplay(spidata_file, "该测试用例运行时间:%t\n", _t_end - _t_start); + `END_TESTCASE(`ENABLE_BC_W_TEST); end `endif `ifdef ENABLE_BC_RW_TEST begin:EXCHG_DATA_BC_RW_TESTCASE + `BEGIN_TESTCASE(`ENABLE_BC_RW_TEST); _t_start = $realtime; #1000 $fdisplay(spidata_file, "\n\n测试用例:广播读写"); @@ -1342,10 +1411,11 @@ initial begin `include "bc_rw_pkt.vh" - spi_trans( (16'h0180), (`SPI_READ), (128), (`IF_IDX(1)) ); + `SPI_TRANS( (16'h0180), (`SPI_READ), (128), (`IF_IDX(1)) ); _t_end = $realtime; $fdisplay(spidata_file, "该测试用例运行时间:%t\n", _t_end - _t_start); + `END_TESTCASE(`ENABLE_BC_RW_TEST); end `endif @@ -1358,6 +1428,7 @@ initial begin // 同步 begin:SYNC_TESTCASE0 + `BEGIN_TESTCASE(`ENABLE_SYNC_TEST); _t_start = $realtime; #1000 @@ -1369,22 +1440,24 @@ initial begin _t_end = $realtime; $fdisplay(spidata_file, "该测试用例运行时间:%t\n", _t_end - _t_start); + `END_TESTCASE(`ENABLE_SYNC_TEST); end `endif `ifdef ENABLE_SYNC_SIG0_TEST begin:SYNC_TESTCASE1 + `BEGIN_TESTCASE(`ENABLE_SYNC_SIG0_TEST); _t_start = $realtime; #1000 $fdisplay(spidata_file, "\n\n测试用例:测试同步信号(电平)"); `include "sync_sig_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)) ); + //`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)) ); #100000 @@ -1397,44 +1470,48 @@ initial begin txBuf[5+3] = 0; //负载0x127 txBuf[6+3] = 0; //负载0x128 sync3脉冲宽度 txBuf[7+3] = 0; //负载0x129 - spi_trans( (16'h0122), (`SPI_WRITE), (8), (`IF_IDX(1)) ); //slv2 - 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 + `SPI_TRANS( (16'h0122), (`SPI_WRITE), (8), (`IF_IDX(1)) ); //slv2 + `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 = $realtime; $fdisplay(spidata_file, "该测试用例运行时间:%t\n", _t_end - _t_start); + `END_TESTCASE(`ENABLE_SYNC_SIG0_TEST); end `endif `ifdef ENABLE_SYNC_SIG1_TEST begin:SYNC_TESTCASE2 + `BEGIN_TESTCASE(`ENABLE_SYNC_SIG1_TEST); _t_start = $realtime; #1000 $fdisplay(spidata_file, "\n\n测试用例:测试同步信号(脉冲)"); `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)) ); + //`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 = $realtime; $fdisplay(spidata_file, "该测试用例运行时间:%t\n", _t_end - _t_start); + `END_TESTCASE(`ENABLE_SYNC_SIG1_TEST); end `endif `ifdef ENABLE_RESET_TEST begin:RESET_SYSTEM_TEST + `BEGIN_TESTCASE(`ENABLE_RESET_TEST); $fdisplay(spidata_file, "\n\n测试用例:复位系统测试"); txBuf[0+3] = 8'h0f; txBuf[1+3] = 8'h00; txBuf[2+3] = 8'h00; txBuf[3+3] = 8'h80; - spi_trans( (16'h78), (`SPI_WRITE), (4), (`IF_IDX(0)) ); + `SPI_TRANS( (16'h78), (`SPI_WRITE), (4), (`IF_IDX(0)) ); @@ -1445,17 +1522,17 @@ initial begin txBuf[0+4] = 8'h00; txBuf[0+5] = 8'h66; txBuf[0+6] = 8'h79; - spi_trans( (16'h40), (`SPI_WRITE), (4), (`IF_IDX(0)) );//复位主站 - spi_trans( (16'h40), (`SPI_WRITE), (4), (`IF_IDX(2)) );//复位从站2 + `SPI_TRANS( (16'h40), (`SPI_WRITE), (4), (`IF_IDX(0)) );//复位主站 + `SPI_TRANS( (16'h40), (`SPI_WRITE), (4), (`IF_IDX(2)) );//复位从站2 $fdisplay(spidata_file, "-配置系统"); #50000 txBuf[0+3] = 8'h01; - spi_trans( (16'h00), (`SPI_WRITE), (1), (`IF_IDX(0)) ); + `SPI_TRANS( (16'h00), (`SPI_WRITE), (1), (`IF_IDX(0)) ); txBuf[0+3] = 8'h02; - spi_trans( (16'h00), (`SPI_WRITE), (1), (`IF_IDX(2)) ); + `SPI_TRANS( (16'h00), (`SPI_WRITE), (1), (`IF_IDX(2)) ); `ifdef ENABLE_ENCRYPTION $fdisplay(spidata_file, "-配置加密"); @@ -1476,11 +1553,11 @@ initial begin $fdisplay(spidata_file, "-嗅探:使用SM0"); $fdisplay(spidata_file, "-嗅探前,检查链路状态寄存器"); - //spi_trans( (16'h00c0), (`SPI_READ), (6), (`IF_IDX(0)) ); - spi_trans( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(1)) ); - spi_trans( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(2)) ); - spi_trans( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(3)) ); - spi_trans( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(4)) ); + //`SPI_TRANS( (16'h00c0), (`SPI_READ), (6), (`IF_IDX(0)) ); + `SPI_TRANS( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(1)) ); + `SPI_TRANS( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(2)) ); + `SPI_TRANS( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(3)) ); + `SPI_TRANS( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(4)) ); $fdisplay(spidata_file, "-嗅探"); //设置SM1在写入0x3地址触发enq @@ -1488,37 +1565,37 @@ initial begin `include "detect_pkt.vh" $fdisplay(spidata_file, "-嗅探后,检查链路状态寄存器"); - //spi_trans( (16'h00c0), (`SPI_READ), (6), (`IF_IDX(0)) ); - spi_trans( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(1)) ); - spi_trans( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(2)) ); - spi_trans( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(3)) ); - spi_trans( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(4)) ); + //`SPI_TRANS( (16'h00c0), (`SPI_READ), (6), (`IF_IDX(0)) ); + `SPI_TRANS( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(1)) ); + `SPI_TRANS( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(2)) ); + `SPI_TRANS( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(3)) ); + `SPI_TRANS( (16'h00c0), (`SPI_READ), (4), (`IF_IDX(4)) ); $fdisplay(spidata_file, "-设置顺序地址前,检查顺序地址"); - //spi_trans( (16'h0010), (`SPI_READ), (5), (`IF_IDX(0)) ); - spi_trans( (16'h0000), (`SPI_READ), (16), (`IF_IDX(1)) ); - spi_trans( (16'h0000), (`SPI_READ), (16), (`IF_IDX(2)) ); - spi_trans( (16'h0000), (`SPI_READ), (16), (`IF_IDX(3)) ); - spi_trans( (16'h0000), (`SPI_READ), (16), (`IF_IDX(4)) ); + //`SPI_TRANS( (16'h0010), (`SPI_READ), (5), (`IF_IDX(0)) ); + `SPI_TRANS( (16'h0000), (`SPI_READ), (16), (`IF_IDX(1)) ); + `SPI_TRANS( (16'h0000), (`SPI_READ), (16), (`IF_IDX(2)) ); + `SPI_TRANS( (16'h0000), (`SPI_READ), (16), (`IF_IDX(3)) ); + `SPI_TRANS( (16'h0000), (`SPI_READ), (16), (`IF_IDX(4)) ); $fdisplay(spidata_file, "-设置顺序地址"); `include "set_addr_pkt.vh" //测试 - spi_trans( (16'hc0), (`SPI_READ), (6), (`IF_IDX(3)) ); - spi_trans( (16'h0a), (`SPI_READ), (2), (`IF_IDX(1)) ); - spi_trans( (16'h0a), (`SPI_READ), (2), (`IF_IDX(2)) ); - spi_trans( (16'h0a), (`SPI_READ), (2), (`IF_IDX(3)) ); - spi_trans( (16'h0a), (`SPI_READ), (2), (`IF_IDX(4)) ); + `SPI_TRANS( (16'hc0), (`SPI_READ), (6), (`IF_IDX(3)) ); + `SPI_TRANS( (16'h0a), (`SPI_READ), (2), (`IF_IDX(1)) ); + `SPI_TRANS( (16'h0a), (`SPI_READ), (2), (`IF_IDX(2)) ); + `SPI_TRANS( (16'h0a), (`SPI_READ), (2), (`IF_IDX(3)) ); + `SPI_TRANS( (16'h0a), (`SPI_READ), (2), (`IF_IDX(4)) ); //读写 #1000 $fdisplay(spidata_file, "-设置顺序地址后,检查顺序地址"); - spi_trans( (16'h0000), (`SPI_READ), (16), (`IF_IDX(1)) ); - spi_trans( (16'h0000), (`SPI_READ), (16), (`IF_IDX(2)) ); - spi_trans( (16'h0000), (`SPI_READ), (16), (`IF_IDX(3)) ); - spi_trans( (16'h0000), (`SPI_READ), (16), (`IF_IDX(4)) ); + `SPI_TRANS( (16'h0000), (`SPI_READ), (16), (`IF_IDX(1)) ); + `SPI_TRANS( (16'h0000), (`SPI_READ), (16), (`IF_IDX(2)) ); + `SPI_TRANS( (16'h0000), (`SPI_READ), (16), (`IF_IDX(3)) ); + `SPI_TRANS( (16'h0000), (`SPI_READ), (16), (`IF_IDX(4)) ); #1000 @@ -1539,11 +1616,11 @@ initial begin `include "sync_sig_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)) ); + //`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)) ); #100000 //清脉冲 @@ -1555,25 +1632,26 @@ initial begin txBuf[5+3] = 0; //负载0x127 txBuf[6+3] = 0; //负载0x128 sync3脉冲宽度 txBuf[7+3] = 0; //负载0x129 - spi_trans( (16'h0122), (`SPI_WRITE), (8), (`IF_IDX(1)) ); //slv2 - 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 + `SPI_TRANS( (16'h0122), (`SPI_WRITE), (8), (`IF_IDX(1)) ); //slv2 + `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 */ `include "sync_sig3_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)) ); - + `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)) ); + `END_TESTCASE(`ENABLE_RESET_TEST); end `endif -`ifdef ENABLE_EBMMU_TC1_TEST - begin:EBMMU_TC1_TEST +`ifdef ENABLE_EBMMU_TR1_TEST + begin:EBMMU_TR1_TEST + `BEGIN_TESTCASE(`ENABLE_EBMMU_TR1_TEST); _t_start = $realtime; #1000 @@ -1587,11 +1665,13 @@ initial begin _t_end = $realtime; $fdisplay(spidata_file, "该测试用例运行时间:%t\n", _t_end - _t_start); + `END_TESTCASE(`ENABLE_EBMMU_TR1_TEST); end `endif -`ifdef ENABLE_EBMMU_TC2_TEST - begin:EBMMU_TC2_TEST +`ifdef ENABLE_EBMMU_TR2_TEST + begin:EBMMU_TR2_TEST + `BEGIN_TESTCASE(`ENABLE_EBMMU_TR2_TEST); _t_start = $realtime; #1000 @@ -1606,12 +1686,14 @@ initial begin _t_end = $realtime; $fdisplay(spidata_file, "该测试用例运行时间:%t\n", _t_end - _t_start); + `END_TESTCASE(`ENABLE_EBMMU_TR2_TEST); end `endif -`ifdef ENABLE_EBMMU_TC3_TEST - begin:EBMMU_TC3_TEST +`ifdef ENABLE_EBMMU_TR3_TEST + begin:EBMMU_TR3_TEST + `BEGIN_TESTCASE(`ENABLE_EBMMU_TR3_TEST); _t_start = $realtime; #1000 @@ -1624,11 +1706,13 @@ initial begin _t_end = $realtime; $fdisplay(spidata_file, "该测试用例运行时间:%t\n", _t_end - _t_start); + `END_TESTCASE(`ENABLE_EBMMU_TR3_TEST); end `endif -`ifdef ENABLE_EBMMU_TC4_TEST - begin:EBMMU_TC4_TEST +`ifdef ENABLE_EBMMU_TR4_TEST + begin:EBMMU_TR4_TEST + `BEGIN_TESTCASE(`ENABLE_EBMMU_TR4_TEST); _t_start = $realtime; #1000 $fdisplay(spidata_file, "\n\n测试用例: ebmmu 测试用4"); @@ -1640,11 +1724,13 @@ initial begin _t_end = $realtime; $fdisplay(spidata_file, "该测试用例运行时间:%t\n", _t_end - _t_start); + `END_TESTCASE(`ENABLE_EBMMU_TR4_TEST); end `endif -`ifdef ENABLE_EBMMU_TC5_TEST - begin:EBMMU_TC5_TEST +`ifdef ENABLE_EBMMU_TR5_TEST + begin:EBMMU_TR5_TEST + `BEGIN_TESTCASE(`ENABLE_EBMMU_TR5_TEST); _t_start = $realtime; #1000 $fdisplay(spidata_file, "\n\n测试用例: ebmmu 测试用5"); @@ -1658,11 +1744,13 @@ initial begin _t_end = $realtime; $fdisplay(spidata_file, "该测试用例运行时间:%t\n", _t_end - _t_start); + `END_TESTCASE(`ENABLE_EBMMU_TR5_TEST); end `endif -`ifdef ENABLE_EBMMU_TC6_TEST - begin:EBMMU_TC6_TEST +`ifdef ENABLE_EBMMU_TR6_TEST + begin:EBMMU_TR6_TEST + `BEGIN_TESTCASE(`ENABLE_EBMMU_TR6_TEST); _t_start = $realtime; #1000 $fdisplay(spidata_file, "\n\n测试用例: ebmmu 测试用6"); @@ -1674,11 +1762,13 @@ initial begin _t_end = $realtime; $fdisplay(spidata_file, "该测试用例运行时间:%t\n", _t_end - _t_start); + `END_TESTCASE(`ENABLE_EBMMU_TR6_TEST); end `endif -`ifdef ENABLE_EBMMU_TC7_TEST - begin:EBMMU_TC7_TEST +`ifdef ENABLE_EBMMU_TR7_TEST + begin:EBMMU_TR7_TEST + `BEGIN_TESTCASE(`ENABLE_EBMMU_TR7_TEST); _t_start = $realtime; #1000 $fdisplay(spidata_file, "\n\n测试用例: ebmmu 测试用7"); @@ -1690,11 +1780,13 @@ initial begin _t_end = $realtime; $fdisplay(spidata_file, "该测试用例运行时间:%t\n", _t_end - _t_start); + `END_TESTCASE(`ENABLE_EBMMU_TR7_TEST); end `endif -`ifdef ENABLE_WD_TC1_TEST - begin:WD_TC7_TEST +`ifdef ENABLE_WD1_TEST + begin:WD1_TEST + `BEGIN_TESTCASE(`ENABLE_WD1_TEST); _t_start = $realtime; #1000 $fdisplay(spidata_file, "\n\n测试用例: Watchdog 测试用1"); @@ -1704,6 +1796,7 @@ initial begin _t_end = $realtime; $fdisplay(spidata_file, "该测试用例运行时间:%t\n", _t_end - _t_start); + `END_TESTCASE(`ENABLE_WD1_TEST); end `endif diff --git a/tb/shinTest/check_testcase.py b/tb/shinTest/check_testcase.py new file mode 100755 index 0000000..a8be670 --- /dev/null +++ b/tb/shinTest/check_testcase.py @@ -0,0 +1,148 @@ +#!/usr/bin/env python +#encoding=utf-8 +import os + + +def parse_value(value): + """Parse a value with bit-width specification and return its integer representation and mask. + The mask will have 1s where the bits are valid and 0s where they are 'x'. + """ + if 'h' in value.lower(): + base = 16 + prefix_length = value.find('h') + 1 + elif 'o' in value.lower(): + base = 8 + prefix_length = value.find('o') + 1 + elif 'b' in value.lower(): + base = 2 + prefix_length = value.find('b') + 1 + else: + raise ValueError(f"Invalid format for value: {value}") + + # Extract the numeric part + num_str = value[prefix_length:] + + # Initialize parsed value and mask + parsed_value = 0 + mask = 0 + + # Process each character in the numeric part + #print(num_str) + for char in num_str: + if char.lower() == 'x': + mask = mask * base + parsed_value = parsed_value * base + else: + mask = (mask * base) + (base - 1) + parsed_value = (parsed_value * base) + int(char, base) + + #print(value, hex(parsed_value), hex(mask)) + return parsed_value, mask + +def compare_files(source_file, target_file): + try: + with open(source_file, 'r') as src, open(target_file, 'r') as tgt: + source_lines = src.readlines() + target_lines = tgt.readlines() + + if len(source_lines) != len(target_lines): + print(f"Error: The number of lines in {source_file} and {target_file} do not match.") + return + + all_match = True + + for i, (src_line, tgt_line) in enumerate(zip(source_lines, target_lines)): + src_values = src_line.strip().split() + tgt_values = tgt_line.strip().split() + + if len(src_values) != len(tgt_values): + print(f"Error: Line {i+1}: The number of values in {source_file} and {target_file} do not match.") + all_match = False + continue + + line_match = True + + for j, (src_val, tgt_val) in enumerate(zip(src_values, tgt_values)): + try: + src_int, src_mask = parse_value(src_val) + tgt_int, tgt_mask = parse_value(tgt_val) + except ValueError as e: + print(f"Error: Line {i+1}, Position {j+1}: {e}") + line_match = False + all_match = False + continue + + # Combine masks to determine which bits to compare + combined_mask = src_mask #& tgt_mask + + # Compare only the bits that are not 'x' in either source or target + if combined_mask == 0: + #print(f"Line {i+1}, Position {j+1}: Both values contain 'x' at all positions, skipping check.") + continue + + masked_src = src_int & combined_mask + masked_tgt = tgt_int & combined_mask + #print(hex(masked_src), hex(masked_tgt), hex(combined_mask)) + + if masked_src == masked_tgt: + #print(f"Line {i+1}, Position {j+1}: Values match ({src_val} == {tgt_val}).") + pass + else: + print(f"\tLine {i+1}, Position {j+1}: Values differ ({src_val} != {tgt_val}).") + line_match = False + all_match = False + + if line_match: + #print(f"Line {i+1}: All values on this line match.") + pass + + if all_match: + #print("All lines match.") + #pass + return True + else: + #print("Some lines or positions do not match.") + #pass + return False + + except FileNotFoundError as e: + print(f"Error: {e}") + except Exception as e: + print(f"An unexpected error occurred: {e}") + + return False + +def list_files_in_directory(directory): + try: + # 获取目录中的所有文件和子目录 + files = os.listdir(directory) + + # 过滤出文件(排除子目录) + files_only = [f for f in files if os.path.isfile(os.path.join(directory, f))] + + return files_only + except FileNotFoundError: + print(f"Error: The directory '{directory}' does not exist.") + return [] + except PermissionError: + print(f"Error: Permission denied to access the directory '{directory}'.") + return [] + except Exception as e: + print(f"An unexpected error occurred: {e}") + return [] + +if __name__ == "__main__": + files = list_files_in_directory('generated/log') + src_files = list_files_in_directory('tb/shinTest/testcase_result') + for fi in files: + rst_f = 'generated/log/' + fi + src_f = 'tb/shinTest/testcase_result/' + fi + + if not (fi in src_files): + print(f"Testcase:{fi}\t\t\t[\033[93mIGNORE\033[0m]") + continue + + if compare_files(src_f, rst_f): + print(f"Testcase:{fi}\t\t\t[\033[92mPASS\033[0m]") + else: + print(f"Testcase:{fi}\t\t\t[\033[91mFAILED\033[0m]") \ No newline at end of file diff --git a/tb/shinTest/gen_pkt.py b/tb/shinTest/gen_pkt.py index 49a5e54..0ecdfa3 100755 --- a/tb/shinTest/gen_pkt.py +++ b/tb/shinTest/gen_pkt.py @@ -204,32 +204,32 @@ class GenPkt(object): -def genWriteTransLenCode(gen_name, sm_idx): +def genWriteTransLenCode(gen_name, sm_idx, wlog=True): 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,) + + '''%s( (`MST_TX%d_LEN_ADDR), (`SPI_WRITE), (2), (`IF_IDX(0)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans", sm_idx,)\ + + '''%s( (`MST_RX%d_LEN_ADDR), (`SPI_WRITE), (2), (`IF_IDX(0)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans", sm_idx,) -def genWriteTransPktCode(gen_name, sm_idx): +def genWriteTransPktCode(gen_name, sm_idx, wlog=True): 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, ) + + '''%s( (`MST_TX%d_ADDR), (`SPI_WRITE), (`DEF_%s_len), (`IF_IDX(0)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans", sm_idx, gen_name, ) -def genTrgTransPktCode(gen_name, sm_idx): +def genTrgTransPktCode(gen_name, sm_idx, wlog=True): 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''' + + '''%s( (16'h20), (`SPI_WRITE), (1), (`IF_IDX(0)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans", ) -def genReadAckPktCode(gen_name, sm_idx): +def genReadAckPktCode(gen_name, sm_idx, wlog=True): return '''\n//等待回包\n'''\ + '''_reset_deadline_ind = 1;\n'''\ + '''@(posedge isResp or posedge _deadline_ind) #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,) + + '''%s( (`MST_RX%d_ADDR), (`SPI_READ), (`DEF_%s_len), (`IF_IDX(0)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans", sm_idx, gen_name,) -def genEnableInsertTimeCode(pos, enableTime=True, enableDelay=True): +def genEnableInsertTimeCode(pos, enableTime=True, enableDelay=True, wlog=True): data = pos & 0x3fff if enableTime: data = data | 0x8000 @@ -239,22 +239,22 @@ def genEnableInsertTimeCode(pos, enableTime=True, enableDelay=True): + '''$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''' + + '''%s( (16'h24), (`SPI_WRITE), (2), (`IF_IDX(0)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans",) -def genDisableInsertTimeCode(): +def genDisableInsertTimeCode(wlog=True): 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''' + + '''%s( (16'h24), (`SPI_WRITE), (2), (`IF_IDX(0)) ); //清除替换时间戳替换地址寄存器\n'''%("`SPI_TRANS" if wlog else "spi_trans", ) -def genCheckInsertTimeCode(): +def genCheckInsertTimeCode(wlog=True): return '''\n//检查替换时间戳替换地址\n'''\ + '''$fdisplay(spidata_file, "--检查时间戳插入");\n'''\ - + '''spi_trans( (16'h24), (`SPI_READ), (2), (`IF_IDX(0)) ); //检查替换时间戳替换地址寄存器\n''' + + '''%s( (16'h24), (`SPI_READ), (2), (`IF_IDX(0)) ); //检查替换时间戳替换地址寄存器\n'''%("`SPI_TRANS" if wlog else "spi_trans", ) -def genIFRwDataCode(dev, addr, isWrite = False, data_len=0, data = None): +def genIFRwDataCode(dev, addr, isWrite = False, data_len=0, data = None, wlog=True): if isWrite == True: if (data == None) or (len(data) == 0): data=list() @@ -265,14 +265,14 @@ def genIFRwDataCode(dev, addr, isWrite = False, data_len=0, data = None): code = code + '''txBuf[%d]=8'h%02x;\n'''%(idx, item & 0xff) idx = idx + 1 - code = code + '''spi_trans( (16'h%04x), (`SPI_WRITE), (%d), (`IF_IDX(%d)) );\n'''%(addr, data_len, dev) + code = code + '''%s( (16'h%04x), (`SPI_WRITE), (%d), (`IF_IDX(%d)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans", addr, data_len, dev) return code else: code = '' - code = code + '''spi_trans( (16'h%04x), (`SPI_READ), (%d), (`IF_IDX(%d)) );\n'''%(addr, data_len, dev) + code = code + '''%s( (16'h%04x), (`SPI_READ), (%d), (`IF_IDX(%d)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans", addr, data_len, dev) return code -def genSlvSMWriteData(dev, sm, data_len, data = None): +def genSlvSMWriteData(dev, sm, data_len, data = None, wlog=True): smaddr = list() for i in range(8): smaddr.append(0x300 + i * 4 + 2) @@ -292,15 +292,15 @@ def genSlvSMWriteData(dev, sm, data_len, data = None): 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) + + '''%s((16'h0%04x), (`SPI_WRITE), (2), (`IF_IDX(%d)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans", 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) + code = code + '''%s( (16'h%04x), (`SPI_WRITE), (%d), (`IF_IDX(%d)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans", 0x800 + sm * 2048, data_len, dev) return code -def genSlvSMReadData(dev, sm, data_len): +def genSlvSMReadData(dev, sm, data_len, wlog=True): if not ((sm == 0) or (sm == 2) or (sm == 4) or (sm == 6)): #写入数据,lvds读;这个空间是lvds写,mcu读 return '' @@ -308,7 +308,7 @@ def genSlvSMReadData(dev, sm, data_len): return '' code = "" - code = code + '''spi_trans( (16'h%04x), (`SPI_READ), (%d), (`IF_IDX(%d)) );\n'''%(0x800 + sm * 2048, data_len, dev) + code = code + '''%s( (16'h%04x), (`SPI_READ), (%d), (`IF_IDX(%d)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans", 0x800 + sm * 2048, data_len, dev) return code @@ -329,6 +329,20 @@ if __name__ == '__main__': +genReadAckPktCode(gen_file_def, sm_idx)) genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1) + + #------------------------------------------------------------------------- + #>>>>>>嗅探数据包2 + genPkt.clean() + genPkt.setPktType(1) + gen_file_def = "detect_pkt2" + 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() diff --git a/tb/shinTest/testcase_result/det1_tc.log b/tb/shinTest/testcase_result/det1_tc.log new file mode 100644 index 0000000..4f9e2d0 --- /dev/null +++ b/tb/shinTest/testcase_result/det1_tc.log @@ -0,0 +1,13 @@ +16'h00c0 8'h01 16'h0004 8'h00 8'h00 8'h00 8'h00 +16'h00c0 8'h01 16'h0004 8'h00 8'h00 8'h00 8'h00 +16'h00c0 8'h01 16'h0004 8'h00 8'h00 8'h00 8'h00 +16'h00c0 8'h01 16'h0004 8'h00 8'h00 8'h00 8'h00 +16'h0302 8'h00 16'h0002 8'h04 8'h00 +16'h0306 8'h00 16'h0002 8'h04 8'h00 +16'h1000 8'h00 16'h0004 8'h00 8'h01 8'h3f 8'hff +16'h0020 8'h00 16'h0001 8'h01 +16'h0800 8'h01 16'h0004 8'h00 8'h01 8'h00 8'h00 +16'h00c0 8'h01 16'h0004 8'h28 8'h00 8'h00 8'h00 +16'h00c0 8'h01 16'h0004 8'h28 8'h00 8'h00 8'h00 +16'h00c0 8'h01 16'h0004 8'h28 8'h00 8'h00 8'h00 +16'h00c0 8'h01 16'h0004 8'h00 8'h00 8'h00 8'h00 diff --git a/tb/shinTest/testcase_result/det2_tc.log b/tb/shinTest/testcase_result/det2_tc.log new file mode 100644 index 0000000..23ed231 --- /dev/null +++ b/tb/shinTest/testcase_result/det2_tc.log @@ -0,0 +1,13 @@ +16'h00c0 8'h01 16'h0004 8'h28 8'h00 8'h02 8'h00 +16'h00c0 8'h01 16'h0004 8'h28 8'h00 8'h03 8'h00 +16'h00c0 8'h01 16'h0004 8'h28 8'h00 8'h04 8'h00 +16'h00c0 8'h01 16'h0004 8'h00 8'h00 8'h00 8'h00 +16'h0302 8'h00 16'h0002 8'h04 8'h00 +16'h0306 8'h00 16'h0002 8'h04 8'h00 +16'h1000 8'h00 16'h0004 8'h00 8'h01 8'h3f 8'hff +16'h0020 8'h00 16'h0001 8'h01 +16'h0800 8'h01 16'h0004 8'h00 8'h01 8'h00 8'h01 +16'h00c0 8'h01 16'h0004 8'h08 8'h00 8'h02 8'h00 +16'h00c0 8'h01 16'h0004 8'h08 8'h00 8'h03 8'h00 +16'h00c0 8'h01 16'h0004 8'h08 8'h00 8'h04 8'h00 +16'h00c0 8'h01 16'h0004 8'h00 8'h00 8'h00 8'h00 diff --git a/tb/shinTest/testcase_result/reg_rw1_tc.log b/tb/shinTest/testcase_result/reg_rw1_tc.log new file mode 100644 index 0000000..2bfee68 --- /dev/null +++ b/tb/shinTest/testcase_result/reg_rw1_tc.log @@ -0,0 +1,5 @@ +16'h0000 8'h01 16'h0040 8'h00 8'hf0 8'haa 8'haa 8'haa 8'haa 8'haa 8'haa 8'h55 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 +16'h0000 8'h01 16'h0040 8'h00 8'hf0 8'haa 8'haa 8'haa 8'haa 8'haa 8'haa 8'h55 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 +16'h0000 8'h01 16'h0040 8'h00 8'hf0 8'haa 8'haa 8'haa 8'haa 8'haa 8'haa 8'h55 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 +16'h0000 8'h01 16'h0040 8'h00 8'hf0 8'haa 8'haa 8'haa 8'haa 8'haa 8'haa 8'h55 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 +16'h0000 8'h01 16'h0040 8'h00 8'hf0 8'haa 8'haa 8'haa 8'haa 8'haa 8'haa 8'h55 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 diff --git a/tb/shinTest/testcase_result/set_addr_tc.log b/tb/shinTest/testcase_result/set_addr_tc.log new file mode 100644 index 0000000..c2ad28e --- /dev/null +++ b/tb/shinTest/testcase_result/set_addr_tc.log @@ -0,0 +1,18 @@ +16'h0000 8'h01 16'h0010 8'h02 8'hf0 8'haa 8'haa 8'haa 8'haa 8'haa 8'haa 8'h55 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 +16'h0000 8'h01 16'h0010 8'h02 8'hf0 8'haa 8'haa 8'haa 8'haa 8'haa 8'haa 8'h55 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 +16'h0000 8'h01 16'h0010 8'h02 8'hf0 8'haa 8'haa 8'haa 8'haa 8'haa 8'haa 8'h55 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 +16'h0000 8'h01 16'h0010 8'h02 8'hf0 8'haa 8'haa 8'haa 8'haa 8'haa 8'haa 8'h55 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 +16'h0302 8'h00 16'h0002 8'h0e 8'h00 +16'h0306 8'h00 16'h0002 8'h0e 8'h00 +16'h1000 8'h00 16'h000e 8'h00 8'ha0 8'h00 8'h00 8'h00 8'h00 8'hxx 8'hxx 8'hb0 8'h02 8'h3f 8'hff 8'h00 8'h00 +16'h0020 8'h00 16'h0001 8'h01 +16'h0800 8'h01 16'h000e 8'h00 8'ha0 8'h00 8'h00 8'h00 8'h00 8'hxx 8'hxx 8'hb0 8'h02 8'h3f 8'hff 8'h00 8'h04 +16'h00c0 8'h01 16'h0006 8'h28 8'h00 8'h04 8'h00 8'h00 8'h00 +16'h000a 8'h01 16'h0002 8'h01 8'h00 +16'h000a 8'h01 16'h0002 8'h02 8'h00 +16'h000a 8'h01 16'h0002 8'h03 8'h00 +16'h000a 8'h01 16'h0002 8'h04 8'h00 +16'h0000 8'h01 16'h0010 8'h02 8'hf0 8'haa 8'haa 8'haa 8'haa 8'haa 8'haa 8'h55 8'h00 8'h01 8'h00 8'h00 8'h00 8'h00 8'h00 +16'h0000 8'h01 16'h0010 8'h02 8'hf0 8'haa 8'haa 8'haa 8'haa 8'haa 8'haa 8'h55 8'h00 8'h02 8'h00 8'h00 8'h00 8'h00 8'h00 +16'h0000 8'h01 16'h0010 8'h02 8'hf0 8'haa 8'haa 8'haa 8'haa 8'haa 8'haa 8'h55 8'h00 8'h03 8'h00 8'h00 8'h00 8'h00 8'h00 +16'h0000 8'h01 16'h0010 8'h02 8'hf0 8'haa 8'haa 8'haa 8'haa 8'haa 8'haa 8'h55 8'h00 8'h04 8'h00 8'h00 8'h00 8'h00 8'h00