Files
eb001/tb/shinTest/testcase/environment.py

317 lines
14 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from pyutils import *
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("--读取中断状态")
+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):
dout_code = "dDat_w[%d]"%(id + 1, )
din_code = "uDat_w[%d]"%(id + 1, )
if TerminateNode:
dout_code = ""
din_code = "1'b0"
code_device = ("\tShinTop s_ShinTop_slv%d(\n"%(id, )
+"\t.clock(clock),\n"
+"\t.reset(reset | isSoftReset_reg[%d]),\n\n"%(id + 1,)
+"\t.io_multiCLK_0(multiCLK[0]),\n"
+"\t.io_multiCLK_1(multiCLK[1]),\n"
+"\t.io_multiCLK_2(multiCLK[2]),\n"
+"\t.io_multiCLK_3(multiCLK[3]),\n"
+"\t.io_multiCLK_4(multiCLK[4]),\n"
+"\t.io_multiCLK_5(multiCLK[5]),\n"
+"\t.io_multiCLK_6(multiCLK[6]),\n"
+"\t.io_multiCLK_7(multiCLK[7]),\n"
+"\t.io_multiCLK_8(multiCLK[8]),\n"
+"\t.io_multiCLK_9(multiCLK[9]),\n"
+"\t.io_multiCLK_10(multiCLK[10]),\n"
+"\t.io_multiCLK_11(multiCLK[11]),\n"
+"\t.io_multiCLK_12(multiCLK[12]),\n"
+"\t.io_multiCLK_13(multiCLK[13]),\n"
+"\t.io_multiCLK_14(multiCLK[14]),\n"
+"\t.io_multiCLK_15(multiCLK[15]),\n\n"
+"\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_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(0)\n"
+"\t);\n\n\n"
)
return code_device
def __gen_slv_dev_predef(num):
code_predef =("`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 * 3)\n"
+"`define HW_SERIAL 48'h31303050584c //(48'h4c5850303031)\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 IQSPI_MISO(N) qspi_miso[`IQSPI_PINS(`N)]\n"
+"`define EQSPI_MISO(N) qspi_miso[`EQSPI_PINS(`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 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"
)
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\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_predef + code_qspi_mux_init + code_spi_mux_init
genPkt.addAfterExc(code)
genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1)
def gen_slv_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 teardown():
#add_tc_2_runlist("")
pass