8*8 wallace乘法器
此次乘法器主要是使用全加器来进行运算,用四级全加器来将wallace树压缩,最后进行相加。
如图所示,可以理解为第一级别压缩,使用20个全加器。结合下面的列数标号,可以看出每一列的a和b的 参数相加和列数相同,这个地方可以方便写代码时进行检查。此步骤使用全加器得出的结果位和进位可以用一个两位变量来放置进行下一步的压缩或者说累加。01列计算出来的进位和结果为使用b1[1:0],b1[1]表示01列计算的进位,b1[0]表示计算的结果位。
如图所示,显示为第二次压缩,本次使用15个全加器。每个全加器生成的进位和结果位用两位存储,表示为c2[1:0],c2[1]表示进位,c2[0]表示结果位。
如图所示,为第三次压缩,本次使用9个全加器。每个全加器产生相应的结果位和进位。表示为d3[1:0],d3[1]表示全加器计算的进位,d3[0]表示全加器计算的结果位。
如图所示,为第四次进行三二压缩,此次使用11个全加器,每个全加器产生的进位和结果位不在另外用多个变量存储,因为此次运算完成后可产生两个11位宽的变量,这两个变量摆放位置如下:
如图所示,输出的out的前五位可以由之前的赋值,后十一位补零相加即可计算出最后的output。
module mutli(
input wire clk,
input wire rst,
input wire [7:0] a,
input wire [7:0] b,
output wire [15:0] out
);
reg [7:0]p[7:0];
//every number a