SystemVerilog Generate 是否支持延迟?
Does SystemVerilog Generate support delays?
我想到了使用 genvar
生成时钟,如下所示:
reg [7:0]clk;
genvar i;
generate
for (i=0; i < 7; i++) begin
#1 clk[i]=~clk[i];
end
endgenerate
我遇到一个错误:
error: near "#": syntax error, unexpected '#'
如何解决?我可以在 generate
块内使用延迟吗?
是的,generate
块支持延迟。要解决您的问题,请使用程序 always
块:
reg [7:0] clk;
genvar i;
generate
for (i=0; i < 7; i++) begin
always #1 clk[i]=~clk[i];
end
endgenerate
感觉没必要生成,可以直接在always块中使用for循环:
reg [7:0] clk;
integer i;
always begin
#1;
for(i = 0; i < 7; i = i + 1)
clk[i] = ~clk[i];
end
然而,如果同时切换所有位,您可以将其简化为:
always
#1 clk = ~clk; //..bitwise invert the array
看来 OP 想要一个顺序延迟模型。在这种情况下,代码应如下所示:
always begin
for(i = 0; i < 7; i = i + 1)
#1 clk[i] = ~clk[i];
end
我想到了使用 genvar
生成时钟,如下所示:
reg [7:0]clk;
genvar i;
generate
for (i=0; i < 7; i++) begin
#1 clk[i]=~clk[i];
end
endgenerate
我遇到一个错误:
error: near "#": syntax error, unexpected '#'
如何解决?我可以在 generate
块内使用延迟吗?
是的,generate
块支持延迟。要解决您的问题,请使用程序 always
块:
reg [7:0] clk;
genvar i;
generate
for (i=0; i < 7; i++) begin
always #1 clk[i]=~clk[i];
end
endgenerate
感觉没必要生成,可以直接在always块中使用for循环:
reg [7:0] clk;
integer i;
always begin
#1;
for(i = 0; i < 7; i = i + 1)
clk[i] = ~clk[i];
end
然而,如果同时切换所有位,您可以将其简化为:
always
#1 clk = ~clk; //..bitwise invert the array
看来 OP 想要一个顺序延迟模型。在这种情况下,代码应如下所示:
always begin
for(i = 0; i < 7; i = i + 1)
#1 clk[i] = ~clk[i];
end