for-loop - Verilog:有没有办法制作广义加法器(可变宽度/输入数量)?

标签 for-loop verilog addition generic-programming auto-generate

我正在尝试编写一些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 阶段中进行加法。这是否更适合生成语句?

谢谢

最佳答案

您不需要为此生成 block

integer i;
reg [NUM_INPUTS+WIDTH:0] temp_data;
always @* begin
     temp_data = 0;
     for (i = 0; i < NUM_INPUTS; i = i + 1) 
       temp_data = temp_data + in_data[i*WIDTH +: WIDTH];
     out_data = temp_data;
    end

关于for-loop - Verilog:有没有办法制作广义加法器(可变宽度/输入数量)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41148329/

相关文章:

R4.0 性能 : dataframes vs lists, 循环与向量化 - 常数向量减法示例

verilog - 减去两个 32 位输入时 Icarus Verilog 语法错误?

c - 得到 unsigned long long 加法进位

iOS 十六进制加法

MATLAB:函数返回单个值而不是向量

c - C 实现中的 For 循环

image - 将图像从 PC 读取到 FPGA 并返回

assembly - 有没有办法增加 xmm 寄存器中的值?

c# - 通过foreach循环在ASP.Net中制作下拉列表

random - 在verilog中生成随机数