---
# System prepended metadata

title: 數位IC前段考題 正在更新中

---

# Digital IC Design interview 正在更新中
這是集結各前輩分享還有我自己面試後整理得面試考題  
reference  
1. https://www.dcard.tw/f/tech_job/p/238023076
2. https://www.dcard.tw/f/tech_job/p/240953224
3. https://blog.csdn.net/gaoxcv/article/details/122090250
4. STA refernce https://hackmd.io/@derek8955/HymBdS1li#-Term-definition-

## <font color=blue> STA</font>
### 1. 什麼是STA 什麼是DTA
```
STA:  
不依賴波型直接檢查電路中所有path的Timing 是否符合constraint要求，不檢查Function simulation
DTA:  
透過pattern使用波型模擬驗證設計是否符合提m波型模擬驗證設計是否符合提timing  
因為要對所有的電路跑模擬，速度一定不會有STA快，且STA可以確保所有的Timing path都被detect

設計初期使用STA檢查timing，function驗證使用DTA確認Setup/hold timing 是否violation  
APR後使用STA加入寄生參數確認timing，DTA模擬實際情況檢查RC寄生效應與邏輯功能
```


|  | STA | DTA|
| -------- | -------- | -------- |
| 優點 |  高效率，檢查所有的timing path  | 精確模擬實際狀況，(function simulation)     |
| 缺點 | 無法模擬實際波形，對asynchronize需要額外的constrain設定     | 覆蓋率有限 + 耗能  |
|EDA|Primetime|VCS|

### 2. 進行CDC Synchronizer 時，constrain 需要做什麼處理才可以有效避免timing violation
```
可以使用
1. false path 
2. set_clock group 
3. set_annotated_check(primetime 重新編寫.sdf 讓STA 忽略 DFF1(F1) 檢查)  

ex. asynchronous -group{clk1} -group{clk2} -group{clk3}
ex. set_annotated_check -0 -setup -f1/CK -to F1/D -clock rise
```
### 3. 什麼是Setup/Hold/Arrival/Require TIME
```
Setup Time: 輸入資料d在clk edge來之前必須保持穩定的最短時間，因為一個ff是由兩個latch組成，如果setup time不夠data就不能在clk rise edge前穩定的input進入dff
```
```
Hold Time: 在clk edge來之後，data 穩定的時間
``` 
```
Arrival Time: data path 上資料到達的時間
```   
```
Require Time: clock path 上CLK到達的時間
```   
### 4. 什麼是Slack  
```
require time 和 arrival time的時間差
```
### 5. STA中有哪些data path   
```
1. in2reg
2. reg2reg
3. reg2out
4. in2out(盡量避免這條路徑)
```
### 6. 有哪些timing constraints exceptions   
```
1. input/output delay
2. false path
3. multi path
4. max/min delay
```  
更詳細的說明在 https://hackmd.io/KYHxs7UERNCLVKZZ4WPvXg

### 7. 什麼是clock latency/ clock uncertainty/ clock skew/ clock jitter   
![image](https://hackmd.io/_uploads/ryW5X7c71l.png)
 
 
> ### clock latency : clock source 到 clk pin 之間的latency
> latency 可以分為source latency & network latency, source latency 由sdc設定根據design 無法優化，而network latency 則可以由CTS優化，這部分就要牽涉到，執行的STAGE，若是目前尚未長CLOCK TREE(CTS)那基本上Network latency 就是由constrain 設定，若經過CTS則會根據CTS長的好壞影響到Network latency
> ![image](https://hackmd.io/_uploads/B1h5GmqX1g.png)



> ### clock uncertainty : 由於jitter和skew 加上一些margin 導致的時鐘相對於理想位置的偏差
> #### clock skew : clk 到第一個dff 跟第二個dff之間的時間差，指的是Tlaunch - Tcapture
> #### clock jitter : 在時脈產生器產生時脈時，clock的每個週期時間都會有微小的偏差，這種偏差叫做clock jitter
> 這兩個觀念在看timing report的時候特別重要，在postlayout 前，基本上我們認為clock tree 為idea，因此不會有skew，(skew會影響holdtime check，這也是為什麼在PreCTS只會檢查setup time)，而在postlayout後clock uncertainty在timing report中顯示的結果也只會包含jitter & margin(不包含skew)，這是因為postlayout階段CTS會優化clock tree並且clk tree到不同的FF之間的時間落差稱為SKEW，會分別顯示在timing report 中的network latency (只要將launch path 的network latency - capture path 的network latency 得到的結果就是skew)

reference  
https://zhuanlan.zhihu.com/p/571140143
https://blog.csdn.net/weixin_45799954/article/details/114948996
https://blog.csdn.net/graymount/article/details/106045757
https://blog.csdn.net/weixin_45791458/article/details/136109703
https://bbs.eetop.cn/thread-980086-1-1.htm


### 8. 什麼是cell delay(propagation delay)/contamination delay ?
```
propagation delay : 輸入訊號改變之後到輸出訊號穩定的時間
contamination delay : 輸入訊號之後，輸出訊號開始改變的時間
```
![image](https://hackmd.io/_uploads/SyZX87qmkx.png)

### 9. spef / sdf/ .lib 的差異是什麼
```

```

## <font color=blue> 觀念題</font>
### 1. glitch
```
輸入的訊號改變或是經過一些邏輯運算，輸出訊號無法完全同步，造成短時間的錯誤波型輸出(這種時脈非常短)的錯誤訊號被稱為glitch

可以用gray code 減少glitch 的產生  
如何解glitch以static power reduction 中的clock gated來說
加入一個"latch"電路  
參考 https://hackmd.io/@derek8955/SkeOMZKzo#Clock-Gating
```
### 2. 除頻電路
```
1. 使用counter
2. 使用 !作為判斷
3. 比較特別的是 /3 => 2.5CYCLE
```
reference : https://hackmd.io/@q7QVb5coQ1GGIzNCQcFyJw/verilog_div3code
### 3. clock gating作法
參考 https://hackmd.io/@derek8955/SkeOMZKzo#Clock-Gating
### 4. DMA (Direct Memory Access) 的運作原理 
```
用來提供外部裝置或是記憶體之間的直接高速資料傳輸，不需要經過CPU，節省CPU的資源
```
YOUTUBE (講解什麼是DMA)
https://www.youtube.com/watch?v=2_X9qD12_pw
CSDN
https://blog.csdn.net/weixin_51244852/article/details/134357186

### 5.合成時下constraint multi-cycle & false path 的目的, 並相對應的電路上要怎麼處理
```
multi- cycle path:
部分特定電路數據需要多個cycle才可以完成傳輸，像是大型的乘法器有可能一個CYCLE沒有辦法完成運算，若要延長cycle就需要另外設定multi-cycle放寬時序要求


false-path:
特定部分電路不影響電路的正確功能，所以可以忽略不檢查，用來減少不必要的違反time violation report，通常用來檢查CDC的電路，  
false-path經常與clock group一起討論，因為false path必須要一條一條的設定，以CDC來說CLK1-to-CLK2傳輸間一定會遇到metastability的問題，所以一定要設定false path，為求方便可直接設定clock group CLK1 2 CLK2不檢查
```
參考 
https://hackmd.io/KYHxs7UERNCLVKZZ4WPvXg


### 6. 如何做LVS驗證，什麼是LVS
```
LVS確認LAYOUT與Netlist是否一致  

將APR後產生的netlist.v 和 gds 轉為.spi檔案
確認抽取出的spice netlist 是否相同
```
### 7. 


## <font color=blue> CDC</font>
可參考
1. https://hackmd.io/QyJXUtEERzCUbuocM0GkFg
2. https://hackmd.io/@TRChen/S1DOZOOS6
3. 老李系列
### 1. 解決Metastability的方法
```
單bit
1. 2 dff synchronizer
2. pulse synchronizer
多bit
1. NDFF_BUS with Gray Code(多dff)
2. MUX_NDFF/MUX_PULSE for Data Path(快到慢會miss)
3. Handshake(latency 大, 面積小)
4. Asynchronous FIFO 
```

### 2. CDC中 slow clk 到 fast clk 時，在slow clk 的一個週期中，經歷了多次fast clk high edge，那麼對應的Gray Code 就會有多個 bits 發生變化，這個不會產生多個bits同步的問題嗎？
> 
雖然slow clk 同步過來的值可能和之前的值相比有多個bit發生變化，但是這些bit的翻轉不是同時發生的
且多bit變化是針對slow clk 的，fast clk 每次最多也只能看到1bit變化(也就是說對於fast clk 而言，source clk 變化多bit，但這些變化並不是同時發生的，也就沒有之前說的convergence的問題)


### 3. 為甚麼多bit數據傳輸, 不能使用1-bit synchronizer分別同步?
```
不同位元因為硬體電路中的寄生效應等等造成latency可能會不同，造成位元之間不同步(Data Convergence Issue)，有些位元提前到達或是延遲造成數據錯誤
```
### 4. Pulse synchronizer的原理以及應用場景
```
1. 將aclk的pulse轉換為一個level
2. 將2-flop syn 同步信號
3. 在bclk將同步過來的訊號轉為pulse - 用xor
注意:
將pulse syn 變成level，若這個level 無法滿足bclk的3 edge 要求，就無法同步
```
### 5. Mux synchronizer 的原理以及應用場景
```
用MUX作為control signal 用來控制
1. control path :　單bit 用來控制2 synchronizer傳遞enable給mux
2. data path    :  傳輸資料
```
![image](https://hackmd.io/_uploads/ry8rxInzJe.png)
reference :[ https://medium.com/@victor785413/%E9%80%B2%E9%9A%8E%E6%8A%80%E5%B7%A7-clock-domain-crossing-cdc-fpga-asic-design-1a67f6cbeadc]

### 6. MTBF(mean time between failures)是什麼
```
平均故障時間間隔，數值越高表示越穩定
總運作時間 = 21 小時
事件總數 = 3
MTBF = 總運作時間/事件數
MTBF = 21/3 = 7 小時
```

### 7. 畫出 Async FIFO & gray code 並解釋
reference : https://hackmd.io/QyJXUtEERzCUbuocM0GkFg?both

### 8. 什麼是metastability?
```
訊號在不同時序間傳遞，違反set time and hold time constrain，造成一些不穩定狀態，無法輸出正確的邏輯電位，可能造成電路錯誤

需要注意的是  不可能完全避免metastability
1. 這是一個物理現象，訊號輸出不會立刻到高邏輯或是低邏輯
2. ACLK 可能會剛好在BCLK變化時進行取樣，即使經過嚴謹的設計仍無法完全避免
```
### 9. Two flip-flop synchronizer 
```
2個DFF組成的synchronizer
第一個syn是用來將input 第一次同步，訊號可能處於metastability
第二個syn是用來二次同步，經過第一次同步後的訊號，已經穩定
ps 若是還擔心可以用3dff syn但大部分的形況不需要
```

### 10. 為什麼要使用gray code
```
1. 減少cross clk glitch 產生
2. 提升同步穩定性
3. check FIFO empty or full easier
4. avoid data covergence
```

### 11. FIFO 的 sram size 怎麼設定
```
若為 2^n 次方的深度
ptr 則使用 n+1 bit
為什麼要這樣設定，是因為我們只需要判斷MSB就可以知道FIFO是否為FULL的狀態
```
### 12. 如何判定要使用2dff 還是 3dff 做為synchronizer
```
MTBF
以大部分的情況而言，使用2DFF就可以避免metastable的問題了，但我們要如何確認需要使用3dff，不太可能去真的模擬時間，以100MHZ為例大概就要957E年才會發生
這時就要使用MTBF做為判斷標準了，
如下圖所示
c1 & c2 :廠商提供常數
ＴMET : Metastability恢復時間
Tclk: 同步後的Frequency Tclk2
Tdata: 同步前的data的frequecy
若 TCLK & TDATA越大(頻率越快)會將MTBF降低，表示越容易出現Metastability
```
![image](https://hackmd.io/_uploads/HyDfPvA4Je.png)




## <font color=blue> EDA & IC Design Flow </font>
### 1. 完整的Design flow + EDA Tool + 使用的檔案
<font color=red>**務必一定要背熟(EDA Tool 可以選擇自己常用的講就好)**</font>


|Stage                          |  EDA Tools                                   |  Input Files |Output Files  |
|-----------------|-------------|-------------|-----------|
|1. RTL Design                  |  Verilog/VHDL Editors                        |  Functional specifications, RTL files  |Completed RTL files|                             
|2. Functional Simulation       |  Synopsys VCS, Cadence Xcelium, QuestaSim    |  RTL files, Testbench files|Waveform files (VCD/FSDB), Simulation logs|
|3. Logic Synthesis             |  Synopsys Design Compiler, Cadence Genus     |  RTL files, SDC files, .lib files, Process technology files|Gate-Level Netlist, Timing reports, Area reports |
|4. Static Timing Analysis      |  Synopsys PrimeTime, Cadence Tempus          |  Gate-Level Netlist, SDC files, .lib files, SPEF files (opt.)  |Timing reports, SDF files     |       
|5. Gate-Level Simulation       |  Synopsys VCS, Cadence Xcelium, QuestaSim    |  Gate-Level Netlist, SDF files, Testbench files |Waveform files (VCD/FSDB), Simulation logs |                        
|6. Place & Route (PnR)         |  Cadence Innovus, Synopsys IC Compiler II    |  Gate-Level Netlist, LEF files, SDC files, Process technology files|DEF files, GDSII files, Layout reports      | 
|7. Parasitic Extraction        |  Synopsys StarRC, Cadence Quantus            |  DEF/GDSII files, LEF files|SPEF files                                   |                                           
|8. Post-Layout STA             |  Synopsys PrimeTime, Cadence Tempus          |  Gate-Level Netlist, SPEF files, SDC files   |Post-Layout Timing Reports, Updated SDF files |                            
|9. Post-Simulation             |  Synopsys VCS, Cadence Xcelium, QuestaSim    |  Post-Layout Netlist, SPEF files, Updated SDF files, Testbench files|Waveform files (VCD/FSDB), Functional and timing validation reports| 
|10. DRC & LVS Verification     |  Mentor Calibre, Synopsys IC Validator       |  GDSII files, LEF files, Process technology files  |DRC reports, LVS reports                              |                 
|11. Power Analysis             |  Synopsys PrimePower, Cadence Voltus         |  Gate-Level Netlist, SPEF files, VCD/SAIF files  |Power reports    





|  | Primetime | Design Complier |
| -------- | -------- | -------- |
| 主要用途    |STA     | Synthesis + STA(輔助) |
| 應用狀況    | post-layout(加入實際的RC等 .spef)     | RTL TO GLS(logic function & timing) Wireload Model(假設的 RC 模型)    |

![image](https://hackmd.io/_uploads/HyehNncXkg.png)



### 2. RTL simulation 和 gate level netlist simulation 和 Post simulation 差異
```
RTL simulation: check function & behavior work
Gate level netlist simulation: 加入sdf 模擬時序延遲，驗證netlist 和 RTL 功能一樣
Post simulation: 精確模擬無力布局layout後，是否滿足time constrain(加入RC值 and 布局latency ...)
```


| RTL Simulation | Gate-Level Simulation | 	Post-Layout Simulation |
| -------- | -------- | -------- |
| RTL 文件 + Testbench    | 門級網表 + SDF + Testbench    | 門級網表 + SDF + RC 數據 + Testbench     |
| 	驗證功能邏輯  | 驗證功能 + 時序   | 驗證功能 + 時序 + 物理效應     |

### 3. SDC 什麼是 false path、multi cycle、input/output delay、max/min delay

reference https://hackmd.io/KYHxs7UERNCLVKZZ4WPvXg

## <font color=blue> POWER</font>



## <font color=blue> APR</font>
### 1. APR flow
```
data prepare ->floorplan -> powerplan -> placement -> cts & opt -> routing & opt -> DRV & LVS -> sign off
```
### 2. Power ring:
```
1. 穩定VDD & GND可以均勻的分布到所有區域
2. 減少IR-DROP
3. SUPPORT HIGH POWER
```
#### 常見問題
IR DRIP 過大　
原因 : power ring 寬度不足
解決 : 增加power ring 寬度、改善power mesh的密度

![image](https://hackmd.io/_uploads/SJE9RBoGJx.png)

### 3. EM/ IR Drop/ Antenna Effect/ Crosstalk 是什麼?

|   | 描述| 分析工具 |解決方法 |
| -------- | -------- | -------- |-------- |
| IR Drop    | 電流流經電阻產生的電壓下降，導致供電不足無法正常運行。    | （Power Grid Analysis）   |增加電源線寬、優化電源網格的拓撲結構以減少壓降    |
| Crosstalk  | 佈線間距過近導致耦合電容過大，引起信號干擾，可能導致信號質量下降或錯誤    | PrimeTime SI   |添加buffer或增加wire之間的距離 or 降低信號切換速度      |
| EM  | 電流過大或線路太細導致金屬原子遷移，損壞線路結構，可能造成短路或斷路   | Power Integrity Tools |加線路寬度，降低電流密度  |
|Antenna Effect  |晶片製造過程中，金屬線過度吸收電荷，導致擊穿gate   | Calibre LVS |分層佈線（Layer Transition），將長金屬分段並轉移至高層金屬 or  在 PnR 工具中啟用自動修復功能 |

### 4. 什麼是CTS，流程是什麼?
clock balance，維持訊號完整性  
ex  
1. clock uncertainty
2. clock skew
3. clock transition 
4. clock latency  

最主要的目的是降低clock skew & latency

```
1 最小化 Clock Skew    
2 控制 Insertion Delay 
3 平衡功耗和面積
```
CTS 是在 Placement 完成後、Routing 開始前執行，由於CTS會增加BUF/INV做clock banlance 因此可能導致congestion /crosstalk /latency  




參考:
https://blog.csdn.net/sinat_41774721/article/details/125503446?ops_request_misc=%257B%2522request%255Fid%2522%253A%252247dd0d6ada1c3d4bbbcab2ea4953b980%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=47dd0d6ada1c3d4bbbcab2ea4953b980&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-125503446-null-null.142^v101^control&utm_term=CTS&spm=1018.2226.3001.4187



### 5. 什麼是MCMM（multi corner multi mode）

### 6. 進行APR前需要做什麼動作，才可以讓CTS更完整
**PreCTS:**
1. 在cts前會先進行report time(PreCTS)這個階段必須沒有setup time Violation，若有問題可以用ccopt做opt(限制MAX cap/ transition/ fanout)
2. 若無法成功，就回前步驟改變i/o順序，RAM 位置等
  
**CTS:**  

一般來說uncertainty 的設定可以分為prects & postcts  
>#### PreCTS  
##### set-up: PLL jitter+skew
##### hold: 預估的clock skew(基本上來說，我們會預期經過cts後skew == 0 ，所以HOLD 基本上在prects就是稍微看一下不太會真正的修正)
>#### PostCTS:
##### set-up: PLL jitter
##### hold: 0
reference:https://hackmd.io/@linda8832825/BJgVL6NK6A
https://ithelp.ithome.com.tw/articles/10286131?sc=rss.qu
### 7. 什麼是ccopt


### 8. Congestion 怎麼解決


## <font color=blue> AXI</font>
### 1. AXI4有幾條CHANNEL分別是什麼
> 5 CHANNEL
```
1. Write Channel
2. Write Address Channel
3. Write Response Channel
4. Read Channel
5. Read Address Channel
```

