Xilinx公司复杂的可编程逻辑器件(以下称为 CPLD)主要分为 XC9500和 Cool-Runner 两大系列。本节以 Xilinx 公司的 XC9500XL CPLD 为例,介绍 CPLD 的内部结构。
CPLD由完全可编程的与/或阵列和宏单元库构成,这是 CPLD 的基本原理。通过对CPLD内的与/或阵列重新编程,可以实现多种逻辑功能。宏单元是实现组合逻辑或时序逻辑的功能模块,同时它还提供了原变量或反变量输出,以及以不同路径反馈等额外的灵活性。
图3.8给出了XC9500 CPLD的内部结构。从图中可知,通过快速开关阵列,将CPLD内的多个功能块(Function Block, FB)和I/O块(I/O Block, I/OB)连接在一起。I/O块提供了缓冲区,用于器件的输入和输出。
图3.8 XC9500 CPLD的内部结构
如图3.9所示,每个FB提供了可编程逻辑的能力,共36个输入和18个输出。
图3.9 FB的内部结构
图3.9给出了每个FB的内部结构。从图中可知,每个FB由18个独立的宏单元构成,每个宏单元可以实现一个组合逻辑或者寄存器功能。FB也接收全局时钟,输出使能和置位/复位信号。FB产生18个输出用于驱动快速连接开关矩阵,18个输出和它们相对应的输出使能信号也可以驱动I/O块。
FB内部的逻辑使用SOP表达方式描述。36个输入所提供的信号(包括36个原变量和36个反变量)连接到可编程的逻辑“与”阵列,用于生成90个乘积项。通过乘积项分配器,可以将它们分配到每个宏单元。
每个宏单元也支持本地反馈路径,这样可以允许任意数量的FB输出来驱动它自己的逻辑“与”阵列。这些路径可用来创建计数器和状态机,状态机内所使用的状态寄存器也在相同的FB内。
图3.10给出了FB内宏单元的内部结构。通过配置文件,可以单独配置每个宏单元,这样它们可用于组合逻辑或者寄存器功能。来自逻辑“与”阵列的5个直接乘积项可用作基本的数据输入(连接到逻辑或门和逻辑异或门),通过它们可以实现组合逻辑功能,或者作为控制输入,包括时钟、置位/复位和输出使能。与每个宏单元连接的乘积项分配器用于从5个直接乘积项中选择信号。
图3.10 FB内宏单元的内部结构
宏单元内的寄存器可以配置成D触发器或T触发器,也可旁路掉它(当只实现组合逻辑功能时)。每个寄存器支持异步置位和复位操作。上电时,所有的寄存器初始化为用户定义的预加载状态。
图3.11给出了快速连接开关阵列的内部结构。快速连接开关阵列将信号连接到FB输入,所有I/O块的输出和FB的输出均可用于驱动快速开关连接阵列。通过用户编程,可以选择它们中的任何一个以相同的延迟来驱动FB。快速连接开关阵列能够将多个内部的信号连接到一个逻辑线,用于驱动目的FB。
图3.11 快速连接开关阵列的内部结构
输入/输出块(I/O块)是内部逻辑和用户I/O引脚之间的接口,如图3.12所示。每个I/O块包含输入缓冲区、输出驱动器、输出使能选择复用器和可编程的地控制。
思考与练习3-7: CPLD的基本原理是 ______。
思考与练习3-8: CPLD内的每个功能块包含______个宏单元。
思考与练习3-9: CPLD内的FB和I/OB通过______连接。
思考与练习3-10: 当把设计下载到CPLD时,采用______方式。
图3.12 I/O块的内部逻辑