广告

原创 【转】看穿芯片之概述

2016-4-21 21:07 400 0 分类: 工程师职场

曾经遇到一个问题,两个芯片,同样的Cortex-A53,同样的总线,同样的频率,同样的缓存和内存大小,跑同样的内存测试,性能差了40%。而经过优化之后,反超了20%。想搞清楚为什么,就需要知道,访存路径上有哪些影响因素?系统瓶颈可能有哪些地方?性能优化可以怎么做?等等。最近,这些问题终于有了答案,我把它们写下来,给我自己一个总结,也给有同样困惑的人一个解释。

文章会很长,我想从CPU怎样访问内存这样一个既简单也复杂的问题入手,自问自答,并逐步引入更多的疑问和答案,最终把访存通路上每一个环节的硬件结构,特征,性能分析以及未来的发展趋势都加进去。很多概念,像缓存,同步,一致性,壁垒,锁等,并不复杂,可是他们是怎么在ARM SoC中实现的,效率又如何,我觉得还是有必要搞清楚。最后,我会重新分析文章开头的问题。这些知识并不是在重复一个处理器或者SoC的结构,而是分析硬件会怎样影响软件,软件如何利用硬件。并且,我是程序员,从来没有做过芯片设计,所有的知识都是从程序员的角度出发的,所以软件狗们应该能看懂。

在开始之前,先说些轻松的话题。

芯片厂商向客户介绍产品,从硬件角度说的最多的就是功能,性能,功耗和价格。功能这个主要就是看芯片提供了什么接口,比如闪存,内存,PCIeUSBSATA,以太网等,还看内部有什么运算模块,比如浮点器件,解码器,加解密,图形加速器,网络加速器等等。性能,对CPU来说就是的测试程序能跑多少分,比如DhrystoneCoremarkSPEC2000/2006等等。针对不同的应用,比如手机,还会看图形处理器的跑分;又比如网络,还会看包转发率。当然,客户还会跑自己的一些典型应用程序,来得到更准确的性能评估。功耗就是在跑某个程序的时候,整个芯片的功率是多少瓦。通常,这时候处理器会跑在最高频率,但这并不意味着所有的晶体管都在工作,由于power gatingclock gating的存在,那些没有被用到的逻辑和片上内存块并没在完全耗电。我看到的芯片公司给出的处理器最大功耗,通常都是在跑Dhrystone。这个程序有个特点,它只在一级缓存之上运行,不会访问二级缓存,不会访问内存。这样得出的其实并不是真正的最大功耗。但是从实际经验看,没有应用程序能让CPU消耗更高的能量,所以这么测量最大功耗也没什么错。当然,作为整体的芯片功耗,还得包括各种加速器和接口,尤其是会被用到的模块。

芯片公司宣传产品的时候,会有各种各样的玄机在里面,任何一家都会把好看的数据放上来。这些数据大都是真实的,可是怎么摆这些数据是一门技术活,摆的好能误导不少观众,而x86ARMMIPSPowerPC ARC阵营的各家产品经理和市场人员都是这方面的好手。我会在深入介绍之后专门列一章说这些窍门。

在设计SoC的时候,性能,功耗和价格就转换成了PPA。啥是PPA?其实就是性能,功耗和面积。其中,性能有两层含义。在前端设计上,它指的是每赫兹能够跑多少标准测试程序分。设计处理器的时候,会有个多少级流水线的说法。通常来说,流水线级数越多,芯片能跑到的最高频率越高,这个大家应该都知道。可是并不是频率越高,性能就越高。这和处理器构架有很大关系。典型的反例就是Intel的奔腾430多级流水,最高频率高达3G赫兹,可是由于流水线太长,一旦指令预测错误,重新抓取的指令要重走这几十级流水线,代价是很大的。而它的指令预测又极大依赖于编译器来优化,结果当时编译器又没跟上,导致它总体性能低下。你看MIPS或者PowerPC的处理器频率都不高,但是每赫兹性能相对来说还不错,总体性能就会提高一些。所以看性能要看总体跑分,而不是每赫兹跑分。前一段时间龙芯在宣传的时候就钻了这个空子,号称每赫兹都赶上至强了,但是也就能跑个1Ghz多,而16核至强可以到将近3Ghz

性能的另外一个含义就是指频率,这是从后端设计角度来说的。通常后端的人并不关心每赫兹能达到多少跑分,他们只看芯片能跑到多少频率。频率越高,在每赫兹跑分一定的情况下,总体性能就越高。请注意对于那些跑在一级缓存的程序,处理器每赫兹跑分不会随着频率的变化而变化。当然如果考虑到多级缓存,总线和外围接口,那肯定就不是随频率线性增加了。系统级的性能问题很复杂,我会在以后慢慢展开。

那哪些因素会影响频率?就算只从后端角度考虑,答案也很多。我并不是做后端和制程的,只能把道听途说的写下来,仅供参考。

首先,受工艺的影响。现在先进的半导体工厂就那么几家,Intel,台积电,三星,联电,格罗方德。拿台积电来说,它目前提供16纳米的工艺,其中还分了很多小结点,比如FFLL++FFC。每个小节点各有特点,有些能跑到更高频率,有些功耗低,有些成本低。在不同的工艺上,芯片能跑的最高频率不同,功耗和面积也不同。

其次,受后端库的影响。台积电会把工艺中晶体管的参数抽象出来,做成一个物理层开发包PDK,提供给eda工具厂商,IP厂商和芯片厂商。而这些厂商的后端工程师,就会拿着这个物理层开发包,做自己的物理库。物理库一般包含逻辑和sram两大块。根据晶体管的channel length,会有不同特性,适合于不同的用途的单元cell。而怎么把这些不同特性的库里的cell,合理的用到不同的前端设计模块,就是一门大学问。一般来说,channel length越短,电子漂移距离越短,能跑的频率就越高。可是,频率越高,功耗就越大,并且是指数上升。除了cell之外,还会有9T/12T这种说法,这里的TTrack,就是cell的高度。T越大,电流越大,越容易做到高频,相应的面积也越大。

接下来,受布局和布线的影响。芯片里面和主板一样,也是需要布线的。每一层都有个利用率的说法,总体面积越小,利用率越高,可是布线就越困难。在给出一些初始和限制条件后,EDA软件会自己去不停的计算,最后给出一个可行的频率和面积。

再次,受前后端协同设计的影响。比如,某个访问sram的操作,如果知道处理器会花多少时间,用哪些资源,就可以让sram的空闲块关闭,从而达到省电的目的。这种技巧可能有上千处,不自己设计处理器是没法知道的,哪怕你有RTL代码。

再往上,就是动态电压频率缩放DVFS。这里需要引入功耗的组成概念。芯片功耗分成动态和静态两部分,静态就是晶体管漏电造成的,大小和芯片工艺,晶体管数,电压相关,而动态是开关切换造成的,所以和晶体管数,频率,电压相关。具体公式我就不列出了,网上有。控制动态功耗的方法是clock gating,频率变小,自然动态功耗就小。 控制静态功耗的方法是power gating,关掉电源,那么静态和动态功耗都没了。还可以降低电压,那么动态功耗和静态功耗自然都小。可是电压不能无限降低,否则电子没法漂移,晶体管就不工作了。并且,晶体管跑在不同的频率,所需要的电压是不一样的,拿16nm来说,往下可以从0.9V变成0.72V,往上可以变成1V或者更高。可千万不要小看了这一点点的电压变化,要知道,动态功耗的变化,是和电压成三次方关系的。1V0.7V,电压差了50%,动态功耗可以差3.4倍。我看到过的数据,在500Mhz以下,处理器的动态功耗是小于静态功耗的,变成3GHz的时候,远高于静态功耗。

再往上,就是软件电源管理,控制功耗了。芯片设计者把每个大模块的clock gatingpower gating进行组合,形成不同的休眠状态,软件可以根据温度和运行的任务,动态的告诉处理器每个模块进入不同的休眠状态,从而在任务不忙的时候降低功耗。这又是一个很大的话题,我以后再展开。

从上面我们可以看到,功耗和性能其实是和在一起的。而芯片设计者可以用不同的工艺和物理库,设计出最高可运行频率,然后软件控制芯片动态运行频率和功耗。

那面积呢?其实也是相辅相成的。由于针对不同的逻辑,sram和布线,选用了不同的物理库cell,不同的track,形成的芯片面积也会不一样。通常来说,越是需要跑高频的芯片,所需的面积越大。频率差一倍,面积可能有百分之几十的差别。你可别小看这百分之几十,对晶体管来说,面积就是成本,晶圆的总面积一定,价钱一定,那单颗芯片的面积越小,成本越低,并且此时良率也越高。

芯片成本除了制造费,还来自于授权费,工具费,流片费,运营开销等,通常手机处理器这样复杂的芯片,没有上千万美元是不可能做出来的。就算做出来,没有卖掉几百万片,那是肯定亏的。

最后还想提下ARM的大小核设计。其最初的目的是想设计两组核,小核每赫兹性能低,面积小,跑在低频;大核每赫兹性能高,面积大,跑在高频。运行简单任务,大核关闭,小核在低频,动态功耗低,静态功耗占上风,并且由于面积小,总体功耗更低。而大核用高频运行复杂任务。和x86的单纯调节电压频率比,增加了一点低频小核面积,和整个芯片的面积比,其实没多多少。

那为什么不让小核跑在高频运行复杂任务呢?理论上,由于每赫兹性能低,对于相同的任务,小核必须跑在比大核更高的频率才能完成,这就意味着更高的电压。此时,动态功耗占上风,并且和电压成三次方关系。最终的功耗会高出大核不少。此外,我们前面已经解释过,小核要跑在高频,面积会增大不少,可能比大核还要大。我们从里面可以看到存在一个平衡点。这个平衡点并不好找。拿A53/A5728nm上举例,当它们跑在1.2Ghz的时候,功耗可能差两倍,性能却只差50%。而平衡点可能要达到2.5Ghz。事实上,很多手机芯片的大小核都是使用同样的处理器,跑在不同高低频率。

所以,设计芯片很大程度上就是在平衡。影响因素,或者说坑,来自于方方面面,IP提供商,工厂,市场定义,工程团队。水很深,坑很大,没有完美的芯片,只有完美的平衡。

广告

文章评论 0条评论)

登录后参与讨论
相关推荐阅读
sunyzz 2017-08-19 10:38
【博客大赛】AVALON总线介绍
1、AVALON总线简介Avalon总线是一种协议较为简单的片内总线,是ALTERA公司定义的片上互联总线,该总线可以将诸如NIOS II的CPU与其他外设连接起来,进而进行数据交换。AVALON总线...
sunyzz 2017-08-17 21:36
【博客大赛】不要轻易做职场滥好人
小A毕业于国内普通高校,但是他聪明,勤奋,能干,动手能力强,可是即便有这些优点也不能让小A轻轻松松找到一份好工作。这不,去年9月份小A好不容易找到一份工作,然后立马就入职了C公司,生怕C公司过两天不要...
sunyzz 2017-08-16 21:15
【博客大赛】IC设计低功耗技术四
五:工艺层面的降低功耗前面几节都是在讨论设计人员如何在前期阶段,中期阶段降低功耗,涉及到软件层面的,硬件层面的,这些技巧基本都是前辈总结出来的,或者根据理论推论出来的。但是到了后期,想降低功耗基本就要...
sunyzz 2017-08-14 22:35
【博客大赛】IC设计之低功耗技术三
四:RTL(寄存器传输)级的低功耗设计4.1 状态机的设计状态机编码中一般有两种方式,普通的二进制编码,特殊的格雷码,格雷码的特点是两个数据之间的跳变时只会有一个bit在toggle,显然比起多bit...
sunyzz 2017-08-12 16:51
【博客大赛】IC设计之低功耗技术二
三、架构层面的降低功耗系统的实现有很多的方式,每种方式对功耗的影响都不相同,本节主要介绍架构对功耗的影响。3.1 高级门口电路 在同步电路系统中,时钟占据了大部分的动态功耗,因而在一些情况下,如果有些...
sunyzz 2017-08-12 10:37
【博客大赛】IC 设计之低功耗技术一
一、前言随着计算机技术和微电子技术的迅速发展,嵌入式系统应用领域越来越广泛。节能是全球化的热潮,如计算机里的许多芯片过去用5V供电,现在用3.3V,1.8V,甚至更低的电压。目前的低功耗设计主要从芯片...
我要评论
0
0
广告
关闭 热点推荐上一条 /2 下一条