基于Quartus II的FPGA/CPLD设计实例精解
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.5 CPLD/FPGA的基本结构

CPLD与FPGA都是可编程逻辑器件,它们是在PAL、GAL等逻辑器件的基础之上发展起来的。与以往的PAL、GAL等相比较,FPGA/CPLD的规模比较大,它可以替代几十块甚至几千块通用IC芯片。这样的FPGA/CPLD实际上就是一个子系统部件。这种芯片受到世界范围内电子工程设计人员的广泛关注和普遍欢迎。经过了十几年的发展,许多公司都开发出多种可编程逻辑器件。比较典型的就是Xilinx公司的FPGA器件系列和Altera公司的CPLD器件系列,它们开发较早,占有较大的PLD市场。通常来说,在欧洲用Xilinx的人多,在日本和亚太地区用Altera的人多,在美国则是平分秋色。全球PLD/FPGA产品60%以上是由Altera和Xilinx提供的。可以说,Altera和Xilinx共同决定了PLD技术的发展方向。当然还有许多其他类型器件,如:Lattice、Vantis、Actel、Quicklogic、Lucent等。

尽管FPGA/CPLD和其他类型PLD的结构各有其特点和长处,但概括起来,它们是由以下三部分组成的。

● 二维的逻辑块阵列,构成了PLD器件的逻辑组成核心;

● I/O块:连接逻辑块的互连资源;

● 连线资源:由各种长度的连线线段组成,其中也有一些可编程的连接开关,它们用于逻辑块之间、逻辑块与输入/输出块之间的连接。

1.5.1 乘积项结构

采用基于乘积项(Product-Term)的PLD结构的芯片有:Altera的MAX7000,MAX3000系列(EEPROM工艺),Xilinx的XC9500系列(Flash工艺),Lattice、Cypress的大部分产品(EEPROM工艺)。

基于乘积项的PLD的内部结构(以MAX7000为例,其他型号的结构与此都非常相似)如图1-3所示。

图1-3 基于乘积项的PLD的内部结构

这种PLD可分为三块结构:宏单元(Marocell)、可编程连线(PIA)和I/O控制块。宏单元是PLD的基本结构,由它来实现基本的逻辑功能。图1-3中核心部分是多个宏单元的集合(因为宏单元较多,没有一一画出)。可编程连线负责信号传递,连接所有的宏单元。I/O控制块负责输入/输出的电气特性控制,比如可以设定集电极开路输出、摆率控制、三态输出等。图1-3中左上角的INPUT/GCLK1、INPUT/GCLKn、INPUT/OE1、INPUT/OE2是全局时钟信号、清零信号和输出使能信号,这几个信号有专用连线与PLD中每个宏单元相连,信号到每个宏单元的延时相同,并且延时最短。

宏单元的具体结构如图1-4所示。

图1-4 宏单元的结构

左侧是乘积项阵列,实际就是一个与或阵列,每一个交叉点都是一个可编程熔丝,如果导通就是实现“与”逻辑。后面的乘积项选择矩阵是一个“或”阵列。两者一起完成组合逻辑。图右侧是一个可编程D触发器,它的时钟、清零输入都可以编程选择,可以使用专用的全局清零和全局时钟,也可以使用内部逻辑(乘积项阵列)产生的时钟和清零。如果不需要触发器,也可以将此触发器旁路,信号直接输给PIA或输出到I/O脚。

下面我们以一个简单的电路为例,具体说明PLD是如何利用以上结构实现逻辑的,电路如图1-5所示。

图1-5 简单电路

假设组合逻辑的输出(AND3的输出)为f,则

PLD将以如图1-6所示的方式来实现组合逻辑f。

图1-6 电路的PLD实现方式

A、B、C、D由PLD芯片的引脚输入后进入可编程连线阵列(PIA),在内部会产生A、,B、,C、,D、8个输出。图中每一个叉表示相连(可编程熔丝导通),所以得到:f=f1+f2=(A· C· )+(B· C· )

这样组合逻辑就实现了。图1-5电路中D触发器的实现比较简单,直接利用宏单元中的可编程D触发器来实现。时钟信号CLK由I/O脚输入后进入芯片内部的全局时钟专用通道,直接连接到可编程触发器的时钟端。可编程触发器的输出与I/O脚相连,把结果输出到芯片引脚。这样PLD就完成了如图1-5所示电路的功能(以上这些步骤都是由软件自动完成的,不需要人为干预)。

图1-5的电路是一个很简单的例子,只需要一个宏单元就可以完成。但对于一个复杂的电路,一个宏单元是不能实现的,这时就需要通过并联扩展项和共享扩展项将多个宏单元相连,宏单元的输出也可以连接到可编程连线阵列,再作为另一个宏单元的输入。这样PLD就可以实现更复杂的逻辑。

这种基于乘积项的PLD基本都是由EEPROM和Flash工艺制造的,一上电就可以工作,无须其他芯片配合。

1.5.2 查找表结构

采用查找表(Look-Up-Table)的原理与结构的PLD芯片也可以称之为FPGA,如Altera的ACEX、APEX系列,Xilinx的Spartan、Virtex系列等。

查找表(Look-Up-Table)简称为LUT,LUT本质上就是一个RAM。目前FPGA中大多使用4输入的LUT,所以每一个LUT可以看成一个有4位地址线的16×1的RAM。当用户通过原理图或HDL语言描述了一个逻辑电路以后,PLD/FPGA开发软件会自动计算逻辑电路所有可能的结果,并把结果事先写入RAM。这样,每输入一个信号进行逻辑运算,就等于输入一个地址进行查表,找出地址对应的内容,然后输出即可。

表1-1是一个4输入与门逻辑电路LUT的实现方式。

表1-1 4输入与门逻辑电路LUT的实现方式

1.基于查找表(LUT)的FPGA的结构

Xilinx Spartan-II的内部结构如图1-7所示。

图1-7 Xilinx Spartan-II的内部结构

Spartan-II主要包括CLB、I/O块、RAM块和可编程连线(未表示出)。在Spartan-II中,一个CLB包括2个Slices。每个Slices包括两个LUT、两个触发器和相关逻辑,如图1-8所示。Slices可以看成是Spartan-II实现逻辑的最基本的结构。

图1-8 Xilinx Spartan-II芯片的Slices结构

Altera的FLEX/ACEX芯片的结构如图1-9所示。

图1-9 Altera FLEX/ACEX芯片的内部结构

FLEX/ACEX的结构主要包括LAB、I/O块、RAM块(未表示出)和可编程行/列连线。在FLEX/ACEX中,一个LAB包括8个逻辑单元(LE),每个LE包括一个LUT、一个触发器和相关的逻辑,如图1-10 所示。LE是FLEX/ACEX芯片实现逻辑的最基本结构(Altera其他系列,如APEX的结构与此基本相同,具体请参阅数据手册)。

图1-10 逻辑单元(LE)的内部结构

2.查找表结构的FPGA逻辑实现原理

下面以如图1-11所示的电路为例进行介绍。

图1-11 简单电路

其中,A、B、C、D由FPGA芯片的引脚输入后进入可编程连线,然后作为地址线连到LUT,LUT中已经事先写入了所有可能的逻辑结果,通过地址查找到相应的数据后输出,这样组合逻辑就实现了。时钟信号CLK由I/O脚输入后进入芯片内部的时钟专用通道,直接连接到触发器的时钟端。触发器的输出与I/O脚相连,把结果输出到芯片引脚。这样PLD就完成了如图1-11所示电路的功能(以上这些步骤都是由软件自动完成的,不需要人为干预)。

这个电路是一个很简单的例子,只需要一个LUT加上一个触发器就可以完成。对于一个LUT无法完成的电路,就需要通过进位逻辑将多个单元相连,这样FPGA就可以实现复杂的逻辑。

由于LUT主要适合SRAM工艺生产,所以目前大部分FPGA都是基于SRAM工艺的,而SRAM工艺的芯片在掉电后信息就会丢失,需要外加一片专用配置芯片,在上电的时候,由这个专用配置芯片把数据加载到FPGA中,然后FPGA就可以正常工作了。由于配置时间很短,不会影响系统正常工作。也有少数FPGA采用反熔丝或Flash工艺,对于这种FPGA,不需要外加专用的配置芯片。

应该如何选择PLD和FPGA呢?

PLD分解组合逻辑的功能很强,一个宏单元就可以分解十几个甚至二三十个组合逻辑输入。而FPGA的一个LUT只能处理4输入的组合逻辑,因此,PLD适合用于设计译码等复杂组合逻辑。但FPGA的制造工艺确定了FPGA芯片中包含的LUT和触发器的数量非常多,往往都是成千上万个,PLD一般只能做到512个逻辑单元,而且如果用芯片价格除以逻辑单元数量,FPGA的平均逻辑单元成本远远低于PLD。所以如果设计中使用到大量触发器,例如设计一个复杂的时序逻辑,那么使用FPGA就是很好的选择。