主题:【原创】我经历的中国芯 -- 可梦之
今天看到萨大的帖子提到了龙芯,又勾起我略微久远的回忆。
我初涉芯片设计的因缘比较偶然。大一下半学期有一门必修的数字电路的课程,讲课的老师姓崔,讲得不错,但是丝毫不张扬,留下的印象并不是十分深刻。但是考试成绩出来远远低于我的预期,于是就愣头愣脑闯进办公室,发现是TA把一道题目加的分数作为减的分数计算了。老师当下把所有卷子都找出来,从头校对。我临走又对我说他再校对一遍,如果有错会联系同学的。当时也就觉得这个老师真的不错,做事情很认真,当然主要是把分数给我加上去了:)
大二开学,崔老师问我想不想进实验室。虽然一般到了大三下才进实验室,但是当时学MFC学得想把微软炸了,听说他的实验室在做CPU,就图个稀罕进去了。说实话,刚进去啥也不会,于是便被放到二楼的一个小屋子里面放羊,只知道一帮人在顶层鼓捣CPU。整个一年只做了两件事情,做个工具将VHDL代码中芯片模块间连接关系图形显示,还有就是测试JBCore16的指令集。据实验室人称JBCore16是中国第一款16位通用CPU,后来的JBCore32是第一款32位通用CPU。(当时JBCore32已经做出来了,支持32/16位两套指令集,也有可能是测试JBCore32的16位指令集。)比较有趣的是告诉我们在某种情况下pop指令要写两次,第一次没作用,第二次才真正的出栈操作,这个bug就不用测试了。当初觉得这么简单的错误也能犯阿^_^ 几个小喽罗鼓捣了一番,找了几个问题,也不知道是CPU的问题,还是我们的问题:)
到了大三,终于以“元老”的身份晋级到顶层。实验室开始做SoC,我便被带我的博士师兄抓去和一个研究生师姐组成三人帮开始做系统总线到PCI总线的bridge。基本上师兄先教我们,将系统分好,师姐作AHB的控制器,我做PCI的控制器。最开始连PCI都不知道是什么,读英文规范怎么读怎么别扭,不知道在讲什么。VHDL的语法虽然早知道了,但是写起来就不是那么一回儿事。比如看到规范说master收到slave某个信号后两个周期之后要用另外一个信号响应,我咣当弄个加法器开始数数,数到二之后开始输出信号,让师兄看了啼笑皆非。花了好长时间才搞明白串行程序和并行程序的区别,有些VHDL语句是只能simulate,不能synthesis之类的基本概念。
大概半年就把第一个版本写出来了,总共一千多行,而且大部分都是管脚连接之类的语句,核心的状态机也就百十来行。当看自己熬夜半年搞出来就这么个东西,不知道是该笑还是该哭。而之后证明,自己搞出来的就是一个垃圾,最多是练练手的作用。在接下来的数月里,整个系统几乎是推倒重新设计。经过几次伤筋动骨的回炉之后,终于搞出一个逻辑上符合规范,simulate能通过的版本出来。但是,一些基本概念的缺失让每一步都异常艰难。例如当初死活不明白三态门是怎么实现的,为什么输出信号要使用它。不过到了后端验证,又发现了不少问题,我托福考前两周又被抓回去一周调bug。据师兄说我走了之后两年之内PCI还不断出bugs,让我很是自责。
也是从那时起,全国兴起了中国芯的宣传高潮,记得VIA的广告词就是“微盛中国芯”。实验室老大在课堂上多次提到,“中国芯”的概念是他先提出来的,只是工业界嗓门大。实验室的产品也从JBCore改名叫Unicore,中文叫“众志”,寓意众志成城,做最好的中国芯。
后来决定出国,在实验室就基本上是混饭吃了。一到中午,上百号学生排队很是壮观。大概也是那个时候,中科院的龙芯开始起来了。不过最开始是颇不以为意的,觉得他们采用MIPS的指令集,是没有市场的,而且最开始只是面向FPGA,比我们落后多了。不过也多是人云亦云,并不了解内情;后来有同学保研去中科院,才了解了些。当然后来龙芯迅猛发展,Unicore反而是没有几个人知道了。
虽然有些幼稚,但是那段时间是最充实的时光之一。其中的疑惑,抓狂,汗水和兴奋等,无疑是人生中最宝贵的经历。现在想想,Unicore没有持续初期的高速发展还是有一些客观原因的。
1. 做出一个东西来容易,做好一个东西难。从无到有这一步,先用VHDL写代码,然后用EDA的工具就差不多做出来了。但是优化的过程中知识和经验的不足就暴露出来了。最初AHB控制器和PCI控制器之间使用的FIFO是Synopsys的库提供的,后期想设计自己的问题就来了,AHB和PCI总线时钟频率不同,如何避免metastability的问题?我作报告的时候发现除了导师外设计组大部分人都云里雾里,当然最主要是我人生第一次报告的确是太滥了:(
2. Unicore采取的是自主知识产权的指令集,主要框架借鉴了ARM的指令集,然后加入了一些自己的指令。这样虽然不至于受制于人,但是更多问题来了:主板没有现成的要自己设计,汇编器要自己写,编译器要修改gcc,操作系统要改linux。。。问题一来,不知道是设计问题,还是后断优化问题,还是软件问题,只能设计组,EDA组,软件组,大家齐上阵找bug。而龙芯兼容MIPS的指令集,买台MIPS的机器,将龙芯换上去,直接用,啥都有了,有问题肯定是龙芯的bug。
3. 人力财力的不足。最开始只有十来个人,后来虽然有了百余人,但是又要做前端设计,又要作后端,又要作软件,人力还是远远不足的。而中科院相对要好的多,人数多,而且是专职做研究,时间更充裕。龙芯的编译器分给中科院另外一个组做,这个组本来就是作编译器的,自然做得比几个人修修补补的好得多。
4. 大学和中科院研究机构的不同。中科院大部分人是以科研为职业的,而学校里学生更关心的是学业。博士生还好些,研究生刚进去第一年熟悉一下环境,第二年做点事情就得着急忙忙得操心毕业工作的事情了。等下一批新生来了,又要花大量时间接手。而工程的东西是要靠积累的,核心的团体往往并不大。龙芯最开始的核心也就几个人,他们从头搭建起整个龙芯的框架。而中科院想尽办法将他们都留下来了,之后的优化和提高自然就得心应手。而Unicore最开始的打基础的人很多都没有留下来。毕竟谁都要养家糊口,再加上北大为了学习Stanford出台的本校博士生不能直接留校的猪头规定。而核心人离开了,后面的人就云里雾里了。
5. 大学学风的变化。最开始崔老师带着那批博士生从头学VHDL,从零开始摸索的时候,学生还是很不计回报的拼命的。而从我们这届开始,拜金主义,出国成风,很多人进入实验室根本没有踏不下心来做事情,而且私下认为,扩招之后学生的整体水平的确是不如以前了,尤其是动手能力。
虽然好长时间过去了,也偏离了这个领域。但是还是由衷的希望中国芯能够强劲起来。虽然IT行业已经不如以往那么容光,尤其是硬件行业日子比软件更见艰难,或许几十年之后芯片制造就和钢铁行业差不多了;但是我依旧认为国家应该大力扶持这个行业,毕竟钢铁作不好,汽车轮船也很难做好。
现在CPU设计已经从高性能向多核、低功耗转移,这是一个机遇,更是一个挑战,这步再落下,以后要追赶就更加艰难了。而单靠某个学校或者研究机构赶超,是极其困难的。所以我觉得国家应该集中力量进行攻关,采用类似大飞机制造,发动机设计的机制来推对芯片技术的飞跃。要大力支持龙芯,哪怕龙芯失败了,最起码培养了一批人才;而有人才,总有翻身的机会。
当然,比这些更加重要的是团结,团结和再团结。踏踏实实做事情的人要尊重,主动给他相应的荣誉和利益;夸夸其谈的领导也要利用他的优势,能够做好宣传,从政府拿到funding,从社会得到鼓舞,对整个行业和团队也是异常重要的。解放后的郭沫若人品不敢恭维,但是如果他和领导人的良好关系保护了中科院的发展,那么这份功绩也是不能抹杀的。现在还不是勾心斗角,瓜分蛋糕的时候,不要犯大雁还没有打下来就先讨论是清蒸还是红烧的错误,这比任何政策财力的支持都重要的多。当然我不觉得中华民族有所谓的劣根性,老外的窝里斗丝毫不弱。只是我们现在落后,要赶超上来,除了人人都高尚一些,多付出一些,少折腾一些,还有别的方法么?
可梦之于2009年3月14日
本帖一共被 2 帖 引用 (帖内工具实现)
- 相关回复 上下关系8
🙂【原创】我经历的中国芯
🙂花谢通宝 猪头大将 字90 2009-03-18 18:36:24
🙂送花又送宝 忘情 字92 2009-03-18 04:02:34
🙂研究所与高校之间最大的区别就在人才和事情的连续性上 6 朴石 字947 2009-03-15 22:05:44
🙂花 头头 字0 2009-03-15 08:36:15
🙂老兄搞过PCI? 喜欢辣椒 字113 2009-03-15 08:21:40
🙂能自己启动一个pci transaction的设备 4 踏雪寻熊 字761 2009-03-15 11:48:18
🙂寄存器是提供给驱动的接口 4 可梦之 字628 2009-03-15 16:18:50