题解 | #串行进位加法器#

串行进位加法器

https://www.nowcoder.com/practice/83c5850805004b6d8c48742f582f304a

`timescale 1ns/1ns

module add_4(

   input         [3:0]  A   ,

   input         [3:0]  B   ,

   input                Ci  , 

   output   wire [3:0]  S   ,

   output   wire        Co   

);

wire C0;//第一个全加器的进位

wire C1;//第二个全加器的进位

wire C2;//第三个全加器的进位

//A[0]+B[0]+Ci

add_full add_full_0(

    .A(A[0]),

    .B(B[0]),

    .Ci(Ci),

    .S(S[0]),

    .Co(C0)

    );

//A[1]+B[1]+C0

add_full add_full_1(

    .A(A[1]),

    .B(B[1]),

    .Ci(C0),

    .S(S[1]),

    .Co(C1)

);

//A[2]+B[2]+C1

add_full add_full_2(

    .A(A[2]),

    .B(B[2]),

    .Ci(C1),

    .S(S[2]),

    .Co(C2)

);

//A[3]+B[3]+C2

add_full add_full_3(

    .A(A[3]),

    .B(B[3]),

    .Ci(C2),

    .S(S[3]),

    .Co(Co)

);

endmodule

/*****************************一位半加器*********************************************/

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 c_1;

wire c_2;

wire sum_1;

add_half add_half_1(

   .A   (A),

   .B   (B),

         

   .S   (sum_1),

   .C   (c_1)  

);

add_half add_half_2(

   .A   (sum_1),

   .B   (Ci),

         

   .S   (S),

   .C   (c_2)  

);

assign Co = c_1 | c_2;

endmodule

全部评论

相关推荐

06-20 21:22
已编辑
门头沟学院 Java
纯真的河老师在喝茶:答应了就跑啊,实习随便跑啊,别被pua了,md就是找个廉价劳动力,还平稳过度正式工,到时候跟你说没转正
点赞 评论 收藏
分享
_mos_:我以为手抄报简历就已经很顶了,没想到还有表格简历
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-02 18:35
简历上把1个月实习写成了3个月,会进行背调吗?
码农索隆:一个月有一个月的实习经历,三个月有三个月的实习经历
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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