🎯 圆心 · 目标(每环都从这里出发)
造一台 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 序号用于删除 · 64 删除回执念名字 · 65 删除可撤回 · 66 撤回回执念名字 · 67 撤回即续聊 · 68 续聊先开口 · 69 开口带名字 · 70 开口不叫错人 · 71 开机问候也认人 · 72 单名问候也验归属 · 73 单名问候带余场 → 74 余场点名

本环:叫对人,也交代清楚还有谁在等

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

第 72 环把单名问候的名字验准了:归属对上才念「查资料,接着聊吧。」可这句话只说了一场。清单里另外两场明明还在,开机第一句却像今天只剩这一场。

这一环只扩一句尾巴:名字验过之后,若清单里还有别的场,就把「,还有N场在等你。」接在名字后面。既叫对人,也把今天还剩几场说清楚。只有这一场时,仍保留第 57 环老句,一字不改。

② 实现(做了什么)

在单名入口上加一个余场判断。boot_greet 在第 72 环的归属比对通过后,看输入 cnt(清单里活着的会话数):

  • cnt > 1 → 置 squeue=1、rem=cnt-1,名字后面接 「,还有N场在等你。」27 字节;
  • cnt == 1 → squeue=0 / rem=0,仍走第 57 环「,接着聊吧。」18 字节;
  • 归属对不上 → 仍退回按场数问候,rem/squeue 一并归零,旧名字一个字不出现。

数字也按中文量词写。新尾巴里的 N 用「一 / 两 / 三 / 四 / 五」,走独立的 qnum_byte,所以第二场是「两场」,不是「二场」。

整行按 64 字节排。名字最长 24 字节,加 27 字节尾巴已超过 48 字节,因此带余场时改用第 58 环的 64 字节通路:补空格到 63、打包 16 字、连写 16 拍落 0x1E0。cnt=1 的老句仍走 48 字节 / 12 字老路。

新增证据。boot_greet 多两个探针输出 rem[3:0] 与 squeue;SoC 新增只读屏摘要 SCREEN49(0xAEC):rem<<20 | squeue<<16 | sbind<<15 | named<<14 | bytes。前 72 圈地址映射一字不改,ISA 一位没动(仍 npu.boot)。

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

单元仿真 tb_boot_greet73(真同步 SRAM 行为模型):

  • cnt=3 / 槽 2「查资料」归属 0xA3 →「查资料,还有两场在等你。」64 字节 / 16 字逐位,rem=2 / squeue=1 / sbind=1 / nver=1;
  • cnt=1 →「查资料,接着聊吧。」48 字节,rem=0 / squeue=0,老句不推翻;
  • cnt=2 →「还有一场在等你。」rem=1;cnt=6 →「还有五场在等你。」rem=5,量词与上限都对;
  • 归属残留 0xAA → 退回「你有三场没聊完。」24 字节,rem=0 / squeue=0,「查资料」一个字节都不出现;
  • clear 后 rem/squeue 一并归零。

ISA 协同仿真 tb_isa_greet73(真整颗 SoC):目录三场 0xA1(slot0) / 0xA2(slot1) / 0xA3(slot2),最后一场 0xA3 住 slot2;slot2 名字格「查资料」,归属 0x282 = 0xA3(这一场自己的名字)。开机前 BG_ALL=0,一条 npu.boot 跑完恢复与单名问候:

  • 0x1E0 =「查资料,还有两场在等你。」64 字节 / 16 字逐位相同,行尾补空格;
  • BG_NAMED=1 / BG_BYTES=64 / BG_SBIND=1 / BG_SQUEUE=1 / BG_REM=2,全由硬件自报;
  • SCREEN49 = 0x0021C040(rem 2 | queue 1 | bind 1 | named 1 | bytes 64),SCREEN=0x73;
  • 旧尾巴「接着聊吧」不出现;一次 npu.wait 没冻死。
RESULT=PASS
三场里恢复 0xA3 → 开机第一句「查资料,还有两场在等你。」

回归:tb_boot_greet(第 53 环按场数)、tb_boot_greet58(第 58 环念清单)、tb_boot_greet71(第 71 环归属)、tb_boot_greet72(第 72 环单名归属)、tb_isa_greet72 全 RESULT=PASS。第 57 环老句的单名用例按新契约把场数设为 1,继续验「老句不推翻」;tb_min_soc64 的 R57 快照同步为带余场整行,复跑 PASS,主通路 SCREEN=0xF905FD04 与第 25~72 环逐位一致。

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

只有一个对话窗口的手机,开机第一句就是它唯一的人味。叫对名字是尊重,说清「还有两场在等你」是体贴——不让用户以为过去都被抹掉了。

软硬协同的分寸仍然没变:清单在内存里,名字与归属在内存里,余场判断和整句排版在硬件里;核不查表、不数场、不拼字,一条 npu.boot 就把该叫的人、该交代的场都说全了。