时间如流水,又是一年冬腊月。
寒风肆虐,横扫京城。
红星所右附楼的走廊里,暖气片嘶嘶地响着,对抗着从玻璃缝隙里渗进来的寒意。
吕辰紧了紧围脖,端着搪瓷缸子往第八组设计室走。
11月底,工业计算机的逻辑设计全面结束。
26颗芯片的功能规格书、逻辑图、真值表、状态转移图,堆起来有半人高。
现在已经进入电路设计阶段,用标准单元库里的元件,把逻辑图搭成真正的电路。
这是整个芯片设计流程里最枯燥、最磨人、也最考验功力的环节。
逻辑设计可以天马行空,画个方框标个“与门”就算完事。
但到了电路设计,每一个与门要用几个管子、管子尺寸多大、驱动能力够不够、延迟能不能收住、版图能不能画得出来,全都要落到实处。
推开设计区的大门,一股热气扑面而来。
几十张绘图桌排成几排,每张桌上都亮着带放大镜的台灯。
大瓦数灯泡把整个设计室照得通明,黑板上写着各颗芯片的进度表,红色、蓝色、黑色的标记密密麻麻。
人声嗡嗡的,有人在讨论,有人在争论,有人在翻手册,杂乱中有着秩序。
“吕师兄,这边!”大张海拿着一支红蓝铅笔,指节上沾着铅灰。
吕辰走过去,在他旁边坐下。
大张海面前摊着一张A0幅面的硫酸纸,上面画着数字量输入芯片的电路图。
图纸已经画了大半,左上角是输入保护电路,中间是光电隔离器,右边是滤波和整形电路,最
“卡在哪儿了?”
“输入滤波。规格书要求响应时间小于1毫秒,但现场信号可能有几十毫秒的抖动。不加滤波,误触发;加了滤波,响应时间超标。我用RC滤波算了一下,时间常数做到0.5毫秒,能滤掉大部分抖动,但最坏情况下响应时间会到1.2毫秒,超标。”
吕辰盯着图纸,想了一会儿,在空白处画了一个简图。
“别用RC,用计数器。信号进来之后,先经过整形,然后送进一个移位寄存器。连续采样N次,如果N次都是高电平,才判定为有效。N可以配置,4次、8次、16次,用户自己选。响应时间=N×采样周期。采样周期用芯片内部的时钟分频得到,比如分到10微秒一次,16次就是160微秒,远小于1毫秒。”
大张海眼睛一亮,铅笔在纸上飞快地画起来:“这个好!用标准单元库里的计数器加比较器就能搭,几十个门,面积不大。而且可配置,不同工况用不同滤波深度。”
他顿了顿,又皱起眉头:“但这样需要时钟。时钟从哪儿来?”
“从GY-CLK引一条过来,回头和第四小队商量。”
大张海点了点头,在图纸边角处写下一行字:“待确认,时钟信号从GY-CLK引入,分频比待定。”
吕辰站起来,继续往里走。
钱兰坐在陈晓身边,面前摊着三张图纸,分别是GY-MC-01、GY-MC-02、GY-MC-03,存储控制器的三颗芯片。
版图线条细如发丝,每一笔都稳得像机器画出来的。
陈晓指着图纸上一块区域,那里画着密密麻麻的触发器和门电路,线条密集得像一座微缩城市的交通图。
“地址译码器搭完了,64条地址线,片选信号产生延迟控制在10纳秒以内。数据缓冲队列那边有点麻烦,16级深度,读写指针需要同步,我们用了两组触发器和比较器,面积有点大。”
钱兰仔细看着图纸:“16级差不多够了,存储柜的访问冲突不会太频繁,队列深度太大反而浪费面积。先这样,流片回来测一下,不够再改。”
吕辰又往前走了一段,诸葛彪嘴里叼着一根烟,烟灰已经烧了老长一截,快掉到图纸上了。他手里拿着GY-PWM-01脉冲宽度调制输出的电路图,凑在电灯下仔细看着,这是用来控制电机和阀门的。
孙钢把烟灰缸端过来:“诸葛师兄,这个怎么样?”
诸葛彪把烟拿下来,弹了弹烟灰:“PWM输出不需要太多路,一颗芯片有4路够了吧?每路加大驱动,面积大点就大点。工业控制对PWM的精度要求不高,8位分辨率够了。你先把电路搭完,版图的时候再优化布局。”
吕辰在设计区里转了一圈,每一桌都停下来看几分钟。
周建国在画主控核心的指令译码器,用标准单元库里的译码器阵列,48条指令,每条指令对应一个8位操作码,译码逻辑用了将近500个门,布线密度高得吓人,但他把译码器拆成了两级,前级做粗分类,后级做细译码,每级的延迟都收住了。
小张海在画模拟量输入芯片的采样保持电路,这部分不能用标准单元库,要用分立元件搭。
他在图纸上画了运放、电容、模拟开关,旁边密密麻麻标着元件参数,电阻阻值、电容容值、运放型号,写得工工整整。
孙丽在画串行通信控制器的波特率发生器,用计数器和比较器搭了一个可编程分频器,分频比可以从1到,覆盖从300到的所有常用波特率。
吕辰回到自己的绘图桌前,坐下来,翻开GY-CU-01主控核心的顶层电路图。
这是26颗芯片里最复杂的一颗。
指令译码器、程序计数器、堆栈指针、ALU、寄存器堆、中断控制器、总线接口,七个模块,每个模块少则几十个门,多则几百个门,全部要用手工画出来。
他已经画了三天,完成了指令译码器和程序计数器,正在画ALU算术逻辑单元。
ALU要做加减法、与或非异或、移位、比较,一共十几条指令。
他选择了标准单元库里的全加器单元,8位全加器需要8个全加器级联,每级的进位传递延迟加起来,最坏情况下要将近100纳秒。
4兆赫的时钟周期是250纳秒,时序上没问题。
但问题出在移位器上。
吕辰设计的移位器是桶形的,8位数据可以左移或右移1到7位。如果用标准单元库里的多路选择器搭,需要8×8=64个8选1多路选择器,每个多路选择器由十几个门构成,64个就是将近800个门,面积太大。
他在草稿纸上画了好几种方案,都不满意。
“吕辰。”
曾祺不知道什么时候站到了他身后,手里端着一个搪瓷缸子,眼镜片上反射着台灯的光。
“曾师兄,你来得正好。”吕辰把草稿纸转过来给他看,“移位器,我卡住了。桶形移位器面积太大,用循环移位寄存器面积小但速度慢,每条移位指令要移位N次,N个时钟周期,实时性不够。”
曾祺放下搪瓷缸子,弯下腰看了一会儿,然后拿起铅笔在草稿纸上画了一个图。
“用交叉开关矩阵。”他的笔在纸上飞快地画着,“8位输入,8位输出,中间用传输门阵列。左移一位,就是把输入的第0位接到输出的第1位,第1位接到第2位,依此类推。左移两位,就是第0位接到第2位,第1位接到第3位。用传输门实现,几十个管子就够了,比桶形移位器小一个数量级。”
吕辰盯着那个图看了几秒,脑子里飞快地模拟着。
传输门是CMOS工艺里的基本元件,一个NMOS加一个PMOS并联,用互补的控制信号打开或关断。用传输门搭交叉开关矩阵,确实比用多路选择器小得多。而且传输门的延迟很小,几个纳秒就能完成信号传递,一个时钟周期内可以完成任意位数的移位。
“这个好。”吕辰拿起铅笔,在草稿纸上重新画起来,“8位输入,8位输出,左移右移分开控制。左移时,输入的第i位接到输出的第(i+shift)位;右移时,输入的第i位接到输出的第(i-shift)位。shift值由指令的操作数决定,用译码器产生控制信号。”
曾祺在旁边补充:“传输门的控制信号要小心,不要出现竞争。两个传输门同时导通会把两根信号线短接。用译码器保证任何时候只有一个传输门导通。”
两个人又讨论了半个多小时,把移位器的方案定了下来。
吕辰在图纸上画了一个大大的方框,里面写上“桶形移位器(传输门阵列)”,然后在旁边标注:“待细化,预计门数约150。”
画完这一笔,他靠在椅背上,长长地吐了一口气。
窗外,天已经黑透了。路灯的光从窗户照进来,在图纸上投下一片昏黄。
设计区里的人少了一些,有人去食堂吃饭了,有人趴在桌上睡着了。
吕辰站起来,活动了一下僵硬的脖子,走到黑板前,看了一眼进度表。
26颗芯片,逻辑设计全部完成。
电路设计,完成了大约60%。
最复杂的几颗,主控核心、向量运算单元、存储控制器,还在攻坚。
按照这个进度,春节前能完成全部电路设计,开年之后送版图。
他在主控核心那一行后面画了一个半勾,表示进度过半。
然后他走回桌前,坐下来,继续画ALU。
日子一天一天地过。
设计区里的台灯从早亮到晚,从晚亮到早。
图纸越堆越高,铅笔越磨越短,搪瓷缸子里的茶越泡越淡。
有人在讨论中吵了起来,吵完了又坐在一起改图纸。
有人在半夜里忽然想通了一个问题,兴奋得拍桌子,把旁边睡着的人吓一跳。
有人画着画着趴在桌上睡着了,醒来发现图纸上压着一个油条,不知道是谁放的。
吕辰每天早上七点到所里,晚上十一二点回家,中间除了吃饭上厕所,全泡在设计区里。
他画完了ALU,画完了寄存器堆,画完了中断控制器,画完了总线接口。
每一张图纸都要反复检查,每一根线都要确认没有画错。
有时候画到一半发现前面有个地方画错了,又翻回去改,改完了再继续往下画。
腊月20,他画完了主控核心的顶层电路图。
七张A0幅面的硫酸纸,拼在一起,从桌面一直铺到地上。
指令译码器、程序计数器、堆栈指针、ALU、寄存器堆、中断控制器、总线接口,七个模块,每一个模块的边界都用红笔标注,模块之间的连线用蓝笔,电源和地线用黑笔。
他蹲在地上,从头到尾看了一遍,又看了一遍,确认没有遗漏,才站起来,把图纸卷好,放进专用的图纸筒里。
腊月十九,第四小队率先完成了通信模块的3颗芯片。
腊月二十,第五小队完成了电源模块的3颗芯片。
腊月二十一,第二小队、第七小队完成了存储模块的7颗芯片。
腊月二十二,第三小队、第六小队写成了负责输入/输出模块的9颗芯片。
直到腊月二十五,第一小队才完成中央处理模块的4颗芯片。
腊月二十六,所有人开始交叉审核。
每一颗芯片的电路图,至少要经过两个不同小组的人审核。
审核人要在图纸上签字,发现问题要在边角处用红笔标注,设计者确认后再改。
审核的过程比设计还磨人。
每个人都要看别人的图纸,每一根线都要重新走一遍,每一个逻辑都要重新推一遍。