简介
FPGA
作为一种可编程的芯片,其结构和开发方式都与传统的 MCU
或 DSP
不同。
MCU
或 DSP
的设计,是主要进行软件程序设计,用户主要使用 C 语言完成各种控制和算法的实现,各种功能是在 CPU
的控制下按照顺序依次实现的。
FPGA
设计,实质是电路设计,是在一个可以现场编程的通用逻辑器件中去搭建各种具有一定功能的逻辑电路,各个逻辑电路间是各自独立的,能够并行执行。同时,各个功能电路之间又通过一定的控制和握手信号相互协调。
所 以,要想能够正确高效的开发和使用 FPGA
,我们必须在此之前对其有一个充分细致的认识,包括对其硬件资源结构、硬件电路设计、开发环境等。这对于第一次接触 FPGA
的读者,能够起到指路的作用。
目标
了解FPGA
的由来与特点。
阅读基础
熟悉计算机。
快速阅读
了解的部分跳过。
环境说明
windows10
参考资料
小梅哥教程
:02A\_【学习教材】FPGA系统设计与验证实战指南_V3.0
02B\_【学习教材】小梅哥FPGA逻辑设计进阶教程2020版V1.0
正点原子开拓者教程
:开拓者FPGA 开发指南V1.5
野火征途教程
:征途Pro《FPGA Verilog开发实战指南——基于Altera EP4CE10》(上下)
FPGA定义
FPGA
(Field Programmable Gate Array
,简称 FPGA
),译文:现场可编程门阵列,一种主要以数字电路为主的集成芯片。
FPGA发展历程
FPGA
于 1985 年由 Xilinx
创始人之一 Ross Freeman
发明,属于可编程逻辑器PLD
(Programmable Logic Device
)的一种。真正意义上的第一颗FPGA
芯片 XC2064
为 Xilinx
所发明,这个时间差不多比著名的摩尔定律晚 20 年左右,但 是 FPGA
一经发明,后续的发展速度之快,超出大多数人的想象。
在短短的三十多年时间里,FPGA
的角色已经由简单的逻辑粘合,发展到了现在的可编程片上系统。FPGA
的容量翻了几千几万倍,架构复杂度也提升了好几个水平。
数字集成电路发展
自20世纪60年代以来,数字集成电路经历了从SSI
(Small Scale Integrated circuit
,小规模集成电路),MSI
(Medium Scale Integrated circuit
,中规模集成电路),LSI
(Large ScaleIntegrated circuit
,大规模集成电路)到VLSI
(Very Large Scale Integrated circuit
,超大规模集成电路)的发展过程。
数字集成电路按照芯片设计方法的不同大致可以分为3类:
- 第一类是通用型中、小规模集成电路;
- 第二类是用软件组态的大规模、超大规模集成电路,如微处理器、单片机等;
- 第三类是专用集成电路
ASIC
(Application-Speciftic Integrated Circuit
)。ASIC
是一种专门为某一应用领域或用户需要而设计制造的LSI
或VLSI
电路,它可以将某些专用电路或电子系统设计在一个芯片上,构成单片集成系统。ASIC
分为全定制和半定制。
ASIC全定制
全定制ASIC
的硅片没有经过预加工,其各层掩模都是按特定电路功能专门制造的。
ASIC分为半定制
半定制ASIC
是按一定规格预先加工好的半成品芯片,然后再按照具体要求进行加工和制造,它包括门阵列、标准单元和可编程逻辑器件三种。
- 门阵列是一种预先制造好的硅阵列,内部包括基本逻辑门、触发器等,芯片中留有一定连线区,用户根据所需要的功能设计电路,确定连线方式,然后交给厂家进行最后的布线。
- 标准单元是厂家将预先配置好、经过测试、具有一定功能的逻辑块作为标准单元存在数据库中,设计者根据需要在库中选择单元构成电路,并完成电路到版图的最终设计。这两种定制
ASIC
都要由用户向生产厂家定做,设计和制造周期较长,开发费用高,因此只适用于对研发周期要求不高、批量较大的产品。 - 可编程逻辑器件是
ASIC
的一个重要分支,它是厂家作为一种通用型器件生产的半定制电路,用户可以利用软、硬件开发工具对器件进行设计和编程,使之实现所需要的逻辑功能。由于它是用户可配置的逻辑器件,使用灵活,设计周期短,费用低,而且可靠性高,承担风险小,因而很快得到普遍应用,发展非常迅速。
可编程逻辑器件PLD
在可编程逻辑器件 PLD
未发明之前,工程师们使用包含若干个逻辑门的离散逻辑芯片进行电路系统的搭建,复杂的逻辑功能实现起来较为困难。
可编程逻辑器件(PLD
,Programmable Logic Device
)能够完成各种数字逻辑功能。典型的PLD
由输入电路、与阵列、或阵列和输出电路组成,如图所示
而任意一个组合逻辑都可以用“与-或“表达式来描述,所以,PLD
能以乘积和的形式完成大量的组合逻辑功能。并且这些门电路的连接关系可以不断地用软件来修改。
可编程逻辑阵列 PLA
工程师们使用包含若干个逻辑门的离散逻辑芯片进行电路系统的搭建,复杂的逻辑功能实现起来较为困难。为了解决这一问题,20 世纪 70 年代,可编程逻辑阵列 PLA
(Programmable Logic Array
)问世。
PLA
中包含了一些固定数量的与门、非门,分别组成了“与平面”和“或平面”,即“与连接阵”和“或连接矩阵”,以及仅可编程一次的连接矩阵(因为编程基于的是熔丝工艺),因此可以实现一些相对复杂的与、或多项表达式的逻辑功能,PLA
内部结构如图下所示。
可编程只读存储器 PROM
与 PLA
同时问世的还有 可编程只读存储器PROM
( Programmable Read-Only Memory
),PROM
内部结构如下图所示。
与 PLA
相同,PROM
内部包含“与连接矩阵”和“或连接矩阵”,但是与门的连接矩阵是硬件固定的,只有或门的连接矩阵可编程。
可编程阵列逻辑器件 PAL
若只有与门的连接矩阵可编程,而或门的连接矩阵是硬件固定的,那么这种芯片叫做可编程阵列逻辑器件 PAL
(Programmable Array Logic
),根据输出电路工作模式的不同,PAL
可分为几类,有三态输出、寄存器输出、互补输出,但 PAL
仍使用熔丝工艺,只可编程一次。PAL
结构图如图 所示。
通用阵列逻辑器件 GAL
在 PAL
的基础上,又发展出了通用阵列逻辑器件 GAL
( Generic Array Logic
),相比于 PAL
有两点改进:
一是采用了电可擦除的 CMOS
工艺,可多次编译,增强了器件的可重配置性和灵活性;
二是采用了可编程的输出逻辑宏单元 OLMC
(Output Logic Macro Cell
),通过编程 OLMC
可将 GAL
的输出设置成为不同状态,仅用一个型号的 GAL
就可以实现所有 PAL
器件输出电路的工作模式,增强了器件的通用性。GAL
结构图如图所示。
可编程逻辑器件 CPLD
早期的可编程逻辑器件主要由上述四种类型的芯片组成,即 PROM
、PLA
、PAL
和GAL
。它们的共同特点是可以实现速度特性较好的逻辑功能,但由于其结构过于简单所以只能实现规模较小的数字电路。
CPLD
是由GAL
发展起来的,其主体结构仍是与或阵列,自20世纪90年代初Lattice
公司开发出具有在系统可编程功能(ISP
)的CPLD
以来,CPLD
发展迅速。具有ISP
功能的CPLD
器件由于具有同FPGA器件相似的集成度和易用性,在速度上还有一定的优势,使其在可编程逻辑器件技术的竞争中与FPGA并驾齐驱,成为两支领导可编程器件技术发展的力量之一。
复杂可编程逻辑器件 CPLD
(Complex Programmable Logic Device
)可以看成是 PLA
器件结构的延续,一个 CPLD
器件也可以看作若干个 PLA
和一个可编程连接矩阵的集合。CPLD
内部结构图如图所示。
现场可编程门阵列FPGA
FPGA
是一种高密度的可编程逻辑器件,自从Xilinx
公司1985年推出第一片FPGA
以来,FPGA
的集成密度和性能提高很快,其集成密度高达千万门/片以上。由于FPGA
器件集成度高、方便易用、开发和上市周期短,在数字设计和电子生产中得到迅速普及和应用,并一度在高密度的可编程逻辑器件领域中独占鳌头。
FPGA
和 CPLD
并称为高密度可编程逻辑器件,但它们有着本质的区别。
FPGA
芯片的内部架构并没有沿用类似PLA
的结构,而是采用了逻辑单元阵列LCA
(Logic Cell Array
)这样一个概念,改变以往PLD
器件大量使用与门、非门的思想,大量使用查找表和寄存器。- 除此之外,在资源类型、速度等方面
FPGA
和CPLD
也存在差异。
FPGA
的类型从内部实现机理来讲,可以分为几类,分别是:基于 SRAM
技术、基于反熔丝技术、基于 EEPROM/FLASH
技术。
就电路结构来讲,FPGA
可编程是指三个方面的可编程:可编程逻辑块、可编程 I/O、可编程布线资源。
可编程逻辑块是 FPGA
可编程的核心,我们上面提到的三种技术也是针对可编程逻辑块的技术。FPGA
结构图如图所示。
这样的CPLD/FPGA
实际上就是一个子系统部件。这种芯片受到世界范围内电子工程设计人员的广泛关注和普遍欢迎。经过了十几年的发展,许多公司都开发出了多种可编程逻辑器件。比较典型的就是Xilinx
和Altera
公司的CPLD/FPGA
系列器件,它们开发较早,占用了较大的PLD
市场。
FPGA和CPLD的比较
CPLD
与FPGA
对照情况如下。
结构
FPGA
多为查找表加寄存器结构,大多数使用SRAM
工艺,也包含Flash
、Anti-Fuse
等工艺。
CPLD
多为乘积项结构,使用Flash
、EEPROM
工艺。
集成度
FPGA
可以达到比CPLD
更高的集成度,同时也具有更复杂的布线结构和逻辑实现。
适合类型
CPLD
组合逻辑的功能很强,一个宏单元就可以分解成十几个甚至30多个组合逻辑输入。
FPGA
的一个查找表LUT
只能处理4输入的组合逻辑。
因此,CPLD
更适合完成各种算法和组合逻辑,而FPGA
更适合于完成时序逻辑。换句话说,CPLD
更适合于触发器有限而乘积项丰富的结构,而FPGA
更适合于触发器丰富的结构。
功率消耗
一般情况下,CPLD
功耗要比FPGA
大,且集成度越高越明显。
布线资源
FPGA
具有丰富的分布式布线资源、布线灵活,但是时序难以预测,一般需要时序约束、时序仿真来验证时序性能。
CPLD
由于逻辑块互连是集总式的,相对布线资源有限。
编程方式
目前的CPLD
主要是基于EEPROM
或FLASH
存储器编程,编程次数达1万次。
- 其优点是在系统断电后,编程信息不丢失。
CPLD
又可分为在编程器上编程和在系统编程(ISP
)两种。ISP
器件的优点是不需要编程器,编程、调试和维护都很方便。
FPGA
大部分是基于SRAM
编程,
- 缺点是编程数据信息在系统断电时丢失,每次上电时,需从器件的外部存储器或计算机中将编程数据写人
SRAM
中。 - 优点是可进行任意次数的编程,并可在工作中快速编程,实现板级和系统级的动态配置,因此可称为在线重配置(
ICR
:In CircuitReconfigurable
)的PLD
或可重配置硬件(RHP
:Recontfigurable Hardware Product
)。
FPGA和单片机的比较
- 首先,它们在硬件架构上不同,单片机无论是
MCU
还是MPU
都是基于控制器和算术逻辑单元进行工作的,而FPGA
是基于查找表的硬件电路进行工作的,这一点正同于单片机用的是软件设计语言而FPGA
用的是硬件描述语言一样; - 其次,
FPGA
在芯片容量、组合逻辑、工作速度、设计灵活上远优于单片机; - 最后,在代码的设计思想上也不一样,单片机使用的是串行的设计思想,而
FPGA
则使用的是并行的设计思想。
总结
主要介绍了FPGA
的发展历程。
其它
最近更新
小有收获
记得三连哦
点赞
收藏⭐︎
评论