请关闭浏览器的阅读/畅读/小说模式并且关闭广告屏蔽过滤功能,避免出现内容无法显示或者段落错乱。
结果,老马第一个站起来,慢悠悠地说:“雷部长,我们白天上课,脑子都快烧糊了。晚上能不能让我们回去,多看两页书,多画两张图?我们这儿,不兴这个。早点把芯片搞出来,比什么都强。”
一句话,噎得雷天君半天没说出话来。龙芯来的几个年轻人,在过。雷天君的任务,变成了每天想办法去招待所的厨房,给这帮“技术大爷”们加餐。他发现,一盘红烧肉,比念一个小时社论,更能提升团队凝聚力。
一个月的培训期很快过去,项目正式进入了设计阶段。真正的矛盾,也随之爆发。
按照林秋的规划,团队分成了几个小组,分别负责指令解码、算术逻辑单元(ALU)、寄存器堆等不同模块。矛盾的焦点,就出现在ALU小组。
这个小组的组长,是龙芯的周毅和先锋的老马。
按照“Top-down”的流程,周毅很快用Verilog写出了ALU的行为级代码,并且用仿真验证了逻辑的正确性。下一步,就是用综合工具,把它变成门级网表。
老马却拿着周毅的代码,看了整整两天,然后把他叫到了一边。
“小周,你这个加法器的写法,有问题。”老马的语气很严肃。
“有什么问题?”周毅有点不服气,“我仿真都通过了,32位的加减法,逻辑运算,都对得上。”
“逻辑是对的,但性能肯定不行。”老马拿出一张纸,上面画满了密密麻麻的电路图,“你看,一个32位的加法器,如果按照你这种最简单的写法,综合出来的,很可能是一个‘行波进位加法器’(Ripple-Carry Adder)。每一位的计算,都要等前一位的进位信号。这就像传话游戏,从第0位传到第31位,得等多久?我们这个CPU,时钟频率还想不想要了?”
周毅愣住了。这个问题,他确实没想过。他写的,就是最直观的`c= a+ b;`。
“那……那应该怎么写?”
“应该用‘超前进位’(Lookahead Carry)的结构!”老马的眼睛里放着光,他在纸上飞快地画着逻辑门,“我们可以用专门的逻辑,提前把每一位的进位信号都算出来,而不是一级一级地等。你看,这样,这样……虽然电路复杂了很多,但速度,能快上好几倍!”
他画出的那套复杂的电路,在周毅眼里,简直如同天书。他第一次发现,一行简单的“+”号背后,竟然隐藏着如此深奥的学问。
“马师傅,您这个……能用代码写出来吗?”
“写不出来!”老马把笔一扔,“这么精巧的结构,是人脑智慧的结晶,是靠经验和灵感优化出来的!你让那个冷冰冰的软件自己去‘想’,它能想得出来吗?依我看,ALU这一块,就别用什么综合了。我们小组,手工画版图!我保证,画出来的,比你那软件生成的,面积小一半,速度快一倍!”
老马的提议,在先锋的工程师中,引起了一片共鸣。他们骨子里,就不信任所谓的“自动化工具”,他们只相信自己的手和大脑。
周毅把这个情况,汇报给了林秋。这成了一个摆在所有人面前的难题。
如果同意老马的方案,那就意味着,林秋所倡导的“Top-down”设计流程,在第一个关键模块上,就宣告失败了。这会对整个团队的方法论,产生动摇。
但如果不同意,又会严重打击老马这批核心骨干的积极性。而且,谁也无法否认,老马提出的“超前进位”方案,在性能上,确实远优于最简单的综合结果。
整个项目,似乎陷入了一个“方法论”和“老师傅经验”的死胡同。
林秋在和吴佳栋商量了一整晚后,做出了一个决定。
他在第二天的全体会议上宣布:“ALU模块,我们采用两种方案,并行推进。”
所有人都愣住了。
“第一组,由周毅带领,继续使用Verilog,按照‘Top-down’的流程走。但是,你们要研究,如何在代码层面,去‘引导’综合工具,生成我们想要的‘超前进位’结构。现代的硬件描述语言,有很多高级语法,可以描述更复杂的结构。这是对你们学习能力的考验。”
他又转向老马:“第二组,由马总工带领,按照你们最擅长的方式,进行手工的底层设计。你们的目标,就是做出一个性能最极致的ALU。这是对你们经验的致敬。”
“一个月后,”林秋的目光扫过所有人,“我们将把两个小组的设计成果,下载到FPGA开发板上,进行实地的性能测试。用数据说话。谁的方案,在时序、面积、功耗上综合表现最好,我们就用谁的方案。”
FPGA!这个词,对先锋厂的工程师来说,又是一个新鲜事物。那是龙芯团队从太阳公司的合作中,弄到的几块当时最先进的开发板,价格高得吓人。
这个决定,出乎所有人的意料。林秋没有偏袒任何一方,而是设置了一个公平的擂台。这既给了新技术一个证明自己的机会,也尊重了老师傅们的宝贵经验。
老马和周毅的眼神,在空中交汇了一下。没有了之前的对立,取而代之的,是一种昂扬的斗志。
一场关于设计方法论的“战争”,就此打响。
与此同时,远在首都的龙芯研发中心,周毅的“后方”团队,也接到了新的任务。他们收到了几百个,由上海的“龙芯一号”团队,在使用他们的EDA软件时,提交的bug报告和功能建议。
负责布线器开发的王浩,看着一条来自老马的建议,哭笑不得。
“林学长,你看这个!”王浩在电话里向林秋抱怨,“马总工提的这个需求,他要求我们的自动布线器,要有一个‘手动干预’模式。他想在自动布线之后,还能像PS一样,用鼠标拖动某几条关键的走线!这……这完全破坏了自动化的思想啊!”
电话那头,林秋却笑了。
“王浩,你觉得,他为什么会提这个需求?”
“因为……因为他不相信我们的算法,觉得有些关键信号,还是自己亲手布线才放心。”
“没错。”林秋的声音很沉静,“这个需求,听起来很‘反动’,但它背后,是用户对工具的不信任。我们的任务,不是去教育用户,而是去解决他的不信任。你能不能做到,让我们的布线器,在布线完成后,能生成一份详细的‘报告’,用数据和图表,清晰地告诉他,每一条关键路径的延时、串扰风险,并且向他‘证明’,我们自动生成的方案,已经是最优的?”
王浩愣住了。他之前想的是如何拒绝这个“无理”的需求,而林秋想的,却是如何通过更好的产品设计,从根本上打消用户的疑虑。
“我明白了,林学长。”王浩挂掉电话,立刻召集了他的小组,在白板上写下了新的标题——“布线质量分析与可视化报告”。
上海,先锋厂的临时办公室里,一个月的时间,在紧张的对决中,飞逝而过。
周毅的小组,几乎翻遍了所有能找到的Verilog语法手册和综合工具指南,尝试了各种不同的代码风格,去实现那个复杂的“超前进位”逻辑。他们的代码,从最初的几十行,膨胀到几百行,充满了各种普通人看不懂的“gee”和“assign”语句。
而老马的小组,则像是回到了他们年轻时的状态。几个人凑在一台286电脑前,用最原始的版图编辑软件,一个一个地,手工摆放着上万个晶体管。他们的办公室里,贴满了各种手绘的电路图和时序波形图。
终于,到了验收的那一天。
两组的设计数据,都被输入了EDA流程,最终生成了可以下载到FPGA的比特流文件。
测试的房间里,挤满了人。陈功、雷天君,以及两个小组的所有成员,都屏住了呼吸。
吴佳栋坐在逻辑分析仪前,亲自操作。
“先测试周毅小组的‘综合方案’。”