0

我正在编写一个测试台,我希望能够让信号以某种模式变高和变低(像这样):在此处输入图像描述 目前我手动输入我想要的每次都是这样的:

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

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

4

2 回答 2

1

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

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
于 2017-07-05T10:27:16.197 回答
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
于 2017-07-05T08:01:45.400 回答