这里要求输入数据(两个加数) 的位宽至少大于48-bit,目标是充分利用DSP48的功能,实现高
速设计(时钟频率至少400MHz) 。
先来看看DSP48执行加法运算时的结构:此时乘法器之后的加法器可配置为48-bit有符号数加法
器,其中输入数据来自两部分,一部分由C端口之间提供,另一部分由A端口和B端口一起拼接
为48-bit构成。因此,DSP48执行的是C+A:B。当然,可以通过控制ALUMODE,实现C-A:B 。
我们还注意到,DSP48提供了CARRYCASOUT和CARRYCASIN端口,即级联进位输出和输入端
口,从而可以实现更大位宽的加法运算。
以96-bit有符号数加法运算为例,基于DSP48的架构如下图所示。这里使用了两个DSP48。两者
都执行C+A:B运算。其中底部的DSP48取输入数据的低48位,并将进位输出通过
CARRYCASOUT传递给顶部的DSP48,由CARRYCASIN端口进入。顶部的DSP48取输入数据的
高48位。为了保证输入数据对齐,这里底部的DSP48输入使用了一级流水寄存器,加法器输出使
用了一级流水寄存器。顶部的DSP48输入使用了两级流水寄存器。由于C端口在DSP48内部只有
一级寄存器,故在需要在外部添加一级寄存器。同时,底部DSP48输出端需要在外部添加一级寄
存器。
有了这样的电路架构,我们就可以在SysGen下使用DSP48E2快速将其搭来,如下图所示这里的核心是设定OPMODE,ALUMODE等控制字以及DSP48E2的内部流水。
OPMODE实际上是用来控制W/Z/Y/X四个数据选择器的输出,从而调整乘法器或者后续加法器的输入数据源。OPMODE具体内容如下图所示。