Chip_Case_Generator/4ch-Z_Generator/FourChZCaseGenerator.ipynb

575 lines
24 KiB
Plaintext
Raw Normal View History

2026-07-28 17:57:28 +08:00
{
"cells": [
{
"cell_type": "code",
"id": "initial_id",
"metadata": {
"collapsed": true,
"ExecuteTime": {
2026-07-29 10:50:06 +08:00
"end_time": "2026-07-29T02:47:18.264723Z",
"start_time": "2026-07-29T02:47:18.172357Z"
2026-07-28 17:57:28 +08:00
}
},
"source": [
2026-07-29 10:50:06 +08:00
"%load_ext autoreload\n",
"%autoreload 2\n",
2026-07-28 17:57:28 +08:00
"import sys\n",
"import os\n",
"import numpy as np\n",
"from make_case import *\n",
"from make_inst import *\n",
"from FourChZChipConfig import *\n",
"from FourChZAssemblyTemplateManager import *\n",
"from FourChZEnvelopeGenerator import *\n",
"from FourChZreg_define import *\n",
"from ParamsManager import ParamsManager\n",
"from copy import deepcopy\n",
"from itertools import product\n",
"from pathlib import Path\n",
"mk = make_case()\n",
"mk_instr = make_inst()\n",
"from pathlib import Path\n",
2026-07-29 10:50:06 +08:00
"def run_case(params):\n",
2026-07-28 17:57:28 +08:00
" \"\"\"\n",
" 通用执行函数:自动判断模式并按需调用 configure_chip_output, env_config, instruction_config\n",
" \"\"\"\n",
" # 确定最终输出目录\n",
" base_dir = Path('D:/MyDocument/工作/Z芯片的case生成器/Chip_Case_Generator/4ch-Z_Generator/gen_cases') # 在这边选择case目录所在位置\n",
2026-07-28 17:57:28 +08:00
" folder_name = params.get('FolderName', 'General') #文件夹名不用在这边改在case参数里面改\n",
" out_dir = base_dir / folder_name\n",
" \n",
" case_name = params['CaseName'] #Case名不用在这边改在case参数里面改\n",
" config_file_path = out_dir / f\"{case_name}_HEX.txt\"\n",
" # 更新 params 中的路径信息\n",
" params['config_file'] = str(config_file_path)\n",
" \n",
"\n",
" # 基础芯片输出配置\n",
2026-07-28 17:57:28 +08:00
" config_chip_reg(mk, **params)\n",
" print(\"执行 config_chip_reg\")\n",
" \n",
" # 自动识别并执行包络配置\n",
2026-07-28 17:57:28 +08:00
" if 'envelope_configs' in params or 'envelope_type' in params or 'amp' in params:\n",
" if 'env_config' in globals():\n",
" env_config(mk, **params)\n",
" print(\"执行了 env_config\")\n",
" \n",
" # 自动识别并执行指令配置\n",
2026-07-28 17:57:28 +08:00
" if 'instr_type' in params:\n",
" instruction_config(mk, mk_instr, **params)\n",
" print(\"执行了 instruction_config\")\n",
" \n",
" \n",
2026-07-29 10:50:06 +08:00
" # 保证存储器不用的时候不为空, 防止报错\n",
2026-07-28 17:57:28 +08:00
" channel = params['channel']\n",
" envm_base =addr_base['ENVM0_BASE'] + channel* 0x600000\n",
" itcm_base = addr_base['ITCM0_BASE'] + channel* 0x600000\n",
2026-07-29 10:50:06 +08:00
" envelope_configs = params.get('envelope_configs', None)\n",
" if envelope_configs is None:\n",
" mk.rw_once('w',envm_base , 0, params['config_file'])\n",
2026-07-28 17:57:28 +08:00
" instr_type = params.get('instr_type', None)\n",
" if instr_type is None:\n",
" mk.rw_once('w', itcm_base, '0x2B', params['config_file'])\n",
"\n",
" print(f\"生成文件路径:{config_file_path.resolve()}\")\n",
" return None\n",
"\n"
],
2026-07-29 10:50:06 +08:00
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The autoreload extension is already loaded. To reload it, use:\n",
" %reload_ext autoreload\n"
]
}
],
"execution_count": 10
2026-07-28 17:57:28 +08:00
},
{
"metadata": {
"ExecuteTime": {
2026-07-29 10:50:06 +08:00
"end_time": "2026-07-29T02:47:24.889706Z",
"start_time": "2026-07-29T02:47:24.774951Z"
2026-07-28 17:57:28 +08:00
}
},
"cell_type": "code",
"source": [
"#general_send_wait这个汇编模板的 SEND_WAIT效果示例。\n",
"#单通道 AWG通用模板\n",
"param_ch0 = {\n",
" 'channel' : 0,\n",
" 'chip_mode':'AWG', #分为AWG和RAMP模式\n",
" 'mode':'mod', #可选nco nco_fm env mod四种模式\n",
" 'tail_en': False, #拖尾矫正开关\n",
" 'tc_coef_set': 'coef3', #拖尾矫正打开生效\n",
" 'inner_sync': False, #内部触发,应该是软触发,写一个寄存器,就能触发\n",
" 'amp_mod_enable': True, #调幅的开关mod调制模式下起作用。\n",
" 'freq_mod_enable': True, #nco的开关\n",
" 'bias_enable': True, #必开的开关AWG模式下偏置必须打开否则AWG输出保持为0.\n",
" \n",
" 'fcw': [100, 200, 300, 400], # MHz\n",
" 'mcu_reg_clr': True,\n",
" 'pcw': [0, 30, 45, 90, 120, 135, 150, 180], # Deg \n",
" 'rz_ff_pha': 0,\n",
" 'rz_fm_pha': 45,\n",
" 'ff_amp': [32767, 32767, 32767, 32767],\n",
" 'fm_amp': [32767, 32767, 32767, 32767],\n",
" 'bias': [1, 2, 3, 4],\n",
" 'fm_en' :False, #nco_fm的开关在nco_fm模式时必须打开,不然nco_fm不工作就是一条直线. mod的模式下开启fm_en,同时打开nco就能看到两个正弦波叠加啊\n",
" 'instr_type': 'general_send_wait', #调用汇编搬移上面的数据到mcu_regfile,同时配合下面参数执行指令.AWG固定用这个模板不用改。\n",
" 'send_interval': [100, 150, 200, 250, 300, 350, 400,450,500],\n",
" 'cycle_num': 1, #0代表无限循环如果要想扫参那么这个波形序列就不能无限循环播放\n",
" 'codeword_configs': [\n",
" # {'wave_hold': 1, 'fcw_index': 0, 'pcw_index': 0, 'code_clr': 1, 'env_index': 0},\n",
" # {'wave_hold': 0, 'fcw_index': 0, 'pcw_index': 0, 'code_clr': 0, 'env_index': 1},\n",
" # {'wave_hold': 1, 'fcw_index': 0, 'pcw_index': 0, 'code_clr': 1, 'env_index': 2},\n",
" # {'wave_hold': 0, 'fcw_index': 0, 'pcw_index': 0, 'code_clr': 0, 'env_index': 3},\n",
" {'wave_hold': 0, 'fcw_index': 0, 'pcw_index': 0, 'code_clr': 1, 'env_index': 4},\n",
" {'wave_hold': 0, 'fcw_index': 0, 'pcw_index': 0, 'code_clr': 1, 'env_index': 5},\n",
" {'wave_hold': 0, 'fcw_index': 0, 'pcw_index': 0, 'code_clr': 1, 'env_index': 6},\n",
" {'wave_hold': 0, 'fcw_index': 0, 'pcw_index': 0, 'code_clr': 1, 'env_index': 7},\n",
" {'wave_hold': 0, 'fcw_index': 0, 'pcw_index': 0, 'code_clr': 1, 'env_index': 8},\n",
" ], \n",
" 'sweep_config': {\n",
" 'sweep_num': 0, # 外层循环如果是0则代表不扫参该部分无效只搬移一次的23个寄存器。如果是 1代表重载1次寄存器加上最初的那次共两次.\n",
" 'offsets': [0x78, 0x40], # 告诉硬件本次扫描要修改哪几个寄存器的偏移地址比如要重载2个寄存器0x78 = AMPR0 (幅度), 0x40 = CWFR0 (频率) \n",
" 'steps': [3000, int(100 / fs / 4 * 2 ** 32)] # 幅度每次 +3000频率每次 100MHz (支持负数Python会自动转32位补码给MCU) ,所以第一次载入是载入初始值,第二次就是原值+steps,第三次就是上一次的值+steps \n",
" },\n",
" 'envelope_configs': [ #包络配置\n",
" {'envelope_type': 'rect_hold', 'amp': 32767},\n",
" {'envelope_type': 'flattop_hold', 'amp': 32767, 'edge_time': 3.5, 'wave_time': 30},\n",
" {'envelope_type': 'acz', 'amp': 32767, 'wave_time': 12 * 4},\n",
" {'envelope_type': 'accz', 'wave_time': 12 * 4},\n",
" {'envelope_type': 'cosine', 'amp': 32767, 'wave_time': 12 * 25},\n",
" {'envelope_type': 'rect', 'amp': 32767, 'wave_time': 12},\n",
" {'envelope_type': 'flattop', 'amp': 32767, 'edge_time': 2, 'wave_time': 22},\n",
" ],\n",
" 'FolderName': 'General',\n",
" 'CaseName': 'env2',\n",
"}\n",
"# ==========================================\n",
"#在运行前,先删除旧的 HEX 文件防止重复运行追加到case文件中\n",
"base_dir = Path('D:/MyDocument/工作/Z芯片的case生成器/Chip_Case_Generator/4ch-Z_Generator/gen_cases')\n",
"out_dir = base_dir / param_ch0['FolderName']\n",
"hex_file = out_dir / f\"{param_ch0['CaseName']}_HEX.txt\"\n",
"# 如果上一次运行的旧文件还在,就把它删掉\n",
"if hex_file.exists():\n",
" hex_file.unlink()\n",
"# ==========================================\n",
2026-07-28 17:57:28 +08:00
"run_case(param_ch0)\n",
"\n",
"#通道1\n",
"param_ch1 = param_ch0.copy()\n",
"param_ch1['channel'] = 1\n",
"param_ch1['fcw'] = [200, 200, 300, 400]\n",
"run_case(param_ch1)\n",
"\n",
"#通道2\n",
"param_ch2 = param_ch0.copy()\n",
"param_ch2['channel'] = 2\n",
"param_ch2['fcw'] = [300, 200, 300, 400]\n",
"run_case(param_ch2)\n",
"\n",
"#通道3\n",
"param_ch3 = param_ch0.copy()\n",
"param_ch3['channel'] = 3\n",
"param_ch3['fcw'] = [400, 200, 300, 400]\n",
"run_case(param_ch3)\n",
"\n",
"# ==========================================\n",
"#参数打包到json里面\n",
"out_dir = Path(param_ch0['config_file']).parent \n",
"case_name = param_ch0['CaseName']\n",
"all_params = {\n",
" \"ch0\": param_ch0,\n",
" \"ch1\": param_ch1,\n",
" \"ch2\": param_ch2,\n",
" \"ch3\": param_ch3\n",
"}\n",
"pm = ParamsManager(out_dir)\n",
"pm.save(all_params, case_name)\n",
"# ==========================================\n",
2026-07-28 17:57:28 +08:00
"\n"
],
"id": "3e79e12a64f2769e",
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"执行 config_chip_reg\n",
"执行了 env_config\n",
"执行了 instruction_config\n",
"生成文件路径D:\\MyDocument\\工作\\Z芯片的case生成器\\Chip_Case_Generator\\4ch-Z_Generator\\gen_cases\\General\\env2_HEX.txt\n",
2026-07-28 17:57:28 +08:00
"执行 config_chip_reg\n",
"执行了 env_config\n",
"执行了 instruction_config\n",
"生成文件路径D:\\MyDocument\\工作\\Z芯片的case生成器\\Chip_Case_Generator\\4ch-Z_Generator\\gen_cases\\General\\env2_HEX.txt\n",
2026-07-28 17:57:28 +08:00
"执行 config_chip_reg\n",
"执行了 env_config\n",
"执行了 instruction_config\n",
"生成文件路径D:\\MyDocument\\工作\\Z芯片的case生成器\\Chip_Case_Generator\\4ch-Z_Generator\\gen_cases\\General\\env2_HEX.txt\n",
2026-07-28 17:57:28 +08:00
"执行 config_chip_reg\n",
"执行了 env_config\n",
"执行了 instruction_config\n",
"生成文件路径D:\\MyDocument\\工作\\Z芯片的case生成器\\Chip_Case_Generator\\4ch-Z_Generator\\gen_cases\\General\\env2_HEX.txt\n"
2026-07-28 17:57:28 +08:00
]
}
],
2026-07-29 10:50:06 +08:00
"execution_count": 11
2026-07-28 17:57:28 +08:00
},
{
"metadata": {
"ExecuteTime": {
2026-07-29 10:50:06 +08:00
"end_time": "2026-07-29T02:19:42.215024Z",
"start_time": "2026-07-29T02:19:42.192273Z"
2026-07-28 17:57:28 +08:00
}
},
"cell_type": "code",
"source": [
"# RAMP 通用模板1\n",
"#RAMP SPI控制\n",
"param_ch0 = {\n",
" 'channel' : 0,\n",
" 'chip_mode': 'RAMP',\n",
" 'ramp_ctrl':'SPI',\n",
" 'fixed_enable': True, #是固定值还是斜坡模式\n",
" 'fixed_value': 22767, #固定值模式生效\n",
" 'height': 512, 'step_time': 34 , #斜坡模式生效 step_time就是台阶宽度\n",
" \n",
" 'FolderName': 'RAMP',\n",
" 'CaseName': f\"RAMP_SPI\"\n",
"}\n",
"# ==========================================\n",
"#在运行前,先删除旧的 HEX 文件防止重复运行追加到case文件中\n",
"base_dir = Path('D:/MyDocument/工作/Z芯片的case生成器/Chip_Case_Generator/4ch-Z_Generator/gen_cases')\n",
"out_dir = base_dir / param_ch0['FolderName']\n",
"hex_file = out_dir / f\"{param_ch0['CaseName']}_HEX.txt\"\n",
"# 如果上一次运行的旧文件还在,就把它删掉\n",
"if hex_file.exists():\n",
" hex_file.unlink()\n",
"# ==========================================\n",
2026-07-29 10:50:06 +08:00
"run_case(param_ch0)\n",
2026-07-28 17:57:28 +08:00
"\n",
"#通道1\n",
"param_ch1 = param_ch0.copy()\n",
"param_ch1['channel'] = 1\n",
2026-07-29 10:50:06 +08:00
"run_case(param_ch1)\n",
2026-07-28 17:57:28 +08:00
"\n",
"#通道2\n",
"param_ch2 = param_ch0.copy()\n",
"param_ch2['channel'] = 2\n",
2026-07-29 10:50:06 +08:00
"run_case(param_ch2)\n",
2026-07-28 17:57:28 +08:00
"\n",
"#通道3\n",
"param_ch3 = param_ch0.copy()\n",
"param_ch3['channel'] = 3\n",
2026-07-29 10:50:06 +08:00
"run_case(param_ch3)\n",
"# ==========================================\n",
"#参数打包到json里面\n",
"out_dir = Path(param_ch0['config_file']).parent \n",
"case_name = param_ch0['CaseName']\n",
"all_params = {\n",
" \"ch0\": param_ch0,\n",
" \"ch1\": param_ch1,\n",
" \"ch2\": param_ch2,\n",
" \"ch3\": param_ch3\n",
"}\n",
"pm = ParamsManager(out_dir)\n",
"pm.save(all_params, case_name)\n",
"# ==========================================\n"
2026-07-28 17:57:28 +08:00
],
"id": "1f6f70a26d5da7f8",
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"执行 config_chip_reg\n",
"生成文件路径D:\\MyDocument\\工作\\Z芯片的case生成器\\Chip_Case_Generator\\4ch-Z_Generator\\gen_cases\\RAMP\\RAMP_SPI_HEX.txt\n",
2026-07-28 17:57:28 +08:00
"执行 config_chip_reg\n",
"生成文件路径D:\\MyDocument\\工作\\Z芯片的case生成器\\Chip_Case_Generator\\4ch-Z_Generator\\gen_cases\\RAMP\\RAMP_SPI_HEX.txt\n",
2026-07-28 17:57:28 +08:00
"执行 config_chip_reg\n",
"生成文件路径D:\\MyDocument\\工作\\Z芯片的case生成器\\Chip_Case_Generator\\4ch-Z_Generator\\gen_cases\\RAMP\\RAMP_SPI_HEX.txt\n",
2026-07-28 17:57:28 +08:00
"执行 config_chip_reg\n",
"生成文件路径D:\\MyDocument\\工作\\Z芯片的case生成器\\Chip_Case_Generator\\4ch-Z_Generator\\gen_cases\\RAMP\\RAMP_SPI_HEX.txt\n"
2026-07-28 17:57:28 +08:00
]
}
],
2026-07-29 10:50:06 +08:00
"execution_count": 4
2026-07-28 17:57:28 +08:00
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-07-28T09:26:33.012700Z",
"start_time": "2026-07-28T09:26:32.989301Z"
}
},
"cell_type": "code",
"source": [
"#RAMP MCU控制时,斜坡模式\n",
"param_ch0 = {\n",
" 'channel' : 0 ,\n",
" 'chip_mode': 'RAMP',\n",
" 'ramp_ctrl':'MCU',\n",
" #是固定值还是斜坡模式如过是斜坡模式则要指令选ramp_step\n",
" 'instr_type': 'ramp_step', #可选ramp_step或ramp_fixed. mcu执行不同指令操作模板实现台阶或斜坡这两种模式\n",
" 'ensemble_num' : 2, #大循环次数\n",
" 'param_num' :2, # 循环中参数个数,和列表个数一致\n",
" 'height': [128,256], \n",
" 'step_time': [50,50], \n",
" \n",
" 'FolderName': 'RAMP',\n",
" 'CaseName': f\"RAMP_MCU_STEP\"\n",
"}\n",
"# ==========================================\n",
"#在运行前,先删除旧的 HEX 文件防止重复运行追加到case文件中\n",
"base_dir = Path('D:/MyDocument/工作/Z芯片的case生成器/Chip_Case_Generator/4ch-Z_Generator/gen_cases')\n",
"out_dir = base_dir / param_ch0['FolderName']\n",
"hex_file = out_dir / f\"{param_ch0['CaseName']}_HEX.txt\"\n",
"# 如果上一次运行的旧文件还在,就把它删掉\n",
"if hex_file.exists():\n",
" hex_file.unlink()\n",
"# ==========================================\n",
2026-07-29 10:50:06 +08:00
"run_case(param_ch0)\n",
2026-07-28 17:57:28 +08:00
"\n",
"#通道1\n",
"param_ch1 = param_ch0.copy()\n",
"param_ch1['channel'] = 1\n",
2026-07-29 10:50:06 +08:00
"run_case(param_ch1)\n",
2026-07-28 17:57:28 +08:00
"\n",
"#通道2\n",
"param_ch2 = param_ch0.copy()\n",
"param_ch2['channel'] = 2\n",
2026-07-29 10:50:06 +08:00
"run_case(param_ch2)\n",
2026-07-28 17:57:28 +08:00
"\n",
"#通道3\n",
"param_ch3 = param_ch0.copy()\n",
"param_ch3['channel'] = 3\n",
2026-07-29 10:50:06 +08:00
"run_case(param_ch3)\n",
"\n",
"# ==========================================\n",
"#参数打包到json里面\n",
"out_dir = Path(param_ch0['config_file']).parent \n",
"case_name = param_ch0['CaseName']\n",
"all_params = {\n",
" \"ch0\": param_ch0,\n",
" \"ch1\": param_ch1,\n",
" \"ch2\": param_ch2,\n",
" \"ch3\": param_ch3\n",
"}\n",
"pm = ParamsManager(out_dir)\n",
"pm.save(all_params, case_name)\n",
"# =========================================="
2026-07-28 17:57:28 +08:00
],
"id": "84e2c612b0a8f7ab",
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"执行 config_chip_reg\n",
"执行了 instruction_config\n",
"生成文件路径D:\\MyDocument\\工作\\Z芯片的case生成器\\4ch-Z_Generator\\gen_cases\\General\\RAMP_MCU_STEP_HEX.txt\n",
"执行 config_chip_reg\n",
"执行了 instruction_config\n",
"生成文件路径D:\\MyDocument\\工作\\Z芯片的case生成器\\4ch-Z_Generator\\gen_cases\\General\\RAMP_MCU_STEP_HEX.txt\n",
"执行 config_chip_reg\n",
"执行了 instruction_config\n",
"生成文件路径D:\\MyDocument\\工作\\Z芯片的case生成器\\4ch-Z_Generator\\gen_cases\\General\\RAMP_MCU_STEP_HEX.txt\n",
"执行 config_chip_reg\n",
"执行了 instruction_config\n",
"生成文件路径D:\\MyDocument\\工作\\Z芯片的case生成器\\4ch-Z_Generator\\gen_cases\\General\\RAMP_MCU_STEP_HEX.txt\n"
]
}
],
"execution_count": 26
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-07-28T14:13:45.795371Z",
"start_time": "2026-07-28T14:13:45.764237Z"
2026-07-28 17:57:28 +08:00
}
},
"cell_type": "code",
"source": [
"#RAMP MCU控制时,固定值模式\n",
"param_ch0 ={\n",
" 'channel' : 0,\n",
" 'chip_mode': 'RAMP',\n",
" 'ramp_ctrl':'MCU',\n",
" #是固定值还是斜坡模式如果是固定值模式则指令选ramp_fixed\n",
" 'instr_type': 'ramp_fixed', #可选ramp_step或ramp_fixed. mcu执行不同指令操作模板实现台阶或斜坡这两种模式\n",
" 'fixed_value': [1<<15] + [1<<15 | 1<<i for i in range(0,15)] + [0], \n",
" 'wait_clk': [1000]*17,\n",
" 'config_param_num': 17, \n",
" 'ensemble_num': 0, \n",
" \n",
" 'FolderName': 'RAMP',\n",
" 'CaseName': f\"RAMP_MCU_FIXED\"\n",
"}\n",
"# ==========================================\n",
"#在运行前,先删除旧的 HEX 文件防止重复运行追加到case文件中\n",
"base_dir = Path('D:/MyDocument/工作/Z芯片的case生成器/Chip_Case_Generator/4ch-Z_Generator/gen_cases')\n",
"out_dir = base_dir / param_ch0['FolderName']\n",
"hex_file = out_dir / f\"{param_ch0['CaseName']}_HEX.txt\"\n",
"# 如果上一次运行的旧文件还在,就把它删掉\n",
"if hex_file.exists():\n",
" hex_file.unlink()\n",
"# ==========================================\n",
2026-07-28 17:57:28 +08:00
"\n",
2026-07-29 10:50:06 +08:00
"run_case(param_ch0)\n",
2026-07-28 17:57:28 +08:00
"\n",
"#通道1\n",
"param_ch1 = param_ch0.copy()\n",
"param_ch1['channel'] = 1\n",
2026-07-29 10:50:06 +08:00
"run_case(param_ch1)\n",
2026-07-28 17:57:28 +08:00
"\n",
"#通道2\n",
"param_ch2 = param_ch0.copy()\n",
"param_ch2['channel'] = 2\n",
2026-07-29 10:50:06 +08:00
"run_case(param_ch2)\n",
2026-07-28 17:57:28 +08:00
"\n",
"#通道3\n",
"param_ch3 = param_ch0.copy()\n",
"param_ch3['channel'] = 3\n",
2026-07-29 10:50:06 +08:00
"run_case(param_ch3)\n",
"# ==========================================\n",
"#参数打包到json里面\n",
"out_dir = Path(param_ch0['config_file']).parent \n",
"case_name = param_ch0['CaseName']\n",
"all_params = {\n",
" \"ch0\": param_ch0,\n",
" \"ch1\": param_ch1,\n",
" \"ch2\": param_ch2,\n",
" \"ch3\": param_ch3\n",
"}\n",
"pm = ParamsManager(out_dir)\n",
"pm.save(all_params, case_name)\n",
"# =========================================="
2026-07-28 17:57:28 +08:00
],
"id": "e2743613b0b64ea7",
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"执行 config_chip_reg\n",
"执行了 instruction_config\n",
"生成文件路径D:\\MyDocument\\工作\\Z芯片的case生成器\\Chip_Case_Generator\\4ch-Z_Generator\\gen_cases\\RAMP\\RAMP_MCU_FIXED_HEX.txt\n",
"执行 config_chip_reg\n",
"执行了 instruction_config\n",
"生成文件路径D:\\MyDocument\\工作\\Z芯片的case生成器\\Chip_Case_Generator\\4ch-Z_Generator\\gen_cases\\RAMP\\RAMP_MCU_FIXED_HEX.txt\n",
"执行 config_chip_reg\n",
"执行了 instruction_config\n",
"生成文件路径D:\\MyDocument\\工作\\Z芯片的case生成器\\Chip_Case_Generator\\4ch-Z_Generator\\gen_cases\\RAMP\\RAMP_MCU_FIXED_HEX.txt\n",
"执行 config_chip_reg\n",
"执行了 instruction_config\n",
"生成文件路径D:\\MyDocument\\工作\\Z芯片的case生成器\\Chip_Case_Generator\\4ch-Z_Generator\\gen_cases\\RAMP\\RAMP_MCU_FIXED_HEX.txt\n"
]
}
],
"execution_count": 58
},
{
"metadata": {
"ExecuteTime": {
2026-07-29 10:50:06 +08:00
"end_time": "2026-07-29T02:47:57.908778Z",
"start_time": "2026-07-29T02:47:57.796222Z"
}
},
"cell_type": "code",
"source": [
"#通过json还原case脚本\n",
"# ==========================================\n",
"# 1. 定义你要还原的 Case 信息\n",
"# ==========================================\n",
"base_dir = Path('D:/MyDocument/工作/Z芯片的case生成器/Chip_Case_Generator/4ch-Z_Generator/gen_cases')\n",
2026-07-29 10:50:06 +08:00
"folder_name = 'General' # 填入你要还原的文件夹名\n",
"case_name = 'env2' # 填入你要还原的 Case 名字\n",
"out_dir = base_dir / folder_name\n",
"\n",
"# ==========================================\n",
"# 2. 实例化 ParamsManager 并加载 JSON\n",
"# ==========================================\n",
"pm = ParamsManager(out_dir)\n",
"# load 方法会返回你之前保存的包含 ch0, ch1, ch2, ch3 的大字典\n",
"loaded_params = pm.load(case_name) \n",
"\n",
"# ==========================================\n",
"# 3. 还原前先清理旧的 HEX 文件(防止重复追加)\n",
"# ==========================================\n",
"hex_file = out_dir / f\"{case_name}_HEX.txt\"\n",
"if hex_file.exists():\n",
" hex_file.unlink()\n",
"\n",
"# ==========================================\n",
"# 4. 遍历 JSON 数据,依次执行 run_case 还原\n",
"# ==========================================\n",
"# 为了保证顺序,我们按 ch0 到 ch3 的顺序遍历\n",
"for ch_key in ['ch0', 'ch1', 'ch2', 'ch3']:\n",
" if ch_key in loaded_params:\n",
" ch_param = loaded_params[ch_key]\n",
" \n",
" \n",
" # 将读取到的参数直接塞进 run_case。\n",
" # 此时不需要再保存 json (save_json=False),但需要写入硬件文本 (write_hw=True)\n",
2026-07-29 10:50:06 +08:00
" run_case(ch_param)\n",
"\n",
"print(\"Case 还原完成!\")"
],
"id": "4d17f59a15077bb1",
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"执行 config_chip_reg\n",
2026-07-29 10:50:06 +08:00
"执行了 env_config\n",
"执行了 instruction_config\n",
2026-07-29 10:50:06 +08:00
"生成文件路径D:\\MyDocument\\工作\\Z芯片的case生成器\\Chip_Case_Generator\\4ch-Z_Generator\\gen_cases\\General\\env2_HEX.txt\n",
2026-07-28 17:57:28 +08:00
"执行 config_chip_reg\n",
2026-07-29 10:50:06 +08:00
"执行了 env_config\n",
2026-07-28 17:57:28 +08:00
"执行了 instruction_config\n",
2026-07-29 10:50:06 +08:00
"生成文件路径D:\\MyDocument\\工作\\Z芯片的case生成器\\Chip_Case_Generator\\4ch-Z_Generator\\gen_cases\\General\\env2_HEX.txt\n",
2026-07-28 17:57:28 +08:00
"执行 config_chip_reg\n",
2026-07-29 10:50:06 +08:00
"执行了 env_config\n",
2026-07-28 17:57:28 +08:00
"执行了 instruction_config\n",
2026-07-29 10:50:06 +08:00
"生成文件路径D:\\MyDocument\\工作\\Z芯片的case生成器\\Chip_Case_Generator\\4ch-Z_Generator\\gen_cases\\General\\env2_HEX.txt\n",
2026-07-28 17:57:28 +08:00
"执行 config_chip_reg\n",
2026-07-29 10:50:06 +08:00
"执行了 env_config\n",
2026-07-28 17:57:28 +08:00
"执行了 instruction_config\n",
2026-07-29 10:50:06 +08:00
"生成文件路径D:\\MyDocument\\工作\\Z芯片的case生成器\\Chip_Case_Generator\\4ch-Z_Generator\\gen_cases\\General\\env2_HEX.txt\n",
"Case 还原完成!\n"
2026-07-28 17:57:28 +08:00
]
}
],
2026-07-29 10:50:06 +08:00
"execution_count": 12
2026-07-28 17:57:28 +08:00
}
],
"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
}