0

I thought of generating clock using genvar like below:

        reg [7:0]clk;  
      
     genvar i;
        generate
          for (i=0; i < 7; i++) begin
              #1 clk[i]=~clk[i];
            end
        endgenerate

I am getting an error:

error: near "#": syntax error, unexpected '#'

How can we resolve it? Can I use delays inside generate block?

toolic
  • 57,801
  • 17
  • 75
  • 117
SUNODH
  • 11
  • 5
  • You can put anything inside a generate block that you can put between `module` and `endmodule`. What you are trying to put inside your generate block would not be legal between `module` and `endmodule`. – Matthew Taylor Jul 24 '20 at 11:44

3 Answers3

2

I feel it isn't necessary to have a generate, you can use the for loop directly in an always block:

reg [7:0] clk;
integer i;
always begin
  #1;
  for(i = 0; i < 7; i = i + 1)
    clk[i] = ~clk[i];
end

Nevertheless, if all the bits are toggled at the same time, you can simplify it with:

always
  #1 clk = ~clk; //..bitwise invert the array
m4j0rt0m
  • 354
  • 1
  • 5
1

Yes, generate blocks support delays. To fix your problem, use a procedural always block:

reg [7:0] clk;  

genvar i;
generate
    for (i=0; i < 7; i++) begin
        always #1 clk[i]=~clk[i];
    end
endgenerate
toolic
  • 57,801
  • 17
  • 75
  • 117
0

It looks like OP wanted to have a sequential delay model. In this case the code should look like this:

always begin
  for(i = 0; i < 7; i = i + 1)
    #1 clk[i] = ~clk[i];
end
Serge
  • 11,616
  • 3
  • 18
  • 28