FPGA的特点是可实现硬件逻辑的灵活连接,元器件之间的连接关系可以修改,而普通芯片是固定的。FPGA配套的EDA是一个集成开发环境,它集编辑、语法检查、仿真、综合、布局布线、时序分析于一身。目前主流的三大FPGA厂商及其EDA开发环境见表1—3。
表1—3 主流的三大FPGA厂商及其EDA开发环境
数字IC设计和FPGA开发都需要写Verilog,综合时都要写sdc时序约束文件,因而数字IC设计人员和FPGA开发人员可以互通,但他们在工作流程和设计思路上存在一定的差异。
从研发步骤来看,数字IC的步骤更多,分工更精细。数字IC设计和验证是分开的,而FPGA的设计和验证工作通常情况下都由开发者完成。IC验证常用的工具是VCS,在服务器上工作,使用UVM验证方法学,而FPGA仿真常用ModelSim或FPGA厂商提供的EDA,在Windows系统下工作,使用普通的加激励观测输出的方式,甚至不加参考模型,通过人工识别结果的正确与错误。其他诸如语法规则检查、综合、布局布线、时序分析,数字IC都各有对应的EDA工具来完成,而FPGA一般会交给FPGA厂商提供的EDA按顺序逐项自动完成。当然,综合有时也会用Synplify等第三方工具。这些流程需要的设置选项通常也由设计开发者亲自填选。
数字IC的设计语法和FPGA的设计语法基本相同,所以很多用于芯片的模块,可以不经修改地直接在FPGA上使用,这就是FPGA可以作为验证芯片的硬件平台的原因。尽管如此,这两种硬件的设计表达方式仍然存在一些差异,主要表现为以下几点:
(1)FPGA内部集成了设计完善的PLL(锁相环)时钟网络,多数情况下,FPGA片外会加一个晶振,其内部需要的时钟信号都来自该晶振并通过PLL的分频,整个FPGA设计可以形成一个全同步的结构。只有在少数复杂设计中,FPGA片外才会带上两块乃至多块晶振,分别驱动其内部的电路,所以大多数FPGA设计,其时钟结构比较简单,容易操控,而在芯片上,通常会同时有多路异步时钟进入同一个模块,需要切换时钟使用,以便适应工作、休眠等不同应用场景。这也使芯片对功耗的控制比FPGA更灵活。FPGA无法真正关闭晶振,因而晶振的功耗无法排除,再加之其内部元器件结构的特殊性,即便FPGA再怎么使用省电设计,相对于芯片来讲,仍然是十分耗电的。
(2)FPGA与芯片在时钟结构上的不同,使在使用FPGA验证芯片功能时,芯片的时钟网络部分功能是无法被验到的,只能完全交由计算机仿真验证。
(3)FPGA的上电复位电路也是天然存在的,在许多由FPGA开发人员所写的Verilog中,甚至对触发器没有异步复位,FPGA仍能正常运行,而在数字IC设计中,每个触发器的异步复位是必须有的,否则芯片会工作在未知状态。
(4)在sdc时序约束的编写上,FPGA虽然也需要写,但要求远不及芯片严格。由于FPGA中时钟结构较为简单,在时钟约束方面就可以简化,没有很多异步时钟声明。设定时钟不确定性的语句,在Quartus中被简化为一句简单的derive_clock_uncertainty,而在芯片中需要仔细与负责时钟产生电路的模拟工程师讨论真正的uncertainty后才能实施约束。
(5)在IP的使用方面,FPGA的EDA工具自带一些免费和收费IP,开发者可以直接调用,而在芯片设计中,可以选择不同供应商的IP,可选择性比FPGA强,但获得IP后的集成过程需要开发人员花费较长的学习和熟悉时间,验证人员也需要对提供的IP进行验证,因而FPGA开发的速度一般比芯片设计快很多。
(6)对于输入输出共用的芯片引脚(inout类型引脚),在FPGA中表达很简单,可以使用下面的一句话来表达,其意思是如果out_en信号等于1,引脚 b 就输出 a 信号,否则引脚 b 就将被当作一个输入引脚。FPGA工具会自动将该语法与芯片引脚上的各控制信号相连。在芯片设计中,需要设计者手动将out_en、 a 、 b 等信号线与I/O器件相连。
assign b = out_en ? a : 1'bz
从硬件结构分析,数字芯片中的元器件都是真实元器件。例如,芯片设计中的与门,在电路中就对应一个真正的与门,而FPGA设计中的与门,却是由一个查找表(Look Up Table,LUT)实现。不仅是与门,FPGA中的其他电路也多是由LUT实现的。统一用LUT的好处就是保证了FPGA的可修改性,即一个LUT可以在不同的设计中用作不同的功能,但同时也增加了单个门电路的面积、功耗,并降低了处理速度。同一个功能,在芯片中实现比在FPGA中实现,其面积、功耗要小得多,同时速度也更快,因此,FPGA存在的主要价值是它的可修改性、易实现性,这是普通芯片做不到的。一个好的想法,使用FPGA实现,比从头开始研发一款芯片,周期短得多。当然,如果最终做成了芯片,则单片的成本会比FPGA有显著下降,但如果算上人力成本、时间成本、购买EDA、流片、封测的成本,则不一定划算。究竟是使用FPGA方案还是使用芯片方案,要看该产品的市场需求量。过去,我国芯片设计厂家尚为数不多的时代,很多做产品的厂商获得功能复杂、速度要求高的产品开发任务时,自然而然地会选择FPGA实现,最典型的是视频采集和处理领域,而当前,随着国内芯片设计实力的提升,产品厂商可能会请芯片厂商代为设计对应的芯片,而将FPGA作为芯片发布前的应急方案,或者将FPGA作为芯片研发中的一个验证环节。在未来,FPGA仍然不会被淘汰,但主要应用场景将从产品为主转换为实验为主,其在产品中的份额将渐渐被更快、更省电、成本更低的专用的芯片所取代。