《Virtex DSP48简介及使用.docx》由会员分享,可在线阅读,更多相关《Virtex DSP48简介及使用.docx(22页珍藏版)》请在三一办公上搜索。
1、Virtex DSP48简介及使用Virtex-4 FPGA XtremeDSP 简介及简单使用 前言: 随着应用需求的增加,算法复杂度也提高了.为了处理这些新的算法,需要有高性能的信号处理引擎.典型的固定加构DSP处理器不能独立穷完成处理任务,通常还需要一个DSP协处理器,来处理不断增加的,复杂算法的高性能部分.而FPGA非常适合弥补这些性能的差距.采用革命性_XtremeDSPTM Slice ,Xilinx的Virtex4 FPGA可以为高性能的数字信号处理提供理想的解决方案. 简介: 1. XtremeDSP Slice具有最高的性能、最低的功耗和最佳的经济性;级联逻辑的简单性和有效性
2、;极低的功耗;增加成本效益灵活性;易用性。 2. 每个XtremeDSP tile都包含两个DSP48 slices 来构成一种能用粗精度DSP架构的基础。许多DSP的设计在乘法运算后要进行加法运算,这些功能在V4中都采用专用电路进行支持。 3. DSP48 Slice支持多种独立的功能,包括乘法器、乘累加器(MAC)、后接加法器的乘法器、三输入加法器、桶型移位器、宽总线多路利用器、大小比较器或宽计数器。还支持多个DSP48 Slice的连接以形成多种算术函数、DSP48滤波器以及不使用能用FPGA结构的复数算法。 4. DSP48 Slice是一个18*18位2进制补码乘法器,跟随一个48位
3、符号扩展加法器/减法器/累加器(这是其主要应用) 5. 操作数输入、中间积和累加器输出的可编程流水线操作提高了吞吐量。48位内部总线几乎可以实现DSPSlice的无限制集合。 6. 可以将一个XtremeDSP Slice的输出结果与下一个XtremeDSP Slice的输入级联而无需使用一般的结构布线。该通路为许多具有任意罐头长度的DSP滤波器功能提供了高性能和低功耗的后加法功能。对于多精度算法,该通路可支持右引线移位,故一个XtremeDSP Slice的部分积可以进行右对齐,与下一个相邻的Slice计算的部分积相加。用该技术XtremeDSP Slice可以被设置为支持任意大小的操作数。
4、 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 动态的用户控制操作模式(OP
5、MODE),以便在时钟周期改变时调整DSP48的功能 u 级联18位B总线支持输入采样传输 u 级联48位P总线支持部分结果的输出传输 u 支持多精度乘法器和算法,可将17位操作数右移来对齐宽位数乘法器部分积 u 支持对称智能舍入以获取更高的计算精度 u 控制和数据信号的性能增强流水线选项,可在配置位进行设置 u 输入端口C一般情况下用于乘法-加法运算、大型3操作数加法或灵活的舍入模式 u 控制和数据寄存器具有各自的复位和时钟使能 u I/O寄存器在不增加面积成本的情况下可保证最大的时钟性能和可能的最高采样率 u OPMODE多路复用器 下表给出了几种Virtex4器件内DSP48的数量 下图
6、表明了其器件端口图,关于具体的设置将在后面介绍 关于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位有符号数作为一个输入的。 如果将
7、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
8、 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
9、 .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) / Numb
10、er 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 inpu
11、t .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 .CECINS
12、UB(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 PCI
13、N 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 in
14、put 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输入端的流水线寄存器。 如果这些通路中没有流水线寄存器,则CARRYIN
15、REG、CARRYINSELREG、OPMODEREG和SUBTRACTREG属性值均取值为0,如果在其中通路中有一个流水线寄存器,则取值为1。 B_INPUT属性规定了到B端口的输入是来自于并行输入,还是来自前面Slice的级联输入。 LEGACY_MODE的属性具有两个作用。第一个本质上与MREG的属性类似。它规定了实际上是否“直通”乘法器,或者在乘法器的中间包含一个单独的流水线寄存器相同)。MREG的属性和LEGACY_MODE的属性出现任何不一致的设置都将被标记为软件设计规则校验错误。属性的第二个作用是告诉时序工具,在时序计算中应该使用通过组合乘法器通路的A和B端口,还是使用时序更快的
16、A:B的X多路复用器旁路通道。由于OPMODE可以动态变化,如果没有属性,时序工具就不能确定这些信息。 第二个括号内的配置,主要是信号输入输出及计算的操作类型的设置: Directio信号名称 n A I 18 The multipliers A input. This signal can also be used as the adders Most Significant Word (MSW) input. 位宽 功能 B C OPMODE SUBTRACT CARRYIN CARRYINSEL CEA CEB CEC CEM CEP CECTRL CECINSUB CECARRYIN
17、RSTA RSTB RSTC RSTM RSTP RSTCTRL RSTCARRYIN CLK BCIN PCIN BCOUT PCOUT P I I I I I I I I I I I I I I I I I I I I I I I I O O O 18 48 7 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 18 48 18 48 48 The multipliers B input. This signal can also be used as the adders Least Significant Word (LSW) input. The adder
18、s C input. Controls the input to the X, Y, and Z multiplexers in the DSP48 slices (第2页有简要设置,后面也会详述). 0 = add, 1 = subtract. The carry input to the carry select logic. Selects carry source (进位来源,后面会给出列表参数). Clock enable: 0 = hold, 1 = enable AREG. Clock enable: 0 = hold, 1 = enable BREG. Clock enable
19、: 0 = hold, 1 = enable CREG. Clock enable: 0 = hold, 1 = enable MREG. Clock enable: 0 = hold, 1 = enable PREG. Clock enable: 0 = hold, 1 = enable OPMODEREG, CARRYINSELREG. Clock enable: 0 = hold, 1 = enable SUBTRACTREG and general interconnect carry input. Clock enable: 0 = hold, 1 = enable (carry i
20、nput from internal paths). Reset: 0 = no reset, 1 = reset AREG. Reset: 0 = no reset, 1 = reset BREG. Reset: 0 = no reset, 1 = reset CREG. Reset: 0 = no reset, 1 = reset MREG. Reset: 0 = no reset, 1 = reset PREG. Reset: 0 = no reset, 1 = reset SUBTRACTREG, OPMODEREG, CARRYINSELREG. Reset: 0 = no rese
21、t, 1 = reset (carry input from general interconnect and internal paths). The DSP48 clock. The multipliers cascaded B input. This signal can also be used as the adders LSW input. Cascaded adders Z input from the previous DSP slice. The B cascade output. The P cascade output. The product output. 进位输入逻
22、辑: 进位输入逻辑结果是OPMODE控制位和CARRYINSEL的函数。其逻辑电路如下面的图。进位的多种选择性为电路设计提供了更大的操作空间。在某种意义上,X,Y和Z多路复用器功能为进位逻辑电路的进位输入进行了复制。OPMODE和CARRYINSEL都必须正确选择,以保证选择正确的进位输入。 上图给出了由2位CARRYINSEL控制所选择的四个输入,OPMODE位负责提供附加的控制。第一个输入CARRYIN(CARRYINSEL为二进制00)由通用逻辑电路来驱动。这个选项允许实现基于用户逻辑电路的进位功能。使用时可以随意地对其进行寄存,以便与MREG的流水线延迟相匹配。下一个输入(CARRYI
23、NSEL等于二进制01)由输出P或级联输出PCIN的反向MSB驱动。最终选择P或PCIN由OPMODE来确定。第三个输入(CARRYINSEL为二进制10)是A的反向MSB,用于A与B的因令白马将值的舍入,或者A17XNOR B17的反向驱动。最终选择也是由OPMODE的状态来决定。第四个输入只不过是第三个输入的寄存版本,用于乘法器输出寄存器或MREG时,对进位输入延迟加以调整。 下表给出了不同设置时的进位来源: CARRYINSELOPMODE 1:0 00 XXX XX XX Z MUX output = P or Shift(P) Z MUX output = PCIN or Shift
24、(PCIN) 10 11 10 11 X and Y MUX output = X and Y MUX output = X MUX output = A:B X MUX output = A:B A17 xnor A17 xnor A17 A17 multiplier partial products B17 multiplier partial products B17 CARRYIN General fabric carry source (registered or not) 01 01 P47 PCIN47 Rounding P or Shift(P) Rounding the ca
25、scaded PCIN or Shift(PCIN) from adjacent slice Rounding multiplier (MREG pipeline register disabled) Rounding multiplier (MREG pipeline register enabled) Rounding A:B (not pipelined) Rounding A:B (pipelined) Carry Source Comments 另外,进位逻辑支持对称舍入,在此不详述。 组合出来的各种计算情况 : Hex Binary OPMODOPMODE E 6:0 0x00 0
26、x02 0x03 0x05 0x0c 0x0e 0x0f 0x10 0x12 0x13 0x15 0x1c 0x1e 0x1f 0x20 0x22 0x23 Z Y X 000 00 00 000 00 10 000 00 11 000 01 01 000 11 00 000 11 10 000 11 11 001 00 00 001 00 10 001 00 11 001 01 01 001 11 00 001 11 10 001 11 11 010 00 00 010 00 10 010 00 11 Z 0 0 0 0 0 0 0 PCIN PCIN PCIN PCIN PCIN PCIN
27、 PCIN P P P XYZ Multiplexer Outputs and Adder/Subtracter Output Y 0 0 0 Note 1 C C C 0 0 0 Note 1 C C C 0 0 0 X 0 P A:B Adder/Subtracter Output CIN (P + CIN) (A:B + CIN) (AB+CIN) 0 P A:B 0 P A:B (C + CIN) (C + P + CIN) (A:B + C + CIN) PCIN CIN PCIN (P + CIN) PCIN (A:B + CIN) PCIN (AB+CIN) 0 P A:B 0
28、P A:B PCIN (C + CIN) PCIN (C + P + CIN) PCIN (A:B + C + CIN) PCIN P (P + CIN) P (A:B + CIN) 0x25 0x2c 0x2e 0x2f 0x30 0x32 0x33 0x35 0x3c 0x3e 0x3f 0x50 0x52 0x53 0x55 0x5c 0x5e 0x5f 0x60 0x62 0x63 0x65 0x6c 0x6e 010 01 01 010 11 00 010 11 10 010 11 11 011 00 00 011 00 10 011 00 11 011 01 01 011 11 0
29、0 011 11 10 011 11 11 P P P P C C C C C C C C C C 0 0 0 C C C 0 0 0 Note 1 0 P A:B 0 P A:B Note 1 0 P A:B 0 P A:B Note 1 C C C 0 0 0 Note 1 C C 0 P 0 P A:B 0 P A:B P (AB+CIN) P(C +CIN) P (C + P + CIN) P (A:B + C + CIN) CCIN C (P + CIN) C (A:B + CIN) C (AB+CIN) C(C +CIN) C (C + P + CIN) C (A:B + C +
30、CIN) Shift(PCIN) CIN Shift(PCIN) (P + CIN) Shift(PCIN) (A:B + CIN) Shift(PCIN) (AB+ CIN) Shift(PCIN) (C + CIN) Shift(PCIN) (C + P + CIN) Shift(PCIN) (A:B + C + CIN)(2) 101 00 00 Shift (PCIN) 101 00 10 Shift (PCIN) 101 00 11 Shift (PCIN) 101 01 01 Shift (PCIN) 101 11 00 Shift (PCIN) 101 11 10 Shift (
31、PCIN) 101 11 11 Shift (PCIN) 110 00 00 110 00 10 110 00 11 110 01 01 110 11 00 110 11 10 Shift (P) Shift (P) Shift (P) Shift (P) Shift (P) Shift (P) Shift(P) CIN Shift(P) (P + CIN) Shift(P) (A:B + CIN)(2) Shift(P) (AB+CIN) Shift(P) (C + CIN) Shift(P) (C + P + CIN) 0x6f 0x53 0x55 0x5c 0x5e 0x5f 0x60
32、0x62 0x63 0x65 0x6c 0x6e 0x6f 110 11 11 Shift (P) C 0 Note 1 C C C 0 0 0 Note 1 C C C A:B A:B Shift(P) (A:B + C + CIN) Shift(PCIN) (A:B + CIN) Shift(PCIN) (AB+ CIN) 101 00 11 Shift (PCIN) 101 01 01 Shift (PCIN) 101 11 00 Shift (PCIN) 101 11 10 Shift (PCIN) 101 11 11 Shift (PCIN) 110 00 00 110 00 10
33、110 00 11 110 01 01 110 11 00 110 11 10 110 11 11 Shift (P) Shift (P) Shift (P) Shift (P) Shift (P) Shift (P) Shift (P) 0 P A:B 0 P A:B Shift(PCIN) (C + CIN) Shift(PCIN) (C + P + CIN) Shift(PCIN) (A:B + C + CIN)(2) Shift(P) CIN Shift(P) (P + CIN) Shift(P) (A:B + CIN)(2) Shift(P) (AB+CIN) 0 P A:B Shi
34、ft(P) (C + CIN) Shift(P) (C + P + CIN) Shift(P) (A:B + C + CIN) Note 1:X、Y设置一样,均为A*B。 主要使用操作: 首先要考虑计算的位数和采用的计算式子,把思路先想好。接下来的操作就是复制Templates里关于DSP的那段语句,然后做相应修改即可。简单使用时修改时主要修改: l AREG,BREG,CREG,PREG的寄存器的个数。 l 例化名DSP48_inst修改一下。 l 接口参数连接好。如果不需要输出只需要清空相应的输出括号里的原始参数。对于输入,如果没有输入或是输入为0,则输入相应的0,如是18位的,写为18b
35、0。这里面需要注意各个接口的位数,有18位,48位,7位等。输入时要考虑接口长度,不一致时考虑用连接符号。 l 将需要使用的线路其相应的时钟使能,相应的复位信号置入复位信号。 l 修改加减法。SUBTRACT置1为减法,置0为加法。如果整个设计是固定加法或减法,要将第一个扩号内的SUBTRACTREG配置为0. l 设置OPMODE,格式如7b0010101或引入变量数据。 配置注意事项: 如果在初始化时单一使用加或减,则不能将SUBTRACTREG的属性值也设为1,应该设为0,反而是设为1后会导致不会执行初始化的运算,如初始要其执行减法 如果是拿上次的结果做累加减或累乘加的,则PREG一定要
36、配置为1。否则不能正常编译,可以理解为计算下一结果时要用上一次的结果,则必然要寄存器寄存上一次的结果。 关于PCIN这样的级联输入一定需要用级联输入。否则在编译的时候能正常编译,但是在后面的分配管脚后的后仿真和生成相应的输入到FPGA上代码时不能正常生成。 则一个简单的DSP的例化和配置完成。 另外,其还可以组建更大的乘法器。下图说明了从较小的18*18位乘法器来构成35*35位乘法器的情况。符号“0,B16:0”表示B具有一个后随17个位的前导零,从而形成了一个2进制补码正数。 其设计思路如图,具体操作不再详述。 DSP48 Tile 另外,2个DSP48 Slice、一条共用的48位C总线
37、和专用的互连线可组成一个DSP48 Tile。在一个DSP48 Column中,DSP48 Slice是垂直堆叠的。在Virtex-4器件中的DSP48 tile和比Block RAM具有各自独立的布线,这样可以使元件间可用的数据带宽实现加倍。 下图给出了其具体的布线逻辑。 更多DSP48应用: DSP48基于其特定的逻辑结构,其还有很多实用功能,下面列出其一些高级功能,但由于精力有限,对具体操作不作详述。 l FIR滤波器 l FIR滤波器 l 加法级联与加法树 而在其官方有很多关于DSP48不同设计的例子,VerilogHDL或VHDL语言的都有。笔者已经将其下载下来并附上。其中的一些模型
38、有: 单Slice、多周期、功能使用模型 Slice Single NumbeSlice Mode r 35 x 18 Multiply 35 x 35 Multiply 1 1 1 0,A16:0 B17:0 2 A34:17 B17:0 X X X X X X Multiply 17-Bit Shift Feedback Multiply Add 1 0,A16:0 0,B16:0 2 A34:17 0,B16:0 Multiply 17-Bit Shift Feedback Multiply Add 3 0,A16:0 B34:17 4 Complex Multiply 1 A34:17
39、 B34:17 Multiply-Accumulate 17-Bit Shift Feedback Multiply Add 1 ARe17:0 BRe17:0 2 AIm17:0 BIm17:0 3 ARe17:0 BIm17:0 4 AIm17:0 BRe17:0 X X X X Multiply Multiply-Accumulate Multiply Multiply-Accumulate 0x05 0x05 P16:0 0x65 0x05 P16:0 0x65 P52:17 e A B C CyclInputs Function and OPMODE6:0 Output 0x25 P
40、33:17 0x65 P69:34 0x25 P (Real) 0x05 0x25 P (Imaginary) 单Slice、35*18乘法器使用模型 单Slice、35*35乘法器使用模型 全流水线型功能使用模型 Multiple Slice Slice Mode 35 x 18 Multiply A Inputs B B17:0 B17:0 X Function and OPMODE6:0 Output 1 0,A16:0 2 A34:17 Multiply 0x05 P16:0 X 17-Bit Shifted Feedback 0x65 P52:17 Multiply Add 35 x
41、 35 Multiply 1 0,A16:0 0,B16:0 X Multiply 0x05 P16:0 2 A34:17 0,B16:0 X 17-Bit Shifted Feedback 0x65 Multiply Add 3 4 18 x 18 Complex Multiply 0,A16:0 A34:17 B34:17 B34:17 X Multiply Accumulate 0x25 P33:17 X 17-Bit Shifted Feedback 0x65 P69:34 Multiply Add 1 2 3 4 ARe17:0 AIm17:0 ARe17:0 AIm17:0 ARe
42、17:0 AIm17:0 ARe17:0 AIm17:0 ARe17:0 AIm17:0 ARe17:0 AIm17:0 ARe17:0 AIm17:0 ARe17:0 BRe17:0 BIm17:0 BIm17:0 BRe17:0 BRe17:0 BIm17:0 BIm17:0 BRe17:0 BRe17:0 BIm17:0 BIm17:0 BRe17:0 BRe17:0 BIm17:0 BIm17:0 X Multiply 0x05 X Multiply Accumulate X Multiply X Multiply Accumulate X Multiply 0x25 P (Real)
43、 0x05 0x25 P (Imaginary) 0x05 18 x 18 Complex MACC 1 2 3 4 X Multiply Accumulate X Multiply X Multiply Accumulate X Multiply 0x25 P (Real) 0x05 0x25 P (Imaginary) 0x05 35 x 18 Complex Multiply Real Part 1 2 3 4 X Multiply Accumulate X Multiply X Multiply Accumulate X Multiply 0x25 P (Real) 0x05 0x25 P (Imaginary) 0x05 35 x 18 Complex Multiply Imagin