2026-07-28 17:57:28 +08:00
|
|
|
|
{
|
|
|
|
|
|
"cells": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"cell_type": "code",
|
|
|
|
|
|
"id": "initial_id",
|
|
|
|
|
|
"metadata": {
|
|
|
|
|
|
"collapsed": true,
|
|
|
|
|
|
"ExecuteTime": {
|
2026-07-28 22:28:14 +08:00
|
|
|
|
"end_time": "2026-07-28T13:59:14.582505Z",
|
|
|
|
|
|
"start_time": "2026-07-28T13:59:14.575884Z"
|
2026-07-28 17:57:28 +08:00
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"source": [
|
|
|
|
|
|
"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",
|
|
|
|
|
|
"def run_case(params, save_json=True, write_hw=False):\n",
|
|
|
|
|
|
" \"\"\"\n",
|
|
|
|
|
|
" 通用执行函数:自动判断模式并按需调用 configure_chip_output, env_config, instruction_config\n",
|
|
|
|
|
|
" :param output_dir: 可选,自定义输出文件和 JSON 保存的目录路径\n",
|
|
|
|
|
|
" \"\"\"\n",
|
2026-07-28 22:28:14 +08:00
|
|
|
|
" # 确定最终输出目录\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",
|
2026-07-28 22:28:14 +08:00
|
|
|
|
"\n",
|
|
|
|
|
|
" # 基础芯片输出配置\n",
|
2026-07-28 17:57:28 +08:00
|
|
|
|
" config_chip_reg(mk, **params)\n",
|
|
|
|
|
|
" print(\"执行 config_chip_reg\")\n",
|
|
|
|
|
|
" \n",
|
2026-07-28 22:28:14 +08:00
|
|
|
|
" # 自动识别并执行包络配置\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",
|
2026-07-28 22:28:14 +08:00
|
|
|
|
" # 自动识别并执行指令配置\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-28 22:28:14 +08:00
|
|
|
|
" # 基础硬件寄存器下发\n",
|
2026-07-28 17:57:28 +08:00
|
|
|
|
" if write_hw:\n",
|
|
|
|
|
|
" channel = params['channel']\n",
|
|
|
|
|
|
" envm_base =addr_base['ENVM0_BASE'] + channel* 0x600000\n",
|
|
|
|
|
|
" itcm_base = addr_base['ITCM0_BASE'] + channel* 0x600000\n",
|
|
|
|
|
|
" mk.rw_once('w',envm_base , 0, params['config_file'])\n",
|
|
|
|
|
|
" 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"
|
|
|
|
|
|
],
|
|
|
|
|
|
"outputs": [],
|
2026-07-28 22:28:14 +08:00
|
|
|
|
"execution_count": 41
|
2026-07-28 17:57:28 +08:00
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
"metadata": {
|
|
|
|
|
|
"ExecuteTime": {
|
2026-07-28 22:28:14 +08:00
|
|
|
|
"end_time": "2026-07-28T14:17:52.745749Z",
|
|
|
|
|
|
"start_time": "2026-07-28T14:17:52.706024Z"
|
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",
|
2026-07-28 22:28:14 +08:00
|
|
|
|
"# ==========================================\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",
|
2026-07-28 22:28:14 +08:00
|
|
|
|
"# ==========================================\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",
|
2026-07-28 22:28:14 +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",
|
|
|
|
|
|
"执行了 env_config\n",
|
|
|
|
|
|
"执行了 instruction_config\n",
|
2026-07-28 22:28:14 +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",
|
|
|
|
|
|
"执行了 env_config\n",
|
|
|
|
|
|
"执行了 instruction_config\n",
|
2026-07-28 22:28:14 +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",
|
|
|
|
|
|
"执行了 env_config\n",
|
|
|
|
|
|
"执行了 instruction_config\n",
|
2026-07-28 22:28:14 +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
|
|
|
|
]
|
|
|
|
|
|
}
|
|
|
|
|
|
],
|
2026-07-28 22:28:14 +08:00
|
|
|
|
"execution_count": 62
|
2026-07-28 17:57:28 +08:00
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
"metadata": {
|
|
|
|
|
|
"ExecuteTime": {
|
2026-07-28 22:28:14 +08:00
|
|
|
|
"end_time": "2026-07-28T14:03:52.514124Z",
|
|
|
|
|
|
"start_time": "2026-07-28T14:03:52.492729Z"
|
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",
|
2026-07-28 22:28:14 +08:00
|
|
|
|
"# ==========================================\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,write_hw = True)\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"#通道1\n",
|
|
|
|
|
|
"param_ch1 = param_ch0.copy()\n",
|
|
|
|
|
|
"param_ch1['channel'] = 1\n",
|
|
|
|
|
|
"run_case(param_ch1,write_hw = True)\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"#通道2\n",
|
|
|
|
|
|
"param_ch2 = param_ch0.copy()\n",
|
|
|
|
|
|
"param_ch2['channel'] = 2\n",
|
|
|
|
|
|
"run_case(param_ch2,write_hw = True)\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"#通道3\n",
|
|
|
|
|
|
"param_ch3 = param_ch0.copy()\n",
|
|
|
|
|
|
"param_ch3['channel'] = 3\n",
|
2026-07-28 22:28:14 +08:00
|
|
|
|
"run_case(param_ch3,write_hw = True)\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",
|
2026-07-28 22:28:14 +08:00
|
|
|
|
"生成文件路径: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",
|
2026-07-28 22:28:14 +08:00
|
|
|
|
"生成文件路径: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",
|
2026-07-28 22:28:14 +08:00
|
|
|
|
"生成文件路径: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",
|
2026-07-28 22:28:14 +08:00
|
|
|
|
"生成文件路径: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-28 22:28:14 +08:00
|
|
|
|
"execution_count": 53
|
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",
|
2026-07-28 22:28:14 +08:00
|
|
|
|
"# ==========================================\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,write_hw = True)\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"#通道1\n",
|
|
|
|
|
|
"param_ch1 = param_ch0.copy()\n",
|
|
|
|
|
|
"param_ch1['channel'] = 1\n",
|
|
|
|
|
|
"run_case(param_ch1,write_hw = True)\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"#通道2\n",
|
|
|
|
|
|
"param_ch2 = param_ch0.copy()\n",
|
|
|
|
|
|
"param_ch2['channel'] = 2\n",
|
|
|
|
|
|
"run_case(param_ch2,write_hw = True)\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"#通道3\n",
|
|
|
|
|
|
"param_ch3 = param_ch0.copy()\n",
|
|
|
|
|
|
"param_ch3['channel'] = 3\n",
|
2026-07-28 22:28:14 +08:00
|
|
|
|
"run_case(param_ch3,write_hw = True)\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": {
|
2026-07-28 22:28:14 +08:00
|
|
|
|
"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",
|
2026-07-28 22:28:14 +08:00
|
|
|
|
"# ==========================================\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",
|
|
|
|
|
|
"run_case(param_ch0,write_hw = True)\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"#通道1\n",
|
|
|
|
|
|
"param_ch1 = param_ch0.copy()\n",
|
|
|
|
|
|
"param_ch1['channel'] = 1\n",
|
|
|
|
|
|
"run_case(param_ch1,write_hw = True)\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"#通道2\n",
|
|
|
|
|
|
"param_ch2 = param_ch0.copy()\n",
|
|
|
|
|
|
"param_ch2['channel'] = 2\n",
|
|
|
|
|
|
"run_case(param_ch2,write_hw = True)\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"#通道3\n",
|
|
|
|
|
|
"param_ch3 = param_ch0.copy()\n",
|
|
|
|
|
|
"param_ch3['channel'] = 3\n",
|
2026-07-28 22:28:14 +08:00
|
|
|
|
"run_case(param_ch3,write_hw = True)\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",
|
2026-07-28 22:28:14 +08:00
|
|
|
|
"生成文件路径: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": {
|
|
|
|
|
|
"end_time": "2026-07-28T14:23:00.027209Z",
|
|
|
|
|
|
"start_time": "2026-07-28T14:23:00.001173Z"
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"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",
|
|
|
|
|
|
"folder_name = 'RAMP' # 填入你要还原的文件夹名\n",
|
|
|
|
|
|
"case_name = 'RAMP_MCU_FIXED' # 填入你要还原的 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",
|
|
|
|
|
|
" run_case(ch_param, save_json=False, write_hw=True)\n",
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
"print(\"Case 还原完成!\")"
|
|
|
|
|
|
],
|
|
|
|
|
|
"id": "4d17f59a15077bb1",
|
|
|
|
|
|
"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",
|
2026-07-28 17:57:28 +08:00
|
|
|
|
"执行 config_chip_reg\n",
|
|
|
|
|
|
"执行了 instruction_config\n",
|
2026-07-28 22:28:14 +08:00
|
|
|
|
"生成文件路径:D:\\MyDocument\\工作\\Z芯片的case生成器\\Chip_Case_Generator\\4ch-Z_Generator\\gen_cases\\RAMP\\RAMP_MCU_FIXED_HEX.txt\n",
|
2026-07-28 17:57:28 +08:00
|
|
|
|
"执行 config_chip_reg\n",
|
|
|
|
|
|
"执行了 instruction_config\n",
|
2026-07-28 22:28:14 +08:00
|
|
|
|
"生成文件路径:D:\\MyDocument\\工作\\Z芯片的case生成器\\Chip_Case_Generator\\4ch-Z_Generator\\gen_cases\\RAMP\\RAMP_MCU_FIXED_HEX.txt\n",
|
2026-07-28 17:57:28 +08:00
|
|
|
|
"执行 config_chip_reg\n",
|
|
|
|
|
|
"执行了 instruction_config\n",
|
2026-07-28 22:28:14 +08:00
|
|
|
|
"生成文件路径:D:\\MyDocument\\工作\\Z芯片的case生成器\\Chip_Case_Generator\\4ch-Z_Generator\\gen_cases\\RAMP\\RAMP_MCU_FIXED_HEX.txt\n",
|
|
|
|
|
|
"🎉 Case 还原完成!\n"
|
2026-07-28 17:57:28 +08:00
|
|
|
|
]
|
|
|
|
|
|
}
|
|
|
|
|
|
],
|
2026-07-28 22:28:14 +08:00
|
|
|
|
"execution_count": 63
|
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
|
|
|
|
|
|
}
|