首先,,我要強調,,我不是做后端的,但是工作中經常遇到和做市場和芯片的同事討論PPA,。這時,,后端會拿出這樣一個表格:
上圖是一個A53的后端實現(xiàn)結果,節(jié)點是TSMC16FFLL+,,我們就此來解讀下,。
首先,我們需要知道,,作為一個有理想的手機芯片公司,,可以選擇的工廠并不多,臺積電(TSMC),,聯(lián)電(UMC),,三星,Global Foundries(GF),,中芯(SMIC)也勉強算一個,。還有,今年開始Intel工廠(ICF)也會開放給ARM處理器。事實上有人已經開始做了,,只不過用的不是第三方的物理庫,。通常新工藝會選TSMC,然后要降成本的時候會去UMC,。GF一直比較另類,,保險起見不敢選,而三星不太理別人所以也沒人理他,。至于SMIC,,嘿嘿,那需要有很高的理想才能選,。
16nm的含義我就不具體說了,,網上很多解釋。而TSMC的16nm又分為很多小節(jié)點,,F(xiàn)FLL+,,F(xiàn)FC等。他們之間的最高頻率,,漏電,,成本等會有一些區(qū)別,適合不同的芯片,,比如手機芯片喜歡漏電低,,成本低的,服務器喜歡頻率高的,,不一而足,。
接下來看表格第一排,Configuration,。這個最容易理解,,使用了四核A53,一級數(shù)據緩存32KB,,二級1MB,,打開了ECC和加解密引擎。這幾個選項會對面積產生較大影響,,對頻率和功耗也有較小影響,。
接下來是Performance target,目標頻率,。后端工程師把頻率稱作Performance,,在做后端實現(xiàn)時,必須在頻率,,功耗,,面積(PPA)里選定一個主參數(shù)來作為主要優(yōu)化目標,。這個表格是專門為高性能A53做的,頻率越高,,面積和漏電就會越大,,這是沒法避免的。稍后我再貼個低功耗小面積的報告做對比,。
下面是Current Performance,,也就是現(xiàn)在實現(xiàn)了的頻率。里面的TT/0.9V/85C是什么意思,?我們知道,,在一個晶圓(Wafer)上,不可能每點的電子漂移速度都是一樣的,,而電壓,溫度不同,,它們的特性也會不同,,我們把它們分類,就有了PVT(Process,,Voltage,, Temperature),分別對應于TT/0.9V/85C,。而Process又有很多Conner,,類似正態(tài)分布,TT只是其中之一,,按照電子漂移速度還可以有SS,,S,TT,,F(xiàn),,F(xiàn)F等等。通常后端結果需要一個Signoff條件(我們這通常是SSG),,按照這個條件出去流片,,作為篩選門檻,之下的芯片就會不合格,,跑不到所需的頻率,。所以條件設的越低,良率(Yield)就會越高,。但是條件也不能設的太低,,不然后端很難做,或者干脆方程無解,,跑不出結果,。X86上有個詞叫體質,,就是這個PVT。
這一欄有四個頻率,,上下兩組容易區(qū)分,,就是不同的電壓。在頻率確定時,,動態(tài)功耗是電壓的2次方,,這個大家都知道。而左右兩組數(shù)字的區(qū)別就是Corner了,,分別為TT和SSG,。
下一行是Optimization PVT。大家都知道后端EDA工具其實就是解方程,,需要給他一個優(yōu)化目標,,它會自動找出最優(yōu)局部解。而1.0V和0.9V中必須選一個值,,作為最常用的頻率,,功耗和面積的甜點(Sweet Spot)。這里是選了1.0V,,它的SSG和目標要求更接近,,那些達不到的Corner可以作為降頻賤賣。
再下一行是漏電Leakage,,就是靜態(tài)功耗,。CPU停在那啥都不跑也會有這個功耗,它包含了四個CPU中的邏輯和一級緩存的漏電,。但是A53本身是不包含二級緩存的,,其他的一些小邏輯,比如SCU(Snooping Control Unit)也在CPU核之外,,這些被稱作Non-CPU,,包含在MP4中。我們待機的時候就是看的它,,可以通過power gating關掉二三級緩存,,但是通常來說,不會全關,,或者沒法關,。
下面是Dynamic Power,動態(tài)功耗,?;旧衔乙娺^的CPU在測量動態(tài)功耗的時候,都是跑的Dhrystone,。Dhrystone是個非常古老的跑分程序,,基本上就是在做字符串拷貝,,非常容易被軟件,編譯器和硬件優(yōu)化,,作為性能指標基本上只有MCU在看了,。但是它有個好處,就是程序很小,,數(shù)據量也少,,可以只運行在一級緩存(如果有的話),這樣二級緩存和它之后的電路全都只有漏電,。雖然訪問二級三級緩存甚至DDR會比訪問一級緩存耗費更多的能量,,但是它們的延遲也大,此時CPU流水線很可能陷入停頓,。這樣的后果就是Dhrystone能最大程度的消耗CPU核心邏輯的功耗,,比訪問二級以上緩存的程序都要高。所以通常都拿Dhrystone來作為CPU最大功耗指標,。實際上,,是可以寫出比Dhrystone更耗電的程序的,稱作Max Power Vector,,做SoC功耗估算的時候會用上。
動態(tài)功耗和電壓強相關,。公式里面本身就是2次方,,然后頻率變化也和電壓相關,在跨電壓的時候就是三次方的關系了,。所以別看1.0V只比0.72V高了39%,,最終動態(tài)功耗可能是3倍。而頻率高的時候,,動態(tài)功耗占了絕大部分,,所以電壓不可小覷。
此外,,動態(tài)功耗和溫度相關,,SoC運行的時候不可能溫度維持在0度,所以功耗通常會拿85度或者更高來計算,,這個就不多說了,。
下一行是Area,面積,。面積是芯片公司的立足之本,,和毛利率直接相關。所以在性能符合的情況下,,越小越好,,甚至可以犧牲功耗,,不惜推高電壓,所以有了OD(Over Drive),。有個數(shù)據,,當前28nm上,每個平方毫米差不多是10美分的成本,,一個超低端的手機芯片怎么也得30mm(200塊錢那種手機用的,,可能你都沒見過,還是智能機),,芯片面積成本就是3刀,,這還不算封測,儲存和運輸,。低端的也得是40mm(300塊的手機),。我們常見的600-700塊錢的手機,其中六分之一成本是手機芯片,。當然,,反過來,也有人不缺錢的,,比如蘋果,,據說A10在16nm上做到了125mm,換算成這里的A53MP4,,單看面積不考慮功耗,,足足可以放120個A53,極其奢侈,,這可是跑在2.8G的A53,,如果是1.5G的,150個都可能做到,。
那蘋果這么大的面積到底是做什么了,?首先,像GPU,,Video,,Display,基帶,,ISP這些模塊,,都是可以輕易的拿面積換性能的,因為可以并行處理,。而且,,功耗也可以拿面積換,一個最簡單的方法就是降頻,,增加處理單元數(shù),。這樣漏電雖然增加,,但是電壓下降,動態(tài)功耗可以減少很多,。一個例外就是CPU的單核性能,,為什么蘋果可以做到Kirin960的1.8倍,散熱還能接受,?和物理庫,,后端,前端,,軟件都有關系,。
首先,A10是6發(fā)射,,同時代的A73只用了2發(fā)射,。當然,由于受到了數(shù)據和指令相關性限制,,性能不是三倍提升,,而6發(fā)射的后果是面積和功耗非線性增加。作為一個比較,,我看過ARM的6發(fā)射CPU模型,,同工藝下,單核每赫茲性能是A73的1.8倍,,動態(tài)功耗估算超過2倍,,面積也接近2倍。當然,,它的微結構和A73是有挺大區(qū)別的。這個單核芯片跑在16nm,,2.5Ghz,,單核功耗差不多是1W。而手機芯片的功耗可以維持在2.5W不降頻,,所以蘋果的2.3Ghz的A10算下來還是可行的,。
為了控制功耗,在做RTL的時候就需要插入額外晶體管,,做Clock Gating,,而且這還是分級的,RTL級,,模塊級,,系統(tǒng)級,信號時鐘上也有(我看到的SoC時鐘通常占了整個邏輯電路功耗的三分之一),。這樣一套搞下來,,面積起碼大1/3,。然后就是Power Gating,也是分級的,。最簡單的是每塊緩存給一個開關,,模塊也有一個開關。復雜的根據不同指令,,可以計算出哪些Cache bank短時間內不用,,直接給它關了。Power Gating需要的延時會比Clock Gating大,,有的時候如果操作很頻繁,,Power Gating反而得不償失,這需要仔細的考量,。而且,,設計的越復雜,驗證也就越難寫,,這里面需要做一個均衡,。除了時鐘域,電源域,,還有電壓域,,可以根據不同頻率調電壓。當然了,,域越多,,布線越難,面積越大,。
再往上,,可以定義出不同的power state,讓上層軟件也參與經來,,形成電源管理和調度,。我在這個回答里面寫的更詳細一些:如何評價 ARM 的 big.LITTLE 大小核切換技術?
再回到蘋果A10,,它還使用了6MB的緩存,。這個在手機里面也算大的驚世駭俗。通常高端的A73加2MB,,A53加1MB,,已經很高大上了,低端的加起來也不超過1MB,。我拿SPECINT2K在A53做過一些實驗,,二級緩存從128KB增加到1MB只會增加15%不到的性能,到6MB那性能/面積收益更不是線性的,這是赤裸裸的面積換性能,。而且蘋果宣揚的不是SPECINT,,而是GeekBench4.0,我懷疑是不是這個跑分對緩存大小更敏感,,有空可以做做實驗,。順帶提一句,安兔兔5.0和緩存大小沒半毛錢關系,,這讓廣大高端手機芯片公司情何以堪,。到了6.0似乎改了,我還沒仔細研究過,。至于使用了大面積緩存引起的漏電,,倒是有辦法解決,那就是部分關閉緩存,,用多少開多少,,是個精細活,需要軟硬件同時配合,。
影響面積的因素還沒完,,上面只是前端,后端還有一堆考量呢,。
首先就是表格下一排,,Metal Stack。芯片制造的時候是一層層蝕刻的,,而蝕刻的時候需要一層層打碼,,免得關鍵部分見光,簡稱Mask,。這里的11m就表示有11層,。晶體管本身是在最底層的,而走線就得從上面走,,層數(shù)越多越容易,,做板子布線的同學肯定一看就明白了。照理說這就該多放幾層,,但是工廠跟你算錢也是按照層數(shù)來的,越多越貴,。層數(shù)少了不光走線難,,總體面積的利用率也低,像A53,,11層做到80%的利用率就挺好了,。所以芯片上不是把每個小模塊面積求和就是總體面積,還得考慮布局布線(PR,Placing&Routing),,考慮面積利用率,。
再看表格下兩排,Logic Architecture和Memory,。這個也容易理解,,就是邏輯和內存,數(shù)字電路的兩大模塊分類,。這個內存是片上靜態(tài)內存,,不是外面的DDR。uLVT是什么意思呢,,Ultra Low Voltage Threshold,,指的是標準邏輯單元(Standard Cell)用了超低電壓門限。電壓低對于動態(tài)功耗當然是個好事,,但是這個標準單元的漏電也很高,,和頻率是對數(shù)關系,也就是說,,漏電每增加10倍,,最高頻率才增加log10%。后端可以給EDA工具設一個限制條件,,比如只有不超過1%的需要沖頻率的關鍵路徑邏輯電路使用uLVT,,其余都使用LVT,SVT或者HVT(電壓依次升高,,漏電減?。瑏頊p小總體漏電,。
對于動態(tài)功耗,,后端還可以定制晶體管的源極和漏極的長度,越窄的電流越大,,漏電越高,,相應的,最高頻率就可以沖的更高,。所以我們有時候還能看到uLVT C16,,LVT C24之類的參數(shù),這里的C就是指Channel Length,。
接下去就是Memory,,又作Memory Instance,也有人把它稱作FCI(Fast Cache Instance),。訪問Memory有三個重要參數(shù),,read,,write和setup。這三個參數(shù)可以是同樣的時間,,也可以不一樣,。對于一級緩存來說基本用的是同樣的時間,并且是一個時鐘周期,,而且這當中沒法流水化,。從A73開始,我看到后端的關鍵路徑都是卡在訪問一級緩存上,。也就是說,,這段路徑能做多快,CPU就能跑到多快的頻率,,而一級緩存的大小也決定了索引的大小,,越大就越慢,頻率越低,,所以ARM的高端CPU一級緩存都沒超過64KB,,這和后端緊密相關。當然,,一級緩存增大帶來的收益本身也會非線性減小,。之后的二三級緩存,可以使用多周期訪問,,也可以使用多bank交替訪問,,大小也因此可以放到幾百KB/幾MB。
邏輯和內存統(tǒng)稱為Physical Library,,物理庫,,它是根據工廠給的每個工藝節(jié)點的物理開發(fā)包(PDK)設計的,而Library是一個Fabless芯片公司能做到的最底層,。能夠定制自己的成熟物理庫,,是這家公司后端領先的標志之一。
最后一行,,Margin,。這是指的工廠在生產過程中,肯定會產生偏差,,而這行指標定義了偏差的范圍,。如下圖:
藍色表示我們剛才說的一些Corner的分布,紅色表示生產偏差Variation,。必須做一些測試芯片來矯正這些偏差,。SB-OCV表示stage-based on-chip variation,和其他的幾個偏差加在一起,,總共±7%,也就是說會有7%的芯片不在后端設計結束時確定的結果之內。
后面還有一些setup UC之類的,,表示信號建立時間,,保持時間的不確定性(Uncertainty),以及PLL的抖動范圍,。
至此,,一張報告解讀完畢,我們再看看對應的低功耗版實現(xiàn)版本:
這里頻率降到1.5G左右,,每Ghz動態(tài)功耗少了10%,,但是靜態(tài)降到了12.88mW,只有25%,。我們可以看到,,這里使用了LVT,沒有uLVT,,這就是靜態(tài)能夠做低的原因之一,。由于面積不是優(yōu)化目標,它基本沒變,,這個也是可以理解的,,因為Channel寬度沒變,邏輯的面積沒法變小,。