2.3 可编程逻辑器件
集成电路发展的速度是惊人的,在20世纪60年代初期,开始出现了小规模的集成电路(SSI),继而开发出了中规模的集成电路(MSI)。从20世纪70年代开始,MOS工艺有了突破性进展,集成电路朝大规模集成电路(LSI)进而向超大规模集成电路(VLSI)发展。到20世纪80年代,IC-CAD技术有了飞速的发展,因而促进了专用集成电路(ASIC)的发展。到20世纪90年代,专用集成电路已和半导体存储体、微处理器芯片及数字信号处理芯片(DSP)一起成为集成电路的四大支柱产品,广泛地用于各类电子系统(包括各种各样的图像处理系统)。专用电路的设计可分为全定制和半定制两大类,全定制设计强调设计的合理性、强调优化,用以提高性能和缩小芯片面积,因此设计周期较长,设计费用较高,适用于批量较大、电路成型的应用场合。半定制设计则是预先把一些基本电路的模块设计好,用户只要根据要求,以布尔方程、逻辑图或网表作为输入,进行简单的加工就可以完成整个专用电路的设计。这种方式的设计周期短、设计费用低,特别适用于产品的开发,也可以作为全定制产品前期开发的一个步骤。半定制电路具体可分为3种:门阵列、标准单元和可编程逻辑器件。门阵列是在硅片上预先制作好大量的基本单元门电路,排列成阵列,在阵列周围配上输入、输出缓冲电路和压焊块,门阵列中大部分电路就这样制作完成,由此形成门阵列的母片。在用门阵列设计专用集成电路时,首先应根据电路本身的规模及门阵列的利用率选择合适的母片。门阵列的设计,实际上是设计布线的掩膜,利用IC-CAD软件,输入逻辑图,设计出产生连线掩膜的数据带,再通过制板,以此在母片上进行光刻、布线、封装,形成所需的专用电路。门阵列是目前最简便的ASIC结构形式,它比较适合于批量较小、要求研制周期短的产品;其主要的缺点是芯片面积利用率不高,性能不能优化。标准单元法的基本设计思想是用人工设计好的一系列成熟、优化、版图等高的单元电路,把它们存储在一个单元数据库中,根据用户的要求,把整个电路分成各种单元的连接组合,利用CAD软件调用单元库中的这些单元,进行合理的布局、布线,形成行单元结构。标准单元法不能做到预工艺,只能做到预设计,需要制作整套掩膜,进行全工艺流程,因此制作周期长,设计成本高。单元库中可包括一些大的单元电路,如RAM、ROM,甚至CPU,这样就必须建立非等高的标准单元(建立非等高的标准单元称为内建单元块法),从而设计出一些用门阵列难以设计的电路。可编程逻辑器件(PLD)是一种被封装好的通用产品,主要有FPGA和EPLD(或称为CPLD),下面分别介绍它们的一些特点和使用方法。
1.FPGA
FPGA(现场可编程门阵列)是一种功能强大的PLD, 1985年由美国Xilinx公司推出,它是利用传输门通过编程控制组成逻辑功能块,又通过编程方法使这些逻辑门进行互连。FPGA芯片的容量很大,早期的PAL、GAL芯片的I/O管脚很少,难以构成复杂的电路,而FPGA内容资源很多,I/O管脚也很多,所以可以用来设计一些大规模的电路。FPGA编程的方法是将数据写入一组编程存储器来控制开关门的电平,FPGA需要在片外附加存储器,制作工艺采用SRAM,需要初始化时间。FPGA内部电路的设计具有现场设计、现场编程、现场修改、现场验证、现场调试等优点,使小批量数字电路系统的单片化成为可能。
当前,FPGA的发展非常迅速,不仅本身性能优越,而且编程的生态环境逐渐形成,将在软件定义的系统应用中成为主角。
2.EPLD
EPLD(Erasable Programmable Logic Device,可擦写可编程逻辑器件)是在1984年E2 CMOS技术注入可编程逻辑器件(PLD)结构并诞生出门阵列逻辑器件GAL(Generic Array Logic)之后,美国Lattice公司把PLD的性能和易使用性与FPGA的高密度和高灵活等特性相结合而首先推出的。EPLD器件具有非易失性,不需要在片外附加存储器,而且速度快、设计周期短,所以应用非常广泛。目前有很多公司制造不同种类的EPLD芯片,这里以Lattice公司的EPLD器件为例来介绍EPLD器件。
Lattice公司的EPLD器件有两大类:可编程大规模集成电路pLSI(Programmable Large Scale Integration)和在线可编程大规模集成电路ispLSI(in-system Programmable Large Scale Integration)。根据可用资源和性能上的差别,每一大类又都有3个系列:1000系列、2000系列和3000系列,而每一系列又有若干种芯片,3个系列的EPLD主要技术参数如表2.3.1所示。
表2.3.1 3种大类的EPLD主要技术参数
虽然这3个系列有如上一些区别,但就其内部系统结构而言,却都是相似的。ispLSI与pLSI两者的结构类似,差别在于是否可以在线编程,ispLSI可以在线编程,即可以不用编程器设备而只用一条download电缆线,由微机进行动态编程,这对于电路的最初研制很有利。由于在线编程的需要,ispLSI芯片将要占用几个管脚并在印制电路板上附加电缆线的接头,这将损失一些资源。而pLSI芯片则需要用编程器设备编程,由于芯片管脚不同,所以常常需要配置不同管脚的适配器,其代价较高。下面以pLSI 1032为例,剖析pLSI芯片的内部结构和逻辑。
pLSI由通用逻辑块GLB、通用I/O口、专用输入口、时钟输入口、输出布线区ORP和总布线区GRP几部分组成,PLSI 1032功能块框图如图2.3.1所示。
图2.3.1 PLSI 1032功能块框图
pLSI的内部逻辑包括:
(1)巨块(Megablock, MB)。
不同类别、不同型号的pLSI芯片器件,其主要区别是构成该芯片器件的巨块数不相同。一个巨块包含有8个GLB、16个I/O口、两个专用输入口和一个用于输出使能的公共乘积项OE。图2.3.1中总布线区GRP的周围,有4个MB。
(2)通用逻辑块(Generic Logic Block, GLB)。
通用逻辑块(GLB)是pLSI最基本的逻辑单元。pLSI1032共有32个GLB,在图2.3.1中分别表示为A0~A7、B0~B7、C0~C7、D0~D7。每个GLB包含一个逻辑阵列、一个乘积项共享阵列和4个输出逻辑宏单元三部分。
(3)总布线区(Global Routing Pool, GRP)。
总布线区(GRP)位于pLSI芯片的中心位置,它以固定的方式链接内部所有的逻辑,使每个链接路径所产生的延迟时间都是可预测的或可计算的,从而可以高效率地实现较复杂的设计工作。GRP的主要任务是将GLB的输出和I/O的输入链接为所有GLB的输入。
(4)输出布线区(Output Routing Pool, ORP)。
输出布线区(ORP)主要是完成将GLB的输出信号链接至I/O口,供器件管脚的输出。ORP允许I/O随意定义,这为软件开发系统的布线工作提供了很大的灵活性。
(5)输入输出单元(I/O cell)。
I/O单元是用于将输入信号、输出信号或输入输出双向信号与具体的I/O管脚相链接,形成输入、输出、三态输出及双向的I/O口。I/O单元的输入信号来源是输出布线区的输出或外界输入;而I/O单元的输出,则是布线区GRP作输入或直接给外界输出。I/O单元三态输出时的使能控制信号OE由巨块内的OE信号发生器产生。
通用逻辑块(GLB)的逻辑单元如图2.3.2所示。
图2.3.2 GLB的逻辑单元
软件开发系统(Programmable Development System, PDS)是专为开发、使用pLSI或ispLSI芯片器件配套的软件系统,其基本工作环境是IBM386(或兼容机)以上的微机和3.0以上版本的Windows软件。PDS系统在逻辑设计实现、器件性能高效利用等方面为设计者提供了直接的控制,从而为设计者快速利用EPLD实现自己的设计思想提供了保证。利用PDS系统,可用简单的布尔方程或类似TTL的宏逻辑来表达逻辑设计,并自动完成在若干种布线方案中选择最佳。有的高级软件还可以直接输入逻辑图,从而可以简化输入过程。用PDS系统进行EPLD器件的设计和开发过程如图2.3.3所示。
图2.3.3 PDS系统设计流程
由于PDS系统是以下拉式菜单方式操作的软件,所以与一般Windows应用软件一样,使用起来比较方便。在利用PDS生成熔丝图以后,对于ispLSI系列芯片来说,可用download电缆线,一端接到计算机的并口,另一端接到ispLSI芯片的接口,直接把熔丝图烧制在ispLSI芯片中;对于pLSI芯片来说,则需要采用专用编程器把熔丝图烧制在pLSI芯片中,当然,对于ispLSI类型的芯片,也可以使用这类编程器。在实际的设计过程中,很关键的一点就是能否成功地进行布线,合理地分配管脚是有益的,有时只要改变一下管脚的定义便可使原来布不通的设计变为布线成功的设计。
目前,EPLD芯片内部的资源越来越多,速度越来越快,软件功能也更加完善,其应用也逐步扩大。人们普遍认为,向今后的许多电子系统,将以CPU+RAM+FPGA或CPU+RAM+EPLD的结构为特征。图像处理系统将向小型化方向发展,虽然可以使用一些超大规模的专用集成电路,但高密度可编程逻辑器件也将受到图像处理系统设计者的青睐。
值得指出的是,目前FPGA已经取得了惊人的发展,不仅体现在高密度上(片内存储体容量超过Gbit)、可定义软件的实现上,还体现在软件生态环境上。我们知道,GPU的发展离不开GPU编程环境,基于CUDA的软件平台,则使GPU编程易于实现,从而促进了GPU的广泛应用。目前,Xilinx公司的FPGA软件生态已基本形成,其推出的FPGA开发板,可在很短的时间内开发出基于FPGA的人脸识别。