diff --git a/Doc/isa/指令集优化.md b/Doc/isa/指令集优化.md index bcaa520..97f6857 100644 --- a/Doc/isa/指令集优化.md +++ b/Doc/isa/指令集优化.md @@ -103,20 +103,29 @@ - **ST 层**:19 类型名全量进关键字;**进制前缀** `2#`/`8#`/`16#` 支持(浮点无前缀);浮点十进制字面量(`1.5`、`-2.5e3`) - **类型转换**:**禁止隐式变量转换**(赋值/比较/算术要求类型严格一致,Typecheck 阶段报错);**字面量按上下文适配**(`5` 可赋 INT/REAL/DINT 等,编译期解释,非运行时转换);显式转换函数(`INT_TO_REAL()`)v1 不做 -### 2.5 映像格式(头 128 字节,16 对齐) +### 2.5 映像格式(头 128 字节,16 对齐)——U7 已定案 ```text -0..71 原 15 字段(magic/版本/cycle_limit/dt_ms/hash/entry/n_globals/n_i/n_q/n_m/ - n_consts/n_funcs + offset_const/funcs/code) +0..71 原 17 字段(72 字节:magic/版本/cycle_limit/dt_ms/project_hash/entry_fn_id/ + n_globals/n_i/n_q/n_m/n_consts/n_funcs + offset_const/funcs/code/fb/data) 64 offset_slots ← 槽表段(原 offset_fb 改义,FB 并入值区) -68 offset_values ← 值段(原 offset_data 改义) +68 offset_values ← 值段(原 offset_data 改义,起点 16 对齐) 72..103 型号标识(STATOR2) -104 n_slots ← 新增 -108 n_values ← 新增(值段字节数) -112..127 预留 +104 n_slots ← 槽表条目数(= n_globals + FB 实例/结构体字段槽数) +108 values_size ← 值段字节数(原 n_values,命名修正) +112 offset_meta ← 元数据段偏移(v1 恒 0 = 空段;结构体/字符串类型表预留) +116..127 预留 12 字节 ``` -段序:头 → 常量表 → 函数表 → 字节码 → 槽表段 → 值段 → 元数据段(预留) → SHA-256 尾 +段序:头 → 常量表 → 函数表 → 字节码 → 槽表段 → 值段 → 元数据段(v1 空) → SHA-256 尾 + +**U7 修正注记(2026-08-24)**: +- 「原 15 字段」修正为**原 17 字段(72 字节)** +- `n_values` 改名 **`values_size`**(值段字节数,避免与"数量"混淆) +- 预留区固定 **`offset_meta` @112**(v1 填 0 = 元数据段不存在,将来启用不改头) +- **n_i/n_q/n_m 保留恒 0**(V1 遗产字段:兼容 + sidecar 校验/将来 I/Q/M 分区语义预留,不删) +- **n_slots = n_globals + FB 实例/结构体字段槽数**(明确关系) +- **offset_values 16 对齐**(TIME/LREAL 8B 对齐的上界;编译器保证) ### 2.6 其他定案 @@ -252,6 +261,7 @@ V2 的 op 位段仅 6 位(64 个),FB 占 8 个不划算,且 machine.toml - A9 定案:按上下文适配、默认 DINT 兜底(用户确认) - U5 定案:内建 FB 14 条全部 v1 实现(6 计数拆条 + TON/TOF/TP/R/F_TRIG + SR/RS、PWM、RTC) - U6 定案:op 预算按指令集清单/指令编码文档方案(前缀分区) +- U7 定案:头 128B 修正版(offset_meta 占位、values_size 命名、n_i/n_q/n_m 保留恒 0、n_slots 关系、16 对齐) - A10 定案(B1/B2):1 CAL + fb_id 16 位(查 [[fb]] 表);V1 的 8 个 CAL_* opcode 作废 - B4 定案:领域指令(运动控制/通信)不进指令集,一律 FB 库;无 EXT 服务指令 - B3/B5 说明中待确认:单/双字计数编码(CAL type 位段)、op 位段预算 @@ -303,7 +313,7 @@ V2 的 op 位段仅 6 位(64 个),FB 占 8 个不划算,且 machine.toml | ~~U4~~ | ~~结构体 v1 只留编码不实现语法~~ | **已定案(预留)**:只留编码路径(LOAD/STORE 16B 变体 + 元数据段),语法 v1 不实现 | | ~~U5~~ | ~~B3 计数拆条~~ | **已定案**:fb 表拆条 11 条(CTU/DCTU/CTD/DCTD/CTUD/DCTUD 6 计数 + TON/TOF/TP/R_TRIG/F_TRIG),名字即宽度;**清单内建 FB 全部 14 条(含 SR/RS、PWM、RTC)v1 实现** | | ~~U6~~ | ~~op 预算~~ | **已定案**:按指令集清单.md §12 / 指令编码.md §3 方案(前缀分区预算:RR 21/64、NONE 2/64、RRR 26/32、010 区 8/24、SLOT+off 8/16、IMM64 1/16、0001 预留 6/16) | -| U7 | **头 128 字节布局**(64/68 改义、n_slots/n_values、型号@72、112..127 预留) | §2.5 已写 | 未细审,确认 / 改 | +| ~~U7~~ | ~~头 128 字节布局~~ | **已定案(修正版)**:17 字段表述、values_size 命名、offset_meta @112(v1=0)、n_i/n_q/n_m 保留恒 0、n_slots 关系定义、16 对齐(见 §2.5 注记) | | U8 | **槽表条目 {addr:u32, 预留:u32} 8B** | §2.3 已写 | 确认 / 改 | | U9 | **值段对齐 1/2/4/8B 编译器保证** | §2.3 已写 | 确认 / 改 | | U10 | **寄存器值 int64(8B)不变 + 调用约定 r0..r7 不变** | §2.2 已写 | 确认 / 改 |