---
# System prepended metadata

title: ASOC期中題庫

---

# ASOC期中題庫
## FSIC
### FSIC Block Diagram and module function

![image](https://hackmd.io/_uploads/ByavXc7WC.png)
 - PS 為 FPGA的CPU ，處理Testbench(.c的模擬、寫參數進PL)
 - PL 為 FPGA的IP，也就是你寫的Verilog主要的邏輯功能，FSIC的需要的資料寫在DRAM由PS編譯執行
 - FPGA 與 SOC 分別都有一個FSIC，大部分設計相同，但少許部分不同，所以要區分是(FPGA Side or SOC Side)

 :::info 
  - 下面標註藍色區塊為問題答案 
 :::
## FSIC Module:
 :::info 
![image](https://hackmd.io/_uploads/H1b97qQWR.png)
:::
### 訊息傳遞方式(下面為Module Function) : 
* **mprj(Axis interface)** : 接出往FPGA
* **WSB(Wishbone interface)** : 接出往Caravel SOC，進來後會轉成AXILite
* **mail box** : FPGA PS 與 Caravel/SOC 之間的交互方式，比使用mprj有效率
    ### IO_SERDES Module (IS)
     :::info     
    * 由於AXIS線的輸入為32*4，但FPGA為30Pin，所以需要Parallel 轉 serial
     :::
    * 你可以想像成把4條Register，變成一長條Register傳輸資料
    * 如果你的Parallel資料更多，需要把8條變成一長條，則可以去調整IO_SERDES裡頭的變數(下面的m跟n)
    * ![image](https://hackmd.io/_uploads/ByAjX5mZ0.png)
        * 他的公式為 m * core_clk = n * io_clk
        * 4 * core_clk : 1 * io_clk = 4:1 所以就是4條變成一條
    ### CFG_CTRL Module (CC)
    * ![image](https://hackmd.io/_uploads/SkKTmqQZC.png)
    #### Function
    :::info
    1. Wishbond 與 Axilite 訊息傳遞
    2. Arbitrate configuration(訊號的指定控制與先後順序) from SOC and FPGA side
    3. Target Address decoding : 所有的Module都要Address decoder太浪費資源，將Addr訊號統一由CC處理之後發送Enable給各個modul
    :::
    ![image](https://hackmd.io/_uploads/r1rxVqXZR.png)
    #### Describe
    
    * 所有Module的訊號都由他來控制
    * 你可以從FPGA又或SOC通過他寫資料進各種Module
        1. 可以從SOC RISCV讀寫此Module把Wishbone訊號轉成(AXILite)並決定要寫進哪個Module
        2. 也可以從FPGA Side(AXIS)走AXIS/AXIL轉換來讀寫他
    ### AXIS/AXIL Module (AA)
    ::: info
    * AXIS/AXIL Transaction互相轉換
    * 同步mailbox，如果mailbox傳送訊息可以產生中斷訊號
    * 維持fpga/ps存取 SOC user_wrapper
    * remap control register / remap addr register(Register remap)
        * SOC Side跟FPGA Side的Address位址不一樣，要傳送訊息的話就要Remap才能正確寫入
    :::
    ### MailBox (MB)
    ::: info
    * MailBox可以讓SOC Side與FPGA Side直接傳遞訊息(效率高)
    * 兩端(SOC RISCV、FPGA PS)都有一個Mail box來互相傳遞訊息
    * 他會產生一個中斷訊息來讓接收的CPU讀傳送的訊息
    * user address in 0x3300_0000 - 0x33ff_ffff (function有特別寫他的使用位置我就特別寫出來，指的是要傳送mail的Data所可以放置的位置)
    :::
    ### LogicAnalyzer (LA)
    ::: info
    * 黃色線是IP傳送的要顯示的訊號
    * 把USERPRJ_SUBSYS要看波型的訊號傳進來(1T只能看24個)，把訊號傳進FPGA side(只能傳到FPGA Side)
    * 使用RLE(Run-length-encoding)做waveform compression : 就是波型的訊號比較
    :::
    * 他會不斷地傳訊息給PS，你可以在PS那寫一個條件，符合條件才把訊息存下來，然後產生.vcd (波形圖)
    

    ### USERPRJ_SUBSYS
    * 你的IP放置位置
    
    ### AXIS-SW (AS)
    ![image](https://hackmd.io/_uploads/HkCuE9XZ0.png)

    
    ::: info
    * 打包Data根據Round-Robin Arbitration優先機制(照順序傳送增加複雜規則，他沒講規則，總之不能延遲Cycle的Data要先送)送進FIFO之後分送Data出去
    :::
    * Round-Robin Arbitration - MUX
    ![image](https://hackmd.io/_uploads/rk_tV5mbA.png)
    * **DMA** : 直接記憶體存取，直接讀寫系統記憶體，不須經過CPU
    * TID : 傳送資料的位置(除了AA以外都會使用DMA傳送)
        * 00 (Down/Up): usr_project
        * 01 (Down/Up): AA
        * 10 (Up)  : LA

 
### Function of FSIC-AXIS Interface
#### 延伸Axis規格
:::info
 - Downstream FPGA side -> SOC side(背)
 - Upstream FPGA side <- SOC side(背)
 
 - Axilite transaction(Axilite Overload)
    - Downstream/Upstream Axilite transaction
 - Data payload for Axis transaction(Data paload > 接口僅含Data)
     - Downstream/Upstream data
:::
#### Transaction Table
![image](https://hackmd.io/_uploads/H1IcE5XWR.png)
 - 00 : Data,Axis (傳送Axis Data)
 - 01 : Data + Address,Axilite write   (2cycle)
     - 第一個cycle傳Address+enable
     - 第二個cycle傳data
 - 10 : 送 Address 過去 , Axilite read Command   (1cycle)
     - 發送Read Request
 - 11 : 讀 Data 回來, Axilite read Completion


## Low Power

### Concept about the threshold voltage
臨界電壓（英語：Threshold voltage ; 標示為: Vth）[1]，又稱閾電壓[2]或臨界電壓，通常指的是在TTL或MOSFET的傳輸特性曲線（輸出電壓與輸入電壓關係圖線）中，在轉折區中點所對應的輸入電壓的值。
### Advantages of CMOS logic
理想上，PMOS與NMOS不會同時導通而產生VDD到VSS的直流電流，因此功耗較低。
### Techniques to reduce switching power ![image](https://hackmd.io/_uploads/SyMa97fbA.png)

![image](https://hackmd.io/_uploads/HyVkl-Wb0.png)

就是充放電的功耗。
1.降低切換頻率，沒運作的電路可以進入Sleep mode或做clock gating。
2.降低附載電容C(讓邏輯值從0->1所需要的電壓減少)。
3.降低VDD。
4.降低時脈週期。

### Concept about short circuit power/energy
![image](https://hackmd.io/_uploads/S10DWZbb0.png)

### Static power, sequence of significance as process shrinks
![image](https://hackmd.io/_uploads/SyUpWb-ZA.png)
![Uploading file..._vfz3pyk3v]()

### process factors affect leakage
![image](https://hackmd.io/_uploads/H1TkX-Zb0.png)
- VG
- VS
- VT
- VDS
### Techniques to reduce leakage current
- Decrease VG
    - Super cut-off CMOS![image](https://hackmd.io/_uploads/rkptw7--0.png)

- Increase VS
    - source biasing,
    - self reverse biasing,
    - stack effect
    ![image](https://hackmd.io/_uploads/Bkvmv7bb0.png)

- Increase Vt
    - VGS與VT的差值越大，速度越快，但漏電流越多
    ![image](https://hackmd.io/_uploads/rktGV-ZW0.png)
    - 多個VT的CMOS(MTCMOS)
    ![image](https://hackmd.io/_uploads/BJ_IVWb-0.png)
    - 變VT的CMOS(VTCMOS)
    ![image](https://hackmd.io/_uploads/rJO_NWb-C.png)


- Decrease VDS
    - not practical (CMOS output full rail)


### Power down sequence with retention
![image](https://hackmd.io/_uploads/Hk_wlIb-R.png)

### Use of Isolation cells
![image](https://hackmd.io/_uploads/BJc8HZbWC.png)

### Input vector - input pin selection to reduce leakage!
![image](https://hackmd.io/_uploads/BySMIbbZ0.png)



### Level shifter placement
![image](https://hackmd.io/_uploads/SkpjHbbbC.png)
![image](https://hackmd.io/_uploads/B1dhSWZZR.png)
![image](https://hackmd.io/_uploads/r14TSZbZC.png)

## Test
### The order of testing methods (scan, bist, boundary scan, atpg) in the top-down test design flow
1. BIST
2. Boundary Scan
3. Scan chain
4. ATPG

![圖片](https://hackmd.io/_uploads/BkVbNlWbA.png)
(補充)
![圖片](https://hackmd.io/_uploads/SJAswgW-C.png)

### Basic concept about fault and defect level
+ Yield良率:
    + 從生產過程中得到的無缺陷部件
    + $good\_die/total\_die$
+ ![圖片](https://hackmd.io/_uploads/BJAr8eWWA.png)
+ Fault coverge測試覆蓋率:
    + 用來測試模式集在檢測故障方面的品質，會插sa0/sa1看你的pattern有沒有檢測到
    + $檢測到的fault/全部的fault$
+ ![圖片](https://hackmd.io/_uploads/HkkhUxWW0.png)
+ Defect Level
    + 意思就是都pass測試了但是還是有問題的機率，以ppm(百萬分之一)表示
+ ![圖片](https://hackmd.io/_uploads/BkMmDgZZA.png)
+ example
    + 90% yield and 97% fault coverage 
    + defect level or reject rate is estimated to be around 3% or 3000 parts per million
### Ad hoc testing, increase controllability and observation in internal module testing
簡而言之就是把內部結構拉出來方便測試，老師拿了加法器來舉例，如果要測8bit的溢出需要256cycle
![圖片](https://hackmd.io/_uploads/S1kP9l--R.png)
#### controllability
+ 目的:增加可控性(讓他不用等256)
+ 作法:添加mux，如果是test mode就把8-bit reg全部設為1
![圖片](https://hackmd.io/_uploads/BkdO5xbWA.png)

#### observation
+ 目的:增加可觀測性(observation)，如果是兩個4bit加法器，可以提前(16clk)知道有問題
+ 作法:把4C拉出來
+ ![圖片](https://hackmd.io/_uploads/H1FJsxWWA.png)


### Draw a circuit after scan insertion
+ Circuit before Scan-Circuit Insertion
+ ![圖片](https://hackmd.io/_uploads/BJFMhlZb0.png)
+ Circuit after Scan-Circuit Insertion
+ ![圖片](https://hackmd.io/_uploads/H1Ym2gZZ0.png)

### DFT: fix internal reset violation
#### 問題
如果沒有加MUX shift reg可能在test mode會reset F2 F3 F4
![圖片](https://hackmd.io/_uploads/H1eneW--A.png)
#### 解法
加一個MUX在test mode去擋信號
![圖片](https://hackmd.io/_uploads/BJOQZ-Z-0.png)

### Operation of BILBO

+ BILBO介紹
    全名Build-in Logic Block Observer
    是很standard的測試架構如下圖
![image](https://hackmd.io/_uploads/Sk7-gBfbR.png)


+ 結合了幾個mode
    1. Scan mode
    3. LFSR pattern generation mode
    4. Normal mode(DFF)
    5. MISR mode
![image](https://hackmd.io/_uploads/HJdGgBzb0.png)


+ 怎麼操作
    有兩個control pin 
    - Scan mode (B1,B2) = 00
    會讓SI的路打通，當作scan來用
![image](https://hackmd.io/_uploads/BkCQxHzbC.png)


    - LFSR Pattern Generator mode (B1,B2) = 01
    SI還是原來scan的路，但下方的選擇器要打通
![image](https://hackmd.io/_uploads/HyzSeBf-A.png)


    - Normal mode (B1,B2) = 10
        Data(D1、D2,...Dn)直接進來到DFF
![image](https://hackmd.io/_uploads/S17ulBfWC.png)


    - MISR mode (B1, B2) = 11
        Data->DFF的路要通，MUX的路也要通
![image](https://hackmd.io/_uploads/rySYlBz-R.png)



### Concept about Iddq testing
+ IDDQ測試是什麼
    主要是測靜態電流(vdd到vss)，測試時一定要確定chip沒有任何switching，所有input必需在static
+ 注意事項
    CMOS的靜態電流很小，幾mv都可以表示chip有問題
    產生test很快，但整個test時間很長，量電流也很花時間
    測試不需要high-end test(不需要高頻)
    可以測很多的Bridge faults(像是gate到drain、gate到source、interconnect中間的        short、gate oxide的short)

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


    


+ IDDQ測試程序:
    1. apply一個test pattern(會toggle裡面的每一個node)
    2. 等時間settled(很花時間)
    3. 量電流並找出threshold value區分好或壞
    
![image](https://hackmd.io/_uploads/rJ69yBG-R.png)



+ IDDQ 測試模式指南(實際上有很多factor要控制)
    + 假設chip有io buffer，必須把pull-up電路設1，pull-down電路設0
    要量測時要確定裡面狀態還在change，例如internal bus不能在tri-state
    + current drawing circuit確定在low power mode，例如sram是dynamic circuit會一直吃dc curent，要確定power要gate掉否則不能測
    + 測defects時要考慮layout location:
    + short一定是發生local的地方，針對此處產生適當pattern

![image](https://hackmd.io/_uploads/Sk3hJHz-R.png)


+ IDDQ怎麼做測試
    1. 首先需要一個Digital Test System(Tester)，灌test pattern進去把chip的狀態設定好
    2. 會有Device Power Supply(supply你的Idd current到chip裡面)會串聯一個很小的電阻，做current measurement

![image](https://hackmd.io/_uploads/BJGAySG-R.png)





## Clock and RST
### Asynchronous interface
#### 問題
一個怪怪的(非同步)信號要進入另一個正在運行的模塊
![圖片](https://hackmd.io/_uploads/BJeezW--R.png)
#### 結果
+ 會有Metastability，就是說他信號會起起伏伏不穩定，阿如果有fanout可能會有fanout1收到1，fanout2收到0的情況。公式如下(應該不會考)
+ ![圖片](https://hackmd.io/_uploads/r1bMEZWZR.png)
### Safe asynchronous interface circuit
#### 問題
+ 為了解決會有Metastability
#### 方式
+ 用2 FIFO 去同步(之間不能有logic gate)
+ minimum $t_{clk-to-Q}$ delay
+ APR這兩個咚咚要擺一起
+ input不能每個cycle都在toggle，因為它會delay 2 cyc，所以每個cycle都動會看不到
#### 結論
+ Metastability因為她不穩定，可能會造成2 FIFO的輸出會有時序問題
#### 補充
![圖片](https://hackmd.io/_uploads/Hy7RS-b-R.png)
一班來說只能接一個ouput不然會導致狀態機進入不合法的state


### Asynchronous reset synchronizer circuit
Chip裡面有非常多，不同的asynchronous reset domain，因為現在chip大多都是走非同步reset，每個module都可能有不同的reset domain

+ 會需要reset的場景(asynchronous event)
    - module做power gating(on/off)之後，需要reset
    - Fatal error condition
    - Deadlock、watchdog-timer
    - Transient fault(ECC error)
    - test、debug



+ verilog code

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



+ Asynchronous reset注意事項

1. 假設reset是active high的訊號(assert上升、deassert下降)，assert可以非同步，但deassert必須為同步，否則會出問題
    
![image](https://hackmd.io/_uploads/rJnD0NfbA.png)


2. Asynchronous Reset De-assertion Removal/Recovert Time
- reset上升時必需滿足Hold time
- reset下降時必須滿足Setup time

+ Asynchrounous reset為何常用在industry
1. 省面積(save area)
2. datapath timing比較快
3. 不需要clock
![image](https://hackmd.io/_uploads/HyHKREzZC.png)


+ Asynchrounous reset優缺點
- 優點:
    Datapath is clean
    Power-on-reset必須是Asynchrounous
- 缺點:
    DFT會有問題
    STA 的timing check會有問提

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





+ Synchronize(同步asynchronous reset訊號)circuit
![image](https://hackmd.io/_uploads/BJ3RC4M-A.png)


- 典型的Reset synchronizer
    經過兩極的back-to-back DFF，然後產生master reset，再做distribution變成一大堆的    rest訊號到各個DFF
    
![image](https://hackmd.io/_uploads/S1BlyrG-A.png)

    
- master reset訊號出來 -> 每一個DFF的時間，中間經過的buffer delay滿足
    Tck-q + Tpd(buffer tree delay) + Trev(Tsetup) < Tperiod
    
![image](https://hackmd.io/_uploads/B1n-JrfbR.png)


- Reset會有Glitch，所以在同步之前要做一個Deglitch，也叫reset filter: 做法加一個      dely和or-gate
    
![image](https://hackmd.io/_uploads/B1AfkrGZR.png)

