修正:内建 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
+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 |