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循环吗?什么是11我个人更喜欢级联方法{…,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个错误。”。“当我去把寄存器改成导线时,它工作了。这是什么原因造成的?@user2417339assign
语句在wire
s上工作,而不是reg
s。将a、b、c……改成wire
在for-loop中键入或移动赋值。11我个人更喜欢串联方法{…,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个错误。”。“当我去将寄存器更改为连线时,它工作了。这是什么原因造成的?@user2417339assign
语句在wire
s上工作,而不是reg
s。将a、b、c……更改为wire
在for循环中键入或移动赋值。