我想用verilog推断一个简单的触发器。这是代码。
module tb_simpleRegister();
reg clk;
reg a;
wire b;
simpleRegister dut
(
.clk(clk),
.a(a),
.b(b),
.c(c)
);
initial begin
clk=1;
a=0;
#10
a=1;
#10
a=0;
end
always #5 clk = ~clk;
endmodule
module simpleRegister(
input clk,
input a,
output reg b,
output reg c
);
always @(posedge clk) begin
b <= a;
c <= b;
end
endmodule
当我运行它时,here是结果。 dut的b输出不像触发器那样。但输出c确实如此。有关为什么会发生这种情况的任何评论?
答案 0 :(得分:1)
我会按如下方式重写测试台:
initial begin
@(posedge clk);
a<=0;
@(posedge clk);
a<=1;
@(posedge clk);
a<=0;
end
//Clock in separate process
initial begin
clk=1;
forever begin
#5 clk = ~clk;
end
end
非阻塞分配将确保在时钟边缘之后更改a的值,从而为测试平台提供完整的周期设置。