生成语句:verilog

时间:2011-04-19 04:38:14

标签: for-loop verilog

我需要在generate语句中声明一个寄存器来存储一些临时值,

用于实例化。

我有

generate

for(i=0; i< N; i=i+1)
begin: i_loop
    Inst_file u(S1(i),P1(i),S(i),P(i)); 
    /* S1 and P1 have N bits and 
       S = S1 ^ P1; 
       P = S1 & P1 
     */
end //i_loop

S1和P1是简单的组合逻辑,我将它们用作第一个

的电线

迭代。但是在i的每次迭代之后,我需要将输出S和P分配为输入

(即用S和P代替S1和P1)。

我知道我应该使用寄存器而不是电线(我是对的吗?)

在这种情况下,我需要S1和P1作为reg。我尝试在

中使用always语句

生成。它给出了错误。

请你建议出路..

1 个答案:

答案 0 :(得分:2)

您应该使用N + 1位宽的总线,并将所有初始化拉出生成块之外。 我相信这样的事情会做:

wire [N:0]Sarray;
wire [N:0]Parray;

// initialize Sarray[0] and Parray[0] here using continuous assignment

generate
for(i=0; i< N; i=i+1)
begin: i_loop

    Inst_file u(Sarray[i],Parray[i],Sarray[i+1],Parray[i+1]);

end //i_loop

应该初始化Sarray [0]和Parray [0]以用于第一次迭代; Sarray [N]和Parray [N]将是模块链的最终输出值。