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

🧭 完整框架(同心圆)

①文字闭环 → ②技术深入 → ③挂SRAM → ④权重INT4 → ⑤激活INT4 → ⑥NPU.STORE → ⑦KV Cache → ⑧注意力QK^T → …

本环:把大模型的「记忆」驻留在片上

① 目标是什么

同一个圆心:一台开机只有一个 AI 的手机。AI 跟人对话,是一句一句往外吐字的。每吐一个新字,都要回头把前面所有字重新看一遍(注意力)。要是每次都重算,算力和内存带宽会被重复劳动吃光。本环给 AI 造一块「记忆」——KV Cache,驻留片上。

② 怎么实现(不脱圆心)

第 3 环已经确认「内存带宽优先于峰值算力」。KV Cache 驻留就是这条结论的进一步落地:把历史 K/V 留在片内,新 token 只追加一条、解码时直接读回,不必回内存重算。硬件要提供「追加式」接口——核只喊一声「追加这条 K/V」,写指针由硬件自己推进,核不必维护序列位置。

③ 本环做了什么(真代码)

新增 rtl/kv_cache.sv:append 端口写入一条 K/V,kv_len 自增;同步读端口按槽位读回;满(full)时丢弃。挂进 min_bus.sv,映射 5 个寄存器:

0x020 → KVC_APPEND  写 1 追加一条,写指针自增(kv_len++)
0x024 → KVC_DATA    待追加的 K/V 载荷
0x028 → KVC_RD_ADDR 写槽位号 → 触发同步读回
0x02C → KVC_RD_DATA 读回最后读取的 K/V 载荷
0x030 → KVC_LEN     读当前上下文长度 kv_len(暴露给软件)

circle07/boot.s:预填充 4 个 token(载荷 1/2/3/4)依次追加,再逐个槽位读回校验。

④ 怎么算成(闭环验证)
追加 4 条 → 读回 (kv_len=4, 求和=10) → 屏幕 0x40A · RESULT=PASS
单元仿真(追加/自增/读回/满丢弃)+ 核-OS-片上KV Cache 协同仿真 双双通过

如果历史没有驻留,读回就取不到值;现在读回 4 条载荷 1/2/3/4、求和=10,且 kv_len=4,屏幕 = (4<<8)|10 = 0x40A = 1034——证明 AI 的「记忆」真的在片上,随时可回看。

⑤ 回到目标

本环走完一整圈:目标 → AI 对话要「记得前面说过啥」 → 追加式 KV Cache 落地 → 追加/读回/校验跑通 → 回到目标。AI 的记忆从「每次重算」变成「片上驻留、按需回读」,这是让一台手机本地跑大模型的关键一步。