用Verilog HDL实现4位超前进位加法器

4位超前进位加法器的逻辑表达

4位全加器的逻辑表达如下

C_{i+1}=A_{i}B_{i}+A_{i}C_{i}+B_{i}C_{i}\qquad(1)

S_{i}=A_{i}\oplus B_{i} \oplus C_{i}\qquad(2)

按照异或如下性质

M\oplus N=(M_{i}N_{i})\oplus (M+N)\qquad(3)

将其代入(1)与(2),有

C_{i+1}=A_{i}B_{i}+(A_{i}+B_{i})C_{i}\qquad(4)

S_{i}=(A_{i}B_{i})\oplus (A_{i}+B_{i})\oplus C_{i}\qquad(5)

引入辅助标记量 P(表示 A或B),G(表示 A与B),即

  P_{i}=A_{i}+B_{i}

G_{i}=A_{i}B_{i}

并代入(4)与(5),得

C_{i+1}=G_{i}+P_{i}C_{i}\qquad(6)

S_{i}=G_{i}\oplus P_{i}\oplus C_{i}\qquad(7)

至此,4位超前加法器的逻辑表达式已得到,如式(6)与(7)所示,展开后有

C_{1}=G_{0}+P_{0}C_{0}

C_{2}=G_{1}+P_{1}(G_{0}+P_{0}C_{0})=G_{1}+P_{1}G_{0}+P_{1}P_{0}C_{0}

C_{3}=G_{2}+P_{2}(G_{1}+P_{1}(G_{0}+P_{0}C_{0}))=G_{2}+P_{2}G_{1}+P_{2}P_{1}G_{0}+P_{2}P_{1}P_{0}C_{0}

C_{4}=G_{3}+P_{3}G_{2}+P_{3}P_{2}G_{1}+P_{3}P_{2}P_{1}G_{0}+P_{3}P_{2}P_{1}P_{0}C_{0}

S_{0}=G_{0}\oplus P_{0}\oplus C_{0}

S_{1}=G_{1}\oplus P_{1}\oplus (G_{0}+P_{0}C_{0})

S_{2}=G_{2}\oplus P_{2}\oplus (G_{1}+P_{1}(G_{0}+P_{0}C_{0}))

S_{3}=G_{3}\oplus P_{3}\oplus (G_{2}+P_{2}(G_{1}+P_{1}(G_{0}+P_{0}C_{0})))

Verilog 实现

1、采用数据流建模

module four_bits_fast_adder();
input [3:0] a,b;
input c_in;
output [3:0] sum;
output c_out;
wire[4:0] g,p,c;

assign c[0] = c_in;
assign g = a & b;
assign p = a | b;
assign c[1] = g[0]|(p[0]&c[0]);
assign c[2] = g[1]|(p[1]&g[0])|(p[1]&p[0]&c[0]);
assign c[3] = g[2]|(p[2]&g[1])|(p[2]&p[1]&g[0])|(p[2]&p[1]&p[0]&c[0]);
assign c[4] = g[3]|(p[3]&g[2])|(p[3]&p[2]&g[1])|(p[3]&p[2]&p[1]&g[0])|(p[3]&p[2]&p[1]&p[0]&c[0]);
assign sum = g^p^c[3:0];
assign c_out = c[4];
endmodule

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值