Could we have generate inside an always block?

2019-06-23 18:03发布

问题:

I want to have sth like this:

generate  
   for( i=0 ; i<16 ; i=i+1 ) begin:  
      always @(posedge clk) begin  
         L[i+1] <= #1 R[i];  
         R[i+1] <= #1 L[i] ^ out[i];  
      end  
   end  
endgenerate 

I would appreciate it if any one could possibly help me.

回答1:

You could do

always @(posedge clk)
  begin
  L[16:1] <= #1 R[15:0]
  R[16:1] <= #1 L[15:0] ^ out;
  end


回答2:

You don't need a generate here, I think. Just using a for loop within the always block will work.

always @(posedge clk) begin    
   for( int i=0 ; i<16 ; i=i+1 ) begin  
         L[i+1] <= #1 R[i];  
         R[i+1] <= #1 L[i] ^ out[i];  
   end  
end

A few questions you'd probably want to think about:

  • What size are the L and R buses? [15:0]?
  • Where are you assigning values to L[0] and R[0]?
  • Are you sure that i+1 when i hits 15 will be still within the bounds of your bus?