优化信号线命名negedge_sck
This commit is contained in:
@@ -1,10 +1,10 @@
|
||||
# testcase/__init__.py
|
||||
from .rwregs import *
|
||||
from .ebmmu import *
|
||||
from .errorPkt import *
|
||||
from .watchdog import *
|
||||
from .broadcast import *
|
||||
from .sync import *
|
||||
from .environment import *
|
||||
from .mac import *
|
||||
from .manydev import *
|
||||
# testcase/__init__.py
|
||||
from .rwregs import *
|
||||
from .ebmmu import *
|
||||
from .errorPkt import *
|
||||
from .watchdog import *
|
||||
from .broadcast import *
|
||||
from .sync import *
|
||||
from .environment import *
|
||||
from .mac import *
|
||||
from .manydev import *
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,196 +1,196 @@
|
||||
from pyutils import *
|
||||
|
||||
|
||||
def tc1():
|
||||
genPkt = GenPkt()
|
||||
|
||||
|
||||
gen_file_def = "broadcast_tc01"
|
||||
sm_idx = 0
|
||||
tc_des = "发送广播数据包,广播读取,广播读回的数据是四个从站对应寄存器位与的结果。"
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#>>>>>>广播读
|
||||
genPkt.clean()
|
||||
genPkt.setPktType(0)
|
||||
|
||||
#subPkt参数:索引、索引类型、地址、命令、长度、数据
|
||||
genPkt.addSubPkt(0x0, 0, 0xc0, 0xd, 4, b"\0"*4)
|
||||
genPkt.addSubPkt(0x1, 0, 0xc0, 0x0, 4, b"\0"*4)
|
||||
genPkt.addSubPkt(0x2, 0, 0xc0, 0x0, 4, b"\0"*4)
|
||||
genPkt.addSubPkt(0x3, 0, 0xc0, 0x0, 4, b"\0"*4)
|
||||
genPkt.addSubPkt(0x4, 0, 0xc0, 0x0, 4, b"\0"*4)
|
||||
genPkt.addSubPkt(0x100, 0, 0xc0, 0xd, 4, b"\0"*4)
|
||||
genPkt.addSubPkt(0x100, 0, 0xc0, 0xd, 4, b"\0"*4)
|
||||
genPkt.addSubPkt(0x100, 0, 0xc0, 0xd, 4, b"\0"*4)
|
||||
genPkt.addSubPkt(0x100, 0, 0xc0, 0xd, 4, b"\0"*4)
|
||||
|
||||
|
||||
#gen_file_def = "bc_r_pkt"
|
||||
sm_idx = 0
|
||||
|
||||
genPkt.addBeforeExc(genTcStartFrameCode(gen_file_def, tc_des)
|
||||
+genMessageCode("--清除中断")
|
||||
+genIFRwDataCode(0, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
)
|
||||
|
||||
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)
|
||||
|
||||
+genTcEndFrameCode(gen_file_def))
|
||||
|
||||
genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1)
|
||||
return gen_file_def
|
||||
|
||||
|
||||
|
||||
def tc2():
|
||||
genPkt = GenPkt()
|
||||
|
||||
gen_file_def = "broadcast_tc02"
|
||||
sm_idx = 0
|
||||
tc_des = "广播写入,写入SM0,32个字符长度的数据。"
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#>>>>>>广播写
|
||||
genPkt.clean()
|
||||
genPkt.setPktType(0)
|
||||
|
||||
sm_size = 32
|
||||
#subPkt参数:索引、索引类型、地址、命令、长度、数据
|
||||
data = [0, ] * 2
|
||||
data[0] = sm_size & 0xff
|
||||
data[1] = (sm_size >> 8) & 0xff
|
||||
genPkt.addSubPkt(2000, 0, 0x0302, 0xe, 2, data)
|
||||
|
||||
data = list(range(1, sm_size + 1))
|
||||
genPkt.addSubPkt(2000, 0, 0x0800, 0xe, sm_size, data)
|
||||
|
||||
sm_idx = 0
|
||||
|
||||
genPkt.addBeforeExc(genTcStartFrameCode(gen_file_def, tc_des)
|
||||
+genMessageCode("--清除中断")
|
||||
+genIFRwDataCode(0, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
)
|
||||
|
||||
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)
|
||||
|
||||
+genMessageCode("--读取SM的状态")
|
||||
+genIFRwDataCode(1, 0x300, False, 0x4)
|
||||
+genIFRwDataCode(2, 0x300, False, 0x4)
|
||||
+genIFRwDataCode(3, 0x300, False, 0x4)
|
||||
+genIFRwDataCode(4, 0x300, False, 0x4)
|
||||
|
||||
+genSlvSMReadData(1, 0, sm_size)
|
||||
+genSlvSMReadData(2, 0, sm_size)
|
||||
+genSlvSMReadData(3, 0, sm_size)
|
||||
+genSlvSMReadData(4, 0, sm_size)
|
||||
|
||||
+genTcEndFrameCode(gen_file_def))
|
||||
|
||||
genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1)
|
||||
return gen_file_def
|
||||
|
||||
|
||||
def tc3():
|
||||
genPkt = GenPkt()
|
||||
|
||||
|
||||
gen_file_def = "broadcast_tc03"
|
||||
sm_idx = 0
|
||||
tc_des = "广播读写,读写0xc0开始的链路寄存器组。所有从站设备采用位与策略往报文中输入。"
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#>>>>>>广播读写
|
||||
genPkt.clean()
|
||||
genPkt.setPktType(0)
|
||||
|
||||
#subPkt参数:索引、索引类型、地址、命令、长度、数据
|
||||
data = bytearray(b"\0"*100)
|
||||
genPkt.addSubPkt(1024, 0, 0x00c0, 0xf, 4, data)
|
||||
|
||||
sm_idx = 0
|
||||
|
||||
genPkt.addBeforeExc(genTcStartFrameCode(gen_file_def, tc_des)
|
||||
+genMessageCode("--清除中断")
|
||||
+genIFRwDataCode(0, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
)
|
||||
|
||||
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)
|
||||
|
||||
+genTcEndFrameCode(gen_file_def))
|
||||
|
||||
genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1)
|
||||
return gen_file_def
|
||||
|
||||
from pyutils import *
|
||||
|
||||
|
||||
def tc1():
|
||||
genPkt = GenPkt()
|
||||
|
||||
|
||||
gen_file_def = "broadcast_tc01"
|
||||
sm_idx = 0
|
||||
tc_des = "发送广播数据包,广播读取,广播读回的数据是四个从站对应寄存器位与的结果。"
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#>>>>>>广播读
|
||||
genPkt.clean()
|
||||
genPkt.setPktType(0)
|
||||
|
||||
#subPkt参数:索引、索引类型、地址、命令、长度、数据
|
||||
genPkt.addSubPkt(0x0, 0, 0xc0, 0xd, 4, b"\0"*4)
|
||||
genPkt.addSubPkt(0x1, 0, 0xc0, 0x0, 4, b"\0"*4)
|
||||
genPkt.addSubPkt(0x2, 0, 0xc0, 0x0, 4, b"\0"*4)
|
||||
genPkt.addSubPkt(0x3, 0, 0xc0, 0x0, 4, b"\0"*4)
|
||||
genPkt.addSubPkt(0x4, 0, 0xc0, 0x0, 4, b"\0"*4)
|
||||
genPkt.addSubPkt(0x100, 0, 0xc0, 0xd, 4, b"\0"*4)
|
||||
genPkt.addSubPkt(0x100, 0, 0xc0, 0xd, 4, b"\0"*4)
|
||||
genPkt.addSubPkt(0x100, 0, 0xc0, 0xd, 4, b"\0"*4)
|
||||
genPkt.addSubPkt(0x100, 0, 0xc0, 0xd, 4, b"\0"*4)
|
||||
|
||||
|
||||
#gen_file_def = "bc_r_pkt"
|
||||
sm_idx = 0
|
||||
|
||||
genPkt.addBeforeExc(genTcStartFrameCode(gen_file_def, tc_des)
|
||||
+genMessageCode("--清除中断")
|
||||
+genIFRwDataCode(0, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
)
|
||||
|
||||
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)
|
||||
|
||||
+genTcEndFrameCode(gen_file_def))
|
||||
|
||||
genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1)
|
||||
return gen_file_def
|
||||
|
||||
|
||||
|
||||
def tc2():
|
||||
genPkt = GenPkt()
|
||||
|
||||
gen_file_def = "broadcast_tc02"
|
||||
sm_idx = 0
|
||||
tc_des = "广播写入,写入SM0,32个字符长度的数据。"
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#>>>>>>广播写
|
||||
genPkt.clean()
|
||||
genPkt.setPktType(0)
|
||||
|
||||
sm_size = 32
|
||||
#subPkt参数:索引、索引类型、地址、命令、长度、数据
|
||||
data = [0, ] * 2
|
||||
data[0] = sm_size & 0xff
|
||||
data[1] = (sm_size >> 8) & 0xff
|
||||
genPkt.addSubPkt(2000, 0, 0x0302, 0xe, 2, data)
|
||||
|
||||
data = list(range(1, sm_size + 1))
|
||||
genPkt.addSubPkt(2000, 0, 0x0800, 0xe, sm_size, data)
|
||||
|
||||
sm_idx = 0
|
||||
|
||||
genPkt.addBeforeExc(genTcStartFrameCode(gen_file_def, tc_des)
|
||||
+genMessageCode("--清除中断")
|
||||
+genIFRwDataCode(0, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
)
|
||||
|
||||
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)
|
||||
|
||||
+genMessageCode("--读取SM的状态")
|
||||
+genIFRwDataCode(1, 0x300, False, 0x4)
|
||||
+genIFRwDataCode(2, 0x300, False, 0x4)
|
||||
+genIFRwDataCode(3, 0x300, False, 0x4)
|
||||
+genIFRwDataCode(4, 0x300, False, 0x4)
|
||||
|
||||
+genSlvSMReadData(1, 0, sm_size)
|
||||
+genSlvSMReadData(2, 0, sm_size)
|
||||
+genSlvSMReadData(3, 0, sm_size)
|
||||
+genSlvSMReadData(4, 0, sm_size)
|
||||
|
||||
+genTcEndFrameCode(gen_file_def))
|
||||
|
||||
genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1)
|
||||
return gen_file_def
|
||||
|
||||
|
||||
def tc3():
|
||||
genPkt = GenPkt()
|
||||
|
||||
|
||||
gen_file_def = "broadcast_tc03"
|
||||
sm_idx = 0
|
||||
tc_des = "广播读写,读写0xc0开始的链路寄存器组。所有从站设备采用位与策略往报文中输入。"
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#>>>>>>广播读写
|
||||
genPkt.clean()
|
||||
genPkt.setPktType(0)
|
||||
|
||||
#subPkt参数:索引、索引类型、地址、命令、长度、数据
|
||||
data = bytearray(b"\0"*100)
|
||||
genPkt.addSubPkt(1024, 0, 0x00c0, 0xf, 4, data)
|
||||
|
||||
sm_idx = 0
|
||||
|
||||
genPkt.addBeforeExc(genTcStartFrameCode(gen_file_def, tc_des)
|
||||
+genMessageCode("--清除中断")
|
||||
+genIFRwDataCode(0, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
)
|
||||
|
||||
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)
|
||||
|
||||
+genTcEndFrameCode(gen_file_def))
|
||||
|
||||
genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1)
|
||||
return gen_file_def
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,475 +1,475 @@
|
||||
from pyutils import *
|
||||
|
||||
|
||||
global_dev_num = 4
|
||||
global_setting_dev_clk = dict()
|
||||
global_using_8b10b = False
|
||||
global_spi_type = 0
|
||||
global_cdr_type = 0
|
||||
|
||||
def bringup():
|
||||
gen_file_def = "sys_bringup"
|
||||
sm_idx = 0
|
||||
tc_des = "系统环境建立,包括:1.配置主从栈的角色;2.网络建立,嗅探、设置顺序地址、嗅探;3.配置中断。\\n" \
|
||||
+ "\\n注意:网络建立第一次嗅探包发送主要是为了建立拓扑,每个从站都知道了自己的邻居状况;发送顺序地址,\\n"\
|
||||
+ "则是让每个从站拥有合适的地址。第二次发送嗅探包非必要,主要是用于更新从站的邻居信息。"
|
||||
|
||||
genPkt = GenPkt()
|
||||
|
||||
genPkt.clean()
|
||||
|
||||
genPkt.addBeforeExc(genTcStartFrameCode(gen_file_def, tc_des)
|
||||
+genMessageCode("--设置合适的工作模式:底层编码4b5b or 8b10b/设置CDR/SPI接口")
|
||||
+using_proper_workmode(0)
|
||||
+using_proper_workmode(1)
|
||||
+using_proper_workmode(2)
|
||||
+using_proper_workmode(3)
|
||||
+using_proper_workmode(4)
|
||||
|
||||
+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])
|
||||
)
|
||||
|
||||
main_dev = [0x01, ]
|
||||
slave_dev =[0x02, ]
|
||||
genPkt.addAfterExc(genMessageCode("--设置主站,协议栈工作在主站模式")
|
||||
+genIFRwDataCode(0, 0x0, True, 1, main_dev)
|
||||
+"#5000\n"
|
||||
+genMessageCode("--设置从站,协议栈工作在从站模式")
|
||||
+genIFRwDataCode(1, 0x0, True, 1, slave_dev)
|
||||
+genIFRwDataCode(2, 0x0, True, 1, slave_dev)
|
||||
+genIFRwDataCode(3, 0x0, True, 1, slave_dev)
|
||||
+genIFRwDataCode(4, 0x0, True, 1, slave_dev)
|
||||
+genMessageCode("--读取寄存器,检查相关的配置")
|
||||
+genIFRwDataCode(0, 0x0, False, 1)
|
||||
+genIFRwDataCode(1, 0x0, False, 1)
|
||||
+genIFRwDataCode(2, 0x0, False, 1)
|
||||
+genIFRwDataCode(3, 0x0, False, 1)
|
||||
+genIFRwDataCode(4, 0x0, False, 1)
|
||||
|
||||
+genMessageCode("--使能中断")
|
||||
+genIFRwDataCode(0, 0x70, True, 4, [0x03, 0x00, 0x00, 0xf0])
|
||||
+genIFRwDataCode(1, 0x70, True, 4, [0x00, 0x00, 0x00, 0xf0])
|
||||
+genIFRwDataCode(2, 0x70, True, 4, [0x00, 0x00, 0x00, 0xf0])
|
||||
+genIFRwDataCode(3, 0x70, True, 4, [0x00, 0x00, 0x00, 0xf0])
|
||||
+genIFRwDataCode(4, 0x70, True, 4, [0x00, 0x00, 0x00, 0xf0])
|
||||
|
||||
+genMessageCode("--设置中断为脉冲模式")
|
||||
+genIFRwDataCode(0, 0x7c, True, 2, [0x10, 0x80])
|
||||
+genIFRwDataCode(1, 0x7c, True, 2, [0x10, 0x80])
|
||||
+genIFRwDataCode(2, 0x7c, True, 2, [0x10, 0x80])
|
||||
+genIFRwDataCode(3, 0x7c, True, 2, [0x10, 0x80])
|
||||
+genIFRwDataCode(4, 0x7c, True, 2, [0x10, 0x80])
|
||||
)
|
||||
|
||||
genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1)
|
||||
|
||||
|
||||
genPkt.clean()
|
||||
genPkt.setPktType(1)
|
||||
gen_file_def_ap = gen_file_def+"_step01"
|
||||
sm_idx = 0
|
||||
|
||||
genPkt.addBeforeExc(genMessageCode("--设置环境,进行第一次嗅探"))
|
||||
|
||||
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(1, 0xc0, False, 4)
|
||||
+genIFRwDataCode(2, 0xc0, False, 4)
|
||||
+genIFRwDataCode(3, 0xc0, False, 4)
|
||||
+genIFRwDataCode(4, 0xc0, False, 4)
|
||||
|
||||
+genMessageCode("--清除主中断")
|
||||
+genIFRwDataCode(0, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
)
|
||||
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 + "_step02"
|
||||
sm_idx = 0
|
||||
|
||||
data = [0x3f, 0xff]
|
||||
genPkt.addSubPkt(0x0, 0, 0x0, 0xb, 2, data)
|
||||
|
||||
genPkt.addAfterExc(genMessageCode("--设置顺序地址")
|
||||
+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)
|
||||
+genIFRwDataCode(1, 0xc0, False, 4)
|
||||
+genIFRwDataCode(2, 0xc0, False, 4)
|
||||
+genIFRwDataCode(3, 0xc0, False, 4)
|
||||
+genIFRwDataCode(4, 0xc0, False, 4)
|
||||
|
||||
+genMessageCode("--清除主中断")
|
||||
+genIFRwDataCode(0, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
)
|
||||
|
||||
genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1, True, gen_file_def_ap)
|
||||
|
||||
genPkt.clean()
|
||||
genPkt.setPktType(1)
|
||||
gen_file_def_ap = gen_file_def+"_step03"
|
||||
sm_idx = 0
|
||||
|
||||
genPkt.addBeforeExc(genMessageCode("--设置环境,进行第二次嗅探"))
|
||||
|
||||
|
||||
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(1, 0xc0, False, 4)
|
||||
+genIFRwDataCode(2, 0xc0, False, 4)
|
||||
+genIFRwDataCode(3, 0xc0, False, 4)
|
||||
+genIFRwDataCode(4, 0xc0, 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, 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, 0x400, False, 8)
|
||||
+genIFRwDataCode(1, 0x400, False, 8)
|
||||
+genIFRwDataCode(2, 0x400, False, 8)
|
||||
+genIFRwDataCode(3, 0x400, False, 8)
|
||||
+genIFRwDataCode(4, 0x400, False, 8)
|
||||
|
||||
#+genIFRwDataCode(1, 0x0044, True, 4, [0x12, 0x34, 0x56, 0x78])
|
||||
#+genIFRwDataCode(1, 0x0044, False, 4)
|
||||
|
||||
+genTcEndFrameCode(gen_file_def)
|
||||
)
|
||||
genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1, True, gen_file_def_ap)
|
||||
|
||||
|
||||
add_tc_2_runlist(gen_file_def)
|
||||
|
||||
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:
|
||||
dout_code = ""
|
||||
din_code = "1'b0"
|
||||
|
||||
clk = "multiCLK[0]"
|
||||
multiclk = "multiCLK"
|
||||
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, )
|
||||
+"\t.reset(reset | isSoftReset_reg[%d]),\n\n"%(id + 1,)
|
||||
|
||||
+"\t.io_multiCLK_0(%s[0]),\n"%(multiclk, )
|
||||
+"\t.io_multiCLK_1(%s[1]),\n"%(multiclk, )
|
||||
+"\t.io_multiCLK_2(%s[2]),\n"%(multiclk, )
|
||||
+"\t.io_multiCLK_3(%s[3]),\n"%(multiclk, )
|
||||
+"\t.io_multiCLK_4(%s[4]),\n"%(multiclk, )
|
||||
+"\t.io_multiCLK_5(%s[5]),\n"%(multiclk, )
|
||||
+"\t.io_multiCLK_6(%s[6]),\n"%(multiclk, )
|
||||
+"\t.io_multiCLK_7(%s[7]),\n"%(multiclk, )
|
||||
+"\t.io_multiCLK_8(%s[8]),\n"%(multiclk, )
|
||||
+"\t.io_multiCLK_9(%s[9]),\n"%(multiclk, )
|
||||
+"\t.io_multiCLK_10(%s[10]),\n"%(multiclk, )
|
||||
+"\t.io_multiCLK_11(%s[11]),\n"%(multiclk, )
|
||||
+"\t.io_multiCLK_12(%s[12]),\n"%(multiclk, )
|
||||
+"\t.io_multiCLK_13(%s[13]),\n"%(multiclk, )
|
||||
+"\t.io_multiCLK_14(%s[14]),\n"%(multiclk, )
|
||||
+"\t.io_multiCLK_15(%s[15]),\n\n"%(multiclk, )
|
||||
|
||||
+"\t.io_multiCLKDiv4_0(%s[0]),\n"%(multiclk, )
|
||||
+"\t.io_multiCLKDiv4_1(%s[4]),\n"%(multiclk, )
|
||||
+"\t.io_multiCLKDiv4_2(%s[8]),\n"%(multiclk, )
|
||||
+"\t.io_multiCLKDiv4_3(%s[12]),\n\n"%(multiclk, )
|
||||
|
||||
+"\t.io_dDatIn(dDat_w[%d]),\n"%(id, )
|
||||
+"\t.io_dDatOut(%s),\n"%(dout_code, )
|
||||
+"\t.io_uDatIn(%s),\n"%(din_code, )
|
||||
+"\t.io_uDatOut(uDat_w[%d]),\n\n"%(id, )
|
||||
|
||||
+"\t.io_iqspi_sck(qspi_sck),\n"
|
||||
+"\t.io_iqspi_mosi(qspi_mosi),\n"
|
||||
+"\t.io_iqspi_miso(`IQSPI_MISO(%d)),\n"%(id + 1, )
|
||||
+"\t.io_iqspi_isDirIn(),\n"
|
||||
+"\t.io_iqspi_csn(`IQSPI_CSN(%d)),\n\n"%(id + 1, )
|
||||
|
||||
+"\t.io_ospi_sck (spi_sck),\n"
|
||||
+"\t.io_ospi_mosi(spi_mosi),\n"
|
||||
+"\t.io_ospi_miso(spi_miso[%d]),\n"%(id + 1, )
|
||||
+"\t.io_ospi_csn (`ESPI_CSN(%d)),\n\n"%(id + 1, )
|
||||
|
||||
+"\t.io_oqspi_sck(qspi_sck),\n"
|
||||
+"\t.io_oqspi_mosi(qspi_mosi),\n"
|
||||
+"\t.io_oqspi_miso(`EQSPI_MISO(%d)),\n"%(id + 1, )
|
||||
+"\t.io_oqspi_isDirIn(),\n"
|
||||
+"\t.io_oqspi_csn(`EQSPI_CSN(%d)),\n\n"%(id + 1, )
|
||||
|
||||
+"\t.io_aqspi_sck(qspi_sck),\n"
|
||||
+"\t.io_aqspi_mosi(qspi_mosi),\n"
|
||||
+"\t.io_aqspi_miso(`AQSPI_MISO(%d)),\n"%(id + 1, )
|
||||
+"\t.io_aqspi_isDirIn(),\n"
|
||||
+"\t.io_aqspi_csn(`AQSPI_CSN(%d)),\n"%(id + 1, )
|
||||
|
||||
+"\t.io_isSoftReset(isSoftReset[%d]),\n"%(id + 1, )
|
||||
+"\t.io_interrupt(io_int_sig[%d]),\n"%(id + 1, )
|
||||
+"\t.io_latchPin_0(latch0),\n"
|
||||
+"\t.io_latchPin_1(latch1),\n"
|
||||
+"\t.io_hwSerial(`HW_SERIAL),\n"
|
||||
+"\t.io_uniCode(64'h0)\n"
|
||||
+"\t);\n\n\n"
|
||||
)
|
||||
return code_device
|
||||
|
||||
def __gen_slv_dev_predef(num):
|
||||
|
||||
global global_setting_dev_clk
|
||||
global global_spi_type
|
||||
|
||||
code_for_clk = ""
|
||||
for k in global_setting_dev_clk:
|
||||
code_for_clk = code_for_clk + "reg [15:0] multiCLK%d;\n"%(k, )
|
||||
|
||||
spi_type_str = "USING_IQSPI"
|
||||
if global_spi_type == 1:
|
||||
spi_type_str = "USING_OSPI"
|
||||
elif global_spi_type == 2:
|
||||
spi_type_str = "USING_OQSPI"
|
||||
elif global_spi_type == 3:
|
||||
spi_type_str = "USING_AQSPI"
|
||||
else:
|
||||
spi_type_str = "USING_IQSPI"
|
||||
|
||||
code_predef =("`define %s \n"%(spi_type_str, )
|
||||
+"`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 * 4)\n\n"
|
||||
|
||||
+"`define HW_SERIAL 48'h31303050584c //(48'h4c5850303031)\n\n"
|
||||
|
||||
+"`define IQSPI_PINS(N) (N*4+3):(N*4)\n"
|
||||
+"`define EQSPI_PINS(N) ((N + `ALL_DEV_NUM)*4+3):((N + `ALL_DEV_NUM)*4)\n"
|
||||
+"`define AQSPI_PINS(N) ((N + `ALL_DEV_NUM * 2)*4+3):((N + `ALL_DEV_NUM * 2)*4)\n\n"
|
||||
|
||||
+"`define IQSPI_MISO(N) qspi_miso[`IQSPI_PINS(N)]\n"
|
||||
+"`define EQSPI_MISO(N) qspi_miso[`EQSPI_PINS(N)]\n"
|
||||
+"`define AQSPI_MISO(N) qspi_miso[`AQSPI_PINS(N)]\n\n"
|
||||
|
||||
+"`define IQSPI_CSN_NUM(id) (id)\n"
|
||||
+"`define ESPI_CSN_NUM(id) ((id)+(`ALL_DEV_NUM))\n"
|
||||
+"`define EQSPI_CSN_NUM(id) ((id)+(`ALL_DEV_NUM)*2)\n"
|
||||
+"`define AQSPI_CSN_NUM(id) ((id)+(`ALL_DEV_NUM)*3)\n\n"
|
||||
|
||||
+"`define IQSPI_CSN(id) spi_csn[`IQSPI_CSN_NUM(id)]\n"
|
||||
+"`define ESPI_CSN(id) spi_csn[`ESPI_CSN_NUM(id)]\n"
|
||||
+"`define EQSPI_CSN(id) spi_csn[`EQSPI_CSN_NUM(id)]\n"
|
||||
+"`define AQSPI_CSN(id) spi_csn[`AQSPI_CSN_NUM(id)]\n\n"
|
||||
)
|
||||
|
||||
code_qspi_mux_init = "`define QSPI_MUX_MISO_INIT \\\n"
|
||||
code_qspi_mux_init_item = ""
|
||||
for i in range(num):
|
||||
code_qspi_mux_init_item = code_qspi_mux_init_item + "\t\t(`IQSPI_MISO(%d) & ~{4{`IQSPI_CSN(%d)}}) |\\\n"%(i, i)
|
||||
code_qspi_mux_init_item = code_qspi_mux_init_item + "\t\t(`IQSPI_MISO(%d) & ~{4{`IQSPI_CSN(%d)}}) |\\\n"%(num, num)
|
||||
|
||||
for i in range(num):
|
||||
code_qspi_mux_init_item = code_qspi_mux_init_item + "\t\t(`EQSPI_MISO(%d) & ~{4{`EQSPI_CSN(%d)}}) |\\\n"%(i, i)
|
||||
code_qspi_mux_init_item = code_qspi_mux_init_item + "\t\t(`EQSPI_MISO(%d) & ~{4{`EQSPI_CSN(%d)}}) |\\\n"%(num, num)
|
||||
|
||||
for i in range(num):
|
||||
code_qspi_mux_init_item = code_qspi_mux_init_item + "\t\t(`AQSPI_MISO(%d) & ~{4{`AQSPI_CSN(%d)}}) |\\\n"%(i, i)
|
||||
code_qspi_mux_init_item = code_qspi_mux_init_item + "\t\t(`AQSPI_MISO(%d) & ~{4{`AQSPI_CSN(%d)}})\n\n"%(num, num)
|
||||
|
||||
code_qspi_mux_init = code_qspi_mux_init + code_qspi_mux_init_item
|
||||
|
||||
|
||||
code_spi_mux_init = "`define SPI_MUX_MISO_INIT \\\n"
|
||||
code_spi_mux_init_item = ""
|
||||
for i in range(num):
|
||||
code_spi_mux_init_item = code_spi_mux_init_item + "\t\t( spi_miso[%d] & ~`ESPI_CSN(%d)) |\\\n"%(i, i)
|
||||
code_spi_mux_init_item = code_spi_mux_init_item + "\t\t( spi_miso[%d] & ~`ESPI_CSN(%d))\n\n"%(num, num)
|
||||
code_spi_mux_init = code_spi_mux_init + code_spi_mux_init_item
|
||||
|
||||
genPkt = GenPkt()
|
||||
|
||||
genPkt.clean()
|
||||
|
||||
gen_file_def = "dev_predef"
|
||||
|
||||
code = code_for_clk + code_predef + code_qspi_mux_init + code_spi_mux_init
|
||||
|
||||
genPkt.addAfterExc(code)
|
||||
|
||||
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()
|
||||
|
||||
genPkt.clean()
|
||||
|
||||
gen_file_def = "slave_dev_def"
|
||||
|
||||
code = ""
|
||||
for id in range(num - 1):
|
||||
code = code + __GenDevice(id)
|
||||
|
||||
code = code + __GenDevice(num - 1, True)
|
||||
|
||||
genPkt.addAfterExc(code)
|
||||
|
||||
genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1)
|
||||
|
||||
|
||||
def gen_slv_dev_for_clk(num):
|
||||
__gen_slv_dev_predef(num)
|
||||
|
||||
genPkt = GenPkt()
|
||||
|
||||
genPkt.clean()
|
||||
|
||||
gen_file_def = "slave_dev_def"
|
||||
|
||||
code = ""
|
||||
for id in range(num - 1):
|
||||
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 * (int(abs(v[0]))%360) / 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("")
|
||||
pass
|
||||
|
||||
def set_spi_interface(spi_type):
|
||||
global global_spi_type
|
||||
global_spi_type = spi_type
|
||||
|
||||
def set_using_8b10b(isUsing8b10b):
|
||||
global global_using_8b10b
|
||||
global_using_8b10b = isUsing8b10b
|
||||
|
||||
def set_cdr_type(cdr_type):
|
||||
global global_cdr_type
|
||||
global_cdr_type = cdr_type
|
||||
|
||||
def using_proper_workmode(dev, iface=1):
|
||||
global global_using_8b10b
|
||||
global global_spi_type
|
||||
global global_cdr_type
|
||||
|
||||
trans_code = 0x0
|
||||
|
||||
if global_using_8b10b:
|
||||
trans_code = 0x1
|
||||
|
||||
return genIFRwDataCode(dev, 0x09, True, 1, [global_spi_type, ], wlog=False, iface=iface)\
|
||||
+genIFRwDataCode(dev, 0x004c, True, 2, [trans_code, 0x59], wlog = False)\
|
||||
+genIFRwDataCode(dev, 0x004e, True, 2, [global_cdr_type, 0x60], wlog = False)
|
||||
from pyutils import *
|
||||
|
||||
|
||||
global_dev_num = 4
|
||||
global_setting_dev_clk = dict()
|
||||
global_using_8b10b = False
|
||||
global_spi_type = 0
|
||||
global_cdr_type = 0
|
||||
|
||||
def bringup():
|
||||
gen_file_def = "sys_bringup"
|
||||
sm_idx = 0
|
||||
tc_des = "系统环境建立,包括:1.配置主从栈的角色;2.网络建立,嗅探、设置顺序地址、嗅探;3.配置中断。\\n" \
|
||||
+ "\\n注意:网络建立第一次嗅探包发送主要是为了建立拓扑,每个从站都知道了自己的邻居状况;发送顺序地址,\\n"\
|
||||
+ "则是让每个从站拥有合适的地址。第二次发送嗅探包非必要,主要是用于更新从站的邻居信息。"
|
||||
|
||||
genPkt = GenPkt()
|
||||
|
||||
genPkt.clean()
|
||||
|
||||
genPkt.addBeforeExc(genTcStartFrameCode(gen_file_def, tc_des)
|
||||
+genMessageCode("--设置合适的工作模式:底层编码4b5b or 8b10b/设置CDR/SPI接口")
|
||||
+using_proper_workmode(0)
|
||||
+using_proper_workmode(1)
|
||||
+using_proper_workmode(2)
|
||||
+using_proper_workmode(3)
|
||||
+using_proper_workmode(4)
|
||||
|
||||
+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])
|
||||
)
|
||||
|
||||
main_dev = [0x01, ]
|
||||
slave_dev =[0x02, ]
|
||||
genPkt.addAfterExc(genMessageCode("--设置主站,协议栈工作在主站模式")
|
||||
+genIFRwDataCode(0, 0x0, True, 1, main_dev)
|
||||
+"#5000\n"
|
||||
+genMessageCode("--设置从站,协议栈工作在从站模式")
|
||||
+genIFRwDataCode(1, 0x0, True, 1, slave_dev)
|
||||
+genIFRwDataCode(2, 0x0, True, 1, slave_dev)
|
||||
+genIFRwDataCode(3, 0x0, True, 1, slave_dev)
|
||||
+genIFRwDataCode(4, 0x0, True, 1, slave_dev)
|
||||
+genMessageCode("--读取寄存器,检查相关的配置")
|
||||
+genIFRwDataCode(0, 0x0, False, 1)
|
||||
+genIFRwDataCode(1, 0x0, False, 1)
|
||||
+genIFRwDataCode(2, 0x0, False, 1)
|
||||
+genIFRwDataCode(3, 0x0, False, 1)
|
||||
+genIFRwDataCode(4, 0x0, False, 1)
|
||||
|
||||
+genMessageCode("--使能中断")
|
||||
+genIFRwDataCode(0, 0x70, True, 4, [0x03, 0x00, 0x00, 0xf0])
|
||||
+genIFRwDataCode(1, 0x70, True, 4, [0x00, 0x00, 0x00, 0xf0])
|
||||
+genIFRwDataCode(2, 0x70, True, 4, [0x00, 0x00, 0x00, 0xf0])
|
||||
+genIFRwDataCode(3, 0x70, True, 4, [0x00, 0x00, 0x00, 0xf0])
|
||||
+genIFRwDataCode(4, 0x70, True, 4, [0x00, 0x00, 0x00, 0xf0])
|
||||
|
||||
+genMessageCode("--设置中断为脉冲模式")
|
||||
+genIFRwDataCode(0, 0x7c, True, 2, [0x10, 0x80])
|
||||
+genIFRwDataCode(1, 0x7c, True, 2, [0x10, 0x80])
|
||||
+genIFRwDataCode(2, 0x7c, True, 2, [0x10, 0x80])
|
||||
+genIFRwDataCode(3, 0x7c, True, 2, [0x10, 0x80])
|
||||
+genIFRwDataCode(4, 0x7c, True, 2, [0x10, 0x80])
|
||||
)
|
||||
|
||||
genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1)
|
||||
|
||||
|
||||
genPkt.clean()
|
||||
genPkt.setPktType(1)
|
||||
gen_file_def_ap = gen_file_def+"_step01"
|
||||
sm_idx = 0
|
||||
|
||||
genPkt.addBeforeExc(genMessageCode("--设置环境,进行第一次嗅探"))
|
||||
|
||||
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(1, 0xc0, False, 4)
|
||||
+genIFRwDataCode(2, 0xc0, False, 4)
|
||||
+genIFRwDataCode(3, 0xc0, False, 4)
|
||||
+genIFRwDataCode(4, 0xc0, False, 4)
|
||||
|
||||
+genMessageCode("--清除主中断")
|
||||
+genIFRwDataCode(0, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
)
|
||||
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 + "_step02"
|
||||
sm_idx = 0
|
||||
|
||||
data = [0x3f, 0xff]
|
||||
genPkt.addSubPkt(0x0, 0, 0x0, 0xb, 2, data)
|
||||
|
||||
genPkt.addAfterExc(genMessageCode("--设置顺序地址")
|
||||
+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)
|
||||
+genIFRwDataCode(1, 0xc0, False, 4)
|
||||
+genIFRwDataCode(2, 0xc0, False, 4)
|
||||
+genIFRwDataCode(3, 0xc0, False, 4)
|
||||
+genIFRwDataCode(4, 0xc0, False, 4)
|
||||
|
||||
+genMessageCode("--清除主中断")
|
||||
+genIFRwDataCode(0, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
)
|
||||
|
||||
genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1, True, gen_file_def_ap)
|
||||
|
||||
genPkt.clean()
|
||||
genPkt.setPktType(1)
|
||||
gen_file_def_ap = gen_file_def+"_step03"
|
||||
sm_idx = 0
|
||||
|
||||
genPkt.addBeforeExc(genMessageCode("--设置环境,进行第二次嗅探"))
|
||||
|
||||
|
||||
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(1, 0xc0, False, 4)
|
||||
+genIFRwDataCode(2, 0xc0, False, 4)
|
||||
+genIFRwDataCode(3, 0xc0, False, 4)
|
||||
+genIFRwDataCode(4, 0xc0, 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, 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, 0x400, False, 8)
|
||||
+genIFRwDataCode(1, 0x400, False, 8)
|
||||
+genIFRwDataCode(2, 0x400, False, 8)
|
||||
+genIFRwDataCode(3, 0x400, False, 8)
|
||||
+genIFRwDataCode(4, 0x400, False, 8)
|
||||
|
||||
#+genIFRwDataCode(1, 0x0044, True, 4, [0x12, 0x34, 0x56, 0x78])
|
||||
#+genIFRwDataCode(1, 0x0044, False, 4)
|
||||
|
||||
+genTcEndFrameCode(gen_file_def)
|
||||
)
|
||||
genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1, True, gen_file_def_ap)
|
||||
|
||||
|
||||
add_tc_2_runlist(gen_file_def)
|
||||
|
||||
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:
|
||||
dout_code = ""
|
||||
din_code = "1'b0"
|
||||
|
||||
clk = "multiCLK[0]"
|
||||
multiclk = "multiCLK"
|
||||
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, )
|
||||
+"\t.reset(reset | isSoftReset_reg[%d]),\n\n"%(id + 1,)
|
||||
|
||||
+"\t.io_multiCLK_0(%s[0]),\n"%(multiclk, )
|
||||
+"\t.io_multiCLK_1(%s[1]),\n"%(multiclk, )
|
||||
+"\t.io_multiCLK_2(%s[2]),\n"%(multiclk, )
|
||||
+"\t.io_multiCLK_3(%s[3]),\n"%(multiclk, )
|
||||
+"\t.io_multiCLK_4(%s[4]),\n"%(multiclk, )
|
||||
+"\t.io_multiCLK_5(%s[5]),\n"%(multiclk, )
|
||||
+"\t.io_multiCLK_6(%s[6]),\n"%(multiclk, )
|
||||
+"\t.io_multiCLK_7(%s[7]),\n"%(multiclk, )
|
||||
+"\t.io_multiCLK_8(%s[8]),\n"%(multiclk, )
|
||||
+"\t.io_multiCLK_9(%s[9]),\n"%(multiclk, )
|
||||
+"\t.io_multiCLK_10(%s[10]),\n"%(multiclk, )
|
||||
+"\t.io_multiCLK_11(%s[11]),\n"%(multiclk, )
|
||||
+"\t.io_multiCLK_12(%s[12]),\n"%(multiclk, )
|
||||
+"\t.io_multiCLK_13(%s[13]),\n"%(multiclk, )
|
||||
+"\t.io_multiCLK_14(%s[14]),\n"%(multiclk, )
|
||||
+"\t.io_multiCLK_15(%s[15]),\n\n"%(multiclk, )
|
||||
|
||||
+"\t.io_multiCLKDiv4_0(%s[0]),\n"%(multiclk, )
|
||||
+"\t.io_multiCLKDiv4_1(%s[4]),\n"%(multiclk, )
|
||||
+"\t.io_multiCLKDiv4_2(%s[8]),\n"%(multiclk, )
|
||||
+"\t.io_multiCLKDiv4_3(%s[12]),\n\n"%(multiclk, )
|
||||
|
||||
+"\t.io_dDatIn(dDat_w[%d]),\n"%(id, )
|
||||
+"\t.io_dDatOut(%s),\n"%(dout_code, )
|
||||
+"\t.io_uDatIn(%s),\n"%(din_code, )
|
||||
+"\t.io_uDatOut(uDat_w[%d]),\n\n"%(id, )
|
||||
|
||||
+"\t.io_iqspi_sck(qspi_sck),\n"
|
||||
+"\t.io_iqspi_mosi(qspi_mosi),\n"
|
||||
+"\t.io_iqspi_miso(`IQSPI_MISO(%d)),\n"%(id + 1, )
|
||||
+"\t.io_iqspi_isDirIn(),\n"
|
||||
+"\t.io_iqspi_csn(`IQSPI_CSN(%d)),\n\n"%(id + 1, )
|
||||
|
||||
+"\t.io_ospi_sck (spi_sck),\n"
|
||||
+"\t.io_ospi_mosi(spi_mosi),\n"
|
||||
+"\t.io_ospi_miso(spi_miso[%d]),\n"%(id + 1, )
|
||||
+"\t.io_ospi_csn (`ESPI_CSN(%d)),\n\n"%(id + 1, )
|
||||
|
||||
+"\t.io_oqspi_sck(qspi_sck),\n"
|
||||
+"\t.io_oqspi_mosi(qspi_mosi),\n"
|
||||
+"\t.io_oqspi_miso(`EQSPI_MISO(%d)),\n"%(id + 1, )
|
||||
+"\t.io_oqspi_isDirIn(),\n"
|
||||
+"\t.io_oqspi_csn(`EQSPI_CSN(%d)),\n\n"%(id + 1, )
|
||||
|
||||
+"\t.io_aqspi_sck(qspi_sck),\n"
|
||||
+"\t.io_aqspi_mosi(qspi_mosi),\n"
|
||||
+"\t.io_aqspi_miso(`AQSPI_MISO(%d)),\n"%(id + 1, )
|
||||
+"\t.io_aqspi_isDirIn(),\n"
|
||||
+"\t.io_aqspi_csn(`AQSPI_CSN(%d)),\n"%(id + 1, )
|
||||
|
||||
+"\t.io_isSoftReset(isSoftReset[%d]),\n"%(id + 1, )
|
||||
+"\t.io_interrupt(io_int_sig[%d]),\n"%(id + 1, )
|
||||
+"\t.io_latchPin_0(latch0),\n"
|
||||
+"\t.io_latchPin_1(latch1),\n"
|
||||
+"\t.io_hwSerial(`HW_SERIAL),\n"
|
||||
+"\t.io_uniCode(64'h0)\n"
|
||||
+"\t);\n\n\n"
|
||||
)
|
||||
return code_device
|
||||
|
||||
def __gen_slv_dev_predef(num):
|
||||
|
||||
global global_setting_dev_clk
|
||||
global global_spi_type
|
||||
|
||||
code_for_clk = ""
|
||||
for k in global_setting_dev_clk:
|
||||
code_for_clk = code_for_clk + "reg [15:0] multiCLK%d;\n"%(k, )
|
||||
|
||||
spi_type_str = "USING_IQSPI"
|
||||
if global_spi_type == 1:
|
||||
spi_type_str = "USING_OSPI"
|
||||
elif global_spi_type == 2:
|
||||
spi_type_str = "USING_OQSPI"
|
||||
elif global_spi_type == 3:
|
||||
spi_type_str = "USING_AQSPI"
|
||||
else:
|
||||
spi_type_str = "USING_IQSPI"
|
||||
|
||||
code_predef =("`define %s \n"%(spi_type_str, )
|
||||
+"`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 * 4)\n\n"
|
||||
|
||||
+"`define HW_SERIAL 48'h31303050584c //(48'h4c5850303031)\n\n"
|
||||
|
||||
+"`define IQSPI_PINS(N) (N*4+3):(N*4)\n"
|
||||
+"`define EQSPI_PINS(N) ((N + `ALL_DEV_NUM)*4+3):((N + `ALL_DEV_NUM)*4)\n"
|
||||
+"`define AQSPI_PINS(N) ((N + `ALL_DEV_NUM * 2)*4+3):((N + `ALL_DEV_NUM * 2)*4)\n\n"
|
||||
|
||||
+"`define IQSPI_MISO(N) qspi_miso[`IQSPI_PINS(N)]\n"
|
||||
+"`define EQSPI_MISO(N) qspi_miso[`EQSPI_PINS(N)]\n"
|
||||
+"`define AQSPI_MISO(N) qspi_miso[`AQSPI_PINS(N)]\n\n"
|
||||
|
||||
+"`define IQSPI_CSN_NUM(id) (id)\n"
|
||||
+"`define ESPI_CSN_NUM(id) ((id)+(`ALL_DEV_NUM))\n"
|
||||
+"`define EQSPI_CSN_NUM(id) ((id)+(`ALL_DEV_NUM)*2)\n"
|
||||
+"`define AQSPI_CSN_NUM(id) ((id)+(`ALL_DEV_NUM)*3)\n\n"
|
||||
|
||||
+"`define IQSPI_CSN(id) spi_csn[`IQSPI_CSN_NUM(id)]\n"
|
||||
+"`define ESPI_CSN(id) spi_csn[`ESPI_CSN_NUM(id)]\n"
|
||||
+"`define EQSPI_CSN(id) spi_csn[`EQSPI_CSN_NUM(id)]\n"
|
||||
+"`define AQSPI_CSN(id) spi_csn[`AQSPI_CSN_NUM(id)]\n\n"
|
||||
)
|
||||
|
||||
code_qspi_mux_init = "`define QSPI_MUX_MISO_INIT \\\n"
|
||||
code_qspi_mux_init_item = ""
|
||||
for i in range(num):
|
||||
code_qspi_mux_init_item = code_qspi_mux_init_item + "\t\t(`IQSPI_MISO(%d) & ~{4{`IQSPI_CSN(%d)}}) |\\\n"%(i, i)
|
||||
code_qspi_mux_init_item = code_qspi_mux_init_item + "\t\t(`IQSPI_MISO(%d) & ~{4{`IQSPI_CSN(%d)}}) |\\\n"%(num, num)
|
||||
|
||||
for i in range(num):
|
||||
code_qspi_mux_init_item = code_qspi_mux_init_item + "\t\t(`EQSPI_MISO(%d) & ~{4{`EQSPI_CSN(%d)}}) |\\\n"%(i, i)
|
||||
code_qspi_mux_init_item = code_qspi_mux_init_item + "\t\t(`EQSPI_MISO(%d) & ~{4{`EQSPI_CSN(%d)}}) |\\\n"%(num, num)
|
||||
|
||||
for i in range(num):
|
||||
code_qspi_mux_init_item = code_qspi_mux_init_item + "\t\t(`AQSPI_MISO(%d) & ~{4{`AQSPI_CSN(%d)}}) |\\\n"%(i, i)
|
||||
code_qspi_mux_init_item = code_qspi_mux_init_item + "\t\t(`AQSPI_MISO(%d) & ~{4{`AQSPI_CSN(%d)}})\n\n"%(num, num)
|
||||
|
||||
code_qspi_mux_init = code_qspi_mux_init + code_qspi_mux_init_item
|
||||
|
||||
|
||||
code_spi_mux_init = "`define SPI_MUX_MISO_INIT \\\n"
|
||||
code_spi_mux_init_item = ""
|
||||
for i in range(num):
|
||||
code_spi_mux_init_item = code_spi_mux_init_item + "\t\t( spi_miso[%d] & ~`ESPI_CSN(%d)) |\\\n"%(i, i)
|
||||
code_spi_mux_init_item = code_spi_mux_init_item + "\t\t( spi_miso[%d] & ~`ESPI_CSN(%d))\n\n"%(num, num)
|
||||
code_spi_mux_init = code_spi_mux_init + code_spi_mux_init_item
|
||||
|
||||
genPkt = GenPkt()
|
||||
|
||||
genPkt.clean()
|
||||
|
||||
gen_file_def = "dev_predef"
|
||||
|
||||
code = code_for_clk + code_predef + code_qspi_mux_init + code_spi_mux_init
|
||||
|
||||
genPkt.addAfterExc(code)
|
||||
|
||||
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()
|
||||
|
||||
genPkt.clean()
|
||||
|
||||
gen_file_def = "slave_dev_def"
|
||||
|
||||
code = ""
|
||||
for id in range(num - 1):
|
||||
code = code + __GenDevice(id)
|
||||
|
||||
code = code + __GenDevice(num - 1, True)
|
||||
|
||||
genPkt.addAfterExc(code)
|
||||
|
||||
genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1)
|
||||
|
||||
|
||||
def gen_slv_dev_for_clk(num):
|
||||
__gen_slv_dev_predef(num)
|
||||
|
||||
genPkt = GenPkt()
|
||||
|
||||
genPkt.clean()
|
||||
|
||||
gen_file_def = "slave_dev_def"
|
||||
|
||||
code = ""
|
||||
for id in range(num - 1):
|
||||
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 * (int(abs(v[0]))%360) / 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("")
|
||||
pass
|
||||
|
||||
def set_spi_interface(spi_type):
|
||||
global global_spi_type
|
||||
global_spi_type = spi_type
|
||||
|
||||
def set_using_8b10b(isUsing8b10b):
|
||||
global global_using_8b10b
|
||||
global_using_8b10b = isUsing8b10b
|
||||
|
||||
def set_cdr_type(cdr_type):
|
||||
global global_cdr_type
|
||||
global_cdr_type = cdr_type
|
||||
|
||||
def using_proper_workmode(dev, iface=1):
|
||||
global global_using_8b10b
|
||||
global global_spi_type
|
||||
global global_cdr_type
|
||||
|
||||
trans_code = 0x0
|
||||
|
||||
if global_using_8b10b:
|
||||
trans_code = 0x1
|
||||
|
||||
return genIFRwDataCode(dev, 0x09, True, 1, [global_spi_type, ], wlog=False, iface=iface)\
|
||||
+genIFRwDataCode(dev, 0x004c, True, 2, [trans_code, 0x59], wlog = False)\
|
||||
+genIFRwDataCode(dev, 0x004e, True, 2, [global_cdr_type, 0x60], wlog = False)
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,190 +1,190 @@
|
||||
from pyutils import *
|
||||
from .environment import *
|
||||
|
||||
def tc1():
|
||||
genPkt = GenPkt()
|
||||
|
||||
dev = get_slv_dev_num()
|
||||
print("DEV:", dev)
|
||||
|
||||
gen_file_def = "manydev_tc01"
|
||||
sm_idx = 0
|
||||
tc_des = f"{dev}个设备, 准备一下开发环境,发送一个广播包。\\n"
|
||||
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#>>>>>>普通数据包 sm1,2个读
|
||||
genPkt.clean()
|
||||
genPkt.setPktType(1)
|
||||
|
||||
set_if_code = ""
|
||||
for i in range(dev - 4):
|
||||
set_if_code = set_if_code + genIFRwDataCode(i + 5, 0x09, True, 1, [0, ], False, iface=1)
|
||||
|
||||
clear_int_code = ""
|
||||
for i in range(dev + 1):
|
||||
clear_int_code = clear_int_code + genIFRwDataCode(i, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
|
||||
|
||||
read_int_code = ""
|
||||
for i in range(dev + 1):
|
||||
read_int_code = read_int_code + genIFRwDataCode(i, 0x74, False, 4)
|
||||
|
||||
init_slave_code = ""
|
||||
for i in range(dev):
|
||||
init_slave_code = init_slave_code + genIFRwDataCode(1 + i, 0x0, True, 1, [0x2, ]) + genIFRwDataCode(1 + i, 0x7c, True, 2, [0x10, 0x80])
|
||||
|
||||
read_dev_code = ""
|
||||
for i in range(dev + 1):
|
||||
read_dev_code = read_dev_code + genIFRwDataCode(i, 0x0, False, 1)
|
||||
|
||||
|
||||
|
||||
genPkt.addBeforeExc(genTcStartFrameCode(gen_file_def, tc_des)
|
||||
+genMessageCode("--清除中断")
|
||||
+set_if_code
|
||||
+init_slave_code
|
||||
+clear_int_code
|
||||
+read_int_code
|
||||
+read_dev_code
|
||||
)
|
||||
|
||||
|
||||
|
||||
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)
|
||||
|
||||
+clear_int_code
|
||||
)
|
||||
|
||||
genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1)
|
||||
|
||||
genPkt.clean()
|
||||
genPkt.setPktType(0)
|
||||
|
||||
gen_file_def_ap = gen_file_def + "_step02"
|
||||
sm_idx = 0
|
||||
|
||||
data = [0x3f, 0xff]
|
||||
genPkt.addSubPkt(0x0, 0, 0x0, 0xb, 2, data)
|
||||
|
||||
genPkt.addAfterExc(genMessageCode("--设置顺序地址")
|
||||
+genWriteTransLenCode(gen_file_def_ap, sm_idx)
|
||||
+genWriteTransPktCode(gen_file_def_ap, sm_idx)
|
||||
+genTrgTransPktCode(gen_file_def_ap, sm_idx)
|
||||
#+ "#10000000"
|
||||
+genReadAckPktCode(gen_file_def_ap, sm_idx)
|
||||
|
||||
|
||||
+genMessageCode("--清除主中断")
|
||||
+genIFRwDataCode(0, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
)
|
||||
|
||||
genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1, True, gen_file_def_ap)
|
||||
|
||||
|
||||
genPkt.clean()
|
||||
genPkt.setPktType(1)
|
||||
gen_file_def_ap = gen_file_def+"_step03"
|
||||
sm_idx = 0
|
||||
|
||||
genPkt.addBeforeExc(genMessageCode("--设置环境,进行第二次嗅探"))
|
||||
|
||||
|
||||
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
|
||||
)
|
||||
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+"_step04"
|
||||
sm_idx = 0
|
||||
|
||||
for i in range(dev):
|
||||
genPkt.addSubPkt(i + 1, 0, 0x1000, 0x0, 2, [0, 0])
|
||||
|
||||
prepare_data_code = ""
|
||||
for i in range(dev):
|
||||
prepare_data_code = prepare_data_code + genSlvSMWriteData(i + 1, 1, 2, [i, i + 1])
|
||||
|
||||
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)
|
||||
#+ "#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)
|
||||
|
||||
from pyutils import *
|
||||
from .environment import *
|
||||
|
||||
def tc1():
|
||||
genPkt = GenPkt()
|
||||
|
||||
dev = get_slv_dev_num()
|
||||
print("DEV:", dev)
|
||||
|
||||
gen_file_def = "manydev_tc01"
|
||||
sm_idx = 0
|
||||
tc_des = f"{dev}个设备, 准备一下开发环境,发送一个广播包。\\n"
|
||||
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#>>>>>>普通数据包 sm1,2个读
|
||||
genPkt.clean()
|
||||
genPkt.setPktType(1)
|
||||
|
||||
set_if_code = ""
|
||||
for i in range(dev - 4):
|
||||
set_if_code = set_if_code + genIFRwDataCode(i + 5, 0x09, True, 1, [0, ], False, iface=1)
|
||||
|
||||
clear_int_code = ""
|
||||
for i in range(dev + 1):
|
||||
clear_int_code = clear_int_code + genIFRwDataCode(i, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
|
||||
|
||||
read_int_code = ""
|
||||
for i in range(dev + 1):
|
||||
read_int_code = read_int_code + genIFRwDataCode(i, 0x74, False, 4)
|
||||
|
||||
init_slave_code = ""
|
||||
for i in range(dev):
|
||||
init_slave_code = init_slave_code + genIFRwDataCode(1 + i, 0x0, True, 1, [0x2, ]) + genIFRwDataCode(1 + i, 0x7c, True, 2, [0x10, 0x80])
|
||||
|
||||
read_dev_code = ""
|
||||
for i in range(dev + 1):
|
||||
read_dev_code = read_dev_code + genIFRwDataCode(i, 0x0, False, 1)
|
||||
|
||||
|
||||
|
||||
genPkt.addBeforeExc(genTcStartFrameCode(gen_file_def, tc_des)
|
||||
+genMessageCode("--清除中断")
|
||||
+set_if_code
|
||||
+init_slave_code
|
||||
+clear_int_code
|
||||
+read_int_code
|
||||
+read_dev_code
|
||||
)
|
||||
|
||||
|
||||
|
||||
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)
|
||||
|
||||
+clear_int_code
|
||||
)
|
||||
|
||||
genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1)
|
||||
|
||||
genPkt.clean()
|
||||
genPkt.setPktType(0)
|
||||
|
||||
gen_file_def_ap = gen_file_def + "_step02"
|
||||
sm_idx = 0
|
||||
|
||||
data = [0x3f, 0xff]
|
||||
genPkt.addSubPkt(0x0, 0, 0x0, 0xb, 2, data)
|
||||
|
||||
genPkt.addAfterExc(genMessageCode("--设置顺序地址")
|
||||
+genWriteTransLenCode(gen_file_def_ap, sm_idx)
|
||||
+genWriteTransPktCode(gen_file_def_ap, sm_idx)
|
||||
+genTrgTransPktCode(gen_file_def_ap, sm_idx)
|
||||
#+ "#10000000"
|
||||
+genReadAckPktCode(gen_file_def_ap, sm_idx)
|
||||
|
||||
|
||||
+genMessageCode("--清除主中断")
|
||||
+genIFRwDataCode(0, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
)
|
||||
|
||||
genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1, True, gen_file_def_ap)
|
||||
|
||||
|
||||
genPkt.clean()
|
||||
genPkt.setPktType(1)
|
||||
gen_file_def_ap = gen_file_def+"_step03"
|
||||
sm_idx = 0
|
||||
|
||||
genPkt.addBeforeExc(genMessageCode("--设置环境,进行第二次嗅探"))
|
||||
|
||||
|
||||
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
|
||||
)
|
||||
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+"_step04"
|
||||
sm_idx = 0
|
||||
|
||||
for i in range(dev):
|
||||
genPkt.addSubPkt(i + 1, 0, 0x1000, 0x0, 2, [0, 0])
|
||||
|
||||
prepare_data_code = ""
|
||||
for i in range(dev):
|
||||
prepare_data_code = prepare_data_code + genSlvSMWriteData(i + 1, 1, 2, [i, i + 1])
|
||||
|
||||
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)
|
||||
#+ "#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
|
||||
@@ -1,224 +1,224 @@
|
||||
from pyutils import *
|
||||
from .environment import *
|
||||
|
||||
import time
|
||||
import random
|
||||
|
||||
def tc1():
|
||||
gen_file_def = "regtest_tc01"
|
||||
sm_idx = 0
|
||||
tc_des = "测试寄存器的读写状态,将系统改为8B10B进行通信。特别测试SPI/QSPI读写密码正确和不正确的情况下,对读写的封堵。\\n"
|
||||
|
||||
genPkt = GenPkt()
|
||||
genPkt.clean()
|
||||
|
||||
dev_num = get_slv_dev_num()
|
||||
|
||||
genPkt.addBeforeExc(genTcStartFrameCode(gen_file_def, tc_des))
|
||||
|
||||
change_8b10b_code1 = ""
|
||||
for i in range(dev_num + 1):
|
||||
change_8b10b_code1 = change_8b10b_code1 + genIFRwDataCode(i, 0x004c, True, 2, [0x0, 0x59])\
|
||||
+genIFRwDataCode(i, 0x004c, False, 2)
|
||||
|
||||
change_8b10b_code2 = ""
|
||||
for i in range(dev_num + 1):
|
||||
change_8b10b_code2 = change_8b10b_code2 + genIFRwDataCode(i, 0x004c, True, 2, [0x1, 0x59])\
|
||||
+genIFRwDataCode(i, 0x004c, False, 2)
|
||||
|
||||
invalid_change_8b10b_code1 = ""
|
||||
for i in range(dev_num + 1):
|
||||
invalid_change_8b10b_code1 = invalid_change_8b10b_code1 + genIFRwDataCode(i, 0x004c, True, 2, [0x0, 0x32])\
|
||||
+genIFRwDataCode(i, 0x004c, False, 2)
|
||||
|
||||
invalid_change_8b10b_code2 = ""
|
||||
for i in range(dev_num + 1):
|
||||
invalid_change_8b10b_code2 = invalid_change_8b10b_code2 + genIFRwDataCode(i, 0x004c, True, 2, [0x1, 0x43])\
|
||||
+genIFRwDataCode(i, 0x004c, False, 2)
|
||||
|
||||
invalid_change_8b10b_code3 = ""
|
||||
for i in range(dev_num + 1):
|
||||
invalid_change_8b10b_code3 = invalid_change_8b10b_code3 + genIFRwDataCode(i, 0x004c, True, 1, [0x0, ])\
|
||||
+genIFRwDataCode(i, 0x004c, False, 2)
|
||||
|
||||
invalid_change_8b10b_code4 = ""
|
||||
for i in range(dev_num + 1):
|
||||
invalid_change_8b10b_code4 = invalid_change_8b10b_code4 + genIFRwDataCode(i, 0x004c, True, 1, [0x1, ])\
|
||||
+genIFRwDataCode(i, 0x004c, False, 2)
|
||||
|
||||
invalid_change_8b10b_code5 = ""
|
||||
for i in range(dev_num + 1):
|
||||
invalid_change_8b10b_code5 = invalid_change_8b10b_code5 + genIFRwDataCode(i, 0x004c, True, 2, [0x30, 0x59])\
|
||||
+genIFRwDataCode(i, 0x004c, False, 2)
|
||||
|
||||
invalid_change_8b10b_code6 = ""
|
||||
for i in range(dev_num + 1):
|
||||
invalid_change_8b10b_code6 = invalid_change_8b10b_code6 + genIFRwDataCode(i, 0x004c, True, 2, [0x23, 0x59])\
|
||||
+genIFRwDataCode(i, 0x004c, False, 2)
|
||||
|
||||
default_trans_code = ""
|
||||
for i in range(dev_num + 1):
|
||||
default_trans_code = default_trans_code + using_proper_workmode(i, iface = 4)
|
||||
|
||||
genPkt.addAfterExc(genMessageCode("--正确的key")
|
||||
+change_8b10b_code1
|
||||
+genMessageCode("--错误的key")
|
||||
+invalid_change_8b10b_code4
|
||||
+genMessageCode("--错误的key")
|
||||
+invalid_change_8b10b_code1
|
||||
+genMessageCode("--错误的key")
|
||||
+invalid_change_8b10b_code2
|
||||
+genMessageCode("--正确的key")
|
||||
+change_8b10b_code2
|
||||
+genMessageCode("--错误的key")
|
||||
+invalid_change_8b10b_code3
|
||||
+genMessageCode("--错误的key")
|
||||
+invalid_change_8b10b_code1
|
||||
+genMessageCode("--错误的key")
|
||||
+invalid_change_8b10b_code2
|
||||
+genMessageCode("--正确的key_错误的数据")
|
||||
+invalid_change_8b10b_code5
|
||||
+invalid_change_8b10b_code6
|
||||
+genMessageCode("--恢复默认的配置")
|
||||
+default_trans_code
|
||||
+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 = "测试寄存器的读写状态,交换上下行管脚。特别测试SPI/QSPI读写密码正确和不正确的情况下,对读写的封堵。\\n"
|
||||
|
||||
genPkt = GenPkt()
|
||||
genPkt.clean()
|
||||
|
||||
dev_num = get_slv_dev_num()
|
||||
|
||||
genPkt.addBeforeExc(genTcStartFrameCode(gen_file_def, tc_des))
|
||||
|
||||
change_pinsw_code1 = ""
|
||||
for i in range(dev_num + 1):
|
||||
change_pinsw_code1 = change_pinsw_code1 + genIFRwDataCode(i, 0x004a, True, 2, [0x0, 0x58])\
|
||||
+genIFRwDataCode(i, 0x004a, False, 2)
|
||||
|
||||
change_pinsw_code2 = ""
|
||||
for i in range(dev_num + 1):
|
||||
change_pinsw_code2 = change_pinsw_code2 + genIFRwDataCode(i, 0x004a, True, 2, [0x1, 0x58])\
|
||||
+genIFRwDataCode(i, 0x004a, False, 2)
|
||||
|
||||
invalid_change_pinsw_code1 = ""
|
||||
for i in range(dev_num + 1):
|
||||
invalid_change_pinsw_code1 = invalid_change_pinsw_code1 + genIFRwDataCode(i, 0x004a, True, 2, [0x0, 0x32])\
|
||||
+genIFRwDataCode(i, 0x004a, False, 2)
|
||||
|
||||
invalid_change_pinsw_code2 = ""
|
||||
for i in range(dev_num + 1):
|
||||
invalid_change_pinsw_code2 = invalid_change_pinsw_code2 + genIFRwDataCode(i, 0x004a, True, 2, [0x1, 0x43])\
|
||||
+genIFRwDataCode(i, 0x004a, False, 2)
|
||||
|
||||
invalid_change_pinsw_code3 = ""
|
||||
for i in range(dev_num + 1):
|
||||
invalid_change_pinsw_code3 = invalid_change_pinsw_code3 + genIFRwDataCode(i, 0x004a, True, 1, [0x0, ])\
|
||||
+genIFRwDataCode(i, 0x004a, False, 2)
|
||||
|
||||
invalid_change_pinsw_code4 = ""
|
||||
for i in range(dev_num + 1):
|
||||
invalid_change_pinsw_code4 = invalid_change_pinsw_code4 + genIFRwDataCode(i, 0x004a, True, 1, [0x1, ])\
|
||||
+genIFRwDataCode(i, 0x004a, False, 2)
|
||||
|
||||
invalid_change_pinsw_code5 = ""
|
||||
for i in range(dev_num + 1):
|
||||
invalid_change_pinsw_code5 = invalid_change_pinsw_code5 + genIFRwDataCode(i, 0x004a, True, 2, [0x30, 0x58])\
|
||||
+genIFRwDataCode(i, 0x004a, False, 2)
|
||||
|
||||
invalid_change_pinsw_code6 = ""
|
||||
for i in range(dev_num + 1):
|
||||
invalid_change_pinsw_code6 = invalid_change_pinsw_code6 + genIFRwDataCode(i, 0x004a, True, 2, [0x23, 0x58])\
|
||||
+genIFRwDataCode(i, 0x004a, False, 2)
|
||||
|
||||
default_pinsw_code = ""
|
||||
for i in range(dev_num + 1):
|
||||
default_pinsw_code = default_pinsw_code + genIFRwDataCode(i, 0x004a, True, 2, [0, 0x58])
|
||||
|
||||
genPkt.addAfterExc(genMessageCode("--正确的key")
|
||||
+change_pinsw_code1
|
||||
+genMessageCode("--错误的key")
|
||||
+invalid_change_pinsw_code4
|
||||
+genMessageCode("--错误的key")
|
||||
+invalid_change_pinsw_code1
|
||||
+genMessageCode("--错误的key")
|
||||
+invalid_change_pinsw_code2
|
||||
+genMessageCode("--正确的key")
|
||||
+change_pinsw_code2
|
||||
+genMessageCode("--错误的key")
|
||||
+invalid_change_pinsw_code3
|
||||
+genMessageCode("--错误的key")
|
||||
+invalid_change_pinsw_code1
|
||||
+genMessageCode("--错误的key")
|
||||
+invalid_change_pinsw_code2
|
||||
+genMessageCode("--正确的key_错误的数据")
|
||||
+invalid_change_pinsw_code5
|
||||
+invalid_change_pinsw_code6
|
||||
+genMessageCode("--恢复默认的配置")
|
||||
+default_pinsw_code
|
||||
+genTcEndFrameCode(gen_file_def))
|
||||
genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1)
|
||||
return gen_file_def
|
||||
|
||||
def tc3():
|
||||
gen_file_def = "regtest_tc03"
|
||||
sm_idx = 0
|
||||
tc_des = "测试SM0~SM7的的长度寄存器的读写,要求在内部有元素的情况下,不能改写其长度。\\n"
|
||||
|
||||
genPkt = GenPkt()
|
||||
genPkt.clean()
|
||||
genPkt.setPktType(0)
|
||||
|
||||
dev_num = get_slv_dev_num()
|
||||
|
||||
chang_sm_length = ""
|
||||
for i in range(dev_num + 1):
|
||||
chang_sm_length = chang_sm_length + genIFRwDataCode(i, 0x0302, True, 2, [0x20, 0x00])
|
||||
|
||||
|
||||
|
||||
genPkt.addBeforeExc(genTcStartFrameCode(gen_file_def, tc_des)
|
||||
+chang_sm_length
|
||||
+genMessageCode("--清除主中断")
|
||||
+genIFRwDataCode(0, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
)
|
||||
|
||||
genPkt.addSubPkt(0x0, 0x0, 0x0800, 0xe, 0x20, [0, ] * 0x20)
|
||||
|
||||
chang_sm_length = ""
|
||||
for i in range(dev_num + 1):
|
||||
chang_sm_length = chang_sm_length + genIFRwDataCode(i, 0x0302, True, 2, [0x40, 0x00])
|
||||
|
||||
read_sm_status = ""
|
||||
for i in range(dev_num + 1):
|
||||
read_sm_status = read_sm_status + genIFRwDataCode(i, 0x0300, False, 4)
|
||||
|
||||
reset_sm = ""
|
||||
for i in range(dev_num + 1):
|
||||
reset_sm = reset_sm + genIFRwDataCode(i, 0x0300, True, 1, [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)
|
||||
+chang_sm_length
|
||||
+read_sm_status
|
||||
+reset_sm
|
||||
+read_sm_status
|
||||
+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])
|
||||
+genTcEndFrameCode(gen_file_def))
|
||||
genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1)
|
||||
return gen_file_def
|
||||
|
||||
from pyutils import *
|
||||
from .environment import *
|
||||
|
||||
import time
|
||||
import random
|
||||
|
||||
def tc1():
|
||||
gen_file_def = "regtest_tc01"
|
||||
sm_idx = 0
|
||||
tc_des = "测试寄存器的读写状态,将系统改为8B10B进行通信。特别测试SPI/QSPI读写密码正确和不正确的情况下,对读写的封堵。\\n"
|
||||
|
||||
genPkt = GenPkt()
|
||||
genPkt.clean()
|
||||
|
||||
dev_num = get_slv_dev_num()
|
||||
|
||||
genPkt.addBeforeExc(genTcStartFrameCode(gen_file_def, tc_des))
|
||||
|
||||
change_8b10b_code1 = ""
|
||||
for i in range(dev_num + 1):
|
||||
change_8b10b_code1 = change_8b10b_code1 + genIFRwDataCode(i, 0x004c, True, 2, [0x0, 0x59])\
|
||||
+genIFRwDataCode(i, 0x004c, False, 2)
|
||||
|
||||
change_8b10b_code2 = ""
|
||||
for i in range(dev_num + 1):
|
||||
change_8b10b_code2 = change_8b10b_code2 + genIFRwDataCode(i, 0x004c, True, 2, [0x1, 0x59])\
|
||||
+genIFRwDataCode(i, 0x004c, False, 2)
|
||||
|
||||
invalid_change_8b10b_code1 = ""
|
||||
for i in range(dev_num + 1):
|
||||
invalid_change_8b10b_code1 = invalid_change_8b10b_code1 + genIFRwDataCode(i, 0x004c, True, 2, [0x0, 0x32])\
|
||||
+genIFRwDataCode(i, 0x004c, False, 2)
|
||||
|
||||
invalid_change_8b10b_code2 = ""
|
||||
for i in range(dev_num + 1):
|
||||
invalid_change_8b10b_code2 = invalid_change_8b10b_code2 + genIFRwDataCode(i, 0x004c, True, 2, [0x1, 0x43])\
|
||||
+genIFRwDataCode(i, 0x004c, False, 2)
|
||||
|
||||
invalid_change_8b10b_code3 = ""
|
||||
for i in range(dev_num + 1):
|
||||
invalid_change_8b10b_code3 = invalid_change_8b10b_code3 + genIFRwDataCode(i, 0x004c, True, 1, [0x0, ])\
|
||||
+genIFRwDataCode(i, 0x004c, False, 2)
|
||||
|
||||
invalid_change_8b10b_code4 = ""
|
||||
for i in range(dev_num + 1):
|
||||
invalid_change_8b10b_code4 = invalid_change_8b10b_code4 + genIFRwDataCode(i, 0x004c, True, 1, [0x1, ])\
|
||||
+genIFRwDataCode(i, 0x004c, False, 2)
|
||||
|
||||
invalid_change_8b10b_code5 = ""
|
||||
for i in range(dev_num + 1):
|
||||
invalid_change_8b10b_code5 = invalid_change_8b10b_code5 + genIFRwDataCode(i, 0x004c, True, 2, [0x30, 0x59])\
|
||||
+genIFRwDataCode(i, 0x004c, False, 2)
|
||||
|
||||
invalid_change_8b10b_code6 = ""
|
||||
for i in range(dev_num + 1):
|
||||
invalid_change_8b10b_code6 = invalid_change_8b10b_code6 + genIFRwDataCode(i, 0x004c, True, 2, [0x23, 0x59])\
|
||||
+genIFRwDataCode(i, 0x004c, False, 2)
|
||||
|
||||
default_trans_code = ""
|
||||
for i in range(dev_num + 1):
|
||||
default_trans_code = default_trans_code + using_proper_workmode(i, iface = 4)
|
||||
|
||||
genPkt.addAfterExc(genMessageCode("--正确的key")
|
||||
+change_8b10b_code1
|
||||
+genMessageCode("--错误的key")
|
||||
+invalid_change_8b10b_code4
|
||||
+genMessageCode("--错误的key")
|
||||
+invalid_change_8b10b_code1
|
||||
+genMessageCode("--错误的key")
|
||||
+invalid_change_8b10b_code2
|
||||
+genMessageCode("--正确的key")
|
||||
+change_8b10b_code2
|
||||
+genMessageCode("--错误的key")
|
||||
+invalid_change_8b10b_code3
|
||||
+genMessageCode("--错误的key")
|
||||
+invalid_change_8b10b_code1
|
||||
+genMessageCode("--错误的key")
|
||||
+invalid_change_8b10b_code2
|
||||
+genMessageCode("--正确的key_错误的数据")
|
||||
+invalid_change_8b10b_code5
|
||||
+invalid_change_8b10b_code6
|
||||
+genMessageCode("--恢复默认的配置")
|
||||
+default_trans_code
|
||||
+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 = "测试寄存器的读写状态,交换上下行管脚。特别测试SPI/QSPI读写密码正确和不正确的情况下,对读写的封堵。\\n"
|
||||
|
||||
genPkt = GenPkt()
|
||||
genPkt.clean()
|
||||
|
||||
dev_num = get_slv_dev_num()
|
||||
|
||||
genPkt.addBeforeExc(genTcStartFrameCode(gen_file_def, tc_des))
|
||||
|
||||
change_pinsw_code1 = ""
|
||||
for i in range(dev_num + 1):
|
||||
change_pinsw_code1 = change_pinsw_code1 + genIFRwDataCode(i, 0x004a, True, 2, [0x0, 0x58])\
|
||||
+genIFRwDataCode(i, 0x004a, False, 2)
|
||||
|
||||
change_pinsw_code2 = ""
|
||||
for i in range(dev_num + 1):
|
||||
change_pinsw_code2 = change_pinsw_code2 + genIFRwDataCode(i, 0x004a, True, 2, [0x1, 0x58])\
|
||||
+genIFRwDataCode(i, 0x004a, False, 2)
|
||||
|
||||
invalid_change_pinsw_code1 = ""
|
||||
for i in range(dev_num + 1):
|
||||
invalid_change_pinsw_code1 = invalid_change_pinsw_code1 + genIFRwDataCode(i, 0x004a, True, 2, [0x0, 0x32])\
|
||||
+genIFRwDataCode(i, 0x004a, False, 2)
|
||||
|
||||
invalid_change_pinsw_code2 = ""
|
||||
for i in range(dev_num + 1):
|
||||
invalid_change_pinsw_code2 = invalid_change_pinsw_code2 + genIFRwDataCode(i, 0x004a, True, 2, [0x1, 0x43])\
|
||||
+genIFRwDataCode(i, 0x004a, False, 2)
|
||||
|
||||
invalid_change_pinsw_code3 = ""
|
||||
for i in range(dev_num + 1):
|
||||
invalid_change_pinsw_code3 = invalid_change_pinsw_code3 + genIFRwDataCode(i, 0x004a, True, 1, [0x0, ])\
|
||||
+genIFRwDataCode(i, 0x004a, False, 2)
|
||||
|
||||
invalid_change_pinsw_code4 = ""
|
||||
for i in range(dev_num + 1):
|
||||
invalid_change_pinsw_code4 = invalid_change_pinsw_code4 + genIFRwDataCode(i, 0x004a, True, 1, [0x1, ])\
|
||||
+genIFRwDataCode(i, 0x004a, False, 2)
|
||||
|
||||
invalid_change_pinsw_code5 = ""
|
||||
for i in range(dev_num + 1):
|
||||
invalid_change_pinsw_code5 = invalid_change_pinsw_code5 + genIFRwDataCode(i, 0x004a, True, 2, [0x30, 0x58])\
|
||||
+genIFRwDataCode(i, 0x004a, False, 2)
|
||||
|
||||
invalid_change_pinsw_code6 = ""
|
||||
for i in range(dev_num + 1):
|
||||
invalid_change_pinsw_code6 = invalid_change_pinsw_code6 + genIFRwDataCode(i, 0x004a, True, 2, [0x23, 0x58])\
|
||||
+genIFRwDataCode(i, 0x004a, False, 2)
|
||||
|
||||
default_pinsw_code = ""
|
||||
for i in range(dev_num + 1):
|
||||
default_pinsw_code = default_pinsw_code + genIFRwDataCode(i, 0x004a, True, 2, [0, 0x58])
|
||||
|
||||
genPkt.addAfterExc(genMessageCode("--正确的key")
|
||||
+change_pinsw_code1
|
||||
+genMessageCode("--错误的key")
|
||||
+invalid_change_pinsw_code4
|
||||
+genMessageCode("--错误的key")
|
||||
+invalid_change_pinsw_code1
|
||||
+genMessageCode("--错误的key")
|
||||
+invalid_change_pinsw_code2
|
||||
+genMessageCode("--正确的key")
|
||||
+change_pinsw_code2
|
||||
+genMessageCode("--错误的key")
|
||||
+invalid_change_pinsw_code3
|
||||
+genMessageCode("--错误的key")
|
||||
+invalid_change_pinsw_code1
|
||||
+genMessageCode("--错误的key")
|
||||
+invalid_change_pinsw_code2
|
||||
+genMessageCode("--正确的key_错误的数据")
|
||||
+invalid_change_pinsw_code5
|
||||
+invalid_change_pinsw_code6
|
||||
+genMessageCode("--恢复默认的配置")
|
||||
+default_pinsw_code
|
||||
+genTcEndFrameCode(gen_file_def))
|
||||
genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1)
|
||||
return gen_file_def
|
||||
|
||||
def tc3():
|
||||
gen_file_def = "regtest_tc03"
|
||||
sm_idx = 0
|
||||
tc_des = "测试SM0~SM7的的长度寄存器的读写,要求在内部有元素的情况下,不能改写其长度。\\n"
|
||||
|
||||
genPkt = GenPkt()
|
||||
genPkt.clean()
|
||||
genPkt.setPktType(0)
|
||||
|
||||
dev_num = get_slv_dev_num()
|
||||
|
||||
chang_sm_length = ""
|
||||
for i in range(dev_num + 1):
|
||||
chang_sm_length = chang_sm_length + genIFRwDataCode(i, 0x0302, True, 2, [0x20, 0x00])
|
||||
|
||||
|
||||
|
||||
genPkt.addBeforeExc(genTcStartFrameCode(gen_file_def, tc_des)
|
||||
+chang_sm_length
|
||||
+genMessageCode("--清除主中断")
|
||||
+genIFRwDataCode(0, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
)
|
||||
|
||||
genPkt.addSubPkt(0x0, 0x0, 0x0800, 0xe, 0x20, [0, ] * 0x20)
|
||||
|
||||
chang_sm_length = ""
|
||||
for i in range(dev_num + 1):
|
||||
chang_sm_length = chang_sm_length + genIFRwDataCode(i, 0x0302, True, 2, [0x40, 0x00])
|
||||
|
||||
read_sm_status = ""
|
||||
for i in range(dev_num + 1):
|
||||
read_sm_status = read_sm_status + genIFRwDataCode(i, 0x0300, False, 4)
|
||||
|
||||
reset_sm = ""
|
||||
for i in range(dev_num + 1):
|
||||
reset_sm = reset_sm + genIFRwDataCode(i, 0x0300, True, 1, [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)
|
||||
+chang_sm_length
|
||||
+read_sm_status
|
||||
+reset_sm
|
||||
+read_sm_status
|
||||
+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])
|
||||
+genTcEndFrameCode(gen_file_def))
|
||||
genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1)
|
||||
return gen_file_def
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,370 +1,370 @@
|
||||
from pyutils import *
|
||||
|
||||
|
||||
|
||||
'''
|
||||
看门狗0超时逻辑:
|
||||
1. 看门狗0从系统发送下行包时,触发工作;
|
||||
2. 系统上行时,停止看门狗工作并复位看门狗计数器;若发生超时,报超时状态,复位继续工作,此时有上行包,不予响应;
|
||||
3. 看门狗不使能,则对应的看门狗停止工作,也不会报相关的状态位与中断;
|
||||
4. 写对应的看门狗状态寄存器,对应看门狗被复位;需要重新触发才能工作。
|
||||
|
||||
|
||||
SM0/2/4/6与SM1/3/5/7超时逻辑:
|
||||
1. 看门狗从读写第一个字节被触发计时工作;第二次读写第一个字节,不影响看门狗工作;
|
||||
2. 读写最后一个字节,停止看门狗工作并复位看门狗计数器;若发生超时,报超时状态,复位继续工作,此时系统读到最后一个字节,不予响应。
|
||||
3. 看门狗不使能,则对应的看门狗停止工作,也不会报相关的状态位与中断;
|
||||
4. 写对应的看门狗状态寄存器,对应看门狗被复位;需要重新触发才能工作。
|
||||
|
||||
看门狗17超时逻辑:
|
||||
1. 看门狗17从系统发送第一个下行包时,触发工作;
|
||||
2. 系统发送第二个下行包时,停止看门狗工作并复位看门狗计数器;若发生超时,报超时状态,复位继续工作;
|
||||
3. 看门狗不使能,则对应的看门狗停止工作,也不会报相关的状态位与中断;
|
||||
4. 写对应的看门狗状态寄存器,对应看门狗被复位;需要重新触发才能工作。
|
||||
|
||||
|
||||
复位继续工作,指看门狗需要重新被触发开始计数直至超时或者复位。写看门狗状态,无论超时没超时,对应bit为1,则对应看门狗被复位。
|
||||
'''
|
||||
|
||||
def watchdog_test_sm_wr_timeout(tc_id, wd_id):
|
||||
genPkt = GenPkt()
|
||||
|
||||
gen_file_def = "watchdog_tc%02d"%(tc_id, )
|
||||
sm_idx = 0
|
||||
|
||||
slave_sm_id = int((wd_id - 1) / 2)
|
||||
tc_des = (f"使能看门狗{wd_id},监视SM{slave_sm_id},写数据到SM中,只写一半,看Watchdog是否超时。\\n"
|
||||
"清除中断后,错误消失,出问题的设备恢复正常。"
|
||||
)
|
||||
|
||||
#--------------------------------------------------------------------------
|
||||
#>>>>>> 测试用例1 看门狗测试
|
||||
genPkt.clean()
|
||||
genPkt.setPktType(0)
|
||||
|
||||
data = 1 << wd_id ##使能看门狗
|
||||
data0 = [data&0xff, (data>>8)&0xff, (data>>16)&0xff, (data>>24)&0xff]
|
||||
|
||||
data = 0x002000 ##看门狗的超时值
|
||||
data1 = [data&0xff, (data>>8)&0xff, (data>>16)&0xff, (data>>24)&0xff]
|
||||
|
||||
data = 0xffffffff ##清除中断
|
||||
data2 = [data&0xff, (data>>8)&0xff, (data>>16)&0xff, (data>>24)&0xff]
|
||||
|
||||
genPkt.addBeforeExc(genTcStartFrameCode(gen_file_def, tc_des)
|
||||
+ genIFRwDataCode(0, 0x078, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
+ genIFRwDataCode(1, 0x404, True, 4, data0)
|
||||
+ genIFRwDataCode(1, 0x40C + (wd_id - 1) * 4, True, 4, data1)
|
||||
+ genIFRwDataCode(1, 0x078, True, 4, data2)
|
||||
+ genIFRwDataCode(2, 0x078, True, 4, data2)
|
||||
+ genIFRwDataCode(3, 0x078, True, 4, data2)
|
||||
+ genIFRwDataCode(4, 0x078, True, 4, data2)
|
||||
+ genIFRwDataCode(1, 0x400, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
+ genIFRwDataCode(0, 0x074, False, 0x04)
|
||||
+ genIFRwDataCode(1, 0x074, False, 0x04)
|
||||
+ genIFRwDataCode(2, 0x074, False, 0x04)
|
||||
+ genIFRwDataCode(3, 0x074, False, 0x04)
|
||||
+ genIFRwDataCode(4, 0x074, False, 0x04)
|
||||
+ genIFRwDataCode(1, 0x400, False, 0x04))
|
||||
#genPkt.addBeforeExc( genIFRwDataCode(1, 0x078, True, 4, [0xff, 0xff, 0xff, 0xff]))
|
||||
|
||||
data = [0,] * 2
|
||||
data[0] = 0x80
|
||||
data[1] = 0x00
|
||||
genPkt.addSubPkt(0x0, 0, 0x302 + slave_sm_id * 4, 0xe, 2, data)
|
||||
|
||||
data = [0,] * 0x50
|
||||
|
||||
#subPkt参数:索引、索引类型、地址、命令、长度、数据
|
||||
sm_addr = slave_sm_id * 0x1000 + 0x800
|
||||
genPkt.addSubPkt(1, 0, sm_addr, 0x1, 0x50, 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)
|
||||
+genMessageCode("--检查中断寄存器")
|
||||
+genIFRwDataCode(0, 0x074, False, 0x04)
|
||||
+genIFRwDataCode(1, 0x074, False, 0x04)
|
||||
+genIFRwDataCode(2, 0x074, False, 0x04)
|
||||
+genIFRwDataCode(3, 0x074, False, 0x04)
|
||||
+genIFRwDataCode(4, 0x074, False, 0x04)
|
||||
+genMessageCode("--延时后检查看门狗寄存器")
|
||||
+"#700000\n"
|
||||
+genIFRwDataCode(1, 0x400, False, 0x04)
|
||||
+genIFRwDataCode(1, 0x400, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
+genIFRwDataCode(1, 0x400, False, 0x04)
|
||||
+genMessageCode("--复位数据缓冲区")
|
||||
+genIFRwDataCode(1, 0x300 + slave_sm_id * 4, True, 1, [0, ])
|
||||
+genMessageCode("--延时后检查看门狗寄存器")
|
||||
+"#1200000\n"
|
||||
+genIFRwDataCode(1, 0x400, False, 0x04)
|
||||
+genTcEndFrameCode(gen_file_def))
|
||||
|
||||
genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1)
|
||||
|
||||
return gen_file_def
|
||||
|
||||
def watchdog_test_sm_wr_no_timeout(tc_id, wd_id):
|
||||
genPkt = GenPkt()
|
||||
|
||||
gen_file_def = "watchdog_tc%02d"%(tc_id, )
|
||||
sm_idx = 0
|
||||
|
||||
slave_sm_id = int((wd_id - 1) / 2)
|
||||
tc_des = (f"使能看门狗{wd_id},监视SM{slave_sm_id},写数据到SM中,只写一半,看Watchdog是否超时。\\n"
|
||||
"清除中断后,错误消失,出问题的设备恢复正常。"
|
||||
)
|
||||
|
||||
#--------------------------------------------------------------------------
|
||||
#>>>>>> 测试用例1 看门狗测试
|
||||
genPkt.clean()
|
||||
genPkt.setPktType(0)
|
||||
|
||||
data = 1 << wd_id ##使能看门狗
|
||||
data0 = [data&0xff, (data>>8)&0xff, (data>>16)&0xff, (data>>24)&0xff]
|
||||
|
||||
data = 0x002000 ##看门狗的超时值
|
||||
data1 = [data&0xff, (data>>8)&0xff, (data>>16)&0xff, (data>>24)&0xff]
|
||||
|
||||
data = 0xffffffff ##清除中断
|
||||
data2 = [data&0xff, (data>>8)&0xff, (data>>16)&0xff, (data>>24)&0xff]
|
||||
|
||||
genPkt.addBeforeExc(genTcStartFrameCode(gen_file_def, tc_des)
|
||||
+ genIFRwDataCode(0, 0x078, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
+ genIFRwDataCode(1, 0x404, True, 4, data0)
|
||||
+ genIFRwDataCode(1, 0x40C + (wd_id - 1) * 4, True, 4, data1)
|
||||
+ genIFRwDataCode(1, 0x078, True, 4, data2)
|
||||
+ genIFRwDataCode(2, 0x078, True, 4, data2)
|
||||
+ genIFRwDataCode(3, 0x078, True, 4, data2)
|
||||
+ genIFRwDataCode(4, 0x078, True, 4, data2)
|
||||
+ genIFRwDataCode(1, 0x400, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
+ genIFRwDataCode(0, 0x074, False, 0x04)
|
||||
+ genIFRwDataCode(1, 0x074, False, 0x04)
|
||||
+ genIFRwDataCode(2, 0x074, False, 0x04)
|
||||
+ genIFRwDataCode(3, 0x074, False, 0x04)
|
||||
+ genIFRwDataCode(4, 0x074, False, 0x04)
|
||||
+ genIFRwDataCode(1, 0x400, False, 0x04))
|
||||
#genPkt.addBeforeExc( genIFRwDataCode(1, 0x078, True, 4, [0xff, 0xff, 0xff, 0xff]))
|
||||
|
||||
data = [0,] * 2
|
||||
data[0] = 0x80
|
||||
data[1] = 0x00
|
||||
genPkt.addSubPkt(0x0, 0, 0x302 + slave_sm_id * 4, 0xe, 2, data)
|
||||
|
||||
data = [0,] * 0x80
|
||||
|
||||
#subPkt参数:索引、索引类型、地址、命令、长度、数据
|
||||
sm_addr = slave_sm_id * 0x1000 + 0x800
|
||||
genPkt.addSubPkt(1, 0, sm_addr, 0x1, 0x80, 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)
|
||||
+genMessageCode("--检查中断寄存器")
|
||||
+genIFRwDataCode(0, 0x074, False, 0x04)
|
||||
+genIFRwDataCode(1, 0x074, False, 0x04)
|
||||
+genIFRwDataCode(2, 0x074, False, 0x04)
|
||||
+genIFRwDataCode(3, 0x074, False, 0x04)
|
||||
+genIFRwDataCode(4, 0x074, False, 0x04)
|
||||
+genMessageCode("--延时后检查看门狗寄存器")
|
||||
+"#700000\n"
|
||||
+genIFRwDataCode(1, 0x400, False, 0x04)
|
||||
+genIFRwDataCode(1, 0x400, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
+genIFRwDataCode(1, 0x400, False, 0x04)
|
||||
+genMessageCode("--复位数据缓冲区")
|
||||
+genIFRwDataCode(1, 0x300 + slave_sm_id * 4, True, 1, [0, ])
|
||||
+genMessageCode("--延时后检查看门狗寄存器")
|
||||
+"#1200000\n"
|
||||
+genIFRwDataCode(1, 0x400, False, 0x04)
|
||||
+genTcEndFrameCode(gen_file_def))
|
||||
|
||||
genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1)
|
||||
|
||||
return gen_file_def
|
||||
|
||||
|
||||
def watchdog_test_sm_rd_timeout(tc_id, wd_id):
|
||||
genPkt = GenPkt()
|
||||
|
||||
gen_file_def = "watchdog_tc%02d"%(tc_id, )
|
||||
sm_idx = 0
|
||||
|
||||
slave_sm_id = int((wd_id - 1) / 2)
|
||||
tc_des = (f"使能看门狗{wd_id},监视SM{slave_sm_id},写数据到SM中,只读一半,看Watchdog是否超时。\\n"
|
||||
"清除中断后,错误消失,出问题的设备恢复正常。"
|
||||
)
|
||||
|
||||
#--------------------------------------------------------------------------
|
||||
#>>>>>> 测试用例1 看门狗测试
|
||||
genPkt.clean()
|
||||
genPkt.setPktType(0)
|
||||
|
||||
data = 1 << wd_id ##使能看门狗
|
||||
data0 = [data&0xff, (data>>8)&0xff, (data>>16)&0xff, (data>>24)&0xff]
|
||||
|
||||
data = 0x002000 ##看门狗的超时值
|
||||
data1 = [data&0xff, (data>>8)&0xff, (data>>16)&0xff, (data>>24)&0xff]
|
||||
|
||||
genPkt.addBeforeExc(genTcStartFrameCode(gen_file_def, tc_des)
|
||||
+ genIFRwDataCode(1, 0x404, True, 4, data0)
|
||||
+ genIFRwDataCode(1, 0x40C + (wd_id - 1) * 4, True, 4, data1)
|
||||
+ genIFRwDataCode(0, 0x078, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
+ genIFRwDataCode(1, 0x078, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
+ genIFRwDataCode(2, 0x078, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
+ genIFRwDataCode(3, 0x078, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
+ genIFRwDataCode(4, 0x078, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
+ genIFRwDataCode(1, 0x400, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
+ genIFRwDataCode(0, 0x074, False, 0x04)
|
||||
+ genIFRwDataCode(1, 0x074, False, 0x04)
|
||||
+ genIFRwDataCode(2, 0x074, False, 0x04)
|
||||
+ genIFRwDataCode(3, 0x074, False, 0x04)
|
||||
+ genIFRwDataCode(4, 0x074, False, 0x04)
|
||||
+ genIFRwDataCode(1, 0x400, False, 0x04)
|
||||
)
|
||||
#genPkt.addBeforeExc( genIFRwDataCode(1, 0x078, True, 4, [0xff, 0xff, 0xff, 0xff]))
|
||||
|
||||
data = [0,] * 2
|
||||
data[0] = 0x10
|
||||
data[1] = 0x00
|
||||
genPkt.addSubPkt(0x0, 0, 0x302 + slave_sm_id * 4, 0xe, 2, data)
|
||||
|
||||
data = list(range(0x10))
|
||||
|
||||
#subPkt参数:索引、索引类型、地址、命令、长度、数据
|
||||
sm_addr = slave_sm_id * 0x1000 + 0x800
|
||||
genPkt.addSubPkt(1, 0, sm_addr, 0x1, 0x10, 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)
|
||||
+genMessageCode("--检查中断寄存器")
|
||||
+genIFRwDataCode(0, 0x074, False, 0x04)
|
||||
+genIFRwDataCode(1, 0x074, False, 0x04)
|
||||
+genIFRwDataCode(2, 0x074, False, 0x04)
|
||||
+genIFRwDataCode(3, 0x074, False, 0x04)
|
||||
+genIFRwDataCode(4, 0x074, False, 0x04)
|
||||
+genMessageCode("--读缓冲区")
|
||||
+genIFRwDataCode(1, 0x800 + slave_sm_id * 0x1000, False, 8)
|
||||
|
||||
+genMessageCode("--延时后检查看门狗寄存器")
|
||||
+"#2000000\n"
|
||||
+genIFRwDataCode(1, 0x400, False, 0x04)
|
||||
+genIFRwDataCode(1, 0x400, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
+genIFRwDataCode(1, 0x400, False, 0x04)
|
||||
+genMessageCode("--复位数据缓冲区")
|
||||
+genIFRwDataCode(1, 0x300 + slave_sm_id * 4, True, 1, [0, ])
|
||||
+genMessageCode("--延时后检查看门狗寄存器")
|
||||
+"#2000000\n"
|
||||
+genIFRwDataCode(1, 0x400, False, 0x04)
|
||||
+genIFRwDataCode(1, 0x074, False, 0x04)
|
||||
+genTcEndFrameCode(gen_file_def))
|
||||
|
||||
genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1)
|
||||
|
||||
return gen_file_def
|
||||
|
||||
|
||||
def watchdog_test_sm_rd_no_timeout(tc_id, wd_id):
|
||||
genPkt = GenPkt()
|
||||
|
||||
gen_file_def = "watchdog_tc%02d"%(tc_id, )
|
||||
sm_idx = 0
|
||||
|
||||
slave_sm_id = int((wd_id - 1) / 2)
|
||||
tc_des = (f"使能看门狗{wd_id},监视SM{slave_sm_id},写数据到SM中,只读一半,看Watchdog是否超时。\\n"
|
||||
"清除中断后,错误消失,出问题的设备恢复正常。"
|
||||
)
|
||||
|
||||
#--------------------------------------------------------------------------
|
||||
#>>>>>> 测试用例1 看门狗测试
|
||||
genPkt.clean()
|
||||
genPkt.setPktType(0)
|
||||
|
||||
data = 1 << wd_id ##使能看门狗
|
||||
data0 = [data&0xff, (data>>8)&0xff, (data>>16)&0xff, (data>>24)&0xff]
|
||||
|
||||
data = 0x002000 ##看门狗的超时值
|
||||
data1 = [data&0xff, (data>>8)&0xff, (data>>16)&0xff, (data>>24)&0xff]
|
||||
|
||||
genPkt.addBeforeExc(genTcStartFrameCode(gen_file_def, tc_des)
|
||||
+ genIFRwDataCode(1, 0x404, True, 4, data0)
|
||||
+ genIFRwDataCode(1, 0x40C + (wd_id - 1) * 4, True, 4, data1)
|
||||
+ genIFRwDataCode(0, 0x078, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
+ genIFRwDataCode(1, 0x078, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
+ genIFRwDataCode(2, 0x078, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
+ genIFRwDataCode(3, 0x078, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
+ genIFRwDataCode(4, 0x078, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
+ genIFRwDataCode(1, 0x400, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
+ genIFRwDataCode(0, 0x074, False, 0x04)
|
||||
+ genIFRwDataCode(1, 0x074, False, 0x04)
|
||||
+ genIFRwDataCode(2, 0x074, False, 0x04)
|
||||
+ genIFRwDataCode(3, 0x074, False, 0x04)
|
||||
+ genIFRwDataCode(4, 0x074, False, 0x04)
|
||||
+ genIFRwDataCode(1, 0x400, False, 0x04)
|
||||
)
|
||||
#genPkt.addBeforeExc( genIFRwDataCode(1, 0x078, True, 4, [0xff, 0xff, 0xff, 0xff]))
|
||||
|
||||
data = [0,] * 2
|
||||
data[0] = 0x10
|
||||
data[1] = 0x00
|
||||
genPkt.addSubPkt(0x0, 0, 0x302 + slave_sm_id * 4, 0xe, 2, data)
|
||||
|
||||
data = list(range(0x10))
|
||||
|
||||
#subPkt参数:索引、索引类型、地址、命令、长度、数据
|
||||
sm_addr = slave_sm_id * 0x1000 + 0x800
|
||||
genPkt.addSubPkt(1, 0, sm_addr, 0x1, 0x10, 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)
|
||||
+genMessageCode("--检查中断寄存器")
|
||||
+genIFRwDataCode(0, 0x074, False, 0x04)
|
||||
+genIFRwDataCode(1, 0x074, False, 0x04)
|
||||
+genIFRwDataCode(2, 0x074, False, 0x04)
|
||||
+genIFRwDataCode(3, 0x074, False, 0x04)
|
||||
+genIFRwDataCode(4, 0x074, False, 0x04)
|
||||
+genMessageCode("--读缓冲区")
|
||||
+genIFRwDataCode(1, 0x800 + slave_sm_id * 0x1000, False, 0x10)
|
||||
|
||||
+genMessageCode("--延时后检查看门狗寄存器")
|
||||
+"#2000000\n"
|
||||
+genIFRwDataCode(1, 0x400, False, 0x04)
|
||||
+genIFRwDataCode(1, 0x400, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
+genIFRwDataCode(1, 0x400, False, 0x04)
|
||||
+genMessageCode("--复位数据缓冲区")
|
||||
+genIFRwDataCode(1, 0x300 + slave_sm_id * 4, True, 1, [0, ])
|
||||
+genMessageCode("--延时后检查看门狗寄存器")
|
||||
+"#2000000\n"
|
||||
+genIFRwDataCode(1, 0x400, False, 0x04)
|
||||
+genIFRwDataCode(1, 0x074, False, 0x04)
|
||||
+genTcEndFrameCode(gen_file_def))
|
||||
|
||||
genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1)
|
||||
|
||||
return gen_file_def
|
||||
|
||||
def tc1():
|
||||
return watchdog_test_sm_wr_timeout(1, 1)
|
||||
|
||||
|
||||
def tc2():
|
||||
return watchdog_test_sm_rd_timeout(2, 2)
|
||||
|
||||
def tc3():
|
||||
return watchdog_test_sm_wr_no_timeout(3, 1)
|
||||
|
||||
def tc4():
|
||||
from pyutils import *
|
||||
|
||||
|
||||
|
||||
'''
|
||||
看门狗0超时逻辑:
|
||||
1. 看门狗0从系统发送下行包时,触发工作;
|
||||
2. 系统上行时,停止看门狗工作并复位看门狗计数器;若发生超时,报超时状态,复位继续工作,此时有上行包,不予响应;
|
||||
3. 看门狗不使能,则对应的看门狗停止工作,也不会报相关的状态位与中断;
|
||||
4. 写对应的看门狗状态寄存器,对应看门狗被复位;需要重新触发才能工作。
|
||||
|
||||
|
||||
SM0/2/4/6与SM1/3/5/7超时逻辑:
|
||||
1. 看门狗从读写第一个字节被触发计时工作;第二次读写第一个字节,不影响看门狗工作;
|
||||
2. 读写最后一个字节,停止看门狗工作并复位看门狗计数器;若发生超时,报超时状态,复位继续工作,此时系统读到最后一个字节,不予响应。
|
||||
3. 看门狗不使能,则对应的看门狗停止工作,也不会报相关的状态位与中断;
|
||||
4. 写对应的看门狗状态寄存器,对应看门狗被复位;需要重新触发才能工作。
|
||||
|
||||
看门狗17超时逻辑:
|
||||
1. 看门狗17从系统发送第一个下行包时,触发工作;
|
||||
2. 系统发送第二个下行包时,停止看门狗工作并复位看门狗计数器;若发生超时,报超时状态,复位继续工作;
|
||||
3. 看门狗不使能,则对应的看门狗停止工作,也不会报相关的状态位与中断;
|
||||
4. 写对应的看门狗状态寄存器,对应看门狗被复位;需要重新触发才能工作。
|
||||
|
||||
|
||||
复位继续工作,指看门狗需要重新被触发开始计数直至超时或者复位。写看门狗状态,无论超时没超时,对应bit为1,则对应看门狗被复位。
|
||||
'''
|
||||
|
||||
def watchdog_test_sm_wr_timeout(tc_id, wd_id):
|
||||
genPkt = GenPkt()
|
||||
|
||||
gen_file_def = "watchdog_tc%02d"%(tc_id, )
|
||||
sm_idx = 0
|
||||
|
||||
slave_sm_id = int((wd_id - 1) / 2)
|
||||
tc_des = (f"使能看门狗{wd_id},监视SM{slave_sm_id},写数据到SM中,只写一半,看Watchdog是否超时。\\n"
|
||||
"清除中断后,错误消失,出问题的设备恢复正常。"
|
||||
)
|
||||
|
||||
#--------------------------------------------------------------------------
|
||||
#>>>>>> 测试用例1 看门狗测试
|
||||
genPkt.clean()
|
||||
genPkt.setPktType(0)
|
||||
|
||||
data = 1 << wd_id ##使能看门狗
|
||||
data0 = [data&0xff, (data>>8)&0xff, (data>>16)&0xff, (data>>24)&0xff]
|
||||
|
||||
data = 0x002000 ##看门狗的超时值
|
||||
data1 = [data&0xff, (data>>8)&0xff, (data>>16)&0xff, (data>>24)&0xff]
|
||||
|
||||
data = 0xffffffff ##清除中断
|
||||
data2 = [data&0xff, (data>>8)&0xff, (data>>16)&0xff, (data>>24)&0xff]
|
||||
|
||||
genPkt.addBeforeExc(genTcStartFrameCode(gen_file_def, tc_des)
|
||||
+ genIFRwDataCode(0, 0x078, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
+ genIFRwDataCode(1, 0x404, True, 4, data0)
|
||||
+ genIFRwDataCode(1, 0x40C + (wd_id - 1) * 4, True, 4, data1)
|
||||
+ genIFRwDataCode(1, 0x078, True, 4, data2)
|
||||
+ genIFRwDataCode(2, 0x078, True, 4, data2)
|
||||
+ genIFRwDataCode(3, 0x078, True, 4, data2)
|
||||
+ genIFRwDataCode(4, 0x078, True, 4, data2)
|
||||
+ genIFRwDataCode(1, 0x400, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
+ genIFRwDataCode(0, 0x074, False, 0x04)
|
||||
+ genIFRwDataCode(1, 0x074, False, 0x04)
|
||||
+ genIFRwDataCode(2, 0x074, False, 0x04)
|
||||
+ genIFRwDataCode(3, 0x074, False, 0x04)
|
||||
+ genIFRwDataCode(4, 0x074, False, 0x04)
|
||||
+ genIFRwDataCode(1, 0x400, False, 0x04))
|
||||
#genPkt.addBeforeExc( genIFRwDataCode(1, 0x078, True, 4, [0xff, 0xff, 0xff, 0xff]))
|
||||
|
||||
data = [0,] * 2
|
||||
data[0] = 0x80
|
||||
data[1] = 0x00
|
||||
genPkt.addSubPkt(0x0, 0, 0x302 + slave_sm_id * 4, 0xe, 2, data)
|
||||
|
||||
data = [0,] * 0x50
|
||||
|
||||
#subPkt参数:索引、索引类型、地址、命令、长度、数据
|
||||
sm_addr = slave_sm_id * 0x1000 + 0x800
|
||||
genPkt.addSubPkt(1, 0, sm_addr, 0x1, 0x50, 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)
|
||||
+genMessageCode("--检查中断寄存器")
|
||||
+genIFRwDataCode(0, 0x074, False, 0x04)
|
||||
+genIFRwDataCode(1, 0x074, False, 0x04)
|
||||
+genIFRwDataCode(2, 0x074, False, 0x04)
|
||||
+genIFRwDataCode(3, 0x074, False, 0x04)
|
||||
+genIFRwDataCode(4, 0x074, False, 0x04)
|
||||
+genMessageCode("--延时后检查看门狗寄存器")
|
||||
+"#700000\n"
|
||||
+genIFRwDataCode(1, 0x400, False, 0x04)
|
||||
+genIFRwDataCode(1, 0x400, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
+genIFRwDataCode(1, 0x400, False, 0x04)
|
||||
+genMessageCode("--复位数据缓冲区")
|
||||
+genIFRwDataCode(1, 0x300 + slave_sm_id * 4, True, 1, [0, ])
|
||||
+genMessageCode("--延时后检查看门狗寄存器")
|
||||
+"#1200000\n"
|
||||
+genIFRwDataCode(1, 0x400, False, 0x04)
|
||||
+genTcEndFrameCode(gen_file_def))
|
||||
|
||||
genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1)
|
||||
|
||||
return gen_file_def
|
||||
|
||||
def watchdog_test_sm_wr_no_timeout(tc_id, wd_id):
|
||||
genPkt = GenPkt()
|
||||
|
||||
gen_file_def = "watchdog_tc%02d"%(tc_id, )
|
||||
sm_idx = 0
|
||||
|
||||
slave_sm_id = int((wd_id - 1) / 2)
|
||||
tc_des = (f"使能看门狗{wd_id},监视SM{slave_sm_id},写数据到SM中,只写一半,看Watchdog是否超时。\\n"
|
||||
"清除中断后,错误消失,出问题的设备恢复正常。"
|
||||
)
|
||||
|
||||
#--------------------------------------------------------------------------
|
||||
#>>>>>> 测试用例1 看门狗测试
|
||||
genPkt.clean()
|
||||
genPkt.setPktType(0)
|
||||
|
||||
data = 1 << wd_id ##使能看门狗
|
||||
data0 = [data&0xff, (data>>8)&0xff, (data>>16)&0xff, (data>>24)&0xff]
|
||||
|
||||
data = 0x002000 ##看门狗的超时值
|
||||
data1 = [data&0xff, (data>>8)&0xff, (data>>16)&0xff, (data>>24)&0xff]
|
||||
|
||||
data = 0xffffffff ##清除中断
|
||||
data2 = [data&0xff, (data>>8)&0xff, (data>>16)&0xff, (data>>24)&0xff]
|
||||
|
||||
genPkt.addBeforeExc(genTcStartFrameCode(gen_file_def, tc_des)
|
||||
+ genIFRwDataCode(0, 0x078, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
+ genIFRwDataCode(1, 0x404, True, 4, data0)
|
||||
+ genIFRwDataCode(1, 0x40C + (wd_id - 1) * 4, True, 4, data1)
|
||||
+ genIFRwDataCode(1, 0x078, True, 4, data2)
|
||||
+ genIFRwDataCode(2, 0x078, True, 4, data2)
|
||||
+ genIFRwDataCode(3, 0x078, True, 4, data2)
|
||||
+ genIFRwDataCode(4, 0x078, True, 4, data2)
|
||||
+ genIFRwDataCode(1, 0x400, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
+ genIFRwDataCode(0, 0x074, False, 0x04)
|
||||
+ genIFRwDataCode(1, 0x074, False, 0x04)
|
||||
+ genIFRwDataCode(2, 0x074, False, 0x04)
|
||||
+ genIFRwDataCode(3, 0x074, False, 0x04)
|
||||
+ genIFRwDataCode(4, 0x074, False, 0x04)
|
||||
+ genIFRwDataCode(1, 0x400, False, 0x04))
|
||||
#genPkt.addBeforeExc( genIFRwDataCode(1, 0x078, True, 4, [0xff, 0xff, 0xff, 0xff]))
|
||||
|
||||
data = [0,] * 2
|
||||
data[0] = 0x80
|
||||
data[1] = 0x00
|
||||
genPkt.addSubPkt(0x0, 0, 0x302 + slave_sm_id * 4, 0xe, 2, data)
|
||||
|
||||
data = [0,] * 0x80
|
||||
|
||||
#subPkt参数:索引、索引类型、地址、命令、长度、数据
|
||||
sm_addr = slave_sm_id * 0x1000 + 0x800
|
||||
genPkt.addSubPkt(1, 0, sm_addr, 0x1, 0x80, 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)
|
||||
+genMessageCode("--检查中断寄存器")
|
||||
+genIFRwDataCode(0, 0x074, False, 0x04)
|
||||
+genIFRwDataCode(1, 0x074, False, 0x04)
|
||||
+genIFRwDataCode(2, 0x074, False, 0x04)
|
||||
+genIFRwDataCode(3, 0x074, False, 0x04)
|
||||
+genIFRwDataCode(4, 0x074, False, 0x04)
|
||||
+genMessageCode("--延时后检查看门狗寄存器")
|
||||
+"#700000\n"
|
||||
+genIFRwDataCode(1, 0x400, False, 0x04)
|
||||
+genIFRwDataCode(1, 0x400, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
+genIFRwDataCode(1, 0x400, False, 0x04)
|
||||
+genMessageCode("--复位数据缓冲区")
|
||||
+genIFRwDataCode(1, 0x300 + slave_sm_id * 4, True, 1, [0, ])
|
||||
+genMessageCode("--延时后检查看门狗寄存器")
|
||||
+"#1200000\n"
|
||||
+genIFRwDataCode(1, 0x400, False, 0x04)
|
||||
+genTcEndFrameCode(gen_file_def))
|
||||
|
||||
genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1)
|
||||
|
||||
return gen_file_def
|
||||
|
||||
|
||||
def watchdog_test_sm_rd_timeout(tc_id, wd_id):
|
||||
genPkt = GenPkt()
|
||||
|
||||
gen_file_def = "watchdog_tc%02d"%(tc_id, )
|
||||
sm_idx = 0
|
||||
|
||||
slave_sm_id = int((wd_id - 1) / 2)
|
||||
tc_des = (f"使能看门狗{wd_id},监视SM{slave_sm_id},写数据到SM中,只读一半,看Watchdog是否超时。\\n"
|
||||
"清除中断后,错误消失,出问题的设备恢复正常。"
|
||||
)
|
||||
|
||||
#--------------------------------------------------------------------------
|
||||
#>>>>>> 测试用例1 看门狗测试
|
||||
genPkt.clean()
|
||||
genPkt.setPktType(0)
|
||||
|
||||
data = 1 << wd_id ##使能看门狗
|
||||
data0 = [data&0xff, (data>>8)&0xff, (data>>16)&0xff, (data>>24)&0xff]
|
||||
|
||||
data = 0x002000 ##看门狗的超时值
|
||||
data1 = [data&0xff, (data>>8)&0xff, (data>>16)&0xff, (data>>24)&0xff]
|
||||
|
||||
genPkt.addBeforeExc(genTcStartFrameCode(gen_file_def, tc_des)
|
||||
+ genIFRwDataCode(1, 0x404, True, 4, data0)
|
||||
+ genIFRwDataCode(1, 0x40C + (wd_id - 1) * 4, True, 4, data1)
|
||||
+ genIFRwDataCode(0, 0x078, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
+ genIFRwDataCode(1, 0x078, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
+ genIFRwDataCode(2, 0x078, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
+ genIFRwDataCode(3, 0x078, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
+ genIFRwDataCode(4, 0x078, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
+ genIFRwDataCode(1, 0x400, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
+ genIFRwDataCode(0, 0x074, False, 0x04)
|
||||
+ genIFRwDataCode(1, 0x074, False, 0x04)
|
||||
+ genIFRwDataCode(2, 0x074, False, 0x04)
|
||||
+ genIFRwDataCode(3, 0x074, False, 0x04)
|
||||
+ genIFRwDataCode(4, 0x074, False, 0x04)
|
||||
+ genIFRwDataCode(1, 0x400, False, 0x04)
|
||||
)
|
||||
#genPkt.addBeforeExc( genIFRwDataCode(1, 0x078, True, 4, [0xff, 0xff, 0xff, 0xff]))
|
||||
|
||||
data = [0,] * 2
|
||||
data[0] = 0x10
|
||||
data[1] = 0x00
|
||||
genPkt.addSubPkt(0x0, 0, 0x302 + slave_sm_id * 4, 0xe, 2, data)
|
||||
|
||||
data = list(range(0x10))
|
||||
|
||||
#subPkt参数:索引、索引类型、地址、命令、长度、数据
|
||||
sm_addr = slave_sm_id * 0x1000 + 0x800
|
||||
genPkt.addSubPkt(1, 0, sm_addr, 0x1, 0x10, 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)
|
||||
+genMessageCode("--检查中断寄存器")
|
||||
+genIFRwDataCode(0, 0x074, False, 0x04)
|
||||
+genIFRwDataCode(1, 0x074, False, 0x04)
|
||||
+genIFRwDataCode(2, 0x074, False, 0x04)
|
||||
+genIFRwDataCode(3, 0x074, False, 0x04)
|
||||
+genIFRwDataCode(4, 0x074, False, 0x04)
|
||||
+genMessageCode("--读缓冲区")
|
||||
+genIFRwDataCode(1, 0x800 + slave_sm_id * 0x1000, False, 8)
|
||||
|
||||
+genMessageCode("--延时后检查看门狗寄存器")
|
||||
+"#2000000\n"
|
||||
+genIFRwDataCode(1, 0x400, False, 0x04)
|
||||
+genIFRwDataCode(1, 0x400, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
+genIFRwDataCode(1, 0x400, False, 0x04)
|
||||
+genMessageCode("--复位数据缓冲区")
|
||||
+genIFRwDataCode(1, 0x300 + slave_sm_id * 4, True, 1, [0, ])
|
||||
+genMessageCode("--延时后检查看门狗寄存器")
|
||||
+"#2000000\n"
|
||||
+genIFRwDataCode(1, 0x400, False, 0x04)
|
||||
+genIFRwDataCode(1, 0x074, False, 0x04)
|
||||
+genTcEndFrameCode(gen_file_def))
|
||||
|
||||
genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1)
|
||||
|
||||
return gen_file_def
|
||||
|
||||
|
||||
def watchdog_test_sm_rd_no_timeout(tc_id, wd_id):
|
||||
genPkt = GenPkt()
|
||||
|
||||
gen_file_def = "watchdog_tc%02d"%(tc_id, )
|
||||
sm_idx = 0
|
||||
|
||||
slave_sm_id = int((wd_id - 1) / 2)
|
||||
tc_des = (f"使能看门狗{wd_id},监视SM{slave_sm_id},写数据到SM中,只读一半,看Watchdog是否超时。\\n"
|
||||
"清除中断后,错误消失,出问题的设备恢复正常。"
|
||||
)
|
||||
|
||||
#--------------------------------------------------------------------------
|
||||
#>>>>>> 测试用例1 看门狗测试
|
||||
genPkt.clean()
|
||||
genPkt.setPktType(0)
|
||||
|
||||
data = 1 << wd_id ##使能看门狗
|
||||
data0 = [data&0xff, (data>>8)&0xff, (data>>16)&0xff, (data>>24)&0xff]
|
||||
|
||||
data = 0x002000 ##看门狗的超时值
|
||||
data1 = [data&0xff, (data>>8)&0xff, (data>>16)&0xff, (data>>24)&0xff]
|
||||
|
||||
genPkt.addBeforeExc(genTcStartFrameCode(gen_file_def, tc_des)
|
||||
+ genIFRwDataCode(1, 0x404, True, 4, data0)
|
||||
+ genIFRwDataCode(1, 0x40C + (wd_id - 1) * 4, True, 4, data1)
|
||||
+ genIFRwDataCode(0, 0x078, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
+ genIFRwDataCode(1, 0x078, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
+ genIFRwDataCode(2, 0x078, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
+ genIFRwDataCode(3, 0x078, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
+ genIFRwDataCode(4, 0x078, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
+ genIFRwDataCode(1, 0x400, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
+ genIFRwDataCode(0, 0x074, False, 0x04)
|
||||
+ genIFRwDataCode(1, 0x074, False, 0x04)
|
||||
+ genIFRwDataCode(2, 0x074, False, 0x04)
|
||||
+ genIFRwDataCode(3, 0x074, False, 0x04)
|
||||
+ genIFRwDataCode(4, 0x074, False, 0x04)
|
||||
+ genIFRwDataCode(1, 0x400, False, 0x04)
|
||||
)
|
||||
#genPkt.addBeforeExc( genIFRwDataCode(1, 0x078, True, 4, [0xff, 0xff, 0xff, 0xff]))
|
||||
|
||||
data = [0,] * 2
|
||||
data[0] = 0x10
|
||||
data[1] = 0x00
|
||||
genPkt.addSubPkt(0x0, 0, 0x302 + slave_sm_id * 4, 0xe, 2, data)
|
||||
|
||||
data = list(range(0x10))
|
||||
|
||||
#subPkt参数:索引、索引类型、地址、命令、长度、数据
|
||||
sm_addr = slave_sm_id * 0x1000 + 0x800
|
||||
genPkt.addSubPkt(1, 0, sm_addr, 0x1, 0x10, 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)
|
||||
+genMessageCode("--检查中断寄存器")
|
||||
+genIFRwDataCode(0, 0x074, False, 0x04)
|
||||
+genIFRwDataCode(1, 0x074, False, 0x04)
|
||||
+genIFRwDataCode(2, 0x074, False, 0x04)
|
||||
+genIFRwDataCode(3, 0x074, False, 0x04)
|
||||
+genIFRwDataCode(4, 0x074, False, 0x04)
|
||||
+genMessageCode("--读缓冲区")
|
||||
+genIFRwDataCode(1, 0x800 + slave_sm_id * 0x1000, False, 0x10)
|
||||
|
||||
+genMessageCode("--延时后检查看门狗寄存器")
|
||||
+"#2000000\n"
|
||||
+genIFRwDataCode(1, 0x400, False, 0x04)
|
||||
+genIFRwDataCode(1, 0x400, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
+genIFRwDataCode(1, 0x400, False, 0x04)
|
||||
+genMessageCode("--复位数据缓冲区")
|
||||
+genIFRwDataCode(1, 0x300 + slave_sm_id * 4, True, 1, [0, ])
|
||||
+genMessageCode("--延时后检查看门狗寄存器")
|
||||
+"#2000000\n"
|
||||
+genIFRwDataCode(1, 0x400, False, 0x04)
|
||||
+genIFRwDataCode(1, 0x074, False, 0x04)
|
||||
+genTcEndFrameCode(gen_file_def))
|
||||
|
||||
genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1)
|
||||
|
||||
return gen_file_def
|
||||
|
||||
def tc1():
|
||||
return watchdog_test_sm_wr_timeout(1, 1)
|
||||
|
||||
|
||||
def tc2():
|
||||
return watchdog_test_sm_rd_timeout(2, 2)
|
||||
|
||||
def tc3():
|
||||
return watchdog_test_sm_wr_no_timeout(3, 1)
|
||||
|
||||
def tc4():
|
||||
return watchdog_test_sm_rd_no_timeout(4, 2)
|
||||
Reference in New Issue
Block a user