备份代码,几个问题:1.打印消息超过63个设备后,设备号正确,但是从0开始;2.128个设备的话,末尾的2个设备不正确,不知道为什么

This commit is contained in:
2025-09-08 01:23:14 +08:00
parent 7d7f92e2fe
commit 41d4805841
5 changed files with 312 additions and 5 deletions

View File

@@ -31,6 +31,16 @@ testShinClk_vcs:
${SIM}
python3 ./shinTest/check_testcase.py
testShinMany_vcs:
python3 ./shinTest/gen_pkt_many_dev.py
mkdir -p generated/log
rm -rf generated/log/*
@echo "Available CPUs: ${CPU_COUNT}"
${VCS} -f ./shinTest_vcs.f
${SIM}
python3 ./shinTest/check_testcase.py
sim:
${SIM}

View File

@@ -15,6 +15,9 @@ module ShinTopSpiTb(
reg clock2;
reg [15:0] multiCLK2;
reg clock3;
reg [15:0] multiCLK3;
`include "dev_predef.vh"
@@ -425,26 +428,46 @@ endgenerate
//如果频率差到-184ppm参数是 7998528/ 999816/7998528 [failed]
initial begin
forever begin #7998560 clock2 <= ~clock2; end
forever begin #7998552 clock2 <= ~clock2; end
end
generate
for( genvar i = 0; i < 16; i = i + 1 ) begin
initial begin
//相位信息
#250000
#750000
multiCLK2[i] = 0;
for( integer j = 0; j < i; j = j + 1 ) begin
#999820
#999819
;
end
forever begin #7998560 multiCLK2[i] <= ~multiCLK2[i]; end
forever begin #7998552 multiCLK2[i] <= ~multiCLK2[i]; end
end
end
endgenerate
initial begin
forever begin #7998552 clock3 <= ~clock3; end
end
generate
for( genvar i = 0; i < 16; i = i + 1 ) begin
initial begin
//相位信息
#750000
multiCLK3[i] = 0;
for( integer j = 0; j < i; j = j + 1 ) begin
#999819
;
end
forever begin #7998552 multiCLK3[i] <= ~multiCLK3[i]; end
end
end
endgenerate
initial
begin
spidata_file = $fopen("spi_trans_data.txt", "w");

140
tb/shinTest/gen_pkt_many_dev.py Executable file
View File

@@ -0,0 +1,140 @@
#!/usr/bin/env python
#encoding=utf-8
from pyutils import *
from testcase import environment, rwregs, ebmmu, errorPkt, watchdog, broadcast, sync, base, mac, manydev
if __name__ == '__main__':
environment.gen_slv_dev_num(128)
environment.bringup()
add_tc_2_runlist(manydev.tc1())
'''
add_tc_2_runlist(errorPkt.tc1())
add_tc_2_runlist(errorPkt.tc2())
add_tc_2_runlist(errorPkt.tc3())
add_tc_2_runlist(errorPkt.tc4())
add_tc_2_runlist(errorPkt.tc5())
add_tc_2_runlist(errorPkt.tc6())
add_tc_2_runlist(errorPkt.tc7())
add_tc_2_runlist(errorPkt.tc8())
add_tc_2_runlist(errorPkt.tc9())
add_tc_2_runlist(errorPkt.tc10())
add_tc_2_runlist(errorPkt.tc11())
add_tc_2_runlist(errorPkt.tc12())
add_tc_2_runlist(errorPkt.tc13())
add_tc_2_runlist(errorPkt.tc14())
add_tc_2_runlist(errorPkt.tc15())
add_tc_2_runlist(errorPkt.tc16())
add_tc_2_runlist(errorPkt.tc17())
add_tc_2_runlist(errorPkt.tc18())
add_tc_2_runlist(errorPkt.tc19())
add_tc_2_runlist(errorPkt.tc20())
add_tc_2_runlist(errorPkt.tc21())
add_tc_2_runlist(errorPkt.tc22())
add_tc_2_runlist(errorPkt.tc23())
add_tc_2_runlist(errorPkt.tc24())
add_tc_2_runlist(errorPkt.tc25())
add_tc_2_runlist(errorPkt.tc26())
add_tc_2_runlist(errorPkt.tc27())
add_tc_2_runlist(errorPkt.tc28())
add_tc_2_runlist(errorPkt.tc29())
add_tc_2_runlist(errorPkt.tc30())
add_tc_2_runlist(errorPkt.tc31())
add_tc_2_runlist(errorPkt.tc32())
add_tc_2_runlist(errorPkt.tc33())
add_tc_2_runlist(errorPkt.tc34())
add_tc_2_runlist(errorPkt.tc35())
add_tc_2_runlist(errorPkt.tc36())
add_tc_2_runlist(errorPkt.tc37())
add_tc_2_runlist(errorPkt.tc38())
#'''
'''
add_tc_2_runlist(base.tc1())
add_tc_2_runlist(base.tc2())
add_tc_2_runlist(base.tc3())
add_tc_2_runlist(base.tc4())
add_tc_2_runlist(base.tc5())
add_tc_2_runlist(base.tc6())
add_tc_2_runlist(base.tc7())
add_tc_2_runlist(base.tc8())
add_tc_2_runlist(base.tc9())
add_tc_2_runlist(base.tc10())
add_tc_2_runlist(base.tc11())
add_tc_2_runlist(base.tc12())
add_tc_2_runlist(base.tc13())
add_tc_2_runlist(base.tc14())
add_tc_2_runlist(base.tc15())
add_tc_2_runlist(base.tc16())
add_tc_2_runlist(base.tc17())
add_tc_2_runlist(base.tc18())
add_tc_2_runlist(base.tc19())
add_tc_2_runlist(base.tc20())
add_tc_2_runlist(base.tc21())
add_tc_2_runlist(base.tc22())
add_tc_2_runlist(base.tc23())
add_tc_2_runlist(base.tc24())
add_tc_2_runlist(base.tc25())
add_tc_2_runlist(base.tc26())
add_tc_2_runlist(base.tc27())
add_tc_2_runlist(base.tc28())
add_tc_2_runlist(base.tc29())
add_tc_2_runlist(base.tc30())
#'''
'''
add_tc_2_runlist(broadcast.tc1())
add_tc_2_runlist(broadcast.tc2())
add_tc_2_runlist(broadcast.tc3())
#'''
#add_tc_2_runlist(sync.tc1())
#add_tc_2_runlist(sync.tc2())
#add_tc_2_runlist(sync.tc3())
#add_tc_2_runlist(sync.tc4())
#add_tc_2_runlist(sync.tc5())
#add_tc_2_runlist(sync.tc6())
#add_tc_2_runlist(sync.tc7())
'''
add_tc_2_runlist(ebmmu.tc1())
add_tc_2_runlist(ebmmu.tc2())
add_tc_2_runlist(ebmmu.tc3())
add_tc_2_runlist(ebmmu.tc4())
add_tc_2_runlist(ebmmu.tc5())
add_tc_2_runlist(ebmmu.tc6())
add_tc_2_runlist(ebmmu.tc7())
add_tc_2_runlist(ebmmu.tc8())
add_tc_2_runlist(ebmmu.tc9())
add_tc_2_runlist(ebmmu.tc10())
add_tc_2_runlist(ebmmu.tc11())
add_tc_2_runlist(ebmmu.tc12())
add_tc_2_runlist(ebmmu.tc13())
add_tc_2_runlist(ebmmu.tc14())
add_tc_2_runlist(ebmmu.tc15())
add_tc_2_runlist(ebmmu.tc16())
add_tc_2_runlist(ebmmu.tc17())
add_tc_2_runlist(ebmmu.tc18())
add_tc_2_runlist(ebmmu.tc19())
#'''
#add_tc_2_runlist(watchdog.tc1())
#add_tc_2_runlist(watchdog.tc2())
#add_tc_2_runlist(mac.tc1())
#add_tc_2_runlist(mac.tc2())
#add_tc_2_runlist(mac.tc3())
#add_tc_2_runlist(mac.tc4())
#add_tc_2_runlist(mac.tc5())
#add_tc_2_runlist(mac.tc6())
#add_tc_2_runlist(mac.tc7())
environment.teardown()
gen_tc_runlist()

View File

@@ -7,3 +7,4 @@ from .broadcast import *
from .sync import *
from .environment import *
from .mac import *
from .manydev import *

View File

@@ -0,0 +1,133 @@
from pyutils import *
def tc1():
genPkt = GenPkt()
dev = 128
gen_file_def = "manydev_tc01"
sm_idx = 0
tc_des = f"{dev}个设备, 准备一下开发环境,发送一个广播包。\\n"
#-------------------------------------------------------------------------
#>>>>>>普通数据包 sm12个读
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
+genTcEndFrameCode(gen_file_def)
)
genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1, True, gen_file_def_ap)
return gen_file_def