Verilog TestBench错误

时间:2017-03-10 15:50:56

标签: verilog xilinx hdl test-bench

您好我正在Xilinx上编写Verilog程序,无法让测试平台生成工作。

    module Lab3(
    input  u,
    input clk,
    input clrn,

    output wire a,b,c,d,e,f,g

    );

    wire  dff3_combo;
    wire q_to_q;


    dff3 d0(
    .ns(dff3_combo),
    .clr(clrn),
    .clk(clk),
    .q(q_to_q)
        );


    combo_circuit combo(
    .q(q_to_q),
    .u(u),
    .ns(dff3_combo),
    .a(a),.b(b),.c(c),.d(d),.e(e),.f(f),.g(g)
    );
    endmodule

这是我在测试平台上的尝试。虽然u_tb,clock_tb和clr_tb保持了它们的值,但模拟不起作用。

    `timescale 1ns / 1ps

    module testbench ( );
reg u_tb,clr_tb, clock_tb;
wire a,b,c,d,e,f,g;


Lab3 L(
.u(u_tb),
.clk(clock_tb),
.clrn(clr_tb),
.a(a),.b(b),.c(c),.d(d),.e(e),.f(f),.g(g)
);


always
begin
clock_tb = 1'b1;
#1;
clock_tb = 1'b0;
#1;
end

initial
begin
u_tb = 1;
clr_tb = 0;
#1 u_tb = 1;
#16 clr_tb = 0;
#20 $finish;
end
endmodule

我的教授没有告诉我们如何编写这个测试平台,我很困惑。任何帮助表示赞赏。

谢谢

1 个答案:

答案 0 :(得分:0)

像这样重写你的时钟

initial
   begin
     clk = 0;
     #5
     forever clk = #5  ~clk;
   end

然后,不要在每个输入信号变化之间暂停(#1),而是尝试使用

repeat (1) @ (posedge clk);

因为您希望始终在时钟边缘之后立即设置。

所以你的测试进行初始陈述看起来更像是

initial
begin
u_tb = 1;
clr_tb = 0;
repeat (1) @ (posedge clk);
u_tb = 1;
repeat (8) @ (posedge clk);
clr_tb = 0;
repeat (5) @ (posedge clk);
$finish;
end

看看是否能让你前进。