2017-05-30 139 views
-1

我的經驗,程序員,但新的HDL。我正試圖弄清楚如何爲我的課程實現基本的硬件設計單元測試。我知道SVUnit,但我需要提交代碼,所以我寧願自己實施準系統測試功能。這也將幫助我學習更多。基本單元測試

我有麻煩搞清楚什麼語言結構來使用。我真正需要做的是實例化一個組件,驅動輸入,然後驗證輸出值。驗證是我卡住的地方。這是否需要進入總是阻止?

即使指出我在正確的方向,我應該使用谷歌搜索條件將是非常有幫助的。到目前爲止,我已經試過:Verilog的ModelSim的單元測試,Verilog的ModelSim的自檢測試平臺等沒有太多的成功。

編輯:例: 比方說,我有一個1位半加器的設計。我如何編寫一個測試平臺來練習每個可能的輸入組合,並自動驗證輸出是否正確?

+0

沒有什麼需要被驅動的數據,你如何期望噸至知道,它的作品的具體細節,這個問題是範圍廣了這個論壇, –

+0

增加了一個具體的例子 – anderspitman

+0

的Verilog +測試平臺+爲半+加法 –

回答

0

作爲第一稿我會看的東西這一點。

reg clk = 0; 
reg rst_n; 
initial 
begin 
    rst_n = 'bx; 
    #5 
    rst_n = 1'b0; 
    #20 
    rst_n = 1'b1; 
end 

always @(clk) 
begin 
    clk = #10 ~clk; 
end 

reg a,b; 
wire adder = a + b; 
task test; 
    input i0,i1,o; 
    a = i0; 
    b = i1; 
    #1 
    if (adder !== o) 
    $display("Error:Incorrect output"); 
endtask 
initial 
begin 
    wait(rst_n === 1'b0); 
    @(posedge clk) 
    test(0,0,0); 
    @(posedge clk) 
    test(0,1,1); 
    @(posedge clk) 
    test(1,1,0); 
    @(posedge clk) 
    test(1,0,1); 
end 

那你還不如第二稿器的測試數據是這樣的:

wire [3:0] stim_data [1:0]; 
wire [3:0] expected_output; 
always @(posedge clk) 
    if (!rst_n) 
    begin 
    cnt <= 2'b00; 
    end 
    else 
    begin 
    cnt <= cnt + 1; 
    end 
assign {a,b} = stim_data[cnt]; 
always @(posedge clk) 
    if (!rst_n) 
    begin 
    end 
    else 
    begin 
    if (adder !== expected_output[cnt]) 
     // add error message 
    end 

希望這應該讓你開始。