本帖最后由 GoldSunMonkey 于 2011-7-11 20:28 编辑
昨天晚上匆匆忙忙把前段时间做的一个performance benchmark 贴出来,发现表格太大,网上上显示
比较乱。仔细想想,其实Xilinx与Altera的FPGA可以比较的地方实在很多,包括速度、占用的资源、
SOPC、存储器使用情况、固定乘法器使用情况、IO接口、高速的transceiver、信号完整性、电源等
等,可以比较的东西实在是太多了,一篇短短的**无法完全反应所有结果。因此,有了做一个比较系
列的想法,通过自己亲身编写自己的代码,对Xilinx和Altera的FPGA用相同的代码做一个中立的比较。
这样的结果也许不一定反应高手们使用的效果,但是应该能够代表绝大多数使用者的一些体会。
回想起2000年初次接触FPA的时候,对FPGA的好奇以及困惑,当时接触了第一款Xilinx的4000系列
FPGA,基本是照抄师兄的代码,小做修改而已。后来使用了Altera APEX系列,Xilinx的Virtex II,
Virtex II Pro,再到现在的使用的Stratix II, Cyclone II系列,算起来,用过的FPGA也不下十几款了。
从最初的ISE foundation 3.1i 和Quartus II 2.0到现在 ISE8.1, Quartus7.1,FPGA也发生了巨大的变
化,那就是速度越来越快,功能越来越多,面积越来越大,软件越来越好使。Xilinx和Altera两个公司这
几年都获得了飞速的发展,也说明了两者的FPGA都各自有其独到之处。自己之所以想做一个比较全面
的比较,并不是为了证明谁的好,谁的不好,主要的目的是提供一个中立的参考,使得对初次接触
FPGA的人对其有一个比较具体的了解。
最后,做一点申明,本人打算做这个系列完全是独立进行,希望提供的这些中立的比较结果对读者有些
许的帮助。做这个系列对我自己而言也是一个大挑战,希望能够一直**下去,也欢迎有兴趣的志同道
合者的加入:-)
------------------华丽的分割线-------------------------------------------------------------------------
一开始没想到这个比较会得到大家的关注,纯粹是出于自己的兴趣。
两个厂商都会宣称自己某一方面比对方好,到底是谁的更好呢?这肯定是个仁者见仁,智者见智
的问题。最近这段时间比较忙,项目到了比较关键的阶段,加上其他一些杂七
杂八的事情,很难有比较完整的时间坐下来完成报告,直到今天才基本把一些文档整理完。在整
理的过程中,越来越觉得很难比较两者之间的速度,因为相关的因素实在太多了。软件的好坏,
器件本身的延迟,设计等等对最优的速度都有着相当大的影响。做速度比较用的滤波器很难代表
其他的设计,算是抛砖引玉,希望能够和大家一起讨论FPGA的速度这个问题。
在整理过程中,发现了很多很有趣的事情,比如Stratix III和Virtex 5的速度区别等。为此,作者
做了一些简单的实验,希望能够找到合理的解释,来分析出现这些现象的原因。
编译之前的考虑
根据作者自己的一些经验,作者把常用的一些开关打开了,以便更好的优化速度。另外,
有一些选项作者拿不准是否两个软件都有相似的开关,就没有打开。
为了使得比较更加合理,作者尽可能选择门数和IO速度都比较接近的FPGA。
Xilinx采用ISE9.1 Service Pack1版本,Altera采用Quartus7.1 Service Pack1版本,
XILINX
Altera
编译结果
作者采用了采用57阶FIR滤波器, 8比特输入数据, 8比特输出数据, 13比特系数, 滤波器采用转置形式的
结构直接形式的结构,乘完之后的数据按照四输入加法的方式求和。
下面是得到的测试结果。
---------------------------------------------华丽的分割线--------------------------------------------
对Xilinx和Altera FPGA的固定乘法器(DSP)做一个比较深入的分析, 以对今后的设计提供参考.
首先, Xilinx和Altera的FPGA DSP功能基本相同, 两者基本上可以实现相近的功能. 比较小的差别是,
Xilinx的DSP模块可以在模块内做乘累加运算, 而Altera的必须借助逻辑资源实现. 另外, 两者的速度有所
区别, Xilinx V4标称最高速度为500MHz, 而Altera S2标称最高速率为450MHz. 在实际使用过程当中,
厂商的参数固然重要, 然而用户的使用对性能的影响也是非常大的. 我在Altera的S2C3上用综合工具自动
识别 *, 以及调用 IP core, 发现两者的结果一致, 对于16X16的乘法器速度是367.65MHz, 对于8X8乘法
器的速度是375.94MHz. Altera的IP core对流水线的支持相对较少, 只有2级. Xilinx综合工具似乎并没
有那么智能, 只能把 * 识别出来, 用IP core的0级流水线替代, 而不能将乘法后跟随的一级流水线自己吸
收到IP core中. 不过Xilinx的乘法器提供了18级流水线选择, 因而采用IP core例化实现的乘法器速度大
大的提升. 我做的一个结果(V4-12), 采用综合工具infer出乘法器的速度是189MHz, 而采用IP core例化
的方法实现的为260MHz和611MHz, 分别对应一级流水线和两级流水线结构.
从以上实验结果以及笔者的使用经验来看, 似乎Altera的软件的好用一些, 然而Xilinx的硬件功能更强.
-----------------------------------华丽的分割线--------------------------------------------------------
最近遇到一个时钟选择的问题,即有两个输入时钟和一个控制信号,根据控制信号输出一个时钟。如何
使得输出的时钟没有毛刺?
在Xilinx的FPGA中,可以使用BUFGMUX来实现,即使控制信号不同步,BUFGMUX也能保证输出的时
钟没有毛刺。
Altera的FPGA没有Glitch Free的Mux,用户必须自己先使用三态TRI单元,控制时钟的输出,然后再让
时钟通过一般的MUX,这样子的话,次序应该是首先把原来的时钟通过三态电路Disable掉,然后打开
另外一个三态电路,输出时钟,同时,Mux根据控制信号选择新的时钟。 |