第569章 板卡仿真(2/2)
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条。
吕辰把打印出的报告从头到尾翻了一遍,每翻一页停一下,目光在那些数字上扫过:“万工、李工,这两块板子,今天改完。明天一早再跑一遍仿真。通过了,送加工;通不过,再改。其他的板子,一级和二级的问题,也一并改完。”
万人敌点点头:“行,我马上去通知所里改,明天之前改完。”
李工站起来,把钢笔插回兜里,笔记本夹在腋下。
“万工你在这边看着,我回去看着他们改。”
吕辰道:“李工不要急,所里先改着,咱们一鼓作气,把仿真走一遍,然后再回去盯着。”
接下来,大家又开始了其他板卡的仿真。
直到深夜,白天,又一个深夜。