【【verilog 典型电路设计之加法器树乘法器】】

verilog 典型电路设计之加法器树乘法器

加法器树乘法器
加法器树乘法器的设计思想是“移位后加”,并且加法运算采用加法器树的形式。乘法运算的过程是,被乘数与乘数的每一位相乘并且乘以相应的权值,最后将所得的结果相加,便得到了最终的乘法结果。
在这里插入图片描述
首先我们明确一个观点 进行4位数乘法应该来说是最多会得到 8 位
因为4位数最大是15 15乘15得到的是225 在可控制的 128 到 256 之间 所以我们基本确定 临时变量选取为【7:0】 即可
然后下一步我们通过实际例子来确定乘法器简单的逻辑
比如 两个数 1001 乘 1010
在这里插入图片描述
我们观察可知得到【6:0】 完全可以用[7:0]去覆盖 还有 得到的四位暂存下来就是0 乘1001 1乘1001 0 乘1001 1乘1001
每一个进行小移位之后相加 即可
四位暂存数,就好比 第一位确定的是[3:0] 第二位确定的是[4:1] 第三位是[5:2] 第四位是[6:3] 在面对是[7:0]中 我们可以采取在其他位补0 的做法 保证它的适用性

以下是verilog的代码

module mul_addtree(mul_a,mul b,mul_out);
input[3:0] mul_a,mul_b;
wire[7:0] mul_out;
wire[7:0] stored0,stored1,stored2,stored3;
wire[7:0] add01, add23;
assign
stored3=mul_b[3]?{1'b0,mul_a,3'b0}:8'b0;
assign
stored2=mul_b[2]?{2'b0,mul_a,2'b0}:8'bo;
assign
stored1=mul_b[1]?{3'b0,mul_a,1'b0}:8'b0;
assign
 stored0=mul_b[0]?{4'b0,mul_a}:8'b0;
assign add01=stored1+stored0;
assign add23=stored3+stored2;
assign mul_out=add01+add23;
endmodule

接下来
写下testbench

module mult_addtree_tb;
reg [3:0]mult_a;
reg [3:0]mult_b;
wire [7:0]mult_out;
mul_addtreeU1(.mul_a(mult_a),.mul_b(mult_b),.mul_out(mult_out));
initial
begin
mult_a=0; 
mult_b=0;
repeat(9)
begin
#20 
mult_a=mult_a+1;
mult_b=mult_b+1;
end
end
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值