修正:内建 FB 实为 15 条(fb_id 0..14:TON..F_TRIG 11 + SR/RS/PWM/RTC 4),文档统一'14 条'→'15 条'

This commit is contained in:
2026-08-25 19:59:39 +08:00
parent dd5e69d2f7
commit fc76fea47b
5 changed files with 12 additions and 12 deletions
+2 -2
View File
@@ -59,7 +59,7 @@ CMake 目标:`isa``STATIC`),无依赖;`vm` PUBLIC 链 `isa`。公开
| 工程哈希 | 源文件路径排序后对内容做 FNV-1a 64(非密码学) |
| 完整性 | 文件尾 SHA-256[32];型号标识[32]@72 |
| I/O 绑定 | **不进映像**sidecar`.runtime.toml`)绑定 var→槽号→channel/bit,粒度不变 |
| 内建 FB | 14 条(CAL + fb_id 16 位);字段布局见 [`指令集清单.md`](指令集清单.md) §8.1 |
| 内建 FB | 15 条(CAL + fb_id 16 位);字段布局见 [`指令集清单.md`](指令集清单.md) §8.1 |
---
@@ -216,7 +216,7 @@ CMake 目标:`isa``STATIC`),无依赖;`vm` PUBLIC 链 `isa`。公开
- `CAL fb_id, slot`(rd 恒 0):内建 FB 调用,fb_id 查 [[fb]] 表
- 周期指令计数:每条 +1,超 `cycle_limit``CycleLimit` 故障
### 6.6 内建 FB14 条)
### 6.6 内建 FB15 条)
| fb_id | FB | fb_id | FB |
|---|---|---|---|
+5 -5
View File
@@ -1,7 +1,7 @@
# 机器定义文件(machine.toml V2
指令集与类型的**唯一事实来源**,**只给编译器**STCompiler/compiler)使用。执行器(vm)不读本文件——它是下位机程序,内建全部指令。
V2 规格(STATOR2,阶段 1 定稿;N5 闭合)。schema 变更:opcode → 前缀分区 + opclass/format → fmtCAL_* 8 op → 1 CAL + fb 表 14 条。
V2 规格(STATOR2,阶段 1 定稿;N5 闭合)。schema 变更:opcode → 前缀分区 + opclass/format → fmtCAL_* 8 op → 1 CAL + fb 表 15 条。
## 架构
@@ -30,7 +30,7 @@ STCompiler → compiler(编码 opcode / 类型元数据 / FB 布局 全部来
1. **指令编码**:变长 4/8/16/32B;**前缀分区**表达长度与形态(`11`/`10`/`011`/`010 xxx`/`0010`/`0011`/`0001`
2. **op 表**`prefix + op`(分区内编号)替代 V1 的单一 opcode;`fmt` 与前缀互锁;`func` 类别表达数据语义
3. **类型**:19 种 IEC 类型(编译器内建基元别名 + kind 语义 + func 显式映射)
4. **FB**14 条内建(fb_id 0..14),`[[fb]]` 表承载字段类型;CAL 指令 + fb_id16V1 的 CAL_* 8 op 作废)
4. **FB**15 条内建(fb_id 0..14),`[[fb]]` 表承载字段类型;CAL 指令 + fb_id16V1 的 CAL_* 8 op 作废)
5. 新增指令/类型/FB:**只改配置 + 对应实现**,指令格式零变化(N2/N3 预留位已留)
## 配置文件格式(TOML V2
@@ -109,7 +109,7 @@ func = "none"
params = []
enabled = true
# ---- 内建 FB14 条;fb_id 唯一 0..14;字段类型命中 type 表;布局偏移编译期按 1/2/4/8 对齐计算)
# ---- 内建 FB15 条;fb_id 唯一 0..14;字段类型命中 type 表;布局偏移编译期按 1/2/4/8 对齐计算)
[[fb]]
name = "TON"
fb_id = 0
@@ -164,7 +164,7 @@ fields = [["enable", "BOOL"], ["date", "DATE"], ["tod", "TOD"]]
1. **meta**`name` 非空、`version` = 2
2. **type**19 条必填全集(BOOL..DT);`base` 命中内建基元;`kind` 合法;`func` ∈ 0..9 且与 base 的 (width, signed) 互锁
3. **op**`prefix` 合法(11/10/011/010000..010101/0010/0011/0001);`prefix``fmt` 互锁(11↔RR、10↔NONE、011↔RRR、010000↔IMM、010001↔SLOT、010010↔JMP、010011↔JC、010100↔CALL、010101↔CAL、0010↔SLOT+off、0011↔IMM64);`op` 分区内唯一;`func` 类别合法(none/width/full/float/dst);`params` 数量与 fmt 互锁(RR=2、NONE=0、RRR=3、IMM=2、SLOT=2、JMP=1、JC=2、CALL=1、CAL=2、SLOT+off=3、IMM64=2);`enabled` 布尔
4. **fb**14 条必填全集(fb_id 0..14);`fb_id` 唯一;字段名唯一;字段类型命中 `[[type]]`
4. **fb**15 条必填全集(fb_id 0..14);`fb_id` 唯一;字段名唯一;字段类型命中 `[[type]]`
5. **op-fb 互锁**`CAL`010101)的 fb_id 由 `[[fb]]` 表提供——CAL 指令存在当且仅当 fb 表非空
## 加东西的流程
@@ -186,4 +186,4 @@ fields = [["enable", "BOOL"], ["date", "DATE"], ["tod", "TOD"]]
| 分类 | classplain/instance+ format | **fmt**(与 prefix 互锁) |
| 数据语义 | tag0/1/2 | **func** 类别(none/width/full/float/dst |
| 类型 | 3 条(BOOL/INT/TIME | **19 条**base/kind/func |
| FB | 8 条(opcode 对应 CAL_* | **14**fb_id 0..14 |
| FB | 8 条(opcode 对应 CAL_* | **15**fb_id 0..14 |
+2 -2
View File
@@ -275,7 +275,7 @@ V2 的 op 位段仅 6 位(64 个),FB 占 8 个不划算,且 machine.toml
- A2 定案:LOADK 用 type 位段解释常量值(与 LOAD 语义统一);常量表条目 8B 无 tag;IMM64 预留不发射
- A3..A8 定案(2026-08-24):计数器单/双字两种;DATE 字面量不支持;TIME/浮点运算按推荐;sidecar 一致;disasm 类型后缀;type 表=基元别名(REAL→float32、LREAL→float64
- A9 定案:按上下文适配、默认 DINT 兜底(用户确认)
- U5 定案:内建 FB 14 条全部 v1 实现(6 计数拆条 + TON/TOF/TP/R/F_TRIG + SR/RS、PWM、RTC
- U5 定案:内建 FB 15 条全部 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 对齐)
- U8 定案:槽表条目 {addr:u32, 预留:u32} 8B
@@ -336,7 +336,7 @@ V2 的 op 位段仅 6 位(64 个),FB 占 8 个不划算,且 machine.toml
| ~~U2~~ | ~~长度组映射~~ | **已被前缀编码取代**11/10/011/010xxx/0010/0011/0001,见指令编码.md §3 |
| ~~U3~~ | ~~字节布局~~ | **已被取代**`[前缀+形态分区\|op] + [func:4\|空:4]`(指令编码.md §2 |
| ~~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、RTCv1 实现** |
| ~~U5~~ | ~~B3 计数拆条~~ | **已定案**fb 表拆条 11 条(CTU/DCTU/CTD/DCTD/CTUD/DCTUD 6 计数 + TON/TOF/TP/R_TRIG/F_TRIG),名字即宽度;**清单内建 FB 全部 15 条(含 SR/RS、PWM、RTCv1 实现** |
| ~~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 字节布局~~ | **已定案(修正版)**17 字段表述、values_size 命名、offset_meta @112v1=0)、n_i/n_q/n_m 保留恒 0、n_slots 关系定义、16 对齐(见 §2.5 注记) |
| ~~U8~~ | ~~槽表条目格式~~ | **已定案**{addr:u32, 预留:u32} 8B/条(引用表,地址指向值段) |
+1 -1
View File
@@ -2,7 +2,7 @@
> 状态:**已编码**。全功能指令清单,全部指令已按 [`指令编码.md`](指令编码.md) 的
> RISC-V 式格式(前缀长度组 + op + func + fmt)分配编码。
> 状态列:`核心` = v1 实现(含内建 FB 全部 14 条);`扩展` = v1 后实现;`预留` = 仅留编码/未来。
> 状态列:`核心` = v1 实现(含内建 FB 全部 15 条);`扩展` = v1 后实现;`预留` = 仅留编码/未来。
## 编码规则摘要(详见指令编码.md)
+2 -2
View File
@@ -51,7 +51,7 @@
- **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,确定性)
- **内建 FB**15 条(CAL + fb_id16);字段布局终稿见指令集清单 §8.1(含 SR/RS、PWM、RTC);RTC 用**虚拟时钟**(周期×dt_ms,确定性)
## 5. 映像格式(定案,详见指令集优化.md §2.5)
@@ -76,7 +76,7 @@
[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 对齐)
[[fb]] # 15 条:fb_id/name/字段列表(字段名+类型,布局规则 1/2/4/8 对齐)
```
## 7. 延后项(阶段 1 不处理)