1.1目录
(1)目录
(2)题目要求
(3)相关原理
(4)代码
1.2 题目要求
Now that you know how to build a full adder, make 3 instances of it to create a 3-bit binary ripple-carry adder. The adder adds two 3-bit numbers and a carry-in to produce a 3-bit sum and carry out. To encourage you to actually instantiate full adders, also output the carry-out from each full adder in the ripple-carry adder. cout[2] is the final carry-out from the last full adder, and is the carry-out you usually see.
翻译:我们要用3个1位的全加器级联组成一个3位加法器,其中的cout[3:0]就是记录3个全加器的进位信息(例:cout[2]代表a[2]和b[2]相加是否进位)。
1.3 相关原理
这就是一位加法器变4位加法器的原理图,其中的CO就是题目中的cout ,CI就是题目的cin。我们只需要把每位的进位信号CO和下一位的CI连接就可以了。最后输出的S0-S3按位拼接后就是sum的结果。
1.4 代码
module top_module(
input [2:0] a, b,
input cin,
output [2:0] sum,
output [2:0] cout
);
wire cout1,cout2,cout3;
//调用3次一位全加器,也就实例化3个一位全加器
full_adder adder1(a[0],b[0],cin,sum[0],cout1);
full_adder adder2(a[1],b[1],cout1,sum[1],cout2);
full_adder adder3(a[2],b[2],cout2,sum[2],cout3);
assign cout={cout3,cout2,cout1};//输出a和b每位相加的进位情况
endmodule
//这个就是一位全加器模块
module full_adder(
input a,b,
input cin,
output sum,cout
);
assign sum=!((!a&!b&!cin)|(a&!b&cin)|(!a&b&cin)|(a&b&!cin));
assign cout=!((!a&!b)|(!b&!cin)|(!a&!cin));
endmodule