DSP

Virtex-6中的BRAM(Block RAM)模块、DSP 模块XtremeDSP

2019-07-13 11:14发布

BRAM(Block RAM)模块Virtex-6中嵌入BRAM,大大拓展了FPGA的应用范围和应用的灵活性。BRAM可被配置为单端口RAM、双端口RAM、内容地址存储器(CAM)以及FIFO等常用存储结构。Virtex-6中的BRAM是双端口RAM,每个BRAM存储36Kbit数据,支持写和读同步操作,两个端口对称且完全独立,共享存储的数据,可以改变每个端口的位宽和深度。36Kbit可配置成64K×1(和相邻36Kbit BRAM级联)、32K×1、16K×2、8K×4、4K×9、2K×18、1K×36或512×72的简单双口RAM;每个18Kbit的BRAM也可配置成16K×1、8K×2、4K×4、2K×9、1K×18或512×36的简单双口RAM。存储器内容可在配置比特流时设置。BRAM在写操作过程中,它的输出数据可以编程设置,或者是保持输出数据不变,或者反映正在写入的新数据,或者是正在被覆盖的旧数据。一、 双端口RAM和单端口RAM全双口36Kb BRAM有36Kb的存储空间和两个独立的访问口:A口和B口。类似地,每个18Kbit RAM包含一个18Kbit存储空间和2个全独立的访问口:A口和B口。结构是全对称的,数据可以写入其中的一个口或者两个,也可以从一个或者两个口读出。写操作是同步的,每个口有自己单独的地址、数据输入、数据输出、时钟、时钟允许和写允许信号。读操作也是同步的,并需要一个时钟边沿。需要注意的是,当两个端口同时对同一个地址进行操作的时候,由于双端口RAM内部没有专门的监控逻辑,因此需要用户自己控制两个时钟,以避免冲突。两个端口同时对同一个地址的写操作虽然不会损坏该物理空间,但可能导致数据错误。双端口RAM和单端口RAM的原语如表5-10所示,可在HDL代码中直接例化。
单端口RAM原语
表5-10 单端口RAM原语
二、 FIFOVirtex-6的BRAM中的专用逻辑让用户能够轻松地实现同步或异步FIFO。这样就不必为计数器、比较器或状态标记的生成使用其他CLB逻辑。Virtex-6中,FIFO 可配置成18Kbit 和36Kbit 存储空间,对于18Kbit 的FIFO,支持4K ×4、2K×9、1K×18 和512×36;对于36Kbit 的FIFO,支持8K×4、4K×9、2K×18、1K×36 和512×72。三、 ECC 内置纠错当使用Virtex-6 中的RAMB36E1(SPP 模式)或者36Kbit FIFO(FIFO36E1)时,可以使能其中的ECC 纠错功能。ECC 占用72 位宽,其中64 位数据,8 位汉明码,它可以产生汉明位并纠正输出的数据错误,但不会纠正存储器内容。另外,它还可以输出错误位置的地址。在写操作过程生成八个保护位(ECCPARITY),与64 位数据一起存到存储器中。这些ECCPARITY 位在每次读操作过程中用来纠正任意单位元错误或检测(但不纠正)任意双位元错误。在读操作过程中,72 位数据从存储器读出并馈入ECC 解码器。ECC 解码器生成两个输出状态(SBITERR 和DBITERR),用来指示三种可能的读操作结果:无错误、已纠正单位元错误、检测到双位元错误等。在标准ECC 模式下,读操作不纠正存储器阵列中的错误,仅仅将已经纠正的数据送到DO。为了改善FMAX,可以将由DO_REG 属性控制的可选寄存器用于数据输出(DO)、SBITERR 和DBITERR。Virtex-6 中的ECC 还增加了一个新的功能,能回读当前数据输出对应的存储地址,支持修复错位的数据位或者将该地址设置成无效。Virtex-6 BRAM 模块的详细资料请参考《Virtex-6 BRAM 用户手册》。点击打开链接
DSP 模块XtremeDSP为了适应越来越复杂的DSP运算,Virtex-6中嵌入了功能更强大的DSP48E1 SLICE,简化的DSP48E1模块如图5-16所示。
简化的DSP48E1模块
图5-16 简化的DSP48E1模块
DSP48E1兼容Virtex-5的DSP48E,而且在两方面有所增强。带D寄存器的25位预加器,增加A通道的能力。在切换乘法(A*B)和加法(A:B)操作时,INMODE控制支持平衡流水线。图5-16为简化的DSP48E1模块框图,从图中可以看出,算术部分包含一个25位预加器、一个25×18二进制补码乘法器、3个48位的多路复用器,跟随一个48位符号可扩展的加法器/减法器/累加器或者2输入逻辑单元。如果使用了2输入逻辑单元,则此乘法器不能再被使用。DSP48E1的数据和控制输入连接到算术和逻辑部分。A和B输入通道上有两级流水线寄存器;D和AD(AD为预加器内的中间寄存器)输入通道上有一级流水线寄存器。其他数据和控制输入通道也有一级流水线寄存器。最高操作频率可达600MHz。大部分情况下,加法器/减法器/逻辑单元的输出是其输入的函数。输入由MUX、进位选择逻辑和乘法器阵列驱动。对应公式如下所示。Adder/Sub输出= (Z ± (X + Y + CIN))或(-Z + (X + Y + CIN) –1)
DSP48E1的内部结构如图5-17所示,主要由以下几部分组成。
DSP48E1内部结构图
图5-17 DSP48E1内部结构图
一、 输入端口(1) 输入端口A、B、C和D。每个DSP48 SLICE有4个输入数据口A、B、C和D,A口30位宽,B口18位宽,C口48位宽,D口25位宽。A口、D口和预加器的逻辑如图5-18所示;B口逻辑如图5-19所示。A口的25位和B口18位数据是25位×18位乘法器输入。每个DSP48E1能完成乘加、乘减等操作。A口和B口可以合并跳过乘法器作为多路选择器X的输入。A口和B口可以合并成48位宽的数据和48位宽的C口一起实现48位的加法/减法。DSP48E1 SLICE提供了两个级联数据输入通道(ACIN和BCIN),提供了相邻DSP48E1 SLICE之间的级联输入数据流。级联路径ACIN为30位宽,BCIN为18位宽。A、B、ACIN和BCIN数据通路上有0、1或2级流水线。数据端口寄存器可以通过延时提高时钟频率。属性AREG和BREG用于设置A口和B口的流水线级数。属性ACASCREG和BCASCREG用于设置ACOUT口和BCOUT口级联流水线级数。DSP48E1通过控制多路选择器的控制位设置数据流的通路、寄存器和级联输入。
A、D和预加器逻辑
图5-18 A、D和预加器逻辑
B口逻辑
图5-19 B口逻辑
INMODE[3:0]是DSP48E1里新增的控制位,这些位控制A和D输入寄存器与预加器的函数。48位的C口作为Y和Z多路选择器的输入,实现加法、减法、三输入加/减和逻辑函数。C输入也连到模式识别器上,实现函数取舍。(2) OPMODE、ALUMODE和CARRYINSEL端口逻辑。OPMODE、ALUMODE和CARRYINSEL端口逻辑支持输入控制信号的直通或者寄存器输入。通过多路选择器的配置位可以选择直通或通过寄存器。OPMODE、ALUMODE和CARRYINSEL端口逻辑如图5-20所示。(3) X、Y和Z多路选择器。OPMODE提供了动态改变DSP48E1功能的方法,OPMODE的控制位对应X、Y和Z多路选择器的输出。这3个多路选择器的输出成为后面加/减器的三个操作数。
OPMODE、ALUMODE和CARRYINSEL端口逻辑
图5-20 OPMODE、ALUMODE和CARRYINSEL端口逻辑
(4) ALUMODE输入。4位ALUMODE控制第二级加/减/逻辑单元的行为,如表5-11所示。
ALUMODE控制的DSP操作配置表
表5-11 ALUMODE控制的DSP操作配置表
(5) 进位输入逻辑。Virtex-6器件中进位输入逻辑是3位CARRYINSEL信号的函数。输入逻辑见图5-21。所有可能的进位输入在X、Y和Z多路选择器之前“会合”。
CARRYINSEL信号逻辑
图5-21 CARRYINSEL信号逻辑
二、 输出端口除ACOUT和BCOUT外的所有输出端口通过RSTP复位,CEP使能。ACOUT和BCOUT分别通过RSTA和RSTB复位。DSP48E1输出逻辑如图5-22所示。
DSP48E1输出逻辑
图5-22 DSP48E1输出逻辑
(1) 输出端口P。DSP48E1有一个48位输出端口P,这个输出口能通过PCOUT通路连接(级联)相邻的DSP48E1 SLICE。PCOUT连接到相邻DSP48E的Z多路选择器的输入口(PCIN)。该通路提供两个相邻DSP48E1的输出级联通路。(2) CARRYCASCOUT和CARRYOUT口。DSP48E1 SLICE的进位输出为4位宽,通过CARRYOUT输出到FPGA逻辑。CARRYOUT信号通过CARRYCASCOUT和相邻DSP48E1 SLICE级联。实现更大的加法、减法、累加、乘累加函数。(3) MULTSIGNOUT端口逻辑。乘法器输出的最高位通过MULTSIGNOUT口级联到下一个DSP48E1 SLICE,仅用于扩展96位的MACC。(4) PATTERNDETECT和PATTERNBDETECT端口逻辑。DSP48E1 SLICE的输出增加了一个序列检测器,用于检测P总线是否和指定序列匹配,或者是否和指定序列的取反值相匹配。(5) 上溢和下溢端口逻辑。DSP48E1 SLICE利用模式检测器检测P[N](N从1到46)是否有溢出,当有上溢或下溢发生时,DSP48E1输出OVERFLOW和UNDERFLOW信号。三、 算术功能(1) 预加器。Virtex-6 FPGA DSP模块结构上的又一改变是在A寄存器路径上增加了一个预加器,实现预加或预减等操作。(2) 乘法器。Virtex-6 FPGA DSP模块内包含一个二进制补码乘法器,如图5-23所示。二进制补码乘法器的一个输入为25位的二进制补码,另一个为18位的二进制补码,产生43位结果输出。乘法器86位输出包含两个43位部分乘积。乘法器和算法支持17位操作数右移,以对准宽乘法器的部分乘积(并行或顺序乘法)。级联通路作为Z多路选择器的输入,可以和相邻DSP48E1 SLICE的加法器/减法器相连。将输入操作数的最高位设置成0,则乘法器就能实现无符号算术。寄存器MREG是乘法器的输出可选流水线。
DSP48E1内的乘法器
图5-23 DSP48E1内的乘法器
(3) 加法器/减法器/逻辑单元。加法器/减法器/逻辑单元的输出是控制信号和输入数据的函数,加法器/减法器的输入由OPMODE和CARRYINSEL控制。ALUMODE设置加法器/减法器实现的功能。因此OPMODE、ALUMODE和CARRYINSEL信号一起设置加法器/减法器或逻辑单元实现的功能。(4) 2输入逻辑单元。通过OPMODE和ALUMODE的设置,可以在三输入加法/减法/逻辑单元的第二级实现逻辑函数。2输入逻辑单元配置如表5-12所示。
2输入逻辑单元配置
表5-12 2输入逻辑单元配置
分析DSP48E1结构后,可以理解,DSP48E1不需要使用通用可编程逻辑构造资源,可支持将多个DSP48E1逻辑片连接起来完成更宽输入的数字功能、DSP滤波器和复杂算法。这可以带来更低的功耗、更高的性能和更高的芯片资源使用效率。Xilinx工具提供了便捷的DSP48的使用工具,用户可以在HDL中例化原语,或者调用CoreGen配置所需参数,设置相应功能,工具会自动配置OPMODE及内部寄存器。点击打开链接