Verilog 简单寄存器测试平台

Verilog simple register testbench

我想用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 确实如此。对为什么会发生这种情况有任何评论吗?

我会重写测试平台如下:

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 的值在时钟边沿之后立即更改,从而为测试台提供完整的周期设置。