EDA 第二章 可编程逻辑器件
2.1 可编程逻辑器件概述 2.1.1 可编程逻辑器件的发展历程 PROM 器件 PLA 器件 PAL 器件 CPLD器件 GAL器件 2.1 可编程逻辑器件概述 2.1.1 可编程逻辑器件的发展历程 PROM 器件 PLA 器件 PAL 器件 CPLD器件 GAL器件 FPGA器件 内嵌复杂 功能模块 的SOPC 70年代 80年代 90年代
2.1.2 目前流行可编程器件的特点 1、大规模 2、低功耗 3、模拟可编程 4、含多种专用端口和附加功能模块的FPGA
2.1.3 可编程逻辑器件的基本结构和分类 1、可编程逻辑器件的基本结构 2.1.3 可编程逻辑器件的基本结构和分类 1、可编程逻辑器件的基本结构 可编程逻辑器件的基本结构是由与阵列和或阵列、再加上输入缓冲电路和输出电路组成,组成框图如图2-1所示。其中与阵列和或阵列是核心,与阵列用来产生乘积项,或阵列用来产生乘积项之和形式的函数。输入缓冲电路可以产生输入变量的原变量和反变量,输出结构可以是组合输出、时序输出或是可编程的输出结构,输出信号还可以通过内部通道反馈到输入端。 图2-1 PLD基本结构框图
2、可编程逻辑器件的分类 图2-2 按集成度(PLD)分类
(1)简单PLD原理 电路符号表示 常用逻辑门符号与现有国标符号的对照
电路符号表示 图2-4PLD的互补缓冲器 图2-5 PLD的互补输入 图2-6 PLD中与阵列表示
PROM PROM基本结构: 其逻辑函数是:
PROM 图2-10 PROM的逻辑阵列结构 逻辑函数表示:
PROM 图2-11 PROM表达的PLD图阵列 图2-12 用PROM完成半加器逻辑阵列
PLA 图2-13 PLA逻辑阵列示意图
PLA 图2-14 PLA与 PROM的比较
PAL 图2-15 PAL结构 图2-16 PAL的常用表示
PAL 图2-17 一种PAL16V8的部分结构图
GAL 图2-18 GAL16V8的结构图
General Array Logic Device EPLD GAL 乘积项逻辑 GAL: General Array Logic Device 最多有8个或项,每个或项最多有32个与项 EPLD Erasable Programmable Logic Device
(2)复杂可编程逻辑器件 复杂可编程逻辑器件出现在20世纪80年代末期,其结构区别于早期的简单PLD,最基本的一点在于:简单PLD为逻辑门编程,而复杂PLD为逻辑板块编程,即以逻辑宏单元为基础,加上内部的与或阵列和外围的输入/输出模块,不但实现了除简单逻辑控制之外的时序控制,又扩大了在整个系统中的应用范围和扩展性。
(3)现场可编程门阵列(FPGA) 现场可编程门阵列是一种可由用户自行定义配置的高密度专用集成电路,它将定制的VLSI电路的单片逻辑集成优点和用户可编程逻辑器件的设计灵活、工艺实现方便、产品上市快捷的长处结合起来,器件采用逻辑单元阵列结构,静态随机存取存储工艺,设计灵活,集成度高,可重复编程,并可现场模拟调试验证。
(4)在系统可编程(ISP)逻辑器件 在系统可编程逻辑器件(IN-System Programmable PLD)是一种新型可编程逻辑器件,采用先进的E2CMOS工艺,结合传统的PLD器件的易用性、高性能和FPGA的灵活性、高密度等特点,可在系统内进行编程。
3、可编程逻辑器件的互连结构 PLD的互连结构有确定型和统计型两类。 确定型PLD提供的互连结构每次用相同的互连线实现布线,其特性常常是事先确定的,这类PLD是由PROM结构演变而来,目前除FPGA器件以外,基本上都采用这种结构。 统计型互连结构PLD设计系统每次执行相同的功能,但却能给出不同的布线模式,一般无法确切预知电路的时延。所以系统必须允许设计者提出约束条件,如关键路径的时延和关联信号的时延差等。FPGA就是采用这种结构。
4、可编程逻辑器件的编程特性及编程元件 可编程逻辑器件的编程特性有一次可编程和重复可编程两类。一次可编程的典型产品是PROM、PAL和熔丝型FPGA,其他大多数是可重复编程的。用紫外线擦除的产品的编程次数一般在几十次的数量级,采用电擦除的次数多一些,采用E2CMOS工艺的产品,擦写次数可达几千次,而采用SRAM结构,则可实现无限次编程。
最早的PLD器件(如PAL),大多采用TTL工艺,后来的PLD器件(如GAL、CPLD、FPGA及ISP-PLD)都采用MOS工艺(如NMOS、CMOS、E2CMOS等)。一般有下列5种编程元件:熔丝开关(一次可编程,要求大电流);可编程低阻电路元件(多次编程,要求中电压);EPROM(要求有石英窗口,紫外线擦除);E2PROM;基于SRAM的编程元件。
2.1.4 PLD相对于MCU的优势所在 1.MCU经常面临的难题 MCU逻辑行为上的普适性,常会引导人们认为MCU是无所不能的,任何一个电子系统设计项目,MCU成为无可置疑的主角。但不深入考察MCU的优势和弱点,事事都以MCU越俎代庖、勉为其难,将严重影响了系统设计的最佳选择和性价比的提高。
(1)运行速度 从理论上来说,MCU几乎可以解决任何逻辑的实现,但MCU是通过内部的CPU逐条执行软件指令来完成各种运算和逻辑功能,无论多么高的工作时钟频率和多么好的指令时序方式,在排队式串行指令执行方式(DSP处理器也不能逃脱这种工作方式)面前,其工作速度和效率必将大打折扣。因此,MCU在实时仿真、高速工控或高速数据采样等许多领域尤显力不从心,速度是MCU及其系统面临的最大挑战。
(2)复位 复位工作方式是MCU的另一致命弱点是,任何MCU在工作初始都必须经历一个复位过程,否则将无法进行正常工作。MCU的复位必须满足一定的电平条件和时间条件(长达毫秒级)。在工作电平有某种干扰性突变时,MCU不可缺少的复位设置将成为系统不可靠工作的重要因素。而且这种产生于复位的不完全性,构成了系统不可靠工作的隐患,其出现方式极为随机和动态,一般方法难于检测。一些系统在工作中出现的“假复位”和不可靠复位带来的后果是十分严重的。尽管人们不断提出了种种改善复位的方法及可靠复位的电路,市场上也有层出不穷的MCU复位监控专用器件,但到目前为止,复位的可靠性问题仍然未能得到根本性的解决。
(3)程序“跑飞” 在强干扰或某种偶然因素下,任何MCU的程序指针都极可能越出正常的程序流程跑飞,这已是不争的事实。事实证明,无论多么优秀的MCU,无论具有多么良好的抗干扰措施,包括设置任何方式的内外硬件看门狗,在受强干扰特别是强电磁干扰情况下,MCU都无法保证其仍能正常工作而不进入不可挽回的“死机”状态。尤其是当程序指针跑飞与复位不可靠因素相交错时,情况将变得尤为复杂。
2.CPLD/FPGA的优势 基于CPLD/FPGA器件的开发应用可以从根本上解决MCU所遇到的问题。与MCU相比,CPLD/FPGA在某些领域的优势是多方面的和根本性的: (1)高速性 CPLD/FPGA的时钟延迟仅纳秒级,结合其并行工作方式,在超高速应用领域和实时测控方面有非常广阔的应用前景。
(2)高可靠性 在高可靠应用领域,MCU的缺憾为CPLD/FPGA的应用留下了很大的用武之地。除了不存在MCU所特有的复位不可靠与程序指针可能跑飞等固有缺陷外,CPLD/FPGA的高可靠性还表现在几乎可将整个系统下载于同一芯片中,从而大大缩小了体积,易于管理和屏蔽。 (3)编程方式 采用JTAG在系统配置编程方式,可对正在工作的系统上的CPLD/FPGA进行在系统编程。这对于在工控、智能仪器仪表、通讯和军事上有特殊用途。同时为系统的调试带来极大的方便。
(4)标准化设计语言 CPLD/FPGA的设计开发工具,通过符合国际标准的硬件描述语言(如VHDL或HDL)来进行电子系统设计和产品开发。由于开发工具的通用性、设计语言的标准化以及设计过程几乎与所用的CPLD/FPGA器件的硬件结构没有关系,所以设计成功的各类逻辑功能块软件有很好的兼容性和可移植性。
2.2 CPLD的结构与工作原理 2.2.1 CPLD的基本结构 CPLD器件,可以认为CPLD是将多个可编程阵列逻辑(PAL)器件集成到一个芯片,具有类似PAL的结构。CPLD器件中至少包含三种结构:可编程逻辑功能块(FB);可编程I/O单元;可编程内部连线。FB中包含有乘积项、宏单元等。图2-7是CPLD的结构原理图。
图2-7 CPLD的结构原理
2.2.2 Altera公司MAX7000系列CPLD简介 MAX7000系列是高密度、高性能的CMOS CPLD,采用CMOS EEPROM技术制造。提供600到5000可用门。 它主要由逻辑阵列块、宏单元、扩展乘积项、可编程连线阵列和I/O控制模块组成。
(1) 逻辑阵列块(LAB) 图 MAX7128S的结构
(2) 宏单元 图 MAX7000系列的单个宏单元结构 逻辑阵列 全局 清零 全局 时钟 来自 I/O引脚 并行 扩展项 寄存器旁路 来自 PIA的 36个信号 全局 清零 全局 时钟 来自 I/O引脚 并行 扩展项 快速输入选择 2 寄存器旁路 通往 I/O 模块 Q D EN PRN 乘积项选择矩阵 ENA CLRN 时钟 清零选择 清零 共享 逻辑 扩展项 逻辑阵列 通往 PIA
(3) 扩展乘积项 图2-10 共享扩展项
图2-11 并联扩展项
(4) 可编程连线阵列 不同的LAB通过在可编程连线阵列(PIA)上布线,以相互连接构成所需的逻辑。 图2-12 PIA布线示意图
(5)I/O控制块 EPM7128器件的I/O控制块
2.3 FPGA结构与工作原理 2.3.1 FPGA的基本结构 FPGA器件在结构上,由逻辑功能块排列为阵列,它的结构可以分为三个部分:可编程逻辑块CLB(Configurable logic Blocks)、可编程I/O模块IOB(Input/Output block)和可编程内部连线PI(Programble Interconnect)。如图2-14所示。CLB在器件中排列为阵列,周围有环形内部连线,IOB分布在四周的管脚上。CLB能够实现逻辑函数,还可以配置成RAM等复杂的形式。 常见FPGA的结构主要有3种类型:查找表结构、多路开关结构和多级与非门结构。
图2-14 FPGA的结构原理
1、查找表型FPGA结构 查找表型FPGA的可编程逻辑块是查找表,由查找表构成函数发生器,通过查找表实现逻辑函数,查找表的物理结构是静态存储器(SRAM)。M个输入项的逻辑函数可以由一个2M位容量SRAM实现,函数值存放在SRAM中,SRAM的地址线起输入线的作用,地址即输入变量值,SRAM的输出为逻辑函数值,由连线开关实现与其他功能块的连接。 下面以全加器为例,说明查找表实现逻辑函数的方法。全加器的真值表如表2-1所示,其中,An为加数,Bn为被加数,Cn-1为低位进位,Sn为和,Cn为产生的进位。这样的一个全加器可以由三输入的查找表实现,在查找表中存放全加器的真值表,输入变量作为查找表的地址。
表2-1 全加器真值表 An Bn Cn-1 Sn Cn 1 理论上讲,只要能够增加输入信号线和扩大存储器容量,查找表就可以实现任意多输入函数。但事实上,查找表的规模受到技术和经济因素的限制。每增加一个输入项,查找表SRAM的容量就需要扩大一倍,当输入项超过5个时,SRAM容量的增加就会变得不可忍受。
16个输入项的查找表需要64KB位容量的SRAM,相当于一片中等容量的RAM的规模。因此,实际的FPGA器件的查找表输入项不超过5个,对多于5个输入项的逻辑函数则由多个查找表逻辑块组合或级联实现。此时逻辑函数也需要作些变换以适应查找表的结构要求,这一步在器件设计中称为逻辑分割。至于怎样逻辑函数才能用最少数目的查找表实现逻辑函数,是一个求最优解的问题,针对具体的结构有相应的算法来解决这一问题。这在EDA技术中属于逻辑综合的范畴,可由工具软件来进行。
2、多路开关型FPGA结构 在多路开关型FPGA中,可编程逻辑块是可配置的多路开关。利用多路开关的特性对多路开关的输入和选择信号进行配置,接到固定电平或输入信号上,从而实现不同的逻辑功能。例如,2选1多路开关的选择输入信号为s,两个输入信号分别为a和b,则输出函数为f=sa+b。如果把多个多路开关和逻辑门连接起来,就可以实现数目巨大的逻辑函数。 多路开关型FPGA的代表是Actel公司的ACT系列FPGA。以ACT-1为例,它的基本宏单元由3个二输入的多路开关和一个或门组成,如图2-15所示。
图2-15 多路开关型FPGA逻辑块
3、多级与非门型FPGA结构 采用多级与非门结构的器件是Altera公司的FPGA。Altera公司的与非门结构基于一个与—或—异或逻辑块,如图2-16所示。这个基本电路可以用一个触发器和一个多路开关来扩充。多路开关选择组合逻辑输出、寄存器输出或锁存器输出。异或门用于增强逻辑块的功能,当异或门输入端分离时,它的作用相当于或门,可以形成更大的或函数,用来实现其它算术功能。 图2-16 多级与非门型FPGA逻辑块
2.3.2 Cyclone III系列器件的结构原理 Cyclone III系列器件是Altera公司的一款低功耗、高性价比的FPGA,它的结构和工作原理在FPGA器件中具有典型性,下面以此类器件为例,介绍FPGA的结构与工作原理。CycloneⅢ器件主要由逻辑阵列块(Logic Array Block,LAB)、嵌入式存储器块、嵌入式硬件乘法器、I/O单元和嵌入式PLL等模块构成,在各个模块之间存在着丰富的互连线和时钟网络。
Cyclone III器件的可编程资源主要来自逻辑阵列块LAB,而每个LAB都由多个逻辑宏单元LE(Logic Element,即LC:Logic Cell)构成。LE是Cyclone III FPGA器件的最基本的可编程单元,图2-17显示了Cyclone III FPGA的LE的内部结构。观察图2-17可以发现,LE主要由一个4输入的查找表LUT、进位链逻辑、寄存器链逻辑和一个可编程的寄存器构成。4输入的LUT可以完成所有的4输入1输出的组合逻辑功能。每一个LE的输出都可以连接到行、列、直连通路、进位链、寄存器链等布线资源。
图2-17 Cyclone III LE结构图
每个LE中的可编程寄存器可以被配置成D触发器、T触发器、JK触发器和RS触发器模式。每个可编程寄存器具有数据、时钟、时钟使能、清零输入信号。全局时钟网络、通用I/O口以及内部逻辑可以灵活配置寄存器的时钟和清零信号。任何一个通用I/O和内部逻辑都可以驱动时钟使能信号。在一些只需要组合电路的应用中,对于组合逻辑的实现,可将该可配置寄存器旁路,LUT的输出可作为LE的输出。
LE有三个输出驱动内部互连,一个驱动局部互连,另两个驱动行或列的互连资源,LUT和寄存器的输出可以单独控制。可以实现在一个LE中,LUT驱动一个输出,而寄存器驱动另一个输出(这种技术称为寄存器打包)。因而在一个LE中的寄存器和LUT能够用来完成不相关的功能,因此能够提高LE的资源利用率 寄存器反馈模式允许在一个LE中寄存器的输出作为反馈信号,加到LUT的一个输入上,在一个LE中就完成反馈。
Cyclone III的LE可以工作在下列两种操作模式:普通模式和算术模式。 在不同的LE操作模式下,LE的内部结构和LE之间的互连有些差异,图2-18和图2-19分别是Cyclone III的LE在普通模式和算术模式下的结构和连接图。 普通模式下的LE适合通用逻辑应用和组合逻辑的实现。在该模式下,来自LAB局部互连的四个输入将作为一个4输入1输出的LUT的输入端口。可以选择进位输入(cin)信号或者data3信号作为LUT中的一个输入信号。每一个LE都可以通过LUT链直接连接到(在同一个LAB中的)下一个LE。在普通模式下,LE的输入信号可以作为LE中寄存器的异步装载信号。普通模式下的LE也支持寄存器打包与寄存器反馈。
图2-18 Cyclone III LE普通模式
图2-19 Cyclone III LE动态算术模式
在Cyclone III器件中的LE还可以工作在算术模式下,在这种模式下可以更好地实现加法器、计数器、累加器和比较器。在算术模式下的单个LE内有两个3输入LUT,可被配置成一位全加器和基本进位链结构。其中一个3输入LUT用于计算,另外一个3输入LUT用来生成进位输出信号cout。在算术模式下,LE支持寄存器打包与寄存器反馈。逻辑阵列块LAB是由一系列相邻的LE构成的。每个Cyclone III的LAB包含16个LE,在LAB中、LAB之间存在着行互连、列互连、直连通路互连、LAB局部互连、LE进位链和寄存器链。图2-20是Cyclone III LAB的结构图。
图2-20 Cyclone III LAB结构
在Cyclone III器件里面存在大量LAB,图2-20所示的多个LE排列起来构成LAB,多个LAB排列起来成LAB阵列,构成了Cyclone III FPGA丰富的逻辑编程资源。 局部互连可以用来在同一个LAB的LE之间传输信号;进位链用来连接LE的进位输出和下一个LE(在同一个LAB中)的进位输入;寄存器链用来连接下一个LE(在同一个LAB中)的寄存器输出和下一个LE的寄存器数据输入。
LAB中的局部互连信号可以驱动在同一个LAB中的LE,可以连接行与列互连和在同一个LAB中的LE。相邻的LAB、左侧或者右侧的PLL(锁相环)和M9K RAM块(Cyclone III中的嵌入式存储器,图2-21)通过直连线也可以驱动一个LAB的局部互连。每个LAB都有专用的逻辑来生成LE的控制信号,这些LE的控制信号包括两个时钟信号、两个时钟使能信号、两个异步清零、同步清零、异步预置/装载信号、同步装载和加/减控制信号。图2-22显示了LAB控制信号生成的逻辑图。
图2-21 LAB阵列间互联
图2-22 LAB控制信号生成
在Cyclone III FPGA器件中所含的嵌入式存储器(Embedded Memory),由数十个M9K的存储器块构成。每个M9K存储器块具有很强的伸缩性,可以实现的功能有:8192位RAM(单端口、双端口、带校验、字节使能)、ROM、移位寄存器、FIFO等。在Cyclone III FPGA中的嵌入式存储器可以通过多种连线与可编程资源实现连接,这大大增强了FPGA的性能,扩大了FPGA的应用范围。
在Cyclone III系列器件中还有嵌入式乘法器(Embedded Multiplier),这种硬件乘法器的存在可以大大提高FPGA在处理DSP(数字信号处理)任务时的能力。Cyclone III系列器件的嵌入式乘法器的位置和结构可以参见图2-23,可以实现9×9乘法器或者18×18乘法器,乘法器的输入与输出可以选择是寄存的还是非寄存的(即组合输入输出)。可以与FPGA中的其他资源灵活地构成适合DSP算法的MAC(乘加单元)。
图2-23 嵌入式乘法器
在数字逻辑电路的设计中,时钟、复位信号往往需要同步作用于系统中的每个时序逻辑单元,因此在Cyclone III器件中设置有全局控制信号。由于系统的时钟延时会严重影响系统的性能,故在Cyclone III中设置了复杂的全局时钟网络,如图2-24所示,以减少时钟信号的传输延迟。另外,在Cyclone III FPGA中还含有2~4个独立的嵌入式锁相环PLL,可以用来调整时钟信号的波形、频率和相位。
图2-24 时钟网络的时钟控制 Cyclone III的I/O支持多种I/O接口,符合多种I/O标准,可以支持差分的I/O标准:诸如LVDS(低压差分串行)和RSDS(去抖动差分信号)、SSTL-2、SSTL-18、HSTL-18、HSTL-15、HSTL-12、PPDS、差分LVPECL,当然也支持普通单端的I/O标准,比如LVTTL、LVCMOS、PCI和PCI-X I/O等,通过这些常用的端口与板上的其他芯片沟通。
Cyclone III器件还可以支持多个通道的LVDS和RSDS。Cyclone III器件内的LVDS缓冲器可以支持最高达875Mbps的数据传输速度。与单端的I/O标准相比,这些内置于CycloneⅢ器件内部的LVDS缓冲器保持了信号的完整性,并具有更低的电磁干扰、更好的电磁兼容性(EMI)及更低的电源功耗。 图2-25 LVDS连接
Cyclone III系列器件除了片上的嵌入式存储器资源外,可以外接多种外部存储器,比如SRAM、NAND、SDRAM、DDR SDRAM、DDR2 SDRAM等。 Cyclone III的电源支持采用内核电压和I/O电压(3.3V)分开供电的方式,I/O电压取决于使用时需要的I/O标准,而内核电压使用1.2V供电,PLL供电2.5V。 Cyclone III系列中有一个子系列是Cyclone III LS系列,该器件系列可以支持加密功能,使用AES加密算法对FPGA上的数据进行保护。
2.4 可编程逻辑器件的测试技术 2.4.1 内部逻辑测试 对于CPLD/FPGA的内部逻辑测试是应用设计可靠性的重要保证。由于设计的复杂性,内部逻辑测试面临越来越多的问题。设计者通常不可能考虑周全,这就需要在设计时加入用于测试的专用逻辑,即进行可测性设计(Design For Test,DFT),在设计完成后用来测试关键逻辑。 在ASIC设计中的扫描寄存器,是可测性设计的一种,原理是把ASIC中关键逻辑部分的普通寄存器用测试扫描寄存器来代替,在测试中可以动态地测试、分析、设计其中寄存器所处的状态,甚至对某个寄存器加激励信号,以改变该寄存器的状态。
有的FPGA厂商提供一种技术,在可编程逻辑器件中可动态载入某种逻辑功能模块,与EDA工具软件相配合提供一种嵌入式逻辑分析仪,以帮助测试工程师发现内部逻辑问题。Altera的Signal Tap II技术是典型代表之一。 在内部逻辑测试时,还会涉及测试的覆盖率问题,对于小型逻辑电路,逻辑测试的覆盖率可以很高,甚至达到100%。可是对于一个复杂数字系统设计,内部逻辑覆盖率不可能达到100%,这就必须寻求其他更有效的方法。
2.4.2 JTAG边界扫描 随着微电子技术、微封装技术和印制板制造技术的发展,印制电路板变得越来越小,密度越来越大,复杂程度越来越高,层数不断增加。面对这样的发展趋势,如果仍然沿用传统的诸如外探针测试法和“针床”夹具测试法来测试焊接上的器件不仅是困难的而且代价也会提高,很可能会把电路简化所节约的成本,被传统测试方法代价的提高而抵消掉。
设计人员使用BST规范测试引脚连接时,再也不必使用物理探针了,甚至可在器件正常工作时在系统捕获功能数据。器件的边界扫描单元能够从逻辑跟踪引脚信号,或是从引脚或器件核心逻辑信号中捕获数据。强行加入的测试数据串行地移入边界扫描单元,捕获的数据串行移出并在器件外部同预期的结果进行比较。图2-26说明了边界扫描测试法的概念。该方法提供了一个串行扫描路径,它能捕获器件核心逻辑的内容,或者测试遵守IEEE规范的器件之间的引脚连接情况。
图2-26 边界扫描电路结构 边界扫描测试标准IEEE 1149.1 BST的结构,即当器件工作在JTAG BST模式时,使用四个I/O引脚和一个可选引脚TRST作为JTAG引脚。四个I/O引脚是TDI、T'DO 、TMS和TCK,表2-1概括了这些引脚的功能。JTAG BST需要下列寄存器:
表2-1 边界扫描I/O引脚功能 引脚 描述 功能 TDI 测试数据输入 测试指令和编程数据的串行输入引脚。数据在TCK的上升沿移入 TDO 测试数据输出 测试指令和编程数据的串行输出引脚,数据在TCK的下降沿移出。如果数据没有被移出,该脚处于高阻态 TMS 测试模式选择 控制信号输入引脚,负责TAP控制器的转换。TMS必须在TCK的上升沿到来之前稳定 TCK 测试时钟输入 时钟输入到BST电路,一些操作发生在上升沿,而另一些发生在下降沿 TRST 测试复位输入 低电平有效,异步复位边界扫描电路(在IEEE规范中,该引脚可选)
指令寄存器。用来决定是否进行测试或访问数据寄存器操作。 旁路寄存器。这个l位寄存器用来提供TDI和TDO的最小串行通道。 边界扫描寄存器。由器件引脚上的所有边界扫描单元构成。
JTAG边界扫描测试由测试访问端口的控制器管理。TMS、TRST和TCK引脚管理TAP控制器的操作;TDI和TDO为数据寄存器提供串行通道,TDI也为指令寄存器提供数据,然后为数据寄存器产生控制逻辑。边界扫描寄存器是一个大型串行移位寄存器,它使用TDI引脚作为输入,TDO引脚作为输出。边界扫描寄存器由3位的周边单元组成,它们可以是I/0单元、专用输入(输入器件)或专用的配置引脚。设计者可用边界扫描寄存器来测试外部引脚的连接,或是在器件运行时捕获内部数据。图2-27表示测试数据沿着JTAG器件的周边作串行移位的情况,图2-28是JTAG BST系统内部结构。
图2-27 边界扫描数据移位方式
图2-28 JTAG BST系统内部结构
BST系统中还有其他一些寄存器,如器件ID寄存器、ISP/ICR寄存器等。图2-29所示为边界扫描与FPGA器件相关联的I/0引脚。3位字宽的边界扫描单元在每个IOE中包括一套捕获寄存器和一组更新寄存器。捕获寄存器经过OUTJ、OEJ和I/0引脚信号同内部器件数据相联系,而更新寄存器经过三态数据输入、三态控制和INJ信号同外部数据连接。JTAG BST寄存器的控制信号(即SHIFF、CLOCK和UPDATE)由TAP控制器内部产生;边界扫描寄存器的数据信号路径是从串行数据输入TDI信号到串行数据输出TDO,扫描寄存器的起点在器件的TDI引脚处,终点在TDO引脚处。
JTAG BST操作控制器包括一个TAP控制器,这是一个16状态的状态机(详细情况参见JTAG规范),在TCK的上升沿时刻,TAP控制器利用TMS引脚控制器件中的JTAG操作进行状态转换。在上电后,TAP控制器处于复位状态时,BST电路无效,器件已处于正常工作状态,这时指令寄存器也已完成了初始化。为了启动JTAG操作,设计者必须选择指令模式,图2-30就是BST选择命令模式时序图,方法是使TAP控制器向前移位到指令寄存器(SHIFT_IR)状态,然后由时钟控制TDI引脚上相应的指令码。
图2-30 JTAG BST选择命令模式时序
图2-30的波形图表示指令码向指令寄存器进入的过程。它给出了TCK、TMS、TDI和TDO的值,以及TAP控制器的状态。从RESET状态开始,TMS受时钟作用,具有代码01100,使TAP控制器运行前进到SHIFT_IR状态。
除了SHIFT_IR和SHIFT_DR状态之外,在所有状态中的TDO引脚都是高阻态,TDO引脚在进入移位状态之后的第一个TCK下降沿时刻是有效的,而在离开移位状态之后的第一个TCK的下降沿时刻处于高阻态。当SHIFT_IR状态有效时,TDO不再是高阻态,并且指令寄存器的初始化状态在TCK的下降沿时刻移出。只要SHIFT_IR状态保持有效,TDO就会连续不断地向外移出指令寄存器的内容;而只要TMS维持在低电平,TAP控制器就保持在SHIFT_IR状态。
在SHIFT_IR状态期间,指令码是在TCK的上升沿时刻通过TDI引脚上的移位数据送入的。操作码的最后一位必须通过时钟与下一状态EXIT1_IR有效处于同一时刻,由时钟控制TMS保持高电平时进入EXIT1_IR状态。一旦进入EXIT1_IR状态,TDO又变成了高阻态。当指令码正确地进入之后,TAP控制器继续向前运行,以多种命令模式工作,并以SAMPLE/PRELOAD、EXTEST或BYPASS三种模式之一进行测试数据的串行移位。TAP控制器的命令模式包括:
(1)SAMPLE/PRELOAD指令模式。该指令模式允许在不中断器件正常工作的情况下,捕获器件内部的数据。 (2)EXTEST指令模式。该指令模式主要用于校验器件之间的外部引脚连线。 (3)BYPASS指令模式。如果SAMPLE/PRELOAD或EXTEST指令码都未被选中,TAP控制器会自动进入BYPASS模式,在这种状态下,数据信号受时钟控制在TCK上升沿时刻从TDI进入旁路寄存器,并在同一时钟的下降沿时刻从TDO输出。 (4)IDCODE指令模式。该指令模式用来标识IEEE Std 1149.1链中的器件。
(5)USERCODE指令模式。该指令模式用来标识在IEEE Std 1149 (5)USERCODE指令模式。该指令模式用来标识在IEEE Std 1149.1链中的用户器件的用户电子标签UES(User Electronic Signature)。 边界扫描描述语言BSDL(Boundary-Scan Description Language)是VHDL语言的一个子集。设计人员可以利用BSDL来描述遵从IEEE Std 1149.1 BST的JTAG器件的测试属性,测试软件开发系统使用BSDL文件来生成测试文件,进行测试分析、失效分析,以及在系统编程等。
2.4.3 嵌入式逻辑分析仪 从以上的介绍中不难理解FPGA引脚上的信号状态可以通过JTAG口读出。对于某些系列的FPGA,甚至内部逻辑单元的信号状态也可以通过JTAG进行读取。利用这个特性,结合在FPGA中的嵌入式RAM模块和少量的逻辑资源,可以在FPGA中实现一个简单的嵌入式逻辑分析仪,用来帮助设计者调试。某些FPGA厂商提供了相应的工具来帮助设计者实现这种逻辑分析,如Altera的Signal Tap II、Xilinx的Chip Scope等。
目前常见的大规模可编程逻辑器件的编程工艺有三种: 2.5 CPLD/FPGA的编程与配置 目前常见的大规模可编程逻辑器件的编程工艺有三种: (1)基于电可擦除存储单元的EEPROM或Flash技术。CPLD一般使用此技术进行编程。CPLD被编程后改变了电可擦除存储单元中的信息,掉电后可保存。某些FPGA也采用Flash工艺,如Actel的Pro ASIC plus系列FPGA、Lattice的Lattice XP系列FPGA。 (2)基于SRAM查找表的编程单元。对该类器件,编程信息是保存在SRAM中的,SRAM在掉电后编程信息立即丢失,在下次上电后,还需要重新载入编程信息。因此该类器件的编程一般称为配置。大部分FPGA采用该种编程工艺。
(3)基于一次性可编程反熔丝编程单元。Actel的部分FPGA采用此种结构。 电可擦除编程工艺的优点是编程后信息不会因掉电而丢失,但编程次数有限,编程的速度不快。对于SRAM型FPGA来说,配置次数为无限,在加电时可随时更改逻辑但掉电后芯片中的信息即丢失,下载信息的保密性也不如前者。CPLD编程和FPGA配置可以使用专用的编程设备,也可以使用下载电缆,如Altera的:ByteBlasterMV、ByteBlasterII并行下载电缆、或使用USB接口的USB-Blaster。下载电缆编程口与Altera器件的接口一般是10芯的接口,连接信号如表2-2所示。
表2-2 各引脚信号名称 引脚 1 2 3 4 5 6 7 8 9 10 JATG模式 TCK GND TDO VCC TMS - TDI PS模式 DCK CONF_DONE nCONFIG nSTATUS DATA0
2.5.1 CPLD在系统编程 在系统可编程(ISP)就是当系统上电并正常工作时,计算机通过系统中的CPLD拥有的ISP接口直接对其进行编程,器件在编程后立即进入正常工作状态。这种CPLD编程方式的出现,改变了传统的使用专用编程器编程方法的诸多不便。图2-31是Altera CPLD器件的ISP编程连接图,其中ByteBlastet II与计算机并口相连。
图2-31 CPLD编程下载连接图
必须指出,Altera的MAX7000、MAX3000A系列CPLD是采用IEEE 1149 必须指出,Altera的MAX7000、MAX3000A系列CPLD是采用IEEE 1149.1 JTAG接口方式对器件进行在系统编程的,在图2-31中与ByteBlasterII的10芯接口相连的是TCK、TDO、TMS和TDI这四条JTAG信号线。JTAG接口本来是用作边界扫描测(BST)的,把它用作编程接口则可以省去专用的编程接口,减少系统的引出线。由于JT'AG是工业标准的IEEE 1149.1边界扫描测试的访问接口,用作编程功能有利于各可编程逻辑器件编程接口的统一。据此,便产生了IEEE编程标准IEEE 1532,以便对JTAG编程方式进行标准化。
在讨论JTAG BST时曾经提到,在系统板上的多个JTAG器件的JTAG口可以连接起来,形成一条JTAG链。同样,对于多个支持JTAG接口ISP编程的CPLD器件,也可以使用JTAG链进行编程,当然也可以进行测试。图2-32就用了JTAG对多个器件进行ISP在系统编程。JTAG链使得对各个公司生产的不同ISP器件进行统一的编程成为可能。有的公司提供了相应的软件,如Altera的Jam Player可以对不同公司支持JTAG的ISP器件进行混合编程。有些早期的ISP器件,比如Lattice的支持JTAG ISP的ispLSI 1000EA系列采用专用的ISP接口,也支持多器件下载。
图2-32 多CPLD芯片ISP编程连接方式
2.5.2 FPGA配置方式 对于基于SRAM LUT结构的FPGA器件,由于是易失性器件,没有ISP的概念,代之以ICR(In-Circuit Reconfigurability),即在线可重配置方式。FPGA特殊的结构使之需要在上电后必须进行一次配置。电路可重配置是指允许在器件已经配置好的情况下进行重新配置,以改变电路逻辑结构和功能。在利用FPGA进行设计时可以利用FPGA的ICR特性,通过连接PC机的下载电缆快速地下载设计文件至FPGA进行硬件验证。Altera的SRAM LUT结构的器件中,FPGA可使用多种配置模式,这些模式通过FPGA上的模式选择引脚MSEL(在Cyclone III上有四个MSEL信号)上设定的电平来决定:
(1)配置器件模式,如用EPC器件进行配置。 (2)PS(Passive Serial,被动串行)模式:MSEL都为0。 (3)PPS(Passive Parallel Synchronous,被动并行同步)模式。 (4)PPA(Passive Parallel Asynchronous,被动并行异步)模式。 (5)PSA(Passive Serial Asynchronous,被动串行异步)模式。 (6)JTAG模式:MSEL都为0。 (7)AS(Active Serial,主动串行)模式。 通常,在电路调试的时候,使用JTAG进行FPGA的配置,可以通过PC的打印机接口使用ByteBlaster II,或使用PC的USB接口使用USB-Blaster进行FPGA配置,如图2-33所示,但要注意MSEL上电平的选择,要都设置为0,才能用JTAG进行配置。
图2-33 JTAG在线配置FPGA的电路原理图
当设计的数字系统比较大,需要不止一个FPGA器件时,若为每个FPGA器件都设置一个下载口显然是不经济的。Altera FPGA器件的JTAG模式同样支持多个器件进行配置。对于PC机而言,除了在软件上要加以设置支持多器件外,再通过下载电缆即可对多个FPGA器件进行配置。
图2-34 EPCS器件配置FPGA的电路原理图
2.5.4 使用单片机配置FPGA 图2-36 用89S52进行配置
利用单片机或CPLD对FPGA进行配置,除了可以取代昂贵的专用OTP配置ROM外,还有许多其他实际应用,如可对多家厂商的单片机进行仿真的仿真器设计、多功能虚拟仪器设计、多任务通信设备设计或EDA实验系统设计等。方法是在图2-36中的ROM内按不同地址放置多个针对不同功能要求设计好的FPGA的配置文件,然后由单片机接收不同的命令,以选择不同的地址控制,从而使所需要的配置文件下载于FPGA中。这就是“多任务电路结构重配置”技术,这种设计方式可以极大地提高电路系统的硬件功能灵活性。因为从表面上看,同一电路系统没有发生任何外在结构上的改变,但通过来自外部不同的命令信号,系统内部将对应的配置信息加载于系统中的FPGA,电路系统的结构和功能将在瞬间发生巨大的改变,从而使单一电路系统具备许多不同电路的功能。
2.5.5 使用CPLD配置FPGA 使用单片机进行配置的缺点有:①速度慢,不适用于大规模FPGA和高可靠的应用;②容量小,单片机引脚少,不适合接大的ROM以存储较大的配置文件;③体积大,成本和功耗都不利于相关的设计。因此,如果将CPLD直接取代单片机将是一个好的选择,原来单片机中的配置控制程序可以用状态机来取代。图2-37是一个用CPLD作为配置控制器件的FPGA配置电路,此电路能很好地解决单片机配置存在的问题。
图2-37 用MAXII CPLD进行配置
2.6 CPLD/FPGA开发应用选择 FPGA和CPLD器件在电路设计中应用已十分广泛,已成为电子系统设计的重要手段。FPGA是一种高密度的可编程逻辑器件。其集成密度最高达100万门/片,系统性能可达200MHz。CPLD是由GAL发展起来的,其主体结构仍是与或阵列,具有ISP功能的CPLD器件由于具有同FPGA器件相似的集成度和易用性,在速度上还有一定的优势,使其在可编程逻辑器件技术的竞争中与FPGA并驾齐驱,成为两支领导可编程器件技术发展的力量之一。
虽然CPLD和FPGA同属于可编程ASIC器件,都具有用户现场可编程特性,都支持边界扫描技术,但由于CPLD和FPGA在结构上的不同,决定了CPLD和FPGA在性能上各有特点。 (3)CPLD通过修改具有固定内连电路的逻辑功能来编程,FPGA主要通过改变内部连线的布线来编程;FPGA可在逻辑门下编程,而CPLD是在逻辑块下编程,在编程上FPGA比CPLD具有更大的灵活性。
(4)从功率消耗上看,CPLD的缺点比较突出。一般情况下,CPLD功耗要比FPGA大,且集成度越高越明显。 (5)从速度上看,CPLD优于FPGA。由于FPGA是门级编程,且CLB之间是采用分布式互连;而CPLD是逻辑块级编程,且其逻辑块互连是集总式的。因此,CPLD比FPGA有较高的速度和较大的时间可预测性,产品可以给出引腿到引腿的最大延迟时间。
(6)从编程方式来看,目前的CPLD主要是基于E2PROM或FLASH存储器编程,编程次数达1万次。其优点是在系统断电后,编程信息不丢失。FPGA大部分是基于SRAM编程,其缺点是编程数据信息在系统断电时丢失,每次上电时,需从器件的外部存储器或计算机中将编程数据写入SRAM中。 (7)从使用方便性上看,CPLD比FPGA要好。CPLD的编程工艺采用E2PROM或FLASH技术,无需外部存储器芯片,使用简单,保密性好。而基于SRAM编程的FPGA,其编程信息需存放在外部存储器上,需外部存储器芯片,且使用方法复杂,保密性差。