几种常见加法器的verilog实现

本文介绍了数字IC学习中常见的三种16位加法器的Verilog实现:进位跳跃加法器、进位选择加法器和并行前缀加法器。每种加法器通过门级实现,优化了计算过程,提高效率。通过仿真验证,结果正确。
摘要由CSDN通过智能技术生成
                                              **几种常见加法器的verilog实现**

本人刚开始研一的学习,想着开个博客把研究生学习的内容记录一下,也养成一个好的习惯。研究生的方向是数字IC,把最近做的几个加法器作业记录一下。
一:16位进位跳跃加法器。
利用门级实现的加法器电路,通过进位传递函数Pi进行进位选择,可以提前进位的计算,使得后一级计算可以提前,加快计算的过程。这个电路由一位全加器,级联成四位加法器,再级联成16位加法器,具体电路如下图:

16位进位跳跃加法器
其中Pi = ai ⊕ bi,Pi:j = Pi ·Pi-1…Pj,代码会附上。

二:16位进位选择加法器
利用门级实现,实际上是加法器进行两路计算,一路是进位为1的计算,一路是进位为0的计算,提前计算好,再根据进位去选择用哪一路的值,相当于并行执行计算过程,缩短了等待计算的时间,代码见后16进位选择加法器

三:16位并行前缀加法器
利用门级实现,并行的意思相当于在知道加数的前提下经过相关运算,可以提前计算出每一位的进位是多少,这样便可以很大程度节省计算等待的过程,相当于每一位的计算都是并行执行的,但这个电路的缺点是不能级联,写起来相对复杂。进位传递函数pi和进位生成函数gi
16位并行前缀加法器
本人写这个加法器时先定义好黑块,灰色块和缓冲器块,在一行一行书写代码,代码看起来虽多,其实都是一些模块的调用。

总结
这三个模块经过modelsim仿真,结果正确。
`//进位跳跃加法器设计
module carry_skip_adder16(a,b,Cin,sum,Cout);

input [16:1] a,b;
input Cin;

output [16:1] sum;
output Cout;

wire Cout1,Cout2,Cout3,c1,c2,c3,c4,p1,p2,p3,p4;

muxtwo m1(Cout1,Cin,c1,p1);                          //c1和cin选择一个作为下一级的进位
full_adder4 a1(a[4:1],b[4:1],Cin,sum[4:1],c1);     //产生低四位和数和进位C1,
pi P1(a[4:1],b[4:1],p1);                            //产生进位选择信号p1,用来选择c1还是cin作为下一级的进位。

muxtwo m2(Cout2,Cout1,c2,p2);
full_adder4 a2(a[8:5],b[8:5],Cout1,sum[8:5],c2);
pi P2(a[8:5],b[8:5],p2);

muxtwo m3(Cout3,Cout2,c3,p3);
full_adder4 a3(a[12:9],b[12:9],Cout2,sum[12:9],c3);
pi P3(a[12:9],b[12:9],p3);

muxtwo m4(Cout,Cout3,c4,p4);
full_adder4 a4(a[16:13],b[16:13],Cout3,sum[16:13],c4);
pi P4(a[16:13],b[16:13],p4);

endmodule

//一位全加器
module full_adder(a,b,Cin,sum,Cout);

input a,b;
input Cin;

output sum;
output Cout;

wire t1,t2

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值