---
# System prepended metadata

title: HW5 Improve code coverage of your Design

---

# HW5 Improve code coverage of your Design

組員: M1125143 陳奕霖 | 指導老師：林宏益教授


>[color=#6038af]實驗目的 :
提升 (1) Line (2) FSM  (3) Condition (4) Branch 的coverage覆蓋率

>[color=#6038af]實驗需求: 工作站

---
## 實驗原理
行覆蓋率（Line Coverage）：評估程式中每一行是否已經被testbench執行過。

條件覆蓋率（Condition Coverage）：用來確保每個條件語句（如if語句）的所有可能結果都被測試過。

有限狀態機覆蓋率（Finite State Machine Coverage）：確保有限狀態機的所有可能狀態和狀態轉換都被測試過。

分支覆蓋率（Branch Coverage）：用來確保每個程式碼分支（如if/else語句）和邏輯分支都被測試過。

實驗: 試著一一提升覆蓋率
## 初始覆蓋率
![螢幕擷取畫面 2023-11-17 原版](https://hackmd.io/_uploads/SJn3q2d4a.png)

---

## Line coverage

![螢幕擷取畫面 2023-11-20 190336](https://hackmd.io/_uploads/rJTM62OEp.png)

根據紅框這行default沒有被執行到，因此我將他暫時移除，移除後可以發現Line coverage因此提升到100%

![螢幕擷取畫面 2023-11-17 line coverage提升](https://hackmd.io/_uploads/Bke2p3dN6.png)

## Branch coverage


根據系統紅框提示，這行條件敘述應該有沒有執行到的地方。我將?:條件敘述改為 if else實驗，Branch coverage稍微提升

![螢幕擷取畫面 2023-11-20 190913](https://hackmd.io/_uploads/S1Vw03dNT.png)

![螢幕擷取畫面 2023-11-20 191302](https://hackmd.io/_uploads/B1pS1ad4T.png)

![螢幕擷取畫面 2023-11-17 branch coverage提升](https://hackmd.io/_uploads/SyOAJadN6.png)

## FSM coverage
### Test 1 
增加一個狀態 S2 (2'd3) 補齊2bit的4種狀態(00，01，10，11)，但是FSM只提升到了83.3%。依然發現一樣的問題，S0沒有轉換到IDLE，所以轉為修改Test_bench。

![螢幕擷取畫面 2023-11-20 214205](https://hackmd.io/_uploads/S1UDG1FVp.png)

### Test 2
![螢幕擷取畫面 2023-11-21 114041](https://hackmd.io/_uploads/rJuQqjtVT.png)

根據波形圖(200ns、400ns)可以發現S0在過程中並沒有觸發到inp1 =0 到IDLE狀態。

修改Testbench，原本延遲為100ns，把延遲時間縮小到可以成功觸發S0 -> IDLE。根據clk正緣觸發週期，inp1=0延續時間必須大於5ns

![螢幕擷取畫面 2023-11-21 152425](https://hackmd.io/_uploads/H1qYxk5Vp.png)

結果:經過Testbench 延遲時間修正到>5ns，<15ns(下一次的正緣觸發之前) 可以讓S0成功轉換到IDLE進而將FSM Coverage提升到100%

![螢幕擷取畫面 2023-11-21 162235](https://hackmd.io/_uploads/rJp1F1cVa.png)




## 實驗心得
提升Coverage的覆蓋率得對自己正在執行的程式聊若指掌，不然得付出大量的時間，程式所有的細節都會影響的機會，這次的作業FSM覆蓋率的部分經過非常多次的嘗試修改，最後確認是S0少跑一個狀態導致。
