From 7769b515b02184ff9210de1eb44c289573ee6c7c Mon Sep 17 00:00:00 2001 From: chentianya Date: Mon, 24 Aug 2026 16:09:09 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=87=E6=A1=A3=E7=BB=B4=E6=8A=A4=EF=BC=9A?= =?UTF-8?q?=C2=A74=20=E8=A1=A8=E6=A0=BC=E6=B8=85=E7=90=86=EF=BC=88A1/C2/C4?= =?UTF-8?q?=20=E5=90=8C=E6=AD=A5=E5=AE=9A=E6=A1=88=EF=BC=89+=20version=3D2?= =?UTF-8?q?=20=E6=88=90=E6=96=87=20+=20=E5=B8=A7=E5=A4=B4/max=5Fstack=20?= =?UTF-8?q?=E7=BB=86=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - M1~M3:A1(U12)、C2(U7)、C4(U14)行标记已定案 - §2.5 头布局:version=2(V2 格式,V1=1)单列 - §2.2 栈设计补全:帧头 {fn_id:u32, ret_pc:u32, ret_fn_id:u32} 12B; max_stack = MAIN + DAG 最坏路径 Σ(12+nregs×8),写入 @116 --- Doc/isa/指令集优化.md | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/Doc/isa/指令集优化.md b/Doc/isa/指令集优化.md index 6dd7e90..f5dd9fe 100644 --- a/Doc/isa/指令集优化.md +++ b/Doc/isa/指令集优化.md @@ -63,9 +63,10 @@ #### 调用栈(方案 C:预分配栈区,U10 定案) - **无递归**:链接层检测调用图环(FUNCTION 自调用/循环调用)→ **编译期报错**(`link error: recursive call`);无环 → 最坏调用路径编译期可算 -- **max_stack 编译期计算**:最坏调用路径 Σ(帧头 12B + nregs×8),写入映像头(@116) +- **帧结构(每帧 12B 帧头 + nregs×8B 寄存器区)**:帧头 = { fn_id:u32, ret_pc:u32, ret_fn_id:u32 };寄存器区 = 本函数 nregs 个 int64 +- **max_stack 编译期计算(写入映像头 @116)**:`max_stack = MAIN 帧需求 + 最坏 FUNCTION 调用路径 Σ(帧需求)`,帧需求 = 12 + nregs×8;调用图为 DAG(无递归),最坏路径 = 按字节权重的最长路径;MAIN 帧计入(常驻栈底) - **预分配栈区**:Machine 构造时一次性分配 max_stack 字节连续内存,运行期零分配 -- **压帧**:从栈顶取 nregs×8 + 帧头(12B),sp += 帧需求;**弹帧**:sp -= 帧需求 +- **压帧**:从栈顶取 帧需求(12 + nregs×8),sp += 帧需求;**弹帧**:sp -= 帧需求 - **溢出检查双口径**:剩余栈 < 帧需求 → `StackOverflow`(字节主检查)+ 深度 ≤64(双保险) - **MAIN 帧常驻栈底**(跨周期保留),周期结束回退 sp 到 MAIN 帧顶 @@ -117,7 +118,9 @@ ### 2.5 映像格式(头 128 字节,16 对齐)——U7 已定案 ```text -0..71 原 17 字段(72 字节:magic/版本/cycle_limit/dt_ms/project_hash/entry_fn_id/ +0..3 magic(STSC,不变) +4..7 version = 2(V2 格式;V1 = 1) +8..71 原 15 字段(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 改义,起点 16 对齐) @@ -187,7 +190,7 @@ | # | 项 | 状态 | |---|---|---| -| A1 | 元数据段格式 | 结构体/字符串的表 schema——v1 预留但格式未定(待定) | +| ~~A1~~ | ~~元数据段格式~~ | **已定案(U12)**:v1 0 长度占位(offset_meta=0),schema 延后 | | ~~A2~~ | ~~常量内嵌 vs 常量表~~ | **已定案**:常量表(8B LOADK 查表);LOADK 用 type 位段解释;条目 8B 无 tag;IMM64 预留不发射 | | A3 | 内建 FB 字段类型化 | **已定案**:字段类型化(TON: in/pt/q/et = BOOL/TIME/BOOL/TIME;R_TRIG: clk/q = BOOL/BOOL);计数器单/双字(INT/DINT)**编码形式 = fb 表拆条**(CTU/DCTU/CTD/DCTD/CTUD/DCTUD 6 条,名字即宽度)——U5 已定案 | | A4 | DATE/TOD/DT 字面量 | **已定案**:v1 **不支持**(类型存在,仅声明/存取/比较,无 `D#/TOD#/DT#` 字面量语法) | @@ -205,9 +208,9 @@ | # | 项 | 说明 | |---|---|---| | C1 | 元数据段格式(原 A1) | 结构体/字符串表 schema——v1 预留但格式未定;建议 v1 定「0 长度占位段,schema 延后」 | -| C2 | 头 128B 布局终稿 | §2.5 字段表(64/68 改义、n_slots/n_values)需与 A8 schema 最终核对 | +| ~~C2~~ | ~~头 128B 布局终稿~~ | **已定案(U7 修正版)**:见 §2.5(offset_meta/max_stack/values_size 等) | | C3 | machine.toml `[[fb]]` 表 schema | fb_id/name/字段类型(含单/双字计数 width 列)细则——随 B3 定 | -| C4 | CALL/CAL 的 rd 字段约定成文 | 已定「恒 0」,待写入规范文档 | +| ~~C4~~ | ~~CALL/CAL 的 rd 恒 0 成文~~ | **已定案(U14)**:已写入指令编码.md §5 | | C5 | line1 推演重算 | 实施阶段(阶段 5)才需要 | | C6 | CTU/CTD/CTUD 字段表终稿 | pv/cv 定 INT/DINT 后,字段宽度/对齐/偏移终稿(随 B3 定) | @@ -280,6 +283,8 @@ V2 的 op 位段仅 6 位(64 个),FB 占 8 个不划算,且 machine.toml - U12 定案:元数据段 v1 0 长度占位(offset_meta=0),schema 延后 - U13 定案:DATE/TOD/DT 表示(DT={date:32|tod:32} 拼接,转换取高/低 32 位) - U14 定案:CALL/CAL rd 字段恒 0(按指令编码/指令集清单文档)——**全部 U 项闭合,V2 规格冻结** +- 版本线确认:当前设计 = **V2**(V1 为已实现简化版);头 version = 2,型号 STATOR2 +- 帧头 12B 成文(fn_id/ret_pc/ret_fn_id)+ max_stack 计算细则(MAIN 计入、DAG 最长路径) - A10 定案(B1/B2):1 CAL + fb_id 16 位(查 [[fb]] 表);V1 的 8 个 CAL_* opcode 作废 - B4 定案:领域指令(运动控制/通信)不进指令集,一律 FB 库;无 EXT 服务指令 - B3/B5 说明中待确认:单/双字计数编码(CAL type 位段)、op 位段预算