From 452c5149bf29660748ce14f83b0a1b32bc1997ea Mon Sep 17 00:00:00 2001 From: bacon Date: Tue, 5 Aug 2025 15:18:42 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86=E6=96=B0=E7=9A=84?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E4=BA=8B=E4=BB=B6=E5=AF=84=E5=AD=98=E5=99=A8?= =?UTF-8?q?=E7=BB=84=E7=9A=84=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/FPGATop.v | 4 +- tb/shinTest/ShinTopSpiTb.v | 25 ++++++++--- tb/shinTest/gen_pkt.py | 7 +-- tb/shinTest/testcase/base.py | 85 ++++++++++++++++++++++++++++++++++++ 4 files changed, 112 insertions(+), 9 deletions(-) diff --git a/src/main/resources/FPGATop.v b/src/main/resources/FPGATop.v index cce01fb..cd6e53e 100644 --- a/src/main/resources/FPGATop.v +++ b/src/main/resources/FPGATop.v @@ -131,7 +131,9 @@ ShinTop i_ShinTop( .io_oSync_3(), .io_isSoftReset(isSoftReset), - .io_ledTest(led) + .io_ledTest(led), + .io_latchPin_0(), + .io_latchPin_1() ); assign io_led = led[5:2]; diff --git a/tb/shinTest/ShinTopSpiTb.v b/tb/shinTest/ShinTopSpiTb.v index a977a33..1a824eb 100644 --- a/tb/shinTest/ShinTopSpiTb.v +++ b/tb/shinTest/ShinTopSpiTb.v @@ -68,6 +68,8 @@ module ShinTopSpiTb( reg _reset_deadline_ind; reg _deadline_ind; reg[31:0] _deadline_ind_ctr; + reg latch0; + reg latch1; ShinTop s_ShinTop_Mst( .clock(clock), @@ -100,7 +102,9 @@ ShinTop s_ShinTop_Mst( .io_rsp_valid(isResp), .io_rsp_bits_isError(), .io_isSoftReset(isSoftReset[0]), - .io_interrupt(io_int_sig[0]) + .io_interrupt(io_int_sig[0]), + .io_latchPin_0(), + .io_latchPin_1() ); ShinTop s_ShinTop_slv0( @@ -133,7 +137,9 @@ ShinTop s_ShinTop_slv0( .io_rsp_valid(), .io_rsp_bits_isError(), .io_isSoftReset(isSoftReset[1]), - .io_interrupt(io_int_sig[1]) + .io_interrupt(io_int_sig[1]), + .io_latchPin_0(latch0), + .io_latchPin_1(latch1) ); ShinTop s_ShinTop_slv1( @@ -166,7 +172,9 @@ ShinTop s_ShinTop_slv1( .io_rsp_valid(), .io_rsp_bits_isError(), .io_isSoftReset(isSoftReset[2]), - .io_interrupt(io_int_sig[2]) + .io_interrupt(io_int_sig[2]), + .io_latchPin_0(latch0), + .io_latchPin_1(latch1) ); ShinTop s_ShinTop_slv2( @@ -199,7 +207,9 @@ ShinTop s_ShinTop_slv2( .io_rsp_valid(), .io_rsp_bits_isError(), .io_isSoftReset(isSoftReset[3]), - .io_interrupt(io_int_sig[3]) + .io_interrupt(io_int_sig[3]), + .io_latchPin_0(latch0), + .io_latchPin_1(latch1) ); ShinTop s_ShinTop_slv3( @@ -232,7 +242,9 @@ ShinTop s_ShinTop_slv3( .io_rsp_valid(), .io_rsp_bits_isError(), .io_isSoftReset(isSoftReset[4]), - .io_interrupt(io_int_sig[4]) + .io_interrupt(io_int_sig[4]), + .io_latchPin_0(latch0), + .io_latchPin_1(latch1) ); @@ -252,6 +264,9 @@ initial begin _deadline_ind = 0; _deadline_ind_ctr = 0; + latch0 = 0; + latch1 = 0; + _reset_deactive = 1'b0; $timeformat(-9, 2, " ns", 8); diff --git a/tb/shinTest/gen_pkt.py b/tb/shinTest/gen_pkt.py index 61ec900..602ebef 100755 --- a/tb/shinTest/gen_pkt.py +++ b/tb/shinTest/gen_pkt.py @@ -21,9 +21,10 @@ if __name__ == '__main__': #add_tc_2_runlist(base.tc7()) #add_tc_2_runlist(base.tc8()) #add_tc_2_runlist(base.tc9()) - add_tc_2_runlist(base.tc10()) - add_tc_2_runlist(base.tc11()) - add_tc_2_runlist(base.tc12()) + #add_tc_2_runlist(base.tc10()) + #add_tc_2_runlist(base.tc11()) + #add_tc_2_runlist(base.tc12()) + add_tc_2_runlist(base.tc13()) #add_tc_2_runlist(broadcast.tc1()) diff --git a/tb/shinTest/testcase/base.py b/tb/shinTest/testcase/base.py index d4759b3..8abf2d0 100644 --- a/tb/shinTest/testcase/base.py +++ b/tb/shinTest/testcase/base.py @@ -910,4 +910,89 @@ def tc12(): genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1) + return gen_file_def + + + +def tc13(): + genPkt = GenPkt() + + gen_file_def = "base_tc13" + sm_idx = 0 + tc_des = "测试事件寄存器组。先要同步一下时间,然后测试Latch0的锁定。\\n" + + + + genPkt.clean() + genPkt.setPktType(0) + + #subPkt参数:索引、索引类型、地址、命令、长度、数据 + genPkt.addSubPkt(0x0, 0, 0x0, 0xc, 12, b'\0'*12) + + + genPkt.addBeforeExc(genTcStartFrameCode(gen_file_def, tc_des) + +genEnableInsertTimeCode(0xa)) + + sm_idx = 0 + + 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) + +genCheckInsertTimeCode() + ) + + genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1) + #------------------------------------------------------------------------- + #>>>>>>设置顺序地址 + genPkt.clean() + genPkt.setPktType(0) + + gen_file_def_ap = gen_file_def + "_rw01" + genPkt.addBeforeExc(genMessageCode("--读取事件寄存器组") + +genIFRwDataCode(0, 0x500, False, 0x48) + + +genMessageCode("--设置事件") + +genIFRwDataCode(0, 0x500, True, 2, [0x0F, 0x00] ) + + +genMessageCode("--读取事件寄存器组") + +genIFRwDataCode(0, 0x500, False, 0x48) + ) + + genPkt.addAfterExc("latch0 <= 1;\n" + +"#5000\n" + +"latch0 <= 0;\n" + +"#5000\n" + +"latch0 <= 1;\n" + +"#5000\n" + +"latch0 <= 0;\n" + +genMessageCode("--读取中断") + +genIFRwDataCode(0, 0x74, False, 4) + +genIFRwDataCode(1, 0x74, False, 4) + +genIFRwDataCode(2, 0x74, False, 4) + +genIFRwDataCode(3, 0x74, False, 4) + +genIFRwDataCode(4, 0x74, False, 4) + + +genMessageCode("--清除中断") + +genIFRwDataCode(0, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff]) + +genIFRwDataCode(1, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff]) + +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("--读取中断") + +genIFRwDataCode(0, 0x74, False, 4) + +genIFRwDataCode(1, 0x74, False, 4) + +genIFRwDataCode(2, 0x74, False, 4) + +genIFRwDataCode(3, 0x74, False, 4) + +genIFRwDataCode(4, 0x74, False, 4) + + +genMessageCode("--读取事件寄存器组") + +genIFRwDataCode(0, 0x500, False, 0x48) + + +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