Merge branch 'feature/newSpi' of github.com:whutddk/RISCV-MAC-SWICH into feature/newSpi

This commit is contained in:
Ruige
2025-09-22 16:36:08 +08:00
18 changed files with 225 additions and 556 deletions

View File

@@ -5,6 +5,12 @@ ISR_MARCH=-march=rv32i -mabi=ilp32
APP_MARCH=-march=rv32i -mabi=ilp32 APP_MARCH=-march=rv32i -mabi=ilp32
ISR_CFLAGS=-O2 ISR_CFLAGS=-O2
APP_CFLAGS=-O2 APP_CFLAGS=-O2
SPI_TYPE ?= -spi 0
TRANS_CODE ?=
DEVCLK ?= --dev1 0 90 --dev2 0 -90
CDRCLK ?= --clk 0 40
ifeq "$(RVCCVERSION)" "12.2.0" ifeq "$(RVCCVERSION)" "12.2.0"
ISR_MARCH=-march=rv32izicsr -mabi=ilp32 ISR_MARCH=-march=rv32izicsr -mabi=ilp32
APP_MARCH=-march=rv32izicsr -mabi=ilp32 APP_MARCH=-march=rv32izicsr -mabi=ilp32
@@ -12,31 +18,13 @@ endif
.PHONY: compile tb wave .PHONY: compile tb wave
shin: shin:
rm -f ./generated/shin/* rm -f ./generated/shin/*
rm -f ./generated/SimCDR/* rm -f ./generated/SimCDR/*
sbt "test:runMain test.testShinModule" sbt "test:runMain test.testShinModule"
testShin: testShin:
python3 ./tb/shinTest/gen_pkt.py python3 ./tb/shinTest/gen_pkt.py ${SPI_TYPE} ${TRANS_CODE}
mkdir -p generated/log
rm -rf generated/log/*
iverilog -Wall \
-o ./tb/build/shinTest.iverilog \
-y ./generated/shin \
-I ./generated/shin \
-D RANDOMIZE_REG_INIT \
-D IVERILOG_COMPILE \
./tb/shinTest/ShinTopSpiTb.v
vvp -N ./tb/build/shinTest.iverilog -lxt2 -fst || true
python3 ./tb/shinTest/check_testcase.py
testShin8b10b:
python3 ./tb/shinTest/gen_pkt.py -8b10b
mkdir -p generated/log mkdir -p generated/log
rm -rf generated/log/* rm -rf generated/log/*
iverilog -Wall \ iverilog -Wall \
@@ -50,7 +38,7 @@ testShin8b10b:
python3 ./tb/shinTest/check_testcase.py python3 ./tb/shinTest/check_testcase.py
testShinClk: testShinClk:
python3 ./tb/shinTest/gen_pkt_clk.py --dev1 0 92 --dev2 0 -92 -8b10b python3 ./tb/shinTest/gen_pkt_clk.py ${DEVCLK} ${SPI_TYPE} ${TRANS_CODE}
mkdir -p generated/log mkdir -p generated/log
rm -rf generated/log/* rm -rf generated/log/*
iverilog -Wall \ iverilog -Wall \
@@ -64,7 +52,7 @@ testShinClk:
python3 ./tb/shinTest/check_testcase.py python3 ./tb/shinTest/check_testcase.py
testCDR: testCDR:
python3 ./tb/shinTest/gen_sim_cdr_clk.py --clk 0 40 python3 ./tb/shinTest/gen_sim_cdr_clk.py ${CDRCLK}
iverilog -Wall \ iverilog -Wall \
-o ./tb/build/simCDR.iverilog \ -o ./tb/build/simCDR.iverilog \
-y ./generated/SimCDR \ -y ./generated/SimCDR \

View File

@@ -2,6 +2,9 @@
OUTPUT = shin_test OUTPUT = shin_test
CPU_COUNT := $(shell nproc) CPU_COUNT := $(shell nproc)
SPI_TYPE ?= -spi 0
TRANS_CODE ?=
DEVCLK ?= --dev1 0 90 --dev2 0 -90
VCS = vcs -sverilog +v2k -timescale=1ns/1ps \ VCS = vcs -sverilog +v2k -timescale=1ns/1ps \
-full64 \ -full64 \
@@ -14,7 +17,7 @@ VCS = vcs -sverilog +v2k -timescale=1ns/1ps \
SIM = ./${OUTPUT} -l run.log SIM = ./${OUTPUT} -l run.log
testShin_vcs: testShin_vcs:
python3 ./shinTest/gen_pkt.py python3 ./shinTest/gen_pkt.py ${SPI_TYPE} ${TRANS_CODE}
mkdir -p generated/log mkdir -p generated/log
rm -rf generated/log/* rm -rf generated/log/*
@echo "Available CPUs: ${CPU_COUNT}" @echo "Available CPUs: ${CPU_COUNT}"
@@ -22,71 +25,13 @@ testShin_vcs:
${SIM} ${SIM}
python3 ./shinTest/check_testcase.py python3 ./shinTest/check_testcase.py
testShin8b10b_vcs:
python3 ./shinTest/gen_pkt.py -8b10b
mkdir -p generated/log
rm -rf generated/log/*
@echo "Available CPUs: ${CPU_COUNT}"
${VCS} -f ./shinTest_vcs.f
${SIM}
python3 ./shinTest/check_testcase.py
testShinClk_vcs: testShinClk_vcs:
python3 ./shinTest/gen_pkt_clk.py --dev1 0 90 --dev2 0 -90 python3 ./shinTest/gen_pkt_clk.py ${DEVCLK} ${SPI_TYPE} ${TRANS_CODE}
mkdir -p generated/log mkdir -p generated/log
rm -rf generated/log/* rm -rf generated/log/*
${VCS} -f ./shinTestClk_vcs.f ${VCS} -f ./shinTestClk_vcs.f
${SIM} ${SIM}
python3 ./shinTest/check_testcase.py python3 ./shinTest/check_testcase.py
mv spi_trans_data.txt generated/spi_trans_data1.txt
mv generated/wave.vcd generated/wave1.vcd
\
python3 ./shinTest/gen_pkt_clk.py --dev1 45 180 --dev3 70 -180 -8b10b
mkdir -p generated/log
rm -rf generated/log/*
${VCS} -f ./shinTestClk_vcs.f
${SIM}
python3 ./shinTest/check_testcase.py
mv spi_trans_data.txt generated/spi_trans_data2.txt
mv generated/wave.vcd generated/wave2.vcd
\
python3 ./shinTest/gen_pkt_clk.py --dev1 45 185 --dev3 25 -185
mkdir -p generated/log
rm -rf generated/log/*
${VCS} -f ./shinTestClk_vcs.f
${SIM}
python3 ./shinTest/check_testcase.py
mv spi_trans_data.txt generated/spi_trans_data3.txt
mv generated/wave.vcd generated/wave3.vcd
\
python3 ./shinTest/gen_pkt_clk.py --dev1 60 186 --dev3 15 -186
mkdir -p generated/log
rm -rf generated/log/*
${VCS} -f ./shinTestClk_vcs.f
${SIM}
python3 ./shinTest/check_testcase.py
mv spi_trans_data.txt generated/spi_trans_data4.txt
mv generated/wave.vcd generated/wave4.vcd
\
python3 ./shinTest/gen_pkt_clk.py --dev1 80 187 --dev2 30 -187
mkdir -p generated/log
rm -rf generated/log/*
${VCS} -f ./shinTestClk_vcs.f
${SIM}
python3 ./shinTest/check_testcase.py
mv spi_trans_data.txt generated/spi_trans_data5.txt
mv generated/wave.vcd generated/wave5.vcd
\
python3 ./shinTest/gen_pkt_clk.py --dev1 70 188 --dev3 223 -188 -8b10b
mkdir -p generated/log
rm -rf generated/log/*
${VCS} -f ./shinTestClk_vcs.f
${SIM}
python3 ./shinTest/check_testcase.py
mv spi_trans_data.txt generated/spi_trans_data6.txt
mv generated/wave.vcd generated/wave6.vcd
testShinMany_vcs: testShinMany_vcs:

View File

@@ -1,35 +1,5 @@
`timescale 1 ns / 1 ps `timescale 1 ns / 1 ps
`define ENABLE_REG_RW1_TEST "generated/log/reg_rw1_tc.log"
//`define ENABLE_ENCRYPTION
//`define ENABLE_DET1_TEST "generated/log/det1_tc.log"
//`define ENABLE_DET2_TEST "generated/log/det2_tc.log"
//`define ENABLE_SET_ADDR_TEST "generated/log/set_addr_tc.log"
//`define ENABLE_INT_INIT_TEST "generated/log/int_init_tc.log"
//`define ENABLE_DET_ERR1_TEST "generated/log/det_err1_tc.log"
//`define ENABLE_SMx_SEND1_TEST "generated/log/sm_send1_tc.log"
//`define ENABLE_SMx_SEND2_TEST "generated/log/sm_send2_tc.log"
//`define ENABLE_SMx_SEND3_TEST "generated/log/sm_send3_tc.log"
//`define ENABLE_ERR_PKT1_TEST "generated/log/err_pkt1_tc.log"
//`define ENABLE_ERR_PKT2_TEST "generated/log/err_pkt2_tc.log"
//`define ENABLE_ERR_PKT3_TEST "generated/log/err_pkt3_tc.log"
//`define ENABLE_EXCHG_DATA_SEQ0_TEST "generated/log/exchg_data_seq0_tc.log"
//`define ENABLE_EXCHG_DATA_SEQ1_TEST "generated/log/exchg_data_seq1_tc.log"
//`define ENABLE_EXCHG_DATA_SEQ2_TEST "generated/log/exchg_data_seq2_tc.log"
//`define ENABLE_EXCHG_DATA_SEQ3_TEST "generated/log/exchg_data_seq3_tc.log"
//`define ENABLE_BC_R_TEST "generated/log/bc_r_tc.log"
//`define ENABLE_BC_W_TEST "generated/log/bc_w_tc.log"
//`define ENABLE_BC_RW_TEST "generated/log/bc_rw_tc.log"
//`define ENABLE_SYNC_TEST "generated/log/sync_tc.log"
//`define ENABLE_SYNC_SIG0_TEST "generated/log/sync_sig0_tc.log"
//`define ENABLE_SYNC_SIG1_TEST "generated/log/sync_sig1_tc.log"
//`define ENABLE_RESET_TEST "generated/log/reset_tc.log"
//`define ENABLE_WD1_TEST "generated/log/wd1_tc.log"
module ShinTopSpiTb( module ShinTopSpiTb(
); );
@@ -416,6 +386,10 @@ initial begin
//#20000000 //#20000000
#1000000000 #1000000000
`ifdef USING_OSPI
#1000000000
#1000000000
`endif
//#5000000 //#5000000
$display("Time Out !!!"); $display("Time Out !!!");
@@ -566,7 +540,6 @@ end
//DEV_NUM //DEV_NUM
//ALL_DEV_NUM //ALL_DEV_NUM
wire isQspi = (idx >= 0 && idx <= (`ALL_DEV_NUM - 1)) || idx >= (`ALL_DEV_NUM * 2); wire isQspi = (idx >= 0 && idx <= (`ALL_DEV_NUM - 1)) || idx >= (`ALL_DEV_NUM * 2);
wire isAQspi = (idx >= (`ALL_DEV_NUM * 3));
wire [11:0] nextByteCnt = byteCnt + 1; wire [11:0] nextByteCnt = byteCnt + 1;
//输出 //输出
@@ -634,7 +607,7 @@ end
//mst slv0~slv3的 内部qspi调用即设置 //mst slv0~slv3的 内部qspi调用即设置
//sidx为0~4外部spi为5~9外部qspi为10~15 //sidx为0~4外部spi为5~9外部qspi为10~15
task spi_trans( input [15:0] saddress, input [7:0] scmd, input [12:0] slength,input [16:0] sidx ); task spi_trans( input [15:0] saddress, input [7:0] scmd, input [12:0] slength, input [16:0] sidx );
begin begin
txBuf[0] <= saddress[15:8]; txBuf[0] <= saddress[15:8];
txBuf[1] <= saddress[7:0]; txBuf[1] <= saddress[7:0];
@@ -686,7 +659,6 @@ task spi_trans( input [15:0] saddress, input [7:0] scmd, input [12:0] slength,in
) )
) begin ) begin
for (integer _k = 0; _k < 4; _k++) begin for (integer _k = 0; _k < 4; _k++) begin
if (scmd == 0) begin if (scmd == 0) begin
$fwrite(spidata_file, "%02h ", txBuf[_k + _pos]); $fwrite(spidata_file, "%02h ", txBuf[_k + _pos]);
@@ -849,21 +821,21 @@ always @(negedge io_int_sig[4]) begin
end end
//`define USING_IQSPI //`define USING_IQSPI
//`define USING_ESPI //`define USING_OSPI
//`define USING_EQSPI //`define USING_OQSPI
`define USING_AQSPI //`define USING_AQSPI
`ifdef USING_IQSPI `ifdef USING_IQSPI
`define INTERFACE_IDX 0//internal spi `define INTERFACE_IDX 0//internal spi
`define ARRAY_IDX_OFF 3 `define ARRAY_IDX_OFF 3
`endif `endif
`ifdef USING_ESPI `ifdef USING_OSPI
`define INTERFACE_IDX (`ALL_DEV_NUM)//internal spi `define INTERFACE_IDX (`ALL_DEV_NUM)//internal spi
`define ARRAY_IDX_OFF 3 `define ARRAY_IDX_OFF 3
`endif `endif
`ifdef USING_EQSPI `ifdef USING_OQSPI
`define INTERFACE_IDX (`ALL_DEV_NUM * 2)//internal spi `define INTERFACE_IDX (`ALL_DEV_NUM * 2)//internal spi
`define ARRAY_IDX_OFF 3 `define ARRAY_IDX_OFF 3
`endif `endif
@@ -943,30 +915,6 @@ task wait_comm_finished(input [16:0] dev_idx);
st = $realtime; st = $realtime;
is_run = 1; is_run = 1;
`ifdef enable_wait_clear_int
txBuf[0] = 8'h00;
txBuf[1] = 8'h78;
txBuf[2] = `SPI_WRITE;
txBuf[3] = 8'h03;
txBuf[4] = 8'h00;
txBuf[5] = 8'h00;
txBuf[6] = 8'h00;
length = 8'h07;
idx = dev_idx;
#5
@(negedge sck)
isReq <= 1;
@(posedge sck) #5
isReq <= 0;
@( negedge isBusy) #1000
begin
end
`endif
while (is_run == 1) begin while (is_run == 1) begin
txBuf[0] = 8'h00; txBuf[0] = 8'h00;
txBuf[1] = 8'h74; txBuf[1] = 8'h74;
@@ -1019,162 +967,6 @@ initial begin
#1000 #1000
`ifdef ENABLE_REG_RW1_TEST
/*---------------------------------------------------------------------------------------------------------
测试用例
1. 从IP中读取寄存器上电后的寄存器期望值为0
---------------------------------------------------------------------------------------------------------*/
begin:READ_REG_TESTCASE
`BEGIN_TESTCASE(`ENABLE_REG_RW1_TEST);
_t_start = $realtime;
$fdisplay(spidata_file, "测试用例从IP中读取寄存器上电后的寄存器期望值为0");
`SPI_TRANS( (16'h00), (`SPI_READ), (64), (`IF_OSPI(0)) );
`SPI_TRANS( (16'h00), (`SPI_READ), (64), (`IF_OSPI(1)) );
`SPI_TRANS( (16'h00), (`SPI_READ), (64), (`IF_OSPI(2)) );
`SPI_TRANS( (16'h00), (`SPI_READ), (64), (`IF_OSPI(3)) );
`SPI_TRANS( (16'h00), (`SPI_READ), (64), (`IF_OSPI(4)) );
_t_end = $realtime;
$fdisplay(spidata_file, "该测试用例运行时间:%t\n", _t_end - _t_start);
`END_TESTCASE(`ENABLE_REG_RW1_TEST);
end
`endif
begin:SETTING_INTERFACE
if ((`INTERFACE_IDX) == `ALL_DEV_NUM) begin
$fdisplay(spidata_file, "\n\n从SPI配置使用SPI接口访问EasyBus");
txBuf[3] = 8'h01;
spi_trans( (16'h09), (`SPI_WRITE), (1), (`IF_OSPI(0)) );
spi_trans( (16'h09), (`SPI_WRITE), (1), (`IF_OSPI(1)) );
spi_trans( (16'h09), (`SPI_WRITE), (1), (`IF_OSPI(2)) );
spi_trans( (16'h09), (`SPI_WRITE), (1), (`IF_OSPI(3)) );
spi_trans( (16'h09), (`SPI_WRITE), (1), (`IF_OSPI(4)) );
end else if ((`INTERFACE_IDX) == (`ALL_DEV_NUM * 2)) begin
$fdisplay(spidata_file, "\n\n从SPI配置使用2 QSPI接口访问EasyBus");
txBuf[3] = 8'h02;
spi_trans( (16'h09), (`SPI_WRITE), (1), (`IF_OSPI(0)) );
spi_trans( (16'h09), (`SPI_WRITE), (1), (`IF_OSPI(1)) );
spi_trans( (16'h09), (`SPI_WRITE), (1), (`IF_OSPI(2)) );
spi_trans( (16'h09), (`SPI_WRITE), (1), (`IF_OSPI(3)) );
spi_trans( (16'h09), (`SPI_WRITE), (1), (`IF_OSPI(4)) );
end else if ((`INTERFACE_IDX) == (`ALL_DEV_NUM * 3)) begin
$fdisplay(spidata_file, "\n\n从SPI配置使用ASPI接口访问EasyBus");
txBuf[3] = 8'h03;
spi_trans( (16'h09), (`SPI_WRITE), (1), (`IF_OSPI(0)) );
spi_trans( (16'h09), (`SPI_WRITE), (1), (`IF_OSPI(1)) );
spi_trans( (16'h09), (`SPI_WRITE), (1), (`IF_OSPI(2)) );
spi_trans( (16'h09), (`SPI_WRITE), (1), (`IF_OSPI(3)) );
spi_trans( (16'h09), (`SPI_WRITE), (1), (`IF_OSPI(4)) );
end else begin
$fdisplay(spidata_file, "\n\n从SPI配置使用0 QSPI接口访问EasyBus");
txBuf[3] = 8'h00;
spi_trans( (16'h09), (`SPI_WRITE), (1), (`IF_OSPI(0)) );
spi_trans( (16'h09), (`SPI_WRITE), (1), (`IF_OSPI(1)) );
spi_trans( (16'h09), (`SPI_WRITE), (1), (`IF_OSPI(2)) );
spi_trans( (16'h09), (`SPI_WRITE), (1), (`IF_OSPI(3)) );
spi_trans( (16'h09), (`SPI_WRITE), (1), (`IF_OSPI(4)) );
end
end
`ifdef ENABLE_INT_INIT_TEST
begin:CHECK_INTERRUPT_SIG
$fdisplay(spidata_file, "\n\n测试用例检查设备的INTERRUPT信号");
@(posedge clock) begin
if (io_int_sig[0]) $fdisplay(spidata_file, "**MST Interrupt.");
if (io_int_sig[1]) $fdisplay(spidata_file, "**SLV0 Interrupt.");
if (io_int_sig[2]) $fdisplay(spidata_file, "**SLV1 Interrupt.");
if (io_int_sig[3]) $fdisplay(spidata_file, "**SLV2 Interrupt.");
if (io_int_sig[4]) $fdisplay(spidata_file, "**SLV3 Interrupt.");
end
$fdisplay(spidata_file, "-检查中断");
spi_trans( (16'h70), (`SPI_READ), (14), (`IF_IDX(0)) );
spi_trans( (16'h70), (`SPI_READ), (14), (`IF_IDX(1)) );
spi_trans( (16'h70), (`SPI_READ), (14), (`IF_IDX(2)) );
spi_trans( (16'h70), (`SPI_READ), (14), (`IF_IDX(3)) );
spi_trans( (16'h70), (`SPI_READ), (14), (`IF_IDX(4)) );
$fdisplay(spidata_file, "-清中断");
txBuf[`ARRAY_IDX_OFF+0] = 8'h00;
txBuf[`ARRAY_IDX_OFF+1] = 8'h00;
txBuf[`ARRAY_IDX_OFF+2] = 8'h00;
txBuf[`ARRAY_IDX_OFF+3] = 8'h80;
spi_trans( (16'h78), (`SPI_WRITE), (4), (`IF_IDX(0)) );
spi_trans( (16'h78), (`SPI_WRITE), (4), (`IF_IDX(1)) );
spi_trans( (16'h78), (`SPI_WRITE), (4), (`IF_IDX(2)) );
spi_trans( (16'h78), (`SPI_WRITE), (4), (`IF_IDX(3)) );
spi_trans( (16'h78), (`SPI_WRITE), (4), (`IF_IDX(4)) );
$fdisplay(spidata_file, "-检查中断");
spi_trans( (16'h70), (`SPI_READ), (14), (`IF_IDX(0)) );
spi_trans( (16'h70), (`SPI_READ), (14), (`IF_IDX(1)) );
spi_trans( (16'h70), (`SPI_READ), (14), (`IF_IDX(2)) );
spi_trans( (16'h70), (`SPI_READ), (14), (`IF_IDX(3)) );
spi_trans( (16'h70), (`SPI_READ), (14), (`IF_IDX(4)) );
end
begin:CHECK_INTERRUPT_CFG_REG
$fdisplay(spidata_file, "\n\n测试用例检查设备的INTERRUPT信号设置寄存器");
$fdisplay(spidata_file, "-检查中断");
spi_trans( (16'h70), (`SPI_READ), (4), (`IF_IDX(0)) );
spi_trans( (16'h70), (`SPI_READ), (4), (`IF_IDX(1)) );
spi_trans( (16'h70), (`SPI_READ), (4), (`IF_IDX(2)) );
spi_trans( (16'h70), (`SPI_READ), (4), (`IF_IDX(3)) );
spi_trans( (16'h70), (`SPI_READ), (4), (`IF_IDX(4)) );
$fdisplay(spidata_file, "-设置中断");
txBuf[`ARRAY_IDX_OFF+0] = 8'h00;
txBuf[`ARRAY_IDX_OFF+1] = 8'h00;
txBuf[`ARRAY_IDX_OFF+2] = 8'h00;
txBuf[`ARRAY_IDX_OFF+3] = 8'h00;
spi_trans( (16'h70), (`SPI_WRITE), (4), (`IF_IDX(0)) );
spi_trans( (16'h70), (`SPI_WRITE), (4), (`IF_IDX(1)) );
spi_trans( (16'h70), (`SPI_WRITE), (4), (`IF_IDX(2)) );
spi_trans( (16'h70), (`SPI_WRITE), (4), (`IF_IDX(3)) );
spi_trans( (16'h70), (`SPI_WRITE), (4), (`IF_IDX(4)) );
$fdisplay(spidata_file, "-检查中断");
spi_trans( (16'h70), (`SPI_READ), (4), (`IF_IDX(0)) );
spi_trans( (16'h70), (`SPI_READ), (4), (`IF_IDX(1)) );
spi_trans( (16'h70), (`SPI_READ), (4), (`IF_IDX(2)) );
spi_trans( (16'h70), (`SPI_READ), (4), (`IF_IDX(3)) );
spi_trans( (16'h70), (`SPI_READ), (4), (`IF_IDX(4)) );
$fdisplay(spidata_file, "-设置中断");
txBuf[`ARRAY_IDX_OFF+0] = 8'h0F;
txBuf[`ARRAY_IDX_OFF+1] = 8'h00;
txBuf[`ARRAY_IDX_OFF+2] = 8'h00;
txBuf[`ARRAY_IDX_OFF+3] = 8'h00;
spi_trans( (16'h70), (`SPI_WRITE), (4), (`IF_IDX(0)) );
txBuf[`ARRAY_IDX_OFF+0] = 8'h00;
txBuf[`ARRAY_IDX_OFF+1] = 8'hFF;
txBuf[`ARRAY_IDX_OFF+2] = 8'h00;
txBuf[`ARRAY_IDX_OFF+3] = 8'h00;
spi_trans( (16'h70), (`SPI_WRITE), (4), (`IF_IDX(1)) );
spi_trans( (16'h70), (`SPI_WRITE), (4), (`IF_IDX(2)) );
spi_trans( (16'h70), (`SPI_WRITE), (4), (`IF_IDX(3)) );
spi_trans( (16'h70), (`SPI_WRITE), (4), (`IF_IDX(4)) );
$fdisplay(spidata_file, "-检查中断");
spi_trans( (16'h70), (`SPI_READ), (4), (`IF_IDX(0)) );
spi_trans( (16'h70), (`SPI_READ), (4), (`IF_IDX(1)) );
spi_trans( (16'h70), (`SPI_READ), (4), (`IF_IDX(2)) );
spi_trans( (16'h70), (`SPI_READ), (4), (`IF_IDX(3)) );
spi_trans( (16'h70), (`SPI_READ), (4), (`IF_IDX(4)) );
$fdisplay(spidata_file, "-中断改为脉冲模式");
txBuf[`ARRAY_IDX_OFF+0] = 8'h10;
txBuf[`ARRAY_IDX_OFF+1] = 8'h8A;
spi_trans( (16'h7c), (`SPI_WRITE), (2), (`IF_IDX(0)) );
spi_trans( (16'h7c), (`SPI_WRITE), (2), (`IF_IDX(1)) );
spi_trans( (16'h7c), (`SPI_WRITE), (2), (`IF_IDX(2)) );
spi_trans( (16'h7c), (`SPI_WRITE), (2), (`IF_IDX(3)) );
spi_trans( (16'h7c), (`SPI_WRITE), (2), (`IF_IDX(4)) );
end
`endif
`include "tc_runlist.vh" `include "tc_runlist.vh"

View File

@@ -1,8 +1,5 @@
`timescale 1 ns / 1 ps `timescale 1 ns / 1 ps
`define ENABLE_REG_RW1_TEST "generated/log/reg_rw1_tc.log"
module ShinTopSpiTb( module ShinTopSpiTb(
); );
@@ -12,12 +9,13 @@ module ShinTopSpiTb(
reg [15:0] multiCLK; reg [15:0] multiCLK;
`include "dev_predef.vh" `include "dev_predef.vh"
`ifdef DEFINE_SLAVE_DEVICE `ifdef DEFINE_SLAVE_DEVICE
`define DEV_NUM 4 //slave num `define DEV_NUM 4 //slave num
`define ALL_DEV_NUM (`DEV_NUM + 1) // slave + master `define ALL_DEV_NUM (`DEV_NUM + 1) // slave + master
`define SPI_CSN_NUM (`ALL_DEV_NUM * 3) `define SPI_CSN_NUM (`ALL_DEV_NUM * 4)
`define HW_SERIAL 0 //48'h31303050584c //(48'h4c5850303031) `define HW_SERIAL 0 //48'h31303050584c //(48'h4c5850303031)
`define IQSPI_PINS(N) (`N*4+3):(`N*4) `define IQSPI_PINS(N) (`N*4+3):(`N*4)
@@ -61,7 +59,7 @@ module ShinTopSpiTb(
wire qspi_sck; wire qspi_sck;
wire [3:0] qspi_mosi; wire [3:0] qspi_mosi;
//wire [40-1:0] qspi_miso; //wire [40-1:0] qspi_miso;
wire [(`ALL_DEV_NUM * 4 * 2 - 1):0] qspi_miso; wire [(`ALL_DEV_NUM * 4 * 3 - 1):0] qspi_miso;
integer spidata_file; integer spidata_file;
integer c_line; integer c_line;
@@ -136,6 +134,12 @@ ShinTop s_ShinTop_Mst(
.io_oqspi_isDirIn(), .io_oqspi_isDirIn(),
.io_oqspi_csn(`EQSPI_CSN(0)), .io_oqspi_csn(`EQSPI_CSN(0)),
.io_aqspi_sck(qspi_sck),
.io_aqspi_mosi(qspi_mosi),
.io_aqspi_miso(`AQSPI_MISO(0)),
.io_aqspi_isDirIn(),
.io_aqspi_csn(`AQSPI_CSN(0)),
.io_isSoftReset(isSoftReset[0]), .io_isSoftReset(isSoftReset[0]),
.io_interrupt(io_int_sig[0]), .io_interrupt(io_int_sig[0]),
.io_latchPin_0(latch0), .io_latchPin_0(latch0),
@@ -375,6 +379,11 @@ initial begin
#8000000000000 #8000000000000
#8000000000000 #8000000000000
`ifdef USING_OSPI
#8000000000000
#8000000000000
`endif
$display("Time Out !!!"); $display("Time Out !!!");
$fclose(spidata_file); $fclose(spidata_file);
//$stop; //$stop;
@@ -599,7 +608,23 @@ always @(posedge sck) begin
end else begin end else begin
bitCnt <= bitCnt + 1; bitCnt <= bitCnt + 1;
end end
if ( idx >= (`ALL_DEV_NUM * 3) ) begin
if( &bitCnt ) begin
byteCnt <= byteCnt +1;
transCnt <= transCnt + 1;
if( (txBuf[2] & 8'h80) === 8'h80 & nextByteCnt >= 5) begin
rxBuf[byteCnt] <= exChangeRegi;
//$display("spi read out %x", exChangeRegi);
end
if( (txBuf[2] & 8'h80) === 8'h80 & nextByteCnt >= 4) begin
exChangeRegi <= isQspi ? {exChangeRegi[3:0], qspi_mux_miso} : {exChangeRegi[6:0], spi_mux_miso};
end else begin
exChangeRegi <= 0;
end
end else begin
exChangeRegi <= isQspi ? {exChangeRegi[3:0], qspi_mux_miso} : {exChangeRegi[6:0], spi_mux_miso};
end
end else begin
if( &bitCnt ) begin if( &bitCnt ) begin
byteCnt <= byteCnt +1; byteCnt <= byteCnt +1;
transCnt <= transCnt + 1; transCnt <= transCnt + 1;
@@ -615,6 +640,7 @@ always @(posedge sck) begin
end else begin end else begin
exChangeRegi <= isQspi ? {exChangeRegi[3:0], qspi_mux_miso} : {exChangeRegi[6:0], spi_mux_miso}; exChangeRegi <= isQspi ? {exChangeRegi[3:0], qspi_mux_miso} : {exChangeRegi[6:0], spi_mux_miso};
end end
end
end else begin end else begin
isBusy <= #500000 1'b0; isBusy <= #500000 1'b0;
spi_csn[idx] <= #500000 1'b1; spi_csn[idx] <= #500000 1'b1;
@@ -631,9 +657,15 @@ task spi_trans( input [15:0] saddress, input [7:0] scmd, input [12:0] slength, i
begin begin
txBuf[0] <= saddress[15:8]; txBuf[0] <= saddress[15:8];
txBuf[1] <= saddress[7:0]; txBuf[1] <= saddress[7:0];
if (sidx >=(`ALL_DEV_NUM * 3)) begin
txBuf[2] <= (scmd | slength[12:8]);
txBuf[3] <= slength[7:0];
length <= slength + 4;
end else begin
txBuf[2] <= scmd; txBuf[2] <= scmd;
length <= slength + 3; length <= slength + 3;
end
idx <= sidx; idx <= sidx;
#500000 #500000
@@ -645,9 +677,17 @@ task spi_trans( input [15:0] saddress, input [7:0] scmd, input [12:0] slength, i
@( negedge isBusy) #100000000 @( negedge isBusy) #100000000
begin begin
//$fwrite(spidata_file, "------------%5t------------\n", $realtime); //$fwrite(spidata_file, "------------%5t------------\n", $realtime);
$fwrite(spidata_file, "T:%t \tdev:%4d, addr:0x%02h%02h, %s, len:%4d\n", $fwrite(spidata_file, "T:%t \tdev:%4d(%4d), addr:0x%02h%02h, %s, len:%4d (0x%02h%02h)\n",
$realtime, ((sidx >= `ALL_DEV_NUM)? ((sidx >= (`ALL_DEV_NUM * 2))? (sidx - (`ALL_DEV_NUM * 2)):(sidx - `ALL_DEV_NUM)):sidx), txBuf[0], txBuf[1], $realtime,
((txBuf[2] == 0)? "Write":" Read"), slength); sidx % (`ALL_DEV_NUM), sidx,
txBuf[0],
txBuf[1],
(((txBuf[2] & 8'h80) == 0)? "Write":" Read"),
slength,
txBuf[2], txBuf[3]);
if (sidx >=(`ALL_DEV_NUM * 3)) begin _pos = 4; end
else begin _pos = 3; end
if ( ((saddress == 16'h0800) if ( ((saddress == 16'h0800)
|| (saddress == 16'h1000) || (saddress == 16'h1000)
@@ -656,9 +696,15 @@ task spi_trans( input [15:0] saddress, input [7:0] scmd, input [12:0] slength, i
|| (saddress == 16'h2800) || (saddress == 16'h2800)
|| (saddress == 16'h3000) || (saddress == 16'h3000)
|| (saddress == 16'h3800) || (saddress == 16'h3800)
|| (saddress == 16'h4000)) || (saddress == 16'h4000)
&& ((sidx == 0) || (sidx == `ALL_DEV_NUM) || (sidx == (`ALL_DEV_NUM * 2)))) begin )
_pos = 3; && ((sidx == 0)
|| (sidx == `ALL_DEV_NUM)
|| (sidx == (`ALL_DEV_NUM * 2))
|| (sidx == (`ALL_DEV_NUM * 3))
)
) begin
for (integer _k = 0; _k < 4; _k++) begin for (integer _k = 0; _k < 4; _k++) begin
if (scmd == 0) begin if (scmd == 0) begin
$fwrite(spidata_file, "%02h ", txBuf[_k + _pos]); $fwrite(spidata_file, "%02h ", txBuf[_k + _pos]);
@@ -741,9 +787,9 @@ task spi_trans( input [15:0] saddress, input [7:0] scmd, input [12:0] slength, i
end else begin end else begin
for (integer i=0; i<slength; i++) begin for (integer i=0; i<slength; i++) begin
if (scmd == 0) begin if (scmd == 0) begin
$fwrite(spidata_file, "%02h ", txBuf[i + 3]); $fwrite(spidata_file, "%02h ", txBuf[i + _pos]);
end else begin end else begin
$fwrite(spidata_file, "%02h ", rxBuf[i + 3]); $fwrite(spidata_file, "%02h ", rxBuf[i + _pos]);
end end
c_line = 0; c_line = 0;
if ((i+1)%16 == 0) begin if ((i+1)%16 == 0) begin
@@ -820,12 +866,35 @@ always @(negedge io_int_sig[4]) begin
$fdisplay(spidata_file, "**SLV3 INT CLEAR: %t", $realtime); $fdisplay(spidata_file, "**SLV3 INT CLEAR: %t", $realtime);
end end
//`define USING_IQSPI
//`define USING_OSPI
//`define USING_OQSPI
//`define USING_AQSPI
`ifdef USING_IQSPI
`define INTERFACE_IDX 0//internal spi
`define ARRAY_IDX_OFF 3
`endif
`ifdef USING_OSPI
`define INTERFACE_IDX (`ALL_DEV_NUM)//internal spi
`define ARRAY_IDX_OFF 3
`endif
`ifdef USING_OQSPI
`define INTERFACE_IDX (`ALL_DEV_NUM * 2)//internal spi
`define ARRAY_IDX_OFF 3
`endif
`ifdef USING_AQSPI
`define INTERFACE_IDX (`ALL_DEV_NUM * 3)//internal spi
`define ARRAY_IDX_OFF 4
`endif
`define INTERFACE_IDX 0 //internal spi
`define IF_IDX(idx) ((`INTERFACE_IDX)+(idx)) `define IF_IDX(idx) ((`INTERFACE_IDX)+(idx))
`define IF_IQSPI(idx) ((idx)) `define IF_IQSPI(idx) ((idx))
`define IF_OQSPI(idx) ((`ALL_DEV_NUM * 2) + (idx)) `define IF_OQSPI(idx) ((`ALL_DEV_NUM * 2) + (idx))
`define IF_AQSPI(idx) ((`ALL_DEV_NUM * 3) + (idx))
`define IF_OSPI(idx) ((`ALL_DEV_NUM) + (idx)) `define IF_OSPI(idx) ((`ALL_DEV_NUM) + (idx))
`define SPI_WRITE 8'h00 `define SPI_WRITE 8'h00
`define SPI_READ 8'h80 `define SPI_READ 8'h80
@@ -865,14 +934,14 @@ end
if (cmd == (`SPI_WRITE)) begin \ if (cmd == (`SPI_WRITE)) begin \
f_write(logh, addr, cmd, len);\ f_write(logh, addr, cmd, len);\
for (integer _k = 0; _k < len; _k++) begin \ for (integer _k = 0; _k < len; _k++) begin \
$fwrite(logh, "8'h%02h ", txBuf[3 + _k]); \ $fwrite(logh, "8'h%02h ", txBuf[`ARRAY_IDX_OFF + _k]); \
end \ end \
spi_trans(addr, cmd, len, iface); \ spi_trans(addr, cmd, len, iface); \
end else begin \ end else begin \
spi_trans(addr, cmd, len, iface); \ spi_trans(addr, cmd, len, iface); \
f_write(logh, addr, cmd, len);\ f_write(logh, addr, cmd, len);\
for (integer _k = 0; _k < len; _k++) begin \ for (integer _k = 0; _k < len; _k++) begin \
$fwrite(logh, "8'h%02h ", rxBuf[3 + _k]); \ $fwrite(logh, "8'h%02h ", rxBuf[`ARRAY_IDX_OFF + _k]); \
end \ end \
end \ end \
$fwrite(logh, "\n") $fwrite(logh, "\n")
@@ -892,37 +961,22 @@ task wait_comm_finished(input [16:0] dev_idx);
st = $realtime; st = $realtime;
is_run = 1; is_run = 1;
`ifdef enable_wait_clear_int
txBuf[0] = 8'h00;
txBuf[1] = 8'h78;
txBuf[2] = `SPI_WRITE;
txBuf[3] = 8'h03;
txBuf[4] = 8'h00;
txBuf[5] = 8'h00;
txBuf[6] = 8'h00;
length = 8'h07;
idx = `IF_IQSPI(dev_idx);
#500000
@(negedge sck)
isReq <= 1;
@(posedge sck) #500000
isReq <= 0;
@( negedge isBusy) #100000000
begin
end
`endif
while (is_run == 1) begin while (is_run == 1) begin
txBuf[0] = 8'h00; txBuf[0] = 8'h00;
txBuf[1] = 8'h74; txBuf[1] = 8'h74;
txBuf[2] = `SPI_READ; if (dev_idx >=(`ALL_DEV_NUM * 3)) begin
txBuf[2] <= (`SPI_READ | 8'h0);
txBuf[3] <= 8'h04;
length = 8'h08;
//$display("using AQspi");
end else begin
txBuf[2] <= `SPI_READ;
length = 8'h07; length = 8'h07;
idx = `IF_IQSPI(dev_idx); //$display("using iqspi");
end
idx = dev_idx;
#500000 #500000
@(negedge sck) @(negedge sck)
@@ -936,11 +990,11 @@ task wait_comm_finished(input [16:0] dev_idx);
end end
#100000000 #100000000
//$display("%x %x", rxBuf[3], rxBuf[6]); //$display("%x %x", rxBuf[3], rxBuf[6]);
if ((rxBuf[3] & 8'h02) == 8'h02) if ((rxBuf[`ARRAY_IDX_OFF] & 8'h02) == 8'h02)
begin begin
is_run = 0; is_run = 0;
end end
if ((rxBuf[6] & 8'h60) != 8'h00) if ((rxBuf[`ARRAY_IDX_OFF+3] & 8'h60) != 8'h00)
begin begin
$display("error occur"); $display("error occur");
is_run = 0; is_run = 0;
@@ -959,154 +1013,6 @@ initial begin
#50000000 #50000000
`ifdef ENABLE_REG_RW1_TEST
/*---------------------------------------------------------------------------------------------------------
测试用例
1. 从IP中读取寄存器上电后的寄存器期望值为0
---------------------------------------------------------------------------------------------------------*/
begin:READ_REG_TESTCASE
`BEGIN_TESTCASE(`ENABLE_REG_RW1_TEST);
_t_start = $realtime;
$fdisplay(spidata_file, "测试用例从IP中读取寄存器上电后的寄存器期望值为0");
`SPI_TRANS( (16'h00), (`SPI_READ), (64), (`IF_OSPI(0)) );
`SPI_TRANS( (16'h00), (`SPI_READ), (64), (`IF_OSPI(1)) );
`SPI_TRANS( (16'h00), (`SPI_READ), (64), (`IF_OSPI(2)) );
`SPI_TRANS( (16'h00), (`SPI_READ), (64), (`IF_OSPI(3)) );
`SPI_TRANS( (16'h00), (`SPI_READ), (64), (`IF_OSPI(4)) );
_t_end = $realtime;
$fdisplay(spidata_file, "该测试用例运行时间:%t\n", _t_end - _t_start);
`END_TESTCASE(`ENABLE_REG_RW1_TEST);
end
`endif
begin:SETTING_INTERFACE
if ((`INTERFACE_IDX) == `ALL_DEV_NUM) begin
$fdisplay(spidata_file, "\n\n从内部QSPI配置使用外部的SPI接口访问EasyBus");
txBuf[0+3] = 8'h01;
spi_trans( (16'h09), (`SPI_WRITE), (1), (`IF_OSPI(0)) );
spi_trans( (16'h09), (`SPI_WRITE), (1), (`IF_OSPI(1)) );
spi_trans( (16'h09), (`SPI_WRITE), (1), (`IF_OSPI(2)) );
spi_trans( (16'h09), (`SPI_WRITE), (1), (`IF_OSPI(3)) );
spi_trans( (16'h09), (`SPI_WRITE), (1), (`IF_OSPI(4)) );
end else if ((`INTERFACE_IDX) == (`ALL_DEV_NUM * 2)) begin
$fdisplay(spidata_file, "\n\n从内部QSPI配置使用外部的QSPI接口访问EasyBus");
txBuf[0+3] = 8'h02;
spi_trans( (16'h09), (`SPI_WRITE), (1), (`IF_OSPI(0)) );
spi_trans( (16'h09), (`SPI_WRITE), (1), (`IF_OSPI(1)) );
spi_trans( (16'h09), (`SPI_WRITE), (1), (`IF_OSPI(2)) );
spi_trans( (16'h09), (`SPI_WRITE), (1), (`IF_OSPI(3)) );
spi_trans( (16'h09), (`SPI_WRITE), (1), (`IF_OSPI(4)) );
end else begin
$fdisplay(spidata_file, "\n\n从内部QSPI接口访问EasyBus");
txBuf[0+3] = 8'h00;
spi_trans( (16'h09), (`SPI_WRITE), (1), (`IF_OSPI(0)) );
spi_trans( (16'h09), (`SPI_WRITE), (1), (`IF_OSPI(1)) );
spi_trans( (16'h09), (`SPI_WRITE), (1), (`IF_OSPI(2)) );
spi_trans( (16'h09), (`SPI_WRITE), (1), (`IF_OSPI(3)) );
spi_trans( (16'h09), (`SPI_WRITE), (1), (`IF_OSPI(4)) );
end
end
`ifdef ENABLE_INT_INIT_TEST
begin:CHECK_INTERRUPT_SIG
$fdisplay(spidata_file, "\n\n测试用例检查设备的INTERRUPT信号");
@(posedge clock) begin
if (io_int_sig[0]) $fdisplay(spidata_file, "**MST Interrupt.");
if (io_int_sig[1]) $fdisplay(spidata_file, "**SLV0 Interrupt.");
if (io_int_sig[2]) $fdisplay(spidata_file, "**SLV1 Interrupt.");
if (io_int_sig[3]) $fdisplay(spidata_file, "**SLV2 Interrupt.");
if (io_int_sig[4]) $fdisplay(spidata_file, "**SLV3 Interrupt.");
end
$fdisplay(spidata_file, "-检查中断");
spi_trans( (16'h70), (`SPI_READ), (14), (`IF_IDX(0)) );
spi_trans( (16'h70), (`SPI_READ), (14), (`IF_IDX(1)) );
spi_trans( (16'h70), (`SPI_READ), (14), (`IF_IDX(2)) );
spi_trans( (16'h70), (`SPI_READ), (14), (`IF_IDX(3)) );
spi_trans( (16'h70), (`SPI_READ), (14), (`IF_IDX(4)) );
$fdisplay(spidata_file, "-清中断");
txBuf[0+3] = 8'h00;
txBuf[1+3] = 8'h00;
txBuf[2+3] = 8'h00;
txBuf[3+3] = 8'h80;
spi_trans( (16'h78), (`SPI_WRITE), (4), (`IF_IDX(0)) );
spi_trans( (16'h78), (`SPI_WRITE), (4), (`IF_IDX(1)) );
spi_trans( (16'h78), (`SPI_WRITE), (4), (`IF_IDX(2)) );
spi_trans( (16'h78), (`SPI_WRITE), (4), (`IF_IDX(3)) );
spi_trans( (16'h78), (`SPI_WRITE), (4), (`IF_IDX(4)) );
$fdisplay(spidata_file, "-检查中断");
spi_trans( (16'h70), (`SPI_READ), (14), (`IF_IDX(0)) );
spi_trans( (16'h70), (`SPI_READ), (14), (`IF_IDX(1)) );
spi_trans( (16'h70), (`SPI_READ), (14), (`IF_IDX(2)) );
spi_trans( (16'h70), (`SPI_READ), (14), (`IF_IDX(3)) );
spi_trans( (16'h70), (`SPI_READ), (14), (`IF_IDX(4)) );
end
begin:CHECK_INTERRUPT_CFG_REG
$fdisplay(spidata_file, "\n\n测试用例检查设备的INTERRUPT信号设置寄存器");
$fdisplay(spidata_file, "-检查中断");
spi_trans( (16'h70), (`SPI_READ), (4), (`IF_IDX(0)) );
spi_trans( (16'h70), (`SPI_READ), (4), (`IF_IDX(1)) );
spi_trans( (16'h70), (`SPI_READ), (4), (`IF_IDX(2)) );
spi_trans( (16'h70), (`SPI_READ), (4), (`IF_IDX(3)) );
spi_trans( (16'h70), (`SPI_READ), (4), (`IF_IDX(4)) );
$fdisplay(spidata_file, "-设置中断");
txBuf[0+3] = 8'h00;
txBuf[1+3] = 8'h00;
txBuf[2+3] = 8'h00;
txBuf[3+3] = 8'h00;
spi_trans( (16'h70), (`SPI_WRITE), (4), (`IF_IDX(0)) );
spi_trans( (16'h70), (`SPI_WRITE), (4), (`IF_IDX(1)) );
spi_trans( (16'h70), (`SPI_WRITE), (4), (`IF_IDX(2)) );
spi_trans( (16'h70), (`SPI_WRITE), (4), (`IF_IDX(3)) );
spi_trans( (16'h70), (`SPI_WRITE), (4), (`IF_IDX(4)) );
$fdisplay(spidata_file, "-检查中断");
spi_trans( (16'h70), (`SPI_READ), (4), (`IF_IDX(0)) );
spi_trans( (16'h70), (`SPI_READ), (4), (`IF_IDX(1)) );
spi_trans( (16'h70), (`SPI_READ), (4), (`IF_IDX(2)) );
spi_trans( (16'h70), (`SPI_READ), (4), (`IF_IDX(3)) );
spi_trans( (16'h70), (`SPI_READ), (4), (`IF_IDX(4)) );
$fdisplay(spidata_file, "-设置中断");
txBuf[0+3] = 8'h0F;
txBuf[1+3] = 8'h00;
txBuf[2+3] = 8'h00;
txBuf[3+3] = 8'h00;
spi_trans( (16'h70), (`SPI_WRITE), (4), (`IF_IDX(0)) );
txBuf[0+3] = 8'h00;
txBuf[1+3] = 8'hFF;
txBuf[2+3] = 8'h00;
txBuf[3+3] = 8'h00;
spi_trans( (16'h70), (`SPI_WRITE), (4), (`IF_IDX(1)) );
spi_trans( (16'h70), (`SPI_WRITE), (4), (`IF_IDX(2)) );
spi_trans( (16'h70), (`SPI_WRITE), (4), (`IF_IDX(3)) );
spi_trans( (16'h70), (`SPI_WRITE), (4), (`IF_IDX(4)) );
$fdisplay(spidata_file, "-检查中断");
spi_trans( (16'h70), (`SPI_READ), (4), (`IF_IDX(0)) );
spi_trans( (16'h70), (`SPI_READ), (4), (`IF_IDX(1)) );
spi_trans( (16'h70), (`SPI_READ), (4), (`IF_IDX(2)) );
spi_trans( (16'h70), (`SPI_READ), (4), (`IF_IDX(3)) );
spi_trans( (16'h70), (`SPI_READ), (4), (`IF_IDX(4)) );
$fdisplay(spidata_file, "-中断改为脉冲模式");
txBuf[3] = 8'h10;
txBuf[4] = 8'h8A;
spi_trans( (16'h7c), (`SPI_WRITE), (2), (`IF_IDX(0)) );
spi_trans( (16'h7c), (`SPI_WRITE), (2), (`IF_IDX(1)) );
spi_trans( (16'h7c), (`SPI_WRITE), (2), (`IF_IDX(2)) );
spi_trans( (16'h7c), (`SPI_WRITE), (2), (`IF_IDX(3)) );
spi_trans( (16'h7c), (`SPI_WRITE), (2), (`IF_IDX(4)) );
end
`endif
`include "tc_runlist.vh" `include "tc_runlist.vh"

View File

@@ -10,18 +10,20 @@ if __name__ == '__main__':
# 可选参数 # 可选参数
parser.add_argument("-8b10b", action="store_true", dest="use_8b10b", default=False, help="使用8b10b编码") parser.add_argument("-8b10b", action="store_true", dest="use_8b10b", default=False, help="使用8b10b编码")
parser.add_argument("-spi", dest="spi_type", type=int, default=0, help="选择SPI0:ISPI;1:OSPI;2:OQSPI;3:AQSPI")
# 解析参数 # 解析参数
args = parser.parse_args() args = parser.parse_args()
#if args.use_8b10b: #if args.use_8b10b:
# add_tc_2_runlist(rwregs.tc1()) # 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.gen_slv_dev_num(4) environment.gen_slv_dev_num(4)
environment.set_using_8b10b(args.use_8b10b)
environment.bringup() environment.bringup()
''' #'''
add_tc_2_runlist(errorPkt.tc1()) add_tc_2_runlist(errorPkt.tc1())
add_tc_2_runlist(errorPkt.tc2()) add_tc_2_runlist(errorPkt.tc2())
add_tc_2_runlist(errorPkt.tc3()) add_tc_2_runlist(errorPkt.tc3())
@@ -62,13 +64,13 @@ if __name__ == '__main__':
add_tc_2_runlist(errorPkt.tc38()) add_tc_2_runlist(errorPkt.tc38())
#''' #'''
''' #'''
add_tc_2_runlist(rwregs.tc1()) add_tc_2_runlist(rwregs.tc1())
add_tc_2_runlist(rwregs.tc2()) add_tc_2_runlist(rwregs.tc2())
add_tc_2_runlist(rwregs.tc3()) add_tc_2_runlist(rwregs.tc3())
#''' #'''
''' #'''
add_tc_2_runlist(base.tc1()) add_tc_2_runlist(base.tc1())
add_tc_2_runlist(base.tc2()) add_tc_2_runlist(base.tc2())
add_tc_2_runlist(base.tc3()) add_tc_2_runlist(base.tc3())
@@ -76,7 +78,11 @@ if __name__ == '__main__':
add_tc_2_runlist(base.tc5()) add_tc_2_runlist(base.tc5())
add_tc_2_runlist(base.tc6()) add_tc_2_runlist(base.tc6())
add_tc_2_runlist(base.tc7()) add_tc_2_runlist(base.tc7())
#'''
add_tc_2_runlist(base.tc8()) add_tc_2_runlist(base.tc8())
#'''
add_tc_2_runlist(base.tc9()) add_tc_2_runlist(base.tc9())
add_tc_2_runlist(base.tc10()) add_tc_2_runlist(base.tc10())
add_tc_2_runlist(base.tc11()) add_tc_2_runlist(base.tc11())
@@ -102,13 +108,13 @@ if __name__ == '__main__':
add_tc_2_runlist(base.tc31()) add_tc_2_runlist(base.tc31())
#''' #'''
''' #'''
add_tc_2_runlist(broadcast.tc1()) add_tc_2_runlist(broadcast.tc1())
add_tc_2_runlist(broadcast.tc2()) add_tc_2_runlist(broadcast.tc2())
add_tc_2_runlist(broadcast.tc3()) add_tc_2_runlist(broadcast.tc3())
#''' #'''
''' #'''
add_tc_2_runlist(sync.tc1()) add_tc_2_runlist(sync.tc1())
add_tc_2_runlist(sync.tc2()) add_tc_2_runlist(sync.tc2())
add_tc_2_runlist(sync.tc3()) add_tc_2_runlist(sync.tc3())
@@ -119,7 +125,7 @@ if __name__ == '__main__':
#''' #'''
#add_tc_2_runlist(sync.tc8()) #add_tc_2_runlist(sync.tc8())
''' #'''
add_tc_2_runlist(ebmmu.tc1()) add_tc_2_runlist(ebmmu.tc1())
add_tc_2_runlist(ebmmu.tc2()) add_tc_2_runlist(ebmmu.tc2())
add_tc_2_runlist(ebmmu.tc3()) add_tc_2_runlist(ebmmu.tc3())

View File

@@ -14,6 +14,7 @@ if __name__ == '__main__':
parser.add_argument("-d3", "--dev3", 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("-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("-8b10b", action="store_true", dest="use_8b10b", default=False, help="使用8b10b编码")
parser.add_argument("-spi", dest="spi_type", type=int, default=0, help="选择SPI0:ISPI;1:OSPI;2:OQSPI;3:AQSPI")
# 解析参数 # 解析参数
args = parser.parse_args() args = parser.parse_args()
@@ -32,8 +33,11 @@ if __name__ == '__main__':
dev_clk_info[4] = args.dev4 dev_clk_info[4] = args.dev4
environment.set_dev_clk(dev_clk_info) environment.set_dev_clk(dev_clk_info)
environment.set_spi_interface(args.spi_type)
environment.set_using_8b10b(args.use_8b10b)
environment.gen_slv_dev_for_clk(4) environment.gen_slv_dev_for_clk(4)
environment.bringup() environment.bringup()
if args.use_8b10b: if args.use_8b10b:

View File

@@ -270,18 +270,24 @@ def genCheckInsertTimeCode(wlog=True, dev_idx=0):
+ '''%s( (16'h24), (`SPI_READ), (2), (`IF_IDX(%d)) ); //检查替换时间戳替换地址寄存器\n'''%("`SPI_TRANS" if wlog else "spi_trans", dev_idx) + '''%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=5): def genIFRwDataCode(dev, addr, isWrite = False, data_len=0, data = None, wlog=True, iface=4):
spi_api="IF_IQSPI" spi_api="IF_IDX"
spi_offset = "`ARRAY_IDX_OFF"
if iface == 0: if iface == 0:
spi_api = "IF_IQSPI" spi_api = "IF_IQSPI"
spi_offset = "3"
elif iface == 1: elif iface == 1:
spi_api = "IF_OSPI" spi_api = "IF_OSPI"
spi_offset = "3"
elif iface == 2: elif iface == 2:
spi_api = "IF_OQSPI" spi_api = "IF_OQSPI"
spi_offset = "3"
elif iface == 3: elif iface == 3:
spi_api = "IF_AQSPI" spi_api = "IF_AQSPI"
spi_offset = "4"
else: else:
spi_api = "IF_IDX" spi_api = "IF_IDX"
spi_offset = "`ARRAY_IDX_OFF"
if isWrite == True: if isWrite == True:
if (data == None) or (len(data) == 0): if (data == None) or (len(data) == 0):
@@ -290,7 +296,7 @@ def genIFRwDataCode(dev, addr, isWrite = False, data_len=0, data = None, wlog=Tr
code = '' code = ''
idx = 0 idx = 0
for item in data: for item in data:
code = code + '''txBuf[`ARRAY_IDX_OFF+%d]=8'h%02x;\n'''%(idx, item & 0xff) code = code + '''txBuf[%s+%d]=8'h%02x;\n'''%(spi_offset, idx, item & 0xff)
idx = idx + 1 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) 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)

View File

@@ -508,10 +508,10 @@ def tc8():
+genIFRwDataCode(2, 0x40, True, 4, [0x01, 0x00, 0x66, 0x79]) +genIFRwDataCode(2, 0x40, True, 4, [0x01, 0x00, 0x66, 0x79])
+"\n#5000\n" +"\n#5000\n"
+genIFRwDataCode(0, 0x09, True, 1, [0, ], False, iface=1) #+genIFRwDataCode(0, 0x09, True, 1, [0, ], False, iface=1)
+genIFRwDataCode(2, 0x09, True, 1, [0, ], False, iface=1) #+genIFRwDataCode(2, 0x09, True, 1, [0, ], False, iface=1)
+using_proper_transcode(0) +using_proper_workmode(0)
+using_proper_transcode(2) +using_proper_workmode(2)
+genMessageCode("--读取中断") +genMessageCode("--读取中断")
+genIFRwDataCode(0, 0x74, False, 4) +genIFRwDataCode(0, 0x74, False, 4)
@@ -2118,10 +2118,10 @@ def tc28():
+genIFRwDataCode(0, 0x40, True, 4, [0x01, 0x00, 0x66, 0x79]) +genIFRwDataCode(0, 0x40, True, 4, [0x01, 0x00, 0x66, 0x79])
+genIFRwDataCode(4, 0x40, True, 4, [0x01, 0x00, 0x66, 0x79]) +genIFRwDataCode(4, 0x40, True, 4, [0x01, 0x00, 0x66, 0x79])
+"#5000" +"#5000"
+genIFRwDataCode(0, 0x09, True, 1, [0, ], False, iface=1) #+genIFRwDataCode(0, 0x09, True, 1, [0, ], False, iface=1)
+genIFRwDataCode(4, 0x09, True, 1, [0, ], False, iface=1) #+genIFRwDataCode(4, 0x09, True, 1, [0, ], False, iface=1)
+using_proper_transcode(0) +using_proper_workmode(0)
+using_proper_transcode(4) +using_proper_workmode(4)
+genMessageCode("--读取中断") +genMessageCode("--读取中断")
+genIFRwDataCode(0, 0x74, False, 4) +genIFRwDataCode(0, 0x74, False, 4)
@@ -2334,10 +2334,10 @@ def tc28():
+genIFRwDataCode(0, 0x40, True, 4, [0x01, 0x00, 0x66, 0x79]) +genIFRwDataCode(0, 0x40, True, 4, [0x01, 0x00, 0x66, 0x79])
+genIFRwDataCode(4, 0x40, True, 4, [0x01, 0x00, 0x66, 0x79]) +genIFRwDataCode(4, 0x40, True, 4, [0x01, 0x00, 0x66, 0x79])
+"#5000" +"#5000"
+genIFRwDataCode(0, 0x09, True, 1, [0, ], False, iface=1) #+genIFRwDataCode(0, 0x09, True, 1, [0, ], False, iface=1)
+genIFRwDataCode(4, 0x09, True, 1, [0, ], False, iface=1) #+genIFRwDataCode(4, 0x09, True, 1, [0, ], False, iface=1)
+using_proper_transcode(0) +using_proper_workmode(0)
+using_proper_transcode(4) +using_proper_workmode(4)
+genMessageCode("--读取中断") +genMessageCode("--读取中断")
+genIFRwDataCode(0, 0x74, False, 4) +genIFRwDataCode(0, 0x74, False, 4)
@@ -2626,8 +2626,8 @@ def tc31():
+genMessageCode("--复位4号设备") +genMessageCode("--复位4号设备")
+genIFRwDataCode(4, 0x40, True, 4, [0x01, 0x00, 0x66, 0x79]) +genIFRwDataCode(4, 0x40, True, 4, [0x01, 0x00, 0x66, 0x79])
+"#5000" +"#5000"
+genIFRwDataCode(4, 0x09, True, 1, [0, ], False, iface=1) #+genIFRwDataCode(4, 0x09, True, 1, [0, ], False, iface=1)
+using_proper_transcode(4) +using_proper_workmode(4)
+genIFRwDataCode(4, 0x0, True, 1, [1, ]) +genIFRwDataCode(4, 0x0, True, 1, [1, ])
+genIFRwDataCode(4, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff]) +genIFRwDataCode(4, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff])
#+genEnableInsertTimeCode(0xa) #+genEnableInsertTimeCode(0xa)
@@ -2824,8 +2824,8 @@ def tc31():
+"#100000\n" +"#100000\n"
+genIFRwDataCode(0, 0x40, True, 4, [0x01, 0x00, 0x66, 0x79]) +genIFRwDataCode(0, 0x40, True, 4, [0x01, 0x00, 0x66, 0x79])
+"#5000\n" +"#5000\n"
+genIFRwDataCode(0, 0x09, True, 1, [0, ], False, iface=1) #+genIFRwDataCode(0, 0x09, True, 1, [0, ], False, iface=1)
+using_proper_transcode(0) +using_proper_workmode(0)
+genIFRwDataCode(0, 0x0, True, 1, [1, ]) +genIFRwDataCode(0, 0x0, True, 1, [1, ])
+genIFRwDataCode(0, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff]) +genIFRwDataCode(0, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff])
+genIFRwDataCode(0, 0x7c, True, 2, [0x10, 0x80]) +genIFRwDataCode(0, 0x7c, True, 2, [0x10, 0x80])
@@ -3008,8 +3008,8 @@ def tc31():
genPkt.addBeforeExc(genMessageCode("--恢复系统") genPkt.addBeforeExc(genMessageCode("--恢复系统")
+genIFRwDataCode(4, 0x40, True, 4, [0x01, 0x00, 0x66, 0x79]) +genIFRwDataCode(4, 0x40, True, 4, [0x01, 0x00, 0x66, 0x79])
+"#5000" +"#5000"
+genIFRwDataCode(4, 0x09, True, 1, [0, ], False, iface=1) #+genIFRwDataCode(4, 0x09, True, 1, [0, ], False, iface=1)
+using_proper_transcode(4) +using_proper_workmode(4)
+genIFRwDataCode(4, 0x00, True, 1, [2, ]) +genIFRwDataCode(4, 0x00, True, 1, [2, ])
+genIFRwDataCode(4, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff]) +genIFRwDataCode(4, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff])
) )

View File

@@ -4,6 +4,7 @@ from pyutils import *
global_dev_num = 4 global_dev_num = 4
global_setting_dev_clk = dict() global_setting_dev_clk = dict()
global_using_8b10b = False global_using_8b10b = False
global_spi_type = 0
def bringup(): def bringup():
gen_file_def = "sys_bringup" gen_file_def = "sys_bringup"
@@ -17,6 +18,13 @@ def bringup():
genPkt.clean() genPkt.clean()
genPkt.addBeforeExc(genTcStartFrameCode(gen_file_def, tc_des) 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("--读取中断状态") +genMessageCode("--读取中断状态")
+genIFRwDataCode(0, 0x74, False, 4) +genIFRwDataCode(0, 0x74, False, 4)
+genIFRwDataCode(1, 0x74, False, 4) +genIFRwDataCode(1, 0x74, False, 4)
@@ -29,12 +37,6 @@ def bringup():
+genIFRwDataCode(2, 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(3, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff])
+genIFRwDataCode(4, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff]) +genIFRwDataCode(4, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff])
+genMessageCode("--设置合适的底层编码4b5b or 8b10b")
+using_proper_transcode(0)
+using_proper_transcode(1)
+using_proper_transcode(2)
+using_proper_transcode(3)
+using_proper_transcode(4)
) )
main_dev = [0x01, ] main_dev = [0x01, ]
@@ -265,11 +267,24 @@ def __GenDevice(id, TerminateNode = False):
def __gen_slv_dev_predef(num): def __gen_slv_dev_predef(num):
global global_setting_dev_clk global global_setting_dev_clk
global global_spi_type
code_for_clk = "" code_for_clk = ""
for k in global_setting_dev_clk: for k in global_setting_dev_clk:
code_for_clk = code_for_clk + "reg [15:0] multiCLK%d;\n"%(k, ) code_for_clk = code_for_clk + "reg [15:0] multiCLK%d;\n"%(k, )
code_predef =("`define DEV_NUM %d //slave num\n"%(num, ) 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 ALL_DEV_NUM (`DEV_NUM + 1) // slave + master\n"
+"`define SPI_CSN_NUM (`ALL_DEV_NUM * 4)\n\n" +"`define SPI_CSN_NUM (`ALL_DEV_NUM * 4)\n\n"
@@ -427,16 +442,23 @@ def teardown():
#add_tc_2_runlist("") #add_tc_2_runlist("")
pass pass
def set_spi_interface(spi_type):
global global_spi_type
global_spi_type = spi_type
def set_using_8b10b(isUsing8b10b): def set_using_8b10b(isUsing8b10b):
global global_using_8b10b global global_using_8b10b
global_using_8b10b = isUsing8b10b global_using_8b10b = isUsing8b10b
def using_proper_transcode(dev): def using_proper_workmode(dev, iface=1):
global global_using_8b10b global global_using_8b10b
global global_spi_type
trans_code = 0x0
if global_using_8b10b: if global_using_8b10b:
return genIFRwDataCode(dev, 0x004c, True, 2, [0x1, 0x59], wlog = False) trans_code = 0x1
else:
return genIFRwDataCode(dev, 0x004c, True, 2, [0x0, 0x59], wlog = False) return genIFRwDataCode(dev, 0x09, True, 1, [global_spi_type, ], wlog=False, iface=iface)+genIFRwDataCode(dev, 0x004c, True, 2, [trans_code, 0x59], wlog = False)

View File

@@ -58,7 +58,7 @@ def tc1():
default_trans_code = "" default_trans_code = ""
for i in range(dev_num + 1): for i in range(dev_num + 1):
default_trans_code = default_trans_code + using_proper_transcode(i) default_trans_code = default_trans_code + using_proper_workmode(i, iface = 4)
genPkt.addAfterExc(genMessageCode("--正确的key") genPkt.addAfterExc(genMessageCode("--正确的key")
+change_8b10b_code1 +change_8b10b_code1

View File

@@ -833,8 +833,8 @@ def tc5():
+genIFRwDataCode(2, 0xc0, False, 4) +genIFRwDataCode(2, 0xc0, False, 4)
+genIFRwDataCode(3, 0xc0, False, 4) +genIFRwDataCode(3, 0xc0, False, 4)
+genIFRwDataCode(4, 0x09, True, 1, [0, ], False, iface=1) #+genIFRwDataCode(4, 0x09, True, 1, [0, ], False, iface=1)
+using_proper_transcode(4) +using_proper_workmode(4)
+genIFRwDataCode(4, 0x00, True, 1, [0x2, ]) +genIFRwDataCode(4, 0x00, True, 1, [0x2, ])
+genIFRwDataCode(4, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff]) +genIFRwDataCode(4, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff])
@@ -1337,8 +1337,8 @@ def tc7():
sm_idx = 1 sm_idx = 1
genPkt.addBeforeExc("\n#5000\n" genPkt.addBeforeExc("\n#5000\n"
+genIFRwDataCode(0, 0x09, True, 1, [0, ], False, iface=1) #+genIFRwDataCode(0, 0x09, True, 1, [0, ], False, iface=1)
+using_proper_transcode(0) +using_proper_workmode(0)
+genIFRwDataCode(0, 0x74, False, 4) +genIFRwDataCode(0, 0x74, False, 4)
#+genIFRwDataCode(0, 0x40, False, 4) #+genIFRwDataCode(0, 0x40, False, 4)
@@ -1770,15 +1770,15 @@ def tc8():
sm_idx = 1 sm_idx = 1
genPkt.addBeforeExc("\n#5000\n" genPkt.addBeforeExc("\n#5000\n"
+genIFRwDataCode(0, 0x09, True, 1, [0, ], False, iface=1) #+genIFRwDataCode(0, 0x09, True, 1, [0, ], False, iface=1)
+using_proper_transcode(0) +using_proper_workmode(0)
+genIFRwDataCode(0, 0x74, False, 4) +genIFRwDataCode(0, 0x74, False, 4)
+genIFRwDataCode(0, 0x00, True, 1, [0x1, ]) +genIFRwDataCode(0, 0x00, True, 1, [0x1, ])
+genIFRwDataCode(0, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff]) +genIFRwDataCode(0, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff])
+genIFRwDataCode(1, 0x09, True, 1, [0, ], False, iface=1) #+genIFRwDataCode(1, 0x09, True, 1, [0, ], False, iface=1)
+using_proper_transcode(1) +using_proper_workmode(1)
+genIFRwDataCode(1, 0x74, False, 4) +genIFRwDataCode(1, 0x74, False, 4)
+genIFRwDataCode(1, 0x00, True, 1, [0x2, ]) +genIFRwDataCode(1, 0x00, True, 1, [0x2, ])
@@ -1862,8 +1862,8 @@ def tc8():
sm_idx = 1 sm_idx = 1
genPkt.addBeforeExc("\n#5000\n" genPkt.addBeforeExc("\n#5000\n"
+genIFRwDataCode(0, 0x09, True, 1, [0, ], False, iface=1) #+genIFRwDataCode(0, 0x09, True, 1, [0, ], False, iface=1)
+using_proper_transcode(0) +using_proper_workmode(0)
+genIFRwDataCode(0, 0x74, False, 4) +genIFRwDataCode(0, 0x74, False, 4)
#+genIFRwDataCode(0, 0x40, False, 4) #+genIFRwDataCode(0, 0x40, False, 4)

View File

@@ -3,7 +3,7 @@
16'h030e 8'h00 16'h0002 8'h94 8'h00 16'h030e 8'h00 16'h0002 8'h94 8'h00
16'h2000 8'h00 16'h0094 8'h09 8'h00 8'h00 8'h00 8'h00 8'h04 8'h00 8'h00 8'h00 8'h40 8'h00 8'h01 8'h02 8'h03 8'h04 8'h05 8'h06 8'h07 8'h08 8'h09 8'h0a 8'h0b 8'h0c 8'h0d 8'h0e 8'h0f 8'h10 8'h11 8'h12 8'h13 8'h14 8'h15 8'h16 8'h17 8'h18 8'h19 8'h1a 8'h1b 8'h1c 8'h1d 8'h1e 8'h1f 8'h20 8'h21 8'h22 8'h23 8'h24 8'h25 8'h26 8'h27 8'h28 8'h29 8'h2a 8'h2b 8'h2c 8'h2d 8'h2e 8'h2f 8'h30 8'h31 8'h32 8'h33 8'h34 8'h35 8'h36 8'h37 8'h38 8'h39 8'h3a 8'h3b 8'h3c 8'h3d 8'h3e 8'h3f 8'h00 8'h00 8'h00 8'h0c 8'h00 8'hc0 8'h00 8'h40 8'h00 8'h01 8'h02 8'h03 8'h04 8'h05 8'h06 8'h07 8'h08 8'h09 8'h0a 8'h0b 8'h0c 8'h0d 8'h0e 8'h0f 8'h10 8'h11 8'h12 8'h13 8'h14 8'h15 8'h16 8'h17 8'h18 8'h19 8'h1a 8'h1b 8'h1c 8'h1d 8'h1e 8'h1f 8'h20 8'h21 8'h22 8'h23 8'h24 8'h25 8'h26 8'h27 8'h28 8'h29 8'h2a 8'h2b 8'h2c 8'h2d 8'h2e 8'h2f 8'h30 8'h31 8'h32 8'h33 8'h34 8'h35 8'h36 8'h37 8'h38 8'h39 8'h3a 8'h3b 8'h3c 8'h3d 8'h3e 8'h3f 8'h00 8'h00 16'h2000 8'h00 16'h0094 8'h09 8'h00 8'h00 8'h00 8'h00 8'h04 8'h00 8'h00 8'h00 8'h40 8'h00 8'h01 8'h02 8'h03 8'h04 8'h05 8'h06 8'h07 8'h08 8'h09 8'h0a 8'h0b 8'h0c 8'h0d 8'h0e 8'h0f 8'h10 8'h11 8'h12 8'h13 8'h14 8'h15 8'h16 8'h17 8'h18 8'h19 8'h1a 8'h1b 8'h1c 8'h1d 8'h1e 8'h1f 8'h20 8'h21 8'h22 8'h23 8'h24 8'h25 8'h26 8'h27 8'h28 8'h29 8'h2a 8'h2b 8'h2c 8'h2d 8'h2e 8'h2f 8'h30 8'h31 8'h32 8'h33 8'h34 8'h35 8'h36 8'h37 8'h38 8'h39 8'h3a 8'h3b 8'h3c 8'h3d 8'h3e 8'h3f 8'h00 8'h00 8'h00 8'h0c 8'h00 8'hc0 8'h00 8'h40 8'h00 8'h01 8'h02 8'h03 8'h04 8'h05 8'h06 8'h07 8'h08 8'h09 8'h0a 8'h0b 8'h0c 8'h0d 8'h0e 8'h0f 8'h10 8'h11 8'h12 8'h13 8'h14 8'h15 8'h16 8'h17 8'h18 8'h19 8'h1a 8'h1b 8'h1c 8'h1d 8'h1e 8'h1f 8'h20 8'h21 8'h22 8'h23 8'h24 8'h25 8'h26 8'h27 8'h28 8'h29 8'h2a 8'h2b 8'h2c 8'h2d 8'h2e 8'h2f 8'h30 8'h31 8'h32 8'h33 8'h34 8'h35 8'h36 8'h37 8'h38 8'h39 8'h3a 8'h3b 8'h3c 8'h3d 8'h3e 8'h3f 8'h00 8'h00
16'h0020 8'h00 16'h0001 8'h0b 16'h0020 8'h00 16'h0001 8'h0b
16'h1800 8'h80 16'h0094 8'h09 8'h00 8'h00 8'h04 8'h00 8'h04 8'h00 8'h00 8'h00 8'h40 8'h02 8'h01 8'h4c 8'h58 8'h50 8'h30 8'h30 8'h31 8'h55 8'h00 8'h01 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 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'h01 8'h00 8'h0c 8'h00 8'hc0 8'h00 8'h40 8'h08 8'h00 8'h04 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 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'h01 16'h1800 8'h80 16'h0094 8'h09 8'h00 8'h00 8'h04 8'h00 8'h04 8'h00 8'h00 8'h00 8'h40 8'h02 8'h01 8'h4c 8'h58 8'h50 8'h30 8'h30 8'h31 8'h55 8'hxx 8'h01 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 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'h01 8'h00 8'h0c 8'h00 8'hc0 8'h00 8'h40 8'h08 8'h00 8'h04 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 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'h01
16'h0074 8'h80 16'h0004 8'h03 8'h00 8'h06 8'h00 16'h0074 8'h80 16'h0004 8'h03 8'h00 8'h06 8'h00
16'h0074 8'h80 16'h0004 8'h00 8'h00 8'h0f 8'h00 16'h0074 8'h80 16'h0004 8'h00 8'h00 8'h0f 8'h00
16'h0074 8'h80 16'h0004 8'h00 8'h00 8'h0f 8'h00 16'h0074 8'h80 16'h0004 8'h00 8'h00 8'h0f 8'h00

View File

@@ -3,7 +3,7 @@
16'h0316 8'h00 16'h0002 8'h8c 8'h00 16'h0316 8'h00 16'h0002 8'h8c 8'h00
16'h3000 8'h00 16'h008c 8'h08 8'h80 8'h00 8'h00 8'h00 8'h04 8'h00 8'h00 8'hd0 8'h80 8'h00 8'h01 8'h02 8'h03 8'h04 8'h05 8'h06 8'h07 8'h08 8'h09 8'h0a 8'h0b 8'h0c 8'h0d 8'h0e 8'h0f 8'h10 8'h11 8'h12 8'h13 8'h14 8'h15 8'h16 8'h17 8'h18 8'h19 8'h1a 8'h1b 8'h1c 8'h1d 8'h1e 8'h1f 8'h20 8'h21 8'h22 8'h23 8'h24 8'h25 8'h26 8'h27 8'h28 8'h29 8'h2a 8'h2b 8'h2c 8'h2d 8'h2e 8'h2f 8'h30 8'h31 8'h32 8'h33 8'h34 8'h35 8'h36 8'h37 8'h38 8'h39 8'h3a 8'h3b 8'h3c 8'h3d 8'h3e 8'h3f 8'h40 8'h41 8'h42 8'h43 8'h44 8'h45 8'h46 8'h47 8'h48 8'h49 8'h4a 8'h4b 8'h4c 8'h4d 8'h4e 8'h4f 8'h50 8'h51 8'h52 8'h53 8'h54 8'h55 8'h56 8'h57 8'h58 8'h59 8'h5a 8'h5b 8'h5c 8'h5d 8'h5e 8'h5f 8'h60 8'h61 8'h62 8'h63 8'h64 8'h65 8'h66 8'h67 8'h68 8'h69 8'h6a 8'h6b 8'h6c 8'h6d 8'h6e 8'h6f 8'h70 8'h71 8'h72 8'h73 8'h74 8'h75 8'h76 8'h77 8'h78 8'h79 8'h7a 8'h7b 8'h7c 8'h7d 8'h7e 8'h7f 8'h00 8'h00 16'h3000 8'h00 16'h008c 8'h08 8'h80 8'h00 8'h00 8'h00 8'h04 8'h00 8'h00 8'hd0 8'h80 8'h00 8'h01 8'h02 8'h03 8'h04 8'h05 8'h06 8'h07 8'h08 8'h09 8'h0a 8'h0b 8'h0c 8'h0d 8'h0e 8'h0f 8'h10 8'h11 8'h12 8'h13 8'h14 8'h15 8'h16 8'h17 8'h18 8'h19 8'h1a 8'h1b 8'h1c 8'h1d 8'h1e 8'h1f 8'h20 8'h21 8'h22 8'h23 8'h24 8'h25 8'h26 8'h27 8'h28 8'h29 8'h2a 8'h2b 8'h2c 8'h2d 8'h2e 8'h2f 8'h30 8'h31 8'h32 8'h33 8'h34 8'h35 8'h36 8'h37 8'h38 8'h39 8'h3a 8'h3b 8'h3c 8'h3d 8'h3e 8'h3f 8'h40 8'h41 8'h42 8'h43 8'h44 8'h45 8'h46 8'h47 8'h48 8'h49 8'h4a 8'h4b 8'h4c 8'h4d 8'h4e 8'h4f 8'h50 8'h51 8'h52 8'h53 8'h54 8'h55 8'h56 8'h57 8'h58 8'h59 8'h5a 8'h5b 8'h5c 8'h5d 8'h5e 8'h5f 8'h60 8'h61 8'h62 8'h63 8'h64 8'h65 8'h66 8'h67 8'h68 8'h69 8'h6a 8'h6b 8'h6c 8'h6d 8'h6e 8'h6f 8'h70 8'h71 8'h72 8'h73 8'h74 8'h75 8'h76 8'h77 8'h78 8'h79 8'h7a 8'h7b 8'h7c 8'h7d 8'h7e 8'h7f 8'h00 8'h00
16'h0020 8'h00 16'h0001 8'h15 16'h0020 8'h00 16'h0001 8'h15
16'h2800 8'h80 16'h008c 8'h08 8'h80 8'h00 8'h04 8'h00 8'h04 8'h00 8'h00 8'hd0 8'h80 8'h02 8'h01 8'h4e 8'h5b 8'h54 8'h35 8'h36 8'h37 8'h5d 8'h09 8'h0f 8'h0b 8'h0c 8'h0d 8'h0e 8'h0f 8'h10 8'h11 8'h12 8'h13 8'h14 8'h15 8'h16 8'h17 8'h18 8'h19 8'h1a 8'h1b 8'h1c 8'h1d 8'h1e 8'h1f 8'h20 8'h21 8'h22 8'h23 8'h24 8'h25 8'h26 8'h27 8'h28 8'h29 8'h2a 8'h2b 8'h2c 8'h2d 8'h2e 8'h2f 8'h30 8'h31 8'h32 8'h33 8'h34 8'h35 8'h36 8'h37 8'h38 8'h39 8'h3a 8'h3b 8'h3c 8'h3d 8'h3e 8'h3f 8'h40 8'h41 8'h42 8'h43 8'h7c 8'h75 8'h46 8'hc7 8'h5d 8'h4d 8'h4a 8'h4b 8'hxx 8'h4d 8'h4e 8'h4f 8'h50 8'hd7 8'hd7 8'h53 8'h54 8'h55 8'h56 8'h57 8'h58 8'h59 8'h5a 8'h5b 8'h5c 8'h5d 8'h5e 8'h5f 8'h60 8'h61 8'h62 8'h63 8'h64 8'h65 8'h66 8'h67 8'h68 8'h69 8'h6a 8'h6b 8'h6c 8'h6d 8'h6e 8'h6f 8'h70 8'h71 8'h72 8'hf3 8'h74 8'h75 8'h77 8'h77 8'h78 8'h79 8'h7a 8'h7b 8'h7c 8'hfd 8'h7e 8'h7f 8'h00 8'h04 16'h2800 8'h80 16'h008c 8'h08 8'h80 8'h00 8'h04 8'h00 8'h04 8'h00 8'h00 8'hd0 8'h80 8'h02 8'h01 8'h4e 8'h5b 8'h54 8'h35 8'h36 8'h37 8'h5d 8'hxx 8'h0f 8'h0b 8'h0c 8'h0d 8'h0e 8'h0f 8'h10 8'h11 8'h12 8'h13 8'h14 8'h15 8'h16 8'h17 8'h18 8'h19 8'h1a 8'h1b 8'h1c 8'h1d 8'h1e 8'h1f 8'h20 8'h21 8'h22 8'h23 8'h24 8'h25 8'h26 8'h27 8'h28 8'h29 8'h2a 8'h2b 8'h2c 8'h2d 8'h2e 8'h2f 8'h30 8'h31 8'h32 8'h33 8'h34 8'h35 8'h36 8'h37 8'h38 8'h39 8'h3a 8'h3b 8'h3c 8'h3d 8'h3e 8'h3f 8'h40 8'h41 8'h42 8'h43 8'h7c 8'h75 8'h46 8'hc7 8'h5d 8'h4d 8'h4a 8'h4b 8'hxx 8'h4d 8'h4e 8'h4f 8'h50 8'hd7 8'hd7 8'h53 8'h54 8'h55 8'h56 8'h57 8'h58 8'h59 8'h5a 8'h5b 8'h5c 8'h5d 8'h5e 8'h5f 8'h60 8'h61 8'h62 8'h63 8'h64 8'h65 8'h66 8'h67 8'h68 8'h69 8'h6a 8'h6b 8'h6c 8'h6d 8'h6e 8'h6f 8'h70 8'h71 8'h72 8'hf3 8'h74 8'h75 8'h77 8'h77 8'h78 8'h79 8'h7a 8'h7b 8'h7c 8'hfd 8'h7e 8'h7f 8'h00 8'h04
16'h0074 8'h80 16'h0004 8'h03 8'h00 8'h06 8'h00 16'h0074 8'h80 16'h0004 8'h03 8'h00 8'h06 8'h00
16'h0074 8'h80 16'h0004 8'h00 8'h00 8'h0f 8'h00 16'h0074 8'h80 16'h0004 8'h00 8'h00 8'h0f 8'h00
16'h0074 8'h80 16'h0004 8'h00 8'h00 8'h0f 8'h00 16'h0074 8'h80 16'h0004 8'h00 8'h00 8'h0f 8'h00

View File

@@ -16,7 +16,7 @@
16'h0306 8'h00 16'h0002 8'h8c 8'h00 16'h0306 8'h00 16'h0002 8'h8c 8'h00
16'h1000 8'h00 16'h008c 8'h08 8'h80 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'hd0 8'h80 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 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 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 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'h1000 8'h00 16'h008c 8'h08 8'h80 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'hd0 8'h80 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 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 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 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'h0020 8'h00 16'h0001 8'h01
16'h0800 8'h80 16'h008c 8'h08 8'h80 8'h00 8'h01 8'h00 8'h00 8'h00 8'h00 8'hd0 8'h80 8'h02 8'h01 8'h4c 8'h58 8'h50 8'h30 8'h30 8'h31 8'h55 8'h00 8'h01 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 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'h3c 8'h31 8'h00 8'h80 8'h15 8'h05 8'h00 8'h00 8'hxx 8'h00 8'h00 8'h00 8'h00 8'h87 8'h87 8'h00 8'h00 8'h01 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'hf0 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h10 8'h80 8'h00 8'h00 8'h00 8'h01 16'h0800 8'h80 16'h008c 8'h08 8'h80 8'h00 8'h01 8'h00 8'h00 8'h00 8'h00 8'hd0 8'h80 8'h02 8'h01 8'h4c 8'h58 8'h50 8'h30 8'h30 8'h31 8'h55 8'hxx 8'h01 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 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'h3c 8'h31 8'h00 8'h80 8'h15 8'h05 8'h00 8'h00 8'hxx 8'h00 8'h00 8'h00 8'h00 8'h87 8'h87 8'h00 8'h00 8'h01 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'hf0 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h10 8'h80 8'h00 8'h00 8'h00 8'h01
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'h007c 8'h00 16'h0002 8'h00 8'h81 16'h007c 8'h00 16'h0002 8'h00 8'h81

View File

@@ -23,7 +23,7 @@
16'h0306 8'h00 16'h0002 8'h64 8'h00 16'h0306 8'h00 16'h0002 8'h64 8'h00
16'h1000 8'h00 16'h0064 8'h06 8'h00 8'h00 8'h00 8'h00 8'h04 8'h00 8'h00 8'h00 8'h10 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'h08 8'h00 8'h00 8'h00 8'h10 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'h0c 8'h00 8'h00 8'h00 8'h10 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'h10 8'h00 8'h00 8'h00 8'h10 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'h1000 8'h00 16'h0064 8'h06 8'h00 8'h00 8'h00 8'h00 8'h04 8'h00 8'h00 8'h00 8'h10 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'h08 8'h00 8'h00 8'h00 8'h10 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'h0c 8'h00 8'h00 8'h00 8'h10 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'h10 8'h00 8'h00 8'h00 8'h10 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'h0020 8'h00 16'h0001 8'h01
16'h0800 8'h80 16'h0064 8'h06 8'h00 8'h00 8'h04 8'h00 8'h04 8'h00 8'h00 8'h00 8'h10 8'h02 8'h01 8'h4c 8'h58 8'h50 8'h30 8'h30 8'h31 8'h55 8'h00 8'h01 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h01 8'h00 8'h08 8'h00 8'h00 8'h00 8'h10 8'h02 8'h01 8'h4c 8'h58 8'h50 8'h30 8'h30 8'h31 8'h55 8'h00 8'h02 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h01 8'h00 8'h0c 8'h00 8'h00 8'h00 8'h10 8'h02 8'h01 8'h4c 8'h58 8'h50 8'h30 8'h30 8'h31 8'h55 8'h00 8'h03 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h01 8'h00 8'h10 8'h00 8'h00 8'h00 8'h10 8'h02 8'h01 8'h4c 8'h58 8'h50 8'h30 8'h30 8'h31 8'h55 8'h00 8'h04 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h01 16'h0800 8'h80 16'h0064 8'h06 8'h00 8'h00 8'h04 8'h00 8'h04 8'h00 8'h00 8'h00 8'h10 8'h02 8'h01 8'h4c 8'h58 8'h50 8'h30 8'h30 8'h31 8'h55 8'hxx 8'h01 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h01 8'h00 8'h08 8'h00 8'h00 8'h00 8'h10 8'h02 8'h01 8'h4c 8'h58 8'h50 8'h30 8'h30 8'h31 8'h55 8'hxx 8'h02 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h01 8'h00 8'h0c 8'h00 8'h00 8'h00 8'h10 8'h02 8'h01 8'h4c 8'h58 8'h50 8'h30 8'h30 8'h31 8'h55 8'hxx 8'h03 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h01 8'h00 8'h10 8'h00 8'h00 8'h00 8'h10 8'h02 8'h01 8'h4c 8'h58 8'h50 8'h30 8'h30 8'h31 8'h55 8'hxx 8'h04 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h01
16'h0074 8'h80 16'h0004 8'h03 8'h00 8'h06 8'h00 16'h0074 8'h80 16'h0004 8'h03 8'h00 8'h06 8'h00
16'h0074 8'h80 16'h0004 8'h00 8'h00 8'h0f 8'h00 16'h0074 8'h80 16'h0004 8'h00 8'h00 8'h0f 8'h00
16'h0074 8'h80 16'h0004 8'h00 8'h00 8'h0f 8'h00 16'h0074 8'h80 16'h0004 8'h00 8'h00 8'h0f 8'h00
@@ -43,7 +43,7 @@
16'h0306 8'h00 16'h0002 8'h4c 8'h00 16'h0306 8'h00 16'h0002 8'h4c 8'h00
16'h1000 8'h00 16'h004c 8'h04 8'h80 8'h00 8'h00 8'h80 8'h02 8'h00 8'h00 8'h00 8'h40 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 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'h1000 8'h00 16'h004c 8'h04 8'h80 8'h00 8'h00 8'h80 8'h02 8'h00 8'h00 8'h00 8'h40 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 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'h0020 8'h00 16'h0001 8'h01
16'h0800 8'h80 16'h004c 8'h04 8'h80 8'h00 8'h04 8'h80 8'h02 8'h00 8'h00 8'h00 8'h40 8'h02 8'h01 8'h4c 8'h58 8'h50 8'h30 8'h30 8'h31 8'h55 8'h00 8'h01 8'h00 8'h00 8'h00 8'h00 8'h00 8'h02 8'h01 8'h4c 8'h58 8'h50 8'h30 8'h30 8'h31 8'h55 8'h00 8'h02 8'h00 8'h00 8'h00 8'h00 8'h00 8'h02 8'h01 8'h4c 8'h58 8'h50 8'h30 8'h30 8'h31 8'h55 8'h00 8'h03 8'h00 8'h00 8'h00 8'h00 8'h00 8'h02 8'h01 8'h4c 8'h58 8'h50 8'h30 8'h30 8'h31 8'h55 8'h00 8'h04 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h04 16'h0800 8'h80 16'h004c 8'h04 8'h80 8'h00 8'h04 8'h80 8'h02 8'h00 8'h00 8'h00 8'h40 8'h02 8'h01 8'h4c 8'h58 8'h50 8'h30 8'h30 8'h31 8'h55 8'hxx 8'h01 8'h00 8'h00 8'h00 8'h00 8'h00 8'h02 8'h01 8'h4c 8'h58 8'h50 8'h30 8'h30 8'h31 8'h55 8'hxx 8'h02 8'h00 8'h00 8'h00 8'h00 8'h00 8'h02 8'h01 8'h4c 8'h58 8'h50 8'h30 8'h30 8'h31 8'h55 8'hxx 8'h03 8'h00 8'h00 8'h00 8'h00 8'h00 8'h02 8'h01 8'h4c 8'h58 8'h50 8'h30 8'h30 8'h31 8'h55 8'hxx 8'h04 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h04
16'h0074 8'h80 16'h0004 8'h03 8'h00 8'h06 8'h00 16'h0074 8'h80 16'h0004 8'h03 8'h00 8'h06 8'h00
16'h0074 8'h80 16'h0004 8'h00 8'h00 8'h0f 8'h00 16'h0074 8'h80 16'h0004 8'h00 8'h00 8'h0f 8'h00
16'h0074 8'h80 16'h0004 8'h00 8'h00 8'h0f 8'h00 16'h0074 8'h80 16'h0004 8'h00 8'h00 8'h0f 8'h00

View File

@@ -23,7 +23,7 @@
16'h0306 8'h00 16'h0002 8'h64 8'h00 16'h0306 8'h00 16'h0002 8'h64 8'h00
16'h1000 8'h00 16'h0064 8'h06 8'h00 8'h00 8'h00 8'h40 8'h02 8'h00 8'h00 8'h00 8'h58 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 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 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'h1000 8'h00 16'h0064 8'h06 8'h00 8'h00 8'h00 8'h40 8'h02 8'h00 8'h00 8'h00 8'h58 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 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 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'h0020 8'h00 16'h0001 8'h01
16'h0800 8'h80 16'h0064 8'h06 8'h00 8'h00 8'h04 8'h40 8'h02 8'h00 8'h00 8'h00 8'h58 8'h00 8'h00 8'h00 8'h10 8'h00 8'h02 8'h0a 8'h00 8'h03 8'h01 8'h0a 8'h00 8'h00 8'h10 8'h00 8'h02 8'h0a 8'h00 8'h03 8'h01 8'h14 8'h00 8'h00 8'h10 8'h00 8'h02 8'h0a 8'h00 8'h03 8'h01 8'h1e 8'h00 8'h00 8'h10 8'h00 8'h02 8'h0a 8'h00 8'h03 8'h01 8'h02 8'h01 8'h4c 8'h58 8'h50 8'h30 8'h30 8'h31 8'h55 8'h00 8'h01 8'h00 8'h02 8'h01 8'h4c 8'h58 8'h50 8'h30 8'h30 8'h31 8'h55 8'h00 8'h02 8'h00 8'h02 8'h01 8'h4c 8'h58 8'h50 8'h30 8'h30 8'h31 8'h55 8'h00 8'h03 8'h00 8'h02 8'h01 8'h4c 8'h58 8'h50 8'h30 8'h30 8'h31 8'h55 8'h00 8'h04 8'h00 8'h00 8'h04 16'h0800 8'h80 16'h0064 8'h06 8'h00 8'h00 8'h04 8'h40 8'h02 8'h00 8'h00 8'h00 8'h58 8'h00 8'h00 8'h00 8'h10 8'h00 8'h02 8'h0a 8'h00 8'h03 8'h01 8'h0a 8'h00 8'h00 8'h10 8'h00 8'h02 8'h0a 8'h00 8'h03 8'h01 8'h14 8'h00 8'h00 8'h10 8'h00 8'h02 8'h0a 8'h00 8'h03 8'h01 8'h1e 8'h00 8'h00 8'h10 8'h00 8'h02 8'h0a 8'h00 8'h03 8'h01 8'h02 8'h01 8'h4c 8'h58 8'h50 8'h30 8'h30 8'h31 8'h55 8'hxx 8'h01 8'h00 8'h02 8'h01 8'h4c 8'h58 8'h50 8'h30 8'h30 8'h31 8'h55 8'hxx 8'h02 8'h00 8'h02 8'h01 8'h4c 8'h58 8'h50 8'h30 8'h30 8'h31 8'h55 8'hxx 8'h03 8'h00 8'h02 8'h01 8'h4c 8'h58 8'h50 8'h30 8'h30 8'h31 8'h55 8'hxx 8'h04 8'h00 8'h00 8'h04
16'h0074 8'h80 16'h0004 8'h03 8'h00 8'h06 8'h00 16'h0074 8'h80 16'h0004 8'h03 8'h00 8'h06 8'h00
16'h0074 8'h80 16'h0004 8'h00 8'h00 8'h0f 8'h00 16'h0074 8'h80 16'h0004 8'h00 8'h00 8'h0f 8'h00
16'h0074 8'h80 16'h0004 8'h00 8'h00 8'h0f 8'h00 16'h0074 8'h80 16'h0004 8'h00 8'h00 8'h0f 8'h00

View File

@@ -24,7 +24,7 @@ x
16'h0306 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'h00 8'h00 8'hd0 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'h1000 8'h00 16'h002c 8'h02 8'h80 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'hd0 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'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'h00 8'h00 8'hd0 8'h20 8'h02 8'h01 8'h4c 8'h58 8'h50 8'h30 8'h30 8'h31 8'h55 8'h00 8'h07 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'h03 16'h0800 8'h80 16'h002c 8'h02 8'h80 8'h00 8'h04 8'h00 8'h00 8'h00 8'h00 8'hd0 8'h20 8'h02 8'h01 8'h4c 8'h58 8'h50 8'h30 8'h30 8'h31 8'h55 8'hxx 8'h07 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'h03
16'h0074 8'h80 16'h0004 8'h00 8'h00 8'h01 8'h20 16'h0074 8'h80 16'h0004 8'h00 8'h00 8'h01 8'h20
16'h0074 8'h80 16'h0004 8'h00 8'h00 8'h0f 8'h00 16'h0074 8'h80 16'h0004 8'h00 8'h00 8'h0f 8'h00
16'h0074 8'h80 16'h0004 8'h00 8'h00 8'h0f 8'h00 16'h0074 8'h80 16'h0004 8'h00 8'h00 8'h0f 8'h00

View File

@@ -41,7 +41,7 @@ x
16'h0306 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'h00 8'h00 8'hd0 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'h1000 8'h00 16'h002c 8'h02 8'h80 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'hd0 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'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'h00 8'h00 8'hd0 8'h20 8'h02 8'h01 8'h4c 8'h58 8'h50 8'h30 8'h30 8'h31 8'h55 8'h00 8'h07 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'h0800 8'h80 16'h002c 8'h02 8'h80 8'h00 8'h04 8'h00 8'h00 8'h00 8'h00 8'hd0 8'h20 8'h02 8'h01 8'h4c 8'h58 8'h50 8'h30 8'h30 8'h31 8'h55 8'hxx 8'h07 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'h0022 8'h80 16'h0002 8'h00 8'h00 16'h0022 8'h80 16'h0002 8'h00 8'h00
16'h0022 8'h00 16'h0002 8'hff 8'hff 16'h0022 8'h00 16'h0002 8'hff 8'hff
16'h0022 8'h80 16'h0002 8'h00 8'h00 16'h0022 8'h80 16'h0002 8'h00 8'h00