Я пытаюсь написать некоторый код Verilog, который я хотел бы использовать повторно для приложения, которое имеет много дополнений с различным количеством входов. Скажем, у меня есть модуль:Verilog: Есть ли способ сделать обобщенный сумматор (переменная ширина/количество входов)?
module parameterizable_adder #(
parameter WIDTH = 16,
parameter NUM_INPUTS = 16)(
input [NUM_INPUTS*WIDTH-1:0] in_data, output [NUM_INPUTS+WIDTH-1:0] out_data
);
//treat this block as psuedo code
integer i;
for (i = 0; i < NUM_INPUTS; i = i + 1) begin
out_data = out_data + in_data[i*WIDTH+WIDTH-1:i*WIDTH];
end
endmodule
Это более или менее то, что я хочу сделать. Есть ли способ в verilog сделать это и сделать его синтезируемым? В идеале цикл for будет откручен и оптимизирован, поэтому он не будет пытаться выполнить добавление в этапах NUM_INPUTS-1. Это лучше подходит для выражения generate?
Благодаря
Спасибо Дейву, что бы код выполнить в один такт? будет ли temp_data обновляться в течение одного тактового цикла или тактового цикла для каждой операции добавления? – marlow
Пробовал редактировать, но я не могу. Я заметил, что нет часов (в моем коде тоже), его «*» для всегда блока. Кажется, я понял. Благодаря! – marlow