---
# System prepended metadata

title: HW3 ALU

---

### **問題一**

老師可能會問：「在 Verilog 中，阻塞式 (`=`) 和非阻塞式 (`<=`) 賦值有什麼區別？什麼時候該用哪一個？」

**你應該這樣回答：** 「老師，最大的差別在於它們在序向邏輯中的行為。

- **組合邏輯**應該使用**阻塞式 (`=`)** 賦值 。
    
- **序向邏輯**（例如在 `always @(posedge clk)` 區塊中）則**必須**使用**非阻塞式 (`<=`)** 賦值 。這樣可以避免因執行順序造成的競爭危害 (race conditions)，並正確地合成出管線暫存器 (pipeline registers) 。」
    

### **問題二**

老師可能會問：「在什麼情況下，程式碼會被合成器推斷 (infer) 出閂鎖 (Latch)？我們要如何避免它？」

**你應該這樣回答：** 「老師，當 `if` 或 `case` 語句的條件分支沒有涵蓋所有可能性，導致某些訊號在特定條件下沒有被賦值時，合成器就會推斷出閂鎖 。 要避免這種情況，我們必須確保：

- `if` 語句一定有對應的 `else` 分支 。
    
- `case` 語句要涵蓋所有可能的 case，或是提供一個 `default` 分支來處理其他所有情況 。 這樣就能確保訊號在任何條件下都有明確的定義，進而合成出組合邏輯而非閂鎖。」
    

### **問題三**

老師可能會問：「在設計時脈 (Clock) 和重置 (Reset) 電路時，有哪些重要的編碼原則需要遵守？」

**你應該這樣回答：** 「老師，有幾個關鍵原則：

- **單一時脈源**：盡量在整個設計中使用單一的全域時脈，並且只用正緣觸發，這會讓時序分析變得簡單 。
    
- **避免閘控時脈 (Gated Clock)**：不要在 RTL 中手動撰寫 `assign clk_gated = clk & enable` 這種程式碼 。應該改用帶有致能端 (enable) 的寫法，讓合成工具去自動插入時脈閘控單元，這樣比較安全且對測試友善 。
    
- **避免內部生成訊號**：應避免在模組內部自己產生時脈或重置訊號，這會讓合成和靜態時序分析 (STA) 變得非常困難 。」

好的，這份簡報「Unit 11」的核心在於處理不同時脈域 (Clock Domain) 之間的訊號傳遞問題。老師很可能會從「為什麼需要處理」以及「如何處理」這兩個方向來提問。

以下是三個老師最可能問的問題與簡潔的回答建議：

### **問題四

老師可能會問：「什麼是亞穩態 (Metastability)？它為什麼是數位設計中一個嚴重的問題？」

你應該這樣回答：

「老師，當正反器 (Flip-Flop) 的輸入訊號不滿足其建立時間 (Setup time) 或保持時間 (Hold time) 要求時，就會發生亞穩態 1111。這時候，正反器的輸出會在一段不確定的時間內，處於一個非0也非1的不穩定狀態 2。這個問題很嚴重，因為我們無法透過工具預測它何時發生、持續多久，可能導致整個系統因採樣到錯誤的值而失常，甚至在不同溫度或電壓下時好時壞，非常難除錯 3333。」

### **問題五

老師可能會問：「同步 (Synchronous) 和非同步 (Asynchronous) 系統的根本區別是什麼？」

你應該這樣回答：

「老師，根本的區別在於系統中不同區塊的時脈 (Clock) 來源與關係。

- **同步系統**：所有區塊的時脈都來自同一個時脈樹 (Clock Tree)，或彼此之間有固定的頻率或相位關係 4。
    
- **非同步系統**：區塊間的時脈頻率不同，或者即使頻率相同，但來源不同且被設為偽路徑 (false path)，導致相位關係不確定 5555。 在非同步系統中，直接傳遞訊號就會有亞穩態風險。」
    

### **問題六**

老師可能會問：「當訊號需要跨越非同步時脈域時，有哪幾種常見的解決方案？它們分別適用在什麼情境？」

你應該這樣回答：

「老師，常見的解決方案有三種：

- **雙重正反器同步器 (Double Flip-Flop Synchronizer)**：這是最基本的方法，適用於**單一個控制訊號**的傳遞，可以大幅降低亞穩態傳播到後級電路的機率 6。
    
- **握手協議 (Handshaking)**：適用於**多位元資料**或複雜控制，且可以容忍較長延遲的情境。它透過『要求 (Request)』與『應答 (Acknowledge)』兩個控制訊號來確保資料被正確且可靠地接收 7。
    
- **非同步先進先出佇列 (Asynchronous FIFO)**：當資料流是連續且頻繁的，而且發送方和接收方時脈關係不確定時，就適合使用 FIFO。它內部使用雙埠記憶體 (Dual-Port RAM)，並透過灰階碼 (Gray Code) 的讀寫指標來避免在判斷滿/空狀態時出錯 8888。」

好的，這份簡報「Unit 10 Introduction to CAD tools」介紹了整個 ASIC 設計流程中會用到的各種電子設計自動化 (EDA) 工具。老師很可能會針對幾個關鍵流程的目的與方法來提問。

以下是三個老師最可能問的問題與簡潔的回答建議：

### **問題七

老師可能會問：「什麼是 Linting？為什麼它在設計流程中很重要，且應該在什麼時候做？」

你應該這樣回答：

「老師，Linting 是在設計初期用來檢查 RTL 程式碼的語法風格、可合成性、時脈問題等潛在錯誤的靜態分析過程 1111111。它非常重要，因為越早發現問題，修正的成本和時間就越少 2。Linting 應該在完成編碼後立刻進行，而不是等到整合或驗證階段才做，這樣才能從一開始就確保程式碼的品質 3。」

### **問題八

老師可能會問：「什麼是邏輯合成 (Logic Synthesis)？合成出來的結果會受到哪些主要因素的影響？」

你應該這樣回答：

「老師，邏輯合成是將抽象的硬體描述語言 (HDL)，例如 Verilog，轉換、最佳化並映射到由特定製程的邏輯閘所組成的網表 (gate-level netlist) 的過程 4。

合成的最終結果主要受到四個因素影響 55：

- **HDL 編碼風格 (Coding Style)**：不同的寫法會產生功能相同但面積和時序特性不同的電路 6。
    
- **設計約束 (Design Constraints)**：例如時脈頻率、輸出入延遲等時序要求 77。
    
- **目標製程庫 (Target Technology)**：使用的邏輯閘庫，包含其面積、時序、功耗等特性 8888。
    
- **環境屬性 (Environmental Attributes)**：例如操作電壓、溫度和線負載模型 (wire-load model) 9999。」
    

### **問題九

老師可能會問：「為什麼我們需要可測試性設計 (DFT)？Full-Scan Chain 的基本原理是什麼？」

你應該這樣回答：

「老師，DFT 的目的是為了在晶片製造後，能有效率地找出其中是否有物理缺陷 (physical defects)，例如開路或短路 10。因為我們無法直接探測晶片內部，只能從 I/O 接腳去測試 。

Full-Scan Chain 的基本原理是將電路中所有的正反器 (Flip-Flops) 換成可掃描的正反器 ，並將它們串成一條或多條移位暫存器鏈 (shift register chain) 。在測試模式下，我們可以透過掃描鏈，將測試向量 (test pattern) 串列地載入到所有正反器，然後執行一個時脈週期捕捉電路反應，最後再將結果串列地移出來跟預期值比對，藉此判斷電路是否正常。」

好的，這份簡報「Unit 9」全面介紹了現代數位 IC 的設計流程，從 RTL 程式碼一路到最終的晶片產出 (Tape-Out)。老師很可能會針對流程中的關鍵階段、驗證方法，以及現今重要的低功耗設計技術來提問。

以下是三個可能的提問與建議回答：

### **問題十

老師可能會問：「請簡述一個典型的數位 IC 設計流程，主要包含哪幾個大的階段？」

你應該這樣回答：

「老師，一個典型的設計流程主要包含三個大階段：

1. **邏輯設計 (Logical Design)**：這個階段是設計功能的實現，從撰寫 Verilog/VHDL 程式碼開始，然後進行**邏輯合成 (Logic Synthesis)**，將程式碼轉成邏輯閘層級的網表 (Netlist)。
2. **實體設計 (Physical Design)**：這個階段處理電路的物理佈局。主要工作包括**佈局規劃 (Floorplanning)**、**佈局 (Placement)** 和**繞線 (Routing)**，目標是將邏輯閘實際放到晶片上並連接起來。
3. **驗證 (Verification)**：驗證貫穿整個流程，確保每一步的轉換都正確無誤。例如，合成後的網表要和原始碼做**形式驗證 (Formal Verification)**，佈局後的時序要透過**靜態時序分析 (STA)** 來確認，最後還要進行**實體驗證 (Physical Verification)**，如 DRC/LVS，確保沒有違反製造規則。」

### **問題11

老師可能會問：「在低功耗設計中，動態電壓調節 (DVS) 和自我調整電壓調節 (AVS) 有什麼不同？」

你應該這樣回答：

「老師，DVS 和 AVS 都是用來動態調整電壓以節省功耗的技術，主要差別在於電壓的決定方式：

- **動態電壓調節 (DVS)**：根據預先定義好的效能模式，從一個固定的電壓表格中（例如 200MHz 對應 1.2V，150MHz 對應 1.0V）選擇對應的電壓來運作。
- **自我調整電壓調節 (AVS)**：它更加智慧，會透過晶片內部實際的**時序監測器 (Timing Monitor)**（例如關鍵路徑複製品）來回授電路的真實狀況，然後微調到一個能滿足時序的最低電壓。AVS 能更好地應對製程變異，比 DVS 更省電。」

### **問題12

老師可能會問：「什麼是 UPF (Unified Power Format)？它在低功'耗設計流程中扮演什麼角色？」

你應該這樣回答：

「老師，UPF 是一個標準化的功耗意圖描述格式。它用來定義設計中的功耗相關資訊，例如電源域 (Power Domain)、電壓轉換器 (Level Shifter)、隔離單元 (Isolation Cell) 和電源開關 (Power Switch) 等。

它的主要角色是讓低功耗的設計意圖能夠在整個 IC 設計流程中傳遞，從 RTL 模擬、邏輯合成、佈局繞線到最終驗證，確保所有工具都能理解並正確實現這些複雜的低功耗設計，從而縮短開發時間。」

好的，這份簡報「Unit 8」以一個實際的視訊處理器 (Video Processor) 為案例，完整地介紹了一個數位 IC 從無到有的整個專案開發流程。老師很可能會針對專案管理與執行層面的關鍵決策點來提問。

以下是三個老師最可能問的問題與簡潔的回答建議：

### **問題13

老師可能會問：「在一個 IC 專案的初期，我們要如何決定產品的規格 (Specification)？」

你應該這樣回答：

「老師，決定產品規格需要做全面的評估，主要考慮四個方面：

- **自身研發能力 (In-House Research Capacity)**：評估公司現有的技術藍圖和IP積累，確定哪些功能可以實現 1。
    
- **市場目標 (Target Market)**：確定產品定位，例如是高階還是低階市場，以及目標客戶群的需求 2。
    
- **競爭對手分析 (Competitor Status)**：分析市場上競爭產品的功能、規格與優劣勢，找出差異化 3。
    
- **系統物料清單成本 (System BOM Cost)**：估算 IC 的晶片面積、腳位數和封裝成本，確保最終產品在市場上有價格競爭力 444444444。 」
    

### **問題14

老師可能會問：「在專案正式啟動 (Kick-Off) 前，為什麼要做可行性分析 (Feasibility Analysis)？它主要包含哪些內容？」

你應該這樣回答：

「老師，可行性分析是為了確保專案在技術和市場上都是可行的，避免資源浪費。它主要包含兩大部分：

- **市場可行性分析 (Market feasibility analysis)**：評估市場規模 (TAM/SAM)、客戶應用情境，以及是否有足夠的潛在利潤，來判斷這個產品值不值得投入 5555。
    
- **技術可行性分析 (Technique feasibility analysis)**：評估設計的技術挑戰，例如所需的製程技術、效能瓶頸、IP取得、人力資源配置，並估算光罩和測試等開發成本 6666。 只有這兩方面都評估通過，專案才會正式啟動 7。」
    

### **問題15

老師可能會問：「IC 設計的驗證計畫 (Verification Plan) 中，為什麼通常會分為 FPGA 驗證和真實晶片 (Realchip) 驗證兩個階段？」

你應該這樣回答：

「老師，這是為了分階段驗證，提早發現問題。

- **FPGA 驗證**：在晶片投片 (Tape-Out) 前，將 RTL 程式碼下載到 FPGA 平台上進行快速原型驗證 (Prototyping) 8。這個階段可以提早整合硬體周邊（如 ADC 子板）和軟體，驗證大部分的數位邏輯功能是否正確，但無法完全反映真實晶片的時序和類比特性。
    
- **真實晶片驗證**：在晶片回來後，會搭配量產用的評估板 (EV Board) 進行全面的功能、效能和電子特性測試 9。這個階段才能驗證到真實的時序、功耗以及類比電路的實際表現。 透過這種方式，可以降低投片失敗的風險。」

這個主題是所有單元的交集點與基石。一個 IC 專案的成功與否，很大程度上取決於 RTL 程式碼的品質。不良的程式碼會直接導致後續的合成 (Synthesis)、時序分析 (STA)、功耗分析 (Power Analysis) 和可測試性設計 (DFT) 等階段出現難以解決的問題 1111。

Unit 12 深入探討了如何撰寫好的 RTL 2，而 Unit 10、11 則解釋了這些好的實踐為何重要，以及它們如何影響 CAD 工具的運作與解決關鍵設計問題 3333。

---

基於這個核心主題，我為您準備了另外三個老師可能會問的進階問題：

### **問題16

老師可能會問：「同樣是實作一個多工器 (Multiplexer)，使用 `if-then-else` 和 `case` 兩種寫法，在功能上等效，但合成出來的硬體可能會有什麼不同？這對設計有何影響？」

你應該這樣回答：

「老師，這兩種寫法會影響合成出的電路結構：

- **`if-then-else`**：合成器會推斷出**帶有優先級的串接式多工器** (priority encoding structure) 4。這意味著排在前面的 `if` 條件有較高的優先權。
    
- **`case`**：合成器通常會推斷出**單層、平衡的多工器** (single-level multiplexer) 5。
    

影響在於，如果設計中有**延遲較晚抵達的訊號 (late arriving signals)**，可以將它放在 `if` 判斷的**最前面**，讓它走最短的路徑以滿足時序 6。但對於一般大型多工器，`case` 語句合成出的平衡結構通常速度更快、面積更優 7。」

### **問題17

老師可能會問：「什麼是資源共享 (Resource Sharing)？你要如何透過編碼風格來引導合成工具進行資源共享，這樣做有什麼好處？」

你應該這樣回答：

「老師，資源共享是指讓多個功能上互斥的運算（例如加法或乘法）共用同一個硬體運算單元 8。

要達到這個目的，可以將這些互斥的運算寫在同一個 always 區塊裡的 if-else 或 case 語句中 9999。這樣合成工具就能理解這些運算不會同時發生，從而只生成一個運算器，並在前端加上多工器來選擇輸入訊號 10。

這樣做最大的好處是節省晶片面積，降低成本 11。」

### **問題18

老師可能會問：「簡報中多次提到 Lint 工具和程式碼可讀性、可重用性等原則。為什麼在專業的 IC 設計中，這些看似『非功能性』的要求如此重要？」

你應該這樣回答：

「老師，這些原則之所以重要，是因為 IC 開發是一個週期長且高度依賴團隊合作的過程：

- **可讀性/可維護性 (Readability)**：清晰的程式碼（如好的命名和註解）可以大幅縮短除錯時間，也便於團隊其他成員理解與協作 1212。
    
- **可重用性 (Reusability)**：將設計模組化，並採用標準介面，可以讓這些設計 (IP) 在未來的專案中被快速重複使用，從而節省開發時間與成本 1313。
    
- **可攜性 (Portability)**：避免使用特定製程的元件，可以讓設計輕鬆地轉移到不同的製程技術上，增加設計的生命週期與價值 14141414。
    

Lint 工具就是用來自動化檢查這些編碼風格與規則的守門員，在設計初期就確保程式碼品質，避免問題流到後續成本更高的階段 15。」

好的，根據您提供的所有文件（特別是 Unit 9、10 和 12），我為您整理一份完整的積體電路 (IC) 數位設計流程 (Design Flow)。

這個流程的核心是將抽象的設計概念，透過一系列的步驟與工具，最終轉化為可以量產的實體晶片。整個流程可以大致分為三個主要階段：**前端設計 (Frontend)**、**後端設計 (Backend)**，以及最後的**簽核與製造 (Sign-off and Manufacturing)**。

### **階段一：前端設計 (Frontend Design) - 邏輯功能實現與驗證**

這個階段的目標是將晶片規格轉化為一個經過功能驗證、符合時序與面積初步要求的邏輯閘級電路描述（Netlist）。

1. **規格定義與可行性分析 (Specification & Feasibility Analysis)**
    
    - **活動內容**：這是專案的起點，需要根據市場目標、競爭對手分析、自身研發能力及成本考量，定義出詳細的晶片功能與效能指標 1111111111111111。接著進行技術與市場的可行性分析，確保專案值得投入 2。
        
    - **產出**：產品規格書 (Specification)。
2. **設計輸入與RTL編碼 (Design Entry & RTL Coding)**
    
    - **活動內容**：設計工程師根據規格書，使用硬體描述語言（HDL），如 Verilog 或 VHDL，來撰寫描述電路行為的程式碼，此稱為暫存器傳輸級 (Register-Transfer Level, RTL) 編碼 3。
        
    - **關鍵點**：此階段的編碼風格 (Coding Style) 對後續所有流程有決定性影響 4。良好的編碼風格可以產出面積更小、速度更快、功耗更低的電路 5。
        
    - **品質檢查**：完成編碼後，會立刻使用 **Lint 工具**進行靜態檢查，找出潛在的語法問題、不可合成的寫法或與時脈相關的風險 6。
        
3. **RTL層級模擬與驗證 (RTL Simulation & Verification)**
    
    - **活動內容**：為了確認 RTL 程式碼的功能是否符合規格，驗證工程師會撰寫測試平台 (Testbench)，透過模擬器（如 VCS, ModelSim, NC-Verilog）對 RTL 程式碼進行密集的模擬測試 7。若發現錯誤，則需要透過除錯工具（如 Verdi）找出問題根源並修正 8。
        
    - **產出**：功能正確的「黃金」RTL 程式碼 (Golden RTL)。
4. **邏輯合成 (Logic Synthesis)**
    
    - **活動內容**：這是從行為描述走向實體電路的第一步。使用合成工具（如 Synopsys Design Compiler），將 RTL 程式碼轉換成由特定製程的標準邏輯閘（如 AND, OR, Flip-Flop）所組成的**閘級網表 (Gate-Level Netlist)** 9。
        
    - **關鍵輸入**：
        1. RTL 程式碼 10。
            
        2. 目標製程的**技術庫 (Technology Library)** 11。
            
        3. **設計約束 (Design Constraints)**，例如時脈速度、I/O 延遲等 12。
            
5. **可測試性設計與掃描鏈插入 (DFT & Scan Insertion)**
    
    - **活動內容**：為了讓製造出來的晶片能夠被測試機台檢測出缺陷，此步驟會將電路中的正反器換成可掃描的正反器，並串成一條或多條**掃描鏈 (Scan Chain)** 13131313。
        
    - **目的**：大幅提高晶片的故障覆蓋率 (Fault Coverage) 14141414。
        
6. **閘級驗證 (Gate-Level Verification)**
    
    - **活動內容**：合成後的網表必須與原始的 RTL 程式碼進行比對，確保功能完全一致。主要包含：
        - **形式等效性檢查 (Formal Equivalence Checking)**：使用工具（如 LEC, Formality）透過數學方法，窮盡所有可能來證明 RTL 和 Netlist 的邏輯功能是 100% 等效的 1515151515151515。
            
        - **靜態時序分析 (Static Timing Analysis, STA)**：在沒有測試向量的情況下，分析電路中所有的時序路徑，檢查是否滿足在約束檔中設定的時序要求（如 Setup/Hold time）16。
            
        - **閘級模擬 (Gate-Level Simulation)**：將合成後的網表重新進行模擬，以捕捉可能因合成或時序問題而產生的功能錯誤 17171717。
            

### **階段二：後端設計 (Backend Design) - 實體實現**

這個階段的目標是將閘級網表轉化為一個可供製造的實體電路佈局圖 (Layout)。

1. **佈局規劃 (Floorplanning)**
    
    - **活動內容**：規劃晶片的宏觀佈局，決定晶片的核心區域大小、I/O PAD 的位置、大型功能區塊（如記憶體、IP）的擺放位置，並規劃電源網路 (Power Grid) 和時脈樹 (Clock Tree) 的初步結構 1818。
        
2. **佈局與繞線 (Placement and Route, P&R)**
    
    - **活動內容**：
        - **Placement**：將成千上萬的標準邏輯閘精確地擺放到晶片核心區域的特定位置上 1919。
            
        - **Clock Tree Synthesis (CTS)**：在此階段插入一個能讓時脈訊號以最小延遲差異 (skew) 同時到達所有正反器的時脈樹 20202020。
            
        - **Routing**：根據網表的連接關係，使用不同金屬層將所有元件的接腳連接起來 2121。
            
    - **主要工具**：Cadence Innovus, Synopsys ICC 22。
        
3. **寄生參數提取 (RC Extraction)**
    
    - **活動內容**：繞線完成後，電路的實際物理結構就確定了。此步驟會從佈局圖中提取出金屬導線所產生的寄生電阻 (R) 與電容 (C) 23232323。
        
4. **佈局後驗證 (Post-Layout Verification)**
    
    - **活動內容**：這是設計流程中驗證的最後一哩路。使用提取出的精確 RC 寄生參數，再次進行**靜態時序分析 (STA)** 和**閘級模擬**，確保晶片在考慮了真實物理延遲後，功能與時序依然正確 24242424。
        

### **階段三：簽核與製造 (Sign-off and Manufacturing)**

1. **實體驗證 (Physical Verification)**
    
    - **活動內容**：在將設計檔案送交晶圓廠 (Foundry) 前的最後檢查，確保佈局圖符合製造規範。主要包含：
        - **DRC (Design Rule Check)**：檢查佈局是否違反製造商的幾何規則（如間距、寬度）。
        - **LVS (Layout Versus Schematic)**：比對佈局圖的電路網表與合成後的網表，確保兩者完全一致。
        - **Antenna Check**：檢查是否有因製程效果可能導致邏輯閘損壞的風險 25。
            
2. **投片 (Tape-Out)**
    
    - **活動內容**：當所有驗證都通過後，設計團隊會將最終的佈局檔案（通常是 GDSII 格式）交付給晶圓廠進行光罩製作與晶圓生產 26。