学习fpga应该从xilinx和altera器件的入手,这是当今世界最大的两家可编程器件供应商,当然学习fpga应该你具备一定的Verilog的基础。我们就用xilinx作为例子来讲解吧。
fpga的开发流程,首先是综合,布局布线,生成bit文件,最后下载。
综合,可以用synplify,也可以用synopsys的fpga compiler,当然也可以用ISE自带的综合工具,Mentor也提供fpga开发的工具。作为入门,synplify是一个很好的选择,第一,可以熟悉电路结构,第二,作为入门你可以在synplify的综合流程中检查自己代码的质量。以前没有用LEDA做代码QA的时候,我是经常用 synplify作为QA的工具的,当然你得对synplify的综合策略和综合报告比较熟悉才行。综合完毕之后生成EDIF文件。
作为xilinx,第三方的综合工具可以提供EDIF或者NCF文件,自带的XST综合工具输出的是NGC,与此同时,我们可能还会用到xilinx的 core,core文件主要以edn形式存在;有了这些文件我们就进入implementation阶段,这个阶段分translate,Map,PAR三大部分,translate是把综合得到网表和core的网表文件转化为NGD文件,作为Map的输入,Map是把网表文件映射到Xilinx中的基本元件中,如slice,blockram等等,最后PAR也就是place and route,最后就可以生成bit文件了。推荐的书籍《FPGA/CPLD设计工具——Xilinx ISE5.x使用详解》,该书对整个设计流程有详细的描述,还介绍了很多高级技巧,不过对于asic设计人员,除非要做FPGA验证,否则没有必要看这些东西,因为学习FPGA就是一个完整的ASIC设计流程,不像做ASIC那样设计人员还分前端后端,做FPGA涉及的将会是很多因素,包括内部结构和板级的调试等等。
学习fpga除了学习开发流程之外,另外一方面是学习其内部结构。xilinx的fpga的结构介绍如下:基本单元是LUT,由LUT组成SLICE,由 SLICE组成CLB,具体多少个LUT组成SLICE,多少个SLICE组成CLB由不同的器件类型决定,可以参考datasheet。此外,就是 Block Ram,DLL或者是DCM,还有DSP等。现在流行SOC,不少高端器件还嵌入了微处理器,有软核有硬核。学习硬件结构最好的入门书籍是孟宪元先生的书,虽然时间有点久了,不过从我看的书来看,只有他才是分析得最为彻底的。现在介绍这方面的书籍也多了,不过,有点要提醒的,用什么器件看什么器件的 datasheet,没有必要把这个东西当教科书学,查一查就可以了。
学习fpga有机会买个板子自己写点程序跑一跑,应该是一件挺不错的事情。现在很多宽带通信应用的fpga设计有Serdes接口,DDR接口之类的,不是特殊要求,自己玩,估计也用不上那么复杂的,写几个状态机或者是UART就可以。
上回我们讨论了学习逻辑电路和硬件描述语言的方法。如何买书,如何看书。这回我们讨论fpga和asic设计有什么区别。
fpga现场可编程器件,PLD方面的东西,通过verilog编译成配置文件,加载到fpga中实现特定的功能。其实fpga本身就是一个芯片,只是你可以通过编程的方式修改内部逻辑连接和配置实现自己想要的功能。
asic专用集成芯片,是针对特定应用设计的芯片。实现asic,就如从一张白纸开始,你得有代码,之后综合,之后布局,布线,得到GDSII后去流片。fpga器件也是通过这个流程过来的,不过他应该算一个通用器件,就如cpu,可以在很多情况下应用,不像mp3芯片,它就只能播放mp3,所以只能称为专用芯片。不论通用还是专用,都有差不多的流程,注意上面说的是半定制的数字集成芯片的流程。作为模拟,还有一些特殊的全定制芯片,一般都是从版图开始的。
速度:相同的工艺和设计,在fpga上的速度应该比asic跑得慢。为什么呢?因为fpga内部是基于通用的结构,也就是LUT(look up table),它可以实现加法器,组合逻辑等等,而asic,一般你加法器就是加法器,而比较器就是比较器,fpga结构上的通用性必然导致冗余;另外,作为fpga基本单元是LUT(LUT组成SLICE,SLICE组成CLB--这是xilinx的结构),为此大的设计假如一个LUT实现不了,就得用两个LUT,一个SLICE实现不了就要用CLB,不同结构处于特定的位置,信号之间的互联,导致的wire delay是不可忽略的一部分。而对于asic来说没有结构上的限制,而且对于特定的实际可以在空间上靠得很近,相对之下wire delay和cell delay都应该比fpga小。当然LUT中也有DFF,作为高速的设计一般都会在一个简单的组合逻辑操作之后打一拍,再做下一步的处理。
面积:从上面上看,fpga相对于asic来说还是大很多的。要是你知道自己的手机基带芯片是一个fpga做的,你肯定会气死。n大一个fpga,想让你放到口袋里面估计还是有困难。
功耗:也是明显的东西,fpga功耗比asic要大。
以上都是基于相同制造工艺和设计的条件下比较的。从另外一个侧面看,也就是开发速度和流程上看,fpga开发简单,asic开发流程长风险大。
fpga除了代码之外,从综合到布局布线生成配置文件都是通过软件自动产生的,当然可以有一定的约束。但是,你要知道,你只是在一个房子里面画画,这个房子就是现成的fpga。画得不满意,你搽掉,再画一个。不会对房子有多大影响-只要你不把fpga烧掉。
asic设计,你不仅要关心代码,而且你要关心时序,关心设计符合DFT的要求,关心layout,关心SI。。。。。。就相当于你什么都没有,现在房子要由你来盖,盖多大(floorplan),要如何盖,电源线如何走,水管如何设计,门开在那个方向等等的东西。一旦房子盖好了,你觉得不满意?你就得拆掉,某一个缺陷都影响这个房子。你想画画,可以,你得画得好,画不好就不能改了。因为asic不是可编程的fpga,内部结构一旦流片后就确定下来了。 bugs是asic中致命的东西!
对于费用来说,fpga贵在单片,开发工具和风险基本不存在。对于asic贵在流片的费用和开发工具,NRE费用随着工艺的提高变相当贵,除非你的芯片一次成功可以量产,否则单片费用将其贵无比!你想想留一次片50W,给你拿回来100颗样片,都是bugs。一片多少钱啊??!!
开发周期,fpga6个月,asic一年。若是一个设计人员说自己一年之内tapout了4-5个片子,估计他也只是做做综合或者后端。从设计到验证结束是一段漫长的时间,一旦验证初步完成,RTL2GDSII的过程是很快的。
转载自http://blog.csdn.net/mikiah/article/details/5777478