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