# 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少跑一個狀態導致。