
Virtex DSP48简介及使用.docx
22页Virtex DSP48简介及使用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功能主要亮点归纳: u 18位*18位2进制补码乘法器,具有全精度36位结果,可符号扩展至48位 u 带有寄存式累加反馈的灵活的3输入48位加法/减法器 u 动态的用户控制操作模式(OPMODE),以便在时钟周期改变时调整DSP48的功能 u 级联18位B总线支持输入采样传输 u 级联48位P总线支持部分结果的输出传输 u 支持多精度乘法器和算法,可将17位操作数右移来对齐宽位数乘法器部分积 u 支持对称智能舍入以获取更高的计算精度 u 控制和数据信号的性能增强流水线选项,可在配置位进行设置 u 输入端口C一般情况下用于乘法-加法运算、大型3操作数加法或灵活的舍入模式 u 控制和数据寄存器具有各自的复位和时钟使能 u I/O寄存器在不增加面积成本的情况下可保证最大的时钟性能和可能的最高采样率 u 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的设置 注:其中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 .CEB(CEB), // B data clock enable input .CEC(CEC), // C data clock enable input .CECARRYIN(CECARRYIN), // CARRYIN clock enable input .CECINSUB(CECINSUB), // CINSUB clock enable input .CECTRL(CECTRL), // Clock Enable input for CTRL regsiters .CEM(CEM), // Clock Enable input for multiplier regsiters .CEP(CEP), // Clock Enable input for P regsiters .CLK(CLK), // Clock input .OPMODE(OPMODE), // 7-bit operation mode input .PCIN(PCIN), // 48-bit PCIN input .RSTA(RSTA), // Reset input for A pipeline registers .RSTB(RSTB), // Reset input for B pipeline registers .RSTC(RSTC), // Reset input for C pipeline registers .RSTCARRYIN(RSTCARRYIN), // Reset input for CARRYIN registers .RSTCTRL(RSTCTRL), // Reset input for CTRL registers .RSTM(RSTM), // Reset input for multiplier registers .RSTP(RSTP), // Reset input for P pipeline registers .SUBTRACT(SUBTRACT) // SUBTRACT input ); 要点: 第一个括号内的配置,主要是器件流水线及级联参数的设置 ① AREG,BREG的属性值可取0、1或2。
属性值规定了A和B输入通路中流水线寄存器的数量 ② CREG、MREG和PREG的属性值可取0或1属性值规定了乘法器输出端和加法器输出端的流水线寄存器数量CREG的属性用来选择C输入端的流水线寄存器 ③ 如果这些通路中没有流水线寄存器,则CARRYINREG、CARRYINSELREG、OPMODEREG和SUBTRACTREG属性值均取值为0,如果在其中通路中有一个流水线寄存器,则取值为1 ④ B_INPUT属性规定了到B端口的输入是来自于并行输入,还是来自前面Slice的级联输入 ⑤ LEGACY_MODE的属性具有两个作用第一个本质上与MREG的属性类似它规定了实际上是否“直通”乘法器,或者在乘法器的中间包含一个单独的流水线寄存器相同)MREG的。












