淘客熙熙

主题:【原创】我经历的中国芯 -- 可梦之

共:💬31 🌺164
分页树展主题 · 全看首页 上页
/ 3
下页 末页
  • 家园 【原创】我经历的中国芯

    今天看到萨大的帖子提到了龙芯,又勾起我略微久远的回忆。

    我初涉芯片设计的因缘比较偶然。大一下半学期有一门必修的数字电路的课程,讲课的老师姓崔,讲得不错,但是丝毫不张扬,留下的印象并不是十分深刻。但是考试成绩出来远远低于我的预期,于是就愣头愣脑闯进办公室,发现是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日

    关键词(Tags): #中国芯#龙芯元宝推荐:晨枫,爱莲,

    本帖一共被 2 帖 引用 (帖内工具实现)
    • 家园 花谢通宝

      恭喜:你意外获得【通宝】一枚

      鲜花已经成功送出。

      此次送花为【有效送花赞扬,涨乐善、声望】

    • 家园 送花又送宝

      谢谢:作者意外获得【通宝】一枚

      鲜花已经成功送出。

      此次送花为【有效送花赞扬,涨乐善、声望】

    • 家园 研究所与高校之间最大的区别就在人才和事情的连续性上

      对头!研究所与高校之间最大的区别就在人才和事情的连续性上(特别是在长期连续性上面),还有一个表现是衡量标准。学校的衡量标准往往是文章,而研究所一般是要求拿出东西来。国内的格局,往往新领域的跟进高校反应要快,但真正形成实际基础性的平台并具备可持续发展潜力的往往在研究所。自己这边老师同事一般不愿意用高校的东西,不稳定还靠不住,公司有的东西一般不会找高校,合作性质的研究也是优先考虑研究所。不过感觉目前国内把科研的东西转成产品这个环节还是缺乏有效途径。

      大目标的实现离不开人力物力财力三要素的集成,队伍的稳定是关键,大使馆被炸以后,搞核搞军工那帮人高兴惨了,为啥?这之前,国家不重视了,许多研究所要求去自谋出路,结果队伍散了。幸亏美国人炸得早,要再晚上五年,老一代人死的死,退的退,走的走,一个人才大断层补都难补。队伍散了,不是一两个能人能解决的事情。

      自己感觉读过大学本科后,如果还想读研,还是进研究所好,动手的机会多,接触前沿技术的机会也多得多,而且经济上也富裕些。

      另:郭老的评价上文人过于苛责了,人家学问和做事上没啥可指责的。

    • 家园
    • 家园 老兄搞过PCI?

      我正好也是吃类似饭的,软件的.我一直没有搞明白PCI Bus Master到底是什么东西,干什么用的.不知道老兄能不能帮忙回答一下.

      • 家园 能自己启动一个pci transaction的设备

        简单的说,就是自己能够主动产生PCI总线上地址信号的设备(不很严格,大体是这个意思)。比如CPU,DMA设备。他们能够产生地址信号和选通信号,选择PCI总线上的Slave,向其中写入数据,或者读出数据。相反,PCI Slave只能被动的被选择,来提供数据或接收数据。

        比如一个PCI DMA Master,当它需要向内存写入数据的时候,它就会首先向PCI arbiter(也是一个PCI master)提出申请,要求使用PCI总线。得到许可后,就会产生相应的地址信号,数据信号,相应的控制信号,将数据写入内存。这就是一个典型的PCI master。在这一过程,被写入数据的内存,就是一个PCI slave。因为它只是被动的接收数据。(事实上,内存是通过北桥芯片接入PCI总线的,真正的PCI slave应该是北桥)

        同一个PCI设备,可以在一种工作模式下是PCI Master,而另一种工作模式下是PCI Slave。

        找一本讲PCI总线接口的书,静下心来慢慢啃啃,就明白了。

        • 家园 寄存器是提供给驱动的接口

          所以只做软件,搞明白那个操作如何读写寄存器就差不多了。

          一般cpu通过系统总线连接北桥,北桥一个主要功能就是连接PCI总线的控制器,可以分为master slave arbiter三个功能。然后从北桥出来是PCI Bus, 总线上可以插不同的外设,比如网卡什么的。一般外设都兼有master slave的功能。发起transaction的就叫做master,目标设备就是slave。同时几个masters发起请求时要通过arbiter仲裁。CPU通过IO指令操作PCI控制器的寄存器从而引发PCI总线上的数据传输。

          这主要是说intel的架构(不过PCI就是intel提出来的),现在最新规范都到PCI Express了,我当初接触的还是PCI2.0,可能变化很多了。其实这些东西要有些EE的基础才能彻底搞明白,我当初也是糊里糊涂的,纯粹是摸着石头过河。

        • 家园 谢谢...

          其实我有PCI的Spec和Mindshare关于PCI/PCI Express的书,我是软件工程师,我关心的是PCI的Register和Power Management,我不需要了解硬件和数据传输的细节,但是在程序中有时候看到对PCI Bus Master的操作,一直不太明白这东西对PCI到底有什么作用.

    • 家园 崔光佐吧

      崔光佐吧

      2001年看过他的课件,汇编的

    • 家园 你们老程当时写的处理器高级教程的PDF

      我直到现在还保存着

      觉得他的名字很有意思:程旭(程序)

分页树展主题 · 全看首页 上页
/ 3
下页 末页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河