From 53df69f4bed1a6fcdd0d34a8f50eb19a15cb7a4e Mon Sep 17 00:00:00 2001 From: chentianya Date: Mon, 24 Aug 2026 16:18:57 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=87=E6=A1=A3=EF=BC=9A=E9=98=B6=E6=AE=B51?= =?UTF-8?q?=E8=A7=84=E6=A0=BC=E6=80=BB=E8=A7=88=EF=BC=88V2=20=E4=B8=BB?= =?UTF-8?q?=E5=8F=82=E8=80=83=EF=BC=89=E2=80=94=E2=80=94=E5=AE=9A=E6=A1=88?= =?UTF-8?q?=E9=80=9F=E8=A7=88=20+=20=E4=B8=89=E4=BB=BD=E8=A7=84=E8=8C=83?= =?UTF-8?q?=E9=87=8D=E5=86=99=E4=BB=BB=E5=8A=A1=20+=20=E5=BB=B6=E5=90=8E?= =?UTF-8?q?=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - §1 阶段 1 任务(重写指令与映像/指令配置/stb文件格式) - §2..5 定案速览:指令编码/数据模型/执行语义/映像格式 - §6 machine.toml V2 schema 方向(N5,阶段 1 内定) - §7 延后项(N1..N4、C5);§8 参考文档索引 --- Doc/isa/阶段1规格总览.md | 99 ++++++++++++++++++++++++++++++++++++++++ Doc/索引.md | 2 + 2 files changed, 101 insertions(+) create mode 100644 Doc/isa/阶段1规格总览.md diff --git a/Doc/isa/阶段1规格总览.md b/Doc/isa/阶段1规格总览.md new file mode 100644 index 0000000..cab3ce2 --- /dev/null +++ b/Doc/isa/阶段1规格总览.md @@ -0,0 +1,99 @@ +# V2 规格总览(阶段 1 主参考) + +> 状态:**规格冻结,阶段 1 开工前的主参考文档**。 +> 本文汇总 V2 全部已定案设计,作为重写三份规范文档(指令与映像.md / 指令配置.md / +> stb文件格式.md)的依据。细节见各参考文档,本文只给"下一阶段要看什么、写什么"。 + +## 1. 阶段 1 任务 + +| 产出物 | 内容 | 依据 | +|---|---|---| +| `Doc/isa/指令与映像.md`(重写为 V2) | 指令编码、数据模型、类型/func、调用栈、映像格式 | 本文 + 指令编码.md + 指令集清单.md | +| `Doc/isa/指令配置.md`(重写为 V2) | **machine.toml V2 schema**(本文唯一开放项 N5) | 本文 §6 | +| `Doc/isa/stb文件格式.md`(重写为 V2) | 新 .stb 结构拆解(头 128B/段序/line1 字节) | 本文 §5 + 阶段 5 再补 line1 推演 | + +阶段 1 完成后:V2 规格文档与代码蓝图自洽,进入阶段 2(isa 重构)。 + +## 2. 指令编码(定案,详见指令编码.md) + +```text +字节 0 = [前缀+形态分区 | op] 字节 1 = [func:4 | 空:4](空位 = N1,延后) +``` + +| 前缀 | 长度 | 形态 | op 空间 | +|---|---|---|---| +| `11` | 4B | RR | 6 位(用 21) | +| `10` | 4B | NONE | 6 位(用 2) | +| `011` | 8B | RRR | 5 位(用 26) | +| `010 000..101` | 8B | IMM/SLOT/JMP/JC/CALL/CAL | 2 位(用 8,全直推零查表) | +| `0010` | 16B | SLOT+off | 4 位(用 8) | +| `0011` | 16B | IMM64 | 4 位(用 1) | +| `0001` | 32B | 预留(N2) | 4 位(用 6) | + +- func 位段:0..7 = 宽度×符号、8=F32、9=F64、无类型指令 = 0 +- 位掩码推导:uses_rd/uses_ra/uses_rb 全部前缀直推 +- 跳转/PC 字节单位(off32 相对下一条);code 段 16 对齐 + +## 3. 数据模型与类型(定案) + +- **槽表(8B/条 {addr:u32, 预留:u32})→ 值区**:两级间接;全 32 位寻址(槽 2^32、值区 4GB) +- **值区变宽紧凑**:1/2/4/8B 对齐编译器保证(值段起点 16 对齐) +- **类型**:19 IEC 类型 → **10 种 func** 编译期映射;BOOL 编译器强制 0/1;字面量按上下文适配、默认 DINT 兜底;进制前缀 2#/8#/16#;**禁隐式变量转换**(编译期报错) +- **DATE/TOD/DT**:DATE=u32(天)、TOD=u32(当日 ms)、DT=u64 {date:32|tod:32} 拼接;v1 不运算 +- **常量表**:条目 8B 原始值(无 tag),LOADK 按 func 解释,同值多类型复用 + +## 4. 执行语义(定案) + +- **寄存器**:编号 8 位(256 = 寻址上限)、值 int64;帧按函数头 nregs 动态分配;调用约定 r0 结果 / r1..r7 参数 / r8+ 变量临时;CALL/RET 复制 r0..r7 全宽 +- **调用栈(方案 C)**:递归 = 链接层环检测编译期报错;max_stack = MAIN + DAG 最坏路径 Σ(帧头 12B + nregs×8) 写入映像头 @116;预分配栈区、运行期零分配;溢出双检查(字节 + 深度 64);MAIN 帧常驻 +- **整数除法(A 定案)**:除零 → 返回被除数;MIN/-1 → 饱和夹界(各宽度模板);截断除法(向零);MOD 符号随被除数 +- **浮点**:IEEE 754(溢出/零除 → ±inf、NaN 传播) +- **TIME**:+ - 比较;**DATE/TOD/DT 不运算**(仅存取/比较) +- **字段访问**:LOAD/STORE 16B 变体(基槽 + 偏移)= 结构体 + FB 共享体统一(LOADF 取消) +- **I/Q/M 合并**:LOAD/STORE 两条;语义标签交 sidecar(绑定粒度 slot=槽号不变) +- **内建 FB**:14 条(CAL + fb_id16);字段布局终稿见指令集清单 §8.1(含 SR/RS、PWM、RTC);RTC 用**虚拟时钟**(周期×dt_ms,确定性) + +## 5. 映像格式(定案,详见指令集优化.md §2.5) + +```text +头 128B(16 对齐): + 0 magic "STSC"(不变) + 4 version = 2(V1=1) + 8..71 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(n_i/n_q/n_m 保留恒 0) + 64 offset_slots 68 offset_values(16 对齐) + 72..103 型号标识 STATOR2 + 104 n_slots(= n_globals + 实例/字段槽数) 108 values_size + 112 offset_meta(v1=0 空段) 116 max_stack 120..127 预留 8B +段序:头 → 常量表 → 函数表 → 字节码 → 槽表段 → 值段 → 元数据段(v1 空)→ SHA-256[32] +``` + +## 6. machine.toml V2 schema(N5,阶段 1 内定) + +阶段 1 重写指令配置.md 时定稿,方向已定: + +```toml +[meta] # name="STATOR"、version=2 +[[type]] # 19 条:name/width/signed/tag(func 值 0..18)/kind(int|uint|bit|float|time|date) +[[op]] # 按前缀分区:prefix/op/func/fmt 互锁校验 +[[fb]] # 14 条:fb_id/name/字段列表(字段名+类型,布局规则 1/2/4/8 对齐) +``` + +## 7. 延后项(阶段 1 不处理) + +| 项 | 内容 | +|---|---| +| N1 | 字节 1 空 4 位用途(待全部编码完后定) | +| N2 | 32B 组(0001)操作数形态(JTBL/STR_*/ARR_*) | +| N3 | 010 区子 op 2 位扩展策略 | +| N4 | 字符串/数组操作数区语义 | +| C5 | line1 推演重算(阶段 5) | + +## 8. 参考文档索引 + +| 文档 | 角色 | +|---|---| +| [`指令编码.md`](指令编码.md) | 编码定案(前缀分区/func/fmt 位号/uses_*)——阶段 1 指令部分主依据 | +| [`指令集清单.md`](指令集清单.md) | 全指令编码表 + FB 字段布局终稿(§8.1) | +| [`指令集优化.md`](指令集优化.md) | 全部设计定案 + 决策历史(K/U/A/B/C 全闭合) | +| [`编译器优化.md`](../compiler/编译器优化.md) | 编译侧策略(FB 共享体/max_stack 职责/类型→func 映射) | diff --git a/Doc/索引.md b/Doc/索引.md index 3d4cd32..035a5bc 100644 --- a/Doc/索引.md +++ b/Doc/索引.md @@ -12,6 +12,7 @@ doc/ isa/指令集优化.md isa/指令集清单.md isa/指令编码.md + isa/阶段1规格总览.md compiler/编译管线.md compiler/STCompiler使用说明.md compiler/词法.md @@ -34,6 +35,7 @@ doc/ | [`isa/指令集优化.md`](isa/指令集优化.md) | **V2 草案**:变长指令、槽表/值区、IEC 类型扩展、待确认问题 | | [`isa/指令集清单.md`](isa/指令集清单.md) | **V2 草案**:全功能指令清单(10 类 ~55 条,核心/扩展/预留) | | [`isa/指令编码.md`](isa/指令编码.md) | **V2 定案**:RISC-V 式 op + func 编码(前缀长度组 / func 10 组合 / 19 类型映射) | +| [`isa/阶段1规格总览.md`](isa/阶段1规格总览.md) | **V2 阶段 1 主参考**:全部定案速览 + 三份规范文档重写任务 + N5 schema 方向 | | [`compiler/编译管线.md`](compiler/编译管线.md) | 编译器边界与管线 | | [`compiler/STCompiler使用说明.md`](compiler/STCompiler使用说明.md) | 构建、用法、工程文件、ST 子集、错误类别 | | [`compiler/词法.md`](compiler/词法.md) | 12.4 词法:关键字表、token、大小写、TIME 字面量 |