# 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

> ### 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
> 
> ### 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 : 輸入訊號之後,輸出訊號開始改變的時間
```

### 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 : 傳輸資料
```

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 :廠商提供常數
TMET : Metastability恢復時間
Tclk: 同步後的Frequency Tclk2
Tdata: 同步前的data的frequecy
若 TCLK & TDATA越大(頻率越快)會將MTBF降低,表示越容易出現Metastability
```

## <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 模型) |

### 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的密度

### 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
```