#for-loop #verilog #assign #synthesis
#для цикла #verilog #назначить #синтез
Вопрос:
У меня есть некоторый код, похожий на этот (пример приведен ниже):
genvar x;
genvar y;
generate
for (y = -off; y < off; y=y 1) begin
for (x = -off; x < off; x=x 1) begin
guassian_kernel[((((y off)*ks) x off 1)*fs)-1:(((y off)*ks) x off)] = x*y; // <- something like this
end
end
endgenerate
Возможно ли сделать что-то подобное или подобное:
20'd(x*y)
и т.д.?
Или у меня нет другого выбора, кроме как жестко закодировать все значения регистра? В фактическом коде, который я использую, значения в reg были бы гораздо более сложной функцией x и y.
Спасибо!
Ответ №1:
generate
блок, используемый только для генерации регулярных инструкций verilog, таких как экземпляры модулей, всегда блокирует, присваивает операторы, … Это своего рода предварительная обработка.
Итак, ваше назначение должно быть законным оператором verilog, например,
generate
for (y = -off; y < off; y=y 1) begin
for (x = -off; x < off; x=x 1) begin
always @* // <-- something like this.
guassian_kernel[((((y off)*ks) x off 1)*fs)-1:(((y off)*ks) x off)] = x*y;
end
end
endgenerate