优化信号线命名negedge_sck

This commit is contained in:
Ruige Lee (WSL)
2025-10-01 08:41:43 +08:00
parent 8f564c0146
commit 21bc57e9a7
49 changed files with 21791 additions and 21789 deletions

View File

@@ -1,83 +1,83 @@
.PHONY:com sim clean
OUTPUT = shin_test
CPU_COUNT := $(shell nproc)
SPI_TYPE ?= -spi 0
TRANS_CODE ?=
DEVCLK ?= --dev1 0 90 --dev2 0 -88
CDR_TYPE ?= -cdr 0
VCS = vcs -sverilog +v2k -timescale=1ns/1ps \
-full64 \
-o ${OUTPUT} \
-l compile.log \
-debug_access+none \
+define+VCS_COMPILE \
-fastpartcomp=j${CPU_COUNT} \
SIM = ./${OUTPUT} -l run.log
testShin_vcs:
python3 ./shinTest/gen_pkt.py ${SPI_TYPE} ${TRANS_CODE}
mkdir -p generated/log
rm -rf generated/log/*
@echo "Available CPUs: ${CPU_COUNT}"
${VCS} -f ./shinTest_vcs.f 1>vcs_compile.log 2>&1
${SIM}
python3 ./shinTest/check_testcase.py
testShinClk_vcs:
python3 ./shinTest/gen_pkt_clk.py ${DEVCLK} ${SPI_TYPE} ${TRANS_CODE} ${CDR_TYPE}
mkdir -p generated/log
rm -rf generated/log/*
${VCS} -f ./shinTestClk_vcs.f 1>vcs_compile.log 2>&1
${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}
testShin:
./shinTest/gen_pkt.py ${SPI_TYPE} ${TRANS_CODE}
mkdir -p generated/log
rm -rf generated/log/*
iverilog -Wall \
-o ./generated/shinTest.iverilog \
-y ./generated/shin \
-I ./generated/shin \
-D RANDOMIZE_REG_INIT \
./shinTest/ShinTopSpiTb.v
vvp -N ./generated/shinTest.iverilog -lxt2 -fst || true
./shinTest/check_testcase.py
testShinClk:
./shinTest/gen_pkt_clk.py ${DEVCLK} ${SPI_TYPE} ${TRANS_CODE} ${CDR_TYPE}
mkdir -p generated/log
rm -rf generated/log/*
iverilog -Wall \
-o ./generated/shinTest_clk.iverilog \
-y ./generated/shin \
-I ./generated/shin \
-D RANDOMIZE_REG_INIT \
./shinTest/ShinTopSpiTb_clk.v
vvp -N ./generated/shinTest_clk.iverilog -lxt2 -fst|| true
./shinTest/check_testcase.py
fstShin:
gtkwave ./generated/wave.fst 1>/dev/null 2>&1 &
fstShinClk:
gtkwave ./generated/wave_clk.fst 1>/dev/null 2>&1 &
clean:
rm -rf ./generated/log/* ./generated/shin/*.vh ./generated/shinTest.* ./generated/wave*.* ./generated/spi_trans*.*
.PHONY:com sim clean
OUTPUT = shin_test
CPU_COUNT := $(shell nproc)
SPI_TYPE ?= -spi 0
TRANS_CODE ?=
DEVCLK ?= --dev1 0 90 --dev2 0 -88
CDR_TYPE ?= -cdr 0
VCS = vcs -sverilog +v2k -timescale=1ns/1ps \
-full64 \
-o ${OUTPUT} \
-l compile.log \
-debug_access+none \
+define+VCS_COMPILE \
-fastpartcomp=j${CPU_COUNT} \
SIM = ./${OUTPUT} -l run.log
testShin_vcs:
python3 ./shinTest/gen_pkt.py ${SPI_TYPE} ${TRANS_CODE}
mkdir -p generated/log
rm -rf generated/log/*
@echo "Available CPUs: ${CPU_COUNT}"
${VCS} -f ./shinTest_vcs.f 1>vcs_compile.log 2>&1
${SIM}
python3 ./shinTest/check_testcase.py
testShinClk_vcs:
python3 ./shinTest/gen_pkt_clk.py ${DEVCLK} ${SPI_TYPE} ${TRANS_CODE} ${CDR_TYPE}
mkdir -p generated/log
rm -rf generated/log/*
${VCS} -f ./shinTestClk_vcs.f 1>vcs_compile.log 2>&1
${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}
testShin:
./shinTest/gen_pkt.py ${SPI_TYPE} ${TRANS_CODE}
mkdir -p generated/log
rm -rf generated/log/*
iverilog -Wall \
-o ./generated/shinTest.iverilog \
-y ./generated/shin \
-I ./generated/shin \
-D RANDOMIZE_REG_INIT \
./shinTest/ShinTopSpiTb.v
vvp -N ./generated/shinTest.iverilog -lxt2 -fst || true
./shinTest/check_testcase.py
testShinClk:
./shinTest/gen_pkt_clk.py ${DEVCLK} ${SPI_TYPE} ${TRANS_CODE} ${CDR_TYPE}
mkdir -p generated/log
rm -rf generated/log/*
iverilog -Wall \
-o ./generated/shinTest_clk.iverilog \
-y ./generated/shin \
-I ./generated/shin \
-D RANDOMIZE_REG_INIT \
./shinTest/ShinTopSpiTb_clk.v
vvp -N ./generated/shinTest_clk.iverilog -lxt2 -fst|| true
./shinTest/check_testcase.py
fstShin:
gtkwave ./generated/wave.fst 1>/dev/null 2>&1 &
fstShinClk:
gtkwave ./generated/wave_clk.fst 1>/dev/null 2>&1 &
clean:
rm -rf ./generated/log/* ./generated/shin/*.vh ./generated/shinTest.* ./generated/wave*.* ./generated/spi_trans*.*

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,101 +1,101 @@
`timescale 1 ns / 1 ps
module SimCDRTb(
);
reg clock = 0;
reg reset = 0;
reg [15:0] multiCLK;
initial begin
clock = 0;
reset = 1;
#100
reset <= 1;
#240
reset <= 0;
end
initial begin
forever begin #8000000 clock <= ~clock; end
end
/*
generate
for( genvar i = 0; i < 16; i = i + 1 ) begin
initial begin
multiCLK[i] = 0;
for( integer j = 0; j < i; j = j + 1 ) begin
#1000176
;
end
forever begin #8001408 multiCLK[i] <= ~multiCLK[i]; end
end
end
endgenerate
*/
`include "simCdrClk.vh"
reg [7:0] data;
wire success;
wire failed;
integer seed = 606;
always @(posedge clock) begin
data <= $random(seed);
end
SimCDR s_SimCDR(
.clock(clock),
.reset(reset),
.io_data(data),
.io_multiCLK_0(multiCLK[0]),
.io_multiCLK_1(multiCLK[1]),
.io_multiCLK_2(multiCLK[2]),
.io_multiCLK_3(multiCLK[3]),
.io_multiCLK_4(multiCLK[4]),
.io_multiCLK_5(multiCLK[5]),
.io_multiCLK_6(multiCLK[6]),
.io_multiCLK_7(multiCLK[7]),
.io_multiCLK_8(multiCLK[8]),
.io_multiCLK_9(multiCLK[9]),
.io_multiCLK_10(multiCLK[10]),
.io_multiCLK_11(multiCLK[11]),
.io_multiCLK_12(multiCLK[12]),
.io_multiCLK_13(multiCLK[13]),
.io_multiCLK_14(multiCLK[14]),
.io_multiCLK_15(multiCLK[15]),
.io_flush(1'b0),
.io_isSuccess(success),
.io_isFailed(failed)
);
initial
begin
$dumpfile("./tb/build/wave_cdr.vcd"); //生成的vcd文件名称
$dumpvars(0, SimCDRTb);//tb模块名称
end
always @(posedge clock) begin
if (success) begin
$display("Success onces! \n");
end
if (failed) begin
$display("Error! \n");
$stop;
end
end
endmodule
`timescale 1 ns / 1 ps
module SimCDRTb(
);
reg clock = 0;
reg reset = 0;
reg [15:0] multiCLK;
initial begin
clock = 0;
reset = 1;
#100
reset <= 1;
#240
reset <= 0;
end
initial begin
forever begin #8000000 clock <= ~clock; end
end
/*
generate
for( genvar i = 0; i < 16; i = i + 1 ) begin
initial begin
multiCLK[i] = 0;
for( integer j = 0; j < i; j = j + 1 ) begin
#1000176
;
end
forever begin #8001408 multiCLK[i] <= ~multiCLK[i]; end
end
end
endgenerate
*/
`include "simCdrClk.vh"
reg [7:0] data;
wire success;
wire failed;
integer seed = 606;
always @(posedge clock) begin
data <= $random(seed);
end
SimCDR s_SimCDR(
.clock(clock),
.reset(reset),
.io_data(data),
.io_multiCLK_0(multiCLK[0]),
.io_multiCLK_1(multiCLK[1]),
.io_multiCLK_2(multiCLK[2]),
.io_multiCLK_3(multiCLK[3]),
.io_multiCLK_4(multiCLK[4]),
.io_multiCLK_5(multiCLK[5]),
.io_multiCLK_6(multiCLK[6]),
.io_multiCLK_7(multiCLK[7]),
.io_multiCLK_8(multiCLK[8]),
.io_multiCLK_9(multiCLK[9]),
.io_multiCLK_10(multiCLK[10]),
.io_multiCLK_11(multiCLK[11]),
.io_multiCLK_12(multiCLK[12]),
.io_multiCLK_13(multiCLK[13]),
.io_multiCLK_14(multiCLK[14]),
.io_multiCLK_15(multiCLK[15]),
.io_flush(1'b0),
.io_isSuccess(success),
.io_isFailed(failed)
);
initial
begin
$dumpfile("./tb/build/wave_cdr.vcd"); //生成的vcd文件名称
$dumpvars(0, SimCDRTb);//tb模块名称
end
always @(posedge clock) begin
if (success) begin
$display("Success onces! \n");
end
if (failed) begin
$display("Error! \n");
$stop;
end
end
endmodule

View File

@@ -1,158 +1,158 @@
#!/usr/bin/env python
#encoding=utf-8
import os
def parse_value(value):
"""Parse a value with bit-width specification and return its integer representation and mask.
The mask will have 1s where the bits are valid and 0s where they are 'x'.
"""
if 'h' in value.lower():
base = 16
prefix_length = value.find('h') + 1
elif 'o' in value.lower():
base = 8
prefix_length = value.find('o') + 1
elif 'b' in value.lower():
base = 2
prefix_length = value.find('b') + 1
else:
raise ValueError(f"Invalid format for value: {value}")
# Extract the numeric part
num_str = value[prefix_length:]
# Initialize parsed value and mask
parsed_value = 0
mask = 0
# Process each character in the numeric part
#print(num_str)
for char in num_str:
if char.lower() == 'x':
mask = mask * base
parsed_value = parsed_value * base
else:
mask = (mask * base) + (base - 1)
parsed_value = (parsed_value * base) + int(char, base)
#print(value, hex(parsed_value), hex(mask))
return parsed_value, mask
def compare_files(source_file, target_file):
warning_need_recheck = 0
try:
with open(source_file, 'r') as src, open(target_file, 'r') as tgt:
source_lines = src.readlines()
target_lines = tgt.readlines()
if len(source_lines) != len(target_lines):
print(f"Error: The number of lines in {source_file} and {target_file} do not match.")
return
all_match = True
for i, (src_line, tgt_line) in enumerate(zip(source_lines, target_lines)):
src_values = src_line.strip().split()
tgt_values = tgt_line.strip().split()
if len(src_values) != len(tgt_values):
if len(src_values) != 1:
print(f"Error: Line {i+1}: The number of values in {source_file} and {target_file} do not match.")
all_match = False
continue
else:
if src_values[0].strip().lower() == 'x':
if warning_need_recheck == 0:
print(f'[\033[93mWARNING\033[0m] Ignored lines detected. This test case requires manual comparison. \n\t[\033[93mTARGET\033[0m] {target_file}\n\t[\033[93mSRC\033[0m] {source_file}')
warning_need_recheck = 1
continue
line_match = True
for j, (src_val, tgt_val) in enumerate(zip(src_values, tgt_values)):
try:
src_int, src_mask = parse_value(src_val)
tgt_int, tgt_mask = parse_value(tgt_val)
except ValueError as e:
print(f"Error: Line {i+1}, Position {j+1}: {e}")
line_match = False
all_match = False
continue
# Combine masks to determine which bits to compare
combined_mask = src_mask #& tgt_mask
# Compare only the bits that are not 'x' in either source or target
if combined_mask == 0:
#print(f"Line {i+1}, Position {j+1}: Both values contain 'x' at all positions, skipping check.")
continue
masked_src = src_int & combined_mask
masked_tgt = tgt_int & combined_mask
#print(hex(masked_src), hex(masked_tgt), hex(combined_mask))
if masked_src == masked_tgt:
#print(f"Line {i+1}, Position {j+1}: Values match ({src_val} == {tgt_val}).")
pass
else:
#print(f"\tLine {i+1}, Position {j+1}: Values differ ({src_val} != {tgt_val}).")
line_match = False
all_match = False
if line_match:
#print(f"Line {i+1}: All values on this line match.")
pass
if all_match:
#print("All lines match.")
#pass
return True
else:
#print("Some lines or positions do not match.")
#pass
return False
except FileNotFoundError as e:
print(f"Error: {e}")
except Exception as e:
print(f"An unexpected error occurred: {e}")
return False
def list_files_in_directory(directory):
try:
# 获取目录中的所有文件和子目录
files = os.listdir(directory)
# 过滤出文件(排除子目录)
files_only = [f for f in files if os.path.isfile(os.path.join(directory, f))]
return files_only
except FileNotFoundError:
print(f"Error: The directory '{directory}' does not exist.")
return []
except PermissionError:
print(f"Error: Permission denied to access the directory '{directory}'.")
return []
except Exception as e:
print(f"An unexpected error occurred: {e}")
return []
if __name__ == "__main__":
files = list_files_in_directory('generated/log')
src_files = list_files_in_directory('tb/shinTest/testcase_result')
for fi in files:
rst_f = 'generated/log/' + fi
src_f = 'tb/shinTest/testcase_result/' + fi
outmsg = f"TESTCASE: {fi}"
outmsg = outmsg + " " * (60 - len(outmsg))
if not (fi in src_files):
print(f"{outmsg}[\033[93mIGNORE\033[0m]")
continue
if compare_files(src_f, rst_f):
print(f"{outmsg}[\033[92mPASS\033[0m]")
else:
#!/usr/bin/env python
#encoding=utf-8
import os
def parse_value(value):
"""Parse a value with bit-width specification and return its integer representation and mask.
The mask will have 1s where the bits are valid and 0s where they are 'x'.
"""
if 'h' in value.lower():
base = 16
prefix_length = value.find('h') + 1
elif 'o' in value.lower():
base = 8
prefix_length = value.find('o') + 1
elif 'b' in value.lower():
base = 2
prefix_length = value.find('b') + 1
else:
raise ValueError(f"Invalid format for value: {value}")
# Extract the numeric part
num_str = value[prefix_length:]
# Initialize parsed value and mask
parsed_value = 0
mask = 0
# Process each character in the numeric part
#print(num_str)
for char in num_str:
if char.lower() == 'x':
mask = mask * base
parsed_value = parsed_value * base
else:
mask = (mask * base) + (base - 1)
parsed_value = (parsed_value * base) + int(char, base)
#print(value, hex(parsed_value), hex(mask))
return parsed_value, mask
def compare_files(source_file, target_file):
warning_need_recheck = 0
try:
with open(source_file, 'r') as src, open(target_file, 'r') as tgt:
source_lines = src.readlines()
target_lines = tgt.readlines()
if len(source_lines) != len(target_lines):
print(f"Error: The number of lines in {source_file} and {target_file} do not match.")
return
all_match = True
for i, (src_line, tgt_line) in enumerate(zip(source_lines, target_lines)):
src_values = src_line.strip().split()
tgt_values = tgt_line.strip().split()
if len(src_values) != len(tgt_values):
if len(src_values) != 1:
print(f"Error: Line {i+1}: The number of values in {source_file} and {target_file} do not match.")
all_match = False
continue
else:
if src_values[0].strip().lower() == 'x':
if warning_need_recheck == 0:
print(f'[\033[93mWARNING\033[0m] Ignored lines detected. This test case requires manual comparison. \n\t[\033[93mTARGET\033[0m] {target_file}\n\t[\033[93mSRC\033[0m] {source_file}')
warning_need_recheck = 1
continue
line_match = True
for j, (src_val, tgt_val) in enumerate(zip(src_values, tgt_values)):
try:
src_int, src_mask = parse_value(src_val)
tgt_int, tgt_mask = parse_value(tgt_val)
except ValueError as e:
print(f"Error: Line {i+1}, Position {j+1}: {e}")
line_match = False
all_match = False
continue
# Combine masks to determine which bits to compare
combined_mask = src_mask #& tgt_mask
# Compare only the bits that are not 'x' in either source or target
if combined_mask == 0:
#print(f"Line {i+1}, Position {j+1}: Both values contain 'x' at all positions, skipping check.")
continue
masked_src = src_int & combined_mask
masked_tgt = tgt_int & combined_mask
#print(hex(masked_src), hex(masked_tgt), hex(combined_mask))
if masked_src == masked_tgt:
#print(f"Line {i+1}, Position {j+1}: Values match ({src_val} == {tgt_val}).")
pass
else:
#print(f"\tLine {i+1}, Position {j+1}: Values differ ({src_val} != {tgt_val}).")
line_match = False
all_match = False
if line_match:
#print(f"Line {i+1}: All values on this line match.")
pass
if all_match:
#print("All lines match.")
#pass
return True
else:
#print("Some lines or positions do not match.")
#pass
return False
except FileNotFoundError as e:
print(f"Error: {e}")
except Exception as e:
print(f"An unexpected error occurred: {e}")
return False
def list_files_in_directory(directory):
try:
# 获取目录中的所有文件和子目录
files = os.listdir(directory)
# 过滤出文件(排除子目录)
files_only = [f for f in files if os.path.isfile(os.path.join(directory, f))]
return files_only
except FileNotFoundError:
print(f"Error: The directory '{directory}' does not exist.")
return []
except PermissionError:
print(f"Error: Permission denied to access the directory '{directory}'.")
return []
except Exception as e:
print(f"An unexpected error occurred: {e}")
return []
if __name__ == "__main__":
files = list_files_in_directory('generated/log')
src_files = list_files_in_directory('tb/shinTest/testcase_result')
for fi in files:
rst_f = 'generated/log/' + fi
src_f = 'tb/shinTest/testcase_result/' + fi
outmsg = f"TESTCASE: {fi}"
outmsg = outmsg + " " * (60 - len(outmsg))
if not (fi in src_files):
print(f"{outmsg}[\033[93mIGNORE\033[0m]")
continue
if compare_files(src_f, rst_f):
print(f"{outmsg}[\033[92mPASS\033[0m]")
else:
print(f"{outmsg}[\033[91mFAILED\033[0m]\n\t[\033[91mTARGET\033[0m] {rst_f}\n\t[\033[91mSRC\033[0m] {src_f}")

View File

@@ -1,164 +1,164 @@
#!/usr/bin/env python
#encoding=utf-8
from pyutils import *
from testcase import environment, rwregs, ebmmu, errorPkt, watchdog, broadcast, sync, base, mac
import argparse
if __name__ == '__main__':
parser = argparse.ArgumentParser()
# 可选参数
parser.add_argument("-8b10b", action="store_true", dest="use_8b10b", default=False, help="使用8b10b编码")
parser.add_argument("-spi", dest="spi_type", type=int, default=0, help="选择SPI0:ISPI;1:OSPI;2:OQSPI;3:AQSPI")
parser.add_argument("-cdr", dest="cdr_type", type=int, default=0, help="选择CDR")
# 解析参数
args = parser.parse_args()
#if args.use_8b10b:
# add_tc_2_runlist(rwregs.tc1())
#print(args.spi_type)
environment.set_spi_interface(args.spi_type)
environment.set_using_8b10b(args.use_8b10b)
environment.set_cdr_type(args.cdr_type)
environment.gen_slv_dev_num(4)
environment.bringup()
'''
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(rwregs.tc1())
add_tc_2_runlist(rwregs.tc2())
add_tc_2_runlist(rwregs.tc3())
#'''
'''
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(base.tc31())
#'''
'''
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(sync.tc8())
#'''
'''
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(watchdog.tc3())
add_tc_2_runlist(watchdog.tc4())
#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()
#!/usr/bin/env python
#encoding=utf-8
from pyutils import *
from testcase import environment, rwregs, ebmmu, errorPkt, watchdog, broadcast, sync, base, mac
import argparse
if __name__ == '__main__':
parser = argparse.ArgumentParser()
# 可选参数
parser.add_argument("-8b10b", action="store_true", dest="use_8b10b", default=False, help="使用8b10b编码")
parser.add_argument("-spi", dest="spi_type", type=int, default=0, help="选择SPI0:ISPI;1:OSPI;2:OQSPI;3:AQSPI")
parser.add_argument("-cdr", dest="cdr_type", type=int, default=0, help="选择CDR")
# 解析参数
args = parser.parse_args()
#if args.use_8b10b:
# add_tc_2_runlist(rwregs.tc1())
#print(args.spi_type)
environment.set_spi_interface(args.spi_type)
environment.set_using_8b10b(args.use_8b10b)
environment.set_cdr_type(args.cdr_type)
environment.gen_slv_dev_num(4)
environment.bringup()
'''
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(rwregs.tc1())
add_tc_2_runlist(rwregs.tc2())
add_tc_2_runlist(rwregs.tc3())
#'''
'''
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(base.tc31())
#'''
'''
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(sync.tc8())
#'''
'''
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(watchdog.tc3())
add_tc_2_runlist(watchdog.tc4())
#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

@@ -1,168 +1,168 @@
#!/usr/bin/env python
#encoding=utf-8
from pyutils import *
from testcase import environment, rwregs, ebmmu, errorPkt, watchdog, broadcast, sync, base, mac
import argparse
if __name__ == '__main__':
parser = argparse.ArgumentParser()
# 可选参数
parser.add_argument("-d1", "--dev1", nargs=2, type=int, default=[0, 0], help="相位(度)、频率偏差ppm")
parser.add_argument("-d2", "--dev2", nargs=2, type=int, default=[0, 0], help="相位(度)、频率偏差ppm")
parser.add_argument("-d3", "--dev3", nargs=2, type=int, default=[0, 0], help="相位(度)、频率偏差ppm")
parser.add_argument("-d4", "--dev4", nargs=2, type=int, default=[0, 0], help="相位(度)、频率偏差ppm")
parser.add_argument("-8b10b", action="store_true", dest="use_8b10b", default=False, help="使用8b10b编码")
parser.add_argument("-spi", dest="spi_type", type=int, default=0, help="选择SPI0:ISPI;1:OSPI;2:OQSPI;3:AQSPI")
parser.add_argument("-cdr", dest="cdr_type", type=int, default=0, help="选择CDR")
# 解析参数
args = parser.parse_args()
# 使用参数
dev_clk_info = dict()
if args.dev1 != [0, 0]:
dev_clk_info[1] = args.dev1
if args.dev2 != [0, 0]:
dev_clk_info[2] = args.dev2
if args.dev3 != [0, 0]:
dev_clk_info[3] = args.dev3
if args.dev4 != [0, 0]:
dev_clk_info[4] = args.dev4
environment.set_dev_clk(dev_clk_info)
environment.set_spi_interface(args.spi_type)
environment.set_using_8b10b(args.use_8b10b)
environment.set_cdr_type(args.cdr_type)
environment.gen_slv_dev_for_clk(4)
environment.bringup()
if args.use_8b10b:
add_tc_2_runlist(rwregs.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.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()
#!/usr/bin/env python
#encoding=utf-8
from pyutils import *
from testcase import environment, rwregs, ebmmu, errorPkt, watchdog, broadcast, sync, base, mac
import argparse
if __name__ == '__main__':
parser = argparse.ArgumentParser()
# 可选参数
parser.add_argument("-d1", "--dev1", nargs=2, type=int, default=[0, 0], help="相位(度)、频率偏差ppm")
parser.add_argument("-d2", "--dev2", nargs=2, type=int, default=[0, 0], help="相位(度)、频率偏差ppm")
parser.add_argument("-d3", "--dev3", nargs=2, type=int, default=[0, 0], help="相位(度)、频率偏差ppm")
parser.add_argument("-d4", "--dev4", nargs=2, type=int, default=[0, 0], help="相位(度)、频率偏差ppm")
parser.add_argument("-8b10b", action="store_true", dest="use_8b10b", default=False, help="使用8b10b编码")
parser.add_argument("-spi", dest="spi_type", type=int, default=0, help="选择SPI0:ISPI;1:OSPI;2:OQSPI;3:AQSPI")
parser.add_argument("-cdr", dest="cdr_type", type=int, default=0, help="选择CDR")
# 解析参数
args = parser.parse_args()
# 使用参数
dev_clk_info = dict()
if args.dev1 != [0, 0]:
dev_clk_info[1] = args.dev1
if args.dev2 != [0, 0]:
dev_clk_info[2] = args.dev2
if args.dev3 != [0, 0]:
dev_clk_info[3] = args.dev3
if args.dev4 != [0, 0]:
dev_clk_info[4] = args.dev4
environment.set_dev_clk(dev_clk_info)
environment.set_spi_interface(args.spi_type)
environment.set_using_8b10b(args.use_8b10b)
environment.set_cdr_type(args.cdr_type)
environment.gen_slv_dev_for_clk(4)
environment.bringup()
if args.use_8b10b:
add_tc_2_runlist(rwregs.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.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

@@ -1,140 +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(200)
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()
#!/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(200)
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

@@ -1,52 +1,52 @@
#!/usr/bin/env python
#encoding=utf-8
import argparse
from pyutils import *
def set_cdr_clk(v_ph, v_t):
ph = int(8 * 1000000 * (int(abs(v_ph))%360) / 360.0)
period = int(1000000 + v_t)
code_for_clk = __gen_clk(ph, period)
genPkt = GenPkt()
genPkt.clean()
gen_file_def = "simCdrClk"
genPkt.addAfterExc(code_for_clk)
genPkt.gen("./generated/SimCDR/%s.vh"%(gen_file_def, ), 1)
def __gen_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[i] = 0;\n"
+ "\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[i] <= ~multiCLK[i]; end\n"%(period * 8, )
+"\t\tend\n"
+"\tend\n"
+"\tendgenerate\n")
return slv_code
if __name__ == '__main__':
parser = argparse.ArgumentParser()
# 可选参数
parser.add_argument("-c", "--clk", nargs=2, type=int, default=[0, 0], help="相位(度)、频率偏差ppm")
args = parser.parse_args()
set_cdr_clk(args.clk[0], args.clk[1]);
#!/usr/bin/env python
#encoding=utf-8
import argparse
from pyutils import *
def set_cdr_clk(v_ph, v_t):
ph = int(8 * 1000000 * (int(abs(v_ph))%360) / 360.0)
period = int(1000000 + v_t)
code_for_clk = __gen_clk(ph, period)
genPkt = GenPkt()
genPkt.clean()
gen_file_def = "simCdrClk"
genPkt.addAfterExc(code_for_clk)
genPkt.gen("./generated/SimCDR/%s.vh"%(gen_file_def, ), 1)
def __gen_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[i] = 0;\n"
+ "\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[i] <= ~multiCLK[i]; end\n"%(period * 8, )
+"\t\tend\n"
+"\tend\n"
+"\tendgenerate\n")
return slv_code
if __name__ == '__main__':
parser = argparse.ArgumentParser()
# 可选参数
parser.add_argument("-c", "--clk", nargs=2, type=int, default=[0, 0], help="相位(度)、频率偏差ppm")
args = parser.parse_args()
set_cdr_clk(args.clk[0], args.clk[1]);

View File

@@ -1,411 +1,411 @@
#!/usr/bin/env python
#encoding=utf-8
import copy
import random
class GenPkt(object):
def __init__(self):
super(GenPkt, self).__init__()
self.pkt_buf = list() #bytearray(b'\0' * 2048)
self.pkt_type = 0
self.pkt_sub_pkt = 0
self.sub_pkt = list()
self.pkt_data = None
def clean(self):
self.pkt_buf = list() #bytearray(b'\0' * 2048)
self.pkt_type = 0
self.pkt_sub_pkt = 0
self.sub_pkt = list()
self.pkt_data = None
def setPktType(self, type):
if (type != 0) and (type != 1):
print('Error...set type failed:', type)
else:
self.pkt_type = type
def setPkt(self, type, data = None):
if (type != 0) and (type != 1):
if type == 2:
self.pkt_type = 2
self.pkt_data = copy.copy(data)
else:
print('Error...set type failed:', type)
else:
self.pkt_type = type
def addBeforeExc(self, str):
self.sub_pkt.append([1, str])
def addAfterExc(self, str):
self.sub_pkt.append([2, str])
def addSubPkt(self, dev_idx, ptype, addr, cmd, len, data):
if (len > 2032):
print('Error, bad subpkt len:%d', len)
return
if not (ptype in [0, 2]):
print('Error, bad subpkt type:', ptype)
return
if not (cmd in [0, 1, 2, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf]):
print('Error, bad cmd:', cmd)
return
self.pkt_sub_pkt = self.pkt_sub_pkt + 1
self.sub_pkt.append([0, dev_idx, ptype, addr, cmd, len, data])
def gen(self, filename="pkt_verilog_test.v", filetype=0, appendgen=False, gen_name=None):
gen_pkt_type = 0
pkt_len = 4
for sp in self.sub_pkt:
if sp[0] != 0:
pass
else:
pkt_len = pkt_len + sp[5] + 8
if pkt_len > 2044:
print('Error, bad pkt_len:', pkt_len)
return
i = 4
if (self.pkt_type == 1):
pkt_len = 4
'''
self.pkt_buf[0] = 0
self.pkt_buf[1] = (self.pkt_type & 0x3)
self.pkt_buf[2] = 0x3f
self.pkt_buf[3] = 0xff
'''
self.pkt_buf.append(0)
self.pkt_buf.append(self.pkt_type & 0x3)
self.pkt_buf.append(0x3f)
self.pkt_buf.append(0xff)
gen_pkt_type = 1
elif (self.pkt_type == 2):
pkt_len = len(self.pkt_data)
for d in self.pkt_data:
self.pkt_buf.append(d)
i = pkt_len
gen_pkt_type = 2
#print("-----------------------------", filename, self.pkt_type, pkt_len, self.pkt_buf)
else:
#for i in range(pkt_len):
'''
self.pkt_buf[0] = ((pkt_len - 4) >> 4) & 0xff
self.pkt_buf[1] = (((pkt_len - 4) << 4) & 0xf0) | (self.pkt_type & 0x3)
self.pkt_buf[2] = 0
self.pkt_buf[3] = 0
'''
self.pkt_buf.append(((pkt_len - 4) >> 4) & 0xff)
self.pkt_buf.append((((pkt_len - 4) << 4) & 0xf0) | (self.pkt_type & 0x3))
self.pkt_buf.append(0)
self.pkt_buf.append(0)
for sp in self.sub_pkt:
if sp[0] != 0:
pass
#elif sp[0] == 0:
else:
gen_pkt_type = 3
#设备索引(14bit)+类型(2bit)
temp = ((sp[1] & 0x3fff) << 2) | (sp[2] & 0x3)
#self.pkt_buf[i] = (temp >> 8) & 0xff
self.pkt_buf.append((temp >> 8) & 0xff)
i = i + 1
#self.pkt_buf[i] = temp & 0xff
self.pkt_buf.append(temp & 0xff)
i = i + 1
#地址
#self.pkt_buf[i] = (sp[3] >> 8) & 0xff
self.pkt_buf.append((sp[3] >> 8) & 0xff)
i = i + 1
#self.pkt_buf[i] = sp[3] & 0xff
self.pkt_buf.append(sp[3] & 0xff)
i = i + 1
#命令类型(4bit)+长度(12bit)
temp = (sp[4] << 12) | (sp[5] & 0xfff)
#self.pkt_buf[i] = (temp >> 8) & 0xff
self.pkt_buf.append((temp >> 8) & 0xff)
i = i + 1
#self.pkt_buf[i] = temp & 0xff
self.pkt_buf.append(temp & 0xff)
i = i + 1
#数据
if sp[6] == None:
#for _k in range(sp[5]):
# #self.pkt_buf[_k + i] = random.randint(0, 255)
# self.pkt_buf.append(random.randint(0, 255))
temp = list(range(sp[5]))
temp = [(i & 0xff) for i in temp]
self.pkt_buf = self.pkt_buf + temp
else:
for _k in range(sp[5]):
#self.pkt_buf[_k + i] = sp[6][_k]
self.pkt_buf.append(sp[6][_k])
i = i + sp[5]
#工作计数
#self.pkt_buf[i] = 0
self.pkt_buf.append(0)
i = i + 1
#self.pkt_buf[i] = 0
self.pkt_buf.append(0)
i = i + 1
#print("pkt_len:%d, data_len:%d"%(pkt_len, pkt_len - 4))
open_mode = "wt+"
if appendgen:
open_mode = "at"
f = open(filename, open_mode)
if filetype == 1:
for md in self.sub_pkt:
if md[0] == 1:
f.write("%s\n"%(md[1],))
define_str = "`define DEF_"
if appendgen and (gen_name == None):
print("Error, gen_name not define.")
raise "Error, gen_name not define."
if not appendgen:
pos1 = filename.rfind("/")
if (pos1 < -1):
pos1 = 0
else:
pos1 = pos1 + 1
pos2 = filename.rfind(".")
if (pos1 > pos2):
define_str = define_str + filename[pos1:]
else:
define_str = define_str + filename[pos1:pos2]
else:
define_str = define_str + gen_name
if gen_pkt_type != 0:
f.write(define_str + "_len \t%d\n"%(pkt_len))
f.write(define_str + "_sm(array) \\\n\tarray``[`ARRAY_IDX_OFF + %d]=8'h%02X;\\\n\tarray``[`ARRAY_IDX_OFF + %d]=8'h%02X;\n"%(
0, pkt_len & 0xff,
1, pkt_len >> 8
))
f.write(define_str + "(array) \\\n")
for _k in range(i):
if _k < (i - 1):
if type(self.pkt_buf[_k]) == int:
f.write("\tarray``[`ARRAY_IDX_OFF + %d]=8'h%02X;\\\n"%(_k, self.pkt_buf[_k]))
else:
f.write("\tarray``[`ARRAY_IDX_OFF + %d]=%s;\\\n"%(_k, self.pkt_buf[_k]))
else:
if type(self.pkt_buf[_k]) == int:
f.write("\tarray``[`ARRAY_IDX_OFF + %d]=8'h%02X;\n"%(_k, self.pkt_buf[_k]))
else:
f.write("\tarray``[`ARRAY_IDX_OFF + %d]=%s;\n"%(_k, self.pkt_buf[_k]))
for md in self.sub_pkt:
if md[0] == 2:
f.write("%s\n"%(md[1],))
else:
for _k in range(i):
f.write("txBuf[`ARRAY_IDX_OFF + %d]=8'h%02X;\n"%(_k, self.pkt_buf[_k]))
f.close()
def genWriteTransLenCode(gen_name, sm_idx, wlog=True, dev_idx=0):
return '''\n//写入发送长度\n'''\
+ '''$fdisplay(spidata_file, "--写数据交换长度");\n'''\
+ '''`DEF_%s_sm(txBuf);\n'''%(gen_name, )\
+ '''%s( (`MST_TX%d_LEN_ADDR), (`SPI_WRITE), (2), (`IF_IDX(%d)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans", sm_idx, dev_idx)\
+ '''%s( (`MST_RX%d_LEN_ADDR), (`SPI_WRITE), (2), (`IF_IDX(%d)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans", sm_idx, dev_idx)
def genWriteTransPktCode(gen_name, sm_idx, wlog=True, dev_idx=0):
return f'''\n$fdisplay(spidata_file, "<<准备发包使用SM{sm_idx}");\n'''\
+ '''`DEF_%s(txBuf);\n'''%(gen_name, )\
+ '''%s( (`MST_TX%d_ADDR), (`SPI_WRITE), (`DEF_%s_len), (`IF_IDX(%d)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans", sm_idx, gen_name, dev_idx)
def genTrgTransPktCode(gen_name, sm_idx, wlog=True, dev_idx=0):
return '''\n//请求发送\n'''\
+ '''$fdisplay(spidata_file, "--请求发送");\n'''\
+ '''txBuf[`ARRAY_IDX_OFF] = `MST_TX_TRIGGER(%d);\n'''%(sm_idx, )\
+ '''%s( (16'h20), (`SPI_WRITE), (1), (`IF_IDX(%d)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans", dev_idx)
def genReadAckPktCode(gen_name, sm_idx, wlog=True, dev_idx=0):
return '''\n//等待回包\n'''\
+ '''wait_comm_finished(`IF_IDX(%d));\n'''%(dev_idx, )\
+ f'''$fdisplay(spidata_file, ">>读取回包使用SM{sm_idx}");\n'''\
+ '''%s( (`MST_RX%d_ADDR), (`SPI_READ), (`DEF_%s_len), (`IF_IDX(%d)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans", sm_idx, gen_name, dev_idx)
def genEnableInsertTimeCode(pos, enableTime=True, enableDelay=True, wlog=True, dev_idx=0):
data = pos & 0x3fff
if enableTime:
data = data | 0x8000
if enableDelay:
data = data | 0x4000
return '''//写入替换时间戳替换地址\n'''\
+ '''$fdisplay(spidata_file, "--增加时间戳插入");\n'''\
+ '''txBuf[`ARRAY_IDX_OFF + 0] = 8'h%x;\n'''%(data & 0xff, )\
+ '''txBuf[`ARRAY_IDX_OFF + 1] = 8'h%x;\n'''%((data >> 8) & 0xff, )\
+ '''%s( (16'h24), (`SPI_WRITE), (2), (`IF_IDX(%d)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans", dev_idx)
def genDisableInsertTimeCode(wlog=True, dev_idx=0):
return '''\n//清除替换时间戳替换地址\n'''\
+ '''$fdisplay(spidata_file, "--清除时间戳插入");\n'''\
+ '''txBuf[`ARRAY_IDX_OFF + 0] = 8'h00;\n'''\
+ '''txBuf[`ARRAY_IDX_OFF + 1] = 8'h00;\n'''\
+ '''%s( (16'h24), (`SPI_WRITE), (2), (`IF_IDX(%d)) ); //清除替换时间戳替换地址寄存器\n'''%("`SPI_TRANS" if wlog else "spi_trans", dev_idx)
def genCheckInsertTimeCode(wlog=True, dev_idx=0):
return '''\n//检查替换时间戳替换地址\n'''\
+ '''$fdisplay(spidata_file, "--检查时间戳插入");\n'''\
+ '''%s( (16'h24), (`SPI_READ), (2), (`IF_IDX(%d)) ); //检查替换时间戳替换地址寄存器\n'''%("`SPI_TRANS" if wlog else "spi_trans", dev_idx)
def genIFRwDataCode(dev, addr, isWrite = False, data_len=0, data = None, wlog=True, iface=4):
spi_api="IF_IDX"
spi_offset = "`ARRAY_IDX_OFF"
if iface == 0:
spi_api = "IF_IQSPI"
spi_offset = "3"
elif iface == 1:
spi_api = "IF_OSPI"
spi_offset = "3"
elif iface == 2:
spi_api = "IF_OQSPI"
spi_offset = "3"
elif iface == 3:
spi_api = "IF_AQSPI"
spi_offset = "4"
else:
spi_api = "IF_IDX"
spi_offset = "`ARRAY_IDX_OFF"
if isWrite == True:
if (data == None) or (len(data) == 0):
data=list()
code = ''
idx = 0
for item in data:
code = code + '''txBuf[%s+%d]=8'h%02x;\n'''%(spi_offset, idx, item & 0xff)
idx = idx + 1
code = code + '''%s( (16'h%04x), (`SPI_WRITE), (%d), (`%s(%d)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans", addr, data_len, spi_api, dev)
return code
else:
code = ''
code = code + '''%s( (16'h%04x), (`SPI_READ), (%d), (`%s(%d)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans", addr, data_len, spi_api, dev)
return code
def genSlvSMWriteData(dev, sm, data_len, data = None, wlog=True):
smaddr = list()
for i in range(8):
smaddr.append(0x300 + i * 4 + 2)
if not ((sm == 1) or (sm == 3) or (sm == 5) or (sm == 7)):
#写入数据lvds读这个空间是lvds写mcu读
return ''
if data_len > 2032:
return ''
if (data != None) and (len(data) != 0) and (len(data) < data_len):
return ''
if (data == None) or (len(data) == 0):
data = list()
for i in range(data_len):
data.append((i + dev) & 0xff)
code = '''txBuf[`ARRAY_IDX_OFF + 0] = 8'h%02x;\n'''%(data_len & 0xff, )\
+ '''txBuf[`ARRAY_IDX_OFF + 1] = 8'h%02x;\n'''%(int(data_len/256) & 0xff,)\
+ '''%s((16'h%04x), (`SPI_WRITE), (2), (`IF_IDX(%d)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans", smaddr[sm], dev)
for i in range(data_len):
code = code + '''txBuf[`ARRAY_IDX_OFF + %d] = 8'h%02x;\n'''%(i, data[i])
code = code + '''%s( (16'h%04x), (`SPI_WRITE), (%d), (`IF_IDX(%d)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans", 0x800 + sm * 2048, data_len, dev)
return code
def genSlvSMReadData(dev, sm, data_len, wlog=True):
if not ((sm == 0) or (sm == 2) or (sm == 4) or (sm == 6)):
#写入数据lvds读这个空间是lvds写mcu读
return ''
if data_len > 2032:
return ''
code = f'''$fdisplay(spidata_file, "--读取设备{dev} SM{sm} 中的数据,读取长度{data_len}B");\n'''
code = code + '''%s( (16'h%04x), (`SPI_READ), (%d), (`IF_IDX(%d)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans", 0x800 + sm * 2048, data_len, dev)
return code
def setting_ebmmu_regs(regmap, index, vaddr, raddr, size, p, enable):
vaddr = int(vaddr)
raddr = int(raddr)
size = int(size)
p = int(p)
enable = int(enable)
regmap[index * 0xa + 0] = (vaddr >> 0) & 0xff
regmap[index * 0xa + 1] = (vaddr >> 8) & 0xff
regmap[index * 0xa + 2] = (vaddr >> 16) & 0xff
regmap[index * 0xa + 3] = (vaddr >> 24) & 0xff
regmap[index * 0xa + 4] = (raddr >> 0) & 0xff
regmap[index * 0xa + 5] = (raddr >> 8) & 0xff
regmap[index * 0xa + 6] = (size >> 0) & 0xff
regmap[index * 0xa + 7] = (size >> 8) & 0xff
regmap[index * 0xa + 8] = p & 0x3
regmap[index * 0xa + 9] = enable & 0x1
__run_list=list()
__pre_include_path='./generated/shin'
__pre_gen_log_path='./generated/log'
def add_tc_2_runlist(filename):
code_f = filename + '.vh'
if code_f in __run_list:
print("Error, Testcase duplicate name")
raise "DUPLICATE NAME"
__run_list.append(code_f)
def gen_tc_runlist():
runlist_file = __pre_include_path + '/tc_runlist.vh'
f = open(runlist_file, "wt+")
for tc in __run_list:
f.write(f'\t`include "{tc}"\n')
f.close()
def genTcStartFrameCode(tcname, des, vardef="\n"):
upper_name = tcname.upper()
code_str = f'''\tbegin:{upper_name}_TESTCASE\n'''\
+vardef \
+f'''\t\t`BEGIN_TESTCASE("{__pre_gen_log_path}/{tcname}_result.log");\n'''\
+'''\t\t_t_start = $realtime;\n'''\
+f'''\t\t$fdisplay(spidata_file,"\\n\\n测试用例{upper_name}");\n'''
if len(des) > 0:
code_str = code_str + '''\t\t$fdisplay(spidata_file,"''' + '-' * 80 + '''");\n'''
code_str = code_str + f'''\t\t$fdisplay(spidata_file,"{des}");\n'''
code_str = code_str + '''\t\t$fdisplay(spidata_file,"''' + '-' * 80 + '''");\n'''
return code_str
def genTcEndFrameCode(tcname):
upper_name = tcname.upper()
return f'''\t\t_t_end = $realtime;\n'''\
+'''\t\t$fdisplay(spidata_file, "该测试用例运行时间:%t\\n", _t_end - _t_start);\n'''\
+f'''\t\t`END_TESTCASE("{__pre_gen_log_path}/{tcname}_result.log");\n'''\
+'''\tend\n'''
def genMessageCode(msg):
return f'''\t\t$fdisplay(spidata_file, "{msg}");\n'''
#!/usr/bin/env python
#encoding=utf-8
import copy
import random
class GenPkt(object):
def __init__(self):
super(GenPkt, self).__init__()
self.pkt_buf = list() #bytearray(b'\0' * 2048)
self.pkt_type = 0
self.pkt_sub_pkt = 0
self.sub_pkt = list()
self.pkt_data = None
def clean(self):
self.pkt_buf = list() #bytearray(b'\0' * 2048)
self.pkt_type = 0
self.pkt_sub_pkt = 0
self.sub_pkt = list()
self.pkt_data = None
def setPktType(self, type):
if (type != 0) and (type != 1):
print('Error...set type failed:', type)
else:
self.pkt_type = type
def setPkt(self, type, data = None):
if (type != 0) and (type != 1):
if type == 2:
self.pkt_type = 2
self.pkt_data = copy.copy(data)
else:
print('Error...set type failed:', type)
else:
self.pkt_type = type
def addBeforeExc(self, str):
self.sub_pkt.append([1, str])
def addAfterExc(self, str):
self.sub_pkt.append([2, str])
def addSubPkt(self, dev_idx, ptype, addr, cmd, len, data):
if (len > 2032):
print('Error, bad subpkt len:%d', len)
return
if not (ptype in [0, 2]):
print('Error, bad subpkt type:', ptype)
return
if not (cmd in [0, 1, 2, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf]):
print('Error, bad cmd:', cmd)
return
self.pkt_sub_pkt = self.pkt_sub_pkt + 1
self.sub_pkt.append([0, dev_idx, ptype, addr, cmd, len, data])
def gen(self, filename="pkt_verilog_test.v", filetype=0, appendgen=False, gen_name=None):
gen_pkt_type = 0
pkt_len = 4
for sp in self.sub_pkt:
if sp[0] != 0:
pass
else:
pkt_len = pkt_len + sp[5] + 8
if pkt_len > 2044:
print('Error, bad pkt_len:', pkt_len)
return
i = 4
if (self.pkt_type == 1):
pkt_len = 4
'''
self.pkt_buf[0] = 0
self.pkt_buf[1] = (self.pkt_type & 0x3)
self.pkt_buf[2] = 0x3f
self.pkt_buf[3] = 0xff
'''
self.pkt_buf.append(0)
self.pkt_buf.append(self.pkt_type & 0x3)
self.pkt_buf.append(0x3f)
self.pkt_buf.append(0xff)
gen_pkt_type = 1
elif (self.pkt_type == 2):
pkt_len = len(self.pkt_data)
for d in self.pkt_data:
self.pkt_buf.append(d)
i = pkt_len
gen_pkt_type = 2
#print("-----------------------------", filename, self.pkt_type, pkt_len, self.pkt_buf)
else:
#for i in range(pkt_len):
'''
self.pkt_buf[0] = ((pkt_len - 4) >> 4) & 0xff
self.pkt_buf[1] = (((pkt_len - 4) << 4) & 0xf0) | (self.pkt_type & 0x3)
self.pkt_buf[2] = 0
self.pkt_buf[3] = 0
'''
self.pkt_buf.append(((pkt_len - 4) >> 4) & 0xff)
self.pkt_buf.append((((pkt_len - 4) << 4) & 0xf0) | (self.pkt_type & 0x3))
self.pkt_buf.append(0)
self.pkt_buf.append(0)
for sp in self.sub_pkt:
if sp[0] != 0:
pass
#elif sp[0] == 0:
else:
gen_pkt_type = 3
#设备索引(14bit)+类型(2bit)
temp = ((sp[1] & 0x3fff) << 2) | (sp[2] & 0x3)
#self.pkt_buf[i] = (temp >> 8) & 0xff
self.pkt_buf.append((temp >> 8) & 0xff)
i = i + 1
#self.pkt_buf[i] = temp & 0xff
self.pkt_buf.append(temp & 0xff)
i = i + 1
#地址
#self.pkt_buf[i] = (sp[3] >> 8) & 0xff
self.pkt_buf.append((sp[3] >> 8) & 0xff)
i = i + 1
#self.pkt_buf[i] = sp[3] & 0xff
self.pkt_buf.append(sp[3] & 0xff)
i = i + 1
#命令类型(4bit)+长度(12bit)
temp = (sp[4] << 12) | (sp[5] & 0xfff)
#self.pkt_buf[i] = (temp >> 8) & 0xff
self.pkt_buf.append((temp >> 8) & 0xff)
i = i + 1
#self.pkt_buf[i] = temp & 0xff
self.pkt_buf.append(temp & 0xff)
i = i + 1
#数据
if sp[6] == None:
#for _k in range(sp[5]):
# #self.pkt_buf[_k + i] = random.randint(0, 255)
# self.pkt_buf.append(random.randint(0, 255))
temp = list(range(sp[5]))
temp = [(i & 0xff) for i in temp]
self.pkt_buf = self.pkt_buf + temp
else:
for _k in range(sp[5]):
#self.pkt_buf[_k + i] = sp[6][_k]
self.pkt_buf.append(sp[6][_k])
i = i + sp[5]
#工作计数
#self.pkt_buf[i] = 0
self.pkt_buf.append(0)
i = i + 1
#self.pkt_buf[i] = 0
self.pkt_buf.append(0)
i = i + 1
#print("pkt_len:%d, data_len:%d"%(pkt_len, pkt_len - 4))
open_mode = "wt+"
if appendgen:
open_mode = "at"
f = open(filename, open_mode)
if filetype == 1:
for md in self.sub_pkt:
if md[0] == 1:
f.write("%s\n"%(md[1],))
define_str = "`define DEF_"
if appendgen and (gen_name == None):
print("Error, gen_name not define.")
raise "Error, gen_name not define."
if not appendgen:
pos1 = filename.rfind("/")
if (pos1 < -1):
pos1 = 0
else:
pos1 = pos1 + 1
pos2 = filename.rfind(".")
if (pos1 > pos2):
define_str = define_str + filename[pos1:]
else:
define_str = define_str + filename[pos1:pos2]
else:
define_str = define_str + gen_name
if gen_pkt_type != 0:
f.write(define_str + "_len \t%d\n"%(pkt_len))
f.write(define_str + "_sm(array) \\\n\tarray``[`ARRAY_IDX_OFF + %d]=8'h%02X;\\\n\tarray``[`ARRAY_IDX_OFF + %d]=8'h%02X;\n"%(
0, pkt_len & 0xff,
1, pkt_len >> 8
))
f.write(define_str + "(array) \\\n")
for _k in range(i):
if _k < (i - 1):
if type(self.pkt_buf[_k]) == int:
f.write("\tarray``[`ARRAY_IDX_OFF + %d]=8'h%02X;\\\n"%(_k, self.pkt_buf[_k]))
else:
f.write("\tarray``[`ARRAY_IDX_OFF + %d]=%s;\\\n"%(_k, self.pkt_buf[_k]))
else:
if type(self.pkt_buf[_k]) == int:
f.write("\tarray``[`ARRAY_IDX_OFF + %d]=8'h%02X;\n"%(_k, self.pkt_buf[_k]))
else:
f.write("\tarray``[`ARRAY_IDX_OFF + %d]=%s;\n"%(_k, self.pkt_buf[_k]))
for md in self.sub_pkt:
if md[0] == 2:
f.write("%s\n"%(md[1],))
else:
for _k in range(i):
f.write("txBuf[`ARRAY_IDX_OFF + %d]=8'h%02X;\n"%(_k, self.pkt_buf[_k]))
f.close()
def genWriteTransLenCode(gen_name, sm_idx, wlog=True, dev_idx=0):
return '''\n//写入发送长度\n'''\
+ '''$fdisplay(spidata_file, "--写数据交换长度");\n'''\
+ '''`DEF_%s_sm(txBuf);\n'''%(gen_name, )\
+ '''%s( (`MST_TX%d_LEN_ADDR), (`SPI_WRITE), (2), (`IF_IDX(%d)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans", sm_idx, dev_idx)\
+ '''%s( (`MST_RX%d_LEN_ADDR), (`SPI_WRITE), (2), (`IF_IDX(%d)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans", sm_idx, dev_idx)
def genWriteTransPktCode(gen_name, sm_idx, wlog=True, dev_idx=0):
return f'''\n$fdisplay(spidata_file, "<<准备发包使用SM{sm_idx}");\n'''\
+ '''`DEF_%s(txBuf);\n'''%(gen_name, )\
+ '''%s( (`MST_TX%d_ADDR), (`SPI_WRITE), (`DEF_%s_len), (`IF_IDX(%d)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans", sm_idx, gen_name, dev_idx)
def genTrgTransPktCode(gen_name, sm_idx, wlog=True, dev_idx=0):
return '''\n//请求发送\n'''\
+ '''$fdisplay(spidata_file, "--请求发送");\n'''\
+ '''txBuf[`ARRAY_IDX_OFF] = `MST_TX_TRIGGER(%d);\n'''%(sm_idx, )\
+ '''%s( (16'h20), (`SPI_WRITE), (1), (`IF_IDX(%d)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans", dev_idx)
def genReadAckPktCode(gen_name, sm_idx, wlog=True, dev_idx=0):
return '''\n//等待回包\n'''\
+ '''wait_comm_finished(`IF_IDX(%d));\n'''%(dev_idx, )\
+ f'''$fdisplay(spidata_file, ">>读取回包使用SM{sm_idx}");\n'''\
+ '''%s( (`MST_RX%d_ADDR), (`SPI_READ), (`DEF_%s_len), (`IF_IDX(%d)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans", sm_idx, gen_name, dev_idx)
def genEnableInsertTimeCode(pos, enableTime=True, enableDelay=True, wlog=True, dev_idx=0):
data = pos & 0x3fff
if enableTime:
data = data | 0x8000
if enableDelay:
data = data | 0x4000
return '''//写入替换时间戳替换地址\n'''\
+ '''$fdisplay(spidata_file, "--增加时间戳插入");\n'''\
+ '''txBuf[`ARRAY_IDX_OFF + 0] = 8'h%x;\n'''%(data & 0xff, )\
+ '''txBuf[`ARRAY_IDX_OFF + 1] = 8'h%x;\n'''%((data >> 8) & 0xff, )\
+ '''%s( (16'h24), (`SPI_WRITE), (2), (`IF_IDX(%d)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans", dev_idx)
def genDisableInsertTimeCode(wlog=True, dev_idx=0):
return '''\n//清除替换时间戳替换地址\n'''\
+ '''$fdisplay(spidata_file, "--清除时间戳插入");\n'''\
+ '''txBuf[`ARRAY_IDX_OFF + 0] = 8'h00;\n'''\
+ '''txBuf[`ARRAY_IDX_OFF + 1] = 8'h00;\n'''\
+ '''%s( (16'h24), (`SPI_WRITE), (2), (`IF_IDX(%d)) ); //清除替换时间戳替换地址寄存器\n'''%("`SPI_TRANS" if wlog else "spi_trans", dev_idx)
def genCheckInsertTimeCode(wlog=True, dev_idx=0):
return '''\n//检查替换时间戳替换地址\n'''\
+ '''$fdisplay(spidata_file, "--检查时间戳插入");\n'''\
+ '''%s( (16'h24), (`SPI_READ), (2), (`IF_IDX(%d)) ); //检查替换时间戳替换地址寄存器\n'''%("`SPI_TRANS" if wlog else "spi_trans", dev_idx)
def genIFRwDataCode(dev, addr, isWrite = False, data_len=0, data = None, wlog=True, iface=4):
spi_api="IF_IDX"
spi_offset = "`ARRAY_IDX_OFF"
if iface == 0:
spi_api = "IF_IQSPI"
spi_offset = "3"
elif iface == 1:
spi_api = "IF_OSPI"
spi_offset = "3"
elif iface == 2:
spi_api = "IF_OQSPI"
spi_offset = "3"
elif iface == 3:
spi_api = "IF_AQSPI"
spi_offset = "4"
else:
spi_api = "IF_IDX"
spi_offset = "`ARRAY_IDX_OFF"
if isWrite == True:
if (data == None) or (len(data) == 0):
data=list()
code = ''
idx = 0
for item in data:
code = code + '''txBuf[%s+%d]=8'h%02x;\n'''%(spi_offset, idx, item & 0xff)
idx = idx + 1
code = code + '''%s( (16'h%04x), (`SPI_WRITE), (%d), (`%s(%d)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans", addr, data_len, spi_api, dev)
return code
else:
code = ''
code = code + '''%s( (16'h%04x), (`SPI_READ), (%d), (`%s(%d)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans", addr, data_len, spi_api, dev)
return code
def genSlvSMWriteData(dev, sm, data_len, data = None, wlog=True):
smaddr = list()
for i in range(8):
smaddr.append(0x300 + i * 4 + 2)
if not ((sm == 1) or (sm == 3) or (sm == 5) or (sm == 7)):
#写入数据lvds读这个空间是lvds写mcu读
return ''
if data_len > 2032:
return ''
if (data != None) and (len(data) != 0) and (len(data) < data_len):
return ''
if (data == None) or (len(data) == 0):
data = list()
for i in range(data_len):
data.append((i + dev) & 0xff)
code = '''txBuf[`ARRAY_IDX_OFF + 0] = 8'h%02x;\n'''%(data_len & 0xff, )\
+ '''txBuf[`ARRAY_IDX_OFF + 1] = 8'h%02x;\n'''%(int(data_len/256) & 0xff,)\
+ '''%s((16'h%04x), (`SPI_WRITE), (2), (`IF_IDX(%d)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans", smaddr[sm], dev)
for i in range(data_len):
code = code + '''txBuf[`ARRAY_IDX_OFF + %d] = 8'h%02x;\n'''%(i, data[i])
code = code + '''%s( (16'h%04x), (`SPI_WRITE), (%d), (`IF_IDX(%d)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans", 0x800 + sm * 2048, data_len, dev)
return code
def genSlvSMReadData(dev, sm, data_len, wlog=True):
if not ((sm == 0) or (sm == 2) or (sm == 4) or (sm == 6)):
#写入数据lvds读这个空间是lvds写mcu读
return ''
if data_len > 2032:
return ''
code = f'''$fdisplay(spidata_file, "--读取设备{dev} SM{sm} 中的数据,读取长度{data_len}B");\n'''
code = code + '''%s( (16'h%04x), (`SPI_READ), (%d), (`IF_IDX(%d)) );\n'''%("`SPI_TRANS" if wlog else "spi_trans", 0x800 + sm * 2048, data_len, dev)
return code
def setting_ebmmu_regs(regmap, index, vaddr, raddr, size, p, enable):
vaddr = int(vaddr)
raddr = int(raddr)
size = int(size)
p = int(p)
enable = int(enable)
regmap[index * 0xa + 0] = (vaddr >> 0) & 0xff
regmap[index * 0xa + 1] = (vaddr >> 8) & 0xff
regmap[index * 0xa + 2] = (vaddr >> 16) & 0xff
regmap[index * 0xa + 3] = (vaddr >> 24) & 0xff
regmap[index * 0xa + 4] = (raddr >> 0) & 0xff
regmap[index * 0xa + 5] = (raddr >> 8) & 0xff
regmap[index * 0xa + 6] = (size >> 0) & 0xff
regmap[index * 0xa + 7] = (size >> 8) & 0xff
regmap[index * 0xa + 8] = p & 0x3
regmap[index * 0xa + 9] = enable & 0x1
__run_list=list()
__pre_include_path='./generated/shin'
__pre_gen_log_path='./generated/log'
def add_tc_2_runlist(filename):
code_f = filename + '.vh'
if code_f in __run_list:
print("Error, Testcase duplicate name")
raise "DUPLICATE NAME"
__run_list.append(code_f)
def gen_tc_runlist():
runlist_file = __pre_include_path + '/tc_runlist.vh'
f = open(runlist_file, "wt+")
for tc in __run_list:
f.write(f'\t`include "{tc}"\n')
f.close()
def genTcStartFrameCode(tcname, des, vardef="\n"):
upper_name = tcname.upper()
code_str = f'''\tbegin:{upper_name}_TESTCASE\n'''\
+vardef \
+f'''\t\t`BEGIN_TESTCASE("{__pre_gen_log_path}/{tcname}_result.log");\n'''\
+'''\t\t_t_start = $realtime;\n'''\
+f'''\t\t$fdisplay(spidata_file,"\\n\\n测试用例{upper_name}");\n'''
if len(des) > 0:
code_str = code_str + '''\t\t$fdisplay(spidata_file,"''' + '-' * 80 + '''");\n'''
code_str = code_str + f'''\t\t$fdisplay(spidata_file,"{des}");\n'''
code_str = code_str + '''\t\t$fdisplay(spidata_file,"''' + '-' * 80 + '''");\n'''
return code_str
def genTcEndFrameCode(tcname):
upper_name = tcname.upper()
return f'''\t\t_t_end = $realtime;\n'''\
+'''\t\t$fdisplay(spidata_file, "该测试用例运行时间:%t\\n", _t_end - _t_start);\n'''\
+f'''\t\t`END_TESTCASE("{__pre_gen_log_path}/{tcname}_result.log");\n'''\
+'''\tend\n'''
def genMessageCode(msg):
return f'''\t\t$fdisplay(spidata_file, "{msg}");\n'''

View File

@@ -1,2 +1,2 @@
+incdir+./generated/shin
./shinTest/ShinTopSpiTb_clk.v
+incdir+./generated/shin
./shinTest/ShinTopSpiTb_clk.v

View File

@@ -1,2 +1,2 @@
+incdir+./generated/shin
./shinTest/ShinTopSpiTb.v
+incdir+./generated/shin
./shinTest/ShinTopSpiTb.v

View File

@@ -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

View File

@@ -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 = "广播写入写入SM032个字符长度的数据。"
#-------------------------------------------------------------------------
#>>>>>>广播写
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 = "广播写入写入SM032个字符长度的数据。"
#-------------------------------------------------------------------------
#>>>>>>广播写
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

View File

@@ -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

View File

@@ -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"
#-------------------------------------------------------------------------
#>>>>>>普通数据包 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
)
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"
#-------------------------------------------------------------------------
#>>>>>>普通数据包 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
)
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

View File

@@ -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

View File

@@ -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)

View File

@@ -1,100 +1,100 @@
16'h004c 8'h00 16'h0002 8'h00 8'h59
16'h004c 8'h80 16'h0002 8'h00 8'h00
16'h004c 8'h00 16'h0002 8'h00 8'h59
16'h004c 8'h80 16'h0002 8'h00 8'h00
16'h004c 8'h00 16'h0002 8'h00 8'h59
16'h004c 8'h80 16'h0002 8'h00 8'h00
16'h004c 8'h00 16'h0002 8'h00 8'h59
16'h004c 8'h80 16'h0002 8'h00 8'h00
16'h004c 8'h00 16'h0002 8'h00 8'h59
16'h004c 8'h80 16'h0002 8'h00 8'h00
16'h004c 8'h00 16'h0001 8'h01
16'h004c 8'h80 16'h0002 8'h00 8'h00
16'h004c 8'h00 16'h0001 8'h01
16'h004c 8'h80 16'h0002 8'h00 8'h00
16'h004c 8'h00 16'h0001 8'h01
16'h004c 8'h80 16'h0002 8'h00 8'h00
16'h004c 8'h00 16'h0001 8'h01
16'h004c 8'h80 16'h0002 8'h00 8'h00
16'h004c 8'h00 16'h0001 8'h01
16'h004c 8'h80 16'h0002 8'h00 8'h00
16'h004c 8'h00 16'h0002 8'h00 8'h32
16'h004c 8'h80 16'h0002 8'h00 8'h00
16'h004c 8'h00 16'h0002 8'h00 8'h32
16'h004c 8'h80 16'h0002 8'h00 8'h00
16'h004c 8'h00 16'h0002 8'h00 8'h32
16'h004c 8'h80 16'h0002 8'h00 8'h00
16'h004c 8'h00 16'h0002 8'h00 8'h32
16'h004c 8'h80 16'h0002 8'h00 8'h00
16'h004c 8'h00 16'h0002 8'h00 8'h32
16'h004c 8'h80 16'h0002 8'h00 8'h00
16'h004c 8'h00 16'h0002 8'h01 8'h43
16'h004c 8'h80 16'h0002 8'h00 8'h00
16'h004c 8'h00 16'h0002 8'h01 8'h43
16'h004c 8'h80 16'h0002 8'h00 8'h00
16'h004c 8'h00 16'h0002 8'h01 8'h43
16'h004c 8'h80 16'h0002 8'h00 8'h00
16'h004c 8'h00 16'h0002 8'h01 8'h43
16'h004c 8'h80 16'h0002 8'h00 8'h00
16'h004c 8'h00 16'h0002 8'h01 8'h43
16'h004c 8'h80 16'h0002 8'h00 8'h00
16'h004c 8'h00 16'h0002 8'h01 8'h59
16'h004c 8'h80 16'h0002 8'h01 8'h00
16'h004c 8'h00 16'h0002 8'h01 8'h59
16'h004c 8'h80 16'h0002 8'h01 8'h00
16'h004c 8'h00 16'h0002 8'h01 8'h59
16'h004c 8'h80 16'h0002 8'h01 8'h00
16'h004c 8'h00 16'h0002 8'h01 8'h59
16'h004c 8'h80 16'h0002 8'h01 8'h00
16'h004c 8'h00 16'h0002 8'h01 8'h59
16'h004c 8'h80 16'h0002 8'h01 8'h00
16'h004c 8'h00 16'h0001 8'h00
16'h004c 8'h80 16'h0002 8'h01 8'h00
16'h004c 8'h00 16'h0001 8'h00
16'h004c 8'h80 16'h0002 8'h01 8'h00
16'h004c 8'h00 16'h0001 8'h00
16'h004c 8'h80 16'h0002 8'h01 8'h00
16'h004c 8'h00 16'h0001 8'h00
16'h004c 8'h80 16'h0002 8'h01 8'h00
16'h004c 8'h00 16'h0001 8'h00
16'h004c 8'h80 16'h0002 8'h01 8'h00
16'h004c 8'h00 16'h0002 8'h00 8'h32
16'h004c 8'h80 16'h0002 8'h01 8'h00
16'h004c 8'h00 16'h0002 8'h00 8'h32
16'h004c 8'h80 16'h0002 8'h01 8'h00
16'h004c 8'h00 16'h0002 8'h00 8'h32
16'h004c 8'h80 16'h0002 8'h01 8'h00
16'h004c 8'h00 16'h0002 8'h00 8'h32
16'h004c 8'h80 16'h0002 8'h01 8'h00
16'h004c 8'h00 16'h0002 8'h00 8'h32
16'h004c 8'h80 16'h0002 8'h01 8'h00
16'h004c 8'h00 16'h0002 8'h01 8'h43
16'h004c 8'h80 16'h0002 8'h01 8'h00
16'h004c 8'h00 16'h0002 8'h01 8'h43
16'h004c 8'h80 16'h0002 8'h01 8'h00
16'h004c 8'h00 16'h0002 8'h01 8'h43
16'h004c 8'h80 16'h0002 8'h01 8'h00
16'h004c 8'h00 16'h0002 8'h01 8'h43
16'h004c 8'h80 16'h0002 8'h01 8'h00
16'h004c 8'h00 16'h0002 8'h01 8'h43
16'h004c 8'h80 16'h0002 8'h01 8'h00
16'h004c 8'h00 16'h0002 8'h30 8'h59
16'h004c 8'h80 16'h0002 8'h00 8'h00
16'h004c 8'h00 16'h0002 8'h30 8'h59
16'h004c 8'h80 16'h0002 8'h00 8'h00
16'h004c 8'h00 16'h0002 8'h30 8'h59
16'h004c 8'h80 16'h0002 8'h00 8'h00
16'h004c 8'h00 16'h0002 8'h30 8'h59
16'h004c 8'h80 16'h0002 8'h00 8'h00
16'h004c 8'h00 16'h0002 8'h30 8'h59
16'h004c 8'h80 16'h0002 8'h00 8'h00
16'h004c 8'h00 16'h0002 8'h23 8'h59
16'h004c 8'h80 16'h0002 8'h01 8'h00
16'h004c 8'h00 16'h0002 8'h23 8'h59
16'h004c 8'h80 16'h0002 8'h01 8'h00
16'h004c 8'h00 16'h0002 8'h23 8'h59
16'h004c 8'h80 16'h0002 8'h01 8'h00
16'h004c 8'h00 16'h0002 8'h23 8'h59
16'h004c 8'h80 16'h0002 8'h01 8'h00
16'h004c 8'h00 16'h0002 8'h23 8'h59
16'h004c 8'h80 16'h0002 8'h01 8'h00
16'h004c 8'h00 16'h0002 8'h00 8'h59
16'h004c 8'h80 16'h0002 8'h00 8'h00
16'h004c 8'h00 16'h0002 8'h00 8'h59
16'h004c 8'h80 16'h0002 8'h00 8'h00
16'h004c 8'h00 16'h0002 8'h00 8'h59
16'h004c 8'h80 16'h0002 8'h00 8'h00
16'h004c 8'h00 16'h0002 8'h00 8'h59
16'h004c 8'h80 16'h0002 8'h00 8'h00
16'h004c 8'h00 16'h0002 8'h00 8'h59
16'h004c 8'h80 16'h0002 8'h00 8'h00
16'h004c 8'h00 16'h0001 8'h01
16'h004c 8'h80 16'h0002 8'h00 8'h00
16'h004c 8'h00 16'h0001 8'h01
16'h004c 8'h80 16'h0002 8'h00 8'h00
16'h004c 8'h00 16'h0001 8'h01
16'h004c 8'h80 16'h0002 8'h00 8'h00
16'h004c 8'h00 16'h0001 8'h01
16'h004c 8'h80 16'h0002 8'h00 8'h00
16'h004c 8'h00 16'h0001 8'h01
16'h004c 8'h80 16'h0002 8'h00 8'h00
16'h004c 8'h00 16'h0002 8'h00 8'h32
16'h004c 8'h80 16'h0002 8'h00 8'h00
16'h004c 8'h00 16'h0002 8'h00 8'h32
16'h004c 8'h80 16'h0002 8'h00 8'h00
16'h004c 8'h00 16'h0002 8'h00 8'h32
16'h004c 8'h80 16'h0002 8'h00 8'h00
16'h004c 8'h00 16'h0002 8'h00 8'h32
16'h004c 8'h80 16'h0002 8'h00 8'h00
16'h004c 8'h00 16'h0002 8'h00 8'h32
16'h004c 8'h80 16'h0002 8'h00 8'h00
16'h004c 8'h00 16'h0002 8'h01 8'h43
16'h004c 8'h80 16'h0002 8'h00 8'h00
16'h004c 8'h00 16'h0002 8'h01 8'h43
16'h004c 8'h80 16'h0002 8'h00 8'h00
16'h004c 8'h00 16'h0002 8'h01 8'h43
16'h004c 8'h80 16'h0002 8'h00 8'h00
16'h004c 8'h00 16'h0002 8'h01 8'h43
16'h004c 8'h80 16'h0002 8'h00 8'h00
16'h004c 8'h00 16'h0002 8'h01 8'h43
16'h004c 8'h80 16'h0002 8'h00 8'h00
16'h004c 8'h00 16'h0002 8'h01 8'h59
16'h004c 8'h80 16'h0002 8'h01 8'h00
16'h004c 8'h00 16'h0002 8'h01 8'h59
16'h004c 8'h80 16'h0002 8'h01 8'h00
16'h004c 8'h00 16'h0002 8'h01 8'h59
16'h004c 8'h80 16'h0002 8'h01 8'h00
16'h004c 8'h00 16'h0002 8'h01 8'h59
16'h004c 8'h80 16'h0002 8'h01 8'h00
16'h004c 8'h00 16'h0002 8'h01 8'h59
16'h004c 8'h80 16'h0002 8'h01 8'h00
16'h004c 8'h00 16'h0001 8'h00
16'h004c 8'h80 16'h0002 8'h01 8'h00
16'h004c 8'h00 16'h0001 8'h00
16'h004c 8'h80 16'h0002 8'h01 8'h00
16'h004c 8'h00 16'h0001 8'h00
16'h004c 8'h80 16'h0002 8'h01 8'h00
16'h004c 8'h00 16'h0001 8'h00
16'h004c 8'h80 16'h0002 8'h01 8'h00
16'h004c 8'h00 16'h0001 8'h00
16'h004c 8'h80 16'h0002 8'h01 8'h00
16'h004c 8'h00 16'h0002 8'h00 8'h32
16'h004c 8'h80 16'h0002 8'h01 8'h00
16'h004c 8'h00 16'h0002 8'h00 8'h32
16'h004c 8'h80 16'h0002 8'h01 8'h00
16'h004c 8'h00 16'h0002 8'h00 8'h32
16'h004c 8'h80 16'h0002 8'h01 8'h00
16'h004c 8'h00 16'h0002 8'h00 8'h32
16'h004c 8'h80 16'h0002 8'h01 8'h00
16'h004c 8'h00 16'h0002 8'h00 8'h32
16'h004c 8'h80 16'h0002 8'h01 8'h00
16'h004c 8'h00 16'h0002 8'h01 8'h43
16'h004c 8'h80 16'h0002 8'h01 8'h00
16'h004c 8'h00 16'h0002 8'h01 8'h43
16'h004c 8'h80 16'h0002 8'h01 8'h00
16'h004c 8'h00 16'h0002 8'h01 8'h43
16'h004c 8'h80 16'h0002 8'h01 8'h00
16'h004c 8'h00 16'h0002 8'h01 8'h43
16'h004c 8'h80 16'h0002 8'h01 8'h00
16'h004c 8'h00 16'h0002 8'h01 8'h43
16'h004c 8'h80 16'h0002 8'h01 8'h00
16'h004c 8'h00 16'h0002 8'h30 8'h59
16'h004c 8'h80 16'h0002 8'h00 8'h00
16'h004c 8'h00 16'h0002 8'h30 8'h59
16'h004c 8'h80 16'h0002 8'h00 8'h00
16'h004c 8'h00 16'h0002 8'h30 8'h59
16'h004c 8'h80 16'h0002 8'h00 8'h00
16'h004c 8'h00 16'h0002 8'h30 8'h59
16'h004c 8'h80 16'h0002 8'h00 8'h00
16'h004c 8'h00 16'h0002 8'h30 8'h59
16'h004c 8'h80 16'h0002 8'h00 8'h00
16'h004c 8'h00 16'h0002 8'h23 8'h59
16'h004c 8'h80 16'h0002 8'h01 8'h00
16'h004c 8'h00 16'h0002 8'h23 8'h59
16'h004c 8'h80 16'h0002 8'h01 8'h00
16'h004c 8'h00 16'h0002 8'h23 8'h59
16'h004c 8'h80 16'h0002 8'h01 8'h00
16'h004c 8'h00 16'h0002 8'h23 8'h59
16'h004c 8'h80 16'h0002 8'h01 8'h00
16'h004c 8'h00 16'h0002 8'h23 8'h59
16'h004c 8'h80 16'h0002 8'h01 8'h00

View File

@@ -1,105 +1,105 @@
16'h004a 8'h00 16'h0002 8'h00 8'h58
16'h004a 8'h80 16'h0002 8'h00 8'h00
16'h004a 8'h00 16'h0002 8'h00 8'h58
16'h004a 8'h80 16'h0002 8'h00 8'h00
16'h004a 8'h00 16'h0002 8'h00 8'h58
16'h004a 8'h80 16'h0002 8'h00 8'h00
16'h004a 8'h00 16'h0002 8'h00 8'h58
16'h004a 8'h80 16'h0002 8'h00 8'h00
16'h004a 8'h00 16'h0002 8'h00 8'h58
16'h004a 8'h80 16'h0002 8'h00 8'h00
16'h004a 8'h00 16'h0001 8'h01
16'h004a 8'h80 16'h0002 8'h00 8'h00
16'h004a 8'h00 16'h0001 8'h01
16'h004a 8'h80 16'h0002 8'h00 8'h00
16'h004a 8'h00 16'h0001 8'h01
16'h004a 8'h80 16'h0002 8'h00 8'h00
16'h004a 8'h00 16'h0001 8'h01
16'h004a 8'h80 16'h0002 8'h00 8'h00
16'h004a 8'h00 16'h0001 8'h01
16'h004a 8'h80 16'h0002 8'h00 8'h00
16'h004a 8'h00 16'h0002 8'h00 8'h32
16'h004a 8'h80 16'h0002 8'h00 8'h00
16'h004a 8'h00 16'h0002 8'h00 8'h32
16'h004a 8'h80 16'h0002 8'h00 8'h00
16'h004a 8'h00 16'h0002 8'h00 8'h32
16'h004a 8'h80 16'h0002 8'h00 8'h00
16'h004a 8'h00 16'h0002 8'h00 8'h32
16'h004a 8'h80 16'h0002 8'h00 8'h00
16'h004a 8'h00 16'h0002 8'h00 8'h32
16'h004a 8'h80 16'h0002 8'h00 8'h00
16'h004a 8'h00 16'h0002 8'h01 8'h43
16'h004a 8'h80 16'h0002 8'h00 8'h00
16'h004a 8'h00 16'h0002 8'h01 8'h43
16'h004a 8'h80 16'h0002 8'h00 8'h00
16'h004a 8'h00 16'h0002 8'h01 8'h43
16'h004a 8'h80 16'h0002 8'h00 8'h00
16'h004a 8'h00 16'h0002 8'h01 8'h43
16'h004a 8'h80 16'h0002 8'h00 8'h00
16'h004a 8'h00 16'h0002 8'h01 8'h43
16'h004a 8'h80 16'h0002 8'h00 8'h00
16'h004a 8'h00 16'h0002 8'h01 8'h58
16'h004a 8'h80 16'h0002 8'h01 8'h00
16'h004a 8'h00 16'h0002 8'h01 8'h58
16'h004a 8'h80 16'h0002 8'h01 8'h00
16'h004a 8'h00 16'h0002 8'h01 8'h58
16'h004a 8'h80 16'h0002 8'h01 8'h00
16'h004a 8'h00 16'h0002 8'h01 8'h58
16'h004a 8'h80 16'h0002 8'h01 8'h00
16'h004a 8'h00 16'h0002 8'h01 8'h58
16'h004a 8'h80 16'h0002 8'h01 8'h00
16'h004a 8'h00 16'h0001 8'h00
16'h004a 8'h80 16'h0002 8'h01 8'h00
16'h004a 8'h00 16'h0001 8'h00
16'h004a 8'h80 16'h0002 8'h01 8'h00
16'h004a 8'h00 16'h0001 8'h00
16'h004a 8'h80 16'h0002 8'h01 8'h00
16'h004a 8'h00 16'h0001 8'h00
16'h004a 8'h80 16'h0002 8'h01 8'h00
16'h004a 8'h00 16'h0001 8'h00
16'h004a 8'h80 16'h0002 8'h01 8'h00
16'h004a 8'h00 16'h0002 8'h00 8'h32
16'h004a 8'h80 16'h0002 8'h01 8'h00
16'h004a 8'h00 16'h0002 8'h00 8'h32
16'h004a 8'h80 16'h0002 8'h01 8'h00
16'h004a 8'h00 16'h0002 8'h00 8'h32
16'h004a 8'h80 16'h0002 8'h01 8'h00
16'h004a 8'h00 16'h0002 8'h00 8'h32
16'h004a 8'h80 16'h0002 8'h01 8'h00
16'h004a 8'h00 16'h0002 8'h00 8'h32
16'h004a 8'h80 16'h0002 8'h01 8'h00
16'h004a 8'h00 16'h0002 8'h01 8'h43
16'h004a 8'h80 16'h0002 8'h01 8'h00
16'h004a 8'h00 16'h0002 8'h01 8'h43
16'h004a 8'h80 16'h0002 8'h01 8'h00
16'h004a 8'h00 16'h0002 8'h01 8'h43
16'h004a 8'h80 16'h0002 8'h01 8'h00
16'h004a 8'h00 16'h0002 8'h01 8'h43
16'h004a 8'h80 16'h0002 8'h01 8'h00
16'h004a 8'h00 16'h0002 8'h01 8'h43
16'h004a 8'h80 16'h0002 8'h01 8'h00
16'h004a 8'h00 16'h0002 8'h30 8'h58
16'h004a 8'h80 16'h0002 8'h00 8'h00
16'h004a 8'h00 16'h0002 8'h30 8'h58
16'h004a 8'h80 16'h0002 8'h00 8'h00
16'h004a 8'h00 16'h0002 8'h30 8'h58
16'h004a 8'h80 16'h0002 8'h00 8'h00
16'h004a 8'h00 16'h0002 8'h30 8'h58
16'h004a 8'h80 16'h0002 8'h00 8'h00
16'h004a 8'h00 16'h0002 8'h30 8'h58
16'h004a 8'h80 16'h0002 8'h00 8'h00
16'h004a 8'h00 16'h0002 8'h23 8'h58
16'h004a 8'h80 16'h0002 8'h01 8'h00
16'h004a 8'h00 16'h0002 8'h23 8'h58
16'h004a 8'h80 16'h0002 8'h01 8'h00
16'h004a 8'h00 16'h0002 8'h23 8'h58
16'h004a 8'h80 16'h0002 8'h01 8'h00
16'h004a 8'h00 16'h0002 8'h23 8'h58
16'h004a 8'h80 16'h0002 8'h01 8'h00
16'h004a 8'h00 16'h0002 8'h23 8'h58
16'h004a 8'h80 16'h0002 8'h01 8'h00
16'h004a 8'h00 16'h0002 8'h00 8'h58
16'h004a 8'h00 16'h0002 8'h00 8'h58
16'h004a 8'h00 16'h0002 8'h00 8'h58
16'h004a 8'h00 16'h0002 8'h00 8'h58
16'h004a 8'h00 16'h0002 8'h00 8'h58
16'h004a 8'h00 16'h0002 8'h00 8'h58
16'h004a 8'h80 16'h0002 8'h00 8'h00
16'h004a 8'h00 16'h0002 8'h00 8'h58
16'h004a 8'h80 16'h0002 8'h00 8'h00
16'h004a 8'h00 16'h0002 8'h00 8'h58
16'h004a 8'h80 16'h0002 8'h00 8'h00
16'h004a 8'h00 16'h0002 8'h00 8'h58
16'h004a 8'h80 16'h0002 8'h00 8'h00
16'h004a 8'h00 16'h0002 8'h00 8'h58
16'h004a 8'h80 16'h0002 8'h00 8'h00
16'h004a 8'h00 16'h0001 8'h01
16'h004a 8'h80 16'h0002 8'h00 8'h00
16'h004a 8'h00 16'h0001 8'h01
16'h004a 8'h80 16'h0002 8'h00 8'h00
16'h004a 8'h00 16'h0001 8'h01
16'h004a 8'h80 16'h0002 8'h00 8'h00
16'h004a 8'h00 16'h0001 8'h01
16'h004a 8'h80 16'h0002 8'h00 8'h00
16'h004a 8'h00 16'h0001 8'h01
16'h004a 8'h80 16'h0002 8'h00 8'h00
16'h004a 8'h00 16'h0002 8'h00 8'h32
16'h004a 8'h80 16'h0002 8'h00 8'h00
16'h004a 8'h00 16'h0002 8'h00 8'h32
16'h004a 8'h80 16'h0002 8'h00 8'h00
16'h004a 8'h00 16'h0002 8'h00 8'h32
16'h004a 8'h80 16'h0002 8'h00 8'h00
16'h004a 8'h00 16'h0002 8'h00 8'h32
16'h004a 8'h80 16'h0002 8'h00 8'h00
16'h004a 8'h00 16'h0002 8'h00 8'h32
16'h004a 8'h80 16'h0002 8'h00 8'h00
16'h004a 8'h00 16'h0002 8'h01 8'h43
16'h004a 8'h80 16'h0002 8'h00 8'h00
16'h004a 8'h00 16'h0002 8'h01 8'h43
16'h004a 8'h80 16'h0002 8'h00 8'h00
16'h004a 8'h00 16'h0002 8'h01 8'h43
16'h004a 8'h80 16'h0002 8'h00 8'h00
16'h004a 8'h00 16'h0002 8'h01 8'h43
16'h004a 8'h80 16'h0002 8'h00 8'h00
16'h004a 8'h00 16'h0002 8'h01 8'h43
16'h004a 8'h80 16'h0002 8'h00 8'h00
16'h004a 8'h00 16'h0002 8'h01 8'h58
16'h004a 8'h80 16'h0002 8'h01 8'h00
16'h004a 8'h00 16'h0002 8'h01 8'h58
16'h004a 8'h80 16'h0002 8'h01 8'h00
16'h004a 8'h00 16'h0002 8'h01 8'h58
16'h004a 8'h80 16'h0002 8'h01 8'h00
16'h004a 8'h00 16'h0002 8'h01 8'h58
16'h004a 8'h80 16'h0002 8'h01 8'h00
16'h004a 8'h00 16'h0002 8'h01 8'h58
16'h004a 8'h80 16'h0002 8'h01 8'h00
16'h004a 8'h00 16'h0001 8'h00
16'h004a 8'h80 16'h0002 8'h01 8'h00
16'h004a 8'h00 16'h0001 8'h00
16'h004a 8'h80 16'h0002 8'h01 8'h00
16'h004a 8'h00 16'h0001 8'h00
16'h004a 8'h80 16'h0002 8'h01 8'h00
16'h004a 8'h00 16'h0001 8'h00
16'h004a 8'h80 16'h0002 8'h01 8'h00
16'h004a 8'h00 16'h0001 8'h00
16'h004a 8'h80 16'h0002 8'h01 8'h00
16'h004a 8'h00 16'h0002 8'h00 8'h32
16'h004a 8'h80 16'h0002 8'h01 8'h00
16'h004a 8'h00 16'h0002 8'h00 8'h32
16'h004a 8'h80 16'h0002 8'h01 8'h00
16'h004a 8'h00 16'h0002 8'h00 8'h32
16'h004a 8'h80 16'h0002 8'h01 8'h00
16'h004a 8'h00 16'h0002 8'h00 8'h32
16'h004a 8'h80 16'h0002 8'h01 8'h00
16'h004a 8'h00 16'h0002 8'h00 8'h32
16'h004a 8'h80 16'h0002 8'h01 8'h00
16'h004a 8'h00 16'h0002 8'h01 8'h43
16'h004a 8'h80 16'h0002 8'h01 8'h00
16'h004a 8'h00 16'h0002 8'h01 8'h43
16'h004a 8'h80 16'h0002 8'h01 8'h00
16'h004a 8'h00 16'h0002 8'h01 8'h43
16'h004a 8'h80 16'h0002 8'h01 8'h00
16'h004a 8'h00 16'h0002 8'h01 8'h43
16'h004a 8'h80 16'h0002 8'h01 8'h00
16'h004a 8'h00 16'h0002 8'h01 8'h43
16'h004a 8'h80 16'h0002 8'h01 8'h00
16'h004a 8'h00 16'h0002 8'h30 8'h58
16'h004a 8'h80 16'h0002 8'h00 8'h00
16'h004a 8'h00 16'h0002 8'h30 8'h58
16'h004a 8'h80 16'h0002 8'h00 8'h00
16'h004a 8'h00 16'h0002 8'h30 8'h58
16'h004a 8'h80 16'h0002 8'h00 8'h00
16'h004a 8'h00 16'h0002 8'h30 8'h58
16'h004a 8'h80 16'h0002 8'h00 8'h00
16'h004a 8'h00 16'h0002 8'h30 8'h58
16'h004a 8'h80 16'h0002 8'h00 8'h00
16'h004a 8'h00 16'h0002 8'h23 8'h58
16'h004a 8'h80 16'h0002 8'h01 8'h00
16'h004a 8'h00 16'h0002 8'h23 8'h58
16'h004a 8'h80 16'h0002 8'h01 8'h00
16'h004a 8'h00 16'h0002 8'h23 8'h58
16'h004a 8'h80 16'h0002 8'h01 8'h00
16'h004a 8'h00 16'h0002 8'h23 8'h58
16'h004a 8'h80 16'h0002 8'h01 8'h00
16'h004a 8'h00 16'h0002 8'h23 8'h58
16'h004a 8'h80 16'h0002 8'h01 8'h00
16'h004a 8'h00 16'h0002 8'h00 8'h58
16'h004a 8'h00 16'h0002 8'h00 8'h58
16'h004a 8'h00 16'h0002 8'h00 8'h58
16'h004a 8'h00 16'h0002 8'h00 8'h58
16'h004a 8'h00 16'h0002 8'h00 8'h58

View File

@@ -1,36 +1,36 @@
16'h0302 8'h00 16'h0002 8'h20 8'h00
16'h0302 8'h00 16'h0002 8'h20 8'h00
16'h0302 8'h00 16'h0002 8'h20 8'h00
16'h0302 8'h00 16'h0002 8'h20 8'h00
16'h0302 8'h00 16'h0002 8'h20 8'h00
16'h0078 8'h00 16'h0004 8'hff 8'hff 8'hff 8'hff
16'h0302 8'h00 16'h0002 8'h2c 8'h00
16'h0306 8'h00 16'h0002 8'h2c 8'h00
16'h1000 8'h00 16'h002c 8'h02 8'h80 8'h00 8'h00 8'h00 8'h00 8'h08 8'h00 8'he0 8'h20 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00
16'h0020 8'h00 16'h0001 8'h01
16'h0800 8'h80 16'h002c 8'h02 8'h80 8'h00 8'h04 8'h00 8'h00 8'h08 8'h00 8'he0 8'h20 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h04
16'h0302 8'h00 16'h0002 8'h40 8'h00
16'h0302 8'h00 16'h0002 8'h40 8'h00
16'h0302 8'h00 16'h0002 8'h40 8'h00
16'h0302 8'h00 16'h0002 8'h40 8'h00
16'h0302 8'h00 16'h0002 8'h40 8'h00
16'h0300 8'h80 16'h0004 8'h00 8'h00 8'h40 8'h00
16'h0300 8'h80 16'h0004 8'h00 8'h01 8'h20 8'h00
16'h0300 8'h80 16'h0004 8'h00 8'h01 8'h20 8'h00
16'h0300 8'h80 16'h0004 8'h00 8'h01 8'h20 8'h00
16'h0300 8'h80 16'h0004 8'h00 8'h01 8'h20 8'h00
16'h0300 8'h00 16'h0001 8'h00
16'h0300 8'h00 16'h0001 8'h00
16'h0300 8'h00 16'h0001 8'h00
16'h0300 8'h00 16'h0001 8'h00
16'h0300 8'h00 16'h0001 8'h00
16'h0300 8'h80 16'h0004 8'h00 8'h00 8'h40 8'h00
16'h0300 8'h80 16'h0004 8'h00 8'h00 8'h20 8'h00
16'h0300 8'h80 16'h0004 8'h00 8'h00 8'h20 8'h00
16'h0300 8'h80 16'h0004 8'h00 8'h00 8'h20 8'h00
16'h0300 8'h80 16'h0004 8'h00 8'h00 8'h20 8'h00
16'h0078 8'h00 16'h0004 8'hff 8'hff 8'hff 8'hff
16'h0078 8'h00 16'h0004 8'hff 8'hff 8'hff 8'hff
16'h0078 8'h00 16'h0004 8'hff 8'hff 8'hff 8'hff
16'h0078 8'h00 16'h0004 8'hff 8'hff 8'hff 8'hff
16'h0078 8'h00 16'h0004 8'hff 8'hff 8'hff 8'hff
16'h0302 8'h00 16'h0002 8'h20 8'h00
16'h0302 8'h00 16'h0002 8'h20 8'h00
16'h0302 8'h00 16'h0002 8'h20 8'h00
16'h0302 8'h00 16'h0002 8'h20 8'h00
16'h0302 8'h00 16'h0002 8'h20 8'h00
16'h0078 8'h00 16'h0004 8'hff 8'hff 8'hff 8'hff
16'h0302 8'h00 16'h0002 8'h2c 8'h00
16'h0306 8'h00 16'h0002 8'h2c 8'h00
16'h1000 8'h00 16'h002c 8'h02 8'h80 8'h00 8'h00 8'h00 8'h00 8'h08 8'h00 8'he0 8'h20 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00
16'h0020 8'h00 16'h0001 8'h01
16'h0800 8'h80 16'h002c 8'h02 8'h80 8'h00 8'h04 8'h00 8'h00 8'h08 8'h00 8'he0 8'h20 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h04
16'h0302 8'h00 16'h0002 8'h40 8'h00
16'h0302 8'h00 16'h0002 8'h40 8'h00
16'h0302 8'h00 16'h0002 8'h40 8'h00
16'h0302 8'h00 16'h0002 8'h40 8'h00
16'h0302 8'h00 16'h0002 8'h40 8'h00
16'h0300 8'h80 16'h0004 8'h00 8'h00 8'h40 8'h00
16'h0300 8'h80 16'h0004 8'h00 8'h01 8'h20 8'h00
16'h0300 8'h80 16'h0004 8'h00 8'h01 8'h20 8'h00
16'h0300 8'h80 16'h0004 8'h00 8'h01 8'h20 8'h00
16'h0300 8'h80 16'h0004 8'h00 8'h01 8'h20 8'h00
16'h0300 8'h00 16'h0001 8'h00
16'h0300 8'h00 16'h0001 8'h00
16'h0300 8'h00 16'h0001 8'h00
16'h0300 8'h00 16'h0001 8'h00
16'h0300 8'h00 16'h0001 8'h00
16'h0300 8'h80 16'h0004 8'h00 8'h00 8'h40 8'h00
16'h0300 8'h80 16'h0004 8'h00 8'h00 8'h20 8'h00
16'h0300 8'h80 16'h0004 8'h00 8'h00 8'h20 8'h00
16'h0300 8'h80 16'h0004 8'h00 8'h00 8'h20 8'h00
16'h0300 8'h80 16'h0004 8'h00 8'h00 8'h20 8'h00
16'h0078 8'h00 16'h0004 8'hff 8'hff 8'hff 8'hff
16'h0078 8'h00 16'h0004 8'hff 8'hff 8'hff 8'hff
16'h0078 8'h00 16'h0004 8'hff 8'hff 8'hff 8'hff
16'h0078 8'h00 16'h0004 8'hff 8'hff 8'hff 8'hff
16'h0078 8'h00 16'h0004 8'hff 8'hff 8'hff 8'hff