以下三個是最經常被問到的,基本上屬于介紹性的題目,無所謂正確答案,在我看來,這些不算真正的問題。
Discuss about the projects worked in the previous company.
介紹一下你在公司里做過的項目
What are physical design flows, various activities you are involved?
介紹一下你們的后端流程(假設是從gate level netlist開始的),你負責哪一部分?
Designcomplexity, capacity, frequency, process technologies, block size you handled.
芯片的工藝,面積,standard cell 的gate count,FF的個數,memory macro的個數,時鐘頻率,時鐘個數,是hierarchy還是flatten flow,
如果是flatten flow,分成幾個block
下面是第一個真正的問題:
Whypowerstripes routed in the top metal layers?
為什么電源走線選用最上面的金屬層?
難度:1
難度指數:
1:常識--無論是否有工作經驗,都應該準確回答
2:簡單--只要做過一點后端的設計,就應該明白
3:一般--有實際工作經驗一年左右,做過2個以上真正的設計,應該可以答上來
4:較難--在這個特定的領域有較多的研究,并積累了一定的經驗
5:很難--基本上是專家級的牛人了!
答案:
1)高金屬層的IR比較小,EM能力大
2)底層被IP,標準單元用的機會更大
Why do you use alternate routing approach HVH/VHV (Horizontal-Vertical-Horizontal/ Vertical-Horizontal-Vertical)?
為什么要使用橫豎交替的走線方式? (感覺這個問題比較弱智,但是號稱是intel的面試問題,暈!我憧憬和向往的圣地啊!!!)
難度:1
答案:
最有效地利用走線資源
老是簡單的問題比較無趣,問一個貌似簡單,但是不容易回答完整的
How to fix x-talk violation?
如何解決線間干擾?
難度:4 (關于難度的定義,在第一題里面)
(應該至少有5大類解決辦法,wire spacing, shielding, change layer之類的只算其中1類)
答案:
1)upsize victim net driver, downsize aggressor net driver
2)increase wire space, shielding, change layer,change wire width
3)insert butter in victim net
能答出以上3條的,在工作中已經基本夠用,但是還有兩個不常用到的,是AMD的一個大牛告訴我的。
4)把與victim net相連的輸入端改成Hi-Vth的單元
5)改變信號的timing window。這個不易做到,但是也是解決方法
What are several factors to improve propagation delay of standard cell?
哪些因素可以影響標準單元的延遲?
難度:3
答案:
1) PVT
2)input transition, output load
3)Vth
What would you do in order to not use certain cells from the library?
如何禁止使用庫里面的某些單元?
難度:1
答案:
set_dont_use
set_dont_touch
During the synthesis, what type of wire load model are often used?
做RTL綜合時,經常使用的wire load model有哪幾種?
難度:2
注意:問題是wire load model,不是wire load mode,也不是delay model
答案:
1)zero wire load model
2)基于fanout的傳統 WLM
3)基于物理位置(距離)的wire load model,在Cadence的RC中叫PLE,Synopsys叫DC Ultra Topographical
附加問題:
What types of delay model are used in digital design? (數字IC設計中有多少種類型的delay model)
答案:
NLDM
CCS
ECSM
還有一個現在基本不用了的--LDM
How delays are characterized using WLM (Wire Load Model)?
使用一般的WLM (不是zero WLM,也不是按照物理位置算的DCT),DC是如何計算delay的?
難度:2
答案:
DC在計算延時的時候,net的rc就要根據所選取的wrie load model來計算,
計算時和輸出的fanout決定
以smic13的smic13_wl10為例
wire_load("smic13_wl10") {
resistance: 8.5e-8;
capacitance: 1.5e-4;
area: 0.7;
slope: 66.667;
fanout_length(1,66.667);
根據fanout值,由fanout(1,66.667)可以得出互連線長度為66.667,然后根據resistance和capacitance計算出互連線電容為1.5e-4*66.667,互連線電阻為8.5e-8*66.667
,當然如果扇出值表中沒有,就會用到slope,例如扇出為3時,此時估算的互連線長度為1*66.667+(3-1)*slope,再計算出RC值,然后DC由此計算net的延時。
There are source clock clka (create_clock), and generated clock clkb by clka.
In pre-CTS netlist, there is network latency in clka, how this latency propagates to clkb?
In post-CTS netlist, What you need to do for this network latency?
假設有兩個時鐘,原始為clka,生成的時鐘為clkb,
在沒有時鐘樹的網表中,clka的network latency會自動傳遞到clkb上嗎?clkb的latency如何描述?
在生成時鐘樹的網表中,如何處理network latency? clkb的latency又如何描述?
難度:3
答案:
在pre-CTS時,clka的network latency會自動傳到clkb上
在post-CTS時,可以把network latency去掉,通過set_propagated_clock命令,讓工具根據clock tree去計算實際的clock network latency
There are source clock clka (create_clock), and generated clock clkb by clka. how do you specify them in CTS spec file? Assume there is real timing path between clka and clkb.
clkb是clka的生成時鐘,在CTS的spec文件中如何定義這兩個時鐘?假設clka和clkb之間的FF有時序收斂的要求。
難度:3
答案:
在CTS的spec文件中定義 clka 是 root,clkb 為 through pin,再加上那些應該有的skew,transition,insertion delay等就好了,其它的事CTS會給你做
assume in pre-CTS SDC, clock uncertainty for setup contains pll jitter + clock tree skew. How do you set clock uncertainty for hold, and how to modify it to post-CTS sdc?
假設在pre-CTS的時序約束中,setup的clock uncertainty是由PLLjitter和clock tree skew兩部分組成,那么
1)pre-CTS的時序約束中,hold的clock uncertainty是什么?
2)post-CTS的時序約束中,setup和hold的clock uncertainty要做什么樣的修改?
難度:2
答案:
1) pre-CTS,
setup的clock uncertainty = PLL jitter + clock tree skew
hold的clock uncertainty = clock tree skew
2) post-CTS,
setup的clock uncertainty = PLL jitter
hold的clock uncertainty = 0
What are various techniques to resolve routing congestion?
請詳細解釋解決走線阻塞的問題
難度:4
提示:
1) routing congestion發生在后端,前端一般不太考慮這個問題,需要后端自己去想辦法解決,但是解決的辦法不只在后端,也有一些方法需要前端的配合
2) 阻塞有多種情形,要分別討論,沒有一個統一的解決辦法。能夠把大部分的阻塞情況列舉出來,就已經夠4級的水平啦
答案:
1)阻塞在RAM(macro)之間:可能RAM之間的距離沒有計算正確,可以加大RAM之間的間距;扭轉RAM的方向,使得RAM的IO pin朝向更容易走線的那邊;如果是多個RAM共用地址或者數據線,盡量把RAM的地址數據pin對齊
2)阻塞出現在RAM和幫助單元交界的地方:在RAM周圍加一條halo(keepout);把RAM放在四周,盡量把中間留下的空間變成方形;在有阻塞的地方加一些由小的placement blockage組成的矩陣
3)阻塞出現在標準單元的某一塊:也可以加一些由小的placement blockage組成的矩陣;module/instance padding;利用placement guide減少那塊地方的標準單元個數;scan chain reordering也會改善一些阻塞;定義density上限;使用congestion driven的placement,并且要求place之后做congestion優化;在綜合是禁止使用那些pin太多太密集的標準單元(多半是那些復 雜的組合邏輯單元);請前端使用RAM代替觸發器矩陣;請前端修改算法
4)應該盡量減少power route占有的資源,謹慎選擇power mesh使用的金屬層,VIA的大小等。在detail route完成之后,你如果已經試了各種解決signal congestion的方法,還有少量DRC無法解決時,可以考慮切掉部分power mesh
How do you get better skew/insertion delays in CTS (Clock Tree Synthesis)?
如何得到更好的時鐘樹skew和insertion delay
難度:4
答案:
clock mesh 是一種方法。
如果是用普通的CTS的方法,可以從下面幾個方面著手。不太可能一次就把CTS做得很好,要反復調試各種參數,達到最佳效果。
1)合理的clock root和through pin。這個看似CTS會從SDC自動抓出來,但是并不一定是最好的,特別是多個clock相互有重疊的leaf pin時,要特別注意
2)不要用太大或者太小的clock buf/inv
3)選用RC最小的金屬層。如果上面RC最小的金屬層已經被占用,比如RC最小的top,top-1已經不夠clock net時,而top-2到layer2都是一樣的RC時,可以選用layer3/4。為什么不用更高層哪?因為這樣既照顧了layer2/1的pin,有 不用太多的via到更高層
4)如果用double width clock wire,可以適當增大clock buf/inv的size
5)合理的max fanout。有時clock buf/inv的fanout可以超過max_fanout的限制
6)不要把skew設得太小
7)min_insertion_delay = 0ns
8)合理的transition time,不要太小
9)使用postCTS的CTS opt
10)做clock tree時,就直接把clock net走線完成
If giving total standard cell gate count, all memory macro list including memory type, bit width and depth, all other macro with real size, and IO type and total number. How do you estimate the die size?
如果告訴你標準單元的門數,所有內存的類型和邏輯大小,其他IP的實際大小,以及IO cell的種類和數量,你如何估算整個芯片的面積?
難度:3
答案:
IO neck 和 core neck 一般稱作 IO limited 和 core limited,
IO limited :這個芯片的面積是因為IO個數限制(太多),而不得不做得那么大。core部分其實用不了那么大。這時面積計算就簡化為每邊IO個數的計算了。
Core limited:芯片面積是有core部分的決定的,IO沒有那么多
在Core limited情況下,die size的估算如下:
芯片面積 = core面積+ power ring面積 +PAD ring面積
core面積 = RAM面積 + 其他macro面積 + 標準單元面積
RAM面積 = RAM 自身的面積 + RAM power ring面積 + keepout面積+ mbist面積
RAM自身的面積可以通過memory compiler或者查datasheet得到,
有些RAM 可以不要power ring。如果要的話,按照power mesh的寬度 x RAM的長寬 x 2 = 面積
keepout + mbist 的面積一般是RAM自身面積的10%
其他macro的面積,比如PLL,ADC,DAC等,直接把面積加起來,再留3~5%的keepout面積就好了
標準單元的面積=(預估的gate count x 每個gate的面積)/ utilization
utilization與使用的金屬層數和設計的用途有關,簡單地計算方法是
5層metal:50%
6層metal:60%
7層metal:70%
8層metal:80%
以上不包括power專用的金屬層
如果設計是多媒體芯片,一般可以增加3~5% utilizaion,如果是網絡芯片,則要減少3~5%
what is pros and cons of using buffer and invters in CTS?
CTS中使用buffer和inverter的優缺點是什么?
難度:3
答案:
使用BUF:
優點:邏輯簡單,便于post-CTS對時鐘樹的修改
缺點:面積大,功耗大,insertion delay大
使用INV:
優點:面積小,功耗小,insertion delay小,對時鐘duty cycle有利
缺點:不易做時鐘樹的修改
If giving two physical dies as below, and ask you select one of them. How do you pick it up? explain the reason please.
(1) width = 2 x height
(2) height = 2 x width
如果從下面的兩個芯片中選一個給你做后端設計,你選哪個?請說明選擇的理由?
(1) 寬 = 2倍的長
(2) 長 = 2倍的寬
難度:2
答案:
去除不太好用的layer(比如metal1)和power專用layer(比如RDL)后,比較剩下的layer可以提供的H和V的routing resource,如果H的多,就選寬的,反之,就選高的。
if the design is IO limited, how to reduce the die size?
因為IO太多而導致芯片面積過大,有什么方法減小面積?
難度:2
答案:
1)stagger IO,2重io 可以算一個方法
2)IO可以不全放到四邊,只要封裝沒問題就行啦 -- flip chip 算第二個方法
3)如果有多套IOcell可以選擇,盡量選瘦的
4)調整芯片的長寬比
如圖所示電路,時鐘和延遲,計算到F2輸入端D的setup slack,到F4輸入端D的hold slack
難度:3
答案:
F2輸入端D的setup slack是(8+0.5-0.3)-(0.7+7.0)=0.5
F4輸入端D的hold slack是(0.2+0.2)-(0.2+0.2+0.1)=-0.1
using the same logic as question #17, considering OCV on clock path only, which clock buffer will be used for OCV derating calculation and which clock buffer will not (a.k.a. CPPR)?
如果考慮clock path的OCV,在第17題的電路里面,哪幾個時鐘BUF要被用來計算OCV的derating,哪幾個不用(又叫CPPR)?暫不考慮X-talk產生的incremental delay
難度:2
答案:
C1 C2不用算入derating(應該是也計算過,但是會通過CRPR彌補),C3,C4,C5 要計算derating
附錄:
以下是幾個概念的通俗解釋。
OCV:因為制造工藝的限制,同一芯片上不同位置的單元會有一點差異,這就是OCV。現在還有LOCV和AOCV,暫且不提。
derating:是計算OCV的一種簡單方法,在某個單一條件下,比如WC或者BC,把指定path的延遲放大或者縮小一點,這個比率就是derating。注意,這里要強調的是某個單一條件,要么是WC,要么是BC,不能把WC和BC混在一起,再OCV,因為那樣太悲觀,實際上是很難發生的。
除了derating以外,在使用incremental SDF的時候,也會對OCV發生作用。這是明天的問題,比較有難度。
CPPR:一條path的start flop和end flop的時鐘路徑,有時會有一部分是重合的,重合的部分不應該算OCV(注意,這里假設沒有使用incremental SDF),這就叫CPPR。
continue from question #18. Because there is CPPR, the OCV derating on clock path C1 and C2 are canceled. Now giving incremental delay caused by x-talk at net between C1 and C2. Please use the derating to calculate the difference of clock path delay from C1 to C2 (including the net between them) for WC setup and BC hold.
接上面#18的問題繼續討論,因為有CPPR,在C1到C2那段clock path上面的OCV被抵消掉了。現在我們增加一個由x-talk引起的incremental延遲在C1到C2的那段net上,具體數字見圖。
問題:
對于C1到C2那段clock path,
在計算WC setup時,因為OCV引起的路徑延遲的差是多少?
在計算BC hold時,因為OCV引起的路徑延遲的差是多少?
注意:
問題是那段clock path因為OCV引起的path delay的差,不是問path delay的絕對值
難度:5
難度5的問題不是蓋的吧,
好,改為選擇題,
C1到C2一段的OCV延遲的差,
1)在計算WC setup時,是
a)0
b)0.0005
c)0.00075
d)0.0245
2)在計算BC hold時,是
a)0
b)0.001
c)0.0015
d)0.0265
答案:
現在從incremental SDF的格式說起,
(-0.01::0.015)(-0.015::0.01)
左邊括弧里的是rising timing延遲,右邊的是falling timing
括弧里面的一對數字表示在這個條件下(WC或者BC)延遲的最大和最小值
因為是incremental延遲,要和基本延遲結合使用,所以,會有負數出現。
再講OCV的使用incremental SDF的方法,
OCV計算path delay時挑選最困難的情況,
在WC setup時,比如從F1到F2,
計算F1的clock path,就選incremental SDF里面的最大值0.015,
計算F2的clock path,就選最小值-0.01
因為有0.95 derating在-clock,-early上,所以F2的clock path要按比例縮小-0.01x0.95=-0.0095
所以C1到C2那段的OCV的差是0.015+0.0095=0.0245 (選項d)
在BC hold時,比如congF3到F4,因為2個FF在同一個時鐘沿檢測hold timing,
CPPR可以把incremental SDF的延遲也抵消掉,
所以C1到C2那段的OCV的差是0 (選項a)
結論:
計算setup時,CPPR不抵消incremental SDF
計算hold時,CPPR連incremental SDF都可以抵消掉
Explain ECO (Engineering Change Order) methodology.
說一下ECO的流程
難度:2
答案:
ECO有兩種,pre-mask ECO和post-mask ECO,它的分界線就是base layer tape out之前和之后。
pre-mask ECO的流程是
1)后端寫出網表,給前端
2)前端修改這個網表 (一般不再做綜合),可以使用任何標準單元(只要不是dont_use),交給后端
3)后端讀入ECO網表,和ECO之前的place和route
4)ECO place&route,STA, DRC/LVS
post-mask ECO流程,假設你不想動base layer
1)后端寫出網表,給前端
2)前端修改這個網表 (一般不再做綜合),只能使用spare cell或者象gate array一樣的ECO cell
3)后端讀入ECO網表,和ECO之前的place和route
4)如果使用spare cell,不用ECO place;如果用ECO cell,要將ECO cell放在以前帶gate array功能的fill cell的位置上,再按照指定的layer做ECO route
What do you write in CTS spec file?
CTS spec 文件中一般包含哪些內容?
難度:3
答案:
(以Cadence CTS spec file 格式為例)
AutoCTSRootPin pad
Period
MaxDelay
MinDelay
MaxSkew
SinkMaxTran
BufMaxTran
Buffer
NoGating NO/YES
DetailReport YES/NO
#SetDPinAsSync NO/YES
SetIoPinAsSync YES/NO
RouteClkNet YES/NO
PostOpt YES/NO
OptAddBuffer YES/NO
#RouteType specialRoute
#LeafRouteType regularRoute
ExcludedPin
leafpin leafport
hroughpin throughport
clkgroup
macromodel pin
If there are too many pins of the logic cells in one place within core, what kind of issues would you face and how will you resolve?
如果在core里面某一塊有太多的標準單元的pin,有可能出現什么place&route的問題,如何解決?
難度:3
答案:
1)禁止使用pin太多的cell
2)減小utilization,方法很多
3)看v h 可用資源,適當調整moudle 形狀
If there are DRC (spacing,short), hold and setup violations in the design, you don't have enough time to fix all of them before tape out, which one you will fix first, which one you can leave it as is? Why?
如果設計中有DRC (特指spacing和short),hold和setup違反,tape out之前,你已經沒有時間去修改所有這些違反,那么你首先修改哪個?哪個可以不管?請說明理由。
難度:2
答案:
1) short, spacing
2) hold
3) 如果沒有時間,setup可以忽略
how to set multicycle path constraint?
如何設定multicycle path?
難度:1
提示:在一般情況下,multicycle -setup 和 -hold 要成對使用
答案:
clock domain:
fast-slow:set_multicycle_path num -setup -from clk1 -to clk2 -start
set_multicycle_path num-1 -hold -from clk1 -to clk2 -start
slow-fast:set_multicycle_paht num -setup -from clk2 -to clk1 -end
set_multicycle_path num-1 -hole -from clk2 -to clk1 -end
data path:
set_multicycle_path num -setup -from data1 -to data2
set_multicycle_path num-1 -hold -from data1 -to data2
延伸問題:
為什么-hold一般是-setup的n-1?如果只有-setup木有-hold會怎樣?
答案:
hold 是對前后兩個flip flop在相同時鐘沿的檢查.設了n-1就是返回n-1個周期做hold的檢查,滿足了兩個flip flop在同一個時鐘沿。如果沒有-hold 默認是檢查n前一個有效時鐘沿,如果n>=2,hold的檢查就不是在同一個時鐘效沿,對hold的要求就要多n-1個周期,那樣太苛刻了,一般時序無法收斂
how are timing constraints developed, such as clock, generated clock, IO timing, exception? What backend team contribute to it?
一個設計的時序約束是怎么寫出來的?請大略說明時鐘,IO delay,false path, multicycle path是如何得到的?在完成時序約束的過程中,后端可以給予什么樣的幫助?
難度:2
答案:
clock和generated clock一般由設計spec決定。除非有些個別的local generated clock可以有前端工程師自己添加
IO timing與系統設計有關,應該參考/兼顧其他芯片的IO時序,由前端工程師作出
exception(false path, multicycle path)一般是由前端工程師在做設計時決定的
后端可以提供clock network delay/skew,DRV,以及幫助檢查SDC是否合格
In regular backend flow with only one functional mode SDC, please explain timing closure methodology/issue/fixes in pre-CTS, post-CTS and post-Route stages.
在只有一個function SDC的普通后端流程中,對于pre-CTS, post-CTS 和 post-Route這三步,請分別講述它們在時序收斂上的方法,一般會遇到的問題和解決方法。
難度:3
暫時不考慮DFT。后續的每日一題中,會加入DFT mode SDC。
答案:
pre-CTS時,使用ideal clock,只fix setup
post-CTS后,使用propagate clock,可以只fix setup,檢查hold,但可以不fix hold
post-Route后,依然使用propagate clock,fix setup和hold
具體遇到的問題和解決方法:
pre-CTS: 如果有setup,重在調整floorplan,buffer tree結構
Post-CTS: 如果有setup,重在調整clock tree,buffer tree結構或者size
Post-Route: 如果有setup/hold,微調clock tree/buffer tree的size,routing channel和圖層,實在不行,回到CTS
Continue from previous question, if adding one more DFT timing constraint, how do you handle the multiple SDC? Using Encounter or ICC commands, please explain the detail what you do.
繼續#26的問題,如果再給一個DFT時序約束,在后端流程中,你如何處理多個SDC?假設使用Encounter或者ICC,請詳細介紹如何設置
難度:3
答案:
簡單地說就是使用MMMC。
在Encounter里面,要逐步定義,
create_library_set
create_op_cond
create_rc_corner
create_delay_corner
createPowerDomain
create_constraint_mode
create_analysis_view
set_default_view
set_timing_derate
對設計和SDC仔細分析后,也可以合并function SDC和幾個DFT SDC,這個屬于難度5的做法
There are function SDC with multiple clock domain and scan SDC with an individual scan clock. Assume those functional clock are un-balanced, how do you balance the scan clock?
假設一個設計的function SDC中有多個時鐘,在scan mode下,另有一個單獨的scan clock,如果functional的各個時鐘樹之間是不平衡的,請問如何平衡那個scan時鐘?
難度:4
答案:
如果CTS支持multi-mode,直接使用即可。
如果不支持,或者MMCTS效果不理想,就是在CTS spec中,同時定義function 和 DFT 的時鐘,然后在scan clock里面,把MUX設為leave pin,再讓它們與function clok到MUX的延遲做動態平衡
There are function SDC, scan shift, scan capture, scan at-speed, mbist at-speed, and jtag SDC. Considering CPU run time, you can't add all of them into MMMC. Then which SDC you will add in to MMMC setup, and hold?
在一個設計中 有多個時序約束,象function,scan shift, scan capture, scan at-speed, mbist at-speed, 和 jtag SDC,為了減少運行時間,不能把它們都放入MMMC中,你選擇哪些放入MMMC的setup中,哪些放入MMMC的hold中?
提示:選擇的SDC要盡量的少,并且盡可能多地覆蓋其他沒有入選的SDC下的時序
難度:4
答案:
這個要從每個SDC的特點著手,個人經驗,與設計有關,不敢保證使用與所有設計。
1) scan shift:速度很慢,不用太擔心setup,但是hold很重要,一旦hold有問題,所有與scan有關的測試全泡湯
2) scan capture:也是慢速,但是會有很多hold出來,特別是在不同的function時鐘之間
3) scan at-speed:高速,解決了它的setup,其他DFT的setup基本上就連帶著解決了
4) mbist at-speed:高速,但是涉及的邏輯不多
5) jtag:慢速,很容易與function SDC合并
所有結論是
MMMC setup:function + scan at-speed
MMMC Hold: function(+jtag) + scan shift + scan capture
Explain SDF and SPEF back annotation timing correlation issue, especially in different STA tools
請解釋反標SDF和SPEF在時序分析時的差異,特別是用不同的STA工具檢查timing時
難度:3
答案:
使用SDF做時序分析,無論使用什么tools,其結果應該是一樣的,沒有差異
使用SPEF時,因為工具需要把SPEF換算成SDF,這時會產生差異。
所以建議使用一個你信得過的工具生成SDF,然后大家都使用這個SDF做STA和仿真