




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1 VHDL VHDL 编编 程程 基基 础础邯郸人才网 2目目 录录3.1 概述概述 3.2 VHDL设计实体的基本结构设计实体的基本结构 3.3 VHDL语言要素语言要素 3.4 VHDL顺序语句顺序语句 3.5 VHDL并行语句并行语句 3.6 VHDL的库和程序包的库和程序包 3.7 VHDL设计流程设计流程 33.1 概概 述述 3.1.1 VHDL语言简介语言简介 VHDL是超高速集成电路硬件描述语言(是超高速集成电路硬件描述语言(Very High Speed Integrated Circuit Hardware Description language)。是标准化程度最高的硬
2、件描述语言。目前流行)。是标准化程度最高的硬件描述语言。目前流行的的EDA工具软件全部支持工具软件全部支持VHDL,VHDL是现代电子设计师必是现代电子设计师必须掌握的硬件设计计算机语言。须掌握的硬件设计计算机语言。(1) 逻辑描述层次逻辑描述层次:一般的硬件描述语言可以在三个层次上:一般的硬件描述语言可以在三个层次上进行电路描述,层次由高到低依次可分为进行电路描述,层次由高到低依次可分为行为级行为级、RTL级级(寄寄存器转换级存器转换级)和和门电路级门电路级。VHDL语言是一种高级描述语言,语言是一种高级描述语言,适用于行为级和适用于行为级和RTL级的描述,最适于描述电路的行为;级的描述,最
3、适于描述电路的行为;(2) 设计要求设计要求:VHDL进行电子系统设计时可以不了解电路的进行电子系统设计时可以不了解电路的结构细节,设计者所做的工作较少;结构细节,设计者所做的工作较少;Verilog和和ABEL语言进语言进行电子系统设计时需了解电路的结构细节,设计者需做大量行电子系统设计时需了解电路的结构细节,设计者需做大量的工作。的工作。4 53.2 VHDL设计实体的基本结构设计实体的基本结构 通过通过VHDL描述一个二输入或门的实例,来说明描述一个二输入或门的实例,来说明VHDL的基本结构。的基本结构。例例1 一个二输入或门的一个二输入或门的VHDL程序如下:程序如下:LIBRARY
4、IEEE; - IEEE库的使用说明库的使用说明USE IEEE.STD_LOGIC_1164.ALL; -实体描述器件的输入、输出端口和数实体描述器件的输入、输出端口和数据类型用的程序包据类型用的程序包ENTITY OR2 IS -实体实体OR2的说明的说明 PORT(A,B: STD_LOGIC; -端口声明,端口声明,A、B是标准逻辑位类型的输是标准逻辑位类型的输入端口入端口 C:OUT STD_LOGIC); -声明声明C是标准逻辑位类型的输出端口是标准逻辑位类型的输出端口END ENTITY OR2;ARCHITECTURE ONE OF OR2 IS -实体实体OR2的结构体的结构
5、体ONE 的说明的说明 BEGIN C=A OR B; -二输入或门逻辑功能描述二输入或门逻辑功能描述END ARCHITECTURE ONE;或门程序包含了或门程序包含了VHDL的库、程序包、实体说明和结构体几个主要部分。语句的库、程序包、实体说明和结构体几个主要部分。语句C=A OR B为或门电路的逻辑描述,其他都作为或门对外部端口的描述,设为或门电路的逻辑描述,其他都作为或门对外部端口的描述,设计实体定义了或门外部界面后,其他的设计就可以直接调用这个或门实体。计实体定义了或门外部界面后,其他的设计就可以直接调用这个或门实体。63.2.1 VHDL程序设计举例程序设计举例1设计思路设计思路
6、 以以全加器为例全加器为例例例2 全加器可以由两个全加器可以由两个1位的半加器构成。位的半加器构成。1位半加器的端口位半加器的端口信号信号A 和和B分别是分别是2位相加的二进制输入信号,位相加的二进制输入信号,SO是相加和的是相加和的输出信号,输出信号,CO是进位输出信号,左边的门电路结构构成了右是进位输出信号,左边的门电路结构构成了右边的半加器边的半加器H_ADDER。7图中,全加器图中,全加器 F_ADDER内部的功能结构是由内部的功能结构是由3个逻辑器件个逻辑器件构成的,即由两个半加器构成的,即由两个半加器U1、U2和一个或门和一个或门U3连接而成。连接而成。1 位全加器逻辑原理图位全加
7、器逻辑原理图 82. VHDL源程序源程序1) 或门的逻辑描述或门的逻辑描述LIBRARY IEEE; - IEEE库的使用说明库的使用说明 USE IEEE.STD_LOGIC_1164.ALL;-实体描述器件的输入、输出端口和数据类型用的程序包实体描述器件的输入、输出端口和数据类型用的程序包ENTITY or2 IS -实体实体or2的说明的说明 PORT(a,b:IN STD_LOGIC; -端口声明,端口声明,a、b是标准逻辑位类型的输入端口是标准逻辑位类型的输入端口 c: OUT STD_LOGIC); -声明声明c是标准逻辑位类型的输出端口是标准逻辑位类型的输出端口END ENTI
8、TY or2;ARCHITECTURE art1 OF or2 IS -实体实体or2的结构体的结构体art1的说明的说明 BEGIN c=a OR b;END ARCHITECTURE art1; 92) 半加器的逻辑描述半加器的逻辑描述 LIBRARY IEEE; - IEEE库的使用说明库的使用说明 USE IEEE.STD_LOGIC_1164.ALL; ENTITY h_adder IS -实体实体h_adder的说明的说明 PORT(a,b:IN STD_LOGIC; co,so:OUT STD_LOGIC); END ENTITY h_adder; ARCHITECTURE ar
9、t2 OF h_adder IS - 实体实体h_adder的结构体的结构体art2的说明的说明 BEGIN so=(a OR b) AND (a NAND b); coain,b=bin,co=d,so=e); -名称映射法名称映射法 U2:h_adder PORT MAP(a=e,b=cin,co=f,so=sum); -名字关联方式名字关联方式 U3:or2 PORT MAP(a=d,b=f,c=cout); END ARCHITECTURE art3; 123. 说明及分析说明及分析(1) 整个设计包括三个设计实体,分别为整个设计包括三个设计实体,分别为or2、h_adder和和f_a
10、dder,其中实体,其中实体f_adder为顶层实体。三个设计实体均包为顶层实体。三个设计实体均包括三个组成部分:括三个组成部分:库、程序包使用说明,实体说明和结构体说库、程序包使用说明,实体说明和结构体说明明。这三个设计实体既可以作为一个整体进行编译、综合与存。这三个设计实体既可以作为一个整体进行编译、综合与存档,也可以各自进行独立编译、独立综合与存档,或被其他的档,也可以各自进行独立编译、独立综合与存档,或被其他的电路系统所调用。电路系统所调用。 (2) 实体实体 or2定义了或门定义了或门or2的引脚信号的引脚信号a、b(输入输入)和和c(输输出出),结构体,结构体art1描述了输入与输
11、出信号间的逻辑关系,将输描述了输入与输出信号间的逻辑关系,将输入信号入信号a、b相或后传给输出信号端相或后传给输出信号端c,由此实体和结构体描述,由此实体和结构体描述一个完整的或门元件。一个完整的或门元件。13(3) 实体实体h_adder及对应的结构体及对应的结构体art2描述了一个半加器。是描述了一个半加器。是由一个与非门、一个非门、一个或门和一个与门连接而成由一个与非门、一个非门、一个或门和一个与门连接而成的,其逻辑关系来自于半加器真值表。在的,其逻辑关系来自于半加器真值表。在VHDL中,逻辑中,逻辑算符算符NAND、NOT、OR和和AND分别代表分别代表“与非与非”、“非非”、“或或”
12、和和“与与”4种逻辑运算关系。种逻辑运算关系。(4) 在全加器接口逻辑在全加器接口逻辑VHDL描述中,描述中,1位二进制全加器位二进制全加器f_adder的原理图,实体的原理图,实体f_adder定义了引脚的端口信号属定义了引脚的端口信号属性和数据类型。其中,性和数据类型。其中,ain和和bin分别为两个输入的相加位,分别为两个输入的相加位,cin为低位进位输入,为低位进位输入,cout 为进位输出,为进位输出,sum为为1位和输位和输出。其对应的结构体出。其对应的结构体art3的功能是利用的功能是利用COMPONENT声声明语句和明语句和COMPONENT例化语句将上面由两个实体例化语句将上
13、面由两个实体or2和和h_adder描述的独立器件,按照图描述的独立器件,按照图3.2全加器内部逻辑原全加器内部逻辑原理图中的接线方式连接起来。理图中的接线方式连接起来。14(5) 在结构体在结构体art3中,中,COMPONENTEND COMPONENT 语句结构对所要调用的或门和半加器两元件作语句结构对所要调用的或门和半加器两元件作了声明了声明(COMPONENT DECLARATION),并由,并由SIGNAL语语句定义了三个信号句定义了三个信号d、e和和f,作为中间信号转存点,以利于几,作为中间信号转存点,以利于几个器件间的信号连接。个器件间的信号连接。“PORT MAP( )”语句
14、称为元件例化语句语句称为元件例化语句(COMPONENT INSTANTIATION)。所谓例化,在电路板上,相当于往上装。所谓例化,在电路板上,相当于往上装配元器件;在逻辑原理图上,相当于从元件库中取了一个元配元器件;在逻辑原理图上,相当于从元件库中取了一个元件符号放在电路原理图上,并对此符号的各引脚进行连线。件符号放在电路原理图上,并对此符号的各引脚进行连线。例化也可理解为元件映射或元件连接,例化也可理解为元件映射或元件连接,MAP是映射是映射的意思。的意思。例如,语句例如,语句“U2:h_adder PORT MAP(a=e,b=cin,co=f,so=sum)”表示将实体表示将实体h_
15、adder描述的元件描述的元件U2的的引脚信号引脚信号a、b、co和和so分别连向外部信号分别连向外部信号e、cin、f和和sum。符号符号“=”表示信号连接。表示信号连接。 15(6) 实体实体f_adder引导的逻辑描述也是由三个主要部分构引导的逻辑描述也是由三个主要部分构成的,即库、实体和结构体。从表面上看来,库的部分仅包成的,即库、实体和结构体。从表面上看来,库的部分仅包含一个含一个IEEE标准库和打开的标准库和打开的IEEE.STD_LOGIC_1164.ALL程序包。但实际上,从结构体的描述中可以看出,其对外部程序包。但实际上,从结构体的描述中可以看出,其对外部的逻辑有调用的操作,
16、这类似于对库或程序包中的内容作了的逻辑有调用的操作,这类似于对库或程序包中的内容作了调用。因此,库结构部分还应将上面的或门和半加器的调用。因此,库结构部分还应将上面的或门和半加器的VHDL描述包括进去,作为工作库中的两个待调用的元件。描述包括进去,作为工作库中的两个待调用的元件。由此可见,库结构也是由此可见,库结构也是VHDL程序的重要组成部分。程序的重要组成部分。 163.2.2 VHDL程序的基本结构程序的基本结构 完整的完整的VHDL程序程序(设计实体设计实体)具有固定的结构。应包括三个基本组成部具有固定的结构。应包括三个基本组成部分:分:库、程序包使用说明库、程序包使用说明,实体说明实
17、体说明和和实体对应的结构体说明实体对应的结构体说明。 库、程序包使用说明用于打开本设计实体将要用到的库、程序包;库、程序包使用说明用于打开本设计实体将要用到的库、程序包; 实体说明用于描述该设计实体与外界的接口信号说明,是可视部分;实体说明用于描述该设计实体与外界的接口信号说明,是可视部分; 结构体说明用于描述该设计实体内部工作的逻辑关系。结构体说明用于描述该设计实体内部工作的逻辑关系。 在一个实体中,可以含有一个或一个以上的结构体,而在每一个结构体在一个实体中,可以含有一个或一个以上的结构体,而在每一个结构体中又可以含有一个或多个进程以及其他的语句。中又可以含有一个或多个进程以及其他的语句。
18、 实体还可以有配置说明语句。配置说明语句主要用于以层次化的方式对实体还可以有配置说明语句。配置说明语句主要用于以层次化的方式对特定的设计实体进行元件例化,或是为实体选定某个特定的结构体。特定的设计实体进行元件例化,或是为实体选定某个特定的结构体。 17VHDL程序设计基本结构程序设计基本结构 库、程序包使用说明配置(CONFIGURATION)结构体(ARCHITECTURE)实体(ENTITY)PORT 端口说明结构体说明GENERIC 类属说明体实计设结构体功能描述3.2.2 VHDL程序的基本结构程序的基本结构18库、程序包库、程序包 根据根据VHDL语法规则,在语法规则,在VHDL程序
19、中使用的文字、数据对象、数程序中使用的文字、数据对象、数据类型都需要预先定义。为了方便用据类型都需要预先定义。为了方便用VHDL编程,编程,IEEE将预定义的数将预定义的数据类型、元件调用声明据类型、元件调用声明(Declaration)及一些常用子程序收集在一起,及一些常用子程序收集在一起,形成程序包,供形成程序包,供VHDL设计实体共享和调用。设计实体共享和调用。 若干个程序包则形成库,常用的库是若干个程序包则形成库,常用的库是IEEE标准库。因此,在每标准库。因此,在每个设计实体开始都有打开库或程序包的语句。例如个设计实体开始都有打开库或程序包的语句。例如 LIBRARY IEEE; U
20、SE IEEE.STD_LOGIC_1164.ALL; 表示设计实体中被描述器件的输入、输出端口和数据类型将要用表示设计实体中被描述器件的输入、输出端口和数据类型将要用到到IEEE标准库中的标准库中的STD_LOGIC_1164程序包。程序包。193.2.3 实体实体(ENTITY) 实体实体(ENTITY)是设计实体中的重要组成部是设计实体中的重要组成部分,是一个完整的、独立的语言模块。它相当于分,是一个完整的、独立的语言模块。它相当于电路中的一个器件或电路原理图上的一个元件符电路中的一个器件或电路原理图上的一个元件符号。号。 实体由实体声明和结构体组成。实体声明部实体由实体声明和结构体组成
21、。实体声明部分指定了设计单元的输入输出端口或引脚,是设分指定了设计单元的输入输出端口或引脚,是设计实体经封装后对外的一个通信界面,是外界可计实体经封装后对外的一个通信界面,是外界可以看到的部分。以看到的部分。 结构体用来描述设计实体的逻辑结构和逻辑结构体用来描述设计实体的逻辑结构和逻辑功能。由功能。由VHDL语句构成,是外界看不到的部分。语句构成,是外界看不到的部分。一个实体可以拥有一个或多个结构体。一个实体可以拥有一个或多个结构体。201实体语句结构实体语句结构实体声明部分的常用语句结构如下:实体声明部分的常用语句结构如下: ENTITY 实体名实体名 IS GENERIC(类属表类属表);
22、 PORT(端口表端口表); END ENTITY 实体名实体名; 实体声明单元必须以语句实体声明单元必须以语句“ENTITY 实体名实体名IS”开始,开始,以语句以语句“END ENTITY 实体名实体名;”结束,结束,实体名是设计者自己给设计实体的命名,可作为其他实体名是设计者自己给设计实体的命名,可作为其他 设计实体对该设计实体进行调用时用。中间在方括号内的语句设计实体对该设计实体进行调用时用。中间在方括号内的语句描述,在特定的情况下并非是必须的。描述,在特定的情况下并非是必须的。 21 2类属类属(GENERIC)说明语句说明语句 类属类属(GENERIC)参数声明必须放在端口声明之前
23、,参数声明必须放在端口声明之前,用于指定如用于指定如矢量位数、器件延迟时间矢量位数、器件延迟时间等参数。类属声明的等参数。类属声明的一般书写格式如下:一般书写格式如下: GENERIC(常数名;数据类型常数名;数据类型:设定值:设定值 ;常数名:数据类型;常数名:数据类型:设定值:设定值 );例例: GENERIC(m:TIME=1.0ns); - m是一个值为是一个值为1.0ns的时间参数的时间参数 Temp1=d0 AND sel AFTER m; -表示表示d0 AND sel经经1.0ns延迟后才送到延迟后才送到Temp122【例【例3.2.2】 2输入与门的实体描述。输入与门的实体描
24、述。 ENTITY and2 IS GENERIC(RISEW:TIME:=1ns; FALLW:TIME:=1ns); PORT( a1:IN STD_LOGIC; a0:IN STD_LOGIC; z0:OUT STD_LOGIC); END ENTITY and2; 这是一个准备作为这是一个准备作为2输入与门的设计实体的实体描述,输入与门的设计实体的实体描述,在类属说明中定义参数在类属说明中定义参数RISEW为上沿宽度,为上沿宽度,FALLW为下沿为下沿宽度,它们分别为宽度,它们分别为1ns,这两个参数用于仿真模块的设计。,这两个参数用于仿真模块的设计。233PORT端口说明端口说明 端
25、口声明语句是描述器件的外部接口信号的声明,相当端口声明语句是描述器件的外部接口信号的声明,相当于器件的引脚声明。实体端口声明的一般书写格式如下:于器件的引脚声明。实体端口声明的一般书写格式如下: PORT(端口名:方向端口名:方向 数据类型;数据类型; 端口名:方向端口名:方向 数据类型数据类型); 例如例如 PORT(a, b:IN STD_LOGIC; -声明声明a, b是标准逻辑位类型的输入端口是标准逻辑位类型的输入端口 s: IN STD_LOGIC; -声明声明s是标准逻辑位类型的输入端口是标准逻辑位类型的输入端口 y: OUT STD_LOGIC); -声明声明y是标准逻辑位类型的
26、输出端口是标准逻辑位类型的输出端口24 端口名是实体每一个对外通道的名字;端口方向模式是通道上数据端口名是实体每一个对外通道的名字;端口方向模式是通道上数据流动的方式,如输入或输出等;数据类型是端口上流动数据的表达格式。流动的方式,如输入或输出等;数据类型是端口上流动数据的表达格式。 VHDL对语句中的所有操作数的数据类型都有严格的规定。一个实体对语句中的所有操作数的数据类型都有严格的规定。一个实体通常有一个或多个端口,端口类似于原理图部件符号上的管脚。实体与外通常有一个或多个端口,端口类似于原理图部件符号上的管脚。实体与外界交流的信息必须通过端口通道流入或流出。界交流的信息必须通过端口通道流
27、入或流出。 IEEE 定义了定义了4种常用的端口模式:种常用的端口模式:IN-输入的引脚,输入的引脚,OUT-输出的引脚,输出的引脚,BUFFER-带输出缓冲器并可以回读的引脚带输出缓冲器并可以回读的引脚(与与TRI引脚不同引脚不同),INOUT-双向引脚双向引脚(即即BIDIR引脚引脚)。此模式的端口是普通输出端口。此模式的端口是普通输出端口(OUT)加入三态输出缓冲器和输入缓冲器构成的。加入三态输出缓冲器和输入缓冲器构成的。 端口描述中的数据类型主要有两类:端口描述中的数据类型主要有两类: 位位(BIT)和位矢量和位矢量(BIT_VECTOR)。 若端口的数据类型定义为若端口的数据类型定义
28、为BIT,则其信号值是一个,则其信号值是一个1位的二进制数,位的二进制数,取值只能是取值只能是0或或1;若端口数据类型定义为;若端口数据类型定义为BIT_VECTOR,则其信号值是,则其信号值是一组二进制。一组二进制。 25INOUTBUFFERINOUT端口模式(方向)说明端口模式(方向)说明端口模式符号图 263.2.4 结构体结构体(ARCHITECTURE) 结构体是用于描述设计实体的内部结构以及实体结构体是用于描述设计实体的内部结构以及实体端口间的逻辑关系,在电路上相当于器件的内部电路端口间的逻辑关系,在电路上相当于器件的内部电路结构。一个完整的结构体由两个基本层次组成:结构。一个完
29、整的结构体由两个基本层次组成: 对数据类型、常数、信号、子程序和元件等元素的对数据类型、常数、信号、子程序和元件等元素的信号声明部分。信号声明部分。 描述实体逻辑行为的,以各种不同的描述风格表达描述实体逻辑行为的,以各种不同的描述风格表达的功能描述语句。的功能描述语句。27进程语句块语句体结构明说体构结述能描功体构结元件例化语句子程序调用语句信号赋值语句常数说明数据类型说明信号说明例化元件说明子程序说明结结构构体体构构造造图图281. 结构体的一般语句格式结构体的一般语句格式 结构体的语句格式如下:结构体的语句格式如下: ARCHITECTURE 结构体名结构体名 OF 实体名实体名 IS 信
30、号声明语句信号声明语句; -为内部信号名称及类型声明为内部信号名称及类型声明 BEGIN 功能描述语句功能描述语句 END ARCHITECTURE 结构体名;结构体名;其中,实体名必须是所在设计实体的名字,而结构体名可以由设计者其中,实体名必须是所在设计实体的名字,而结构体名可以由设计者自己选择,但当一个实体具有多个结构体时,结构体的取名不可重复。自己选择,但当一个实体具有多个结构体时,结构体的取名不可重复。例如例如 设设a、b是或非门的输入端口,是或非门的输入端口,z是输出端口,是输出端口,y是结构体内部信号,是结构体内部信号,则用则用VHDL描述的两输入端或非门的结构体为:描述的两输入端
31、或非门的结构体为: ARCHITECTURE nor1 OF templ IS SIGNAL y: STD_LOGIC; BEGIN y=a OR b; -结构体功能描述语句结构体功能描述语句 z=NOT y; END ARCHITECTURE nor1;29 2结构体说明语句结构体说明语句 结构体中的说明语句是对结构体的功能描述语句中将结构体中的说明语句是对结构体的功能描述语句中将要用到的信号要用到的信号(SIGNAL)、数据类型、数据类型(TYPE)、常数、常数(CONSTANT)、元件、元件(COMPONENT)、函数、函数(FUNCTION)和和过程过程(PROCEDURE)等加以说明
32、的语句。等加以说明的语句。 但在一个结构体中说明和定义的数据类型、常数、元件、但在一个结构体中说明和定义的数据类型、常数、元件、函数和过程只能用于这个结构体中,若希望其能用于其他的函数和过程只能用于这个结构体中,若希望其能用于其他的实体或结构体中,则需要将其作为程序包来处理。实体或结构体中,则需要将其作为程序包来处理。30 3功能描述语句结构功能描述语句结构 功能描述语句结构含有五种不同类型,以并行方式工作。功能描述语句结构含有五种不同类型,以并行方式工作。在每一语句结构的内部可能含有并行运行的逻辑描述语句或顺在每一语句结构的内部可能含有并行运行的逻辑描述语句或顺序运行的逻辑描述语句。序运行的
33、逻辑描述语句。 各语句结构的基本组成和功能分别是:各语句结构的基本组成和功能分别是: (1) 块语句块语句(BLOCK)是由一系列并行执行语句构成的组合体,是由一系列并行执行语句构成的组合体,它的功能是将结构体中的并行语句组成一个或多个模块。它的功能是将结构体中的并行语句组成一个或多个模块。 (2) 进程语句进程语句(PROCESS)定义顺序语句模块,用以将从外部获定义顺序语句模块,用以将从外部获得的信号值,或内部的运算数据向其他的信号进行赋值。得的信号值,或内部的运算数据向其他的信号进行赋值。 (3) 信号赋值语句信号赋值语句(赋值目标赋值目标=表达式;表达式;)将设计实体内的处理将设计实体
34、内的处理结果向定义的信号或界面端口进行赋值。结果向定义的信号或界面端口进行赋值。 (4) 子程序调用语句用于调用一个已设计好的子程序。子程序子程序调用语句用于调用一个已设计好的子程序。子程序有过程有过程(PROCEDURE)和函数和函数(FUNCTION)两种类型。两种类型。 (5) 元件例化元件例化(COMPONENT)语句对其他的设计实体作元件调语句对其他的设计实体作元件调用说明,并将此元件的端口与其他的元件、信号或高层次实体用说明,并将此元件的端口与其他的元件、信号或高层次实体的界面端口进行连接。的界面端口进行连接。31例例1: 半加器的描述半加器的描述LIBRARY IEEE; USE
35、 IEEE.STD_LOGIC_1164.ALL; -IEEE库使用声明库使用声明ENTITY h_adder ISPORT(a,b:IN STD_LOGIC; -实体端口声明实体端口声明 so,co:OUT STD_LOGIC);END h_adder;ARCHITECTURE ONE OF h_adder IS BEGIN so=a XOR b; -结构体功能描述语句结构体功能描述语句 co=a AND b; END ARCHITECTURE ONE;32例例2:2选选1数据选择器的描述数据选择器的描述LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; EN
36、TITY mux21 ISPORT( a,b: IN STD_LOGIC; s: IN STD_LOGIC; y: OUT STD_LOGIC);END mux21;ARCHITECTURE ONE OF mux21 IS BEGIN y=a WHEN s=0 ELSE b; END ARCHITECTURE ONE;33例例3:锁存器的描述:锁存器的描述LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY latch1 ISPORT( d: IN STD_LOGIC; ena: IN STD_LOGIC; q:OUT STD_LOGIC);END l
37、atch1;ARCHITECTURE ONE OF latch1 IS BEGIN PROCESS(d,ena) BEGIN IF ena=1THEN q=d; END IF; END PROCESS;END ARCHITECTURE ONE;34例例4 四位二进制加法计数器四位二进制加法计数器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY cnt4evhdl ISPORT( clk,ena:IN STD_LOGIC; cout:OUT STD_LOGIC; q:BUFFER INTEGER RANGE 0 TO 15);END cnt4evhd
38、l;ARCHITECTURE one OF cnt4evhdl IS BEGIN PROCESS(clk,ena) BEGINIF clkEVENT AND CLK=1THEN IF ena=1THEN IF q=15 THEN q=0; cout=0; ELSIF q=14 THEN q=q+1; cout=1; ELSE qLED7SLED7SLED7SLED7SLED7SLED7SLED7SLED7SLED7SLED7SLED7SLED7SLED7SLED7SLED7SLED7SNULL; END CASE; END PROCESS;END ARCHITECTURE one;37例例6
39、奇偶校验器的描述奇偶校验器的描述LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; ENTITY p_check ISPORT( a:IN STD_LOGIC_VECTOR(7 DOWNTO 0); y:OUT STD_LOGIC);END p_check; ARCHITECTURE one OF p_check IS BEGIN PROCESS(a) VARIABLE temp:STD_LOGIC; BEGIN temp:=0; FOR n IN 0 TO 7 LOOP temp:=temp XOR a(n); END LOOP; yb) THEN RETUR
40、N a; ELSE RETURN b; END IF; END max;END bpac1; 在设计实体中声明的数据类型、子程序或数据对象对于其他设计实体是不可再利用在设计实体中声明的数据类型、子程序或数据对象对于其他设计实体是不可再利用的。为了使已声明的数据类型、子程序、元件能被其他设计实体调用或共享,可以把它的。为了使已声明的数据类型、子程序、元件能被其他设计实体调用或共享,可以把它们汇集在程序包中。包中可以有多个元件和函数。们汇集在程序包中。包中可以有多个元件和函数。打开打开bpac1程序包的语句为:程序包的语句为:USE work.bpac1.ALL 放在实体声明前面放在实体声明前面函
41、数调用语句函数调用语句 函数名函数名 (关联参数表)(关联参数表)例如,调用求最大值函数的语句为:例如,调用求最大值函数的语句为: peak=max(data,peak);39元件例化语句元件例化语句第一步第一步 设计二输入与非门设计二输入与非门LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY nd2 ISPORT( a,b:IN STD_LOGIC; c:OUT STD_LOGIC);END nd2;ARCHITECTURE nd2behv OF nd2 IS BEGIN cc1,b=d1,c=y); -名字关联方式名字关联方式 u3:nd2 P
42、ORT MAP(x,y,c=z1); -混合关联方式混合关联方式END ord41behv;413.2 VHDL语言要素语言要素3.2.1 VHDL文字规则文字规则1.数字型文字数字型文字(1)整数文字)整数文字 整数文字由数字和下划线组成。下划线用来将数字分组,整数文字由数字和下划线组成。下划线用来将数字分组,便于读出。便于读出。例:例:5,678,156E2,45_234_287相当于相当于(45,234,287)(2)实数文字)实数文字 实数文字由数字、小数点和下划线组成。实数文字由数字、小数点和下划线组成。例:例:188.993, 88_670_551.453_909相当于相当于(88
43、,670,551.453,909)42(3)以数字基数表示的文字)以数字基数表示的文字 以数字基数表示的文字的格式为: 数制#数值#例:10#170#; -十进制数值 16#FE#; -十六进制数值 2#11010001#; -二进制数值 8#376#; -八进制数字(4)物理量文字)物理量文字 表示时间、长度等物理量。例如,60s,100m。2.字符串文字字符串文字 字符串文字包括字符和字符串。字符是以单引号括起来的数字、字母和符号。包括文字字符串和数值字符串。(1)文字字符串)文字字符串文字字符串是用双引号括起来的一维字符数组。例:“ABC”,“A BOY”,“A”都是文字字符串。43(2
44、)数值字符串)数值字符串 数值字符串也叫做矢量,格式为数值字符串也叫做矢量,格式为 数制基数符号数制基数符号“数值字符串数值字符串”例:例:B”111011110”; -二进制数数组,位矢量组长度是二进制数数组,位矢量组长度是9 O”15”; -八进制数数组,等效八进制数数组,等效B”001101”,位矢量组长度是,位矢量组长度是6 X”AD0”; -十六进制数数组,等效十六进制数数组,等效B”1”,位矢量组长度是,位矢量组长度是12 B、O、X分别是二进制、八进制、十六进制基数符号。分别是二进制、八进制、十六进制基数符号。3.标识符标识符 标识符是用户给常量、变量、信号、端口、子程序或参数定
45、义的名字。标标识符是用户给常量、变量、信号、端口、子程序或参数定义的名字。标识符的命名规则是:以字母开头,后跟若干字母、数字或单个下划线构成,识符的命名规则是:以字母开头,后跟若干字母、数字或单个下划线构成,但最后不能为下划线。但最后不能为下划线。例:例: h_adder, mux21, example为合法标识符;为合法标识符; 2adder, _mux21, ful_adder, adder_ 为错误的标识符。为错误的标识符。4.下标名下标名 下标名用于指示数组型变量或信号的某一元素。下标名的格式为:下标名用于指示数组型变量或信号的某一元素。下标名的格式为:标识符(表达式)标识符(表达式)
46、例:例:b(3), a(m)都是下标名。都是下标名。445.段名段名段名是多个下标名的组合。段名的格式为:标识符(表达式 方向 表达式)例:D(7 DOWNTTO 0); -可表示数据总线D7D0D(0 TO 7); -可表示数据总线D0D7453.2.2 VHDL数据对象数据对象 VHDL数据对象包括变量、常量和信号。数据对象包括变量、常量和信号。1.变量变量 变量变量(VARIABLE)是一个局部量。只能在进程是一个局部量。只能在进程(PROCESS)、函数、函数(FUNCTION)和过程和过程(PROCEDURE)中声明和使用。变量不能将信息带出中声明和使用。变量不能将信息带出对它定义的
47、当前设计单元。变量赋值的数据传输是立即发生的,不存在延对它定义的当前设计单元。变量赋值的数据传输是立即发生的,不存在延时。时。 变量要声明后才能使用,变量声明的语法格式为:变量要声明后才能使用,变量声明的语法格式为: VARIABLE 变量名:数据类型变量名:数据类型:=初始值初始值;例:例:VARIABLE a:INTEGER; -a为整型变量为整型变量 VARIABLE b:INTEGER:=2; -b赋初值赋初值2 变量赋值语句的语法格式为:变量赋值语句的语法格式为: 目标变量名:目标变量名:=表达式表达式例:例: VARIABLE a,b:BIT_VECTOR(0 TO 7); VAR
48、IABLE x,y:INTEGER; x:=100; a:=“1010101” y:=15+x; a(3 TO 6):=(1,1,0,1); a(0 TO 5):=b(2 TO 7);462.信号信号 信号是描述硬件系统的基本数据对象。不仅可以容纳当前值,也可信号是描述硬件系统的基本数据对象。不仅可以容纳当前值,也可以保持历史值,类似于连线。以保持历史值,类似于连线。信号声明语句的语法格式为:信号声明语句的语法格式为:SIGNAL 信号名:数据类型信号名:数据类型:=初值初值;SIGNAL temp:STD_LOGIC:=0; -temp为标准逻辑位信号为标准逻辑位信号 初值为初值为0SIGN
49、AL flaga,flagb:BIT; -flaga,flagb为位信号为位信号SIGNAL data:STD_LOGIC_VECTOR(15 DOWNTO 0); -data为标准逻辑位矢量,矢量长度为为标准逻辑位矢量,矢量长度为16信号的赋值语句格式为:信号的赋值语句格式为:目标信号名目标信号名=表达式表达式例:例:x=9; z=x AFTER 5ns; -目标信号需要一定延迟时间,设置延迟目标信号需要一定延迟时间,设置延迟5ns信号与变量是有区别的。变量在进程、函数和过程中声明,信号在结构体中信号与变量是有区别的。变量在进程、函数和过程中声明,信号在结构体中声明。变量用声明。变量用“:=
50、”号赋值,无延迟时间,而信号用号赋值,无延迟时间,而信号用“=”赋值,赋值过赋值,赋值过程有延迟时间。信号赋初值的符号是程有延迟时间。信号赋初值的符号是“:=”。473.常数常数常数的声明格式为:常数的声明格式为:CONSTANT 常数名:数据类型:常数名:数据类型:=初值;初值;例:例: CONSTANT fbus:BIT_VECTOR:=“010111”; CONSTANT Vcc:REAL:=5.0; CONSTANT delay:TIME:25ns;3.2.3 VHDL数据类型数据类型1.BOOLEAN(布尔布尔)数据类型数据类型 FALSE(假)和(假)和 TRUE(真),以枚举类型
51、预定义,定义语句为:(真),以枚举类型预定义,定义语句为: TYPE BOOLEAN IS (FALSE,TRUE);2.BIT(位)数据类型(位)数据类型 位数据类型包括位数据类型包括0和和1,定义语句为:,定义语句为: TYPE BIT IS (0,1);3.BIT_VECTOR 位矢量是用双引号括起来的数字序列,如位矢量是用双引号括起来的数字序列,如“0011”,X”00FD”等。定义语句为:等。定义语句为: TYPE BIT_VECTOR IS ARRAY (Natural Range) OF BIT;其中,其中,表示数据范围未定界。在使用位矢量时,必须注明位宽,表示数据范围未定界。在
52、使用位矢量时,必须注明位宽,例如:例如:SIGNAL a:BIT_VECTOR (7 DOWNTO 0);4.CHARACTER(字符)数据类型(字符)数据类型 字符是用单引号括起来的字符是用单引号括起来的ASCII码字符,如码字符,如A,a,定义语句为:,定义语句为: Z TYPE CHARACTER IS (NUL,SOH,);485.INTEGER(整数)数据类型(整数)数据类型整数包括正整数、负整数和零。整数是32位的带符号数。6.NATURAL(自然数)和(自然数)和POSITIVE(正整数)数据类型(正整数)数据类型自然数是整数的一个子集,包括0和正整数。7.REAL(实数)数据类
53、型(实数)数据类型实数由正、负、小数点和数字组成,例如,-1.0,+2.5,-1.0E38都是实数。8.STRING(字符串)数据类型(字符串)数据类型字符串是用双引号括起来的字符序列,也称字符串矢量或字符串数组。例如,”A BOY.”,”1010011”等是字符串。9.TIME(时间)数据类型(时间)数据类型时间是物理量数据,由整数数据和单位两部分组成。定义语句为:TYPE TIME IS RANGE -2147483647 TO 2147483647493.2.5 IEEE预定义的标准逻辑位和矢量预定义的标准逻辑位和矢量1.STD_LOGIC(标准逻辑位)数据类型(标准逻辑位)数据类型 在
54、在VHDL中,标准逻辑位数据有九种逻辑值:中,标准逻辑位数据有九种逻辑值: U(未初始化(未初始化的)、的)、 X(强未知的)、(强未知的)、 0(强(强0)、)、 1(强(强1)、)、 Z(高(高阻态)、阻态)、 W(弱未知的)、(弱未知的)、 L(弱(弱0)、)、 H(弱(弱1)和)和-(忽略)。它们在(忽略)。它们在STD_LOGIC_1164程序包中的定义语句:程序包中的定义语句:TYPE STD_LOGIC IS (U,X,0,1,Z,W,L,H,-);注意:注意:STD_LOGIC数据类型中的数据是用大写字母定义的。数据类型中的数据是用大写字母定义的。2. STD_LOGIC_VE
55、CTOR(标准逻辑矢量)数据类型(标准逻辑矢量)数据类型 标准逻辑矢量数据在数字电路中常用于表示总线。它们在标准逻辑矢量数据在数字电路中常用于表示总线。它们在STD_LOGIC_1164程序包中的定义语句:程序包中的定义语句:TYPE STD_LOGIC_VECTOR IS ARRAY(Natural Range ) OF STD_LOGIC;503.2.6 VHDL操作符操作符 VHDL的操作符包括逻辑操作符的操作符包括逻辑操作符(Logic Operator)、关系操作符、关系操作符(Relational Operator) 、算术操作符、算术操作符(Arithmetic Operator
56、)和符号操作符和符号操作符(Sign Operator)四类。四类。类型类型操作符操作符功能功能操作数数据类型操作数数据类型算算术术操操作作符符+加加整数整数-减减整数整数&并并一维数组一维数组*乘乘整数和实数整数和实数/除除整数和实数整数和实数MOD取模取模整数整数REM求余求余整数整数SLL逻辑左移逻辑左移BIT或布尔型一维数组或布尔型一维数组SRL逻辑右移逻辑右移BIT或布尔型一维数组或布尔型一维数组SLA算术左移算术左移BIT或布尔型一维数组或布尔型一维数组SRA算术右移算术右移BIT或布尔型一维数组或布尔型一维数组ROL逻辑循环左移逻辑循环左移BIT或布尔型一维数组或布尔型一
57、维数组ROR逻辑循环右移逻辑循环右移BIT或布尔型一维数组或布尔型一维数组*乘方乘方整数整数ABS取绝对值取绝对值整数整数51类型类型操作符操作符功能功能操作数数据类型操作数数据类型关关系系操操作作符符=等于等于任何数据类型任何数据类型/=不等于不等于任何数据类型任何数据类型大于大于枚举与整数及对应的一维数组枚举与整数及对应的一维数组=大于等于大于等于枚举与整数及对应的一维数组枚举与整数及对应的一维数组逻逻辑辑操操作作符符AND与与BIT、BOOLEAN、STD_LOGICOR或或BIT、BOOLEAN、STD_LOGICNAND与非与非BIT、BOOLEAN、STD_LOGICNOR或非或非
58、BIT、BOOLEAN、STD_LOGICXOR异或异或BIT、BOOLEAN、STD_LOGICNXOR异或非异或非BIT、BOOLEAN、STD_LOGICNOT非非BIT、BOOLEAN、STD_LOGIC符号操符号操作符作符+正正整数整数-负负整数整数52注意:注意:(1)要遵循在基本操作符间操作数是同数据类型的规则。)要遵循在基本操作符间操作数是同数据类型的规则。(2)要遵循操作数的数据类型必须与操作符要求的数据类)要遵循操作数的数据类型必须与操作符要求的数据类型完全一致。型完全一致。(3)包含多种操作符的表达式中,需要用括号将这些运算)包含多种操作符的表达式中,需要用括号将这些运算
59、分组。例如分组。例如(a OR b)XOR c(4)在)在VHDL中有并置运算操作符中有并置运算操作符“&”,它用来完成一维,它用来完成一维数组的位扩展。例如,将一维数组数组的位扩展。例如,将一维数组s1,s2扩展为二维数组扩展为二维数组的语句是:的语句是:s=s1&s2。533.3 VHDL的顺序语句的顺序语句 VHDL的基本描述语句包括顺序语句的基本描述语句包括顺序语句(Sequential Statements)和并行语句和并行语句(Concurrent Statements)。 顺序语句只能出现在进程顺序语句只能出现在进程(PROCESS)、过程、过程(PROCEDUR
60、E)和函数和函数(FUNCTION)中,按照程序书写的中,按照程序书写的顺序自上而下、一条一条地执行。顺序语句可以描述数字顺序自上而下、一条一条地执行。顺序语句可以描述数字逻辑系统中的组合逻辑电路和时序逻辑电路。逻辑系统中的组合逻辑电路和时序逻辑电路。 VHDL的顺序语句有赋值语句、流程控制语句、等待的顺序语句有赋值语句、流程控制语句、等待语句、子程序调用语句、返回语句和空操作语句等六类。语句、子程序调用语句、返回语句和空操作语句等六类。543.3.1 赋值语句赋值语句1.变量赋值语句变量赋值语句变量赋值语句的格式为:变量赋值语句的格式为:目标变量名目标变量名:=赋值源(表达式)赋值源(表达式)例如例如 x:=5.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025至2030年中国半自动袖口式包装机数据监测研究报告
- 2025至2030年中国养肤滋润香皂数据监测研究报告
- 乡村振兴战略下的农村地区全周期健康管理策略研究
- 企业中的心理健康管理基于区块链的数据保护解决方案
- 从个案到全局医疗伦理与合规培训维护医师尊严
- 安全教育:防震防火知识普及
- 固废处理协议书范本
- 城市运营服务合同协议
- 工地行政采购合同协议
- 工改商协议出让合同协议
- 提升地方政府行政效能的对策研究
- 船舶防污染基础知识培训
- 第十一章 80年代台港文学
- 餐厅小院策划方案
- 部编人教版六年级下册小学道德与法治全册单元测试卷(含答案)
- 城乡饮用水水质监测工作
- 心理团体辅导的保密协议
- 电梯安装施工计划书
- 弘扬传统文化勤俭节约传承美德课件
- 小小的自然观察笔记
- 锂电池组规格书范本
评论
0/150
提交评论