技术状态冻结会议后,总集成方案也随后敲定的。
方案定了调子:硬件分层上架,微程序逐级唤醒,操作系统最后就位。
不是一口气把所有板卡塞进机柜、一次性上电。
那是蛮干。
任何一个连线虚了、任何一颗芯片坏了、任何一条微程序写错了,整台机器都可能起不来。
出了问题,连从哪儿查都不知道。
所以方案定的是层级推进。
最小系统先跑起来,然后是功能子系统,最后才是全系统。
每个层级都有明确的硬件配置状态、对应的微程序集、验收标准。
一步一确认,确认一项,往前走一步。
1970年1月1日,凌晨五点,京城还在沉睡。
一辆跃进130卡车亮着昏黄的车灯,停在红星轧钢厂防静电车间门口。
跃进130的车厢上驮着一个墨绿色的铁皮货箱,那是雷应元带着毛建华、邹明等人赶制出来的板卡集运货箱,四四方方,棱角分明,侧面用白漆喷着几个字:“特种运输·昆仑专用”。
货箱的侧壁上有两个小观察窗,双层玻璃,里面挂着干湿球温度计。
透过玻璃,隐约能看见货箱里三层货架上整整齐齐码放着的抽屉。
银白色的钢制框架,前面板装着锁紧手柄和状态指示灯,每一个抽屉上都贴着标签。
电源、时钟、主控、运算、存储、I/o……
六个抽屉,今天要用的全部都在。
宇文坤德戴着白手套,一颗螺丝一颗螺丝地确认,一块板卡一块板卡地看,所有抽屉的锁紧机构都反复开合了三次,确认弹起有力、锁止可靠。
万人敌拿着万用表,把每个抽屉背面的金手指都测了一遍接触电阻,数据全部记录在案。
吴国华最后走了一遍自检程序,六块板卡全部通过,指示灯亮得整整齐齐。
吕辰站在货箱前面。
“封箱,出发。”
跃进130发动,缓缓驶出红星轧钢厂的大门。
后面跟着两辆嘎斯,全副武装的军人随队押车。
引擎声低沉地嗡鸣着,在空旷的街道上回荡。
吕辰和吴国华坐在一辆嘎斯上。
吕辰怀里抱着一个帆布包,包里装着今天的《最小系统上架清单》和几份已经签过字的技术确认书。
他盯着前方的路,路灯的光一盏一盏地从车顶上滑过去。
“几点了?”
“五点四十二,师傅,开慢点,不着急。”吴国华看了一眼手表。
“机房那边七点才开门,到了也得等着。”
开车的战士应了一声,把车速又降了一些。
车轮碾过结霜的路面,发出细碎的嘎吱声。
车队过西直门的时候,远处的天际线已经染上一线鱼肚白。
吕辰从帆布包里掏出一个保温杯,拧开盖子喝了一口,热茶烫得他嘶了一声。
把保温杯拧上盖子,裹紧了棉袄。
车队拐进中关村,计算机所的灰砖楼在晨雾里渐渐显现。
计算机所机房的门已经打开了,秦无功他穿着防静电工装,脚上套着鞋套,手里拎着水平仪,蹲在一号机柜前面做最后的检查。
35台机柜已经全部就位,但今天只用第一台,那台被特意漆成浅灰色、与其他机柜颜色稍有不同的“一号机柜”。
机柜的正面,16个抽屉插槽排列整齐,每个插槽两侧都有滚珠导轨,底部有锁紧机构的卡槽。
机柜后面的总线背板早已固定好,墨绿色的掐丝珐琅板在灯光下泛着内敛的光泽,金手指插槽一排排地张着嘴。
背板上的电源分配网络和数据总线已经过三轮测试,每一根线的通断、每一组信号的完整性,都有记录可查。
秦无功站起来,把水平仪收进工具包,在机柜正面贴了一张纸:“最小系统专用机柜·硬件状态确认”。
吕辰和吴国华、宇文坤德、万人敌走了进来。
“秦工,早。”
“各们早,机柜准备好了。”
秦无功走过来,把手里那份检查记录递给吕辰。
“导轨水平度、背板插槽接触电阻、接地电阻、供电母线电压,全部在规格内。”
吕辰接过记录,一项一项地看。
导轨水平度每米不超过0.05毫米,比指标还高了一倍。
背板插槽接触电阻最大8毫欧,指标是10毫欧。
接地电阻0.8欧姆。供电母线电压三相平衡,波动在±1%以内。
他合上记录,点了点头。
七点半,汪涵教授到了。
他今天换了一身干净的中山装,领口的扣子系得严严实实,带着一种大战将至时才有的沉着。
他身后跟着卫知南和钱兰。
卫知南抱着一台便携式编程机,那台机器比午马机小一号,银灰色的外壳,正面有一个键盘和一个七段数码管显示器。
钱兰手里拿着一个防静电盒,盒子里是三颗已经烧录好的只读存储芯片,bootloader、最小自检程序、基础Io驱动和看门狗喂狗程序,全部固化在里面,今天要插到主控板的芯片插座上。
吕辰看了一眼手表,站在一号机柜前面,转过身。
“开始吧。”
货箱卸车,抽屉上架。
卡车已经倒进了机房门口的卸货区。
货箱的四条折叠支腿放下来,稳稳地撑在地上。
宇文坤德拉开货箱的侧门,货箱里的温度和湿度保持得很好,底板上的防静电橡胶垫干干净净,三组货架上六个抽屉整整齐齐地排列着,每一个抽屉的锁紧机构都处于锁止状态,防止运输中滑出。
他跳上货箱,戴好防静电手套,从第一层货架上抽出第一个抽屉。
那块银白色的钢制抽屉,前面板上贴着“电源·pwR-01”的标签。
抽屉的分量不轻,里面已经集成好了电源板,整流桥、滤波电容、dc-dc变换器全部固定在板卡上,板卡又通过导轨固定在抽屉里。
他双手托住抽屉两侧,走下货箱,走进机房,来到一号机柜正面。
所有人都在看他。
他没有急着推。
先把抽屉底部的定位销对准机柜插槽两侧的导轨槽,然后用拇指按了一下抽屉前面板的释放钮,锁紧机构处于打开状态。
他稳住呼吸,双手均匀用力,将抽屉沿着导轨缓缓推进去。
导轨发出细微的滚珠滚动声,像某种精密的、温顺的呼吸。
推到一半的时候,他停了一下。
没有卡顿。
继续推。
抽屉后部的金手指无声地插入背板的插槽中,宇文坤德感觉到了一股轻微的阻力,那是金手指与插槽簧片接触的触感,均匀、稳定。
他继续推进,直到抽屉前端面板与机柜立柱平齐。
然后他用力一按。
“咔嗒。”
锁紧机构弹起,抽屉被牢牢锁死在机柜里。
宇文坤德退后一步,在手中的《硬件上架确认单》上打了一个勾。
第二个抽屉,时钟板,推进第二个插槽。“咔嗒。”
第三个,主控板,推进第三个插槽。“咔嗒。”
第四个,运算板,推进第四个插槽。“咔嗒。”
第五个,存储板,推进第五个插槽。“咔嗒。”
第六个,I/o板,推进第六个插槽。“咔嗒。”
六个抽屉,六个插槽,六声“咔嗒”,间隔均匀,像某种机械的、不容置疑的心跳。
宇文坤德退后,看着那一排抽屉的前面板。
六个锁紧手柄整齐地弹起,状态一致。
他从兜里掏出手帕擦了擦额头,然后把确认单递给吕辰。
吕辰接过单子,看了一眼,签了字。
“硬件上架完成。”他说。“上电前检查。”
这是最小系统的第一道测试关,但严格来说,还不是“系统”在跑,只是给机柜通电,确认供电和时钟基础正常。
吴国华蹲在机柜后面,手里拿着示波器的探头,夹在电源板的远端测试点上。
万人敌站在机柜侧面,万用表的表笔点在了时钟板的供电入口。
宇文坤德站在配电盒旁边,左手搭在空气开关上,右手拿着电笔,最后确认了一遍接地。
汪涵教授靠在工作台边,双手抱在胸前,眼睛盯着示波器的屏幕。
“接地正常。输入电压三相平衡。”宇文坤德报状态。
“上电。”吕辰说。
宇文坤德推上了空气开关。
电磁接触器“嘭”地一声吸合。
机柜前面板的几个指示灯依次亮了起来,绿色的电源正常灯亮得最快,几乎没有延迟;黄色的总线空闲灯闪了两下,也稳住了;红色的故障灯没有亮。
示波器屏幕上跳出一个方波。
吴国华盯着屏幕看了三秒。
“+5V正常。纹波22毫伏,在指标内。”他把探头移到另一个测试点。“+12V正常。纹波24毫伏。”
万人敌看着万用表的读数,念了出来:“时钟板供电5.01伏,纹波21毫伏。oK。”
汪涵教授从工作台上直起身,走到示波器前面,亲自看了看波形。
他看得很仔细,从时域看到频域,从上升沿看到下降沿,足足看了半分钟。
“时钟稳定。晶振起振正常,频率10兆赫,偏差±0.01%。”他直起腰,点了点头。
吕辰在本子上记了一组数据,然后抬起头。
“供电和时钟基础正常。下一步,插入主控抽屉,烧录引导程序。”
宇文坤德将主控抽屉从货箱里取出来,第三个抽屉,银白色框架,前面板上贴着“主控·cU-01”的标签。
他双手托住抽屉两侧,对准机柜的第三个插槽,推进去。
“咔嗒。”
锁紧机构弹起,KL-cU核心芯片正在等待它的灵魂。
卫知南从防静电盒里取出第一颗只读存储芯片,那颗银灰色封装的芯片上,已经烧录好了bootloader和最小自检程序。
他打开主控抽屉前面板的一个小盖板,露出里面的芯片插座,用镊子夹住芯片,对准插座,轻轻压下去。
又是“咔嗒”一声,微小而清脆。
汪涵教授亲自走到机柜前面,检查了芯片的安装方向。
“加载。”
卫知南在一台午马机终端上敲了几行命令。
屏幕上一行行绿色的字符跳出来:bootLoAdER LoAdING... LoAd pLEtE. chEcKSUm pASSEd.
“校验通过。”
“上电复位。”
宇文坤德按下了机柜前面板上的复位按钮。
主控抽屉前面板的指示灯闪了一下。
然后,机柜正面那个巴掌大的诊断面板亮了起来。
绿色的“电源正常”灯亮了。
黄色的“时钟正常”灯闪了两下,也亮了。
红色的“故障”灯没有亮。
七段数码管显示了一个数字:0。
汪涵教授盯着那个“0”看了两秒。
“poSt通过了。”
最小自检程序在主控核心上电后自动执行,检测了核心芯片的寄存器、缓存、总线接口。
如果检测到故障,数码管会显示故障代码,红色的故障灯会亮。
但它是0。
一切正常。
十点二十分,I/o抽屉就位,加载驱动,第一个指示灯亮起。
宇文坤德取出I/o抽屉,推进第六个插槽。
“咔嗒”一声,板卡到位。
I/o抽屉的前面板上有八个拨码开关和八个指示灯,整整齐齐地排成两行。
卫知南取出第二颗只读存储芯片。
这颗芯片上写好了基础I/o驱动的微程序,读拨码开关的状态,点亮对应的指示灯。
只有几十条微指令,但这是昆仑1机第一次“做”一件事。
他把芯片插到主控板的另一个插座上。
汪涵教授走到终端前,手指悬在回车键上方。
停了大约两秒,然后他按了下去。
屏幕上跳出一行行字符。
微程序被逐条加载到主控核心的微程序存储器里。
LoAd pLEtE. 47 mIcRoINStRUctIoNS LoAdEd.
汪涵教授直起腰,退后一步。
他看着吕辰。
吕辰站在机柜前面,右手食指悬在I/o抽屉前面板上的第一个拨码开关上方。
他转过头,看了看汪涵教授。
汪涵教授点了点头。
他看了看吴国华。
吴国华把示波器的探头夹在了I/o板的输出引脚上,屏幕上的波形稳定。
他点了点头。
他看了看宇文坤德。
宇文坤德站在配电盒旁边,手搭在空气开关上,随时准备断电。
他点了点头。
吕辰吸了一口气。
“点火。”他拨动了第一个开关。
机房里的空气仿佛凝固了一瞬。
然后,I/o抽屉前面板上的第一个指示灯,最左边的那一颗亮了。
绿色的光,在昏暗的机房里格外醒目。
它没有闪烁,没有迟疑,就那么稳稳地亮了,像一颗被点燃的星星。
汪涵教授站在机柜前面,盯着那颗指示灯,一动不动。
他的手垂在身侧,手指微微蜷着。
他没有说话,但他的嘴唇在微微发抖。
吴国华盯着示波器的屏幕。
波形没有异常,输出信号干净。
他没有说话,但他的手指在桌面上轻轻叩了两下。
宇文坤德站在配电盒旁边,手里攥着电笔,手背上青筋暴起。
吕辰看着那颗指示灯,过了几秒,他拨动了第二个开关。
第二个指示灯亮了。
第三个、第四个、第五个……
他一口气拨动了八个开关。
八个指示灯依次亮了起来,从左到右,像一排被点燃的引信。
他停下来,转过身,看着汪涵教授。
“汪教授,I/o驱动通了。”
汪涵教授站在机柜前面,过了好几秒,他的嘴角动了一下,声音沙哑。
“通了。”
吕辰翻开笔记本,在最下面写了一行字:1970年1月4日10时31分,昆仑1机最小系统I/o驱动加载成功,第一个指示灯点亮。
然后他把笔记本举起来,让在场的人都看见。
“各位,签个字。”
不知道谁带头鼓的掌。
掌声从机房的某个角落响起来,先是稀稀拉拉的,然后汇成一片,在空旷的机房里回荡。
没有欢呼,没有人说话,就是鼓掌。
下午,存储抽屉、运算抽屉依次就位。
存储抽屉推进第五个插槽,内存读写测试程序加载。
十组常规测试全部通过,边界条件测试,全0地址、全1地址、地址线翻转临界点,全部通过。
终端机上跳出一行绿色的字符:boUNdARY tESt pASSEd. ALL 48 cASES VERIFIEd.
汪涵教授点了点头。
运算抽屉推进第四个插槽。
这是今天最难的一道坎。
KL-VU向量运算单元,上万只晶体管,一次能处理一组向量数据。
今天只跑最简单的:1.0+2.0=3.0。
浮点加法微程序加载。
终端机上开始滚过一行行编译信息。
pILING... LINKING... LoAdING... LoAd pLEtE. 128 mIcRoINStRUctIoNS LoAdEd.
“加载完成。”卫知南确认。
钱兰敲了运行命令。
三秒后。
屏幕上跳出一行绿色的字符:RESULt: 3.000000 tESt pASSEd.
吕辰盯着那行字,把“3.000000”看了两遍。
“汪教授,1.0加2.0,等于3.0。”
汪涵教授走到终端机前面,亲自敲了重新运行的命令。
屏幕上再次显示3.000000。
他又敲了一遍。
还是3.000000。
他直起腰,退后一步。
“这个加法,我算了半辈子。今天我们终于把它算在了昆仑1上。”
下午四点,全最小系统稳定运行。
六块板卡,电源、时钟、主控、运算、存储、I/o,全部在线。
系统没有跑复杂的任务,只是循环跑着今天加载的所有微程序:读写存储器的边界测试、浮点加法、I/o驱动。
每隔一小时,宇文坤德测一组数据:电压、温度、时钟波形。
万人敌记录在笔记本上,一笔一划,工工整整。
下午六点,第一组稳定运行的数据出来了。
电压最低点4.82V(存储板远端),最高点5.03V(电源板近端),全部在4.75-5.25V的指标范围内。
时钟毛刺最大幅度1.6V,没有超过阈值。
机柜内部温度28度(环境温度22度),温升6度,在预期内。
所有节点,全部在规格内。
吕辰把这份数据从头到尾看了一遍,合上本子。
“先跑24小时。明天下午这个时间,如果一切正常,最小系统,就通了。”
第二天下午五点,吕辰从工业部专家党支部学习回来,第一时间来到昆仑1机房。
机柜上,绿色的电源灯亮着,黄色的总线灯稳着,红色的故障灯暗着,七段数码管显示着“0”。
没有任何异常。
宇文坤德靠在墙角,手里攥着一个搪瓷缸子,缸子里的茶已经凉了。
见吕辰进来,他站起来,从桌上拿起那个记录了24小时数据的笔记本,递过去。
“吕工,24小时,零故障。”
吕辰接过本子,一页一页地翻。
电压、温度、时钟波形、总线误码率、中断响应时间,每一项数据都在规格内,没有一条超标,没有一次异常。
他翻到最后一页,上面写着宇文坤德的签字和卫知南的签字。
“确认最小系统24小时稳定运行。”
吕辰把本子合上。
二十分钟后,硬件板卡集成小组、软件与微程序小组的人到齐了。
吕辰站在一号机柜前面,手里拿着那份记录了24小时数据的笔记本。
“最小系统第一阶段,通过了。”他翻开本子,一页一页地念那些数据。
不是念给谁听,是确认。
念完之后,他把本子放在桌上。
他拿起桌上第一沓文件,那是《最小系统硬件状态确认书》。
上面列出了最小系统的硬件配置,一台主控机柜、六个抽屉(电源、时钟、主控、运算、存储、I/o)、总线背板,以及每一项硬件参数的实测数据。
“最小系统硬件状态确认书。确认最小系统的机械安装、电气连接、电源、时钟、散热,全部在规格内。”
他把文件递给宇文坤德。
宇文坤德接过去,签了字。
汪教授拿起第二沓文件,那是《底层驱动微程序包V1.0》的技术文档。
里面记录了今天加载的所有微程序,bootloader、poSt、基础Io驱动、看门狗喂狗程序、内存读写测试程序、浮点加法微程序,每一条微程序的版本、功能描述、测试结果。
“底层驱动微程序包V1.0。确认微程序的版本、功能、测试结果,全部通过。”
汪涵教授在最后一页签了字。
吕辰拿起第三样东西,那本记录了24小时数据的笔记本。
“基线数据。最小系统下,所有关键节点的电压、温度、时钟波形。这是昆仑1机的第一份健康档案。以后每一次测试、每一次故障排查、每一次升级,都要对比这份基线。”
三样东西,全部交付。
昆仑1的最小系统,通了。