都设计使用硬件描述语言(HDL),如VHDL或Verilog。但ASIC相比于FPGA开发上,代码风格更为随意,因为FPGA是先有电路,后有代码,ASIC是先有代码后面有专门的人员进行布局布线,而且是专用的布局布线软件工具。可编程性:FPGA可重构电路,完全由用户通过软件进行配置和编程,从而完成某种特定的功能,且可以反复擦写;ASIC永久电路,ASIC需要较长的开发周期,风险较大,一旦有问题,成片全部作废。功耗:在相同工艺条件下,FPGA要大于ASIC。FPGA,尤其是基于占用大量硅面积的、每个单元六个晶体管的静态存储器(SRAM)的查找表(LUT)和配置元件技术的FPGA,其功耗要比对等的ASIC大得多。ASIC的功耗可以非常精确地控制和优化(低功耗设计)。速度:FPGA内部是基于通用的结构,根据RTL设计选择内部布局布线,FPGA结构上的通用性必然导致冗余。ASIC是根据设计需求,最优化cell逻辑资源,没有结构上的限制,并且做到最优布局走线,降低走线延迟和CELL延时。相同的工艺和设计,在FPGA上的速度应该比ASIC跑得慢。频率:ASIC主频时钟是远高于FPGA系统主频时钟,一个很重要的原因也是有专门布局布线,另一个原因是ASIC使用组合逻辑相对较多。模拟:FPGA不可能进行模拟设计,ASIC在专用于模拟收发器的射频(RF)核心上,可以不包含许多专用的模拟收发器。应用:FPGA 的可配置性更适合科研、军工等应用,而 ASIC 的高性能和低成本则适合消费电子领域(包括移动终端)原型设计:FPGA优先用于原型设计和验证设计或概念。ASIC除非经过绝对验证,否则不建议使用ASIC对设计进行原型设计。一旦硅被贴上胶带,几乎什么也无法修复设计缺陷。FPGA验证是进行ASIC设计的重要环节,完成FPGA验证可以说就完成了ASIC整套流程的50~80%。设计流程:FPGA设计人员一般不需要关心后端设计,ASIC设计人员需要关心从RTL到重置树、时钟树、物理布局和布线、工艺节点、制造约束(DFM)、测试约束(DFT)等所有事情,通常每一个领域都由不同的专业人员处理。成本:ASIC开发成本高于FPGA,随着使用数量增加,FPGA成本上升幅度高于ASIC,下图是Xilinx公司制作的成本比较:面积:定制化的电路设计和工艺使用ASIC面积小于FPGA。
FPGA和ASIC区别很多。ASIC的逻辑通常远远大于FPGA的,门数上有数量级的差别,运行时钟也远远高于FPGA。而且,ASIC只有一次机会,FPGA因为可以编程,所以coding的灵活性相对提高。仅仅从RTL设计上来说:
(1)ASIC更趋于保守,对逻辑的任何改动都要三思,并且要做备选的选择,以防改错。RTL的任何修改几乎都是增量修改,即便以前的逻辑错了,也不会删掉,而是多做一个分支。
(2)ASIC对coding style的要求更高。所有模块的coding风格要求一致,这样有利于后端以及后续的check。
(3)ASIC设计对时钟和复位更加重视。尤其是时钟,对ASIC的设计极其关键,复位对BIST测试又很关键。ASIC在这方面都需要采用库来进行设计。ASIC通常不会用counter分频,这样会导致时钟不干净,除非是很低频的时钟。ASIC对于跨时钟域的信号处理也谨慎很多。对于clock的关闭和打开也需要严格检查。
(4)ASIC要考虑SCAN测试和BIST的问题,所以设计的时候还需要为SRAM做BIST插入,需要为SCAN预留接口,虽然大部分都是工具干的,但是经常RTL作者也要手动做一些顶层工作,比如SCAN时钟的来源等逻辑。
(5)FPGA多用现成IP,需要考虑资源的均衡,不能把某一资源撑爆了,而且FPGA存在资源浪费问题。ASIC很少考虑这种问题,ASIC考虑的永远是性能和功耗,在逻辑选择上除了SRAM,CLK和复位相关,都是手写的,逻辑基本没有浪费,也更加紧凑。
(6)ASIC时序预见性更好,可调整度高,所以可以写很大的逻辑。
FPGA 和ASIC开发流程的区别:
第一步,首先是要实现功能,方式一般采用HDL描述,如verilog,VHDL。当然对于小规模电路也可以采用电路图输入的方式。
第二步,得保证电路功能的正确性,也叫验证,可以通过软件仿真,硬件仿真等方式实现。软件仿真一般比较直观,方便调试,因为每一时刻的状态都可以看到,这好比调试软件程序。硬件仿真一般就是指FPGA验证,就是把电路用FPGA实现,然后去跑,这个的好处就是速度很快,譬如一个视频解码核,解一帧图像出来,软件仿真就算用最好的服务器,也得跑上多少秒,但是在FPGA中实现的话,基本就是多少 毫秒了。这对于一个需要大规模验证的电路来说,是必不可少的。
前面两步对于数字IP来说,ASIC和FPGA基本一致,除非一些实现技巧的差别。
第三步,在你描述的电路正确性得到确保之后,你就要实现它,就是要把你写的那些代码变成实实在在的电路,如寄存器还是 与非门,这个过程就叫综合。由于电路规模日益复杂,一般最基本的电路就被做成了cell,如寄存器, 与非门,就不会再细化到用三极管怎么去搭的问题了。这一步对于FPGA和ASIC来说就是最小的那个单元不一样。FPGA是做好的电路,一般顾及通用性和效能,基本电路单元就做得比较大,如LUT,就是由寄存器和 与非门构成,你可能只用了其中一个与门,但是还会占用这么一个单元。对于ASIC来说,两输入的与非门,就是一个简单的门电路,甚至为了区分 驱动能力和时序特性差异,还分了好几个等级,有的面积小,有的 驱动能力强。总的来说这一步就是工具把你的描述变成基于库的电路描述。
第四步,你得到基于库的电路描述之后,就要考虑这些单元怎么摆放的问题,这叫布局布线。FPGA的话连线资源有限,所以需要不断地调整,在保证时序要求的情况下,把你的电路映射到其固定的资源分布图中间。ASIC的话一般是根据周边电路需求,时序要求,把你的电路放到芯片的某个位置。在摆好之后还得考虑连线是否能通,各级延时是否能满足电路的建立和保持时间要求等等。
第五步,输出。FPGA就是输出一个配置文件,告诉 FPGA芯片该怎么样去配置其电路,使其实现预期功能。该文件可以在FPGA上电之后再由PC下载进去,也可以保存在Flash里,电路上电之后自动配置。ASIC就是输出一个版图文件,告诉代工厂该怎么去腐蚀硅片,该怎么连金属等等。
当然在这过程中间会有各种各样的辅助步骤。总的来说都是为了确保你设计的电路正确及正确实现你的电路。
至芯科技12年不忘初心、再度起航11月12日北京中心FPGA工程师就业班开课、线上线下多维教学、欢迎咨询!
FPGA与CPU、GPU、ASIC的区别,FPGA在云计算中的应用方案
欢迎加入至芯科技FPGA微信学习交流群,这里有一群优秀的FPGA工程师、学生、老师、这里FPGA技术交流学习氛围浓厚、相互分享、相互帮助、叫上小伙伴一起加入吧!