# 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
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up