请关闭浏览器的阅读/畅读/小说模式并且关闭广告屏蔽过滤功能,避免出现内容无法显示或者段落错乱。
时间飞快,转眼就到了11月。
昆仑1机的芯片、元器件、机柜均如期交付,板卡也陆续完成设计。
硬件板卡集成小组启动了火车头测试。
红星轧钢厂的防静电车间里,吕辰站在机柜前,手里拿着一个棕色封皮的本子。
他今天负责记录,亲眼看着这台机器活过来。
吴国华手里拿着示波器的探头,蹲在机柜后面,地线夹已经牢牢固定在接地铜排上。
宇文坤德站在配电盒旁边,手里握着一支电笔,大拇指搭在开关上。
旁边的桌子上,摆满了各种工具和元件。
螺丝刀、镊子、万用表、酒精棉签、备用芯片、一小卷细铜线。
昆仑1机的第一块电源板、第一块时钟板和总线背板,已经被小心翼翼地插进了第一台测试机柜的插槽里。
金手指与背板插槽的簧片接触时,发出轻微的“咔嗒”声让人安心,像是骨头归位。
“就这三块。”吕辰看着面前这台孤零零的机柜,“电源、时钟、背板。先让心脏跳起来,其他的等会儿再说。”
吴国华和宇文坤德在做着最后的检查。
示波器的探头点在电源板远端的电源引脚上,屏幕上跳出一条绿色水平线,随后一个方波出现又消失,吴国华微微点了点头。
宇文坤德走到机柜侧面的配电盒前,左手搭在空气开关上,右手拿着电笔点了点几个测试点,确认接线无误。
“上电。”
电磁接触器“嘭”地一声吸合,声音沉闷有力,像一头沉睡的野兽被拍醒。
机柜前面板的几个指示灯相继亮起,绿色的电源正常灯亮得最快,黄色的总线空闲灯闪了两下也稳住了,红色的故障灯没有亮。
示波器屏幕上的波形跳了起来。
先是一个不太干净的尖峰,那是上电瞬间的浪涌,谁家机器都免不了,然后稳定在5伏直流电平上,像一条被拉直的线。
吴国华盯着屏幕看了三秒,然后把时基调大,观察了十几个周期,确认没有异常抖动,才开口:“+5V正常。”
他把探头移到另一根线:“+12V也稳了,纹波在规格内。”
宇文坤德蹲在机柜后面,把万用表的表笔插在电源板的测试点上。
他看表的速度很慢,每一组读数都要默念两遍才往本子上记。
吕辰站在机柜正面,盯着前面板上的指示灯。
电源正常灯亮着,绿色的光在昏暗的车间里显得很踏实。
总线空闲灯也亮着,黄色的,像一盏待机的信号。
故障灯没有亮,这是今天最好的消息。
他从兜里掏出一支烟,点上,吸了一口。
烟雾在洁净室的气流里被迅速抽走,消失得无影无踪,过滤器的嗡鸣声始终没停过。
“行了,先让它跑一个小时。”吕辰看了看手表。
车间里安静下来,只有机柜里散热风扇的低频嗡嗡声,和示波器屏幕上那根稳定的绿色水平线。
宇文坤德蹲在机柜后面,手里的万用表一直没有收起来。
他每隔十分钟测一组数据,记在本子上,字迹工整,每一行都标注了时间和测试点。
他的动作很慢,但很稳,像在给一个病人量体温。
吴国华把探头放在台面上,拧开保温杯喝了一口水,他的眼睛没离开过示波器屏幕。
半个小时过去了,一切正常。
40分钟的时候,宇文坤德忽然开口了。
“吕工,过来看一下。”
语气里,一种“你最好来看看”的意味。
吕辰三步并作两步走到机柜后面。
宇文坤德把万用表的读数转过来给他看。
4.82V。
“这颗芯片离电源入口最远。”宇文坤德用表笔点了点那颗芯片的位置,“标称是5V。跌了将近4%。”
吕辰盯着那行数字看了两秒,没说话。
吴国华已经把示波器探头移了过来。
屏幕上的5V电平线平稳,但仔细看,确实比电源入口处低了大约一格。
“线画细了。”吴国华摇头,语气里带着一种“我就知道”的无奈,“现在的电压还能撑住,指标内。但如果后面加更多芯片,电流再大一点,肯定要跌破4.75伏的红线。”
吕辰翻开本子,用钢笔写了一行字。
他写得很慢,像是在斟酌每一个字:电源板远端压降4%,建议加粗主干道或增加去耦电容。
他在旁边画了一个三角形,表示“需要跟踪,非紧急”。
“先不管。”吕辰合上本子,声音很平静,“能跑就行。继续观察。”
现在不是停下来改板子的时候,火车头测试的目标是让最小系统转起来,证明这条路走得通。
毛病记下来,回头一并改,这是工程,不是实验室里的完美主义。
又过了十几分钟。
示波器的屏幕闪了一下。
吴国华的眼睛猛地瞪大了。
“毛刺!”
他的声音拔高了半度,整个人从靠着的姿态一下子直起来,手指已经搭在了示波器的旋钮上。
吕辰凑过去看。
时钟信号线上,那本该是整齐方波的地方,在正常的边沿旁边,偶尔会出现一个尖锐的毛刺,像一根针扎在波形上。
幅度大约1.8伏,持续时间极短,短到示波器的光标都很难锁住。
“哪来的?”吕辰皱眉。
吴国华把示波器的时基调大,开始扫描更长时间窗口。
屏幕上的波形缓缓移动,像一条缓慢流淌的河。
毛刺出现的频率不高,大约每两三秒一次,间歇性出现,没有规律。
宇文坤德走到机柜前面,弯下腰,凑近时钟板的位置。
这块板子上有一颗KL-CLK时钟分配芯片,旁边围着几只晶体和几个电容。
他看了几秒,又抬起头看了看从背板下来的那几束线缆。
他的眼睛眯了起来。
“线走得太近了。”他指着从背板下来的几条数据线,“时钟线跟数据线在背板上并行走了一段。间距——”
他没有说完,但意思已经很明显了。
吴国华拿起逻辑分析仪的探头,夹在了那条时钟线和最近的一条数据线上。
分析仪的屏幕上一行行数字跳出来,速度很快,但他一眼就捕捉到了规律。
“确认了。串扰。”吴国华把屏幕转向吕辰,用手指点着上面的几行数据,“每当数据线从0翻转到1的时候,时钟线上就会出现一个毛刺。时序刚好卡在那个点上。”
他声音凝重:“这个毛刺幅度1.8伏。TTL电平里,2伏就算高电平了。虽然还没到阈值,但如果再多一点干扰,或者温度升高、芯片老化,它就会变成真正的误触发。”
宇文坤德直起腰,目光从线缆移到吕辰脸上,没有催促,只是在等一个决定。
吕辰盯着屏幕看了几秒。
加屏蔽地线要改板卡设计,加大间距也要改板卡设计,这些都是下一版的事。
现在要做的,是确认这个毛刺会不会让今天的测试跑不下去。
“频率高吗?”他问。
吴国华又看了一眼分析仪:“不高。平均两三秒一次。没有造成实际的逻辑错误,至少目前没有。”
“那就先记着。”
吕辰翻开本子,又写了一行:
时钟与数据线串扰,毛刺1.8V,间距不足,需加地线隔离或加大间距。
旁边画了两个三角形,优先级更高。
他合上本子:“电压和时钟能撑住就继续。今天的任务是让最小系统转起来,毛病先记着,回头一并改。”
吴国华点了点头,把探头的夹子重新夹稳。
宇文坤德把手从万用表上移开,站直了身子,活动了一下有些僵硬的腰。
一个小时跑完了。
电压最低点4.80V。
时钟毛刺最大幅度1.9V。
没有造成实际故障。
吕辰合上本子,伸了个懒腰。
他看着机柜上那些还在亮着的指示灯:“加I/O板。让指令跑起来。”
吴国华从防静电盒里取出一块I/O板。
这块板子比电源板小一圈,正面只有几颗芯片插座和一小排指示灯,背面是一排金手指。
他双手握住板卡边缘,对准抽屉里的插槽导轨,轻轻推了进去。
“咔嗒”。
板卡到位,锁紧机构弹起,声音清脆,让人安心。
吕辰走到工作台前,从抽屉里拿出已经烧录好测试程序的二维卡。
那张浅黄色的卡片不大,打满了密密麻麻的孔,在灯光下看像某种密码本。
他在读卡机前面蹲下来,把卡片塞进读卡槽,推到底,然后按下了启动按钮。
读卡机开始工作,探针矩阵扫描电路,一行行微指令被读入,转化成电信号,沿着数据总线送进板卡。
机柜上的指示灯开始闪烁。
黄色的总线空闲灯灭了,绿色的运行灯亮了起来。
吕辰站起来,盯着前面板。
测试程序很简单,读拨码开关的状态,然后点亮对应的指示灯。
拨码开关就装在I/O板的前面板上,8个拨码,8个指示灯,一一对应。
他拨动了第一个开关。
指示灯没有亮。
等了两秒,还是没有亮。
吴国华已经走到I/O板前面,把示波器探头点在输出引脚上。
屏幕上的波形跳出来,信号有,但幅度只有1.2伏,远低于TTL高电平的2伏阈值。
“输出驱动不够。”吴国华的声音有些发紧,“要么驱动芯片选型不对,要么插座虚接!”
宇文坤德把板卡抽了出来。
翻过来看背面,芯片插座的每一个引脚上,紧固的螺丝闪着银光,他用指甲刮了过去。
一连串清脆的“叮叮”声响起,声音圆润,没有破音。
没有虚焊。!
他又翻回去看正面的芯片插座,一颗一颗检查,手指轻轻按压。
按到第三颗的时候,芯片动了一下。
“没卡到底,虚接!”
把芯片从插座里拔出来,用酒精棉签擦了擦引脚,其实引脚看着不脏,但这是规矩,又重新插进去,用力压到底。
这一次,芯片稳稳地卡在插座里,没有丝毫晃动。
他把I/O板重新插回机柜,锁紧。
动作一气呵成,像是在灶台前颠了一万次勺。
吕辰再次拨动拨码开关。
指示灯亮了。
明亮的绿色,在车间里格外醒目。
吴国华没有笑,但他的肩膀松了下来。
他继续拨动剩下的七个开关,每个开关对应的指示灯都依次亮了起来,没有延迟,没有闪烁,没有迟疑。
“I/O板通了。”
吕辰翻开本子,写:
请关闭浏览器的阅读/畅读/小说模式并且关闭广告屏蔽过滤功能,避免出现内容无法显示或者段落错乱。
I/O板输出正常,前期故障为芯片插座虚接。
他想了想,又在后面加了一行:
插座安装后须逐颗按压确认。写入装配规范。
“下一个。加存储板。”
存储板比前面两块板子都大,上面整整齐齐排列着十六颗芯片插座,每个插座周围环绕着几只去耦电容,密密麻麻像列队的士兵。
吴国华双手托着板卡边缘,把它推进了机柜的第四个插槽。
锁紧机构弹起,“咔嗒”一声。
“上电。”
宇文坤德再次推上开关。
这一次,机柜的指示灯亮起来之后,存储板的几个状态灯也亮了,绿色,自检通过。
吕辰换了一张测试卡,塞进读卡机。
这次的测试程序更复杂,向存储器的某一段地址写入一组数据,然后读回来比较。
一致就点亮I/O板的第一个指示灯,不一致就点亮第二个。
读卡机“咔嗒咔嗒”地响了一阵。
程序开始运行。
第一个指示灯亮了。
吕辰没有动。
等了两秒,还是亮的。
“再写一组。”
吴国华在终端上敲了几行命令,换了另一组数据。
读卡机再次启动,第一个指示灯还是亮的。
连续重复了十几组,全部一致。
“存储板基本功能正常。”吴国华的声音里带着一丝自信。
“不急。”吕辰从抽屉里拿出另一张测试卡,“跑一个边界的。”
这张卡的测试程序不是读写正常地址,而是读写地址的边界值,全0地址、全1地址、地址线翻转的临界点。
这些地方最容易暴露出地址译码或数据总线的隐藏问题,正常能跑的不算数,边界能跑才算。
读卡机再次启动。
测试跑了不到半分钟。
第二个指示灯亮了。
车间里的空气又一次安静下来。
吴国华把逻辑分析仪接在存储板的地址线和数据线上,开始抓取数据。
屏幕上的数字飞速跳动。
他盯着看了几秒,然后用手指点住屏幕上两条几乎重合的波形。
“地址线A7和A8的输出波形不对。A8的翻转时刻比A7晚了大约10纳秒。导致在某一个瞬间,地址线组合错误,读到了错误的内存单元。”
宇文坤德从工具箱里拿出一把极细的镊子,在板卡背面测量了两根地址线的走线长度。
他的眼睛眯成一条缝,镊子尖在铜线上轻轻划过。
直起腰,比划了一下长度。
“A8比A7多绕了一段。长了大约15毫米。”
时序问题,硬件工程师的噩梦。
不是说功能错了,功能没错,是信号在路上跑的时间不一样,导致在某个纳秒级的窗口里,逻辑乱了。
那种问题最难复现,最难定位,最磨人。
吕辰在本子上重重地写了一行:
地址线长度不匹配,A8绕远,建议下一版做等长布线。
他画了三个三角形,最高的优先级。
他看着宇文坤德。
“飞线试试!”
宇文坤德从线圈上剪下一根极细的绝缘导线,比头发丝粗不了多少。
用镊子剥开两端的绝缘皮,露出铜芯。
在板卡背面找到了A8信号的起点和终点,不是正式焊盘,而是芯片插座引脚的根部。
他用镊子尖轻轻挑起那条走线的末端,把飞线的一端焊上去,然后沿着板卡边缘把线绕过去,绕开那些电容电阻,在终点处焊好。
动作很轻,呼吸很稳。
他焊完最后一处,用万用表测了测通断,“嘀”一声,通路。
然后把板卡重新插回机柜。
吴国华在看逻辑分析仪的屏幕。
A8的波形提前了大约7纳秒。
虽然没有完全对齐,但已经不在临界区了。
“试试。”
测试程序重新运行。
第二个指示灯没有再亮过。
10组。
20组。
50组。
全部通过。
吴国华吐了一口气:“算过了。”
吕辰看了看表。
从第一块电源板上电到现在,已经过去了五个小时。
外面天早就黑透了,车间里的工人们早已下班。
“还有最后一关。”
他从工具台上拿起热风枪,那把枪不大,出风口可以调温,最高能到150度。
吴国华的眉头皱了起来:“现在就烤?系统才跑通不到一个小时。”
“就是要现在就烤。”
吕辰把热风枪调到80度,对准存储板上的一颗芯片,那颗芯片旁边没有散热片,没有风扇,孤零零地暴露在空气里。
“刚跑通的时候是最脆弱的。热胀冷缩一下,什么毛病都出来了。”
他直接扣下了扳机。
热风枪的扇叶嗡嗡地转着,热风从出风口涌出,打在芯片的陶瓷封装上。
一股微弱的、热烘烘的气流在板卡表面散开。
吴国华盯着示波器和逻辑分析仪,眼睛一眨不眨。
宇文坤德看着万用表和机柜的指示灯,手里的电笔没有放下。
吕辰看着热风枪的温度表,手很稳。
3分钟……
5分钟……
第8分钟,示波器屏幕上的时钟波形开始出现不规则的抖动。
原本干净的方波,边缘开始毛糙,像被什么东西啃过。
毛刺的幅度从1.8伏慢慢往上爬,1.9、2.0、2.1……
到了2.3伏。
吴国华声音发紧:“时序在恶化,高温下芯片内部延迟变大,原来能收敛的时序现在收不住了。”
吕辰把风口移开一点,让热风打在那颗芯片旁边的空地上,继续观察。
宇文坤德把手按在机柜的外壳上,感受了一下温度。
铝型材的外壳已经有些烫手了。
他松开手,走到旁边的物料架上,取下一台小型轴流风扇。
从工具箱里找了两根扎带,三下五除二,风扇固定在机柜的侧板上,电源线插到I/O板的一个闲置插座上。
风扇转了起来,呼呼地吹着,把热风枪吹来的热气吹散了大半。
示波器屏幕上的波形慢慢稳定下来,毛刺幅度降回了1.9伏,时序勉强收住。
宇文坤德把手从机柜上移开:“风扇能顶住,但机柜里那么多抽屉,不可能每个抽屉都加风扇,散热设计要从根上改。”
吕辰关掉热风枪,热风枪的扇叶慢慢停下来。
他把本子翻到新的一页,从头开始写总结。笔尖在纸上沙沙地响:
火车头测试(电源+时钟+背板+I/O+存储)初步通过。
发现问题:
1.电源远端压降4%(建议加粗主干道/增加去耦电容)
2.时钟串扰毛刺最大1.9V(建议加大间距/加地线隔离)
3.I/O板芯片插座虚接(已修复,建议写入装配规范)
4.存储板地址线长度不匹配(飞线临时解决,下一版做等长布线)
5.高温下时序恶化(散热设计需重新评估)
五类问题,全部记录在案,待下一版设计修正。
他写完最后一个字,把本子递给吴国华。
“签字。”
吴国华接过本子,一页一页地看他记的那些内容。
每一条都有现象描述、根因分析、临时对策和后续建议。
字迹工整,条理清晰。
他从口袋里掏出钢笔,在本子上签了自己的名字。
宇文坤德接着签了。
吕辰把本子合上,他转过头,看着机柜。
绿色的指示灯还在亮着,系统还在跑。
那块被热风枪吹过的芯片,现在温度已经降下来了,波形稳得像什么都没发生过。
他用指关节轻轻敲了敲机柜的铝型材立柱,发出清脆的响声。
“行了。今天就到这儿。明天加运算板。后天加温度循环。”
宇文坤德开始拆风扇、拔板卡、关电源,每一块板卡都用防静电袋装好,封口,放回架子上。
吴国华收拾示波器和逻辑分析仪,把探头一根一根地绕好,放回工具箱。
他把示波器的电源线也拔了,绕着机器缠了两圈。
三个人在防静电车间的门口站了一会儿。
深秋的夜风吹过来,带着轧钢厂冷却塔的水汽和远处烟囱的煤烟味。
车间里的暖气到了门口就被冷风截住了,站在门口能感觉到一股凉意从脚底升起来。
吕辰把本子夹稳,转过头看着吴国华和宇文坤德。
“国华,宇文工。最近你们要多盯着。我家里,晓娥要生了。有时候可能顾不上。”
吴国华拍了拍吕辰的肩膀:“火车头能跑。后面就是修修补补的事。家里的事你放心。”
他顿了顿,又补了一句:“我已经和李娟说好了。等孩子生了,她和明婕去陪晓娥说话。你不用操心那边。”
宇文坤德从兜里掏出三根烟,一人发了一根。
“吕工,恭喜。板卡测试这一关有我守着。出不了问题。等你回来,开始集成冲刺。”
吕辰接过烟,从口袋里摸出打火机,“啪”地点着。
火光照亮了他半张脸,能看见眼角那几条这两年才长出来的细纹。
三团火星在夜色里明灭不定。
远处,轧钢厂高炉的火光把天边映成一片暗红。
那火光很安静,很沉稳,像某种古老的、永远不会熄灭的承诺。