2025-08-02 15:59:42 +08:00
|
|
|
|
from pyutils import *
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-09-08 13:12:18 +08:00
|
|
|
|
global_dev_num = 4
|
2025-08-02 15:59:42 +08:00
|
|
|
|
|
|
|
|
|
|
def bringup():
|
|
|
|
|
|
gen_file_def = "sys_bringup"
|
|
|
|
|
|
sm_idx = 0
|
2025-08-04 00:42:41 +08:00
|
|
|
|
tc_des = "系统环境建立,包括:1.配置主从栈的角色;2.网络建立,嗅探、设置顺序地址、嗅探;3.配置中断。\\n" \
|
|
|
|
|
|
+ "\\n注意:网络建立第一次嗅探包发送主要是为了建立拓扑,每个从站都知道了自己的邻居状况;发送顺序地址,\\n"\
|
|
|
|
|
|
+ "则是让每个从站拥有合适的地址。第二次发送嗅探包非必要,主要是用于更新从站的邻居信息。"
|
2025-08-02 15:59:42 +08:00
|
|
|
|
|
|
|
|
|
|
genPkt = GenPkt()
|
|
|
|
|
|
|
|
|
|
|
|
genPkt.clean()
|
|
|
|
|
|
|
2025-08-07 15:41:16 +08:00
|
|
|
|
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])
|
|
|
|
|
|
)
|
2025-08-02 15:59:42 +08:00
|
|
|
|
|
|
|
|
|
|
main_dev = [0x01, ]
|
|
|
|
|
|
slave_dev =[0x02, ]
|
2025-08-03 00:26:46 +08:00
|
|
|
|
genPkt.addAfterExc(genMessageCode("--设置主站,协议栈工作在主站模式")
|
|
|
|
|
|
+genIFRwDataCode(0, 0x0, True, 1, main_dev)
|
2025-08-02 15:59:42 +08:00
|
|
|
|
+"#5000\n"
|
2025-08-03 00:26:46 +08:00
|
|
|
|
+genMessageCode("--设置从站,协议栈工作在从站模式")
|
2025-08-02 15:59:42 +08:00
|
|
|
|
+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)
|
2025-08-03 00:26:46 +08:00
|
|
|
|
+genMessageCode("--读取寄存器,检查相关的配置")
|
|
|
|
|
|
+genIFRwDataCode(0, 0x0, False, 1)
|
2025-08-02 15:59:42 +08:00
|
|
|
|
+genIFRwDataCode(1, 0x0, False, 1)
|
|
|
|
|
|
+genIFRwDataCode(2, 0x0, False, 1)
|
|
|
|
|
|
+genIFRwDataCode(3, 0x0, False, 1)
|
|
|
|
|
|
+genIFRwDataCode(4, 0x0, False, 1)
|
2025-09-05 09:30:47 +08:00
|
|
|
|
|
|
|
|
|
|
+genMessageCode("--使能中断")
|
2025-09-05 11:22:56 +08:00
|
|
|
|
+genIFRwDataCode(0, 0x70, True, 4, [0x03, 0x00, 0x00, 0xf0])
|
2025-09-05 09:30:47 +08:00
|
|
|
|
+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("--设置中断为脉冲模式")
|
2025-09-05 11:22:56 +08:00
|
|
|
|
+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])
|
2025-08-02 15:59:42 +08:00
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1)
|
2025-08-03 00:26:46 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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)
|
2025-09-04 06:50:15 +08:00
|
|
|
|
|
|
|
|
|
|
+genMessageCode("--清除主中断")
|
|
|
|
|
|
+genIFRwDataCode(0, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff])
|
2025-08-03 00:26:46 +08:00
|
|
|
|
)
|
|
|
|
|
|
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)
|
2025-09-04 06:50:15 +08:00
|
|
|
|
|
|
|
|
|
|
+genMessageCode("--清除主中断")
|
|
|
|
|
|
+genIFRwDataCode(0, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff])
|
2025-08-03 00:26:46 +08:00
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
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("--设置环境,进行第二次嗅探"))
|
|
|
|
|
|
|
2025-08-04 11:38:40 +08:00
|
|
|
|
|
2025-08-03 00:26:46 +08:00
|
|
|
|
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)
|
2025-08-03 18:10:55 +08:00
|
|
|
|
|
2025-08-03 00:26:46 +08:00
|
|
|
|
+genMessageCode("--嗅探后检查链路状态寄存器")
|
|
|
|
|
|
+genIFRwDataCode(1, 0xc0, False, 4)
|
|
|
|
|
|
+genIFRwDataCode(2, 0xc0, False, 4)
|
|
|
|
|
|
+genIFRwDataCode(3, 0xc0, False, 4)
|
|
|
|
|
|
+genIFRwDataCode(4, 0xc0, False, 4)
|
2025-08-03 18:10:55 +08:00
|
|
|
|
|
|
|
|
|
|
+genMessageCode("--清除中断")
|
2025-08-26 17:35:30 +08:00
|
|
|
|
+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])
|
2025-08-03 18:10:55 +08:00
|
|
|
|
|
|
|
|
|
|
+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("--清除中断")
|
2025-08-26 17:35:30 +08:00
|
|
|
|
+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])
|
2025-08-03 18:10:55 +08:00
|
|
|
|
|
|
|
|
|
|
+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)
|
2025-08-05 17:28:16 +08:00
|
|
|
|
|
|
|
|
|
|
+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)
|
2025-08-03 18:10:55 +08:00
|
|
|
|
|
2025-08-28 09:59:15 +08:00
|
|
|
|
#+genIFRwDataCode(1, 0x0044, True, 4, [0x12, 0x34, 0x56, 0x78])
|
|
|
|
|
|
#+genIFRwDataCode(1, 0x0044, False, 4)
|
|
|
|
|
|
|
2025-08-03 00:26:46 +08:00
|
|
|
|
+genTcEndFrameCode(gen_file_def)
|
|
|
|
|
|
)
|
|
|
|
|
|
genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1, True, gen_file_def_ap)
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-08-02 15:59:42 +08:00
|
|
|
|
add_tc_2_runlist(gen_file_def)
|
|
|
|
|
|
|
2025-08-29 16:45:11 +08:00
|
|
|
|
def __GenDevice(id, TerminateNode = False, diffclk = False):
|
2025-08-25 00:32:52 +08:00
|
|
|
|
dout_code = "dDat_w[%d]"%(id + 1, )
|
|
|
|
|
|
din_code = "uDat_w[%d]"%(id + 1, )
|
|
|
|
|
|
if TerminateNode:
|
|
|
|
|
|
dout_code = ""
|
|
|
|
|
|
din_code = "1'b0"
|
|
|
|
|
|
|
2025-08-29 16:45:11 +08:00
|
|
|
|
clk = "multiCLK[0]"
|
|
|
|
|
|
multiclk = "multiCLK"
|
|
|
|
|
|
if diffclk:
|
|
|
|
|
|
clk = "multiCLK2[0]"
|
|
|
|
|
|
multiclk = "multiCLK2"
|
|
|
|
|
|
|
2025-08-25 00:32:52 +08:00
|
|
|
|
code_device = ("\tShinTop s_ShinTop_slv%d(\n"%(id, )
|
2025-09-07 07:37:34 +08:00
|
|
|
|
+"\t.clock(%s),\n"%(clk, )
|
2025-09-03 16:21:37 +08:00
|
|
|
|
+"\t.reset(reset | isSoftReset_reg[%d]),\n\n"%(id + 1,)
|
2025-08-02 15:59:42 +08:00
|
|
|
|
|
2025-08-29 16:45:11 +08:00
|
|
|
|
+"\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, )
|
2025-08-02 15:59:42 +08:00
|
|
|
|
|
2025-08-25 00:32:52 +08:00
|
|
|
|
+"\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"
|
2025-09-07 07:37:34 +08:00
|
|
|
|
+"\t.io_uniCode(64'h0)\n"
|
2025-08-25 00:32:52 +08:00
|
|
|
|
+"\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"
|
|
|
|
|
|
|
2025-09-03 00:23:32 +08:00
|
|
|
|
+"`define HW_SERIAL 48'h31303050584c //(48'h4c5850303031)\n"
|
2025-09-06 20:25:56 +08:00
|
|
|
|
+"`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"
|
2025-08-25 00:32:52 +08:00
|
|
|
|
|
2025-09-06 20:25:56 +08:00
|
|
|
|
+"`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"
|
2025-08-25 00:32:52 +08:00
|
|
|
|
|
2025-09-06 20:25:56 +08:00
|
|
|
|
+"`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"
|
2025-08-25 00:32:52 +08:00
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
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)
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-09-08 13:12:18 +08:00
|
|
|
|
def get_slv_dev_num():
|
|
|
|
|
|
global global_dev_num
|
|
|
|
|
|
|
|
|
|
|
|
return global_dev_num
|
|
|
|
|
|
|
2025-08-25 00:32:52 +08:00
|
|
|
|
def gen_slv_dev_num(num):
|
2025-09-08 13:12:18 +08:00
|
|
|
|
global global_dev_num
|
|
|
|
|
|
|
|
|
|
|
|
global_dev_num = num
|
|
|
|
|
|
|
2025-08-25 00:32:52 +08:00
|
|
|
|
__gen_slv_dev_predef(num)
|
|
|
|
|
|
|
|
|
|
|
|
genPkt = GenPkt()
|
|
|
|
|
|
|
|
|
|
|
|
genPkt.clean()
|
|
|
|
|
|
|
|
|
|
|
|
gen_file_def = "slave_dev_def"
|
|
|
|
|
|
|
2025-09-06 15:51:04 +08:00
|
|
|
|
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"
|
|
|
|
|
|
|
2025-08-25 00:32:52 +08:00
|
|
|
|
code = ""
|
|
|
|
|
|
for id in range(num - 1):
|
2025-08-29 16:45:11 +08:00
|
|
|
|
if id == 1:
|
|
|
|
|
|
code = code + __GenDevice(id, diffclk = True)
|
|
|
|
|
|
else:
|
|
|
|
|
|
code = code + __GenDevice(id)
|
|
|
|
|
|
|
2025-08-25 00:32:52 +08:00
|
|
|
|
code = code + __GenDevice(num - 1, True)
|
|
|
|
|
|
|
|
|
|
|
|
genPkt.addAfterExc(code)
|
|
|
|
|
|
|
|
|
|
|
|
genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-08-02 15:59:42 +08:00
|
|
|
|
def teardown():
|
|
|
|
|
|
#add_tc_2_runlist("")
|
|
|
|
|
|
pass
|