2017/5/12

(­五)淺談晶片實體設計-背包問題(Knapsack Problem)


「排放門」事件
相信大家都聽過汽車廢氣排放醜聞, 即行車電腦植入了特殊軟體, 以規避官方檢驗的事件. 車輛在官方檢驗時自動調整相關參數以通過廢氣排放標準, 但實際上這些排放的廢氣全都超標十至四十倍. 反觀半導體晶片效能測試, 又何嘗不是如此呢? 只能說有異曲同工之妙哉! 




市場部門往往壓力頗大, 面對強敵的壓迫也往往無法全面顧及軟體、系統架構與元件庫等是否都已跟上而選擇一個極端的點(或策略)進行實體設計並期望能藉此突破重圍. 這是「風險尋求」: 反正已經輸了, 病急亂投醫賭一下吧! 請誠實的想想, 那些打著「八核心」晶片旗幟的手機晶片全速運轉能夠維持多久且不因過熱使「熱節流(thermal throttling)」介入而拔核降速? 這不就是手機晶片界的「安兔兔門」嗎?




上面數據資料有些舊, 但告訴我們幾件事情(目前仍然成立): 為何同樣都在20nm製程, 其它競爭者晶片會過燙? Apple為何用兩核就把所有其它手機晶片廠(包括Qualcomm在內)的八核(四大+四小)晶片都打趴了? Apple也證明了核心數不是key(/硬系統架構與整合才是), 因此能專注於使用者體驗(better life time)而不是操弄市場策略(multi core), 進而尋求客製化的軟/硬體、架構、元件庫與效能功耗的甜蜜點


A9 Processor事件
針對某製程我們若選擇任一種常用的元件, 將整套元件庫(Library)具相同功能性(footprint)的邏輯閘依照其「效能對功耗」的散佈視覺化, 可以得到如下圖. 圖中每一坨虛線框代表某個製程摻雜(doping)下使閘通道產生不同臨界電壓(threshold voltage)屬性的群體, 由左到右表示閘通道臨界電壓為極高/高、普通、低與極低等分佈.

各群體之間是離散的, 我們可以將其想像為不同的背包而其對應的功耗是我們的成本(cost function). 圖中有一個須要提醒的是在高或極高臨界電壓屬性的群體, 由於其slew可能變得很糟導致在信號轉態過程中損失較多的短路(short-circuit)電流而使其總體功耗反轉. 大家應該聽過「iPhoneA9門」事件吧!? 三星是否真的比較弱呢? 筆者相信有絕大部分是市場策略(strategy)衍生的問題, 因為不難藉由實體設計參數的調整去改善這個事件. 我們必須要事先依市場需求在最大待機(standby)與最佳使用者體驗的常態工時(life-time)之間妥協, 以免「得(leakage)」不償「失(總功耗).



Foundry通常會為各種不同閘通道臨界電壓元件再細分出不同的等效閘通道長度(channel length), 以進一步在效能與功耗之間做細部調控/妥協, 如圖中符號L/S各代表長通道(Long-channel)/短通道(Short-channel). 不難發現, 它的現象/趨勢跟我們上一回於市場策略中談到的電壓補償或晶片評等對於整個晶片效能與功耗的散佈是異曲同工的. 這個現象/趨勢可描述巨觀的整個晶片, 甚至於微觀的單一邏輯閘也是等價的. 若細看每個不同閘臨界電壓群落本身速度與功耗的機率密度也大至遵守skewed normallog normal分佈



通常不同臨界電壓群之間會有一些大鴻溝(gap), 此乃背包問題之始, 這也使得某些有能力開發自家元件庫團隊的公司有機可圖並且也是能出類拔萃的利基(Niche). 在這個過程, 也不難發現同類型元件中有些異常分佈於skewed/log normal長尾(long-tail), 即體質上較差的元件應該在設計初期被檢視/反饋(重新設計或是條件性使用), 這也考驗各家公司實體設計的功力.



舉上圖為例, 當一個設計區塊(理想上)期望之邏輯機率密度(cell usage PDF)的高原處於一個空洞, 即沒有對應所須效能與功耗的元件時, 則元件大小的「置換」就會發生. 「置換」的代價可能是面積(如圖從SVT爬升), 也可能是功耗(如圖從LVT往下走).



在信號完整性(signal integrity)分析領域裡我們習知, 當鎖定一個諧振頻率(resonant frequency)做消除(cancellation), 會形成兩座子諧振頻率的小山(好比剷除一座高山將土往兩旁堆). 同理, 若我們想要將原本(未優化)處於一個功耗較大的機率密度高山位置剷平(壓低功耗成本), 也須要產生置換. 空洞造成優化的不連續性, 而代價則是面積或是功耗的損失.



Foundryin-house元件庫可以提供無段數連續的元件功使用時, 成本函數如圖中紅色虛線.若忽略高臨界電壓的逆功耗與效能趨勢, 則一個理想的元件分佈將如圖之橘色線所示. 然而因為離散的包包, 我們在優化的途徑中勢必損失一些面積與功耗. 如圖中藍色的分佈為最後期望的元件使用(cell usage)與功耗的機率密度函數, 凡背離這期望值的設計區塊應該被要求重新檢視(是否盡力了?). 如下圖, 這是「Big-data」的力量之一.




妥協與進步
在一個相同的製程下, 因為元件特性限制(device nature), 因此所謂的效能、功耗與面積(PPA)事實上差異不應太大(只要library design不要太弱), 大多是基於市場策略的操作與應用的不同. 一些常見的手法如下圖左邊, 我們可以犧牲速度去換面積或是犧牲功耗去換速度, 而右邊的圖才是真正的改善, 但這通常需要一至兩個世代的製程躍進(例如28nm16nm16nm7nm), 其實大部分你看到的都只是在mainstream上移動而已, 真正縮小的只有面積.






可能有些人會問: 「從事晶片設計這麼多年來, 照著土法煉鋼好像也沒發生什麼事?, 也有些Foundry可能會說: 「你看, 在我們這邊下單良率有多高!. 下面這張圖是筆者常常跟同事間茶餘飯後的笑話, 但也真的不是笑話! 記得我們在前面提過的「設計餘量(design margin)」嗎? 我們在survey library時看到Foundry提供漂漂亮亮的liberty的資料, 如下圖的淺藍色範圍(此區間data不能轉態), 然而照著免責配方施做時(它們會告訴你flop抓值時會有某機率的不確定性, 比如data進到第一級latch前須經過的兩顆反向器路徑以及傳輸閘開關本身也會有variation, 它們用push-out手法跑SPICE告訴你應該要再加個uncertainty), 因此我們實際的setuphold violation window可能高達原本liberty定義的兩倍以上



以上還沒有牽扯layout上面一些其其怪怪的限制以及一些其它被轉嫁至實體設計上的成本, 例如某些cell比此之間不能彼鄰、某些flop設計根本有問題(例如從single-bit port4-bit8-bit整個timing check windowshift掉了)constraint被要求去對齊一些timing arc很糟但是根本不會被使用的cell等等. 說真的, 筆者非常佩服所有從事實體設計的工程師們, 他們將這一切不合理都吞下來了! 事實上, 我們都是這個這樣子做implementation, 所以yield理論上當然要很好啊!? …而代價就是失去競爭力. (請記得跟libraryfront-end team或長官反應, 該抱怨就要抱怨, 不要默默承受啊!)

Foundry沒有提供per cell based的「設計餘量(design margin)」時, 我們對每個cell所下的constraint都去對齊整套library裏面極糟(且不會被使用)cell arc, 我們照辦了. Foundry開始為每一顆cell margin提供lookup table, 我們才知道原來還可以這樣用, 以前是做心酸的嗎? (筆者: 若想出類拔萃將這些不合理的餘量脫個精光, LVF或許解決了其中一些問題, 例如為每一顆cell/每一timing arc提供slew/load based constraint table, 但是在28nm之前的process node, constraint table建議至少要K5x5以上以解決non-monotonic問題)


次佳化悖論(Suboptimal Paradox)
使用傳統極端支配角(dominate corner)的設計方式(嚴守千分之三的教條)非常容易陷入「第二名優先」的次佳化(suboptimal)陷阱, 而恐怖的是往往我們都沒察覺, 因為「精實的實體設計團隊」與優秀的EDA工具通常直接將所有的「辛勞」跟「代價」都吞下來了! 

我們上一次有談論到「風險決策(decision making)」的重要性: :「凡是不能完全依照機率來分配不確定結果的加權, 將會導致不一致性和其他災難」

我們舉個例子(真實的案例), 假設某一製程下SVT30(channel-length 30nm)在所有製程飄移與溫度/電壓變化的可能性中包括所有性能、漏電與功耗都完勝LVT40(channel-length 40nm), 除非後矽落入製程偏向SS且工作在低壓與極低溫(-40C)的特殊操作環境中. 如下圖, SVT30只有在當製程偏向SS且工作在低壓/-40C時才會小輸LVT40. 


倘若我們讓EDA工具遵守千分之三的教條來執行實體設計實踐與優化會發生什麼事? 比如說長clock-treeinverter cell選擇? 該用LVT40還是SVT30? 這個問題Tool應該不會犯錯, 它會選LVT40(因為跨corner代價最小), SS/0.9VDD/-40C是我們的教條之一的話.

我們再把條件限縮, Foundry已經告訴我們根據近期大量採樣分析的的process control window得知, 所有的不同摻雜的製程(HVT/SVT/LVT)都能命中各自的靶心但偏快一些且leaky(即都命中TT且偏快一些). 這時候我們可能應該警覺, SVT30似乎較能符合後矽與將來晶片實際操作環境的機率分佈(又快又省電). 然而弔詭的是, 當我們限制工具使用LVT40或條件使用SVT30, 實體設計實踐與優化過程的結果將不會是我們所期待那樣讓SVT30在機率上拿到較多好處. 相反的工具會把事情搞砸, 它會過修(over fixing), SS/0.9VDD/-40C仍然是我們的教條之一的話.

這是非常弔詭的結果, 製程能命中靶心TT且偏快(縱使偏SS/FF也會被晶片效能評等與電壓調控補償回來), Majority溫控在室溫(25C~75C), 理應選擇SVT30做實體設計, 然而工具依照千分之三教條實踐的結果不會是最佳化(不是我們要的). 我們若不介入, 工具依照liberty資料會選擇第二名的cell作實踐與優化, 結果同樣將不會是最佳化! (就為了那千分之三的教條)