最新网址:sk.x3qdu.com

第164章 更快

作品:《 香江:从破产电器厂到全球巨头》

曙光一号的总线协议在第四版定稿的那个下午,林知夏在实验室白板上画了一张新的引脚排列图。三十二位数据通路被逐条分配到芯片的四个边,每条边的引脚间距严格遵循当时主流的双列直插式封装标准——间距容差被压到了千分之几英寸,这意味着PCB制造商不需要为曙光一号单独开发新的封装模具,可以直接使用市面上通用的DIP插座。二十四位地址通路按同样的排列规则分配在数据通路旁边,控制信号线全部集中在芯片的左上角,那块区域靠近CPU核心的时钟源,走线最短,时钟抖动最小。

他把整张引脚排列图贴在白板上,用不同颜色的记号笔标注了三类信号——数据、地址、控制——然后在图的下方写了一行字:“所有引脚排列兼容通用DIP封装,目标PCB工艺与当前主流制造标准完全对接。曙光一号从设计之初就不是实验室里的孤芳自赏,它从诞生就瞄准了可制造性。”老钱站在版图台前逐条核对完最后一个引脚的位置,在版图草图的对应焊盘旁边用铅笔标上信号名称,头也不抬地说了句:“引脚没问题,焊盘间距够,走线能布。”

梁工从仿真终端前站起来走到白板前,盯着白板上的总线协议看了很久,然后拿起一支记号笔在数据通路和地址通路之间画了一个圈。“如果总线上同时有读写请求和地址更新,这两组信号会在同一个时钟周期里抢占数据通路——这种情况在随机指令测试里出现的概率很低,但一旦出现,存储控制器会因为数据通路被占用而丢掉一个地址周期的锁存信号。”他说今晚用压力测试跑一轮——不是均匀随机,是专门针对读写冲突场景设计的密集指令序列,把所有可能的读写组合全部塞进连续的时钟周期里,看看存储控制器的总线仲裁逻辑在极端情况下会不会有遗漏。

当天晚上,实验室里只有他工位上的终端屏幕还亮着。他专门为总线压力测试设计了一套新的指令生成算法——用马尔可夫链构造读写冲突的密集场景,连续的写操作后紧跟连续的读操作,再穿插同时到达的读写请求。仿真器持续运行,打印机的纸张消耗了好几盒。凌晨两点,第一份错误报告从打印机里吐出来:在某组连续写操作后紧跟读操作的极端场景下,存储控制器内部的写缓冲队列溢出,导致后续的读操作在总线仲裁时无法正确识别当前地址周期。这是常规随机测试从未捕捉到的边界案例。梁工拿起红笔在错误报告上画了一个圈,在旁边手写了一行备注,建议在存储控制器与CPU之间增加一级独立的地址锁存器,专门处理写后读场景下的地址周期竞争。

林知夏看到这份报告时,正在喝方洁瑛刚端上来的普洱茶。他把搪瓷缸放在实验台上,拿起报告逐行看完,然后把缸子往旁边一推,走到白板前拿起记号笔,在存储控制器和CPU之间的数据通路旁边画了一个新的小方框。他在方框里画了两条并行通道:一条是原有的数据缓冲通道,另一条是新加的地址锁存通道,专门在写后读场景下独立锁存地址信号,不让它和数据信号在同一个时钟周期里抢占总线。老钱对着这个新方框看了半晌,用铅笔在自己那张已经修改多版的版图布局草图上重新量测了一遍CPU核心区域的布线密度,说这个模块加在存储控制器和CPU之间,需要额外调整几条走线的位置——但能改。

梁工在终端前把修改后的存储控制器逻辑重新投入压力测试,结果在测试过程中没有再出现任何地址周期遗漏。他在验证日志里新增了一份完整的测试报告,在扉页签下了自己的名字。

但林知夏没有回到自己的工位。他站在白板前盯着那个新增的缓冲队列方框看了很久,手里的记号笔在指尖转了几圈,然后忽然在方框旁边又画了一个新的圈——这个圈的位置在缓冲队列和CPU流水线之间,是数据从存储控制器进入CPU核心的必经之路。他说缓冲队列虽然解决了总线冲突,但数据从存储控制器到CPU核心的路径比原来多了一级缓冲,这意味着取指和写回的时序窗口都被撑宽了,CPU流水线在遇到数据依赖指令时,气泡会增加。梁工听到这句话,从终端前抬起头来,手指还在键盘上悬着,说这个问题他可以立刻验证——他只需要把缓冲队列的逻辑更新到仿真模型里,重新跑一轮全指令覆盖测试,就能精确量化时序窗口的变化幅度。他说到做到,更新后的仿真模型很快开始运转,结果印证了林知夏的担忧:数据从存储控制器到CPU核心的延迟增加了极短的时间,这个延迟在绝大多数场景下可以忽略不计,但当流水线遇到紧密排列的数据依赖指令时,气泡效应会被逐级放大。

林知夏把测试报告放在实验台上,拿起红笔在流水线架构图的执行单元和写回单元之间画了一道新的数据前推路径。他说以前数据从执行单元出来之后必须经过写回单元才能被下一条指令读取,中间浪费一个时钟周期;如果能在执行单元完成运算的瞬间就把结果直接旁路到译码单元——跳过写回阶段,不经过任何中间缓存——那么这个被浪费的时钟周期就能被省掉。老钱从版图台前抬起头,推了推滑到鼻尖的眼镜,说这条直通路径意味着从CPU核心底部到顶部需要一条横跨多个功能模块的长距离走线,金属层的电阻和寄生电容会随走线长度增加,可能导致信号的上升沿变缓。但他可以尝试——把这条走线放在金属层的最上层,用更宽的线宽和更大的间距来降低电阻和串扰,同时把这条走线的驱动单元放在CPU核心正中央,让信号往两个方向对称传播,抵消延迟。

他说干就干,拿起铅笔在版图布局草图上从CPU核心底部画了一道笔直向上的粗线,穿过存储控制器、执行单元、译码单元,直达顶部的指令寄存器。他在粗线两侧预留了比标准间距更宽的隔离区,标注了新的金属层参数。林知夏走到版图台前,看着那条纵贯整个CPU核心的粗线,忽然说这条线如果走通了,不仅数据前推的延迟会大幅下降,整个五级流水线的气泡效应也会随之改善——因为数据依赖指令在所有指令组合中占了相当大的比例。梁工从终端前站起来说如果架构要改,他需要重新跑一轮全指令覆盖测试,而且这次压力测试的范围需要扩大——不仅要覆盖数据依赖指令,还要覆盖数据前推路径和分支预测单元之间的交互时序。

李家港站在白板前逐项听完三人的讨论,拿起红笔在项目进度表上画了一条新的时间线,把数据前推直通路径的设计、版图调整和仿真验证排成了一组紧密衔接的节点。他在进度表下方加了一行备注,要求所有模块的修改记录必须同步归档,架构、版图和仿真三方的版本号必须对齐。窗外九龙塘的夜色已经完全沉降,实验室里的灯还亮着。林知夏在白板上继续修改数据前推路径的细节,他的笔尖在流水线架构图上来回游走,每画一道新的数据通路就在旁边标注对应的时序窗口和功耗估算。老钱在版图台前逐层调整金属走线的间距,那把从德州仪器带来的游标卡尺在硫酸纸上反复量测,铅笔线被擦了又画,画了又擦。梁工在终端前继续敲击键盘,新版的压力测试脚本正在生成针对数据前推路径和分支预测单元交互时序的密集指令序列,屏幕上跳动的提示符和注塑机的嗡鸣声交织在一起。

方洁瑛半夜起来给启明喂奶,从走廊经过时看到实验室门缝里漏出的灯光比往日更亮。她在传达室把那只搪瓷缸里的凉茶换成新泡的热普洱,让福伯半夜端上去。福伯推开实验室门时看到三个人各守一个角落,没有一个人抬头,他把缸子放在林知夏手边,顺手把老钱桌上那只已经凉透的搪瓷缸也换了新茶,转身带上门时自言自语了一句。窗外那颗启明星正低悬在飞鹅岭上方,光度比往日更亮。实验室里的灯一直亮到凌晨,白板上新画的数据前推直通路径被红笔圈了出来,旁边注着几个字,字体和林知夏在架构图右下角签下的名字缩写一样简练而有力。