Virtex-4 FPGA XtremeDSP 简介及简单使用
前言:
随着应用需求的增加,算法复杂度也提高了.为了处理这些新的算法,需要有高性能的信号处理引擎.典型的固定加构DSP处理器不能独立穷完成处理任务,通常还需要一个DSP协处理器,来处理不断增加的,复杂算法的高性能部分.而FPGA非常适合弥补这些性能的差距.采用革命性_XtremeDSPTM Slice ,Xilinx的Virtex4 FPGA可以为高性能的数字信号处理提供理想的解决方案.
简介:
1. XtremeDSP Slice太阳能热水器清洗机
具有最高的性能、最低的功耗和最佳的经济性;级联逻辑的简单性和有效性;极低的功耗;增加成本效益灵活性;易用性。 2. 每个XtremeDSP tile都包含两个DSP48 slices 来构成一种能用粗精度DSP架构的基础。许多DSP的设计在乘法运算后要进行加法运算,这些功能在V4中都采用专用电路进行支持。
3. DSP48 Slice支持多种独立的功能,包括乘法器、乘累加器(MAC)、后接加法器的乘法器、三输入加法器、桶型移位器、宽总线多路利用器、大小比较器或宽计数器。还支持多个DSP48 Slice的连接以形成多种算术函数、DSP48滤波器以及不使用能用FPGA结构的复数算法。 4. DSP48 Slice是一个18*18位2进制补码乘法器,跟随一个48位符号扩展加法器/减法器/累加器(这是其主要应用)
5. 操作数输入、中间积和累加器输出的可编程流水线操作提高了吞吐量。48位内部总线几乎可以实现DSPSlice的无限制集合。
6. 可以将一个XtremeDSP Slice的输出结果与下一个XtremeDSP Slice的输入级联而无需使用一般的结构布线。该通路为许多具有任意罐头长度的DSP滤波器功能提供了高性能和低功耗的后加法功能。对于多精度算法,该通路可支持右引线移位,故一个XtremeDSP Slice的部分积可以进行右对齐,与下一个相邻的Slice计算的部分积相加。用该技术XtremeDSP Slice可以被设置为支持任意大小的操作数。 Virtex-4 DSP Slice架构亮点:
四效蒸发器 每个_DSP48 Slice具有一个后接多路复用器的2输入乘法器和一个3输入加法器/减法器。乘法器接受两个18位2进制补码操作数,产生一个36位2进制补码结果。该结果数可符号扩展至48位,并且可以馈至加法/减法器。加法/减法器接受三个48位2进制补码操作数(这其中有级联数据和累加减的结果数据),产生一个48位2进制补码结果。进行级联后还可以支持更高级别的DSP功能(级联B输入总线和DSP48的级联P输出总线提供了级联能力)。主要亮点归纳:
◆ 18位*18位2进制补码乘法器,具有全精度36位结果,可符号扩展至48位
◆ 带有寄存式累加反馈的灵活的3输入48位加法/减法器
◆ 动态的用户控制操作模式(OPMODE),以便在时钟周期改变时调整DSP48的功能
◆ 级联18位B总线支持输入采样传输
◆ 级联48位P总线支持部分结果的输出传输
◆ 支持多精度乘法器和算法,可将17位操作数右移来对齐宽位数乘法器部分积
◆ 支持对称智能舍入以获取更高的计算精度
◆ 控制和数据信号的性能增强流水线选项,可在配置位进行设置
◆ 输入端口C一般情况下用于乘法-加法运算、大型3操作数加法或灵活的舍入模式
◆ 控制和数据寄存器具有各自的复位和时钟使能
◆ I/O寄存器在不增加面积成本的情况下可保证最大的时钟性能和可能的最高采样率
◆ OPMODE多路复用器
下表给出了几种Virtex4器件内DSP48的数量
下图表明了其器件端口图,关于具体的设置将在后面介绍
关于DSP48的常规算术功能:
(累)加减法
DSP48 Slice包含一个加/减法单元,可以在单个DSP Slice上实现不同的加/减逻辑组合。其格式为
Out = Z _ (X + Y +CIN)
公式中的X、Y和Z是多路复用器。可能根据OPMODE的设置来选择X、Y、Z的选择结果。CIN项是加/减法单元的进位输入。确定是加法还是减法是由SUBTRACT输入来控制的,将其设置为0则为加法,为1为减法。下表给出了OPMODE中关于X、Y、Z的设置(OPMODE设置里先后顺序是Z、Y、X)。
注:其中A:B是将A输入的18位和B的18位组合成36位作为一个36位有符号数作为一个输入的。
如果将Y设成01即A*B,则X也应该这样设置。见下面乘累加。
(累加)乘法
将X、Y均设置成01,则可实现乘法。其表达式为
Out = C ± (A × B + CIN)
其他相关参数设置和加法设置相似。
零点在线FPGA主要参数设置:
下面给出的是在Verilog编程语句中的一个例化语段格式,真正使用时要做一定修改。
DSP48 #( //各线路流水线寄存器等参数的配置
.AREG(1), // Number of pipeline registers on the A input, 0, 1 or 2
.BREG(1), // Number of pipeline registers on the B input, 0, 1 or 2
.B_INPUT("DIRECT"), // B input DIRECT from fabric or CASCADE from another DSP48
.CARRYINREG(1), // Number of pipeline registers for the CARRYIN input, 0 or 1
.CARRYINSELREG(1), // Number of pipeline registers for the CARRYINSEL, 0 or 1
.CREG(1), // Number of pipeline registers on the C input, 0 or 1
.LEGACY_MODE("MULT18X18S"), // Backward compatibility, NONE, MULT18X18 or MULT18X18S
.MREG(1), // Number of multiplier pipeline registers, 0 or 1
.OPMODEREG(1), // Number of pipeline regsiters on OPMODE input, 0 or 1
.PREG(1), // Number of pipeline registers on the P output, 0 or 1
.SUBTRACTREG(1) // Number of pipeline registers on the SUBTRACT input, 0 or 1
) DSP48_inst ( //这个是例化的名字,下面是一个例化的接口参数设置
.BCOUT(BCOUT), // 18-bit B cascade output
.P(P), // 48-bit product output
挂裤架
.PCOUT(PCOUT), // 48-bit cascade output
金属探测器隐藏 .A(A), // 18-bit A data input
.B(B), // 18-bit B data input
.BCIN(BCIN), // 18-bit B cascade input
.C(C), // 48-bit cascade input机床顶针
.CARRYIN(CARRYIN), // Carry input signal
.CARRYINSEL(CARRYINSEL), // 2-bit carry input select
.CEA(CEA), // A data clock enable input