From 41d4805841127e6a9a646b9f1f250d19942f8055 Mon Sep 17 00:00:00 2001 From: bacon Date: Mon, 8 Sep 2025 01:23:14 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=87=E4=BB=BD=E4=BB=A3=E7=A0=81=EF=BC=8C?= =?UTF-8?q?=E5=87=A0=E4=B8=AA=E9=97=AE=E9=A2=98=EF=BC=9A1.=E6=89=93?= =?UTF-8?q?=E5=8D=B0=E6=B6=88=E6=81=AF=E8=B6=85=E8=BF=8763=E4=B8=AA?= =?UTF-8?q?=E8=AE=BE=E5=A4=87=E5=90=8E=EF=BC=8C=E8=AE=BE=E5=A4=87=E5=8F=B7?= =?UTF-8?q?=E6=AD=A3=E7=A1=AE=EF=BC=8C=E4=BD=86=E6=98=AF=E4=BB=8E0?= =?UTF-8?q?=E5=BC=80=E5=A7=8B=EF=BC=9B2.128=E4=B8=AA=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E7=9A=84=E8=AF=9D=EF=BC=8C=E6=9C=AB=E5=B0=BE=E7=9A=842?= =?UTF-8?q?=E4=B8=AA=E8=AE=BE=E5=A4=87=E4=B8=8D=E6=AD=A3=E7=A1=AE=EF=BC=8C?= =?UTF-8?q?=E4=B8=8D=E7=9F=A5=E9=81=93=E4=B8=BA=E4=BB=80=E4=B9=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tb/shinTest/Makefile_vcs | 10 +++ tb/shinTest/ShinTopSpiTb_clk.v | 31 ++++++- tb/shinTest/gen_pkt_many_dev.py | 140 +++++++++++++++++++++++++++++++ tb/shinTest/testcase/__init__.py | 3 +- tb/shinTest/testcase/manydev.py | 133 +++++++++++++++++++++++++++++ 5 files changed, 312 insertions(+), 5 deletions(-) create mode 100755 tb/shinTest/gen_pkt_many_dev.py create mode 100644 tb/shinTest/testcase/manydev.py diff --git a/tb/shinTest/Makefile_vcs b/tb/shinTest/Makefile_vcs index af94fd0..642c3ed 100644 --- a/tb/shinTest/Makefile_vcs +++ b/tb/shinTest/Makefile_vcs @@ -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} diff --git a/tb/shinTest/ShinTopSpiTb_clk.v b/tb/shinTest/ShinTopSpiTb_clk.v index 032c328..e0ac1d3 100644 --- a/tb/shinTest/ShinTopSpiTb_clk.v +++ b/tb/shinTest/ShinTopSpiTb_clk.v @@ -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"); diff --git a/tb/shinTest/gen_pkt_many_dev.py b/tb/shinTest/gen_pkt_many_dev.py new file mode 100755 index 0000000..7347e1b --- /dev/null +++ b/tb/shinTest/gen_pkt_many_dev.py @@ -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() + diff --git a/tb/shinTest/testcase/__init__.py b/tb/shinTest/testcase/__init__.py index 2b1d041..5d86723 100644 --- a/tb/shinTest/testcase/__init__.py +++ b/tb/shinTest/testcase/__init__.py @@ -6,4 +6,5 @@ from .watchdog import * from .broadcast import * from .sync import * from .environment import * -from .mac import * \ No newline at end of file +from .mac import * +from .manydev import * diff --git a/tb/shinTest/testcase/manydev.py b/tb/shinTest/testcase/manydev.py new file mode 100644 index 0000000..93c9855 --- /dev/null +++ b/tb/shinTest/testcase/manydev.py @@ -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" + + + #------------------------------------------------------------------------- + #>>>>>>普通数据包 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 + + +genTcEndFrameCode(gen_file_def) + ) + genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1, True, gen_file_def_ap) + + + return gen_file_def \ No newline at end of file