全加器(多位)的实现

一,半加器

  1. 定义
    半加器(Half Adder)是一种用于执行二进制数相加的简单逻辑电路。它可以将两个输入位的和(Sum)和进位(Carry)计算出来。
    半加器有两个输入:A 和 B,分别代表要相加的两个二进制位。它的输出由两个部分组成:
    1.和(Sum):表示 A + B 的个位数结果。
    2.进位(Carry):表示 A + B 的十位数结果是否需要进位到下一位。

  2. 真值表
    在这里插入图片描述

  3. 逻辑表达式
    根据真值表可知,当 A 和 B 的输入都为 0 时,Sum 和 Carry 均为 0;当 A 和 B 的输入中有一个为 1 时,Sum 为 1,Carry 为 0;当 A 和 B 的输入都为 1 时,Sum 为 0,Carry 为 1。所以其逻辑表达式为:
    Sum = A ^ B
    Carry = A & B

  4. 逻辑电路

在这里插入图片描述

  1. Verilog代码实现
module half_adder(
    input   wire        a_in    ,
    input   wire        b_in    ,   

    output  wire         count   ,//进位
    output  wire         sum      //半加和数
);

assign count = a_in & b_in;
assign sum   =  a_in ^ b_in;

// assign = {count,sum} = a_in + b_in ;
endmodule
  1. tb文件
`timescale 1ns/1ns
module tb_half_adder();

reg     in_a;
reg     in_b;
wire    count;
wire    sum;

initial begin
    in_a = 0;
    in_b = 0;
    #10;
    repeat(100)begin
        in_a =($random);
        in_b =($random);
        #10;
    end
    #10;
    $stop;
end

half_adder u_half_adder(
        .a_in    (in_a),
        .b_in    (in_b),   
        .count   (count),//进位
        .sum     (sum) //半加和数
);

endmodule
  1. 仿真波形
    在这里插入图片描述

二,全加器

  1. 定义
    全加器(Full Adder)是一种用于执行二进制数相加的数字逻辑电路。与半加器相比,全加器能够处理两个输入位之间的进位,从而实现多位二进制数的相加运算。
    一个全加器有三个输入:A、B 和进位(Carry-In,通常用Cin表示),代表要相加的两个二进制位和上一位的进位。它的输出由两部分组成:
    1.和(Sum):表示 A + B + Cin 的个位数结果。
    2.进位(Carry-Out,通常用Cout表示):表示 A + B + Cin 的十位数结果是否需要进位到下一位。
  2. 真值表
    在这里插入图片描述
  3. 逻辑表达式
    全加器的逻辑表达式可以通过使用逻辑门(AND、XOR)来表示。以下是全加器的逻辑表达式:
    Sum = A ^ B ^ Cin
    Cout = (A ^ B)&Cin + A&B
  4. 逻辑电路(这里借用一下别人的图阿里嘎多)

在这里插入图片描述
由两个半加器组成全加器
在这里插入图片描述

  1. Verilog代码
module full_adder(
    input   wire    a_in,
    input   wire    b_in,
    input   wire    c_in,

    output  wire    count,
    output  wire    sum
);

// reg  count_r;
// reg  sum_r;

assign sum = a_in ^ b_in ^ c_in;
assign count = (a_in ^ b_in)&c_in | a_in&b_in;

//{count , sum} = a_in + b_in + c_in
endmodule
  1. tb文件
module full_adder(
    input   wire    a_in,
    input   wire    b_in,
    input   wire    c_in,

    output  wire    count,
    output  wire    sum
);

// reg  count_r;
// reg  sum_r;

assign sum = a_in ^ b_in ^ c_in;
assign count = (a_in ^ b_in)&c_in | a_in&b_in;

//{count , sum} = a_in + b_in + c_in
endmodule
  1. 仿真波形
    在这里插入图片描述

三,多位全加器

  1. 个人理解
    对于多位全加器我的理解是,相当于多位数的每一位都是一个全加器,所以对于多位全加器,就是相当于是多个全加器的连接。
  2. verilog代码实现(generate)
module N_adder #(parameter N = 2) (
    input       [N-1:0] a_in,
    input       [N-1:0] b_in,
    input               cin,
    output      [N-1:0] sum,
    output              count
);

wire  [N:0]    c;

genvar i;
generate
    for (i = 0;i<N ; i=i+1) 
	 begin : adder_full_n
   full_adder     full_adder_inst (
                .a_in   (a_in[i]),
                .b_in   (b_in[i]),
                .c_in    (c[i]),
                .sum    (sum[i]),
                .count  (c[i+1])
);
    end
endgenerate

assign c[0] = cin;
assign count = c[N];

endmodule
  1. tb文件
`timescale 1ns/1ns
module N_adder_tb ();
parameter N = 5;
reg         [N-1:0] a_in;
reg         [N-1:0] b_in;
reg                 cin;
wire        [N-1:0] sum;
wire                count;

initial begin
    cin = 1'b0;
    #5;
    repeat(20)begin
        a_in =($random)%5;
        b_in =($random)%5;
        #(5);
    end
    #(10)
    $stop;
end
N_adder #(.N(N)) N_adder_inst (
            .a_in   (a_in),
            .b_in   (b_in),
            .cin    (cin),
            .sum    (sum),
            .count  (count)
);
endmodule
  1. 仿真波形
    在这里插入图片描述

四,总结

对于全加器,还是比较好理解的,主要是对组合逻辑的考察和理解,只要对组合逻辑有一定的理解我相信全加器还是比较好理解的。

  • 7
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1位全加器是一种用于将两个二进制位相加的电路。在数字电路中,它通常用于构建更复杂的加法器电路,例如4位或8位加法器。在下面的示例中,我们将使用74LS138芯片来实现1位全加器。 首先,让我们来看一下1位全加器的真值表: | A | B | Ci | S | Co | |---|---|----|---|----| | 0 | 0 | 0 | 0 | 0 | | 0 | 0 | 1 | 1 | 0 | | 0 | 1 | 0 | 1 | 0 | | 0 | 1 | 1 | 0 | 1 | | 1 | 0 | 0 | 1 | 0 | | 1 | 0 | 1 | 0 | 1 | | 1 | 1 | 0 | 0 | 1 | | 1 | 1 | 1 | 1 | 1 | 其中,A和B是要相加的两个二进制位,Ci是进位输入,S是和的输出,Co是进位输出。 接下来,让我们看看如何使用74LS138芯片来实现1位全加器。 首先,我们需要使用以下器件: - 2个74LS08(与门) - 2个74LS32(或门) - 1个74LS138(3-8译码器) - 一些电线和电阻 然后,按照以下电路图连接电路: ``` +---+ +---+ +---+ A ------- | | | | | | | | +--+ | | +--+ | | B ------- | | | | | | | | | | | 08| | | | 32|--| | |138| Ci ------ | | | | | | | | | | | | | | | | | | | | +---+ | | +---+ | | +---+ | | | | | | +--+ | | | 32|--|08| | | | | | | | | | | | | | | | | +--+ | | | | | | | | +---+ | | | +--| | | | | | | | | | +---+ | | | | | Co --------------|-----------| | | | | S ---------------|--------------| | | +------------+ ``` 这个电路图看起来有点复杂,但是它基本上是使用了三个74LS138译码器来实现1位全加器的真值表。其中,输入的A、B和Ci位分别连接到74LS138的A0、A1和A2口,而每个输出对应于真值表中的S和Co位。每个74LS138都连接到两个与门和两个或门,从而实现了1位全加器的逻辑运算。 总的来说,使用74LS138和其他数字电路器件,可以相对容易地实现1位全加器。当然,如果你想要更高位数的加法器,你需要使用更多的1位全加器来构建更复杂的电路。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值