您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 电子设计/PCB > VHDL语言第5章可编程逻辑
第2章VHDL硬件描述语言(一)一、基本结构二、语言要素三、顺序语句四、并行语句一、基本结构1、实体2、结构体基本结构VHDL设计VHDL文件库及程序包(Packages)声明在设计或实体中将用到的常数,数据类型,元件及子程序等实体(Entities)声明到其实体及其设计的接口,即定义本设计的输入/出端口结构体(Architectures)定义了实体的实现。即电路的具体描述基本结构/举例说明例、一个一位二进制全加器设计。半加器全加器H_ADDERABSOCOABCOSO&&H_ADDERABSOCOH_ADDERABSOCOAINBINCYSUMCINDEFABCF_ADDERAINBINSUMCYCIN基本结构/举例说明/VHDL语言描述或门LIBRARYIEEE;--库,程序包调用USEIEEE.STD_LOGIC_1164.ALL;ENTITYMYOR2IS--实体OR2描述PORT(A,B:INSTD_LOGIC;C:OUTSTD_LOGIC);ENDMYOR2;ARCHITECTUREART1OFMYOR2ISBEGIN--结构体描述C=AORB;ENDART1;ABC基本结构/举例说明/VHDL语言描述半加器描述LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYH_ADDERIS--实体H_ADDER描述PORT(A,B:INSTD_LOGIC;CO,SO:OUTSTD_LOGIC);ENDH_ADDER;ARCHITECTUREART2OFH_ADDERISBEGIN--结构体描述SO=(AORB)AND(ANANDB);CO=NOT(ANANDB);ENDART2;H_ADDERABSOCO基本结构/举例说明/VHDL语言描述全加器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYF_ADDERIS--实体F_ADDER描述PORT(AIN,BIN,CIN:INSTD_LOGIC;CY,SUM:OUTSTD_LOGIC);ENDF_ADDER;ARCHITECTUREART3OFF_ADDERISCOMPONENTH_ADDER--元件调用声明PORT(A,B:INSTD_LOGIC;CO,SO:OUTSTD_LOGIC);ENDCOMPONENT;基本结构/举例说明/VHDL语言描述COMPONENTMYOR2PORT(A,B:INSTD_LOGIC;C:OUTSTD_LOGIC);ENDCOMPONENT;SIGNALD,E,F:STD_LOGIC;--信号申明BEGIN--元件连接申明U1:H_ADDERPORTMAP(A=AIN,B=BIN,CO=D,SO=E);U2:H_ADDERPORTMAP(A=E,B=CIN,CO=F,SO=SUM);U3:OR2PORTMAP(A=D,B=F,C=CY);ENDART3;基本结构/举例说明/VHDL语言描述元件连接对照U1:H_ADDERPORTMAP(A=AIN,B=BIN,CO=D,SO=E);U2:H_ADDERPORTMAP(A=E,B=CIN,CO=F,SO=SUM);U3:MYOR2PORTMAP(A=D,B=F,C=CY);H_ADDERABSOCOH_ADDERABSOCOAINBINCYSUMCINDEFABC基本结构/举例说明/VHDL语言描述说明该设计包括三个实体OR2——2输入或门;H_ADDER——半加器;F_ADDER——全加器。其中:F-ADDER是顶层实体,其它两个实体(子实体)为顶层实体服务。每个实体含有:库、程序包和结构体。结构体对实体功能进行定义。实体定义的元件可以通过COMPONENT…ENDCOMPONENT元件调用申明,PORTMAP()元件例化,信号SIGNAL的定义以及引脚连线进行元件装配。基本结构/实体VHDL设计VHDL文件程序包(Packages)声明在设计或实体中将用到的常数,数据类型,元件及子程序等实体(Entities)声明到其他实体及其他设计的接口,即定义本设计的输入/出端口结构体(Architectures)定义了实体的实现。即电路的具体描述基本结构/实体实体是一个设计实体的表层设计单元,其功能是对这个设计实体与外部电路进行接口描述,它规定了设计单元的输入输出接口信号或引脚,是设计实体经封装后对外的一个通信界面。VHDL表达的所有设计均与实体有关,实体是设计中最基本的模块。实体中定义了该设计所需的输入/输出信号,信号的输入/输出类型被称为端口模式,同时,实体中还定义他们的数据类型。实体说明单元的常用语句结构如下:ENTITY实体名IS【GENERIC(类属表);】【PORT(端口表);】——常用END实体名;基本结构/实体/类属类属(GENERIC)类属参数为设计实体和外部环境之间提供静态数据传输通道,实际上就是整个设计中所要使用的一个常数。一般用来规定端口的大小、I/O引脚的指派、实体中子元件的数目和实体的定时特性。类属参数说明语句必须放在端口说明语句前面。类似于C语言中的“#define”。书写格式如下:GENERIC(常数名:数据类型[:=设定值];常数名:数据类型[:=设定值];…常数名:数据类型[:=设定值]);注意:最后一个类属定义后面,不可加“;”。基本结构/实体/端口端口(PORT)书写格式如下:PORT(端口名:端口模式数据类型;…端口名:端口模式数据类型);端口名是赋给每个外部引脚信号的名称,由设计者自行命名,在实体中唯一;端口模式常用的有4种:IN:只可输入的引脚;OUT:只可输出的引脚;INOUT:双向引脚;BUFFER:输出引脚,但同时用作内部输入和反馈。注意:最后一个端口定义后面,不可加“;”。基本结构/实体/举例说明ENTITYMYENTISGENERIC(WIDTH:INTEGER:=16);PORT(CLK:INSTD_LOGIC;ADBUS:OUTSTD_LOGIC_VECTOR(WIDTH-1DOWNTO0));ENDMYENT;如果改变了类属WIDTH的值,结构体中所有相关的定义将同时改变,由此将改变整个设计实体的硬件结构。基本结构/结构体VHDL设计VHDL文件程序包(Packages)声明在设计或实体中将用到的常数,数据类型,元件及子程序等实体(Entities)声明到其他实体及其他设计的接口,即定义本设计的输入/出端口结构体(Architectures)定义了实体的实现。即电路的具体描述基本结构/结构体结构体是对实体功能的具体描述,因此它一定要跟在实体的后面。一个完整的、能够被综合实现的VHDL设计必须有一个实体和对应的结构体。一个实体和其对应结构体可构成一个完整的VHDL设计。一个实体可对应一个结构体或多个结构体。语句格式如下:ARCHITECTURE结构体名OF实体名IS【定义语句】内部信号、常数、数据类型,函数等的定义GEGIN【并行处理语句】【进程语句】END结构体名;实体名必须是所在设计实体的名字,自行命名结构体名。基本结构/结构体结构体(Architecture)声明区(Declarations)信号声明;声明用于该结构体的类型,常数,元件,子程序。并发语句信号赋值(SignalAssignments)计算结果,并赋值给信号元件例化(ComponentInstantiations)调用另一个实体所描述的电路。即元件调用过程调用(ProcedureCalls)调用一个预先定义好的一个算法。进程(Processes)定义一个新算法实现电路功能。进程中只有顺序语句,语句按放置的顺序执行。基本结构/结构体/举例说明ARCHITECTUREbehaveOFcntm16ISBEGINco=‘1’when(qcnt=“1111”andci=‘1’)else‘0’;PROCESS(clk,nreset)--进程(敏感信号表)BEGINIF(nreset='0')THEN--顺序语句qcnt=0000;ELSIF(clk'EVENTANDclk='1')THENif(ci='1')thenqcnt=qcnt+1;endif;ENDIF;ENDPROCESS;ENDbehave;基本结构/实体与结构体之间的关系整个芯片→一个完整的VHDL设计程序;芯片外部(外壳+引脚)→实体引脚→端口芯片内部(电路)→结构体芯芯二、语言要素1、文字规则2、数据对象3、数据类型4、运算符文字规则/关键字关键字——VHDL中有许多保留字,它们在程序中有特殊的含义。设计者不能使用这些关键字作为自己的标识符。ABSDOWNTOLIBRARYPOSTPONEDSRLACCESSSLSELINKAGEPROCEDURESUBTYPEAFTERELSIFLITERALPROCESSTHENALIASENDLOOPPURETOALLENTITYMAPRANGETRANSPORTANDEXITMODRECORDTYPEARCHITECTUREFILENANDREGISTERUNAFFECTEDARRAYFORNEWREJECTUNITSASSERTFUNCTIONNEXTREMUNTILATTRIBUTEGENERATENORREPORTUSEBEGINGENERICNOTRETURNVARIABLEBLOCKGROUPNULLROLWAITBODYGUARDEDOFRORWHENBUFFERIFONSELECTWHILEBUSIMPUREOPENSEVERITYWITHCASEINORSIGNALXNORCOMPONENTINERTIALOTHERSSHAREDXORCONFIGURATIONINOUTOUTSLACONSTANTISPACKAGEALLDISCONNECTLABELPORTSRA文字规则/标识符标识符——由大小写英文字母、阿拉伯数字和下划线组成使用时注意以下几点:VHDL不区分大小写;标识符必须以字母开头;下划线不能放在结尾;下划线不能连用;不能使用关键字;不同的综合系统还定义了各自的子程序,子程序名也不能作为标识符。例如:合法:rs_a_1、show_new_state、COUT不合法:2as、_ab1、a__cd、out文字规则/数字型文字整数文字:都是十进制的数例如:456,134E2(=13400),8_123_456_789,0注意:“_”——为了提高数字的可读性,相当于一个空的间隔符,没有其它意义,不影响数值。实数文字:十进制数+小数点例如:23.4,1_234.567,123.45E-2(=1.2345),0.0以数制基数表示的文字:基数:2~16进制基数(十进制数)#数值文字#E指数(十进制数,若是0可省略),例如10#170#=170×1002#1111_1110#=254×2016#E#E1=16#E0#=224=14×16116#F.01#E+2=16#F01#=3841.00文字规则/字符串型文字字符——用‘’引起来的ASCII字符,可以是数值、符号和字母。字符串——是一维的字符数组,必须放在“”中。VHDL中有两种类型的字符串:文字字符串——用“”引起来的一串文字。例如“VHDLSYMBOL”、“abcd”数位字符串——也称位矢量、位串,是被“”引起来的数字序列,其前加上数制基数说明符,实际上是预定义的数据类型BIT的一维数组。例如二进制:B“0110_1110”八进制:O“117”十六进制:X“FFE0”文字规则/下标名及下标段名下标名——指示数组型变量或信号的某一个元素;类似于C语言中的数组元素的表示方法。下标段名——指示数组型变量或信号的某一段元素。语句格式如下:数组型变量或信号名(表达式1【TO/DOWNTO表达式2】);
本文标题:VHDL语言第5章可编程逻辑
链接地址:https://www.777doc.com/doc-50849 .html