資料視覺化(Data
Visualization)
這邊所談論的並非指藝術創作為了彰顯作品的絢麗多彩而運用的電腦圖學, 而是為了更有效地傳達思想概念而將平常文字/數字描述的資料予以圖形的呈現, 始能夠透過直覺地觀察/傳遞關鍵特徵, 從而實現對於一般未能注意/查覺的複雜資料有更深層(且時有讓人意想不到)的洞察.
你知道嗎? 光是從SIDD收集來的資料, 就可以發現光罩在曝的時候有沒有產生繞射/干涉現象(pattern), 光罩缺陷, 甚至可以推測某機台氣體出風口位置?
若問筆者:
「什麼是Big-Data?」, 筆者想這就是!
因為對資料分析的方式不同, 藉由不同面向觀察的意外洞見, 可能連Foundry 自己都無法發現, 若你不告訴他們的話( 因為通常他們只能在「樣本數不足的WAT 資料」上分析, 而樣本數不足在統計學上非常容易造成錯誤的偏見 ). 若未能及時察覺原屬於系統性的缺陷(defect), 很可能會懷疑為何製程始終無法控制區域性的變異/一致性(uniformity).
下面這張圖是從事晶片實體設計的工作者所習知的「setup/hold window」, 它的定義如圖所示, 在參考capture clock edge前後由setup與hold要求的限制窗口(violation window)內, 資料(Data)不允許發生變化. 然而這個窗口會因為所使用的Flip-flop不同(function、channel-length、Vt等), 甚至是實際操作時環境的條件不同(clock/data slew、process、voltage、temperature等)而「移動」與「伸縮」. 若hold requirement為負值, 整個violation window在capture clock edge左邊, 反之若setup requirement為負值, 整個violation window在capture clock edge右邊.
然而若只是這樣看資料將無法看見許多該製程下元件本身物理特性與其參數萃取(library characterization)的許多問題, 也無法預先掌握趨勢進而提出合理的「設計邊際(design margin)」建議. 例如, 我們也知道有些不確定性(uncertainty)大的令人不安, 但我們往往在後矽(post-silicon)的測試中曾經歷不好的經驗又不敢將其移除, 深怕又遭遇解釋不清的風險.
「視覺化後的資料」好比有了個性, 常常會帶給我們「預料之外的驚喜」, 彷彿自己會敘述故事, 提醒你沒看到的細節, 並且不斷的更新故事內容. 以各種面向處理相同的資訊含量, 能夠讓人主動發掘(data mining)資料中更深層的內涵, 尋找資料間的關聯, 並獲得更寬廣的格局與對於趨勢的掌握/洞見. (沒錯! 也會衍生出許多新的發明, 我將其稱之為Triple-I:
Information-Intelligence-Innovation的心智歷程)
上圖建構自某一Flip-flop的Q pin在某一組輸入狀態值的條件下(例如, data rise, positive clock
edge)之setup與hold要求窗口之表單, 而事實上setup與hold分別代表了其本身與clock slew以及data slew所交織成的高維空間中兩張振動薄膜(曲面)的快照(snapshot), 在某個特殊條件下兩張薄膜間的距離就是我們所謂的setup與hold要求的窗口(setup & hold window).
窗口的擺幅受制於靜態的製程變異與動態的環境溫度/電壓變化等影響, 若套用「弦論」的說法來形容會是至少5維度的流形(manifold). 我們可以透過物理學慣用的招數—降維度(Principal Components Analysis)—來思考同樣的事情, 想像一個動畫的場景, 即setup與hold window是一面厚度可變(clock/data slew dependent)在多個愛因斯坦-平行時空(time-space domain)中飄盪的旗子. 圖中Z軸表示窗口對時間的要求(單位為ps), 而Z軸為零的平面即所謂的capture clock edge, 藉由控制clock與data slew以及溫度/電壓在某個特殊定值下(例如, 25C , 0.9V, clock/data=100ps/200ps), 兩張薄膜與Z=0平面間的定點快照(一條宇宙弦切割多維時空的投影)就是我們之前描述的第一張圖.
與第一張圖明顯的不同是, 藉由資料表單的視覺化所揭露的訊息, 無意中我們觀察/發現許多疑點: 這張有厚度的薄膜(setup & hold window)似乎不怎麼「單調(monotonic)」? 這張薄膜有時候會被Z=0的面切割? 有些Flip-flop的薄膜都在Z=0平面之上, 有些卻在下? 它們彼此在不同時空(不同製程、溫度/電壓條件等參數)的趨勢竟然不一致? 當我們把不同時空(不同製程、溫度/電壓條件等參數)的薄膜重疊時竟然在某些clock/data slew交錯? 製程在FF與製程在SS的薄膜在某些溫度/電壓下無法包覆製程在TT的薄膜?
沒錯! 彷彿許多資訊會自己一一飛入我們眼簾, 讓我們陸陸續續看到許多問題/疑點, 我們會想要更進一步地弄清事情的全貌. 而上述例舉的一些例子/問題, 其實也是我們日後能出類拔萃跟人家不一樣的契機. 魔鬼藏在細節裡, 原來有太多的細節沒處理, 導致日後我們對於一些懷疑的不確定性(uncertainty)無法將之移除!
舉例來說: 我們常看到Foundry在28nm製程節點上只提供3x3的setup & hold窗口表單, 而這相較FinFET結構不怎麼「單調(monotonic)」的曲面自然無形之中讓我們平白地折損一些「設計餘量(design margin)」, 代價就是一些不確定性(uncertainty)不能被拿掉! 以Spline Interpolation算法而言, 至少有1~2ps在STA tool計算時損失了! 對於立志要做頂尖的你不可不慎, 儘管FinFET的結構(16nm/12nm/7nm)相對比較沒有這樣的現象.
習知導致的偏見(Bias)
資料視覺化後, 類似「為何需要給出如clock/data slew的限制條件」這樣的問題自然就很好理解了. 我們需要的是「可預測性」, 這裡可不是如康納曼說的「回歸」啊! 而是元件物理本身系統響應的因果可預測性. 舉28nm的例來說, 若所使用到的元件有明顯「逆溫現象(temperature
inversion)」時, 一般總認為setup timing的支配條件(dominate corner)是SSG/0.9VDD/-40C , 而hold time應該是FFG/1.1VDD/-40C , 但這是習知的刻板印像. 而限制clock/data slew在某個範圍內的做法可以「懶惰」地避免元件的特性不小心掉入「非習知」的工作區域(例如, 當clock slew較大, data slew小於clock slew時, 它們有時候會反轉). 當然, 在沒有LVF的library/flow, 這也是一種保險的做法, 但會失去之前提到的「競爭力(Competitiveness)」.
當然用「系統一」直覺地以為上述兩個極端corner(FFG高壓低溫與SSG高壓低溫)可以涵蓋多數的想法也太過賭氣了! 請將手邊的元件庫仔細以圖形檢視, 並針對幾個常用的邏輯閘(例如, CKINV、BUF等)試著由低溫至高溫間隔約20C的溫度跑SPICE模擬, 就能清楚解釋上面描述的這番話. STA的支配角(diminate corner)分析往往看不到真實的hold time問題, 而等晶片回來形成災難.
請注意! 以手機晶片而言, 大宗(Majority)是將製程「錨定」在TT並且將晶片「溫控(thermal throttling)」在體感可容忍之溫度範圍(例如25C ~75C ). 然而當在使用於實體設計的元件「逆溫現象(temperature inversion)」不明顯時, 該工作溫度範圍(25C ~75C )的特性無法被習知且只佔的6/1000的corner(SSG低壓低溫與FFG高壓低溫)所涵蓋. 雖然我們可以選用完全沒有「逆溫現象(temperature inversion)」的元件(如較高速, low-Vt、Ultra-low-Vt、short-channel等), 或是該現象非常明顯的元件(如較低速high-Vt、long-channel等)於實體設計, 然而使用電壓補償於調控晶片評等(voltage binning/compensation)的行為卻會使得「逆溫現象(temperature
inversion)」又變得模稜兩可, 即TT常溫與大部份的工作溫度範圍都可能無法被習知的支配角所涵蓋! 我們之後再討論.
依樣畫葫蘆
我們可以批次把所有Flip-flop針對可能的clock/data slew與工作/操作範圍產生快照(snapshot), 如此一來我們可以將所有corner的window一次看夠, 找個會寫程式的工程師, 它的效用(類似re-timing)將會比坊間EDA純粹只是sizing或buffering的工具來的有用. 在實體設計初期, 哪些cell有bug應該redesign? 哪些cell是skewed/optimized for setup? 哪些cell是skewed/optimized for hold? 哪些cell在初步合成(Synthesis)時應該先禁用? 哪些cell一旦被選用上了, STA若只sign習知的corner(例如, SSG低壓低溫+FFG高壓低溫)可能影響良率且恐將無法被補償? 一目瞭然!
元件庫資料的統計分析與視覺化也能輔助初始階段時「標準元件庫」的潛在問體與篩選, 並反饋回library designer做redesign或recharacterization. 比如我們可以將所有標準元件庫中的AOCV表單(derate隨著stage count converge)全部畫出來並對stage-1 derate建立其機率分佈. 「鴕鳥圖(Ostrich
Curve)」的問題在LVF-based的設計流程(使用statistical sum)不會出現, 然而異常大/小的值卻必須事先察覺(有些弱/強驅動力的cell對loading非常敏感), 大部份體值較差的元件可以在這個步驟被篩選出來(禁用或選擇性使用).
邏輯閘透鏡(Logic Lens)
若有興趣看看組成一條timing path的成員(logic gates)在傳遞電信號直到被Flip-flop捕捉到的過程, 就好比光穿過由一堆各式透鏡組成的相機最後聚焦成像一般. 下圖, 我們可以同樣針對一顆Buffer, 以前面所提到的技巧將其delay與slew的表單視覺化.
每個邏輯閘都有自己適當的焦距(driving), 若操作得當既使輸入的光(input slew)有點模糊都還能成功聚焦回來給下一組鏡頭繼續解析.
經由調整各透鏡間的距離(loading), 直到最後能滿足成像的焦距位置(setup time requirement), 使信號能夠成工被捕捉.
再對應回第一張圖由data/clock slew所交織成的曲面(setup & hold window), 因此不難理解為何有時輸入較糟的slew反而信號可以被捕捉(meet setup & hold requirement), 純粹是因為成像的鏡頭它是抖動的馬鞍面啊! (不用擔心, FinFET製程的物理會接近平面)
原本以文字描述的元件庫資料表單, 將它視覺化過後是否變得更有趣呢? 因為視覺化過的資訊, 我們會更自然地看到物件更廣泛的全貌而不再只是一個點, 也讓我們從許多不同資料面向中發現問題並正向回饋給library team, 掌握趨勢(元件的物理特性)並下達正確的決策, 進而避免犯錯且能逢凶化吉(筆者越來越像神棍了!). 原本許多同樣以文字呈現之STA report中怪異的現象, 也能夠簡單的被理解, 並用更有效率的方式去改善. Thanks!