Skip to content

路由和激活图

邻居形成继电器,数据通过总线


🗺️ RoutingFlags16

比特映射 (LSB 优先)

比特 标志 描述
bit0 N 北:激活上方邻居
bit1 E 东:激活右侧邻居
bit2 S 南:激活下方邻居
bit3 W 西:激活左侧邻居
bit4 NE 东北:对角线
bit5 SE 东南:对角线
bit6 SW 西南:对角线
bit7 NW 西北:对角线
bit8 BUS_R 读取总线 (ACTIVE 源)
bit9 BUS_W 写入总线 (WRITE 阶段)
bit10..15 reserved 必须为 0

示例

routing_flags16 = 0x0301
# binary: 0000 0011 0000 0001
# bits: N(0) + BUS_R(8) + BUS_W(9)

🧭 邻居拓扑

图块阵列

tile_id = y * tile_w + x

基本邻居

方向 公式 条件
N(x,y) (x, y-1) y > 0
S(x,y) (x, y+1) y < tile_h-1
W(x,y) (x-1, y) x > 0
E(x,y) (x+1, y) x < tile_w-1

对角线

方向 公式 条件
NE(x,y) (x+1, y-1) x < tile_w-1 且 y > 0
SE(x,y) (x+1, y+1) x < tile_w-1 且 y < tile_h-1
SW(x,y) (x-1, y+1) x > 0 且 y < tile_h-1
NW(x,y) (x-1, y-1) x > 0 且 y > 0

🔗 激活边

规则

如果图块 A 设置了 Dir 标志且邻居 B = neighbor(A, Dir) 存在
→ 边 A → B

重要属性

属性 描述
仅 ACTIVE 边只影响 ACTIVE 计算
无数据传输 邻居不发送数据
多父节点 允许
循环 允许 (通过 locked_before 确定论)

🌳 激活图 (ACTIVE 闭包)

ACTIVE 计算

# Seed: 源 (链根)
ACTIVE[t] = 1 如果 BUS_R[t] == 1

# Propagate: 图闭包
ACTIVE[t] = 1 如果存在 p ∈ Parents(t) 使得:
           ACTIVE[p] == 1 且 locked_before[p] == 1

# 最小不动点直到稳定

继电器示例

Tick N:
  图块 A (BUS_R=1): ACTIVE=1, 计算,locked_after=1
  图块 B (A 的父节点,标志 N): ACTIVE=0 (因为 locked_before[A]=0)

Tick N+1:
  图块 A: locked_before=1, 驱动总线
  图块 B: ACTIVE=1 (因为 ACTIVE[A]=1 且 locked_before[A]=1)
          → 读取 VSB_INGRESS → 计算

🎯 Parents(t) — 父节点集

Parents(t) = { p | 图块 p 有 Dir 标志且 neighbor(p, Dir) = t }

示例

图块 (5,5) 的父节点:
- 图块 (5,6) 如果它有 N 标志
- 图块 (4,5) 如果它有 E 标志
- 图块 (5,4) 如果它有 S 标志
- 图块 (6,5) 如果它有 W 标志
- ...

🚨 分支坍缩

如果根/中间图块未融合 (reset/collide):

Tick N:   图块 A: locked_before=1, 驱动总线
Tick N+1: 图块 A: reset → locked=0
Tick N+2: 图块 B (A 的后代): ACTIVE=0 → 强制为 0

强制零

if ACTIVE[t] == 0:
  thr_cur16 := 0
  locked := 0
  drive_vec := {0, 0, 0, 0, 0, 0, 0, 0}
  # 权重/row/decay 不应用

📐 配置示例

4×4 阵列

┌─────┬─────┬─────┬─────┐
│ 0,0 │ 0,1 │ 0,2 │ 0,3 │  BUS_R=1 (源)
├─────┼─────┼─────┼─────┤
│ 1,0 │ 1,1 │ 1,2 │ 1,3 │  N=1 (从下方激活)
├─────┼─────┼─────┼─────┤
│ 2,0 │ 2,1 │ 2,2 │ 2,3 │  N=1
├─────┼─────┼─────┼─────┤
│ 3,0 │ 3,1 │ 3,2 │ 3,3 │  N=1
└─────┴─────┴─────┴─────┘

激活图

(0,0) BUS_R=1 → ACTIVE seed
  │
  ▼ (1,0 上的 N)
(1,0) → ACTIVE 如果 locked_before[(0,0)]=1
  │
  ▼ (2,0 上的 N)
(2,0) → ACTIVE 如果 locked_before[(1,0)]=1
  │
  ▼ (3,0 上的 N)
(3,0) → ACTIVE 如果 locked_before[(2,0)]=1

🔗 BUS_R / BUS_W

BUS_R (读取)

参数
比特 bit8 (0x0100)
用途 ACTIVE 源 (图源)
效果 ACTIVE[t]=1 不考虑父节点

BUS_W (写入)

参数
比特 bit9 (0x0200)
用途 BUS16 写入权限
条件 locked self 或 locked_ancestor

Bake the Future. Build the Substrate. 🛠️⚡️