闲来之余,写了个加法树乘法器的小程序,此乘法器的最大特点是通过增加资源而提高运行速度,使
两八位数相乘能够在一个周期中完成。
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Code
1
module mult(clk,a,b,result);
2
input clk;
3
input [7:0] a;
4
input [7:0] b;
5![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
6
output [15:0] result;
7![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
8
wire[10:0] result_low;
9
wire[14:0] result_high;
10![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
11
reg [7:0] result0;
12
reg [8:0] result1;
13
reg [9:0] result2;
14
reg [10:0] result3;
15
reg [11:0] result4;
16
reg [12:0] result5;
17
reg [13:0] result6;
18
reg [14:0] result7;
19
reg [8:0] out0;
20
reg [10:0] out1;
21
reg [12:0] out2;
22
reg [14:0] out3;
23![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
24
function[7:0] mux;
25
input [7:0] operand;
26
input select;
27
begin
28
mux=select?operand:8'b00000000;
29
end
30
endfunction
31
always@(a or b)
32
begin
33
result0<=mux(a,b[0]);
34
result1<=mux(a,b[1])<<1;
35
result2<=mux(a,b[2])<<2;
36
result3<=mux(a,b[3])<<3;
37
result4<=mux(a,b[4])<<4;
38
result5<=mux(a,b[5])<<5;
39
result6<=mux(a,b[6])<<6;
40
result7<=mux(a,b[7])<<7;
41
end
42![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
43
always@*
44
begin
45
out0<=result0+result1;
46
out1<=result2+result3;
47
out2<=result4+result5;
48
out3<=result6+result7;
49
end
50![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
51
assign result_low=out0+out1;
52
assign result_high=out2+out3;
53
assign result=result_low+result_high;
54
endmodule
55![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
完整代码及testbench
mult.rar