回答

收藏

Xilinx与Altera FPGA比较系列之一 DSP速度(3)

#开发软件 #开发软件 6758 人阅读 | 0 人回复 | 2008-01-21

大家知道,高端的FPGA中都有为数不少的DSP块,里边主要包括一些18X18的乘法器,以及加法器等单元,相邻的DSP往往可以通过专用的连线互连,从而实现滤波器的级联设计,提高滤波器的运行速度。XilinxAlteraDSP块有所差别,XilinxDSP模块可以做18X18乘法,18X18乘累加运算,18X18乘加运算等,其中累加器可以到48位宽,厂家标称的最高速度位500MHzAlteraDSP块可以分解成为8X8, 16X16, 32X32块,可以完成乘法,乘累加,乘加等运算,厂家标称的最高速度为450MHz
? 下面的表格给出了一些综合结果。
?
1? 转置形式的FIR滤波器综合结果

FPGA PlatformFPGA TypeSpeed (MHz)Speed (MHz)FPGA TypeFPGA Platform
Stratix IIEP2S90F1020C3313 165 xc4vsx35-ff668-12Virtex 4
EP2S90F1020C4282 154 xc4vsx35-ff668-11
EP2S90F1020C5240 124 xc4vsx35-ff668-10
?
2? 直接形式的FIR滤波器综合结果

FPGA PlatformFPGA TypeSpeed (MHz)Speed (MHz)FPGA TypeFPGA Platform
Stratix IIEP2S90F1020C3195109 xc4vsx35-ff668-12Virtex 4
EP2S90F1020C4169101 xc4vsx35-ff668-11
EP2S90F1020C514188 xc4vsx35-ff668-10
?
一些简单的分析:

1.? Xilinx之所以速度比Altera慢一个原因可能是ISE综合时可能需要加一些约束才可以达到最佳状态,就这件事情我曾经咨询过Xilinx的应用工程师,她给了我一个使用Synplify综合的结果,速度明显比我使用ISE的好不少。

2.? 有关XilinxDSP Block,我还试了不少其他的模块,包括简单的乘法器等,但是都不能达到器标称的500MHz,另外,ISE不能支持随意的写法,对代码的风格有一定的要求,比如,需要写成同步reset,这样才能被综合到DSP Block当中。

? 附件是相应的VHDL代码,欢迎大家讨论。

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity NoiseFilterD is
? port(
??? aReset : in std_logic;
??? Clk??? : in std_logic;
???
??? cDin?? : in std_logic_vector(7 downto 0);
??? cDout? : out std_logic_vector(7 downto 0));
end NoiseFilterD;

architecture rtl of NoiseFilterD is

<span style="font-size: 10.5pt; font-family: 宋体">? constant kNumCoes : positive := 57;
?
? type IntegerArray is array (natural range ) of integer;
? constant kCoe : IntegerArray(kNumCoes-1 downto 0) := (
???????????????????????????????????? -5,?? 6,??? 10,?? 0,??? -16,? -11,? 16,?? 31,
???????????????????????????????????? -1,?? -48,? -34,? 45,?? 84,?? -2,?? -120, -84,
???????????????????????????????????? 105,? 193,? -4,?? -272, -194, 241,? 463,? -5,
???????????????????????????????????? -742, -618, 952,? 3092, 4095, 3092, 952,? -618,
???????????????????????????????????? -742, -5,?? 463,? 241,? -194, -272, -4,?? 193,
???????????????????????????????????? 105,? -84,? -120, -2,?? 84,?? 45,?? -34,? -48,
???????????????????????????????????? -1,?? 31,?? 16,?? -11,? -16,? 0,??? 10,?? 6,
???????????????????????????????????? -5);
???????????????????????????????????????????????
? type SignedArray is array (natural range ) of signed(7 downto 0);
? signal cDelayData : SignedArray(kNumCoes-1 downto 0);??
?
? type ProdArray is array (natural range ) of signed(20 downto 0);
? signal cProd : ProdArray(kNumCoes-1 downto 0);
?
? type SumArray is array (natural range ) of signed(22 downto 0);
? signal cSumL1 : SumArray(13 downto 0);
? signal cSumL2 : SumArray(3 downto 0);
? signal cSumL3 : SumArray(0 downto 0);
???????????????????????????????????????????????
begin??????????????????????????????????????????
?
? cDout
分享到:
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条