文档同步:machine.toml 配置驱动架构收尾。
- README.md:依赖方向(STCompiler→compiler 不链 isa)、模块表、isa 归执行器侧、 数据流图(machine.toml + 型号/SHA) - isa/README.md:重写——只管指令定义(Types/Op/Instr/Encode),删 Image 部分 - 指令与映像.md:依赖图与 CMake(compiler 不链 isa) - 编译管线.md:管线首步加载 machine.toml、产物含型号/SHA - 初步计划.md:12.10/12.13 修订(--machine、依赖方向) - 扫描周期.md / 指令执行.md:12.9 步骤标注已落地、vm 读校验说明 - compiler/vm/executor README:依赖与边界同步
This commit is contained in:
@@ -5,14 +5,14 @@
|
||||
方案见 [`Doc/初步计划.md`](Doc/初步计划.md),模块文档见 [`Doc/索引.md`](Doc/索引.md)。
|
||||
|
||||
```text
|
||||
多个 .st
|
||||
↑ project.toml 列出
|
||||
多个 .st + machine.toml(指令/类型/FB 布局)
|
||||
↑ project.toml 列出源文件;machine.toml 唯一事实来源
|
||||
↓
|
||||
STCompiler(compiler 库:词法 / 语法 → 符号表 → 类型检查 → 寄存器码 → 链接)
|
||||
STCompiler(compiler 库:词法 / 语法 → 符号表 → 类型检查 → 寄存器码 → 链接;编码查 machine.toml)
|
||||
↓
|
||||
<name>.stb 映像 + <name>.runtime.toml sidecar
|
||||
<name>.stb 映像(头 104 含型号标识 + 段 + SHA-256 文件尾)+ <name>.runtime.toml sidecar
|
||||
↓
|
||||
BytecodeExecutor(vm 库按扫描周期执行;喂 I、收 Q、给 Δt、回放)
|
||||
BytecodeExecutor(vm 库按扫描周期执行;型号/SHA 校验;喂 I、收 Q、给 Δt、回放)
|
||||
```
|
||||
|
||||
## 目录
|
||||
@@ -40,33 +40,33 @@ BytecodeExecutor(vm 库按扫描周期执行;喂 I、收 Q、给 Δt、回
|
||||
|
||||
## 模块与 CMake 目标
|
||||
|
||||
三个静态库与两个可执行,与目录一一对应。`compiler` 与 `vm` 不互相链接,合同放在 `isa`。依赖方向:`STCompiler → compiler → isa`、`BytecodeExecutor → vm → isa`。
|
||||
三个静态库与两个可执行,与目录一一对应。`compiler` 与 `vm` 不互相链接。指令/类型/FB 布局的**唯一事实来源是 `compiler/machine.toml`**(编译器运行时加载);`isa` 归执行器侧(`vm` 依赖),只管指令定义。依赖方向:`STCompiler → compiler`、`BytecodeExecutor → vm → isa`。
|
||||
|
||||
| 目录 | 目标 | 类型 | 依赖 | 职责 |
|
||||
|---|---|---|---|---|
|
||||
| `isa/` | `isa` | `STATIC` | 无 | 约 20 条指令编码、映像头、工程哈希、`BOOL` / `INT` / `TIME` 宽度 |
|
||||
| `compiler/` | `compiler` | `STATIC` | `isa` | 读 toml、收齐 `.st`、解析、链接、定址、类型检查、编寄存器码、写映像 |
|
||||
| `vm/` | `vm` | `STATIC` | `isa` | 一台 VM、一个入口、一份映像;扫描周期、寄存器、FB、有界 `CALL` / `RET` |
|
||||
| `compiler/` | `STCompiler` | `EXECUTABLE` | `compiler`、`isa` | `STCompiler <project.toml> -o <name>.stb`:编译并写映像 + sidecar;`--disasm` 可反汇编 |
|
||||
| `isa/` | `isa` | `STATIC` | 无 | 指令定义(Op/Instr/Encode/Types/饱和/disasm),**归执行器侧** |
|
||||
| `compiler/` | `compiler` | `STATIC` | toml++(私有) | 读 toml、收齐 `.st`、解析、链接、定址、类型检查、编寄存器码、写 `.stb`(指令 opcode/类型/FB 布局全部来自 `machine.toml`) |
|
||||
| `vm/` | `vm` | `STATIC` | `isa` | 一台 VM、一个入口、一份映像;扫描周期、寄存器、FB、有界 `CALL` / `RET`;自带 `.stb` 读实现 + 型号/SHA-256 校验 |
|
||||
| `compiler/` | `STCompiler` | `EXECUTABLE` | `compiler` | `STCompiler <project.toml> -o <name>.stb --machine <machine.toml>`:编译并写映像 + sidecar;`--disasm` 可反汇编 |
|
||||
| `executor/` | `BytecodeExecutor` | `EXECUTABLE` | `vm`、`isa` | `BytecodeExecutor <name>.stb`:加载映像 + sidecar,采样 I、执行 `PROGRAM MAIN`、写回 Q、用 Δt 推进定时器 / 计数器、回放 |
|
||||
|
||||
词法、语法、符号表、检查、codegen、链接都留在 `compiler` 一个库里,不再拆 CMake 子库。
|
||||
|
||||
### `isa`
|
||||
|
||||
编译器写映像、虚拟机读映像,两边共用同一套编码。放这里避免循环依赖。
|
||||
归执行器侧(`vm` 依赖),**只管指令定义**:Op 枚举 / Instr 打包 / Encode(编解码·disasm)/ Types(饱和)。执行器执行 switch 在 `vm`。
|
||||
|
||||
### `compiler`
|
||||
|
||||
toml **不声明变量**,只列出源文件、指定唯一 GVL、可选地把已有全局接到硬件。`VAR_GLOBAL` 第一版只允许出现在 `gvl.file`(如 `globals.st`)。
|
||||
toml **不声明变量**,只列出源文件、指定唯一 GVL、可选地把已有全局接到硬件。`VAR_GLOBAL` 第一版只允许出现在 `gvl.file`(如 `globals.st`)。指令 opcode / 类型元数据 / FB 布局**全部来自 `compiler/machine.toml`**(`STCompiler --machine` 加载,强校验后编译)。
|
||||
|
||||
### `vm`
|
||||
|
||||
每个扫描周期:采样 I → 从 `PROGRAM MAIN` 的 `pc=0` 执行到 `RET` → 写回 Q → 用本周期 Δt 推进 `TON` / `TOF` / `CTU`。无 GC、无堆、无线程;变量编译期分配。
|
||||
每个扫描周期:采样 I → 从 `PROGRAM MAIN` 的 `pc=0` 执行到 `RET` → 写回 Q → 用本周期 Δt 推进内置 FB。无 GC、无堆、无线程;变量编译期分配。读取 `.stb` 时**校验型号标识与 SHA-256**(不匹配/篡改 → 拒绝)。
|
||||
|
||||
### `executor`(BytecodeExecutor)
|
||||
|
||||
第一版两个可执行:`STCompiler` 编译出 `<name>.stb`(映像)+ `<name>.runtime.toml`(sidecar:I/O 绑定);`BytecodeExecutor` 加载后按扫描周期跑。不再有"一条命令编译 + 跑"。`dt_ms` / `cycle_limit` 从映像头取。
|
||||
`STCompiler` 编译出 `<name>.stb`(含型号标识 + SHA-256)+ `<name>.runtime.toml`(sidecar:I/O 绑定);`BytecodeExecutor` 加载后按扫描周期跑。`dt_ms` / `cycle_limit` 从映像头取。
|
||||
|
||||
### `examples/` 与 `tests/`
|
||||
|
||||
|
||||
Reference in New Issue
Block a user