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