芯片设计类似于画一张大楼的施工图纸。只不过,呈现这张图纸,用的不是线条,而是一种叫做Chisel的硬件语言。
“如何评价中国科学院大学(以下简称国科大)‘一生一芯’计划?”在某问答网站上,这个问题获得了超千万的关注热度。
五位本科生,主导完成了一款64位RISC-V处理器SoC芯片设计并实现流片。这款芯片,被称作他们的 “最硬核毕业证书”。
和芯片有关的新闻,总能牵动国人的心。而当主角成为几个“带芯毕业”二十出头的年轻人,就更加引人好奇。网上的声音多种多样,有人鼓掌,有人唱衰,有人将它和中国芯片产业联系起来,写了洋洋洒洒长篇分析。
如今,五位学生已经开始了新的工作。他们正在深圳,参与新的更高性能芯片的设计。
8月中旬,他们还多了个新身份——第二期“一生一芯”计划的助教。
“一生一芯”:本科生做芯片不是天方夜谭
芯片是今年五月底快递到王华强家的。
它大概一元硬币大小,上面刻着 “COOSCA-01”和“一生一芯”的字样,还有国科大的Logo。
COOSCA是一个内部代号,是国科大计算机科学与技术学院的三门课程——计算机组成原理、操作系统和计算机架构的缩写。“一生一芯”则是计划的名字,意思是让每位本科生带着自己设计的处理器芯片毕业。
受新冠肺炎疫情影响,今年国科大的本科毕业答辩在线上进行。王华强代表“一生一芯”团队,向答辩委员会的老师远程展示了芯片。他把芯片装上测试板,用串口线将测试板与电脑连接,打开电脑上的终端软件,按下测试板上的复位键,运行了几个简单的程序——Linux系统跑起来了。
然而,去年夏天,“一生一芯”计划参与者张紫飞第一次听到该计划时的第一反应却是“天方夜谭吧”。让几个本科生用几个月时间,设计出一枚能够运行Linux这样复杂操作系统的芯片,可能吗?
“一生一芯”计划负责人、国科大计算机学院教授、中国科学院计算所先进计算机系统研究中心主任包云岗则觉得,在开源时代,将芯片设计的门槛降下来,是可能的。
包云岗对2008年至2017年计算机体系结构国际顶级会议论文第一作者做过分析,只有4%来自中国的高校和科研院所。中国的处理器芯片设计界,缺人。
开放指令集RISC-V与芯片敏捷开发语言Chisel,能使开发效率数量级提升。RISC-V,正是包云岗近几年的研究重心。这一指令集可以自由地用于任何目的,允许任何人设计、制造和销售RISC-V芯片和软件。
2018年时,包云岗就隐约意识到,RISC-V对人才培养会有帮助。2019年5月,华为被美国商务部列入实体名单,人才危局必须尽快找到出路。包云岗迅速将他模糊的想法细化:让学生学习并实践芯片敏捷设计方法,参与芯片设计实现,通过大学流片计划完成芯片制造。
如果学生能带着他们自己设计的芯片实物毕业,这会是最特别的毕业纪念。
2019年8月,“一生一芯”计划正式启动。包云岗将之称为一次教学实践。国科大校领导认为,它会掀起本科教学改革的新篇章。
五位参与的学生是金越、王华强、王凯帆、张林隽和张紫飞,他们都是国科大计算机科学与技术学院2016级本科生,那时也都已通过了中国科学院计算技术研究所的保研夏令营,成为首批吃螃蟹的人。
在王华强看来,如果能用自己做的芯片运行自己写的操作系统,“很浪漫”。
计算机体系结构是一个古老但依然生机勃勃的领域。“我们现在用的很多东西都是很多年前的成果。随着科技的发展和国内外形势的变化,我个人认为,在体系结构上应该还有广阔的探索空间。”王华强喜欢动手实操。就算做出来的只是个玩具,自己亲手打磨的东西,还是不一样。
在热闹的计算机行业中,这些偏好体系结构的学生,想找到那些更坚固的东西,抓住,并且坚持下去。
踩坑、挖坑,再从坑里爬出来
其实,在学生们面前的,是一条未有人走过的路。
难度究竟如何,耗时需要多久,可能会有什么坑……通通都是未知数。没有导航,他们需要自己打怪升级,自己试错尝试。
当然,他们也并非是在白纸上作画。
教师团队已经制定了总体方案,确定了技术路线,选择好了基础平台,搭建了开发环境,也选定了流片工艺和班车。五位学生真正动手之前,一支实力强大的教师团队,为学生的乘风破浪,做好了保驾护航的准备。
做芯片,其实分为前端和后端。前端主要是做设计,用数字电路的方式实现处理器的功能;后端则是用物理元件来实现这些设计。
“要说芯片都是我们做的,并不准确。其实我们只是做了前端的逻辑设计部分。”王凯帆强调。
他尝试用最通俗的语言向科技日报记者解释设计芯片是怎么一回事——类似于画一张大楼的施工图纸。只不过,呈现这张图纸,用的不是线条,而是一种叫做Chisel的硬件语言。
此前,包云岗团队中的博士生余子濠为南京大学开发了一款教学用RISC-V处理器,“一生一芯”计划的学生要在此基础上进行改进,把师兄搭建的房子,改建得更舒服、更亮堂。
包云岗说,在实际产品研发和科研工作中,也往往不是从头开始,更多是在已有基础上,增加新功能,提高性能。“这培养的是学生‘理解—消化—创新’的能力。”
大家采用了当下流行的“敏捷开发”模式:每人负责一个或几个模块,齐头并进,多线推进,然后合龙。
“一生一芯”计划的目标很明确:在芯片上运行Linux系统,支持基本的输入输出设备。
先解决“能不能”“对不对”的问题,再来看“快不快”“好不好”。
对新手施工设计团队来说,他们盖的第一栋房子,要保证的是屹立不倒。“要是哪面墙放错了地方,或者墙体本身设计的承重强度不够,整栋楼也就塌了。”王凯帆说。
从2019年8月正式动手设计,到12月中旬交付设计图纸,五人组踩过坑,给别人挖过坑,也挣扎着从坑里爬出来过;他们曾熬夜和不知躲在哪里的错误死磕,还要对抗可能拖延队友进度的焦虑。
团队成员金越负责的是片上系统。除了中央处理器,在系统内还有五个控制器来实现具体功能。“就像大脑需要控制四肢让人体运动一样。”金越说。
这些控制器的代码是由开源社区提供的,但团队并不清楚这些控制器是否适合他们设计的这款芯片。金越需要编写驱动软件,测试外设控制器是否设置正确,能否正常工作。
“要是出现问题就很麻烦了。到底是我的软件写错了,还是外设控制器本身有问题?如果是外设控制器有问题,到底是哪个有问题?”变量太多,排列组合下来,测试复杂得让人头疼。
“做验证的那几天,几乎没怎么睡过觉。”金越半夜对着电脑,查手册,查代码,查波形,怀着点“我就不信邪”的不忿:“我一定要把这个东西弄出来。”
导师团队可以为迷茫的学生指出大概的方向,但这个方向上会碰到什么,要上山还是要过河,还是得靠学生自己尝试。
寻找问题究竟出在哪,是几乎每个计划参与者都会提到的“痛苦”经历。王华强说,这就是一个“按下葫芦起了瓢”的过程。
作为团队唯一的女将,张林隽负责的部分是预取器。你进入了一间图书馆,想找到一本书。靠你最近的书架,能放的书最少;而更深处的书架,放的书更多,但你走过去的耗时也长。预取器好比那位了解你喜好的图书管理员,他提前将他认为你会拿的书放在离你最近的书架,节省你的查找时间。
“在实现这个功能的时候,我想当然地认为,预取器应该放在L1 Cache也就是一级缓存内。”一级缓存,相当于那个离你更近的但是容量更少的书架。但奇怪的是,加入预取器后,芯片的性能反而受到了影响,芯片的信息处理速度变慢了。
她花了一个月的时间来找问题,一个一个排查、修改和调试。后来,张林隽被提醒说,可能是预取器放置的位置不对。“哎,很崩溃,之前写的东西就没用了,又要重来。”将预取器挪到二级缓存后,困扰她一个月的问题终于消失了。
在真正动手之前,没人想过,问题竟然会在这等着他们。
学生们在总结时写道,课程作业就像直接给人采摘的果园,“一生一芯”计划却是给一片荒地和几棵树苗,从开垦种植到施肥都要自己动手,并且还不知道这样能不能结出果实。“不知为何,从0开始种出的果实好像要更甜一些。”他们说。
“我们只是知道了从山底到半山腰的路怎么走”
2019年12月,这款芯片的设计版图正式提交,基于中芯国际110nm工艺完成投片。
对五位学生来说,他们的工作也暂时告一段落。接下来的重心,是完成以芯片为基础的毕业设计。
正式流片之前,团队已经在模拟机上反复测试过多次。但仍然没人能打包票,芯片就一定能实现预期的功能。
平时上课或者比赛,学生也需要从零开始完成一次芯片设计。但在课堂实践中,并不需要测试得太完备,只要设计出的芯片能通过老师给的几个测试点,就算成功。在“一生一芯”计划中,没有这些被预先设计好的“测试点”。你必须考虑全面,细心谨慎。
“即使测试了这么多次,你也不能说这个系统一定没有bug(缺陷),总有一些边边角角没有测试到的地方,总会有意想不到的问题。”张紫飞说。毕竟,在此前四个月的开发中,他们已经见识过各种稀奇古怪的情况。
无可否认的是,压力更大。
此前的芯片设计,更像是“纸上谈兵”,成功了固然好,失败了好像也无所谓。但是这次,投入真金白银去流片,能不能用,几个月的努力会不会打水漂,流片后就能见分晓。
这是第一期“一生一芯”计划,大家都希望能开个好头。等待的日子,他们忐忑又兴奋。
2020年4月23日,学生们从微信群里得知,他们亲手设计的处理器芯片返回了。
但这并不是终点,还需要进行测试验证。
“从底层PCB版图、内存颗粒到中间处理器设计、再到上层操作系统、应用软件,每个层次都可能出问题。哪怕一个小问题,都会造成芯片无法正常工作。”包云岗说。
这段测试经历,同样也是一波三折,甚至有点戏剧性。
芯片回来后,团队里的老师们上手测试了几颗,结果芯片真的就是块“砖”,没有任何输出。一阵忙乱后他们才发现,原来是主板上的一根电源线接错了,芯片“出师未捷身先死”,被烧坏了。
后来,又因为一个串口时钟频率设置问题,芯片性能始终不正常。折腾了一段时间,芯片才被调整到最佳状态。
6月2日,在毕业答辩现场,王华强展示了芯片的工作流程。后来,王凯帆还将国科大操作系统课程上同学们自己编写的UCAS-Core移植到了COOSCA核上,完成了用自己写的CPU运行自己写的操作系统这件“浪漫”的事。
其实,除了王华强外,其他四位同学是暑期到深圳参与新项目后,才看到自己设计的芯片的。张紫飞说:“第一次看到时就觉得,这芯片比我们想象得小啊,好像还有点简陋。”大家都笑了,他又立刻补充,“但是母不嫌儿丑嘛”。
国科大的学生将自己的母校简称为“果壳”,所以,果壳(nutshell)也就成了“一生一芯”计划首款芯片的正式名字。9月3日,王华强将代表团队向全球同行介绍“果壳”的设计,这也将是“果壳”首次在国际舞台上亮相。
“国科大学生硬核毕业证书”一度成为网上的热议话题,但被当成“大神”膜拜的几位学生,无意将这一项目做过多拔高。
“我们现在看英特尔芯片,就像刚上学时看‘一生一芯’芯片一样。毕竟这些公司积累了几十年的经验,我们现在只学到了皮毛,完全没法比。”张林隽说得坦诚。金越则打了个比方:“现在,我们只是知道了从山底到半山腰的路有多难走,还不知道从半山腰到山顶的路有多难走。”
也正是因为攀过山、爬过坡,学生们知道自己都是新兵,经验和能力上都有欠缺,还需淬炼。
他们的平均年龄,只有21.8岁。包云岗说,等他们30岁时,就可以说已经是处理器芯片和计算机系统设计领域的“老兵”了。无论他们是进入业界还是学界,创造力会得到更大的发挥和展现。“我对这批年轻人的未来充满期待。”
“一生一芯”计划瞄准的也正是未来。
国科大计算机科学与技术学院院长、中国科学院计算技术研究所所长孙凝晖指出,这个计划想帮助更多高校形成从处理器芯片设计到流片并运行操作系统的实践课程,提高我国处理器芯片设计人才培养规模,缩短人才从培养阶段到投入科研与产业一线的周期。
据包云岗介绍,参与“一生一芯”计划二期的学生增加到13位,除了国科大外,还有来自浙江大学、南京大学、西北工业大学、哈尔滨工业大学(深圳)和美国密歇根州立大学等五所高校的同学。(记者 张盖伦)