「Verilog学习笔记」串行进位加法器

发布时间:2024年01月02日
专栏前言

本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网

?

`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 [3:0] C ; 
    genvar i ; 
    generate 
        for (i = 0 ; i < 4 ; i = i + 1) begin 
            add_full u1(.A(A[i]), .B(B[i]), .Ci(i ? C[i - 1] : Ci), .S(S[i]), .Co(C[i])) ; 
        end
    endgenerate

    assign Co = C[3] ; 

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
文章来源:https://blog.csdn.net/m0_54689021/article/details/135342516
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。