您好我正在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
我的教授没有告诉我们如何编写这个测试平台,我很困惑。任何帮助表示赞赏。
谢谢
答案 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
看看是否能让你前进。