时间很快就进入了1971年,春寒料峭。
线材车间的工业计算机已经稳定运行了两个多月,137条产线的推广工作在宇文坤德的统筹下有条不紊地推进。
吕辰完成了工业计算机集成的总结和交接工作,大会小会开了十几个,总算从工业计算机的集成工作中抽出身来,全身心投入到701工程实验专线的建设中。
实验专线的电缆已经敷设完成,计算机所到真空所的三公里线路上,两个中继器箱像两个沉默的哨兵,蹲在杨树林和水渠边上。
调制解调器的样机在通信科学实验室里跑了一轮又一轮,误码率从最初的10??降到了10??,带宽也从1200比特每秒提到了2400。
但赵长河教授不满足,点对点通信跑通了只是第一步。
701工程要连接20个节点,真正的心脏不是电缆,不是调制解调器,而是程控交换机。
“没有交换,就是20条独立的电话线,各说各的。”钱永昌教授在技术讨论会上敲着黑板,“有了交换,它们才能组成一张网。”
而程控交换机的核心,是一颗芯片。
吕辰接到这个任务的时候,正在办公室里整理《现场作战手册》的修订稿。
曾祺推门进来,手里拿着一个文件夹,表情有些微妙。
“程控交换机的芯片任务分下来了。”
吕辰接过文件夹,翻开。
第一页是任务清单,列出了程控交换机所需的全部芯片:时序控制、信号音发生、接口适配、用户线扫描、交换网络驱动……
一共七八种,每种一到两颗芯片。
这些芯片逻辑不算复杂,交给集成电路实验室的其他组,几个月就能拿出来。
但最后一页,单独列着一颗芯片,名字下面画了一道红线。
“通路控制芯片”。
任务描述只有一行字。
负责空分交换网络的核心控制逻辑,包括通路建立/释放、冲突仲裁、状态管理、信令接口、故障诊断。
吕辰盯着那行字看了好一会儿,抬起头。
“这颗芯片,相当于把整个交换系统的‘大脑’塞进一颗芯片里。”
曾祺点了点头:“这颗芯片的复杂度不小,已经快要达到了昆仑1机的主控核心。昆仑1的主控核心只管取指、译码、发射指令,逻辑是规整的、确定的。而这颗芯片要管的是并发的、实时的、不确定的事件,摘机、拨号、挂断,什么时候来、来几个,完全不可预测。”
他看了看吕辰:“钱兰、彪子、国化他们要去筹备、启动星河设计系统,这个核心只能你来做了。”
“宋颜教授怎么安排?”
“显示器芯片的第二版已经完成送流片,所以程控交换机的芯片设计交给了我们组,其他芯片我带着做,这颗芯片,由小张海带着第三小队六人跟着你做,小张海他们已经设计室等着了。”
吕辰把文件夹合上,站起来。
“曾师兄,劳烦你通知小张海他们,下午两点在小会议室开会,我先去钱教授那边对接。”
曾祺点点头,松了一口气,他是真的怕吕辰不接这个活。
下午两点,右翼楼四楼小会议室,小张海、郑强、刘伟、王军、李华、张明六人都到了。
白板上挂着一张巨大的系统架构图,从用户线到交换网络,从交换网络到中继线,每一个模块都用不同颜色的粉笔标注着。
图的最中心,是一个被红圈框起来的方块,里面写着“通路控制”。
吕辰站在白板前面,拿里拿着一沓稿纸,足有两指厚,上面密密麻麻画满了电路图和时序图。
“这是钱永昌教授他们根据纵横制交换机的经验,推导出来的通路控制逻辑。全部用分立元件搭过,能跑通。但要用一颗芯片实现,难度不是一个量级。”
他翻开稿纸的第一页,用手指点着上面的框图。
“交换矩阵控制逻辑,这是最核心的部分。64x64的空分交换网络,4096个交叉点开关。每个开关都是一个传输门。芯片要根据微程序的指令,在几十微秒内找到对应的行和列,生成选通信号,闭合开关。”
“通路状态表,硬件实现的‘路由表’。芯片内部要用触发器阵列维护每条输入线和输出线的状态,空闲、忙、故障。查表和更新必须在几个时钟周期内完成。”
他翻到第二页。
“仲裁器。多路呼叫同时抢同一个出口的时候,谁先接通?谁等待?谁被拒绝?要有优先级算法。不能太复杂,占芯片面积,也不能太简单,不公平。”
“信令接口逻辑。检测用户线的摘机、挂机、拨号脉冲。这些信号是模拟世界的,进了芯片要变成数字信号。时间窗口要卡得准,否则会误判。”
“微程序接口。芯片和系统控制总线之间的桥梁。接收命令、执行、返回状态。地址译码、命令寄存器、状态寄存器、数据缓冲,一套完整的‘控制-状态’寄存器组。”
他翻到第三页,手指点得重了一些。
“时序与控制单元。芯片内部的各种时钟和时序信号,全要从这里出。扫描用户线的周期、处理拨号脉冲的采样窗口、各模块之间的协调信号,一个都不能乱。”
“最后,故障检测与诊断逻辑。定期自检交换矩阵和通路状态表,发现异常置位故障标志,通过接口上报。不能因为一颗开关坏了,整个交换网络瘫痪。”
他把稿纸合上:“我估算了一下,这七个模块初步估计,需要9000多颗晶体管。”
会议室里安静了一瞬,昆仑1的KL-VU向量运算单元,两万多晶体管,那是整个昆仑工程最复杂的芯片,宋颜教授亲自带队,前后设计了将近一年。
九千多颗晶体管,虽然只有KL-VU的一半,但复杂度完全不同。
KL-VU的逻辑是规整的、重复的,一个加法器阵列,控制逻辑规规矩矩。
通路控制芯片的逻辑是高度耦合的、状态相关的、并发处理的。
“这不是芯片设计。”小张海低声说了一句,“这是把一个小型实时操作系统固化在硬件里。”
吕辰点点头:“小张海说得对,正因为复杂,所以才落到我们头上。”
他转向开始讲起设计关键。
“通路控制芯片的本质,就是一个硬件实现的实时操作系统。摘机、拨号、挂断,都是毫秒级事件。芯片必须在几十毫秒内完成查表、选路、闭合开关、回送拨号音。响应慢了,用户就能感觉到卡顿。”
他在白板上写了一个数字:50毫秒。
“这是从摘机到听到拨号音的上限。超过这个时间,用户会觉得这个电话是不是坏了。”
他在系统架构图旁边画了一个方框,标注了“通路控制芯片”,然后在方框周围画了七个箭头,指向交换矩阵、状态表、仲裁器、信令接口、微程序接口、时序单元、故障诊断。
“大家看,这七个模块,不是孤立工作的。”
他用粉笔在模块之间画了几条连线。
“信令接口检测到摘机,通知仲裁器。仲裁器查询通路状态表,找一条空闲的输出线。找到了,通知交换矩阵控制逻辑闭合开关。同时,通过微程序接口上报‘呼叫请求’,等待微程序做号码分析。”
“拨号的时候,信令接口接收脉冲,每收到一位号码,就暂存在数据缓冲里。收齐了,微程序通过接口读走,分析路由,然后下发‘建立通路’指令。芯片执行指令,再次查表、选路、闭合开关。”
“挂断了,信令接口检测到挂机,通知交换矩阵控制逻辑断开开关,更新通路状态表,通过接口上报‘释放完成’。”
他放下粉笔,拍了拍手上的灰。
“七个模块,要在一个时钟域里协同工作。时序不能乱,数据不能丢,冲突不能死锁。”
他转过身,看着台下:“这个任务,有些挑战,但还没突破咱们的能力。”
他顿了顿:“七个模块9000多颗晶体管,听起来很复杂。但和昆仑1的KL-VU那两万多晶体管比起来不算什么。宋教授他们画了KL-VU大半年,但那是从零开始,没有任何参考。钱教授已经用分立元件搭出了完整逻辑。我们要做的,不是发明,是集成。”
吕辰虽然说的轻松,把分立元件的电路图,翻译成晶体管级的版图。
这听起来像是“照抄”,但实际难度大得多。
分立元件的电路,用的是电阻、电容、二极管、三极管,几十个元器件搭一个触发器,几百个元器件搭一个计数器。
到了芯片上,一个触发器只要几个晶体管,一个计数器只要几十个晶体管。
翻译的过程,是重新设计的过程。
而且2微米工艺的版图设计规则,和分立元件完全不同。
线宽、间距、对准精度、寄生效应,每一个参数都要重新计算。
小张海叹了口气:“咱们六个人,能干得过来吗?这个活儿,比工业计算机的任何一颗芯片都难。”
“所以才要我们干。”吕辰的语气很平静,“容易的事,别人就干了。”
长条桌周围沉默了好一会儿。
既然免不了,大家也都打起精神,进入具体的工作之中。
郑强第一个开口:“吕师兄,多路呼叫同时到达的时候,仲裁器用什么优先级算法?”
吕辰拿起粉笔,在白板上写了几行字。
“固定优先级。输入线编号越小,优先级越高。最简单,占芯片面积最小。”
“但是,这样不公平。低优先级的线可能永远得不到服务。”
他在后面又加了一行:轮询。循环扫描,每条线机会均等。公平,但逻辑复杂一些。
“我的建议是,用固定优先级做第一版。先跑通,再看实际场景需不需要改。如果现场测试发现低优先级线路确实被‘饿死’了,第二版再改轮询。”
刘伟指着白板上的“通路状态表”模块,表情有些凝重。
“吕师兄,64x64交换网络,理论上需要管理4096个交叉点开关的状态。但实际用不了那么多,因为每条输入线同时只能接通一条输出线。真正需要记录的状态,是64条输入线和64条输出线的‘忙/闲’状态,一共128个比特。”
他在本子上算了算。
“128个触发器,加上比较器和更新逻辑,面积可控。”
“但是——”
他顿了顿,抬起头。
“如果我们想扩展,从64x64扩到128x128,甚至256x256呢?状态表的大小会指数级增长。”
吕辰看了他一眼。
“这个问题问得好。模块化、可级联。”
他在白板上画了一个方块,标注了“通路控制芯片”,然后在方块四周画了几组箭头。
“芯片内部,我们预留级联接口。多颗芯片可以协同工作,每颗管一部分交换网络。第一颗管0-63,第二颗管64-127,以此类推。呼叫请求落在哪颗芯片的管辖范围,就由哪颗芯片处理。跨芯片的通路,通过芯片间的握手信号建立。”
“这样,从小规模4x4到大规模256x256,不需要重新设计芯片,多放几颗并联就行。”
刘伟的眼睛亮了一下,在本子上飞快地记。
李华开口了:“吕师兄,2微米工艺,九千多颗晶体管,芯片面积大概多大?”
吕辰想了想,在纸上估算了一下。
“2微米工艺,一个晶体管加上连线,大概占几十到一百平方微米。九千颗,大概一平方毫米左右。加上布线和pad,估计两到三平方毫米。”
李华皱了皱眉:“面积不大,但是功耗呢?9000颗晶体管同时翻转,瞬态电流不小。电源网格设计不好,会有压降,导致逻辑出错。”
“而且,2微米工艺的金属线宽有限,大电流通过的时候,会有电迁移风险。时间长了,线会断。”
吕辰点了点头,在本子上记了下来。
“小华说得对。电源网格和电迁移,是这次设计的重点。每一版版图都要做电源完整性分析,电流密度超标的,加宽金属线或多打孔。”
张明举手:“师兄,可测性设计呢?9000颗晶体管,七个模块,要是流片回来发现有bug,怎么定位?”
吕辰看着他,等他说下去。
“我的建议是,在芯片内部嵌入一个‘诊断寄存器链’。把各个模块的关键节点,通路状态表、仲裁器的输出、交换矩阵控制逻辑的选通信号,全部引到这个链上。”
他描述道:“测试的时候,通过微程序接口向诊断寄存器链写一个‘快照’命令,芯片内部把当前所有关键节点的状态冻结,然后通过链逐位输出。这样,我们就可以知道故障时刻芯片内部到底发生了什么。”
吕辰点头:“这个方案好。诊断寄存器链,加到设计规范里。所有关键节点,全部引出。”
讨论持续了一整个下午。
第二天早上,大家又继续讨论。
白板上的图擦了写、写了擦,反反复复好几遍。
笔记本上记满了各种技术要点和待解决的问题。
到中午的时候,七个模块的接口定义基本确定了。
每个模块的输入输出信号、时序要求、与其他模块的交互方式,都有了明确的规范。
吕辰站起来,活动了一下僵硬的脖子。
“同志们,今天的讨论就到这里。明天开始,分模块做逻辑设计。”
他拿起粉笔,在白板上写了六个人的名字,每个名字后面标注了负责的模块。
“张明,交换矩阵控制逻辑和通路状态表。这是芯片的心脏,也是最复杂的两个模块。你一个人负责。”
张明点了点头。
“郑强,仲裁器和信令接口。仲裁器要好好设计,既要简单,又要公平。信令接口的采样窗口要算准,不能误判。”
郑强在本子上记了一笔。
“刘伟,微程序接口和时序控制单元。接口寄存器组的设计要规整,方便微程序那边调用。时序单元要保证全芯片时钟同步。”
刘伟点了点头。
“王军,故障检测与诊断逻辑,加上电源网格设计。诊断寄存器链的方案,你牵头细化。”
王军嗯了一声。
“小华,可测性设计和测试向量。芯片出来以后,怎么测、测什么、怎么定位故障,你全权负责。”
李华坐直了身子。
“小张海,你负责整体集成。七个模块设计完了,你要把它们拼到一起,做全芯片仿真。时序收敛、功能验证,你盯着。”
小张海深吸了一口气,然后用力点了点头。
吕辰最后写上自己的名字:“模块之间的接口争议,我来裁。解决不了的问题,我去协调。”
他看着这六个人:“同志们,通路控制芯片,是701工程的心脏。这颗芯片做不出来,程控交换机就是一堆废铁。程控交换机做不出来,20个节点的网络就建不起来。”
他顿了顿,目光从每一张脸上扫过。
“我们七个人,要把这颗心脏造出来。”
会议室里安静了一瞬。
然后,六个人几乎同时站了起来。
没有人说话,但每个人的腰板都挺得很直。