【问题标题】:Alternate signals for test bench without manually typing out all times in iverilog测试台的交替信号,无需在 verilog 中一直手动输入
【发布时间】:2017-07-05 18:27:16
【问题描述】:

我正在编写一个测试台,我希望能够让信号以某种模式上下波动(类似这样): 目前我每次都手动输入我想要的内容:

module TestExample;
reg a, b, c;

initial begin
    $dumpfile("test.vcd");
    $dumpvars(0, TestExample);

    # 0 a=0; b=0; c=0;
    # 10 a=1; b=0; c=0;
    # 20 a=0; b=1; c=0;
    # 30 a=1; b=1; c=0;
    # 40 a=0; b=0; c=1;
    # 50 a=1; b=0; c=1;
    # 60 a=0; b=1; c=1;
    # 70 a=1; b=1; c=1;
    # 80 a=0; b=0; c=0;

    # 90 $stop;
end
endmodule

问题在于,当我收到更多信号(比如说 a-z 而不是 a-b)时,每次手动输入和关联的值都需要很长时间。因此,我想知道是否有一种方法可以使信号自动化。例如,如果我可以说 a 每 10 u 秒切换一次状态,b 每 20 u 秒切换一次,c 每 30 u 秒切换一次?

【问题讨论】:

  • 你考虑过使用for循环吗?

标签: verilog iverilog


【解决方案1】:

正如格雷格所说...

module TestExample;
wire a, b, c, d ...
integer i;

initial begin
    $dumpfile("test.vcd");
    $dumpvars(0, TestExample);
    for (i = 0; i < 1<<26; i=i+1)
        #10;
    $stop;
end

assign a = i[0], b = i[1], c = i[2], d = i[3] ... 

endmodule

【讨论】:

  • 1&lt;&lt;26 有什么作用?还有什么a = i[0], b = i[1], c = i[2], d = i[3]
  • 1 &lt;&lt; 26shift left 的 26 位,即 2 的 26 次方。assign 语句将 vector i 的元素分配给 @987654329 @s abcd 等,似乎是要求。
  • 我个人更喜欢串联方法{ ... , d, c, b, a} = i;,它可以作为assign语句或在for循环中完成。
  • 好的,我编写了以下代码:gist.github.com/Tyler-Hilbert/296e3576653836b8ac6fbc5afdf232c4 并运行它,但出现以下错误:“TestExample.v:27: error: reg a; cannot be drive by primitives or continuous assignment.TestExample. v:27:错误:reg b;不能由原语或连续赋值驱动。TestExample.v:27:错误:reg c;不能由原语或连续赋值驱动。细化过程中出现 3 个错误。当我去并将寄存器更改为电线时,它可以工作。这是什么原因造成的?
  • @user2417339 assign 语句适用于 wires 而不是 regs。将 a,b,c,... 更改为 wire 类型或将赋值移动到 for 循环内。
【解决方案2】:

对于通用模式,您可以使用多个初始块,例如每个变量一个:

initial begin
   a = 0;
   forever begin
      #10 a = 1;
      #10 a = 0;
   end
end
initial
   b = 1;
   forever begin
      #30 b = 0;
      #30 b = 1;
   end
end
...
initial begin
    $dumpfile("test.vcd");
    $dumpvars(0, TestExample);

    #1000 $finish;
end

【讨论】:

    猜你喜欢
    • 2020-02-20
    • 2014-07-22
    • 1970-01-01
    • 2018-10-28
    • 1970-01-01
    • 2022-09-27
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多