楼主: ldjdkj
1673 2

[创新发展] 案例:国产CPU龙芯3号开发历程 (二) [推广有奖]

  • 5关注
  • 32粉丝

贵宾

学术权威

28%

还不是VIP/贵宾

-

威望
2
论坛币
205075 个
通用积分
11166.9842
学术水平
1433 点
热心指数
1459 点
信用等级
1346 点
经验
156756 点
帖子
5318
精华
1
在线时间
3509 小时
注册时间
2014-10-23
最后登录
2024-5-4

楼主
ldjdkj 在职认证  发表于 2016-10-27 18:40:40 |只看作者 |坛友微信交流群|倒序 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
接上一:

为了从根本上消除该问题和其它一些小问题,我们对3B1500进行改版。改版时根据生产厂家的建议,工艺从32nm迁移到28nm,于2013年4月底流片,10月底收到样片,功能正常,但成品率极低,与厂家确认后明确是厂家生产问题。厂家又建议我们恢复到32nm工艺流片,并以某种方式补偿此次流片费用,于是又再次改版,于2015年1月底流片,2015年6月下旬收到样片,测试后功能正常,而且成品率正常,目前已经量产。

龙芯3B的研制过程真是一波三折。出现过龙芯从课题组向公司转型过程中的管理问题,生产厂家引起的问题,多核互相访问引起的死锁问题,处理器核Cache一致性引起的问题。在解决了一个个问题后总算取得了成功。

但龙芯3B的主要问题不在研制过程中,而是刚开始定方向就出了很大偏差。主要问题在于虽然龙芯团队从课题组转型成为了公司,但龙芯3B的研发还保持着学院派导向,过度追求多核以及浮点峰值性能的单一指标,通用处理性能不足,满足不了在“十一五”期间展开的自主CPU应用和试点对性能的要求。

龙芯3B在学术上是成功的,3B1500峰值浮点运算速度达到160GFLOPS,现在拿出来也不丢人,当时在国际上算高的。论文分别被国际顶级会议Hotchips和ISSCC录用,龙芯3B的报告引起了很大反响,美国IT Times对此专门进行了报道,MIT也发表评论,认为龙芯3B的浮点性能超过了同期的Intel处理器。但3B1500的通用处理能力比3A1000提高得不多,通过每个处理器核增加128KB的私有二级Cache以及主频及内存频率的提高,3B1500的单核通用处理性能比3A1000提高了30%-50%,但与国外主流产品的性能差距还很大。

SPEC CPU是一组国际上公认的测试通用处理器性能的测试程序。2006年SPEC CPU2006刚出来时,厂家公布的SUN的blade服务器单核性能为2-4分左右,高端Pentium IV的分值是10来分。2006-2013年是国外主流处理器通用处理性能高速增长期,在主频不怎么提高的基础上,通过微结构优化,厂家公布的SPEC CPU2006单核分值提高到50分左右,平均提高了5倍以上。当然厂家公布的分值都是经过精雕细刻编译优化(包括使用向量和多核加速)的,一般我们使用gcc编译出来的单核分值需要把这些厂家自己公布的分值打7折左右,大致是20-40分。2013年以后,国际单核性能的提高趋缓,每代提升5%就不错,已经到了天花板。SPEC CPU先后发展了1989、1992、1995、2000、2006五个版本,开始时每三年更新一版,后来五、六年更新一版,到2006年后就没有更新。从中也可以看出,CPU的通用处理性能到2010年前后已经到了天花板,运行SPEC CPU2006的时间就够长了。

“十一五”期间,多核CPU成为国际学术界的热点研究方向。因此,学院派思想主导的国内CPU在“十一五”期间都放松了单核性能的提高,而是转做多核,而且核数做得比国外还多。2006年研制成功的龙芯2E的通用处理性能与市场上主流X86处理器差1-2倍(与龙芯2E微结构相同的龙芯3A1000在900MHz时SPEC CPU2006单核分值为定点2.4分,浮点2.3分),但龙芯CPU的单核性能从2006年的龙芯2E到2013年的龙芯3B1500只提高了50%左右;而在此期间市场主流X86处理器的单核通用处理性能提高了5倍以上。也就是说,“十一五”期间我国CPU通用处理性能被国外大幅度拉开了距离,从相差1-2倍到相差一个数量级。

技术上的差距体现在市场上就是不好用。“十一五”期间,国家有关部门在涉及国家安全的领域开始了自主CPU应用试点,大量的应用往基于自主CPU和操作系统的计算机上移植。在2011-2013年的三年中,以嵌入式计算机为代表的装备类应用取得了不少成功;而以通用PC和服务器为代表的信息化类应用虽然通过基础软硬件的磨合优化取得了较大进展,但由于自主CPU的性能基础与国外产品有数量级差距,在很多应用中遭遇性能瓶颈。

由于自主CPU的通用处理性能不够,2013年起,“核高基”基本上放弃了CPU自主研发路线,转而支持引进国外CPU技术的路线。以IBM、AMD、威盛、ARM为代表的国外/境外CPU趁虚而入,纷纷寻求与国内企业合资或开放技术授权的方式,把原来的产品摇身一变成为自主CPU(操作系统和数据库也有类似情况)。这使得主要靠国家支持进行研发的龙芯CPU陷入了巨大困境。

虽然当时对“核高基”支持引进CPU不满,但究其原因,还是我们自己在“十一五”“核高基”支持的龙芯3B上没有摆脱学院派的惯性,走了弯路,满足不了当时迫切的自主信息化市场需求。问题还是出在我们自己身上。“十五”期间负责863计划的科技部高新司领导在龙芯2C没有达到预期技术指标,龙芯2E立项专家提出19条反对意见的情况下作为非共识项目支持龙芯2E的研发,给了我们一次改进的机会。而这次,机会没有了,需要我们自己想办法。

痛定思痛,知耻后勇。2013年5月,龙芯公司结合市场需求对CPU的研发路线进行了认真调整。一是龙芯3号系列多核CPU不追求核的个数而是大幅度提高单核性能,放弃高性能机专用CPU的研制,暂停16核处理器研制,重点把双核、四核处理器做精做透。二是龙芯2号系列SOC芯片不追求“大而全”的复杂度,而是重视结合用户需求定义芯片,以及SOC片内互连的通畅性。三是龙芯1号系列结合特定应用,如宇航、石油、流量表等研制专用芯片,专用芯片产业链短,容易形成技术优势并快速形成销售(如面向宇航应用的龙芯1E和1F已经为龙芯公司带来持续稳定的销售收入)。种瓜得瓜、种豆得豆。从2014年下半年开始,龙芯研发和市场结合的作用开始显现,2014年龙芯公司销售收入比2013年增长51%;2015年在2014年基础上再增长57%,为龙芯公司的可持续发展奠定了良好的基础。龙芯公司逐渐摆脱国家项目的支持,能够主要通过市场销售养活团队和产品研发。

基于上述对龙芯CPU研发路线的调整,2013年5月,我们暂停了已经完成主要设计的16核龙芯3C处理器流片,开始四核3A2000处理器的研发。核多了没有用,单核必须要强。就像体育比赛,靠人多取胜的只有拔河(相当于计算机中的高性能计算机),绝大多数项目要靠运动员个人素质。3A2000主要目标就是大幅度提高单核性能,使单核通用处理器性能提高3倍以上。当时龙芯公司承担了基于某境内40nm LL工艺的高可靠嵌入式CPU研制项目,虽然工艺性能不高,甚至比我们原来用的65nm GP工艺还慢30%,但至少流片的钱有地方出了,我们就基于该工艺研制3A2000。当时还有一个重要决定就是保持3A2000与3A1000的引脚兼容,这样龙芯客户中基于3A1000研制的已有上百种板卡解决方案可以直接通过换焊3A2000来提高性能。基于境内工艺、通过微结构优化大幅提升性能以及与3A1000引脚兼容说明3A2000开始摆脱了学院派惯性,走出结合用户需求研发CPU的关键一步。

2013年初,在龙芯最困难的时候,中科院计算所孙凝晖所长在所里资金本身就很困难的情况下,拿出500万元支持龙芯3A2000处理器核GS464E的前期研发。虽然与研制3A2000所需要的上亿元经费相比,500万显得很少,但在龙芯最困难的时候得到来自龙芯“娘家”计算所的支持,觉得非常温暖。

事实上2012年初龙芯公司在香山饭店召开年度规划会时就决定对GS464处理器核(龙芯2F、2H、3A1000、3B1000、3B1500等都基于GS464微结构)进行优化,形成新一代龙芯微结构GS464E。GS464处理器核一直是我自己维护,其中有一半左右代码(包括流水线控制部分如寄存器重命名、乱序发射队列、寄存器堆控制、重排序缓存,以及访存部分如地址运算、一级数据Cache、TLB、访存失效队列、最后一级共享Cache)是我自己写的,2012年上半年我在机房中花了整整两周时间为GS464升级为GS464E打好必要的基础(我当时说要把马的架子变成骆驼的架子,先要把一个访存部件升级为两个访存部件)后,把维护和升级处理器核的任务移交给汪文祥和吴瑞阳。这很可能是我最后一次有机会写龙芯CPU的代码了。现在回忆起来,能够在机房中心无旁骛地写代码真是莫大的幸福,有无比的成就感,但我不能让自己成为龙芯CPU发展的瓶颈。而且经过多年实践的锻炼,龙芯的年轻人已经充分地成长起来了。龙芯3A1000、3B1000和3B1500都是我自己当技术负责人,3A2000开始由年轻人担任芯片的技术负责人,3A2000的技术负责人是王焕东,3A3000的技术负责人是杨梁。承担国家项目也主要由年轻人作为项目负责人。

GS464E对GS464的改造是全方位的。在指令系统方面,我们在MIPS64 R3的基础上进行了扩展(MIPS指令系统的授权允许用户进行扩展)并形成龙芯指令系统LoongISA,除增加一些基础指令外,还有支持云计算的虚拟化扩展,以及加速X86和ARM二进制翻译的扩展。在微结构方面,除了前述的把访存功能部件从一个增加到两个外,还把Cache行大小从256位增加到512位,最后一级Cache从四路组相联提高到16路组相联,增加了多个层次的预取,把重排序缓存ROB从64项增加到128项,重命名寄存器个数从64个增加到128个,乱序发射队列由原来的定点和浮点各16项增加到定点16项(3A3000增加到32项)、浮点24项(3A3000增加到32项)、访存32项,重新构建了整个转移猜测模块。此外,用大量的测试程序对微结构进行了细节的磨合,局部优化达到三十多处。3A2000的多核互连模块和内存控制器也进行了性能优化。尤其是内存控制器的优化,可以大幅度提高访存频率和效率。2014年7月,RTL代码冻结。

3A2000除了使用流片厂家提供的标准单元库、MemoryCompiler生成的RAM、低速IO单元以及efuse单元以外,包括锁相环、HT PHY、DDR2/3 PHY、多端口寄存器堆、CAM、温度传感器等宏单元都是我们自己定制的,没有使用任何第三方的宏单元模块。因此,全定制工作量也不小。

3A2000的物理设计采取了很多优化措施,初步建立起一套在主流EDA工具基础上的In-House的流程和工具,包括统一数据库支撑的设计平台,基于触发器聚类的定制时钟设计,深度层次化设计等。这套In-House的流程和工具比纯粹依赖EDA工具的单元级设计流程提升性能20%左右。

2014年11月初,3A2000交付流片。这次流片共有龙芯的三款芯片一起拼了个全掩膜。由于流片前的功能验证非常充分,尤其是在3A2000验证过程中,王朋宇负责的验证组完善了龙芯指令级随机验证环境,从原来只覆盖用户态指令到覆盖核心态指令以及例外处理,大大提高了3A2000的功能验证覆盖率。物理设计和检查也精雕细刻,我们对3A2000流片成功很有信心。

经过几个月的焦急等待,2015年4月10日晚饭后,终于拿到了3A2000的盲封样片,连夜进行调试,到第二天早上三点多成功运行操作系统。随后的测试一切顺利:在运行了包括SPEC CPU2000、SPEC CPU2006、Unixbench等大型程序后,功能未见异常;主频可以达到1GHz;SPEC CPU2006单核分值达到6-7分,是3A1000的3倍左右,尤其是以STREAM测试表征的访存带宽大幅度从3A1000的不到1GB/s上升到10GB/s,与市场主流处理器基本持平。在基于龙芯3A2000的桌面终端上进行各种办公应用,觉得流畅多了。有部分芯片在较高电压下运行不稳定,当时并没有引起重视。

2015年5月,经过ATE测试台成测的一批芯片回来测试,发现功能测试结果与ATE测试台测试结果不一致,即部分芯片通过ATE测试后功能还是不正常,这是3A2000完成产品化的严重障碍(即通过测试后提供给客户的芯片中有一部分可能是坏的)。通过调整ATE向量,ATE测试与功能测试的一致性增强,但还有部分芯片不完全一致,总体感觉N管偏快的工艺稳定性明显增强。为了更好地分析原因,6月初请厂家把第一次流片中6个hold的晶圆调整工艺角开始生产。

经过继续深入的分析,发现两个明显现象:一是N管偏快的芯片稳定性好很多,ATE测试和功能测试比较一致;二是通过改善主板电源稳定性,有利于芯片稳定。虽然机理不是很清楚,但在当时巨大的市场压力下(采用引进技术的CPU到处攻击龙芯性能不行,要求有关自主化应用放弃龙芯,使用引进技术的CPU),决定结合已有的现象进行改版流片,一是更换定制的电容更大的DECAP替换厂家提供的DECAP以抑制动态压降(定制的DECAP电容比厂家提供的DECAP电容提高一个数量级),这会带来抗ESD能力下降的风险,但我们经过分析觉得风险不大(事后流片回来进行了ESD实验,抗2000V人体模型没问题);二是根据负责全定制工作的钟石强的建议调整了定制寄存器堆的字线和位线配合时序(增加了20ps左右的裕量),因为仿真发现N管偏快有利于定制的寄存器堆字线和位线时序配合,与实验现象符合。3A2000的第一次改版只改了6层掩膜板,于9月初完成改版设计并交付流片。

2015年11月初,6个调整工艺角的芯片回来,经过大量的ATE测试和功能测试,确定寄存器堆是部分芯片功能不稳定的主要原因。ATE测试发现不同工艺角芯片的寄存器堆MBIST测试在1.30V到1.50V的不同电压下出错,功能测试出错电压则比寄存器堆低100-150mV,有较强的一致性,但机理仍不清楚。

2016年1月11日下午下班前,我跟范宝峡、苏孟豪在讨论苏孟豪通过JTAG通路(这是预留的除了正常的ATE测试外的另外一条测试通路)以Scan Collar方式测试寄存器堆没有发现错误的问题,并了解到杨旭审查版图发现写端口的位线的延迟在其它端口写相反值及读端口旁路读时是最差情况,我马上叫苏孟豪用最差情况向量通过JTAG端口进行测试,很快就复现了寄存器堆出错的问题并经过进一步分析搞清楚了寄存器堆写出错的机理:在寄存器堆写端口写入过程中,要求位线比字线先到,字线与位线之间保持必要的延迟差才能保证写入的正确性,但在位线负载大时(其它写端口写相反值及其它读端口读旁路)位线延迟变大,字位线延迟差太小,导致写寄存器堆出错。提高电压会进一步减少字线与位线的延迟差,因此更容易出错。

真是柳暗花明,困扰我们大半年的3A2000产品化问题终于搞清楚了,尤其是这说明我们在2015年9月份在机理不清楚情况下的改版是正确的。而且这个测试向量提供了一种在已有芯片中把不稳定的芯片筛选掉的办法,这是龙芯3A2000产品化过程迈出的重大一步。

2016年2月8日是春节,3A2000第一次改版的芯片在2月4日完成封装,为了在春节前完成3A2000第一次改版芯片测试,孙凯军专门到封装厂等待封装好的芯片,拿到芯片时已经是下午6点多,直飞北京的飞机已经没了,半夜到上海倒了一次飞机,5日上午到北京,马上安排测试,确实寄存器堆的问题大大缓解了,稳定性大幅度提高。春节上班后我们又组织攻关解决了一个软硬件磨合的问题,到2016年2月22日,完成3A2000的初步产品化工作,开始对外销售芯片(原来一直只能以样片方式赠送给客户试用)。


2016年3月中旬,3A2000进行再次改版,这次改版是全掩膜改版(原来是三个芯片拼了个全掩膜),除了进一步增加寄存器堆字线和位线的延迟差以外,还修改了其它几个小问题。2016年7月下旬,芯片回来后经测试,原来的定制模块问题不复存在,芯片功能正常,而且ATE测试与功能测试一致性好。目前3A2000已经进入量产阶段,其中经过测试支持通过直连形成多路服务器的芯片成为3B2000。

在随后的应用推广中,3A2000与3A1000保持引脚兼容以及软件兼容体现出巨大优越性,很多客户直接在原来3A1000的主板上换焊3A2000芯片,只需通过简单的BIOS和内核调整,就可以大幅度提升性能。龙芯的整机厂家迅速升级了部分原来基于龙芯3A1000的计算机并进行了应用试点。在2016年6月进行的某办公应用试点验收会上,有关部门和专家认为,基于3A2000的计算机使自主化办公应用从“基本可用/可用”提高到“基本好用/好用”。


龙芯3A3000是在2015年5月临时安排研制的。2015年5月初,我去常熟跟龙芯梦兰公司的张福新、吴少刚等人讨论3A2000整机解决方案的研发。大家对3A2000大幅度提升性能都很高兴,大大增强了信心。同时张福新他们提出,由于我们使用境内的40nm低速工艺,而引进ARM和威盛的CPU都使用境外28nm高速工艺,虽然3A2000在微结构上已经超过了引进的ARM和威盛的CPU,由于主频偏低,3A2000在综合性能上还是吃亏(1.0GHz的3A2000处理器核SPECCPU2006分值为6-7分,而1.6-2.0GHz的ARM和威盛处理器核SPEC CPU2006分值达到8-10分),建议龙芯也尽快使用境外工艺提升频率。经过认真讨论,我们认为如果我们采用Intel的Tick-Tock(嘀嗒)研发策略,应该可以很快推出主频1.5GHz以上,综合性能超过2GHz的ARM和威盛的处理器。Tick指的是结构不变,通过工艺优化提升性能;Tock指的是工艺不变,通过结构优化提升性能。Tick-Tock策略可以把两个芯片流水推进,加快进度的同时降低技术风险。

3A2000主要是通过结构优化提升性能,属于Tock;3A3000则直接采用3A2000的源代码,通过工艺优化提升性能,同时继续保持与3A2000的引脚兼容,属于Tick。因此,3A3000在功能上没有什么风险,主要是工艺移植的风险。当然,3A3000在微结构上还是做了适度增强:一是结合3A2000的性能瓶颈分析把定点/浮点发射队列从16/24项增加到32/32项,二是把最后一级Cache从4MB提高到8MB。到6月底,完成了RTL源代码修改,随后全面展开物理设计。

3A3000物理设计中继续需要定制包括HT-PHY、DDR-PHY、锁相环、多端口寄存器堆、CAM等全定制模块。由于3A2000中的全定制模块出过问题,3A3000的全定制模块检查特别严格。除了加强设计仿真外,还让原龙芯全定制组的组长杨旭(现在是龙芯中科公司全面负责生产的副总)重新披挂上阵,进行背靠背的复查。紧赶慢赶,于2016年1月底完成了全定制设计的签核和复查评审。


3A3000物理设计中另一个难点是时序收敛。3A3000使用的28nm FD SOI工艺晶体管确实比3A2000使用的40nm LL快60%左右,但连线延迟大,而且互相干扰也大,废了很多周折。杨梁率领物理组在2016年春节期间也没有休息,终于在2016年2月中旬交付流片。

2016年6月端午假期期间,龙芯3A3000完成晶圆生产并进行了中测,刚开始比较顺利,已经调试完成大部分向量,只是测试我们自己研制的锁相环时发现锁相环输出时钟有不稳定现象。6月中旬拿到盲封芯片,测试发现只有在低于0.8V的低电压下芯片才能正常工作,经过两周的分析发现还是寄存器堆的问题,这次是读出电路的问题,读电路译码时产生了毛刺,把别的字的内容耦合到读出字内容来了。好在该问题只需要修改一层掩模版。(未完,接下三)


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:CPU COMPILE memory Stream collar 开发 处理器 学院派 成品率 通用

已有 1 人评分论坛币 收起 理由
1993110 + 5 精彩帖子

总评分: 论坛币 + 5   查看全部评分

沙发
1993110 发表于 2016-10-29 15:47:19 |只看作者 |坛友微信交流群

使用道具

藤椅
ldjdkj 在职认证  发表于 2016-10-29 16:16:59 |只看作者 |坛友微信交流群
1993110 发表于 2016-10-29 15:47
这个案例与此前的沈阳机床厂i5项目的案例有一个共同点就是,即使是重大基础项目,也要紧紧抓住应用和用户的需求。这两个案例都是在研发过程中通过阶段成果产生的效益进而支持下一步的研究进展。
已有 1 人评分论坛币 收起 理由
1993110 + 5 精彩帖子

总评分: 论坛币 + 5   查看全部评分

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加JingGuanBbs
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-26 23:30