2015-11-13 140 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