上週小編知識星球上有人想要一個innovus ECO flow。這套flow參考指令碼已經發布在星球上了。今天小編抽空拓展下這個主題的乾貨分享,希望對大家有所幫助。那麼,我們就直接進入主題吧。

ECO中文翻譯是工程變更(

Engineering Change Order

)。只要你參與到實際專案了,肯定或多或少都接聽過接觸到ECO這個事情。因為design的bug無處不在,而且後仿用的case 無法覆蓋100%的應用場景,甚至還有後仿無法驗證的部分。

ECO主要包括Timing ECO和

Function ECO

。Timing ECO是指在timing signoff階段所做的timing方面的最佳化。而Function ECO又可以分為

Pre-mask ECO和Post-mask ECO

Pre-mask ECO是指晶片做Mask前所做的ECO。而Post-mask ECO是指晶片tapeout後或wafer out後的ECO。

Timing ECO

Timing ECO主要涉及timing signoff階段的setup,hold和timing drc fixing等內容。關於setup,hold等timing fixing的方法和reference flow見之前分享的技術專題(

知識星球上有整套pt timing fixing的flow

)。

這裡重點提下timing eco階段的

clock tree eco

。因為有的時候在timing signoff階段會發現某些clock tree長的不太合理,導致存在比較大的setup或hold violation。這個時候可以選擇做clock eco來解決。

數字晶片設計實現中修復setup違例的方法彙總

那麼,innovus中如何做clock eco呢?clock eco不外乎就是把tree人工

做長或者做短

。所以對應的命令如下:

ecoAddRepeater 或DeleteRepeater

Pre-mask ECO

很多公司(特別是大公司),他們一般都有規定哪個階段必須RTL freeze,這個時候不會也不允許再更新新的RTL,即使後面模擬驗證有bug。為什麼不讓更新RTL呢?因為此時數字後端工程師可能都做好佈局佈線,timing也沒什麼大問題了,都準備開始修timing了。如果此時release新的RTL,那就意味著需要重新跑整個flow,從綜合到PR,再到fixing timing。一方面會嚴重影響整個專案的Tapeout時間,從而影響Wafer out和晶片上市的時間。另外一方面,數字後端工程師可能有想罵人的衝動。

因此,此時數字前端負責寫coding的工程師只能在final RTL的基礎上,透過

編寫ECO指令碼

的方式來實現功能上的ECO。

當然,如果需要增加部分新feature,而這個feature要引入一個新module,那麼此時可能需要

重新release RTL

。如果你的flow已經調的比較順,而且還預留了部分margin,那麼可能對專案的Schedule影響還可以。

ECO代價:時間成本,相對較小

Post-mask ECO (Metal前ECO)

當數字後端實現後的design,timing已經符合signoff 標準,DRC已經clean,LVS已經pass,IR drop,MVRC,Formality,DRCPLUS等都已經pass。但是數字前端設計工程師還沒來得及做完大部分case的後仿,而且晶片又面臨著Timing-TO-Market的壓力。此時,老闆可能會說先Tapeout吧(就是開始傳GDSII給Foundary)。

為什麼敢這麼做呢?是在賭博嗎?其實肯定有賭博的成分,但是更多的還是自信和滿滿的底氣。因為前一週foundary會先做

base layer

的加工。只要後期模擬發現的問題,不需要再新增額外的cell,就不耽誤之前的Tapeout(此處有點像流水線)。即使發現需要新加幾個cell,這個時候仍然可以透過替換後端實現過程中所加的ECO cell或者spare cell來實現。

關於如何預先加ECO CELL和spare cell以及如何在PR中利用它們來做Function ECO 的主題,各位可以移步小編知識星球進行查閱。

Tapeout後的ECO

當晶片已經回來,在測試過程中發現的bug,然後又必須fix掉的bug(無法透過軟體繞過去或者代價太高)。這個時候需要透過ECO來解決。這個時候做ECO的代價相對前面兩種大很多,都是要消耗很多的真金白銀,而且有晶片量產的巨大壓力。改動少的可能就改幾層Metal layer,多的可能就需要動十幾層Metal layer,甚至重新流片。

做ECO之前,老闆肯定會讓數字前端設計工程師出ECO方案,同時讓後端工程師進行評估,主要評估需要改動的層數,timing 是否能快速收斂等方面的風險。

ECO代價:時間成本+money 較大

介紹完各種不同型別的ECO後,我們具體來看看Innovus中如何做Function ECO。

Innovus ECO Steps:

1 讀入新netlist

source newchip。globals

init_design

or

source oldchip。globals

set init_verilog “newchip。v”

init_design

2 Load old floorplan/placement/routing data

loadFPlan oldchip。fp

ecoDefIn -postMask -reportFile InDefeco。rpt G1。pr。def

applyGlobalNets

3 Low power related changes (

Low Power Flow

read_power_intent -cpf test。cpf

commit_power_intent -keepRows

對於Low power相關訊號的改動,需要讀入cpf檔案,確保跨power domain訊號的正確處理。如果是非low power flow,可以跳過這一步。

4 指定Spare cell list或者ECO cell

specifySpareGate -inst SPARE*

5 Incremental placement

ecoPlace -useSpareCells true

這步是告訴工具去找相關功能的spare cell或ECO cell進行替換。當然也可以人工告訴工具你想要換的cell mappin關係,比如下面的命令。

ecoSwapSpareCell i_9649 spare1

6 Tie訊號連線

新加進去的cell,有的pin可能是需要接0或1,那麼此時innovus是支援自動在附近尋找已有的tie cell進行連線。當然你也可以利用eco cell來create一顆新的tie cell。

addTieHiLo -postMask [-cell “tieHighCellName tieLowCellName”] [-createHierPort {true | false}]

7 ECO Route

將ECO新加入的cell擺好位置,就可以設定需要freeze的layer,然後開始ecoRoute了。

ecoRoute

-modifyOnlyLayers 1:2

在innovus中做完eco後,需要寫出eco後design的gds做LVL檢查,以確保工具ecoRoute後所動用的layer是符合我們的期望。那麼,怎麼做檢查呢?具體的LVL golden 指令碼,請移步小編的知識星球查閱下載。

【思考題】

在innovus中做完eco後的database是否只有eco相關的點才重新繞線?為什麼?

LVL結果符合預期之後,還需要進行RC抽取,DRC修復和Timing signoff。這裡的timing主要涉及setup,hold和max transition等檢查。

如果ECO後存在max transition,hold和

noise

問題,請問該怎麼修復呢?方法其實很簡單,修復的方法與正常flow是一樣的,透過插buffer可以解決。唯一不同的是這裡需要插入ECO buffer。

數字IC設計實現之hold violation修復大全

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

這裡再留一個思考題:如果存在max transition問題,請問這裡能否透過sizeup來修復呢?

如果innovus eco route後有

較多drc violation

,怎麼辦呢?這個C家的工具也有verify_drc並且fix drc的功能。所以可以透過ecoRoute -fixDrc來實現自動修復。如果你非得問我工具能否100%修好,我一定告訴你那是不可能的。如果工具幫我們修復大部分的DRC,是不是就應該知足了呢?

說到這個,想起來之前有個小夥伴私信問某家專門做ECO的工具是否真的那麼智慧,能夠自己處理好所有ECO? 小編至今已經有九年多的數字後端一線工作經驗,反正我是從來沒見過有這樣的工具,也不知道這種工具何時能橫空出世。

好了,今天的內容分享就到這裡。另外,因為公眾號更改推送規則,小編分享的每篇乾貨不一定能及時推送給各位。為了避免錯過精彩內容,請關注星標公眾號,點選“在看”,點贊並分享到朋友圈,讓推送演算法知道你是社群的老鐵,這樣就不會錯過任何精彩內容了。

如果你想和小編有更進一步的溝通交流的機會,歡迎加入小編知識星球,讓我們一起學習成長,共同進步。相信在這裡能讓你成就一個

更完美的自己

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

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

ICC/ICC2 lab的編寫

基於ARM CPU的後端實現流程

利用ICC中CCD(Concurrent Clock Data)實現高效能模組的設計實現

基於ARM 四核CPU 數字後端Hierarchical Flow 實現教程

時鐘樹結構分析

低功耗設計實現

定期將專案中碰到的問題以案例的形式做技術分享

基於90nm專案案例實現教程(ICC和Innovus配套教程)

數字IC行業百科全書

吾愛IC社群

知識星球星主為公眾號”吾愛IC社群”號主,從事數字ic後端設計實現工作近八年,擁有

55nm,40nm,28nm,22nm,14nm

等先進工藝節點成功流片經驗,成功

tapeout過三十多顆晶片

這裡是一個數字IC設計實現高度垂直細分領域的知識社群,是數字IC設計實現領域中最大,最高階的知識交流和分享的社群,這裡聚集了無數數字ic前端設計,後端實現,模擬layout工程師們。

在這裡大家可以多建立連線,多交流,多拓展人脈圈,甚至可以組織線下活動。在這裡你可以就數字ic後端設計實現領域的相關問題進行提問,也可以就職業發展規劃問題進行諮詢,也可以把困擾你的問題拿出來一起討論交流。對於提問的問題儘量做到有問必答,如遇到不懂的,也會透過查閱資料或者請教專家來解答問題。在這裡鼓勵大家積極發表主題,提問,從而促進整個知識社群的良性迴圈。每個月小編會針對活躍使用者進行打賞。

最重要的是在這裡,能夠藉助這個知識社群,短期內實現年薪百萬的夢想!不管你信不信,反正已經進來的朋友肯定是相信的!相遇是一種緣分,相識更是一種難能可貴的情分!如若有緣你我一定會相遇相識!知識星球二維碼如下,可以掃描或者長按識別二維碼進入。目前已經有731

星球成員,感謝這

731

童鞋的支援!歡迎各位渴望進步,期望高薪的鐵桿粉絲加入!終極目標是打造實現本知識星球

全員年薪百萬的宏偉目標