「Verilog学习笔记」全加器

专栏前言

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

「Verilog学习笔记」全加器_第1张图片

// 对于半加器,只有输入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, C1, S2, 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

你可能感兴趣的:(Verilog学习笔记,学习,笔记,Verilog)