# 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語句)和邏輯分支都被測試過。 實驗: 試著一一提升覆蓋率 ## 初始覆蓋率  --- ## Line coverage  根據紅框這行default沒有被執行到,因此我將他暫時移除,移除後可以發現Line coverage因此提升到100%  ## Branch coverage 根據系統紅框提示,這行條件敘述應該有沒有執行到的地方。我將?:條件敘述改為 if else實驗,Branch coverage稍微提升    ## FSM coverage ### Test 1 增加一個狀態 S2 (2'd3) 補齊2bit的4種狀態(00,01,10,11),但是FSM只提升到了83.3%。依然發現一樣的問題,S0沒有轉換到IDLE,所以轉為修改Test_bench。  ### Test 2  根據波形圖(200ns、400ns)可以發現S0在過程中並沒有觸發到inp1 =0 到IDLE狀態。 修改Testbench,原本延遲為100ns,把延遲時間縮小到可以成功觸發S0 -> IDLE。根據clk正緣觸發週期,inp1=0延續時間必須大於5ns  結果:經過Testbench 延遲時間修正到>5ns,<15ns(下一次的正緣觸發之前) 可以讓S0成功轉換到IDLE進而將FSM Coverage提升到100%  ## 實驗心得 提升Coverage的覆蓋率得對自己正在執行的程式聊若指掌,不然得付出大量的時間,程式所有的細節都會影響的機會,這次的作業FSM覆蓋率的部分經過非常多次的嘗試修改,最後確認是S0少跑一個狀態導致。
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.