J'essaye d'écrire du code verilog que j'aimerais réutiliser pour une application qui a beaucoup d'addition avec un nombre variable d'entrées. Dire que j'ai un module:Verilog: Existe-t-il un moyen de créer un additionneur généralisé (largeur variable/nombre d'entrées)?
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
Ceci est plus ou moins ce que je veux faire. Y a-t-il un moyen de le faire et de le synthétiser? Idéalement, la boucle for serait déroulée et optimisée de sorte qu'elle n'essaie pas de faire l'addition dans NUM_INPUTS-1 étapes. Est-ce mieux adapté à une instruction generate?
Merci
Merci dave, serait que l'exécution de code en un seul cycle d'horloge? Temp_data serait-il mis à jour en un seul cycle d'horloge ou un cycle d'horloge pour chaque opération d'addition? – marlow
J'ai essayé de modifier, mais je ne peux pas. J'ai remarqué qu'il n'y a pas d'horloge (dans mon code non plus), c'est un "*" pour le bloc toujours. Je pense que je comprends. Merci! – marlow