第 56 环 · 会话改名(清单里带名字)
第 52~55 环让会话能列、能点、能删,可清单里每一场仍只是一串冷冰冰的会话号:0x91、0x92、0x93。用户心里记的是「工作那场」「家里的事」「查资料」——一场对话没有名字,用户就只能靠序号认它。
软件要改名,得自己:查清单第 N 条 → 取槽号 → 把名字写在某个地方 → 再把整张清单重排一遍把名字带上,四五件事又落回核手里。这一环把「这场叫这个名字」也收进芯片——一条 npu.rename 序号,剩下的全由硬件走完。
新增 rtl/rename_sess.sv 改名引擎。一条 start 之后,它按顺序做六件事:
0x1C0 读人数,再读第 idx 条的 {槽号[31:29], sid[15:0]} 和字数;0x268~0x27C,6 字 = 24 字节 UTF-8)的名字,落进该槽的名字格(0x200 + 槽号×6);0x1D8;0x240——字0=人数,之后每条 8 字 {槽号,sid} / 字数 / 名字 6 字。清单从此带名字;删掉中间一场后,后面的场次自动补位,名字跟着走;改第 2 场 → 好,名字记下了。
名字 24 字节落 0x206(槽 1 名字格)
命名清单 0x240:3 条,第 2 条带「工作那场」
空槽名字格清 0(不继承旧名字)
改第 0 场 / 越界 → ok=0 / err=1,不写格子、不写回执、不重排
ISA 化。核升 v20:custom-2 加 funct3=001 的 npu.rename rs1(rs1 = 第几场,1 起),前 55 圈的编码一位不动。npu.rd 新增 sel=37/38/39/40:被改名的会话号 / {槽号, ok, err} / 清单人数 / 已有名字的场数。
软硬接口。改名页接在删除页之后(0xFA0):RN_IDX / GO / BUSY / DONE / OK / ERR / SID / SLOT / CNT / BYTES / W0..W5 / NV ALID / RST / CORE / SCREEN32。改名引擎是会话记忆区的第六个写主(rn > fs > gp > bg > ss > arc)。会话记忆区从 512 字扩到 1024 字:0x000~0x1FF 一个地址没改,0x200 起才是名字格 / 命名清单——旧的归档、目录、清单、问候、接话、删除全部照旧。
单元仿真 tb_rename_sess:配真 sess_slots 目录与同口 1024 字内存。三场会话住在稀疏的槽 0 / 2 / 5;改第 1 场 → 名字落 0x200,命名清单第 1 条带名字;改第 2 场 → 第 2 条带第二个名字、nvalid=2;同一场再改 → 名字换掉、场数不重复计;序号 0 / 越界只报 err,不写格子、不写回执、不重排;删掉中间一场(真 free + list)再改名 → 命名清单按紧凑序号重排(第 2 条变成原第 3 场的号),被删槽的名字格回收清零;同配置复现逐字一致。
协同仿真 tb_min_soc56:接着第 55 圈(会话都删空)往下跑:
0xA1/0xA2/0xA3,一条 npu.sess.list → 清单三条;npu.rename 2:RN_OK=1 / RN_SID=0xA2 / RN_SLOT=1 / RN_CNT=3 / RN_BYTES=24 / RN_NVALID=1;0x206 名字格 6 字逐位对上,0x1D8 回执逐字对上;0x240:人数 3,第 2 条 {槽1,0xA2} / 字数 / 「工作那场」——清单真的带名字了;npu.rename 3:RN_SID=0xA3、RN_NVALID=2、槽 2 名字格 0x20C 落字、命名清单第 3 条带名字;err,不写名字格、不写回执、不重排清单;RN_CORE=0:改名这件事核一个入口寄存器都没写(名字是数据,不是配置)。主通路 SCREEN=0xF905FD04、SCREEN2~31 与第 25~55 环逐位一致——这一环只加了「名字格 + 命名清单」一条通路,计算面一个字没动。第 55 圈的协同仿真也复跑通过(递增不推翻)。
会话这条线到这一环,终于从「机器认得」走到「人认得」:存在(槽位)→ 记得(开机续聊)→ 说得清(清单)→ 说得出话(问候)→ 点得进去(接话)→ 删得掉(删除)→ 叫得出名字(改名)。
对用户来说,这不是一个「重命名功能」,而是最自然的一句话:「这场叫工作那场。」从此清单里不是 0x91,而是「工作那场」;删掉中间一场,后面的名字自己往前补——因为名字跟着会话,不跟着格子。
名字进问候。名字已经住进清单,可开机第一句还是「你有三场没聊完」——一个数字。下一圈让问候叫得出名字:开机直接说「「工作那场」还等着你」——AI 记得的不只是「有几场」,而是「你在等哪一场」。