diff --git a/Makefile b/Makefile index 9800a10..65abac1 100644 --- a/Makefile +++ b/Makefile @@ -54,6 +54,20 @@ testShin: vvp -N ./tb/build/shinTest.iverilog -lxt2 -fst || true python3 ./tb/shinTest/check_testcase.py +testShin8b10b: + python3 ./tb/shinTest/gen_pkt.py -8b10b + mkdir -p generated/log + rm -rf generated/log/* + iverilog -Wall \ + -o ./tb/build/shinTest.iverilog \ + -y ./generated/shin \ + -I ./generated/shin \ + -D RANDOMIZE_REG_INIT \ + -D IVERILOG_COMPILE \ + ./tb/shinTest/ShinTopSpiTb.v + vvp -N ./tb/build/shinTest.iverilog -lxt2 -fst || true + python3 ./tb/shinTest/check_testcase.py + testShinClk: python3 ./tb/shinTest/gen_pkt_clk.py --dev1 0 92 --dev2 0 -92 -8b10b mkdir -p generated/log diff --git a/tb/shinTest/Makefile_vcs b/tb/shinTest/Makefile_vcs index 080ef36..df609fe 100644 --- a/tb/shinTest/Makefile_vcs +++ b/tb/shinTest/Makefile_vcs @@ -23,6 +23,16 @@ testShin_vcs: python3 ./shinTest/check_testcase.py +testShin8b10b_vcs: + python3 ./shinTest/gen_pkt.py -8b10b + mkdir -p generated/log + rm -rf generated/log/* + @echo "Available CPUs: ${CPU_COUNT}" + ${VCS} -f ./shinTest_vcs.f + ${SIM} + python3 ./shinTest/check_testcase.py + + testShinClk_vcs: python3 ./shinTest/gen_pkt_clk.py --dev1 0 90 --dev2 0 -90 mkdir -p generated/log @@ -33,7 +43,7 @@ testShinClk_vcs: 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 -8b10b + 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 @@ -51,7 +61,7 @@ testShinClk_vcs: mv spi_trans_data.txt generated/spi_trans_data3.txt mv generated/wave.vcd generated/wave3.vcd \ - python3 ./shinTest/gen_pkt_clk.py --dev1 45 186 --dev3 25 -186 + 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 @@ -60,7 +70,7 @@ testShinClk_vcs: mv spi_trans_data.txt generated/spi_trans_data4.txt mv generated/wave.vcd generated/wave4.vcd \ - python3 ./shinTest/gen_pkt_clk.py --dev1 45 187 --dev3 25 -187 + 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 @@ -69,7 +79,7 @@ testShinClk_vcs: mv spi_trans_data.txt generated/spi_trans_data5.txt mv generated/wave.vcd generated/wave5.vcd \ - python3 ./shinTest/gen_pkt_clk.py --dev1 45 188 --dev3 25 -188 -8b10b + 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 diff --git a/tb/shinTest/ShinTopSpiTb_clk.v b/tb/shinTest/ShinTopSpiTb_clk.v index 0f86e4c..d789922 100644 --- a/tb/shinTest/ShinTopSpiTb_clk.v +++ b/tb/shinTest/ShinTopSpiTb_clk.v @@ -607,7 +607,7 @@ always @(posedge sck) begin rxBuf[byteCnt] <= exChangeRegi; //$display("spi read out %x", exChangeRegi); end - if( txBuf[2] === 8'h80 & nextByteCnt >= 4) begin + if( txBuf[2] === 8'h80 & nextByteCnt >= 3) begin exChangeRegi <= isQspi ? {exChangeRegi[3:0], qspi_mux_miso} : {exChangeRegi[6:0], spi_mux_miso}; end else begin exChangeRegi <= 0; @@ -627,7 +627,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]; diff --git a/tb/shinTest/gen_pkt.py b/tb/shinTest/gen_pkt.py index 7742156..9a607ef 100755 --- a/tb/shinTest/gen_pkt.py +++ b/tb/shinTest/gen_pkt.py @@ -2,14 +2,28 @@ #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("-8b10b", action="store_true", dest="use_8b10b", default=False, help="使用8b10b编码") + + # 解析参数 + args = parser.parse_args() + + #if args.use_8b10b: + # add_tc_2_runlist(rwregs.tc1()) + environment.gen_slv_dev_num(4) + environment.set_using_8b10b(args.use_8b10b) environment.bringup() #add_tc_2_runlist(rwregs.tc1()) - ''' + #''' add_tc_2_runlist(errorPkt.tc1()) add_tc_2_runlist(errorPkt.tc2()) add_tc_2_runlist(errorPkt.tc3()) @@ -50,6 +64,8 @@ if __name__ == '__main__': add_tc_2_runlist(errorPkt.tc38()) #''' + #add_tc_2_runlist(rwregs.tc2()) + #''' add_tc_2_runlist(base.tc1()) add_tc_2_runlist(base.tc2()) diff --git a/tb/shinTest/testcase/base.py b/tb/shinTest/testcase/base.py index 5d5b73a..c55e0d9 100644 --- a/tb/shinTest/testcase/base.py +++ b/tb/shinTest/testcase/base.py @@ -1,5 +1,5 @@ from pyutils import * - +from .environment import * def tc1(): genPkt = GenPkt() @@ -510,6 +510,8 @@ def tc8(): +"\n#5000\n" +genIFRwDataCode(0, 0x09, True, 1, [0, ], False, iface=1) +genIFRwDataCode(2, 0x09, True, 1, [0, ], False, iface=1) + +using_proper_code(0) + +using_proper_code(2) +genMessageCode("--读取中断") +genIFRwDataCode(0, 0x74, False, 4) @@ -2118,6 +2120,8 @@ def tc28(): +"#5000" +genIFRwDataCode(0, 0x09, True, 1, [0, ], False, iface=1) +genIFRwDataCode(4, 0x09, True, 1, [0, ], False, iface=1) + +using_proper_code(0) + +using_proper_code(4) +genMessageCode("--读取中断") +genIFRwDataCode(0, 0x74, False, 4) @@ -2332,6 +2336,8 @@ def tc28(): +"#5000" +genIFRwDataCode(0, 0x09, True, 1, [0, ], False, iface=1) +genIFRwDataCode(4, 0x09, True, 1, [0, ], False, iface=1) + +using_proper_code(0) + +using_proper_code(4) +genMessageCode("--读取中断") +genIFRwDataCode(0, 0x74, False, 4) diff --git a/tb/shinTest/testcase/environment.py b/tb/shinTest/testcase/environment.py index 67a1e08..81f9863 100644 --- a/tb/shinTest/testcase/environment.py +++ b/tb/shinTest/testcase/environment.py @@ -3,8 +3,7 @@ from pyutils import * global_dev_num = 4 global_setting_dev_clk = dict() - - +global_using_8b10b = False def bringup(): gen_file_def = "sys_bringup" @@ -30,6 +29,12 @@ def bringup(): +genIFRwDataCode(2, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff]) +genIFRwDataCode(3, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff]) +genIFRwDataCode(4, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff]) + +genMessageCode("--设置合适的底层编码4b5b or 8b10b") + +using_proper_code(0) + +using_proper_code(1) + +using_proper_code(2) + +using_proper_code(3) + +using_proper_code(4) ) main_dev = [0x01, ] @@ -404,4 +409,18 @@ def __gen_slv_clk(clk, ph, period): def teardown(): #add_tc_2_runlist("") - pass \ No newline at end of file + pass + + +def set_using_8b10b(isUsing8b10b): + global global_using_8b10b + global_using_8b10b = isUsing8b10b + +def using_proper_code(dev): + global global_using_8b10b + if global_using_8b10b: + return genIFRwDataCode(dev, 0x004c, True, 2, [0x1, 0x59], wlog = False) + else: + return genIFRwDataCode(dev, 0x004c, True, 2, [0x0, 0x59], wlog = False) + + \ No newline at end of file diff --git a/tb/shinTest/testcase/rwregs.py b/tb/shinTest/testcase/rwregs.py index 036f988..7ac5b0d 100644 --- a/tb/shinTest/testcase/rwregs.py +++ b/tb/shinTest/testcase/rwregs.py @@ -30,3 +30,31 @@ def tc1(): +genTcEndFrameCode(gen_file_def)) genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1) return gen_file_def + + +def tc2(): + gen_file_def = "regtest_tc02" + sm_idx = 0 + tc_des = "测试寄存器的读写状态,将系统改为4B5B进行通信\\n" + + genPkt = GenPkt() + genPkt.clean() + + dev_num = get_slv_dev_num() + + genPkt.addBeforeExc(genTcStartFrameCode(gen_file_def, tc_des)) + + change_4b5b_code = "" + for i in range(dev_num + 1): + change_4b5b_code = change_4b5b_code + genIFRwDataCode(i, 0x004c, True, 2, [0x0, 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_4b5b_code + +genTcEndFrameCode(gen_file_def)) + genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1) + return gen_file_def \ No newline at end of file diff --git a/tb/shinTest/testcase/sync.py b/tb/shinTest/testcase/sync.py index 0d5ac25..edd7b43 100644 --- a/tb/shinTest/testcase/sync.py +++ b/tb/shinTest/testcase/sync.py @@ -1,5 +1,5 @@ from pyutils import * - +from .environment import * def tc1(): genPkt = GenPkt() @@ -822,6 +822,7 @@ def tc5(): +genIFRwDataCode(3, 0xc0, False, 4) +genIFRwDataCode(4, 0x09, True, 1, [0, ], False, iface=1) + +using_proper_code(4) +genIFRwDataCode(4, 0x00, True, 1, [0x2, ]) +genIFRwDataCode(4, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff]) @@ -1319,9 +1320,10 @@ def tc7(): genPkt.addBeforeExc("\n#5000\n" +genIFRwDataCode(0, 0x09, True, 1, [0, ], False, iface=1) + +using_proper_code(0) +genIFRwDataCode(0, 0x74, False, 4) - +genIFRwDataCode(0, 0x40, False, 4) + #+genIFRwDataCode(0, 0x40, False, 4) +genIFRwDataCode(0, 0x00, True, 1, [0x1, ]) ) diff --git a/tb/shinTest/testcase_result/base_tc02_result.log b/tb/shinTest/testcase_result/base_tc02_result.log index 1330c11..914cb8f 100644 --- a/tb/shinTest/testcase_result/base_tc02_result.log +++ b/tb/shinTest/testcase_result/base_tc02_result.log @@ -3,7 +3,7 @@ 16'h0316 8'h00 16'h0002 8'h8c 8'h00 16'h3000 8'h00 16'h008c 8'h08 8'h80 8'h00 8'h00 8'h00 8'h04 8'h00 8'h00 8'hd0 8'h80 8'h00 8'h01 8'h02 8'h03 8'h04 8'h05 8'h06 8'h07 8'h08 8'h09 8'h0a 8'h0b 8'h0c 8'h0d 8'h0e 8'h0f 8'h10 8'h11 8'h12 8'h13 8'h14 8'h15 8'h16 8'h17 8'h18 8'h19 8'h1a 8'h1b 8'h1c 8'h1d 8'h1e 8'h1f 8'h20 8'h21 8'h22 8'h23 8'h24 8'h25 8'h26 8'h27 8'h28 8'h29 8'h2a 8'h2b 8'h2c 8'h2d 8'h2e 8'h2f 8'h30 8'h31 8'h32 8'h33 8'h34 8'h35 8'h36 8'h37 8'h38 8'h39 8'h3a 8'h3b 8'h3c 8'h3d 8'h3e 8'h3f 8'h40 8'h41 8'h42 8'h43 8'h44 8'h45 8'h46 8'h47 8'h48 8'h49 8'h4a 8'h4b 8'h4c 8'h4d 8'h4e 8'h4f 8'h50 8'h51 8'h52 8'h53 8'h54 8'h55 8'h56 8'h57 8'h58 8'h59 8'h5a 8'h5b 8'h5c 8'h5d 8'h5e 8'h5f 8'h60 8'h61 8'h62 8'h63 8'h64 8'h65 8'h66 8'h67 8'h68 8'h69 8'h6a 8'h6b 8'h6c 8'h6d 8'h6e 8'h6f 8'h70 8'h71 8'h72 8'h73 8'h74 8'h75 8'h76 8'h77 8'h78 8'h79 8'h7a 8'h7b 8'h7c 8'h7d 8'h7e 8'h7f 8'h00 8'h00 16'h0020 8'h00 16'h0001 8'h15 -16'h2800 8'h80 16'h008c 8'h08 8'h80 8'h00 8'h04 8'h00 8'h04 8'h00 8'h00 8'hd0 8'h80 8'h02 8'h01 8'h4e 8'h5b 8'h54 8'h35 8'h36 8'h37 8'h5d 8'h09 8'h0f 8'h0b 8'h0c 8'h0d 8'h0e 8'h0f 8'h10 8'h11 8'h12 8'h13 8'h14 8'h15 8'h16 8'h17 8'h18 8'h19 8'h1a 8'h1b 8'h1c 8'h1d 8'h1e 8'h1f 8'h20 8'h21 8'h22 8'h23 8'h24 8'h25 8'h26 8'h27 8'h28 8'h29 8'h2a 8'h2b 8'h2c 8'h2d 8'h2e 8'h2f 8'h30 8'h31 8'h32 8'h33 8'h34 8'h35 8'h36 8'h37 8'h38 8'h39 8'h3a 8'h3b 8'h3c 8'h3d 8'h3e 8'h3f 8'h40 8'h41 8'h42 8'h43 8'h7c 8'h75 8'h46 8'hc7 8'h5d 8'h4d 8'h4a 8'h4b 8'h4c 8'h4d 8'h4e 8'h4f 8'h50 8'hd7 8'hd7 8'h53 8'h54 8'h55 8'h56 8'h57 8'h58 8'h59 8'h5a 8'h5b 8'h5c 8'h5d 8'h5e 8'h5f 8'h60 8'h61 8'h62 8'h63 8'h64 8'h65 8'h66 8'h67 8'h68 8'h69 8'h6a 8'h6b 8'h6c 8'h6d 8'h6e 8'h6f 8'h70 8'h71 8'h72 8'hf3 8'h74 8'h75 8'h77 8'h77 8'h78 8'h79 8'h7a 8'h7b 8'h7c 8'hfd 8'h7e 8'h7f 8'h00 8'h04 +16'h2800 8'h80 16'h008c 8'h08 8'h80 8'h00 8'h04 8'h00 8'h04 8'h00 8'h00 8'hd0 8'h80 8'h02 8'h01 8'h4e 8'h5b 8'h54 8'h35 8'h36 8'h37 8'h5d 8'h09 8'h0f 8'h0b 8'h0c 8'h0d 8'h0e 8'h0f 8'h10 8'h11 8'h12 8'h13 8'h14 8'h15 8'h16 8'h17 8'h18 8'h19 8'h1a 8'h1b 8'h1c 8'h1d 8'h1e 8'h1f 8'h20 8'h21 8'h22 8'h23 8'h24 8'h25 8'h26 8'h27 8'h28 8'h29 8'h2a 8'h2b 8'h2c 8'h2d 8'h2e 8'h2f 8'h30 8'h31 8'h32 8'h33 8'h34 8'h35 8'h36 8'h37 8'h38 8'h39 8'h3a 8'h3b 8'h3c 8'h3d 8'h3e 8'h3f 8'h40 8'h41 8'h42 8'h43 8'h7c 8'h75 8'h46 8'hc7 8'h5d 8'h4d 8'h4a 8'h4b 8'hxx 8'h4d 8'h4e 8'h4f 8'h50 8'hd7 8'hd7 8'h53 8'h54 8'h55 8'h56 8'h57 8'h58 8'h59 8'h5a 8'h5b 8'h5c 8'h5d 8'h5e 8'h5f 8'h60 8'h61 8'h62 8'h63 8'h64 8'h65 8'h66 8'h67 8'h68 8'h69 8'h6a 8'h6b 8'h6c 8'h6d 8'h6e 8'h6f 8'h70 8'h71 8'h72 8'hf3 8'h74 8'h75 8'h77 8'h77 8'h78 8'h79 8'h7a 8'h7b 8'h7c 8'hfd 8'h7e 8'h7f 8'h00 8'h04 16'h0074 8'h80 16'h0004 8'h03 8'h00 8'h06 8'h00 16'h0074 8'h80 16'h0004 8'h00 8'h00 8'h0f 8'h00 16'h0074 8'h80 16'h0004 8'h00 8'h00 8'h0f 8'h00 diff --git a/tb/shinTest/testcase_result/base_tc08_result.log b/tb/shinTest/testcase_result/base_tc08_result.log index 6d6f3ff..f6578cd 100644 --- a/tb/shinTest/testcase_result/base_tc08_result.log +++ b/tb/shinTest/testcase_result/base_tc08_result.log @@ -16,7 +16,7 @@ 16'h0306 8'h00 16'h0002 8'h8c 8'h00 16'h1000 8'h00 16'h008c 8'h08 8'h80 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'hd0 8'h80 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 16'h0020 8'h00 16'h0001 8'h01 -16'h0800 8'h80 16'h008c 8'h08 8'h80 8'h00 8'h01 8'h00 8'h00 8'h00 8'h00 8'hd0 8'h80 8'h02 8'h01 8'h4c 8'h58 8'h50 8'h30 8'h30 8'h31 8'h55 8'h00 8'h01 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h3c 8'h31 8'h00 8'h80 8'h15 8'h05 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h87 8'h87 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'hf0 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h10 8'h80 8'h00 8'h00 8'h00 8'h01 +16'h0800 8'h80 16'h008c 8'h08 8'h80 8'h00 8'h01 8'h00 8'h00 8'h00 8'h00 8'hd0 8'h80 8'h02 8'h01 8'h4c 8'h58 8'h50 8'h30 8'h30 8'h31 8'h55 8'h00 8'h01 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h3c 8'h31 8'h00 8'h80 8'h15 8'h05 8'h00 8'h00 8'hxx 8'h00 8'h00 8'h00 8'h00 8'h87 8'h87 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'hf0 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h10 8'h80 8'h00 8'h00 8'h00 8'h01 16'h0078 8'h00 16'h0004 8'hff 8'hff 8'hff 8'hff 16'h0078 8'h00 16'h0004 8'hff 8'hff 8'hff 8'hff 16'h007c 8'h00 16'h0002 8'h00 8'h81