请关闭浏览器的阅读/畅读/小说模式并且关闭广告屏蔽过滤功能,避免出现内容无法显示或者段落错乱。
猎猎秋风,吹着红星所院墙上的五星红旗。
1969年的国庆节,吕辰依然忙碌。
一大早,吕辰就到了办公室。
把残茶倒进纸垃圾桶,重新捏了一撮铁观音续上水,门就被推开了。
万人手里抱着一摞图纸,用麻绳捆着,码得整整齐齐,他抱得有些吃力,进门的时候侧着身子才挤过来。
李工跟在后面,手里同样抱着一摞图纸,二人把图纸放在吕辰办公桌上,摞起来足有半人高。
万人敌直起腰,长长地吐了一口气,从兜里掏出一块手帕擦了擦额头上的汗。
吕辰起身,给二人倒了一杯水。
万人敌接过喝了一口,从帆布包里拿出一个牛皮纸文件袋,鼓鼓囊囊的。
“吕工,板卡的设计图,全部完成了。”
他把文件袋往桌上一放,解开绑绳,从里面抽出一沓图纸,A0幅面的硫酸纸,折得四四方方,边角处用红蓝铅笔标注着修改痕迹。
“电源板、时钟板、总线背板、I/O板、存储板,五大类,23个型号,全部设计完毕。图纸、物料清单、装配图,一样不缺。”
他如释重负:“吕工,这活儿,总算交了。”
吕辰走到桌前,翻开最上面一张图纸。
那是一块电源板的设计图,A0幅面,硫酸纸,墨线描得工工整整。
整流桥、滤波电容、DC-DC变换器、过压保护电路、电流采样电路……
每一个元件都用标准符号画出,引脚标注清晰,走线流畅,密密麻麻的线条从图纸的左上角延伸到右下角,像一座微缩城市的交通图。
他看了一会儿,又翻开另一张,是一块运算板的设计图。
这块板子比电源板复杂得多,16个芯片插座整齐排列成四乘四的矩阵,每个插座周围密密麻麻地环绕着去耦电容、电阻排、测试点。
数据总线从插座边缘引出,汇聚成一组粗线,通往板卡边缘的金手指。
地址总线、控制总线各自分开,在板卡的不同层之间穿梭。
“李工,辛苦了。”吕辰把图纸放下,抬起头。
“应该的。”李工摆了摆手,从兜里掏出烟,给万人敌和吕辰各发了一根。
“现在图都画完了,这些板卡,我们都反复检查过,但自己画的图,自己看不出毛病,得找别人看,得用东西测。”
万人敌把烟点上,吸了一口,慢慢吐出来:“李工说得对。图纸画得再漂亮,不上机跑一遍,心里没底。手工画图,线宽够不够、间距够不够、有没有虚焊、有没有短路,全靠眼睛看。眼睛有时候会骗人。”
吕辰端着搪瓷缸子喝了一口水,他脑子里在转。
板卡设计图出来了,按流程,下一步应该是送红星轧钢厂的掐丝珐琅生产线加工。
不过,吕辰有些新的想法,在生产之前,能否上星河CAD跑一遍仿真验证。
板卡不是芯片,但比芯片更复杂。
芯片里是几百个门、几千个晶体管,逻辑相对规整。
板卡上是大电流的电源线、高速的数据总线、敏感的时钟信号、脆弱的复位线,还有那些离散的电阻电容、电感变压器,每一个元件都有自己的脾器。
手工画图,画得再仔细,也难免有疏漏。
电源线画细了,IRDrop超标,远端芯片电压不足;信号线间距画小了,串扰毛刺,数据传错;去耦电容放远了,高频噪声滤不掉,芯片工作不稳定。
这些问题,眼睛看不出来,万用表量不出来,只有上机跑仿真才能发现。
“李工、万工,图纸先放我这儿。”吕辰把搪瓷缸子放下,“板卡的事,不能急。我安排一下,上星河CAD跑一遍仿真。没问题了,再送加工。”
万人敌眼睛一亮:“吕工,星河CAD能排上号?”
吕辰点点头:“我跟宋教授协调过了,工业计算机已经送流片,其他任务往后推五天,从明天开始,专门跑板卡仿真。”
“能测?”
“能,我已经和汪教授沟通过,他派工程师过来帮助配置验证环境。”
李工脸上露出了一丝紧张:“四天,够吗?”
“够不够,跑了才知道。”吕辰合上笔记本,“下午,汪教授的工程师就到。李工,你把所有板卡的数字化设计文件整理好,按型号分类,统一命名。万工,你那边把《元器件库》和《测试向量库》的最新版调出来,一起拷到星河CAD上。”
“行,我们这就去!”
万人敌和李工也不多话,提着包就走。
下午两点,万人敌和李工一人拿着一个灰色的金属盒子,就来到红星所。
盒子比饭盒大一圈,表面是银灰色的,边缘有散热孔,能看见里面墨绿色的电路板。
“吕工,板卡的设计数据,全在这儿了。”
万人敌把金属盒子往桌上一放,发出沉闷的一声响。
他掀开盒盖,露出里面的电路板。
那是板卡设计系统的存储模块。
一块掐丝珐琅工艺的陶瓷板,比A4纸小一圈,上面整整齐齐地插着八颗存储芯片,银灰色的陶瓷封装,表面印着白色的丝印字。
芯片周围环绕着一圈去耦电容,密密麻麻,像列队的士兵。
李工把另一个盒子也放在桌上,掀开盖:“这是备份。两块板子,数据一模一样。一块跑仿真,一块留着,万一出了问题,还有个底。”
吕辰低下头,仔细看了看那块存储板。
走线在釉面下若隐若现,铜线泛着温润的金色光泽。
金手指边缘光亮,镀层均匀,每个焊点都饱满光滑。
他伸出手,轻轻摸了摸其中一颗芯片的封装表面。
光滑,平整,没有毛刺。
“数据都在里面?”
“都在。”万人敌从兜里掏出一张折了好几折的纸,展开,上面密密麻麻写着目录,“所有板卡型号的数字化设计文件,包括元件位置、网络连接、走线几何信息,全部存在这八颗芯片里。格式按照汪教授定的规范,直接能导入星河CAD。”
吕辰看了万人敌一眼:“万工,直接从板卡设计系统上抠存储板,这主意谁想的?”
万人敌把烟叼在嘴角:“录磁带太慢,存二维卡怕要存几百张,打纸带也能打一屋子,时间紧急,我直接把存储板抠过来,插到星河CAD的存储柜上,数据直接调,省时省力。”
李工在旁边补充了一句:“而且磁带容易失真,纸带容易出错。存储芯片不一样,数据写在里面,不会丢不会错。”
吕辰点了点头,合上盒盖,把两个金属盒子摞在一起,夹在腋下。
“走,去机房。”
三人出了办公室,下楼往星河CAD的机房走。
机房的门口,一个穿着白衬衫的年轻工程师已经等在那里了。
三十出头,瘦高个,戴一副黑框眼镜,手里夹着一个黑皮本子。
这是汪涵教授的学生,卫知南,程序设计院的骨干,星河CAD的核心开发者之一,负责存储接口模块的微程序编写。
虽然年轻,但已经是星河CAD系统最熟悉的人之一了。
“卫老师,等久了吧?”吕辰迎上去。
“刚到。”卫知南推了推眼镜,目光落在吕辰腋下的两个金属盒子上,“汪教授让我过来配合你们。这就是板卡设计系统的存储板?”
“对。”吕辰把盒子递给他,“数据全在里面,卫老师,能不能直接挂到存储柜上?”
卫知南接过盒子,打开看了一眼,又关上,点了点头。
“能,午马机的存储模块都是一样的,只需要插入中央存储柜的扩展槽就可以了。”
“行。那先去看看。”
推开机房的门,卫知南走到存储柜前面,蹲下来,打开一个副柜的门。
柜门内侧贴着一张电路图,是存储柜背板的走线图,密密麻麻,看了让人眼花。
他用手指在背板上点了几下:“这个存储柜有十六个插槽,现在只用了八个,还剩八个插槽空着。”
他把板卡设计系统的存储板从盒子里取出来,插到存储柜背板的一个空插槽上,拧紧螺丝。
“上电试试。”
卫知南走到管理员终端前,敲了一行命令。
DB>MOUNTDEVICESTE_SLOT_09
屏幕上一行字跳出来。
DEVICEMOUNTED.READINGDIRECTORY…
几秒后,目录显示出来了。
/SIMULATION/PCBA/POWER_V1
/SIMULATION/PCBA/CLOCK_V1
/SIMULATION/PCBA/BACKPLANE_V1
/SIMULATION/PCBA/IO_V1
/SIMULATION/PCBA/STE_V1
五大类,23个型号,527块板卡的目录,整整齐齐。
万人敌站起来,凑到屏幕前看了看,眼睛亮了。
“成了。”
李工在旁边搓了搓手,脸上露出如释重负的表情。
吕辰敲了一行命令,随便调出一块板卡的设计文件目录。
DB>LIST/SIMULATION/PCBA/POWER_V1/
屏幕上一行行文件名跳出来:
POWER_V1_LIST.DAT——112KB
POWER_V1_POS.DAT——86KB
POWER_V1_GEOMETRY.DAT——234KB
POWER_V1_LAYER1.DAT——178KB
POWER_V1_LAYER2.DAT——165KB
POWER_V1_TEST.SEQ——12KB
数据都在,文本格式,每一行都是一个元件、一条连线、一个坐标参数。
没有图形,只有数字和文字。
吕辰点了点头。
“卫老师,这两天先把环境搭好。后天一早开始跑仿真。我把清单列一下。”
他从兜里掏出笔记本,翻开,上面用钢笔工工整整写了几行字。
“第一,导入板卡设计文件和元件库。数据已经在存储柜里了,明天直接调。但元件库的关联要确认,每颗芯片、每个电阻电容的电气模型,要从《元器件库》里调出来,跟设计文件里的元件标号一一对应。”
卫知南记下:“元件库关联校验,明天跑仿真前先做一遍。”
“第二,配置仿真参数。”吕辰继续念,“温度设三档,常温25度,高温85度,低温零下40度。电源电压设标称值正负5%两档。信号翻转率设20%和100%两档。这些参数要写成配置文件,放在存储柜的根目录下,每个仿真任务调用同一份配置,保证条件一致。”
“第三,设置测试向量。万工,《测试向量库》带来了吗?”
万人敌从文件袋里抽出一本册子,递给卫知南。
卫知南接过册子翻了翻,每一条测试向量都有编号、功能描述、输入输出定义、预期结果,条目清晰,格式规范。
他翻到最后一页,是一张总表,列着所有测试用例的编号和对应的板卡型号。
他把册子放在桌上:“明天导入系统,自动跑就行。我写一个批处理微程序,按顺序加载测试向量,不用手动一条一条敲。”
“第四,”吕辰竖起第四根手指,“问题记录和结果输出。仿真过程中发现的问题,自动记录到日志文件,按严重程度分级。跑完之后,生成汇总报告,打印出来。每一条失败或警告,至少要输出:板卡型号、网络名或元件标号、实测值、阈值、偏差百分比。”
卫知南点了点头,又补了一句:“还得再加一个断点续跑。板卡仿真比芯片仿真复杂,一次跑完可能要几个小时。如果跑到一半出了问题,中断了,从头再跑浪费时间。我写一个微程序,每跑完一个测试项,自动保存现场状态。中断之后,从断点继续跑,不浪费已经跑完的时间。”
吕辰眼睛一亮:“这个好。卫老师,多久能写好?”
卫知南推了推眼镜:“这套微程序我之前在芯片仿真上写过,移植过来改几个参数就行。”
“那就谢谢卫老师了。”
吕辰他转过身,看着万人敌和李工。
“万工、李工,后天跑仿真的时候,你们俩在边上看着。系统输出的数据,你们要过一遍。有些问题,系统不一定能判断出来,但你们凭经验能看出来。”
万人敌把烟点上,吸了一口:“行,我后天一早过来,带着《元器件库》的参数表,一一核对。”
李工也跟着点了点头:“我把图纸带来,摊在旁边。系统报一个数据,我对一个图纸。哪里不对,当场圈出来。”
吕辰又转向卫知南。
“卫老师,跑仿真的时候,能不能把结果实时打印出来?不是等跑完了再看报告,是跑的过程中,每完成一个测试项,就把结果打出来。哪条线串扰超标、哪个节点电压跌落,一目了然。”
卫知南想了想,从键盘上抬起头。
“能。每完成一个测试项,自动生成一行输出,写到电传打字机上。”
“行。那就这样。卫老师,这两天辛苦一下,后天一早我们过来,开始跑。”
卫知南点了点头,又转回屏幕前,继续敲代码。
吕辰走到万人敌和李工旁边,发了一圈烟。
“万工、李工,后天是关键。500多块板卡,能一次跑通最好,跑不通也正常。咱们一块一块地过,不急。”
万人敌眯着眼睛:“电源板、时钟板、总线背板、I/O板、存储板,五块核心板卡。这五块跑通了,剩下的就是修修改改。这五块跑不通,后面的就不用跑了。”
吕辰点了点头:“那就先跑这五块。其他的,等这五块定版了再说。”
三人又聊了几句,万人敌和李工先走了。
吕辰站在白板前,把那五个型号又看了一遍。
然后他转过身,走到卫知南身后。
卫知南正在写配置文件。屏幕上一行行的参数:
TEMP=25,85,-40
VOLTAGE=NOM,NOM+5P-5PCT
TOGGLE_RATE=0.2,1.0
VECTOR_DIR=/SIMULATIOORS/
请关闭浏览器的阅读/畅读/小说模式并且关闭广告屏蔽过滤功能,避免出现内容无法显示或者段落错乱。
OUTPUT_DIR=/SIMULATION/OUTPUT/
CHECKPOINT_INTERVAL=600
吕辰看了一会儿:“卫老师,辛苦了。今晚早点回去休息,明天还要盯一天。”
卫知南摇了摇头:“不回去了,机房凑合一宿。断点续跑的那个微程序还没写完,写完再说。”
吕辰看了他一眼,从兜里掏出两包烟,放在桌上。
“烟放这儿了,你抽。”
卫知南笑了笑,把烟收进兜里,转回屏幕前,继续敲。
10月3日,早上七点,吕辰就到了机房。
卫知南正坐在管理员终端前面,面前摊着一本打开的黑皮本子,本子上密密麻麻写满了微程序指令。
搪瓷缸子里的茶冒着热气,茶叶梗浮在水面上,散发出一股茉莉花香。
他眼睛。
万人敌和李工一人手里拿着一个笔记本,腋下夹着那本厚厚的《测试向量库》,在靠墙的位置坐下,翻开本子,把钢笔帽拧开,搁在本子旁边。
“开始吧。”吕辰走到管理员终端前,卫知南站起来,把位置让给他。
吕辰坐下来,深吸一口气。
屏幕上的光标一闪一闪的,等着他敲命令。
他的手指搭在键盘上,停了一瞬。
527块板卡,几十万个焊点,几百万条连线。
手工画了几个月,现在要在计算机上跑一遍验证。
跑通了,送加工;跑不通,改,改完再跑,跑到通为止。
他敲下第一行命令。
DB>RUNSIMULATION/PCBA/POWER_V1/TEMP:25/VOLTAGE:NOM/VECTOR:POWER_SEQUENCE
屏幕上一行绿色的字符跳出来。
SIMULATIONSTARTED.16NODESALLOCATED.ETA:02:34:00
十六台午马机嗡嗡地响了起来,指示灯从绿色变成黄色,表示正在计算。
中央存储柜的指示灯也开始闪烁,读写的频率越来越快,像某种急促的心跳。
吕辰靠在椅背上,手指在桌面上轻轻叩着。
卫知南站在他身后,双手抱在胸前,眼睛盯着屏幕上的进度条。
万人敌端着搪瓷缸子,一口一口地喝着茶,目光在屏幕和笔记本之间来回移动。
机房里安静得能听见空调的嗡嗡声和磁带机偶尔转动的机械声。
进度条走了3%,停了。
屏幕上跳出一行警告:WARNING:NODE07TIMEOUT.CHEETWORKE.
吕辰眉头一皱。
卫知南已经走到第七台午马机前面,蹲下来,检查网线插头。
“松了。”他把插头拔下来,重新插紧,听到“咔嗒”一声,确认锁扣卡住了,才站起来。
“再试一次。”
吕辰敲了一行命令:
DB>RESUMESIMULATION
屏幕上,第七台午马机的状态从红色变成黄色,又从黄色变成绿色。
进度条继续往前走。
5%,10%,20%。
进度条走到32%,屏幕上跳出一行字符:INFO:IRDROPDETECTEDONPOWER_V1.NODE12VOLTAGE=4.72V(NOMINAL5.0V).THRESHOLD=4.75V.
万人敌手里的搪瓷缸子停了一下,慢慢放到桌上。
吕辰敲了一行命令,调出详细信息。
DB>DISPLAYIRDROPPOWER_V1NODE12
屏幕上一行行数据跳出来:
NODE:KL-PWR_04
X_COORD:2450
Y_COORD:1870
NOMINAL_VOLTAGE:5.00V
SIM_VOLTAGE:4.68V
DROP_PERT:6.4
STATUS:FAIL
万人敌站起来,凑到屏幕前,把那几行数据看了两遍。
他的嘴唇抿成一条线,眉头拧成一个疙瘩。
“4.68V,比标称值低了6.4%。规格书要求电压波动不超过正负5%。这颗芯片离电源入口最远,电源线画细了。”他的声音不大,但每个字都很清楚,“不解决,这块板子焊好了也不能用。远端芯片电压不足,会间歇性死机,而且极难复现。”
李工翻开笔记本:“得加宽电源主干道,远端增加去耦电容(100μF+0.1μF并联)。”
吕辰敲了一行命令,把这个问题记录到日志里。
DB>LOGISSUEPOWER_V1“IRDROPONKL-PWR_04,VOLTAGE4.68V”SEVERITY:3
然后他敲了TINUE,仿真继续。
进度条走到58%。
这一次跳出来的是一行警告。
ALERT:CROSSTALKONCLOCK_V1.SIGNALLINECLK_OUT_4COUPLING_CAP=0.38pF,XTALK_AMPLITUDE=2.30V(THRESHOLD2.00V)
卫知南“嘶”了一声,嘴里念叨着:“2.3V,超过阈值0.3V。这已经不是警告了,是警报。”
吕辰敲了一行命令,调出这条线的详细信息。
DB>DISPLAYCROSSTALKCLOCK_V1CLK_OUT_4
屏幕上一行行数据跳出来:
SIGNAL:CLK_OUT_4
TYPE:CLOCK
ADJAT_SIGNAL:DATA_BUS_7
TYPE:DATA
SPAG:0.28
REQUIRED_SPAG:0.50
COUPLING_CAPACE:0.38pF
XTALK_AMPLITUDE:2.30V
THRESHOLD:2.00V
STATUS:FAIL
万人敌凑过来看了一眼,摇了摇头。
“间距只有0.28毫米,要求是0.5毫米。两条线靠得太近,数据线翻转的时候,耦合电容在时钟线上感应出2.3V的毛刺。在TTL电平里,两伏就算高电平了。这个毛刺会被触发器误认为是有效时钟沿,导致系统不定时死机,而且极难复现。”
李工在笔记本上又写了一行:“得加大间距至0.50,中间插入地线隔离。”
吕辰把这个三级问题也记录到日志里。
进度条走到71%,屏幕上跳出一大片字符,一行一行往下滚。
WARNING:TIMINGVIOLATIONONSTE_V1.A12DELAY=23.4ns(REQUIRED20.0ns)
WARNING:TIMINGVIOLATIONONSTE_V1.D7SETUP=1.2ns(REQUIRED2.0ns)
WARNING:TIMINGVIOLATIONONSTE_V1.CSPROP_DELAY=18.7ns(REQUIRED15.0ns)
吕辰敲了一行命令,调出第一条时序违例的详细信息。
DB>DISPLAYTIMINGSTE_V1A12
屏幕上一行行数据跳出来:
:A12
FROM:MC_ADDR_DRIVER
TO:SRAM_08_ADDR_PIN
LENGTH:u
MIH:9800u
DELAY_CALC:23.4ns
DELAY_REQ:20.0ns
SLACK:-3.4ns
STATUS:FAIL
万人敌把搪瓷缸子往桌上一墩,茶水溅出来几滴。
“这条地址线从存储控制器到远端芯片,走了微米,最短路径只有9800微米,绕了将近一倍。为了绕开那些电容电阻,自动布线器把关键路径绕远了。延迟超标3.4纳秒,时序收不住。”
李工在笔记本上写:“这个要手动拉直,得重新布局周围元件。”
卫知南在旁边补了一句:“不只这一条。存储板有好几条地址线和数据线都有类似问题。布线算法的目标函数是‘总连线长度最短’,不是‘单条关键路径延迟最小’。为了省几毫米的普通线,把关键路径绕远了。算法层面的问题。”
吕辰把这些警告一条一条地记录到日志里。
进度条走到89%。
这一次跳出来的虽然不算警告,但也不是好消息。
INFO:REFLEONBACKPLANE_V1.TERM_MISMATCH.IMPEDANCE=135Ω(TARGET120Ω)
吕辰调出详细信息。
DB>DISPLAYREFLEBACKPLANE_V1
:BACKPLANE_BUS_03
TERM_RESISTOR:135Ω
TARGET_IMPEDANCE:120Ω
DEVIATION:12.5%
REFLE_COEFF:0.059
STATUS:PASS(MARGINAL)
万人敌看了一眼:“终端匹配电阻选大了。135欧姆,目标是120欧姆。反射系数0.059,不算大,但在高频信号里会有影响。100兆赫兹以上的信号,这种反射会累积,造成信号质量下降。”
李工在笔记本上写:“这个要更换电阻,控制在±5%以内。”
进度条走到95%,97%,97%,屏幕上的字符猛地一刷,整屏绿色。
SIMULATIOED.
TOTALTIME:02:58:21
PASS:342
FAIL:18
WARNING:27
万人敌盯着那行数字看了好几秒,紧紧皱着眉头。
18个FAIL。27个WARNING。
卫知南敲了一行命令,生成汇总报告。
DB>PRINTSIMULATIO
打印机在角落里咔嗒咔嗒地响了起来。
针头打在复写纸上,一行一行地输出。
纸带从打印机里慢慢吐出来,软塌塌地垂下来,拖在地上。
吕辰走过去,撕下第一页。
那是一张总表,密密麻麻列着所有失败和警告的测试项,按严重程度排序。
最上面是SEVERITY:3(致命)的,两条。
POWER_V1:IRDROPonKL-PWR_04,4.68V(THRESHOLD4.75V)
CLOCK_V1:CROSSTALKonCLK_OUT_4,2.30V(THRESHOLD2.00V)
万人敌把那页纸接过去看了两遍:“这两个三级,必须改。不改,板子焊好了也是废品。”
李工点了点头,在笔记本上把这两个问题圈了起来,旁边画了两个大大的感叹号。
卫知南继续翻报告。
SEVERITY:2(严重)的5条。SEVERITY:1(一般)的11条。
吕辰把打印出的报告从头到尾翻了一遍,每翻一页停一下,目光在那些数字上扫过:“万工、李工,这两块板子,今天改完。明天一早再跑一遍仿真。通过了,送加工;通不过,再改。其他的板子,一级和二级的问题,也一并改完。”
万人敌点点头:“行,我马上去通知所里改,明天之前改完。”
李工站起来,把钢笔插回兜里,笔记本夹在腋下。
“万工你在这边看着,我回去看着他们改。”
吕辰道:“李工不要急,所里先改着,咱们一鼓作气,把仿真走一遍,然后再回去盯着。”
接下来,大家又开始了其他板卡的仿真。
直到深夜,白天,又一个深夜。