FPGA加法器实现与资源消耗-全加器

全加器是指对输入的两个二进制数相加(A与B)同时会输入一个低位传来的进位C_{i-1},得到和数(SUM)和进位C_{i};一位全加器可以处理低位进位,并输出本位加法进位。多个一位全加器进行级联可以得到多位全加器。

真值表

ABC_{i-1}SUMC_{i}
00000
00110
01010
01101
10010
10101
11001
11111

真值表达式

SUM = A\bigoplus B\bigoplus C_{i-1}

C_{i} = AC_{i-1}+AB+BC_{i-1}

verilog代码

`timescale 1ns / 1ps
module add(
    input A,
    input B,
    input Ci1,
    output SUM,
    output Ci
);
    assign SUM = A ^ B ^ Ci1;
    assign Ci = (A & Ci1) | (A & B) | (B & Ci1);

endmodule

testbench

`timescale 1ns / 1ps
module add_tb(

    );
    reg  A;
    reg  B;
    reg  Ci1;
    wire SUM;
    wire Ci;
    add add1(
        .A(A),
        .B(B),
        .Ci1(Ci1),
        .SUM(SUM),
        .Ci(Ci)
    );
   initial begin
        A = 1;
        B = 1;
        Ci1 = 1;
        #10
        $display("A = %d, B = %d, Ci1 = %d, SUM = %d, Ci = %d",A,B,Ci1,SUM,Ci);
        A = 0;
        B = 1;
        Ci1 = 1;
        #10
        $display("A = %d, B = %d, Ci1 = %d, SUM = %d, Ci = %d",A,B,Ci1,SUM,Ci);
        $finish;
    end
endmodule

仿真结果

RTL实现

可以看到RTL实现与真值表达式实现结构相同。

综合结果为

全加器由两个3输入1输出的查找表实现

实现结果为

最终在7K325T上一个全加器由一个6输入2输出的查找表实现,所以我们可以得知一个6输入2输出的查找表刚刚好可以实现一个全加器。

还有另一种真值表达式

SUM = A\bigoplus B\bigoplus C_{i-1}

C_{i} = (A\bigoplus B)C_{i-1}+AB

verilog 代码

`timescale 1ns / 1ps
module add(
    input A,
    input B,
    input Ci1,
    output SUM,
    output Ci
);
    assign SUM = A ^ B ^ Ci1;
    assign Ci = ((A ^ B) & Ci1) | (A & B);

endmodule

RTL实现

综合

使用两个3输入1输出的查找表实现。

实现

可以看到全加器最终被实现为7K325T上的两个查找表了,资源消耗多一些并不代表设计就差,本实验只是单纯总实现与资源的角度进行分析,但是没有考虑时延,后续会单独针对时延进行分析,综合资源与时延进行分析。

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值