сгенерировать оператор: verilog

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

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

у меня есть

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 как рег. Я пробовал использовать оператор always внутри

генерировать. Выдает ошибку.

Не могли бы вы предложить выход?


person Nandhini    schedule 19.04.2011    source источник
comment
Отформатируйте свой код, см. meta.stackexchange.com/questions/22186/. Вы можете сначала написать код без generate, пока у вас не появится больше интуиции относительно того, как все должно выглядеть в Verilog. generate включает сокращение, но не является важной особенностью языка.   -  person Andy    schedule 19.04.2011
comment
@Andy: Хорошо, Энди, в дальнейшем я позабочусь о форматировании :) Спасибо за ссылку.   -  person Nandhini    schedule 19.04.2011


Ответы (1)


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

person virtuallinux    schedule 19.04.2011
comment
Спасибо виртуальный :) Я попробую это. - person Nandhini; 19.04.2011