文档:阶段1规格总览(V2 主参考)——定案速览 + 三份规范重写任务 + 延后项

- §1 阶段 1 任务(重写指令与映像/指令配置/stb文件格式)
- §2..5 定案速览:指令编码/数据模型/执行语义/映像格式
- §6 machine.toml V2 schema 方向(N5,阶段 1 内定)
- §7 延后项(N1..N4、C5);§8 参考文档索引
This commit is contained in:
2026-08-24 16:18:57 +08:00
parent 3431f83e7c
commit 53df69f4be
2 changed files with 101 additions and 0 deletions
+99
View File
@@ -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
头 128B16 对齐):
0 magic "STSC"(不变)
4 version = 2V1=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/datan_i/n_q/n_m 保留恒 0
64 offset_slots 68 offset_values16 对齐)
72..103 型号标识 STATOR2
104 n_slots= n_globals + 实例/字段槽数) 108 values_size
112 offset_metav1=0 空段) 116 max_stack 120..127 预留 8B
段序:头 → 常量表 → 函数表 → 字节码 → 槽表段 → 值段 → 元数据段(v1 空)→ SHA-256[32]
```
## 6. machine.toml V2 schemaN5,阶段 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 映射) |
+2
View File
@@ -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 字面量 |