Artix-7 50T FPGA试用笔记(二)/DSP48E1

前段时间一直在帮本科生做电赛,需要用到FPGA笔者作为学长责无旁贷去帮忙,耽误了更新,抱歉。为了表现笔者的诚意,今天拿出干货——DSP48E1的使用,全程高能不要眨眼。

安富利的陈博士出的试用题(1):使用DS48E1的SIMD功能实现四路并行12位加法”,要求数据从不同的DSP48端口进去。

评分标准:
1)使用Vivado 仿真通过
2)使用7A50T板子,使用Vivado硬件实现且记录波形,或者,使用Matlab sysgen硬件仿真,或者其他硬件实现方式且有硬件结果

软件环境:
VIVADO 2015.2
System Generator 2015.2
MATLAB 2014b
WINDOWS 7-64bit

1.原理分析
我们先看下DSP48E1到底是个什么样的东西,知己知彼。

图1  DSP48E1结构框图

图1 DSP48E1结构框图

乍一看很复杂,不过想想DSP本质无非就是乘加,端口多只是说明功能多而已。若要实现陈博士的题目,我们只取一瓢饮。
重点介绍以下端口:
A[29:0] :A寄存器输入;
ACIN[29:0] :A寄存器输入,从其它DSP48E1模块输入过来,实现级联;
B[17:0],BCIN[17:0],C[47:0],PCIN[47:0]同上,不作赘述;
OPMODE[6:0] :控制X,Y,Z的输出,如本文中实现X=A:B;Y=C;Z=0;
ALUMODE[3:0] :控制X,Y,Z如何运算,如本文中实现X+Y+Z;
P[47:0] :运算结果输出端口;
CARRYOUT[3:0] :运算输出进位标志位。

接下来,我们打开System Generator中的DSP48E1模块。

Xilinx Blockset -> DSP ->DSP48E1

图2 DSP48E1 IN System Generator

图2 DSP48E1 IN System Generator

这里的carryin,carryinsel是作输入进位控制的,与我们无关置0即可。

双击该模块打开属性配置:图3

我们不需要从别的模块级联输入,所以在Input Configuration直接选Direct from a port。

在DSP48E1 Data-path Configuration看到了我们今天的主角——SIMD。

图3   DSP48E1 Basic tab

图3 DSP48E1 Basic tab

图4  四路12位SIMD模式加法器

图4 四路12位SIMD模式加法器

X,Y,Z都是48bits数据,将他们从高位到低位划分为4路12bits数据进行加减,从上图可以看出CARRYOUT[3:0]对应每路进位标志。

值得注意的是,UG479_7Series DSP48E1 24页提到:

When either TWO24 or FOUR12 mode is selected, the multiplier must not be used, and USE_MULT must be set to NONE.

当使用2路24bits或4路12bits模式时,应该禁用乘法器。这就是图X勾选Do not use multiplier的原因。为什么会这样,请参考数据手册,有详细解释。

2.实验仿真

图5 System Generator 仿真搭建

图5 System Generator 仿真搭建

仿真结果如图6所示:

图6 New Input 仿真结果

图6 New Input 仿真结果

同时附上这两次输入的硬件仿真波形图:

图7  硬件仿真结果

图7  硬件仿真结果

图7 硬件仿真结果

从上图中可以看出,从输入到输出需要2个CLK的延时,符合手册中的描述。

结语:
DSP48E1是Xilinx 7系列FPGA的专用DSP模块,运算速度可以达到600M/s以上,极大得提高FPGA在视频图像处理中的处理速度。
最后,笔者遇到了个小问题很费解。如图7所示:这种方式控制DSP48E1模块就会报错。

图7

图7

笔者联系邮箱:xp_peng2016@163.com

版权声明:原创作品,允许转载,转载时务必以超链接形式标明文章原始出处、作者信息和本声明,否则追究法律责任。