哈哈小说
第 7 卷 · 造芯 · 第 148 章 · 62 段 · 1760 字

全速

第一百四十八章 全速

七月六日,早上八点半。

B207 平时这个时间不会有人,但今天颜天磊已经在了,方宇明也比平时早了半小时。

「第七层,」孟思远把 checklist 翻到最后一页,「全速推理路径。」

今天是最后一层。


PLL 重新配置回 1GHz,等待锁定,示波器确认,1000.1MHz。

孟思远准备了两套测试序列。第一套是昨天的 50 个请求,原封不动地在全速下再跑一遍——主要是验证 stall 问题消失;第二套是一个更大的测试集,共 500 个请求,覆盖了所有在后仿真里标记为「临界路径覆盖」的功能场景,以及孟思远额外设计的一些边界 case。

第二套里,有 47 个场景是专门为了触发那四条裕量最窄的路径设计的——访问模式、序列长度、缓存状态,都被设计成最容易让那四条路径在 setup time 上承受压力的情况。

方宇明没有说这些,但 B207 里的人都知道。


上午十点,第一套测试开始。

50 个请求,包括昨天触发 stall 的第 37 个(seq_len=128),这次全速下没有 stall,全部完成,输出全部与参考一致。

「全速带宽够,stall 不再复现,」孟思远记录,「L6 遗留问题:关闭。」

方宇明:「开始第二套。」


第二套 500 个请求,从早上十一点开始跑。

插图

前 100 个,全部 pass。

孟思远盯着屏幕,每十个请求汇报一次。「120 pass。」「150 pass。」「200 pass。」

贺志明在旁边坐着,翻着手账,偶尔看一眼屏幕。

到 250 个,全部 pass。

「表现比我预期的好,」颜天磊说,「我以为会早一点出问题。」

「也许不会出,」孟思远说。

「那也挺好的,」颜天磊说,但语气里有一点不确定。

300 个,pass。

方宇明没说话,但他把原本靠在椅背上的姿势改成了往前,手肘放在桌上。


第 301 个请求。

孟思远把请求下发之后,等待完成标志。

时间比正常的稍微长了一点。完成标志出现了,但孟思远读取输出结果,拿到参考值对比——

插图

「有差异,」他说,「第 301 个,output bit 19,值应该是 1,实际是 0。」

B207 里安静了一秒。

「只有一个 bit?」方宇明问。

「只有一个,」孟思远说,「其他 63 个 bit 全部正确。」

「哪个请求场景?」

孟思远查了一下,「这个是测试集里为覆盖临界路径专门设计的第 23 个 case,」他说,「我知道它对应的是哪条路径。」

他在屏幕上打开了一个文件,翻到第 23 个 case 的注释:「覆盖目标:KV-cache 读仲裁路径 #3,后仿 slack = 0.04ns,最窄。」


「0.04ns,」颜天磊低声说,「就是这条。」

方宇明靠回椅背上,「先确认这不是测试脚本的问题,」他说,「把这个请求再跑一遍。」

孟思远重新下发第 301 个请求——这次 bit 19 是 1,正确的。

「偶发,」孟思远说,「不是每次都错。」

「时序违规,」方宇明说,「如果是 setup time 违规,错误会是概率性的——在大多数情况下,数据能赶上时钟沿;在某些情况下,比如温度高了一点、电源噪声大了一点,margin 耗光了,数据没赶上,采到了错误的值。」

「怎么处理?」颜天磊问。

插图

方宇明想了一下,「几种方法。第一:降频,把工作频率从 1GHz 降到 950MHz,margin 变宽,这条路径应该能通过。第二:调电压,把内核电压从现在的 1.001V 往上调,增加 CMOS 逻辑的驱动能力,让这条路径跑得更快。第三:接受它,标注这是一个已知的 timing marginal 路径,在产品层面做软件规避——比如限制触发这个特定访问模式的频率,或者增加重试机制。」

「三种方法,现在先做哪个?」孟思远问。

「都试,」方宇明说,「今天先试电压,看看能不能靠电压把这条路径推过去。」


杜磊把 LDO 的输出电压从 1.001V 调到了 1.05V,偏高了大约 5%,在芯片规格的上限(1.1V)以内。

第二次跑第 301 个请求,bit 19:正确。

第三次:正确。

连跑了二十次,全部正确。

「电压提高,timing margin 恢复,这条路径通了,」方宇明说,「继续跑剩下的 200 个请求。」


剩下的 199 个请求,全部 pass。

500 个请求,只有第 301 个在标准电压(1.001V)下出现了一次偶发的 bit 错误,在提高内核电压到 1.05V 之后消失。

方宇明把结果整理成一份报告:

「砺火一号 bringup 第七层(全速推理路径)结果:500 个测试请求中,499 个在标准条件下全部 pass;1 个(#301)触发 KV-cache 读仲裁路径 #3 偶发 timing 违规,slack 后仿预测 0.04ns,在内核电压 1.001V 条件下出现。调整内核电压至 1.05V 后,该路径在连续 20 次重复测试中全部通过。七层 bringup checklist 全部完成。」

插图

写完这份报告,方宇明把它存进文件夹,合上电脑,在椅子上靠了一下。

「第一款砺火一号,」贺志明说,「bringup 完成了。」

「第一轮,」方宇明说,「有一条路径需要超压工作,这是一个已知问题,后续版本修。」

「但功能是对的,」贺志明说。

「功能是对的,」方宇明重复,「KV-cache 工作,推理路径工作,除了那一条 timing marginal 的路径需要超压——其他一切都在预期范围内。」


陆衍当天晚上发给豆包:「第七层通了,但第 301 个请求有一个 bit 错误,对应后仿 slack 最窄的那条路径(0.04ns)。电压提高到 1.05V 之后消失了,方宇明说砺火一号 bringup 完成。」

豆包:「这个结果是可以接受的。0.04ns slack 在真实芯片上出现 timing 违规是完全符合预期的——工艺偏角、温度、电源噪声的叠加效应,消耗了这 0.04ns 的 margin。超压 5% 把 CMOS 的翻转速度拉回来,让路径的实际延迟缩短到 timing 允许的范围内。在产品级芯片上,这种路径会在下一个版本里通过调整布局或者插入缓冲器来修复。」

陆衍:「方宇明说「功能是对的」。」

豆包:「功能是对的,这是今天最重要的一句话。砺火一号实现了设计目标:在真实硅片上,KV-cache 的仲裁逻辑行为正确,推理路径工作。超压这件事,在工程上是可以解决的,也是在预期内的。」

陆衍:「接下来,沈默的集群。」

豆包:「是的。下一步是在沈默的张江推理集群里,把砺火一号装进真实的推理服务器,在真实的推理任务上测延迟和吞吐量——bringup 只是证明芯片能工作,集成测试才是证明它有用。」

陆衍放下手机。B207 的灯还开着,验证板在防静电垫上,砺火一号在 1.05V 内核电压下,稳稳地跑着。