Verilog HDL与CPLD/FPGA项目开发教程(第3版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.1.3 CPLD/FPGA的结构与原理

微课1-2

CPLD FPGA的结构与原理

1.基于乘积项(Product-Term)的PLD结构

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

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

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

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

图1-4 宏单元的具体结构

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

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

图1-5 组合逻辑

【例1-1】假设组合逻辑的输出(AND3的输出)为f,则f=(A+B)*C*(!D)=A*C*!D+B*C*!D。请用PLD实现此功能。

解:PLD实现组合逻辑f的方式如图1-6所示。

图1-6 实现组合逻辑f

A、B、C、D由PLD芯片的引脚输入后进入可编程连线阵列(PIA),在内部会产生A、、B、、C、、D、共8个输出。图中每一个叉表示相连(可编程熔丝导通),所以得到:f=f1+f2=A*C*!D+B*C*!D。这样组合逻辑就实现了。在AND3的输出电路中,D触发器的实现比较简单,直接利用宏单元中的可编程D触发器即可。时钟信号CLK由I/O脚输入后进入芯片内部的全局时钟专用通道,直接连接到可编程触发器的时钟端。可编程触发器的输出与I/O脚相连,把结果输出到芯片引脚。这样,PLD就完成了以上电路的功能(这些步骤都是由软件自动完成的,不需要人为干预)。

图1-6中的电路是一个很简单的例子,只需要一个宏单元就可以完成。但对于一个复杂的电路,一个宏单元是不能实现的,这时就需要通过并联扩展项和共享扩展项将多个宏单元相连,宏单元的输出也可以连接到可编程连线阵列,再作为另一个宏单元的输入。这样,PLD就可以实现更复杂的逻辑功能。这种基于乘积项的PLD基本都是由E2PROM和Flash工艺制造的,一上电就可以工作,无须其他芯片配合。

2.查找表(Look-Up-Table,LUT)的原理与结构

也可以将采用基于乘积项结构的PLD芯片称为FPGA,如Altera公司的ACEX、APEX系列,Xilinx公司的Spartan、Virtex系列等。

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

表1-2 一个4输入与门的例子

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

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

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

Spartan-Ⅱ主要包括CLBs、I/O块、RAM块和可编程连线(未表示出)。在Spartan-Ⅱ中,一个CLB包括两个Slice(Slice是XilinX元器件的基本逻辑单元),每个Slice包括两个LUT、两个触发器和相关逻辑。Slice可以看成是Spartan-Ⅱ实现逻辑的最基本结构。

Altera公司的FLEX/ACEX等芯片的结构如图1-8所示。Altera FLEX/ACEX芯片的内部结构如图1-9所示。

图1-8 FLEX/ACEX等芯片的结构

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

FLEX/ACEX主要包括LAB、I/O块、RAM块(未表示出)和可编程行/列连线。在FLEX/ACEX中,一个LAB包括8个逻辑单元(LE),每个LE包括一个LUT、一个触发器和相关的逻辑关系。LE是FLEX/ACEX芯片实现逻辑的最基本结构。

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

此处还是以图1-5这个电路为例来解释查找表结构的FPGA逻辑实现原理。

图1-5中,A、B、C、D由FPGA芯片的引脚输入后进入可编程连线,然后作为地址线连到LUT,LUT中已经事先写入了所有可能的逻辑结果,通过地址查找到相应的数据然后输出,这样组合逻辑就实现了。该电路中D触发器功能是直接利用LUT后面的D触发器来实现的。时钟信号CLK由I/O脚输入后进入芯片内部的时钟专用通道,直接连接到触发器的时钟端。触发器的输出与I/O脚相连,把结果输出到芯片引脚。这样,PLD就完成了图中的电路功能。

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

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