From f56ef8e077c49a52b6564d3d6c4b6afc11a7f90f Mon Sep 17 00:00:00 2001 From: bacon Date: Fri, 1 Aug 2025 11:33:21 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=9D=E5=AD=98=E6=B5=8B=E8=AF=95=E7=94=A8?= =?UTF-8?q?=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tb/shinTest/ShinTopSpiTb.v | 11 +--- tb/shinTest/gen_pkt.py | 16 ++--- tb/shinTest/pyutils/GenPkt.py | 4 +- tb/shinTest/testcase/base.py | 34 +++++++++++ tb/shinTest/testcase/ebmmu.py | 109 ++++++++++++++++++++++++++-------- 5 files changed, 130 insertions(+), 44 deletions(-) diff --git a/tb/shinTest/ShinTopSpiTb.v b/tb/shinTest/ShinTopSpiTb.v index c830ba7..4f13513 100644 --- a/tb/shinTest/ShinTopSpiTb.v +++ b/tb/shinTest/ShinTopSpiTb.v @@ -26,7 +26,7 @@ //`define ENABLE_SYNC_TEST "generated/log/sync_tc.log" //`define ENABLE_SYNC_SIG0_TEST "generated/log/sync_sig0_tc.log" //`define ENABLE_SYNC_SIG1_TEST "generated/log/sync_sig1_tc.log" -//`define ENABLE_RESET_TEST "generated/log/reset_tc.log" +`define ENABLE_RESET_TEST "generated/log/reset_tc.log" //`define ENABLE_WD1_TEST "generated/log/wd1_tc.log" @@ -1526,15 +1526,6 @@ initial begin txBuf[0+3] = 8'h02; `SPI_TRANS( (16'h00), (`SPI_WRITE), (1), (`IF_IDX(2)) ); -`ifdef ENABLE_ENCRYPTION - $fdisplay(spidata_file, "-配置加密"); - `SETTING_ENCRYPTION; - spi_trans( (16'h50), (`SPI_WRITE), (17), (`IF_IDX(0)) ); - spi_trans( (16'h50), (`SPI_WRITE), (17), (`IF_IDX(1)) ); - spi_trans( (16'h50), (`SPI_WRITE), (17), (`IF_IDX(2)) ); - spi_trans( (16'h50), (`SPI_WRITE), (17), (`IF_IDX(3)) ); - spi_trans( (16'h50), (`SPI_WRITE), (17), (`IF_IDX(4)) ); -`endif #1000 $fdisplay(spidata_file, "\n广播读:使用SM2"); diff --git a/tb/shinTest/gen_pkt.py b/tb/shinTest/gen_pkt.py index 45fc244..2a884ba 100755 --- a/tb/shinTest/gen_pkt.py +++ b/tb/shinTest/gen_pkt.py @@ -30,11 +30,12 @@ if __name__ == '__main__': sync.tc3() sync.tc4() - #add_tc_2_runlist(ebmmu.tc1()) - #add_tc_2_runlist(ebmmu.tc2()) - #add_tc_2_runlist(ebmmu.tc3()) - #add_tc_2_runlist(ebmmu.tc4()) - ebmmu.tc5() + ''' + add_tc_2_runlist(ebmmu.tc1()) + add_tc_2_runlist(ebmmu.tc2()) + add_tc_2_runlist(ebmmu.tc3()) + add_tc_2_runlist(ebmmu.tc4()) + add_tc_2_runlist(ebmmu.tc5()) add_tc_2_runlist(ebmmu.tc6()) add_tc_2_runlist(ebmmu.tc7()) add_tc_2_runlist(ebmmu.tc8()) @@ -44,8 +45,9 @@ if __name__ == '__main__': add_tc_2_runlist(ebmmu.tc12()) add_tc_2_runlist(ebmmu.tc13()) add_tc_2_runlist(ebmmu.tc14()) - #add_tc_2_runlist(ebmmu.tc15()) - #add_tc_2_runlist(ebmmu.tc16()) + add_tc_2_runlist(ebmmu.tc15()) + add_tc_2_runlist(ebmmu.tc16()) + ''' watchdog.tc1() diff --git a/tb/shinTest/pyutils/GenPkt.py b/tb/shinTest/pyutils/GenPkt.py index 62d2f3f..a6545f5 100644 --- a/tb/shinTest/pyutils/GenPkt.py +++ b/tb/shinTest/pyutils/GenPkt.py @@ -365,7 +365,7 @@ def gen_tc_runlist(): def genTcStartFrameCode(tcname, des): upper_name = tcname.upper() code_str = f'''\tbegin:{upper_name}_TESTCASE\n'''\ - +f'''\t\t`BEGIN_TESTCASE("{__pre_gen_log_path}/{tcname}_tc.log");\n'''\ + +f'''\t\t`BEGIN_TESTCASE("{__pre_gen_log_path}/{tcname}_result.log");\n'''\ +'''\t\t_t_start = $realtime;\n'''\ +'''\t\t#1000\n'''\ +f'''\t\t$fdisplay(spidata_file,"\\n\\n测试用例:{upper_name}");\n''' @@ -380,6 +380,6 @@ def genTcEndFrameCode(tcname): upper_name = tcname.upper() return f'''\t\t_t_end = $realtime;\n'''\ +'''\t\t$fdisplay(spidata_file, "该测试用例运行时间:%t\\n", _t_end - _t_start);\n'''\ - +f'''\t\t`END_TESTCASE("{__pre_gen_log_path}/{tcname}_tc.log");\n'''\ + +f'''\t\t`END_TESTCASE("{__pre_gen_log_path}/{tcname}_result.log");\n'''\ +'''\tend\n''' \ No newline at end of file diff --git a/tb/shinTest/testcase/base.py b/tb/shinTest/testcase/base.py index 725f494..36da2e3 100644 --- a/tb/shinTest/testcase/base.py +++ b/tb/shinTest/testcase/base.py @@ -267,6 +267,40 @@ def tc8(): genPkt.addSubPkt(0x0, 0, random.randint(0, 65535), 0xb, 2, data) + gen_file_def = "set_addr_pkt" + 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)) + + genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1) + + return gen_file_def + +def tc9(): + genPkt = GenPkt() + + + gen_file_def = "base_tc09" + sm_idx = 0 + tc_des = "测试8个ebmmu全配置下运行,每两个ebmmu对应一个sm。每个ebmmu必须对齐、足长的写入,\\n" \ + + "对应的sm才能正常工作。两次写入数据,复位设备1的SM1,SM1状态复原,不能读取到有效的数据。\\n"\ + + "测试用例能成功运行完毕,除设备1的SM1,其余的SMx都能获得正确的数据。\\n\\n" \ + + "检查内容:ebmmu工作状态、回包工作计数、SMx的状态、中断状态、统计信息、相关时序" + #------------------------------------------------------------------------- + #>>>>>>设置顺序地址 + genPkt.clean() + genPkt.setPktType(0) + + data = bytearray(b"\0" * 2) + data[0] = 0x3f + data[1] = 0xff + #subPkt参数:索引、索引类型、地址、命令、长度、数据 + genPkt.addSubPkt(0x0, 0, random.randint(0, 65535), 0xb, 2, data) + + gen_file_def = "set_addr_pkt" sm_idx = 0 diff --git a/tb/shinTest/testcase/ebmmu.py b/tb/shinTest/testcase/ebmmu.py index f0979a4..4f35262 100644 --- a/tb/shinTest/testcase/ebmmu.py +++ b/tb/shinTest/testcase/ebmmu.py @@ -5,8 +5,8 @@ def tc1(): gen_file_def = "ebmmu_tc01" sm_idx = 0 - tc_des = "每个从站测试1个ebmmu[0],共4个mmu,从0x1000_0000位置向后对齐,每个设备占10个字节。\\n" \ - + "使用1包数据,将4个设备的数据一次性读上来。\\n"\ + tc_des = "每个从站都使用ebmmu[0],共4个mmu,从0x1000_0000位置向后对齐,每个设备占10个字节,\\n" \ + + "映射0x200~0x20a,中间无字节空洞。主站使用1包数据,将4个设备的数据一次性读上来。\\n"\ + "检查内容:ebmmu工作状态、回包工作计数、SMx的状态、中断状态、统计信息、相关时序" #------------------------------------------------------------------------- @@ -54,7 +54,7 @@ def tc1(): genPkt.addSubPkt(0x03, 0, 0x0200, 0x0, 10, data) genPkt.addSubPkt(0x04, 0, 0x0200, 0x0, 10, data) - gen_file_def_ap = "ebmmu_tc01_rw1" + gen_file_def_ap = gen_file_def + "_rw1" sm_idx = 0 genPkt.addAfterExc(genWriteTransLenCode(gen_file_def_ap, sm_idx) @@ -73,7 +73,7 @@ def tc1(): genPkt.addSubPkt(0x1000, 2, 0x0000, 0x0, 40, data) - gen_file_def_ap = "ebmmu_tc1_rw2" + gen_file_def_ap = gen_file_def + "_rw2" sm_idx = 0 genPkt.addAfterExc(genWriteTransLenCode(gen_file_def_ap, sm_idx) @@ -93,8 +93,8 @@ def tc2(): gen_file_def = "ebmmu_tc02" sm_idx = 0 - tc_des = "每个从站测试1个ebmmu[1],共4个mmu,从0x2000_0000位置向后对齐,每个设备占16个字节。\\n" \ - + "使用1包数据,将4个设备的数据一次性读上来。并采用顺序读出一样的数据,以做对比。\\n"\ + tc_des = "每个从站都使用ebmmu[1],共4个mmu,从0x2000_0000位置向后对齐,每个设备占16个字节,\\n" \ + + "映射0x00~0x10,中间无字节空洞。主站使用1包数据,将4个设备的数据一次性读上来。\\n"\ + "检查内容:ebmmu工作状态、回包工作计数、SMx的状态、中断状态、统计信息、相关时序" #------------------------------------------------------------------------- @@ -142,7 +142,7 @@ def tc2(): genPkt.addSubPkt(0x03, 0, 0x0000, 0x0, 16, data) genPkt.addSubPkt(0x04, 0, 0x0000, 0x0, 16, data) - gen_file_def_ap = "ebmmu_tc02_rw01" + gen_file_def_ap = gen_file_def + "_rw1" sm_idx = 0 genPkt.addAfterExc(genWriteTransLenCode(gen_file_def_ap, sm_idx) @@ -161,7 +161,7 @@ def tc2(): genPkt.addSubPkt(0x2000, 2, 0x0000, 0x0, 0x40, data) - gen_file_def_ap = "ebmmu_tc02_rw02" + gen_file_def_ap = gen_file_def + "_rw2" sm_idx = 0 genPkt.addAfterExc(genWriteTransLenCode(gen_file_def_ap, sm_idx) @@ -180,8 +180,9 @@ def tc3(): gen_file_def = "ebmmu_tc03" sm_idx = 0 - tc_des = "每个从站测试1个ebmmu[2],共4个mmu,从0x2000_0000位置向后对齐,每个设备占12个字节。\\n" \ - + "使用1包数据,将4个设备的数据一次性读上来。\\n"\ + tc_des = "每个从站都使用ebmmu[2],共4个mmu,从0x1000_0028位置向后对齐,每个设备占12个字节,\\n" \ + + "映射0x00~0x0c, 中间无字节空洞。使用1包数据,将4个设备的数据一次性读上来。\\n"\ + + "注意:该测试用例读取时是从0x1000_0000开始读取的\\n"\ + "检查内容:ebmmu工作状态、回包工作计数、SMx的状态、中断状态、统计信息、相关时序" #------------------------------------------------------------------------- @@ -189,6 +190,24 @@ def tc3(): genPkt.clean() genPkt.setPktType(0) + #subPkt参数:索引、索引类型、地址、命令、长度、数据 + data = [0,] * 30 + setting_ebmmu_regs(data, 0, 0x10000000, 0x0200, 0x0a, 0x3, 0x1) + genPkt.addSubPkt(0x1, 0, 0x0200, 0x1, 10, data) + + data = [0,] * 30 + setting_ebmmu_regs(data, 0, 0x1000000a, 0x0200, 0x0a, 0x3, 0x1) + genPkt.addSubPkt(0x2, 0, 0x0200, 0x1, 10, data) + + + data = [0,] * 30 + setting_ebmmu_regs(data, 0, 0x10000014, 0x0200, 0x0a, 0x3, 0x1) + genPkt.addSubPkt(0x3, 0, 0x0200, 0x1, 10, data) + + data = [0,] * 30 + setting_ebmmu_regs(data, 0, 0x1000001e, 0x0200, 0x0a, 0x3, 0x1) + genPkt.addSubPkt(0x4, 0, 0x0200, 0x1, 10, data) + #subPkt参数:索引、索引类型、地址、命令、长度、数据 data = [0,] * 30 setting_ebmmu_regs(data, 0, 0x1000001e+0xa, 0x0000, 0x0c, 0x1, 0x1) @@ -245,8 +264,8 @@ def tc4(): gen_file_def = "ebmmu_tc04" sm_idx = 0 - tc_des = "每个从站测试1个ebmmu[2],共4个mmu,从0x2000_0000位置向后对齐,每个设备占12个字节。\\n" \ - + "使用1包数据,将4个设备的数据一次性读上来。\\n"\ + tc_des = "每个从站使用ebmmu[3],共4个mmu,从0x1000_0058位置向后对齐,\\n" \ + + "分别占用不同大小的空间。使用1包数据,将4个设备的数据一次性读上来。\\n"\ + "检查内容:ebmmu工作状态、回包工作计数、SMx的状态、中断状态、统计信息、相关时序" #------------------------------------------------------------------------- @@ -284,7 +303,6 @@ def tc4(): genPkt.addSubPkt(0x4, 0, 0x021e, 0x1, 10, data) - #gen_file_def = "ebmmu_tc4_settings" sm_idx = 0 genPkt.addAfterExc(genWriteTransLenCode(gen_file_def, sm_idx) @@ -303,7 +321,7 @@ def tc4(): genPkt.addSubPkt(0x1000, 2, 0x0058, 0x0, 0x80+0x98+0x81+0x8c, data) - gen_file_def_ap = "ebmmu_tc4_rw" + gen_file_def_ap = gen_file_def + "_rw" sm_idx = 0 genPkt.addAfterExc(genWriteTransLenCode(gen_file_def_ap, sm_idx) @@ -320,16 +338,56 @@ def tc4(): def tc5(): genPkt = GenPkt() - - ''' gen_file_def = "ebmmu_tc05" sm_idx = 0 - tc_des = "每个从站测试1个ebmmu[2],共4个mmu,从0x2000_0000位置向后对齐,每个设备占12个字节。\\n" \ - + "使用1包数据,将4个设备的数据一次性读上来。\\n"\ - + "检查内容:ebmmu工作状态、回包工作计数、SMx的状态、中断状态、统计信息、相关时序" + tc_des = "每个从站使用ebmmu[3],共4个mmu,从0x1000_0058位置向后对齐,\\n" \ + + "分别占用不同大小的空间。使用1包数据,将4个设备的数据一次性读上来。由于从站没有数据,读上来全是随机数据。\\n" + + genPkt.clean() + genPkt.setPktType(0) + + genPkt.addBeforeExc(genTcStartFrameCode(gen_file_def, tc_des)) ''' + + genSlvSMWriteData(1, 1, 0x80) + + genSlvSMWriteData(2, 3, 0x98) + + genSlvSMWriteData(3, 5, 0x81) + + genSlvSMWriteData(4, 7, 0x8c)) + ''' + + #subPkt参数:索引、索引类型、地址、命令、长度、数据 + data = [0,] * 30 + setting_ebmmu_regs(data, 0, 0x10000058, 0x1000, 0x80, 0x1, 0x1) + genPkt.addSubPkt(0x1, 0, 0x021e, 0x1, 10, data) + + + data = [0,] * 30 + addr = 0x58 + 0x80 + setting_ebmmu_regs(data, 0, 0x10000000+addr, 0x2000, 0x98, 0x1, 0x1) + genPkt.addSubPkt(0x2, 0, 0x021e, 0x1, 10, data) + + + data = [0,] * 30 + addr = 0x58 + 0x80 + 0x98 + setting_ebmmu_regs(data, 0, 0x10000000+addr, 0x3000, 0x81, 0x1, 0x1) + genPkt.addSubPkt(0x3, 0, 0x021e, 0x1, 10, data) + + data = [0,] * 30 + + addr = 0x58 + 0x80 + 0x98 + 0x81 + setting_ebmmu_regs(data, 0, 0x10000000+addr, 0x4000, 0x8c, 0x1, 0x1) + genPkt.addSubPkt(0x4, 0, 0x021e, 0x1, 10, data) + + + 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)) + + genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1) #------------------------------------------------------------------------- #>>>>>>用EB-MMU方式读取EB-MMU设置 5 @@ -341,15 +399,16 @@ def tc5(): genPkt.addSubPkt(0x1000, 2, 0x0058, 0x0, 0x80+0x98+0x81+0x8c, data) - gen_file_def = "ebmmu_tc5_read" + gen_file_def_ap = gen_file_def + "_rw" 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)) + 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) + +genTcEndFrameCode(gen_file_def)) - genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1) + genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1, True, gen_file_def_ap) return gen_file_def