增加波形生产的工程

This commit is contained in:
yangshenbo 2026-03-17 10:39:55 +08:00
parent 7b91c56bc5
commit 4fc08bfd68
27 changed files with 50279 additions and 0 deletions

8
da4008_case_gen/.idea/.gitignore vendored Normal file
View File

@ -0,0 +1,8 @@
# 默认忽略的文件
/shelf/
/workspace.xml
# 基于编辑器的 HTTP 客户端请求
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

View File

@ -0,0 +1 @@
nb_da4008_make_case.ipynb

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/.venv" />
</content>
<orderEntry type="jdk" jdkName="Python 3.11 (da4008_case_gen)" jdkType="Python SDK" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
<component name="PyDocumentationSettings">
<option name="format" value="PLAIN" />
<option name="myDocStringFormat" value="Plain" />
</component>
</module>

View File

@ -0,0 +1,17 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="PyPackageRequirementsInspection" enabled="false" level="WARNING" enabled_by_default="false">
<option name="ignoredPackages">
<value>
<list size="4">
<item index="0" class="java.lang.String" itemvalue="pyzmq" />
<item index="1" class="java.lang.String" itemvalue="matplotlib" />
<item index="2" class="java.lang.String" itemvalue="prometheus-client" />
<item index="3" class="java.lang.String" itemvalue="Pillow" />
</list>
</value>
</option>
</inspection_tool>
</profile>
</component>

View File

@ -0,0 +1,6 @@
<component name="InspectionProjectProfileManager">
<settings>
<option name="USE_PROJECT_PROFILE" value="false" />
<version value="1.0" />
</settings>
</component>

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Black">
<option name="sdkName" value="Python 3.11 (SimpleConvNet_my)" />
</component>
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.11 (da4008_case_gen)" project-jdk-type="Python SDK" />
</project>

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/da4008_case_gen.iml" filepath="$PROJECT_DIR$/.idea/da4008_case_gen.iml" />
</modules>
</component>
</project>

View File

@ -0,0 +1,382 @@
#!/usr/bin/env python3
"""
DA4008 波形生成与transaction帧封装工具
支持生成正弦波三角波方波Flattop波形并自动生成对应的控制命令
将命令和波形数据封装为两个transaction帧输出到指定文件
同时生成一个LVDS数据帧包含帧头地址/长度波形数据CRC用于LVDS_DRIVER发送
LVDS帧格式每行一个32位十六进制数
[帧头] 0xBCBCBCBC
[地址/长度] (lvds_addr << 16) | num_words
[波形数据0] ...
[波形数据N]
[CRC32] 从地址/长度字到最后一个数据字的CRC校验
帧格式64位头部 + 数据
W/R=0, ARD_FLAG=0, CID=0, EXADDR=0
cmd帧 ADDR=0x100000, wave帧 ADDR=0x200000
长度字段根据实际数据字节数计算
输出文件每行一个32位十六进制数顺序为
[cmd帧高32位]
[cmd帧低32位]
cmd命令数据每行一个32位命令字
[wave帧高32位]
[wave帧低32位]
wave波形数据每行一个32位字512-bit块打包后的结果
"""
import argparse
import math
import sys
import os
# 常数
FS = 40e9 # 采样率 40 GHz
MAX_ADDR = 8192 # SRAM深度
CMD_WAVE = 0x00000000 # 波形命令标志位bit31=0
CMD_HOLD = 0x80000000 # 保持命令标志位bit31=1
def parse_args():
parser = argparse.ArgumentParser(description='为DA4008生成波形与命令并封装为transaction帧同时生成LVDS数据帧')
parser.add_argument('--type', required=True, choices=['sine', 'triangle', 'pulse', 'flattop'],
help='波形类型: sine, triangle, pulse, flattop')
parser.add_argument('--start_addr', type=int, required=True,
help='波形起始地址 (0-8191)')
parser.add_argument('--length', type=int,
help='波形样本点数 (对sine/triangle/pulse有效必须为正整数)')
parser.add_argument('--cycles', type=int, default=1,
help='循环次数 (0-31, 0表示无限循环, 默认1)')
# 正弦波参数
parser.add_argument('--freq', type=float, help='正弦波频率 (Hz)')
# 三角波参数
parser.add_argument('--step', type=int, help='三角波步进 (1-255)')
parser.add_argument('--duration', type=int, help='三角波每个台阶的持续时间 (时钟周期数)')
# 方波参数
parser.add_argument('--duty', type=float, default=0.5,
help='方波占空比 (0.0-1.0, 默认0.5)')
# Flattop参数
parser.add_argument('--rise_samples', type=int,
help='Flattop上升沿样本数')
parser.add_argument('--hold_cycles', type=int,
help='Flattop平台保持周期数')
parser.add_argument('--fall_samples', type=int,
help='Flattop下降沿样本数')
parser.add_argument('--hold_value', type=int, default=255,
help='Flattop平台值 (0-255, 默认255)')
# 输出文件
parser.add_argument('--output', required=True,
help='输出transaction文件路径')
# LVDS参数
parser.add_argument('--lvds_addr', type=lambda x: int(x, 0), required=True,
help='LVDS帧中的地址 (支持十六进制如0x1234)')
parser.add_argument('--lvds_output', type=str,
help='LVDS数据帧输出文件路径 (默认: 将--output的扩展名改为_lvds.txt)')
return parser.parse_args()
# ================== 波形生成函数 ==================
def generate_sine(num_samples, freq):
"""生成正弦波样本 (8-bit无符号)"""
if freq <= 0 or freq > FS/2:
raise ValueError(f"频率必须介于0和{FS/2:.1f} Hz之间")
samples_per_cycle = FS / freq
if samples_per_cycle < 1:
raise ValueError("频率太高每个周期样本数小于1")
samples = []
for i in range(num_samples):
phase = 2 * math.pi * i / samples_per_cycle
val = int(128 + 127 * math.sin(phase))
samples.append(val)
return samples
def generate_triangle(num_samples, step, duration):
"""生成三角波样本 (8-bit无符号)"""
if step < 1 or step > 255:
raise ValueError("步进必须介于1和255之间")
if duration < 1:
raise ValueError("持续时间必须为正整数")
samples = []
direction = 1
current = 0
cnt = 0
while len(samples) < num_samples:
samples.append(current)
cnt += 1
if cnt >= duration:
cnt = 0
next_val = current + direction * step
if next_val > 255:
next_val = 255
direction = -1
elif next_val < 0:
next_val = 0
direction = 1
current = next_val
return samples
def generate_pulse(num_samples, freq, duty):
"""生成方波样本 (8-bit, 高=255, 低=0)"""
if freq <= 0 or freq > FS/2:
raise ValueError(f"频率必须介于0和{FS/2:.1f} Hz之间")
if duty < 0 or duty > 1:
raise ValueError("占空比必须介于0和1之间")
period = FS / freq
high_samples = int(round(period * duty))
low_samples = int(round(period * (1 - duty)))
if high_samples + low_samples == 0:
raise ValueError("频率和占空比导致零样本周期")
samples = []
while len(samples) < num_samples:
for _ in range(high_samples):
samples.append(255)
if len(samples) >= num_samples:
break
for _ in range(low_samples):
samples.append(0)
if len(samples) >= num_samples:
break
return samples
def generate_flattop(rise_samples, hold_cycles, fall_samples, hold_value=255):
"""生成Flattop波形上升沿和下降沿样本平台不存储
返回 (rise_samples_list, fall_samples_list)
"""
if rise_samples < 1 or fall_samples < 1:
raise ValueError("上升沿和下降沿样本数必须至少为1")
if hold_cycles < 0:
raise ValueError("保持周期数不能为负")
# 上升沿线性从0到hold_value
rise = []
for i in range(rise_samples):
val = int(hold_value * i / (rise_samples - 1))
rise.append(val)
# 下降沿线性从hold_value到0
fall = []
for i in range(fall_samples):
val = int(hold_value * (fall_samples - 1 - i) / (fall_samples - 1))
fall.append(val)
return rise, fall
def pack_samples_to_blocks(samples):
"""将样本列表按每64个一组打包成512-bit字列表
返回列表每个元素为16个32-bit字的列表每个32-bit字以整数表示
"""
blocks = []
if len(samples) == 0:
return blocks
# 补零到64的倍数
if len(samples) % 64 != 0:
samples += [0] * (64 - len(samples) % 64)
for i in range(0, len(samples), 64):
block_samples = samples[i:i+64]
words = []
for j in range(0, 64, 4):
word = (block_samples[j+3] << 24) | (block_samples[j+2] << 16) | \
(block_samples[j+1] << 8) | block_samples[j]
words.append(word)
blocks.append(words)
return blocks
def generate_wave_command(start_addr, length_words, cycles):
"""生成波形命令字 (32-bit)"""
if start_addr < 0 or start_addr >= MAX_ADDR:
raise ValueError(f"起始地址必须介于0和{MAX_ADDR-1}之间")
if length_words < 1 or length_words > MAX_ADDR:
raise ValueError(f"长度必须介于1和{MAX_ADDR}之间")
if start_addr + length_words > MAX_ADDR:
raise ValueError("地址范围超出SRAM深度")
if cycles < 0 or cycles > 31:
raise ValueError("循环次数必须介于0和31之间")
cmd = CMD_WAVE | (cycles << 26) | (start_addr << 13) | length_words
return cmd
def generate_hold_command(hold_cycles):
"""生成保持命令字"""
if hold_cycles < 0 or hold_cycles > 0x7FFFFFFF:
raise ValueError("保持周期数超出范围 (0-2^31-1)")
return CMD_HOLD | hold_cycles
# ================== CRC32 计算 ==================
def crc32_next(crc, data):
"""按位计算CRC32多项式0x04C11DB7MSB优先"""
poly = 0x04C11DB7
new_crc = crc
for i in range(32):
# 取CRC的最高位
bit = (new_crc >> 31) & 1
# 取数据的最高位MSB first
data_bit = (data >> (31 - i)) & 1
b = bit ^ data_bit
new_crc = (new_crc << 1) & 0xFFFFFFFF
if b:
new_crc ^= poly
return new_crc
def crc32_compute(words):
"""计算一组32位字的CRC32不包括初始异或直接返回"""
crc = 0xFFFFFFFF
for w in words:
crc = crc32_next(crc, w)
return crc
# ================== transaction帧生成 ==================
def generate_transaction_header(addr, length_bytes):
"""
生成64位头部拆分为两个32位字
addr: 25位地址
length_bytes: 20位长度字节数
返回 (high32, low32)
"""
# W/R=0, ARD_FLAG=0, CID=0, EXADDR=0
header = (addr << 32) | length_bytes
high = (header >> 32) & 0xFFFFFFFF
low = header & 0xFFFFFFFF
return high, low
def write_transaction_file(filename, cmd_words, wave_words):
"""
将cmd命令列表和wave数据列表写入transaction文件
cmd_words: 整数列表每个元素是一个32位命令字
wave_words: 整数列表每个元素是一个32位波形数据字
"""
cmd_len_bytes = len(cmd_words) * 4
wave_len_bytes = len(wave_words) * 4
high_cmd, low_cmd = generate_transaction_header(0x100000, cmd_len_bytes)
high_wave, low_wave = generate_transaction_header(0x200000, wave_len_bytes)
with open(filename, 'w') as f:
# cmd帧头部
f.write(f"{high_cmd:08x}\n")
f.write(f"{low_cmd:08x}\n")
# cmd数据
for w in cmd_words:
f.write(f"{w:08x}\n")
# wave帧头部
f.write(f"{high_wave:08x}\n")
f.write(f"{low_wave:08x}\n")
# wave数据
for w in wave_words:
f.write(f"{w:08x}\n")
print(f"已生成transaction文件: {filename}")
print(f" cmd帧: {len(cmd_words)} 字, 长度 {cmd_len_bytes} 字节")
print(f" wave帧: {len(wave_words)} 字, 长度 {wave_len_bytes} 字节")
# ================== LVDS帧生成 ==================
def write_lvds_file(filename, lvds_addr, data_words):
"""
将波形数据打包成LVDS帧写入文件
帧格式: [帧头] [地址/长度] [数据字...] [CRC32]
所有字均为32位每行一个十六进制数
"""
if len(data_words) == 0:
print("警告波形数据为空不生成LVDS帧")
return
header = 0xBCBCBCBC
addr_len = (lvds_addr << 16) | len(data_words) # 低16位为字数
crc = crc32_compute([addr_len] + data_words)
with open(filename, 'w') as f:
f.write(f"{header:08x}\n")
f.write(f"{addr_len:08x}\n")
for w in data_words:
f.write(f"{w:08x}\n")
f.write(f"{crc:08x}\n")
print(f"已生成LVDS数据帧文件: {filename}")
print(f" LVDS地址: 0x{lvds_addr:04x}, 数据字数: {len(data_words)}")
# ================== 主流程 ==================
def main():
args = parse_args()
# 确定LVDS输出文件名
if args.lvds_output is None:
base, ext = os.path.splitext(args.output)
args.lvds_output = base + "_lvds" + ext
if args.type in ['sine', 'triangle', 'pulse']:
if args.length is None:
sys.exit(f"波形类型 {args.type} 需要指定 --length")
# 生成样本
if args.type == 'sine':
if args.freq is None:
sys.exit("正弦波需要指定 --freq")
samples = generate_sine(args.length, args.freq)
elif args.type == 'triangle':
if args.step is None or args.duration is None:
sys.exit("三角波需要指定 --step 和 --duration")
samples = generate_triangle(args.length, args.step, args.duration)
else: # pulse
if args.freq is None:
sys.exit("方波需要指定 --freq")
samples = generate_pulse(args.length, args.freq, args.duty)
# 打包波形数据
blocks = pack_samples_to_blocks(samples)
wave_words = [word for block in blocks for word in block] # 展平为32位字列表
num_words = len(blocks) # 512-bit块数
# 检查地址范围
if args.start_addr + num_words > MAX_ADDR:
sys.exit(f"地址 {args.start_addr} + 块数 {num_words} 超出SRAM深度 {MAX_ADDR}")
# 生成波形命令
cmd_wave = generate_wave_command(args.start_addr, num_words, args.cycles)
cmd_words = [cmd_wave]
# 如果需要hold命令添加
if args.hold_cycles is not None:
cmd_hold = generate_hold_command(args.hold_cycles)
cmd_words.append(cmd_hold)
# 写入transaction文件
write_transaction_file(args.output, cmd_words, wave_words)
# 写入LVDS文件
write_lvds_file(args.lvds_output, args.lvds_addr, wave_words)
elif args.type == 'flattop':
if args.rise_samples is None or args.hold_cycles is None or args.fall_samples is None:
sys.exit("Flattop波形需要指定 --rise_samples, --hold_cycles, --fall_samples")
# 生成上升沿和下降沿样本
rise_samples, fall_samples = generate_flattop(args.rise_samples, args.hold_cycles,
args.fall_samples, args.hold_value)
# 打包上升沿
rise_blocks = pack_samples_to_blocks(rise_samples)
rise_words = [word for block in rise_blocks for word in block]
num_rise_words = len(rise_blocks)
# 打包下降沿
fall_blocks = pack_samples_to_blocks(fall_samples)
fall_words = [word for block in fall_blocks for word in block]
num_fall_words = len(fall_blocks)
# 检查地址范围
if args.start_addr + num_rise_words > MAX_ADDR:
sys.exit(f"上升沿地址 {args.start_addr} + 块数 {num_rise_words} 超出SRAM深度 {MAX_ADDR}")
fall_start_addr = args.start_addr + num_rise_words
if fall_start_addr + num_fall_words > MAX_ADDR:
sys.exit(f"下降沿起始地址 {fall_start_addr} + 块数 {num_fall_words} 超出SRAM深度 {MAX_ADDR}")
# 生成命令
cmd_rise = generate_wave_command(args.start_addr, num_rise_words, args.cycles)
cmd_hold = generate_hold_command(args.hold_cycles)
cmd_fall = generate_wave_command(fall_start_addr, num_fall_words, args.cycles)
cmd_words = [cmd_rise, cmd_hold, cmd_fall]
# 波形数据 = 上升沿 + 下降沿
wave_words = rise_words + fall_words
# 写入transaction文件
write_transaction_file(args.output, cmd_words, wave_words)
# 写入LVDS文件
write_lvds_file(args.lvds_output, args.lvds_addr, wave_words)
if __name__ == "__main__":
main()

View File

@ -0,0 +1,322 @@
{
"cells": [
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-03-14T10:01:29.820846Z",
"start_time": "2026-03-14T10:01:28.106163Z"
}
},
"cell_type": "code",
"source": [
"print(\"你好,世界!\")\n",
"name = input(\"请输入你的名字:\")\n",
"print(f\"欢迎你,{name}\")"
],
"id": "eea196e830ee8847",
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"你好,世界!\n",
"欢迎你,!\n"
]
}
],
"execution_count": 2
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-03-16T12:16:00.812425Z",
"start_time": "2026-03-16T12:16:00.204555Z"
}
},
"cell_type": "code",
"source": [
"\n",
"#!/usr/bin/env python3\n",
"\"\"\"\n",
"批量生成常用测试波形\n",
"直接运行此脚本,一次性生成多个测试文件\n",
"\"\"\"\n",
"\n",
"import subprocess\n",
"import os\n",
"import sys\n",
"import time\n",
"from pathlib import Path\n",
"\n",
"# ========== 配置区 ==========\n",
"SCRIPT_NAME = \"da4008_gen_transaction.py\" # 波形生成脚本文件名\n",
"OUTPUT_DIR = \"./wave\" # 输出目录\n",
"# ============================\n",
"\n",
"# 确保输出目录存在\n",
"os.makedirs(OUTPUT_DIR, exist_ok=True)\n",
"\n",
"# 检查波形生成脚本是否存在\n",
"if not Path(SCRIPT_NAME).is_file():\n",
" print(f\"错误:找不到脚本文件 {SCRIPT_NAME}\")\n",
" print(\"请确保该脚本与批量生成脚本在同一目录下,或修改 SCRIPT_NAME 变量。\")\n",
" sys.exit(1)\n",
"\n",
"# 测试用例定义(使用结构化参数,便于增删改)\n",
"test_cases = [\n",
" {\n",
" \"name\": \"1GHz标准正弦波\",\n",
" \"params\": {\n",
" \"--type\": \"sine\",\n",
" \"--start_addr\": 0x100,\n",
" \"--length\": 10000, ##决定单次的持续波形时长一个点就是0.024ns。 1024就是能够持续24.5ns\n",
" \"--freq\": \"1e9\", ##决定正弦波的周期,频率越大,一个周期组成的点数越少,波形越不准。\n",
" \"--cycles\": 1,\n",
" \"--lvds_addr\": \"0x1000\",\n",
" \"--output\": f\"{OUTPUT_DIR}/sine_1g.txt\"\n",
" }\n",
" },\n",
" {\n",
" \"name\": \"10G正弦波\",\n",
" \"params\": {\n",
" \"--type\": \"sine\",\n",
" \"--start_addr\": 0,\n",
" \"--length\": 1024,\n",
" \"--freq\": \"1e10\",\n",
" \"--cycles\": 3,\n",
" \"--lvds_addr\": \"0x1000\",\n",
" \"--output\": f\"{OUTPUT_DIR}/sine_10g.txt\"\n",
" }\n",
" },\n",
" {\n",
" \"name\": \"20G正弦波\",\n",
" \"params\": {\n",
" \"--type\": \"sine\",\n",
" \"--start_addr\": 0,\n",
" \"--length\": 1024,\n",
" \"--freq\": \"2e10\",\n",
" \"--cycles\": 3,\n",
" \"--lvds_addr\": \"0x1000\",\n",
" \"--output\": f\"{OUTPUT_DIR}/sine_20g.txt\"\n",
" }\n",
" },\n",
" {\n",
" \"name\": \"1MHz正弦波\",\n",
" \"params\": {\n",
" \"--type\": \"sine\",\n",
" \"--start_addr\": 0x0,\n",
" \"--length\": 41667,\n",
" \"--freq\": \"1e6\",\n",
" \"--cycles\": 3,\n",
" \"--lvds_addr\": \"0x0\",\n",
" \"--output\": f\"{OUTPUT_DIR}/sine_1MHz.txt\"\n",
" }\n",
" },\n",
" {\n",
" \"name\": \"100Hz正弦波\",\n",
" \"params\": {\n",
" \"--type\": \"sine\",\n",
" \"--start_addr\": 0,\n",
" \"--length\": 1024,\n",
" \"--freq\": \"1e2\",\n",
" \"--cycles\": 3,\n",
" \"--lvds_addr\": \"0x1000\",\n",
" \"--output\": f\"{OUTPUT_DIR}/sine_100Hz.txt\"\n",
" }\n",
" },\n",
"\n",
" {\n",
" \"name\": \"测试用例3方波\",\n",
" \"params\": {\n",
" \"--type\": \"pulse\",\n",
" \"--start_addr\": 0,\n",
" \"--length\": 1024,\n",
" \"--freq\": \"500e6\",\n",
" \"--duty\": 0.5,\n",
" \"--cycles\": 3,\n",
" \"--lvds_addr\": \"0x1000\",\n",
" \"--output\": f\"{OUTPUT_DIR}/test3_pulse_500m.txt\"\n",
" }\n",
" },\n",
" {\n",
" \"name\": \"测试用例4三角波\",\n",
" \"params\": {\n",
" \"--type\": \"triangle\",\n",
" \"--start_addr\": 0,\n",
" \"--length\": 1024,\n",
" \"--step\": 16,\n",
" \"--duration\": 10,\n",
" \"--cycles\": 3,\n",
" \"--lvds_addr\": \"0x1000\",\n",
" \"--output\": f\"{OUTPUT_DIR}/test4_triangle.txt\"\n",
" }\n",
" },\n",
" {\n",
" \"name\": \"测试用例5Flattop波形\",\n",
" \"params\": {\n",
" \"--type\": \"flattop\",\n",
" \"--start_addr\": 0,\n",
" \"--rise_samples\": 100,\n",
" \"--hold_cycles\": 50,\n",
" \"--fall_samples\": 100,\n",
" \"--hold_value\": 255,\n",
" \"--cycles\": 1,\n",
" \"--lvds_addr\": \"0x1000\",\n",
" \"--output\": f\"{OUTPUT_DIR}/test5_flattop.txt\"\n",
" }\n",
" }\n",
"]\n",
"\n",
"def build_command(params):\n",
" \"\"\"将参数字典转换为命令行列表避免shell注入\"\"\"\n",
" cmd = [sys.executable, SCRIPT_NAME]\n",
" for key, value in params.items():\n",
" cmd.append(key)\n",
" cmd.append(str(value))\n",
" return cmd\n",
"\n",
"def run_test_case(case):\n",
" \"\"\"执行单个测试用例,返回成功标志和输出信息\"\"\"\n",
" name = case[\"name\"]\n",
" cmd = build_command(case[\"params\"])\n",
" cmd_str = \" \".join(cmd)\n",
"\n",
" print(f\"\\n▶ {name}\")\n",
" print(f\"命令: {cmd_str}\")\n",
"\n",
" try:\n",
" # 使用列表形式调用安全且无shell=True\n",
" result = subprocess.run(cmd, capture_output=True, text=True, timeout=30)\n",
" if result.returncode == 0:\n",
" print(\"✅ 成功\")\n",
" return True, result.stdout\n",
" else:\n",
" print(\"❌ 失败\")\n",
" print(f\"返回码: {result.returncode}\")\n",
" if result.stderr:\n",
" print(\"错误输出:\")\n",
" print(result.stderr)\n",
" return False, result.stderr\n",
" except subprocess.TimeoutExpired:\n",
" print(\"❌ 超时超过30秒\")\n",
" return False, \"执行超时\"\n",
" except Exception as e:\n",
" print(f\"❌ 异常: {e}\")\n",
" return False, str(e)\n",
"\n",
"def main():\n",
" print(\"开始批量生成测试文件...\")\n",
" print(f\"输出目录: {OUTPUT_DIR}\")\n",
" print(\"=\" * 60)\n",
"\n",
" start_time = time.time()\n",
" success_count = 0\n",
" fail_count = 0\n",
"\n",
" for i, case in enumerate(test_cases, 1):\n",
" print(f\"\\n[{i}/{len(test_cases)}] 正在生成...\")\n",
" success, _ = run_test_case(case)\n",
" if success:\n",
" success_count += 1\n",
" else:\n",
" fail_count += 1\n",
"\n",
" elapsed = time.time() - start_time\n",
" print(\"\\n\" + \"=\" * 60)\n",
" print(f\"批量生成完成!\")\n",
" print(f\"成功: {success_count}, 失败: {fail_count}, 耗时: {elapsed:.2f} 秒\")\n",
" print(f\"文件保存在 {OUTPUT_DIR} 目录下\")\n",
"\n",
"if __name__ == \"__main__\":\n",
" main()"
],
"id": "33083ea8b8420b7e",
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"开始批量生成测试文件...\n",
"输出目录: ./wave\n",
"============================================================\n",
"\n",
"[1/8] 正在生成...\n",
"\n",
"▶ 1GHz标准正弦波\n",
"命令: D:\\yangshenbo\\workspace\\Document\\python_project\\da4008_case_gen\\.venv\\Scripts\\python.exe da4008_gen_transaction.py --type sine --start_addr 256 --length 10000 --freq 1e9 --cycles 1 --lvds_addr 0x1000 --output ./wave/sine_1g.txt\n",
"✅ 成功\n",
"\n",
"[2/8] 正在生成...\n",
"\n",
"▶ 10G正弦波\n",
"命令: D:\\yangshenbo\\workspace\\Document\\python_project\\da4008_case_gen\\.venv\\Scripts\\python.exe da4008_gen_transaction.py --type sine --start_addr 0 --length 1024 --freq 1e10 --cycles 3 --lvds_addr 0x1000 --output ./wave/sine_10g.txt\n",
"✅ 成功\n",
"\n",
"[3/8] 正在生成...\n",
"\n",
"▶ 20G正弦波\n",
"命令: D:\\yangshenbo\\workspace\\Document\\python_project\\da4008_case_gen\\.venv\\Scripts\\python.exe da4008_gen_transaction.py --type sine --start_addr 0 --length 1024 --freq 2e10 --cycles 3 --lvds_addr 0x1000 --output ./wave/sine_20g.txt\n",
"✅ 成功\n",
"\n",
"[4/8] 正在生成...\n",
"\n",
"▶ 1MHz正弦波\n",
"命令: D:\\yangshenbo\\workspace\\Document\\python_project\\da4008_case_gen\\.venv\\Scripts\\python.exe da4008_gen_transaction.py --type sine --start_addr 0 --length 41667 --freq 1e6 --cycles 3 --lvds_addr 0x0 --output ./wave/sine_1MHz.txt\n",
"✅ 成功\n",
"\n",
"[5/8] 正在生成...\n",
"\n",
"▶ 100Hz正弦波\n",
"命令: D:\\yangshenbo\\workspace\\Document\\python_project\\da4008_case_gen\\.venv\\Scripts\\python.exe da4008_gen_transaction.py --type sine --start_addr 0 --length 1024 --freq 1e2 --cycles 3 --lvds_addr 0x1000 --output ./wave/sine_100Hz.txt\n",
"✅ 成功\n",
"\n",
"[6/8] 正在生成...\n",
"\n",
"▶ 测试用例3方波\n",
"命令: D:\\yangshenbo\\workspace\\Document\\python_project\\da4008_case_gen\\.venv\\Scripts\\python.exe da4008_gen_transaction.py --type pulse --start_addr 0 --length 1024 --freq 500e6 --duty 0.5 --cycles 3 --lvds_addr 0x1000 --output ./wave/test3_pulse_500m.txt\n",
"✅ 成功\n",
"\n",
"[7/8] 正在生成...\n",
"\n",
"▶ 测试用例4三角波\n",
"命令: D:\\yangshenbo\\workspace\\Document\\python_project\\da4008_case_gen\\.venv\\Scripts\\python.exe da4008_gen_transaction.py --type triangle --start_addr 0 --length 1024 --step 16 --duration 10 --cycles 3 --lvds_addr 0x1000 --output ./wave/test4_triangle.txt\n",
"✅ 成功\n",
"\n",
"[8/8] 正在生成...\n",
"\n",
"▶ 测试用例5Flattop波形\n",
"命令: D:\\yangshenbo\\workspace\\Document\\python_project\\da4008_case_gen\\.venv\\Scripts\\python.exe da4008_gen_transaction.py --type flattop --start_addr 0 --rise_samples 100 --hold_cycles 50 --fall_samples 100 --hold_value 255 --cycles 1 --lvds_addr 0x1000 --output ./wave/test5_flattop.txt\n",
"✅ 成功\n",
"\n",
"============================================================\n",
"批量生成完成!\n",
"成功: 8, 失败: 0, 耗时: 0.60 秒\n",
"文件保存在 ./wave 目录下\n"
]
}
],
"execution_count": 20
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 5
}

View File

@ -0,0 +1,261 @@
00100000
00000004
0c000010
00200000
00000400
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080

View File

@ -0,0 +1,259 @@
bcbcbcbc
10000100
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
80808080
0c2382bf

View File

@ -0,0 +1,261 @@
00100000
00000004
0c000010
00200000
00000400
0180ff80
0180ff7f
0180ff7f
0180ff7f
0180ff7f
0180ff7f
017fff7f
0180ff7f
017fff7f
0180ff7f
017fff7f
0180ff7f
017fff7f
0180ff80
0180ff7f
0180ff7f
0180ff7f
0180ff80
0180ff7f
0180ff7f
0180ff7f
0180ff80
0180ff7f
017fff7f
0180ff7f
0180ff80
0180ff80
017fff7f
0180ff7f
0180ff80
0180ff7f
017fff7f
0180ff7f
0180ff7f
0180ff80
017fff7f
0180ff7f
0180ff7f
0180ff7f
017fff7f
0180ff7f
017fff7f
0180ff80
0180ff7f
017fff7f
0180ff7f
0180ff7f
0180ff80
0180ff7f
017fff7f
0180ff80
0180ff7f
017fff80
0180ff7f
0180ff7f
0180ff80
0180ff7f
017fff7f
0180ff80
0180ff7f
017fff7f
0180ff7f
0180ff7f
0180ff80
0180ff7f
017fff7f
0180ff7f
0180ff7f
017fff80
0180ff7f
0180ff7f
0180ff80
0180ff7f
017fff7f
0180ff7f
0180ff7f
0180ff7f
0180ff7f
0180ff7f
0180ff80
0180ff7f
0180ff7f
0180ff7f
017fff80
0180ff80
0180ff7f
0180ff7f
0180ff7f
017fff7f
017fff80
0180ff7f
0180ff7f
0180ff7f
017fff7f
017fff80
0180ff7f
0180ff7f
0180ff7f
0180ff7f
017fff80
0180ff80
0180ff7f
0180ff7f
0180ff7f
017fff80
0180ff80
0180ff7f
0180ff7f
0180ff7f
017fff7f
017fff80
0180ff7f
0180ff7f
0180ff7f
0180ff7f
017fff80
0180ff80
0180ff7f
0180ff7f
0180ff7f
017fff7f
0180ff80
0180ff7f
0180ff7f
0180ff7f
017fff7f
017fff80
0180ff7f
0180ff7f
0180ff7f
0180ff7f
017fff80
0180ff7f
0180ff7f
0180ff7f
0180ff7f
017fff80
0180ff80
0180ff7f
0180ff7f
0180ff7f
017fff7f
0180ff80
0180ff7f
0180ff7f
0180ff7f
0180ff7f
017fff80
0180ff7f
0180ff7f
0180ff7f
0180ff7f
017fff7f
0180ff7f
0180ff7f
0180ff7f
0180ff7f
017fff7f
0180ff80
0180ff7f
0180ff7f
0180ff7f
0180ff7f
0180ff7f
0180ff7f
0180ff7f
0180ff80
0180ff80
0180ff80
0180ff7f
0180ff7f
017fff7f
017fff7f
017fff7f
0180ff7f
0180ff7f
0180ff7f
0180ff80
0180ff80
0180ff80
0180ff7f
017fff7f
017fff7f
017fff7f
017fff7f
0180ff7f
0180ff7f
0180ff80
0180ff80
0180ff80
0180ff7f
0180ff7f
017fff7f
017fff7f
017fff7f
0180ff7f
0180ff7f
0180ff7f
0180ff80
0180ff80
0180ff80
0180ff7f
0180ff7f
017fff7f
017fff7f
017fff7f
0180ff7f
0180ff7f
0180ff80
0180ff80
0180ff80
0180ff7f
0180ff7f
017fff7f
017fff7f
017fff7f
0180ff7f
0180ff7f
0180ff7f
0180ff80
0180ff80
0180ff80
0180ff7f
0180ff7f
017fff7f
017fff7f
017fff7f
0180ff7f
0180ff7f
0180ff7f
0180ff80
0180ff80
0180ff80
0180ff7f
0180ff7f
017fff7f
017fff7f
0180ff7f
0180ff7f
0180ff7f
0180ff7f
0180ff80
0180ff80
0180ff7f
0180ff7f
017fff7f
017fff7f
017fff7f
0180ff7f
0180ff7f
0180ff7f
0180ff80
0180ff80
0180ff80
0180ff7f
0180ff7f

View File

@ -0,0 +1,259 @@
bcbcbcbc
10000100
0180ff80
0180ff7f
0180ff7f
0180ff7f
0180ff7f
0180ff7f
017fff7f
0180ff7f
017fff7f
0180ff7f
017fff7f
0180ff7f
017fff7f
0180ff80
0180ff7f
0180ff7f
0180ff7f
0180ff80
0180ff7f
0180ff7f
0180ff7f
0180ff80
0180ff7f
017fff7f
0180ff7f
0180ff80
0180ff80
017fff7f
0180ff7f
0180ff80
0180ff7f
017fff7f
0180ff7f
0180ff7f
0180ff80
017fff7f
0180ff7f
0180ff7f
0180ff7f
017fff7f
0180ff7f
017fff7f
0180ff80
0180ff7f
017fff7f
0180ff7f
0180ff7f
0180ff80
0180ff7f
017fff7f
0180ff80
0180ff7f
017fff80
0180ff7f
0180ff7f
0180ff80
0180ff7f
017fff7f
0180ff80
0180ff7f
017fff7f
0180ff7f
0180ff7f
0180ff80
0180ff7f
017fff7f
0180ff7f
0180ff7f
017fff80
0180ff7f
0180ff7f
0180ff80
0180ff7f
017fff7f
0180ff7f
0180ff7f
0180ff7f
0180ff7f
0180ff7f
0180ff80
0180ff7f
0180ff7f
0180ff7f
017fff80
0180ff80
0180ff7f
0180ff7f
0180ff7f
017fff7f
017fff80
0180ff7f
0180ff7f
0180ff7f
017fff7f
017fff80
0180ff7f
0180ff7f
0180ff7f
0180ff7f
017fff80
0180ff80
0180ff7f
0180ff7f
0180ff7f
017fff80
0180ff80
0180ff7f
0180ff7f
0180ff7f
017fff7f
017fff80
0180ff7f
0180ff7f
0180ff7f
0180ff7f
017fff80
0180ff80
0180ff7f
0180ff7f
0180ff7f
017fff7f
0180ff80
0180ff7f
0180ff7f
0180ff7f
017fff7f
017fff80
0180ff7f
0180ff7f
0180ff7f
0180ff7f
017fff80
0180ff7f
0180ff7f
0180ff7f
0180ff7f
017fff80
0180ff80
0180ff7f
0180ff7f
0180ff7f
017fff7f
0180ff80
0180ff7f
0180ff7f
0180ff7f
0180ff7f
017fff80
0180ff7f
0180ff7f
0180ff7f
0180ff7f
017fff7f
0180ff7f
0180ff7f
0180ff7f
0180ff7f
017fff7f
0180ff80
0180ff7f
0180ff7f
0180ff7f
0180ff7f
0180ff7f
0180ff7f
0180ff7f
0180ff80
0180ff80
0180ff80
0180ff7f
0180ff7f
017fff7f
017fff7f
017fff7f
0180ff7f
0180ff7f
0180ff7f
0180ff80
0180ff80
0180ff80
0180ff7f
017fff7f
017fff7f
017fff7f
017fff7f
0180ff7f
0180ff7f
0180ff80
0180ff80
0180ff80
0180ff7f
0180ff7f
017fff7f
017fff7f
017fff7f
0180ff7f
0180ff7f
0180ff7f
0180ff80
0180ff80
0180ff80
0180ff7f
0180ff7f
017fff7f
017fff7f
017fff7f
0180ff7f
0180ff7f
0180ff80
0180ff80
0180ff80
0180ff7f
0180ff7f
017fff7f
017fff7f
017fff7f
0180ff7f
0180ff7f
0180ff7f
0180ff80
0180ff80
0180ff80
0180ff7f
0180ff7f
017fff7f
017fff7f
017fff7f
0180ff7f
0180ff7f
0180ff7f
0180ff80
0180ff80
0180ff80
0180ff7f
0180ff7f
017fff7f
017fff7f
0180ff7f
0180ff7f
0180ff7f
0180ff7f
0180ff80
0180ff80
0180ff7f
0180ff7f
017fff7f
017fff7f
017fff7f
0180ff7f
0180ff7f
0180ff7f
0180ff80
0180ff80
0180ff80
0180ff7f
0180ff7f
5e8289d3

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,261 @@
00100000
00000004
0c000010
00200000
00000400
807f8080
807f807f
807f807f
807f7f7f
807f7f7f
807f7f7f
80807f7f
807f807f
8080807f
807f807f
8080807f
7f7f807f
8080807f
7f7f8080
8080807f
7f7f807f
807f807f
7f7f8080
807f807f
7f7f807f
7f7f807f
807f8080
807f7f7f
8080807f
7f7f807f
807f8080
807f7f80
8080807f
7f7f807f
807f8080
807f7f7f
8080807f
7f7f807f
807f807f
807f7f80
8080807f
7f7f807f
807f807f
807f807f
8080807f
807f807f
7f80807f
807f8080
807f807f
7f807f7f
807f807f
7f7f807f
807f7f80
807f807f
7f80807f
807f8080
807f807f
80807f80
807f807f
7f7f807f
807f7f80
807f807f
7f80807f
807f8080
807f807f
80807f7f
807f807f
7f7f807f
807f7f80
807f807f
7f80807f
807f807f
807f807f
80807f80
807f807f
7f7f807f
807f8080
807f807f
7f80807f
807f807f
807f807f
807f7f7f
807f807f
7f7f807f
807f8080
807f807f
807f807f
807f807f
80808080
807f8080
7f7f807f
7f7f7f7f
807f807f
8080807f
80808080
7f7f807f
7f7f7f7f
807f7f7f
8080807f
80808080
807f807f
7f7f7f7f
807f7f7f
807f807f
80808080
807f8080
7f7f807f
7f7f7f7f
807f807f
80808080
807f8080
7f7f807f
7f7f7f7f
807f807f
8080807f
80808080
807f807f
7f7f7f7f
807f7f7f
807f807f
80808080
807f8080
7f7f807f
807f7f7f
807f807f
8080807f
807f8080
7f7f807f
7f7f7f7f
807f807f
8080807f
80808080
807f807f
7f7f7f7f
807f807f
807f807f
80808080
807f807f
7f7f807f
807f7f7f
807f807f
80808080
807f8080
7f7f807f
807f7f7f
807f807f
8080807f
807f8080
807f807f
7f7f7f7f
807f807f
807f807f
80808080
807f807f
7f7f807f
807f7f7f
807f807f
8080807f
807f807f
7f7f807f
807f7f7f
807f807f
8080807f
807f8080
807f807f
7f7f7f7f
807f807f
807f807f
807f7f7f
807f7f7f
807f7f7f
807f8080
807f8080
7f7f8080
7f7f807f
7f7f807f
8080807f
8080807f
8080807f
807f7f7f
807f7f7f
807f7f7f
807f8080
7f7f8080
7f7f8080
7f7f807f
7f80807f
8080807f
8080807f
80807f7f
807f7f7f
807f7f7f
807f8080
807f8080
7f7f8080
7f7f807f
7f7f807f
8080807f
8080807f
8080807f
807f7f7f
807f7f7f
807f7f7f
807f8080
807f8080
7f7f8080
7f7f807f
7f7f807f
8080807f
8080807f
8080807f
807f7f7f
807f7f7f
807f7f80
807f8080
7f7f8080
7f7f807f
7f7f807f
8080807f
8080807f
8080807f
807f7f7f
807f7f7f
807f7f7f
807f8080
807f8080
7f7f8080
7f7f807f
7f7f807f
8080807f
8080807f
8080807f
807f7f7f
807f7f7f
807f7f7f
807f8080
807f8080
7f7f8080
7f7f807f
807f807f
8080807f
8080807f
807f807f
807f7f7f
807f7f7f
807f807f
807f8080
7f7f8080
7f7f807f
7f7f807f
8080807f
8080807f
8080807f
807f7f7f
807f7f7f
807f7f7f
807f8080
807f8080
7f7f8080
7f7f807f
807f807f

View File

@ -0,0 +1,259 @@
bcbcbcbc
10000100
807f8080
807f807f
807f807f
807f7f7f
807f7f7f
807f7f7f
80807f7f
807f807f
8080807f
807f807f
8080807f
7f7f807f
8080807f
7f7f8080
8080807f
7f7f807f
807f807f
7f7f8080
807f807f
7f7f807f
7f7f807f
807f8080
807f7f7f
8080807f
7f7f807f
807f8080
807f7f80
8080807f
7f7f807f
807f8080
807f7f7f
8080807f
7f7f807f
807f807f
807f7f80
8080807f
7f7f807f
807f807f
807f807f
8080807f
807f807f
7f80807f
807f8080
807f807f
7f807f7f
807f807f
7f7f807f
807f7f80
807f807f
7f80807f
807f8080
807f807f
80807f80
807f807f
7f7f807f
807f7f80
807f807f
7f80807f
807f8080
807f807f
80807f7f
807f807f
7f7f807f
807f7f80
807f807f
7f80807f
807f807f
807f807f
80807f80
807f807f
7f7f807f
807f8080
807f807f
7f80807f
807f807f
807f807f
807f7f7f
807f807f
7f7f807f
807f8080
807f807f
807f807f
807f807f
80808080
807f8080
7f7f807f
7f7f7f7f
807f807f
8080807f
80808080
7f7f807f
7f7f7f7f
807f7f7f
8080807f
80808080
807f807f
7f7f7f7f
807f7f7f
807f807f
80808080
807f8080
7f7f807f
7f7f7f7f
807f807f
80808080
807f8080
7f7f807f
7f7f7f7f
807f807f
8080807f
80808080
807f807f
7f7f7f7f
807f7f7f
807f807f
80808080
807f8080
7f7f807f
807f7f7f
807f807f
8080807f
807f8080
7f7f807f
7f7f7f7f
807f807f
8080807f
80808080
807f807f
7f7f7f7f
807f807f
807f807f
80808080
807f807f
7f7f807f
807f7f7f
807f807f
80808080
807f8080
7f7f807f
807f7f7f
807f807f
8080807f
807f8080
807f807f
7f7f7f7f
807f807f
807f807f
80808080
807f807f
7f7f807f
807f7f7f
807f807f
8080807f
807f807f
7f7f807f
807f7f7f
807f807f
8080807f
807f8080
807f807f
7f7f7f7f
807f807f
807f807f
807f7f7f
807f7f7f
807f7f7f
807f8080
807f8080
7f7f8080
7f7f807f
7f7f807f
8080807f
8080807f
8080807f
807f7f7f
807f7f7f
807f7f7f
807f8080
7f7f8080
7f7f8080
7f7f807f
7f80807f
8080807f
8080807f
80807f7f
807f7f7f
807f7f7f
807f8080
807f8080
7f7f8080
7f7f807f
7f7f807f
8080807f
8080807f
8080807f
807f7f7f
807f7f7f
807f7f7f
807f8080
807f8080
7f7f8080
7f7f807f
7f7f807f
8080807f
8080807f
8080807f
807f7f7f
807f7f7f
807f7f80
807f8080
7f7f8080
7f7f807f
7f7f807f
8080807f
8080807f
8080807f
807f7f7f
807f7f7f
807f7f7f
807f8080
807f8080
7f7f8080
7f7f807f
7f7f807f
8080807f
8080807f
8080807f
807f7f7f
807f7f7f
807f7f7f
807f8080
807f8080
7f7f8080
7f7f807f
807f807f
8080807f
8080807f
807f807f
807f7f7f
807f7f7f
807f807f
807f8080
7f7f8080
7f7f807f
7f7f807f
8080807f
8080807f
8080807f
807f7f7f
807f7f7f
807f7f7f
807f8080
807f8080
7f7f8080
7f7f807f
807f807f
6f68baa1

View File

@ -0,0 +1,261 @@
00100000
00000004
0c000010
00200000
00000400
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
00000000
00000000
00000000
00000000
00000000
00000000

View File

@ -0,0 +1,259 @@
bcbcbcbc
10000100
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
ffffffff
00000000
00000000
00000000
00000000
00000000
00000000
d936c368

View File

@ -0,0 +1,261 @@
00100000
00000004
0c000010
00200000
00000400
00000000
00000000
10100000
10101010
10101010
20202020
20202020
30302020
30303030
30303030
40404040
40404040
50504040
50505050
50505050
60606060
60606060
70706060
70707070
70707070
80808080
80808080
90908080
90909090
90909090
a0a0a0a0
a0a0a0a0
b0b0a0a0
b0b0b0b0
b0b0b0b0
c0c0c0c0
c0c0c0c0
d0d0c0c0
d0d0d0d0
d0d0d0d0
e0e0e0e0
e0e0e0e0
f0f0e0e0
f0f0f0f0
f0f0f0f0
ffffffff
ffffffff
efefffff
efefefef
efefefef
dfdfdfdf
dfdfdfdf
cfcfdfdf
cfcfcfcf
cfcfcfcf
bfbfbfbf
bfbfbfbf
afafbfbf
afafafaf
afafafaf
9f9f9f9f
9f9f9f9f
8f8f9f9f
8f8f8f8f
8f8f8f8f
7f7f7f7f
7f7f7f7f
6f6f7f7f
6f6f6f6f
6f6f6f6f
5f5f5f5f
5f5f5f5f
4f4f5f5f
4f4f4f4f
4f4f4f4f
3f3f3f3f
3f3f3f3f
2f2f3f3f
2f2f2f2f
2f2f2f2f
1f1f1f1f
1f1f1f1f
0f0f1f1f
0f0f0f0f
0f0f0f0f
00000000
00000000
10100000
10101010
10101010
20202020
20202020
30302020
30303030
30303030
40404040
40404040
50504040
50505050
50505050
60606060
60606060
70706060
70707070
70707070
80808080
80808080
90908080
90909090
90909090
a0a0a0a0
a0a0a0a0
b0b0a0a0
b0b0b0b0
b0b0b0b0
c0c0c0c0
c0c0c0c0
d0d0c0c0
d0d0d0d0
d0d0d0d0
e0e0e0e0
e0e0e0e0
f0f0e0e0
f0f0f0f0
f0f0f0f0
ffffffff
ffffffff
efefffff
efefefef
efefefef
dfdfdfdf
dfdfdfdf
cfcfdfdf
cfcfcfcf
cfcfcfcf
bfbfbfbf
bfbfbfbf
afafbfbf
afafafaf
afafafaf
9f9f9f9f
9f9f9f9f
8f8f9f9f
8f8f8f8f
8f8f8f8f
7f7f7f7f
7f7f7f7f
6f6f7f7f
6f6f6f6f
6f6f6f6f
5f5f5f5f
5f5f5f5f
4f4f5f5f
4f4f4f4f
4f4f4f4f
3f3f3f3f
3f3f3f3f
2f2f3f3f
2f2f2f2f
2f2f2f2f
1f1f1f1f
1f1f1f1f
0f0f1f1f
0f0f0f0f
0f0f0f0f
00000000
00000000
10100000
10101010
10101010
20202020
20202020
30302020
30303030
30303030
40404040
40404040
50504040
50505050
50505050
60606060
60606060
70706060
70707070
70707070
80808080
80808080
90908080
90909090
90909090
a0a0a0a0
a0a0a0a0
b0b0a0a0
b0b0b0b0
b0b0b0b0
c0c0c0c0
c0c0c0c0
d0d0c0c0
d0d0d0d0
d0d0d0d0
e0e0e0e0
e0e0e0e0
f0f0e0e0
f0f0f0f0
f0f0f0f0
ffffffff
ffffffff
efefffff
efefefef
efefefef
dfdfdfdf
dfdfdfdf
cfcfdfdf
cfcfcfcf
cfcfcfcf
bfbfbfbf
bfbfbfbf
afafbfbf
afafafaf
afafafaf
9f9f9f9f
9f9f9f9f
8f8f9f9f
8f8f8f8f
8f8f8f8f
7f7f7f7f
7f7f7f7f
6f6f7f7f
6f6f6f6f
6f6f6f6f
5f5f5f5f
5f5f5f5f
4f4f5f5f
4f4f4f4f
4f4f4f4f
3f3f3f3f
3f3f3f3f
2f2f3f3f
2f2f2f2f
2f2f2f2f
1f1f1f1f
1f1f1f1f
0f0f1f1f
0f0f0f0f
0f0f0f0f
00000000
00000000
10100000
10101010
10101010
20202020
20202020
30302020
30303030
30303030
40404040
40404040
50504040
50505050
50505050
60606060

View File

@ -0,0 +1,259 @@
bcbcbcbc
10000100
00000000
00000000
10100000
10101010
10101010
20202020
20202020
30302020
30303030
30303030
40404040
40404040
50504040
50505050
50505050
60606060
60606060
70706060
70707070
70707070
80808080
80808080
90908080
90909090
90909090
a0a0a0a0
a0a0a0a0
b0b0a0a0
b0b0b0b0
b0b0b0b0
c0c0c0c0
c0c0c0c0
d0d0c0c0
d0d0d0d0
d0d0d0d0
e0e0e0e0
e0e0e0e0
f0f0e0e0
f0f0f0f0
f0f0f0f0
ffffffff
ffffffff
efefffff
efefefef
efefefef
dfdfdfdf
dfdfdfdf
cfcfdfdf
cfcfcfcf
cfcfcfcf
bfbfbfbf
bfbfbfbf
afafbfbf
afafafaf
afafafaf
9f9f9f9f
9f9f9f9f
8f8f9f9f
8f8f8f8f
8f8f8f8f
7f7f7f7f
7f7f7f7f
6f6f7f7f
6f6f6f6f
6f6f6f6f
5f5f5f5f
5f5f5f5f
4f4f5f5f
4f4f4f4f
4f4f4f4f
3f3f3f3f
3f3f3f3f
2f2f3f3f
2f2f2f2f
2f2f2f2f
1f1f1f1f
1f1f1f1f
0f0f1f1f
0f0f0f0f
0f0f0f0f
00000000
00000000
10100000
10101010
10101010
20202020
20202020
30302020
30303030
30303030
40404040
40404040
50504040
50505050
50505050
60606060
60606060
70706060
70707070
70707070
80808080
80808080
90908080
90909090
90909090
a0a0a0a0
a0a0a0a0
b0b0a0a0
b0b0b0b0
b0b0b0b0
c0c0c0c0
c0c0c0c0
d0d0c0c0
d0d0d0d0
d0d0d0d0
e0e0e0e0
e0e0e0e0
f0f0e0e0
f0f0f0f0
f0f0f0f0
ffffffff
ffffffff
efefffff
efefefef
efefefef
dfdfdfdf
dfdfdfdf
cfcfdfdf
cfcfcfcf
cfcfcfcf
bfbfbfbf
bfbfbfbf
afafbfbf
afafafaf
afafafaf
9f9f9f9f
9f9f9f9f
8f8f9f9f
8f8f8f8f
8f8f8f8f
7f7f7f7f
7f7f7f7f
6f6f7f7f
6f6f6f6f
6f6f6f6f
5f5f5f5f
5f5f5f5f
4f4f5f5f
4f4f4f4f
4f4f4f4f
3f3f3f3f
3f3f3f3f
2f2f3f3f
2f2f2f2f
2f2f2f2f
1f1f1f1f
1f1f1f1f
0f0f1f1f
0f0f0f0f
0f0f0f0f
00000000
00000000
10100000
10101010
10101010
20202020
20202020
30302020
30303030
30303030
40404040
40404040
50504040
50505050
50505050
60606060
60606060
70706060
70707070
70707070
80808080
80808080
90908080
90909090
90909090
a0a0a0a0
a0a0a0a0
b0b0a0a0
b0b0b0b0
b0b0b0b0
c0c0c0c0
c0c0c0c0
d0d0c0c0
d0d0d0d0
d0d0d0d0
e0e0e0e0
e0e0e0e0
f0f0e0e0
f0f0f0f0
f0f0f0f0
ffffffff
ffffffff
efefffff
efefefef
efefefef
dfdfdfdf
dfdfdfdf
cfcfdfdf
cfcfcfcf
cfcfcfcf
bfbfbfbf
bfbfbfbf
afafbfbf
afafafaf
afafafaf
9f9f9f9f
9f9f9f9f
8f8f9f9f
8f8f8f8f
8f8f8f8f
7f7f7f7f
7f7f7f7f
6f6f7f7f
6f6f6f6f
6f6f6f6f
5f5f5f5f
5f5f5f5f
4f4f5f5f
4f4f4f4f
4f4f4f4f
3f3f3f3f
3f3f3f3f
2f2f3f3f
2f2f2f2f
2f2f2f2f
1f1f1f1f
1f1f1f1f
0f0f1f1f
0f0f0f0f
0f0f0f0f
00000000
00000000
10100000
10101010
10101010
20202020
20202020
30302020
30303030
30303030
40404040
40404040
50504040
50505050
50505050
60606060
9df5b695

View File

@ -0,0 +1,71 @@
00100000
0000000c
04000002
80000032
04004002
00200000
00000100
07050200
120f0c0a
1c191714
2624211e
302e2b29
3b383633
4542403d
4f4d4a48
5a575552
64615f5c
6e6c6967
79767371
83807e7b
8d8b8885
97959290
a29f9d9a
acaaa7a4
b6b4b1af
c1bebcb9
cbc8c6c3
d5d3d0ce
e0dddad8
eae7e5e2
f4f2efec
fffcf9f7
00000000
00000000
00000000
00000000
00000000
00000000
00000000
f7f9fcff
eceff2f4
e2e5e7ea
d8dadde0
ced0d3d5
c3c6c8cb
b9bcbec1
afb1b4b6
a4a7aaac
9a9d9fa2
90929597
85888b8d
7b7e8083
71737679
67696c6e
5c5f6164
5255575a
484a4d4f
3d404245
3336383b
292b2e30
1e212426
1417191c
0a0c0f12
00020507
00000000
00000000
00000000
00000000
00000000
00000000
00000000

View File

@ -0,0 +1,67 @@
bcbcbcbc
10000040
07050200
120f0c0a
1c191714
2624211e
302e2b29
3b383633
4542403d
4f4d4a48
5a575552
64615f5c
6e6c6967
79767371
83807e7b
8d8b8885
97959290
a29f9d9a
acaaa7a4
b6b4b1af
c1bebcb9
cbc8c6c3
d5d3d0ce
e0dddad8
eae7e5e2
f4f2efec
fffcf9f7
00000000
00000000
00000000
00000000
00000000
00000000
00000000
f7f9fcff
eceff2f4
e2e5e7ea
d8dadde0
ced0d3d5
c3c6c8cb
b9bcbec1
afb1b4b6
a4a7aaac
9a9d9fa2
90929597
85888b8d
7b7e8083
71737679
67696c6e
5c5f6164
5255575a
484a4d4f
3d404245
3336383b
292b2e30
1e212426
1417191c
0a0c0f12
00020507
00000000
00000000
00000000
00000000
00000000
00000000
00000000
62dffd35