# Improve code coverage of Design --- **學號:B1095105 姓名:李彥霆 指導老師:林宏益** --- # 1.實驗目的 > 1. 解釋為什麼FSM coverage只有75%。 2. 要如何提升 (A)Line, (B)FSM, ( C )Condition, (D)Branch "這四項"的coverage覆蓋率? 請證明。 > >FSM狀態示意圖 # 2.實驗結果 ### A.Line Coverage 經觀察,Line Coverage無法達到100%的原因是因為case中的default,在模擬時沒有跑到default那行,導致Line Coverage無法達到滿分。 > ### B.FSM Coverage > 觀察講義所提供之test.v、test_bench.v所產生之波型圖發現,沒有S0->IDLE的情況發生,而依照本題FSM應該會有如下表格之幾種狀態發生。 | curr_state | next_state | |:----------:|:----------:| | IDLE | S0 | | S0 | IDLE | | S0 | S1 | | S1 | IDLE | 本應要有四種狀態轉換卻少了一種的情況下,FSM coverage就會是(4-1)*100%/4 = 75%。 > 因為原test_bench中Delay的數量給到了#100(100個時間單位),等於Testbench Pattern的切換需要1ps*100=100ps,而由於Clock Cycle只有10ps因此在curr_state=S0時永遠吃不到input=0的訊號,所以少了S0->IDLE的轉換。 對此,我將切換pattern時的Delay縮小至#10(10個時間單位) ``` initial begin rst_n = 1'b0; inp = 1'b0 #10 rst_n = 1'b1;inp = 1'b0 #10 inp=1'b1; #10 inp=1'b0; #10 inp=1'b1; #10 inp=1'b1; #10 inp=1'b1; #10 inp=1'b0; #10 inp=1'b1; #10 inp=1'b0; $finish; end ``` > >更改test_bench後的波型 ### C.Condition Coverage 須將所有input測試一遍。 ### D.Branch Coverage Branch Coverage無法達到100%的原因如同Line Coverage,由於在default 導致Coverage無法達到100%。 > # 3.實驗討論 ### 解決方法 ``` always @(curr_state) begin case(curr_state[1:0]) //IDLE:outp = 1'd0; S0:outp = 1'd0; S1:outp = 1'd1; default:outp = 1'd0; endcase end ``` 將IDLE的情況收進default,避免case只會在前三項(IDLE,S0,S1)執行而沒有執行到default。 > >All coverage 100% # 4.實驗心得 這次實驗不是自己做出一個成品,而是找出一個半成品的錯誤並想辦法除錯,我覺得非常有挑戰性,在做作業的同時需要重複跑模擬和開軟體來驗證方法是否可行,也在慢慢提升操作軟體的熟練度。
×
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