From 2de0c86075ed7176a86933902f2078e30d437f91 Mon Sep 17 00:00:00 2001 From: bacon Date: Thu, 7 Aug 2025 09:43:14 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0ebmmu=E7=9A=84=E6=96=B0?= =?UTF-8?q?=E7=9A=84=E6=B5=8B=E8=AF=95=E7=94=A8=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tb/shinTest/check_testcase.py | 2 +- tb/shinTest/gen_pkt.py | 34 +- tb/shinTest/testcase/ebmmu.py | 771 ++++++++++++++++++++++++++++++++++ 3 files changed, 790 insertions(+), 17 deletions(-) diff --git a/tb/shinTest/check_testcase.py b/tb/shinTest/check_testcase.py index c2d0c81..a8be670 100755 --- a/tb/shinTest/check_testcase.py +++ b/tb/shinTest/check_testcase.py @@ -88,7 +88,7 @@ def compare_files(source_file, target_file): #print(f"Line {i+1}, Position {j+1}: Values match ({src_val} == {tgt_val}).") pass else: - #print(f"\tLine {i+1}, Position {j+1}: Values differ ({src_val} != {tgt_val}).") + print(f"\tLine {i+1}, Position {j+1}: Values differ ({src_val} != {tgt_val}).") line_match = False all_match = False diff --git a/tb/shinTest/gen_pkt.py b/tb/shinTest/gen_pkt.py index 9c5b2a1..731e471 100755 --- a/tb/shinTest/gen_pkt.py +++ b/tb/shinTest/gen_pkt.py @@ -49,22 +49,24 @@ if __name__ == '__main__': - 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()) - add_tc_2_runlist(ebmmu.tc9()) - add_tc_2_runlist(ebmmu.tc10()) - add_tc_2_runlist(ebmmu.tc11()) - 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.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()) + #add_tc_2_runlist(ebmmu.tc9()) + #add_tc_2_runlist(ebmmu.tc10()) + #add_tc_2_runlist(ebmmu.tc11()) + #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.tc17()) + add_tc_2_runlist(ebmmu.tc18()) add_tc_2_runlist(watchdog.tc1()) diff --git a/tb/shinTest/testcase/ebmmu.py b/tb/shinTest/testcase/ebmmu.py index 78320df..6d8bae9 100644 --- a/tb/shinTest/testcase/ebmmu.py +++ b/tb/shinTest/testcase/ebmmu.py @@ -3094,3 +3094,774 @@ def tc16(): genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1, True, gen_file_def_ap) return gen_file_def + +def tc17(): + genPkt = GenPkt() + + gen_file_def = "ebmmu_tc17" + sm_idx = 0 + tc_des = "测试17个ebmmu全配置下运行,每4个ebmmu对应一个SM,映射4个字节。分别映射SM1/3/5/7, \\n" \ + + "每个映射了16个字节。中间无字节空洞。使用1个子包,将数据读上来。每个ebmmu必须对齐、足长的写入,\\n" \ + + "对应的sm才能正常工作。QSPI/SPI侧能正常的读到相关的数据。" + + #-------------------------------------------------------------------------- + #>>>>>>设置EB-MMU,测试用例15,读,检查权限 + genPkt.clean() + genPkt.setPktType(0) + + addr = 0x10000000 + addr_off = 0x0 + sm_size = 16 + + #subPkt参数:索引、索引类型、地址、命令、长度、数据 + data = [0,] * 256 + + taddr = addr + addr_off + ebmmu_offset = 0 + for i in range(4): + setting_ebmmu_regs(data, + ebmmu_offset, + taddr + i * int(sm_size / 4), + 0x1000 + i * int(sm_size / 4), + sm_size / 4, + 0x1, + 0x1 + ) + #print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4))) + ebmmu_offset = ebmmu_offset + 1 + + addr_off = addr_off + sm_size + taddr = addr + addr_off + for i in range(4): + setting_ebmmu_regs(data, + ebmmu_offset, + taddr + i * int(sm_size / 4), + 0x2000 + i * int(sm_size / 4), + sm_size / 4, + 0x1, + 0x1 + ) + #print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4))) + ebmmu_offset = ebmmu_offset + 1 + + addr_off = addr_off + sm_size + taddr = addr + addr_off + for i in range(4): + setting_ebmmu_regs(data, + ebmmu_offset, + taddr + i * int(sm_size / 4), + 0x3000 + i * int(sm_size / 4), + sm_size / 4, + 0x1, + 0x1 + ) + #print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4))) + ebmmu_offset = ebmmu_offset + 1 + + addr_off = addr_off + sm_size + taddr = addr + addr_off + for i in range(4): + setting_ebmmu_regs(data, + ebmmu_offset, + taddr + i * int(sm_size / 4), + 0x4000 + i * int(sm_size / 4), + sm_size / 4, + 0x1, + 0x1 + ) + #print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4))) + ebmmu_offset = ebmmu_offset + 1 + + genPkt.addSubPkt(0x1, 0, 0x0200, 0x1, 160, data) + + #subPkt参数:索引、索引类型、地址、命令、长度、数据 + data = [0,] * 256 + + addr_off = addr_off + sm_size + taddr = addr + addr_off + ebmmu_offset = 0 + for i in range(4): + setting_ebmmu_regs(data, + ebmmu_offset, + taddr + i * int(sm_size / 4), + 0x1000 + i * int(sm_size / 4), + sm_size / 4, + 0x1, + 0x1 + ) + #print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4))) + ebmmu_offset = ebmmu_offset + 1 + + addr_off = addr_off + sm_size + taddr = addr + addr_off + for i in range(4): + setting_ebmmu_regs(data, + ebmmu_offset, + taddr + i * int(sm_size / 4), + 0x2000 + i * int(sm_size / 4), + sm_size / 4, + 0x1, + 0x1 + ) + #print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4))) + ebmmu_offset = ebmmu_offset + 1 + + addr_off = addr_off + sm_size + taddr = addr + addr_off + for i in range(4): + setting_ebmmu_regs(data, + ebmmu_offset, + taddr + i * int(sm_size / 4), + 0x3000 + i * int(sm_size / 4), + sm_size / 4, + 0x1, + 0x1 + ) + #print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4))) + ebmmu_offset = ebmmu_offset + 1 + + addr_off = addr_off + sm_size + taddr = addr + addr_off + for i in range(4): + setting_ebmmu_regs(data, + ebmmu_offset, + taddr + i * int(sm_size / 4), + 0x4000 + i * int(sm_size / 4), + sm_size / 4, + 0x1, + 0x1 + ) + #print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4))) + ebmmu_offset = ebmmu_offset + 1 + + genPkt.addSubPkt(0x2, 0, 0x0200, 0x1, 160, data) + + + #subPkt参数:索引、索引类型、地址、命令、长度、数据 + data = [0,] * 256 + + addr_off = addr_off + sm_size + taddr = addr + addr_off + ebmmu_offset = 0 + for i in range(4): + setting_ebmmu_regs(data, + ebmmu_offset, + taddr + i * int(sm_size / 4), + 0x1000 + i * int(sm_size / 4), + sm_size / 4, + 0x1, + 0x1 + ) + #print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4))) + ebmmu_offset = ebmmu_offset + 1 + + addr_off = addr_off + sm_size + taddr = addr + addr_off + for i in range(4): + setting_ebmmu_regs(data, + ebmmu_offset, + taddr + i * int(sm_size / 4), + 0x2000 + i * int(sm_size / 4), + sm_size / 4, + 0x1, + 0x1 + ) + #print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4))) + ebmmu_offset = ebmmu_offset + 1 + + addr_off = addr_off + sm_size + taddr = addr + addr_off + for i in range(4): + setting_ebmmu_regs(data, + ebmmu_offset, + taddr + i * int(sm_size / 4), + 0x3000 + i * int(sm_size / 4), + sm_size / 4, + 0x1, + 0x1 + ) + #print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4))) + ebmmu_offset = ebmmu_offset + 1 + + addr_off = addr_off + sm_size + taddr = addr + addr_off + for i in range(4): + setting_ebmmu_regs(data, + ebmmu_offset, + taddr + i * int(sm_size / 4), + 0x4000 + i * int(sm_size / 4), + sm_size / 4, + 0x1, + 0x1 + ) + #print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4))) + ebmmu_offset = ebmmu_offset + 1 + + genPkt.addSubPkt(0x3, 0, 0x0200, 0x1, 160, data) + + + #subPkt参数:索引、索引类型、地址、命令、长度、数据 + data = [0,] * 256 + + addr_off = addr_off + sm_size + taddr = addr + addr_off + ebmmu_offset = 0 + for i in range(4): + setting_ebmmu_regs(data, + ebmmu_offset, + taddr + i * int(sm_size / 4), + 0x1000 + i * int(sm_size / 4), + sm_size / 4, + 0x1, + 0x1 + ) + #print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4))) + ebmmu_offset = ebmmu_offset + 1 + + addr_off = addr_off + sm_size + taddr = addr + addr_off + for i in range(4): + setting_ebmmu_regs(data, + ebmmu_offset, + taddr + i * int(sm_size / 4), + 0x2000 + i * int(sm_size / 4), + sm_size / 4, + 0x1, + 0x1 + ) + #print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4))) + ebmmu_offset = ebmmu_offset + 1 + + addr_off = addr_off + sm_size + taddr = addr + addr_off + for i in range(4): + setting_ebmmu_regs(data, + ebmmu_offset, + taddr + i * int(sm_size / 4), + 0x3000 + i * int(sm_size / 4), + sm_size / 4, + 0x1, + 0x1 + ) + #print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4))) + ebmmu_offset = ebmmu_offset + 1 + + addr_off = addr_off + sm_size + taddr = addr + addr_off + for i in range(4): + setting_ebmmu_regs(data, + ebmmu_offset, + taddr + i * int(sm_size / 4), + 0x4000 + i * int(sm_size / 4), + sm_size / 4, + 0x1, + 0x1 + ) + #print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4))) + ebmmu_offset = ebmmu_offset + 1 + + genPkt.addSubPkt(0x4, 0, 0x0200, 0x1, 160, data) + + data = [0,] * 2 + data[0] = (sm_size >> 0) & 0xff + data[1] = (sm_size >> 8) & 0xff + genPkt.addSubPkt(0x0, 0, 0x306, 0xe, 2, data) + + data = [0,] * 2 + data[0] = (sm_size >> 0) & 0xff + data[1] = (sm_size >> 8) & 0xff + genPkt.addSubPkt(0x0, 0, 0x30e, 0xe, 2, data) + + data = [0,] * 2 + data[0] = (sm_size >> 0) & 0xff + data[1] = (sm_size >> 8) & 0xff + genPkt.addSubPkt(0x0, 0, 0x316, 0xe, 2, data) + + + data = [0,] * 2 + data[0] = (sm_size >> 0) & 0xff + data[1] = (sm_size >> 8) & 0xff + genPkt.addSubPkt(0x0, 0, 0x31e, 0xe, 2, data) + + genPkt.addBeforeExc(genTcStartFrameCode(gen_file_def, tc_des)) + + 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) + +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) + ) + + genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1) + + #>>>>>>用EB-MMU方式读取EB-MMU设置, 15 + genPkt.clean() + genPkt.setPktType(0) + + #subPkt参数:索引、索引类型、地址、命令、长度、数据 + data = [(i & 0xff) for i in range(sm_size * 16)] + + gen_file_def_ap = gen_file_def + "_rw" + sm_idx = 0 + + genPkt.addSubPkt(0x1000, 2, 0, 0x0, sm_size * 16, data) + + genPkt.addBeforeExc(genSlvSMWriteData(1, 1, sm_size, list(range(0, sm_size))) + +genSlvSMWriteData(1, 3, sm_size, list(range(0, sm_size * 2, 2))) + +genSlvSMWriteData(1, 5, sm_size, list(range(0, sm_size * 3, 3))) + +genSlvSMWriteData(1, 7, sm_size, list(range(0, sm_size * 4, 4))) + +genSlvSMWriteData(2, 1, sm_size, list(range(0, sm_size * 5, 5))) + +genSlvSMWriteData(2, 3, sm_size, list(range(0, sm_size * 6, 6))) + +genSlvSMWriteData(2, 5, sm_size, list(range(0, sm_size * 7, 7))) + +genSlvSMWriteData(2, 7, sm_size, list(range(0, sm_size * 8, 8))) + +genSlvSMWriteData(3, 1, sm_size, list(range(0, sm_size * 9, 9))) + +genSlvSMWriteData(3, 3, sm_size, list(range(0, sm_size * 8, 8))) + +genSlvSMWriteData(3, 5, sm_size, list(range(0, sm_size * 7, 7))) + +genSlvSMWriteData(3, 7, sm_size, list(range(0, sm_size * 6, 6))) + +genSlvSMWriteData(4, 1, sm_size, list(range(0, sm_size * 5, 5))) + +genSlvSMWriteData(4, 3, sm_size, list(range(0, sm_size * 4, 4))) + +genSlvSMWriteData(4, 5, sm_size, list(range(0, sm_size * 3, 3))) + +genSlvSMWriteData(4, 7, sm_size, list(range(0, sm_size * 2, 2))) + ) + + 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) + + +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) + + +genTcEndFrameCode(gen_file_def) + ) + + genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1, True, gen_file_def_ap) + return gen_file_def + + +def tc18(): + genPkt = GenPkt() + + gen_file_def = "ebmmu_tc18" + sm_idx = 0 + tc_des = "测试17个ebmmu全配置下运行,每4个ebmmu对应一个SM,映射4个字节。分别映射SM1/3/4/6, \\n" \ + + "每个映射了16个字节。中间无字节空洞。使用1个子包,将数据读写上来。每个ebmmu必须对齐、足长的写入,\\n" \ + + "对应的sm才能正常工作。这里注意,子包是读写的,但是ebmmu是有权限的,通过权限合理的分配,实现一个子包既读又写。" + + #-------------------------------------------------------------------------- + #>>>>>>设置EB-MMU,测试用例15,读,检查权限 + genPkt.clean() + genPkt.setPktType(0) + + addr = 0x10000000 + addr_off = 0x0 + sm_size = 16 + + #subPkt参数:索引、索引类型、地址、命令、长度、数据 + data = [0,] * 256 + + taddr = addr + addr_off + ebmmu_offset = 0 + for i in range(4): + setting_ebmmu_regs(data, + ebmmu_offset, + taddr + i * int(sm_size / 4), + 0x1000 + i * int(sm_size / 4), + sm_size / 4, + 0x1, + 0x1 + ) + #print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4))) + ebmmu_offset = ebmmu_offset + 1 + + addr_off = addr_off + sm_size + taddr = addr + addr_off + for i in range(4): + setting_ebmmu_regs(data, + ebmmu_offset, + taddr + i * int(sm_size / 4), + 0x2000 + i * int(sm_size / 4), + sm_size / 4, + 0x1, + 0x1 + ) + #print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4))) + ebmmu_offset = ebmmu_offset + 1 + + addr_off = addr_off + sm_size + taddr = addr + addr_off + for i in range(4): + setting_ebmmu_regs(data, + ebmmu_offset, + taddr + i * int(sm_size / 4), + 0x2800 + i * int(sm_size / 4), + sm_size / 4, + 0x2, + 0x1 + ) + #print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4))) + ebmmu_offset = ebmmu_offset + 1 + + addr_off = addr_off + sm_size + taddr = addr + addr_off + for i in range(4): + setting_ebmmu_regs(data, + ebmmu_offset, + taddr + i * int(sm_size / 4), + 0x3800 + i * int(sm_size / 4), + sm_size / 4, + 0x2, + 0x1 + ) + #print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4))) + ebmmu_offset = ebmmu_offset + 1 + + genPkt.addSubPkt(0x1, 0, 0x0200, 0x1, 160, data) + + #subPkt参数:索引、索引类型、地址、命令、长度、数据 + data = [0,] * 256 + + addr_off = addr_off + sm_size + taddr = addr + addr_off + ebmmu_offset = 0 + for i in range(4): + setting_ebmmu_regs(data, + ebmmu_offset, + taddr + i * int(sm_size / 4), + 0x1000 + i * int(sm_size / 4), + sm_size / 4, + 0x1, + 0x1 + ) + #print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4))) + ebmmu_offset = ebmmu_offset + 1 + + addr_off = addr_off + sm_size + taddr = addr + addr_off + for i in range(4): + setting_ebmmu_regs(data, + ebmmu_offset, + taddr + i * int(sm_size / 4), + 0x2000 + i * int(sm_size / 4), + sm_size / 4, + 0x1, + 0x1 + ) + #print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4))) + ebmmu_offset = ebmmu_offset + 1 + + addr_off = addr_off + sm_size + taddr = addr + addr_off + for i in range(4): + setting_ebmmu_regs(data, + ebmmu_offset, + taddr + i * int(sm_size / 4), + 0x2800 + i * int(sm_size / 4), + sm_size / 4, + 0x2, + 0x1 + ) + #print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4))) + ebmmu_offset = ebmmu_offset + 1 + + addr_off = addr_off + sm_size + taddr = addr + addr_off + for i in range(4): + setting_ebmmu_regs(data, + ebmmu_offset, + taddr + i * int(sm_size / 4), + 0x3800 + i * int(sm_size / 4), + sm_size / 4, + 0x2, + 0x1 + ) + #print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4))) + ebmmu_offset = ebmmu_offset + 1 + + genPkt.addSubPkt(0x2, 0, 0x0200, 0x1, 160, data) + + + #subPkt参数:索引、索引类型、地址、命令、长度、数据 + data = [0,] * 256 + + addr_off = addr_off + sm_size + taddr = addr + addr_off + ebmmu_offset = 0 + for i in range(4): + setting_ebmmu_regs(data, + ebmmu_offset, + taddr + i * int(sm_size / 4), + 0x1000 + i * int(sm_size / 4), + sm_size / 4, + 0x1, + 0x1 + ) + #print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4))) + ebmmu_offset = ebmmu_offset + 1 + + addr_off = addr_off + sm_size + taddr = addr + addr_off + for i in range(4): + setting_ebmmu_regs(data, + ebmmu_offset, + taddr + i * int(sm_size / 4), + 0x2000 + i * int(sm_size / 4), + sm_size / 4, + 0x1, + 0x1 + ) + #print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4))) + ebmmu_offset = ebmmu_offset + 1 + + addr_off = addr_off + sm_size + taddr = addr + addr_off + for i in range(4): + setting_ebmmu_regs(data, + ebmmu_offset, + taddr + i * int(sm_size / 4), + 0x2800 + i * int(sm_size / 4), + sm_size / 4, + 0x2, + 0x1 + ) + #print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4))) + ebmmu_offset = ebmmu_offset + 1 + + addr_off = addr_off + sm_size + taddr = addr + addr_off + for i in range(4): + setting_ebmmu_regs(data, + ebmmu_offset, + taddr + i * int(sm_size / 4), + 0x3800 + i * int(sm_size / 4), + sm_size / 4, + 0x2, + 0x1 + ) + #print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4))) + ebmmu_offset = ebmmu_offset + 1 + + genPkt.addSubPkt(0x3, 0, 0x0200, 0x1, 160, data) + + + #subPkt参数:索引、索引类型、地址、命令、长度、数据 + data = [0,] * 256 + + addr_off = addr_off + sm_size + taddr = addr + addr_off + ebmmu_offset = 0 + for i in range(4): + setting_ebmmu_regs(data, + ebmmu_offset, + taddr + i * int(sm_size / 4), + 0x1000 + i * int(sm_size / 4), + sm_size / 4, + 0x1, + 0x1 + ) + #print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4))) + ebmmu_offset = ebmmu_offset + 1 + + addr_off = addr_off + sm_size + taddr = addr + addr_off + for i in range(4): + setting_ebmmu_regs(data, + ebmmu_offset, + taddr + i * int(sm_size / 4), + 0x2000 + i * int(sm_size / 4), + sm_size / 4, + 0x1, + 0x1 + ) + #print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4))) + ebmmu_offset = ebmmu_offset + 1 + + addr_off = addr_off + sm_size + taddr = addr + addr_off + for i in range(4): + setting_ebmmu_regs(data, + ebmmu_offset, + taddr + i * int(sm_size / 4), + 0x2800 + i * int(sm_size / 4), + sm_size / 4, + 0x2, + 0x1 + ) + #print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4))) + ebmmu_offset = ebmmu_offset + 1 + + addr_off = addr_off + sm_size + taddr = addr + addr_off + for i in range(4): + setting_ebmmu_regs(data, + ebmmu_offset, + taddr + i * int(sm_size / 4), + 0x3800 + i * int(sm_size / 4), + sm_size / 4, + 0x2, + 0x1 + ) + #print(ebmmu_offset, hex(taddr + i * int(sm_size / 4)), hex(0x0800 + i * int(sm_size / 4))) + ebmmu_offset = ebmmu_offset + 1 + + genPkt.addSubPkt(0x4, 0, 0x0200, 0x1, 160, data) + + data = [0,] * 2 + data[0] = (sm_size >> 0) & 0xff + data[1] = (sm_size >> 8) & 0xff + genPkt.addSubPkt(0x0, 0, 0x306, 0xe, 2, data) + + data = [0,] * 2 + data[0] = (sm_size >> 0) & 0xff + data[1] = (sm_size >> 8) & 0xff + genPkt.addSubPkt(0x0, 0, 0x30e, 0xe, 2, data) + + data = [0,] * 2 + data[0] = (sm_size >> 0) & 0xff + data[1] = (sm_size >> 8) & 0xff + genPkt.addSubPkt(0x0, 0, 0x312, 0xe, 2, data) + + + data = [0,] * 2 + data[0] = (sm_size >> 0) & 0xff + data[1] = (sm_size >> 8) & 0xff + genPkt.addSubPkt(0x0, 0, 0x31a, 0xe, 2, data) + + genPkt.addBeforeExc(genTcStartFrameCode(gen_file_def, tc_des)) + + 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) + +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) + ) + + genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1) + + #>>>>>>用EB-MMU方式读取EB-MMU设置, 15 + genPkt.clean() + genPkt.setPktType(0) + + #subPkt参数:索引、索引类型、地址、命令、长度、数据 + data = [(i & 0xff) for i in range(sm_size * 16)] + + gen_file_def_ap = gen_file_def + "_rw" + sm_idx = 0 + + genPkt.addSubPkt(0x1000, 2, 0, 0x2, sm_size * 16, data) + + genPkt.addBeforeExc(genSlvSMWriteData(1, 1, sm_size, list(range(0, sm_size))) + +genSlvSMWriteData(1, 3, sm_size, list(range(0, sm_size * 2, 2))) + #+genSlvSMWriteData(1, 5, sm_size, list(range(0, sm_size * 3, 3))) + #+genSlvSMWriteData(1, 7, sm_size, list(range(0, sm_size * 4, 4))) + +genSlvSMWriteData(2, 1, sm_size, list(range(0, sm_size * 5, 5))) + +genSlvSMWriteData(2, 3, sm_size, list(range(0, sm_size * 6, 6))) + #+genSlvSMWriteData(2, 5, sm_size, list(range(0, sm_size * 7, 7))) + #+genSlvSMWriteData(2, 7, sm_size, list(range(0, sm_size * 8, 8))) + +genSlvSMWriteData(3, 1, sm_size, list(range(0, sm_size * 9, 9))) + +genSlvSMWriteData(3, 3, sm_size, list(range(0, sm_size * 8, 8))) + #+genSlvSMWriteData(3, 5, sm_size, list(range(0, sm_size * 7, 7))) + #+genSlvSMWriteData(3, 7, sm_size, list(range(0, sm_size * 6, 6))) + +genSlvSMWriteData(4, 1, sm_size, list(range(0, sm_size * 5, 5))) + +genSlvSMWriteData(4, 3, sm_size, list(range(0, sm_size * 4, 4))) + #+genSlvSMWriteData(4, 5, sm_size, list(range(0, sm_size * 3, 3))) + #+genSlvSMWriteData(4, 7, sm_size, list(range(0, sm_size * 2, 2))) + ) + + 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) + + +genSlvSMReadData(1, 4, sm_size) + +genSlvSMReadData(1, 6, sm_size) + +genSlvSMReadData(2, 4, sm_size) + +genSlvSMReadData(2, 6, sm_size) + +genSlvSMReadData(3, 4, sm_size) + +genSlvSMReadData(3, 6, sm_size) + +genSlvSMReadData(4, 4, sm_size) + +genSlvSMReadData(4, 6, sm_size) + + +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) + + +genTcEndFrameCode(gen_file_def) + ) + + genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1, True, gen_file_def_ap) + return gen_file_def +