题解 | #全加器#

全加器

https://www.nowcoder.com/practice/d04c046febb74e72949baee9aa99d958

对于半加器,只有输入a,b,输出和进位表示为: 
		S=a^b;        ①
		C=a&b;	      ②
全加器,在a,b的基础上增加了进位ci输入:
		S=a^b^ci;     ③
		C=a&b+ci(a^b);④
先将全加器中的a,b放入半加器中例化,将输入分别代入①②得到:
		S1=a^b;      ⑤
		C1=a&b;      ⑥
接下来将S1和Ci放入半加器进行例化,将输入分别代入①②得到:
		S2=S1^ci=a^b^ci;    ⑦
		C2=S1&ci=(a^b)&ci;	⑧
⑦⑧为例化两次的输出,③④是真正全加器的输出,③和⑦完全相等,因此例化两次后的输出可以作为全加器的输出;
⑧是全加器④的后半部分,还需要加上⑥,才组成一个完整的全加器进位输出,这就是为什么最后C需要把前两次的进位结果或在一起;


`timescale 1ns/1ns

module add_half(
   input                A   ,
   input                B   ,
 
   output	wire        S   ,
   output   wire        C   
);

assign S = A ^ B;
assign C = A & B;
endmodule

/***************************************************************/
module add_full(
   input                A   ,
   input                B   ,
   input                Ci  , 

   output	wire        S   ,
   output   wire        Co   
);
wire s1;
wire c1;
wire s2;
wire c2;
add_half u1(
    .A(A),
    .B(B),
    .S(s1),
    .C(c1)
);
add_half u2(
    .A(s1),
    .B(Ci),
    .S(s2),
    .C(c2)
);
assign S=s2;
assign Co=c1|c2;

endmodule

全部评论

相关推荐

评论
8
收藏
分享

创作者周榜

更多
正在热议
更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务