标题: 转帖:我们的CPU [打印本页]
作者: hjj 时间: 2007-9-10 12:59 标题: 转帖:我们的CPU
转帖:我们的CPU
前言
这是龙芯处理器主要设计人员胡伟武发布在中国科大BBS站[bbs.ustc.edu.cn]的两篇文章,一年过去了,龙芯终于正式发布,回头再读读这些文字,的确有一些别样的滋味……
我们的CPU
胡伟武
我参与计算所的CPU开发项目,源于2000年10月一个偶然的机缘。10月中旬,所领导派我到我的母校中国科技大学去进行招生宣传。这是我1991年毕业后第一次回到母校。我回到了我原来工作过的实验室,十年前在那里,我曾经和另外一个同学一起做过一个与8086指令级兼容的处理器作为本科毕业设计。这是一个用400多个74LS系列的芯片搭起来的电路,能够运行8086指令系统中除了十进制和除法指令以外的所有指令。由于没有制版的费用,所有的连线都是手工焊的。这次回去,我看到了我原来做的机器还静静地躺在那里。面对与十年前一样凌乱的实验室和满桌触手可及的芯片、电容、电阻、电烙铁,我有一种重操旧业的冲动,因为十年前那些没日没夜地与逻辑门、触发器、译码器、选择器玩命的日子有一种深深的诱惑,至今我还可以如数家珍地说出好多当前我用过的集成电路芯片的引脚定义。我想到了我们所正在筹备的CPU设计项目,于是我给我的师兄唐志敏打电话,他是计算所系统结构室的室主任,目前正负责计算所CPU设计项目的准备工作。我开玩笑说一、二年之内不把通用操作系统boot起来,提头来见。于是回计算所后,我就开始考虑CPU的指令系统和流水线等问题。
2001年8月19日,前苏联解体的十周年纪念日,我们设计的Godson CPU成功地把LINUX操作系统boot起来。当 “login:” 的提示符出现在屏幕上时,计算所北楼309房间一片欢呼。到9月中旬,一个用我们自己设计的CPU的完整计算机系统已经浮出水面,该系统运行完整的LINUX操作系统, 内核版本为2.4,可以做其他运行LINUX操作系统的计算机所支持的一切事情,包括运行gcc编译器,X-window视窗系统,WEB服务器,SPEC CPU2000基准程序等。我们最引以为豪的还是该CPU的系统结构设计。可以说目前世界上最先进CPU的系统结构技术,该有的Godson都有,不少地方还有创新。虽然目前我们只是基于FPGA的设计,主频也不高,但当我们的CPU运行到12.5MHz时,其性能已经不比50MHz主频的Intel 486差(当然, 我们的主板比486主板要好),确切地说,浮点性能比486强一点,定点性能比486差。值得一提的是,当我们用一个叫“偏执狂(Paranoia)”的测试程序测试CPU的浮点部件是否符合IEEE 754标准时,奔IV处理器测出了浮点不严格符合IEEE 754标准而我们的CPU完全符合标准。此外,在Godson中还专门针对网络攻击进行了安全设计,可以有效防止利用缓冲区溢出技术进行的攻击。
应该指出的是,我们只是完成了一个CPU的逻辑设计,目前是用FPGA对这个逻辑设计进行验证,只是一个阶段性成果,还没有进行投片。用李所长的话说,“三分之二的工作还在后面”。如果我们对目前的工作沾沾自喜,那是很肤浅的。但即使是这个成果的取得,也来之不易。个中滋味,酸甜苦辣俱全,很难为外人所体会。回顾我们开发Godson处理器的过程,虽然不长,但有教训,也有经验,总结一下,对以后的工作是有好处的。
我们做CPU设计缘起于所长李国杰院士的直接推动。李老师是我接触过的院士中比较钦佩的一个,因为他能够站在如何发展整个国家的信息产业的角度来考虑问题,而不是一个局部的角度。现在我慢慢知道,他推动我们所做CPU设计是很不容易的。也许是由于前几年计算所的反复折腾给人留下了不好的印象,使得很多人觉得计算所没有能力做CPU,李老师最后只能把CPU设计作为一个计算所的所内项目先做起来。我在计算所连读书带工作十来年,也是第一次体验到不用立项申请而直接开始做一个课题。CPU设计技术是核心技术,但市场壁垒很高,即使现在已经投片出来很好的CPU,如果没有人用就会走入以前“鉴定会就是追悼会”的怪圈。但我相信李老师在信息产业界的经验和影响力,所以决心做下去。
我的师兄唐志敏是系统结构室的室主任,他把握着整项工作的大局,领导整个CPU设计的总体规划。他的大度和谦和能够把一批非常能干的年轻人团结在一起,使大家互相之间从无猜忌。现在在科技界有一种奇怪的现象,就是一个年轻人作出一些成果之后,就喜欢独立门户,结果造成了科研力量分散,干不成大事的局面。大家都在沾沾自喜地干一些几十万或顶多是上百万的项目,形成不了很大的力量。在我们的项目组中,却有一批本身也很厉害,能够独挑一摊的年轻人紧紧地团结在一起,同心协力干一件事情,一个重要的原因是唐志敏是一个能够容人的领导。举一个简单的例子,在所里后来立的一个CPU设计的项目中,我是项目负责人,但包括项目申请书、每月一次的课题进展状况及支出情况表、以及鉴定会材料等,我一个字也没有写过,全是唐志敏代劳,使我有90%以上的时间能够用在编程和逻辑设计。这只是一件小事,但我在计算所十来年,见了不少下属帮领导写报告的事,却从未见过领导帮下属写报告的。唐志敏在全局的把握和总体规划上也是有独到的见解,至少是我所不能及的。关于我们未来CPU的用途,我的主张是自己做高性能工作站,但做出来干什么以及如何与别人竞争却难说,唐志敏却非常有数,他说现在我们所的软件室正在做电子政务,以后结合在一起做,至少在安全方面是国外产品无法竞争的。我当时觉得这种眼光真是“高瞻远瞩、高屋建瓴”。
张志敏老师在我们的CPU设计中负责工程管理,他是李所长请来的客座研究员。根据我们自己的分工,在我们设计CPU的队伍中,唐志敏是总负责,我负责设计,张老师负责工程管理。张老师是责任心非常强的人,很义气,工程经验非常丰富。我最佩服张老师的有两点,一是他把个人利益看得很轻,他放弃了原来工资更高的工作到我们这里来做这个事情;二是他做事情很实在、很专一。我有一个观点,一个人一辈子做好一件事情都不容易,因此比较讨厌一些一会儿这边,一会而那边,想两边都得好处的人。但张老师不是这样的人,他做事情很实在。在我们基本完成Godson的逻辑设计后,需要一个模拟主板的环境,以便在逻辑设计上通过软件模拟启动LINUX。我觉得这个事情很难,但张老师加班加点一两个星期就写出来了。我和张老师配合得非常好,简直是最佳搭档。他工程经验很丰富,我理论上强一点;做事情他比较稳重,我比较偏激。在每周一上午的例会上,我布置完本周的工作后,总要慷慨激昂地动员一番,张老师总是要摆一些困难泼泼冷水,真是一张一弛。以致于有一次他不泼冷水了,大家都不习惯。
虽然我们所筹备CPU设计已经由来以久(从2000年初就开始做预研),讨论了许多轮。但我们真正开始动手设计是2000年11月。刚开始是唐志敏和我领着七、八个研究生做系统结构设计,主要是确定指令系统以及流水线结构。在开始设计之初,李所长在全所会议上就定了“高性能、通用、一步到位”的目标。后来,唐志敏和我又确定了兼容以及采用RISC结构这两个具体目标。当时虽然IA-64结构炒得挺热,但我们还是决定采用RISC结构,现在看来,这是对的。指令系统我开始建议与Alpha兼容,但唐志敏定为与MIPS兼容。说实在的,从2000年11月到2001年4月这段时间,我对CPU这个项目还不够重视,因为我原来做机群及共享存储系统也做得挺有意思。在这段时间里,我自己还花一部分时间在做机群方面的事情,写了一些论文,4月底还到美国开了一个并行处理方面的国际会议。5月初从美国回来后开始全力投入做CPU设计。由于时间紧,在确定流水线结构时,没有看多少论文也没有做多少实验,主要是凭感觉和过去的积累,遇到权衡得失确定不了的事情,就与唐志敏讨论让他定夺。不过,现在回过头去看,由于当时没有参考别人的方案,也就少一些禁锢。现在有了一点时间开始看别人的做法,发现我们设计的基于操作队列复用的动态指令流水线还是很先进的,有不少创新点,我自己觉得比MIPS R10000的指令流水线要强。
我们的工作真正全面铺开是在五一放假上班后。一方面,系统结构已经基本定型,用C语言写的模拟器已经差不多了,可以运行简单的指令和短程序了。另一方面,6月份突然接到所里的通知说今年10月份45周年所庆要展示我所在CPU设计方面的成果。从6月开始,我们开始了夜以继日的三个月。在此期间,队伍迅速扩大,现在已经有三、五十人。虽然只是一个逻辑设计,能够在三个月内从无到有地设计出完整的通用CPU,我自己也觉得吃惊。现在回想起来,成功的原因有三条,一是技术路线正确,二是有一支高素质而玩命的队伍,三是计算所良好的环境和雄厚的技术储备。教训有两条,一是工程经验不足,初期管理不善;二是不重视工具。
我觉得,我们的技术路线在三个方面是很成功的。一是所长关于高性能通用CPU的定位。不少人认为,处理器最大的市场在嵌入式方面,中国的处理器设计应该定位在嵌入式上,没必要或没能力做通用处理器设计。诚然,嵌入式处理器的需求量很大,但大市场不一定能赚钱,小市场有时反而能赚大钱,因为后者是核心技术,别人做不了。Intel就是一个典型的例子,Intel处理器数量也只占全球市场的1.5%。其次,中国不是小国,核心技术自己不掌握不行。我倒是觉得象嵌入式处理器这样的东西可做可不做,因为别人的嵌入式处理器价格很低,且不会卡我们。有的国外公司甚至主动提出,只要我们用他们的生产线,他们可以免费提供嵌入式的IP核。至于有人觉得我们做不了高性能通用处理器,我的回答是用我们自己的处理器做出一台曙光机来再说。虽然我们做高性能通用处理器上还很落后,但我觉得我们现在的条件比当年计算所做757和8920好得多,工具要好得多,工作量要小得多。任何事情,关键是要有人静下心来认真地去做。
我们在技术路线上第二个成功之处是兼容。回顾中国计算机发展的历史,应该说,我们的“祖上”也是挺“阔”的,直到80年代初,我们的处理器设计技术不比人家差多少。落到今天这个地步,很大程度上是吃了不兼容的亏。因为现在计算机中绝大部分费用不是花在硬件上,而是花在软件上。自己设计指令系统,只能图一时痛快;与其它主流指令系统兼容,确实很麻烦,有时为了一条指令就得修改数据通路,增加不少东西,但却可以一劳永逸。在我们组里,有一个很精干的操作系统组,才四个人,在3个月内搞定一切与软件有关的东西,包括BIOS、LINUX 2.4内核、gcc编译器、X-window、调试工具、Web Server等等,就是得益于我们的兼容设计。当然,这四个人都是绝对的LINUX高手。我们甚至做到与别人的处理器引脚级兼容,只要把别人的拔下来,自己的插上去就行。因此,目前主板也是用别人的。当然现在我们也在做主板设计,因为我们以后想做Infinite Band,不掌握主板技术不行。
我们在技术路线上第三个成功之处是稳扎稳打的设计方法。即从系统结构设计,到C模拟器设计,到Verilog仿真,到FPGA验证,到标准单元投片,再到全定制投片的方法。在系统结构方案确定后,我们就设计了一个Cycle-by-cycle的C语言模拟器,该模拟器详细描述了Godson处理器的系统结构,能够模拟处理器每一拍中每一位信号的变化。设计模拟器有三个明显的好处,一是验证设计的正确性,我们先后在C模拟器上运行了LINUX 2.2、LINUX2.4、gcc等一系列系统软件,发现了设计过程中的大量错误。二是用C语言描述系统结构更加严格,没有二义性,比用文字写的文档更加明确。在C语言模拟器验证正确后,把C语言模拟器的每个模块对应地转换成 Verilog语言的一个模块花了不到一个月的时间。而且由于设计上的错误都在调试模拟器的过程中剔除了,在Verilog描述阶段没有再出现设计上的错误。第三个好处是C语言模拟器为软件开发提供了一个开发平台,为我们开发诸如BIOS等软件提供了很大的便利。在把C语言的模拟器转换成Verilog设计后,我们又在Verilog的运行平台上成功地运行了LINUX操作系统。然后再综合并形成FPGA的烧制文件。经过上述反复的验证,联调时基本一次成功。如果我们不是稳扎稳打,而是采取跨越式的设计方法,直接进行逻辑设计,恐怕会欲速则不达,因为越上层的设计,调试越容易,而越底层的设计,调试越困难,且刚开始时我们甚至连Verilog语言都不会使用。在联调成功后,我们对流水线做了几次较大的优化,每次也都是在C语言模拟器上进行验证。
在我们实验室的墙上,有两句口号,一句是“人生能有几回搏”,另一句是“求实、求实、求实、创新”。第一句口号是我所研制曙光系列高性能计算机用的口号,我把它借来了。的确,在我们努力攻坚的三个月中,我们课题组的成员付出了难以想象的艰辛,尤其是在几次调试的阶段。好多人都有调试程序的经验,但很少有人调试过操作系统,而在一个本身就可能出错的处理器上调试过操作系统的人更少。我们的挑战就在这里,当出现一个错误时,应用程序、操作系统以及处理器本身都是怀疑的对象,需要多方面的协调及分析。我们曾经在C模拟器、Verilog模拟环境、以及FPGA验证系统上分别都运行了LINUX操作系统,每次都是连续几天几夜的鏖战。尤其是最后一次最为惨烈,因为即使发现一个很小的错误,修改一次设计再形成新的FPGA烧制文件,需要至少8个小时。只有一天24小时工作,才能保证一天有修改几次设计的机会。我算是在课题组中睡觉不算少的,但也有一个星期没有正经睡觉的经历。在8月中旬的那个星期,星期一下班前得知第二天有领导要来所里检查工作,于是决定冒险把原来定的联调时间提前一周,希望一次成功。但怕不成功影响士气,只找了几个骨干在星期一晚上开始联调。我们只有两次机会,因为修改一次设计就需要8小时。星期二凌晨四点,把FPGA文件写入FPGA,没有任何动静。很快就用逻辑分析仪发现了问题。原来是由于启动时与主板握手机制有缺陷,导致主板一直没有撤掉复位信号。赶快修改并在中午12点形成了新的FPGA烧制文件,写入后还是没有任何动静。下午领导来检查,开了一下午会,晚上接着调试,发现CPU插卡上有两个焊点短路,去掉后主板上的液晶显示器上如约显示出“GODSON”的字样,我们一片欢呼。我们决定连续作战,到星期三晚上11点左右,成功地运行经过改造的主板上的BIOS系统,相当于是一个简单的操作系统,又是一片欢呼(这时课题组的其他成员才知道我们是在我们自己的CPU上运行程序)。于是12点要求所有人回去睡觉后回家睡觉。晚上雷声大作,风雨交加,以示庆贺。我兴奋得难以入睡,因为此时始觉三个月来一直紧紧压迫我的压力稍有缓和。星期四上班后开始试图启动LINUX操作系统,但每次都在最后进入用户态启动各种应用程序时出错。怀疑是TLB的问题,因为访问用户空间才开始使用TLB。一直跟TLB斗争了三天两夜,中间发现了不少问题,每次充满期望地改过来却总是获得失望,直到星期六吃晚饭前恍然大悟地发现问题,吃完晚饭后赶快修改,8月19日凌晨2点多形成FPGA文件并写入FPGA,2点42分,屏幕终于上出现了“login”字样,登录进去随便玩,和使用其它机器上的LINUX一样。我当时用vi编辑了一个文件记录这一历史时刻,存盘退出后把它ftp到另一台机器上发给唐志敏和所领导,并兴奋得马上给唐志敏打电话告诉他这个好消息。那时虽然我们都已经极度疲惫,但在场的6个人都兴奋得毫无睡意,聊天到天亮。记得那晚也是风雨交加。早上6点大家回家睡觉,不知别人怎么样,我连续睡了20多个小时,补上了这一星期的觉。在此之后,我们又跟前述“偏执狂”的浮点测试程序斗争了两个礼拜,不过已经没有那么辛苦了。我有时候觉得自己比周扒皮还狠,但我们课题组的成员确实很玩命。有好几次,我在早上六、七点钟打开实验室的门,发现有些人手里扶着鼠标就靠在椅子上睡着了。我是容易受感动的人,看到这样的场景忍不住想落泪。但我还是叫醒他们问他们昨天晚上的进展并让他们接着干。我有一个学生,近两个月来很少在凌晨4点前睡觉,而常常到八、九点钟我上班后就会把他叫起来,因为我急于了解昨晚的进展。记得有一次我们在深夜趁等计算机的运行结果,大家聊天,说到了生死。他说最不希望老死,看着自己的生命一点点耗尽。我们有一种观点,我们现在落后这么多,别人不比我们笨,如果大家都一样一周五天一天8小时上班,恐怕很难赶上人家,惟有象当年搞“两弹一星”一样拼命,至少得累死一批人。惟有这样,我们才能不受欺负,我们的子孙才有希望重新做到“犯我大汉者,虽远必诛之”。
我经常说,一盆花用水浇灌固然能够盛开,但用心血浇灌会更鲜艳。我们的CPU事业就是一朵花,我们在用心血浇灌她。我们给我们设计的处理器取了一个很有传统特色的小名叫“狗剩”,希望名字贱一点容易养大,音译成英文就是Godson。
至于我们墙上的另外一句口号“求实、求实、求实、创新”是对计算所所训“求实、创新”的一个注解和发挥。因为我感到现在中国科技界太浮躁,炒作的人多,做事的人少。因此希望我们组的人把工作做扎实,少吹牛多做事。其中第一个求实是关于做学问的目的,要为了做学问而做学问,而不是为了名和利。要真正做到‘人不知而不愠’。这一点说起来容易,做起来很难。象我们在计算所工作的人,大概在利上不是非常计较,只要日子过得下去就行了,但在名上就很难看得开,这一点,我自己虽然做不到,但心向往之。第二个求实是关于做学问的态度,就是要把工作做到实处,就是要艰苦奋斗,就是不要为了发表论文而写文章。在科研上哪怕是一点点的创新,都需要大量踏实的工作,这是客观规律,谁也躲不过。我们在科研中经常碰到有些人不愿做具体繁琐的工作,一心想发表论文。这种现象很普遍,我自己也这样,但以后要力戒之。第三个求实是关于做学问的方法,要勇于实践,不要纸上谈兵。就是要‘学而时习之’,就是认识和实践的不断循环往复。学问并不仅仅是知识渊博,更多的是体验和感觉。没有对所做工作的深刻体验,就难以发现问题,就难以创新。而这些体验,别人的文章里是看不来的,没有经过身体力行的大量实践,是不会有的。只要做到了这三个求实,想不创新也难。
现在很多人认为我国没有自己的处理器,主要是因为工艺水平上不去,因此,处理器设计不应是计算所的事情,而是做微电子设计的人的工作。诚然,回顾我们国家的处理器设计历史,在80年代后全面落后的一个重要原因是没有自己的制造工艺,导致处理器设计队伍整体上垮掉,人员流失。但现在情况发生了变化,投片已经没有大问题,主要是没有设计。而处理器设计决不仅仅是逻辑设计。处理器设计是大系统,惟有对包括操作系统、编译、体系结构、I/O等在内的整个计算机有全局的把握才能设计出高性能处理器。就好象一个公司,固定资产和资金只提供了必要的条件,关键还在于管理。在通用计算机中,操作系统和系统结构设计的的配合尤为重要,有些指令专门是为操作系统设计的,尤其是在系统安全、存储管理、原子操作、例外处理等方面。我在用我们自己的结构实现MIPS指令系统的过程中,有一个深刻的体会,就是一个指令系统十几年来一直在发展是有它的道理的(MIPS指令系统经历了MIPS I、MIPS II、MIPS III、MIPS IV的发展过程)。有时候通过对操作系统的分析了解到一些指令的妙用,体会到设计者设置这些指令的初衷,真是让人拍案叫绝。所以,我一直很庆幸我们采用了兼容的做法,如果自己设计指令系统,没有十几年的实践,是不会完善的。放眼中国在体系结构、操作系统、编译方面的综合力量比计算所强的不多(我比较佩服的其它单位只有一家),因此计算所做CPU设计是很有优势的。虽然前几年的折腾使计算所元气大伤,但底子还在。在开始做CPU设计之初,我对这件事情的复杂性估计不足(这是一个深刻教训),只是领着八、九个研究生做。后来在项目逐渐展开后,发现现有的人力顶多能做完逻辑设计,要把通用操作系统启动起来是远远不够的。无奈之下,只好从原来做机群的组和做嵌入式操作系统的组中调了几个操作系统高手过来,事情马上有了起色。比如,我们要在C模拟器上运行操作系统,需要对操作系统内核进行裁剪和修改(如去掉一些与主板配置紧密相关的初始化),这种事情没有对操作系统的深入把握是不会做的。后来,又从其他地方得到一些人员补充(我现在体会到电影上打仗时指挥员为什么非常重视预备队)。现在,我们组已经有了三、五十人的规模,兵不在多在于精,这些人全是年轻的枪手,素质很高,又很玩命。就我目前所做的事情来说,计算所几乎是“要什么人才有什么人才”。当然,以后投片现在的队伍是远远不够的。
计算所的科研环境很好,尤其是体现在后勤服务上。举几个小例子。第一个是工作展开后通宵加班多了起来,我们自己因地制宜地在一些桌子上铺上铺盖搭了几张简陋的床。当邓书记知道这种情况后,马上找人腾出一间小屋子,放了六张床,大大改善了我们加班时的休息环境。书记还让人每天为加班的人准备饼干、方便面等方便食品。第二个例子是,随着工作的不断深入,组里需要不断添置新的微机,但机器都是随用随买(因为以前没有经验,不知道要买多少机器)。对此,业务处的同志们总是全力配合,保证组里及时用上新机器。最快的一次,我在上午11:30向业务处王玉洁老师提出购机申请,下午1:30机器已经送到实验室。这在一个财务制度健全、审批严格的事业单位是很难想象的,更何况是下班时间。第三个例子是有一次我们急需一块Matrox G200显卡,但由于是几年前的产品,跑遍了中关村也没有买到。万般无奈,只得通过EMAIL向所内的部分老师紧急求助,热心的业务处于天波老师马上在网络上发布这个消息,不到一个小时,在王贞松老师的帮助下,就找到了这块显卡。这至少减掉了我们两个星期的工作量,因为如果用其它显卡,我们得自己写驱动程序。有效的后勤保障使我有时后觉得不把事情做好,对不起这些热心帮助我们的人。
我们在前一段时间的教训有两个。一是工程经验不足,主要体现在以做研究的方法来做工程,以及对任务的难度估计不足,科研力量配备不够,导致初期效率不高。幸亏后来工程经验丰富的张志敏老师的加盟大大扭转了我们以做研究的方法做工程项目的局面,提出了“后墙不倒”的目标。此外,也幸亏计算所技术储备雄厚,要什么人有什么人,使得我们得以在后期提高效率。不过,我们目前在文档管理等方面还是很存在问题的。第二个教训是对工具重视不够。现在做处理器设计,EDA工具是十分重要的。我们由于不够重视EDA工具,吃了不少亏。有一次布线布不通,只要修改一下设置就行,可惜我们都不会,折腾了一个礼拜,后来才发现。
下面我可以介绍一下Godson的技术特点。了解了这些技术特点,就可以了解为什么Godson工作在12.5MHz时就有50MHz的486的性能。Godson的流水线结构是我自己觉得比较得意的地方。设计的时候没有参考其它处理器的流水线,完全是凭感觉。Godson流水线包括了若干目前处理器设计中最先进的技术,如流水线动态调度,Tomasulo算法,寄存器重命名,猜测执行,精确例外处理,64位的浮点运算部件,CACHE技术等,并且在某些方面有所创新。流水线设计中比较困难的两个问题是例外的处理和相关的解决。首先我们把例外处理与流水线紧密地耦合在一起,在数据通路的设计中例外结果和正常结果并行,在执行过程中例外结果和正常结果不加区别,只有在指令结束阶段才对例外结果进行特殊处理。此外,我们把转移指令猜测错误作为一种特殊例外,利用例外处理的取消和保持现场精确逻辑。这样不仅可以简化设计,而且可以让转移指令后面猜测执行的指令尽可能地往下执行。我们的流水线是动态流水线,采用de-coupled结构,控制逻辑分布在每个模块之中。在流水线的控制中,“让流水线流起来”是我们设计的理念。在指令流水线中,数据相关和控制相关都会引起流水线等待,如后面指令用到前面指令的结果或后面指令是否执行由前面转移指令成功与否决定。对于因数据相关引起的等待,我们的原则是尽量推迟到不得不等的时候才等。即对于源数据未准备好的指令,指令译码和发射时并不停下来等待数据(简单的静态流水线通常在译码时停下来等待未准备好得数据,堵住了后面指令的继续执行),而是建立数据依赖关系,由功能部件通过侦听结果总线解决相关。这样数据结果一出来,等待它的指令马上可以进行运算,不用经过写回到寄存器再读出来的过程,而且前面指令的等待不会堵塞后面指令的继续执行。对于控制相关,我们也是让转移分支的指令先猜测地执行起来,到实在不得不停下来时才等待转移目标的确定。如果转移猜测成功就立即继续前进,如果转移猜测不成功,就利用例外处理的指令撤消机制恢复正确现场。
流水线设计中,“简洁、流畅”是是我们追求的目标,前者保证流水级间的控制简单,延迟少,后者保证流水线的高性能。在我们联调成功后到现在,已经对流水线进行了4次较大调整,每次都更加简洁、流畅。我想在正式投片前还会有几次调整。
此外,Godson的浮点运算部件流水线设计也有自己的特点。Godson体系结构的另外一个特点是结构灵活,模块化好,可以根据不同的需求对功能部件进行任意裁剪以满足不同的应用。由于Godson的流水线采用de-coupled结构,控制逻辑分布在每个模块之中。增加或减少功能模块对其它部分没什么影响。如对于某些嵌入式应用,不需浮点部件,只要去掉浮点ALU、浮点乘法、以及浮点寄存器模块,不用对其它模块做任何修改。
系统安全设计也是Godson的一个重要特点。Godson系统除了实现MIPS系统要求的安全机制外,还针对网络攻击实现了一种新的访问限制机制。缓冲区溢出是一种非常普遍、非常危险的漏洞,是目前大多数网络攻击所采取的办法。在各种操作系统、应用软件中广泛存在。利用缓冲区溢出攻击,可以导致程序运行失败、系统死机、重新启动等后果。更为严重的是,可以利用它执行非授权指令,甚至可以取得系统特权,进而进行各种非法操作。Godson通过允许操作系统对堆栈段的取指进行限制,从而有效地防范利用缓冲区溢出进行的攻击。
当然,Godson在目前设计上还存在一些缺陷,主要是对CACHE重视不够。目前的设计只有4KB的指令CACHE和4KB的数据CACHE,都是直接相联(这与FPGA容量有关,目前的设计已经使用了150万门的FPGA的85%-90%的面积)。在性能测试时发现对访存要求较高的程序
Godson的性能不够理想。如当Godson运行在12.5MHz时,对于访存不敏感的程序,100MHZ主频的IDT 64474 CPU(R4000内核)的性能是Godson的3-5倍,但对于访存敏感的程序,IDT64474 的性能是Godson的6-8倍。IDT 64474有16KB的指令CACHE和16KB的数据CACHE,都是二路组相联,无论是CACHE容量和组织方式都比Godson强。在投片前一定要对CACHE部分进行改进.
关于Godson的未来发展,我们有一个雄心勃勃的计划。第一步是在目前设计的基础上经过优化后进行标准单元的投片,主频在200-300MHz左右,争取2002年完成,用于个人工作站/瘦客户端PC及电子政务等。第二步是设计双发射64位的结构(目前为单发射、定点32位、浮点64位),投片主频为500MHz左右,争取2003-2004年完成。用于高性能服务器,也可以搭成机群做高性能计算。第三步争取在处理器间并行上有所突破,设计基于Crossbar的大SMP结点,每个SMP结点16-64个CPU,用于高性能计算。在做处理器设计之前,我们做了近十年的共享存储系统结构研究,但受囿于CPU和操作系统,只能纸上谈兵,顶多做做软件实现。现在自己做CPU,可以为所欲为,好象被束缚的手脚一下子得到了自由。如果能够把我们在共享存储并行系统方面十来年的积累做到实用系统中去,简直是爽呆。如果可能的话,争取实现串行程序采用多线程技术自动并行化,这需要编译、操作系统及系统结构的全面突破。
没做多少事,写了这么多,是不是有点过分。写这种东西其实比写程序还累。
“C模拟器设计”中的C模拟器是个什么东西?高手们说下大致原理和工作过程,或者在那能找到答案?提供书籍名称也行。
作者: caopengly 时间: 2007-9-11 12:21
““C模拟器设计”中的C模拟器是个什么东西?高手们说下大致原理和工作过程,或者在那能找到答案?”
我个人认为:
就是让上位机的c程序来模拟cpu运行,模拟读指令,译码,执行的过程。
这是用verilog实现的前一步,如果这一步能够做出来,说明从功能上说是能实现的cpu功能的,然后是verilog实现的问题了。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) |
Powered by Discuz! 7.0.0 |