2017-05-30 102 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 

希望这应该让你开始。