diff --git a/tb/shinTest/ShinTopSpiTb.v b/tb/shinTest/ShinTopSpiTb.v index efdbe79..adfb873 100644 --- a/tb/shinTest/ShinTopSpiTb.v +++ b/tb/shinTest/ShinTopSpiTb.v @@ -26,8 +26,10 @@ //`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_TC6_TEST +//`define ENABLE_EBMMU_TC7_TEST + +`define ENABLE_WD_TC1_TEST module ShinTopSpiTb( @@ -792,6 +794,15 @@ initial begin spi_trans( (16'h70), (`SPI_READ), (4), (`IF_IDX(2)) ); spi_trans( (16'h70), (`SPI_READ), (4), (`IF_IDX(3)) ); spi_trans( (16'h70), (`SPI_READ), (4), (`IF_IDX(4)) ); + + $fdisplay(spidata_file, "-中断改为脉冲模式"); + txBuf[3] = 8'h10; + txBuf[4] = 8'h80; + spi_trans( (16'h7c), (`SPI_WRITE), (2), (`IF_IDX(0)) ); + spi_trans( (16'h7c), (`SPI_WRITE), (2), (`IF_IDX(1)) ); + spi_trans( (16'h7c), (`SPI_WRITE), (2), (`IF_IDX(2)) ); + spi_trans( (16'h7c), (`SPI_WRITE), (2), (`IF_IDX(3)) ); + spi_trans( (16'h7c), (`SPI_WRITE), (2), (`IF_IDX(4)) ); end `endif @@ -1430,6 +1441,20 @@ initial begin end `endif +`ifdef ENABLE_WD_TC1_TEST + begin:WD_TC7_TEST + _t_start = $realtime; + #1000 + $fdisplay(spidata_file, "\n\n测试用例: Watchdog 测试用1"); + $display("read&write @ %d", s_ShinTop_Mst.interface__io_cReg_timeStamp); + + `include "wd_tc1.vh" + + _t_end = $realtime; + $fdisplay(spidata_file, "该测试用例运行时间:%t\n", _t_end - _t_start); + end +`endif + #1000000 $display("Testcase Finished! Time Out !!!"); $fclose(spidata_file); diff --git a/tb/shinTest/gen_pkt.py b/tb/shinTest/gen_pkt.py index 0aed2dc..cd8361e 100755 --- a/tb/shinTest/gen_pkt.py +++ b/tb/shinTest/gen_pkt.py @@ -232,6 +232,25 @@ def genCheckInsertTimeCode(): + '''$fdisplay(spidata_file, "--检查时间戳插入");\n'''\ + '''spi_trans( (16'h24), (`SPI_READ), (2), (`IF_IDX(0)) ); //检查替换时间戳替换地址寄存器\n''' + +def genIFRwDataCode(dev, addr, isWrite = False, data_len=0, data = None): + if isWrite == True: + if (data == None) or (len(data) == 0): + data=list() + + code = '' + idx = 3 + for item in data: + 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) + return code + else: + code = '' + code = code + '''spi_trans( (16'h%04x), (`SPI_READ), (%d), (`IF_IDX(%d)) );\n'''%(addr, data_len, dev) + return code + def genSlvSMWriteData(dev, sm, data_len, data = None): smaddr = list() for i in range(8): @@ -1527,8 +1546,7 @@ if __name__ == '__main__': genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1) -#-------------------------------------------------------------------------- - #------------------------------------------------------------------------- + #-------------------------------------------------------------------------- #>>>>>>设置EB-MMU,测试用例7 genPkt.clean() genPkt.setPktType(0) @@ -1661,6 +1679,61 @@ if __name__ == '__main__': genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1) + #-------------------------------------------------------------------------- + #>>>>>> 测试用例1 看门狗测试 + genPkt.clean() + genPkt.setPktType(0) + + data = 1<<1 ##使能看门狗1 + data0 = [data&0xff, (data>>8)&0xff, (data>>16)&0xff, (data>>24)&0xff] + + data = 0x100 ##看门狗的超时值 + data1 = [data&0xff, (data>>8)&0xff, (data>>16)&0xff, (data>>24)&0xff] + + data = 0xffffffff ##清除中断 + data2 = [data&0xff, (data>>8)&0xff, (data>>16)&0xff, (data>>24)&0xff] + + genPkt.addBeforeExc( genIFRwDataCode(1, 0x404, True, 4, data0) + + genIFRwDataCode(1, 0x40C, True, 4, data1) + + genIFRwDataCode(1, 0x078, True, 4, data2) + + genIFRwDataCode(2, 0x078, True, 4, data2) + + genIFRwDataCode(3, 0x078, True, 4, data2) + + genIFRwDataCode(4, 0x078, True, 4, data2) + + genIFRwDataCode(1, 0x400, True, 4, [0xff, 0xff, 0xff, 0xff]) + + genIFRwDataCode(0, 0x074, False, 0x04) + + genIFRwDataCode(1, 0x074, False, 0x04) + + genIFRwDataCode(2, 0x074, False, 0x04) + + genIFRwDataCode(3, 0x074, False, 0x04) + + genIFRwDataCode(4, 0x074, False, 0x04) + + genIFRwDataCode(1, 0x400, False, 0x04)) + #genPkt.addBeforeExc( genIFRwDataCode(1, 0x078, True, 4, [0xff, 0xff, 0xff, 0xff])) + + data = [0,] * 2 + data[0] = 0x80 + data[1] = 0x00 + genPkt.addSubPkt(0x0, 0, 0x302, 0xe, 2, data) + + data = [0,] * 0x50 + + #subPkt参数:索引、索引类型、地址、命令、长度、数据 + genPkt.addSubPkt(1, 0, 0x800, 0x1, 0x50, data) + + gen_file_def = "wd_tc1" + 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) + +genIFRwDataCode(1, 0x800, False, 0x80) + +genIFRwDataCode(0, 0x074, False, 0x04) + +genIFRwDataCode(1, 0x074, False, 0x04) + +genIFRwDataCode(2, 0x074, False, 0x04) + +genIFRwDataCode(3, 0x074, False, 0x04) + +genIFRwDataCode(4, 0x074, False, 0x04) + +genIFRwDataCode(1, 0x400, False, 0x04)) + + genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1)