|龙芯之路虽辛苦 吹尽狂沙始到金( 三 )


第四部分:龙芯长期坚持芯片中的核心技术自己掌握
在“十一五”期间 , 多核CPU成为国际学术界的热点研究方向 。学院派思想主导的国内CPU在“十一五”期间都放松了单核性能的提高 , 而是转做多核 , 而且核数做得比国外还多 。这直接导致龙芯的单核通用性能提升只有50% 。
相比之下 , 在此期间市场主流X86处理器的单核通用处理性能提高了5倍以上 。也就是说 , “十一五”期间我国CPU通用处理性能被国外大幅度拉开 。
而要弥补这种差距 , 就必须重视单核通用性能 , 设计新一代CPU核 。此前 , 龙芯2F、2H、3A1000、3B1000、3B1500等都基于GS464微结构 。而龙芯3A2000则采用了新一代内核GS464E 。
不过 , 自主研发之路颇为艰难 , 龙芯GS464E让龙芯技术团队又爱又恨 。
GS464E虽然只比GS464多了一个字母E , 但对GS464的改造是全方位的 。
在指令系统方面 , 龙芯CPU在MIPS指令集上进行扩充 , 增加了MIPS中不具备但X86和ARM具备的对二进制翻译影响很大的核心功能 , 形成了龙芯指令系统LoongISA 。
在微结构方面 , 除了把访存功能部件从一个增加到两个外 , 还把Cache行大小从256位增加到512位 , 最后一级Cache从四路组相联提高到16路组相联 , 增加了多个层次的预取 , 把重排序缓存ROB从64项增加到128项 , 重命名寄存器个数从64个增加到128个 , 乱序发射队列由原来的定点和浮点各16项增加到定点16项、浮点24项、访存32项 , 重新构建了整个转移猜测模块等等 。
此外 , 龙芯还用大量的测试程序对微结构进行了细节的磨合 , 局部优化达到三十多处 。龙芯3A2000的多核互连模块和内存控制器也进行了性能优化 。尤其是内存控制器的优化 , 可以大幅度提高访存频率和效率 。
龙芯3A2000的物理设计采取了很多优化措施 , 初步建立起一套在主流EDA工具基础上的In-House的流程和工具 , 包括统一数据库支撑的设计平台 , 基于触发器聚类的定制时钟设计 , 深度层次化设计等 。这套In-House的流程和工具比纯粹依赖EDA工具的单元级设计流程提升性能20%左右 。
2014年11月初 , 3A2000交付流片 。2015年4月10日 , 龙芯终于拿到了3A2000的盲封样片 , 连夜进行调试 , 到第二天早上三点多成功运行操作系统 。随后的测试一切顺利:在运行了包括SPEC CPU2000、SPEC CPU2006、Unixbench等大型程序后 , 功能未见异常;主频可以达到1GHz;SPEC CPU2006单核分值达到6-7分 , 是3A1000的3倍左右 , 尤其是以STREAM测试表征的访存带宽大幅度从3A1000的不到1GB/s上升到10GB/s , 与市场主流处理器基本持平 。在基于龙芯3A2000的桌面终端上进行各种办公应用 , 觉得流畅了许多 。
不过 , 最早批次的3A2000有部分芯片在较高电压下运行不稳定 , 之后经过了测试 , 发现部分芯片通过ATE测试后功能还是不正常 。为了解决这个问题 , 龙芯耗费1年多时间进行排查 , 终于解决在2016年初解决了问题 。2016年7月 , 最终版的3A2000完成流片 , 芯片回来后经测试 , 原来的定制模块问题不复存在 , 芯片功能正常 , 而且ATE测试与功能测试一致性好 。
龙芯3A2000最大的特点就是高度自主化——除了使用流片厂家提供的标准单元库、Memory Compiler生成的RAM、低速IO单元以及efuse单元以外 , 包括锁相环、HT PHY、DDR2/3 PHY、多端口寄存器堆、CAM、温度传感器等宏单元都是龙芯自己定制的 , 没有使用任何第三方的宏单元模块 。
为何龙芯长期坚持芯片中的核心技术自己掌握呢?
不是吃饱了饭没事干 , 而是龙芯使用别人的IP吃过亏 。
2003年龙芯刚开始研制龙芯2号时委托一个很有名的EDA和设计服务公司定制一个3写6读寄存器堆 , 在交付流片后发现其中的电源地严重缺失 , 跟他们交涉时他们说这个不会有问题 , 导致龙芯2号系列的第一款芯片龙芯2A流片失败 , 后来龙芯自己定制了该寄存器堆才使龙芯2B流片成功 。龙芯3A1000刚开始研制时曾经使用过商业DDR2/3 PHY , 龙芯团队在检查中发现了很多问题 , 但厂家觉得没有问题不愿意修改 , 后来下决心自己做 , 从3B1500开始自主设计内存控制器 。


推荐阅读