凡亿专栏 | Xilinx大神都懂的数字运算单元—DSP48E1
Xilinx大神都懂的数字运算单元—DSP48E1


FPGADSP资源是宝贵的且有限,我们在计算大位宽的指数、复数乘法、累加、累乘等运算时都会用到DSP资源,如果我们不了解底层的DSP特性,很多设计可能都无法进行。逻辑综合往往是不可控的,为了能够充分利用DSP资源,我们需要对DSP48E1有所了解。

1.DSP48E1介绍

       DSP48E17系列的最小计算单元,DSP资源,支持许多独立的功能,其基本功能如下所示

824570fac493178dbc0a4f3d6e28b6.png

DSP48E1简易模型

包括:

              •  带有D寄存器的25位预加法器

              •  25*18二进制乘法

              •  48位累加

              •  三输入加法

       其他的一些功能还包括桶形移位、宽总线多路复用、幅度比较器、按位逻辑功能和宽计数器等。

       每个DSP48E1都有一个双输入乘法器,接着是3个数据通路的多路复用器和一个三输入的(加法器/减法器/累加器)

cada7ce14ab3e34e10644e070ebbb3.png

DSP48E1内部详细资源

一种典型的使用是AB输入相乘后与C输入相加或减;当不使用第一级的乘法器的时候,两组48位输入可以实现按位操作的逻辑功能。

       AB的数据输入可以选择直接输入或者寄存一级、两级输入,如下所示

3760b3e44f0ba1372b220717cf7356.png

DSP48E1输入分层视图

其他的数据和控制输入可是选择寄存一级输入,这样的输入选择有助于构建多种类型,高流水化的DSP应用。

2. DSP48E1使用

       (1)DSP原语使用的每个端口及位宽如下所示:

21220ed7b91f8554a20c3109b5bd5f.png

       表示的数据通道,运算数据的输入。

       寄存器配置通道,我们可以通过配置这些寄存器,实现不同的功能,比     如加法、减法、乘累加,累减等。

       数据输入寄存器使能通道,在数据输入的时候可以选择寄存一级或者两     (两级仅限AB)

       配置寄存器使能通道。

       复位信号,寄存器的复位端口。

       表示的是级联通道,其中CIN表示级联的输入,COUT表示级联   的输出。

       模式检测输出,模式检测用于检测P总线是否与指定的模式或者模式的     补码完全匹配,如果加法器的输出与设置的模式匹配,则PATTERNDETECT     (PD)将变高,如果与设置的补码匹配,则PATTERNBDETECT(PBD)将变高,其    使用逻辑如下

7a114daf8c4b0825ca9cbff3da316f.png

模式检测逻辑

OVERFLOWUNDERFLOW是与模式检测一起使用时的溢出指示标志。

cf5f1a54788efb09a26ff14dfbbb84.png

(2)DSP的使用主要通过三个寄存器来进行控制和改变相应的运算。  

              •INMODE 控制预加器,ABD寄存器的输入;(5bit)

              •OPMODE 控制XYZ选择器的输入;(7bit)

              •ALUMODE逻辑控制选择单元;(4bit)

       我们通过构建一个乘累加器来介绍DSP的使用以及寄存器的配置。

       实现的乘累加完成如下功能,即SUM = SUM + A * B ;SUM也就是DSP中的P输出。

       明确了运算表达式,然后我们需要对三个寄存器进行设置:

       乘法器的两个输入分别为AB,我们选择A端口和B的数据相乘的时候,只使用A[24:0]位参与运算,具体介绍可以见Xinlinx文档ug479(P30),这里我们把数据通过第二个寄存器输出到乘法器,INMODE设置为5’b00000

4a869efd5025645ca86a26464467e3.png

       多路复用器需要指明参与ALU运算模块的数据,根据运算功能,我们选择乘法器的输出和P输出作为信号的输入,OPMODE设置为7’b010_0001

2867c2bf9796de4640dfd485aa7719.png

       在最后的运算中我们选择加法运算。ALUMODE设置为4’b0000。即P=Z+X+Y+CIN其中Z=PX=MY=0CIN=0M=A*B。所以P=P+A*B

5173e1f3e08af2ded518ec382d14b3.png

(3)相应的配置设置好之后,例化DSP48E1的原语,原语的调用可以见Xinlinx文档ug768(P120),然后建立Vivado工程,测试如下

a4c28f41cd08bf1cd8231097325447.png

通过仿真得到了正确的乘累加结果

b53ce98bfc79b1595f7c15395fe47b.png

需要注意的是:在计算乘法时,M寄存器必须是打开的,多路复用器Z的输入通过P寄存器,因此输出至少滞后2个时钟周期,这里通过A2B2寄存器输入,故延迟了4个时钟周期输出结果。

8e7e26989925e04558f27931d8c17c.png

3. DSP48E1注意事项

       使用有符号数进行数据的处理。

       尽量使用流水进行数字信号的处理。

       •当数字的处理位宽较小时,尽量使用逻辑进行数据处理

       •级联使用DSP的时候请尽量使用专用布线资源。

       •合理的去复用DSP资源。

       •DSP不使用的时候,通过USE_MULT将乘法器关闭以降低功耗。




-MYMINIEYE2015-编辑 |GUOGUO|用温暖和感动为你讲述MYMINIEYE开发板故事|投稿邮箱 |mill@myminieye.com




声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表凡亿课堂立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。
相关阅读
进入分区查看更多精彩内容>
精彩评论

暂无评论