EN

关于龙芯

ABOUT LOONGSON

栏目导航

我们的龙芯1号

注:本文写于2002年10月,“龙芯1号”问世不久。“龙芯1号”的诞生,宣布了中国人结束了只能用洋人的CPU造计算机的历史,被业内人士誉为民族科技产业化道路上的一个里程碑。在研制这款芯片中,倾注了科学家们为了民族和国家奋不顾身的拼命精神,这种精神是中华民族在新时代的精神丰碑和道德制高点。这种精神,承接了民族的历史和革命的精神,也为当代人和后代人树立了新的时代榜样。
 
        2002年8月10日清晨6点08分,“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 Godson1A 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在200MHz多的主频下跑起来,这个速度还是不慢的。究其原因,除了全组弟兄玩命以外,正确的技术路线是成功的关键。用唐志敏的话说,就是“苦干加巧干”。
        在我去年写的《我们的CPU》中,我曾经说过Godson设计的技术路线主要有三条。一是坚持高起点,从高性能通用处理器入手,走跨越式发展的技术路线。根据国外的成功经验,CPU的发展是“先高后低”,即先发展计算机中使用的高性能通用CPU芯片,突破其中的关键技术,在此基础上再发展嵌入式的应用。因此,在处理器设计上应以高性能通用CPU发展为龙头,通过高端通用CPU的发展来带动整个CPU产业的发展。具体实施时,在目前达到与国外相同主频的客观条件不具备的情况下,应走通过优化处理器结构提高性能的道路,强调处理器中各个层次的并行性(包括指令级并行性、数据级并行性、以及线程级并行性)的开发以及软硬件的协同来提高性能。二是坚持兼容性设计,把兼容当作通用处理器的生命。不管别人怎么说,我坚定地认为不兼容设计是导致我国目前处理器设计技术落后的重要原因之一。由于现代计算机中软件开发费用已经大大超过硬件开发费用,因此兼容性设计是Godson的重要目标。三是在实现上坚持稳扎稳打、步步为营。在处理器设计中,越上层的设计,调试越容易;而越底层的设计,调试越困难。因此在Godson-1的逻辑设计阶段,我们坚持稳扎稳打,从系统结构设计、到C模拟器设计、Veilog设计、以及FPGA验证的每一步都经过反复的验证。
        在上述技术路线指导下,我们在“狗剩-1”物理设计阶段的具体技术路线有两条,一是“以我为主”进行物理设计,二是坚持稳扎稳打。这是根据我们当时的处境提出的。
        在去年10月我们基本完成“狗剩-1”的逻辑设计并在FPGA验证平台成功运行通用操作系统以后,有很多人关心我们如何进行“狗剩-1”的物理设计。不少人建议我们完成RTL设计后,在国内寻找兄弟单位完成后续设计;有人说完成FPGA验证只是完成了整个设计工作的10%,90%的工作还在后面;更有人说我们当时只是完成了国外学校中系统结构课程的一个大作业而已。但还是有人鼓励说,完成FPGA验证已经很不容易,国外成功的设计也都是从FPGA验证开始的。在那一段时间里,在大多数朋友的鼓励和建议中,或多或少都流露出对我们完成物理设计的能力的担忧。因为计算所确实没有做过大规模的芯片物理设计,尤其是在深亚微米的工艺条件下。
        但我坚信现代EDA工具的发展趋势是不断地让做系统的人去完成物理设计,而不是让做微电子的人来完成结构设计。因此,我向室里和所里提出了“以我为主”并联合有关单位进行物理设计的方针。李所长很快决定让我们自己做下去,并在我们完成FPGA验证之后的一段时间里,在宏观上提出一系列指导方针,包括他到国外考察了一圈后决定使用0.18的工艺进行流片(我原来倾向于用0.25的工艺,因为0.18的工艺信号完整性问题比较突出。现在看来,使用0.18的工艺无疑是一个英明的决定)。此外,他有针对性地请了一些精通物理设计的人与我们交流,使我们也受到不少启发,尤其是认识到芯片设计是赢者通吃(Winner Takes All)的买卖,而且大家竞争的就是最后的百分之一。在今年初的全所大会上,李所长把龙芯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、精确例外等等的人面对诸如Wire load model、综合库、物理库、设计规则、扫描链、Steiner树、顶层约束、时钟树、P diff、N diff、多晶、闸流效应、防静电、串扰、电流密度、压降等等物理设计的概念时,就像熟悉种地的刘姥姥刚进大观园,觉得新鲜而不知所措。不过我们都很努力,大家抓紧时间看文档,并找教科书补充微电子方面的基础知识。在整个“狗剩-1”的物理设计过程中,我看过的文档至少有上万页,有些看得很认真,反复地读,有些翻过去就算了。我们组的弟兄们看的都比我多。
        在最初的学习过程中,我们开始对“狗剩-1”的部分RTL模块进行初步的综合以及布局、布线并根据结果对RTL进行优化。每次修改都是先修改C模拟器再修改RTL,并用FPGA验证环境进行验证。这时候显示出我们前一阶段建立起来的仿真验证环境是多么有用。2001年12月26日,我们终于收到厂家寄来的0.18工艺版本的综合库。虽然还缺一些特殊单元,如锁相环以及一些特殊的I/O单元等,但可以比较正式地开始做设计了。启用新库以后,比起我们原来用的库,在关键路径上的延迟一下子降低了很多。
        在拿到正式的单元库后的三个月时间(2002年1月到3月),是我最着急的。因为在这三个月内我们一直不能开始正式设计。RTL设计总是改了又改,选择哪家第三方物理设计公司也没有确定,可测性设计方案一直在调整,信号完整性问题也没有经验。每次解决一个问题,另一个问题就接踵而至。这些都是初学者难以逾越的过程,如果曾经做过,这三个月的工作(包括前面两个月的学习)完全是可以避免的。但这期间也是我们从不会做物理设计到会做物理设计的阶段。三个月后,我们不知不觉对物理设计有了初步的了解。到四月初的时候,我心里已经比较塌实了。也就在这段时间里,中科院微电子中心的黄令仪老师带着几个学生加盟到我们的物理设计中来。黄老师是个干实事的人,六十多岁了,干活比我还猛。每天早上7点多就来,晚上十点多,我走的时候她还拖着鼠标坐在计算机前。黄老师是老计算所人了,用她自己的话说,她在计算所的时间比在微电子中心的时间还长(她在计算所工作了二十多年,后来微电子中心成立时去的微电子中心)。从黄老师身上,我看到我们的前辈们献身科研的优秀品质,这种品质是目前整个科研界急需的。黄老师说,她是听说我们在做CPU主动找上门的,那时他们刚好完成了一个物理设计的项目,下一个项目还没有开始。我见过不少跨单位的合作项目,大都是把经费一分,各干各的,最后攒不到一起。但我们与微电子中心的合作是实质性的,因为合作单位的所有人员天天在一起干同一件活,统一指挥和调度。现在回想起来,如果没有黄老师他们的参与,我们恐怕只能完全委托给第三方物理设计公司做物理设计,不会自己做物理设计,即使做了,也没这么快。
        在芯片设计中,RTL freeze是一个重要阶段,即确定RTL级的设计,因为RTL一修改,后面的都得重做。而我们由于在前面设计RTL时没有物理设计的经验,在几个月的时间内,一直对RTL进行调整。这种调整主要包括三个方面,一是性能的优化,包括平衡各级流水线的延迟等;二是功能的增加;三是可测性设计。在从1月初到4月初的3个多月内,我们一共对RTL做了一百多次修改,其中较大的修改有30多次。通过这些修改,我们积累了RTL设计的感性认识,为以后处理器的RTL设计提供了宝贵的经验。
        在RTL的修改过程中,最麻烦的是可测性设计。“狗剩-1”的可测性设计包括RAM的自测试设计、寄存器的全扫描设计、以及JTAG设计。好在计算所在这方面有很深的基础,“狗剩-1”的可测性设计工作主要是网络室的测试组完成的。而我最得意的RTL修改是浮点除法的实现。在“狗剩-1”的FPGA设计阶段,没有实现浮点除法。处理器执行浮点除法指令时发出保留指令例外,由操作系统调用IEEE浮点模拟程序进行模拟。但我们在FPGA中运行SPEC CPU2000标准测试程序时发现,浮点除法指令虽然出现不多,但对性能影响很大。进一步的分析发现,操作系统模拟一条浮点指令平均需要3000多拍。那时候已经是三月份,而浮点除法部件的设计还是比较复杂的,重新设计浮点除法可能会延误设计时间。但我还是下决心实现浮点除法,因为我刚好在前一阶段参与定点除法和浮点乘法模块的优化,对这两个模块都有一定了解,而浮点除法的尾数相除与定点除法类似,阶码处理以及例外处理与浮点乘法类似。我与张志敏老师打赌,三天之内搞不定浮点除法就绕整个北楼喊一圈“张志敏真厉害”。结果我组织定点除法和浮点乘法的设计人员两天就把浮点除法设计完并在FPGA中跑起来。当然,这也取决于我们建立了完整的验证环境和工具。
        在这个阶段,我们也把物理设计流程基本走了一遍,解决了其中一些关键技术问题,如信号完整性问题。
        2002年春节我们好多人留下来加班。初四的时候李所长和邓书记来看望我们,给我们带来很多好吃的东西,使我们这班远离家乡的游子觉得很温暖。就在那天,李所长明确提出我们必须在9月底之前完成流片的要求。这比起我们自己在年底完成流片的计划提前了几个月。从此之后,我们一直按照“后墙不倒”的要求进行进度安排,9月份就是我们的“后墙”。
        到四月初时,我们基本确定了第三方物理设计服务公司。并在四月底把网表交给他们。在四五月份,我们工作的重点是对第三方做的设计进行参数提取和验证。同时积极为自己做物理设计做准备。
        在任何一个阶段,仿真和验证工作都是很重要的,我们一直在这方面投入比设计更多的力量。在四月份,我做出了一个自认为在整个物理设计阶段最满意的三个决定之一,即组织专门的队伍进行仿真验证工作并由年轻员工许彤负责该组的工作。许彤责任心很强,而且非常细心,组织能力也强。他很快就在我们已有的环境基础上建立起完整的验证方法,并把仿真验证和形式验证结合起来。比起我自己来抓要高效得多。他和李祖松、李文在我们交给第三方的网表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日下午三点多钟时把这三个芯片交给许彤、范宝峡、郑为民他们拿到焊芯片的厂家把芯片焊接到子卡上。由于没有把握,这些事情除了联调组成员以及唐志敏外,对其他人都暂时保密。
        六点多钟吃完晚饭,我和张志敏老师一起往回走,走到北楼二楼时刚好碰见李所长和徐所长,李所长见我就问芯片到了没有,我不好瞒他告诉他已经到了几片,他说:“赶快调试,有结果马上告诉我”。由于芯片还没有焊回来,我和张老师等得很着急,就绕着计算所一圈圈地转圈。到晚上8点多的时候许彤他们终于回来了,叫许彤他们抓紧去吃饭的同时,我挑出一片再用万用表测一下。晚上九点半,一切就绪,把带有龙芯1号CPU的子卡插到主板上,先运行一个简单的测试程序。我屏住呼吸按下电源键,主板的数码管上瞬间就显示出预期的“Godson-1”字样,引起我们一阵欢呼。这时候我心里有了点底。下面接着运行LINUX操作系统,开机后调试终端上呼呼地往上冒启动信息。我们正高兴,屏幕上却停了下来,搞得我们非常紧张。经过分析后发现是BIOS的问题。原来是因为我们用另外一个兼容处理器调软件,但我们的处理器没有实现四条访存不对齐的指令而是用操作系统例外来模拟它们,在BIOS中例外入口没有初始化之前这几条指令执行不了。本来以为把这几条指令去掉很容易,因为我们已经在GCC后端把它们去掉了。但由于系统软件组准备不足,他们没有想到这么快就能开始联调,因此我们折腾了一个晚上才把这个问题搞定。
        8月10日早上6点08分,“Godson Login”的字样终于出现在显示器上,我们高兴得长时间欢呼。我登录进去,用vi写下了文章开头的文字。然后,我们用测试IEEE 754兼容性的测试程序运行了一遍,没有出错。这时候我觉得我们已经成功了,把主频调到200多MHz也一切正常,感觉比我们原来在FPGA上的操作快多了,十分的爽(一个人一辈子这样的感觉不会很多)。玩了近半个小时,快到7点的时候,我觉得没问题了上楼到办公室给李老师和唐志敏打电话。拨通李老师的电话后我说:“李老师,我是胡伟武。”他问:“怎么样?”我说:“成了。”他说:“我马上来。”没等我把地点告诉他,就把电话挂了。倒是跟唐志敏说得比较多,他正在北京的一个郊县开会,拨通后我说:“跑起来了。”他说:“什么跑起来了?”我说:“都跑起来了。”他说:“LINUX也跑起来了?”我说:“那当然。”他兴奋得连声说:“太好了!太好了!太好了!”然后马上就往回赶。我与唐志敏共事十多年,他既是我的师兄也是我的老师,互相非常了解,从来没有见过他今天这样高兴得像小孩儿似的。
        不到十分钟,李老师就赶来了。不出所料,他还以为我们在三楼调试,没有找对地方,幸好碰到了上楼拿东西的张福新。他对我们说了很多鼓励的话,但也提了很多要求,临走时叫我们早点回去休息。可是我们一点也不觉得困。一起出去吃了早饭回来刚好唐志敏赶到。他看了一会儿,已经到九点了,可我们那股喜悦的劲头儿还没过,还是不想回去。本来昨晚说好调通后去天安门广场看升国旗,可是现在国旗早升起来了。我提议去天安门向毛主席报告去。我们组平时聚会每次都唱《打靶归来》那首歌,歌中战士们取得好成绩后通过歌声向毛主席报告的心态于我们是非常自然的。于是我们一起打车去天安门,那天是礼拜六又是暑假,人特别多,纪念堂门前的队伍拐了七、八个弯一直延伸到前门。我们排了一个多小时的队终于得偿心愿,大家才各自回去睡觉。
        由于8月10日调通的是A方案,即委托第三方做物理设计的方案。高兴了两天之后,我们又开始担心我们自己做物理设计的方案能不能成功,从A方案中排除了跨时钟域信号传输出错的可能性,因此主要的担心又集中在信号完整性问题上。我让赵继业重新分析一下信号完整性,并让钟石强通过设计规则进行检查,在版图中把凡是相邻500微米以上的平行线都找出来重新分析,觉得问题不大。8月29日,我们终于拿到了C方案的首批芯片。打开包装一看吓我一跳,可能是在海关检查时没有包装严密的缘故,芯片的引脚在运输过程中歪得不成样子。黄老师来看以后回去就病了。我从中挑出几片好点的出来,把引脚掰直,经过万用表测试后让许彤、范宝峡、和郑为民去焊接到子卡上去。把他们送走时我就担心他们会在焊接的现场进行联调(因为那里有一台我们的调试环境机),因此中间还打电话要求他们尽快回来。可是等到晚上8点来钟,他们才打电话回来,说已经在现场把LINUX启动起来了。我在电话里说要处罚他们“违反工程规范”擅自提前联调的行为,但心里很高兴。
        后来又让他们提高主频到200多兆(因为我们联调频率是50MHz),他们说已经是200多兆了。我这半年多来一直悬着的心才真正地放了下来,马上给黄老师打电话,黄老师听到这个消息后,第二天病就好了。 许彤他们回来后,我又让张福新对调通的样机进行了更多的测试,主要是浮点测试。到晚上12点左右测完,没有发现问题。然后,我上楼准备给全组发邮件告知我们自己做物理设计的芯片已经流片成功的消息。我走在北楼的走廊上,夜半后走廊上空无一人,因此显得很空、很长、很静。我突然非常怀念一年多前那种正常上下班的日子。那时侯每天下班后坐班车回家,在班车上给女儿讲故事,教她背三字经。回家帮老婆做饭,吃完饭后躺在躺椅上,边看新闻联播边看着老婆哄孩子吃饭,礼拜天去爬香山。而现在这些事情好像很奢侈很遥远,家好像只是一个旅馆而已,女儿每每要求我下班后跟她一起坐班车回家,而我一次也没能满足她,以至于女儿说:“你就知道做你的破CPU不要我们娘儿俩了。”在研发最紧张的时候,老婆甚至为了支持我工作而辞职。这时候我突然非常想念以前那种美好的日子,这种怀念是如此地刻骨铭心以至于我觉得非常地对不住她们,这是在“狗剩-1”整个设计过程中唯一的一次。(写这篇文章的时候,我突然觉得我更对不住组里的兄弟们。)我很无情地规定,每天晚上和礼拜六都算正常上班,只有礼拜天上班才算加班需要另行通知。我曾经多次把已经回家的兄弟叫回单位上班,最过分的一次,晚上12点多打电话把王剑叫了回来,他老婆肯定骂死我了。在8月份调通芯片后有一次我要求加强作息纪律时,张福新说,要是按照8小时的工作时间算,我们组可以从现在开始放假,一直到春节都够了。因此,在这里向全组兄弟以及他们的家人道歉。有时候我很严厉,因为我很着急,不管平时我怎么说你们,你们都是我的好兄弟。我脾气不好,请多多原谅不要见怪。等龙芯2号的设计定型后一定带你们出去休息几天。
        到办公室给全组发完邮件后,我靠在办公室的沙发上,觉得出奇的累,但又睡不着觉就在那里瞎想。我想起一些网友去年对我们“只要能做出来,再贵也要买”的鼓励,想起在我们向院党组汇报龙芯的工作后,江院长追出来跟李老师说:“李院士,我就把这个宝押在你身上了”;想起在年初的全所大会上李老师把龙芯1号的设计列为今年全所的第一件大事;想起我们花了上千万纳税人的钱终于没有浪费。我想起在过去的半年多中我们在不可承受的压力下在机房度过的无数个不眠之夜;想起女儿曾经天真地说:“爸爸,要是你做CPU做不过美帝国主义我长大后就接着做”;想起我们在最后交出流片的前两天所面临的巨大挑战;想起最后连续加班六天六夜的每一个细节,想起每一个累得毫无血色却执着不改的面孔,在我的有生之年,永远都不会忘记。那一刻,我泪水满眶。
第二天早上,我们终于如愿到天安门广场看了升国旗仪式。在随后的调试中,B方案也一次成功。
        接下来是应用的开发以及大量的测试,包括可靠性测试(如高低温测试、电压拉偏测试)、功耗测试以及性能测试等。我们每次使用或测试龙芯样机时,就像对待自己的孩子一样,为他取得的一点点成绩而高兴。我们在8月10日调通的第一台样机,已经连续运行40多天,没有出现过任何异常。我有时也诧异于他的稳定,像X-Window这样的大型程序,光源代码就500MB以上,而我们居然一点也没有找出“狗剩”的错误。后来我想明白了一个道理,我只要把一拍做对了,那么任何多拍也就对了。
        CPU真正的成功不是在测试台上,而是在市场。对于潜在用户提出的应用要求我们是积极配合的。在龙芯1号联调成功的短短几十天内,我们已经配合有关单位或公司在“狗剩”上移植了大量应用软件,包括网络防火墙、指纹识别系统、VOD播放、NC等等。
        在测试和使用过程中,我们也发现了很值得以后吸取的教训。一是CACHE太小(指令CACHE和数据CACHE都是8KB,二路组相连),CACHE访问策略也过于保守,导致对于一些大型应用难以发挥他的运算性能。尤其是对于像SPEC CPU2000的ref规模的程序,在200MHz时,“狗剩”取得的最好值是56,最差值才11。对于SPEC CPU2000的train的规模,“狗剩”的成绩就好得多。二是编译优化不够,我们没有专门针对“狗剩1号”的后端进行gcc编译器优化,而实际上计算机厂家都有针对自己处理器的编译器。三是有4条访存不对齐的指令没有硬件实现,而是通过操作系统模拟来执行,这样做除了对部分程序的性能有影响外,对于像VxWorks这样只有目标码的程序也确实让我们花费了一番心血。以上几点,是“狗剩1号”设计的教训,但教训比经验更可贵。
        9月20日,是我的母校中国科技大学44岁生日,那天我们通过了测试组的测试。22日通过了由中国科学院组织的鉴定委员会的鉴定。9月28日,中国科学院举行了龙芯1号的发布会。当有关领导在媒体的光芒以及满场的掌声中把我们的龙芯1号展示出来时,我在台下想起过去一年多的经历,又一次禁不住热泪盈眶。那天我的恩师夏培肃院士专门来看我,并与我合影。我给她做了专门的演示,她很高兴我们做出CPU来。由于夏老师的爱人杨院士住院,才一个多月不见,我发现这次夏老师消瘦了很多,白发也多了很多,心里十分难受。我们CPU组大多数都是夏老师的徒子徒孙,秉承她的“先做人再做学问”的思想,用她教给我们的方法和精神去做学问。今年是夏老师从事计算机事业50周年,我把龙芯1号的设计献给她。在龙芯1号的物理版图中,每一层金属上都有“夏50”的字样。50年前,在华罗庚先生的倡议下,夏老师和另外两位同志组成了中国第一个计算机研究小组。看看计算所的历史,比起前辈们轰轰烈烈的艰苦创业,我们的条件要好得多,工作却渺小得多。
        在龙芯1号的调试和应用移植过程中,我们有一个深刻的体会,那就是系统开发比CPU设计工作量要大得多,这决不是几十个人可以搞定的。因此,我们需要很多人无私的帮助。“狗剩”还是个孩子,需要我们一起来抚养他,好让他报效我们五千年来生生不息的祖国,为中华民族的伟大复兴做贡献。真诚地希望有志于我们自己信息产业核心技术突破的人,不管你身在何方,伸出你无私的手,一起来设计我们自己的CPU的未来。如果愿意与我们一起把“狗剩”养大,对系统(如LINUX、编译器)以及系统级应用(如流媒体)感兴趣的人,请发EMAIL给jw@ict.ac.cn,对处理器物理设计有经验的人,请发EMAIL给jasonzjy@ict.ac.cn(物理设计方面)。我们将提供一个基于龙芯处理器的机群,供大家远程登录来使用;并在我们能力范围之内,建立一定的激励机制。如果对狗剩的未来发展有任何建议,请直接告诉我。我坚信,只要我们中华儿女众志成城,中国的信息产业总有龙腾于世界之日!
        龙芯1号的流片成功,离不开计算所的环境。我觉得我的运气比较好,遇上了很多好人。客观地说,如果没有我,李老师和唐志敏找别人做也能做出来,但我离开计算所就很难做出来。我可能是一个比较不好合作的人,尤其是最讨厌开会,心里想什么就想马上去做。但所领导和室领导都很宽容。在龙芯1号的设计过程中,我做了好多越权的事情,最过分的一次,为了搭建比较独立的一个EDA设计机房,在24小时之内把机房里原来的工位全部拆掉,买了几十台微机以及终端桌搭建了一个比较独立的EDA设计机房。因为这件事是在礼拜天干的,事先没有任何请示,后来也就是挨了一通批评。现在所里做的战略规划,我是很赞同的。比如说其中有一条是关于计算所要成为“龙头、源头、领头雁”。有一次一个地方政府要和我们在集成电路方面进行合作,对方希望以合作办公司的方式实施。李老师说,如果办公司,即使产值一个亿,也就是在你几百亿的基础上增加一个亿,计算所要做的是源头技术,计算所可以一分钱都不赚,但计算所的技术能带出几百亿的产值,这几百亿少不了计算所的源头技术,这才是计算所要做的事。我当时在场,听了以后觉得就是一个字:高。因此,我自己觉得计算所战略规划中的几十条,理解三分之一条就够了,但要努力实践它。
        计算所高效的后勤服务也使我们得益匪浅。有一次,由于我们办公场地比较紧张,临时找了一个地方调试主板,结果很不方便,经常把主板烧坏。需要一个比较独立的房间有良好的接地来调试。万般无奈下我去找邓书记说借一间房子用几个月,结果我回来后不到半小时,王凡就打电话来说,一楼一间原来放档案的房间(就是后来我们联调的那间105房间)已经腾出来了,叫我去看看。我和张志敏老师去看时,已经开始打扫了。第二天,我们要求的沿墙一圈的地线已经接上。另外一件事情是我们的EDA机房由于负载较大,夏天电压不是很稳定,我给王凡发了EMAIL说明情况,第二天,电工师傅就来给我们拉了一条10000瓦的专线。那天很热,机房里放服务器的屋子没有空调,我们所的电工师傅都是老计算所的,上了年纪了。看着他们在那里挥汗如雨,我和我们组负责管理机房的郑保建都很过意不去。计算所如此的办事效率,能不出活儿吗?
        现在,基于龙芯1号的SoC设计已经快速展开。在2002年5月份的时候,我们在设计龙芯1号的同时就开始了龙芯2号的设计。先是安虹老师领着几个人做些大方案的设计。在7月交出去流片的同时,我也加入到龙芯2号的设计中来。现在龙芯2号的结构设