diff --git a/tb/shinTest/ShinTopSpiTb.v b/tb/shinTest/ShinTopSpiTb.v index dee34f0..6cdae78 100644 --- a/tb/shinTest/ShinTopSpiTb.v +++ b/tb/shinTest/ShinTopSpiTb.v @@ -393,7 +393,7 @@ task spi_trans( input [15:0] saddress, input [7:0] scmd, input [12:0] slength,in begin //$fwrite(spidata_file, "------------%5t------------\n", $time); $fwrite(spidata_file, "T:%2tns \tdev:%4d, addr:0x%02h%02h, %s, len:%4d\n", - $time/1000, sidx, txBuf[1], txBuf[0], + $time/1000, ((sidx >= 5)? ((sidx >= 10)? (sidx - 10):(sidx - 5)):sidx), txBuf[1], txBuf[0], ((txBuf[2] == 0)? "Write":" Read"), slength); for (integer i=0; i>>嗅探后,检查链路状态寄存器"); @@ -537,7 +543,9 @@ initial begin spi_trans( (16'h00c0), (`SPI_READ), (6), (`IF_IDX(3)) ); spi_trans( (16'h00c0), (`SPI_READ), (6), (`IF_IDX(4)) ); - +/*--------------------------------------------------------------------------------------------------------- +测试用例4 +---------------------------------------------------------------------------------------------------------*/ $fdisplay(spidata_file, "\n\n测试用例4-设置顺序索引"); $display("index @ %d", s_ShinTop_Mst.interface__io_cReg_timeStamp); @@ -600,8 +608,6 @@ initial begin //读写 #50000 #50000 - #50000 - #50000 $fdisplay(spidata_file, "--->>>设置顺序地址后,检查顺序地址"); //spi_trans( (16'h0010), (`SPI_READ), (5), (`IF_IDX(0)) ); spi_trans( (16'h0000), (`SPI_READ), (16), (`IF_IDX(1)) ); @@ -609,7 +615,60 @@ initial begin spi_trans( (16'h0000), (`SPI_READ), (16), (`IF_IDX(3)) ); spi_trans( (16'h0000), (`SPI_READ), (16), (`IF_IDX(4)) ); - $fdisplay(spidata_file, "\n\n测试用例5-交换数据"); +/*--------------------------------------------------------------------------------------------------------- +测试用例5 +---------------------------------------------------------------------------------------------------------*/ + //嗅探 + #10000 + $fdisplay(spidata_file, "\n\n测试用例5-发送嗅探包,需要在波形文件里检查"); + begin + $fdisplay(spidata_file, "--->>>嗅探前,检查链路状态寄存器"); + //spi_trans( (16'h00c0), (`SPI_READ), (6), (`IF_IDX(0)) ); + spi_trans( (16'h00c0), (`SPI_READ), (6), (`IF_IDX(1)) ); + spi_trans( (16'h00c0), (`SPI_READ), (6), (`IF_IDX(2)) ); + spi_trans( (16'h00c0), (`SPI_READ), (6), (`IF_IDX(3)) ); + spi_trans( (16'h00c0), (`SPI_READ), (6), (`IF_IDX(4)) ); + + $fdisplay(spidata_file, "--->>>嗅探"); + //设置SM1在写入0x3地址触发enq + txBuf[0+3] = 8'h03; + txBuf[1+3] = 8'h00; + spi_trans( (16'h0302), (`SPI_WRITE), (2), (`IF_IDX(0)) ); + spi_trans( (16'h0306), (`SPI_WRITE), (2), (`IF_IDX(0)) ); + + //无子报文 + `include "detect_pkt.vh" + spi_trans( (16'h1000), (`SPI_WRITE), (4), (`IF_IDX(0)) ); //写入SM1 + + //发布请求 + txBuf[0+3] = 8'h04; + txBuf[1+3] = 8'h00; + spi_trans( (16'h21), (`SPI_WRITE), (2), (`IF_IDX(0)) );//写入长度 + + txBuf[0+3] = 8'h01; + spi_trans( (16'h20), (`SPI_WRITE), (1), (`IF_IDX(0)) );//发送SM0 接收SM0, 请求发送 + @(posedge isResp) #5 begin end + + end + + + // 顺序索引 + //#50000 + #50000 + #50000 + $fdisplay(spidata_file, "--->>>嗅探后,检查链路状态寄存器"); + //spi_trans( (16'h00c0), (`SPI_READ), (6), (`IF_IDX(0)) ); + spi_trans( (16'h00c0), (`SPI_READ), (6), (`IF_IDX(1)) ); + spi_trans( (16'h00c0), (`SPI_READ), (6), (`IF_IDX(2)) ); + spi_trans( (16'h00c0), (`SPI_READ), (6), (`IF_IDX(3)) ); + spi_trans( (16'h00c0), (`SPI_READ), (6), (`IF_IDX(4)) ); + +/*--------------------------------------------------------------------------------------------------------- +测试用例6 +---------------------------------------------------------------------------------------------------------*/ + #50000 + #50000 + $fdisplay(spidata_file, "\n\n测试用例6-交换数据"); $display("read&write @ %d", s_ShinTop_Mst.interface__io_cReg_timeStamp); begin @@ -621,9 +680,6 @@ initial begin `include "seq_pkt.vh" spi_trans( (16'h1000), (`SPI_WRITE), (516), (`IF_IDX(0)) ); //写入SM1 - - - //发布请求 txBuf[0+3] = 8'h01; spi_trans( (16'h20), (`SPI_WRITE), (1), (`IF_IDX(0)) );//发送SM0 接收SM0, 请求发送 @@ -633,6 +689,10 @@ initial begin spi_trans( (16'ha03), (`SPI_READ), (1), (`IF_IDX(0)) );//读一下SM0的切换地址,将fifo弹出 +/*--------------------------------------------------------------------------------------------------------- +测试用例7 +测试 同步(sync) 和 同步输出 (sync_out) +---------------------------------------------------------------------------------------------------------*/ // 同步 #90000 @@ -651,10 +711,8 @@ initial begin #90000 $display("sync @ %d", s_ShinTop_Mst.interface__io_cReg_timeStamp); + $fdisplay(spidata_file, "\n\n测试用例-测试同步(sync)和同步输出(sync_out)"); begin - - - //设置SM1在写入 0x18 len触发enq txBuf[0+3] = 8'h18; txBuf[1+3] = 8'h00; @@ -684,8 +742,6 @@ initial begin - //设定sync信号 - //设置SM1在写入52 len触发enq txBuf[0+3] = 8'd52; txBuf[1+3] = 8'h00; @@ -702,8 +758,7 @@ initial begin spi_trans( (16'h833), (`SPI_READ), (1), (`IF_IDX(0)) );//读一下SM0的切换地址,将fifo弹出 end - - + //清脉冲 txBuf[0+3] = 0; //负载0x122 sync0脉冲宽度 txBuf[1+3] = 0; //负载0x123 @@ -714,9 +769,6 @@ initial begin txBuf[6+3] = 0; //负载0x128 sync3脉冲宽度 txBuf[7+3] = 0; //负载0x129 spi_trans( (16'h0122), (`SPI_WRITE), (8), (`IF_IDX(2)) ); //slv2 - - - end