Verilog - 如何插入测试台模块中输出寄存器的值?

Verilog - How to plug values from an output register in a testbench module?

因此,我们在 Verilog 中提供了一个顺序模块,并负责创建一个测试台以显示非阻塞和阻塞分配之间的区别。

提供的代码:

module sequential_module (A, B, C, D, clk);
input clk;

output A, B, C, D;
reg A, B, C, D;

always @(posedge clk)
begin
   A = B;
   B = A;
end

always @(posedge clk)
begin
   C <= D;
   D <= C;
end

endmodule

我似乎无法将任何值插入测试台中的任何变量(A、B、C、D),因为我收到“非法输出或输入输出端口连接”错误。

我成功创建的测试平台:

module testbench_sequential;
reg clk;
wire A, B, C, D;

sequential_module test(A, B, C, D, clk);
always
   #5 clk = ~clk;
 
initial
   begin
      clk = 1'b0; 
      $display ("Simulating output for Activity 3a");
      $monitor ($time,,, "clk = %b A = %b B = %b C = %b D = %b ", clk, A, B, C, D);      
      #25 $finish;
   end

endmodule

我从上面的测试台得到的唯一输出是时钟似乎在工作,但其他变量上有“无关”值 (1'bx)。我是使用此应用程序的新手,如有任何帮助,我们将不胜感激。

  1. 您将所有信号 (A-D) 定义为输出。
  2. 在您的作业中,例如A = B(应该是<=),所有的regs其实都没有值。你没有初始化它们。因此,它们在您的测试台中显示为 1'bx

要实现你想要的,你可以简单地修改你的 regs 的声明,例如:

reg A = 1'b0, B = 1'b1, C = 1'b0, D = 1'b1;

The result:

Simulating output for Activity 3a

0 clk = 0 A = 0 B = 1 C = 0 D = 1

5 clk = 1 A = 1 B = 1 C = 1 D = 0

10 clk = 0 A = 1 B = 1 C = 1 D = 0

15 clk = 1 A = 1 B = 1 C = 0 D = 1

20 clk = 0 A = 1 B = 1 C = 0 D = 1