VHDL语言语法基础VHDL入门例:2选1选择器设计abmux21ysLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALLENTITYmux21ISPORT(a,b:INSTD_LOGIC;s:INSTD_LOGIC;y:OUTSTD_LOGIC);ENDmux21;ARCHITECTUREoneOFmux21ISBEGINy=aWHENs=‘0’ELSEbWHENS=‘1’;ENDone;IEEE库使用说明器件mux21的外部接口信号说明,PORT相当于器件的引脚,这一部分称为实体器件mux21的内部工作逻辑描述,即为实体描述的器件功能结构,称为结构体例:锁存器设计LATCHDQENALIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYLatchISPORT(D:INSTD_LOGIC;ENA:INSTD_LOGIC;Q:OUTSTD_LOGIC);ENDlatch;ARCHITCTUREoneOFlatchISSIGNALsig_save:STD_LOGIC;BEGINPROCESS(D,ENA)BEGINIFENA=‘1’THENsig_save=D;ENDIF;Q=sig_save;ENDPROCESS;ENDone;锁存器的实体,定义了此器件的输入输出引脚及其信号属性定义信号进程语句结构,描述逻辑的时序方式结构体例:全加器设计1位半加器1位全加器H_ADDERacobsoH_ADDERacobsoH_ADDERacobsoF_ADDERaincoutbinsumcinainbinainacbu1u2u3sumcoutdefLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYor2ISPORT(A,B:INSTD_LOGIC;c:OUTSTD_LOGIC);ENDor2;ARCHITECTUREfulOFor2ISBEGINc=aORb;ENDfu1;LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYh_adderISPORT(a,b:INSTD_LOGIC;co,so:OUTSTD_LOGIC);ENDh_adder;ARCHITECTUREfh1OFh_adderISBEGINso=aAND(aNANDb);co=NOT(aNANDb);ENDfh1;LIBRARYIEEE;USEIEEE.STD_LOGIC-1164.ALL;ENTITYf_adderISPORT(ain,bin,cin:INSTD_LOGIC;cout,sum:OUTSTD_LOGIC);ENDf_adder;ARCHITECTUREfd1OFf_adderISBEGINCOMPONENTh_adderPORT(a,b:INSTD_LOGIC;co,so:OUTSTD_LOGIC);ENDCOMPONENT;COMPONENTor2PORT(a,b:INSTD_LOGIC;c:OUTSTD_LOGIC);ENDCOMPONENT;SIGNALd,e,f:STD_LOGIC;BEGINu1:h_adderPORTMAP(ain,bin,d,e);u2:h_adderPORTMAP(e,b,f,sum);u3:or2PORTMAP(d,f,cout);ENDfd1;元件调用声明元件连接第2章VHDL语言程序的基本结构实体构造体配置包集合库VHDL语言程序的基本结构2.1VHDL语言设计的基本单元及其构成基本单元门微处理器系统基本单元构成实体说明:规定了设计单元的输入输出接口信号或引脚。构造体:定义了设计单元的具体构造和操作(行为)。基本单元构成ENTITY名称IS接口信号说明END名称;ARCHITECTURE构造名OF实体名IS功能描述END构造名;d0d1d2q&≥&d0qd2d1一个基本设计单元的构成二选一电路--实体说明ENTITYmux2ISGENERIC(m:TIME:=1ns);PORT(d0,d1,sel:INBIT;q:OUTBIT);ENDmux2;--构造体ARCHITECTUREconnectOFmux2ISSIGNALtmp:BIT;实体:外部特性描述一个基本设计单元的构成(续)二选一电路BEGIN;PROCESS(d0,d1,sel);VARIABLEtmp1,tmp2,tmp3:BIT;BEGIN;tmp1=d0ANDsel;tmp2=d1AND(NOTsel);tmp3=tmp1ORtmp2;tmp=tmp3;q=tmpAFTERm;ENDPROCESS;ENDconnect;构造体:内部特性描述,即功能描述基本单元构成ENTITY名称IS接口信号说明END名称;ARCHITECTURE构造名OF实体名IS功能描述END构造名;d0d1d2q&≥&d0qd2d12.1.1实体描述实体在电路描述中主要是说明该电路的输入输出关系。此外,实体还定义电路名称及构造体中所使用的参数等。实体描述的一般书写格式如下:ENTITY实体名IS[类属参数说明];[端口说明]END实体名;2.1.1实体描述实体描述从“ENTITY实体名IS”开始,至“END实体名”结束。实际上,对VHDL语言而言,大写和小写都一视同仁,不加区分。这里这样规定仅仅是为了增加程序的可读性而已。建议将VHDL的标识符或基本语句关键词以大写方式表示,而由设计者添加的内容可以以小写方式来表示。2.1.1实体描述实体名:电路的名称,可以大、小英文字母,但第一个字母一定要用英文字母。为使结构更突出,便于阅读,常用小写命名。2.1.1实体描述类属参数说明:必须放在端口说明之前,用于指定参数。GERERIC([常数名:数据类型[:设定值]);如上例中的GENERIC(m:TIME=1ns)。该语句指定了构造体内m的值为1ns。这样,语句q=tmpAFTERm;表示tmp经1ns延迟才送到q。在这个例子中,GENERIC利用类属参数为q建立一个延迟值。2.1.1实体描述端口说明:是对基本设计实体(单元)与外部接口的描述,也可以说是对外部引脚信号的名称,数据类型和输入、输出方向的描述。其一般书写格式如下:PORT(端口名{,端口名}:方向数据类型名;┇端口名{,端口名}:方向数据类型名);端口说明端口名每个外部引脚的名称,通常用一个或几个英文字母或者用英文字母加数字命名。端口方向:表示信号传递方向。IN输入,只读模式OUT输出,单向赋值模式INOUT双向,可以读或写BUFFER具有读功能的输出模式,可以读或写,只能有一个驱动源LINKAGE不指定方向,无论哪一个方向都可以连接数据类型在VHDL语言中有10种数据类型,但在逻辑电路设计中只用到两种:BIT和BIT_VECTOR。2.1.1实体描述结束说明END实体名2.1.1实体描述上面是常用的实体一般结构,实际上在实体结构中还可以包含一些内容如附录所示。ENTITY实体名IS[类属参数说明]――GENERIC[端口说明]――端口信号说明[说明语句;]BEGIN{断言语句|被调用过程|被调用过程语句}END实体名;2.1.2构造体说明构造体结构:ARCHITECTURE构造体名OF实体名IS[定义语句]内部信号,常数,数据类型,函数等的定义;BEGIN[并行处理语句];END构造体名;2.1.2构造体说明构造体命名:英文字母、数字、_构造体的名称可以由设计者自由命名。但是在大多数的文献和资料中,通常把构造体的名称命名为behavioral(行为),dataflow(数据流)、rtl(寄存器传输)或者structural(结构)当一个实体具有多个结构体时,结构体的取名不可相重。2.1.2构造体说明定义语句–位置在ARCHITECTURE和BEGIN之间。–对用于构造体内部所使用的信号、常数、数据类型和函数等进行定义–例:SIGNALcont:STD_LOGIC_VECTOR(3DOWNTO0);SIGNALco_1:STD_LOGIC;CONSTANTm:TIME:=2ns;TYPESTATEIS(INIT,DAD,ADC,SRF,FRF);2.1.2构造体说明并行处理语句位置:处于语句BEGIN和END之间所有的并行处理语句都可以写在这里面。并行处理语言在仿真时是并发工作的,和前后次序无关,从而描述了构造体内部逻辑电路的并发功能。有5种语句结构–块语句(BLOCK)–进程语句(PROCESS)–信号赋值语句–子程序调用语句–元件例化语句都是并行语句内部可能包含顺序语句2.1.2构造体说明构造体结束END构造体名;2.1.3举例ENTITYmux2ISPORT(d0,d1,sel:INBIT;q:OUTBIT);ENDmux2;ARCHITECTUREconnectOFmux2ISSIGNALtmp1,tmp2,tmp3:BIT;BEGIN;tmp1<=d0ANDsel;tmp2<=d1AND(NOTsel);tmp3<=tmp1ORtmp2;q<=tmp3;ENDconnect;在语句中,符号“<=”表示传送(或代入)的意思,即将逻辑运算结果送q输出。代入语句只要代入符号右边信号有变化就启动一次。并发执行小测验基本单元必须包含哪两部分?各有什么作用?端口说明中的方向有哪几种,其中BUFFER和OUT有何区别?BUFFER和INOUT有何区别?前面举了两个二选一的例子,两个程序有何不同之处?构造体的信号说明位置在什么地方?以下说明哪个是正确的?ARCHITECTUREconnectOFmux2ISSIGNALtmp1,tmp2,tmp3:BIT;BEGINtmp1<=d0ANDsel;tmp2<=d1AND(NOTsel);tmp3<=tmp1ORtmp2;q<=tmp3;ENDconnect;ARCHITECTUREconnectOFmux2ISBEGINSIGNALtmp1,tmp2,tmp3:BIT;tmp1<=d0ANDsel;tmp2<=d1AND(NOTsel);tmp3<=tmp1ORtmp2;q<=tmp3;ENDconnect;2.2结构体的3种子结构设计方法采用多个进程(Process)的子结构方式采用多个模块(Block)的子结构方式采用多个子程序(Subprograms)的子结构方式2.2.1采用多进程描述复杂结构体的方法进程语句的结构进程语句的顺序性进程的启动与执行过程结构体的多进程组织方法进程语句的结构[进程名]:PROCESS(信号1,信号2,…)变量说明BEGINENDPROCESS(进程名)在单个进程的结构体描述中,进程名可以省略。进程语句带的几个信号表称为敏感量表。单进程的结构体描述ENTITYmuxISPORT(d0,d1,d2,sel:INbit;)g:OUTbit);ENDmux;ARCHITECTUREconnectOFmuxISBEGINP1:process(d0,d1,sel)VARIABLEx1,x2,x3:bit;BEGINx1:=d0ANDsel;x2:=d1AND(NOTsel);x3:=x1ORx2;ENDprocessp1;ENDconnect;实体名:mux结构体名:connect进程名P1变量x1、x2、x3是进程内部变量d1、d2、d3是敏感变量进程语句的顺序性在系统仿真时,Process结构中的语句结构按顺序一条一条向下执行。进程的启动和执行过程进程的敏感量表中的信号无论哪一个发生变化都将启动process进程。一旦启动,进程中的程序将从上到下顺序执行一遍,由新变化的量引导进程产生变化结果输出当进程的最后一个语句执行完成后,就返回到进程开始处,等待敏感量的新变化,引发进程的再一次执行。结构体中的多进程每个结构体中可以有多个进程语句,多个进程语句之间是并行关系例