可编程逻辑器件(Programmable Logic Device,PLD)对于数字信号处理应用(Digital Signal Processing,DSP)是有效的,因为它们可以实现自定义的、完全并行的算法。DSP 的应用会使用大量的二进制乘法器和累加器,这是因为DSP算法本质上就是卷积运算,因此最好在专用DSP资源中实现这些算法。
在 UltraScale/UltraScale+架构的 FPGA 中有许多专用的低功耗 DSP 模块(也称为 DSP 切片),将高速与小尺寸相结合,同时保留了系统设计的灵活性。DSP 资源提高了数字信号处理之外许多应用的速度和效率,如宽动态总线移位器、存储器地址生成器、宽总线多路复用器和存储器映射的I/O寄存器。UltraScale/UltraScale+架构FPGA中的DSP切片使用DSP48E2原语定义,该切片在Xilinx工具中称为DSP或DSP48E2,其内部基本功能结构如图1.60所示。
图1.60 DSP48E2的内部基本功能结构
DSP切片功能的一些亮点包括:
(1)带有动态旁路的27×18二进制补码乘法器;
(2)节能的27位预加法器,优化对称滤波器应用,降低DSP逻辑要求;
(3)48位累加器,可以级联构建96位及更宽的累加器、加法器和计数器;
(4)单指令多数据(Single Instruction Multiple Data,SIMD)运算单元,双24位或4个12位加法/减法/累加;
(5)48 位逻辑单元,按位逻辑“与”、逻辑“或”、逻辑“非”、逻辑“与非”、逻辑“或非”、逻辑“异或”和逻辑“异或非”;
(6)模式检测器,终止计数、上溢/下溢、收敛/对称四舍五入支持,以及与逻辑单元组合时的96位宽逻辑“与”/逻辑“或非”;
(7)可选的流水线寄存器和专用总线,用于将一列中的多个DSP切片级联在一起,以实现分层/复合功能,如脉动FIR滤波器。
由于动态OPMOD和级联功能,DSP48E2切片支持顺序和级联操作。DSP切片的应用包括定点和浮点快速傅里叶(Fast Fourier Transform,FFT)变换功能、脉动 FIR 滤波器、多速率FIR滤波器、CIC滤波器和宽实数/复数乘法器/累加器。
DSP 资源在整个 UltraScale+产品组合中得到了优化和扩展,提供了一种通用的架构,可以提高实现效率、IP实现和设计迁移。在UltraScale系列之间的迁移不需要对DSP48E2切片进行任何设计修改。
具有专用互联的两个DSP48E2切片构成一个DSP瓦片,如图1.61所示。DSP瓦片堆叠在DSP48E2 列中。DSP 瓦片的高度与 5 个 CLB 相同,如图 1.62 所示,并且还与一个 36Kb 的BRAM高度相匹配。从图1.61可知,BRAM可以分成两个18Kb的BRAM。每个DSP48E2切片与18Kb BRAM水平对齐,提供资源之间的最佳连接。
DSP48E2列的每个CR中有12个瓦片高,因此每列每个CR提供24个DSP48E2切片。读者可以通过Vivado 2023.1中的Device视图查看DSP48E2列。DSP48E2切片可以跨越CR级联,直到器件的边界或基于SSI技术的3D IC中的超级逻辑区域(Super Logic Region,SLR)的边界。
在 UltraScale/UltraScale+低电压 FPGA(VCCINT=0.72V)中,跨 CR 级联可能会影响性能。一列中可级联DSP48E2的个数可以通过Tcl命令找到:
图1.61 DSP瓦片
注: 在不同的DSP列(如果PS限制了DSP级联高度)或SLR(带HBM接口的SLR与无HBM接口)中,最大值可能较小。
图1.62 UltraScale+架构FPGA中DSP48E2和CLB的关系
DSP48E2 切片由一个 27 位预加法器、27×18 乘法器,以及一个用作后加法器/减法器、累加器或逻辑单元的灵活48位ALU组成。DSP48E2切片支持许多独立的功能,这些功能包括:乘法、乘累加(MACC)、乘加、四输入加法、桶形移位、宽总线多路复用、幅度比较器、按位逻辑功能、宽逻辑“异或”、模式检测、宽计数器。
UltraScale+架构支持多个DSP48E2切片的级联,以构成更宽的数学函数、DSP滤波器和复数算术,而无需使用通用逻辑。如图1.63所示为DSP48E2 DSP切片的内部结构。
图1.63 DSP48E2 DSP切片的内部结构
从图1.63可知,DSP48E2 DSP切片的功能包括:
(1)带有D寄存器的27位预加法器,可增加A或B路径的能力。
(2)可以选择A或B作为预加法器输入,以允许更宽的乘法系数。
(3)预加法器的结果可以发送到乘法器的两个输入端口,以提供平方能力。
(4)在乘法运算(A×B)和加法运算(A+B)之间动态切换时,INMODE 控制支持平衡流水线。
(5)27×18乘法器。
(6)30 位 A 输入,其较低的 27 位提供给乘法器的 A 输入,整个 30 位的输入构成 48 位A:B并置内部总线的较高30位。
(7)级联A和B输入。
①在直接路径和级联路径之间的半独立可选择的流水线;
②独立时钟使能用于两级深度A和B寄存器。
(8)带有独立复位和时钟使能功能的独立C输入和C寄存器。
(9)CARRYCASCIN 和 CARRYCASCOUT 内部级联信号,支持两个 DSP48E2 切片中的96位累加器/加法器/减法器,并支持级联两个以上的DSP切片。
(10)MULTSIGNIN和MULTSIGNOUT内部级联信号,具有特殊的OPMODE设置,以支持96位MACC扩展。
(11)四输入加法器/加法器的SIMD模式,排除了在第一阶段使用乘法器。
①两个24位SIMD加法器/减法器/累加器,带有两个独立的CARRYOUT信号;
②四个12位SIMD加法器/减法器/累加器,带有四个独立的CARRYOUT信号。
(12)48位逻辑单元。
①按位逻辑运算,如两输入的逻辑“与”、逻辑“或”、逻辑“非”、逻辑“与非”、逻辑“或非”、逻辑“异或”和逻辑“异或非”;
②通过ALUMODE动态选择逻辑单元模式。
(13)96位宽逻辑“异或”,可从8个12位逻辑“异或”到一个96位“异或”中选择。
(14)模式检测器,支持上溢/下溢、支持收敛的四舍五入、支持终止计数检测和自动复位,自动复位的优先级高于时钟使能。
(15)级联48位P总线支持内部低功耗加法器级联,48位P总线支持12位4个或24位2个SIMD加法器级联。
(16)可选17位右移,以使能更宽的乘法器实现。
(17)动态用户控制操作模式。例如,9位OPMODE控制总线提供W、X、Y和Z多路复用器选择信号;5位INMODE控制总线为2个深度A和B寄存器、预加法器加法和减法控制以及与加法器多路选择功能的屏蔽门提供选择;4位ALUMODE控制总线选择逻辑单元功能和累加器加法-减法控制。
(18)第二级加法器进位输入。支持四舍五入;支持更宽的加法/减法;3 位 CARRYINSEL多路选择器。
(19)第二级加法器进位输出。支持更宽的加法/减法;可用于每个 SIMD 加法器(最多四个);级联CARRYCASCOUT和MULTSIGNOUT允许MACC扩展到最多96位。
(20)用于同步操作的单时钟。
(21)(可选)输入、流水线和输出/累加寄存器。
(22)(可选)寄存器,用于控制信号(OPMODE、ALUMODE和CARRYINSEL)。
(23)带有可编程极性的独立时钟使能和同步复位功能,实现更大的灵活性。
(24)内部乘法器和“异或”逻辑在未使用时可以关闭,以节省电。
从上面的图可知,DSP 切片由一个乘法器和一个累加器构成。乘法和乘累加运算都需要至少 3 个流水线寄存器才能全速运行。第一级乘法运算产生两个部分乘积,用于在第二级一起相加。当乘法器设计中只有一个或两个寄存器时,应当始终使用 M 寄存器以省电和提高性能。加法/减法以及逻辑单元运算至少需要两个流水线寄存器(输入、输出)以全速运行。DSP 切片的级联能力在实现建立在加法器级联而不是加法器树上的高速流水线滤波器方面非常有效。
多路选择器由动态控制信号控制,如OPMODE、ALUMODE和CARRYINSEL,实现了更大的灵活性。与组合乘法相比,使用寄存器和动态 opmode 的设计能够更好地利用 DSP 切片的功能。
通常,由于动态 OPMODE 和级联能力,DSP 切片支持顺序和级联操作。FFT、浮点、计算(乘、加/减、除法)、计数器和大型总线多路复用器是DSP切片的一些应用。
DSP切片的额外功能包括同步复位和时钟使能,两个A输入流水线寄存器、模式检测、逻辑单元功能、SIMD功能和MACC以及加-累加扩展到96位。DSP切片支持收敛和对称的四舍五入、计数器的终止计数检测和自动复位,以及顺序累加器的上溢/下溢检测。96 位宽的逻辑“异或”函数可以实现为8 个 12 位宽度的逻辑“异或”、4 个24 位宽度的逻辑“异或”或两个48位宽度的逻辑“异或”。
图中的 C 输入允许构成许多三输入数学函数,比如三输入加法或带有一个加法的两输入乘法。这个功能的一个子集是对乘法向零或无穷大对称取整的重要支持。C 输入与模式检测器一起也支持收敛的四舍五入。
对于多精度运算,DSP48E2切片提供了17位的右移。因此,可以对来自一个DSP48E2的部分乘积向右对齐,并与相邻 DSP48E2 切片中的下一个部分积进行相加。使用该技术,DSP48E2切片可用于构建更大的乘法器。
输入操作数、中间成绩和累加器输出的可编程流水线提高了吞吐量。48 位的内部总线(PCOUT/PCIN)允许在单列中聚合DSP切片。当跨越多列时需要CLB逻辑。
如图1.64所示,A和B输入端口与ACIN和BCIN级联端口的数据路径中可以有0、1或2个流水线级。双 B 寄存器逻辑如图 1.65 所示。通过属性设置不同的流水级。属性 AREG 和BREG用于为ALU的X多路复用器的A和B直接输入选择流水线级的数量,并且INMODE[0]可以动态地改变乘法器的流水线级的数量。属性 ACASREG 和 BCASCREG 选择 ACOUT 和BCOUT 级联数据路径中的流水线级数。由配置位控制的多路复用器选择流经路径、可选寄存器或级联输入。数据端口寄存器通常允许用户权衡增加的时钟频率(更高的性能)与数据延迟。
图1.64 两个A、D和预加法器的逻辑
图1.65 双B寄存器逻辑
从图1.63可知,每个DSP48E2都有一个48位的输出端口P,该输出可以通过PCOUT路径内部连接(级联连接)到相邻的 DSP48E2 切片。PCOUT 连接到相邻 DSP48E2 切片中的 Z多路复用器(PCIN)的输入。该路径在相邻的DSP48E2切片之间提供级联流。
DSP48E2原语的符号如图1.66所示。图中各端口的含义如表1.17所示。
图1.66 DSP48E2原语的符号
表1.17 DSP48E2原语中各端口的含义
续表
使用UltraScale+FPGA内DSP48E2切片实现8权值滑动平均(Move Average,MA)滤波器,MA滤波器可用下式表示:
根据该公式的Verilog HDL和VHDL描述如代码清单1-28和代码清单1-29所示。
代码清单1-28 使用DSP48E2实现8权值滑动平均滤波器的Verilog HDL描述例子
注: (1)读者进入本书提供的\vivado_example\dsp_verilog 资源目录中,用 Vivado 2023.1打开名字为project1.xprj的工程文件。
(2)该路径下保存着仿真测试文件,读者可以执行行为级仿真和布局布线后的时序仿真。
(3)输出结果 sum_19b_3 通过算术右移 3 位,即 sum_19b_3[18:3],相当于对最终的求和结果乘以1/8,并增加一个寄存器流水线操作,以最大限度消除“毛刺”。
代码清单1-29 使用DSP48E2实现8权值滑动平均滤波器的VHDL描述例子
注: (1)读者进入本书提供的\vivado_example\dsp_vhdl资源目录中,用Vivado 2023.1打开名字为project1.xprj的工程文件。
(2)该路径下保存着仿真测试文件,读者可以执行行为级仿真和布局布线后的时序仿真。
(3)输出结果sum_19b_3通过算术右移3位,即sum_19b_3(18 downto 3),相当于对最终的求和结果乘以1/8,并增加一个寄存器流水线操作,以最大限度消除“毛刺”。
使用Vivado 2023.1对该设计进行综合后的网表结构如图1.67所示。
图1.67 使用Vivado 2023.1对该设计进行综合后的网表结构
思考与练习1-19: 用Vivado 2023.1打开布局布线后的Device视图,查看布局布线后的结果。