1
私は、さまざまな入力数で多くの追加があるアプリケーションで再利用したいと思っている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段階で加算を行なわないようにします。これは生成ステートメントに適していますか?
おかげ
のためのブロックを生成する必要はありませんが、そのコードは、1クロックサイクルで実行するでしょう、あなたはデイブに感謝しますか? temp_dataは、追加操作ごとに単一クロック・サイクルまたはクロック・サイクルで更新されますか? – marlow
編集しようとしましたが、できません。私はクロックがないことに気づきました(私のコードでも)、alwaysブロックの "*"。私はそれを得ると思う。ありがとう! – marlow