查看: 6414|回复: 0

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

[复制链接]

该用户从未签到

发表于 2008-1-21 23:27:02 | 显示全部楼层 |阅读模式
分享到:
大家知道,高端的FPGA中都有为数不少的DSP块,里边主要包括一些18X18的乘法器,以及加法器等单元,相邻的DSP往往可以通过专用的连线互连,从而实现滤波器的级联设计,提高滤波器的运行速度。XilinxAlteraDSP块有所差别,XilinxDSP模块可以做18X18乘法,18X18乘累加运算,18X18乘加运算等,其中累加器可以到48位宽,厂家标称的最高速度位500MHzAlteraDSP块可以分解成为8X8, 16X16, 32X32块,可以完成乘法,乘累加,乘加等运算,厂家标称的最高速度为450MHz
  下面的表格给出了一些综合结果。
 
转置形式的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
 
直接形式的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
回复

使用道具 举报

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

本版积分规则

关闭

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



手机版|小黑屋|与非网

GMT+8, 2024-11-9 04:48 , Processed in 0.124423 second(s), 15 queries , MemCache On.

ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

苏公网安备 32059002001037号

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.