🎯 圆心 · 目标(每环都从这里出发)
造一台 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…

本环:从「查资料、跑步计划,都在。」到「查资料,接着聊。」

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

第 58 环让开机第一句把所有名字都念出来。用户听完自然回一句「查资料」——可这句话在软件里仍是一串手工活:读清单、逐场读名字格、逐字节比对、取出会话号、再发一条 npu.sess。

手机唯一的入口就是对话。用户说名字,AI 就该切过去。这一环把「点名」也收进芯片:一条 npu.name,硬件自己找、自己比、自己换。

② 实现(做了什么)

新增 name_pick 按名字接话引擎。一条 npu.name(无操作数,名字已在名字输入缓冲区)走完:

  • 读活清单:0x1C0 字 0 = 人数,条目字 {槽号,sid};
  • 逐场读名字格:0x200 + 槽号×6,每场 6 字 = 24 字节(同步 SRAM 三态读);
  • 24 字节全等比较:不是前缀匹配——说「工作」不会切到「工作那场」。名字格与输入缓冲区都是零填充定长格,长度也必须相同;
  • 命中就排回执:「好,名字,接着聊。」定长 36 字节 / 9 字,落 0x230(空格补齐);
  • 同一条通路换场:回执写完,一拍脉冲把会话号交给开关场引擎(enter)——「点名」与「一条 npu.sess enter」走的是同一扇门;
  • 叫不到也不崩:空名字直接 err(一场都不比);清单为空、一个都不像 → err,不回执、不换场,上层可以再问一遍。
读 0x1C0 人数 = 4
  条目0 {槽0,0xA1} 名字 记一笔
  条目1 {槽1,0xA5} 名字 查资料   ← 24 字节全等命中
  条目2 {槽2,0xA4} 名字 家里的事
  条目3 {槽3,0xA6} 名字 跑步计划
写 0x230:好,查资料,接着聊。(36 字节 / 9 字)
sx_start=1, sid=0xA5

软硬接口。核升 v21:custom-2 加 funct3=010 npu.name(无操作数,前 58 圈编码一位不动)。点名牌与开机问候同页(0xE00):NP_GO(0xE80)、NP_RST(0xE84)与只读探针 NP_OK/ERR/SID/SLOT/IDX/CNT/NCMP/NLEN/BYTES/W0..W8/CORE(0xE88~0xED0),SCREEN35 在 0xEF0;npu.rd 新增 sel=41/42(命中的会话号 / {槽,idx,ok,err})。会话记忆写主优先级 np > rn > fs > gp > bg > ss > arc;名字输入沿用第 56 环的 0x268~0x27C(数据,不是配置)。

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

协同仿真 tb_min_soc59:接着第 58 圈的四场会话(0xA1 / 0xA4 / 0xA5「查资料」/ 0xA6「跑步计划」)往下跑:

  • 点名「查资料」 → NP_OK=1 / NP_ERR=0 / NP_SID=0xA5 / NP_NLEN=9 / NP_BYTES=36 / NP_CNT=4;NP_W0..W8 与「好,查资料,接着聊。」逐位相同;SX_CUR 从 0xA6 变成 0xA5——真切过去了;
  • 说半个名字「查」 → NP_OK=0 / NP_ERR=1,SX_CUR 仍 0xA5,0x230 里上一次的回执照旧留着(屏幕不闪);
  • 说清单里没有的「跑步」 → 同样点不到、不换场;
  • 说全名「跑步计划」 → NP_SID=0xA6 / NP_NLEN=12,回执「好,跑步计划,接着聊。」逐字对上,SX_CUR 变成 0xA6;
  • NP_CORE=0:核一个配置寄存器都没写——名字是数据,找名字是硬件。
SCREEN35 = 0x02A5A65A
两场点名成功 | 0xA5 | 0xA6 | 自检 5A

主通路 SCREEN=0xF905FD04、SCREEN2~34 与第 25~58 环逐位一致——这一环只多了「按名字找场」一条通路,计算面一个字没动。单元仿真 tb_name_pick(全名命中 / 半名不算 / 命中第三场 / 不在清单 / 空名字不扫表 / 空清单不挂死 / 可复现)通过;tb_riscv_core / tb_rename_sess / tb_boot_greet58 / tb_greet_pick 复跑通过(递增不推翻)。

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

开机只有一个 AI、一个对话窗口。第 58 环让它叫得出名字,第 59 环让它听得懂名字:用户不用记序号、不用点清单,说「查资料」就进去了。

这是「对话即界面」真正落地的一步:入口不再是图标和列表,而是用户说出的那句话。名字仍然跟着会话走——改过名,下一次叫的就是新名字。