Verilog 试验台的备用信号,无需始终在iVirlog中手动输入

Verilog 试验台的备用信号,无需始终在iVirlog中手动输入,verilog,iverilog,Verilog,Iverilog,我正在编写一个测试台,我希望能够让信号在某种模式下变高变低(如下所示): 目前,我手动键入我希望每次都是这样的: 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

我正在编写一个测试台,我希望能够让信号在某种模式下变高变低(如下所示): 目前,我手动键入我希望每次都是这样的:

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秒切换一次状态?

正如格雷格所说

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
模块测试示例;
电线a,b,c,d。。。
整数i;
初始开始
$dumpfile(“test.vcd”);
$dumpvars(0,测试示例);
对于(i=0;i<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
模块测试示例;
电线a,b,c,d。。。
整数i;
初始开始
$dumpfile(“test.vcd”);
$dumpvars(0,测试示例);

对于(i=0;i<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

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

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

你考虑过使用for循环吗?你考虑过使用for循环吗?什么是
1
1我个人更喜欢级联方法
{…,d,c,b,a}=I;
,它可以作为赋值语句或在for循环中完成。好的,我编写了以下代码:并运行了它,但出现了以下错误:“TestExample.v:27:error:reg a;不能由原语或连续赋值驱动。TestExample.v:27:error:reg b;不能由原语或连续赋值驱动。TestExample.v:27:error:reg c;不能由原语或连续赋值驱动。精化过程中出现3个错误。”。“当我去把寄存器改成导线时,它工作了。这是什么原因造成的?@user2417339
assign
语句在
wire
s上工作,而不是
reg
s。将a、b、c……改成
wire
在for-loop中键入或移动赋值。
1
1我个人更喜欢串联方法
{…,d,c,b,a}=i;
这可以作为assign语句或在for-loop中完成。好的,我编写了以下代码:并运行了它,但出现了以下错误:“TestExample.v:27:error:reg a;不能由原语或连续赋值驱动。TestExample.v:27:error:reg b;不能由原语或连续赋值驱动。TestExample.v:27:error:reg c;不能由原语或连续赋值驱动。精化过程中出现3个错误。”。“当我去将寄存器更改为连线时,它工作了。这是什么原因造成的?@user2417339
assign
语句在
wire
s上工作,而不是
reg
s。将a、b、c……更改为
wire
在for循环中键入或移动赋值。