第 78 环 · 点完就接着聊(序号点选后 AI 先说下一句)
第 76/77 环把「第N个」点选做进了芯片:从余场序号表取出会话号、验过名字归属、念出「好,工作那场,接着聊。」、再换场恢复 K/V。可说完这句回执就安静了——目录对了、上下文也回来了,却没人开口,用户还得再补一句「然后呢」。
这一环让序号点选点完就接着聊:进场完成,硬件直接用恢复的上下文说下一句。回执是第一句,AI 的下一句是第二句——点选和续聊连成一句话。
三段接力,各管一段。新增 rtl/pick_speak.sv:点选引擎管「点谁」、开关场引擎管「进场」、这一环管「开口」。它只认 npu.name 的 done 电平 + per/ord 标志,且必须 answered;删除路径(del)一律不开口——删完没有「下一句」可接。
等真进场,不抢跑。名字点选在 S_ENT 已经发过一条 enter,这一环不重发,只用「见 busy 起、再见 busy 落」两段式等它跑完,绝不把上一轮的 done 当本轮。只有 ok && mem_ok(真读回旧上下文)才开口;空场不假装记得。
话头从记忆里来。发一段整段生成(与 npu.generate 同一台引擎):话头取刚恢复那场的归档摘要低位、层数 2、采样种子固定 0xA5——与第 68 环「续聊先开口」完全同一套契约。核一个生成入口寄存器都不写。
只消费一次。pick_done 是电平,consumed 标志保证同一场只开口一次;pick_done 落下才清零。pending 补「认下了但 busy 还没进寄存器」那一拍,npu.wait 不会把半路看成空闲。
开关保守。新写口 0xB38 NP_PKSPK(默认 0 = 第 77 环老语义);新只读 0xB3C PKS_SPOKE / 0xB40 PKS_SID / 0xB44 PKS_SEQ / 0xB48 PKS_N / 0xB4C PKS_LAST / 0xB50 PKS_PROMPT / 0xB54 PKS_CORE / 0xB5C PKS_DONE / 0xB60 PKS_ERR / 0xB68 PKS_BUSY,0xB58 PKS_RST,0xB64 SCREEN54。前 77 圈地址映射一字不改、ISA 一位没动。
单元 tb_pick_speak(替身开关场 + 替身生成引擎,五用例):
gen_start/seed_we 各一拍 → spoke=1、收下 n/seq/last;per=0/ord=0)→ 不动作;mem_ok=0)→ done=1 / spoke=0 / err=0,不发 gen_start;ord=1、del=1)→ 不动作;pick_done 还举着时 clear → 同一场不重复开口。ISA 协同 tb_isa_greet78(真整颗 SoC,四场目录 + 活清单 0x1C0 + 余场序号表 0x2A0,slot1 = 0xA2 归档 4 条 K/V,摘要 0x76CA6F0E):
NP_PKSPK=1, NP_ORDNM=1
说「第二个」→ 一条 npu.name
→ 换场 0xA2,回执「好,工作那场,接着聊。」
→ 硬件接一句:话头=摘要低位 2、种子 0xA5、4 步
seq=0x22([0,2,0,2])、末 token 2、PKS_CORE=0
→ npu.wait 等到这一句说完才返回
PKS_RST → 说「查资料」(全名点选)
→ 照旧换场 0xA3,spoke=0(全名路径留给下一圈)
SCREEN54 = 0x84A28022(spoke|4|0xA2|prompt2|core0|seq22)
SCREEN = 0x78
回归:name_pick77、rem_pick76、resume_speak70、isa_greet77、isa_resume68 全部 PASS;第 77 环的回执、第 68 环的先开口逐位不变。
pk_*(pk_rst_pulse / pk_corecnt),新引擎全部改用 pks_*;否则编译期就是重复声明;PKS_RST 时若 pick_done 还举着,consumed 必须置 1(consumed <= pick_done),否则 clear 会把同一场点选当新的一次、再说一遍;0x190 的 w0 = {valid[31], …, sid[15:0]};活清单 0x1C0 = {cnt, {slot[2:0],13'b0,sid}, words, …}。把目录项写成清单格式会让 valid=0,整场恢复失败;mismatch → ok=0 → mem_ok=0,表现为「静默不开口」;gen_run 的 start/prompt/layers 与 sampler 的 seed 四处都要加 pks_* 来路,漏一处就是「有点像」的假绿;gen_start / seed_we / pks_rst_pulse 只写复位分支会常高——第 38/44/68 环同一颗钉子。序号点选已经能「点完就接着聊」,可全名点选(说「查资料」)仍只换场、不开口——同一件事,两条路。下一环把 pick_speak 的触发从「第N个」放宽到所有点选:点谁都能接上下一句,同时保留归属校验与空场不假装记得。