#for-loop #verilog
#для-цикла #верилог #для цикла #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 amp; P1
*/
end //i_loop
S1 и P1 — это простая комбинационная логика, и я использовал их в качестве проводов для первого
итерация. Но после каждой итерации i мне нужно назначить выходные данные S и P в качестве входных данных
(т.е. заменить S1 и P1 на S и P).
Я понимаю, что я должен сделать это с помощью реестра, а не проводного (я прав?)
В таком случае мне нужны S1 и P1 в качестве reg. Я попытался использовать оператор always внутри
сгенерировать. Выдает ошибку.
Можете ли вы, пожалуйста, предложить выход..
Комментарии:
1. Пожалуйста, отформатируйте свой код, см. meta.stackexchange.com/questions/22186 /… . Возможно, вы захотите сначала написать код без
generate
, пока у вас не появится больше интуиции относительно того, как все должно выглядеть в verilog.generate
позволяет использовать стенографию, но не является существенной особенностью языка.2. @Andy: Хорошо, Энди, в дальнейшем я позабочусь о форматировании 🙂 Спасибо за ссылку.
Ответ №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] будут конечным выходным значением цепочки модулей.
Комментарии:
1. Спасибо, что ты виртуальный 🙂 Я попробую это.