这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 开发纪实(胡伟武):我们的龙芯1号(1)

共1条 1/1 1 跳转至

开发纪实(胡伟武):我们的龙芯1号(1)

菜鸟
2003-05-10 16:04:58     打赏
作者:胡伟武 2003-5-9 14:15:37 出处:博客中国(Blogchina.com) 原始出处: ac.cn 2002年8月10日清晨6点零8分,"login:"的字样如约而至地出现在用"龙芯-1"作CPU的计算机屏幕上。随着一阵欢呼从蚊子成群的中科院计算所北楼105房间传出,中国人结束了只能用洋人的CPU造计算机的历史。我抱着键盘,迫不及待地登录进去,用vi编辑龙芯-1产生的第一个文件,其中两段是这样写的。 The historical time of 6:08 on 2002.8.10 ends an era while begins a new one。The day in which we make computer with only foreign CPUs is gone with the wind of the morning of 2002.8.10。With tears and joys,we announce the successful running of LINUX (Kernel 2.4.17) with the Godson-1A CPU。 The great ecstasy at this moment makes all of our exhausting efforts of the past year be over paid。Though this is only a little step of a long march,it indicates the glorious future of our own CPU. 上述两段话,表达了我们对龙芯的良好祝愿和坚强信心。 如今,狗剩-1(还是这个名字叫起来比较顺口)已经连续稳定运行一个多月。在这一个多月中,运行了完整的LINUX操作系统(内核版本为2.4)、gcc和f77编译器、X-window、浏览器、Apache Web服务器、防火墙软件、网关系统、mpeg播放器、基于LINUX的文本编辑工具Abiword、调试工具、SPEC CPU2000基准测试程序、用作NC的虚拟终端、以及VxWorks嵌入式操作系统等等。 本来以为狗剩-1的成功运行会稍微减轻一点过去半年多来令人难以喘气的压力。没想到喜悦过后是更大的期盼和压力。然而,在我们已经开始狗剩-2的设计的时候,回顾过去半年多所做的事情,总结一下经验和教训,对以后的工作无疑是有好处的。 应该说,从去年三、四月份唐志敏和我开始组建CPU设计的队伍并全力投入CPU的设计,到今年八月第一个完全自己设计的通用CPU在200多MHz的主频下跑起来,这个速度还是不慢的。究其原因,除了全组弟兄玩命以外,正确的技术路线是成功的关键。用唐志敏的话说,就是"苦干加巧干"。 在我去年写的《我们的CPU》中,我曾经说过Godson设计的技术路线主要有三条。一是坚持高起点,从高性能通用处理器入手,走跨越式发展的技术路线。根据国外的成功经验,CPU的发展是"先高后低",即先发展计算机中使用的高性能通用CPU芯片,突破其中的关键技术,在此基础上再发展嵌入式的应用。因此,在处理器设计上应以高性能通用CPU发展为龙头,通过高端通用CPU的发展来带动整个CPU产业的发展。具体实施时,在目前达到与国外相同主频的的客观条件不具备的情况下,应走通过优化处理器结构提高性能的道路,强调处理器中各个层次的并行性(包括指令级并行性、数据级并行性、以及线程级并行性)的开发以及软硬件的协同来提高性能。二是坚持兼容性设计,把兼容当作通用处理器的生命。不管别人怎么说,我坚定地认为不兼容设计是导致我国目前处理器设计技术落后的重要原因之一。由于现代计算机中软件开发费用已经大大超过硬件开发费用,因此兼容性设计是Godson的重要目标。三是在实现上坚持稳扎稳打、步步为营。在处理器设计中,越上层的设计,调试越容易; 而越底层的设计,调试越困难。因此在Godson-1的逻辑设计阶段,我们坚持稳扎稳打,从系统结构设计,到C模拟器设计、Verilog设计、以及FPGA验证的每一步都经过反复的验证。 在上述技术路线指导下,我们在狗剩-1物理设计阶段的具体技术路线有两条,一是"以我为主"进行物理设计,二是坚持稳扎稳打。这是根据我们当时的处境提出的。 在去年10月我们基本完成狗剩-1的逻辑设计并在FPGA验证平台成功运行通用操作系统以后,有很多人关心我们如何进行狗剩-1的物理设计。不少人建议我们完成RTL设计后,在国内寻找兄弟单位完成后续设计。有人说完成FPGA验证只是完成了整个设计工作的10%,90%的工作还在后面,更有人说我们当时只是完成了国外学校中系统结构课程的一个大作业而已。但还是有人鼓励说完成FPGA验证已经很不容易,国外成功的设计也都是从FPGA验证开始的。在那一段时间里,在大多数朋友的鼓励和建议中,或多或少都流露出对我们完成物理设计的能力的担忧。因为计算所确实没有做过大规模的芯片的物理设计,尤其是在深亚微米的工艺条件下。 但我坚信现代EDA工具的发展趋势是不断地让做系统的人去完成物理设计,而不是让做微电子的人来完成结构设计。因此,向室里和所里提出了"以我为主"并联合有关单位进行物理设计的方针。李所长很快决定让我们自己做下去,并在我们完成FPGA验证之后的一段时间里,在宏观上提出一系列指导方针,包括他到国外考察了一圈后决定使用0.18的工艺进行流片(我原来倾向于用0.25的工艺,因为0.18的工艺信号完整性问题比较突出。现在看来,使用0.18的工艺无疑是一个英明的决定)。此外,他有针对性地请了一些精通物理设计的人与我们交流,使我们也受到不少启发,尤其是认识到芯片设计是赢者通吃(Winner Take Over)的买卖,而且大家最后比的就是最后百分之一。在今年初的全所大会上,李所长把龙芯-1的流片作为今年全所的最重要任务。他说,在五十年代计算所做出中国第一台计算机103机时,张劲夫给这台计算机起了个名字叫"有了",现在我们也要解决通用处理器"有了"的问题。 稳扎稳打的技术路线是和唐志敏商量后提出的。鉴于我们在物理设计上的空白,尤其是对深亚微米的物理设计没有经验,决定狗剩-1的流片分两步走。第一步先交网表,委托有经验的第三方物理设计公司进行物理设计,并把这个方案作为保证成功的保底方案。第二步,在与第三方交互的同时,组织自己的队伍进行物理设计。结果,我们自己做的物理设计仅比第三方晚一个月交付流片,并且委托第三方做物理设计的流片和自己做物理设计的流片都是一次成功。 稳扎稳打的技术路线第二个含义是,在狗剩-1的流片中,采用标准单元进行物理设计。在以后的物理设计中,再自己定制一些宏单元,最后等条件具备再进行全定制设计。做通用处理器,迟早要自己进行全定制设计的。 狗剩-1的物理设计主要包括三个阶段,2001年11月到2002年1月为启动阶段,主要完成环境的建立和工具的初步学习;2002年1月至4月为第二阶段,在这个阶段,RTL基本确定,对整个设计的流程有了初步了解;2002年4月至7月为第三阶段,这是实质性设计阶段。 我们是2001年11月8日开始学习狗剩-1的物理设计的,那天我们买的第一批EDA工具正式安装到了我们的机器上。但那时候我们还没有库,EDA工具厂商在刚开始的时候给我们一个0.25的综合库以及10个临时的license让我们用于学习。在刚开始的一、两个月,物理设计对我们来说确实是一个全新的领域。当一群熟悉指令流水线、多发射、乱序执行、动态调度、寄存器重命名、转移猜测、CACHE、精确例外等等的人面对诸如Wireload model、综合库、物理库、设计规则、扫描链、Steiner树、顶层约束、时钟树、P diff、N diff、多晶、闸流效应、防静电、串扰、电流密度、压降等等物理设计的概念时,就象熟悉种地的刘姥姥刚进大观园,觉得新鲜而不知所措。不过我们都很努力,大家抓紧时间看文档,并找教科书补充微电子方面的基础知识。在整个狗剩-1的物理设计过程中,我看过的文档至少有上万页,有些看得很认真,反复地读,有些翻过去就算了。我们组的弟兄们看的比我多。 在开始的学习过程中,我们开始对狗剩-1的RTL的部分模块进行初步的综合以及布局布线并根据综合及布局布线结果对RTL进行优化。每次修改都是先修改C模拟器再修改RTL并用FPGA验证环境进行验证。这时候显示出我们前一阶段建立起来的仿真验证环境是多么有用。2001年12月26日,收到来自厂家的正式的0.18综合库。虽然还缺一些特殊单元如锁相环以及一些特殊的IO单元等,但可以比较正式地开始做设计了。用了0.18的库以后,比起我们原来用的0.25的库,关键路径上的延迟一下子降低了很多。 在拿到正式的单元库后的3个月内(2002年1月到3月),是我最着急的三个月,因为在这三个月内我们一直不能开始正式设计。RTL设计总是改了又改,联系第三方物理设计公司也没有确定,可测性设计方案一直在调整,信号完整性问题也没有经验。每次解决一个问题,另一个问题就接踵而至。这些都是初学者难以逾越的过程,如果曾经做过,这三个月的工作(包括前面两个月的学习)完全是可以避免的。但这三个月也是我们从不会做物理设计到会做物理设计的3个月,三个月后,我们不知不觉对物理设计有了初步的了解。到四月初的时候,我已经心里比较塌实了。也就在这段时间里,中科院微电子中心的黄令仪老师带着几个学生加盟到我们的物理设计中来。 黄老师是个干实事的人,六十多岁了,干活比我还猛。每天早上7点多就来,晚上十点多我走的时候她还拖着鼠标坐在计算机前。黄老师是老计算所了,用她自己的话说,她在计算所的时间比在微电子中心的时间还长(她在计算所工作了二十多年,后来微电子中心成立时去的微电子中心)。从黄老师身上,我看到我们的前辈们献身科研的优秀品质,这种品质是目前整个科研界急需的。黄老师说,她是听说我们在做CPU主动找上门的,那时他们刚好完成一个物理设计的项目,下一个项目还没有开始。我见过不少跨单位的合作项目,大都是把经费一分,各干各的,最后攒不到一起。但我们与微电子中心的合作是实质性的,因为合作单位的所有人员天天在一起干同一件活,统一指挥和调度。现在回想起来,如果没有黄老师他们的参与,我们可能只完成委托给第三方物理设计公司的物理设计,不会自己做物理设计,即使做了,也没这么快。 在芯片设计中,RTL freeze是一个重要阶段,即确定RTL级的设计,因为RTL一修改,后面的都得重做。而我们由于在前面设计RTL时没有物理设计的经验,在几个月的时间内,一直对RTL进行调整。这种调整主要包括三个方面,一是性能的优化,包括平衡各级流水线的延迟等;二是功能的增加;三是可测性设计。在从1月初到4月初的三个多月内,我们一共对RTL做了一百多次修改,其中较大的修改有30多次。通过这些修改,我们积累了RTL设计的感性认识,为以后处理器的RTL设计提供了宝贵的经验。 在RTL的修改过程中,最麻烦的是可测性设计。狗剩-1的可测性设计包括RAM的自测试设计、寄存器的全扫描设计、以及JTAG设计。好在计算所在这方面有很深的基础,狗剩-1的可测性设计工作主要是网络室的测试组完成的。我最得意的RTL修改是浮点除法的实现。在狗剩-1的FPGA设计阶段,没有实现浮点除法,处理器执行浮点除法指令时发出保留指令例外,由操作系统调用IEEE浮点模拟程序进行模拟。但我们在FPGA中运行SPEC CPU2000标准测试程序时发现,浮点除法指令虽然出现不多,但对性能影响很大。进一步的分析发现,操作系统模拟一条浮点指令平均需要3000多拍。那时候已经是三月份,而浮点除法部件的设计还是比较复杂的,重新设计浮点除法可能会延误设计时间。但我还是下决心实现浮点除法,因为我刚好在前一阶段参与定点除法和浮点乘法模块的优化,对这两个模块都有一定了解,而浮点除法的尾数相除与定点除法类似,阶码处理以及例外处理与浮点乘法类似。我与张志敏老师打赌,三天之内搞不定浮点除法就绕整个北楼喊一圈"张志敏真厉害"。结果我组织定点除法和浮点乘法的设计人员两天就把浮点除法设计完并在FPGA中跑起来。当然,这也取决于我们建立了完整的验证环境和工具。 在这个阶段,我们也把物理设计流程基本走了一遍,解决了其中一些关键技术问题,如信号完整性问题。 2002年春节我们好多人留下来加班。初四的时候李所长和邓书记来看望我们,给我们带来很多好吃的东西,使我们这班远离家乡的游子觉得很温暖。就在那天,所长明确提出我们必须在9月底之前完成流片的要求。这比起我们自己在年底完成流片的计划提前了几个月。从此之后,我们一直按照"后墙不倒"的要求进行进度安排,9月份就是我们的后墙。 到四月初时,我们基本确定了为我们做物理设计的第三方物理设计服务公司。并在四月底把网表交给物理设计公司。在四、五月份,我们工作的重点是对第三方做的设计进行参数提取和验证。同时积极为自己做物理设计做准备。 在任何一个阶段,仿真和验证工作都是很重要的,我们一直在这方面投入比设计更多的力量。在4月份, 我做出了一个我自己认为在整个物理设计阶段最满意的三个决定之一,即组织专门的队伍进行仿真验证工作并由年轻员工许彤负责该组的工作。许彤责任心很强,而且非常细心,组织能力也强。他很快就在我们已有的环境基础上建立起完整的验证方法,并把仿真验证和形式验证结合起来。比起我自己来抓要高效得多。他和李祖松、李文在我们交给第三方的网表sign off之前发现了一个与跨时钟域信号传送有关的一个危险错误,并在我们自己做物理设计GDSII版图交出之前又发现一个与扫描链有关的危险错误,避免了重大损失。 我们真正拿到物理库和设计规则是在6月份。当我们明确地知道具备自己完成物理设计的客观条件时,组里的空气顿时紧张起来。由于委托第三方做物理设计的流片(我们称为A方案)已经在6月份交出去,我们决定我们自己做物理设计的方案在7月份交出去流片,否则等到第三方做物理设计的流片回来我们自己的再交出去就没什么意义了。根据前一阶段对信号完整性问题的摸索,我们决定我们自己同时做两个物理设计(分别为B和C方案),它们面积不同,信号完整性的修复方法也不同。B方案是一个实验性的流片,主要是为了取得参数和经验,不是一个准备量产的方案,于7月份流片的截止日期前几天就完成了。C方案是一个准备量产的正式方案,因此面积很小,比A方案小不少,布线时很难布通,花了一个多礼拜。这样,详细布线完成后还有不到一个礼拜就到截止日期了。马上开始寄生参数提取、延迟分析、信号完整性分析。分析完后进行调整,包括手工调整。经过连续三天三夜的加班后,在7月3日终于完成了GDSII版图并修复完天线和其他不符合物理设计规则的地方,通过了LVS检查。这时候离截止日期还有两天时间。正在这时,许彤报告说他们分析的最大延迟和我们做布线后分析出来的延迟不一样,经检查是由于两边的约束不一样,我们对跨时钟域的约束与实际情况不符,导致有几个门的延迟太大。这时候,重做布线已经来不及了,于是决定手工改版图,24小时后修改完毕,降低延迟0.6ns。这时候大家几天没有睡觉都很累了,离截止日期还有一天。 正当我准备把最后结果让大家签字时,一个巨大的挑战突然出现。在下午5点时测试组发现整个处理器的一万多个触发器的扫描链由于扫描链重连时的一个失误没有根据要求连出来。我脑袋嗡的一下,一句话也没说,就去了食堂吃饭,吃饭时想着在剩下的一天多时间内有没有修复的可能以及放弃流片的后果。我实在不甘心放弃C方案的流片,虽然前面已经有A方案和B方案保底,但C方案是最完美的方案,面积最小因此成本最低、压降和电流密度最小、抗静电性能最好、防latch-up效应也做得最好,因此最有希望量产。延期一月流片也不行,李所长在春节来看我们时已经明确要求在9月份必须成功(意味着7月份必须交出去)。但目前已经没有时间返工了,唯一的办法是手工改版图,而且时间不一定够。在吃完饭回来的路上我很灰心,没想到全组几十个人几个月的努力,花了上千万纳税人的血汗钱竟然是这样一个结果。我回到机房时全组都已经知道这件事,我看着他们经过连续熬夜的脸上除了眼睛外连嘴唇都没有一丝血色,几乎决定放弃,这样大家今天晚上就可以回去休息了。我去跟唐志敏商量,他让我自己定。我把负责物理设计的几个人召集起来说了情况,没想到负责后端版图编辑的杨旭他们马上就说我们可以手工再改版图。我眼睛一热,说晚上8点全组开会就回到自己的办公室。半个小时后,我在机房进行了动员,我说的第一句话就是:"我们肩负的是历史使命,因为我们要做出中国第一台不依赖于洋人CPU的计算机"。然后进行了工作部署,工作量确实很大,要手工修改网表用于对GDSII进行LVS检查,要手工修改DEF用于参数提取和分析,当然还要手工修改GDSII。由于大家都十分疲惫,我要求任何一个修改都是一人操作,另外两人在边上看着。在接下来的两天两夜,我们终于把一万多个触发器分成十几条扫描链连了出来,并且由于手工修改引起的一个单元延迟增加又手工优化了延迟。同时,我们跟流片厂联系要求宽限一天,因为是周末,我们得到了多一天的期限。到7日凌晨3点多,完成最后交付流片的所有文件,大家签字后陆续回去休息,我和黄老师坐在我的办公室说,就这样了,没什么可后悔了。这已经是我们连续加班的第7天凌晨。 在自己做了一遍物理设计候,回顾整个过程,觉得很象小学时候学的一篇《小马过河》的文章。其中说小马第一次过河但不知河水深浅,问水牛,水牛说水很浅刚到膝盖,问松鼠,松鼠说水很深会淹死的。结果自己过的时候发现既没有水牛说的那么浅,也没有松鼠说的那么深。在整个设计过程中,我最满意的决定有三个,一是在设计的后期果断地把浮点除法加进去;二是把仿真验证的队伍从设计队伍中独立出来并让许彤负责;三是在交出GDSII前发现扫描链问题时下决心手工进行修复并且很成功。好多人问我其中最困难的是什么,技术上的困难很多,结构设计、可测性设计、信号完整性设计、布局布线、降低延迟等等都有很多困难。但最大的困难在于压力太大。做处理器设计投入很多、周期很长,而且是一锤子买卖,不是100分就是0分。在这样的压力下,经常半夜三、四点钟醒来就再也睡不着。 在接下来的一个多月中我们一直在忐忑不安中度过。在三个物理设计都交出去流片的时候,我曾经对组里的同学说,我觉得三个都能成,如果两个成功也可以接受,如果只有一个成功我会觉得比较失败,如果全部不成功那就没有天理了。但毕竟我们是第一次流片,而对于通用处理器这样的复杂系统,多次流片才能成功是很正常的,一次就成功的反而比较稀罕。长时间的等待使我变得有疑神疑鬼,经常自己吓唬自己。有很多次,半夜被各种各样的噩梦吓醒,都是突然想起一个在设计上可能的疏忽,总也想不明白,一直想到天亮。到单位赶快从机器中翻出有关部分看看,才发现是虚惊一场。这样的经历至少有10次以上。有时候碰到黄老师,她的感觉居然和我一样。在交出去流片后,我们对跨时钟域的信号传递、信号完整性等一些最可能出错的地方进行了反复模拟,都没有发现任何问题。 在我提心掉胆地等待的过程中,唐志敏倒是显得十分胸有成竹,一点都不紧张,还老安慰我。 在我们做物理设计的同时,由张志敏老师负责的主板设计以及由王剑和张福新负责的系统软件设计也基本调试完毕。由于我们芯片的兼容性,这些工作完全可以在现有的处理器上完成。在狗剩1号调通后的软件开发过程中,我获得了一个深刻的体会,就是系统开发比CPU设计工作量要大得多。 好不容易等到8月份,负责与厂家联系的陈岚说,我们的芯片快回来了。8月初,我就成立了联调,由主板设计、软件设计、结构设计、以及物理设计的人员组成。9日中午,我吃完中午饭看到传达室通知栏上有陈岚的名字,回来就叫陈岚去取。取回来果真是我要的东西。我挑了其中的三个芯片和张志敏老师一起用万用表对芯片进行了静态测试,主要是看看电源地有没有短路,引脚的阻抗特征是否正常。在9日下午三点多钟时把这三个芯片交给许彤、范宝峡、和郑为民他们拿到焊芯片的厂家把芯片焊接到子卡上。由于没有把握,这些事情除了联调组成员以及唐志敏外,对其他人都暂时保密。



关键词: 开发     纪实     胡伟武     我们     龙芯     狗剩     已经     一个         

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]