突然发现百度和Google都搜索不到参数化加法树的写法,这里贴出一个单周期纯组合逻辑版本供参考。VHDL参数化加法树是类似的,这里就不列出了。
这里实现的是倒二叉树类型的加法树,纯组合逻辑,奇偶加数均支持自动生成。大概是下图的结构
参数有三个:
- IN_WIDTH: 每一个输入加数的位宽;
- NUM: 加数个数;
- OUT_WIDTH: 输出结果尾款,注意加法树每一层中间结果均会增加1bit,输出位宽不能太小,否则会发生截断。
输入输出:
- a: 所有加数concat在一起,位宽IN_WIDTH*NUM
- ans: 结果
下面是systemverilog写法,verilog简单地将logic替换成 reg即可。
/*======================================================
Descripton:
parameterized adder tree, full comb
Create:
Yipeng wangyipengv@outlook.com 20191126
Modify:
Notes:
1. contain constant functions
=========================================================*/
module adder_tree#(
parameter IN_WIDTH = 8,
parameter NUM = 4,
parameter OUT_WIDTH = 32
)(
input logic [NUM * IN_WIDTH - 1 : 0] a,
output logic signed [OUT_WIDTH - 1 : 0] ans
);
genvar i, j;
// - gen adders ----------------------------------------------------------
generate
for(i = 1; i <= gen_level(NUM); i++)begin:gen_add_levels
logic signed [1:gen