From a63e14e6f6ff204e5423b7f73c1aa4c18cecfe92 Mon Sep 17 00:00:00 2001 From: bacon Date: Mon, 8 Sep 2025 13:12:18 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BB=A3=E7=A0=81,1.?= =?UTF-8?q?=E4=BB=BF=E7=9C=9F=E4=BA=86=E6=9C=80=E5=A4=9A202=E4=B8=AA?= =?UTF-8?q?=E4=BB=8E=E7=AB=99,=E5=8A=9F=E8=83=BD=E6=AD=A3=E5=B8=B8;2.?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E4=BA=86=E8=AF=BB=E5=86=99\=E5=B9=BF?= =?UTF-8?q?=E6=92=AD=E7=AD=89=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tb/shinTest/Makefile_vcs | 2 +- tb/shinTest/ShinTopSpiTb.v | 25 +++++++---- tb/shinTest/ShinTopSpiTb_clk.v | 10 +++-- tb/shinTest/gen_pkt_many_dev.py | 2 +- tb/shinTest/testcase/environment.py | 11 ++++- tb/shinTest/testcase/manydev.py | 67 ++++++++++++++++++++++++++--- 6 files changed, 96 insertions(+), 21 deletions(-) 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 From 9c43daf51eda11a312372e1fb2a7e344052c51a8 Mon Sep 17 00:00:00 2001 From: bacon Date: Mon, 8 Sep 2025 16:47:30 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=B8=BA=E5=A4=9A=E7=9B=B8=E4=BD=8D?= =?UTF-8?q?=E6=A8=A1=E6=8B=9F=E5=A2=9E=E5=8A=A0=E5=91=BD=E4=BB=A4=E8=A1=8C?= =?UTF-8?q?,=E5=A2=9E=E5=8A=A08b10b=E5=88=87=E6=8D=A2=E7=9A=84=E6=B5=8B?= =?UTF-8?q?=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 8 +-- tb/shinTest/Makefile_vcs | 26 ++++++++-- tb/shinTest/ShinTopSpiTb.v | 2 +- tb/shinTest/ShinTopSpiTb_clk.v | 13 ++--- tb/shinTest/gen_pkt_clk.py | 29 +++++++++++ tb/shinTest/testcase/base.py | 10 ++-- tb/shinTest/testcase/environment.py | 75 ++++++++++++++++++++++++----- tb/shinTest/testcase/rwregs.py | 33 ++++++++----- 8 files changed, 155 insertions(+), 41 deletions(-) diff --git a/Makefile b/Makefile index 857268e..bf694ad 100644 --- a/Makefile +++ b/Makefile @@ -41,7 +41,7 @@ shin: sbt "test:runMain test.testShinModule" testShin: - ./tb/shinTest/gen_pkt.py + python3 ./tb/shinTest/gen_pkt.py mkdir -p generated/log rm -rf generated/log/* iverilog -Wall \ @@ -52,10 +52,10 @@ testShin: -D IVERILOG_COMPILE \ ./tb/shinTest/ShinTopSpiTb.v vvp -N ./tb/build/shinTest.iverilog -lxt2 -fst || true - ./tb/shinTest/check_testcase.py + python3 ./tb/shinTest/check_testcase.py testShinClk: - ./tb/shinTest/gen_pkt_clk.py + python3 ./tb/shinTest/gen_pkt_clk.py --dev1 0 200 mkdir -p generated/log rm -rf generated/log/* iverilog -Wall \ @@ -66,7 +66,7 @@ testShinClk: -D IVERILOG_COMPILE \ ./tb/shinTest/ShinTopSpiTb_clk.v vvp -N ./tb/build/shinTest_clk.iverilog -lxt2 -fst || true - ./tb/shinTest/check_testcase.py + python3 ./tb/shinTest/check_testcase.py testCDR: iverilog -Wall \ diff --git a/tb/shinTest/Makefile_vcs b/tb/shinTest/Makefile_vcs index afe16e2..1271f81 100644 --- a/tb/shinTest/Makefile_vcs +++ b/tb/shinTest/Makefile_vcs @@ -24,12 +24,32 @@ testShin_vcs: testShinClk_vcs: - python3 ./shinTest/gen_pkt_clk.py + python3 ./shinTest/gen_pkt_clk.py --dev1 0 90 --dev2 0 -90 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 25 -180 + 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 190 --dev3 25 -190 + 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 testShinMany_vcs: @@ -58,7 +78,7 @@ testShin: ./shinTest/check_testcase.py testShinClk: - ./shinTest/gen_pkt_clk.py + ./shinTest/gen_pkt_clk.py --dev1 0 200 mkdir -p generated/log rm -rf generated/log/* iverilog -Wall \ @@ -77,4 +97,4 @@ fstShinClk: gtkwave ./generated/wave_clk.fst 1>/dev/null 2>&1 & clean: - rm -rf ./generated/log/* ./generated/shin/*.vh ./generated/shinTest.* ./generated/wave*.* + rm -rf ./generated/log/* ./generated/shin/*.vh ./generated/shinTest.* ./generated/wave*.* ./generated/spi_trans*.* diff --git a/tb/shinTest/ShinTopSpiTb.v b/tb/shinTest/ShinTopSpiTb.v index 810a845..7e3b5ad 100644 --- a/tb/shinTest/ShinTopSpiTb.v +++ b/tb/shinTest/ShinTopSpiTb.v @@ -442,7 +442,7 @@ begin `ifdef VCS_COMPILE $dumpfile("./generated/wave.vcd"); //生成的vcd文件名称 - $dumpvars(0, ShinTopSpiTb);//tb模块名称 + //$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模块名称 diff --git a/tb/shinTest/ShinTopSpiTb_clk.v b/tb/shinTest/ShinTopSpiTb_clk.v index 509dbeb..552f58c 100644 --- a/tb/shinTest/ShinTopSpiTb_clk.v +++ b/tb/shinTest/ShinTopSpiTb_clk.v @@ -12,13 +12,6 @@ module ShinTopSpiTb( reg [15:0] multiCLK; - reg clock2; - reg [15:0] multiCLK2; - - reg clock3; - reg [15:0] multiCLK3; - - `include "dev_predef.vh" `ifdef DEFINE_SLAVE_DEVICE @@ -361,7 +354,6 @@ ShinTop s_ShinTop_slv3( initial begin clock = 0; - clock2 = 0; reset = 1; latch0 = 0; @@ -407,6 +399,8 @@ generate end endgenerate + +/* //如果频率差到 80ppm,参数是: 8000640/1000080/8000640 [pass] //如果频率差到120ppm,参数是: 8000960/1000120/8000960 [pass] //如果频率差到160ppm,参数是: 8001280/1000160/8001280 [pass] @@ -466,8 +460,11 @@ generate end end endgenerate +*/ +`include "slave_dev_clk.vh" + initial begin spidata_file = $fopen("spi_trans_data.txt", "w"); diff --git a/tb/shinTest/gen_pkt_clk.py b/tb/shinTest/gen_pkt_clk.py index de1b418..b460137 100755 --- a/tb/shinTest/gen_pkt_clk.py +++ b/tb/shinTest/gen_pkt_clk.py @@ -2,11 +2,40 @@ #encoding=utf-8 from pyutils import * from testcase import environment, rwregs, ebmmu, errorPkt, watchdog, broadcast, sync, base, mac +import argparse if __name__ == '__main__': + + parser = argparse.ArgumentParser() + + # 可选参数 + parser.add_argument("-d1", "--dev1", nargs=2, type=int, default=[0, 0], help="相位(度)、频率偏差ppm") + parser.add_argument("-d2", "--dev2", nargs=2, type=int, default=[0, 0], help="相位(度)、频率偏差ppm") + parser.add_argument("-d3", "--dev3", nargs=2, type=int, default=[0, 0], help="相位(度)、频率偏差ppm") + parser.add_argument("-d4", "--dev4", nargs=2, type=int, default=[0, 0], help="相位(度)、频率偏差ppm") + # 解析参数 + args = parser.parse_args() + # 使用参数 + dev_clk_info = dict() + if args.dev1 != [0, 0]: + dev_clk_info[1] = args.dev1 + + if args.dev2 != [0, 0]: + dev_clk_info[2] = args.dev2 + + if args.dev3 != [0, 0]: + dev_clk_info[3] = args.dev3 + + if args.dev4 != [0, 0]: + dev_clk_info[4] = args.dev4 + + environment.set_dev_clk(dev_clk_info) + environment.gen_slv_dev_for_clk(4) environment.bringup() + rwregs.tc1() + #add_tc_2_runlist(errorPkt.tc1()) #add_tc_2_runlist(errorPkt.tc2()) #add_tc_2_runlist(errorPkt.tc3()) diff --git a/tb/shinTest/testcase/base.py b/tb/shinTest/testcase/base.py index a09d142..5d5b73a 100644 --- a/tb/shinTest/testcase/base.py +++ b/tb/shinTest/testcase/base.py @@ -2337,9 +2337,13 @@ def tc28(): +genIFRwDataCode(0, 0x74, False, 4) +genIFRwDataCode(4, 0x74, False, 4) - +genMessageCode("--读取中断使能") - +genIFRwDataCode(0, 0x70, False, 4) - +genIFRwDataCode(4, 0x70, False, 4) + +genMessageCode("--配置中断") + #+genIFRwDataCode(0, 0x70, False, 4) + #+genIFRwDataCode(4, 0x70, False, 4) + +genIFRwDataCode(0, 0x70, True, 4, [0x03, 0x00, 0x00, 0xf0]) + +genIFRwDataCode(4, 0x70, True, 4, [0x00, 0x00, 0x00, 0xf0]) + +genIFRwDataCode(0, 0x7c, True, 2, [0x10, 0x80]) + +genIFRwDataCode(4, 0x7c, True, 2, [0x10, 0x80]) +genMessageCode("--配置主从站") +genIFRwDataCode(0, 0x00, True, 1, [0x01, ]) diff --git a/tb/shinTest/testcase/environment.py b/tb/shinTest/testcase/environment.py index 4c60620..cc717c2 100644 --- a/tb/shinTest/testcase/environment.py +++ b/tb/shinTest/testcase/environment.py @@ -2,6 +2,9 @@ from pyutils import * global_dev_num = 4 +global_setting_dev_clk = dict() + + def bringup(): gen_file_def = "sys_bringup" @@ -177,7 +180,8 @@ def bringup(): add_tc_2_runlist(gen_file_def) -def __GenDevice(id, TerminateNode = False, diffclk = False): +def __GenDevice(id, TerminateNode = False): + global global_setting_dev_clk dout_code = "dDat_w[%d]"%(id + 1, ) din_code = "uDat_w[%d]"%(id + 1, ) if TerminateNode: @@ -186,9 +190,13 @@ def __GenDevice(id, TerminateNode = False, diffclk = False): clk = "multiCLK[0]" multiclk = "multiCLK" - if diffclk: - clk = "multiCLK2[0]" - multiclk = "multiCLK2" + try: + v = global_setting_dev_clk[id + 1] + clk = "multiCLK%d[0]"%(id + 1, ) + multiclk = "multiCLK%d"%(id + 1, ) + except: + pass + code_device = ("\tShinTop s_ShinTop_slv%d(\n"%(id, ) +"\t.clock(%s),\n"%(clk, ) @@ -244,6 +252,12 @@ def __GenDevice(id, TerminateNode = False, diffclk = False): return code_device def __gen_slv_dev_predef(num): + + global global_setting_dev_clk + code_for_clk = "" + for k in global_setting_dev_clk: + code_for_clk = code_for_clk + "reg [15:0] multiCLK%d;\n"%(k, ) + code_predef =("`define DEV_NUM %d //slave num\n"%(num, ) +"`define ALL_DEV_NUM (`DEV_NUM + 1) // slave + master\n" +"`define SPI_CSN_NUM (`ALL_DEV_NUM * 3)\n" @@ -289,7 +303,7 @@ def __gen_slv_dev_predef(num): gen_file_def = "dev_predef" - code = code_predef + code_qspi_mux_init + code_spi_mux_init + code = code_for_clk + code_predef + code_qspi_mux_init + code_spi_mux_init genPkt.addAfterExc(code) @@ -336,18 +350,57 @@ def gen_slv_dev_for_clk(num): code = "" for id in range(num - 1): - if id == 1: - code = code + __GenDevice(id, diffclk = True) - else: - code = code + __GenDevice(id) + code = code + __GenDevice(id) code = code + __GenDevice(num - 1, True) genPkt.addAfterExc(code) genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1) - - + + +def set_dev_clk(cfg): + global global_setting_dev_clk + global_setting_dev_clk = cfg + + code_for_clk = "" + for k in global_setting_dev_clk: + v = global_setting_dev_clk[k] + ph = int(8 * 1000000 * v[0] / 360.0) + period = int(1000000 + v[1]) + code_for_clk = code_for_clk + __gen_slv_clk(k, ph, period) + + genPkt = GenPkt() + genPkt.clean() + gen_file_def = "slave_dev_clk" + genPkt.addAfterExc(code_for_clk) + genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1) + + + +def __gen_slv_clk(clk, ph, period): + slv_code =( + "" + #"\tinitial begin\n" + #+"\t\tforever begin #%d clock%d <= ~clock%d; end\n"%(period * 8, clk, clk) + #+"\tend\n\n" + + +"\tgenerate\n" + +"\tfor( genvar i = 0; i < 16; i = i + 1 ) begin\n" + +"\t\tinitial begin\n" + + "\t\t\t//相位信息\n" + + "\t\t\t#%d\n"%(ph) + + "\t\t\tmultiCLK%d[i] = 0;\n"%(clk, ) + + "\t\t\tfor( integer j = 0; j < i; j = j + 1 ) begin\n" + + "\t\t\t\t#%d\n"%(period, ) + + "\t\t\t\t;\n" + + "\t\t\tend\n" + + "\t\t\tforever begin #%d multiCLK%d[i] <= ~multiCLK%d[i]; end\n"%(period * 8, clk, clk) + +"\t\tend\n" + +"\tend\n" + +"\tendgenerate\n") + + return slv_code def teardown(): #add_tc_2_runlist("") diff --git a/tb/shinTest/testcase/rwregs.py b/tb/shinTest/testcase/rwregs.py index 9e0d9d8..036f988 100644 --- a/tb/shinTest/testcase/rwregs.py +++ b/tb/shinTest/testcase/rwregs.py @@ -1,21 +1,32 @@ from pyutils import * +from .environment import * + import time import random def tc1(): - random.seed(int(time.time() * 1000)) - genPkt = GenPkt() - - #------------------------------------------------------------------------- - #>>>>>>嗅探数据包1,正常的嗅探数据包 - genPkt.clean() - genPkt.setPktType(1) gen_file_def = "regtest_tc01" sm_idx = 0 + tc_des = "测试寄存器的读写状态,将系统改为8B10B进行通信\\n" - 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 = GenPkt() + genPkt.clean() + + dev_num = get_slv_dev_num() + + genPkt.addBeforeExc(genTcStartFrameCode(gen_file_def, tc_des)) + + change_8b10b_code = "" + for i in range(dev_num + 1): + change_8b10b_code = change_8b10b_code + genIFRwDataCode(i, 0x004c, True, 2, [0x1, 0x59])\ + +genIFRwDataCode(i, 0x004c, False, 2) + + + 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) + change_8b10b_code + +genTcEndFrameCode(gen_file_def)) genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1) return gen_file_def