原创 【博客大赛】DSP in FPGA:加法器

2012-8-22 09:23 4094 13 17 分类: FPGA/CPLD 文集: DSP in FPGA

专题二:加法器

        加法运算在FPGA设计中经常使用,其中常用的加法器有全加器和半加器,一个基本的N位二进制加法可由N个全加器构成,每个加法器的表达式如下:

                                               1.gif

        由上式可得进位c的逻辑相比于加法结果位s逻辑较复杂,因此设计延迟较短的进位逻辑成了关键,目前有很多进位相关技术,如串行进位、超前进位等。如图1所示为串行进位方式的加法器,图2所示为超前进位方式的加法器。

snap1.jpg

图1

         串行进位相应Verilog HDL代码:

assign c0=(a0 & b0) | ((a0 | b0) & cin);

assign c1=(a1 & b1) | ((a1 | b1) & c0);

snap2.jpg

图2

         超前进位相应Verilog HDL代码:

assign p0 <= a0 | b0;

assign g0 <= a0 & b0;

assign p1 <= a1 | b1;

assign g1 <= a1 & b1;

assign c0 <= g0 | (p0 & cin);

assign c1 <= g1 | (p1 & g0) | (p1 & p0 & cin);

        按速度和面积原则,串行进位以面积为原则,而超前进位以速度为原则。

 

        加法器几乎是每个FPGA设计中必备的,因此专门为加法器设计一个快速的进位链是很有必要的,实际上FPGA厂商也是这么做的,以Xilinx 7系列FPGA为例。如图3所示为其Slice中的进位链结构,在Xilinx 7系列FPGA使用之CLB探索中介绍过在CLB中有2个Slice,而每个Slice中有4个LUT,LUT有2个输出:O6和O5,图3中Slice中进位链为每个LUT分配了一个选择器MUX和异或门XOR构成的进位逻辑,并且4个从下到上纵向排列;CIN为下端进位输入,COUT输出给上端的进位,用于连接多个Slice间的进位,这样就保证实现位宽加大的加法器也能快速进位。

snap3.jpg

图3

         FPGA中有了专用的快速进位链,在编写代码时就无需采用如超前进位这样的方式了,可采用常规的全加器进位结构,如下代码所示为16位加法器:

module adder_test(

    input clk,

    input rst,

    input [15:0] a,

    input [15:0] b,

    input ci,

    output reg [15:0] sum,

    output reg co

    );

 

always@(posedge clk)

         if(rst)

         begin

                   co<=1'b0;

                   sum<=16'd0;

         end

         else

                   {co,sum}<=a + b + ci;

 

endmodule

         经过综合、实现后,在Xilinx FPGA Editer工具中可以查看加法器的具体布线图,如图4、5所示,由图4可得15位加法器可由4个Slice实现,每个Slice实现4个全加器,2个Slice间用一条进位链连接;而其它进位都在Slice里面,如图5所示,由一个LUT和为其分配地MUX、XOR进位结构就可实现一个全加器。

snap4.jpg

图4

snap5.jpg

图5

         通过Post-Map Static Timing分析得到Min period limit: 1.408ns (710.227MHz) (Tbcper_I(Fmax)),其中进位逻辑延时非常之小,主要的布线延迟都在I/O和逻辑之间。

         另外从图4仔细观察可以发现在蓝色Slice旁还有一个灰色的Slice未使用,此灰色Slice是与蓝色Slice同在一个CLB中的另一个Slice,为什么会有这种结构?这还是因为CLB的结构,上文中说过在一个Slice内部进位链是纵向的,而在Slice外部如图6所示,也是纵向的,同处于一个CLB中的2个横向排列的Slice并没有进位链,这样就保证了所有进位链统一的纵向性,是进位链延时达到最小。

snap6.jpg

图6

PARTNER CONTENT

文章评论4条评论)

登录后参与讨论

Hoki 2012-4-1 23:18

在程序中正常使用加法或者比较之类的操作,XST综合器就能自动综合出快速进位链

用户1660450 2012-4-1 14:57

使用进位链这种硬件资源的方法有那些呢?

Hoki 2012-3-28 13:42

文中有什么不足还望指正!

用户615011 2012-3-27 13:39

学习了,不算很合理
相关推荐阅读
Hoki 2017-01-11 17:35
LX9开发板呼吸灯实现
对LX9开发板硬件评测后,从这一节开始真正进入FPGA开发的世界。很多开发板的例程中必有跑马灯实验,老跑马也没意思,咱来把新潮的,整一个呼吸灯。 呼吸灯最初是出现在apple公司的笔记本产品中,当合上...
Hoki 2017-01-11 16:47
LX9的microblaze配置
虽然XC6SLX9芯片资源比较少,但是嵌一个microblaze还是搓搓有余的,这一节就来评测一下在XC6SLX9上microblaze的配置。 有两种方法配置microblaze,一是在ISE软件中...
Hoki 2017-01-11 16:32
zynq评测
Zynq芯片是业界第一款在FPGA中集成ARM核的芯片,由FPGA的发明者xilinx公司推出的。Zynq严格来说不能以FPGA来定义它,因为其是以处理器为中心的平台,能够在单芯片上提供软、硬件和 I...
Hoki 2017-01-11 16:19
u-boot
Zyny芯片启动加载分为3步: 1. 芯片上电启动,首先读取BootROM中的程序,初始化一些必要的外设,然后根据专用引脚电平判断该从何处启动first stage Bootloader(FSBL),...
Hoki 2017-01-11 16:09
基于zynq的交叉编译平台
Zynq芯片的最大特点是其集成了双ARM Cortex-A9处理器,因此zynq的应用基本是以这个ARM核为核心,再配合FPGA逻辑作为协处理器,几乎能实现所有较复杂的应用。并且在ARM上可以跑操作系...
Hoki 2017-01-11 15:54
u-boot image生成
这节介绍一下如何生成u-boot image文件,在SDK软件中点击Xilinx Tools→Create Boot Image工具即可生成,但是生成image文件需要首先集齐3个文件:u-boot....
EE直播间
更多
我要评论
4
13
关闭 站长推荐上一条 /3 下一条