资源描述
一、一、VHDLVHDL的主要构件的主要构件VHDL语言参数部分参数部分程序包程序包接口部分接口部分设计实体设计实体描述部分描述部分结构体结构体VHDL语言基础语言基础EDA技术的基础知识技术的基础知识Exampleentityand_2isport(a,b:instd_logic;Y:outstd_logic);endand_2;The Entity describesthe inputs and outputsarchitecturedataflowofand_2isbeginY=aandb;enddataflow;The Architecture describes the boxentitynameVHDL大小写不敏感LibraryIEEE;useIEEE.std_logic_1164.all;LibraryPackageAND_2abY1.实体(实体(Entity)n描述此设计功能输入输出端口(描述此设计功能输入输出端口(Port)n在层次化设计时,在层次化设计时,Port为模块之间的接口为模块之间的接口n在芯片级,则代表具体芯片的管脚在芯片级,则代表具体芯片的管脚A3.0B3.0equalEntityeqcomp4isport(a,b:instd_logic_vector(3downto0);equal:outstd_logic);endeqcomp4;端口的模式端口的模式n输入(输入(Input)n输出(输出(Output)n双向(双向(Inout):可代替所有其他模式,):可代替所有其他模式,但降低了程序的可读性,一般用于与但降低了程序的可读性,一般用于与CPU的数据总线接口的数据总线接口n缓冲(缓冲(Buffer):与):与Output类似,但允类似,但允许该管脚名作为一些逻辑的输入信号,许该管脚名作为一些逻辑的输入信号,可以返回到实体内部。可以返回到实体内部。端口说明端口说明PORT(端口名端口名,端口名端口名:方向方向数据类型数据类型;:端口名端口名,端口名端口名:方向方向数据类型数据类型);端口方向端口方向实实体体INOUTINOUTBUFFERLINKAGE2.结构体(结构体(Architecture)n描述实体硬件的互连关系、数据的传输描述实体硬件的互连关系、数据的传输和变换以及动态行为。和变换以及动态行为。n语法结构:语法结构:ARCHITECTURE结构体名结构体名OF实体名实体名IS结构体说明语句结构体说明语句BEGIN功能描述语句功能描述语句END结构体名结构体名n结构体有三种描述方式结构体有三种描述方式n行为描述行为描述(behavioral)n数据流描述数据流描述(dataflow)n结构化描述结构化描述(structural)行为描述行为描述Architecturebehavioralofeqcomp4isbegincomp:process(a,b)beginifa=bthenequal=1;elseequal=0;endif;endprocesscomp;endbehavioral;高层次的功能描述,高层次的功能描述,不必考虑在电路中不必考虑在电路中到底是怎样实现的。到底是怎样实现的。数据流描述数据流描述描述输入信号经过怎样的变换得到输出信号描述输入信号经过怎样的变换得到输出信号Architecturedataflow1ofeqcomp4isbeginequal=1whena=belse0;enddataflow1;Architecturedataflow2ofeqcomp4isbeginequal=not(a(0)xorb(0)andnot(a(1)xorb(1)andnot(a(2)xorb(2)andnot(a(3)xorb(3);enddataflow2;当当a和和b的宽度发生的宽度发生变化时,需要修改变化时,需要修改设计,当宽度过大设计,当宽度过大时,设计非常繁琐时,设计非常繁琐结构描述结构描述architecturestructofeqcomp4isbeginU0:xnor2portmap(a(0),b(0),x(0);U1:xnor2portmap(a(1),b(1),x(1);U2:xnor2portmap(a(2),b(2),x(2);U3:xnor2portmap(a(3),b(3),x(3);U4:and4portmap(x(0),x(1),x(2),x(3),equal);endstruct;类似于电路的网络表,将各个器类似于电路的网络表,将各个器件通过语言的形式进行连接,与件通过语言的形式进行连接,与电路有一一对应的关系。电路有一一对应的关系。一般用于大规模电路的层次化设一般用于大规模电路的层次化设计时。计时。三种描述方式的比较三种描述方式的比较描述方式描述方式优点优点缺点缺点适用场合适用场合结构化描结构化描述述连接关系清连接关系清晰,电路模晰,电路模块化清晰块化清晰电路不易理解、电路不易理解、繁琐、复杂繁琐、复杂电路层次化设电路层次化设计计数据流描数据流描述述布尔函数定布尔函数定义明白义明白不易描述复杂不易描述复杂电路,修改不电路,修改不易易小门数设计小门数设计行为描述行为描述电路特性清电路特性清楚明了楚明了进行综合效率进行综合效率相对较低相对较低大型复杂的电大型复杂的电路模块设计路模块设计3.库、程序包和配置库、程序包和配置设设计计库库IEEE库库预定义库预定义库(隐含打开隐含打开)STD库库STANDARD(隐含说明隐含说明)TEXTIO(用用USE说明说明)WORK库库资资源源库库(用用LIBRARY)其它库其它库STD_LOGIC_1164STD_LOGIC_ARITHSTD_LOGIC_UNSIGNEDNUMERIC_STDNUMERIC_BITMATH_REALMATH_COMPLEXVITAL_TIMINGVITAL_PRIMITIVE(1)库、程序包库、程序包程序包放在库中,使用时用程序包放在库中,使用时用USE语句说明语句说明库、程序包说明语句:库、程序包说明语句:Library库名库名;use库名库名.程序包名程序包名.项目名项目名;(2)配置配置一个实体可以有多个结构体描述,但是在进一个实体可以有多个结构体描述,但是在进行仿真和综合时,只能一个实体对应一个确定的行仿真和综合时,只能一个实体对应一个确定的结构体。配置语句用来确定结构体。结构体。配置语句用来确定结构体。语句格式:语句格式:CONFIGURATION配置名配置名OF实体名实体名ISFOR被选结构体名被选结构体名ENDFOR;END配置名;配置名;ENTITY描述電路的I/O介面PackageARCHITECTURE描述電路的特性和運作StructuralDataFlowBehavioral不同的描述風格二、二、VHDLVHDL的数据对象和数据类型的数据对象和数据类型1.VHDL的数据对象的数据对象类似于一种容器,接受不同数据类似于一种容器,接受不同数据类型的赋值类型的赋值常数常数信号信号变量变量数据对象数据对象常数(常数(Constant)n固定值,不能在程序中被改变固定值,不能在程序中被改变n增强程序的可读性,便于修改程序增强程序的可读性,便于修改程序n在综合后,连接到电源和地在综合后,连接到电源和地n可在可在Library、Entity、Architecture、Process中进行定义,其有效范围也相应中进行定义,其有效范围也相应限定限定n常数说明:常数说明:Constant常数名:常数名:数据类型数据类型:=表达式表达式例:例:Constantdata_bus_width:integer:=8;ConstantROM_Size:Integer:=16#FFFF#;数据对象数据对象变量(变量(Variable)n临时数据,没有物理意义临时数据,没有物理意义n只能在只能在Process和和Function中定义,中定义,必须在必须在进程和子程序的说明性区域说明进程和子程序的说明性区域说明,并只在其并只在其内部有效内部有效n要使其全局有效,先转换为要使其全局有效,先转换为Signal。n用用:=进行赋值进行赋值n变量说明:变量说明:variable变量名:变量名:数据类型数据类型n n 例:例:variable In_fetch:Boolean;n n variable result:std_logic:=0;变量赋值变量赋值n n整体赋值:整体赋值:temp:=“10101010”;temp:=x“AA”;n n逐位赋值逐位赋值:temp(7):=1;n n多位赋值多位赋值temp(7 downto 4):=“1010”;多位赋值多位赋值多位赋值多位赋值用双引号用双引号用双引号用双引号逐位赋值逐位赋值逐位赋值逐位赋值用单引号用单引号用单引号用单引号赋值标志赋值标志赋值标志赋值标志数据对象数据对象信号(信号(Signals)n代表连线,代表连线,Port也是一种信号也是一种信号n在在Entity中和中和Architecture中定义中定义n用用=进行赋值进行赋值n n保留字保留字SIGNALn信号说明:信号说明:signal信号名:信号名:数据类型数据类型;例:例:signalcount:bit_vector(3downto0):=“0011”;nsignal Enable:Bit;nsignalCLK,CLEAR:Bit:=1;信号举例信号举例nLIBRARYieee;nUSEieee.std_logic_1164.all;nENTITYsimpISnPORT(a,b,c,d:INStd_Logic;ng:OUTStd_Logic);nENDsimp;nARCHITECTURElogicOFsimpISnSIGNALe,f:Std_Logic;nBEGINne=aorb;nf=not(cord);ng=eandf;nENDlogic;a ab bc cd dg gef f端口信号端口信号端口信号端口信号在构造体内声明在构造体内声明在构造体内声明在构造体内声明的内部连接信号的内部连接信号的内部连接信号的内部连接信号信号赋值信号赋值n nSIGNALtemp:Std_Logic_Vector(7downto0);n n整体赋值整体赋值:temp=“10101010”;temp=x“AA”;n n逐位赋值逐位赋值:temp(7)=1;n n多位赋值多位赋值:n ntemp(7 downto 4)=“1010”;多位赋值多位赋值多位赋值多位赋值用双引号用双引号用双引号用双引号逐位赋值逐位赋值逐位赋值逐位赋值用单引号用单引号用单引号用单引号赋值标志赋值标志赋值标志赋值标志信号和变量的作用范围信号和变量的作用范围ARCHITECTURESIGNAL描述描述label1:PROCESS1VARIABLE描述描述label2:PROCESS2VARIABLE描述描述在进程的外面声明在进程的外面声明在进程的外面声明在进程的外面声明作用范围为全局作用范围为全局作用范围为全局作用范围为全局在进程内部说明在进程内部说明在进程内部说明在进程内部说明作用范围为进程内作用范围为进程内作用范围为进程内作用范围为进程内信号和变量的区别信号和变量的区别信号信号变量变量赋值符号赋值符号=:=功能功能电路的内部连接电路的内部连接内部数据交换内部数据交换作用范围作用范围 全局,进程和进程全局,进程和进程之间的通信之间的通信进程的内部进程的内部行为行为延迟一定时间后才延迟一定时间后才赋值赋值立即赋值立即赋值2.VHDL的数据类型的数据类型(1)标准数据类型标准数据类型(编程者可直接使用编程者可直接使用)预定义类型在预定义类型在VHDL标准程序包标准程序包STANDARD中定义,在应用中自动包含进中定义,在应用中自动包含进VHDL的源文件,的源文件,不需要不需要USE语句显示调用语句显示调用。数据类型如下:数据类型如下:1)整数()整数(INTEGER)在在VHDL语言中,整数的表示范围为语言中,整数的表示范围为21474836472147483647,即从,即从(2311)到到(2311)。2)实数()实数(REAL)实数的定义值范围为实数的定义值范围为1.0E+381.0E+38。实数有正负数,书写时一定要有小数点。例实数有正负数,书写时一定要有小数点。例如:如:1.0,+2.5,1.0E+383)位位(BIT)用用来来表表示示数数字字系系统统中中的的信信号号值值。位位值值用用字字符符0或或者者1(将将值值放放在在引引号号中中)表表示示。与与整整数数中中的的1和和0不不同同,1和和0仅仅表示一个位的两种取值。仅仅表示一个位的两种取值。4)位矢量位矢量(BIT_VECTOR)位位矢矢量量是是用用双双引引号号括括起起来来的的一一组组数数据据。例例如如:“001100”,X“00bb”。在在这这里里位位矢矢量量前前面面的的X表表示示是是十十六六进进制制。使使用用位位矢量时必须注明位宽,矢量时必须注明位宽,即数组中元素个数和排列,例如:即数组中元素个数和排列,例如:SIGNALs1:BIT_VECTOR(15DOWNTO0););5)布尔量布尔量(BOOLEAN)一个布尔量具有两种状态,一个布尔量具有两种状态,“真真”或者或者“假假”。没有数值的含没有数值的含义,也义,也不能进行算术运算不能进行算术运算。它。它能进行关系运算能进行关系运算。例如,它可以。例如,它可以在在if语句中被测试,测试结果产生一个布尔量语句中被测试,测试结果产生一个布尔量TRUE或者或者FALSE。6)字符字符(CHARACTER)用用单引号单引号括起来,括起来,如如a。区分大小写。字符包括从。区分大小写。字符包括从a到到z中中的任一个字母,从的任一个字母,从0到到9中的任一个数以及空格或者特殊字符,中的任一个数以及空格或者特殊字符,如如$,%等等。包集合等等。包集合standard中给出了预定义的中给出了预定义的128个个ASC码字符。码字符。7)字符串字符串(STRING)由由双双引引号号括括起起来来的的一一个个字字符符序序列列,也也称称字字符符矢矢量量或或字字符符串串组组。字符串常用于程序的提示和说明。字符串举例如下:字符串常用于程序的提示和说明。字符串举例如下:VATIABLEstring_1:STRING(0TO3);string_1:=“abcd”;8)时间时间(TIME)是是一一个个物物理理量量数数据据。包包含含整整数数和和单单位位两两部部分分,而而且且整整数数和和单单位位之之间间至至少少应应留留一一个个空空格格的的位位置置。例例如如55sec,2min等等。在在包包集集合合STANDARD中中给给出出了了时时间间的的预预定定义义,其其单单位位为为fs,ps,ns,s,ms,sec,min和和hr。例如:。例如:20s,100ns,3sec。在在系系统统仿仿真真时时,时时间间数数据据特特别别有有用用,用用它它可可以以表表示示信信号号延延时时,从而使模型系统能更逼近实际系统的运行环境。从而使模型系统能更逼近实际系统的运行环境。9)错误等级错误等级(SEVERITYLEVEL)用用来来表表征征系系统统的的状状态态,共共有有4种种:note(注注意意),warning(警警告告),error(出出错错),failure(失失败败)。在在系系统统仿仿真真过过程程中中可可以以用用这这4种种状状态态来来提提示示系系统统当当前前的的工工作作情情况况,从从而而使使设设计计人人员员随随时时了了解解当当前前系系统统工工作作的的情情况况,并并根根据据系系统统的的不不同同状状态态采采取相应的对策。取相应的对策。10)大大 于于 等等 于于 零零 的的 整整 数数(自自 然然 数数)(NATURAL),),正整数正整数(POSITIVE)这这两两种种数数据据是是整整数数的的子子类类,NATURAL类类数数据据为为取取0和和0以以上上的的正整数;而正整数;而POSITIVE则只能为正整数。则只能为正整数。(2)用户自定义数据类型用户自定义数据类型格式:格式:type数据类型名数据类型名is数据类型定义;数据类型定义;可以由用户定义的数据类型有:可以由用户定义的数据类型有:枚举枚举(ENUMERATED)类型;)类型;整数整数(INTEGER)类型;)类型;实数实数(REAL)、)、浮点数浮点数(FLOATING)类型;)类型;数组数组(ARRAY)类型;)类型;。枚举类型:把数据类型中的各个元素都列举出来,方便、枚举类型:把数据类型中的各个元素都列举出来,方便、直观,提高了程序可阅读性。书写格式为:直观,提高了程序可阅读性。书写格式为:Type数据类型名称数据类型名称is(元素(元素1,元素,元素2,););其中,数据类型名称和元素都是一个标识符,例如:其中,数据类型名称和元素都是一个标识符,例如:Typecoloris(blue,green,yellow,red););数据类型名称是数据类型名称是color,(元素,(元素1,元素,元素2,)是)是(blue,green,yellow,red)。)。枚举类型中所列举的元素在程序编译过程中通常是自动编枚举类型中所列举的元素在程序编译过程中通常是自动编码,编码顺序是默认的,左边第一个元素编码为码,编码顺序是默认的,左边第一个元素编码为0,以后,以后的依次加的依次加1。编码过程中自动将每一个元素转变成位矢量,。编码过程中自动将每一个元素转变成位矢量,位矢量的长度由所列举元素个数决定。如上例四个元素,位矢量的长度由所列举元素个数决定。如上例四个元素,位矢量的长度为位矢量的长度为2,编码默认值为:,编码默认值为:blue=“00”,green=“01”;Yellow=“10”;red=“11”。初始值默认为第一个值。初始值默认为第一个值。枚举类型应用举例:交通灯控制器枚举类型应用举例:交通灯控制器任务和要求:在十字路口的两个方向上各设一组红灯、任务和要求:在十字路口的两个方向上各设一组红灯、绿灯和黄灯,显示顺序为:其中一个方向绿灯、黄灯、绿灯和黄灯,显示顺序为:其中一个方向绿灯、黄灯、红灯,另一个方向是红灯、黄灯、绿灯。其中绿灯、黄红灯,另一个方向是红灯、黄灯、绿灯。其中绿灯、黄灯、红灯的持续时间分别是灯、红灯的持续时间分别是20S、5S、25S。程序如下:。程序如下:“IEEE.STD_LOGIC”九态数值模型如下:九态数值模型如下:U初始值;初始值;X不定态;不定态;1逻辑逻辑1;0逻辑逻辑0;Z高阻态;高阻态;W弱信号不定;弱信号不定;L弱信号弱信号0H弱信号弱信号1;不可能情况不可能情况。(3)IEEE标准数据类型标准数据类型“stdlogic”和和“stdlogicvector”三、三、VHDLVHDL语言的操作符和表达式语言的操作符和表达式VHDL运算符运算符n逻辑运算符逻辑运算符AND、OR、NAND、NOR、XOR、NOTn关系运算符关系运算符=、/=、=n算术运算符算术运算符+、*、/n并置并置(连接连接)运算符运算符&1.逻辑运算符逻辑运算符在在VHDL语言中,共有语言中,共有6种逻辑运算符,他们分别是:种逻辑运算符,他们分别是:NOT取反;取反;AND与;与;OR或;或;NAND与非;与非;NOR或非;或非;XOR异或。异或。这这6种逻辑运算符可以对种逻辑运算符可以对“STD_LOGIC”和和“BIT”等逻辑等逻辑型数据、型数据、“STD_LOGIC_VECTOR”逻辑型数组及逻辑型数组及布尔数据布尔数据进行逻辑运算。进行逻辑运算。必须注意,运算符的左边和右边,以及代必须注意,运算符的左边和右边,以及代入的信号的数据类型必须是相同的入的信号的数据类型必须是相同的。2.算术运算符算术运算符VHDL语言中有语言中有5类算术运算符,他们分别是:类算术运算符,他们分别是:求和操作符:求和操作符:(加)、(减)(加)、(减)求积操作符求积操作符:*(乘)、(乘)、/(除)、(除)、MOD(求模)、(求模)、REM(取余)(取余)符号操作符:符号操作符:(正)、(负)(正)、(负)混合操作符:混合操作符:*(指数)、(指数)、ABS(取绝对值)(取绝对值)移位操作符:移位操作符:SLL(逻辑左移)、(逻辑左移)、SRL(逻辑右移)、(逻辑右移)、SLA(算术左移)、(算术左移)、SRA(算术右移)、(算术右移)、ROL(逻辑循环左移)、(逻辑循环左移)、ROR逻辑循环右移)逻辑循环右移)3.关系运算符关系运算符VHDL语言中有语言中有6种关系运算符,他们分别是:种关系运算符,他们分别是:=等于;等于;/=不等于;不等于;小于;小于;大于;大于;=大于等于;大于等于;4.并置运算符并置运算符&连接连接SIGNALg,h,i:STD_LOGIC;SIGNALc,d,e:STD_LOGIC_VECTOR(1TO0););d=i&NOTh;元素与元素并置,形成长度为元素与元素并置,形成长度为2的数组的数组a=c&d;数组与数组并置,形成长度为数组与数组并置,形成长度为4的数组的数组5.VHDL操作符的优先顺序操作符的优先顺序运算符运算符优先级优先级NOT,ABS,*最高优先级最高优先级*,/,MOD,REM+(正号),(负号)(正号),(负号)+,&SLL,SLA,SRL,SRA,ROL,ROR=,/=,=AND,OR,NAND,NOR,XOR,XNOR最低优先级最低优先级四、四、VHDLVHDL基本语句基本语句1.顺序描述语句顺序描述语句(1)信号赋值语句和变量赋值语句)信号赋值语句和变量赋值语句目标信号目标信号=表达式表达式目标变量:表达式目标变量:表达式(2)If语句语句语句格式:语句格式:if条件条件1then第第1组顺序语句;组顺序语句;elseif条件条件2then第第2组顺序语句;组顺序语句;elseif条件条件nthen第第n组顺序语句;组顺序语句;else第第n+1组顺序语句;组顺序语句;endif;IF语句的应用语句的应用n八八三优先级编码器真值表三优先级编码器真值表输输入入输出输出d7d6d5d4d3d2d1d0q2q1q00 xxxxxxx11110 xxxxxx110110 xxxxx1011110 xxxx10011110 xxx011111110 xx0101111110 x00111111110000nnLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYpriority_encoderISPORT(d:INSTD_LOGIC_VECTOR(7DOWNTO0);q:OUTSTD_LOGIC_VECTOR(2DOWNTO0);ENDpriority_encoder;ARCHITECTUREexample_ifOFpriority_encoderISBEGINPROCESS(d)BEGINIF(d(7)=0)THENq=”111”;ELSIF(d(6)=0)THENq=”110”;ELSIF(d(5)=0)THENq=”101”;ELSIF(d(4)=0)THENq=”100”;ELSIF(d(3)=0)THENq顺顺序序处处理理语句;语句;n:WHEN条条件件表表达达式式的的值值=顺顺序序处处理理语句;语句;ENDCASE;nWHEN中的条件有下述四种方式:中的条件有下述四种方式:WHEN值值=顺序处理语句;顺序处理语句;WHEN值值值值值值=顺顺序序处处理理语句;语句;若干可列的值。若干可列的值。WHEN值值TO值值=顺顺序序处处理理语语句句;某个区间的值。某个区间的值。WHENOTHERS=顺序处理语句;顺序处理语句;LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux4ISPORT(a,b,d0,d1,d2,d3:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDmux4;例:用例:用CASE语句设计四选一电路语句设计四选一电路ARCHITECTUREexample_caseOFmux4ISSIGNALsel:INTEGERRANGE0TO3;BEGINPROCESS(a,b,d0,d1,d2,d3)BEGINsel=0;IF(a=1)THENsel=sel+1;ENDIF;IF(b=1)THENselqqqq=d3;ENDCASE;ENDPROCESS;ENDexample_case;CASE语句设计的四选一电路实现语句设计的四选一电路实现n上述程序所描述的是一个平衡结构的四选一电路上述程序所描述的是一个平衡结构的四选一电路.FGHOBUFabd0d1d2d3q用用IF语句设计四选一电路语句设计四选一电路LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux4ISPORT(a,b,d0,d1,d2,d3:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDmux4;ARCHITECTUREexample_ifOFmux4ISBEGINPROCESS(a,b,d0,d1,d2,d3)BEGINIF(a=0ANDb=0)THENq=d0;ELSIF(a=1ANDb=0)THEq=d1;ELSIF(a=0ANDb=1)THENq=d2;ELSIF(a=1ANDb=1)THENq=d3;ENDIF;ENDPROCESS;ENDexample_if;用用IF语句设计四选一电路是权电路语句设计四选一电路是权电路GFd0abd1d2d3yF2.并行描述语句并行描述语句n1进程内部所有的语句都是顺序执行的,进程内部所有的语句都是顺序执行的,n2.进程和进程之间是并行执行的,进程和进程之间是并行执行的,n3进程的启动由进程的启动由PROCESS语句的敏感信号量表中的信语句的敏感信号量表中的信号量触发,也可以由号量触发,也可以由WAIT语句触发。语句触发。(1)进程语句进程语句(进程名:进程名:)process(敏感信号表)敏感信号表)变量说明语句;变量说明语句;begin一组顺序语句;一组顺序语句;endprocess(进程名进程名);当进程中没有敏感信号表时,进程语句中必须当进程中没有敏感信号表时,进程语句中必须有其他形式的敏感信号激励;而当进程中有敏有其他形式的敏感信号激励;而当进程中有敏感信号表时,进程语句中不允许再出现感信号表时,进程语句中不允许再出现wait、waitfor、waituntil和和waiton中的任何一种敏感中的任何一种敏感信号激励语句,否则出错。信号激励语句,否则出错。用进程设计用进程设计D触发器触发器nLIBRARYIEEEUSEIEEE.STD_LOGIC_1164.ALL;ENTITYdff4ISPORT(clk,d,clr,pset:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDdff4;ARCHITECTURErtlOFdff4ISBEGINclrpsetDQclknPROCESS(clk,pset,clr)BEGINIF(clr=0)THENq=0;ELSIF(pset=0)THENq=1;ELSIF(clkEVENTANDclk=1)THENq=d;ENDIF;ENDPROCESS;ENDrtl;n利用进程语句设计一位加法器利用进程语句设计一位加法器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYhalf_adderISPORT(a,b:INSTD_LOGIC;sum,carry:OUTSTD_LOGIC);ENDhalf_adder;nARCHITECTUREbehavOFhalfadderISBEGINPROCESS(a,b)BEGINsum=aXORbAFTER5nS;carry=aANDbAFTER5nS;ENDPROCESS;ENDbehav;进程语句的启动进程语句的启动进程语句有两种工作状态:进程语句有两种工作状态:等待状态等待状态和和执行执行状态状态。当敏感信号表中的信号没有变化时,。当敏感信号表中的信号没有变化时,进程处于等待状态;当敏感信号表中的信号进程处于等待状态;当敏感信号表中的信号有变化时,进程处于执行状态,将顺序执行有变化时,进程处于执行状态,将顺序执行进程中的语句。当最后一个语句执行完后,进程中的语句。当最后一个语句执行完后,就返回进程语句的开始,等待下一次敏感信就返回进程语句的开始,等待下一次敏感信号表中的信号变化。号表中的信号变化。n(4)时间等待时间等待WAITFOR时间表达式;时间表达式;例如例如:WAITFOR20nS;同步点在延时同步点在延时20nS后,后,WAITONclk,interruptFOR5nS;当信号当信号clk或或interrupt变化变化5nS后启动后启动进程。进程。(2)并发信号赋值语句)并发信号赋值语句信号赋值语句在进程内部出现时,是顺序描述语句,信号赋值语句在进程内部出现时,是顺序描述语句,在进程之外出现时,以并发语句的形式出现。是并在进程之外出现时,以并发语句的形式出现。是并行执行的,执行顺序与书写顺序无关。行执行的,执行顺序与书写顺序无关。LIBRARYIEEEUSEIEEE.STD_LOGIC_1164.ALL;ENTITYgateISPORT(a,b:INSTD_LOGIC);x,y,z:OUTSTD_LOGIC);ENDgate;ARCHITECTUREbehaveOFgateISBEGINx=aANDb;y=aORb;z=aXORb;ENDbehave;GATE例:产生右图电路符号的例:产生右图电路符号的VHDL程序程序(3)条件信号赋值语句条件信号赋值语句目标信号目标信号=表达式表达式1when条件条件1else表达式表达式2when条件条件2else表达式表达式3when条件条件3else表达式表达式n1when条件条件n1else表达式表达式n;AND_GATELIBRARYIEEEUSEIEEE.STD_LOGIC_1164.ALL;ENTITYand_gateISPORT(a,b:INSTD_LOGIC);x:OUTSTD_LOGIC);ENDand_gate;ARCHITECTURErtlOFand_gateISBEGINx=0whena=0andb=0elsex=0whena=0andb=1elsex=0whena=1andb=0else1;ENDrtl;(4)选择信号赋值语句选择信号赋值语句with表达式表达式select目标信号目标信号=表达式表达式1when条件条件1,表达式表达式2when条件条件2,表达式表达式3when条件条件3,表达式表达式nwhen条件条件n,MMUX4LIBRARYIEEEUSEIEEE.STD_LOGIC_1164.ALL;ENTITYmmux4ISPORT(d0,d1,d2,d3:INSTD_LOGIC;sel:instd_logic_vector(1downto0);q:OUTSTD_LOGIC);ENDmmux4;ARCHITECTURErtlOFmmux4ISBEGINwithselselectqa(0),c=x(0),b=b(0);在端口元在端口元素中定义素中定义输入输入在端口元在端口元素中定义素中定义输出输出IC器件器件AIC器件器件BIC器件器件C连接导线连接导线连接导线连接导线用固定逻辑的用固定逻辑的IC硬件实现硬件实现VHDL组件组件VHDL组件组件VHDL组件组件信号信号信号信号用用VHDL结构实现结构实现VHDL组件示例组件示例2输入与门输入与门XAB的的VHDL程序程序ENTITY and_gate IS PORT(A,B:IN BIT;X:OUT BIT);END ENTITY and_gate;ARCHITECTURE andfunction OF and_gate ISBEGIN X=A AND B;END ARCHITECTURE andfunction;ENTITY OR_gate IS PORT(A,B:IN BIT;X:OUT BIT);END ENTITY OR_gate;ARCHITECTURE ORfunction OF OR_gate ISBEGIN XIN1,B=IN2,X=OUT1);G2:AND_gatePORTMAP(A=IN3,B=IN4,X=OUT2);G3:OR_gatePORTMAP(A=OUT1,B=OUT2,X=OUT3);SIGNALOUT1,OUT2:BIT;ENDARCHITECTURELogicoperation;(五)时钟信号的(五)时钟信号的VHDL描述方法描述方法1.时钟边沿的描述时钟边沿的描述(1)上升沿)上升沿CLKCLKeventCLKeventANDCLK=1VHDL属性描述:属性描述:(2)下降沿)下降沿CLKCLKeventclkEVENTANDCLK=0VHDL属性描述:属性描述:2.时序电路中进程敏感信号时序电路中进程敏感信号例:例:D触发器功能描述触发器功能描述LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYdff1ISPORT(clk,d:INSTD_LOGIC;q:OUT_LOGIC);ENDdff1;ARCHITECTURErtlOFdff1ISBEGINPROCESS(clk)BEGINIF(clkEVENTANDclk=1)THENq=d;ENDIF;ENDPROCESS;ENDrtl;3.同步复位、置位信号同步复位、置位信号PROCESS(时钟信号名)(时钟信号名)BEGINIF时钟边沿表达式时钟边沿表达式AND复位复位/置位表达式置位表达式THEN复位置位语句;复位置位语句;ELSE其他执行语句;其他执行语句;ENDIF;ENDPROCESS;LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYdff1ISPORT(clk,d,clr:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDdff1;ARCHITECTURErtlOFdff1ISBEGINPROCESS(clk)BEGINIF(clkEVENTANDclk=1)THENIF(clr=1)THENq=0;ELSEq=d;ENDIF;ENDIF;ENDPROCESS;ENDrtl;4.异步复位、置位信号异步复位、置位信号LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYdff2ISPORT(clk,d,clr:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDdff2;ARCHITECTURErtlOFdff2ISBEGINPROCESS(clk,clr)BEGINIF(clr=1)THENq=0;ELSEIF(clkEVENTANDclk=1)THENq=d;ENDIF;ENDIF;ENDPROCESS;ENDrtl;
展开阅读全文