# IC面試 基本知識_彙整 ###### tags: `面試 and 數位IC` ## (影)系統設計實務_蕭宇宏 其中 循序邏輯電路實作 內容頗重要 * [積體電路產業介紹(影)](https://www.youtube.com/watch?v=7hsOabEHSHA&list=PLI6pJZaOCtF1-GOBBFwGtAYclboJfTFws) ### IC Design分類 ![](https://i.imgur.com/7irQOQC.png) ![](https://i.imgur.com/vBkiOod.png) ### 半導體 #### n型半導體 ![](https://i.imgur.com/5DBmrG7.png) #### P型半導體 ![](https://i.imgur.com/RGNeyPf.png) #### 二極體(P+N型) ![](https://i.imgur.com/eMbQG7n.png) ![](https://i.imgur.com/1C4dZ1R.png) 在順向偏壓情況下,為導通現象 反向偏壓會造成PN之間的障蔽,由N到P電流小,趨近0,稱為斷路 ![](https://i.imgur.com/IMHAGlM.png) 允許電流流向右邊,具有整流的功能 ### 電晶體 #### nMOS ![](https://i.imgur.com/NIsL8D1.png) #### pMOS (記法,P有圓圈) ![](https://i.imgur.com/PladJdb.png) * [nMOS pMOS原理]](https://www.youtube.com/watch?v=DmwJpwiTnNc&list=PLI6pJZaOCtF1-GOBBFwGtAYclboJfTFws&index=3) ### blocking(有阻隔) vs non-blocking(無阻隔) (<=) ![](https://i.imgur.com/pQduMqC.png) 無法預期最後會怎麼樣 ![](https://i.imgur.com/2jNpEcL.png) non-blocking 會取到上一個時間點的d1 d2 d3 ![](https://i.imgur.com/5WY7QpB.png) 有阻隔其實是串在一起 無阻隔是會有正反器存在 ![](https://i.imgur.com/Zg3I8DR.png) 當clk 從0 到1時會執行 ![](https://i.imgur.com/FTClCe8.png) 通過邏輯砸會變慢,此在抓上升邊緣 ### port對接 by name的方式 ![](https://i.imgur.com/2oDba1a.png) ![](https://i.imgur.com/FK1k5so.png) ### 邏輯運算子 位元運算子 ![](https://i.imgur.com/FZ2tTiw.png) ![](https://i.imgur.com/6KVQxi1.png) ### post edge ![](https://i.imgur.com/LDIhS0T.png) ### 要知道寫的程式最後對應什麼架構 ![](https://i.imgur.com/lzDyEvO.png) ![](https://i.imgur.com/2MNfbaV.png) 會由最長的電路,來決定整個電路的延遲時間 ![](https://i.imgur.com/KZTXSvf.png) ![](https://i.imgur.com/4E1Dx44.png) ### latch ![](https://i.imgur.com/F9vAjF7.png) ![](https://i.imgur.com/XgulUAu.png) 將兩電路比較 ![](https://i.imgur.com/7nqa1bs.png) 因為clk的duty取不一樣,造成兩個電路的結果不同 latch在進行電路行為時,可以因為clk的影響,或是電路的延遲,會產生布一樣的情形 ### Flip-flop ![](https://i.imgur.com/RqGBq5l.png) out只會在正緣來的時候,才會改變狀態,下一次正緣來時,才會再變 不像latch 會有多次變換的情形 ![](https://i.imgur.com/DILPYi0.png) clk的duty改變,不會影響 ![](https://i.imgur.com/UmcA0jm.png) #### latch的影響 ![](https://i.imgur.com/xQbr0H1.png) #### 產生latch情況 ![](https://i.imgur.com/q8lH0xi.png) ![](https://i.imgur.com/8RVDD7O.png) 只對out1 做設定,漏了out2 ![](https://i.imgur.com/cDj1zds.png) 給初始值,就可以解決 latch語法補充 ![](https://i.imgur.com/YTIRYB2.png) #### 同步與非同步 重置 重置:讓正反器一開始回歸初始狀態,因為沒有這件事情,會造成電路內部不可預期的現象 ![](https://i.imgur.com/opwhjN6.png) 同步:正反器的輸出,無論何時都是需透過clk的正緣發生時才做改變 非同步:重置信號直接打入正反器的內部,內部可以直接接收重置信號,就會讓他無論在何時,只要信號一發生,就會做重置。也就是不需要跟clk同步進行,只要rst信號一發生,就可以及時做到重置了 #### 合成latch 與 DFF 比較 ![](https://i.imgur.com/pcDrqbK.png) (左)準位觸發 用組合邏輯電路,有if 沒有else,會合成latch (右)邊緣觸發 合成出來會是正反器 ### block 跟 non_block要注意的點 ![](https://i.imgur.com/8X1bBCj.png) combinational circuit用block,像C,照順序執行 ![](https://i.imgur.com/Dezkt7l.png) 這裡combinational circuit用non-block寫法,不推薦 這張圖重點是 non-block會用舊值x,而不是直接用新的值 ### 控制單元 and 資料運算單元 ![](https://i.imgur.com/GjnOdyt.png) http://ocw.ksu.edu.tw/file.php/6/%E6%95%99%E6%9D%90%E6%8A%95%E5%BD%B1%E7%89%87%EF%BC%88pdf%EF%BC%89/%E7%AC%AC%E4%BA%94%E7%AB%A0.pdf ALU部分(p33-38未細看) ### 加法器 原先3數相加sum = a + b + c會使用 2個加法器 ![](https://i.imgur.com/SvfkEEO.png) 不過由於加法器有進位傳遞的問題,可能造成延遲時間較長的現象 #### 以 進位儲存加法器 來實現 疊加 ![](https://i.imgur.com/YP5fHvW.png) ![](https://i.imgur.com/mUA5SjL.png) 所有進位位元不會往下一個做傳遞 希望最後用一個一般加法器將進位加起來(半加法或全加法來做) ![](https://i.imgur.com/lUro0WW.png) ![](https://i.imgur.com/1XMbGXZ.png) ![](https://i.imgur.com/pM95Dbv.png) #### BCD加法器 (遇到10要能進位,後四碼表示個位數) 以4個bit,表示十進位的1個位元 ![](https://i.imgur.com/AEF7pob.png) 4個輸入與1位元進位->5個輸出 BCD+BCD 如果<9,即是BCD 若>9,要再轉為BCD->+110 ![](https://i.imgur.com/0KnzZLb.png) C4判斷為k本來是1,或是+6完後有進位 ### 減法器 HA FA RCA LAC 以加法器做成的減法器 #### 一個位元 ![](https://i.imgur.com/rrjdH2T.png) A XOR C (if c = 1,做1’s complement) (if c = 0, 直接輸出) #### 多個位元 ![](https://i.imgur.com/NytlpbP.png) 純減法器 #### 半減法器 ![](https://i.imgur.com/Qvw7hRl.png) #### 全減法器 ![](https://i.imgur.com/TAMbGJd.png) #### 10進位加減法器 注意減法時,取9的補數+1 A-B = A+(B的10補數) ![](https://i.imgur.com/07FZUoL.png) ### 乘法器 一位元*一位元 相當於做AND 二位元*二位元 ![](https://i.imgur.com/EnKnDgR.png) 四位元*四位元 ![](https://i.imgur.com/sCr7Wta.png) ### 計數器 #### 同步計數器 ![](https://i.imgur.com/oRElY3H.png) #### 上數計數器 ![](https://i.imgur.com/NT3RtCA.png) 計數器需要一個rst來判斷有沒有重置 以及加法器+1,比較器判斷是否有到5 ![](https://i.imgur.com/BAgUq6X.png) #### 下數計數器 ![](https://i.imgur.com/eVDtdf7.png) #### 特定數值同步計數器 ### 除頻器-循序邏輯電路0 ![](https://i.imgur.com/ki2W8Lh.png) 看clk1 -> 原來的週期變成了2倍,頻率邊1/2 ![](https://i.imgur.com/sqZWOXn.png) ![](https://i.imgur.com/XcP2vdK.png) 1/4、1/8雖然可以透過以1/2的方式串聯(先1/2再1/2... 但此種方式會造成延遲,不建議,而且只能做出2的次方 可以用計數器的方式來實現 1/6除頻器 ->每3個時脈反相一次 ![](https://i.imgur.com/vIgyuAI.png) 左圖,當比較器比到2時會做回歸 右圖,會多一個多工器來做選擇,有時維持不變,有時反向(在此每數3個cycle,做反向 ![](https://i.imgur.com/SubFKIl.png) ![](https://i.imgur.com/0dXbcWq.png) ![](https://i.imgur.com/aaoT8HR.png) ![](https://i.imgur.com/4M3mGnn.png) 2倍除頻 簡單基本 偶數倍除頻 使用counter 4倍 01 01 01 01 6倍 012 012 012 8倍 0123 0123 0123 奇數倍除頻 posedge clk A (把A先寫好) negedge clk B <= A clk_div = A|B A的寫法 3倍除頻 012(2拉起) 012 012 5倍除頻 01234(34拉起) 01234 01234 7被除頻 0123456(456拉起) 0123456 0123456 #### 非同步計數器(ripple counter) 漣波計數器 ![](https://i.imgur.com/tnUuZUW.png) 第二級的時脈輸入,是由第一級的輸出送入 三個的輸出結果(Q0 Q1 Q2),就是非同步的結果 ![](https://i.imgur.com/2KhNkeD.png) 剛好可以當除頻信號 ![](https://i.imgur.com/CyKJgzK.png) ![](https://i.imgur.com/bwaymdi.png) 出現負緣時並不會剛好同個時間做反相,會稍微延遲一段時間 傳遞延遲會經過一級級正反器越來越擴大,會有不穩定的部分,這是非同步計數器的問題 ### 除彈跳電路 ![](https://i.imgur.com/EiK8QG7.png) 當電路button按下時,訊號並無法馬上穩定 button鬆開時也是如此 會造成問題 ![](https://i.imgur.com/CEYUXxd.png) 希望達到此目的 ![](https://i.imgur.com/0mFnn4p.png) 只有在counter數到20ns,才轉為低電位 否則是高電位 ![](https://i.imgur.com/Heyu7Nm.png) ![](https://i.imgur.com/y1NNIGI.png) #### 亞穩態 不能確認寫入正反器到底是1 or 0 ![](https://i.imgur.com/yZAY0Da.png) 造成電路不穩定 ![](https://i.imgur.com/i13qAo9.png) 透過多幾個暫存器(扮演synchronizer的角色),讓後面能滿足setup time ,hold time ### 狀態機實現 ![](https://i.imgur.com/uuvQ7Pz.png) Moore machine 輸出只與目前狀態有關係 mealy machine 輸出邏輯跟目前狀態以及 輸入 有關係 (有glitch問題) ![](https://i.imgur.com/Fr4mlTE.png) ### 資料運算單元 #### 時脈週期與頻率 ![](https://i.imgur.com/B5faoUa.png) ![](https://i.imgur.com/MvxhKkt.png) 1.實際電路有一個clk->Q 延遲 2.組合邏輯延遲 3.setup time的問題(前面課程有提!?),對一個暫存器來說,必須要在clk來臨前,要先有一段時間的穩定 由1 2 3來決定週期時間 主要是由組合邏輯電路佔大多數的延遲 ![](https://i.imgur.com/xB36kTV.png) critical path:電路中,最會影響時間的那一條路徑,由這條路徑來決定週期 ![](https://i.imgur.com/ZCodJzF.png) "最快" 可以跑到 71Mhz ##### 邏輯合成 ![](https://i.imgur.com/ce8yR3l.png) ![](https://i.imgur.com/4clCDV2.png) 在給定的時間下,合成器去合出最佳的結果 #### 管線化架構 ![](https://i.imgur.com/49SbvRi.png) ![](https://i.imgur.com/VJm7Cxe.png) 適度的暫存器可以加快電路 ![](https://i.imgur.com/TZxlwgP.png) 找最長路徑,用register截斷 但是單純截斷結果是會有問題的 ![](https://i.imgur.com/4EVOSqv.png) 要時間上一致的話,要在對等的地方都要加register->cut set (把電路完整切成兩半) ![](https://i.imgur.com/m3IZ3dA.png) 處理一筆資料要2cycle,真的有比較快嗎? 是有的!!!!! ![](https://i.imgur.com/LnQaNTu.png) 第一筆資料進到A 第一筆資料進到B,第二筆資料進到A(時間可重複進行) 總共N+1個cycle,但一個cycle只要7ns(原本N個cycle,每cycle要14ns) ## (影)阿嬤都能懂的 IC 設計流程 ![](https://i.imgur.com/II2joYX.png) [RTLcode] Pre-sim 寫的每個東西做模擬(加法氣、乘法器......),確定功能是正確的 Synthesis 用標準元件組成(越少元件組成越好) [當合成完後,RTL code -> Gate Level Netlist] 只知道多少元件,還不知道在IC上的位置 Placement擺放 決定在IC上的實體位置 Routing 在IC上決定這些線要怎麼拉怎麼連 [Layout] 元件在IC上的實體位置,詳細的IC設計圖 ![](https://i.imgur.com/CDiDGPF.png) post-sim & verification 設計圖layout完後,驗證確定沒有問題 tape-out 交給IC製造公司做出來 Fabrication 晶片製造 Packaging & Testing 測試出來的晶片是否有問題,沒問題的封裝起來 [Chip] ![](https://i.imgur.com/zeQbsRx.png) 自動化輔助 Placement & Routing ![](https://i.imgur.com/UQkTWyD.png) 在決定實體位置前都叫做前端 之後的叫後端 ~~~~~~~~ Pre-Sim 是 針對電路的 function 做模擬,此時只在意由 HDL 所撰寫的程式之 function 是否正確,而 Post-Sim 則是針對合成過且做完 APR(Auto Place and Route) 的電路做模擬,以確保所設計的電路實現在 FPGA 上時,與 Pre-Sim 的 function 一 ~~~~~~~~ 補充2020.11.15 ~~~~~~~~ IC後端流程內 APR完會吐出 layout (CHIP.gds) 與 Verilog 檔 (CHIP_route.v)。 DRC: Design Rules Check 的簡稱,晶圓廠針對自家的製程技術所作的規範,使用這些製程都必須遵守這些規範 在LVS( Layout Versus Schematic):將APR流程跑完後生成的 CHIP_route.v,與修完DRC後的 layout 驗證邏輯是否相同。流程為先將 CHIP_route.v 轉成 CHIP.spi 檔,再與 layout 的 gds 檔作邏輯的驗證。 ~~~~~~~~ ![](https://i.imgur.com/8J9pV0C.png) rtl跑testbench simulation 用 nc_verilog 跑合成 用 design compiler ## 【Verilog HDL 訓練】第 14 天(glitch-free的兩個時鐘切換電路) 2個參考來源 https://www.twblogs.net/a/5ce3b04dbd9eee6726cad363 https://zhuanlan.zhihu.com/p/51859467 ![](https://i.imgur.com/xRUhp3n.png) 当SELECT信号改变时,如果当前(原本)时钟源正好处于高电平,这样切换则引起了毛刺,造成系統不穩定。 如果兩個不同clk去output,有可能會造成glitch, 使輸出的clk不是這兩者之一 解決方式 芯片在启动时,两个触发器都应该处于0状态。 ![](https://i.imgur.com/RVNMqTd.png) ## Clock gating 參考資料 https://ithelp.ithome.com.tw/articles/10196427?sc=iThelpR 在寫一個循序邏輯電路時,是不是每一個always block都有一個posedge clk,clock也是一個dynamic power consumption的原因之一,如果說當邏輯閘沒有要變化時,我們把指定的always block的clock凍結起來不要讓他震盪,也是low power方法之一,稱為clock gating, ![](https://i.imgur.com/qqdHeNQ.png) ## Metastability 亞穩態 (clock domain crossing (跨時脈域)問題) https://www.tutortecho.com/post/ic-design-metastability-clock-domain-crossing-cdc-method 所以到底是什麼造成 meta stable (亞穩態) meta stable (亞穩態)指的就是訊號在某段時間內不能保證為1或是為0 ## Gate level VS Behavior ![](https://i.imgur.com/XMrvJ1B.png) ![](https://i.imgur.com/v5P0uY0.png) ## STA相關 http://guqian110.github.io/pages/2015/03/18/static_timing_analysis_1_basic.html ### Skew ![](https://i.imgur.com/WgI1Rdr.png) ![](https://i.imgur.com/xbRoalT.png) ![](https://i.imgur.com/9evXqdg.png) 静态时序分析 STA 的主要目的是在上述可能的电路偏移情况存在的情况下,验证所有信号能够准时到达,并保证电路的正常功能。 STA的目的就是要保证 DUT(Device Under Test)中所有的路径满足内部时序单位对 setup time 和 hold time 的要求。信号可以及时的从任一时序路径的起点传递到终点,同时要求在电路正常工作所需的时间内保持恒定。 slack = required time - arrival time >0,如此電路可以正常運作 setup time violation ![](https://i.imgur.com/JrvCKGK.png) hold time violation ![](https://i.imgur.com/xNmgDmH.png) ## 處理器種類 CPU、GPU、MCU、DSP、MPU各是什麼?|數位積體電路IC介紹 https://www.stockfeel.com.tw/%E8%99%95%E7%90%86%E5%99%A8-cpu-gpu-mcu-dsp-mpu/ ## SOC簡介 https://www.stockfeel.com.tw/soc-%E4%BB%8B%E7%B4%B9-%E7%B3%BB%E7%B5%B1%E5%96%AE%E6%99%B6%E7%89%87-system-on-a-chip-%E5%84%AA%E9%BB%9E-%E6%8C%91%E6%88%B0/ ## 4個基本數值 ![](https://i.imgur.com/AAlFy7U.png) ## 設計流程相關 ![](https://i.imgur.com/SZRVE5R.png) Synthesis: translation + optimization + mapping translation: compile成high level的gate level (HDL compiler) Optimize + Mapping (Design compiler) The synthesis is constraint driven and technology ![](https://i.imgur.com/cCmEUem.png) ![](https://i.imgur.com/LAM2l0f.png) **檔案的整理** Design Ware Library 像合成的函式庫 HDL compiler會吃進RTL Design和Design Ware Library,轉成high level的gate level(例如:一群FF、MUX、加法器、乘法器、ALU) Design compiler會吃進Design constraint和HDL Compiler給他的檔案,還有Design Ware Library給他的,輸出Optimized Gate-level Netlist,這個步驟才有吃進process的資訊 .synopsys_dc.setup:設定環境的library,提供給DC做合成 ex:設定要去哪個(search) path尋找SRAM或I/O pad的cell、還有target (technology) library 為哪個操作環境的db,有設定才會認得SRAM和I/O pad,才會在area report反映在Macro的面積 synopsys design constraints:.sdc檔 ,記載一些合成前的設定,提供給DC做合成 裡面有的內容如clk的period給多長來操作,clk長怎樣、不明朗的範圍多大、hold time多少、哪些block不要動且要設為ideal、一些會影響delay的設定、操作環境為何、set maximal area constraint、cost是以什麼考量為優先的、有沒有設定wire load model、線的推動力怎樣、input/output delay多大 Gate level netlist: 根據DC compiler吃的.sdc、HDL compiler提供的high gate level netlist、designware library的參數去合成gate level的netlist,提供給ncverilog做模擬用 Standard Delay format:.sdf,紀錄一些時間的資訊,給ncverilog做模擬用 應該是根據合成前.sdc中的設定,萃取出一些的時間資訊,例如input delay、output delay、wire load model的delay為何、hold time為多少,然後提供給ncverilog做模擬 Process Library:提供合成後verilog netlist map 到 cell的 behavior 之後timing的資訊,提供給ncverilog做模擬用 ex:tsmc13.v .ddc:DC合成完後會儲存的工作檔 ## 加法器 沒有考慮到進位傳輸 (Carry Propagation) 問題之加法電路,因此種加法器僅可執行兩個 1 位元之二進位數相加,故被稱為半加法器 (Half Adder)。 若有考慮進位傳輸之問題,便可將加法器串接起來,以便執行更多位元加法運算,故這種加法器被冠以全加法器(Full Adder) 之名稱。 半加法器 ![](https://i.imgur.com/tqzAWQl.png) 全加法器 跟半加法器比,多了一個cin,使得低位相加進位後,可以傳給高位 ![](https://i.imgur.com/8VrnaAp.png) s = a ^ b ^ cin cout = (a & b) | ((a ^ b) & c) ## verilog基礎 ~~~~~~ Verilog Code是硬體,寫出來的就是元件(不只是語法) 所以,新手要練到 1.在寫的同時,可以知道自己寫的是什麼元件 2.在合成的同時,可以知道合成出來的檔是什麼 是一件很重要的事 ~~~~~~ 位元運算子(Bitwise operator),數位設計上有 AND、OR、NOT、XOR 與補數等運算,在 C 中提供這些運算的就是位元運算子,它們的對應分別是 AND (&)、OR(|)、NOT(!)、XOR(^)與補數(~)。 一個很重要的觀念:要做signed operation時,須先將所有數字做sign extension後才能相加相乘。 https://www.cnblogs.com/oomusou/archive/2009/10/31/verilog_signed_overflow.html bit數的量化 ![](https://i.imgur.com/BRuYpUp.png) 3個bit * 2個bit => 5bit 7*3 = 21 2個bit * 2個biy => 4bit 3*3 = 9 ![](https://i.imgur.com/5Ugwa7T.png) sign binary number中,2's complement是最常用的 因此不管是程式語言 的 整數表示、加法器的實作… 幾乎皆採用 2 的補數 表示法。 ![](https://i.imgur.com/vCcFEiO.png) 因為2's complement運算不會錯 2's complement詳細參考 https://chi_gitbook.gitbooks.io/personal-note/content/signed_and_unsigned_numbers.html ![](https://i.imgur.com/9prSOte.png) 2's complement快速轉換方式(轉到digital) ![](https://i.imgur.com/mDR1P5w.png) digital轉到2的補數 ![](https://i.imgur.com/15qKgRq.png) 找-3 1. 3 => 011 2. 011 => 100 3. 100 => 101 ( 1-4 = -3) 問題:一個8 bits的 2's complement 值域範圍 總共有2^8,256個數,128個MSB是1(-128~-1),128個MSB是0(0~127) ![](https://i.imgur.com/wtO9XiC.png) 左移位數會增加,右移位數不變 ![](https://i.imgur.com/6xb7CaI.png) ![](https://i.imgur.com/O4DQORi.png) 做comparison時,兩邊只要有一個是unsigned時,會把兩邊都當作unsigned,所以A被當作unsigned ### 比較器寫法 ![](https://i.imgur.com/ORz9iv2.png) 待整理 setup time hold time https://ithelp.ithome.com.tw/articles/10196141 ![](https://i.imgur.com/tAtYIYh.png) 部落格 感覺可看 Low power https://ithelp.ithome.com.tw/articles/10196427?sc=iThelpR 基本參考 https://caslab.ee.ncku.edu.tw/dokuwiki/_media/course:ldl:105b:laboratory-12.pdf ### 0402 IC design整個流程 #### LAB2 ![](https://i.imgur.com/kgMMQ6p.png) nWave for Waveform Debugging A waveform analysis tool for viewing *.fsdb & *.vcd waveform files Value Change Dump (VCD) format Fast Signal Database (FSDB) format #### LAB3 Synopsys Design Vision (GUI) / Design Compiler (textmode) .DDC檔 存下合成好的設計 Design Compiler 不能直接讀.lib檔(library),所以要先轉成.db檔 #### LAB4 DFT (插入 scan chain) insert scan chain into a synthesized gate level design To invoke Dft Compiler, you can do either one dc_shell (command mode) dv & (GUI mode) ALU_syn.v -> your gate level netlist(The circuit after synthesis). 合成完的檔案 加上 scan_chain後 -> ALU_syn_dft.v ALU_syn_dft.ddc像是工作檔 DFT compiler會做出 spf檔 做完 DFT,再來做 Automatic Test Pattern Generation (ATPG) ATPG generate single stuck-at fault test patterns And then, you can do either one tmax -nogui (command mode) tmax & (GUI mode) The spf file tells the ATPG how to operate the circuit in test mode. 產生出來的Pattern,有兩種儲存格式 WGL (Waveform Generation Language) STIL (Standard Test Interface Language) #### LAB5 STA 分析timing與解決timing violation Invoke PrimeTime STA tool To invoke PrimeTime, you can do either one pt_shell (command mode) primetime & (GUI mode) DRC > design rule check set Design constraint report timing 有Specify the clock name, period, and clock characteristic 有set wire load model STA使用3個時機點 ![](https://i.imgur.com/X3E10Af.png) STA check the circuit timing in each path  Check timing after synthesis  Check timing after scan chain insertion  Check timing after Placement & Routing ![](https://i.imgur.com/hpmm8d0.png) #### LAB6 跟assertion有關,沒很懂 #### LAB7 place & routing Design import, Floorplan, Power plan (Power Ring, Power Stripe) 使用Innovus Specifying Scan Chain 由於 Design 中已經有插入 Scan chain,所以必須跟 Innovus 講 Scan chain 的 位置 (scan in, scan out),此步驟須由 terminal 輸入 command: Floorplan *floor plan IC 設計的 floorplan,也是一樣,就是佈局前所要先做的平面圖。而 floorplanning 就是製作平面圖的工作或是流程。 替 Memory 加上 Halo 要做這個步驟的原因是因為 Halo 區塊之下不會擺放任何的 Standard cell,這使得之後 Memory 在做繞線 (Routing) 時可以有比較大的空間,不至於讓 Standard cell 擠在 Memory 周圍。 Tool 跑完之後可以在 Terminal 看到分析之後的結果,主要是 WNS (Worst Negative Slack),如果這個值是負的,則表示目前的 Placement 結果無法達到 CHIP.sdc 裡面的 Timing constraint。 power plan *Create Power-ring:主要是打在 core 周圍,讓晶片內部的供電電壓均勻,避免 IR drop。 做完之後可以看到 Core 跟 I/O Pad 之間多了一圈 Power ring。 *Power pad 做完之後會發現有四條 Power pad 已經連接到 Power ring 上面。 *Power-stripe 這個做法主要也是用來使 core 內部的供電電壓均勻。 stripes比喻 :中間重了田,每個植物Standard cell都要吃到電,拉一條像高速公路,提供中間的cell有充分的電流 *DRC Check Route Power *connect powerpin 設為不可見,就可以看到 core cell 的 power 都連到左右的 power ring 上] *DRC Check Placement * Pre-CTS Timing Analysis 作CTS之前,先看timing,WNS、TNS都要看到是正的 怎麼把clock 繞線、standard cell繞線,輸出成.v檔是下次Lab要做的事情 #### LAB8 Clock Tree Synthesis(CTS) 執行 CTS 前要先把 sdc 檔中的 latency 拿掉 Pos-CTS指的是做完CTS之後 WNS要正的 Add Tie High/Low Cell 將 1’b0 及 1’b1 連到 tie high 或 tie low cell 上 Routing *Route *Timing Analysis, Post route Optimization 需要讓WNS為正 *Add Core Filler *Finish 11.1 File Save Netlist..., Netlist File 填 CHIP.v, OK 11.2 Timing Write SDF..., 取消 Ideal Clock, 存成 CHIP.sdf, OK 11.3 File Save DEF..., 點選 Save Scan,File Name 填 CHIP.def, OK *Add dummy metal 這步是因為 chip out 時是一層層往上疊,若中間有洞容易垮,所以加上 dummy metal 來撐 *Add bonding pad 在 IO pad 最外圍又加上一些 cell,就是 bonding pad 為了在 LVS 驗證與 posim extraction 時可以找到 IO power 的位置,要在 export GDS 之間在 IO power pad 外加上 power label,預計輸入的位置在右下角的 IO power pad 及 IO ground pad 外的 bounding pad 上 (注意:label 一定要打在 pad 上面才有效) Stream out GDS Appendix: Power Analysis #### LAB9 若 Calibre DRC/LVS Lab 有錯誤 使用Virtuoso Layout Editor 修改 icfb DRC錯誤 (讀gds檔) 現在需要簡查此 nor2 電路是否有 DRC 錯誤,因此需先將此電路的 gds 檔案,streamout 出來 修改路徑 ![](https://i.imgur.com/bMynxYj.png) nor2.sum檔案內容 SUMMARY地方 ![](https://i.imgur.com/SvAYDER.png) 有3個DRC錯誤 LVS錯誤 (讀gds檔 與 spice) 此時 gds 和 spice 都產生完成了,即可開始檢查 LVS ![](https://i.imgur.com/0ub6Xiu.png) 執行完顯示X,表示做錯 ![](https://i.imgur.com/7XfBCFi.png) 若是正確會看到 lvs.rep 內顯示CORRECT 與勾勾和笑臉如下所示。即代表 layout 的接線與 spice 一致 ![](https://i.imgur.com/PpQAduN.png) 註:DRC 和 LVS 都是與製程相關的檔案,都是由 foundry 廠所提供的,會因著不同的公司與不同的製程有所變化。因為台積電要求所有製程機密接需保密,因此此 lab 是使用 CIC 180nm 所提供的虛擬製程,無法實際下線也非機密,僅可用在練習畫 layout 與跑 DRC/LVS/PEX 等實驗上。 #### LAB10 Design Verification(DV) lec -nogui 與LEC有關 Summary of Formal Methods ![](https://i.imgur.com/WL1t7DR.png) ### CVSD課程內容 有時會忘記 ![](https://i.imgur.com/ZU1RNNK.png) 只要有值就是1 ![](https://i.imgur.com/EQNZXgh.png) ![](https://i.imgur.com/qLfJ4Vi.png) 寫在tb內,CLK寫法 ![](https://i.imgur.com/VZ9nzeo.png) 合成完後再次測試,合成後就會有時間資訊(合成前模擬都不管timing,只管functionality) 減少power 降低Clk frequency clock gating ![](https://i.imgur.com/1Kcx11P.png) 兩個方法都可以降低power 1.pipeline做完,把clk period拉長,拉回跟原本的throughput一樣,可以省電壓 2.parallelizing ,一次做3倍的量,時間可以拉長3倍,省電壓 以下的方法可以減少Power Consumption (1)讓電路正常運作就好 (2)不要用的時候會關掉clk (3)平常沒在運作時可以讓clk的速度變慢 (4)做不重要的動作時,可以把電壓降低 (5)減少不必要的切換,例如counter數完時,讓他停住不要再跳 基本spec到circuit寫法 ![](https://i.imgur.com/UilIZ51.png) SDF檔 (Standard Delay Format) 與gate-level有關 Latency是一個data進來到完成運算所需要的時間 Throughput是單位時間內可完成的運算量 合成時要加library ![](https://i.imgur.com/3A0wh2y.png) .lib: 給人看,.db: 給tool看 skew time:因走線有寄生電容,線越長Clock越晚到,所以相較之下,Data會來得比較快 這一筆資料來得比較快,對setup time有利,所以不等式是用加的。 下一筆資料也來的比較快,所以對hold time不利,所以不等式是用減的。 set-up time 在檢查時要取最慢的path. hold time 要取最快的path. T~setup~ < T~CLK~ - T~CLKtoQ~ + T~data~(combinational) ==+== T~skew~ T~hold~ < T~CLKtoQ~ + T~data~ - T~skew~ Clock gating ![](https://i.imgur.com/kIZB6bF.png) https://www.tutortecho.com/post/ic-design-clock-gating-icg ![](https://i.imgur.com/TGa5Quh.png) 重點是 Total "cell" area ![](https://i.imgur.com/8IQDWkQ.png) ![](https://i.imgur.com/TEVYjWq.png) DC 是合成電路的Tool,將RTL --> Gate level Astro 是APR 的Tool ( Auto place and Route ),將合成後的電路餵進去,產生Layout 繞完電路之後APR工程師會吐出一個.SDF檔給你做 Post simulation APR階段可以看成是place & route ![](https://i.imgur.com/6cGsfqm.png) Layout 的驗證 1. 答案,你想要設計電路的樣子 2. Rule File 3. Layout ,實際 APR 接出來的電路 跑完之後會生三個檔案 1. 文字檔,對還是錯,可能 input 的數量不一致 2. 圖形化介面的 report , load 進可以改 Layout 的 tool ,去修正你實際 Lay 出來的 Layout ![](https://i.imgur.com/urTRLCS.png) verification有兩種 http://speed.cis.nctu.edu.tw/~ydlin/course/cn/nsd2009/CIC_Reference_Design_Flow.pdf CIC Referenced Flow for Cell-based IC Design 檔案 ![](https://i.imgur.com/KlfbIY2.png) APR流程 Design Setup -> FloorPlan -> Placement -> CTS -> Routing -> DFM -> Output File 驗證 post-sim -> DRC -> LVS 4. CTS: Clock Tree Synthesis 的簡稱,對 clock tree 作分析、優化 clock 的擺放位置,但真正完成 clock tree 的拉線是在 routing 的步驟。而一般來說 hold time violation 也是在這個步驟中對有violation的路徑上加入 delay buffer 來修掉的。 8. DRC: Design Rules Check 的簡稱,晶圓廠針對自家的製程技術所作的規範,使用這些製程都必須遵守這些規範,目的是為了確保將客戶的 layout 製作成晶片量產時,不會因為一些小細節導致最後晶片的良率很差 (如 metal 太細或太長導致斷裂、metal 間只有一個 via ,因沒接到造成斷路等原因)。 因此在輸出 layout 後,都必須先將 DRC 出現的 violation 修掉,才能下線。 9. LVS: Layout Versus Schematic 的簡稱,將APR流程跑完後生成的 CHIP_route.v,與修完DRC後的 layout 驗證邏輯是否相同。流程為先將 CHIP_route.v 轉成 CHIP.spi 檔,再與 layout 的 gds 檔作邏輯的驗證。 #### Parallel In Serial Out / Serial In Parallel Out https://www.cnblogs.com/oomusou/archive/2009/10/24/p2s_s2p.html #### 對訊號做n個delay https://www.cnblogs.com/oomusou/archive/2009/06/15/verilog_dly_n_clk.html ![](https://i.imgur.com/WyEBjl3.png) #### false path解釋 https://blog.xuite.net/bcshih.tw/jobs/201031160-Timing+exception%3A+False+path ![](https://i.imgur.com/kKNUVUG.png) #### multi-cycel path https://blog.xuite.net/bcshih.tw/jobs/285630094-Timing+exception%3A+Multicycle+path ![](https://i.imgur.com/XaY4Bms.png) ![](https://i.imgur.com/bw8uPpX.png) #### cache有3種 https://www.itread01.com/content/1544723843.html 直接對映(Direct Mapping) 實現簡單,不靈活 ->thrashing(抖動) 全域性關聯對映(Fully Associative Mapping) 靈活,但結構複雜 組關聯對映(Set Associate Mapping) 取則中,有分組,也有用到直接對映的概念 #### recovery time and removal time 1. 你要先知道什麼叫同步的 RESET 和非同步的 RESET a. 同步的 RESET 代表 RESET 這個動作跟 clock 的正負源有關, b. 非同步的 RESET 代表 RESET 這個動作跟 clock 沒有任何關連。 c. 在電路實現上,同步的 RESET 信號,會用 AND gate 把要接入 DFF 的輸入信號歸零,因此當 clock 正負源來臨的時候,DFF 的輸出才會被歸零。 d. 非同步的 RESET 的實現,則是要使用具有 RESET pin 腳的 DFF, 因此非同步 RESET 就直接接到 DFF 上,當 RESET 發生時,DFF 輸出就被歸零, 因此歸零的這個動作跟 clock 沒有關連。 2. 接下來談到什麼叫 RECOVERY 和 REMOVAL。 a. RECOVERY 和 REMOVAL 的意義就是說,當非同步 RESET 信號消失後, DFF 回復正常的工作,可是 DFF 回復正常工作需要點時間,因此當 非同步 RESET 信號消失後,如果馬上就出現 clock 正負源,那麼 DFF 無法正常工作,因此我們需要檢查非同步 RESET 信號與 clock 正負源是否太過接近。 b. 如果非同步信號變化後,之後很短的時間內 clock 的正負源就出現了, 那麼就會出現 $recovery timing violation c. 如果非同步信號變化後,之前很短的時間內 clock 也有正負源的變化, 那麼就會出現 $removal timing violation 3. 簡單的說,你把對 setup/hold time violation 的討論中,把 clock -> reset, 把 data -> clock 就可以看懂 $removal 和 $recovery 的意義 ![](https://i.imgur.com/9qmnuDR.png) #### STA DTA比較 https://zhuanlan.zhihu.com/p/46057884 #### 加法器 減法器 乘法器 除法器 乘法器 ![](https://i.imgur.com/LPLL7hl.png) 除法器 參考來源 https://ithelp.ithome.com.tw/articles/10161144 ![](https://i.imgur.com/xBvYmjy.png) #### 卡諾圖化簡 http://power.sivs.chc.edu.tw/sivs/newspaper/63/%E5%8D%A1%E8%AB%BE%E5%9C%96%E5%8C%96%E7%B0%A1%E5%8E%9F%E7%90%86%E8%88%87%E6%87%89%E7%94%A8.pdf 卡諾圖有3種 兩個變數之四格卡諾圖、三個變數之八格卡諾圖、四個變數之十六格卡諾圖->相鄰兩格都只有一個變數的差異。 ![](https://i.imgur.com/2yU0Wri.png) ![](https://i.imgur.com/XN62pAo.png) ![](https://i.imgur.com/CnYTpXW.png) 卡諾圖化簡時請遵守下列四個原則: 1.以一、二、四、八個相鄰的 1 圈選(儘可能多)。 2.可重複圈選 1。 3.圈完所有的 1。 4.同一圏中同時存在 0 與 1 的變數可銷去。 5.輸出 Y 等於各圏所構成的積項 OR 在一起。 ### 基本邏輯設計 http://pisces.ck.tp.edu.tw/~peng/index.php?action=showfile&file=fe306ff6e88c78774e7d690a27f2a43a553ffe22c ## (影)數位電路設計_蕭宇宏 * [數位電路設計](https://www.youtube.com/watch?v=MER3p5e1sN4&list=PLI6pJZaOCtF0hFz-lF1lcFySp46YvEjRK&index=6) ![](https://i.imgur.com/AzRtB89.png) BCD碼 ![](https://i.imgur.com/kV9adLt.png) 全加器電路圖 ![](https://i.imgur.com/ylQ7iQl.png) 進位前向加法器 ![](https://i.imgur.com/rP8hkmz.png) Ci與Ci+1有遞迴關係(所以RCA 濂波進位會有延遲) ![](https://i.imgur.com/PoIkzsH.png) 透過展開可以讓所有進位輸出都展開到只與C0有關係,就不需要與前一級輸出有關係 透果展開截斷遞迴關係 P= A XOR B G= A & B Ci = P (i-1) C(i-1)+G(i-1) (以下AB順序有錯,要注意) 第一步 ![](https://i.imgur.com/v3Fyekw.png) 第二步 ![](https://i.imgur.com/zH45iAo.png) 有進位的輸出結果 第三步 ![](https://i.imgur.com/KUU4BIL.png) 有進位輸出,就可以算SUM Moor有兩種方式 左 輸入/輸出 右 狀態/此狀態的輸出 ![](https://i.imgur.com/e3z657t.png) #### FIR 的 verilog ![](https://i.imgur.com/4o6EsOq.png) data_in進來 ![](https://i.imgur.com/HKh3LE2.png) 做product ![](https://i.imgur.com/SGfuMPk.png) 最後再加總 ![](https://i.imgur.com/kOdupCY.png) #### 智原問題整理 SDC 幹嘛用 記載合成前的設定,給DC做合成 1.max/min delay 2.clk的period給多長來操作,clk長怎樣 3.hold time多少 4.影響delay的設定 5.最大的面積限制 6.input/output delay SDF 紀錄一些時間的資訊,給ncverilog做模擬用 應該是根據合成前.sdc中的設定,萃取出一些的時間資訊,例如 input delay、output delay、wire load model的delay為何、hold time為多少 APR完後的sdf要拿來做pos-sim用 ![](https://i.imgur.com/BhWyPYN.png) pre-sim是对netlist进行一些function 验证和初步的timing验证。 clk是理想的 clk gating,不需要工作時關閉clk power gating 省功耗效果更好,恢复的过程会比较长 #### 矽創問題 tool使用 design compiler for synthesis / DFT STA primetime APR innovus DRC/LVS virtuoso ### pipeline 與 簡單程式 參考文獻 https://www.win.tue.nl/~wsinmak/Education/2IN35/Parhi/chap3.pdf ![](https://i.imgur.com/7MUaYr0.png) ![](https://i.imgur.com/p3pwRlh.png) FIR 做pipeline ![](https://i.imgur.com/2NB5RFl.png) 3-tap FIR critical path為 1乘 + 2加 FIR做retiming ![](https://i.imgur.com/CZJaXZc.png) D-flipflop state diagram /table ![](https://i.imgur.com/HjioNee.png) #### 群聯問題 ##### system C是什麼 https://www.cnblogs.com/oomusou/archive/2006/11/17/564020.html 基於C++語言的用於系統設計的電腦語言,提高電子系統設計效率 早期系統有兩部分,硬體與軟體,軟體使用C/C++,硬體使用VHDL、verilog(專長於描述並列執行的硬體),但是,隨著電子系統結構越來越複雜,這就要求系統工程師在先期劃分軟體和硬體時,就對整個系統效能有很好的了解和掌握,以便更好地劃分軟體和硬體,減小設計中不必要的失誤所帶來的損失和風險。SystemC也就由此孕育而生,因為它能夠"滿足對軟體和硬體協同仿真的需求" SystemC的核心語言建立在標準C++之上,包括事件驅動的模擬核心、結構化的基本元素(模組、埠、介面和訊息通道)、數據類型(整型、定點與向量等等)以及基本的訊息通道(Signal、FIFO與Mutex等等)。 因為跟軟體一起co-sim的速度比較 FPGA >> SystemC(SC) > SystemVerilog(SV) > Verilog 所以在初期要切割軟硬體的介面跟各自的界圍,用SC是比較好用的。或者是當你的一些 IP都已經完整驗過,目標是要驗外面接的interface( Bus / 跟其他的IP連接 ) 所以在速度上的考量就可以拿SC Model來加速驗證。 ##### system verilog 跟軟體的驗證技巧一樣,電路的驗證也是求對Design 的Coverage能到一定的程度 System Verilog已經替代Verilog成為IC數字驗證的基礎語言 时间单位和精度的差異 在Verilog中,表示时间的值使用一个数来表示,而不带有任何时间单位。例如: ![](https://i.imgur.com/0w78Ux4.png) SystemVerilog为了控制时间单位加入了两个重要的增强。首先,时间值可以显式地指定一个单位。时间单位可以是s、ms、ns、ps或fs。时间单位作为时间值的后缀出现。例如: ![](https://i.imgur.com/a7xmqEy.png) ### clk gating 與 latch 與 毛刺問題 ![](https://i.imgur.com/jbN66FZ.png) ![](https://i.imgur.com/Ea3DRTG.png) https://www.tutortecho.com/post/ic-design-clock-gating-icg ![](https://i.imgur.com/661FVyp.png) ![](https://i.imgur.com/cJe4C76.png) ##