【计算机组成实验】四位加法器

并行地形成各级进位,各进位之间不存在依赖关系,因而这种方式也称为先行进位同时进位跳跃进位

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

module add_ahead(a,b,sum,cin,cout
);
input [3:0] a,b;
input cin;
output [3:0] sum;
output cout;
wire c1,c2,c3;//各级进位输出
wire [3:0] g,p;

//产生第 0 位的本位值和进位输出
assign g[0]= a[0]& b[0];
assign p[0]= a[0]| b[0];
assign sum[0]= g[0]^p[0]^cin;
assign c1=g[0]|(p[0]&cin);

//产生第 1 位的本位值和进位输出
assign g[1]= a[1]& b[1];
assign p[1]= a[1]| b[1];
assign sum[1]= g[1]^p[1]^c1;
assign c2=g[1]|(p[1]&c1);

//产生第 2 位的本位值和进位输出
assign g[2]= a[2]& b[2];
assign p[2]= a[2]| b[2];
assign sum[2]= g[2]^p[2]^c2;
assign c3=g[2]|(p[2]&c2);

//产生第 3 位(最高位)的本位值和进位输出
assign g[3]= a[3]& b[3];
assign p[3]= a[3]| b[3];
assign sum[3]= g[3]^p[3]^c3;
assign cout=g[3]|(p[3]&c3);

endmodule 

采用先行进位方式的四位全加器
在这里插入图片描述
采用串行进位的四位全加器
在这里插入图片描述

module myCLA(cin,G0,P0,G1,P1,G2,P2,G3,P3,C0,C1,C2,C3);
input cin,P0,P1,P2,P3,G0,G1,G2,G3;
output C0,C1,C2,C3;
//input [3:0]P,G;
//错误:input [3:0]P,[3:0]G;

assign C0=G0|(P0&cin);
assign C1=G1|(P1&(G0|(P0&cin)));
assign C2=G2|(P2&(G1|(P1&(G0|(P0&cin)))));
assign C3=G3|(P3&(G2|(P2&(G1|(P1&(G0|(P0&cin)))))));

endmodule

module full_adder(a,b,cin,sum,cout);
input a,b,cin;
output sum,cout;
assign {cout,sum}=a +b + cin ;
endmodule

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值