您好,欢迎访问三七文档
第3章组合逻辑设计硬件描述语言定义:采用形式化的方法对数字电路和系统进行描述的计算机语言。过程:建模、编程、编译、仿真、综合、下载。用一套特制的表意符号(其意义可以解释的)去表示概念、判断、推理,获得它们的形式结构,从而把对概念、判断、推理的研究,转化为对形式符号表达式系统的研究的方法。第3章组合逻辑设计VHDL的起源及基本特点VHDL原为美国国防部的一种标准,1987年被IEEE协会接受为硬件描述语言标准,即VHDL-87,1993年又被IEEE进一步修改,即VHDL-93。基本特点:1、多种系统描述方法:比较抽象的系统行为描述、比较具体的数据流描述、更加具体的逻辑结构描述。2、支持层次化设计(自顶向下、自底向上)方法3、支持各种不同类型的数字电路和系统的设计。TTL、CMOS、CPLD、FPGA……4、VHDL具备很强的可移植性,本身的生命周期长。3.6VHDL硬件描述语言第3章组合逻辑设计完整的VHDL源程序通常可以包含5个部分:实体(Entity)结构体(Architecture)配置(Configuration)库(Library)包集合(Package)VHDL的基本结构VHDL文件库,程序包实体结构体配置说明语句功能描述语句VHDL程序的基本结构第3章组合逻辑设计例:2输入与非门的VHDL描述(数据流描述)ENTITYnand2IS--实体描述PORT(i1,i2:INBIT;--输入信号名o1:OUTBIT);--输出信号名ENDnand2;ARCHITECTUREdelayedOFnand2IS--结构体描述BEGINo1=i1NANDi2AFTER5NS;--电路的数据流描述ENDdelayed;实体:也称端口,用于定义模块I/O接口,包括I/O信号的名称、属性、数据类型。VHDL描述结构体:对硬件内部结构或性能的具体描述第3章组合逻辑设计实体描述格式:ENTITY实体名ISPORT(信号名:属性信号类型;…………………..;信号名:属性信号类型);END实体名;属性:INOUTBUFFERINOUT信号类型:BIT(预定义的)BIT_VECTORBOOLEANINTEGERCHARACTER...第3章组合逻辑设计结构体描述格式:ARCHITECTURE结构体名OF实体名IS声明部分BEGIN描述部分END结构体名;例:2输入与非门的另一种描述(行为描述)ARCHITECTUREanotherOFnand2ISBEGINPROCESS(i1,i2)--行为描述一定要有该语句BEGINIFi1=‘1’ANDi2=‘1’THENo1=‘0’AFTER5NS;ELSEo1=‘1’AFTER5NS;ENDIF;ENDPROCESS;ENDanother;behavioraldataflowstructural第3章组合逻辑设计丰富而灵活的自定义数据类型1、枚举类型格式:TYPE类型名IS(值列表);举例:TYPEbit_logicIS(‘0’,’1’,’Z’,’X’);TYPEtraffic_lightIS(red,green,yellow);第3章组合逻辑设计2、数组类型格式:TYPE数组名ISARRAY(范围)OF基类型;举例:TYPEregisterISARRAY(0TO7)OFBIT;TYPEregister_1ISARRAY(7DOWNTO0)OFBIT;TYPEromISARRAY(0TO7)OFregister;TYPEromISARRAY(0TO7,0TO7)OFBIT;对数组的操作:整体/部分赋值,如:SIGNALarr_1,arr_2:register_1;arr_1=“10110110”;arr_1=(‘1’,’0’,’1’,’1’,’0’,’1’,’1’,’0’);arr_2=arr_1;arr_2(0TO3)=“1011”;第3章组合逻辑设计3、子类型格式:SUBTYPE子类型名IS已定义父类型名[范围];范围可用RANGE子句,例:SUBTYPEdecimalISINTEGERRANGE0TO9;也可以直接限定数组的大小来确定子类型的范围:TYPEstd_logic_vectorISARRAY(naturalrange)OFstd_logicSUBTYPEdatabusISstd_logic_vector(15DOWNTO0);子类型也可以由已定义的枚举类型来定义:TYPEweekdayIS(Sun,Mon,Tue,Wed,Thu,Fri,Sat);SUBTYPEworkdayISweekdayRANGE(MonTOFri);第3章组合逻辑设计VHDL运算符算术运算符关系运算符逻辑运算符连接运算符+(加)=(等于)AND(与)&(连接)-(减)/=(不等于)OR(逻辑或)连接符将多个对象或矢量连接成位数更大的矢量*(乘)(小于)NAND(与非)/(除)=(小于等于)NOR(或非)**(乘方)(大于)XOR(异或)MOD(求模)=(大于等于)XNOR(同或)REM(求余)其中‘=’也用于表示信号的赋值操作NOT(非)ABS(求绝对值)第3章组合逻辑设计了解:逻辑运算符的优先级(低高):XOR、NOR、NAND、OR、AND、NOT注意:与非/或非运算不满足结合率:(aNANDb)NANDc/=aNAND(bNANDC)应用:&可以连接任意数组:TYPEregisterISARRAY(7DOWNTO0)OFBIT;SIGNALreg_1,reg_2:register;reg_1=reg_1(6DOWNTO0)®_1(7);--左环移reg_1®_2;--形成16位数组第3章组合逻辑设计VHDL标识符(Identifier)1)VHDL不区分大小写;2)标识符一定要以字母开头;3)下划线不能放在结尾;4)下划线不能连用。由英文字母“a”~“z”、“A”~“Z”、数字“0”~“9”以及下划线“_”组成。使用时应注意以下几点:如a_h_1、show_new_state、COUNTER_A有效。a%h_1、show-new-state、COUNTER_、T__1非法。第3章组合逻辑设计常量定义:格式:CONSTANT常量名:类型名:=常量值;CONSTANTarray_size:INTEGER:=16;--整数类型CONSTANTgate_delay:TIME:=50ns;--时间类型变量和信号定义:VHDL可以使用变量或信号,两者区别很大VARIABLE变量名:类型名[:=初值];变量用:=赋值,表示立即起作用SIGNAL信号名:类型名[=初值];信号用=赋值,表示有延迟信号声明在子程序外部,使用内外皆可变量声明、使用只能在子程序内部,外部不可用!第3章组合逻辑设计LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYxor_sigISPORT(a,b,c:INstd_logic;x,y:OUTstd_logic);ENDxor_sig;ARCHITECTUREsig_archOFxor_sigISSIGNALd:std_logic;BEGINsig:PROCESS(a,b,c)BEGINd=a;x=cXORd;d=b;y=cXORd;ENDPROCESS;END;举例:结果:x=cXORby=cXORb改为变量:x=cXORay=cXORb最后一句起作用第3章组合逻辑设计VHDL库和包一、库:存储程序包和数据集合体的仓库,便于在其他设计中,随时对其进行直接引用。包括系统库(设计库)、资源库(IEEE库和用户库)。系统库:VHDL本身预定义的库,包括STD库和WORK库。STD库:系统的标准库,包括系统本身预定义的类型和文件操作,如BIT、BIT_VECTOR等。WORK库:是用户的工作库,保存当前设计。STD、WORK库对用户透明,不需要说明。第3章组合逻辑设计资源库IEEE库是IEEE认可的标准库,主要包括:1.STD_LOGIC类型以及有关函数的定义(封装在STD_LOGIC_1164包中)。2.有符号数和无符号数的算术、逻辑、关系运算符号。3.类型转换函数。用户库是VHDL软件厂商开发的库。如Altera库、LPM库等。使用资源库时,必须显式声明。第3章组合逻辑设计•VHDL库中可以包含很多内容,以程序包的形式组织在一起,如,IEEE库中有标准逻辑包STD_LOGIC_1164。•包是VHDL对预定义类型、函数、部件进行封装的一种形式。•结构:PACKAGE程序包名IS程序包说明部分END程序包名;PACKAGEBODY程序包名IS程序包体描述END程序包名;常量、信号、类型、函数或过程、部件说明对预定义内容的具体描述二、包第3章组合逻辑设计包定义举例:1.STD库的standard程序包中的部分内容:packageSTANDARDistypeBOOLEANis(FALSE,TRUE);typeBITis('0','1');typeCHARACTERIS(…);typeINTEGERisrange-2147483648to2147483647;typeBIT_VECTORisarray(NATURALrange)ofBIT;subtypeNATURALisINTEGERrange0toINTEGER'HIGH;…endSTANDARD;第3章组合逻辑设计2.Ieee库的std_logic_1164包中的部分内容:PACKAGEstd_logic_1164ISTYPEstd_ulogicIS('U',--Uninitialized'X',--ForcingUnknown'0',--Forcing0'1',--Forcing1'Z',--HighImpedance'W',--WeakUnknown'L',--Weak0'H',--Weak1'-'--Don'tcare);第3章组合逻辑设计TYPEstd_ulogic_vectorISARRAY(NATURALRANGE)OFstd_ulogic;FUNCTIONresolved(s:std_ulogic_vector)RETURNstd_ulogic;SUBTYPEstd_logicISresolvedstd_ulogic;TYPEstd_logic_vectorISARRAY(NATURALRANGE)OFstd_logic;FUNCTIONand(l,r:std_logic_vector)RETURNstd_logic_vector;FUNCTIONnand(l,r:std_logic_vector)RETURNstd_logic_vector;FUNCTIONor(l,r:std_logic_vector)RETURNstd_logic_vector;FUNCTIONnor(l,r:std_logic_vector)RETURNstd_logic_vector;FUNCTIONxor(l,r:std_logic_vector)RETURNstd_logic_vector;FUNCTIONxnor(l,r:std_logic_vector)RETURNstd_logic_vector;FUNCTIONnot(l:std_logic_vector)RETURNstd_logic_vector;…ENDstd_logic_1164;第3章组合逻辑设计STD_LOGIC类型(9值逻辑)TYPEstd_logicIS(‘0’,--强0‘1’,--强1‘X’,--强未知的‘Z’,--高阻态(最弱)‘U’,--未初始化的(最强)‘W’,--弱未知的‘L’,--弱0‘H’,--弱1‘-’,--无关状态)前4有实际物理意义,其他是为与模拟环境相容保留的第3章组合逻辑设计•声明库,如LIBRARYIEEE;•声明使用库中的哪个包,如果使用全部内容则用ALL声明,否则要声明具体内容。格式:USE库名.程序包名.ALL(或子
本文标题:VHDL语言基础
链接地址:https://www.777doc.com/doc-7122749 .html