SUNODH
SUNODH

Reputation: 11

Does SystemVerilog Generate support delays?

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?

Upvotes: 0

Views: 489

Answers (3)

Serge
Serge

Reputation: 12384

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

Upvotes: 0

m4j0rt0m
m4j0rt0m

Reputation: 354

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

Upvotes: 2

toolic
toolic

Reputation: 62237

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

Upvotes: 1

Related Questions