diff --git a/tb/shinTest/Makefile_vcs b/tb/shinTest/Makefile_vcs index 642c3ed..afe16e2 100644 --- a/tb/shinTest/Makefile_vcs +++ b/tb/shinTest/Makefile_vcs @@ -9,7 +9,7 @@ VCS = vcs -sverilog +v2k -timescale=1ns/1ps \ -l compile.log \ -debug_access+none \ +define+VCS_COMPILE \ - -fastpartcomp=j$(nproc) \ + -fastpartcomp=j${CPU_COUNT} \ SIM = ./${OUTPUT} -l run.log diff --git a/tb/shinTest/ShinTopSpiTb.v b/tb/shinTest/ShinTopSpiTb.v index 0153786..810a845 100644 --- a/tb/shinTest/ShinTopSpiTb.v +++ b/tb/shinTest/ShinTopSpiTb.v @@ -441,13 +441,18 @@ begin if (!spidata_file) $display("文件打开失败"); `ifdef VCS_COMPILE - $dumpfile("./generated/wave.vcd"); //生成的vcd文件名称 - $dumpvars(0, ShinTopSpiTb);//tb模块名称 + $dumpfile("./generated/wave.vcd"); //生成的vcd文件名称 + $dumpvars(0, ShinTopSpiTb);//tb模块名称 + $dumpvars(0, ShinTopSpiTb.s_ShinTop_Mst);//tb模块名称 + //$dumpvars(0, ShinTopSpiTb.s_ShinTop_slv124);//tb模块名称 + //$dumpvars(0, ShinTopSpiTb.s_ShinTop_slv125);//tb模块名称 + //$dumpvars(0, ShinTopSpiTb.s_ShinTop_slv126);//tb模块名称 + //$dumpvars(0, ShinTopSpiTb.s_ShinTop_slv127);//tb模块名称 `endif `ifdef IVERILOG_COMPILE - $dumpfile("./generated/wave.fst"); //生成的fst文件名称 - $dumpvars(0, ShinTopSpiTb);//tb模块名称 + $dumpfile("./generated/wave.fst"); //生成的fst文件名称 + $dumpvars(0, ShinTopSpiTb);//tb模块名称 `endif end @@ -525,7 +530,7 @@ end reg isBusy = 0; reg [11:0] length; - reg [7:0] idx; + reg [16:0] idx; reg [11:0] transCnt; reg [11:0] byteCnt; @@ -598,7 +603,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 [7: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,13 +665,15 @@ task spi_trans( input [15:0] saddress, input [7:0] scmd, input [12:0] slength,in if (scmd == 0) begin addr_type = txBuf[_pos + 1] & 8'h3; - dev = (txBuf[_pos] >> 2) * 256 + ((txBuf[_pos + 1] >> 2) & 8'hff); + dev = (txBuf[_pos] * 256) >> 2; + dev = dev + ((txBuf[_pos + 1] >> 2) & 8'hff); addr = txBuf[_pos + 2] * 256 + (txBuf[_pos + 3] & 8'hff); cmd = (txBuf[_pos + 4] >> 4) & 8'h0f; len = (txBuf[_pos + 4] & 8'h0f) * 256 + (txBuf[_pos + 5] & 8'hff); end else begin addr_type = rxBuf[_pos + 1] & 8'h3; - dev = (rxBuf[_pos] >> 2) * 256 + ((rxBuf[_pos + 1] >> 2) & 8'hff); + dev = (txBuf[_pos] * 256) >> 2; + dev = dev + ((rxBuf[_pos + 1] >> 2) & 8'hff); addr = rxBuf[_pos + 2] * 256 + (rxBuf[_pos + 3] & 8'hff); cmd = (rxBuf[_pos + 4] >> 4) & 8'h0f; len = (rxBuf[_pos + 4] & 8'h0f) * 256 + (rxBuf[_pos + 5] & 8'hff); @@ -933,7 +940,7 @@ task wait_comm_finished(input [16:0] dev_idx); $display("error occur"); is_run = 0; end - if (($realtime - st) >= 5000000.0) + if (($realtime - st) >= 20000000.0) begin $display("comm timeout."); is_run = 0; diff --git a/tb/shinTest/ShinTopSpiTb_clk.v b/tb/shinTest/ShinTopSpiTb_clk.v index e0ac1d3..509dbeb 100644 --- a/tb/shinTest/ShinTopSpiTb_clk.v +++ b/tb/shinTest/ShinTopSpiTb_clk.v @@ -557,7 +557,7 @@ end reg isBusy = 0; reg [11:0] length; - reg [7:0] idx; + reg [16:0] idx; reg [11:0] transCnt; reg [11:0] byteCnt; @@ -630,7 +630,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 [7: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]; @@ -692,13 +692,15 @@ task spi_trans( input [15:0] saddress, input [7:0] scmd, input [12:0] slength,in if (scmd == 0) begin addr_type = txBuf[_pos + 1] & 8'h3; - dev = (txBuf[_pos] >> 2) * 256 + ((txBuf[_pos + 1] >> 2) & 8'hff); + dev = (txBuf[_pos] * 256) >> 2; + dev = dev + ((txBuf[_pos + 1] >> 2) & 8'hff); addr = txBuf[_pos + 2] * 256 + (txBuf[_pos + 3] & 8'hff); cmd = (txBuf[_pos + 4] >> 4) & 8'h0f; len = (txBuf[_pos + 4] & 8'h0f) * 256 + (txBuf[_pos + 5] & 8'hff); end else begin addr_type = rxBuf[_pos + 1] & 8'h3; - dev = (rxBuf[_pos] >> 2) * 256 + ((rxBuf[_pos + 1] >> 2) & 8'hff); + dev = (txBuf[_pos] * 256) >> 2; + dev = dev + ((txBuf[_pos + 1] >> 2) & 8'hff); addr = rxBuf[_pos + 2] * 256 + (rxBuf[_pos + 3] & 8'hff); cmd = (rxBuf[_pos + 4] >> 4) & 8'h0f; len = (rxBuf[_pos + 4] & 8'h0f) * 256 + (rxBuf[_pos + 5] & 8'hff); diff --git a/tb/shinTest/gen_pkt_many_dev.py b/tb/shinTest/gen_pkt_many_dev.py index 7347e1b..4dfa946 100755 --- a/tb/shinTest/gen_pkt_many_dev.py +++ b/tb/shinTest/gen_pkt_many_dev.py @@ -4,7 +4,7 @@ from pyutils import * from testcase import environment, rwregs, ebmmu, errorPkt, watchdog, broadcast, sync, base, mac, manydev if __name__ == '__main__': - environment.gen_slv_dev_num(128) + environment.gen_slv_dev_num(202) environment.bringup() diff --git a/tb/shinTest/testcase/environment.py b/tb/shinTest/testcase/environment.py index 037ce0d..4c60620 100644 --- a/tb/shinTest/testcase/environment.py +++ b/tb/shinTest/testcase/environment.py @@ -1,7 +1,7 @@ from pyutils import * - +global_dev_num = 4 def bringup(): gen_file_def = "sys_bringup" @@ -296,7 +296,16 @@ def __gen_slv_dev_predef(num): genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1) +def get_slv_dev_num(): + global global_dev_num + + return global_dev_num + def gen_slv_dev_num(num): + global global_dev_num + + global_dev_num = num + __gen_slv_dev_predef(num) genPkt = GenPkt() diff --git a/tb/shinTest/testcase/manydev.py b/tb/shinTest/testcase/manydev.py index 93c9855..ec844e1 100644 --- a/tb/shinTest/testcase/manydev.py +++ b/tb/shinTest/testcase/manydev.py @@ -1,10 +1,11 @@ from pyutils import * - +from .environment import * def tc1(): genPkt = GenPkt() - dev = 128 + dev = get_slv_dev_num() + print("DEV:", dev) gen_file_def = "manydev_tc01" sm_idx = 0 @@ -73,7 +74,7 @@ def tc1(): +genWriteTransLenCode(gen_file_def_ap, sm_idx) +genWriteTransPktCode(gen_file_def_ap, sm_idx) +genTrgTransPktCode(gen_file_def_ap, sm_idx) - + "#10000000" + #+ "#10000000" +genReadAckPktCode(gen_file_def_ap, sm_idx) @@ -120,14 +121,70 @@ def tc1(): genPkt.addAfterExc(genWriteTransLenCode(gen_file_def_ap, sm_idx) +genWriteTransPktCode(gen_file_def_ap, sm_idx) +genTrgTransPktCode(gen_file_def_ap, sm_idx) - + "#10000000" + #+ "#10000000" +genReadAckPktCode(gen_file_def_ap, sm_idx) +clear_int_code + ) + genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1, True, gen_file_def_ap) + + + + genPkt.clean() + genPkt.setPktType(0) + gen_file_def_ap = gen_file_def+"_step05" + sm_idx = 0 + + #for i in range(dev): + # genPkt.addSubPkt(i + 1, 0, 0x1000, 0x0, 2, [0, 0]) + genPkt.addSubPkt(0, 0, 0x302, 0xe, 2, [8, 0]) + genPkt.addSubPkt(0, 0, 0x800, 0xe, 8, list(range(8))) + + read_data_code = "" + for i in range(dev): + read_data_code = read_data_code + genSlvSMReadData(i + 1, 0, 8) + + #genPkt.addBeforeExc(prepare_data_code) + + genPkt.addAfterExc(genWriteTransLenCode(gen_file_def_ap, sm_idx) + +genWriteTransPktCode(gen_file_def_ap, sm_idx) + +genTrgTransPktCode(gen_file_def_ap, sm_idx) + +genReadAckPktCode(gen_file_def_ap, sm_idx) + + +clear_int_code + +read_data_code + ) + genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1, True, gen_file_def_ap) + + + + genPkt.clean() + genPkt.setPktType(0) + gen_file_def_ap = gen_file_def+"_step06" + sm_idx = 0 + + #for i in range(dev): + # genPkt.addSubPkt(i + 1, 0, 0x1000, 0x0, 2, [0, 0]) + genPkt.addSubPkt(0, 0, 0x302, 0xe, 2, [2, 0]) + for i in range(dev): + genPkt.addSubPkt(i + 1, 0, 0x0800, 0x1, 2, [i & 0xff, (i + 1) & 0xff]) + + read_data_code = "" + for i in range(dev): + read_data_code = read_data_code + genSlvSMReadData(i + 1, 0, 2) + + #genPkt.addBeforeExc(prepare_data_code) + + genPkt.addAfterExc(genWriteTransLenCode(gen_file_def_ap, sm_idx) + +genWriteTransPktCode(gen_file_def_ap, sm_idx) + +genTrgTransPktCode(gen_file_def_ap, sm_idx) + +genReadAckPktCode(gen_file_def_ap, sm_idx) + + +clear_int_code + +read_data_code +genTcEndFrameCode(gen_file_def) ) genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1, True, gen_file_def_ap) - return gen_file_def \ No newline at end of file