🎯 圆心 · 目标(每环都从这里出发)
造一台 Salt OS 手机:基于 DeepSeek 的 AI 操作系统,iPhone 4S 外形(含底部圆形 Home 键),开机只有一个 AI(无桌面、无图标),软硬协同设计(OS + 芯片 + 主板一起做),为别人搭台、让别人在平台上赚钱。

🧭 完整框架(同心圆)

①文字闭环 · ②技术深入 · ③挂SRAM · ④权重INT4 · ⑤激活INT4 · ⑥NPU.STORE · ⑦KV Cache · ⑧注意力QK^T · ⑨Softmax · ⑩加权V · ⑪前馈FFN · ⑫残差·LayerNorm · ⑬多层堆叠 · ⑭QKV投影 · ⑮K/V分离 · ⑯自回归解码 · ⑰连续生成 · ⑱采样 · ⑲KV环形缓冲 · ⑳滑窗注意力 · ㉑多头注意力 · ㉒输出投影 W_o · ㉓多头块入残差流 · ㉔多头块进解码循环 · ㉕整层一块 · ㉖整网一块 · ㉗ISA契约 · ㉘权重内存化 · ㉙权重预取双缓冲 · ㉚权重分块 · ㉛矩阵行块 · ㉜行块自增 · ㉝起始块号可编程 · ㉞段表连扫 · ㉟段表流式取 · ㊱行块矩阵扫 ISA 化 · ㊲描述符链 · ㊳链槽直喂 · ㊴主路走链 · ㊵链预投下层 · ㊶跨趟预投 · ㊷权重池三 bank · ㊸权重池 ISA 化 · ㊹一步生成 ISA 化 · ㊺整段生成 ISA 化 · ㊻对话回路 · ㊼对话 ISA 化 · ㊽会话记忆归档 · ㊾多会话槽位 · ㊿会话槽位 ISA 化 · 51 开机续聊 · 52 会话清单 · 53 开机用上清单 · 54 问候接话 · 55 删掉一场 · 56 会话改名 · 57 名字进问候 · 58 问候念清单 · 59 按名字接话 · 60 叫错名字也回一句 · 61 反问给选项 · 62 按序号点选 → 63…

本环:从「把名字念出来」到「说第二场就点得到」

① 目标(这一环要解决什么)

第 61 环终于把能点的名字念出来了。可用户听完,未必想把「家里的事」四个字一字不差地说回去——最自然的回应是「第二场」。上一环收到「第二场」只会把它当成一个名字去比,24 字节永远不相等,于是又回「没找到:…」。

这一环让「第 N 场」本身成为可点的东西:硬件在扫名字格之前先认序号,直接取活清单第 N 条,排一句「好,接着第N场。」,再走同一条换场通路。

② 实现(做了什么)

name_pick 加了一条「序号」快路。全名命中、反问给选项、空名字这些老路一个字没改;新增的是读表头之后、扫名字格之前的一次判断:

  • 认序号:接受「第N场」「第N」「N」,N = 一..九 或 ASCII 1..9;前缀只认「第」或行首,后缀只认句末的「场」或零/空格填充——所以「第二场会议」这种真名字不会被误判成序号;
  • 直取条目:序号是紧凑序号(槽号可稀疏,与第 54 环 npu.pick 同一口径),硬件算 0x1C0 + 1 + (N-1)×2 取那一条,不读名字格、不比 24 字节;
  • 回执:排「好,接着第N场。」24 字节 / 6 字落 0x230,然后发一拍 enter,把会话号交给开关场引擎;
  • 越界:四场说「第九场」→ 不换场,复用第 60 环那句「没找到,是这N场吗?」(同时置 miss_r,避免写完后误走 enter);空清单只报 err、不回话;
  • 核不查表、不取号、不拼字、不发第二条指令:仍然是那一条 npu.name,只是入口多认了一种说法。
活清单 4 场:0xB1 记一笔 / 0xB2 查资料 / 0xB3 家里的事 / 0xB4 跑步计划
说「第二场」→ 读表头 cnt=4 → 认序号 N=2 → 取第 2 条
              → 0xB2 / 槽 1 → 回「好,接着第二场。」24 字节
              → enter 0xB2(ncmp=0:一场名字都没比)
说「第九场」→ N=9 > 4 → 回「没找到,是这四场吗?」(36 字节)
              → 不换场,SX_CUR 仍 0xB2

软硬接口。点名页新增只读探针:NP_ORD(0xFEC,这一趟认没认出序号)、NP_ORDN(0xFF0,认出的是几);新观察点 SCREEN38(0xFF4)。前 61 圈的地址映射一字不改。

③ 验证(怎么证明它真的跑通)

协同仿真 tb_min_soc62:重建目录,造四场会话 0xB1..0xB4,依次改名「记一笔 / 查资料 / 家里的事 / 跑步计划」,然后:

  • 说「第二场」 → NP_ORD=1 / NP_ORDN=2 / NP_OK=1 / NP_SID=0xB2 / NP_SLOT=1 / NP_NCMP=0 / NP_BYTES=24 / NP_ANSWERED=1,0x230 与「好,接着第二场。」逐字相同,SX_CUR 切到 0xB2;
  • 说「第九场」(四场里没有)→ NP_ORD=1 / NP_ORDN=9 / NP_OK=0 / NP_ERR=1 / NP_ANSWERED=1 / NP_NCMP=0,回 36 字节「没找到,是这四场吗?」,SX_CUR 仍 0xB2——不换场;
  • 说全名「查资料」 → 老路照旧:NP_ORD=0 / NP_OK=1 / NP_SID=0xB2 / NP_NCMP=2(第 2 条命中);
  • 说「第二场会议」(真名字里带序号词)→ NP_ORD=0,不认成序号,走比名字路径;
  • NP_CORE=0:核一个点名页配置寄存器都没写。
SCREEN38 = 0x1201B200
ord=1 · ordn=2 · ok=1 · sid=0xB2 · ncmp=0

主通路 SCREEN=0xF905FD04、SCREEN2~37 与第 25~61 环逐位一致。单元仿真 tb_name_pick62(第二场 / 第4场 / 越界第七场 / 全名命中 / 「第二场会议」不算序号 / 空名字 / 可复现)通过;协同 tb_min_soc62 通过,tb_name_pick61 与 tb_min_soc61 复跑 PASS。

④ 回到目标(这一环让手机多了什么)

人对着一列东西说话,最省力的指法从来不是复述全名,而是「第二个」。手机只有一个 AI 对话窗口,它要听得懂这种最自然的指法,而不是要求用户记住并背出整串名字。

这一环把「念出来」接成了「点得到」:AI 说得出选项,用户就点得中选项。说错序号也不沉默——它会告诉你没有第九场,并问是不是这四场。对话继续往前走,而不是停在「我没听懂」。