按照慣例今天這篇文章應該是昨天發出的,但是因為小編最近周末忙著往外地跑談項目參加會議啥的,所以請大家諒解(短期內還是保持周更新)。今天這篇關於數字IC後端設計實現hold violation修復的分享也是昨晚在路上現寫的,希望能夠對大家有所幫助。

知識星球官方已於04.11號早晨完成技術升級,小編的星球也可以正常使用了。考慮到個別星友可能還不知道,小編在此統一發個通知。目前星球進入快速發展期,人數已經有170+,歡迎各位加入交流討論(人數超過200人後,門票將調整為228元)。

Hold 檢查

Hold 檢查用一句話來概括就是它是用來驗證時鐘邊沿到達之後,數據仍然有效的時間量。Hold 檢查原理見下圖所示。

Hold檢查公式:

Tlaunch +T ck2q + Tdp > Tcapture + Thold

其中Tlaunch和Tcapture的差值即為這兩個寄存器的clock skew。在時鐘樹綜合之前,這兩個值均為0,CTS之後由於clock skew的存在,這兩個值有一定的差值。在組合邏輯一定的情況下,為了能夠使得hold violation最小,一方面我們希望將clock tree盡量作平,使得clock skew最小。另外一方面,對於圖中這樣的path,如果能夠將Tcapture做的比Tlaunch小,Hold violation也會更少甚至沒有。

常見修hold的方法

  • 增大Tdp

從hold檢查公式可以得知,增加Tdp可以使得公式左邊更大,hold violation會更小。主要有三種方法來實現。第一種是插buffer,第二種是插delay cell,第三種是將data path上LVT的cell換成RVT或者HVT的cell。

  • 增大Tlaunch

增大Tlaunch就是將launch FF的clock tree做長,主要可以通過設置floatin pin來讓工具自己將clock tree做長特定數值。也可以通過人工Clock ECO的方式進行clock tree latency的調整。當然將本級的Tlaunch做長,可能會導致本級setup和前一級hold變得更差。因此再做時鐘樹clock tree latency調整時需要綜合考慮前後級的timing margin

  • 減小Tcapture

同理,將capture的clock tree做短可以使得公式右邊的值更小,從而hold violation更小。但是仍然需要考慮前後級的timing margin。

  • 插lockup latch

聽說Latch可以高效修hold違例(Timing borrowing及其應用)

如下圖所示,DOMAIN1和DOMAIN2分別為兩個clock domain,在func mode下兩個domain不存在相互交互的path。因此,在做時鐘樹綜合(CTS)時,會各自獨立長clock tree,即他們之間的clock latency可能存在較大的差異。在func模式下不會有任何問題。但是,在做DFT的時候,我們將DOMAIN1和DOMAIN2的寄存器串在一條鏈上了。在scan shift時是有問題的。他們之間是需要做hold check(比如DOMAIN2的clock latency比較長)。

遇到這種情況,我們可以加負沿的latch來解決hold violation。加lockup latch後的波形圖如下,從圖中可以知道Domain1中的DFF到Lockup latch的hold明顯得到了改善。同樣Lockup latch到Domain2中的DFF的hold也沒有問題。

  • 局部Useful skew

很多時候在做hold time fixing時發現某一個module下的寄存器hold violation偏大,需要插入比較多的hold buffer(可能每個endpoint點需要插兩三顆buffer)。PR插入buffer 做eco route後發現存在局部區域的short,且數量較多。此時往往是由於該module下的clock skew偏大導致的,可以將hold violation的數量往前一級進行轉移處理

Hold fixing流程

  • 根據後端寫出的spef和netlist,跑全corner的pt session。
  • 做leakage optimization

為了降低功耗,每個模塊都需要做1-3輪的leakage優化。而且在修hold violation之前做leakage優化有助於大規模減少hold violation的數量。

  • DMSA Flow

PrimeTime目前支持physical aware的hold fixing方法,大部分設計都建議採用這種修法。PT中主要用以下幾個命令來修setup,hold和max transition。其中physical_mode可以設置為open_site或occupied_site,前者不允許插入的buffer存在overlap,後著則可以存在overlap。一般建議先使用open_site來進行大規模的hold violation fixing。兩種模式間的利弊留給各位思考。

由於修hold時插入buffer可能會把setup 變差,因此在進行hold fixing前需要設置setup margin,使得工具在修hold violation時能夠確保setup不出現較大問題。

fix_eco_timing -type setup -cell_type combinational -physical_mode occupied_site -to $setup_endpoints

fix_eco_timing -type hold -setup_margin 0.09 -buffer_list $buffer_list -method insert_buffer -physical_mode occupied_site -to $hold_endpoints

fix_eco_drc -type max_transition -physical_mode occupied_site $tran_vio -buffer_list

  • 手修hold violation

一般利用DMSA修幾輪hold後,hold基本上都能clean。但是有時候也會出現某些path的hold violation工具並沒有fix。這種情況一般分兩種情況,第一種是有timing maring,由於工具的bug導致漏修。第二種情況是沒有setup margin。不管如何,這兩種情況都需要人工介入,要麼自己人工插buffer,要麼就是創造timing margin後再讓工具來fixing。

  • 其他情況

如果PrimeTime中check hold時發現hold violation的量超級大,且數值較大,很有可能是clock tree相當不balance導致的。這種情況往下修hold並沒有多大意義,需要重新做時鐘樹綜合。

2019年數字IC後端校招筆試題目(附數字後端培訓視頻教程)

setup和hold 互卡情況。有時候修幾輪hold之後會發現setup和hold衝突或者互卡的現象。這個問題很有星友之前也提問過,還算是蠻經常遇到的問題,特別容易出現在高速模塊中。碰到這種問題主要分兩種情況,一種可能是設計問題,另外一個種是clock tree有問題。

小編知識星球簡介(如果你渴望進步,期望高薪,喜歡交流,歡迎加入):

在這裡,目前已經規劃並正著手做的事情:

  • ICC/ICC2 lab的編寫
  • 基於ARM CPU的後端實現流程
  • 利用ICC中CCD(Concurrent Clock Data)實現高性能模塊的設計實現
  • 基於ARM 四核CPU 數字後端Hierarchical Flow 實現教程
  • 時鐘樹結構分析
  • 低功耗設計實現定期將項目中碰到的問題以案例的形式做技術分享

在這裡,各位可以就公眾號推文的內容或者實際項目中遇到的難題提問,小編會在24小時內給予解答(也可以發表你對數字後端設計實現中某個知識點的看法,項目中遇到的難點,困惑或者職業發展規劃等)。

反正它是一個縮減版的論壇,增強了大家的互動性。更為重要的是,微信有知識星球的小程序入口。星球二維碼如下,可以掃描或者長按識別二維碼進入。目前已經有172位星球成員,感謝這172位童鞋的支持!歡迎各位渴望進步,期望高薪的鐵杆粉絲加入!終極目標是打造實現本知識星球全員年薪百萬的宏偉目標。(星友人數超過200人後星球的門票即將調整到228元/年,有需求的朋友趁早上車,目前價格是208元/年,折算每天需要六毛錢

很久沒放出公眾號鏈接了,很多芯朋友表示找不到關注入口。趕緊掃碼或者長按圖片關注起來吧!(小編微信:ic-backend2018


推薦閱讀:
相关文章