优化信号线命名negedge_sck
This commit is contained in:
@@ -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
@@ -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
|
||||
|
||||
@@ -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}")
|
||||
@@ -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="选择SPI,0: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="选择SPI,0: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()
|
||||
|
||||
|
||||
@@ -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="选择SPI,0: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="选择SPI,0: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()
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
@@ -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]);
|
||||
|
||||
|
||||
@@ -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'''
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
+incdir+./generated/shin
|
||||
./shinTest/ShinTopSpiTb_clk.v
|
||||
+incdir+./generated/shin
|
||||
./shinTest/ShinTopSpiTb_clk.v
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
+incdir+./generated/shin
|
||||
./shinTest/ShinTopSpiTb.v
|
||||
+incdir+./generated/shin
|
||||
./shinTest/ShinTopSpiTb.v
|
||||
|
||||
@@ -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
@@ -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 = "广播写入,写入SM0,32个字符长度的数据。"
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#>>>>>>广播写
|
||||
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 = "广播写入,写入SM0,32个字符长度的数据。"
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#>>>>>>广播写
|
||||
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
@@ -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
@@ -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"
|
||||
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#>>>>>>普通数据包 sm1,2个读
|
||||
genPkt.clean()
|
||||
genPkt.setPktType(1)
|
||||
|
||||
set_if_code = ""
|
||||
for i in range(dev - 4):
|
||||
set_if_code = set_if_code + genIFRwDataCode(i + 5, 0x09, True, 1, [0, ], False, iface=1)
|
||||
|
||||
clear_int_code = ""
|
||||
for i in range(dev + 1):
|
||||
clear_int_code = clear_int_code + genIFRwDataCode(i, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
|
||||
|
||||
read_int_code = ""
|
||||
for i in range(dev + 1):
|
||||
read_int_code = read_int_code + genIFRwDataCode(i, 0x74, False, 4)
|
||||
|
||||
init_slave_code = ""
|
||||
for i in range(dev):
|
||||
init_slave_code = init_slave_code + genIFRwDataCode(1 + i, 0x0, True, 1, [0x2, ]) + genIFRwDataCode(1 + i, 0x7c, True, 2, [0x10, 0x80])
|
||||
|
||||
read_dev_code = ""
|
||||
for i in range(dev + 1):
|
||||
read_dev_code = read_dev_code + genIFRwDataCode(i, 0x0, False, 1)
|
||||
|
||||
|
||||
|
||||
genPkt.addBeforeExc(genTcStartFrameCode(gen_file_def, tc_des)
|
||||
+genMessageCode("--清除中断")
|
||||
+set_if_code
|
||||
+init_slave_code
|
||||
+clear_int_code
|
||||
+read_int_code
|
||||
+read_dev_code
|
||||
)
|
||||
|
||||
|
||||
|
||||
genPkt.addAfterExc(genWriteTransLenCode(gen_file_def, sm_idx)
|
||||
+genWriteTransPktCode(gen_file_def, sm_idx)
|
||||
+genTrgTransPktCode(gen_file_def, sm_idx)
|
||||
+genReadAckPktCode(gen_file_def, sm_idx)
|
||||
|
||||
+clear_int_code
|
||||
)
|
||||
|
||||
genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1)
|
||||
|
||||
genPkt.clean()
|
||||
genPkt.setPktType(0)
|
||||
|
||||
gen_file_def_ap = gen_file_def + "_step02"
|
||||
sm_idx = 0
|
||||
|
||||
data = [0x3f, 0xff]
|
||||
genPkt.addSubPkt(0x0, 0, 0x0, 0xb, 2, data)
|
||||
|
||||
genPkt.addAfterExc(genMessageCode("--设置顺序地址")
|
||||
+genWriteTransLenCode(gen_file_def_ap, sm_idx)
|
||||
+genWriteTransPktCode(gen_file_def_ap, sm_idx)
|
||||
+genTrgTransPktCode(gen_file_def_ap, sm_idx)
|
||||
#+ "#10000000"
|
||||
+genReadAckPktCode(gen_file_def_ap, sm_idx)
|
||||
|
||||
|
||||
+genMessageCode("--清除主中断")
|
||||
+genIFRwDataCode(0, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
)
|
||||
|
||||
genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1, True, gen_file_def_ap)
|
||||
|
||||
|
||||
genPkt.clean()
|
||||
genPkt.setPktType(1)
|
||||
gen_file_def_ap = gen_file_def+"_step03"
|
||||
sm_idx = 0
|
||||
|
||||
genPkt.addBeforeExc(genMessageCode("--设置环境,进行第二次嗅探"))
|
||||
|
||||
|
||||
genPkt.addAfterExc(genWriteTransLenCode(gen_file_def_ap, sm_idx)
|
||||
+genWriteTransPktCode(gen_file_def_ap, sm_idx)
|
||||
+genTrgTransPktCode(gen_file_def_ap, sm_idx)
|
||||
+genReadAckPktCode(gen_file_def_ap, sm_idx)
|
||||
|
||||
+clear_int_code
|
||||
)
|
||||
genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1, True, gen_file_def_ap)
|
||||
|
||||
|
||||
|
||||
genPkt.clean()
|
||||
genPkt.setPktType(0)
|
||||
gen_file_def_ap = gen_file_def+"_step04"
|
||||
sm_idx = 0
|
||||
|
||||
for i in range(dev):
|
||||
genPkt.addSubPkt(i + 1, 0, 0x1000, 0x0, 2, [0, 0])
|
||||
|
||||
prepare_data_code = ""
|
||||
for i in range(dev):
|
||||
prepare_data_code = prepare_data_code + genSlvSMWriteData(i + 1, 1, 2, [i, i + 1])
|
||||
|
||||
genPkt.addBeforeExc(prepare_data_code)
|
||||
|
||||
genPkt.addAfterExc(genWriteTransLenCode(gen_file_def_ap, sm_idx)
|
||||
+genWriteTransPktCode(gen_file_def_ap, sm_idx)
|
||||
+genTrgTransPktCode(gen_file_def_ap, sm_idx)
|
||||
#+ "#10000000"
|
||||
+genReadAckPktCode(gen_file_def_ap, sm_idx)
|
||||
|
||||
+clear_int_code
|
||||
)
|
||||
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"
|
||||
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#>>>>>>普通数据包 sm1,2个读
|
||||
genPkt.clean()
|
||||
genPkt.setPktType(1)
|
||||
|
||||
set_if_code = ""
|
||||
for i in range(dev - 4):
|
||||
set_if_code = set_if_code + genIFRwDataCode(i + 5, 0x09, True, 1, [0, ], False, iface=1)
|
||||
|
||||
clear_int_code = ""
|
||||
for i in range(dev + 1):
|
||||
clear_int_code = clear_int_code + genIFRwDataCode(i, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
|
||||
|
||||
read_int_code = ""
|
||||
for i in range(dev + 1):
|
||||
read_int_code = read_int_code + genIFRwDataCode(i, 0x74, False, 4)
|
||||
|
||||
init_slave_code = ""
|
||||
for i in range(dev):
|
||||
init_slave_code = init_slave_code + genIFRwDataCode(1 + i, 0x0, True, 1, [0x2, ]) + genIFRwDataCode(1 + i, 0x7c, True, 2, [0x10, 0x80])
|
||||
|
||||
read_dev_code = ""
|
||||
for i in range(dev + 1):
|
||||
read_dev_code = read_dev_code + genIFRwDataCode(i, 0x0, False, 1)
|
||||
|
||||
|
||||
|
||||
genPkt.addBeforeExc(genTcStartFrameCode(gen_file_def, tc_des)
|
||||
+genMessageCode("--清除中断")
|
||||
+set_if_code
|
||||
+init_slave_code
|
||||
+clear_int_code
|
||||
+read_int_code
|
||||
+read_dev_code
|
||||
)
|
||||
|
||||
|
||||
|
||||
genPkt.addAfterExc(genWriteTransLenCode(gen_file_def, sm_idx)
|
||||
+genWriteTransPktCode(gen_file_def, sm_idx)
|
||||
+genTrgTransPktCode(gen_file_def, sm_idx)
|
||||
+genReadAckPktCode(gen_file_def, sm_idx)
|
||||
|
||||
+clear_int_code
|
||||
)
|
||||
|
||||
genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1)
|
||||
|
||||
genPkt.clean()
|
||||
genPkt.setPktType(0)
|
||||
|
||||
gen_file_def_ap = gen_file_def + "_step02"
|
||||
sm_idx = 0
|
||||
|
||||
data = [0x3f, 0xff]
|
||||
genPkt.addSubPkt(0x0, 0, 0x0, 0xb, 2, data)
|
||||
|
||||
genPkt.addAfterExc(genMessageCode("--设置顺序地址")
|
||||
+genWriteTransLenCode(gen_file_def_ap, sm_idx)
|
||||
+genWriteTransPktCode(gen_file_def_ap, sm_idx)
|
||||
+genTrgTransPktCode(gen_file_def_ap, sm_idx)
|
||||
#+ "#10000000"
|
||||
+genReadAckPktCode(gen_file_def_ap, sm_idx)
|
||||
|
||||
|
||||
+genMessageCode("--清除主中断")
|
||||
+genIFRwDataCode(0, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff])
|
||||
)
|
||||
|
||||
genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1, True, gen_file_def_ap)
|
||||
|
||||
|
||||
genPkt.clean()
|
||||
genPkt.setPktType(1)
|
||||
gen_file_def_ap = gen_file_def+"_step03"
|
||||
sm_idx = 0
|
||||
|
||||
genPkt.addBeforeExc(genMessageCode("--设置环境,进行第二次嗅探"))
|
||||
|
||||
|
||||
genPkt.addAfterExc(genWriteTransLenCode(gen_file_def_ap, sm_idx)
|
||||
+genWriteTransPktCode(gen_file_def_ap, sm_idx)
|
||||
+genTrgTransPktCode(gen_file_def_ap, sm_idx)
|
||||
+genReadAckPktCode(gen_file_def_ap, sm_idx)
|
||||
|
||||
+clear_int_code
|
||||
)
|
||||
genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1, True, gen_file_def_ap)
|
||||
|
||||
|
||||
|
||||
genPkt.clean()
|
||||
genPkt.setPktType(0)
|
||||
gen_file_def_ap = gen_file_def+"_step04"
|
||||
sm_idx = 0
|
||||
|
||||
for i in range(dev):
|
||||
genPkt.addSubPkt(i + 1, 0, 0x1000, 0x0, 2, [0, 0])
|
||||
|
||||
prepare_data_code = ""
|
||||
for i in range(dev):
|
||||
prepare_data_code = prepare_data_code + genSlvSMWriteData(i + 1, 1, 2, [i, i + 1])
|
||||
|
||||
genPkt.addBeforeExc(prepare_data_code)
|
||||
|
||||
genPkt.addAfterExc(genWriteTransLenCode(gen_file_def_ap, sm_idx)
|
||||
+genWriteTransPktCode(gen_file_def_ap, sm_idx)
|
||||
+genTrgTransPktCode(gen_file_def_ap, sm_idx)
|
||||
#+ "#10000000"
|
||||
+genReadAckPktCode(gen_file_def_ap, sm_idx)
|
||||
|
||||
+clear_int_code
|
||||
)
|
||||
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
|
||||
@@ -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
@@ -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)
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user