网站开发技术公司,淮安谁家做网站,WordPress安装子目录,办公家具网站模板verilog 典型电路设计之加法器树乘法器
加法器树乘法器 加法器树乘法器的设计思想是“移位后加”#xff0c;并且加法运算采用加法器树的形式。乘法运算的过程是#xff0c;被乘数与乘数的每一位相乘并且乘以相应的权值#xff0c;最后将所得的结果相加#xff0c;便得到了…verilog 典型电路设计之加法器树乘法器
加法器树乘法器 加法器树乘法器的设计思想是“移位后加”并且加法运算采用加法器树的形式。乘法运算的过程是被乘数与乘数的每一位相乘并且乘以相应的权值最后将所得的结果相加便得到了最终的乘法结果。 首先我们明确一个观点 进行4位数乘法应该来说是最多会得到 8 位 因为4位数最大是15 15乘15得到的是225 在可控制的 128 到 256 之间 所以我们基本确定 临时变量选取为【70】 即可 然后下一步我们通过实际例子来确定乘法器简单的逻辑 比如 两个数 1001 乘 1010 我们观察可知得到【60】 完全可以用[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
stored3mul_b[3]?{1b0,mul_a,3b0}:8b0;
assign
stored2mul_b[2]{2b0,mul_a,2b0}:8bo;
assign
stored1mul_b[1]?{3b0,mul_a,1b0}:8b0;
assignstored0mul_b[0]?{4b0,mul_a}:8b0;
assign add01stored1stored0;
assign add23stored3stored2;
assign mul_outadd01add23;
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_a0;
mult_b0;
repeat(9)
begin
#20
mult_amult_a1;
mult_bmult_b1;
end
end