找回密码
 注册
关于网站域名变更的通知
查看: 48|回复: 0
打印 上一主题 下一主题

芯片设计是什么?

[复制链接]
  • TA的每日心情
    开心
    2023-6-2 15:15
  • 签到天数: 1 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2023-2-13 11:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    曾经遇到一个问题,两个芯片,同样的Cortex-A53,同样的总线,同样的频率,同样的缓存和内存大小,跑同样的内存测试,性能差了40%。而经过优化之后,反超了20%。想搞清楚为什么,就需要知道,访存路径上有哪些影响因素?系统瓶颈可能有哪些地方?性能优化可以怎么做?等等。最近,这些问题终于有了答案,我把它们写下来,给我自己一个总结,也给有同样困惑的人一个解释。
    0 T7 U6 U$ }7 j  p( @. E% I% ~1 s" r8 z& Z0 T' U6 s" o- }# u. g. |( l" Y3 J- N, ]
    * l# x% X7 R0 u/ ?3 F5 J8 B0 l2 k( c; y0 r1 W9 h; E* X& g
    文章会很长,我想从CPU怎样访问内存这样一个既简单也复杂的问题入手,自问自答,并逐步引入更多的疑问和答案,最终把访存通路上每一个环节的硬件结构,特征,性能分析以及未来的发展趋势都加进去。很多概念,像缓存,同步,一致性,壁垒,锁等,并不复杂,可是他们是怎么在ARM SoC中实现的,效率又如何,我觉得还是有必要搞清楚。最后,我会重新分析文章开头的问题。这些知识并不是在重复一个处理器或者SoC的结构,而是分析硬件会怎样影响软件,软件如何利用硬件。并且,我是程序员,从来没有做过芯片设计,所有的知识都是从程序员的角度出发的,所以软件狗们应该能看懂。
    2 M5 M) y& n7 X  T# s
    5 \  n# o( w2 s0 G$ u8 n% h2 }# R. x6 P' d. A; p9 C( n( E7 y  n  L- q. n9 I0 ?2 w% l
    在开始之前,先说些轻松的话题。. ~& D5 `' k! r+ O
    * Z& p) {( b6 _! D" j. E9 \5 c/ g/ i: ]) G( h3 n, k# S+ M4 d

    . Q# t" J* O! d% x芯片厂商向客户介绍产品,从硬件角度说的最多的就是功能,性能,功耗和价格。功能这个主要就是看芯片提供了什么接口,比如闪存,内存,PCIe,USB,SATA,以太网等,还看内部有什么运算模块,比如浮点器件,解码器,加解密,图形加速器,网络加速器等等。性能,对CPU来说就是的测试程序能跑多少分,比如Dhrystone,Coremark,SPEC2000/2006等等。针对不同的应用,比如手机,还会看图形处理器的跑分;又比如网络,还会看包转发率。当然,客户还会跑自己的一些典型应用程序,来得到更准确的性能评估。功耗就是在跑某个程序的时候,整个芯片的功率是多少瓦。通常,这时候处理器会跑在最高频率,但这并不意味着所有的晶体管都在工作,由于power gating和clock gating的存在,那些没有被用到的逻辑和片上内存块并没在完全耗电。我看到的芯片公司给出的处理器最大功耗,通常都是在跑Dhrystone。这个程序有个特点,它只在一级缓存之上运行,不会访问二级缓存,不会访问内存。这样得出的其实并不是真正的最大功耗。但是从实际经验看,没有应用程序能让CPU消耗更高的能量,所以这么测量最大功耗也没什么错。当然,作为整体的芯片功耗,还得包括各种加速器和接口,尤其是会被用到的模块。0 v$ I! d1 g# {! J: z9 P4 ]5 Z0 I' f% S; X
    ; ?- h: O% C; A6 j8 Q$ K5 E1 _( P
    0 P3 S5 i+ |% W- z5 x
    ! r( w7 c  J" L7 Z  D2 G芯片公司宣传产品的时候,会有各种各样的玄机在里面,任何一家都会把好看的数据放上来。这些数据大都是真实的,可是怎么摆这些数据是一门技术活,摆的好能误导不少观众,而x86,ARM,MIPS,PowerPC, ARC阵营的各家产品经理和市场人员都是这方面的好手。我会在深入介绍之后专门列一章说这些窍门。5 Y, K, z5 g- s2 T0 s5 ^+ {
    ; @5 \) P/ y4 c. e- g8 s6 u$ `
    , i" O9 M1 F5 @% F( d! ]! r& O' s4 R+ l+ Q9 Y1 W5 c4 z
    8 Z( f- Z4 u+ F. ]在设计SoC的时候,性能,功耗和价格就转换成了PPA。啥是PPA?其实就是性能,功耗和面积。其中,性能有两层含义。在前端设计上,它指的是每赫兹能够跑多少标准测试程序分。设计处理器的时候,会有个多少级流水线的说法。通常来说,流水线级数越多,芯片能跑到的最高频率越高,这个大家应该都知道。可是并不是频率越高,性能就越高。这和处理器构架有很大关系。典型的反例就是Intel的奔腾4,30多级流水,最高频率高达3G赫兹,可是由于流水线太长,一旦指令预测错误,重新抓取的指令要重走这几十级流水线,代价是很大的。而它的指令预测又极大依赖于编译器来优化,结果当时编译器又没跟上,导致它总体性能低下。你看MIPS或者PowerPC的处理器频率都不高,但是每赫兹性能相对来说还不错,总体性能就会提高一些。所以看性能要看总体跑分,而不是每赫兹跑分。前一段时间龙芯在宣传的时候就钻了这个空子,号称每赫兹都赶上至强了,但是也就能跑个1Ghz多,而16核至强可以到将近3Ghz。8 P9 [( v+ n5 I3 p" C7 G) K" Z3 U3 B
    ) U% c3 t5 h2 m6 v6 M3 ?
    - c! t# `! T0 s; T/ @2 m
    " O$ x% ?9 d3 `: y  S0 ~: }; v0 M性能的另外一个含义就是指频率,这是从后端设计角度来说的。通常后端的人并不关心每赫兹能达到多少跑分,他们只看芯片能跑到多少频率。频率越高,在每赫兹跑分一定的情况下,总体性能就越高。请注意对于那些跑在一级缓存的程序,处理器每赫兹跑分不会随着频率的变化而变化。当然如果考虑到多级缓存,总线和外围接口,那肯定就不是随频率线性增加了。系统级的性能问题,我会在以后慢慢展开。6 i0 O, ~# O) o) p  v& T- ~1 X2 t
    + \) M; D+ |2 I, a1 T, C2 ]9 w. ?: H: M9 X! b- ]# G
    2 Z" o/ \: z3 ]
    : ^0 {7 X9 a' e5 ^2 D1 t那哪些因素会影响频率?就算只从后端角度考虑,答案也很多。我并不是做后端和制程的,只能把道听途说的写下来,仅供参考。) S" K2 X% Y! V& T0 G$ s7 i
    5 u' U, H+ b4 @- @& c  }9 D" c6 j- g* T7 C$ ]( I

    ! n0 N6 O9 P  }( E- ^: \首先,受工艺的影响。现在先进的半导体工厂就那么几家,Intel,台积电,三星,联电,格罗方德。拿台积电来说,它目前提供16纳米的工艺,其中还分了很多小结点,比如FFLL++和FFC。每个小节点各有特点,有些能跑到更高频率,有些功耗低,有些成本低。在不同的工艺上,芯片能跑的最高频率不同,功耗和面积也不同。, E7 L7 |# ]+ g( c6 \6 q  u9 u( W4 b5 l, f) V2 h
    % V4 I* q1 D0 |. L/ M7 O; [2 I7 m5 {
    1 }4 e: N; c  g$ O
    其次,受后端库的影响。台积电会把工艺中晶体管的参数抽象出来,做成一个物理层开发包PDK,提供给eda工具厂商,IP厂商和芯片厂商。而这些厂商的后端工程师,就会拿着这个物理层开发包,做自己的物理库。物理库一般包含逻辑和memory两大块。根据晶体管的channel length,会有不同特性,适合于不同的用途的单元cell。而怎么把这些不同特性的库里的cell,合理的用到不同的前端设计模块,就是一门大学问。一般来说,channel length越短,电子漂移距离越短,能跑的频率就越高。可是,频率越高,功耗就越大,并且是指数上升。除了cell之外,还会有9T/12T这种说法,这里的T是Track,就是cell的高度。T越大,电流越大,越容易做到高频,相应的面积也越大。
      V. R% a1 z, b) S8 d0 l, _/ L8 r, R# F, C9 b+ t/ d" \
    8 G0 d/ [0 `5 }; M" W& ~" Y: d; ~' B" l# o4 `  B. J* Y& {1 d/ J4 |8 [& Y5 I
    接下来,受布局和布线的影响。芯片里面和主板一样,也是需要布线的。每一层都有个利用率的说法,总体面积越小,利用率越高,可是布线就越困难。在给出一些初始和限制条件后,EDA软件会自己去不停的计算,最后给出一个可行的频率和面积。. L* \8 [" r* n( q7 P: Z5 K+ M# l  w, a; U0 y& B! k- F
    5 ^, z( H% |1 \7 q4 b
    9 j; j5 Q2 s' d9 ^
    1 F* n' N9 D7 E* H0 ?( R3 E# Z再次,受前后端协同设计的影响。比如,某个访问memory的操作,如果知道处理器会花多少时间,用哪些资源,就可以让memory的空闲块关闭,从而达到省电的目的。这种技巧可能有上千处,不自己设计处理器是没法知道的,哪怕你有RTL代码。: h3 K- i& j8 _* _- N
    4 Q9 g7 B- K! c0 E9 g' F) u
    ' q" \1 R" {, K5 a* [0 ^% e7 C/ w3 ?- K% f: O, t6 S5 s0 Z4 f- T0 s
    再往上,就是动态电压频率缩放DVFS。这里需要引入功耗的组成概念。芯片功耗分成动态和静态两部分,静态就是晶体管漏电造成的,大小和芯片工艺,晶体管数,电压相关,而动态是开关切换造成的,所以和晶体管数,频率,电压相关。具体公式我就不列出了,网上有。控制动态功耗的方法是clock gating,频率变小,自然动态功耗就小。 控制静态功耗的方法是power gating,关掉电源,那么静态和动态功耗都没了。还可以降低电压,那么动态功耗和静态功耗自然都小。可是电压不能无限降低,否则电子没法漂移,晶体管就不工作了。并且,晶体管跑在不同的频率,所需要的电压是不一样的,拿16nm来说,往下可以从0.9V变成0.72V,往上可以变成1V或者更高。别小看了这一点点的电压变化,要知道,动态功耗的变化,是和电压成三次方关系的。1V和0.7V,电压差了50%,动态功耗可以差3.4倍。我看到过的数据,在500Mhz以下,处理器的动态功耗是小于静态功耗的,变成3GHz的时候,远高于静态功耗。4 [+ C4 d" L& L: S1 Y8 R) ~
    2 H/ h' x) ~7 t/ w0 g) c1 H  h
    5 p; K, e+ [4 B/ [6 ~$ Q
    $ Y" I$ A( F' b! [$ [再往上,就是软件电源管理,控制功耗了。芯片设计者把每个大模块的clock gating和power gating进行组合,形成不同的休眠状态,软件可以根据温度和运行的任务,动态的告诉处理器每个模块进入不同的休眠状态,从而在任务不忙的时候降低功耗。这又是一个很大的话题,以后再展开。
    9 X  h, Y+ v, p$ t- X& {7 W" b/ R4 p  {0 x2 l
    . |3 B; Q4 d$ ?$ r: F' T) S8 X  \7 ]2 Q
    : D' K# }. f. [从上面我们可以看到,功耗和性能其实是和在一起的。而芯片设计者可以用不同的工艺和物理库,设计出最高可运行频率,然后软件控制芯片动态运行频率和功耗。( P8 v- O8 X  D7 t7 I8 M7 @( c
    5 r/ ^1 M  Q% Y% {. X1 s6 e* r9 P  H; N- `
    ( `& @/ v6 u7 n  J2 ~/ F  O
    ( e; B  C9 R5 Q' T; o9 G那面积呢?其实也是相辅相成的。由于针对不同的逻辑,memory和布线,选用了不同的物理库cell,不同的track,形成的芯片面积也会不一样。通常来说,越是需要跑高频的芯片,所需的面积越大。频率差一倍,面积可能有百分之几十的差别。可别小看这百分之几十,对晶体管来说,面积就是成本,晶圆的总面积一定,价钱一定,那单颗芯片的面积越小,成本越低,并且此时良率也越高。
    % ~$ X% y; Q7 ~* @, r
    ) e. `& R  Y: R$ g- v8 w" `+ d) h0 n* b0 z
      z/ n1 X9 Q! D5 _' E! f芯片成本除了制造费,还来自于授权费,工具费,流片费,运营开销等,通常手机处理器这样复杂的芯片,没有上千万美元是不可能做出来的。就算做出来,没有卖掉几百万片,那是肯定亏的。
    9 x: u5 z. g1 [8 ~) w) ?! j0 l& b- W! ~0 m1 |$ C1 R; i# t. m6 i, c
    ) a, E, ^9 D% }0 B
    最后还想提下ARM的大小核设计。其最初的目的是想设计两组核,小核每赫兹性能低,面积小,跑在低频;大核每赫兹性能高,面积大,跑在高频。运行简单任务,大核关闭,小核在低频,动态功耗低,静态功耗占上风,并且由于面积小,总体功耗更低。而大核用高频运行复杂任务。和x86的单纯调节电压频率比,增加了一点低频小核面积,和整个芯片的面积比,其实没多多少。9 Q) {8 f+ J- I: h# i- ]2 [' V" ?' W: i) F
    ) G; T: X. r: ]/ X: O3 Y# u9 M; B1 ?% G; k6 `% I# Y
    ) @1 o  G0 l1 J1 a+ ]% V
    那为什么不让小核跑在高频运行复杂任务呢?理论上,由于每赫兹性能低,对于相同的任务,小核必须跑在比大核更高的频率才能完成,这就意味着更高的电压。此时,动态功耗占上风,并且和电压成三次方关系。最终的功耗会高出大核不少。此外,我们前面已经解释过,小核要跑在高频,面积会增大不少,可能比大核还要大。我们从里面可以看到存在一个平衡点。这个平衡点并不好找。拿A53/A57在28nm上举例,当它们跑在1.2Ghz的时候,功耗可能差两倍,性能却只差50%。而平衡点可能要达到2.5Ghz。事实上,很多手机芯片的大小核都是使用同样的处理器,跑在不同高低频率。
    9 G( L; @$ I4 E1 B  I, |4 G) `4 l) a$ }0 Y% G  r4 \1 {& N' n6 k1 v5 _  o# \

    & t+ o  {4 f4 i* _( k所以,设计芯片很大程度上就是在平衡。影响因素,或者说坑,来自于方方面面,IP提供商,工厂,市场定义,工程团队。水很深,坑很大,没有完美的芯片,只有完美的平衡。( O. V, \) F4 P: Q
    & O9 ]8 ~! t2 p! g
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-7-30 01:36 , Processed in 0.140625 second(s), 24 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表