繁体   English   中英

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

[英]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),因为我收到“非法 output 或 inout 端口连接”错误。

我设法创建的测试平台:

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

我从上面的测试台得到的唯一 output 是时钟似乎正在工作,但其他变量上有“无关”值(1'bx)。 我对使用这个应用程序有点陌生,任何帮助将不胜感激。

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

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

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

结果

模拟活动 3a 的 output

0 时钟 = 0 A = 0 B = 1 C = 0 D = 1

5 时钟 = 1 A = 1 B = 1 C = 1 D = 0

10 时钟 = 0 A = 1 B = 1 C = 1 D = 0

15 时钟 = 1 A = 1 B = 1 C = 0 D = 1

20 时钟 = 0 A = 1 B = 1 C = 0 D = 1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM