第 59 环 · 按名字接话(点名就切过去)
第 58 环让开机第一句把所有名字都念出来。用户听完自然回一句「查资料」——可这句话在软件里仍是一串手工活:读清单、逐场读名字格、逐字节比对、取出会话号、再发一条 npu.sess。
手机唯一的入口就是对话。用户说名字,AI 就该切过去。这一环把「点名」也收进芯片:一条 npu.name,硬件自己找、自己比、自己换。
新增 name_pick 按名字接话引擎。一条 npu.name(无操作数,名字已在名字输入缓冲区)走完:
0x1C0 字 0 = 人数,条目字 {槽号,sid};0x200 + 槽号×6,每场 6 字 = 24 字节(同步 SRAM 三态读);0x230(空格补齐);读 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:核一个配置寄存器都没写——名字是数据,找名字是硬件。主通路 SCREEN=0xF905FD04、SCREEN2~34 与第 25~58 环逐位一致——这一环只多了「按名字找场」一条通路,计算面一个字没动。单元仿真 tb_name_pick(全名命中 / 半名不算 / 命中第三场 / 不在清单 / 空名字不扫表 / 空清单不挂死 / 可复现)通过;tb_riscv_core / tb_rename_sess / tb_boot_greet58 / tb_greet_pick 复跑通过(递增不推翻)。
开机只有一个 AI、一个对话窗口。第 58 环让它叫得出名字,第 59 环让它听得懂名字:用户不用记序号、不用点清单,说「查资料」就进去了。
这是「对话即界面」真正落地的一步:入口不再是图标和列表,而是用户说出的那句话。名字仍然跟着会话走——改过名,下一次叫的就是新名字。
叫错名字也回一句。点名找不到时,芯片现在只是安静地报 err——用户会觉得 AI 没听见。下一圈让失败也有回执:把「没找到」和清单里的名字排成一句话,让 AI 反问一句「你是说这几场吗?」。