“为了避开下面的时钟信号线,防止串扰。”赵新下意识地回答,这是电路设计的基本常识。
“想法是对的。”陆先进点了点头。
“但是,你拐了这个弯,这条线就比旁边那条线,长了三毫米。”
“三毫米……这有什么影响?”赵新不解。
“三毫米,在咱们以前搞的那些低频电路里,什么都不算。但在它这里。”
陆先进用手指敲了敲那块8086芯片。
“信号在导线里跑,也是要时间的。三毫米的长度差,就意味着信号到达的时间,差了零点零几个纳秒。”
“零点零几个纳秒?”刘涛也凑了过来,他觉得这简直是天方夜谭。
“这么点时间差,也能影响?”
“能。”陆先进的语气不容置疑。
“英特尔的手册上写着,数据锁存的建立时间,是二十纳秒。你们的时钟频率是五个兆赫,一个周期是两百纳秒。
平时,这点时间差不算什么。但如果是在一个周期的临界点上,地址信号比数据信号晚到了哪怕一个纳秒,CPU读到的,可能就是上一个周期残留的垃圾数据。
结果就是,程序跑飞,系统崩溃。”
一番话,说得赵新和刘涛哑口无言。
他们这才意识到,自己面对的,是一个对时间要求苛刻到变态的全新领域。
他们以前在学校里学的那些理论,在这里,被彻底颠覆了。
“那……那怎么办?”赵新彻底没了主意。
“这么多线,我怎么知道哪一根长了,哪一根短了?这根本没法算啊!”
“所以,不要用脑子去算。”
陆先进放下了电路板。
“把它接上,通电。”
他又指挥着几个技术员,把一台落满了灰尘的逻辑分析仪和几台示波器搬了过来,笨拙但准确地把密密麻麻的探针,一个一个地夹在CPU的引脚上。
“从今天起,忘了你们写的代码,也忘了你们画的图。”
陆先进指着示波器屏幕上那些开始跳动的信号波形。
“我们用最笨的办法。
把手册拿过来,翻到第一章,CPU启动序列。
上面说,通电之后,第一微秒,复位信号应该是高电平。我们就在示波器上看,它是不是高电平。
上面说,第二个微秒,CPU会去读内存的FFFF0H地址。
我们就在逻辑分析仪上看,地址总线上出现的是不是这个十六进制数。
我们就这么一步一步地往下走。从第一条指令开始看,看它走到哪一步,跟说明书写的不一样了。
问题,就出在那儿。”
笨办法。
这确实是天底下最笨的办法。
把成千上万条指令,一个时钟周期一个时钟周期地去用眼睛核对。
这工作量,比他们之前做的所有工作加起来,还要大上十倍。
但这一刻,赵新和刘涛,看着陆先进那张布满皱纹但无比平静的脸,心里那团乱麻,忽然就找到了线头。
他们之前,太相信自己的才华了。
他们总想用一个巧妙的算法,一个聪明的布线,去解决问题。
他们忘了,在绝对的物理规律面前,任何投机取巧,都毫无意义。
“我明白了,陆总。”
赵新拿起一个探针,眼神重新变得锐利起来。
“我负责硬件信号,保证每一个波形,都跟手册上画的一模一样。”
“我负责指令。”刘涛也拿起了那本厚厚的手册。
“我把启动的每一条汇编指令都翻译出来,告诉你每一个周期,数据总线上应该出现什么值。”
整个研发团队,重新被动员了起来。
没有了争吵,没有了抱怨。
所有人都围在了测试台前,各司其职。
有人负责操作示波器,有人负责记录数据,有人负责翻阅手册。
……
“复位信号正常!”
“第一个时钟周期,地址线A19到A16,全高电平,正确!”
“数据总线,出现操作码EA,JMP指令,正确!”
……
“不对!停!”刘涛突然喊道。
“第十五个周期,CPU应该执行下一条指令了,为什么总线上的数据没变?还是上一条的残留!”
所有人的动作都停了下来。
赵新立刻调整逻辑分析仪的设置,把时间轴放大,再放大。
在纳秒级别的尺度上,他们终于看到了那个纠缠他们许久的东西。
数据信号的波形,在时钟信号的下降沿之后,有一个极其微小的延迟。
就是这个比头发丝还细的延迟,导致CPU没能成功锁存新的数据。
“是内存!
我们用的这批内存芯片,响应速度太慢了!跟不上8086的节奏!”
问题,找到了!
在连续奋战了七天七夜之后,他们终于用这个最笨的办法,揪出了第一个,也是最致命的一个错误。
没有人欢呼。
赵新立刻带着人,冲向库房,在一堆从香江运回来的备用件里,翻找速度更快的内存。
刘涛则拿着纸笔,重新计算整个系统的时序,看能不能通过软件的方式,插入几个等待周期,来弥补硬件上的延迟。
这条路虽然笨,虽然慢,但有效。
漆黑的夜里,启航工业研发楼的灯光,依旧亮如白昼。
没有人闲聊。
只有探针划过电路板引脚时,那极其轻微的声音,和机器本身的嗡鸣。