【问题标题】:Verilog - How to plug values from an output register in a testbench module?Verilog - 如何从测试台模块中的输出寄存器插入值?
【发布时间】:2020-07-03 06:10:24
【问题描述】:

因此,我们在 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)。我对使用这个应用程序有点陌生,如果有任何帮助,我将不胜感激。

【问题讨论】:

    标签: verilog test-bench


    【解决方案1】:
    1. 您将所有信号 (A-D) 定义为输出。
    2. 在您的作业中,例如A = B(应该是&lt;=),所有的regs实际上都没有价值。你没有初始化它们。因此,它们在您的测试平台中显示为 1'bx

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

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

    The result:

    模拟活动 3a 的输出

    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

    【讨论】:

    • 这可能无法合成。
    • 这可能只适用于仿真,我不确定是否有 FPGA 可以初始化一个不同于 0 的值的寄存器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    相关资源
    最近更新 更多