专用集成电路(ASIC,Application Specific Integrated Circuit):是为某种专门用途而设计的集成电路。在用量不大的情况下,具有成本高、设计和制造的周期长。(全定制)
可编程逻辑器件(PLD,Programmable Logic Device):PLD 是做为一种通用集成电路产生的,他的逻辑功能按照用户对器件编程来确定。一般的 PLD 的集成度很高,足以满足设计一般的数字系统的需要。这样就可以由设计人员自行编程而把一个数字系统“集成”在一片 PLD 上,制作成“片上系统”(SoC,System on Chip),而不必去请芯片制造厂商设计和制作专用的集成电路芯片了。
目前生产和使用的 PLD 产品主要有可编程逻辑阵列(PLA,Programmable Logic Array)、可编程阵列逻辑(PAL,Programmable Array Logic)和通用阵列逻辑(GAL,Generic Array Logic)、可擦除的可编程逻辑器件(EPLD,Erasable Programmable Logic Device)、复杂的可编程逻辑器件(CPLD,Complex Programmable Logic Device)和现场可编程门阵列(FPGA,Field Programmable Gate Array)等几种类型。其中,PLA、PAL 和 GAL 称为低密度 PLD(一般在千门以下),EPLD、CPLD 和 FPGA 称为高密度 PLD。(半定制)
PLD 最初使用的编程单元为熔丝或反熔丝(采用熔丝工艺的器件不能改写),后来改为 CMOS 工艺,于是编程单元也就变成了叠栅 MOS 管了。
PLD 编程的开发系统主要由由硬件和软件两部分组成。
一、PLA
PLD 最早的产品是 PLA,它出现于 20 世纪 70 年代的后期。如 PLA 编程之后的基本电路结构如下所示:
这里,OE' = 0。此时:
Y3 = ABCD +A'B'C'D'
Y2 = AC + BD
Y1 = A ⊕ B
Y0 = C ⊙ D
这里,介绍一下 PLD 中门电路的惯用画法:
以上为组合逻辑型 PLA,不包含触发器,只能用于设计组合逻辑电路。另外,还有包含触发器的用于设计时序逻辑电路的时序逻辑型 PLA。如下所示:
总结 PLA:虽然今天已经很少使用 PLA 了,但是之后所出现的 PLD 器件的基本原理都源于 PLA,由 PLA 发展、演化而来的。此外, PLA 作为一种电路结构形式,也仍然可以用于集成电路内部的结构设计当中。
二、PAL
PAL 器件由可编程的与逻辑阵列、固定的或逻辑阵列和输出电路三部分组成。在尚未编程之前,与逻辑阵列的所有交叉点上均有熔丝接通。编程时将有用的熔丝保留,将无用的熔丝熔断,即得到所需的电路。PAL 编程之后的基本电路结构如下所示:
这里:
三、GAL
GAL 采用了电可擦除的 CMOS(E2CMOS)工艺制作,可以用电压信号擦除并可重新编程。(以上两种无法改写,以下四种都是可擦除重写的)
GAL 的基本结构仍为与 - 或阵列,不同的是,它的输出端新增加了可编程的输出逻辑宏单元 OLMC(Output Logic Macro Cell),通过编程可以将 OLMC 设置成不同的工作状态,所以具有较强的通用性。
四、EPLD
EPLD 是从 GAL 演变而来的。EPLD 采用了 CMOS(低功耗、高噪声容限)和 UVEPROM(可靠性高、可以改写、集成度高、造价便宜)工艺制作。
五、CPLD
CPLD 是从 EPLD 演变而来的。CPLD 大多采用了 E2CMOS 工艺制作。
六、FPGA
FPGA 则独具匠心,其采用了 CMOS - SRAM 工艺制作。(其集成度可达百万门级)
FPGA 由三种可编程单元和一个用于存放编程数据的静态存储器组成。这三种可编程单元分别是输入/输出模块(IOB,Input Output Block)、可编程逻辑模块(CLB,Configurable Logic Block)和互连资源(IR,Interconnect Resource)。而它们的工作状态全部都由编程数据存储器中的数据(比特流)设定。FPGA 基本电路结构框图如下所示:
接下来,分别介绍一下:
1、IOB
每个 IOB 由输出三态缓冲器 G1、触发器、输入缓冲器 G2 和两个数据选择器 MUX1 和 MUX2 组成,而数据选择器的输入地址代码都存放在 FPGA 内部的编程数据存储器中(所以地址输入端不显示)。IOB 的电路如下所示:
2、CLB
每个 CLB 由组合逻辑电路、存储电路和一些数据选择器组成的内部控制电路组成。CLB 的电路如下所示:
3、IR
为了能将 FPGA 中数目很大的 CLB 和 IOB 连结成各种复杂的数字系统,在布线区内布置了丰富的连线资源 IR。这些连线资源可以分为金属线(Metal)、开关矩阵(SM,Switching Matrices)和可编程连接点(PIP,Programmable Interconnect Points)三类。IR 的布局状况如下所示:
布线区里的金属线分为水平通用连线、垂直通用连线、水平长线、垂直长线、全局连线和直接连线等几种。这些金属线经可编程的连接点与 CLB、IOB 和开关矩阵相连。其中的通用连线主要用于 CLB 之间的连接,长线主要用于长距离或多分支信号的传送,全局连线则用于输送一些公共信号(如公用的 RESET' 信号),直接连线主要是用于减少传输延迟时间和简化编程而不经过开关矩阵和通用连线而直接对信号接收端的开关点编程。
开关矩阵的作用如同一个可以实现多根导线转接的接线盒,通过对开关矩阵编程,可以将来自任何方向上的一根导线转接至其他方向的某一根导线上。开关矩阵在不同编程情况下的连接状态、开关矩阵和可编程连接点的布局状况如下所示:
除了 FPGA 以外的 PLD 器件,基本上都采用了与 - 或逻辑阵列加上输出逻辑单元的结构形式。而 FPGA 则采用了完全不同的电路结构形式,它由若干独立的可编程逻辑模块组成,每个逻辑单元都是可编程的,用户可以通过编程将这些模块连接成所需要的数字系统。
FPGA 的这种 CLB 阵列结构形式克服了 PAL 等 PLD 中那种固定的与-或逻辑阵列结构的局限性,在组成一些复杂的、特殊的数字系统时显得更加灵活。同时,由于加大了可编程 I/O 端的数目,也使得各引脚信号的安排更加方便和合理。
不过 FPGA 本身也存在着一些明显的缺点。首先,它的信号传输延迟时间不是确定的。在构成复杂的数字系统时一般总要将若干个 CLB 组合起来才能实现。而由于每个信号的传输途径各异,所以传输延迟时间也就不可能相等(CPLD 的传输延时时间是确定的)。这不仅会给设计工作带来麻烦,而且也限制了器件的工作速度。在 CPLD 中就不存在这个问题。
其次,由于 FPGA 中的编程数据存储器是一个静态随机存储器结构,所以断电后数据便随之丢失。因此,每次开始工作时都要重新装载编程数据,并需要配备保存编程数据的 EPROM。这些都给使用带来一些不便。
此外,FPGA 的编程数据一般是存放在 EPROM 中的,而且要读出并送到 FPGA 的 SRAM 中,因而不便于保密。而 CPLD 中设有加密编程单元,加密后可以防止编程数据被读出。
可见,FPGA 和 CPLD 各有不能取代的优点,这也正是两种器件目前都得到广泛应用的原因所在。