第 55 环 · 删掉一场(已聊完的会话从清单里消失)
第 54 环让用户「点一场就切过去」,会话第一次能进得去。可聊完的那一场还在:占着一个数据槽、留在清单里、开机问候照样数它。软件要删掉它,得自己查清单第 N 条 → 取会话号 → 发 free → 再发 list 重排清单 → 改问候,四五件事又落回核手里。
手机上的对话本来就有始有终。用户说「这场不用留了」,AI 该当场把它收掉:槽位释放、清单少一条、下次开机不再数它。这一环把「删掉一场」也收进芯片——一条 npu.forget 序号,剩下的全由硬件走完。
新增 rtl/forget_sess.sv 删掉一场引擎。一条 start 之后,它按顺序做六件事:
0x1C0 读表头(人数),再读第 idx 条的 {槽号[31:29], sid[15:0]} 和字数;0x1D0——用户马上看到一句话;free(cmd=4)——目录项作废、该槽数据清零、used - 1;删的若是「上一场」,表头里的 last 记录一并清掉;list(cmd=7)——被删的那场从清单里消失,后面的场次自动补位,空位写 0 不留残影;sess_switch 的当前指针当场清 0——不能留一个指向已释放槽的「当前场」,否则下次 leave 会把它归档回一个已经释放的槽,已删的名单会重新长回来。删第 2 场 → 好,这场删掉了。
清单 3 → 2(第 3 条补到第 2 条)
目录 used 3 → 2,槽数据清零
删当前场 → 当前指针清 0(不是悬空指针)
删第 0 场 / 越界 / 空清单 → ok=0 / err=1,什么都不动
ISA 化。第 43 环开的 custom-1 八个 funct3 已经用满(pool/step/generate/chat/sess/boot/list/pick),这一环开新主 opcode custom-2(1011011):funct3=000 是 npu.forget rs1(rs1 = 第几场,1 起)。前 54 圈的编码一位不动。npu.rd 新增 sel=34/35/36:删完还剩几场 / 被删的会话号 / {槽号, ok, err}。
软硬接口。删除入口接在接话页 0xF00 之后(0xF50):FS_IDX / GO / BUSY / DONE / OK / ERR / SID / SLOT / WORDS / CNT / BYTES / W0..W5 / RST / SCREEN31 / FS_CORE。删除引擎是会话记忆区的第五个写主(fs > gp > bg > ss > arc),且严格串行:先写回执、再 free、再 list——回执先落盘,用户先看到一句话。
单元仿真 tb_forget_sess:配真 sess_slots 目录与同口内存,三场会话分别住在稀疏的槽 0 / 2 / 5(槽号与紧凑序号刻意不同)。删第 2 场 → 解出 0x92/槽 2/16 字,回执 24 字节逐位对上;目录项作废、槽数据清零、used 3→2;清单 3→2,0x93 从第 3 条补到第 2 条、槽号仍是 5、空位全 0。删 0 / 越界 / 空清单都只报 err。删的正是 last 场时,表头 last 记录清掉,只留 stamp 低 8 位。
协同仿真 tb_min_soc55:接着第 54 圈的状态(三场 0x91/0x92/0x93、当前 0x93、Y93 已算出)往下跑:
npu.forget 2:FS_SID=0x92 / FS_SLOT=1 / FS_BYTES=24 / FS_CNT=2,清单重排成 0x91 / 0x93,SS_USED=2;0x1D0 读回「好,这场删掉了。」;SX_CUR 仍是 0x93,跑整网仍等于 Y93——删别的一场没有动当前上下文;npu.pick 2:第 2 条现在补成了 0x93(0x92 已从清单消失),PK_SID=0x93 / PK_SLOT=2,问候换成「好,接着第二场。」;npu.forget 2(删的正是当前场):FS_SID=0x93,SX_CUR 当场清 0、SX_STATUS.cur_valid=0,SS_USED=1——当前指针不是悬空的;npu.forget 1:删最后一场 0x91 → 清单 0 条、used=0;err,不换场、不改目录;全程 FS_CORE=0、SX_CORE 没涨、PK_CORE 没涨。主通路 SCREEN=0xF905FD04、SCREEN2~30 与第 25~54 环逐位一致——这一环只加了一条「删除 + 清单重排」通路,计算面一个字没动。
会话这条线到这里第一次有始有终:存在(槽位)→ 记得(开机续聊)→ 说得清(清单)→ 说得出话(问候)→ 点得进去(接话)→ 也删得掉(删除)。
对用户来说,这不是一个「删除按钮」,而是一句自然的话:「这场聊完了,不用留了。」AI 接住这句话,硬件把槽位、清单、问候、当前指针一起收干净——下一次开机,它真的不在了。
会话改名。删得掉之后,清单里还只有一串会话号。下一圈让「这场叫什么」也由硬件记住:给一场会话起个名字,清单表和开机问候都带上它——用户看到的不是 0x91,而是「家里的事」。