FPGA技术第二章CPLD/FPGA概述第一章可编程逻辑器件发展历程第三章硬件描述语言VHDL/VerilogHDL简介第四章QuartusII的VerilogHDL建模与仿真第一章可编程逻辑器件的发展历程一、可编程逻辑器件的发展历程二、可编程逻辑器件的分类可编程逻辑器件(PLD)可编程阵列逻辑(PAL)可编程逻辑阵列(PLA)Xilinx的FPGAAltera的CPLD早期FPGA现在一、可编程器件大致的发展过程如下:1)20世纪70年代,出现了熔丝编程的PROM和PLA器件。70年代末,AMD公司对PLA进行了改进,推出了PAL器件。2)20世纪80年代初,Lattice(莱迪思)公司发明了电可擦写的,比PAL更灵活的GAL通用阵列逻辑器件。3)20世纪80年代中期,Xilinx公司提出现场可编程概念,生产出了世界上第一片FPGA器件。FPGA是改变内部连接的布线来编程。4)20世纪80年代末,Lattice公司又提出在系统可编程概念(ISP),并推出了一系列具有在系统可编程能力的CPLD器件。CPLD的设计是修改具有固定内部连接电路的逻辑功能来编程。5)20世纪90年代后期,可编程集成电路技术飞速发展,器件的可用逻辑门数超过了百万门,并出现了内嵌复杂功能模块(如加法器,乘法器,RAM,CPU核,DSP核等)的SOPC。•二、可编程器件的分类1.按集成度来划分,分为高密度和低密度PLD器件。•1)集成度小于1000门/每片的LDPLD,又称简单PLD。•PROM(可编程只读存储器)•PLA(可编程逻辑阵列,ProgrammableLogicArray)•PAL(可编程阵列逻辑,ProgrammableArrayLogic)•GAL(通用阵列逻辑,GenericArrayLogic)2)集成度大于1000门/每片的HDPLD•FPGA(FieldProgrammableGateArray)•CPLD(ComplexProgrammableLogicDevice)•2.从结构上可分为:•1)乘积项结构器件:为“与—或”阵列结构,大部分简单PLD和•CPLD都属于这个范畴;•2)查找表结构器件:由查找表组成可编程门,再构成阵列形式,•FPGA属于此类器件。3.从编程工艺上分为:1)熔丝(Fuse)型器件:编程过程就是根据设计的熔丝图文件来烧断对应的熔丝,来达到编程的目的。编程后即使系统断电,它们中存储的编程信息不会丢失。2)反熔丝(Antifuse)型器件:由Actel公司推出,在编程处通过击穿漏层使得两点之间获得导通。反熔丝PLD抗辐射,耐高低温,功耗低,速度快,在军品和宇航上有较大优势。前两种都属OTP器件。3)EPROM型:紫外线擦除电可编程逻辑器件,它用较高的编程电压进行编程,当需要再次编程时,用紫外线擦除。前三种较少使用。4)EEPROM型:电可擦除可编程逻辑器件。CPLD采用此编程工艺。5)SRAM型:SRAM查找表结构的器件,大部分的FPGA采用此编程工艺。断电后编程信息会丢失,每次上电时,需从器件外部存储器将编程数据重新写入SRAM中。允许无限次编程。6)Flash(Fastflash)型:即闪存技术,由Actel公司推出。采用此编程工艺的器件,可以实现多次可编程,也可以做到掉电后不需要重新配置。CPLD采用此编程工艺。第二章CPLD/FPGA概述一、简单的PLD结构二、FPGA/CPLD的结构三、FPGA/CPLD的基本原理四、FPGA的设计方法五、FPGA设计流程•二维的逻辑块阵列,构成了PLD器件的逻辑组成核心。•输入/输出块:·连接逻辑块的互连资源•连线资源:由各种长度的连线线段组成,其中也有一些可编程的连接开关,它们用于逻辑块之间、逻辑块输入/输出块之间的连接一.简单PLD的结构任何组合函数都可以表示为与-或表达式:如F=AB+BCD。PLD由“与门阵列”和“或门阵列”加上输入输出电路构成。早期的PLD有些是“与”阵列可编程,有些是“或”阵列可编程,还有些是“与”和“或”阵列都可编程。1.输入缓冲器2.PLD的互补输入3.PLD中与阵列表示4.PLD中或阵列的表示5.阵列线连接表示编程前编程后6.PROM的PLD阵列图二、FPGA/CPLD的结构FPGA/CPLD的结构各有其特点和长处,但概括起来,它们是由三大部分组成的:1.逻辑阵列块LAB(LogicArrayBlock)或CLB(ConfigurableLogicBlock),构成了PLD器件的逻辑组成核心。2.输入/输出块IOB(I/OBlock)3.连接逻辑块的可编程连线阵列PIA(ProgrammableInterconnectArray)或互连资源IR(InterconnectResources).它由各种长度的连线线段组成,也有一些可编程的连接开关,用于逻辑块之间、逻辑块与输入/输出块之间的连接。•规模大,能够完成任何数字逻辑的功能,实现系统集成•在投片前验证设计的正确性,开发成本低•修改设计而不用改动硬件电路,开发周期短•减少PCB面积,提高系统可靠性PLD(CPLD/FPGA)的优点:CPLD和FPGA的区别•制造工艺不同•实现功能不同FPGA:查找表技术,SRAM工艺CPLD:乘积项技术,Flash/EEPROM工艺FPGA:时序逻辑电路CPLD:组合逻辑电路三、CPLD/FPGA基本原理◆基于查找表的PLD的基本结构及逻辑实现原理◆基于乘积项的PLD的基本结构及逻辑实现原理◆基于乘积项的PLD的基本结构及逻辑实现原理这种FPGA的结构可分为三块:宏单元(Macrocell)、可编程连线(PIA)和I/O控制块。宏单元是器件的基本结构,由它来实现基本的逻辑功能;可编程连线负责信号传递,连接所有的宏单元;I/O控制块负责输入输出的电气特性控制,比如可以设定集电极开路输出,摆率控制,三态输出等。INPUT/GCLK1,INPUT/GCLRn,INPUT/OE1,INPUT/OE2是全局时钟、清零和输出使能信号,这几个信号有专用连线与器件中每个宏单元相连,信号到每个宏单元的延时相同并且延时最短。宏单元具体结构与或阵列,每一个交叉点都是可编程熔丝,导通实现与逻辑“或”阵列可编程D触发器乘积项结构的逻辑实现原理f=f1+f2=A*C*!D+B*C*!D查找表(Look-Up-Table)的原理和结构查找表LUT实质上是一个RAM,n位地址线可以配置为n×1的RAM。当用户描述了一个逻辑电路后,软件会计算所有可能的结果,并写入RAM。每一个信号进行逻辑运算,就等于输入一个地址进行查表,找出地址对应的内容,输出结果XilinxSpartan-II内部结构Altera的FLEX/ACEX等芯片的内部结构查找表结构的逻辑实现原理f=(A+B)*C*!D=A*C*!D+B*C*!D选择FPGA还是CPLD?CPLD组合逻辑的功能很强,一个宏单元就可以分解十几个甚至20-30多个组合逻辑输入。而FPGA的一个LUT只能处理4输入的组合逻辑,因此,CPLD适合用于设计译码等复杂组合逻辑。但FPGA的制造工艺确定了FPGA芯片中包含的LUT和触发器的数量非常多,往往都是几千上万,CPLD一般只能做到512个逻辑单元,而且如果用芯片价格除以逻辑单元数量,FPGA的平均逻辑单元成本大大低于CPLD。四、FPGA的设计方法FPGA的常用设计方法包括“自顶向下”和“自下而上”,目前大规模FPGA设计一般选择“自顶向下”的设计方法。所谓“自顶向下”设计方法,简单地说,就是采用可完全独立于芯片厂商及其产品结构的描述语言,在功能级对设计产品进行定义,并结合功能仿真技术,以确保设计的正确性,在功能定义完成后,利用逻辑综合技术,把功能描述转换成某一具体结构芯片的网表文件,输出给厂商的布局布线器进行布局布线。布局布线结果还可反标回同一仿真器,进行包括功能和时序的后验证,以保证布局布线所带来的门延时和线延时不会影响设计的性能。自顶向下设计方法学顶层模块子模块1子模块2子模块3叶单元叶单元叶单元叶单元叶单元叶单元RTL代码逻辑综合器调用模块的黑盒子接口设置综合目标和约束条件EDIF网表(netlist)HDL网表(netlist)RTL代码逻辑仿真器(modelsim)调用模块的行为仿真模型测试数据测试程序(testbench)五、FPGA设计流程(1)设计定义(2)设计输入布尔等式设计,原理图设计,HDL语言设计(3)功能仿真RTL代码中引用的由厂家提供的宏模块/IP(4)逻辑综合(5)前仿真HDL网表(netlist)逻辑仿真器测试数据调用模块的行为仿真模型测试程序(testbench)(6)布局布线EDIF网表(netlist)FPGA厂家工具调用模块的综合模型设置布局布线约束条件HDL网表(netlist)SDF文件(标准延时格式)下载/编程文件(7)后仿真HDL网表(netlist)SDF文件(标准延时格式)逻辑仿真器测试数据FPGA基本单元仿真模型测试程序(testbench)(8)静态时序分析(9)在系统测试第三章VerilogHDL语言一、VerilogHDL设计模块的基本结构二、VerilogHDL词法构成三、VerilogHDL的语句四、VerilogHDL描述方式五、VerilogHDL设计流程六、用VerilogHDL描述数字电路的实例硬件描述语言(HDL)就是可以描述硬件电路的功能、信号连接关系及定时(时序)关系的语言,也是一种用形式化方法来描述数字电路和设计数字系统的。常用的硬件描述语言有VHDL、VerilogHDL,已成为IEEE的工业标准硬件描述语言,得到了众多EDA公司的支持。VHDLVHDL主要用于描述数字系统的结构、行为、功能和接口。VerilogHDLVerilogHDL是在C语言的基础上发展而来的硬件描述语言,具有简洁、高效、易用的特点。语言VerilogHDLVHDL设计层次行为描述结构描述系统级系统算法系统逻辑框图RTL级数据流图、真值表、状态机寄存器、ALU、ROM等分模块描述门级布尔方程、真值表逻辑门、触发器、锁存器构成的逻辑图版图级几何图形图形连接关系VerilogHDL语言简介能力设计的行为特性、设计的数据流特性、设计的结构组成以及包含响应监控和设计验证方面的时延和波形产生机制。提供了编程语言接口,通过该接口可以在模拟、验证期间从设计外部访问设计,包括模拟的具体控制和运行。主要功能•基本逻辑门,例如and、or和nand等都内置在语言中•开关级基本结构模型,例如pmos和nmos等也被内置在语言中•可采用三种不同方式或混合方式对设计建模•两类数据类型•能够描述层次设计,可使用模块实例结构描述任何层次•能够使用门和模块实例化语句在结构级进行结构描述一、VerilogHDL设计模块的基本结构•VerilogHDL程序设计由模块(module)构成的,设计模块的基本结构如图,一个完整的VerilogHDL设计模块包括端口定义、I/O声明、信号类型声明和功能描述4个部分。1模块端口的定义•模块端口定义用来声明电路设计模块的输入/输出端口,端口定义格式如下:module模块名(端口1,端口2,端口3,…);•在端口定义的括号中,是设计电路模块与外界联系的全部输入/输出端口信号或引脚,是设计实体对外的一个通信界面,是外界可以看到的部分(不包含电源和接地端),多个端口之间用“,”分隔。例如1位全加器adder模块的端口定义为moduleadder(S,CO,A,B,CI);模块名adder2信号类型声明•信号类型声明是声明设计电路的功能描述中所用的信号的数据类型和函数。信号的数据类型主要有连线(wire)、寄存器(reg)、整型(integer)、实型(real)、和时间(time)等。信号声明格式如下:wire[msb:lsb]端口1,端口2,端口3,…;reg[msb:lsb]端口1,端口2,端口3,…;3功能描述•功能描述是VerilogHDL程序设计中最主要的部分,用来描述设计模块的内部结构和模块端口间的逻辑关