1.1 FPGA简史
本节从FPGA与ASIC、CPLD的区别,Altera与Xilinx的区别,Verilog与VHDL等方面对FPGA进行简要介绍。
1.1.1 FPGA与ASIC
1. FPGA
FPGA是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(Application Specific Integrated Circuit,ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。它是当今数字系统设计的主要硬件平台,主要特点是完全由用户通过软件进行配置和编程,从而完成某种特定的功能,且可反复擦写。在修改和升级时,不需要额外改变PCB电路板,只是在计算机上修改和更新程序,使硬件设计工作成为软件开发工作,缩短系统设计的周期,提高实现的灵活性并降低成本。
FPGA的特点:加电时,FPGA芯片将EPROM中的数据读入片内编程RAM中,配置完成后,FPGA进入工作状态。掉电后,FPGA恢复成白片,内部逻辑关系消失,因此,FPGA能够反复使用。
理论上,FPGA允许无限次的编程。
FPGA的编程无须专用的FPGA编程器,只需用通用的EPROM、PROM编程器即可。FPGA内部有丰富的触发器和I/O引脚,能够快速成品,不需要用户介入芯片的布局布线和工艺问题,而且可以随时改变逻辑功能,使用灵活。
2. ASIC
ASIC是应特定用户要求和特定电子系统的需要而设计、制造的集成电路。用一句话总结就是市场上买不到的芯片。苹果的A系列处理器就是典型的ASIC。
ASIC是定制的,具体分为全定制和半定制。
·全定制设计可以实现最小面积、最佳布线布局、最优功耗速度积,得到最好的电特性。全定制设计的特点是精工细作,设计要求高、成本高、周期长。
·半定制设计方法又分为基于标准单元的设计方法CBIC(Cell Based IC)和基于门阵列的设计方法。半定制主要适合开发周期短、低开发成本、投资风险小的小批量数字电路设计。
ASIC的特点:面向特定用户的需求,量身定制,执行速度较快。ASIC在批量生产时与通用集成电路相比具有体积小、功耗低、可靠性高、性能高、保密性强、成本低等优点。ASIC需要较长的开发周期,风险较大,一旦有问题,就会导致成片全部作废,所以小公司已经玩不起了。ASIC的基本结构如图1.1所示。
图1.1 ASIC基本架构
近年来人工智能受到的关注越来越多,许多公司正在积极开发能实现移动端人工智能的硬件,尤其是能够结合未来的物联网应用。移动端人工智能的实现方法有两大流派:FPGA流派和ASIC流派。FPGA流派的代表有Xilinx主推的Zynq平台,而ASIC流派的代表有Movidius。下面来分析FPGA与ASIC的具体区别在哪里。
3. FPGA和ASIC的区别
(1)设计流程
图1.2所示为FPGA和ASIC设计流程。
·FPGA:完整的FPGA设计流程包括功能描述、电路设计与输入、功能仿真、综合优化、综合后仿真、实现与布局布线、时序仿真、板级仿真与验证、调试与加载配置。
·ASIC:ASIC的设计流程(数字芯片)包括功能描述、模块划分、模块编码输入、模块级仿真验证、系统集成和系统仿真验证、综合、STA(静态时序分析)、形式验证。
图1.2 FPGA和ASIC设计流程
说明
在ASIC设计过程中,往往要用FPGA进行原型验证。FPGA验证是进行ASIC设计的重要环节,其后还需要引入ASIC版本源码,插入IO PAD、DFT,进行功耗估计和其他后端流程。完成FPGA验证可以就完成了ASIC整套流程的50%~80%。
从设计成本来考虑:小批量时,FPGA占优;大批量时,ASIC占优。
FPGA本身就是一个芯片,只是我们可以通过编程的方式修改内部逻辑连接和配置实现自己想要的功能。实现ASIC就如从一张白纸开始,必须得有代码,之后综合,然后布局、布线,最后得到GDSII(一种时序提供格式)后去流片。
(2)速度
相同的工艺和设计,在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,作为高速的设计,一般都会在一个简单的组合逻辑操作之后打一拍,再做下一步的处理。
提示
delay(延迟)分为cell delay和wire delay。cell delay是指元器件内部的delay,wire delay是器件互连Pin-to-Pin的delay。
(3)体积
如果结构完全相同,那么FPGA会被ASIC远远踢飞。FPGA要规模大得多才能实现ASIC相同的功能,主频还只有几分之一。
(4)功耗
在相同工艺条件下,FPGA的功耗要大于ASIC。尤其是基于占用大量硅面积的、每个单元6个晶体管的静态存储器(SRAM)的查寻表(LUT)和配置元件技术的FPGA,其功耗要比对等的ASIC大得多。
(5)成本
FPGA贵在单片,开发工具费用和硬件损耗风险基本不存在。ASIC贵在流片的费用和开发工具。NRE(Non-Recurring Engineering,一次性工程)费用随着工艺的提高变得相当贵,除非芯片一次成功后即可量产,否则单片费用将奇贵无比!
(6)其他方面
ASIC用于大型项目,而对于需要快速投放市场且支持远程升级的小型项目,FPGA则更为适合。FPGA技术的主要优势仍是产品投放市场的时间较短。
ASIC的优势在于加电后可立即运行,就单位逻辑大小而言,封装选择更多,还可以包括某些模拟逻辑。与此相对比,FPGA加载配置进入存储器需要时间,因此不能立即工作。此外,FPGA的封装也较复杂。
FPGA内部还包括接口I/O。I/O分为普通I/O和高速I/O。高速I/O支持高速的SERDES等,用于实现XAUI、PCI-e等高速接口,这些接口动辄几Gbps。此外,种类多种多样的硬核IP也是各FPGA厂商差异化竞争的利器,例如POWERPC、ARM等硬核IP,从而构成CPU+FPGA于一体的集可编程性和可重构的处理平台。
(7)两者的定位
FPGA和ASIC产品的使用要根据产品的定位和设计需要来选择。ASIC产品适用于设计规模特别大(如CPU、DSP或多层交换芯片等)或者应用于技术非常成熟且利润率非常低的产品(如家用电器和其他消费类电器)以及大量应用的通用器件(如RAM、PHY等)。FPGA产品适用于设计规模适中、产品要求快速占领市场或产品需要灵活变动的特性设计等方面的产品,如PDH、2.5GB以下的SDH设备和大部分的接口转换芯片等。当然,具体选择哪种产品来设计还要设计者充分考虑自己的产品定位来决定。
(8)两者在互相融合
最明显的莫过于处理器中开始集成FPGA,而可编程的ASIC也开始兴起。随着SoC(系统级芯片或系统)成为主流,两者的边界也就不那么明显了。
(9)总结
总的来说,就如同GPU和CPU一样:GPU可以非常快速地处理图像,但是要处理其他的东西,GPU则有些困难。CPU能处理很多的运算,也能处理图像,只是慢而已。一旦你是冲着某个目的去的(ASIC),最快速的实现方式就可以。如果想要多方面兼顾(FPGA),就不可能在每一个方面都做到最好。在使用时,你必须权衡利弊。
1.1.2 FPGA与CPLD
CPLD(Complex Programmable Logic Device,复杂可编程逻辑器件)是从PAL和GAL器件发展出来的器件,相对而言规模大、结构复杂,属于大规模集成电路范围,是一种用户根据各自需要而自行构造逻辑功能的数字集成电路。其基本设计方法是借助集成开发软件平台,用原理图、硬件描述语言等方法生成相应的目标文件,通过下载电缆(“在系统”编程)将代码传送到目标芯片中来实现设计的数字系统。
FPGA和CPLD的区别如下:
(1)CPLD更适合完成各种算法和组合逻辑,FPGA更适合完成时序逻辑。换句话说,FPGA更适合触发器丰富的结构,而CPLD更适合触发器有限而乘积项丰富的结构。
(2)CPLD的连续式布线结构决定了它的时序延迟是均匀和可预测的,而FPGA的分段式布线结构决定了其延迟的不可预测性。
(3)在编程上,FPGA比CPLD具有更大的灵活性。CPLD通过修改具有固定内连电路的逻辑功能来编程,FPGA主要通过改变内部连线的布线来编程;FPGA可在逻辑门下编程,而CPLD是在逻辑块下编程的。
(4)FPGA的集成度比CPLD高,具有更复杂的布线结构和逻辑实现。
(5)CPLD比FPGA使用起来更方便。CPLD的编程采用E2PROM或FastFlash技术,无须外部存储器芯片,使用简单。而FPGA的编程信息需存放在外部存储器上,使用方法复杂。
(6)CPLD的速度比FPGA快,并且具有较大的时间可预测性。这是由于FPGA是门级编程,并且CLB之间采用分布式互联,而CPLD是逻辑块级编程,并且其逻辑块之间的互联是集总式的。
(7)在编程方式上,CPLD主要是基于E2PROM或FastFlash存储器编程的,编程次数可达1万次,优点是系统断电时编程信息也不丢失。CPLD又可分为在编程器上编程和在系统编程两类。FPGA大部分是基于SRAM编程的,编程信息在系统断电时丢失,每次上电时,需从器件外部将编程数据重新写入SRAM中。其优点是可以编程任意次,可在工作中快速编程,从而实现板级和系统级的动态配置。
(8)CPLD保密性好,FPGA保密性差。
(9)一般情况下,CPLD的功耗要比FPGA大,且集成度越高越明显。
随着复杂可编程逻辑器件(CPLD)密度的提高,数字器件设计人员在进行大型设计时,既灵活又容易,而且产品可以很快进入市场。许多设计人员已经感受到CPLD有容易使用、时序可预测和速度高等优点。然而,过去由于受到CPLD密度的限制,他们只好转向FPGA和ASIC。现在,设计人员可以体会到密度高达数十万门的CPLD所带来的好处。
1.1.3 Altera与Xilinx
要比较Xilinx和Altera公司的FPGA,就要清楚两个大厂FPGA的结构,由于设计不同,两家的FPGA结构、参数也各不相同,但可以统一到LUT查找表上。
1. Altera芯片
(1)逻辑阵列模块(LAB)
逻辑阵列模块的主要结构是8个适应逻辑模块(ALM),还包括一些进位链和控制逻辑等结构。每个ALM中都包含了两个可编程的寄存器、两个专用全加器、一个进位链、一个共享算术链和一个寄存器链。
(2)存储器模块(RAM)
StratixII器件具有TriMatrix存储结构,包括3种大小的嵌入式RAM块。TriMatrix存储器包括512位的M512块、4KB的M4K块和512KB的M-RAM块,每个都可以配置支持各种特性。
(3)数字信号处理模块(DSP)
DSP块结构是为实现多种最大性能和最小逻辑资源利用率的DSP功能而优化的。
(4)锁相环(PLL)
StratixII器件具有12个锁相环和48个独立系统时钟,可以作为中央时钟管理器以满足系统时序需求。
2. Xilinx芯片
Xilinx的FPGA主要由可配置逻辑块(CLB)、时钟管理模块(CMT)、存储器(RAM/FIFO)、数字信号处理模块(DSP)和一些专用模块组成。
(1)可配置逻辑块(CLB)
可配置逻辑块是Xilinx的基本逻辑单元。s7系列的每个CLB包含两个Slice,每个Slice由4个(A、B、C、D)6输入LUT和8个寄存器REG组成。
(2)时钟管理模块(CMT)
时钟管理模块用于产生高质量的时钟。以Virtex-5系列器件为例,CMT包括两个数字时钟管理单元(DCM)和一个锁相环电路(PLL)。
(3)存储器(RAM/FIFO)
现代Xilinx的FPGA都有内部的存储器块。以Virtex-5为例,内部包含若干块RAM,每一块36KB,并且RAM的大小可以灵活配置。Virtex-5内的RAM是同步的双口RAM,并且可以配置为多速率的FIFO(First In First Out,先进先出)存储器,极大地提高了设计的灵活性。
(4)数字信号处理模块(DSP)
大多数的FPGA产品都提供了DSP。
(5)一些专用模块
除了上述模块外,在现代的Xilinx的FPGA产品中还有一些专用模块,例如Rocket IO千兆位级收发器、PCI-e端点模块和三态以太网MAC模块等。
Xilinx与Altera的FPGA结构最大的不同是逻辑单元部分:Xilinx的逻辑单元基本组成为可配置逻辑模块(CLB),而Altera的为LAB,更深一层讲,CLB和LAB里面也都是由LUT、触发器等构成的。两个公司的FPGA组成各有特点,这也决定了它们的FPGA产品在功能上各有特点。
现在的Altera已经成被Intel收购,Xilinx和Intel正积极开拓通信军工以外的市场,目前已经在机器学习领域占据一席之地,无论面向服务器领域做Training(训练)的high-end(可理解为高端)芯片,还是面对终端领域(如汽车电子),IoT(Internet of Things,物联网)设备的低功耗芯片都有不错的应用前景。FPGA也跟随摩尔定律在规模上不断发展,不论是逻辑还是片内存储,现在的FPGA也不再是仅仅擅长定点运算,大量浮点DSP已经开始使用,加上原有IO方面的优势,相信可以和GPU一较高下。
最后,两家FPGA都在向异构架构发展,Xilinx主推ARM+FPGA的架构,新的UltraScale MPSOC更是配有4核A53、Mail400 GPU、cortex-R5实时处理器;Altera也出过ARM的SOC,但是现在被Intel收购了,会不会投入x86的怀抱还是未知数,目前其发展路线图并不如Xilinx那么清晰。
1.1.4 Verilog与VHDL
Verilog HDL是业界普遍采用的一种硬件描述语言,用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模过程。被建模的数字系统对象的复杂性可以介于简单的门和完整的电子数字系统之间。数字系统能够按层次描述,并可在相同描述中显式地进行时序建模。
Verilog HDL从C编程语言中继承了多种操作符和结构,其语法规则与C语言非常相似,尽管二者有着本质上的区别。考虑到绝大多数的数字设计工程师都应该熟悉C语言,因此Verilog语言的入门相比VHDL语言更为简单。
Verilog HDL语言不仅定义了语法,还对每个语法结构定义了清晰的模拟、仿真语义。因此,用这种语言编写的模型能够使用Verilog仿真器进行验证。Verilog HDL提供了扩展的建模能力,其中许多扩展最初很难理解。但是,Verilog HDL语言的核心子集非常易于学习和使用,这对大多数建模应用来说已经足够。当然,完整的硬件描述语言足以对从最复杂的芯片到完整的电子系统进行描述。
VHDL具有以下特点:
(1)功能强大,设计灵活
VHDL具有功能强大的语言结构,可以用简洁明确的源代码来描述复杂的逻辑控制。它具有多层次的设计描述功能,层层细化,最后可直接生成电路级描述。VHDL支持同步电路、异步电路和随机电路的设计,这是其他硬件描述语言所不能比拟的。VHDL还支持各种设计方法,既支持自底向上的设计,又支持自顶向下的设计;既支持模块化设计,又支持层次化设计。
(2)支持广泛,易于修改
由于VHDL已经成为IEEE标准所规范的硬件描述语言,目前大多数EDA(Electronics Design Automation,电子设计自动化)工具几乎都支持VHDL,这为VHDL的进一步推广和广泛应用奠定了基础。
(3)强大的系统硬件描述能力
VHDL具有多层次的设计描述功能,既可以描述系统级电路,又可以描述门级电路。描述既可以采用行为描述、寄存器传输描述或结构描述,也可以采用三者混合的混合级描述。另外,VHDL支持惯性延迟和传输延迟,可以准确地建立硬件电路模型。VHDL支持预定义和自定义的数据类型,给硬件描述带来较大的自由度,使设计人员能够方便地创建高层次的系统模型。
(4)独立于器件的设计,与工艺无关
设计人员用VHDL进行设计时,不需要首先考虑选择完成设计的器件,就可以集中精力进行设计的优化。当设计描述完成后,可以用多种不同的器件结构来实现其功能。
(5)很强的移植能力
VHDL是一种标准化的硬件描述语言,同一个设计描述可以被不同的工具所支持,使得设计描述的移植成为可能。
(6)易于共享和复用
VHDL采用基于库(Library)的设计方法,可以建立各种可再次利用的模块。这些模块可以预先设计或使用以前设计中的存档模块,将这些模块存放到库中,就可以在以后的设计中进行复用,使设计成果在设计人员之间进行交流和共享,减少硬件电路设计。现在,VHDL和Verilog作为IEEE的工业标准硬件描述语言,又得到众多EDA公司的支持,在电子工程领域已成为事实上的通用硬件描述语言。有专家认为,在新的世纪中,VHDL与Verilog语言将承担起大部分的数字系统设计任务。
提示
具体采用Verilog还是VHDL作为设计语言并不重要。
其实作为一个成熟的数字设计工程师,Verilog和VHDL都应该是熟悉的,最低的要求应该是能够读懂一种,熟练掌握另一种进行设计。硬件描述语言只是数字系统的设计工具,虽然掌握工具对于成功进行数字系统设计很重要,但是更为重要的是对于数字设计的基本原理和理论的学习,只有深入掌握了数字系统设计的基本原理和理论,才能设计出符合实际需求的数字系统,只有在这样的前提下,学习设计工具才是有意义的。