西西河

主题:【原创】分析一下龙芯2和MIPS的关系--1 背景 -- 随园过客

共:💬48 🌺192
全看树展主题 · 分页首页 上页
/ 4
下页 末页
家园 【原创】分析一下龙芯2和MIPS的关系--1 背景

今天有些空,写写龙芯的一些技术细节,分析一下它和MIPS R10000间的关系。

背景

首先说说MIPS这个公司。MIPS是和ARM一样的fabless芯片设计公司,也就是说,它没有自己的芯片生产部门,专门搞设计卖专利执照给别的公司。数字集成电路技术发展到了今天这样成熟的地步,对于一般芯片而言,具体的芯片制造技术往往已经成了commodity,只要在这个行当里混的,各制造厂之间在成品质量上已经可以没有太大差别了。而且设计出的芯片也不再需要在制造过程中再去调试参数,只要在设计时遵守一系列设计规则(这种过程叫电子设计自动化EDA),那么造出来的芯片就没有问题。以台湾为龙头的芯片代工业太发达了,芯片设计人只需要把设计用标准格式写出来,代工厂就可以给你做出来。在这种情况下,对于长于设计的公司,与其自己花大价钱建立和维护自己的Fab,还不如把造芯片这一部分外包出去,给专门的芯片代工厂去做,自己可以专心做设计。

当然对于在技术最前沿的顶尖芯片,代工厂的技术往往还是不能满足的。另外有些最尖端的设计为了保密版权等原因还是最好自己做。这也就是Intel,AMD等芯片厂仍然需要自己的Fab的原因。不过龙芯不是这回事,龙芯至少到目前为止走的基本是只搞设计,然后送到外面做芯片的路子。

MIPS的芯片知识产权执照分两种,一种是构架(Architecture),另一种是核心(Core)。所谓构架,就是指令集和围绕指令集所需要的执行环境界面。所谓核心,就是芯片的具体电路设计。

之所以MIPS可以把架构单独拿出来卖,有几个原因。首先因为指令架构设计不是简单的事。其实指令架构的设计就是CPU设计中层次比较高的架构设计,因为说到底指令集和其执行环境定义了整个CPU的高层Finite State Machine。MIPS的架构设计相当成功,所以有人会愿意出钱买架构而不是自己设计。这样把这一部分单独出来卖是合理的。当然这里还有一个原因,就是如果别人用了,非常容易被发现,很难“偷用”,所以拿出来卖也是可行的。基于这些原因,架构一般都是公开的,反正一个产品用没用某个架构一目了然。公开的目的可以扩大影响,可以扩大开发人员群体。如果不做商业用途完全往往可以免费拿来用,但是如果还要卖去赚钱,那就需要给MIPS交钱了。

核心是CPU的内部电路设计。其实现在专门买一个核来生产CPU的公司越来越少,原因很简单,反正大家最后都是找人代工,互相之间除了价钱没什么可竞争的。大多数核心执照的买家其实都是为了拿回去做SoC设计。对于SoC,一个现成的核的作用就相当于写应用程序调用现成的库,买现成的有很大好处。

元宝推荐:请尽量,懒厨,

本帖一共被 2 帖 引用 (帖内工具实现)
家园 【原创】2 龙芯架构与MIPS架构的关系

龙芯的架构,现在大家都知道了是MIPS64位的架构。那么龙芯增加的那200多条新指令是怎么回事呢?如果仔细研究一下这些新指令,就会发现这些其实还是在原MIPS64的框架之下的指令而已。具体情况是这样的。某些MIPS64浮点指令中有一段字位叫format,其实就是在安排了字位给operands和指令码之后还有些多余的字位,MIPS就把这些字位合起来一起叫format。Format的作用相当于副指令,比如说主指令是加运算,那么副指令就可以说明是32位数据加还是64位数据加等等。MIPS本身定义了一些副指令,也就是如何使用这些format字位,但是不多。龙芯再此之上加进了一些本来没有被定义的format值,那200多条新指令就是这么来的。这样的扩展很难说是创新,因为之所以MIPS把format段的长度定得超过所需要长度,一个很重要原因就是为了未来的扩展需要,而龙芯所做也恰恰就是扩展。用专利术语来说,退很多步来讲,就算这些新指令可以被注册专利(根据我这些年和专利律师打交道的经验,MIPS的专利律师,只要不失职,就会在当初写专利的时候把类似扩展全都包括进去的),它们也是dependent claims,从属于format这个independent claim之下。

所以龙芯的指令架构就是MIPS64架构,龙芯的那点延展,绝对谈不上摆脱了MIPS64。在这件事上,不管如何解说,ST最后交钱的事实其实已经为这件事的争论画上了句号。

家园 【原创】3. 龙芯核心与MIPS核心的关系

MIPS的R10000是一个经典RISC核,虽然诞生于10多年前,但是它的设计已经有了很多所谓“后RISC”特点。它是第一个四发射超流水芯片。那篇Yeager 于96年写的介绍R10000的文章是学CPU设计学生的必读资料,公开的R10000资料也非常丰富详尽,也有质量很高的开源模拟器,甚至核心本身都不难拿到。这一方面因为MIPS老板是学界出身,对教学用途很支持,另一方面R10000到底是10年的技术了。而后来的MIPS芯片以及其他RISC芯片的资料就难拿多了。

可以说龙芯从一开始就打算仿造R10000。863立项时说的两个指标,主频达500MHz和SPEC CPU 2000达300分。其实这基本就是R10000的后继R12000在2000年的性能指标,R12000基本沿用了R10000的设计,不过采用了更新的工艺。为什么不仿IBM的Power芯片,为什么不仿Alpha芯片?这些都是非常成功的RISC芯片。主要原因就是R10000资料丰富。863立项时说指标,成功的把握还是很大的,因为当初的R12000是.25micron的工艺,用现代.18工艺重造即使不做任何设计上的改进性能也会超出的。这就是现在很多486/586芯片设计又被重新生产的原因,比如AMD的Geode系列芯片,在性能尤其功耗上面比当初有很大改进,改头换面作为低功耗嵌入式芯片在卖。所以看到胡李二人事后说的什么当初说什么做不出“提头来见”之类的话其实很可笑,因为这里面风险并不大。

先说说龙芯2和R10000的相似点。

两者都是四发射芯片,也就是说每一个周期可以同时取四条指令。这个不稀奇,大多数RISC芯片都是四发射。而考虑复杂程度,再往上用增加发射来提高性能也不大值得了。

但是两者都有的五个功能模块,其间的差别更多只是在名称上。这五个模块分别是两个整数计算模块(龙芯的叫ALU1和ALU2,R10000的叫Integer ALU1和Integer ALU2),两个浮点计算模块(龙芯的叫FPU1和FPU2,R10000的叫FP Adder和FP Multiplier),再加上一个地址计算模块(R10000叫Address Calculation,龙芯叫AGU或者Address Generation Unit)。功能块有几个各是什么用途是结构设计上很重要的一点,不同芯片,既是都是64位4发射的RISC芯片,往往会做出不同的选择。比如IBM的Power3芯片,却有三个整数计算模块,两个浮点计算模块,两个地址计算模块;HP PA8000则是四个整数计算模块,四个浮点计算模块,两个地址计算模块;DEC的Alpha 21164总共四个功能模块。即使同样是MIPS64架构的SB1 core也是两个整数计算模块,两个浮点计算模块,两个地址计算模块的构成。

龙芯和R10000这样的大结构框架上的一致我认为很能说明龙芯与R10000之间结构上的继承关系。因为这样的大框架定了,基本的电路设计就定下了,剩下的只是如何存取指令,如何做地址转换这些事情了。

好了说明了结构上相似点,再看看龙芯所说的不同点。

首先是龙芯的九级流水线,这似乎是很明显的区别,被很多地方提到作为龙芯与R10000不同的证据,因为R10000用的是五到七级流水线。但是细看就有了些疑问。龙芯的九级分别是:取指、预译码、译码、重命名、送入队列、发射、读寄存器、执行、提交。R10000对应整数指令的各级是:取指、译码+重命名+送入队列,发射+读寄存器,执行、提交。而对于浮点和地址指令,相对应的执行级有所不同,因为复杂程度被分成了两个或三个级(时钟周期)。从这里可以看出,龙芯的所谓九级流水和R10000的七级流水,很可能不是苹果与苹果之间的比较。R10000的一级包括了一个时钟周期内可完成的所有操作,而龙芯的级只是操作。另外龙芯的最后两级又太概括,比如所说的执行级,对于浮点和地址的执行操作很可能不是在一个时钟周期内完成的。当然也可能龙芯一个时钟周期内只可完成一个操作,每个操作都在一个时钟周期内完成,不过我对此深表怀疑。至于龙芯的预译码级,我手头没有相关资料所以没法评论,不知是否和龙芯新加的那些指令有关,得把它们先转换处理了。总的来说对于流水线深度因为龙芯公开的九级资料比较模糊不好分析,但其间差别远没有宣传的那么大。

龙芯还有一个被提到的“不同点”,就是龙芯2号在发射指令时把指令分成定点(包括访存)以及浮点两组而R10000在发射指令时把指令分成定点指令、浮点指令、和访存指令三组。这一点细推敲也不容易成立,因为R10000的访存指令虽然有自己的队列,但走的数据路径却和整数指令一样经过整数寄存器阵列,从这个意义上说也可以讲R10000一样分两组,分别走浮点寄存器阵列和整数寄存器阵列。所以很可能这一区别也只是说法上的不同而已。

剩下的另两个不同点的确是龙芯与R10000的主要区别,在分支处理和存储层比如针对溢出写覆盖的保护这两块。不过这里面涉及的技术性东西太多,对这个论坛不大合适,另外也写累了没兴趣再写了,所以就不多说了。

家园 【原创】4. 总结

综合来看,很明显龙芯2是以R10000为母版的仿造改进版。尤其从龙芯2发展的历史来看更是如此。龙芯2B基本就是R10000的ASIC版。在2B逻辑仿制成功以后就开始改动,渐渐往里加自己的东西。比如2B1版里加入了对分支处理的改进,到2C扩大了一级cache,流水线也变成了现在的所谓九级。换句话说,龙芯2是计算所以实际实现R10000设计为起点,在此基础上吃透原设计,逐渐一步一步把这10多年理论界提出的新算法加进R10000的过程。

至于是否触到了R10000核心的版权问题,这个就要看具体MIPS专利如何写的了。我感觉从法律上来说很可能没有,因为10年前的专利界情况和今天很不一样,防御式的专利还不那么多。而且实现结构上的专利多数比较容易绕过,即使使用也很难被查出来。另外那么久了,有的专利恐怕也过期了。但是,排除法律上的技术性因素,龙芯与R10000间的继承关系还是很明显的,硬要说“在涉及具体实现的微体系结构方面,龙芯2号和MIPS R10000很难找到相同的地方”这个也是不符合事实的。

家园 可逮着个大沙发
家园 雄文

花之

家园 呵呵,总算是看到热乎的了

刚刚出笼啊

可惜是贫矿,没有宝

家园 惊喜

惊喜:所有在本帖先送花者得【通宝】一枚

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

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

鲜花已经成功送出。

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

家园 这几个吹大牛骗经费的家伙确实害人啊

“抱歉:意外丢失【通宝】一枚

鲜花已经成功送出。

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

家园 好文,请问

龙芯的fab是哪里做的?

家园 人龙芯就是MIPS啊

自己加了一些多媒体指令集,这个在他的说明书里讲的很清楚,你没看过?

家园 这个问题如果从另一方面看。

  第一,我国需不需要能不受制于人的CPU芯片?就是能自己设计的芯片,不管是用了谁的技术。

  第二,现在有没有可能搞出完全靠自己研发,与外国技术、专利毫不相干而又兼容的CPU芯片?

  第三、买回来后可以不受限制的使用的技术、专利算不算自有知识产权?

  第四,那些英特尔一类的大公司,是不是所有的技术、专利都是它们自己研发的,从来不买别人的专利?

家园 每个国家都有自己的立场

第一、第四点回答不了。

关于第二点,原文也说到了,白手起家太不合算。

关于第三点,中国和美国的态度肯定大相径庭,在目前这个发展阶段,中国是绝对鼓励多打“擦边球”的。

家园 前两天正好看了一篇讨论昧族是否是克隆IPHONE的文章

再看这篇文章就很有意思了。新中国大概除了两弹一星,估计大多数都是仿出来的吧。是捷径,就去走吧,管人家说什么呢。863也罢,什么什么奖也罢,总得开个头啊,就让他们吹去吧,别卷包汇就行啊。

感谢老兄好文。

家园 这些问题很有典型性,试着回答一下

第一,我国需不需要能不受制于人的CPU芯片?就是能自己设计的芯片,不管是用了谁的技术。

这个不是技术问题,在本版不合适,不回答了。

第二,现在有没有可能搞出完全靠自己研发,与外国技术、专利毫不相干而又兼容的CPU芯片?

兼容一种架构,如果那种架构本身被注册了专利,那当然是避不开的。

但是架构下面的具体实现,完全是可以做到靠自己研发,与外国技术、专利毫不相干的。可以说这样做不现实不合算等等,但是无法否定可能性。

第三、买回来后可以不受限制的使用的技术、专利算不算自有知识产权?

不算。

买的只是使用权,不是所有权,不能号称是“自有”,只能说授权。一样技术,卖方卖给你之后可以根本不跟你打招呼就自由地同样卖给别人,你能说这技术是你“自有”的吗?而且现在技术授权都不允许买方再买卖再转让,你不能再卖再送的东西能算“自有”的吗?

第四,那些英特尔一类的大公司,是不是所有的技术、专利都是它们自己研发的,从来不买别人的专利?

买,但是这种买来的技术不能被说成自有的,因为同样买来的只是使用权。

如果要把买来的技术算成自己的,办法就是把整个对方公司都买了,这样成功后才可以说是自有的。

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


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

Copyright © cchere 西西河