区别
半加器:不接受低位进位信号
全加器:全加器接受来自低位的进位信号并参与运算
半加器
两个加数,一个和输出位,一个进位输出,真值表如下:
由真值表得知:sum = in1 ^ in2;
cout = in1 & in2;
采用行为描述的N
位半加器:
module half_add #(
parameter N = 1
)
(
input [N-1:0] in1,
input [N-1:0] in2,
output reg [N-1:0] sum,
output reg [N-1:0] cout
);
always @(in1 or in2) begin
sum = in1 ^ in2;
cout = in1 & in2;
//或者 {sum, cout}= in1 + in2;
end
endmodule
采用数据流描述的N
位半加器:
module half_add #(
parameter N = 1
)
(
input [N-1:0] in1,
input [N-1:0] in2,
output [N-1:0] sum,
output cout
);
assign {sum, cout}= in1 + in2;
endmodule
全加器
两个加数,一个进位加数,一个和输出位,一个进位输出,真值表如下:
由真值表得知:sum = (a ^ b) ^ cin;cout = ((a & b) | (b & cin) ) | (a & cin);
采用行为描述的N
位全加器:
module full_add #(
parameter N = 1
)
(
input [N-1:0] in1,
input [N-1:0] in2,
input cin;
output reg [N-1:0] sum,
output reg cout
);
always @(in1 or in2 or cin) begin
sum = (in1 ^ in2) ^ cin;
cout = ((in1 & in2) | (in2 & cin)) | (in1 & cin);
//或者 {cout, sum} = in1 + in2 + sin;
end
endmodule
采用数据流描述的N
位全加器:
module full_add #(
parameter N = 1
)
(
input [N-1:0] in1,
input [N-1:0] in2,
input cin;
output [N-1:0] sum,
output cout
);
assign {cout, sum} = in1 + in2 + sin;
endmodule