100 lines
5.6 KiB
Markdown
100 lines
5.6 KiB
Markdown
# 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 不运算(仅存取/比较);**字面量 V2 支持**(D#/TOD#/DT#,纪元 1970)
|
||
- **常量表**:条目 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**:15 条(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]] # 15 条: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 映射) |
|