сгенерировать заявление: verilog - PullRequest
0 голосов
/ 19 апреля 2011

Мне нужно объявить регистр внутри оператора генерирования для хранения некоторых временных значений,

для использования в экземплярах.

У меня есть

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 в качестве входных данных

(т.е. заменить S1 и P1 на S и P).

Я понимаю, что должен сделать это срегистр, а не провод (я прав?)

В таком случае мне нужны S1 и P1 как рег.Я пытался использовать всегда оператор внутри генерации

.Это дает ошибку.

Можете ли вы предложить выход ..

1 Ответ

2 голосов
/ 19 апреля 2011

Вы должны использовать шину шириной 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] будут конечным выходным значением цепочки модулей.

...