无法理解 D 触发器代码中的错误
Unable to understand error in D flip flop code
我的测试台代码有问题,我没有得到正确的波形。甚至时钟也不触发。
D 触发器代码:
module D_FF(o,D,clk);
output reg o;
input D,clk;
always @ (posedge clk)
begin
if(D==1'b1)begin
o=1'b1;
end
else begin
o=1'b0;
end
end
endmodule
测试台代码:
module DD_flipflop_tb();
reg clk,D;
wire o;
D_FF i1(o,D,clk);
initial begin
clk=1'b0;
D=1'b0;
end
always begin
#20 clk=~clk;
#35 D=~D;
#5000 $finish;
end
endmodule
这是您的测试平台中 always
块中发生的情况。
在时间0,clk和D为0。
在时间 20,您将 clk 反转,变为 1。
在时间 55,你反转 D,它变成 1。
在时间 5055,您调用了终止模拟的 $finish。块中的语句只执行一次,这就是为什么你的输入永远不会改变超过一次的原因。
在您的测试台中,在 initial
块中将它们初始化为 0,然后将时钟生成与数据信号分开。
initial begin
clk = 0;
forever #20 clk=~clk;
end
initial begin
D=0;
forever #35 D=~D;
end
initial #5000 $finish;
您可能希望在测试台中分别分配时钟和激励:
initial begin
clk = 0;
D = 0;
#5000 $finish;
end
//..clock
always
#20 clk = ~clk;
//..stimulus
always
#35 D = ~D;
我的测试台代码有问题,我没有得到正确的波形。甚至时钟也不触发。
D 触发器代码:
module D_FF(o,D,clk);
output reg o;
input D,clk;
always @ (posedge clk)
begin
if(D==1'b1)begin
o=1'b1;
end
else begin
o=1'b0;
end
end
endmodule
测试台代码:
module DD_flipflop_tb();
reg clk,D;
wire o;
D_FF i1(o,D,clk);
initial begin
clk=1'b0;
D=1'b0;
end
always begin
#20 clk=~clk;
#35 D=~D;
#5000 $finish;
end
endmodule
这是您的测试平台中 always
块中发生的情况。
在时间0,clk和D为0。
在时间 20,您将 clk 反转,变为 1。
在时间 55,你反转 D,它变成 1。
在时间 5055,您调用了终止模拟的 $finish。块中的语句只执行一次,这就是为什么你的输入永远不会改变超过一次的原因。
在您的测试台中,在 initial
块中将它们初始化为 0,然后将时钟生成与数据信号分开。
initial begin
clk = 0;
forever #20 clk=~clk;
end
initial begin
D=0;
forever #35 D=~D;
end
initial #5000 $finish;
您可能希望在测试台中分别分配时钟和激励:
initial begin
clk = 0;
D = 0;
#5000 $finish;
end
//..clock
always
#20 clk = ~clk;
//..stimulus
always
#35 D = ~D;