0

您好,我正在 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

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

谢谢

4

1 回答 1

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

看看这是否能让你前进。

于 2017-03-11T05:41:40.867 回答