FPGA技术教程(通俗易懂)_第1页
FPGA技术教程(通俗易懂)_第2页
FPGA技术教程(通俗易懂)_第3页
FPGA技术教程(通俗易懂)_第4页
FPGA技术教程(通俗易懂)_第5页
已阅读5页,还剩162页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

FPGA技术,第二章CPLD/FPGA概述,第一章可编程逻辑器件发展历程,第三章硬件描述语言VHDL/VerilogHDL简介,第四章QuartusII的VerilogHDL建模与仿真,第一章可编程逻辑器件的发展历程,一、可编程逻辑器件的发展历程二、可编程逻辑器件的分类,早期,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门/每片的HDPLDFPGA(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位地址线可以配置为n1的RAM。当用户描述了一个逻辑电路后,软件会计算所有可能的结果,并写入RAM。每一个信号进行逻辑运算,就等于输入一个地址进行查表,找出地址对应的内容,输出结果,XilinxSpartan-II内部结构,Altera的FLEX/ACEX等芯片的内部结构,查找表结构的逻辑实现原理,f=(A+B)*C*!D=A*C*!D+B*C*!D,选择FPGA还是CPLD?,CPLD组合逻辑的功能很强,一个宏单元就可以分解十几个甚至2030多个组合逻辑输入。而FPGA的一个LUT只能处理4输入的组合逻辑,因此,CPLD适合用于设计译码等复杂组合逻辑。但FPGA的制造工艺确定了FPGA芯片中包含的LUT和触发器的数量非常多,往往都是几千上万,CPLD一般只能做到512个逻辑单元,而且如果用芯片价格除以逻辑单元数量,FPGA的平均逻辑单元成本大大低于CPLD。,四、FPGA的设计方法,FPGA的常用设计方法包括“自顶向下”和“自下而上”,目前大规模FPGA设计一般选择“自顶向下”的设计方法。,所谓“自顶向下”设计方法,简单地说,就是采用可完全独立于芯片厂商及其产品结构的描述语言,在功能级对设计产品进行定义,并结合功能仿真技术,以确保设计的正确性,在功能定义完成后,利用逻辑综合技术,把功能描述转换成某一具体结构芯片的网表文件,输出给厂商的布局布线器进行布局布线。布局布线结果还可反标回同一仿真器,进行包括功能和时序的后验证,以保证布局布线所带来的门延时和线延时不会影响设计的性能。,自顶向下设计方法学,顶层模块,子模块1,子模块2,子模块3,叶单元,叶单元,叶单元,叶单元,叶单元,叶单元,五、FPGA设计流程,(1)设计定义,(2)设计输入,布尔等式设计,原理图设计,HDL语言设计,(3)功能仿真,RTL代码中引用的由厂家提供的宏模块/IP,(4)逻辑综合,(5)前仿真,(6)布局布线,(7)后仿真,(8)静态时序分析,(9)在系统测试,第三章VerilogHDL语言,一、VerilogHDL设计模块的基本结构二、VerilogHDL词法构成三、VerilogHDL的语句四、VerilogHDL描述方式五、VerilogHDL设计流程六、用VerilogHDL描述数字电路的实例,硬件描述语言(HDL)就是可以描述硬件电路的功能、信号连接关系及定时(时序)关系的语言,也是一种用形式化方法来描述数字电路和设计数字系统的。常用的硬件描述语言有VHDL、VerilogHDL,已成为IEEE的工业标准硬件描述语言,得到了众多EDA公司的支持。,VHDLVHDL主要用于描述数字系统的结构、行为、功能和接口。VerilogHDLVerilogHDL是在C语言的基础上发展而来的硬件描述语言,具有简洁、高效、易用的特点。,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);模块名adder,2信号类型声明信号类型声明是声明设计电路的功能描述中所用的信号的数据类型和函数。信号的数据类型主要有连线(wire)、寄存器(reg)、整型(integer)、实型(real)、和时间(time)等。信号声明格式如下:wiremsb:lsb端口1,端口2,端口3,;regmsb:lsb端口1,端口2,端口3,;3功能描述功能描述是VerilogHDL程序设计中最主要的部分,用来描述设计模块的内部结构和模块端口间的逻辑关系,在电路上相当于器件的内部电路结构。功能描述可以用assign语句、元件例化(instantiate)方式、always块语句、initial块语句等方法来实现,通常将设计模块描述的方法称为建模。,用assign语句建模用assign语句建模的方法很简单,只需要在“assign”后面再加一个表达式。assign语句一般适合对组合逻辑进行赋值,称为连续赋值方式。例1一位全加器的设计1位全加器的逻辑符号:S是全加器的和输出端,CO是进位输出端,A和B是两个加数输入端,CI是低位进位输入端。,全加器的VerilogHDL源程序如下:moduleadder1(S,CO,A,B,CI);inputA,B,CI;outputS,CO;wireS,CO,A,B,CI;assignCO,S=A+B+CI;endmodule“assignCO,S=A+B+CI;”语句实现1位全加器的进位输出CO与和输出S的建模。在语句表达式中,用拼接运算符“”将CO、S这两个1位操作数拼接为一个2位操作数。,用元件例化(instantiate)方式建模元件例化方式建模是利用VerilogHDL提供的元件库实现的。例如,用与门例化元件定义一个三输入端与门可以写为andmyand3(y,a,b,c);and是VerilogHDL元件库中与门元件名,myand3是例化出的三输入端与门名,y是与门输出端,a、b、c是输入端。用always块语句建模always块语句可以产生各种逻辑,常用于时序逻辑的功能描述。一个程序设计模块中,可以包含一个或多个always语句。程序运行中,在某种条件满足时,就重复执行一遍always结构中的语句。,例28位二进制加法计数器的设计8位二进制加法计数器的逻辑符号如图。OUT是8位二进制计数器的输出端(8位向量);COUT是进位输出端(1位);DATA是并行数据输入端(8位向量);LOAD是计数器的预置控制输入端,当LOAD=1时,OUT=DATA;CLK是时钟控制输入端,上升沿为有效边沿;CLR是同步复位输入端,当CLK的上升沿到来时且CLR=1,则计数器被复位,OUT=00000000。,(逻辑符号图是由计算机对计数器电路的VerilogHDL源代码编译后产生的元件符号,图中的输入/输出标识符自动被改为大写,而源程序中的标识符都是小写。),8位二进制加法计数器的VerilogHDL源程序如下:modulecnt8(out,cout,data,load,cin,clk,clr);input7:0data;inputload,cin,clk,clroutput7:0out;outputcout;reg7:0out;always(posedgeclk)beginif(load)out=data;elseif(clr)out=b00000000;elseout=out+1;endassigncout=”语句产生进位输出cout,在语句中“语句2;:end例3用Initial过程语句对测试变量赋值initialbeginfor(addr=0;addrsize;addr=addr+1)memoryaddr=0;/对memory存储器进行初始化end,从以上例子中可以看出VerilogHDL程序设计模块的基本结构:VerilogHDL程序是由模块构成的。每个模块的内容都是嵌套在module和endmodule两语句之间,每个模块实现特定的功能,模块是可以进行层次嵌套的。每个模块首先要进行端口定义,并进行I/O声明和信号类型声明,然后对模块的功能进行逻辑描述。VerilogHDL程序的书写格式自由,一行可以有一条或多条语句,一条语句也可以分为多行写。除了end或以end开头的关键字(如endmodule)语句外,每条语句后必须要有分号“;”。可以用/*/或/对VerilogHDL程序的任何部分注释。一个完整的源程序都应当加上必要的注释,以加强程序的可读性。,二、VerilogHDL词法构成VerilogHDL源程序一般包括:间隔符与注释符、操作符、数值常量、字符串、标识符和关键字等语法元素。(1)间隔符与注释符间隔符又称空白符,包括空格符、tab符号、换行符及换页符等。它们的作用是分隔其他词法标识符。在必要的地方插入间隔符可以增强源文件的可读性。但在字符串中空格符和tab符号(制表符)是有意义的字符。VerilogHDL有单行注释和多行段注释两种注释形式。单行注释以字符“/”起始,到本行结束;而段注释则以“/*”起始以“*/”结束,在段注释中不允许嵌套,段注释中单行注释标识符“/”没有任何特殊意义。(2)操作符VerilogHDL中定义了操作符,又称运算符,按照操作数的个数,可以分为一元、二元和三元操作符;按功能可以大致分为算术操作符、逻辑操作符、比较操作符等几大类。,表1VerilogHDL的操作符及简要说明,同其他高级语言类似,各类操作符号之间有优先级之分,如下表:,列表顶部是最高优先级,底部是最低优先级。列在同一行中的操作符具有相同的优先级。所有操作符(?:除外)在表达式中都是从左向右结合的。圆括号()用于改变优先级或使得表达式中运算顺序更加清晰,提高源文件的可读性。,(3)数值常量VerilogHDL中的数值常量有整型和实型两大类,分为十进制、十六进制、八进制或二进制。若在前面加上一个正“+”或负“”号就表示有符号数,否则所代表的就是无符号数。在数值常量的任意位置可以随意插入下划线“_”以提高可读性。常量定义格式为:parameter常量名1=表达式,常量名2=表达式,常量名n=表达式;parameter是常量定义关键字,常量名是用户定义的标识符,表达式为常量赋值。例如parameterVcc=5,fbus=8b11010001;VerilogHDL中的整型数值常量就是整数,有两种书写格式:一种是无位宽的十进制表示法,如-132。第二种是定义位宽和进制的表示法,这种表示方法通常是无符号数。常数书写格式是:sizebasevalue其中size是位宽,定义了数值常量的位数(长度);base代表这个数据的进制,取值范围和相应的进制如下表;value是一个数值常量的值,书写格式与进制base相对应。例如16h6a8c,表示一个4位十六进制数。8hf5等于8b11110101;8b1111xxxx等价2hfx;8b1101zzzz等价8hdz。,VerilogHDL中的进制,VerilogHDL中的实型数值常量就是浮点数,可以用十进制与科学计数法两种形式书写。如果采用十进制格式,小数点两边必须都有数字。VerilogHDL的编程最终是与硬件相对应的。由于硬件电路中信号的逻辑状态具有特殊性,即不仅有0(低电平)和1(高电平),还有可能是X(未知状态)和Z(高阻态),因此VerilogHDL数值集合有四个基本值:0:逻辑0或假状态;1:逻辑1或真状态;X:逻辑不确定;Z:高阻态。,(4)字符串字符串是双引号“”括起来的字符序列,必须包含在同一行中,不能多行书写。在表达式或赋值语句中作为操作数的字符串被看作ASCII值序列,即一个字符串中的每一个字符对应一个8位ASCII值。(5)标识符标识符是模块、寄存器、端口、连线、示例和begin-end块等元素的名称,是赋给对象的唯一的名称。标识符可以是字母、数字、$符和下划线“_”字符的任意组合序列。定义标识符规则:首字符不能是数字,必须以字母或下划线“_”开头。字符数不能多于1024。标识符区分大小写。不要与关键字同名。例如ina、inb、adder、adder8、name_adder是正确的,而1a?b是错误的。(6)关键字关键字是VerilogHDL预先定义的专用词。在IEEE标准VerilogHDL1364-1995中规定了102个关键词,都采用小写形式。关键词有其特定和专有的语法作用,用户不能再对它们做新的定义。,关键字,(7)变量变量是在程序运行时其值可以改变的量。在VerilogHDL中,变量分为网络型(netstype)和寄存器型(registertype)两种。网络型变量nets型变量是输出值始终根据输入变化而更新的变量,一般用来定义硬件电路中的各种物理连线。VerilogHDL提供了多种nets型变量。常见的nets型变量及说明,s1,s2,s3,寄存器型变量register型变量是用来描述硬件系统的基本数据对象。作为一种数值容器,可以容纳当前值,也可以保持历史值。与寄存器的记忆功能相对应,可以作为模块各器件间的信息传递通道。register型变量与wire型变量的区别在于register型变量需要被明确的赋值,并且在重新赋值前一直保持原值。register型变量是在always、initial等过程语句种定义,并通过过程语句赋值。常见的register型变量及说明,三、VerilogHDL的语句VerilogHDL的语句包括赋值语句、条件语句、循环语句、结构声明语句和编译预处理语句等类型,每一类语句又包括几种不同的语句。在这些语句中,有些语句属于顺序执行语句,有些语句属于并行执行语句。(1)赋值语句在VerilogHDL中,赋值语句常用于描述硬件设计电路输出与输入之间的信息传送,改变输出结果。VerilogHDL有4种赋值方法:门基元、连续赋值、过程赋值和非阻塞赋值。门基元赋值语句门基元赋值语句的格式为:基本逻辑门关键字(门输出,门输入1,门输入2,门输入n);例如4输入与非门的门基元赋值语句为nand(y,a,b,c,d);/与语句assigny=(an=75;n=m;r=n;end语句执行结束后,r的值是75,而不是3,因为第3行是非阻塞赋值语句“n=m”,该语句要等到本块语句结束时,n的值才能改变。块语句的“(posedgeclock)”是定时控制敏感寒暑,表示时钟信号clock的上升沿到来的敏感时刻。例2上升沿触发的D触发器的VerilogHDL源程序moduleD_FF(q,d,clock);inputd,clock;/属于wire型变量outputq;/属于reg型变量regq;always(posedgeclock)q=d;endmodule,(2)条件语句条件语句包含if语句和case语句,它们都是顺序语句,应放在always块中。if语句完整的VerilogHDL的if语句结构如下:if(表达式)begin语句;endelseif(表达式)begin语句;endelsebegin语句;end在if语句中,“表达式”是逻辑表达式或关系表达式,也可以是位宽为1位的变量。系统对表达式的值进行判断,若为0,x,z按“假”处理;若为1,按“真”处理,执行指定的语句。,例38线-3线优先编码器的设计8线-3线优先编码器的功能表modulecode(y,a);input7:0a;output2:0y;reg2:0y;always(a)beginif(a7)y=3b111;elseif(a6)y=3b110;elseif(a5)y=3b101;elseif(a4)y=3b100;elseif(a3)y=3b011;elseif(a2)y=3b010;elseif(a1)y=3b001;elsey=3b000;endendmodule,case语句case语句是一种多分支的条件语句,case语句的格式为:case(表达式)选择值1:语句1;选择值2:语句2;选择值n:语句n;default:语句n+1endcase执行case语句时,首先计算表达式的值,然后执行条件句中相应的“选择值”的语句。当所有的条件句的“选择值”与表达式的值不同时,则执行“default”后的语句。default可以省略。case语句多用于数字系统中的译码器、数据选择器、状态机及微处理器的指令译码器等电路的描述。,例4:用case语句描述4选1数据选择器控制信号s1,s2有4种组合,控制a,b,c,d中的一个数据送到输出端。4选1数据选择器VerilogHDL的描述如下:modulemux41(z,a,b,c,d,s1,s2);inputs1,s2;inputa,b,c,d;outputz;regz;always(a,b,c,d,s1,s2)begincase(s1,s2)2b00:z=a;2b01:z=b;2b10:z=c;2b11:z=d;endcaseendendmodulecase语句还有两种变体形式,casez和casex语句。与case语句的区别是不考虑语句中的高阻z和未知x的那些位,只关注其他位的比较结果。,4选1数据选择器功能表,(3)循环语句循环语句包含for语句、repeat语句、while语句和forever语句4种。for语句for语句的格式为:for(循环指针=初值;循环指针终值;循环指针=循环指针+步长值)begin语句;endfor语句可以是一组语句重复执行,语句中的参数一般属于整型变量或常量。语句重复执行的次数由语句中的参数确定。即循环重复次数=(终值-初值)/步长值,例5:8位奇偶校验器的描述用a表示输入信号,长度为8位的向量。在程序中,用for语句对a的值,逐位进行模2加运算(即异或XOR),循环指针变量n控制模2加的次数。11100110奇数个1循环变量的初值为0,终值为8,因此,控制循环共执行了8次。例5用VerilogHDL对8位奇偶校验器的描述如下:moduletest8(a,out);input7:0a;outputout;regout;integern;always(a)beginout=0;for(n=0;n=b)max=a;elsemax=b;endendfunction函数调用的格式如下函数名(关联参数表);函数调用一般是出现在模块、任务或函数语句中。通过函数的调用来完成摹写数据的运算或转换。例如,调用上例中求最大值函数的语句为z=max(x,y);其中,x和y是与函数定义的两个参数a、b相关联的关联参数。通过函数的调用,求出x和y中的最大值,并用函数名max返回。,函数和任务存在以下几处区别:(1)任务可以有任意不同类型输入/输出参数,函数不能将inout类型作为输出。(2)任务只可以在过程语句中调用,不能在连续赋值语句assign中调用;函数可以作为表达式中的一个操作数,在过程赋值语句和连续赋值语句中调用。(3)任务可以调用其他任务或函数;函数可以调用其他函数,但不能调用任务。(4)任务不向表达式返回值,函数向调用它的表达式返回一个值。,(5)语句的顺序执行与并行执行VerilogHDL中有顺序执行语句和并行执行语句之分。always块语句中的语句是顺序语句,按照程序书写的顺序执行。always块本身确是并行语句,它与其他always语句及assign语句、元件例化语句的执行都是同时(即并行)的。例9同步清除十进制加法计数器的描述同步清0是在时钟信号作用下,计数器的状态被clr清0,清0信号clr高电平有效;时钟信号clk上升沿触发。计数器计数状态从4b0000到4b1001循环。,modulecnt10(clr,clk,q,co);inputclr,clk;output3:0q;outputco;reg3:0q;regco;always(posedgeclk)beginif(clr)beginco=0;q=4b0000;endelseif(q=4b1001)beginq=4b0000;co=1;endelsebeginco=0;q=q+1;endendendmodule,五、VerilogHDL的描述方式(建模方法),系统级(system):用高级语言结构实现设计模块的外部性能的模型。算法级(algorithmic):用高级语言结构实现设计算法的模型。RTL级(RegisterTransferLevel):描述数据在寄存器之间流动和如何处理这些数据的模型。门级(gate-level):描述逻辑门以及逻辑门之间的连接的模型。开关级(switch-level):描述器件中三极管和储存节点以及它们之间连接的模型。,用VerilogHDL描述的电路就称为该设计电路的VerilogHDL模型,建模层次:不同抽象级别的VerilogHDL模型,描述方式:1、结构描述:描述元器件间连接关系:例化2、数据流描述:描述电路数据流行为:assign3、行为描述:描述功能:always4、混合描述:Verilog允许多描述方式共存于同一模块。,75,1结构描述,1)基于库元件的结构描述,门类型关键字();,门级描述即直接调用门原语进行逻辑的结构描述。以门级为基础的结构描述所建立的硬件模型不仅是可仿真的,也是可综合的;一个逻辑网络由许多逻辑门和开关组成,用逻辑门的模型来描述逻辑网络最直观!门类型的关键字有26个,常用的有9个:not,and,nand,or,nor,xor,xnor,buf,bufif1,bufif0,notif1,notif0(各种三态门)调用门原语的句法:,注1:在端口列表中输出信号列在最前面;注2:门级描述不适于描述复杂的系统!,门级描述,可省略!,例:采用结构描述方式描述硬件电路moduleexample_4_11(y,a,b,c);inputa,b,c;outputy;wires1,s2,s3;not(s1,a);nand(s2,c,s1);nand(s3,a,b);nand(y,s2,s3);endmodule,2)基于设计模块的结构描述任何用VerilogHDL描述的电路设计模块(module),均可用模块例化语句,例化一个元件,来实现电路系统的设计。模块例化语句格式与逻辑门例化语句格式相同,具体格式:设计模块名(端口列表);其中,“例化电路名”是用户为系统设计定义的标识符,相当于系统电路板上为插入设计模块元件的插座,而端口列表相当于插座上引脚名表,应与设计模块的输入/输出端口一一对应。用模块例化方式设计1位全加器。在1位全加器设计中,需要事先设计一个半加器,然后用例化方式将两个半加器和一个或门连接成全加器。,使用两个半加器模块构造全加器moduleHA(A,B,S,C);inputA,B;outputS,C;assignS=AB;assignC=A/或门实例语句endmodule,端口列表小结:端口列表是把例化元件端口与连接实体端口连接起来。端口列表的方法有两种:,位置关联法:位置关联法要求端口列表中的引脚明称与设计模块的输入、输出端口一一对应。名称关联法:名称关联法的格式如下:(.设计模块端口名(连接实体端口名),);端口列表中的位置可以是任意的。,例:用模块例化方式设计8位计数译码器电路系统。在8位计数译码系统电路设计中,需要事先设计一个4位二进制加法计数器cnt4e模块和一个七段数码显示器的译码器Dec7s模块,然后用例化方式将这两种模块组成计数译码系统电路。,4位二进制加法计数器的设计4位二进制加法计数器的符号如图,CLK是时钟输入端;CLR复位控制输入端,当CLR=1时计数器被复位,输出Q3.0=0000;ENA是使能控制输入端,当ENA=1时,计数器才能工作;COUT是进位输出端,当输出Q3.0=1111时,COUT=1。modulecnt4e(clk,clr,ena,cout,q);inputclk,clr,ena;output3:0q;outputcout;reg3:0q;always(posedgeclrorposedgeclk)beginif(clr)q=b0000;elseif(ena)q=q+1;endassigncout=endmodule,七段数码显示器的译码器Dec7s的元件符号如图A3.0是4数据输入端,将接至cnt4e的输出端Q3.0;Q7.0是译码器的输出端,提供七段数码显示数据。moduleDec7s(a,q);output7:0q;input3:0a;reg7:0q;always(a),begincase(a)0:q=8b00111111;1:q=8b00000110;2:q=8b01011011;3:q=8b01001111;4:q=8b01100110;5:q=8b01101101;6:q=8b01111101;7:q=8b00000111;8:q=8b01111111;9:q=8b01101111;10:q=8b01110111;11:q=8b01111100;12:q=8b00111001;13:q=8b01011110;14:q=8b01111001;15:q=8b01110001;endcaseendendmodule,计数译码系统电路的设计计数译码系统电路是用QuartusII的图形编辑方式设计出来的。,用模块例化方式将cnt4e和dec7s两种模块组成计数译码系统电路cnt_dec7s的源程序:modulecnt_Dec_v(clk,clr,ena,cout,q);inputclk,clr,ena;output15:0q;outputcout;reg15:0q;wire3:0q1,q2;wirex;cnt4eu1(clk,clr,ena,x,q1);cnt4eu2(clk,clr,x,cout,q2);dec7su3(q1,q7:0);dec7su4(q2,q15:8);endmodule,2数据流建模,例:数据流描述的一位全加器moduleFA_Df(A,B,Cin,Sum,Cout);inputA,B,Cin;outputSum,Cout;assignSum=ABCin;assignCout=(A,数据流建模的时延assign#2Sum=ABCin;#2表示右侧表达式的值延迟两个时间单位赋给Sum;时间单位是多少?由谁来决定?timescale1ns/100psFPGA设计中的时延仅在功能仿真时有效,不影响实际电路生成。,数据流建模注意事项:1)wire型变量如果不赋值,默认值为z;2)数据流建模没有存储功能,不能保存数据;3)wire型变量只能在声明时赋值或者assing语句赋值;4)assign语句并发执行,实际的延迟又物理芯片的布线结果决定。,三、VerilogHDL行为描述VerilogHDL行为描述方式是通过行为语句来描述电路要实现的功能,表示输入输出间转换的行为,不涉及具体结构。行为建模是一种“高级”的描述方式。行为描述既可以描述简单的逻辑门,又可以描述复杂的数字系统,乃至微处理器。既可以描述组合逻辑电路,又可以描述时序逻辑电路。例112选1数据选择器,用VerilogHDL对它做行为描述。,modulemux_2_to_1(a,b,out,outbar,sel);/这是一个2选1数据选择器,名为mux_2_to_1inputa,b,sel;/定义模块的输入端口为a,b和seloutputout,outbar;/定义模块的输出端口为out和outbarassignout=sel?a:b;/如果sel=1,将a赋值给out/如果sel=0,将b赋值给outassignoutbar=out;/将out取反后赋值给outbarendmodule/模块描述结束,例3线-8线译码器的VerilogHDL设计moduledecode3_8(a,b,c,y,en);/这是一个3线-8线译码器,名为decode3_8inputa,b,c,en;/定义模块的输入端口output7:0y;/定义模块的输出端口为outreg7:0y;always(enoraorborc)beginif(en)y=8b11111111;elsebegincase(c,b,a)3b000:y=8b11111110;3b001:y=8b11111101;3b010:y=8b11111011;3b011:y=8b11110111;3b100:y=8b11101111;3b101:y=8b11011111;3b110:y=8b10111111;3b111:yb01001)cout,sum=sum+4b0110;endendmodule,保存的文件名与设计模块名相同,扩展名为.v。完成BCD_adder的编译后,用QuartusII的File菜单下“CreateDefaultSymbol”命令,对BCD_adder编译生成元件图形符号。图中细的输入/输出线表示单信号线,粗的输入/输出线表示多信号总线。,编辑BCD_Dec7源程序如下:moduleBCD_Dec7(a,q);input3:0a;output7:0q;reg7:0q;always(a)begincase(a)4b0000:q=8b00111111;4b0001:q=8b00000110;4b0010:q=8b01011011;4b0011:q=8b01001111;4b0100:q=8b01100110;4b0101:q=8b01101101;4b0110:q=8b01111101;4b0111:q=8b00000111;4b1000:q=8b01111111;4b1001:q=8b01101111;,4b1010:q=8b01110111;4b1011:q=8b01111100;4b1100:q=8b00111001;4b1101:q=8b01011110;4b1110:q=8b01111001;4b1111:qb01001)cout,sum=sum+4b0110;endendmodule,(6)4输入端与非门moduleexample_4_4(y,a,b,c,d);/4inputnandoutputy;inputa,b,c,d;assign#1y=(aendmodule,(8)条件操作符moduleexample_4_3(y,a,b,c);inputa,b,c;outputy;assigny=a?b:c;endmodule(9)8线3线优先编码器moduleexample_4_6(y,a);output2:0y;input7:0a;reg2:0y;alwaysabeginif(a7)y=3b111;elseif(a6)y=3b110;elseif(a5)y=3b101;elseif(a4)y=3b100;elseif(a3)y=3b011;elseif(a2)y=3b010;elseif(a1)y=3b001;elsey=3b000;endendmodule,(10)4选1数据选择器moduleexample_4_7(z,a,b,c,d,s1,s2);outputz;inputa,b,c,d;inputs1,s2;regz;always(s1,s2)begincase(s1,s2)2b00:z=a;2b01:z=b;2b10:z=c;2b11:z=d;endcaseendendmodule,(11)8位奇偶校验器moduleexample_4_8(a,out);outputout;input7:0a;regout;integern;always(a)beginout=0;for(n=0;n8;n=n+1)out=outan;endendmodule,第四章Quartus的VerilogHDL建模与仿真,常用的PLD设计EDA工具软件,PLD设计EDA工具软件的分类由芯片制造商提供提供了一个CPLD/FPGA的完全集成化设计环境,只支持本公司PLD,可以使用几种不同的EDA工具完成整个设计!即不同的阶段选用不同的工具,常用的PLD设计EDA工具软件,由专业EDA软件商提供第三方设计软件,支持多家公司的PLD,Quartus简介,Quartus美国Altera公司自行设计的第四代PLD开发软件目前最新版本:9.11.完全集成化的设计工具将设计输入、逻辑综合、布局与布线、仿真、时序分析、器件编程集成在同一开发环境下;可加快动态调试,缩短开发周期。,特点,2.与器件结构无关其核心Compiler支持Altera所有PLD器件:StratixII,CycloneII,StratixGX,MAXII,StratixHardCopy,Stratix,Cyclone,APEXII,APEX20K/E/C,Excalibur,inputA1,A2,A3,E;/定义输入信号output7:0Y;/定义输出信号wireA1not,A2not,A3not,Enot;/定义电路内部节点信号notn1(A1not,A1),/非门调用n2(A2not,A2),n3(A3not,A3),n4(Enot,E);andn5(Y0,A3not,A2not,A1not,Enot),/与门调用n6(Y1,A3not,A2not,A1,Enot),n7(Y2,A3not,A2,A1not,Enot),顶层实体名称,设计实例1,续上页n8(Y3,A3not,A2,A1,Enot),/与门调用n9(Y4,A3,A2not,A1not,Enot),n10(Y5,A3,A2not,A1,Enot),n11(Y6,A3,A2,A1not,Enot),n12(Y7,A3,A2,A1,Enot);endmodule,设计实例1,2行为描述(程序如下)module_3to8decode(Y,E,A);output7:0Y;/输出信号input2:0A;/输入信号inputE;/输入使能assignY=(E=0)?(1b1Add/RemoveFilesinProject”命令将其他工作目录中的文件添加到本工程中。,#,#,建立工程环境,4.指定目标器件类型在“Family”栏中选择“CycloneII”,其它选项默认即可;单击“Next”;,器件系列名称,具体器件列表,器件涮选信息,#,建立工程环境,5.指定第三方对代码进行综合和仿真的工具(需要时)在安装QuartusII软件时,缺省的情况下安装了综合和仿真工具,也可以选择QuartusII软件支持的其它综合或仿真工具。在弹出的对话框中,选择

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论