# SOCV 全範圍總複習筆記(講義 0 \~ 13-2)
BDD: https://nicze.de/philipp/bdds/
SAT Solver: https://www.msoos.org/cryptominisat/
GV: https://github.com/DVLab-NTU/gv
> **使用方式**
>
> * 建議先 **通讀一遍** 掌握脈絡,再回到薄弱章節細讀投影片。
> * 每個章節均列出 **必懂觀念、常見考點、常踩陷阱**;把這些寫成自己的「錯題筆記」效果最佳。
> * 內文已穿插投影片原文或圖示編號,方便你回到 PDF 定位。
---
## 0–1 導論:SoC 驗證全貌
### 必懂觀念
1. **驗證痛點**:狀態空間爆炸、時序交互、隱性並發。
2. **三大驗證支柱**:Simulation(動態)、Equivalence Checking(組合/時序)、Property Checking(形式)。
3. **Safety vs Liveness** – 兩種性質在 CEX 形狀上的根本差別:前者有限路徑即可證偽;後者必須找 **lasso (prefix + loop)** 反例 。
### 常見考點
* 「AG p = ¬EF ¬p」與「AF p = ¬EG ¬p」能否互換?為何?
* 指出一條 CEX 並標註 prefix/suffix。
### 陷阱
* 把「最短 CEX = 假設路徑長度 k」誤寫成「證明性質為真」——BMC UNSAT 只代表 ≤ k 無錯 。
---
## 2 形式化建模與性質描述
### 必懂觀念
* **Kripke Structure**:〈S,I,T,L〉;T 為完全決定性? (*考點*)
* CTL / LTL 語法語意;「模型檢查」實際做三件事:reachable、trace、proof 。
### 常見考點
* 給一段 SystemVerilog assertion,翻成 LTL/CTL\*。
* 為何某些組合不變式可「只看 cone-of-fanin」而不需做 reachable? 
---
## 3–5 BDD 與 BDD-Based Verification
### 必懂觀念
1. **ROBDD**:唯一性 + 無冗測;不同變數排序可致線性↔指數差距 。
2. **變數重排**:Sifting、Window swap;動態觸發時機 。
3. **Reachability with BDD**:前像/後像 + 固定點;Safety 用 μ-fp,Liveness 用 ν-fp(找 loop 集合) 。
### 常見考點
* 手畫一個 3-input 函數在好/壞排序下的 BDD 大小比較。
* 給 transition relation,用 BDD 寫出 R₀‥Rₙ、判斷性質。
### 陷阱
* **想用 BDD 硬啃 multiplier**——投影片直接提醒:>200 inputs 風險極高 。
* 忽略「部分 BDD / cut-BDD」可減爆炸,考試常要求舉例。
---
## 6–7 SAT 與 Advanced SAT Techniques
### 必懂觀念
1. **CNF + Implication**:Unit clause rule;衝突 = 空子句 。
2. **2-Watched-Literal**:O(衝突) 掃描;維護 watching list 。
3. **CDCL**:衝突分析 → UIP 學習 → 非單調回溯;VSIDS 分數衰減 。
### 常見考點
* 讓你手玩一輪 Watched-Literal 更新或 VSIDS 分數計算。
* 解釋「為何 CNF-SAT 輕鬆做到 2-watch,但電路 SAT 很煩」 。
### 陷阱
* 把「decision order」和「implication graph」混淆;衝突切割一定經過 1st-UIP。
---
## 8 Bounded Model Checking (BMC)
### 必懂觀念
* **Φ\_k 公式**:I₀ ∧ ∧\_{t=0}^{k−1} T\_t ∧ ¬p\_k。
* BMC 只保證「最短反例」,無法證明性質;需配 k-induction、simple-path 等延伸 。
### 常見考點
* 寫出 EF ¬p、AG p 的 BMC CNF 展開。
* 說明 simple-path constraint 內容以及何時爆炸 。
---
## 9 Unbounded Model Checking & Interpolation
### 必懂觀念
* **k-Step Induction**:Base + Inductive;自環會害失敗。
* **CBA vs PBA**:抽象細化兩路徑;效率比較圖 。
### 常見考點
* 給一個「真但非 1-inductive」例子,請證明要 k>1。
* 比較 CBA、PBA 在 refinement 次數、SAT 難度。
### 陷阱
* 以為 interpolation 一定收斂;事實上遇到 non-convex image 仍卡。
---
## 10 Property-Directed Reachability (IC3 / PDR)
### 必懂觀念
1. **Block–Propagate–Converge** 三環:用 clause 逐格逼近;fixed-point 成立即證明 。
2. **CTI → Generalize → Inductive Clause**:為何要擴大?為何要求 inductive relative to F?
### 常見考點
* 手動示範「碰到 CTI 如何 generalize」。
* 證明 “Ri ⊆ Ri+1” 保證單調性。
### 陷阱
* 忘了 **cube ⇄ clause** 的轉換方向 。
---
## 11 SAT 在邏輯合成中的應用(精要)
* 了解 SAT 可用於 **不要的線移除 (RAR)**、**冗餘電路偵測**,但期末通常僅測觀念:
* Mandatory Assignment, 2-way R-AR 流程。
* 會給一條 wire,要求判斷是否冗餘。
---
## 12 From SAT to Optimization(Pseudo-Boolean / Max-SAT)
* 需知 Adder-Network 編碼與 *arc-consistency* 缺點 。
* 常見考題:把 Σ cᵢxᵢ ≥ k 轉 CNF、說明為何 BCP 推不出隱含值。
---
## 13-1 Liveness Property Checking
### 必懂觀念
1. **Safety CEX vs Liveness CEX** (lasso) 。
2. **L2S (Biere)**:把 AF p 轉 AG (looped → live),可沿用 safety checker;優缺點分析 。
3. **Stabilization Property**(GF/FG 原子與其布林組合)在 VeriABC 中的支援 。
### 常見考點
* 畫出 lasso 形反例並註解 prefix/suffix。
* 解釋 counter-based vs state-recording 兩種 L2S。
### 陷阱
* 忽略 L2S 會放大模型,導致簡化成本;考題常要比較性能表。
---
## 13-2 SMT 簡介(課堂重點較輕,仍要會)
* **SAT + theory solver** 架構;DPLL(T) 流程;常見理論:EUF、Bit-Vector、Linear Arith.
* 基礎考題:給一組約束,說明為何 SAT 而理論 UNSAT。
---
## 考前衝刺建議
| 時間 | 重點 | 行動 |
| --------- | --------- | --------------------------------- |
| **T-3 天** | 全章節筆記再掃一次 | 自己講一次每章的 *核心演算法* |
| **T-2 天** | 強化演算法細節 | 用白紙寫 **BMC Φ\_k、VSIDS 流程、PDR 三步** |
| **T-1 天** | 模擬寫題 | 90 min 把模擬卷 A 題全寫完;檢查時間分配 |
| **當天** | 手邊備查 | 開三個視窗:1) 講義索引 2) 自己的公式小抄 3) 搜尋工具 |
---
下面是一份 3 小時/200 分的「SoC Verification(SOCV)」期末模擬考,涵蓋講義 0 \~ 13-2 的所有核心主題。
考題之後直接附上標準解答,方便你對照;真考時可把「解答」部分先摺起來當閉卷練習,再對答案。
---
## 模擬試題
| 題號 | 題目 | 配分 |
| ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -- |
| **A-1** | 比較 **Safety** 與 **Liveness** 性質:<br>1. 分別給出 CTL\* 與 LTL 的典型表示式。<br>2. 說明兩者在 counter-example(CEX)形狀上的差異。 | 20 |
| **A-2** | (Combinational) 說明用 **ROBDD** 證明一個不含時序的斷言 `p` 為永真 tautology 的流程;討論變數排序對 BDD 大小的影響及兩種動態重排策略。 | 20 |
| **A-3** | 以 SAT-Based **Bounded Model Checking (BMC)** 為例:<br>1. 寫出長度 *k* 的公式 Φ<sub>k</sub>(EF ¬p)。<br>2. 說明 BMC 為何「若 UNSAT 亦不足以證明性質為真」。 | 20 |
| **A-4** | 何謂 **k-Step Induction**?為何需要 **Simple-Path Constraint**?舉一個 induction 失敗但性質其實為真的最小例。 | 15 |
| **A-5** | 描述 **IC3 / Property-Directed Reachability (PDR)** 的三大迴圈:Block、Propagate、Converge。說明「從 CTI 推廣出 inductive clause」的目的。 | 15 |
| **A-6** | 比較 **Counter-example-Based Abstraction (CBA)** 與 **Proof-Based Abstraction (PBA)** 在 refinement 步驟與效能上的優缺點。 | 15 |
| **A-7** | 敘述三個經典 **Advanced SAT Techniques**:<br>(a) VSIDS、(b) 2-Watched-Literal BCP、(c) Conflict-Driven Clause Learning。 | 15 |
| **A-8** | 針對 **Pseudo-Boolean (PB) 優化**:<br>1. 說明將 PB 條件 ∑ c<sub>i</sub>x<sub>i</sub> ≥ k 轉成 SAT 的 **Adder Network** 方法。<br>2. 何謂 *arc-consistency*?Adder 為何通常不滿足? | 20 |
| **B-1** | 給定下列 2-bit 同步向上計數器 (state = y<sub>1</sub>y<sub>0</sub>):<br>`verilog<br>y <= (y + 1) % 4;<br>`<br>要求驗證 *property* P:`y ≤ 2`。<br>1. 列出 TR(Y, X) 的布林展開。<br>2. 用 BDD **reachability** 演算法列出 R<sub>0..n</sub>,並判定 P 成立與否。 | 40 |
| **B-2** | 下圖為一段多層組合電路,目標是將 **紅色線 wt** 移除。請<br>(a) 列出 wt 的 **Mandatory Assignments** (MA);<br>(b) 依 **2-Way RAR** / **SatRAR** 找出一條可能的 **alternative wire** 並說明其必為冗餘;<br>(c) 說明移除 wt 後電路功能不變的理由。<br>(附圖見講義 11.23) | 40 |
---
## 參考解答
### A-1(20 分)
1. **Safety**:`AG p` 或 `¬EF ¬p`;
**Liveness**:`AF q` 或 `¬EG ¬q` 
2. Safety CEX 為**有限**路徑(到達 !p 的 prefix);Liveness CEX 為「lasso」(prefix + loop),因為需證明 *永遠* 不會到達 p。
---
### A-2(20 分)
* **流程**:PI → BDD(各 PIs) → 拓樹排序建 BDD → 檢查 PO p 是否約化為常數 1。若非 1,任一路徑至 0 為反例。
* **Ordering**:好順序 ⇒ 節點數線性;壞順序 ⇒ 指數。動態重排<br> (a) **Sifting** (Rudell ’93) (b) **Window/Adjacent Swap**。
---
### A-3(20 分)
1. Φ<sub>k</sub> ≜ I₀ ∧ ∧<sub>t=0..k-1</sub>T(Xₜ, Xₜ₊₁) ∧ ¬p(X\_k)
2. 若 Φₖ SAT ⇒ 得長度≤k 之 CEX;UNSAT 只說「無長度≤k 之 CEX」,不能保證更長路徑不存在。需增 k 或用歸納/PDR 做 unbounded 證明。
---
### A-4(15 分)
* **k-Step Induction**:Base:I ⇒ P₀...P\_{k-1};Inductive:P\_t..P\_{t+k-1} ∧ T ⇒ P\_{t+k}.
* 若狀態空間存在 **自環** 於 P 區外 (xi → xi),則一步歸納失敗。加上 **Simple-Path Constraint** (所有中繼狀態互異) 可阻斷此假 CEX。
---
### A-5(15 分)
1. **Block**:遇 CTI → 以 SAT 衍生 *inductive clause* c 封鎖。
2. **Propagate**:嘗試把 F‐frame 中的 c 前推到前一層。
3. **Converge**:所有 frame 相等 ⇒ 得到不含 CTI 的不變式。
---
### A-6(15 分)
| | CBA | PBA | |
| ---------- | ----------- | ----------------------------- | - |
| 起始抽象 | 任剪切;易過粗 | 由 BMC refutation 自動擷取 | |
| Refinement | 逐條 CTI 延伸 | 用 UNSAT proof 取 *relevant* FF | |
| 優點 | 每步增量小 | 一步剔除大量無關訊號 | |
| 缺點 | 可能退化為多次無效細化 | 一次細化過大→MC 爆炸 | |
---
### A-7(15 分)
* **VSIDS**:衝突時提升涉入變數分數,週期衰減;決策選高分文字。
* **2-Watched-Literal**:每子句僅監兩文字,令 BCP 僅在 watched 變 0 時掃描子句,O(#衝突) 時間。
* **CDCL**:遇衝突由 Implication Graph 回溯切割,學得 UIP 子句並非時間序回溯,可非同步跳層。
---
### A-8(20 分)
1. 以 n-bit Adder(FA/HA 鏈)計算 S = ∑ cᵢxᵢ,接著以 Comparator 實現 (S ≥ k)。所有閘再經 Tseitin 編碼成 CNF。
2. **Arc-consistency**:若原 PB 條件隱含某文字之值,則在 SAT 編碼中單靠 BCP 也能推出同值。Adder 編碼因總和經過**carry 階層**,局部 0/1 變動難即時傳到最高位,故多數情況非 arc-consistent。
---
### B-1(40 分)
1. TR(Y,X): `y1' = x1 ⊕ x0 ⊕ y1`, `y0' = x0 ⊕ y0` (⊕ 為 mod-2 加) …… 示意
2. R₀ = {00}; S₁ = {01}; R₁ = {00,01}; S₂ = {10}; R₂ = {00,01,10}; S₃ = {11}; R₃ = 全集。交集 R ∩ ¬P = {11} ≠ ∅ ⇒ P **不成立**。
---
### B-2(40 分)
(a) MA(wt=g6→g7, s-a-1):{g6=0,g2=0,d=0,g1=0,g4=0,g5=0,g3=1,a=1,b=1,f=1} 
(b) 取 gd=g9 (AND) 之 MA:{g9=1, … , f=0};觀察 `(g5=1)` 與 `(g5=0)` 矛盾 ⇒ 加線 **g5→g9** (非反相) 為 alternative wire。其冗餘性由 Single-Wire Replacement 定理保證:新增線之 s-a-1/0 均 untestable。
(c) 加入冗餘線後,MA 將 g6 之故障變成 untestable → g6、g7 可安全移除而不改輸出函數。
---
### 使用建議
* 先計時寫完整份卷,對完解答後再回講義複習被扣分處。
* 真考是 open-everything,但時間仍吃緊,熟記 **核心流程圖、定義、演算法步驟** 最省查找。祝考試順利!