diff --git a/tb/shinTest/Makefile_vcs b/tb/shinTest/Makefile_vcs index 82e7790..643117d 100644 --- a/tb/shinTest/Makefile_vcs +++ b/tb/shinTest/Makefile_vcs @@ -4,6 +4,7 @@ OUTPUT = shin_test CPU_COUNT := $(shell nproc) SPI_TYPE ?= -spi 0 TRANS_CODE ?= +DEVCLK ?= --dev1 0 90 --dev2 0 -90 VCS = vcs -sverilog +v2k -timescale=1ns/1ps \ -full64 \ @@ -25,59 +26,12 @@ testShin_vcs: python3 ./shinTest/check_testcase.py testShinClk_vcs: - python3 ./shinTest/gen_pkt_clk.py --dev1 0 90 --dev2 0 -90 + python3 ./shinTest/gen_pkt_clk.py ${DEVCLK} ${SPI_TYPE} ${TRANS_CODE} mkdir -p generated/log rm -rf generated/log/* ${VCS} -f ./shinTestClk_vcs.f ${SIM} python3 ./shinTest/check_testcase.py - mv spi_trans_data.txt generated/spi_trans_data1.txt - mv generated/wave.vcd generated/wave1.vcd - \ - python3 ./shinTest/gen_pkt_clk.py --dev1 45 180 --dev3 70 -180 -8b10b - mkdir -p generated/log - rm -rf generated/log/* - ${VCS} -f ./shinTestClk_vcs.f - ${SIM} - python3 ./shinTest/check_testcase.py - mv spi_trans_data.txt generated/spi_trans_data2.txt - mv generated/wave.vcd generated/wave2.vcd - \ - python3 ./shinTest/gen_pkt_clk.py --dev1 45 185 --dev3 25 -185 - mkdir -p generated/log - rm -rf generated/log/* - ${VCS} -f ./shinTestClk_vcs.f - ${SIM} - python3 ./shinTest/check_testcase.py - mv spi_trans_data.txt generated/spi_trans_data3.txt - mv generated/wave.vcd generated/wave3.vcd - \ - python3 ./shinTest/gen_pkt_clk.py --dev1 60 186 --dev3 15 -186 - mkdir -p generated/log - rm -rf generated/log/* - ${VCS} -f ./shinTestClk_vcs.f - ${SIM} - python3 ./shinTest/check_testcase.py - mv spi_trans_data.txt generated/spi_trans_data4.txt - mv generated/wave.vcd generated/wave4.vcd - \ - python3 ./shinTest/gen_pkt_clk.py --dev1 80 187 --dev2 30 -187 - mkdir -p generated/log - rm -rf generated/log/* - ${VCS} -f ./shinTestClk_vcs.f - ${SIM} - python3 ./shinTest/check_testcase.py - mv spi_trans_data.txt generated/spi_trans_data5.txt - mv generated/wave.vcd generated/wave5.vcd - \ - python3 ./shinTest/gen_pkt_clk.py --dev1 70 188 --dev3 223 -188 -8b10b - mkdir -p generated/log - rm -rf generated/log/* - ${VCS} -f ./shinTestClk_vcs.f - ${SIM} - python3 ./shinTest/check_testcase.py - mv spi_trans_data.txt generated/spi_trans_data6.txt - mv generated/wave.vcd generated/wave6.vcd testShinMany_vcs: diff --git a/tb/shinTest/ShinTopSpiTb.v b/tb/shinTest/ShinTopSpiTb.v index cf1cf71..98c6c4c 100644 --- a/tb/shinTest/ShinTopSpiTb.v +++ b/tb/shinTest/ShinTopSpiTb.v @@ -540,7 +540,6 @@ end //DEV_NUM //ALL_DEV_NUM wire isQspi = (idx >= 0 && idx <= (`ALL_DEV_NUM - 1)) || idx >= (`ALL_DEV_NUM * 2); -wire isAQspi = (idx >= (`ALL_DEV_NUM * 3)); wire [11:0] nextByteCnt = byteCnt + 1; //输出 @@ -608,7 +607,7 @@ end //mst slv0~slv3的 内部qspi调用即设置 //sidx为0~4;外部spi为5~9,外部qspi为10~15 -task spi_trans( input [15:0] saddress, input [7:0] scmd, input [12:0] slength,input [16:0] sidx ); +task spi_trans( input [15:0] saddress, input [7:0] scmd, input [12:0] slength, input [16:0] sidx ); begin txBuf[0] <= saddress[15:8]; txBuf[1] <= saddress[7:0]; @@ -660,7 +659,6 @@ task spi_trans( input [15:0] saddress, input [7:0] scmd, input [12:0] slength,in ) ) begin - for (integer _k = 0; _k < 4; _k++) begin if (scmd == 0) begin $fwrite(spidata_file, "%02h ", txBuf[_k + _pos]); diff --git a/tb/shinTest/ShinTopSpiTb_clk.v b/tb/shinTest/ShinTopSpiTb_clk.v index ac6f9ba..3b1bd3e 100644 --- a/tb/shinTest/ShinTopSpiTb_clk.v +++ b/tb/shinTest/ShinTopSpiTb_clk.v @@ -1,8 +1,5 @@ `timescale 1 ns / 1 ps -`define ENABLE_REG_RW1_TEST "generated/log/reg_rw1_tc.log" - - module ShinTopSpiTb( ); @@ -12,12 +9,13 @@ module ShinTopSpiTb( reg [15:0] multiCLK; + `include "dev_predef.vh" `ifdef DEFINE_SLAVE_DEVICE `define DEV_NUM 4 //slave num `define ALL_DEV_NUM (`DEV_NUM + 1) // slave + master -`define SPI_CSN_NUM (`ALL_DEV_NUM * 3) +`define SPI_CSN_NUM (`ALL_DEV_NUM * 4) `define HW_SERIAL 0 //48'h31303050584c //(48'h4c5850303031) `define IQSPI_PINS(N) (`N*4+3):(`N*4) @@ -61,7 +59,7 @@ module ShinTopSpiTb( wire qspi_sck; wire [3:0] qspi_mosi; //wire [40-1:0] qspi_miso; - wire [(`ALL_DEV_NUM * 4 * 2 - 1):0] qspi_miso; + wire [(`ALL_DEV_NUM * 4 * 3 - 1):0] qspi_miso; integer spidata_file; integer c_line; @@ -135,6 +133,12 @@ ShinTop s_ShinTop_Mst( .io_oqspi_miso(`EQSPI_MISO(0)), .io_oqspi_isDirIn(), .io_oqspi_csn(`EQSPI_CSN(0)), + + .io_aqspi_sck(qspi_sck), + .io_aqspi_mosi(qspi_mosi), + .io_aqspi_miso(`AQSPI_MISO(0)), + .io_aqspi_isDirIn(), + .io_aqspi_csn(`AQSPI_CSN(0)), .io_isSoftReset(isSoftReset[0]), .io_interrupt(io_int_sig[0]), @@ -375,6 +379,11 @@ initial begin #8000000000000 #8000000000000 +`ifdef USING_OSPI + #8000000000000 + #8000000000000 +`endif + $display("Time Out !!!"); $fclose(spidata_file); //$stop; @@ -599,7 +608,23 @@ always @(posedge sck) begin end else begin bitCnt <= bitCnt + 1; end - + if ( idx >= (`ALL_DEV_NUM * 3) ) begin + if( &bitCnt ) begin + byteCnt <= byteCnt +1; + transCnt <= transCnt + 1; + if( (txBuf[2] & 8'h80) === 8'h80 & nextByteCnt >= 5) begin + rxBuf[byteCnt] <= exChangeRegi; + //$display("spi read out %x", exChangeRegi); + end + if( (txBuf[2] & 8'h80) === 8'h80 & nextByteCnt >= 4) begin + exChangeRegi <= isQspi ? {exChangeRegi[3:0], qspi_mux_miso} : {exChangeRegi[6:0], spi_mux_miso}; + end else begin + exChangeRegi <= 0; + end + end else begin + exChangeRegi <= isQspi ? {exChangeRegi[3:0], qspi_mux_miso} : {exChangeRegi[6:0], spi_mux_miso}; + end + end else begin if( &bitCnt ) begin byteCnt <= byteCnt +1; transCnt <= transCnt + 1; @@ -615,6 +640,7 @@ always @(posedge sck) begin end else begin exChangeRegi <= isQspi ? {exChangeRegi[3:0], qspi_mux_miso} : {exChangeRegi[6:0], spi_mux_miso}; end + end end else begin isBusy <= #500000 1'b0; spi_csn[idx] <= #500000 1'b1; @@ -631,9 +657,15 @@ task spi_trans( input [15:0] saddress, input [7:0] scmd, input [12:0] slength, i begin txBuf[0] <= saddress[15:8]; txBuf[1] <= saddress[7:0]; - txBuf[2] <= scmd; + if (sidx >=(`ALL_DEV_NUM * 3)) begin + txBuf[2] <= (scmd | slength[12:8]); + txBuf[3] <= slength[7:0]; + length <= slength + 4; + end else begin + txBuf[2] <= scmd; + length <= slength + 3; + end - length <= slength + 3; idx <= sidx; #500000 @@ -645,9 +677,17 @@ task spi_trans( input [15:0] saddress, input [7:0] scmd, input [12:0] slength, i @( negedge isBusy) #100000000 begin //$fwrite(spidata_file, "------------%5t------------\n", $realtime); - $fwrite(spidata_file, "T:%t \tdev:%4d, addr:0x%02h%02h, %s, len:%4d\n", - $realtime, ((sidx >= `ALL_DEV_NUM)? ((sidx >= (`ALL_DEV_NUM * 2))? (sidx - (`ALL_DEV_NUM * 2)):(sidx - `ALL_DEV_NUM)):sidx), txBuf[0], txBuf[1], - ((txBuf[2] == 0)? "Write":" Read"), slength); + $fwrite(spidata_file, "T:%t \tdev:%4d(%4d), addr:0x%02h%02h, %s, len:%4d (0x%02h%02h)\n", + $realtime, + sidx % (`ALL_DEV_NUM), sidx, + txBuf[0], + txBuf[1], + (((txBuf[2] & 8'h80) == 0)? "Write":" Read"), + slength, + txBuf[2], txBuf[3]); + + if (sidx >=(`ALL_DEV_NUM * 3)) begin _pos = 4; end + else begin _pos = 3; end if ( ((saddress == 16'h0800) || (saddress == 16'h1000) @@ -656,9 +696,15 @@ task spi_trans( input [15:0] saddress, input [7:0] scmd, input [12:0] slength, i || (saddress == 16'h2800) || (saddress == 16'h3000) || (saddress == 16'h3800) - || (saddress == 16'h4000)) - && ((sidx == 0) || (sidx == `ALL_DEV_NUM) || (sidx == (`ALL_DEV_NUM * 2)))) begin - _pos = 3; + || (saddress == 16'h4000) + ) + && ((sidx == 0) + || (sidx == `ALL_DEV_NUM) + || (sidx == (`ALL_DEV_NUM * 2)) + || (sidx == (`ALL_DEV_NUM * 3)) + ) + ) begin + for (integer _k = 0; _k < 4; _k++) begin if (scmd == 0) begin $fwrite(spidata_file, "%02h ", txBuf[_k + _pos]); @@ -741,9 +787,9 @@ task spi_trans( input [15:0] saddress, input [7:0] scmd, input [12:0] slength, i end else begin for (integer i=0; i=(`ALL_DEV_NUM * 3)) begin + txBuf[2] <= (`SPI_READ | 8'h0); + txBuf[3] <= 8'h04; + length = 8'h08; + //$display("using AQspi"); + end else begin + txBuf[2] <= `SPI_READ; + length = 8'h07; + //$display("using iqspi"); + end - length = 8'h07; - idx = `IF_IQSPI(dev_idx); + + idx = dev_idx; #500000 @(negedge sck) @@ -936,11 +990,11 @@ task wait_comm_finished(input [16:0] dev_idx); end #100000000 //$display("%x %x", rxBuf[3], rxBuf[6]); - if ((rxBuf[3] & 8'h02) == 8'h02) + if ((rxBuf[`ARRAY_IDX_OFF] & 8'h02) == 8'h02) begin is_run = 0; end - if ((rxBuf[6] & 8'h60) != 8'h00) + if ((rxBuf[`ARRAY_IDX_OFF+3] & 8'h60) != 8'h00) begin $display("error occur"); is_run = 0; @@ -959,154 +1013,6 @@ initial begin #50000000 -`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_OSPI(0)) ); - `SPI_TRANS( (16'h00), (`SPI_READ), (64), (`IF_OSPI(1)) ); - `SPI_TRANS( (16'h00), (`SPI_READ), (64), (`IF_OSPI(2)) ); - `SPI_TRANS( (16'h00), (`SPI_READ), (64), (`IF_OSPI(3)) ); - `SPI_TRANS( (16'h00), (`SPI_READ), (64), (`IF_OSPI(4)) ); - _t_end = $realtime; - $fdisplay(spidata_file, "该测试用例运行时间:%t\n", _t_end - _t_start); - `END_TESTCASE(`ENABLE_REG_RW1_TEST); - end -`endif - - begin:SETTING_INTERFACE - if ((`INTERFACE_IDX) == `ALL_DEV_NUM) begin - $fdisplay(spidata_file, "\n\n从内部QSPI配置使用外部的SPI接口访问EasyBus"); - txBuf[0+3] = 8'h01; - spi_trans( (16'h09), (`SPI_WRITE), (1), (`IF_OSPI(0)) ); - spi_trans( (16'h09), (`SPI_WRITE), (1), (`IF_OSPI(1)) ); - spi_trans( (16'h09), (`SPI_WRITE), (1), (`IF_OSPI(2)) ); - spi_trans( (16'h09), (`SPI_WRITE), (1), (`IF_OSPI(3)) ); - spi_trans( (16'h09), (`SPI_WRITE), (1), (`IF_OSPI(4)) ); - end else if ((`INTERFACE_IDX) == (`ALL_DEV_NUM * 2)) begin - $fdisplay(spidata_file, "\n\n从内部QSPI配置使用外部的QSPI接口访问EasyBus"); - txBuf[0+3] = 8'h02; - spi_trans( (16'h09), (`SPI_WRITE), (1), (`IF_OSPI(0)) ); - spi_trans( (16'h09), (`SPI_WRITE), (1), (`IF_OSPI(1)) ); - spi_trans( (16'h09), (`SPI_WRITE), (1), (`IF_OSPI(2)) ); - spi_trans( (16'h09), (`SPI_WRITE), (1), (`IF_OSPI(3)) ); - spi_trans( (16'h09), (`SPI_WRITE), (1), (`IF_OSPI(4)) ); - end else begin - $fdisplay(spidata_file, "\n\n从内部QSPI接口访问EasyBus"); - txBuf[0+3] = 8'h00; - spi_trans( (16'h09), (`SPI_WRITE), (1), (`IF_OSPI(0)) ); - spi_trans( (16'h09), (`SPI_WRITE), (1), (`IF_OSPI(1)) ); - spi_trans( (16'h09), (`SPI_WRITE), (1), (`IF_OSPI(2)) ); - spi_trans( (16'h09), (`SPI_WRITE), (1), (`IF_OSPI(3)) ); - spi_trans( (16'h09), (`SPI_WRITE), (1), (`IF_OSPI(4)) ); - end - end - -`ifdef ENABLE_INT_INIT_TEST - begin:CHECK_INTERRUPT_SIG - $fdisplay(spidata_file, "\n\n测试用例:检查设备的INTERRUPT信号"); - - @(posedge clock) begin - if (io_int_sig[0]) $fdisplay(spidata_file, "**MST Interrupt."); - if (io_int_sig[1]) $fdisplay(spidata_file, "**SLV0 Interrupt."); - if (io_int_sig[2]) $fdisplay(spidata_file, "**SLV1 Interrupt."); - if (io_int_sig[3]) $fdisplay(spidata_file, "**SLV2 Interrupt."); - if (io_int_sig[4]) $fdisplay(spidata_file, "**SLV3 Interrupt."); - end - - $fdisplay(spidata_file, "-检查中断"); - spi_trans( (16'h70), (`SPI_READ), (14), (`IF_IDX(0)) ); - spi_trans( (16'h70), (`SPI_READ), (14), (`IF_IDX(1)) ); - spi_trans( (16'h70), (`SPI_READ), (14), (`IF_IDX(2)) ); - spi_trans( (16'h70), (`SPI_READ), (14), (`IF_IDX(3)) ); - spi_trans( (16'h70), (`SPI_READ), (14), (`IF_IDX(4)) ); - - $fdisplay(spidata_file, "-清中断"); - txBuf[0+3] = 8'h00; - 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(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'h70), (`SPI_READ), (14), (`IF_IDX(0)) ); - spi_trans( (16'h70), (`SPI_READ), (14), (`IF_IDX(1)) ); - spi_trans( (16'h70), (`SPI_READ), (14), (`IF_IDX(2)) ); - spi_trans( (16'h70), (`SPI_READ), (14), (`IF_IDX(3)) ); - spi_trans( (16'h70), (`SPI_READ), (14), (`IF_IDX(4)) ); - - end - - begin:CHECK_INTERRUPT_CFG_REG - $fdisplay(spidata_file, "\n\n测试用例:检查设备的INTERRUPT信号设置寄存器"); - - $fdisplay(spidata_file, "-检查中断"); - spi_trans( (16'h70), (`SPI_READ), (4), (`IF_IDX(0)) ); - spi_trans( (16'h70), (`SPI_READ), (4), (`IF_IDX(1)) ); - 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[0+3] = 8'h00; - txBuf[1+3] = 8'h00; - txBuf[2+3] = 8'h00; - txBuf[3+3] = 8'h00; - spi_trans( (16'h70), (`SPI_WRITE), (4), (`IF_IDX(0)) ); - spi_trans( (16'h70), (`SPI_WRITE), (4), (`IF_IDX(1)) ); - spi_trans( (16'h70), (`SPI_WRITE), (4), (`IF_IDX(2)) ); - spi_trans( (16'h70), (`SPI_WRITE), (4), (`IF_IDX(3)) ); - spi_trans( (16'h70), (`SPI_WRITE), (4), (`IF_IDX(4)) ); - - $fdisplay(spidata_file, "-检查中断"); - spi_trans( (16'h70), (`SPI_READ), (4), (`IF_IDX(0)) ); - spi_trans( (16'h70), (`SPI_READ), (4), (`IF_IDX(1)) ); - 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[0+3] = 8'h0F; - txBuf[1+3] = 8'h00; - txBuf[2+3] = 8'h00; - txBuf[3+3] = 8'h00; - spi_trans( (16'h70), (`SPI_WRITE), (4), (`IF_IDX(0)) ); - - txBuf[0+3] = 8'h00; - txBuf[1+3] = 8'hFF; - txBuf[2+3] = 8'h00; - txBuf[3+3] = 8'h00; - spi_trans( (16'h70), (`SPI_WRITE), (4), (`IF_IDX(1)) ); - spi_trans( (16'h70), (`SPI_WRITE), (4), (`IF_IDX(2)) ); - spi_trans( (16'h70), (`SPI_WRITE), (4), (`IF_IDX(3)) ); - spi_trans( (16'h70), (`SPI_WRITE), (4), (`IF_IDX(4)) ); - - $fdisplay(spidata_file, "-检查中断"); - spi_trans( (16'h70), (`SPI_READ), (4), (`IF_IDX(0)) ); - spi_trans( (16'h70), (`SPI_READ), (4), (`IF_IDX(1)) ); - 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'h8A; - 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 `include "tc_runlist.vh" diff --git a/tb/shinTest/gen_pkt.py b/tb/shinTest/gen_pkt.py index 6173f54..cc38429 100755 --- a/tb/shinTest/gen_pkt.py +++ b/tb/shinTest/gen_pkt.py @@ -23,7 +23,7 @@ if __name__ == '__main__': environment.gen_slv_dev_num(4) environment.bringup() - ''' + #''' add_tc_2_runlist(errorPkt.tc1()) add_tc_2_runlist(errorPkt.tc2()) add_tc_2_runlist(errorPkt.tc3()) @@ -64,7 +64,7 @@ if __name__ == '__main__': add_tc_2_runlist(errorPkt.tc38()) #''' - ''' + #''' add_tc_2_runlist(rwregs.tc1()) add_tc_2_runlist(rwregs.tc2()) add_tc_2_runlist(rwregs.tc3()) @@ -108,13 +108,13 @@ if __name__ == '__main__': add_tc_2_runlist(base.tc31()) #''' - ''' + #''' add_tc_2_runlist(broadcast.tc1()) add_tc_2_runlist(broadcast.tc2()) add_tc_2_runlist(broadcast.tc3()) #''' - ''' + #''' add_tc_2_runlist(sync.tc1()) add_tc_2_runlist(sync.tc2()) add_tc_2_runlist(sync.tc3())