2015-11-13 136 views
0

我正在嘗試在Verilog中使用genvar。這裏是我的代碼 -verilog中的語法錯誤

reg [31:0] q[0:3]; 
initial 
begin 
    genvar j; 
    generate 
    for(j=0;j<4;j=j+1) begin : loop1 
     q[j]=32'H00000000; 
    end 
    endgenerate 
end 

的一部分,這給出了一個語法錯誤 -

Error:near "genvar":syntax error,unexpected "genvar" 

我如何實現這一點?我想初始化所有q陣列中的所有32位全部爲零。我想通過循環做到這一點,因爲數組的大小可能非常大。

回答

4

首先,generate塊通常與for循環一起使用以模擬多個時刻

您在initial程序塊中使用了generate,這顯然是非法。並因此發生語法錯誤。所以,刪除genvargenerate塊。

初始化的變量,可以有很多種方法。其中一些如下。

reg [31:0] q[0:3] = '{0,1,2,3}; // assigning default values 

reg [31:0] q[0:3]; 
initial 
begin      // weird method 
    for(j=0;j<4;j=j+1) begin : loop1 
     q[j]=32'h00000000; 
    end 
end 

reg [31:0] q[0:3]; 
initial 
begin 
    q='{default:'0}; // initialize all elements to zero 
end 

reg [31:0] q[0:3]; 
initial 
begin 
    foreach(q[i]) // can be preferable 
    q[i] = 0; 
end 

有關生成塊的更多信息,請參閱SystemVerilog LRM 1800-2012