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