vhdl硬件描述语言

上传人:公**** 文档编号:570496387 上传时间:2024-08-04 格式:PPT 页数:306 大小:4.21MB
返回 下载 相关 举报
vhdl硬件描述语言_第1页
第1页 / 共306页
vhdl硬件描述语言_第2页
第2页 / 共306页
vhdl硬件描述语言_第3页
第3页 / 共306页
vhdl硬件描述语言_第4页
第4页 / 共306页
vhdl硬件描述语言_第5页
第5页 / 共306页
点击查看更多>>
资源描述

《vhdl硬件描述语言》由会员分享,可在线阅读,更多相关《vhdl硬件描述语言(306页珍藏版)》请在金锄头文库上搜索。

1、概述概述 VHDL语言设计实体的基本结构语言设计实体的基本结构 VHDL语言结构体的描述方式语言结构体的描述方式VHDL语言的库、程序包及配置语言的库、程序包及配置VHDL语言的言的语言要素言要素VHDL语言的描述言的描述语句句VHDL结构体的三种描述方法构体的三种描述方法1概概 述述 VHDL VHDL语言是一种在语言是一种在EDAEDA设计中广泛流行的设计中广泛流行的硬件描述语言,主要用于描述数字系统的结硬件描述语言,主要用于描述数字系统的结构、行为、功能和接口。构、行为、功能和接口。 除了含有许多具有硬件特征的语句外,除了含有许多具有硬件特征的语句外,VHDLVHDL语言的句法、语言形式

2、和描述风格十分语言的句法、语言形式和描述风格十分类似于一般的计算机高级语言,是目前硬件类似于一般的计算机高级语言,是目前硬件描述语言中应用最为广泛的一种。描述语言中应用最为广泛的一种。 2 VHDL: VHSIC (Very High Speed Integrated Circuit) Hardware Description Language什么是什么是VHDLVHDL?3VHDLVHDL语言简介语言简介 VHDL VHDL语言全称是语言全称是“超高速集成电路硬件描述语超高速集成电路硬件描述语言言”,它诞生于,它诞生于19821982年,由美国国防部于年,由美国国防部于2020世纪七、世纪七

3、、八十年代组织研制开发,其目的首先是用这种语言八十年代组织研制开发,其目的首先是用这种语言描述复杂电路,其次是希望这种语言能够成为一种描述复杂电路,其次是希望这种语言能够成为一种标准语言。标准语言。 1987 1987年底,年底,VHDLVHDL语言被电气和电子工程师协会语言被电气和电子工程师协会IEEEIEEE和美国国防部确认为标准硬件描述语言,版本和美国国防部确认为标准硬件描述语言,版本为为IEEE-1076IEEE-1076(简称(简称8787版)。此后在电子产业界被广版)。此后在电子产业界被广泛地接受,并逐步取代了原有的非标准硬件描述语泛地接受,并逐步取代了原有的非标准硬件描述语言(如

4、言(如CUPLCUPL、ABELABEL等)。等)。 概概 述述 4 19931993年,年,IEEEIEEE对对VHDLVHDL进行了修订,增加了一些进行了修订,增加了一些功能,并从更高的抽象层次和系统描述能力上扩展功能,并从更高的抽象层次和系统描述能力上扩展VHDLVHDL的内容,公布了的内容,公布了VHDLVHDL新的版本,编号为新的版本,编号为IEEE IEEE Std1076-1993Std1076-1993(简称(简称9393版)。版)。 19951995年中国国家技术监督局组织编写并出版了年中国国家技术监督局组织编写并出版了CADCAD通用技术规范通用技术规范,推荐,推荐VHDL

5、VHDL语言作为我国电子语言作为我国电子自动化硬件描述语言的国家标准。自动化硬件描述语言的国家标准。19961996年,年,IEEE1076.3IEEE1076.3成为成为VHDLVHDL综合标准。综合标准。 概概 述述 5 目前,目前,VHDLVHDL已经成为一个数字电路和硬件系统已经成为一个数字电路和硬件系统描述、综合、优化和布线的描述、综合、优化和布线的IEEEIEEE工业标准,已得到工业标准,已得到众多众多EDAEDA公司的支持,越来越多的硬件电路设计工具公司的支持,越来越多的硬件电路设计工具向向VHDLVHDL标准靠拢,支持标准靠拢,支持VHDLVHDL语言。在电子工程领域语言。在电

6、子工程领域中,无论中,无论ASICASIC设计人员,还是系统设计人员,都需设计人员,还是系统设计人员,都需要学习要学习VHDLVHDL语言来提高自己的工作效率。有专家认语言来提高自己的工作效率。有专家认为,在未来的为,在未来的ITIT行业中,行业中,VHDLVHDL语言和语言和VerilogVerilog HDL HDL语语言将承担几乎全部的数字系统设计任务。言将承担几乎全部的数字系统设计任务。 概概 述述 6 1 1、VHDLVHDL打破软、硬件的界限打破软、硬件的界限 传统的数字系统设计分为:传统的数字系统设计分为: 硬件设计(硬件设计人员)硬件设计(硬件设计人员) 软件设计(软件设计人员

7、)软件设计(软件设计人员) VHDLVHDL是电子系统设计者和是电子系统设计者和 EDA EDA工具之间的界面。工具之间的界面。 EDAEDA工具及工具及 HDLHDL的流行,使电子系统向集成化、大规模的流行,使电子系统向集成化、大规模和高速度等方向发展。和高速度等方向发展。 美国硅谷约有美国硅谷约有80%80%的的 ASICASIC和和 FPGA/CPLDFPGA/CPLD 已采用已采用 HDL HDL进行设计。进行设计。概概 述述 VHDL语言作用语言作用 72 2、VHDLVHDL与与C C、C+C+的比较:的比较: C C、C+ C+ 代替汇编等语言代替汇编等语言 VHDL VHDL

8、代替原理图、逻辑状态图等代替原理图、逻辑状态图等3 3、VHDLVHDL与电原理图描述的比较:与电原理图描述的比较: VHDLVHDL具有较强的抽象描述能力,可进行系统具有较强的抽象描述能力,可进行系统 行为级别的描述。描述简洁,效率高。行为级别的描述。描述简洁,效率高。 VHDLVHDL描述与实现工艺无关。描述与实现工艺无关。 电原理图描述需给出完整、具体的电路结构电原理图描述需给出完整、具体的电路结构 图,不能进行抽象描述。描述繁杂,效率低。图,不能进行抽象描述。描述繁杂,效率低。 电原理图描述与实现工艺有关。电原理图描述与实现工艺有关。概概 述述 8 VHDL VHDL语言作为一种标准的

9、硬件描述语言,具有结构严谨、语言作为一种标准的硬件描述语言,具有结构严谨、描述能力强的特点,支持从系统级到逻辑门级电路所有层次描述能力强的特点,支持从系统级到逻辑门级电路所有层次的设计,适合于复杂逻辑电路和系统的设计。的设计,适合于复杂逻辑电路和系统的设计。 作为高级硬件描述语言,作为高级硬件描述语言,VHDLVHDL有如下特点:有如下特点: 支持从系统级到逻辑门级电路的描述;支持从系统级到逻辑门级电路的描述; 具有很强的硬件描述能力;具有很强的硬件描述能力; 设计技术齐全、方法灵活、支持广泛;设计技术齐全、方法灵活、支持广泛; 对设计描述具有相对的独立性;对设计描述具有相对的独立性; 具有很

10、强的移植能力;具有很强的移植能力; 易于共享和复用;易于共享和复用; 具有丰富的仿真语句和库函数;具有丰富的仿真语句和库函数;VHDL语言特点语言特点 概概 述述 9 作为高级硬件描述语言,作为高级硬件描述语言,VHDLVHDL有如下特点:有如下特点: 设计结构清晰、易读易懂;设计结构清晰、易读易懂; 易实现系统的更新和升级;易实现系统的更新和升级; 数据类型丰富、安全性好。数据类型丰富、安全性好。概概 述述 10 如:一个可置数的16位计数器的电原理图:概概 述述 11用VHDL描述的可置数16位计数器:12VHDL: 具有较强的系统级抽象描述能力,适合行为级和 RTL级的描述。设计者可不必

11、了解电路细节,所作工作较少,效率高。但对综合器的要求高,不易控制底层电路的生成。IEEE标准,支持广泛。 行为级RTL级门电路级RTL: Register Translate LevelVHDL与其它硬件描述语言的比较与其它硬件描述语言的比较概概 述述 13Verilog HDL : 系统级抽象描述能力比VHDL稍差;门级开关电路描述方面比 VHDL 强。适合 RTL级和门电路级的描述。设计者需要了解电路细节,所作工作较多。IEEE标准,支持广泛。 ABEL、PALASM、AHDL(Altera HDL): 系统级抽象描述能力差,一般作门级 电路描述。要求设计者对电路细节有详细的了解。对综合器

12、的性能要求低,易于控制电路资源。支持少。概概 述述 14 VHDL主要用于描述数字系统的结构、行为、功能和接口。 VHDL将一个设计(元件、电路、系统)分为: 外部(可视部分、端口) 内部(不可视部分、内部功能、算法)概概 述述 VHDL设计简述设计简述15外部与内部:器件或子系统 ARCHITECTURE Process ProcessENTITYSequentialProcessCombinational Processportsportscomponentportsports概概 述述 162选1选择器的VHDL描述: 概概 述述 17 VHDL语言由保留关键字组成; 一般,VHDL语言

13、对字母大小写不敏感; 例外: 、“ ”所括的字符、字符串; 每条VHDL语句由一个分号(;)结束; VHDL语言对空格不敏感,增加可读性; 在“-”之后的是VHDL的注释语句; VHDL有以下描述风格: 行为描述; 数据流(寄存器传输RTL)描述; 结构化描述; VHDLVHDL语言的一些基本特点:语言的一些基本特点:概概 述述 18VHDLVHDL语言设计实体的基本结构语言设计实体的基本结构 用用VHDLVHDL语言设计的电路无论规模大小,都要使语言设计的电路无论规模大小,都要使用一个完整的用一个完整的VHDLVHDL程序结构,这个完整的程序结构程序结构,这个完整的程序结构称为设计实体或实体

14、。称为设计实体或实体。 设计实体是指能被设计实体是指能被VHDLVHDL语言综合器所接受,并语言综合器所接受,并能作为独立的设计单元,以元件的形式存在的能作为独立的设计单元,以元件的形式存在的VHDLVHDL语言程序。语言程序。 所谓的元件,既可以被高层次的系统调用,成所谓的元件,既可以被高层次的系统调用,成为系统的一部分,也可以作为一个电路的功能模块,为系统的一部分,也可以作为一个电路的功能模块,独立存在和运行。独立存在和运行。 19VHDLVHDL语言设计实体的组成语言设计实体的组成 VHDLVHDL语言的设计实体都由实体说明语言的设计实体都由实体说明(Entity)(Entity)和和结

15、构体结构体(Architecture)(Architecture)两个最基本的部分组成。两个最基本的部分组成。 实体说明部分用来描述该模块或系统的接口信实体说明部分用来描述该模块或系统的接口信息,包括端口的数目、方向和类型,其作用相当于息,包括端口的数目、方向和类型,其作用相当于传统设计方法中所使用的元件符号。传统设计方法中所使用的元件符号。 结构体部分则描述该模块的内部电路,对应于结构体部分则描述该模块的内部电路,对应于原理图、逻辑方程和模块的输入原理图、逻辑方程和模块的输入/ /输出特性。输出特性。 一个设计实体可以包含一个或多个结构体,用一个设计实体可以包含一个或多个结构体,用于描述其的

16、逻辑结构和逻辑功能。于描述其的逻辑结构和逻辑功能。 VHDLVHDL语言设计实体的基本结构语言设计实体的基本结构 20 1. VHDLVHDL设计实体的结构设计实体的结构 一个完整的一个完整的VHDLVHDL设计实体(设计文件),通常设计实体(设计文件),通常包括:包括: 实体说明(实体说明(EntityEntity) 结构体(结构体(ArchitectureArchitecture) 配置(配置(ConfigurationConfiguration) 库(库(LibraryLibrary)和程序包()和程序包(PackagePackage) VHDLVHDL语言设计实体的基本结构语言设计实体

17、的基本结构 21VHDL程序结构程序结构例例1 一个一个2输入的与门的逻辑描述输入的与门的逻辑描述LIBRARY ieee; -库说明语句库说明语句USE ieee.std_logic_1164.ALL; -程序包说明语句程序包说明语句ENTITY and2 ISPORT(a,b: IN STD_LOGIC; y : OUT STD_LOGIC);END and2;ARCHITECTURE and2x OF and2 ISBEGINy=a AND b;END and2x;实体部分实体部分结构体部分结构体部分22VHDL设计文件的两个基本组成部分实体实体(Entity)结构体结构体(Archit

18、ecture)配置配置(Configuration)包集合包集合(Package)库库(Library)一个完整的一个完整的VHDL程序程序库库 用于存放已编译的实体、结构体、包集合和配置实体部分实体部分描述设计系统的外部接口信号(即输入/输出信号)结构体结构体用于描述系统的内部电路配置配置用于从库中选取所需元件安装到设计单元的实体中包集合包集合存放各设计模块能共享的数据类型、常数、子程序等23 1. VHDLVHDL设计实体的结构设计实体的结构 库、程序包库、程序包配置配置 设计实体设计实体实体说明实体说明结构体结构体进程进程或其他并行结构或其他并行结构 基本结构:基本结构: VHDLVHD

19、L语言设计实体的基本结构语言设计实体的基本结构 24 2. 设计实体举例设计实体举例 【例例】试用试用VHDLVHDL语言设计一个四选一数据选择器。语言设计一个四选一数据选择器。 数据输入:数据输入: D3 D2 D1 D0 数据输出:数据输出: Y 选择控制:选择控制: S1 S0 VHDLVHDL语言设计实体的基本结构语言设计实体的基本结构 25 VHDLVHDL程序如下:程序如下: LIBRARYLIBRARY IEEE IEEE; -IEEE-IEEE库库 USEUSE IEEE.STD_LOGIC_1164. IEEE.STD_LOGIC_1164.ALLALL; -程序包程序包 U

20、SEUSE IEEE.STD_LOGIC_ARITH. IEEE.STD_LOGIC_ARITH.ALLALL; USEUSE IEEE.STD_LOGIC_UNSIGNED. IEEE.STD_LOGIC_UNSIGNED.ALLALL; ENTITYENTITY mux41 mux41 ISIS - -定义实体名定义实体名 PORTPORT ( ( S1, S0: S1, S0: ININ STD_LOGIC STD_LOGIC; -定义输入信号定义输入信号 D3, D2, D1, D0: D3, D2, D1, D0: ININ STD_LOGIC STD_LOGIC; Y: Y: OU

21、TOUT STD_LOGIC - STD_LOGIC -定义输出信号定义输出信号 ) ); ENDEND mux41 mux41; ARCHITECTUREARCHITECTURE behaveiorbehaveior OFOF mux41 mux41 ISIS - -定义结构体名定义结构体名 BEGINBEGIN - -逻辑功能描述逻辑功能描述 Y=D0 Y=D0 WHENWHEN S1= S1=0 0 ANDAND S0= S0=0 0 ELSEELSE D1 D1 WHENWHEN S1= S1=0 0 ANDAND S0= S0=1 1 ELSEELSE D2 D2 WHENWHEN

22、S1= S1=1 1 ANDAND S0= S0=0 0 ELSEELSE D3 D3; ENDEND behaveiorbehaveior; 库库 程序包程序包 实体说明实体说明 结构结构体体 VHDL语言设计实体的基本结构语言设计实体的基本结构 26 2. 设计实体举例设计实体举例 库:库:是是用来存放已设计好的程序包、数据集合体、用来存放已设计好的程序包、数据集合体、元件的仓库,元件的仓库,供用户进行供用户进行VHDLVHDL设计时调用。设计时调用。 程序包:程序包:用用VHDLVHDL语言编写的共享文件,定义了将要语言编写的共享文件,定义了将要使用的常数、数据类型、子程序和设计好使用的

23、常数、数据类型、子程序和设计好的电路单元等。的电路单元等。 实体说明:实体说明:定义电路单元的输入、输出引脚信号。定义电路单元的输入、输出引脚信号。以标识符以标识符ENTITYENTITY开始,以开始,以ENDEND结束。结束。 结构体:结构体:用来描述电路内部结构和逻辑功能。并以用来描述电路内部结构和逻辑功能。并以标识符标识符ARCHITECTUREARCHITECTURE开头,以开头,以ENDEND结尾。结尾。 VHDLVHDL语言设计实体的基本结构语言设计实体的基本结构 27VHDLVHDL语言的实体说明语言的实体说明 实体说明是实体说明是VHDLVHDL程序设计中最基本的组成部分,程序

24、设计中最基本的组成部分,主要用来描述设计实体的外部接口信号,定义设计主要用来描述设计实体的外部接口信号,定义设计单元的输入、输出端口,是设计实体对外的一个通单元的输入、输出端口,是设计实体对外的一个通信界面,但它不描述设计的具体功能。信界面,但它不描述设计的具体功能。 实体说明语句的格式如下:实体说明语句的格式如下: ENTITY ENTITY 实体名实体名 ISIS GENERICGENERIC(类属表类属表);); PORTPORT(端口表端口表);); ENDEND ENTITYENTITY 实体名实体名;实体说明语句实体说明语句实体说明语句实体说明语句类属说明语句类属说明语句类属说明语

25、句类属说明语句端口说明语句端口说明语句端口说明语句端口说明语句结束语句结束语句结束语句结束语句 规规则则: 实实体体声声明明语语句句必必须须以以“ENTITYENTITY 实实体体名名 ISIS”开始,以开始,以“END ENTITYEND ENTITY 实体名;实体名;”结束;结束; 实体名是设计者给设计实体的命名;实体名是设计者给设计实体的命名; 方括号内的语言描述可任选。方括号内的语言描述可任选。VHDLVHDL语言设计实体的基本结构语言设计实体的基本结构 28实体的一般格式为:实体的一般格式为:ENTITY 实体名实体名 IS类属参数说明类属参数说明;端口说明端口说明;END; ENT

26、ITY、IS、END是是VHDL的关键字(保留字)。的关键字(保留字)。 实体中的每一个实体中的每一个I/O信号被称为信号被称为端口端口,其功能对应于电路,其功能对应于电路 图图符号的一个引脚。符号的一个引脚。端口说明端口说明则是对一个实体的一组端口的定义,则是对一个实体的一组端口的定义,即对基本设计实体与外部接口的描述。端口是设计实体和外部即对基本设计实体与外部接口的描述。端口是设计实体和外部环境动态通信的通道。环境动态通信的通道。ayand2b类属参数说明是可选部分。如果需要,可使用以类属参数说明是可选部分。如果需要,可使用以“GENERIC”语语句来指定该设计单元的类属参数(如延时、功耗

27、等)。句来指定该设计单元的类属参数(如延时、功耗等)。 实体名、端口名等均应为实体名、端口名等均应为符合符合VHDL命名规则命名规则 的标识符。的标识符。29 1.1.实体说明语句实体说明语句ENTITYENTITY 该语句是实体说明的引导语句,用来指明实体该语句是实体说明的引导语句,用来指明实体说明部分的开始,并定义实体名。说明部分的开始,并定义实体名。 关键字:关键字: ENTITYENTITY 格格 式:式: ENTITYENTITY 实体名实体名 ISIS 在在设设计计编编程程时时,实实体体名名必必须须与与设设计计文文件件名名相相同同,否则无法编译。否则无法编译。 VHDLVHDL语言

28、设计实体的基本结构语言设计实体的基本结构 30 2.2. 类属说明语句类属说明语句GENERICGENERIC 该语句用来确定设计实体中定义的局部常数,将外部环该语句用来确定设计实体中定义的局部常数,将外部环境的信息参数传递到设计实体,并用类属表的形式指明器件境的信息参数传递到设计实体,并用类属表的形式指明器件的一些特征。的一些特征。 关键字:关键字:GENERICGENERIC 格格 式:式:GENERICGENERIC ( (常数名常数名常数名常数名, , 常数名常数名常数名常数名: : 数据类型数据类型数据类型数据类型: : 设定值设定值设定值设定值 ; ; 常数名常数名常数名常数名,

29、, 常数名常数名常数名常数名: : 数据类型数据类型数据类型数据类型: : 设定值设定值设定值设定值) 常数名:常数名:是由设计者定义的类属常数名;是由设计者定义的类属常数名; 数据类型:数据类型:常取常取INTEGERINTEGER或或TIMETIME的类型;的类型; 设定值:设定值:为常数名所代表的数值。为常数名所代表的数值。VHDLVHDL语言设计实体的基本结构语言设计实体的基本结构 31 2.2. 类属说明语句类属说明语句GENERICGENERIC 例如:例如: 类属表对数据总线的类型和宽度做了定义,类属参数类属表对数据总线的类型和宽度做了定义,类属参数datawithdatawit

30、h的数据类型为整数,数据宽度为的数据类型为整数,数据宽度为8 8位。位。 ENTITY ENTITY body body ISIS GENERICGENERIC(datawidthdatawidth: INTEGER :=8: INTEGER :=8);); 类属说明必须位于端口说明之前,用于指定设计实体和类属说明必须位于端口说明之前,用于指定设计实体和外部环境通信的参数,并以关键字外部环境通信的参数,并以关键字GENERICGENERIC引导一个类属参数引导一个类属参数表,在表中提供时间参数、总线宽度等信息。表,在表中提供时间参数、总线宽度等信息。 VHDLVHDL语言设计实体的基本结构语言

31、设计实体的基本结构 32 3.3. 端口说明语句端口说明语句PORTPORT 该语句是设计实体与外界接口的描述,用来指明实体的该语句是设计实体与外界接口的描述,用来指明实体的输入、输出信号及其模式,包括端口的名称、数据的类型和输入、输出信号及其模式,包括端口的名称、数据的类型和数据的传递方向(端口模式)。数据的传递方向(端口模式)。 关键字:关键字:PORTPORT 格格 式:式:POREPORE (端口名(端口名(端口名(端口名 ,端口名,端口名,端口名,端口名: : 端口模式端口模式端口模式端口模式 数据类型数据类型数据类型数据类型 ;端口名;端口名;端口名;端口名 ,端口名,端口名,端口

32、名,端口名: : 端口模式端口模式端口模式端口模式 数据类型数据类型数据类型数据类型 ) 端口名:是赋予每个外部引脚的名称,通常用一个或几个端口名:是赋予每个外部引脚的名称,通常用一个或几个英文字母,或者用英文字母加数字命名。英文字母,或者用英文字母加数字命名。 端口模式:即端口方向,用来定义外部引脚的信号方向端口模式:即端口方向,用来定义外部引脚的信号方向,共共五种。如果端口模式没有指定,则该端口处于缺省模式为:五种。如果端口模式没有指定,则该端口处于缺省模式为:IN 数据类型:用来指定每个端口信号的取值类型数据类型:用来指定每个端口信号的取值类型,共有共有10种。种。 VHDLVHDL语言

33、设计实体的基本结构语言设计实体的基本结构 数据类型数据类型原则上可以是任何标准的数据类型和用户自定义类型。原则上可以是任何标准的数据类型和用户自定义类型。33 3.3. 端口说明语句端口说明语句PORTPORT 端口模式说明:端口模式说明: VHDLVHDL语言设计实体的基本结构语言设计实体的基本结构 34 3.3. 端口说明语句端口说明语句PORTPORT 端口模式端口模式的符号的符号 : IN端口端口模式模式 : OUT端口模式:端口模式:INOUT端口模式:端口模式:BUFFER端口模式:端口模式:VHDLVHDL语言设计实体的基本结构语言设计实体的基本结构 35 3.3. 端口说明语句

34、端口说明语句PORTPORT 【例例】 编写编写2 2输入与非门的实体说明。输入与非门的实体说明。 设与非门的输入为设与非门的输入为A A和和B B,输出为,输出为Y Y。 ENTITY ENTITY nand2 ISIS GENERICGENERIC ( risew: TIME :=1ns; fallw: TIME :=1ns ); PORTPORT ( A: ININ STD_LOGIC; B: ININ STD_LOGIC; Y: OUTOUT STD_LOGIC ); ENDEND nand2;-定义定义risewrisew为上升沿为上升沿-定义定义fallwfallw为下降沿为下降沿

35、-定义定义A A、B B和和Y Y为逻辑位为逻辑位VHDLVHDL语言设计实体的基本结构语言设计实体的基本结构 PORT (a,b: IN STD_LOGIC; y : OUT STD_LOGIC);36VHDLVHDL语言的结构体语言的结构体 结构体是设计实体的核心,它具体指明了设计结构体是设计实体的核心,它具体指明了设计实体的行为、元件及内部连接关系。实体的行为、元件及内部连接关系。 结构体所承担的任务结构体所承担的任务 : 定义结构体内部所使用的各项元素;定义结构体内部所使用的各项元素; 通过通过VHDLVHDL提供的语句来描述设计实体所要提供的语句来描述设计实体所要求的具体行为和功能;

36、求的具体行为和功能; 描述各元件之间的连接。描述各元件之间的连接。VHDLVHDL语言设计实体的基本结构语言设计实体的基本结构 37VHDLVHDL语言的结构体语言的结构体 结构体内部构造的描述层次和描述内容:结构体内部构造的描述层次和描述内容:结结结结构构构构体体体体结结结结构构构构体体体体说说说说明明明明结结结结构构构构体体体体功功功功能能能能描描描描述述述述常数说明常数说明常数说明常数说明数据类型说明数据类型说明数据类型说明数据类型说明信号说明信号说明信号说明信号说明例化元件说明例化元件说明例化元件说明例化元件说明子程序说明子程序说明子程序说明子程序说明块语句块语句块语句块语句进程语句进

37、程语句进程语句进程语句信号赋值语句信号赋值语句信号赋值语句信号赋值语句子程序调用语句子程序调用语句子程序调用语句子程序调用语句元件例化语句元件例化语句元件例化语句元件例化语句VHDLVHDL语言设计实体的基本结构语言设计实体的基本结构 38VHDLVHDL语言的结构体语言的结构体 结构体由两个基本部分组成:结构体由两个基本部分组成: 结构体说明,用来对数据类型、常数、信号、结构体说明,用来对数据类型、常数、信号、子程序和元件等进行说明。子程序和元件等进行说明。 结构体功能描述,用来描述设计实体的逻辑结构体功能描述,用来描述设计实体的逻辑行为,可以用不同的描述风格来表达设计实体的逻辑行为,可以用

38、不同的描述风格来表达设计实体的逻辑功能。功能。 VHDLVHDL语言设计实体的基本结构语言设计实体的基本结构 39 1. 结构体的基本格式结构体的基本格式 VHDLVHDL语言设计实体的基本结构语言设计实体的基本结构 结构体的一般格式如下:结构体的一般格式如下:ARCHITECTURE 结构体名结构体名 OF 实体名实体名 IS结构体说明部分结构体说明部分;BEGIN功能描述语句功能描述语句;END 结构体名;结构体名; 结构体说明是指对结构体需要使用的信号、常数、数据类结构体说明是指对结构体需要使用的信号、常数、数据类 型和函数进行型和函数进行定义和说明。定义和说明。 功能描述语句功能描述语

39、句位于位于BEGIN和和END之间,这些语句具体地描述了构造体的行为。之间,这些语句具体地描述了构造体的行为。并发处理语句是功能描述的核心部分,也是变化最丰富的部分并发处理语句是功能描述的核心部分,也是变化最丰富的部分。并发处理语句并发处理语句可以使用赋值语句、进程语句、元件例化语句、块语句以及子程序等。可以使用赋值语句、进程语句、元件例化语句、块语句以及子程序等。需要注需要注意的是意的是,这些语句都是并发(同时)执行的,与排列顺序无关。,这些语句都是并发(同时)执行的,与排列顺序无关。40 结构体引导语句用来引导结构体的开始,并定结构体引导语句用来引导结构体的开始,并定义结构体的名称。义结构

40、体的名称。 2. 结构体引导语句结构体引导语句 关键字:关键字: ARCHITECTURE 格格 式:式: ARCHITECTURE 结构体名结构体名 OF 实体名实体名 ISIS 结构体名是给予结构体的名称,是该结构体唯结构体名是给予结构体的名称,是该结构体唯一的名字,用来一的名字,用来表明该结构体所隶属于哪个实体。表明该结构体所隶属于哪个实体。 VHDLVHDL语言设计实体的基本结构语言设计实体的基本结构 41 用于定义结构体中所用的数据对象和子程序,用于定义结构体中所用的数据对象和子程序,并对所引用的元件加以说明,如:并对所引用的元件加以说明,如: 3. 结构体说明语句结构体说明语句 信

41、号(信号(SIGNALSIGNAL) 类型(类型(TYPETYPE) 常数(常数(CONSTANTCONSTANT) 元件(元件(COMPONENTCOMPONENT) 函数(函数(FUNCTIONFUNCTION) 过程(过程(PROCEDUREPROCEDURE) VHDLVHDL语言设计实体的基本结构语言设计实体的基本结构 42 4. 功能描述语句功能描述语句 用于描述实体的逻辑功能。用于描述实体的逻辑功能。 功能描述语句结构可以含有五种不同类型。功能描述语句结构可以含有五种不同类型。 结结结结构构构构体体体体功功功功能能能能描描描描述述述述块语句块语句块语句块语句进程语句进程语句进程语

42、句进程语句信号赋值语句信号赋值语句信号赋值语句信号赋值语句子程序调用语句子程序调用语句子程序调用语句子程序调用语句元件例化语句元件例化语句元件例化语句元件例化语句VHDLVHDL语言设计实体的基本结构语言设计实体的基本结构 43 4. 功能描述语句功能描述语句 块语句(块语句(BLOCKBLOCK) 块语句结构是由若干个并行执行语句构成的组合体,其块语句结构是由若干个并行执行语句构成的组合体,其功能是将结构体中的并行语句包装在一起,组成一个或多个功能是将结构体中的并行语句包装在一起,组成一个或多个模块(即子模块)。模块(即子模块)。 进程语句(进程语句(PROCESSPROCESS) 定义顺序

43、语句模块,其内部为顺序语句,将从外部获得定义顺序语句模块,其内部为顺序语句,将从外部获得的信号值,或内部的运算数据向其他信号进行赋值。的信号值,或内部的运算数据向其他信号进行赋值。 信号赋值语句(信号赋值语句(SIGNALSIGNAL) 用来将设计实体内的处理结果向所定义的信号或界面端用来将设计实体内的处理结果向所定义的信号或界面端口进行赋值。口进行赋值。 VHDLVHDL语言设计实体的基本结构语言设计实体的基本结构 44 4. 功能描述语句功能描述语句 子程序调用语句子程序调用语句 由过程(由过程(PROCEDUREPROCEDURE)和函数()和函数(FUNCTIONFUNCTION)组成

44、,其内部)组成,其内部是顺序语句。用来调用过程和函数,并将结果赋值给信号。是顺序语句。用来调用过程和函数,并将结果赋值给信号。 元件例化语句(元件例化语句(COMPONENTCOMPONENT) 元件例化语句用来调用另一个设计实体所描述的电路。元件例化语句用来调用另一个设计实体所描述的电路。调用时,元件例化语句对其他的设计实体做元件调用说明,调用时,元件例化语句对其他的设计实体做元件调用说明,并将元件的端口与其他元件、信号或高层设计实体的界面端并将元件的端口与其他元件、信号或高层设计实体的界面端口进行连接。口进行连接。 VHDLVHDL语言设计实体的基本结构语言设计实体的基本结构 45 【例例

45、】编写一个四位二进制加法计数器的结构体。编写一个四位二进制加法计数器的结构体。 计数器共有三个输入和五个输出。计数器共有三个输入和五个输出。 输入:时钟输入端输入:时钟输入端CLKCLK、使能控制端、使能控制端ENEN和异步清零端和异步清零端RdRd。 输出:四位状态输出输出:四位状态输出Q3Q3Q0Q0和进位输出和进位输出COCO。 设计程序的结构体如下:设计程序的结构体如下: ARCHITECTURE ARCHITECTURE behavior behavior OFOF counter16 counter16 ISIS BEGINBEGIN CO CO= =1 1 WHENWHEN (Q

46、= (Q=“11111111”ANDAND EN=EN=1 1ANDAND Rd=Rd=1 1) ) ELSEELSE 0 0; - - 条件赋值语句条件赋值语句 PROCESSPROCESS (CLK (CLK,Rd) Rd) - - 进程语句进程语句 BEGINBEGIN IFIF (Rd= (Rd=0 0) ) THENTHEN Q Q= =“0000”; - IF- IF语句语句 ELSIFELSIF (CLK (CLK EVENTEVENT ANDAND CLK= CLK=1 1) ) THENTHEN - CLK- CLK上升沿上升沿计数计数 IFIF (EN= (EN=1 1)

47、) THENTHEN Q Q=Q+1=Q+1; END IFEND IF; END IFEND IF; END PROCESSEND PROCESS; ENDEND behavior behavior;VHDL语言设计实体的基本结构语言设计实体的基本结构 46VHDL结构体的基本子结构结构体的基本子结构 在规模较大的电路设计中,整个电路将被分成若干个相对在规模较大的电路设计中,整个电路将被分成若干个相对独立的模块来描述。这样,一个结构体可以用几个子结构,即独立的模块来描述。这样,一个结构体可以用几个子结构,即相对独立的几个模块来构成。相对独立的几个模块来构成。VHDL语言有以下语言有以下3种形

48、式的子结种形式的子结构描述语句:构描述语句: BLOCK 语句结构语句结构 PROCESS 语句结构语句结构 SUBPROGRAMS 结构结构47 块(块( BLOCK ) BLOCK语句的语法格式为:语句的语法格式为: 块标号:块标号:BLOCK (块保护条件块保护条件) 说明语句说明语句; BEGIN 并发处理语句并发处理语句; END BLOCK 标号名;标号名; 保护条件保护条件是可选项,它是一个布尔表达式。如果有保护条件,则该条件应用是可选项,它是一个布尔表达式。如果有保护条件,则该条件应用圆括号括起来,放在圆括号括起来,放在BLOCK之后。保护条件的作用是:只有当其为真时,该之后。

49、保护条件的作用是:只有当其为真时,该块中的语句才被启动执行;否则,该块中的语句不被执行。块中的语句才被启动执行;否则,该块中的语句不被执行。 BLOCK语句中所描述的各个语句是可以并行执行的,它和书写顺序无关。语句中所描述的各个语句是可以并行执行的,它和书写顺序无关。 一个大规模的电原理图通常可以分割成多张子原理图,以便于设计和存档。一个大规模的电原理图通常可以分割成多张子原理图,以便于设计和存档。同样,在同样,在VHDL程序设计中,构造体对应整个电原理图,而构造体可由多个程序设计中,构造体对应整个电原理图,而构造体可由多个BLOCK块组成,每一个块组成,每一个BLOCK块则对应一张子原理图。

50、电原理图的分割关系块则对应一张子原理图。电原理图的分割关系和和VHDL程序中用程序中用BLOCK块分割构造体的关系是一一对应的。块分割构造体的关系是一一对应的。48例7 用BLOCK语句描述2选1电路的程序。 ENTITY mux2_1 IS PORT(d0, d1, sel: INSTD_LOGIC; q: OUT STD_LOGIC); END mux2_1; ARCHITECTURE amux OF mux2_1 IS SIGNAL tmp1,tmp2,tmp3 : STD_LOGIC; BEGIN cale: BLOCK BEGINtmp1=d0 AND sel;tmp2=d1 AND

51、 (not sel);tmp3=tmp1 OR tmp2;q=tmp3; END BLOCK cale; END amux; 上述结构体中只有一个 BLOCK块,若电路复杂时可由几个BLOCK块组成。2选1 数据选择器d1d0qselu2u1u3tmp1tmp2tmp349例8 用带保护条件的BLOCK语句描述一个锁存器的结构。 ENTITY latch ISPORT(d, clk: INSTD_LOGIC; q, qn : OUT STD_LOGIC); END latch; ARCHITECTURE latch_a OF latch IS BEGIN g1:BLOCK(clk=1) BEG

52、IN q=guarded d after 5ns; qn=guarded not(d) after 7ns; END BLOCK g1; END latch_a;qnq QD Cdclk 在在BLOCK块中的两个信号传送语句都写有块中的两个信号传送语句都写有前卫关键词前卫关键词guarded,表明只有表明只有clk=1为真时,这两个语句才能执行。为真时,这两个语句才能执行。 (注意注意 :这里的综合工具不支持:这里的综合工具不支持 guarded block 语句和语句和 after 短语短语。) )50进程(进程( PROCESS ) PROCESS语语句句是是VHDL中中描描述述硬硬件件系

53、系统统并并发发行行为为的的最最常常用用、最基本的语句。最基本的语句。进程语句的一般格式为;进程语句的一般格式为; 进程名:进程名: PROCESS (敏感信号表敏感信号表)进程说明语句进程说明语句 BEGIN顺序描述语句;顺序描述语句; END PROCESS 进程名进程名; Example:PROCESS ( CLK )BEGINIF CLKEVENT AND CLK = 1 THENQ1= D; END IF;Q=Q1;END PROCESS;51关于 进程 ( PROCESS )的疑问?1.何时 PROCESS 被执行?2.何时 PROCESS 执行结束 ?3.可以有多个进程出现吗?4.

54、多个进程之间如何通信?5.与C 代码中的函数 的区别 ?52何时 PROCESS 被执行?进程敏感量1.PROCESS ( CLK )2.BEGIN3.IF CLKEVENT AND CLK = 1 THEN4.Q1= D;5. END IF;6.Q=Q1;7.END PROCESS;CLK 信号信号 发生变化时发生变化时 PROCESS 被执行被执行53看看此PROCESS的电路?1.LIBARY IEEE;2.USE IEEE.STD_LOGIC_1164.ALL;3.ENTITY and2 IS 4.PORT ( a:INSTD_LOGIC;5.b:INSTD_LOGIC;6.q:OUT

55、 STD_LOGIC7.);8.END ENTITY and2;9.ARCHITECTURE bhv OF and2 IS10.SIGNALQ1:STD_LOGIC;11.BEGIN12.P0: 13. process(a,b)14. begin15.q = a and b;16. end process p0;17.END ARCHITECTURE bhv;54可以有多个进程出现吗?1.2.ARCHITECTURE BEHAV OFmulIS3.SIGNAL temp:BIT4.BEGIN5.p_a:6.PROCESS ( a, b, selx )7.BEGIN8.IF ( selx =0

56、) THEN9.temp=a;10.ELSE11.temp=b;12.END IF;13.END PROCESS p_a;14.p_b:15.PROCESS ( temp, c, sely )16.BEGIN17.IF ( sely =0 ) THEN18.data_out=temp;19.ELSE20.data_out=datac;21.END IF;22.END PROCESS p_b;23.END ARCHITECTURE BEHAV;5556多个进程之间如何通信?57关于关于 进程进程 ( PROCESS )的小结的小结 敏敏感感信信号号表表所所标标明明的的信信号号是是用用来来启启动动

57、进进程程的的。敏敏感感信信号号表表中中的的信信号号无无论论哪哪一一 个个 发发 生生 变变 化化 ( 如如 由由 0变变 1或或 由由 1变变 0 ) 都都 将将 启启 动动 该该PROCESS语语句句。一一旦旦启启动动后后, PROCESS中中的的语语句句将将从从上上至至下下逐逐句句执执行行一一遍遍。当当最最后后一一个个执执行行完完毕毕以以后后,即即返返回回到到开开始始的的PROCESS语语句句,等等待待下下一一次次启启动动。因因此此,只只要要PROCESS中中指指定定的的信信号号变变化化一一次次,该该PROCESS语语句句就就会会执执行行一一遍。遍。 PROCESS内内部部各各语语句句之之

58、间间是是顺顺序序关关系系 。在在系系统统仿仿真真时时, PROCESS语语句句是是按书写顺序一条一条向下执行的。而不象按书写顺序一条一条向下执行的。而不象BLOCK中的语句可以并行执行。中的语句可以并行执行。 若若构构造造体体中中有有多多个个进进程程存存在在,各各进进程程之之间间的的关关系系是是并并行行关关系系 ;进进程程之之间间的的通信通信则一边通过接口由信号传递,一边并行地同步执行。则一边通过接口由信号传递,一边并行地同步执行。58 子程序(子程序( SUBPROGRAM )VHDL的子程序有两种类型:过程(PROCEDURE)函数(FUNCTION)59 过程(过程(PROCEDURE)

59、过程语句的结构:过程语句的结构:PROCEDURE 过程名(参数过程名(参数1;参数;参数2; )IS定义语句定义语句;BEGIN顺序处理顺序处理语句语句;END 过程名;过程名;过程语句的调用格式:过程语句的调用格式:过程名(实际参数表);过程名(实际参数表);60例10 设计一个从两个整数中求取最大值的过程。PROCEDURE max(a, b: IN INTEGER; y:OUT INTEGER) ISBEGINIF (ab) THEN y=b;ELSE yb) THEN tmp:=a;ELSE tmp:=b; END IF;RETURN tmp; END max; 函数的参数均为输入参

60、数。函数的参数均为输入参数。 函数调用返回一个指定数据类型的值。函数调用返回一个指定数据类型的值。63例11 在结构体中调用求最大值的函数。LIBRARY ieee;USE ieee.std_logic_1164.ALL;ENTITY dpeak IS PORT(clk, set : IN STD_LOGIC; date : IN STD_LOGIC_VECTOR(5 downto 0); dout : OUT STD_LOGIC_VECTOR(5 downto 0);END dpeak;64ARCHITECTURE rtl OF dpeak ISSIGNAL peak : STD_LOGIC

61、_VECTOR(5 downto 0);BEGINdout=peak;PROCESS (clk)BEGINIF (clkevent and clk=1) THEN IF (set=1) THEN peak=date; ELSE peak= max(date,peak); END IF;END IF;END PROCESS;END rtl;65子程序的特点:子程序的特点: 子程序可以在结构体或程序包的任何位置被调用,而且可以反子程序可以在结构体或程序包的任何位置被调用,而且可以反复调用。复调用。 子程序是一个非重入的程序,即子程序返回后才能再被调用。子程序是一个非重入的程序,即子程序返回后才能再

62、被调用。在调用时子程序首先要进行初始化,执行结束后子程序终止;再在调用时子程序首先要进行初始化,执行结束后子程序终止;再调用时要再进行初始化。因此,子程序内部的值不能保持。调用时要再进行初始化。因此,子程序内部的值不能保持。 VHDL的子程序具有可重载性,即允许有许多重名的子程序,的子程序具有可重载性,即允许有许多重名的子程序,但这些子程序的参数类型和返回数值类型是不同的。但这些子程序的参数类型和返回数值类型是不同的。66VHDL语言结构体的描述方式 VHDLVHDL语言的结构体可以用不同的语句类型和描述语言的结构体可以用不同的语句类型和描述方式来表达电路所期望的逻辑行为,而对于相同的逻方式来

63、表达电路所期望的逻辑行为,而对于相同的逻辑行为,可以有不同的语句表达方式。辑行为,可以有不同的语句表达方式。 在在VHDLVHDL语言中,这些描述方式或建模方式称为语言中,这些描述方式或建模方式称为VHDLVHDL语言的描述风格。语言的描述风格。 常用的描述方式主要有:常用的描述方式主要有: 行为描述行为描述 数据流描述数据流描述 结构描述结构描述 混合描述混合描述 67 行为描述依据设计实体的功能或算法对结构体行为描述依据设计实体的功能或算法对结构体进行描述,不需要给出实现这些行为的硬件结构,进行描述,不需要给出实现这些行为的硬件结构,只强调电路的行为和功能。只强调电路的行为和功能。 在结构

64、体中,行为描述主要用函数、过程和进在结构体中,行为描述主要用函数、过程和进程语句,以功能或算法的形式来描述数据的转换和程语句,以功能或算法的形式来描述数据的转换和传送。传送。 结构体的行为描述结构体的行为描述 VHDL语言结构体的描述方式 68【例例】试用行为描述完成二选一数据选择器的设计。试用行为描述完成二选一数据选择器的设计。 设数据输入为设数据输入为d0d0和和d1d1、选择输入为、选择输入为s s,输出为,输出为y y。 程序清单:程序清单: ENTITYENTITY mux21 mux21 ISIS PORTPORT ( d1, d0: ( d1, d0: ININ STD_LOGI

65、C STD_LOGIC; s: s: ININ STD_LOGIC STD_LOGIC; y: y: OUTOUT STD_LOGIC ) STD_LOGIC ); ENDEND mux21 mux21; ARCHITECTUREARCHITECTURE behavior behavior OFOF mux21 mux21 ISIS BEGINBEGIN y y = d1 = d1 WHENWHEN s = s =1 1 ELSEELSE d0 d0; ENDEND behavior behavior;VHDL语言结构体的描述方式 69 行为描述类似于高级编程语言,主要是对设计行为描述类似于高

66、级编程语言,主要是对设计实体的功能或数学模型进行描述,其抽象程度远高实体的功能或数学模型进行描述,其抽象程度远高于数据流描述和结构描述,其特点如下:于数据流描述和结构描述,其特点如下: 行为描述具有很高的抽象程度,远高于数据行为描述具有很高的抽象程度,远高于数据流描述和结构描述;流描述和结构描述; 行为描述只需描述清楚输入与输出的行为,行为描述只需描述清楚输入与输出的行为,而与它们的结构无关;而与它们的结构无关; 描述程序大多采用算术运算、关系运算、惯描述程序大多采用算术运算、关系运算、惯性延时、传输延时等语句;性延时、传输延时等语句; 结构体中的过程语句属于典型的行为描述。结构体中的过程语句

67、属于典型的行为描述。VHDL语言结构体的描述方式 70 即逻辑描述,它利用即逻辑描述,它利用VHDLVHDL语言中的赋值符和逻语言中的赋值符和逻辑运算符进行描述,既包含逻辑单元的结构信息,辑运算符进行描述,既包含逻辑单元的结构信息,又隐含地表示某种行为。又隐含地表示某种行为。结构体的数据流描述结构体的数据流描述 例如:例如: y y = a = a NORNOR b b; z z = = NOTNOT( a ( a XORXOR b ) b );/ y/ y等于等于a a与与b b的或非运算的或非运算/ z/ z等于等于a a与与b b的同或运算的同或运算 这种方式主要采用非结构化的并行语句描

68、述。这种方式主要采用非结构化的并行语句描述。VHDL语言结构体的描述方式 71【例例】将数据选择器采用数据流描述。将数据选择器采用数据流描述。 逻辑表达式:逻辑表达式: y y = = d0d0s s + + d1d1s s 程序清单:程序清单: ENTITYENTITY mux21 mux21 ISIS PORTPORT (d1, d0: (d1, d0: ININ STD_LOGIC STD_LOGIC; s: s: ININ STD_LOGIC STD_LOGIC; y: y: OUTOUT STD_LOGIC ) STD_LOGIC ); ENDEND mux21 mux21; ARC

69、HITECTUREARCHITECTURE dataflow dataflow OFOF mux21 IS mux21 IS SIGNALSIGNAL tmp1, tmp2, tmp3: STD_LOGIC tmp1, tmp2, tmp3: STD_LOGIC; BEGINBEGIN tmp1 tmp1 = d1 = d1 ANDAND s s; tmp2 tmp2 = d0 = d0 ANDAND ( NOT s ) ( NOT s ); tmp3 tmp3 = tmp1 = tmp1 OROR tmp2 tmp2; y y = tmp3= tmp3; ENDEND dataflow da

70、taflow;VHDL语言结构体的描述方式 72 结构描述是从设计实体的内部结构对结构体进结构描述是从设计实体的内部结构对结构体进行描述的,并给出该实体所包含的模块或元件的相行描述的,并给出该实体所包含的模块或元件的相互连接关系。互连接关系。 这种方式主要采用元件例化(这种方式主要采用元件例化(COMPONENTCOMPONENT)的)的形式对设计实体进行描述。可以用不同类型的结构形式对设计实体进行描述。可以用不同类型的结构来实现多层次的工程设计,从简单的门电路到复杂来实现多层次的工程设计,从简单的门电路到复杂的元件来描述整个系统,元件之间的连接通过定义的元件来描述整个系统,元件之间的连接通过

71、定义的端口界面来实现。的端口界面来实现。 结构体的结构描述结构体的结构描述 VHDL语言结构体的描述方式 73 结构描述建模的步骤如下:结构描述建模的步骤如下: 元件说明:描述局部接口。元件说明:描述局部接口。 元件例化:相对于其他元件放置元件。元件例化:相对于其他元件放置元件。 元件配置:指定元件所有的设计实体。元件配置:指定元件所有的设计实体。 结构描述用于层次化设计,高层次的设计模块结构描述用于层次化设计,高层次的设计模块调用低层次的设计模块,或直接用门电路来构成一调用低层次的设计模块,或直接用门电路来构成一个复杂的逻辑电路。个复杂的逻辑电路。 VHDL语言结构体的描述方式 74【例例】

72、将数据选择器采用结构描述。将数据选择器采用结构描述。 程序清单:程序清单: ENTITYENTITY mux21 ISIS PORTPORT (d1,d0: ININ STD_LOGIC; s: ININ STD_LOGIC; y: OUTOUT STD_LOGIC ); ENDEND mux21; ARCHITECTUREARCHITECTURE structure OFOF mux21 ISIS COMPONENTCOMPONENT and2 PORTPORT (a, b: ININ STD_LOGIC; c: OUTOUT STD_LOGIC ); ENDEND COMPONENTCOM

73、PONENT; COMPONENTCOMPONENT or2 PORTPORT (a, b: ININ STD_LOGIC; c: OUTOUT STD_LOGIC ); ENDEND COMPONENTCOMPONENT;&11 d1 d0 s y aa ab ns U1 U3 U2 U4VHDL语言结构体的描述方式 75【例例】将数据选择器采用结构描述。将数据选择器采用结构描述。 程序清单:程序清单:&11 d1 d0 s y aa ab ns U1 U3 U2 U4 COMPONENTCOMPONENT not1 PORTPORT (a: ININ STD_LOGIC; c: OUTOU

74、T STD_LOGIC ); ENDEND COMPONENTCOMPONENT; SIGNALSIGNAL aa, ab, ns: STD_LOGIC; BEGINBEGIN U1: not1 PORT MAPPORT MAP ( s, ns ); U2: and2 PORT MAPPORT MAP ( d1, s, aa ); U3: and2 PORT MAPPORT MAP ( ns, d0, ab ); U4: or2 PORT MAPPORT MAP ( aa, ab, y ); ENDEND structure;VHDL语言结构体的描述方式 76 混合描述就是在结构体中同时使用多

75、种混合描述就是在结构体中同时使用多种不同的描述方式,它可以使描述简单灵活。不同的描述方式,它可以使描述简单灵活。 例如,在同一结构体中,分别使用元件例如,在同一结构体中,分别使用元件例化语句和并行语句,就可以构成由两种描例化语句和并行语句,就可以构成由两种描述方式的混合描述。述方式的混合描述。 结构体的混合描述结构体的混合描述 VHDL语言结构体的描述方式 77【例例】用混合描述完成半加器的设计。用混合描述完成半加器的设计。 表达式:表达式:sn = anbn cn = anbn 数据流描述数据流描述 结构描述结构描述 程序清单:程序清单: ENTITYENTITY half_adder IS

76、IS PORTPORT (an,bn: ININ STD_LOGIC; sn,cn: OUTOUT STD_LOGIC); ENDEND half_adder; ARCHITECTURARCHITECTURE mix_ha OFOF half_adder ISIS COMPONENTCOMPONENT and2 PORTPORT (a,b: ININ STD_LOGIC; c: OUTOUT STD_LOGIC); END COMPONENTEND COMPONENT; BEGINBEGIN sn RETURN 1; WHEN 1= RETURN 0; WHEN Z= RETURN Z; EN

77、D CASE; END invert;END BODY;92 配置是将特定的结构体与一个确定的实体相关配置是将特定的结构体与一个确定的实体相关联,为大型系统的设计提供管理和工程组织。联,为大型系统的设计提供管理和工程组织。 配置是设计实体配置是设计实体VHDLVHDL语言描述的组成部分之一,语言描述的组成部分之一,但不是必不可少的。常用来描述层与层之间、实体但不是必不可少的。常用来描述层与层之间、实体与结构体之间的连接关系。与结构体之间的连接关系。 配置配置 配置可分为三种类型:配置可分为三种类型: 默认配置默认配置 元件配置元件配置 结构体配置结构体配置 VHDL语言的库、程序包及配置语言的

78、库、程序包及配置 93 默认配置是一种最为简单的配置,当设计实体中不含有任何其他元默认配置是一种最为简单的配置,当设计实体中不含有任何其他元件和块语句时,可以使用默认配置。件和块语句时,可以使用默认配置。 1. 默认配置默认配置 VHDL语言的库、程序包及配置语言的库、程序包及配置 配置的基本格式为:配置的基本格式为: CONFIGURATION 配置名配置名 OF 实体名实体名 IS配置说明配置说明; END 配置名;配置名; 配置语句配置语句描述了层与层之间的连接关系,以及实体与构造描述了层与层之间的连接关系,以及实体与构造体之间的连接关系。设计者可以利用配置语句选择不同的构造体之间的连接

79、关系。设计者可以利用配置语句选择不同的构造体,使其与要设计的实体相对应;在仿真某一个实体时,可以体,使其与要设计的实体相对应;在仿真某一个实体时,可以利用配置选择不同的构造体进行性能对比实验,以得到性能最利用配置选择不同的构造体进行性能对比实验,以得到性能最佳的构造体。佳的构造体。94 CONFIGURATION 配置名配置名 OF 实体名实体名 IS FOR 选配结构体名选配结构体名 END FOR; END 配置名配置名; 配置语句根据不同情况,其说明语句有简有繁。最简单的配置语句根据不同情况,其说明语句有简有繁。最简单的缺省配置格式为:缺省配置格式为:例:例:加入了配置的加入了配置的4位

80、等值比较器设计文件位等值比较器设计文件LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY comp4 IS PORT(a, b: IN STD_LOGIC_VECTOR(3 downto 0); y: OUT STD_LOGIC);END comp4;VHDL语言的库、程序包及配置语言的库、程序包及配置 95-结构体结构体 1:ARCHITECTURE behavior OF comp4 ISBEGINComp: PROCESS(a, b) BEGIN IF a=b THEN y=1; ELSE y=0; END IF; END PROCESS co

81、mp;END behavior;-结构体结构体 2:ARCHITECTURE dataflow OF comp4 ISBEGIN y=1 WHEN(a=b) ELSE 0;END dataflow;96-结构体结构体 3:ARCHITECTURE structural OF comp4 IS COMPONENT xnor2 PORT(in1, in2: IN STD_LOGIC; Out: OUT STD_LOGIC); END COMPONENT; COMPONENT and4 PORT(in1, in2, in3, in4: IN STD_LOGIC; Out: OUT STD-LOGIC

82、); END COMPONENT; SIGNAL s: STD_LOGIC_VECTOR(0 to 3);BEGIN u0: xnor2 PORT MAP(a(0),b(0),s(0); u1: xnor2 PORT MAP(a(1),b(1),s(1); u2: xnor2 PORT MAP(a(2),b(2),s(2); u3: xnor2 PORT MAP(a(3),b(3),s(3); u4: and4 PORT MAP(s(0),s(1),s(2),s(3),y);END structural;元件标号元件型号元件例化语句元件例化语句974 4位等值比较器位等值比较器位等值比较器位等

83、值比较器ys0b0a0b1a1b2a2b3a3s1s2s3abu0u1u3u2u4-配置配置 :CONFIGURATION comp4_con OF comp4 IS FOR behavior END FOR;END comp4_con;98 LIBRARYLIBRARY IEEE IEEE; USEUSE IEEE.STD_LOGIC_1164. IEEE.STD_LOGIC_1164.ALLALL; ENTITYENTITY COUNTER COUNTER ISIS PORTPORT (CLK,CLR: (CLK,CLR: ININ STD_LOGIC STD_LOGIC; Q: Q: O

84、UTOUT INTEGER) INTEGER); ENDEND COUNTER COUNTER;【例例】设计两个计数位宽分别为设计两个计数位宽分别为4位和位和8位的计数器。位的计数器。 设两个计数器具有相同的功能和外部结构,只是计数位设两个计数器具有相同的功能和外部结构,只是计数位宽不同。用一个计数器实体来实现两个不同结构体的配置。宽不同。用一个计数器实体来实现两个不同结构体的配置。 程序清单:程序清单: 计数器的实体计数器的实体 VHDL语言的库、程序包及配置语言的库、程序包及配置 99【例例】设计两个计数位宽分别为设计两个计数位宽分别为4位和位和8位的计数器。位的计数器。 程序清单:程序清

85、单: ARCHITECTUREARCHITECTURE COUNT4 COUNT4 OFOF COUNTER COUNTER ISIS BEGINBEGIN PROCESSPROCESS (CLK) (CLK) VARIABLEVARIABLE QQ: INTEGER:= QQ: INTEGER:= 0 0; BEGINBEGIN IFIF CLR=0 CLR=0 THENTHEN QQ:= QQ:= 0 0; ELSIFELSIF (CLK EVENT (CLK EVENT ANDAND CLK=1) CLK=1) THENTHEN IFIF QQ=15 QQ=15 THENTHEN QQ:

86、= QQ:= 0 0; ELSEELSE QQ:= QQ:= QQ+1QQ+1; END IFEND IF; END IFEND IF; Q Q = = QQQQ; END PROCESSEND PROCESS; ENDEND COUNT4 COUNT4; 计数器计数器COUNT4COUNT4的结构体的结构体 VHDL语言的库、程序包及配置语言的库、程序包及配置 100【例例】设计两个计数位宽分别为设计两个计数位宽分别为4位和位和8位的计数器。位的计数器。 程序清单:程序清单: ARCHITECTUREARCHITECTURE COUNT8 COUNT8 OFOF COUNTER COUNTE

87、R ISIS BEGINBEGIN PROCESSPROCESS (CLK) (CLK) VARIABLEVARIABLE QQ: INTEGER:= QQ: INTEGER:= 0 0; BEGINBEGIN IFIF CLR=0 CLR=0 THENTHEN QQ:= QQ:= 0 0; ELSIFELSIF (CLK EVENT (CLK EVENT ANDAND CLK=1) CLK=1) THENTHEN IFIF QQ=255 QQ=255 THENTHEN QQ:= QQ:= 0 0; ELSEELSE QQ:= QQ:= QQ+1QQ+1; END IFEND IF; END

88、IFEND IF; Q Q = = QQQQ; END PROCESSEND PROCESS; ENDEND COUNT8 COUNT8; 计数器计数器COUNT8COUNT8的结构体的结构体 VHDL语言的库、程序包及配置语言的库、程序包及配置 101【例例】设计两个计数位宽分别为设计两个计数位宽分别为4位和位和8位的计数器。位的计数器。 程序清单:程序清单: CONFIGURATIONCONFIGURATION COUNT_4 COUNT_4 OFOF COUNTER COUNTER ISIS FORFOR COUNT4 COUNT4 END FOREND FOR; ENDEND COUN

89、T_4 COUNT_4; CONFIGURATIONCONFIGURATION COUNT_8 COUNT_8 OFOF COUNTER COUNTER ISIS FORFOR COUNT8 COUNT8 END FOREND FOR; ENDEND COUNT_8 COUNT_8; 计数器的配置计数器的配置 VHDL语言的库、程序包及配置语言的库、程序包及配置 102 当结构体中含有多个引用元件时,可以采用元当结构体中含有多个引用元件时,可以采用元件配置,以指明引用元件的具体位置。件配置,以指明引用元件的具体位置。 2. 元件配置元件配置 格式:格式: CONFIGURATION 配置名配置

90、名 OF 实体名实体名 IS FOR 选配结构体名选配结构体名 FOR 元件例化标号元件例化标号: : 元件名元件名 USE CONFIGURATION 库名库名. .元件配置名;元件配置名; 或或 USE ENTITY 库名库名. .实体名(结构体名);实体名(结构体名); END FOR; END FOR; END 配置名;配置名; VHDL语言的库、程序包及配置语言的库、程序包及配置 103 CONFIGURATIONCONFIGURATION muxmux_ _ cfgcfg OFOF mux21 mux21 ISIS FORFOR structure structure FORFOR

91、 U2 U2,U3: and2U3: and2 USEUSE CONFIGURATION WORK.and2_cfg CONFIGURATION WORK.and2_cfg; END FOREND FOR; FORFOR U4: or2 U4: or2 USEUSE CONFIGURATION WORK.or2_cfg CONFIGURATION WORK.or2_cfg; END FOREND FOR; END FOREND FOR; ENDEND muxmux_ _ cfgcfg; 【例例】给二选一数据选择器进行元件配置。给二选一数据选择器进行元件配置。 程序清单:程序清单: VHDL语言

92、的库、程序包及配置语言的库、程序包及配置 104 结构体配置与元件配置具有相同的特征,都是结构体配置与元件配置具有相同的特征,都是对结构体中所引用的元件进行配置,但它们所处的对结构体中所引用的元件进行配置,但它们所处的位置和书写格式有很大的不同。位置和书写格式有很大的不同。 结构体配置通常直接放在结构体说明语句的位结构体配置通常直接放在结构体说明语句的位置,而元件配置则是与元件所在的结构体分开的。置,而元件配置则是与元件所在的结构体分开的。 3. 结构体配置结构体配置 格式:格式: FOR 元件例化标号:元件名元件例化标号:元件名 USE ENTITY 库名库名. .实体名(结构体名);实体名

93、(结构体名); 或或 FOR 元件例化标号:元件名元件例化标号:元件名 USE CONFIGURATION 库名库名. .元件配置名;元件配置名; VHDL语言的库、程序包及配置语言的库、程序包及配置 105 3. 结构体配置结构体配置 例如,例如,对例对例4.3.3中的元件可采用结构体配置。中的元件可采用结构体配置。 FORFOR U2 U2,U3: and2U3: and2 USE CONFIGURATIONUSE CONFIGURATION WORK.and2_cfg WORK.and2_cfg; FORFOR U4: or2 U4: or2 USE CONFIGURATIONUSE C

94、ONFIGURATION WORK.or2_cfg WORK.or2_cfg;VHDL语言的库、程序包及配置语言的库、程序包及配置 106 语言要素是组成编程语句的基本单元,主要有:语言要素是组成编程语句的基本单元,主要有: 数据对象(数据对象(ObjectObject) 数据类型(数据类型(TypeType) 操作数(操作数(OperandsOperands) 运算操作符(运算操作符(OperatorOperator) VHDL语言的语言要素语言的语言要素 107 任何一种程序设计语言都有自己的一套书写符任何一种程序设计语言都有自己的一套书写符号和语法规则,这些符号和语法规则构成了程序设号和

95、语法规则,这些符号和语法规则构成了程序设计语言的文字规则。计语言的文字规则。 VHDL语言的文字规则语言的文字规则 1.1.数字型文字数字型文字 数字型文字有多种表达方式,包括:数字型文字有多种表达方式,包括: 整数型文字整数型文字 实数型文字实数型文字 数制基数型文字数制基数型文字 物理量型文字物理量型文字 VHDL语言的语言要素语言的语言要素 108 1.1.数字型文字数字型文字 (1 1)整数型文字)整数型文字 整数型文字都是十进制数,由数字和下划线组成。整数型文字都是十进制数,由数字和下划线组成。 例如:例如: 0 0,6 6,876876,516E2516E2,23_456_7892

96、3_456_789 156E2156E2 = 1560015600 23_456_789 23_456_789 = 2323 456456 789789 VHDL语言的语言要素语言的语言要素 109 1.1.数字型文字数字型文字 (2 2)实数型文字)实数型文字 也是十进制数,但必须带小数点,由数字、小数也是十进制数,但必须带小数点,由数字、小数点和下划线组成。点和下划线组成。 例如:例如: 98.76 98.76,12_345_678.986_5412_345_678.986_54,3.055.66E-2,0.03.055.66E-2,0.0 12_345_678.986_5412_345_

97、678.986_54 = 1212 345345 678.986678.986 5454 55.66E-2 55.66E-2 = 0.55660.5566。 VHDL语言的语言要素语言的语言要素 110 1.1.数字型文字数字型文字 (3 3)数值基数型文字)数值基数型文字 用数制基数表示的文字。用数制基数表示的文字。 格式:格式: 数制数制 # # 数值数值 # # E E 数值数值 由五部分组成:由五部分组成: 用十进制数表明数制的基数;用十进制数表明数制的基数; 数制隔离符号数制隔离符号“# #”; 用数值用数值表达的文字;表达的文字; 指数隔离符号指数隔离符号“# #”; 用十进制表示

98、的指数部分。用十进制表示的指数部分。VHDL语言的语言要素语言的语言要素 111 1.1.数字型文字数字型文字 (3 3)数值基数型文字)数值基数型文字 用数制基数表示的文字。用数制基数表示的文字。 例如:例如: 10#234# 10#234# 2#1101_1110# 2#1101_1110# 8#374# 8#374# 16#E#E1 16#E#E1 16#F.01#E+2 16#F.01#E+2-十十进制数表示,等于进制数表示,等于234 234 -二进制数表示,二进制数表示, 等于等于222222-八进制表示,等于八进制表示,等于252252-十六进制数表示,等于十六进制数表示,等于2

99、24224-十六进制数表示十六进制数表示, ,等于等于3841.003841.00VHDL语言的语言要素语言的语言要素 112 1.1.数字型文字数字型文字 物理量型文字用来表示时间、长度等物理量。物理量型文字用来表示时间、长度等物理量。 例如:例如: 50s50s 100m 100m 1k 1k 100mA 100mA -表表示示5050秒(时间)秒(时间) -表示表示100100米(长度)米(长度) -表示表示1 1千欧姆(电阻)千欧姆(电阻) -表示表示100100毫安培(电流)毫安培(电流) (4 4)物理量型文字)物理量型文字VHDL语言的语言要素语言的语言要素 113 2.2.字符

100、串型文字字符串型文字 字字符符是是用用单单引引号号括括起起来来的的ASCIIASCII字字符符,可可以以是是数字,也可以是字母或符号。数字,也可以是字母或符号。 例如:例如:0 0, ,2 2, ,A A, ,a a, ,& &等。等。 字字符符串串是是一一维维的的字字符符数数组组,用用双双引引号号括括起起来来。分为文字字符串和数值字符串。分为文字字符串和数值字符串。 (1 1)文字字符串)文字字符串 用双引号括起来的用双引号括起来的一维字符一维字符文字。文字。 例如:例如:“ABCABC”,“ERRORERROR ”,“A#BA#B”VHDL语言的语言要素语言的语言要素 114 (2 2)数

101、值字符串)数值字符串 数数值值字字符符串串也也称称为为矢矢量量,是是预预定定义义的的数数据据类类型型BITBIT的一位数组。的一位数组。 格式:格式: 数制基数符号数制基数符号“数值字符串数值字符串” 数制基数符号:数制基数符号: B B二进制基数符号;二进制基数符号; O O八进制基数符号;八进制基数符号; X X1616进制基数符号。进制基数符号。 例如:例如:B B“111010110111010110”;位矢量数组,长度为;位矢量数组,长度为9 9O O“1212” ;等效;等效B B“001010001010”,长度为,长度为6 6X X“BC6BC6”;等效;等效B B“10111

102、1000110101111000110”,长度为,长度为1212 VHDL语言的语言要素语言的语言要素 115 3.3. 标识符标识符 标标识识符符是是设设计计人人员员为为书书写写程程序序所所规规定定的的一一些些词词,用用来来给给常常数数、变变量量、信信号号、端端口口、子子程程序序、实体和结构体等定义的名称。实体和结构体等定义的名称。 VHDLVHDL语语 言言 的的 标标 准准 版版 本本 分分 为为 VHDLVHDL8787版版 和和VHDLVHDL9393版。版。 VHDLVHDL8787版的标识符称为短标识符或标识符。版的标识符称为短标识符或标识符。 VHDLVHDL9393版版的的标

103、标识识符符是是基基于于VHDLVHDL8787标标准准扩扩展展后形成的,故称作扩展标识符。后形成的,故称作扩展标识符。 VHDL语言的语言要素语言的语言要素 116 3.3. 标识符标识符 短短标标识识符符为为VHDLVHDL8787版版规规定定的的标标识识符符,但但VHDLVHDL9393版版同同样支持短标识符。样支持短标识符。 (1 1)短标识符)短标识符 规则:规则: 以字母开头以字母开头, , 后跟若干字母、数字或下划线构成;后跟若干字母、数字或下划线构成; 标识符不能以下划线结尾;标识符不能以下划线结尾; 标识符中的下划线不能连续使用;标识符中的下划线不能连续使用; 标识符中的字母不

104、分大小写;标识符中的字母不分大小写; VHDLVHDL的保留字不能用作标识符。的保留字不能用作标识符。 例如:例如:h_adder,h_adder, mux21,mux21, exampleexample 为合法标识符为合法标识符 2adder,2adder, _mux21,_mux21, ful_adderful_adder, , adder_adder_ 为为非非法法标标识识符符VHDL语言的语言要素语言的语言要素 117 3.3. 标识符标识符 满足满足VHDLVHDL9393版标准的标识符。版标准的标识符。 (2 2)扩展标识符)扩展标识符规则:规则: 扩展标识符用反斜杠扩展标识符用反

105、斜杠“ ”定界,如:定界,如:A BOY.A BOY.; 扩展标识符允许以数字开头,如:扩展标识符允许以数字开头,如:74LS19374LS193; 扩展标识符允许使用空格符、图形符号及两个以上扩展标识符允许使用空格符、图形符号及两个以上的下划线,如:的下划线,如:SIG_ _&NSIG_ _&N; 扩展标识符仍区分大小写字母,如:扩展标识符仍区分大小写字母,如:ENDEND不同于不同于endend; 扩展标识符允许使用保留字,如:扩展标识符允许使用保留字,如:ENDEND; 扩展标识符与同名的短标识符不同,如:扩展标识符与同名的短标识符不同,如:CADCAD不不同于同于CADCAD。 VHD

106、L语言的语言要素语言的语言要素 118 3.3. 标识符标识符 (3 3)下标名)下标名 用于指示数组型变量或信号的某一元素。用于指示数组型变量或信号的某一元素。 格式:格式: 标识符(表达式)标识符(表达式) 注注意意:表表达达式式的的数数值值必必须须在在数数组组元元素素下下标标号号范范围以内,并且必须是可计算的。围以内,并且必须是可计算的。 例如:例如:a a(2 2),),b b(n n) VHDL语言的语言要素语言的语言要素 119 3.3. 标识符标识符 (4 4)段名)段名 多多个个下下标标名名的的组组合合,用用于于指指示示数数组组型型变变量量或或信信号的某一段元素。号的某一段元素

107、。 格式:格式: 标识符(表达式标识符(表达式 方向方向 表达式)表达式) 标识符:标识符:数组类型信号或变量数组类型信号或变量 方向:方向:TOTO数组下标序号由低到高数组下标序号由低到高 DOWNTODOWNTO数组下标序号由高到低数组下标序号由高到低 例如:例如:D D(7 DOWNTO 07 DOWNTO 0););表示数据总线表示数据总线D7D7D0D0 D D(0 TO 7 0 TO 7 );); 表示数据总线表示数据总线D0D0D7D7 D D(4 TO 64 TO 6);); 表示数据总线表示数据总线D4D4D6D6VHDL语言的语言要素语言的语言要素 120 3.3. 标识符

108、标识符 (5 5)保留字)保留字 保保留留字字又又称称关关键键字字,是是具具有有特特殊殊含含义义的的标标识识符符,只只能能作作为为固固定定的的用用途途,不不能能直直接接作作为为标标识识符符(扩扩展展标标识符除外)。识符除外)。 ABS ABS ABS ABS ACCESS ACCESS ACCESS ACCESS AFTER AFTER AFTER AFTER ALIAS ALIAS ALIAS ALIAS ALL ALL ALL ALL AND AND AND AND ARCHITECTURE ARCHITECTURE ARCHITECTURE ARCHITECTURE ARRAY ARRA

109、Y ARRAY ARRAY ASSERT ASSERT ASSERT ASSERT ATTRIBUTE ATTRIBUTE ATTRIBUTE ATTRIBUTE BEGIN BEGIN BEGIN BEGIN BLOCK BLOCK BLOCK BLOCK BODY BODY BODY BODY BUFFER BUFFER BUFFER BUFFER BUS BUS BUS BUS CASE CASE CASE CASE COMPONENT COMPONENT COMPONENT COMPONENT CONFIGURATION CONFIGURATION CONFIGURATION CONF

110、IGURATION CONSTANT CONSTANT CONSTANT CONSTANT DISCONNECT DISCONNECT DISCONNECT DISCONNECT DOWNTO DOWNTO DOWNTO DOWNTO ELSE ELSE ELSE ELSE ELSIF ELSIF ELSIF ELSIF END END END END ENTITY ENTITY ENTITY ENTITY EXIT EXIT EXIT EXIT FILE FILE FILE FILE FOR FOR FOR FOR FUNCTION FUNCTION FUNCTION FUNCTION GE

111、NERATE GENERATE GENERATE GENERATE GENERIC GENERIC GENERIC GENERIC GROUP GROUP GROUP GROUP GUARDED GUARDED GUARDED GUARDED IF IF IF IF IMPURE IMPURE IMPURE IMPURE IN IN IN IN INERTIAL INERTIAL INERTIAL INERTIAL INOUT INOUT INOUT INOUT IS IS IS IS LABEL LABEL LABEL LABEL LIBRARY LIBRARY LIBRARY LIBRAR

112、Y LINKAGE LINKAGE LINKAGE LINKAGE LITERAL LITERAL LITERAL LITERAL LOOP LOOP LOOP LOOP MAP MAP MAP MAP MOD MOD MOD MOD NAND NAND NAND NAND NEW NEW NEW NEW NEXT NEXT NEXT NEXT NOR NOR NOR NORVHDL语言的语言要素语言的语言要素 121 3.3. 标识符标识符 (5 5)保留字)保留字 NOT NOT NOT NOT NULL NULL NULL NULL OF OF OF OF ON ON ON ON OPE

113、N OPEN OPEN OPEN OR OR OR OR OTHERS OTHERS OTHERS OTHERS OUT OUT OUT OUT PACKAGE PACKAGE PACKAGE PACKAGE PORT PORT PORT PORT POSTPONED POSTPONED POSTPONED POSTPONED PROCEDURE PROCEDURE PROCEDURE PROCEDURE PROCESS PROCESS PROCESS PROCESS PURE PURE PURE PURE RANGE RANGE RANGE RANGE RECO RECO RECO RECO

114、 REGISTER REGISTER REGISTER REGISTER RDREJECT RDREJECT RDREJECT RDREJECT REM REM REM REM REPORT REPORT REPORT REPORT RETURN RETURN RETURN RETURN ROL ROL ROL ROL ROR ROR ROR ROR SELECT SELECT SELECT SELECT SEVERITY SEVERITY SEVERITY SEVERITY SIGNAL SIGNAL SIGNAL SIGNAL SHARED SHARED SHARED SHARED SLA

115、 SLA SLA SLA SLL SLL SLL SLL SRA SRA SRA SRA SRL SRL SRL SRL SUBTYPE SUBTYPE SUBTYPE SUBTYPE THEN THEN THEN THEN TO TO TO TO TRANSPORT TRANSPORT TRANSPORT TRANSPORT TYPE TYPE TYPE TYPE UNAFFECTED UNAFFECTED UNAFFECTED UNAFFECTED UNITS UNITS UNITS UNITS UNTIL UNTIL UNTIL UNTIL USE USE USE USE VARIABL

116、E VARIABLE VARIABLE VARIABLE WAIT WAIT WAIT WAIT WHEN WHEN WHEN WHEN WHILE WHILE WHILE WHILE WITH WITH WITH WITH XNOR XNOR XNOR XNOR XOR XOR XOR XORVHDL语言的语言要素语言的语言要素 122 4.4. 注释注释 VHDLVHDL语语言言与与其其他他程程序序设设计计语语言言一一样样,为为了了便便于于理解和阅读,常在编写的程序中加上注释。理解和阅读,常在编写的程序中加上注释。 VHDL VHDL语言的注释符用双减号语言的注释符用双减号“-”表示。表示

117、。 注释语句以注释符引导,到行尾结束。注释语句以注释符引导,到行尾结束。 注注释释可可以以加加在在程程序序语语句句结结束束符符“;”之之后后,也也可以加在空行处。可以加在空行处。 VHDL语言的语言要素语言的语言要素 123 VHDLVHDL语言除了具有一定的语法规则外,还定义语言除了具有一定的语法规则外,还定义了可以接受不同数据类型赋值的数据对象。了可以接受不同数据类型赋值的数据对象。VHDL语言的数据对象语言的数据对象 常量常量(CONSTANT)(CONSTANT) 变量变量(VARIABLE)(VARIABLE) 信号信号(SIGNAL)(SIGNAL) 文件(文件(FILEFILE)

118、 数据对象主要有四种类型:数据对象主要有四种类型:VHDL语言的语言要素语言的语言要素 124 常常量量为为全全局局量量,是是指指在在设设计计描描述述过过程程中中保保持持某某一一规规定定类类型特定值不变的量。型特定值不变的量。 1.1. 常量常量(CONSTANT)(CONSTANT) 定义格式:定义格式: 规则:规则: 常量的定义应在程序开始前进行;常量的定义应在程序开始前进行; 常量一旦被赋值就不能再改变;常量一旦被赋值就不能再改变; 常量所赋的值应和定义的数据类型一致;常量所赋的值应和定义的数据类型一致; 定定义义在在程程序序包包中中的的常常量量,可可在在调调用用此此程程序序包包的的所所

119、有有设计实体中使用;设计实体中使用; 定义在设计实体内的常量,仅在该实体内使用;定义在设计实体内的常量,仅在该实体内使用; 定义在某结构体中的常量,只能在该结构体使用;定义在某结构体中的常量,只能在该结构体使用; 定义在结构体中某单元的常量,只能用于该单元。定义在结构体中某单元的常量,只能用于该单元。 CONSTANT 常量名:数据类型:常量名:数据类型:= =表达式;表达式; VHDL语言的语言要素语言的语言要素 125 1.1. 常量常量(CONSTANT)(CONSTANT) 例如:例如: CONSTANT CONSTANT width: INTEGER:=16 width: INTEG

120、ER:=16; CONSTANT CONSTANT delay: TIME:=20ns delay: TIME:=20ns; CONSTANT CONSTANT fbusfbus: BIT_VECTOR:=: BIT_VECTOR:=“1101011111010111”; CONSTANT CONSTANT VccVcc: REAL:=5.0: REAL:=5.0; -width-width是整数类型常量,值为是整数类型常量,值为1616-delay-delay是时间型常量,值为是时间型常量,值为20ns20ns-fbusfbus是位矢量型常数是位矢量型常数 其值为其值为11010111110

121、10111 -VccVcc是实数型常量,其值为是实数型常量,其值为5.05.0 VHDL语言的语言要素语言的语言要素 126 变变量量为为局局部部量量,常常用用来来存存储储中中间间数数据据,以以便便实实现现程程序序的的算算法法。它它只只能能在在进进程程语语句句、函函数数语语句句和和过过程语句的结构中使用。程语句的结构中使用。 变变量量的的赋赋值值是是一一种种理理想想化化的的数数据据传传输输,即即赋赋值值是立即生效的,不存在任何延时的行为。是立即生效的,不存在任何延时的行为。 2.2.变量变量(VARIABLE) 定义格式:定义格式: VARIABLE 变量名变量名1 , 变量名变量名2, :

122、数据类型数据类型 := 初始值初始值 ; 例如:例如:VARIABLEVARIABLE b: INTEGERb: INTEGER; VARIABLEVARIABLE a: INTEGER:=2a: INTEGER:=2 ;- 定义定义b b为整数型变量为整数型变量- 定义定义a a为整数型变量,为整数型变量, 初值为初值为2 2 VHDL语言的语言要素语言的语言要素 127 2.2.变量变量(VARIABLE) 变量的使用规则:变量的使用规则: 变量不能用于硬件连线和存储元件;变量不能用于硬件连线和存储元件; 变量赋值和初始化赋值都用变量赋值和初始化赋值都用“:=:=”表示;表示; 变变量量的

123、的初初值值不不是是预预设设的的,某某一一时时刻刻只只能能有有一个值;一个值; 变量不能用于在进程间传递数据;变量不能用于在进程间传递数据; 仿真时,变量用于建模;仿真时,变量用于建模; 综合时,变量充当数据的暂存。综合时,变量充当数据的暂存。VHDL语言的语言要素语言的语言要素 128 2.2.变量变量(VARIABLE) 变量数值的改变是通过变量赋值来实现。变量数值的改变是通过变量赋值来实现。 变量赋值语句的格式:变量赋值语句的格式: 目标变量名:目标变量名:= =表达式;表达式; 例如:例如:VARIABLEVARIABLE x x,y y:REALREAL; VARIABLEVARIAB

124、LE a a,b b:BITBIT VECTORVECTOR(7 7 DOWNTODOWNTO 0 0 );); x x:=100.0=100.0; y y:=1.5+x=1.5+x; a a:= =“10111011011101” a a(4 4 TOTO 7 7):=:=(1 1,0 0,1 1,0 0);); b b(0 0 TOTO 5 5):= a:= a(2 2 TOTO 7 7););VHDL语言的语言要素语言的语言要素 129 信信号号是是描描述述硬硬件件系系统统的的基基本本数数据据对对象象,它它是是电电子子电电路路内内部部硬硬件件连连接接的的抽抽象象,可可以以作作为为设设计计

125、实实体体中中并并行行语语句句模模块块间间的的信息交流通道。信息交流通道。 信信号号是是一一个个全全局局量量,只只有有定定义义后后才才能能使使用用,通通常常用用于于在在结构体、程序包和实体说明中。结构体、程序包和实体说明中。 3.3.信号信号(SIGNAL) 信号定义格式:信号定义格式: SIGNAL 信号名:数据类型信号名:数据类型 := =初值初值 ; 例如:例如:SIGNALSIGNAL S0: S0: STDSTD LOGIC:=LOGIC:=0 0; SIGNALSIGNAL FA FA,FB:FB: BITBIT; SIGNAL SIGNAL D: D: STDSTD LOOGICL

126、OOGIC VECTORVECTOR(0 0 TOTO 1515);); - - 定定义义一一个个标标准准逻逻辑辑位位信信号号S0S0,初值为,初值为0 0 - - 定义两个定义两个BITBIT位信号位信号FAFA和和FBFB -定义标准逻辑定义标准逻辑1616位矢量信号位矢量信号D D VHDL语言的语言要素语言的语言要素 130 3.3.信号信号(SIGNAL) 信号赋值语句:信号赋值语句: 目标信号名目标信号名= =表达式;表达式; 例如:例如: x x=9=9; y y=x=x; z z=x =x AFTERAFTER 5ns 5ns; VHDL语言的语言要素语言的语言要素 131 3

127、.3.信号信号(SIGNAL) 信号与变量的区别:信号与变量的区别: 使用场合不同使用场合不同 变量在进程、函数和过程中说明;变量在进程、函数和过程中说明; 信号在结构体中说明。信号在结构体中说明。 赋值符号不同赋值符号不同 变量用变量用“:= =”号赋值号赋值, , 其值被立即使用其值被立即使用( (无时间延时无时间延时) ); 信号用信号用“= =”赋值,其值可以附加延时。赋值,其值可以附加延时。 VHDL语言的语言要素语言的语言要素 132例例12 12 信号和变量值代入的区别举例信号和变量值代入的区别举例 PROCESS (a,b,c,d)BEGIN d=a; x=b+d; d=c;

128、y=b+d; END PROCESS;结果:结果:x=b+c; y=b+c;PROCESS (a,b,c)VARIABLE d:std_logic_vector(3 downto 0);BEGIN d:=a; x=b+d; d:=c; y=b+d;END PROCESS;结果:结果: x=b+a;yB B语句中,若语句中,若A AB B成立,则布尔成立,则布尔数据量为数据量为TRUETRUE,否则布尔数据量为,否则布尔数据量为FALSEFALSE。 定义格式:定义格式: TYPE BOOLEAN IS (FALSE,TRUE);); 若某个信号或变量被定义为布尔数据,则在仿若某个信号或变量被定

129、义为布尔数据,则在仿真中将自动对其赋值进行核查。真中将自动对其赋值进行核查。 布尔数据没有数值的含义布尔数据没有数值的含义 ,不能进行算术运,不能进行算术运算,只能算,只能用于关系运算和用于关系运算和逻辑逻辑判断判断。VHDL语言的语言要素语言的语言要素 139 (2 2)位(位(BIT)数据类型)数据类型 位数据类型也属于二值枚举型,通常用来表示位数据类型也属于二值枚举型,通常用来表示信号的取值。信号的取值。 它的取值只有它的取值只有“0 0”和和“1 1”。 定义格式:定义格式:TYPE BIT IS (0,1);); 位数据类型的数据对象为信号和变量,可以进位数据类型的数据对象为信号和变

130、量,可以进行逻辑运算,其结果仍为位数据类型。行逻辑运算,其结果仍为位数据类型。 VHDL语言的语言要素语言的语言要素 140 (3 3)位矢量(位矢量(BIT_VECTOR)数据类型)数据类型 定义格式:定义格式:TYPE BITTYPE BIT VECTOR IS ARRAY (NATURAL RANGEVECTOR IS ARRAY (NATURAL RANGE ) OF BIT) OF BIT; 位矢量是基于位数据类型的数组,常用来表示位矢量是基于位数据类型的数组,常用来表示总线的状态。总线的状态。 位位矢矢量量是是用用双双引引号号括括起起来来的的数数字字序序列列,如如“10111011

131、”,X X“00EA00EA”。 其中,其中,“”表示数据范围未定界。表示数据范围未定界。 规规则则:使使用用位位矢矢量量必必须须注注明明位位宽宽,即即数数组组中中的的元元素素个数和排列。个数和排列。 例如:例如:SIGNALSIGNAL b: BIT b: BIT VECTORVECTOR(0 0 TOTO 7 7);); 定义定义b b由由b(0)b(0)b(7)b(7)构成的矢量,左为构成的矢量,左为b(0)b(0),右为,右为b(7)b(7); VHDL语言的语言要素语言的语言要素 141 (4)字符()字符(CHARACTER)数据类型)数据类型 定义格式:定义格式:TYPE CHA

132、RACTER IS(ASCII码字符表中的全部字符);码字符表中的全部字符); 字符数据类型是用单引号括起来的字符数据类型是用单引号括起来的ASCIIASCII码字码字符,如符,如X X、y y、6 6、3 3等。等。 规则:规则: 字符型数据用单引号括起来;字符型数据用单引号括起来; 字符型数据的字母有大小写之分;字符型数据的字母有大小写之分; 字符型数据仅包括字符型数据仅包括ASCIIASCII码字符表中的全码字符表中的全部字符。部字符。VHDL语言的语言要素语言的语言要素 142 (5)字符串()字符串(STRING)数据类型)数据类型 定义格式:定义格式:TYPETYPE STRING

133、STRING ISIS ARRAY(POSITIVEARRAY(POSITIVE RANGERANGE ) ) OFOF CHARACTERCHARACTER; 字符串数据类型是用双引号括起来的字符序列,字符串数据类型是用双引号括起来的字符序列,是由字符型数据组成的数组,也称字符矢量或字符是由字符型数据组成的数组,也称字符矢量或字符串数组。串数组。 常用于程序的提示和说明。常用于程序的提示和说明。 例如:例如:“A BOY.A BOY.”,“1010101110101011”。VHDL语言的语言要素语言的语言要素 143 (6)整数()整数(INTEGER)数据类型)数据类型 定义格式:定义格

134、式:TYPE INTEGER IS RANGE -2147483647 TO +2147483647TYPE INTEGER IS RANGE -2147483647 TO +2147483647; 整数数据类型与数学中的整数定义相同。整数数据类型与数学中的整数定义相同。 包括:正整数、负整数和零。包括:正整数、负整数和零。 取值范围:取值范围:3232位带符号数原码,位带符号数原码,-(2-(23131-1)-1)+(2+(23131-1)-1) 即即 -2147483647-2147483647 +2147483647+2147483647。 规则:规则: 整数不能作为矢量,不能单独对某一

135、位进行操作;整数不能作为矢量,不能单独对某一位进行操作; 整数不能用于逻辑运算,只能用于算术运算。整数不能用于逻辑运算,只能用于算术运算。 如:如:1515,10E310E3,16#D5#16#D5#,2#11011010#2#11011010#,8#653#8#653#。 整数可以用进制来表示。整数可以用进制来表示。 整数可以用来抽象地表达总线的状态。整数可以用来抽象地表达总线的状态。VHDL语言的语言要素语言的语言要素 144(7)正整数()正整数(POSITIVE)数据类型)数据类型 定义格式:定义格式: SUBTYPE POSITIVE IS INTEGER RANGE 1 TO IN

136、TEGERHIGH SUBTYPE POSITIVE IS INTEGER RANGE 1 TO INTEGERHIGH; 正整数数据类型是整数数据类型的子类型,是正整数数据类型是整数数据类型的子类型,是不包括不包括0 0的正整数。的正整数。 取值范围:取值范围:3232位带符号数原码,位带符号数原码,1 1(2(23131-1)-1), 即即 1 121474836472147483647 其中,其中,INTEGERINTEGERHIGHHIGH是数值类属性是数值类属性, , 表示整数的上限值表示整数的上限值2 23131-1-1。 VHDL语言的语言要素语言的语言要素 145(8)自然数(

137、)自然数(NATURAL)数据类型)数据类型 定义格式:定义格式: SUBTYPE NATURAL IS INTEGER RANGE 0 TO INTEGERHIGHSUBTYPE NATURAL IS INTEGER RANGE 0 TO INTEGERHIGH; 是整数数据类型的子类型,即非负的整数。是整数数据类型的子类型,即非负的整数。 包括:包括:0 0和正整数。和正整数。VHDL语言的语言要素语言的语言要素 146(9)实数()实数(REAL)数据类型)数据类型 定义格式:定义格式: TYPE REAL IS RANGE -1.0E38 TO +1.0E38; 实数数据类型类似于数学

138、中的实数,也称为浮点实数数据类型类似于数学中的实数,也称为浮点数数据类型,只能在仿真中使用。数数据类型,只能在仿真中使用。 取值范围:取值范围:-1.0E+38-1.0E+38 +1.0E+38+1.0E+38 由正号、负号、小数点和数字组成。由正号、负号、小数点和数字组成。 例如:例如:-2.5-2.5、-1.0E8-1.0E8。 VHDL语言的语言要素语言的语言要素 147(10)时间()时间(TIME)数据类型)数据类型 定义格式:定义格式: TYPE TIME IS RANGE 2147483647 TO 2147483647 用来表示时间的数据类型,由整数数据和单位用来表示时间的数据

139、类型,由整数数据和单位两部分组成,取值范围是整数所定义的范围,两部分组成,取值范围是整数所定义的范围,仅在仅在系统仿真时,用来表示信号延时的时间,不能用于系统仿真时,用来表示信号延时的时间,不能用于逻辑综合。逻辑综合。 例如:例如:55 ms55 ms,20 ns20 ns。VHDL语言的语言要素语言的语言要素 148(10)时间()时间(TIME)数据类型)数据类型 unitsunits fsfs; -飞秒(飞秒(1010-15-15S S) psps=1000fs=1000fs; -皮秒皮秒ns=1000psns=1000ps; -纳秒纳秒us=1000nsus=1000ns; -微秒微秒

140、ms=1000usms=1000us; -毫秒毫秒sec=1000mssec=1000ms;-秒秒min=60secmin=60sec; -分分hr=60minhr=60min; -时时 ENDEND units units; VHDL语言的语言要素语言的语言要素 149(11)错误等级()错误等级(SEVERITY_LEVEL) 定义格式:定义格式:TYPETYPE severity_levelseverity_level ISIS(notenote,warningwarning,errorerror,failurefailure);); 错误等级数据用于表征系统的工作状态。错误等级数据用于

141、表征系统的工作状态。 包括:包括:NOTENOTE(注意),(注意),WARNINGWARNING(警告),(警告), ERRORERROR(出错),(出错),FAILUREFAILURE(失败)。(失败)。 在仿真过程中,可输出这在仿真过程中,可输出这4 4种值来提示被仿真系种值来提示被仿真系统当前的工作状态。统当前的工作状态。 VHDL语言的语言要素语言的语言要素 150 3.3. IEEEIEEE预定义的标准逻辑位和标准逻辑矢量预定义的标准逻辑位和标准逻辑矢量 在在IEEEIEEE库的程序包库的程序包STD_LOGIC_1164STD_LOGIC_1164中,定义了中,定义了两个非常重要

142、的数据类型:两个非常重要的数据类型: 标准逻辑位标准逻辑位STD_LOGICSTD_LOGIC 标准逻辑矢量标准逻辑矢量STD_LOGIC_VECTORSTD_LOGIC_VECTOR 使使用用时时可可打打开开IEEEIEEE库库,调调用用STD_LOGIC_1164STD_LOGIC_1164程程序包。如:序包。如: LIBRARY LIBRARY IEEE IEEE; USEUSE IEEE.STD_LOGIC_1164. IEEE.STD_LOGIC_1164.ALLALL; VHDL语言的语言要素语言的语言要素 151 (1 1)STD_LOGIC(标准逻辑位)数据类型(标准逻辑位)数

143、据类型 是用是用IEEE1164IEEE1164标准定义的一种常用的标准定义的一种常用的9 9值逻辑位数据类值逻辑位数据类型,是位(型,是位(BITBIT)数据类型的扩展。)数据类型的扩展。 STD_LOGICSTD_LOGIC的的9 9种逻辑值:种逻辑值: U U-未初始化的;未初始化的;X X-强未知的;强未知的; 0 0-强强0 0; 1 1-强强1 1; Z Z-高阻态;高阻态; W W-弱未知的;弱未知的; L L-弱弱0 0; H H-弱弱1 1; - -忽略忽略 定义格式:定义格式:TYPE STDTYPE STD LOGIC ISLOGIC IS(U U,X X,0 0,1 1

144、,Z Z, W W,L L,H H,- -); 注意:注意:逻辑值的字母必须用大写。逻辑值的字母必须用大写。VHDL语言的语言要素语言的语言要素 152 (2 2)STD_LOGIC_VECTORSTD_LOGIC_VECTOR(标准逻辑矢量)数据类型(标准逻辑矢量)数据类型 是基于是基于STD_LOGICSTD_LOGIC数据类型的一维标准逻辑数组,数据类型的一维标准逻辑数组,常用于描述数字系统中的总线。常用于描述数字系统中的总线。 数组中每一个元素的数据类型都应是数组中每一个元素的数据类型都应是STD_LOGICSTD_LOGIC中定义的逻辑值。中定义的逻辑值。 定义格式:定义格式:TYP

145、ETYPE STDSTD LOGICLOGIC VECTOR IS ARRAYVECTOR IS ARRAY(NATURAL RANGENATURAL RANGE)OF STDOF STD LOGICLOGIC; 赋值原则:赋值原则:同位宽、同类型矢量间才能进行赋值。同位宽、同类型矢量间才能进行赋值。VHDL语言的语言要素语言的语言要素 153 4. 其他预定义的标准数据类型其他预定义的标准数据类型 在在IEEEIEEE库的库的STD_LOGIC_ARITHSTD_LOGIC_ARITH程序包中,包含有两个符合程序包中,包含有两个符合IEEEIEEE标准的数据类型,分别为:标准的数据类型,分别

146、为: 无符号型(无符号型(UNSIGNEDUNSIGNED) 有符号型(有符号型(SIGNEDSIGNED) 这这两两种种数数据据类类型型主主要要用用于于算算术术运运算算,使使用用时时可可打打开开IEEEIEEE库,调用库,调用STD_LOGIC_ARITHSTD_LOGIC_ARITH程序包。如:程序包。如: LIBRARY LIBRARY IEEE IEEE; USEUSE IEEE.STD_LOGIC_ARITH. IEEE.STD_LOGIC_ARITH.ALLALL; 定义格式:定义格式: TYPE TYPE UNSIGNEDUNSIGNED ISIS ARRAYARRAY(NATU

147、RAL RANGENATURAL RANGE)OFOF STDSTD LOGICLOGIC; TYPE TYPE SIGNEDSIGNED ISIS ARRAYARRAY(NATURAL RANGENATURAL RANGE)OFOF STDSTD LOGICLOGIC; VHDL语言的语言要素语言的语言要素 154 用于程序中无符号数的运算,是由用于程序中无符号数的运算,是由STD_LOGICSTD_LOGIC数数据类型构成的一维数组,代表一个无符号的数值,据类型构成的一维数组,代表一个无符号的数值,即一个二进制数。即一个二进制数。 当当一一个个数数据据除除了了执执行行算算术术运运算算外外,

148、还还要要执执行行逻逻辑辑运运算算时时,就就必必须须将将该该数数据据定定义义为为无无符符号号数数据据类类型型,而不是而不是SIGNEDSIGNED或或INTEGERINTEGER类型。例如:类型。例如: SIGNALSIGNAL DATA DATA: : UNSIGNED( 3 UNSIGNED( 3 DOWNTODOWNTO 0) 0); DATA= DATA=“10001000”; 如十进制数的如十进制数的9 9, ,可以表示为可以表示为UNSIGNED(“1001”)UNSIGNED(“1001”)。 (1)无符号()无符号(UNSIGNED)数据类型数据类型 定义信号定义信号DATADA

149、TA是无符号数据,其数值为是无符号数据,其数值为8 8。 VHDL语言的语言要素语言的语言要素 155 用于程序中有符号数的运算,表示一个有符号用于程序中有符号数的运算,表示一个有符号二进制整数。二进制整数。 例如:例如: VARIABLE VARIABLE DATA1DATA1, ,DATA2DATA2: : SIGNED (3 SIGNED (3 DOWNTODOWNTO 0)0); DATA1=DATA1=“10011001”; DATA2= DATA2=“01110111”; 定义变量定义变量DATA1DATA1和和DATA2DATA2分别为分别为-7-7和和7 7。 有符号数的最高位

150、为符号位,其余位代表数值有符号数的最高位为符号位,其余位代表数值大小,并用补码表示。大小,并用补码表示。 (2 2)有符号()有符号(SIGNED)数据类型数据类型 VHDL语言的语言要素语言的语言要素 156 5.5. 用户自定义的数据类型用户自定义的数据类型 除了一些标准的预定义数据类型外除了一些标准的预定义数据类型外, , 用户还可以用户还可以根据设计需要根据设计需要, , 自己定义新的数据类型自己定义新的数据类型, , 称为用户自称为用户自定义的数据类型。定义的数据类型。 用户自定义数据有多种类型:用户自定义数据有多种类型: 枚举型(枚举型(ENUMERATIONENUMERATION

151、) 整数型(整数型(INTEGERINTEGER) 数组型(数组型(ARRAYARRAY) 记录型(记录型(RECORDRECORD) 时间型(时间型(TIMETIME) 实数型(实数型(REALREAL) VHDL语言的语言要素语言的语言要素 157 是用文字、符号表示的一组实际的二进制数。是用文字、符号表示的一组实际的二进制数。 例如:例如: TYPE TYPE BITBIT IS IS (00,11);); 定义定义BITBIT数据类型为枚举型,取值为数据类型为枚举型,取值为0 0和和1 1。 (1)枚举型枚举型 定义格式:定义格式: TYPE 数据类型名数据类型名 IS(取值取值1 1

152、,取值,取值2 2,);); 又如:又如: TYPETYPE S S ISIS (S0S0,S1S1,S2S2,S3S3);); 定义定义S S数据类型为状态变量数据类型为状态变量S0S0,S1S1,S2S2,S3S3。 这这四四个个状状态态变变量量分分别别代代表表四四种种不不同同的的状状态态取取值值,即即0000,0101,1010,1111。 VHDL语言的语言要素语言的语言要素 该数据类型括号中的值自左向右该数据类型括号中的值自左向右按升序排列,中间用逗号分隔。按升序排列,中间用逗号分隔。在在VHDL中,对其中每一个元素中,对其中每一个元素都赋予一个位置编号,最左边的都赋予一个位置编号,

153、最左边的元素开始记为元素开始记为“0” ,向右依次递,向右依次递增增“1” 。这为。这为“属性属性”提供了一提供了一个访问位置编号的机制。个访问位置编号的机制。158 数组是一组具有相同数据类型的元素组合。数组是一组具有相同数据类型的元素组合。 数组型属于复合类型,是将相同类型的单个数数组型属于复合类型,是将相同类型的单个数据组合在一起而形成的数据类型。可以是一维数组据组合在一起而形成的数据类型。可以是一维数组(一个下标)和多维数组(多个下标)。(一个下标)和多维数组(多个下标)。 根根据据数数组组元元素素下下标标的的范范围围是是否否被被指指定定,可可分分为为限定性数组和非限定性数组。限定性数

154、组和非限定性数组。 限限定定性性数数组组下下标标的的取取值值范范围围在在数数组组定定义义时时就就已已确确定定,并并用用整整数数指指定定,排排列列顺顺序序可可以以由由低低到到高高( (如如:0 0 TOTO 7)7),也可以由高到低也可以由高到低( (如:如:7 7 DOWNTODOWNTO 0)0)。 (2)数组型数组型 非非限限定定性性数数组组不不具具体体指指明明下下标标的的取取值值范范围围,当当用到该数组时,再进行定义。用到该数组时,再进行定义。VHDL语言的语言要素语言的语言要素 多维数组需要用两个以上的范围来多维数组需要用两个以上的范围来描述,而且多维数组不能生成逻辑描述,而且多维数组

155、不能生成逻辑电路,因此只能用于生成仿真图形电路,因此只能用于生成仿真图形及硬件的抽象模型。及硬件的抽象模型。159 限定性数组定义格式:限定性数组定义格式: 例如:例如:TYPETYPE DATA_BUSDATA_BUS ISIS ARRAYARRAY(7(7 DOWNTODOWNTO 0)0) OFOF STD_LOGICSTD_LOGIC; 定义八位数据总线定义八位数据总线DATA_BUSDATA_BUS,下标由高到低排列。下标由高到低排列。 (2)数组型数组型 非限定性数组定义格式:非限定性数组定义格式: TYPE TYPE 数组名数组名 ISIS ARRAYARRAY(数组范围)数组范

156、围)OFOF 基本数据类型;基本数据类型; TYPE TYPE 数组名数组名 ISIS ARRAY(ARRAY(数组下标名数组下标名 RANGERANGE) OFOF 基本数据类型;基本数据类型; 例如:例如:TYPETYPE BIT_VECTORBIT_VECTOR ISIS ARRAYARRAY (NATURAL (NATURAL RANGERANGE) ) OFOF BITBIT; VARABLEVARABLE DATADATA: : BIT_VECTOR (1BIT_VECTOR (1 TOTO 6)6); 数组数组DATADATA是是BIT_VECTORBIT_VECTOR的子集,其

157、下标取值按自然数的子集,其下标取值按自然数1 16 6排列排列。 VHDL语言的语言要素语言的语言要素 160 记录型是一个数组,由已定义的、不同的数据记录型是一个数组,由已定义的、不同的数据类型元素构成。类型元素构成。 (3)记录型记录型 定义格式:定义格式: 记录型也是一种多值的数据类型。但是记录型记录型也是一种多值的数据类型。但是记录型是由多个不同类型的元素集合而成的。是由多个不同类型的元素集合而成的。 TYPE 记录类型名记录类型名 IS RECORD 元素名元素名: : 元素数据类型;元素数据类型; 元素名元素名: : 元素数据类型;元素数据类型; END RECORD 记录类型名记

158、录类型名 ; VHDL语言的语言要素语言的语言要素 161 (3)记录型记录型 例如:例如:将将DATADATA定义为四元素的记录类型。定义为四元素的记录类型。 TYPE TYPE DATA DATA ISIS RECORD RECORD D0 D0: : TIME TIME; D1 D1: : TIME TIME; D2 D2: : STD_LOGIC STD_LOGIC; D3 D3: : STD_LOGIC STD_LOGIC;END RECORDEND RECORD DATA DATA; - - 定义定义DATADATA为四元素的记录类型为四元素的记录类型 - - 定义定义D0D0为时

159、间类型为时间类型 - - 定义定义D1D1为时间类型为时间类型 - - 定义定义D2D2为标准位类型为标准位类型 - - 定义定义D3D3为标准位类型为标准位类型VHDL语言的语言要素语言的语言要素 162 6.6. 数据类型的转换数据类型的转换 在在IEEEIEEE库中,有三个程序包为库中,有三个程序包为VHDLVHDL语言提供了多语言提供了多条数据类型转换函数,用户使用这些函数,可以完成条数据类型转换函数,用户使用这些函数,可以完成数据类型的转换。数据类型的转换。 程序包程序包 函数名称函数名称 功功 能能 STD_LOGIC_1164 STD_LOGIC_1164 TO_BIT TO_B

160、IT 由由STD_LOGICSTD_LOGIC转换为转换为BIT BIT TO_BIT VECTOR TO_BIT VECTOR 由由STD_LOGIC_VECTORSTD_LOGIC_VECTOR转换为转换为BIT_VECTOR BIT_VECTOR TO_STD ULOGIC TO_STD ULOGIC 由由BITBIT转换为转换为STD_LOGIC STD_LOGIC TO_ STD ULOGIC VECTOR TO_ STD ULOGIC VECTOR 由由BIT_VECTORBIT_VECTOR转换为转换为STD_LOGIC_VECTOR STD_LOGIC_VECTOR STD_L

161、OGIC_ARITHSTD_LOGIC_ARITHCONV_INTEGER CONV_INTEGER 由由UNSIGNEDUNSIGNED、SIGNEDSIGNED转换为转换为INTEGER INTEGER CONV_UNSIGNED CONV_UNSIGNED 由由INTEGERINTEGER、SIGNEDSIGNED转换为转换为UNSIGNED UNSIGNED CONV_ STD_LOGIC_VECTOR CONV_ STD_LOGIC_VECTOR 由由INTEGERINTEGER、UNSIGNEDUNSIGNED、SIGNEDSIGNED转换为转换为STD_LOGIC_VECTOR

162、STD_LOGIC_VECTOR STD_LOGIC_UNSIGNED STD_LOGIC_UNSIGNED CONV_INTEGER CONV_INTEGER 由由STD_LOGIC_VECTORSTD_LOGIC_VECTOR转换为转换为INTEGER INTEGER VHDL语言的语言要素语言的语言要素 类型函数法。类型函数法。163 6.6. 数据类型的转换数据类型的转换 例如例如: :将将INTEGERINTEGER类型转换为类型转换为STD_LOGIC_VECTORSTD_LOGIC_VECTOR类型。类型。 SIGNAL SIGNAL A A: : INTEGER INTEGER

163、 RANGERRANGER 0 0 TOTO 15 15; SIGNAL SIGNAL B B: : STD_LOGIC_VECTORSTD_LOGIC_VECTOR(3 3 DOWNTODOWNTO 0 0);); B B = CONV_STD_LOGIC_VECTOR ( A )= CONV_STD_LOGIC_VECTOR ( A );第第1 1条语句,将信号条语句,将信号A A定义为定义为INTEGERINTEGER类型。类型。第第2 2条语句,将信号条语句,将信号B B定义为定义为STD_LOGIC_VECTORSTD_LOGIC_VECTOR类型。类型。第第3 3条语句,将信号条语

164、句,将信号A A的数据类型转换为的数据类型转换为 STD_LOGIC_VECTOR STD_LOGIC_VECTOR类型,并赋值给类型,并赋值给B B。 VHDL语言的语言要素语言的语言要素 164 VHDLVHDL语语言言中中的的各各种种表表达达式式都都是是由由运运算算符符和和操操作作数数组组成成的的,操操作作数数是是表表达达式式中中各各种种运运算算的的对对象象,而而运算符(又称操作符)则规定操作数的运算方式。运算符(又称操作符)则规定操作数的运算方式。 VHDLVHDL语言预定义了五种运算符:语言预定义了五种运算符: 逻辑运算符逻辑运算符 算术运算符算术运算符 关系运算符关系运算符 符号运

165、算符符号运算符 移位运算符移位运算符 VHDL语言的运算符语言的运算符 VHDL语言的语言要素语言的语言要素 165 1 1. . 逻辑运算符逻辑运算符 用于完成逻辑运算用于完成逻辑运算,包括,包括逻辑与、逻辑或、逻辑逻辑与、逻辑或、逻辑非、逻辑与非、逻辑或非、运算逻辑异或、逻辑异或非、逻辑与非、逻辑或非、运算逻辑异或、逻辑异或非非(同或同或)等运算。等运算。类类 型型操作符操作符 功功 能能 操作数数据类型操作数数据类型 逻逻辑辑操操作作符符 ANDAND 逻辑与运算逻辑与运算 BITBIT,BOOLEANBOOLEAN,STD_LOGICSTD_LOGIC OROR 逻辑或运算逻辑或运算

166、BITBIT,BOOLEANBOOLEAN,STD_LOGICSTD_LOGIC NANDNAND 逻辑与非运算逻辑与非运算 BITBIT,BOOLEANBOOLEAN,STD_LOGICSTD_LOGIC NORNOR 逻辑或非运算逻辑或非运算 BITBIT,BOOLEANBOOLEAN,STD_LOGICSTD_LOGIC XORXOR 逻辑异或运算逻辑异或运算 BITBIT,BOOLEANBOOLEAN,STD_LOGICSTD_LOGIC XNORXNOR 逻辑同或运算逻辑同或运算 BITBIT,BOOLEANBOOLEAN,STD_LOGICSTD_LOGIC NOTNOT 逻辑非运

167、算逻辑非运算 BITBIT,BOOLEANBOOLEAN,STD_LOGICSTD_LOGIC VHDL语言的语言要素语言的语言要素 166 1 1. . 逻辑运算符逻辑运算符 逻辑运算的操作数可以是逻辑运算的操作数可以是BITBIT、BOOLEANBOOLEAN和和STD_LOGICSTD_LOGIC数据数据类型,以及一位数组类型,以及一位数组BIT_VECTORBIT_VECTOR和和STD_LOGIC_VECTORSTD_LOGIC_VECTOR类型。类型。 要求运算符两边操作数的数据类型相同、位宽相同。要求运算符两边操作数的数据类型相同、位宽相同。 逻辑运算按位进行操作,运算结果的数据

168、类型与操作数的逻辑运算按位进行操作,运算结果的数据类型与操作数的数据类型相同。数据类型相同。 一个表达式中有两种以上逻辑运算符时,应用括号对这些一个表达式中有两种以上逻辑运算符时,应用括号对这些运算进行分组。运算进行分组。 如果一个表达式中只有如果一个表达式中只有ANDAND、OROR和和XORXOR三种运算符中的一种,三种运算符中的一种,则改变运算顺序不会影响电路的逻辑关系。则改变运算顺序不会影响电路的逻辑关系。 逻辑运算符逻辑运算符NOTNOT处于最高优先级,而其余的逻辑运算符处处于最高优先级,而其余的逻辑运算符处于最低优先级。于最低优先级。 例如:例如:Y1Y1= ( ( A ANDA

169、AND B B ) ) OROR ( ( C C ANDAND D D ) ); Y2 Y2= ( ( A A OROR B B ) ) ANDAND C C;VHDL语言的语言要素语言的语言要素 167 2 2. . 算术运算符算术运算符 是完成算术运算的最基本的操作符,包括是完成算术运算的最基本的操作符,包括加法运加法运算、减法运算、并置运算、乘法运算、除法运算、取算、减法运算、并置运算、乘法运算、除法运算、取模运算、求余运算、乘方运算和取绝对值等。模运算、求余运算、乘方运算和取绝对值等。类型类型操作符操作符 功能功能 操作数数据类型操作数数据类型 算算术术操操作作符符 + + 加法运算加

170、法运算 整数整数 - - 减法运算减法运算 整数整数 & 并置运算并置运算 一维数组一维数组 * * 乘法运算乘法运算 整数和实数整数和实数 / / 除法运算除法运算 整数和实数整数和实数 MOD 取模运算取模运算 整数整数 REM 求余运算求余运算 整数整数 * * * * 乘方运算乘方运算 整数整数 ABS 取绝对值取绝对值 整数整数 VHDL语言的语言要素语言的语言要素 168 2 2. . 算术运算符算术运算符 在算术运算表达式中,两个参与运算的操作数必在算术运算表达式中,两个参与运算的操作数必须具有相同的数据类型。须具有相同的数据类型。 VHDL VHDL语言共有九种用于算术运算的操

171、作符,可分语言共有九种用于算术运算的操作符,可分为:为: 求和操作求和操作 求积操作求积操作 混合操作混合操作 VHDL语言的语言要素语言的语言要素 169 包括加法操作包括加法操作(+)(+)、减法操作、减法操作(-)(-)和并置操作和并置操作(&)(&)三种。三种。 (1 1)求和操作求和操作 加、减操作符要求操作对象的数据类型可以是整数、实数加、减操作符要求操作对象的数据类型可以是整数、实数或物理量,用于实现操作数加法和减法操作,其运算规则与或物理量,用于实现操作数加法和减法操作,其运算规则与常规的加减法相同。常规的加减法相同。 并置操作符并置操作符(&)(&)又称连接运算符,可以将多个

172、数据元素合又称连接运算符,可以将多个数据元素合并成一个新的一维数组,也可以将两个一维数组中的元素分并成一个新的一维数组,也可以将两个一维数组中的元素分解连接成新的一维数组。新产生的一维数组位宽等于两个操解连接成新的一维数组。新产生的一维数组位宽等于两个操作数的位宽之和,而数组元素的顺序取决于操作数的位置。作数的位宽之和,而数组元素的顺序取决于操作数的位置。 并置操作常用于字符串的连接和数组的位数扩展,参与操并置操作常用于字符串的连接和数组的位数扩展,参与操作的操作数可以是作的操作数可以是BITBIT和和STD_LOGICSTD_LOGIC数据类型。数据类型。 VHDL语言的语言要素语言的语言要

173、素 170【例例】 将单个元素组成一个四位数组和一个八位数组。将单个元素组成一个四位数组和一个八位数组。 设组成的数组分别为:设组成的数组分别为: SIGNALSIGNAL X: STD_LOGIC_VECTOR ( X: STD_LOGIC_VECTOR ( 3 3 DOWNTODOWNTO 0 0 ) ); SIGNALSIGNAL Y: STD_LOGIC_VECTOR ( Y: STD_LOGIC_VECTOR ( 7 7 DOWNTODOWNTO 0 0 ) ); SIGNALSIGNAL Z: STD_LOGIC_VECTOR ( Z: STD_LOGIC_VECTOR ( 3 3

174、 DOWNTODOWNTO 0 0 ) ); SIGNALSIGNAL a,b,c,d,e,f,g,ha,b,c,d,e,f,g,h STD_LOGIC STD_LOGIC; X X = a a & & b b & & c c & & d d; Z Z = e e & & f f & & g g & & h h; Y Y = X X & & Z Z; -定义数组定义数组X X - -定义数组定义数组Y Y - -定义数组定义数组Z Z - -定义逻辑位定义逻辑位a ah h- - 单元素并置为单元素并置为4 4位数组位数组- - 单元素并置为单元素并置为4 4位数组位数组- - 两个四位数组并

175、置为两个四位数组并置为8 8位数组位数组 X X=a,a, b,b, c,c, dd, Y Y=aa, b b, c c, d d , e e, f f, g g, hh。 VHDL语言的语言要素语言的语言要素 171【例例】用加法运算符实现八位加法器。用加法运算符实现八位加法器。 LIBRARYLIBRARY IEEE IEEE; USEUSE IEEE.STD_LOGIC_1164. IEEE.STD_LOGIC_1164.ALLALL; USEUSE IEEE.STD_LOGIC_UNSIGNED. IEEE.STD_LOGIC_UNSIGNED.ALLALL; ENTITYENTITY

176、 adder8 adder8 ISIS PORT PORT ( ( cici: : ININ STD_LOGICSTD_LOGIC; a,a, b:b: ININ STD_LOGIC_VECTOR(STD_LOGIC_VECTOR( 7 7 DOWNTODOWNTO 0 0 ) ); s: s: OUTOUT STD_LOGIC_VECTOR(STD_LOGIC_VECTOR( 7 7 DOWNTODOWNTO 0 0 ) ); co: co: OUTOUT STD_LOGICSTD_LOGIC ) ); END END adder8 adder8; 设加法器的输入为设加法器的输入为a a、b

177、 b、cici,输出为,输出为s s、coco。 VHDL语言的语言要素语言的语言要素 172【例例】用加法运算符实现八位加法器。用加法运算符实现八位加法器。 ARCHITECTUREARCHITECTURE behavior behavior OFOF adder8 adder8 ISIS SIGNALSIGNAL ssss: : STD_LOGIC_VECTOR (STD_LOGIC_VECTOR ( 8 8 DOWNTODOWNTO 0 0 ) ); SIGNALSIGNAL aaaa, , bb:bb: STD_LOGIC_VECTOR (STD_LOGIC_VECTOR ( 8 8

178、DOWNTODOWNTO 0 0 ) ); BEGINBEGIN aaaa = 0 0& & a a; bb bb = 0 0& & b b; ssss = aaaa + bbbb + cici; s s = ssss( ( 7 7 DOWNTODOWNTO 0 0 ) ); co co = ssss( ( 8 8 ) ); ENDEND behavior behavior; 设加法器的输入为设加法器的输入为a a、b b、cici,输出为,输出为s s、coco。 VHDL语言的语言要素语言的语言要素 173 包括乘法包括乘法(*)(*)、除法、除法(/)(/)、取模、取模(MOD)(MOD

179、)和求余和求余(REM)(REM)四种操作。四种操作。 (2 2)求积操作求积操作 乘除法的操作数可以是整数或实数。在设计中,乘除法的操作数可以是整数或实数。在设计中,通常选用通常选用BIT_VECTORBIT_VECTOR、STD_LOGIC_VECTORSTD_LOGIC_VECTOR或或INTEGERINTEGER等数据类型。等数据类型。 取模和求余操作与除法操作相同,要求其操作数取模和求余操作与除法操作相同,要求其操作数必须是以必须是以2 2为底的幂。为底的幂。操作数的数据类型只能是整数操作数的数据类型只能是整数型,其运算结果也是整数型。型,其运算结果也是整数型。VHDL语言的语言要素

180、语言的语言要素 174 混合操作只有乘方(混合操作只有乘方(*)和取绝对值()和取绝对值(ABSABS)两种)两种运算,其数据类型一般为整数。运算,其数据类型一般为整数。 (3 3)混合操作混合操作 乘方运算符的左边可以是整数或浮点数,而右边乘方运算符的左边可以是整数或浮点数,而右边必须为整数。必须为整数。 当操作符左边为浮点时当操作符左边为浮点时, ,其右边的可以是负数。其右边的可以是负数。 例如:例如: X X=ABS(A)ABS(A); Y Y=2*B2*B;VHDL语言的语言要素语言的语言要素 175 3 3. . 关系运算符关系运算符 关系运算是对两个相同类型的操作数进行大小比较或排

181、序关系运算是对两个相同类型的操作数进行大小比较或排序判断,比较结果以判断,比较结果以BOOLEANBOOLEAN数据类型表示,可能是数据类型表示,可能是TRUETRUE,也可,也可能是能是FALSEFALSE,共有,共有六种运算符六种运算符 。类类 型型操作符操作符 功功 能能 操作数数据类型操作数数据类型 关关系系操操作作符符 = 等于等于 任何数据类型任何数据类型 /= 不等于不等于 任何数据类型任何数据类型 大于大于 枚举与整数,及对应的一维数组枚举与整数,及对应的一维数组 = 大于等于大于等于 枚举与整数,及对应的一维数组枚举与整数,及对应的一维数组 VHDL语言的语言要素语言的语言要

182、素 176 3 3. . 关系运算符关系运算符 使用关系运算时,应注意以下几点:使用关系运算时,应注意以下几点: “= =”和和“/=/=”的操作数可以是所有类型的数的操作数可以是所有类型的数据,而其余四种运算符可以使用整数类型、实数类型、据,而其余四种运算符可以使用整数类型、实数类型、枚举类型和数组类型;枚举类型和数组类型; 操作符两边操作数的数据类型必须相同,但位操作符两边操作数的数据类型必须相同,但位数可以不同;数可以不同; 整数和实数的比较与数学中的比较方法相同整数和实数的比较与数学中的比较方法相同, ,枚举型数据大小的排序方法与它们的定义顺序一致;枚举型数据大小的排序方法与它们的定义

183、顺序一致; 对位矢量数据进行比较(排序判断)时,比较对位矢量数据进行比较(排序判断)时,比较过程是按从左向右的顺序按位进行比较的,操作数的过程是按从左向右的顺序按位进行比较的,操作数的位宽可以不同,但有时会产生错误结果。位宽可以不同,但有时会产生错误结果。VHDL语言的语言要素语言的语言要素 177 4 4. . 符号运算符符号运算符 有正号(有正号(+ +)和符号()和符号(- -)两个操作符,用于整数)两个操作符,用于整数的符号操作。的符号操作。类类 型型操作符操作符 功功 能能 操作数数据类型操作数数据类型 符号操作符符号操作符 + 正号正号 整数整数- 负号 整数整数 正号操作符正号操

184、作符(+)(+)对操作数的符号不做任何改变;对操作数的符号不做任何改变; 负号操作符负号操作符(-)(-)将对原操作数取负。将对原操作数取负。 VHDL语言的语言要素语言的语言要素 178 5 5. . 移位运算符移位运算符 移位运算符是移位运算符是VHDLVHDL9393标准版新增加的运算符,标准版新增加的运算符,在在VHDLVHDL8787版中没有定义。共有版中没有定义。共有六种操作符号。六种操作符号。 类类 型型操作符操作符 功功 能能 操作数数据类型操作数数据类型 移移位位操操作作符符 SLLSLL 逻辑左移逻辑左移 BIT BIT或布尔型一维数组或布尔型一维数组 SRLSRL 逻辑右

185、移逻辑右移 BIT BIT或布尔型一维数组或布尔型一维数组 SLASLA 算术左移算术左移 BIT BIT或布尔型一维数组或布尔型一维数组 SRASRA 算术右移算术右移 BIT BIT或布尔型一维数组或布尔型一维数组 ROLROL 逻辑循环左移逻辑循环左移 BIT BIT或布尔型一维数组或布尔型一维数组 RORROR 逻辑循环右移逻辑循环右移 BIT BIT或布尔型一维数组或布尔型一维数组 VHDL语言的语言要素语言的语言要素 179 5 5. . 移位运算符移位运算符 书写格式:书写格式: 操作数名称操作数名称 移位运算符移位运算符 移位位数;移位位数; 操操作作数数:BIT_VECTOR

186、BIT_VECTOR或或STD_LOGIC_VECTORSTD_LOGIC_VECTOR等等一一维维数数组,其元素为组,其元素为BITBIT或或BLOOEANBLOOEAN型数据。型数据。 移位位数:整数型。移位位数:整数型。 例如:例如: X X = “1101 01111101 0111”; Y Y = X X SLLSLL 2 2; 运行结果:运行结果:Y=0101 1100Y=0101 1100。 VHDL语言的语言要素语言的语言要素 180 移位运算符功能移位运算符功能: : 5 5. . 移位运算符移位运算符 SLLSLL是是将将位位矢矢量量向向左左移移位位,每每移移一一位位,右右

187、边边移移位位产生的空位补零;产生的空位补零;SLLA3 A2 A1 A0A2A1A00 SRLSRL是是将将位位矢矢量量向向右右移移位位,每每移移一一位位,左左边边移移位位产生的空位补零;产生的空位补零; SRLA3 A2 A1 A00A3A2A1VHDL语言的语言要素语言的语言要素 181 移位运算符功能移位运算符功能: : 5 5. . 移位运算符移位运算符 SLASLA是是将将位位矢矢量量向向左左移移位位,每每移移一一位位,右右边边第第一一位的数值保持不变;位的数值保持不变;SLAA3 A2 A1 A0A2A1A0A0 SRASRA是是将将位位矢矢量量向向右右移移位位,每每移移一一位位,

188、左左边边第第一一位的数值保持不变;位的数值保持不变;SRAA3 A2 A1 A0A3A3A2A1VHDL语言的语言要素语言的语言要素 182 移位运算符功能移位运算符功能: : 5 5. . 移位运算符移位运算符 ROLROL是是将将位位矢矢量量向向左左循循环环移移位位,每每移移一一位位,右右边边第一位由左边第一位移出的数值补位;第一位由左边第一位移出的数值补位;ROLA3 A2 A1 A0A2A1A0A3 RORROR是是将将位位矢矢量量向向右右循循环环移移位位,每每移移一一位位,左左边边第一位由右边第一位移出的数值补位。第一位由右边第一位移出的数值补位。 RORA3 A2 A1 A0A0A

189、3A2A1VHDL语言的语言要素语言的语言要素 183 6.6.运算符的优先级运算符的优先级 优先顺序优先顺序运运 算算 符符运算优先级运算优先级1NOTNOT,ABSABS,* * * * 2 * *,/ /,MODMOD,REM REM 3+ +(正号),(正号),- -(负号)(负号) 4+ +(加号),(减号),(加号),(减号),& & 5SLLSLL,SLASLA,SRLSRL,SRASRA,ROLROL,ROR ROR 6=,/=,= 7ANDAND,OROR,NANDNAND,NORNOR,XORXOR,XNOR XNOR 最高优先级最高优先级最低优先级最低优先级VHDL语言的

190、语言要素语言的语言要素 184 6.6.运算符的优先级运算符的优先级 表达式中运算符执行的顺序:表达式中运算符执行的顺序: ( ),最先进行括号内的运算;),最先进行括号内的运算; NOTNOT、ABSABS、*运算;运算; * *、/ /、MODMOD、REMREM运算;运算; + +(正号)、(正号)、- -(负号);(负号); + +(加法)、(加法)、- -(减法)、(减法)、& &; SLLSLL、SLASLA、SRLSRL、SRASRA、ROLROL、RORROR; 关系运算符;关系运算符; 逻辑运算中的逻辑运算中的ANDAND、OROR、NANDNAND、NORNOR、XORXO

191、R、XNORXNOR。 VHDL语言的语言要素语言的语言要素 185 在在VHDLVHDL中中,具具有有属属性性的的项项目目主主要要有有:实实体体、结结构构体体、配配置置、程程序序包包、类类型型、子子类类型型、过过程程、函函数数、信号、变量、常量、元件、语句标号等。信号、变量、常量、元件、语句标号等。 属属性性为为这这些些项项目目提提供供了了表表现现特特征征,可可通通过过属属性性对这些项目的表现特征进行检测或统计。对这些项目的表现特征进行检测或统计。 通通常常,某某一一个个项项目目的的特特定定属属性性(特特征征)可可以以用用一一个个值值或或一一个个表表达达式式来来表表示示,可可通通过过VHDL

192、VHDL预预定定义义属属性来描述。性来描述。 VHDL语言的属性语言的属性 VHDL语言的语言要素语言的语言要素 186VHDL语言的属性语言的属性 属性名属性名 功能与含义功能与含义 适用范围适用范围 LEFT(LEFT( n n ) ) 返回类型或者子类型的左边界,用于数返回类型或者子类型的左边界,用于数组时,组时, n n表示二维数组行序号表示二维数组行序号 类型、子类型类型、子类型 RIGHT(RIGHT( n n ) ) 返回类型或者子类型的右边界,用于数返回类型或者子类型的右边界,用于数组时,组时,n n表示二维数组行序号表示二维数组行序号 类型、子类型类型、子类型 HIGH(HI

193、GH( n n ) 返回类型或者子类型的上限值,用于数返回类型或者子类型的上限值,用于数组时,组时,n n表示二维数组行序号表示二维数组行序号 类型、子类型类型、子类型 LOW(LOW( n n ) 返回类型或者子类型的下限值,用于数返回类型或者子类型的下限值,用于数组时,组时,n n表示二维数组行序号表示二维数组行序号 类型、子类型类型、子类型 LENGTH(LENGTH( n n ) ) 返回数组范围的总长度返回数组范围的总长度( (范围个数范围个数) ) ,用,用于数组时,于数组时,n n表示二维数组行序号表示二维数组行序号 数组数组 STRUCTURE(STRUCTURE( n n )

194、 ) 若块或结构体只含元件具体装配语句或若块或结构体只含元件具体装配语句或被动进程时,属性被动进程时,属性STRUCTURESTRUCTURE返回返回TRUE TRUE 块、结构块、结构 VHDL语言的语言要素语言的语言要素 187VHDL语言的属性语言的属性 属性名属性名 功能与含义功能与含义 适用范围适用范围 BEHAVIORBEHAVIOR 若由块标志指定块或由构造名指定结构体,若由块标志指定块或由构造名指定结构体,又不含元件具体装配语句,则属性又不含元件具体装配语句,则属性BEHAVIORBEHAVIOR返回返回TRUETRUE 块、结构块、结构 POS(POS( valuevalue

195、 ) ) 参数参数valuevalue的位置序号的位置序号 枚举类型枚举类型 VAL(VAL( valuevalue ) ) 参数参数valuevalue的位置序号的位置序号 枚举类型枚举类型 SUCC(SUCC( valuevalue ) ) 比比valuevalue的位置序号大的一个相邻位置值的位置序号大的一个相邻位置值 枚举类型枚举类型 PRED(PRED( valuevalue ) ) 比比valuevalue的位置序号小的一个相邻位置值的位置序号小的一个相邻位置值 枚举类型枚举类型 LEFTOF(LEFTOF( valuevalue ) ) 在在valuevalue左边位置的相邻值左

196、边位置的相邻值 枚举类型枚举类型 RIGHTOF(RIGHTOF( valuevalue ) ) 在在valuevalue右边位置的相邻值右边位置的相邻值 枚举类型枚举类型VHDL语言的语言要素语言的语言要素 188VHDL语言的属性语言的属性 属性名属性名 功能与含义功能与含义 适用范围适用范围 EVENT EVENT 如果当前的如果当前的期间内发生了事件,则返期间内发生了事件,则返回回TRUETRUE,否则返回,否则返回FALSE FALSE 信号信号 ACTIVE ACTIVE 如果当前的如果当前的期间内信号有效,则返回期间内信号有效,则返回TRUETRUE,否则返回,否则返回FALSE

197、 FALSE 信号信号 LAST_EVENT LAST_EVENT 从信号最近一次的发生事件至今所经历从信号最近一次的发生事件至今所经历的时间的时间 信号信号 LAST_VALUE LAST_VALUE 最后一次事件发生之前信号的值最后一次事件发生之前信号的值 信号信号 LAST_ACTIVE LAST_ACTIVE 返回自信号前面一次事件处理至今所经返回自信号前面一次事件处理至今所经历的时间历的时间 信号信号 DELAYED(DELAYED( timetime ) 建立与参考信号同类型的信号,该信号建立与参考信号同类型的信号,该信号紧跟着参考信号之后,并有一个可选的紧跟着参考信号之后,并有一

198、个可选的时间表达式指定延迟时间时间表达式指定延迟时间 信号信号 VHDL语言的语言要素语言的语言要素 189VHDL语言的属性语言的属性 属性名属性名 功能与含义功能与含义 适用范围适用范围 STABLE(STABLE( timetime ) 每当在可选的时间表达式指定的时间每当在可选的时间表达式指定的时间内信号无事件时,该属性建立一个值内信号无事件时,该属性建立一个值为为TRUETRUE的布尔型信号的布尔型信号 信号信号 QUIET(QUIET( timetime ) 每当参考信号在可选的时间内无事项每当参考信号在可选的时间内无事项处理时,该属性建立一个值为处理时,该属性建立一个值为TRUE

199、TRUE的的布尔型信号布尔型信号 信号信号 TRANSACTIONTRANSACTION 在此信号上有事件发生在此信号上有事件发生, ,或每个事项或每个事项处理中,它的值翻转时,该属性建立处理中,它的值翻转时,该属性建立一个一个BITBIT型的信号型的信号( (每次信号有效时,每次信号有效时,重复返回重复返回0 0和和1 1的值的值) ) 信号信号 RANGE(RANGE( n n ) 返回按指定排序范围,参数返回按指定排序范围,参数n n指定二指定二维数组的第维数组的第n n行行 数组数组 REVERSE_RANGE(REVERSE_RANGE( n n ) 返回按指定逆序范围,参数返回按指

200、定逆序范围,参数n n指定二指定二维数组的第维数组的第n n行行 数组数组 VHDL语言的语言要素语言的语言要素 190 预定义属性格式:预定义属性格式: VHDL语言的属性语言的属性 属性测试项目名属性测试项目名 属性标识符属性标识符 属属性性测测试试项项目目:为为要要测测试试的的属属性性对对象象,可可用用相相应应的标识符表示;的标识符表示; 属性标识符:属性名。属性标识符:属性名。 常用的可综合属性有:常用的可综合属性有: 信号类属性信号类属性 数值类属性数值类属性 数组类属性数组类属性 范围类属性范围类属性 VHDL语言的语言要素语言的语言要素 191 主要用来返回有关信号行为功能的信息

201、。主要用来返回有关信号行为功能的信息。 最最为为常常用用的的是是EVENTEVENT属属性性。它它可可以以在在一一个个极极小小的的时时间间段段内内对对信信号号所所发发生生的的事事件件情情况况进进行行检检测测,若若信信号号有有事事件件发发生生,则返回值为则返回值为TRUETRUE,否则返回值为,否则返回值为FALSEFALSE。 1. 信号类属性信号类属性 例如:假定时序电路的时钟信号为例如:假定时序电路的时钟信号为CLKCLK,则,则 CLKCLKEVENTEVENT:表示对:表示对CLKCLK信号在当前一个极小的时间段信号在当前一个极小的时间段 内所发生的事件进行检测,即用来检测时钟信号的边

202、沿;内所发生的事件进行检测,即用来检测时钟信号的边沿; CLKCLKEVENT AND CLK=EVENT AND CLK=1 1:表示检测:表示检测CLKCLK的上升沿;的上升沿; CLK CLKEVENT AND CLK=EVENT AND CLK=0 0:表示检测:表示检测CLKCLK的下降沿。的下降沿。VHDL语言的语言要素语言的语言要素 192 利用下列两个函数也可以检测信号的变化状态:利用下列两个函数也可以检测信号的变化状态: 1. 信号类属性信号类属性 RISING_EDGE(CLK)RISING_EDGE(CLK):表示时钟的上升沿,:表示时钟的上升沿, 与与CLKCLKEVE

203、NT AND CLK=EVENT AND CLK=1 1等效;等效; FALLING_EDGE(CLK) FALLING_EDGE(CLK):表示时钟的下降沿,:表示时钟的下降沿, 与与CLKCLKEVENT AND CLK=EVENT AND CLK=0 0等效。等效。 属性属性LAST_EVENTLAST_EVENT用来对从信号最近一次事件发生至今所用来对从信号最近一次事件发生至今所经历的时间进行测试,常用于检查定时时间、建立时间、保经历的时间进行测试,常用于检查定时时间、建立时间、保持时间和脉冲宽度等。持时间和脉冲宽度等。 VHDL语言的语言要素语言的语言要素 193 主主要要对对属属性

204、性对对象象( (项项目目) )的的相相关关数数值值特特性性进进行行测测试试,并并返回它们的测试值。返回它们的测试值。 常常用用的的属属性性函函数数有有:LEFT(LEFT(左左边边界界) )、RIGHT(RIGHT(右右边边界界) )、HIGH(HIGH(上边界上边界) )、LOW(LOW(下边界下边界) )等。等。 2. 数值类属性数值类属性 例如:例如:num1num1为整数型数据,定义范围为为整数型数据,定义范围为9 9到到0 0。- - 返回左边界,返回左边界,H1H1 = 9 9- - 返回右边界,返回右边界,H2H2 = 0 0- - 返回上边界,返回上边界,H3H3 = 9 9-

205、 - 返回下边界,返回下边界,H4H4 = 0 0 TYPE TYPE num1 num1 ISIS INTEGER INTEGER RANGERANGE 9 9 DOWNTODOWNTO 0 0; VARIABLE VARIABLE H1, H2, H3, H4: INTEGER H1, H2, H3, H4: INTEGER; H1: H1: = num1num1LEFTLEFT; H2: H2: = num1num1RIGTHRIGTH; H3: H3: = num1num1HIGHHIGH; H4: H4: = num1num1LOWLOW;VHDL语言的语言要素语言的语言要素 194

206、 数数组组类类属属性性是是对对数数组组宽宽度度或或元元素素的的个个数数进进行行测测试,并返回测试值。试,并返回测试值。 3. 数组类属性数组类属性 例如:例如:- - 返回值,返回值,WTH = 16WTH = 16 TYPE TYPE num2 num2 ISIS ARRAYARRAY(0 0 TOTO 15 15) OFOF BIT BIT; VARIABLE VARIABLE WTH: INTEGER WTH: INTEGER; WTH: WTH: = num2num2LENGTHLENGTH; VHDL语言的语言要素语言的语言要素 195 范范围围类类属属性性也也称称作作数数据据区区间

207、间类类属属性性,用用来来产产生生一一个个限限制制性性数数据据对对象象的的范范围围,即即对对属属性性对对象象的的区区间间进进行行测测试试,返返回回一一个区间范围,而不是一个具体的值。个区间范围,而不是一个具体的值。 4. 范围类属性范围类属性 常用的属性函数有常用的属性函数有RANGERANGE和和REVERSE_RANGEREVERSE_RANGE。 例如:对数据总线例如:对数据总线data_busdata_bus定义如下:定义如下: SIGNALSIGNAL data_busdata_bus: STD_LOGIC_VECTOR: STD_LOGIC_VECTOR(1515 DOWNTODOW

208、NTO 0 0);); data_busdata_bus的范围属性为:的范围属性为:data_busdata_busRANGERANGE=15 DOWNTO 015 DOWNTO 0。 VHDL语言的语言要素语言的语言要素 196 注意:一个属性对象可以有多个属性值。注意:一个属性对象可以有多个属性值。 4. 范围类属性范围类属性 例如:对某数组变量的定义如下:例如:对某数组变量的定义如下: VARIABLEVARIABLE byte: BIT_VECTOR byte: BIT_VECTOR(7 7 DOWNTODOWNTO 0 0);); 数组变量数组变量bitybity的相关属性如下:的相

209、关属性如下: 数值类属性:数值类属性:bytebyteLEFTLEFT=7=7;bytebyteRIGHTRIGHT=0=0; bytebyteHIGHHIGH=7=7;bytebyteLOWLOW=0=0。 数组类属性:数组类属性:bytebyteLENGTHLENGTH=8=8。 范围类属性:范围类属性:bytebyteRANGERANGE=7 DOWNTO 0=7 DOWNTO 0; bytebyteREVERSE_RANGEREVERSE_RANGE=0 TO 7=0 TO 7。 VHDL语言的语言要素语言的语言要素 197VHDL的基本描述语句的基本描述语句 v顺序描述语句顺序描述语

210、句v并发描述语句并发描述语句198VHDL语言的描述语句语言的描述语句 VHDLVHDL语言的描述语句主要用来描述系统的硬件语言的描述语句主要用来描述系统的硬件结构、行为功能及信号之间的逻辑关系。分为顺序结构、行为功能及信号之间的逻辑关系。分为顺序语句和并行语句两大类。语句和并行语句两大类。 顺序语句是按照语句书写的前后顺序自上而下、顺序语句是按照语句书写的前后顺序自上而下、一条接一条地按顺序执行,用来定义进程、过程和一条接一条地按顺序执行,用来定义进程、过程和函数的行为。函数的行为。 并行语句又称并发语句,出现在结构体中,各并行语句又称并发语句,出现在结构体中,各语句并行(同步)执行,与书写

211、的顺序无关。语句并行(同步)执行,与书写的顺序无关。 有些语句既可作为并行语句又可作为顺序语句,有些语句既可作为并行语句又可作为顺序语句,如赋值语句、过程调用语句和断言语句。如赋值语句、过程调用语句和断言语句。 199VHDL语言的顺序描述语句语言的顺序描述语句 顺序语句允许按算法描述设计功能,其执行顺顺序语句允许按算法描述设计功能,其执行顺序严格与书写顺序一致,主要有:序严格与书写顺序一致,主要有: 赋值语句赋值语句 流程控制语句流程控制语句 等待语句等待语句 空操作语句空操作语句 VHDL语言的描述语句语言的描述语句 200 赋值语句的功能是将一个值或一个表达式的运赋值语句的功能是将一个值

212、或一个表达式的运算结果传递给某一数据对象,如信号、变量或由它算结果传递给某一数据对象,如信号、变量或由它们组成的数组。们组成的数组。 通过赋值语句,可以实现设计实体内部的数据通过赋值语句,可以实现设计实体内部的数据传送,以及端口外部数据的读写。传送,以及端口外部数据的读写。 赋值语句由赋值源、赋值目标和赋值符构成。赋值语句由赋值源、赋值目标和赋值符构成。 要求赋值源和赋值目标的数据类型必须相同。要求赋值源和赋值目标的数据类型必须相同。 根据赋值对象(赋值目标)的不同,赋值语句根据赋值对象(赋值目标)的不同,赋值语句可分为信号赋值和变量赋值两种。可分为信号赋值和变量赋值两种。 1 1. 赋值语句

213、赋值语句 VHDL语言的描述语句语言的描述语句 201 信号赋值具有延时性、全局性,赋值符用信号赋值具有延时性、全局性,赋值符用“=”表示。表示。 (1 1)信号赋值语句信号赋值语句 格式:格式: 目标信号名目标信号名: := 赋值源;赋值源; 该语句是将赋值源的当前值赋给目标信号。要该语句是将赋值源的当前值赋给目标信号。要求赋值号两边信号量的类型和长度应该一致。求赋值号两边信号量的类型和长度应该一致。 例如:例如: Y Y =1 1; X X = Y Y; A A = B B ANDAND C C;- - 字符赋值,信号字符赋值,信号Y Y被赋值为被赋值为1 1- - 信号赋值,将信号信号赋

214、值,将信号Y Y的当前值赋给目标信号的当前值赋给目标信号X X- - 表达式赋值,将表达式赋值,将B B和和C C的与逻辑赋给目标信号的与逻辑赋给目标信号A AVHDL语言的描述语句语言的描述语句 202 对于数组赋值,可采用下列格式:对于数组赋值,可采用下列格式: (1 1)信号赋值语句信号赋值语句 SIGNALSIGNAL x x,y:y: STD_LOGIC_VECTOR (STD_LOGIC_VECTOR ( 0 0 TOTO 3 3 ) ); x x = “10111011”; y y ( ( 0 0 TOTO 1 1 ) ) = “0101”; y y ( ( 2 2 TOTO 3

215、 3 ) ) = x x ( ( 1 1 TOTO 2 2 ) ); -整体赋值,数组整体赋值,数组“10111011”赋值赋值x x -部分赋值部分赋值, ,“0101”赋值赋值y y的部分位的部分位 - -位置关联赋值位置关联赋值,x,x的部分位的部分位赋值赋值y y的部分位的部分位 VHDL语言的描述语句语言的描述语句 203 变量赋值具有即时性、局部性,并且变量赋值变量赋值具有即时性、局部性,并且变量赋值只限定在进程和子程序中,赋值符用只限定在进程和子程序中,赋值符用“:=:=”表示。表示。 (2 2)变量赋值语句变量赋值语句 格式:格式: 目标变量名目标变量名: := 赋值源;赋值源

216、; 该语句是将赋值源的当前值赋给目标变量。要该语句是将赋值源的当前值赋给目标变量。要求赋值号两边变量的类型和长度应该一致。求赋值号两边变量的类型和长度应该一致。 例如:例如: A A : := 5.05.0; Y Y : :=0 0; X X := Y Y;-将数值将数值5.05.0赋值给变量赋值给变量A A -变量变量Y Y被赋值为被赋值为0 0 -将变量将变量Y Y的当前值赋给目标变量的当前值赋给目标变量X X VHDL语言的描述语句语言的描述语句 204 对于数组赋值,可采用下列格式:对于数组赋值,可采用下列格式: (2 2)变量赋值语句变量赋值语句 VARIBLEVARIBLE x x

217、,y:y: STD_LOGIC_VECTOR (STD_LOGIC_VECTOR ( 0 0 TOTO 3 3 ) ); x x : := “10111011”; y y ( ( 0 0 TOTO 1 1 ) :) := “1010”; y y ( ( 2 2 TOTO 3 3 ) ) : := x x ( ( 1 1 TOTO 2 2 ) ); -整体赋值,数组整体赋值,数组“10111011”赋值赋值x x -部分赋值部分赋值, ,“1010”赋值赋值y y的部分位的部分位 - -位置关联赋值位置关联赋值,x,x的部分位的部分位赋值赋值y y的部分位的部分位 VHDL语言的描述语句语言的描

218、述语句 205 流程控制语句通过条件控制来决定是否执行一流程控制语句通过条件控制来决定是否执行一条或几条语句,或重复执行一条或几条语句,或跳条或几条语句,或重复执行一条或几条语句,或跳过一条或几条语句。过一条或几条语句。 2 2. 流程控制语句流程控制语句 流程控制语句共有五种:流程控制语句共有五种: IFIF语句语句 CASECASE语句语句 LOOPLOOP语句语句 NEXTNEXT语句语句 EXITEXIT语句语句 VHDL语言的描述语句语言的描述语句 206 IFIF语句是一种条件语句,在语句是一种条件语句,在IFIF语句中至少应有语句中至少应有一个条件句,该条件句必须由一个条件句,该

219、条件句必须由BOOLEANBOOLEAN表达式构成。表达式构成。 IFIF语句依据条件产生的判断结果语句依据条件产生的判断结果TRUETRUE或或FALSEFALSE,有选择地去执行指定的语句。有选择地去执行指定的语句。 利用利用IFIF语句可以实现两个或两个以上的条件分语句可以实现两个或两个以上的条件分支判断。其格式有三种:支判断。其格式有三种: (1 1)IFIF语句语句 单选择控制单选择控制 二选择控制二选择控制 多选择控制多选择控制 VHDL语言的描述语句语言的描述语句 207 IFIF语句的单选择控制语句的单选择控制 格式:格式: IF 条件句条件句 THEN 顺序语句;顺序语句;

220、END IF; 若条件句的逻辑值为真,则执行若条件句的逻辑值为真,则执行THENTHEN后面的顺后面的顺序语句,否则结束该条件的执行。序语句,否则结束该条件的执行。 例如:例如:IFIF (x x = 1 1) THENTHEN A A = B B; END IFEND IF; 当条件当条件x x =1 1成立时,信号成立时,信号B B的值赋给信号的值赋给信号A A;否;否则,不执行则,不执行A A = B B语句。语句。 VHDL语言的描述语句语言的描述语句 208 IFIF语句的二选择控制语句的二选择控制 格式:格式: IF 条件句条件句 THEN 顺序语句;顺序语句; ELSE 顺序语句

221、;顺序语句; END IF; 若条件句的逻辑值为真,则执行若条件句的逻辑值为真,则执行THENTHEN后面的顺后面的顺序语句,否则执行序语句,否则执行ELSEELSE后面的顺序语句。后面的顺序语句。 VHDL语言的描述语句语言的描述语句 209 【例例】用用IFIF语句描述二选一数据选择器。语句描述二选一数据选择器。 设数据输入信号为设数据输入信号为d1d1和和d0d0,选择控制信号为,选择控制信号为s s,数据输出信号为数据输出信号为y y。 ARCHITECTUREARCHITECTURE example1 example1 OFOF mux2 mux2 ISIS BEGINBEGIN P

222、ROCESSPROCESS(d1, d0, sd1, d0, s) BEGINBEGIN IFIF ( ( s s =0 0) ) THENTHEN y y = d0d0; ELSEELSE y y = d1d1; END IFEND IF; END PROCESSEND PROCESS; END END example1 example1;VHDL语言的描述语句语言的描述语句 210 IFIF语句的多选择控制语句的多选择控制 格式:格式: IF 条件句条件句 THEN 顺序语句;顺序语句; ELSIF 条件句条件句 THEN 顺序语句;顺序语句; END IF; 当满足多个条件之一时,执行该

223、条件当满足多个条件之一时,执行该条件THENTHEN后面后面的顺序语句;如果所设条件都不满足,则执行的顺序语句;如果所设条件都不满足,则执行ELSEELSE后面的顺序语句。后面的顺序语句。 VHDL语言的描述语句语言的描述语句 211 【例例】用用IFIF语句描述四选一数据选择器。语句描述四选一数据选择器。 设数据输入信号为设数据输入信号为d3d3、d2d2、d1d1、d0d0,选择控制,选择控制信号为信号为s=s1, s0s=s1, s0 ,数据输出信号为,数据输出信号为y y。 ARCHITECTUREARCHITECTURE example2 example2 OFOF mux4 mux

224、4 ISIS BEGINBEGIN PROCESSPROCESS(d3, d2, d1, d0, sd3, d2, d1, d0, s ) BEGINBEGIN IFIF ( ( s s =“0000”) ) THENTHEN y y = d0d0; ELSIFELSIF ( ( s s =“0101”) ) THENTHEN y y = d1d1; ELSIF ELSIF ( ( s s =“1010”) ) THENTHEN y y = d2d2; ELSE ELSE y y 顺序语句;顺序语句; WHEN 选择值选择值 = 顺序语句;顺序语句; WHEN OTHERS = 顺序语句;顺序

225、语句; END CASE; 说说明明:先先计计算算表表达达式式的的值值,然然后后根根据据条条件件句句中中的的选选择值执行相对应的顺序语句。择值执行相对应的顺序语句。 注注意意:条条件件句句中中的的“=”不不是是操操作作符符,它它相相当当于于THENTHEN作用。作用。 VHDL语言的描述语句语言的描述语句 213 表达式可以是一个整数类型或枚举类型的值,表达式可以是一个整数类型或枚举类型的值,也可以是由这些数据类型的值构成的数组。也可以是由这些数据类型的值构成的数组。 (2 2)CASECASE语句语句 选择值可以有四种不同的表达方式:选择值可以有四种不同的表达方式: 单个普通数值,如:单个普

226、通数值,如:5 5; 数值选择范围,如:(数值选择范围,如:(1 TO 3)1 TO 3); 并列值,如:并列值,如:4 4 | 6 6,表示取值为,表示取值为4 4或或6 6; 混合方式,即以上三种方式的混合。混合方式,即以上三种方式的混合。VHDL语言的描述语句语言的描述语句 214 使用使用CASECASE语句时,应注意以下几点:语句时,应注意以下几点: (2 2)CASECASE语句语句 选择值必须在表达式的取值范围内;选择值必须在表达式的取值范围内; CASECASE语句中至少要包含一个语句中至少要包含一个WHENWHEN语句;语句; 每每个个选选择择值值只只能能出出现现一一次次,不

227、不能能在在其其他他WHENWHEN语句中重复出现;语句中重复出现; 除除非非所所有有选选择择值值能能完完全全覆覆盖盖CASECASE语语句句中中的的表表达达式式的的取取值值,否否则则最最后后一一个个条条件件句句的的选选择择值值必须用必须用“OTHERSOTHERS”表示。表示。 选择值可以颠倒次序选择值可以颠倒次序, ,但但OTHERSOTHERS必须放在最后必须放在最后; ; “=”不是操作符,相当于不是操作符,相当于THENTHEN语句的作用。语句的作用。 VHDL语言的描述语句语言的描述语句 215 【例例】用用CASECASE语句描述四选一数据选择器。语句描述四选一数据选择器。 ARC

228、HITECTUREARCHITECTURE example3 example3 OFOF mux4 mux4 ISIS SIGNALSIGNAL s: STD_LOGIC_VECTOR s: STD_LOGIC_VECTOR(1 1 DOWNTODOWNTO 0 0) BEGINBEGIN s sy yy yy yy yy y=X X; END CASEEND CASE; END PROCESSEND PROCESS; END END example3 example3;VHDL语言的描述语句语言的描述语句 216 LOOP LOOP语句是一种循环语句,它可以使所包含的语句是一种循环语句,它可

229、以使所包含的一组顺序语句被循环执行,其执行的次数由设定的一组顺序语句被循环执行,其执行的次数由设定的循环参数决定。循环参数决定。 (3 3)LOOPLOOP语句语句 LOOPLOOP语句有三种格式:语句有三种格式: FOR_LOOPFOR_LOOP语句语句 WHILE_LOOPWHILE_LOOP语句语句 单个单个LOOPLOOP语句语句VHDL语言的描述语句语言的描述语句 217 FOR_LOOP FOR_LOOP语句主要用于循环次数已知的循环程序设计。语句主要用于循环次数已知的循环程序设计。可分为递增方式和递减方式。可分为递增方式和递减方式。 FOR_LOOPFOR_LOOP语句语句 循环

230、标号循环标号: FOR 循环变量循环变量 IN 初值初值 TO 终值终值 LOOP 顺序语句;顺序语句; END LOOP 循环标号循环标号; 递增格式:递增格式: 递减格式:递减格式:循环标号循环标号: FOR 循环变量循环变量 IN 初值初值 DOWNTO 终值终值 LOOP 顺序语句;顺序语句; END LOOP 循环标号循环标号; VHDL语言的描述语句语言的描述语句 218 说说明明:循循环环从从循循环环变变量量的的“初初值值”开开始始,到到“终终值值”结结束束,每每执执行行一一次次循循环环体体中中的的顺顺序序语语句句后后,循环变量的值递增或递减循环变量的值递增或递减1 1。 FOR

231、_LOOPFOR_LOOP语句语句 循环标号为任选项,循环标号为任选项,用来给循环语句定位。用来给循环语句定位。 循循环环变变量量的的初初值值和和终终值值决决定定了了循循环环次次数数(取取整整数)。数)。 循环次数:循环次数: 循环次数循环次数 = | |终值终值- -初值初值|+1|+1 VHDL语言的描述语句语言的描述语句 219 【例例】用用FOR_LOOPFOR_LOOP语句描述八位奇偶校验器。语句描述八位奇偶校验器。 输入信号输入信号X X是一个长度为是一个长度为8 8位的标准逻辑矢量。位的标准逻辑矢量。当当X X中中1 1的个数为奇数时,输出的个数为奇数时,输出Y=1Y=1,否则,

232、否则,Y=0Y=0。 算法:用算法:用FOR_LOOPFOR_LOOP语句对语句对X X的值逐位进行异或的值逐位进行异或运算。运算。 循环次数:由循环变量循环次数:由循环变量n n控制,记录异或运算控制,记录异或运算的次数。的次数。 循环变量的初值为循环变量的初值为0 0,终值为,终值为7 7。 VHDL语言的描述语句语言的描述语句 220 LIBRARYLIBRARY IEEE IEEE; USEUSE IEEE.STD_LOGIC_1164. IEEE.STD_LOGIC_1164.ALLALL; ENTITYENTITY loop1 loop1 ISIS PORTPORT(X: X: I

233、NIN STD_LOGIC_VECTOR STD_LOGIC_VECTOR(7 7 DOWNTODOWNTO 0 0);); Y: Y: OUTOUT STD_LOGIC STD_LOGIC);); ENDEND loop1 loop1; ARCHITECTUREARCHITECTURE example4 example4 OFOF loop1 loop1 ISIS BEGINBEGIN PROCESSPROCESS ( ( X X ) ) VARIABLEVARIABLE temp: STD_LOGIC temp: STD_LOGIC; BEGINBEGIN temp temp :=0 0;

234、 FORFOR n n ININ 7 7 DOWNTODOWNTO 0 0 LOOPLOOP temp temp := temp temp XORXOR X( X( n n ) ); END LOOPEND LOOP; Y Y = temptemp; END PROCESSEND PROCESS; ENDEND example4 example4;VHDL语言的描述语句语言的描述语句 221 WHILE_LOOP WHILE_LOOP语句是一种条件循环语句,用于循语句是一种条件循环语句,用于循环次数未知的循环程序设计。环次数未知的循环程序设计。 WHILE_LOOPWHILE_LOOP语句语句

235、 循环标号循环标号: : WHILE 循环控制条件循环控制条件 LOOP 顺序语句;顺序语句; END LOOP 循环标号循环标号 ; 格式:格式:说说明明:若若循循环环控控制制条条件件为为“真真”, ,则则进进行行循循环环执执行行顺序语句;顺序语句; 若循环控制条件为若循环控制条件为“假假”,则结束循环。,则结束循环。VHDL语言的描述语句语言的描述语句 222 【例例】用用WHILE_LOOPWHILE_LOOP语句描述八位奇偶校验器。语句描述八位奇偶校验器。 ARCHITECTUREARCHITECTURE example5 example5 OFOF loop2 loop2 ISIS

236、BEGINBEGIN PROCESS PROCESS ( ( X X ) ) VARIABLEVARIABLE temp: STD_LOGIC temp: STD_LOGIC; VARIABLEVARIABLE n: INTEGER n: INTEGER; BEGINBEGIN temp temp :=0 0; n n := 0 0; WHILEWHILE n n 8 8 LOOPLOOP temp temp := temp temp XORXOR X( X( n n ) ); n n := n+1n+1; END LOOPEND LOOP; Y Y1010; END LOOPEND LOOP

237、 L2 L2;- 控制语句,当控制语句,当A A大大 于于1010时,跳出循环时,跳出循环 VHDL语言的描述语句语言的描述语句 224 NEXT NEXT语句是一种循环控制语句,通常嵌套在语句是一种循环控制语句,通常嵌套在LOOPLOOP语句中使用,用于进行有条件或无条件的控制语句中使用,用于进行有条件或无条件的控制执行程序的转向。执行程序的转向。 (4 4)NEXTNEXT语句语句 NEXT 循环标号循环标号 WHEN 条件表达式条件表达式 ; 格式:格式:VHDL语言的描述语句语言的描述语句 225 根据可选项,根据可选项,NEXTNEXT语句有三种格式:语句有三种格式: (4 4)NE

238、XTNEXT语句语句 格式格式1 1: NEXT 功功能能:无无条条件件结结束束本本次次循循环环,跳跳回回到到循循环环体体的的开开始始位位置置,执行下一次循环。执行下一次循环。 格式格式2 2: NEXT 循环标号循环标号 功功能能:无无条条件件结结束束本本次次循循环环,从从循循环环标标号号规规定定的的位位置置,执行下一次循环。执行下一次循环。 格式格式3 3: NEXT WHEN 条件表达式条件表达式 功功能能:有有条条件件结结束束本本次次循循环环,当当条条件件表表达达式式满满足足时时,结结束本次循环,否则继续循环。束本次循环,否则继续循环。VHDL语言的描述语句语言的描述语句 226 【例

239、例】用用NEXT_WHENNEXT_WHEN语句实现单循环。语句实现单循环。 ARCHITECTUREARCHITECTURE example6 example6 OFOF NEXT_WHEN1 NEXT_WHEN1 ISIS BEGINBEGIN PROCESS PROCESS ( ( s s ) ) VARIABLE VARIABLE i: INTEGER i: INTEGER; BEGINBEGIN L1: L1: FORFOR i i ININ 7 7 DOWNTODOWNTO 0 0 LOOPLOOP y( y( i i ) ) =0 0; NEXTNEXT WHENWHEN s(

240、s( i i ) ) =1 1; y(y( i i ) ) =1 1; END LOOPEND LOOP L1 L1; END PROCESSEND PROCESS; ENDEND example6 example6;- - 若若s(s( i i )=)=1 1成立,成立, 终止本次循环终止本次循环, ,返回到返回到L1L1 否则否则, ,继续本次循环。继续本次循环。 - - 返回到返回到L1L1 VHDL语言的描述语句语言的描述语句 227【例例】试用多重循环实现四组八位数据的奇校验。试用多重循环实现四组八位数据的奇校验。 LIBRARYLIBRARY IEEE IEEE; USE USE

241、IEEE.STD_LOGIC_1164. IEEE.STD_LOGIC_1164.ALLALL; ENTITYENTITY NEXT_WHEN2 NEXT_WHEN2 ISIS PORTPORT ( ( d: d: ININ STD_LOGIC_VECTOR ( STD_LOGIC_VECTOR ( 0 0 TOTO 31) 31); y: y: OUTOUT STD_LOGIC_VECTOR ( STD_LOGIC_VECTOR ( 0 0 TOTO 3 3 ) ) ) ); ENDEND NEXT_WHEN2 NEXT_WHEN2; ARCHITECTUREARCHITECTURE exa

242、mple7 example7 OFOF NEXT_WHEN2 NEXT_WHEN2 ISIS BEGINBEGIN PROCESS PROCESS ( ( d d ) ) VARIABLE VARIABLE i,k,ji,k,j: INTEGER: INTEGER; VARIABLE VARIABLE tmptmp: STD_LOGIC: STD_LOGIC; 四组八位数据由四组八位数据由d0.31d0.31输入,内循环完成各组数据的输入,内循环完成各组数据的奇校验,外循环确定校验的组数,校验结果存放在输出奇校验,外循环确定校验的组数,校验结果存放在输出y0.3y0.3中。当某八位数据中中。当

243、某八位数据中1 1的个数为奇数时,所对应的输的个数为奇数时,所对应的输出位出位yiyi =1 1,否则,否则,yiyi =0 0。 VHDL语言的描述语句语言的描述语句 228 BEGIN BEGIN k k: = 0 0;L1: L1: FORFOR i i ININ 0 0 TOTO 3 3 LOOPLOOP y( y( i i ) ) =0 0; tmptmp :=0 0; j j := 0 0; k k := i i * * 8 8;L2: L2: LOOPLOOP tmptmp := tmptmp XORXOR d( d( k k ) ); y(y( i i ) ) = tmptmp

244、; NEXTNEXT L1 L1 WHENWHEN j j = 7 7; j j := j j + + 1 1; k k := k k + + 1 1; NEXTNEXT L2 L2; END LOOPEND LOOP L2 L2; NEXTNEXT L1 L1; END LOOP END LOOP L1 L1; END PROCESSEND PROCESS; ENDEND example7 example7;内循环内循环 外循环外循环 在内循环中,当在内循环中,当j j 7 7时,继续执行时,继续执行内循环;内循环; 当当j j = 7 7时,终止内循环,跳转到时,终止内循环,跳转到L1L1

245、处,执行一次外循环。处,执行一次外循环。VHDL语言的描述语句语言的描述语句 229 EXIT EXIT语句和语句和NEXTNEXT语句一样,都是循环控制语句,语句一样,都是循环控制语句,主要在主要在LOOPLOOP语句中使用,用于进行有条件或无条件语句中使用,用于进行有条件或无条件的跳转控制。的跳转控制。 (5 5)EXITEXIT语句语句 EXIT 循环标号循环标号 WHEN 条件表达式条件表达式 ; 格式:格式:VHDL语言的描述语句语言的描述语句 230 根据可选项,根据可选项,EXITEXIT语句有三种格式:语句有三种格式: (5 5)EXITEXIT语句语句 格式格式1 1: EX

246、IT 功能:功能:无条件跳出循环无条件跳出循环, ,从从END LOOPEND LOOP下面的语句开始执行。下面的语句开始执行。 格式格式2 2: EXIT 循环标号循环标号 功功能能:无无条条件件跳跳出出循循环环,从从循循环环标标号号规规定定的的位位置置开开始始执执行行循环体外的语句。循环体外的语句。 格式格式3 3: EXIT WHEN 条件表达式条件表达式 功功能能:有有条条件件跳跳出出循循环环,当当条条件件表表达达式式不不成成立立时时,继继续续执执行循环,否则跳出循环。行循环,否则跳出循环。VHDL语言的描述语句语言的描述语句 231 【例例】用用EXITEXIT语句实现两个数组的比较

247、。语句实现两个数组的比较。 PROCESSPROCESS ( ( X, YX, Y ) ) BEGINBEGIN Z Z =“0000”; FORFOR n n ININ 7 7 DOWNTODOWNTO 0 0 LOOPLOOP IFIF ( ( X(X( n n ) )= Y(Y( n n ) ) THENTHEN NEXTNEXT; ELSIFELSIF ( ( X(X( n n ) ) Y(Y( n n ) ) ) ) THENTHEN Z Z =“0101”; EXITEXIT; ELSEELSE Z Z Y Y时,时,Z=10Z=10;当;当X XY Y时,时,Z=01Z=01。

248、VHDL语言的描述语句语言的描述语句 232 【例例】用用EXIT_WHENEXIT_WHEN语句实现两个数组的比较。语句实现两个数组的比较。 PROCESSPROCESS ( ( X, YX, Y ) ) BEGINBEGIN Z Z =“0000”; FORFOR n n ININ 7 7 DOWNTODOWNTO 0 0 LOOPLOOP NEXT WHENNEXT WHEN ( ( X(X( n n ) ) = Y(Y( n n ); Z Z =“0101”; EXIT WHENEXIT WHEN ( ( X(X( n n ) ) Y(Y( n n ); Z Z =“1010”; EX

249、ITEXIT; END LOOPEND LOOP; END PROCESSEND PROCESS;VHDL语言的描述语句语言的描述语句 233 等待(等待(WAITWAIT)语句在进程或过程中使用,用于)语句在进程或过程中使用,用于程序的暂停和等待。程序的暂停和等待。 3 3. 等待语句等待语句 格式:格式:WAITWAIT ONON 敏感信号表敏感信号表 UNTILUNTIL 条件表达式条件表达式 FORFOR 时间表达时间表达式式; 当执行到当执行到WAITWAIT语句时,程序执行被暂停,直到语句时,程序执行被暂停,直到满足此语句设置的等待结束条件后,重新执行程序。满足此语句设置的等待结束

250、条件后,重新执行程序。 VHDL语言的描述语句语言的描述语句 234 根据可选项,根据可选项,WAITWAIT语句有四种格式:语句有四种格式: 格式格式1 1: WAIT 功能:功能:永远处于等待状态永远处于等待状态 格式格式2 2: WAIT ON 敏感信号表;敏感信号表; 功功能能:程程序序进进入入等等待待状状态态,直直至至敏敏感感信信号号表表中中的的任任一一信信号发生变化时,结束等待重新执行程序。号发生变化时,结束等待重新执行程序。 例如:例如: SIGNALSIGNAL a a,b b: STDSTD LOGICLOGIC; PROCESSPROCESS WAIT ONWAIT ON

251、a a,b b; END PROCESSEND PROCESS;- 暂停程序的执行,直到暂停程序的执行,直到a a或或b b发生发生 变化才重新启动。变化才重新启动。 3 3. 等待语句等待语句 VHDL语言的描述语句语言的描述语句 235 格式格式3 3: WAIT UNTIL 条件表达式;条件表达式; 功功能能:程程序序进进入入等等待待状状态态,直直至至表表达达式式中中的的敏敏感感信信号号发发生生变变化化,而而且且满满足足表表达达式式设设置置的的条条件件时时,结结束束等等待重新执行程序。待重新执行程序。 例如:例如: WAIT UNTILWAIT UNTIL clkclk =1 1ANDA

252、ND clkclkEVENTEVENT; z z = x x OROR y y; 3 3. 等待语句等待语句 执执行行到到WAITWAIT语语句句后后,暂暂停停程程序序的的执执行行,直直到到clkclk的的上上升升沿到来时,才恢复程序的运行,执行其后的赋值语句。沿到来时,才恢复程序的运行,执行其后的赋值语句。 VHDL语言的描述语句语言的描述语句 236 格式格式4 4: WAIT FOR 时间表达式;时间表达式; 功功能能:从从执执行行到到当当前前的的WAITWAIT语语句句开开始始,在在此此时时间间段段内内,程程序序处处于于等等待待状状态态,当当超超过过时时间间表表达达式式给给定定的的时时

253、间后,程序自动恢复执行。间后,程序自动恢复执行。 例如:例如: WAIT FORWAIT FOR 25ns 25ns; z z y y y y y y NULLNULL; END CASEEND CASE; - 排除一些其他不用的条件排除一些其他不用的条件 VHDL语言的描述语句语言的描述语句 238VHDL语言的并行描述语句语言的并行描述语句 并行语句又称并发语句,是最具有并行语句又称并发语句,是最具有VHDLVHDL特色的特色的语句结构。语句结构。 并行语句具有多种语言格式,各并行语句在结并行语句具有多种语言格式,各并行语句在结构体中的执行是同步进行的,或者说是并发运行的,构体中的执行是同

254、步进行的,或者说是并发运行的,其执行方式与书写的顺序无关。其执行方式与书写的顺序无关。 同一结构中的各并行语句之间可以是相互独立同一结构中的各并行语句之间可以是相互独立的、不相关的,也可以进行信息传递。的、不相关的,也可以进行信息传递。 在并行语句内部可以嵌套其他语句,嵌套的语在并行语句内部可以嵌套其他语句,嵌套的语句可以并行执行,也可以顺序执行。句可以并行执行,也可以顺序执行。VHDL语言的描述语句语言的描述语句 239VHDL语言的并行描述语句语言的并行描述语句 在在VHDLVHDL语言中,并行语句主要有六种:语言中,并行语句主要有六种: 进程语句进程语句 并行信号赋值语句并行信号赋值语句

255、 块语句块语句 元件例化语句元件例化语句 生成语句生成语句 断言语句断言语句VHDL语言的描述语句语言的描述语句 240 进程(进程(PROCESSPROCESS)语句是在结构体中用来描述特)语句是在结构体中用来描述特定电路功能的程序模块,它提供了一种用顺序语句定电路功能的程序模块,它提供了一种用顺序语句描述电路逻辑功能的方法。描述电路逻辑功能的方法。 1 1. 进程语句进程语句 一个结构体中可以有多个并行运行的进程结构,一个结构体中可以有多个并行运行的进程结构,而每个进程结构的内部由一组顺序语句组成。而每个进程结构的内部由一组顺序语句组成。 进程语句结构具有并行执行和顺序处理的双重进程语句结

256、构具有并行执行和顺序处理的双重特性。特性。 VHDL语言的描述语句语言的描述语句 241 (1 1)进程语句的结构)进程语句的结构 进程标号进程标号: PROCESS (敏感信号参数表敏感信号参数表) IS进程说明部分进程说明部分 BEGIN顺序描述语句顺序描述语句 END PROCESS 进程标号进程标号; 格式:格式: 当敏感信号表中的某个信号发生变化时,立即当敏感信号表中的某个信号发生变化时,立即启动进程语句,将进程中的顺序语句按顺序循环执启动进程语句,将进程中的顺序语句按顺序循环执行,直到敏感信号稳定不变为止。行,直到敏感信号稳定不变为止。 VHDL语言的描述语句语言的描述语句 242

257、 (2 2)进程语句的组成)进程语句的组成 进程说明部分进程说明部分 进程语句的结构由三部分组成,即进程说明部进程语句的结构由三部分组成,即进程说明部分、顺序描述语句部分和敏感信号参数表。分、顺序描述语句部分和敏感信号参数表。 用于定义该进程所需要的局部数据环境。如:用于定义该进程所需要的局部数据环境。如:数据类型、常数、属性、子程序等。数据类型、常数、属性、子程序等。 注意:注意:不能在进程内部定义信号和共享变量,不能在进程内部定义信号和共享变量,信号只能在结构体说明中定义。信号只能在结构体说明中定义。 VHDL语言的描述语句语言的描述语句 243 (2 2)进程语句的组成)进程语句的组成

258、顺序描述语句部分顺序描述语句部分 是一段顺序执行语句,用于描述该进程的行为。是一段顺序执行语句,用于描述该进程的行为。 信信号号赋赋值值语语句句:在在进进程程中中将将计计算算或或处处理理的的结结果果赋赋值给信号。值给信号。 变变量量赋赋值值语语句句:在在进进程程中中以以变变量量的的形形式式存存储储计计算算的中间值。的中间值。 子子程程序序调调用用语语句句:对对已已定定义义的的过过程程和和函函数数进进行行调调用,并参与计算。用,并参与计算。VHDL语言的描述语句语言的描述语句 244 (2 2)进程语句的组成)进程语句的组成 顺序描述语句部分顺序描述语句部分 进进程程启启动动语语句句:当当PRO

259、CESSPROCESS语语句句未未列列出出任任何何敏敏感感信信号号时时,进进程程的的启启动动可可通通过过WAITWAIT语句来实现语句来实现。 顺顺序序描描述述语语句句:包包括括IFIF语语句句、CASECASE语语句句、LOOPLOOP语语句和句和NULLNULL语句语句。 进程跳出语句:进程跳出语句:包括包括NEXTNEXT语句和语句和EXITEXIT语句语句。 敏感信号参数表敏感信号参数表 用于启动本进程可读入的信号名。用于启动本进程可读入的信号名。VHDL语言的描述语句语言的描述语句 245 【例例】用进程语句描述异步清零计数器。用进程语句描述异步清零计数器。 异步清零方式与时钟信号异

260、步清零方式与时钟信号clkclk无关,当清零端无关,当清零端clrclr=0=0时,时,计数状态计数状态Q=0Q=0;当;当clrclr=1=1时,计数器为计数状态。时,计数器为计数状态。 PROCESSPROCESS ( ( clkclk, , clrclr ) ) BEGINBEGIN IFIF clrclr =0 0 THENTHEN Q Q= X X“0000”; ELSIF ELSIF ( ( clkclk =1 1ANDAND clkclkEVENTEVENT ) ) THENTHEN Q Q = Q Q + + 1 1; END IFEND IF; END PROCESSEND

261、PROCESS;VHDL语言的描述语句语言的描述语句 246 【例例】用进程语句描述异步清零计数器。用进程语句描述异步清零计数器。 若计数器采用同步清零,则敏感表中可无若计数器采用同步清零,则敏感表中可无clrclr信号,此信号,此时进程如下:时进程如下: PROCESSPROCESS ( ( clkclk) ) BEGINBEGIN IFIF ( ( clkclk =1 1ANDAND clkclkEVENTEVENT ) ) THENTHEN IF IF clrclr =0 0 THENTHEN Q Q= X X“0000”; ELSE ELSE Q Q = Q Q + + 1 1; EN

262、D IFEND IF; END IF END IF; END PROCESSEND PROCESS;VHDL语言的描述语句语言的描述语句 247 并行信号赋值语句是将一个数据或一个表达式的运算结果并行信号赋值语句是将一个数据或一个表达式的运算结果送给一个数据对象送给一个数据对象, ,其赋值目标必须是信号而不能是变量。其赋值目标必须是信号而不能是变量。 信号赋值语句可以位于进程语句中,也可以在进程语句之信号赋值语句可以位于进程语句中,也可以在进程语句之外。若出现在进程语句结构内,则属于顺序语句,否则为并行外。若出现在进程语句结构内,则属于顺序语句,否则为并行信号赋值语句。信号赋值语句。 2 2.

263、 并行信号赋值语句并行信号赋值语句 并行信号赋值语句有三种形式:并行信号赋值语句有三种形式: 简单信号赋值语句简单信号赋值语句 条件信号赋值语句条件信号赋值语句 选择信号赋值语句选择信号赋值语句 VHDL语言的描述语句语言的描述语句 248 (1 1)简单信号赋值语句简单信号赋值语句 是是VHDLVHDL并行语句结构中最基本的单元。并行语句结构中最基本的单元。 格式:格式: 赋值目标赋值目标=表达式;表达式; 规则:规则: 赋值目标必须是信号;赋值目标必须是信号; 赋赋值值目目标标的的数数据据类类型型必必须须与与表表达达式式数数据据类型一致。类型一致。 例如:例如: OUT_1OUT_1 =

264、B B ANDAND C C; VHDL语言的描述语句语言的描述语句 249 (2 2)条件信号赋值语句条件信号赋值语句 该语句与该语句与IFIF语句相类似,根据不同的赋值条件,语句相类似,根据不同的赋值条件,选择表达式中的值赋给赋值目标。选择表达式中的值赋给赋值目标。 赋值目标赋值目标 = 表达式表达式1 WHEN 赋值条件赋值条件1 ELSE 表达式表达式2 WHEN 赋值条件赋值条件2 ELSE 表达式表达式n; 格式:格式: 在在执执行行该该语语句句时时,结结构构体体按按赋赋值值条条件件的的书书写写顺顺序序逐逐条条测测定定,一一旦旦发发现现满满足足赋赋值值条条件件,立立即即将将表表达达

265、式的值赋给赋值目标。式的值赋给赋值目标。VHDL语言的描述语句语言的描述语句 250 【例例】用条件赋值语句实现四选一数据选择器。用条件赋值语句实现四选一数据选择器。 ARCHITECTUREARCHITECTURE example5 example5 OFOF mux41 mux41 IS IS SIGNALSIGNAL s: STD_LOGIC_VECTOR( s: STD_LOGIC_VECTOR( 1 1 DOWNTODOWNTO 0 0 ) ); BEGINBEGIN s s = s1&s0s1&s0; y y= d0 d0 WHENWHEN s s =“0000” ELSEELSE

266、 d1 d1 WHENWHEN s s =“0101” ELSEELSE d2 d2 WHENWHEN s s =“1010” ELSEELSE d3 d3; ENDEND example5 example5; - - 当当s s = 0000时,时,y y = d0d0 - - 当当s s = 0101时,时,y y = d1d1 - - 当当s s = 1010时,时,y y = d2d2 - - 当当s s取其他值时,取其他值时,y y = d3d3VHDL语言的描述语句语言的描述语句 251 (3 3)选择信号赋值语句选择信号赋值语句 与与CASECASE语句相类似,以选择表达式的不同

267、取值为选择条语句相类似,以选择表达式的不同取值为选择条件,将多个表达式的值赋给赋值目标。件,将多个表达式的值赋给赋值目标。 WITH 选择表达式选择表达式 SELECT 赋值目标赋值目标 = 表达式表达式1 1 WHEN 选择值选择值1, 1, 表达式表达式2 2 WHEN 选择值选择值2, 2, 表达式表达式n n WHEN 选择值选择值n n; 格式:格式: 该该语语句句对对子子句句中中的的“选选择择值值”进进行行选选择择,当当子子句句中中“选选择择值值”与与“选选择择表表达达式式”的的值值相相同同时时,则则将将子子句句中中的的“表表达达式式”的值赋给赋值目标。的值赋给赋值目标。 规则:规

268、则: 该语句不允许有选择值重叠现象;该语句不允许有选择值重叠现象; 该语句不允许选择值涵盖不全的情况;该语句不允许选择值涵盖不全的情况; 每每个个子子句句以以“, ,”号号结结束束,最最后后一一个个子子句句以以“; ;”结束。结束。VHDL语言的描述语句语言的描述语句 252 用选择信号赋值语句实现四选一数据选择器。用选择信号赋值语句实现四选一数据选择器。 ARCHITECTUREARCHITECTURE example6 example6 OFOF mux41 mux41 IS IS SIGNALSIGNAL s: STD_LOGIC_VECTOR( s: STD_LOGIC_VECTOR(

269、 1 1 DOWNTODOWNTO 0 0 ) ); BEGINBEGIN s s = s1&s0s1&s0; WITHWITH s s SELECTSELECT y y = d0 d0 WHENWHEN “0000”, d1 d1 WHENWHEN “0101”, d2 d2 WHENWHEN “1010”, d3 d3 WHENWHEN “1111”, Z Z WHEN OTHERSWHEN OTHERS; END END example6 example6; - - 当当s s = 0000时,时,y y = d0d0 - - 当当s s = 0101时,时,y y = d1d1 - -

270、 当当s s = 1010时,时,y y = d2d2 - - 当当s s = 1111时,时,y y = d3d3 - - 当当s s取其他值时,取其他值时,y y为高阻为高阻VHDL语言的描述语句语言的描述语句 253 块(块(BLOCKBLOCK)语句可以将一些实现某一特定功能)语句可以将一些实现某一特定功能的并行语句组合在一起,其主要目的是利用多个块的并行语句组合在一起,其主要目的是利用多个块语句结构将一个复杂的结构体划分成几个不同功能语句结构将一个复杂的结构体划分成几个不同功能的模块,使复杂的结构体结构分明、功能明确,使的模块,使复杂的结构体结构分明、功能明确,使程序的编排更加清晰、

271、更有层次,改善并行语句的程序的编排更加清晰、更有层次,改善并行语句的结构和可读性,便于程序的编写、调试和查错。结构和可读性,便于程序的编写、调试和查错。 3 3. 块语句块语句 VHDL语言的描述语句语言的描述语句 254 (1 1)块语句的格式块语句的格式 块语句是将结构体中并行语句进行组合的一种方法。块语句是将结构体中并行语句进行组合的一种方法。 块标号:块标号: BLOCK 说明语句说明语句 BEGIN 并行语句并行语句 END BLOCK 块标号;块标号; 格式:格式: 说说明明语语句句:主主要要包包括括接接口口说说明明和和类类属属说说明明等等,用用来来定定义义块块内局部信号、数据类型

272、、元件和子程序。内局部信号、数据类型、元件和子程序。 并行语句:并行语句:可以使用所有的并行语句。可以使用所有的并行语句。 VHDL语言的描述语句语言的描述语句 255 (2 2)块语句的应用块语句的应用 利用块语句可以将结构体中的并行语句划分成利用块语句可以将结构体中的并行语句划分成多个并行方式的子块,每一个子块都是一个独立的多个并行方式的子块,每一个子块都是一个独立的设计实体,具有自己的类属参数和界面端口,以及设计实体,具有自己的类属参数和界面端口,以及与外部环境的衔接描述。与外部环境的衔接描述。 块语句还可以实现嵌套,内层的块语句可以使块语句还可以实现嵌套,内层的块语句可以使用外层块语句

273、所定义的信号,但外层块语句不能使用外层块语句所定义的信号,但外层块语句不能使用内层块语句定义的信号。用内层块语句定义的信号。 VHDL语言的描述语句语言的描述语句 256 运算电路的输入为运算电路的输入为A A和和B B,输出为,输出为SUMSUM(八位和)、(八位和)、SUBSUB(八位差),以及进位(八位差),以及进位COCO和借位和借位BOBO。 【例例】试用块语句设计一个运算电路,包括一个八位加法器试用块语句设计一个运算电路,包括一个八位加法器和一个八位减法器。和一个八位减法器。 LIBRARYLIBRARY IEEE IEEE; USEUSE IEEE.STD IEEE.STD LO

274、GICLOGIC 1164.1164.ALLALL; USEUSE IEEE.STD_LOGIC_UNSIGNED. IEEE.STD_LOGIC_UNSIGNED.ALLALL; ENTITY ENTITY add_subadd_sub ISIS PORTPORT(A, B: A, B: ININ STD STD LOGIC_VECTORLOGIC_VECTOR(7 7 DOWNTODOWNTO 0 0);); SUM, SUB:SUM, SUB: OUTOUT STD STD LOGIC_VECTORLOGIC_VECTOR(7 7 DOWNTODOWNTO 0 0);); CO, BO:

275、 CO, BO: OUTOUT STD STD LOGICLOGIC);); ENDEND add_subadd_sub;VHDL语言的描述语句语言的描述语句 257 【例例】试用块语句设计一个运算电路,包括一个八位加法器试用块语句设计一个运算电路,包括一个八位加法器和一个八位减法器。和一个八位减法器。 ARCHITECTUREARCHITECTURE example12 example12 OFOF add_subadd_sub IS IS SIGNALSIGNAL AA,BB,SM,SB: STD_LOGIC_VECTOR(1 AA,BB,SM,SB: STD_LOGIC_VECTOR(1

276、 DOWNTODOWNTO 0) 0); BEGINBEGIN AA AA = 0&A&A; BB BB = 0&B&B; WITHWITH s s SELECTSELECT ADDER: ADDER: BLOCKBLOCK BEGINBEGIN SM SM = AAAA + + BBBB; SUM SUM = SM(SM( 7 7 DOWNTODOWNTO 0 0 ) ); CO CO = SM(SM( 8 8 ) ); END BLOCKEND BLOCK ADDER ADDER; - ADDER - ADDER块行为描述语句块行为描述语句 - - 运算结果送入运算结果送入SUMSUM -

277、 - 进位送入进位送入COCOVHDL语言的描述语句语言的描述语句 258 【例例】试用块语句设计一个运算电路,包括一个八位加法器试用块语句设计一个运算电路,包括一个八位加法器和一个八位减法器。和一个八位减法器。 SUBTRACTER SUBTRACTER: BLOCKBLOCK BEGINBEGIN SB SB = AAAA - - BBBB; SUB SUB = SB(SB( 7 7 DOWNTODOWNTO 0 0 ) ); BO BO D2,D2, b b = D3,D3, s s = S0,S0, y y = B B ) ); U3: mux2 U3: mux2 PORT MAPPO

278、RT MAP ( ( A,A, B,B, S1, yS1, y = Y Y ) ); ENDEND exmple13 exmple13;-元件例化元件例化 -元件定义元件定义- 位置关联方式位置关联方式 - 名称关联方名称关联方式式- 混合关联方式混合关联方式 【例例】试用元件例化语句,将四选一数据选择器用二选一来试用元件例化语句,将四选一数据选择器用二选一来实现。实现。 VHDL语言的描述语句语言的描述语句 263 底底层文件层文件: LIBRARYLIBRARY IEEE IEEE; USEUSE IEEE.STD_LOGIC_1164. IEEE.STD_LOGIC_1164.ALLAL

279、L; ENTITYENTITY mux2 mux2 ISIS PORTPORT ( ( a,a, b,b, s: s: ININ STD_LOGIC STD_LOGIC; y: y: OUTOUT STD_LOGIC) STD_LOGIC); ENDEND mux2 mux2; ARCHITECTUREARCHITECTURE example13 example13 OFOF mux2 mux2 ISIS BEGINBEGIN y y ”号将元件定义中的信号名与号将元件定义中的信号名与PORT PORT MAP ( )MAP ( )中所列的信号名连接起来。中所列的信号名连接起来。 如:如:U2

280、:U2: mux2 mux2 PORTPORT MAP MAP (a(a=D2,bD2,b=D3,sD3,s=S0,yS0,y=B)B); 是在是在PORT MAP( )PORT MAP( )的信号连接关系中含有上述的信号连接关系中含有上述的两种方式。的两种方式。 如:如:U3: mux2 U3: mux2 PORT MAPPORT MAP (A,B,S1,y (A,B,S1,y=Y)Y);VHDL语言的描述语句语言的描述语句 265 生成(生成(GENERATEGENERATE)语句具有复制功能,可以对)语句具有复制功能,可以对有规律设计结构的逻辑描述进行简化。有规律设计结构的逻辑描述进行简

281、化。 当设计一个由多个相同单元模块组成的电路时,当设计一个由多个相同单元模块组成的电路时,只要根据某些条件,设计好某一个元件,就可以用只要根据某些条件,设计好某一个元件,就可以用生成语句复制一组完全相同的并行元件或设计单元生成语句复制一组完全相同的并行元件或设计单元来组成电路。来组成电路。 5.5. 生成语句生成语句 VHDL语言的描述语句语言的描述语句 266 生成语句有两种格式:生成语句有两种格式: 5.5. 生成语句生成语句 格式格式1 1: 标号标号: FOR 循环变量循环变量 IN 取值范围取值范围 GENERATE 说明部分说明部分 BEGIN 并行语句;并行语句; END GEN

282、ERATE 标号标号; VHDL语言的描述语句语言的描述语句 267 生成语句有两种格式:生成语句有两种格式: 5.5. 生成语句生成语句 格式格式2 2: 标号标号: IF 条件条件 GENERATE 说明部分说明部分 BEGIN 并行语句;并行语句; END GENERATE 标号标号;VHDL语言的描述语句语言的描述语句 268 生成语句的格式由四部分组成:生成语句的格式由四部分组成: 使用使用FORFOR语句或语句或IFIF语句结构,来规定重复生语句结构,来规定重复生成并行语句的方式;成并行语句的方式; 通过说明部分,对元件数据类型、子程序、通过说明部分,对元件数据类型、子程序、数据对

283、象进行局部的说明;数据对象进行局部的说明; 并行语句主要用生成语句来复制一组相同的并行语句主要用生成语句来复制一组相同的并行元件,其语句包括所有的并行语句,甚至生成并行元件,其语句包括所有的并行语句,甚至生成语句本身,可实现嵌套式生成结构;语句本身,可实现嵌套式生成结构; 标号是可选择项,在嵌套式生成结构中起着标号是可选择项,在嵌套式生成结构中起着十分重要的作用。十分重要的作用。 5.5. 生成语句生成语句 VHDL语言的描述语句语言的描述语句 269 【例例】试用格式试用格式1 1的生成语句,描述用的生成语句,描述用D D触发器组成的八位移触发器组成的八位移位寄存器。位寄存器。 d q cp

284、d q cpd q cpd q cpd q cpd q cpd q cpd q cpDinDin CLKCLKDoutDout Q0 Q1 Q0 Q1 Q2 Q2 Q3 Q3 Q4 Q4 Q5 Q5 Q6 Q7Q6 Q7 描述描述D D触发器的源程序触发器的源程序 LIBRARYLIBRARY IEEE IEEE; USEUSE IEEE.STD_LOGIC_1164. IEEE.STD_LOGIC_1164.ALLALL; ENTITYENTITY ff_dff_d ISIS PORTPORT ( ( d, cp: d, cp: ININ STD_LOGIC STD_LOGIC; q: q:

285、 OUTOUT STD_LOGIC STD_LOGIC ) ); ENDEND ff_dff_d; ARCHITECTUREARCHITECTURE example14 example14 OFOF ff_dff_d ISIS BEGINBEGIN PROCESSPROCESS(cpcp) BEGINBEGIN IFIF cp cp =11ANDAND cpcpEVENTEVENT THENTHEN q q=d d; END IFEND IF; END PROCESSEND PROCESS; ENDEND example14 example14; VHDL语言的描述语句语言的描述语句 270

286、【例例】试用格式试用格式1 1的生成语句,描述用的生成语句,描述用D D触发器组成的八位移触发器组成的八位移位寄存器。位寄存器。 描述移位寄存器的源程序描述移位寄存器的源程序 LIBRARYLIBRARY IEEE IEEE; USEUSE IEEE.STD_LOGIC_1164. IEEE.STD_LOGIC_1164.ALLALL; ENTITYENTITY shift_reg_8 shift_reg_8 ISIS PORTPORT ( ( Din,Din, CLK:CLK: ININ STD_LOGIC STD_LOGIC; DoutDout: : OUTOUT STD_LOGIC ST

287、D_LOGIC ) ); Q: Q: BUFFERBUFFER STD_LOGIC_VECTOR ( STD_LOGIC_VECTOR ( 7 7 DOWNTODOWNTO 0 0 ); ENDEND shift_reg_8 shift_reg_8; ARCHITECTUREARCHITECTURE example14 example14 OFOF shift_reg_8 shift_reg_8 ISIS COMPONENTCOMPONENT ff_dff_d; PORTPORT ( ( d,d, cp: cp: ININ STD_LOGIC STD_LOGIC; q: q: ININ STD

288、_LOGIC STD_LOGIC ) ); END COMPONENTEND COMPONENT; SIGNALSIGNAL d: STD_LOGIC_VECTOR ( d: STD_LOGIC_VECTOR ( 0 0 TOTO 8 8 ) ); -元件定义元件定义VHDL语言的描述语句语言的描述语句 271 【例例】试用格式试用格式1 1的生成语句,描述用的生成语句,描述用D D触发器组成的八位移触发器组成的八位移位寄存器。位寄存器。 描述移位寄存器的源程序描述移位寄存器的源程序 BEGINBEGIN d(0) d(0)= DinDin; gen2: gen2: FORFOR n n IN

289、IN 0 0 TOTO 7 7 GENERATEGENERATE fxfx: : ff_dff_d PORT MAPPORT MAP (d (d ( ( n n ),), CLK,CLK, d d (n+1)(n+1); END GENERATEEND GENERATE; Q(0) Q(0)= d(1)d(1); Q(1) Q(1)= d(2)d(2); Q(2) Q(2)= d(3)d(3); Q(3) Q(3)= d(4)d(4); Q(4) Q(4)= d(5)d(5); Q(5) Q(5)= d(6)d(6); Q(6) Q(6)= d(7)d(7); Q(7 Q(7) = d(8)d

290、(8); DoutDout实参数表达式,实参数表达式, 形参数名称形参数名称=实参数表达式);实参数表达式); 形参数名称:形参数名称:是对被调用的过程已做说明的参数名。是对被调用的过程已做说明的参数名。 实参数表达式:实参数表达式:是一个标识符或具体数值,是当前是一个标识符或具体数值,是当前过程调用中形参数的接受体。过程调用中形参数的接受体。 对应关系:对应关系:位置关联位置关联 名称关联名称关联 VHDL语言的描述语句语言的描述语句 278 (2 2)过程的调用过程的调用 过程调用需完成的内容:过程调用需完成的内容: 将实参数值赋给被调用过程的形参数;将实参数值赋给被调用过程的形参数; 执

291、行过程;执行过程; 将过程中的形参数值返回给对应的实参数。将过程中的形参数值返回给对应的实参数。 过程调用有两种方式:过程调用有两种方式: 顺序语句方式:顺序语句方式: 并行语句方式:并行语句方式: 即在进程中的过程调用。即在进程中的过程调用。 即在结构体或块中的过程调用。即在结构体或块中的过程调用。VHDL语言的描述语句语言的描述语句 279 【例例】试用过程语句编写实现数据求和的运算程序。试用过程语句编写实现数据求和的运算程序。 LIBRARYLIBRARY IEEE IEEE; USEUSE IEEE.STD_LOGIC_1164. IEEE.STD_LOGIC_1164.ALLALL;

292、 USEUSE IEEE.STD_LOGIC_ARITH. IEEE.STD_LOGIC_ARITH.ALLALL; USEUSE IEEE.STD_LOGIC_UNSIGNED. IEEE.STD_LOGIC_UNSIGNED.ALLALL; ENTITYENTITY add add ISIS PORT ( PORT ( A,A, B,B, C: C: ININ STD_LOGIC_VECTOR( STD_LOGIC_VECTOR( 3 3 DOWNTODOWNTO 0 0 ) ); CLK,CLK, SET: SET: ININ STD_LOGIC STD_LOGIC; S: S: OUT

293、OUT STD_LOGIC_VECTOR ( STD_LOGIC_VECTOR ( 3 3 DOWNTODOWNTO 0 0 ); ENDEND add add; ARCHITECTUREARCHITECTURE example15 example15 OFOF add add ISIS PROCEDUREPROCEDURE add_1 ( add_1 ( VARIABLEVARIABLE data1,data2,data3: data1,data2,data3: ININ STD_LOGIC_VECTOR STD_LOGIC_VECTOR; VARIABLEVARIABLE dataoutd

294、ataout: : OUTOUT STD_LOGIC_VECTOR STD_LOGIC_VECTOR) ISIS BEGIN BEGIN dataoutdataout: := data1data1 + data2data2 + data3data3; ENDEND add_1 add_1; -过程体定义过程体定义VHDL语言的描述语句语言的描述语句 280 【例例】试用过程语句编写实现数据求和的运算程序。试用过程语句编写实现数据求和的运算程序。 BEGINBEGIN PROCESSPROCESS(CLKCLK) VARIABLEVARIABLE tmptmp: STD_LOGIC_VECTOR

295、(: STD_LOGIC_VECTOR( 3 3 DOWNTODOWNTO 0 0 ) ); BEGINBEGIN IFIF (CLKCLK =1 1ANDAND CLK CLKEVENTEVENT) THENTHEN IFIF SET SET =1 1 THENTHEN tmptmp: :=“00000000”; ELSEELSE add_1 add_1(A, B, C, A, B, C, tmptmp);); END IFEND IF; END IFEND IF; S S 实参数表达式,实参数表达式, 形参数名称形参数名称=实参数表达式);实参数表达式);VHDL语言的描述语句语言的描述语

296、句 284 【例例】使用函数定义使用函数定义FUNCTIONFUNCTION语句描述求最小数电路。语句描述求最小数电路。 LIBRARYLIBRARY IEEE IEEE; USEUSE IEEE.STD_LOGIC_1164. IEEE.STD_LOGIC_1164.ALLALL; ENTITYENTITY min min ISIS PORTPORT ( ( A,A, B: B: ININ STD_LOGIC_VECTOR ( STD_LOGIC_VECTOR ( 7 7 DOWNTODOWNTO 0 0 ) ); Y: Y: OUTOUT STD_LOGIC_VECTOR ( STD_LO

297、GIC_VECTOR ( 7 7 DOWNTODOWNTO 0 0 ); ENDEND min min; VHDL语言的描述语句语言的描述语句 285 【例例】使用函数定义使用函数定义FUNCTIONFUNCTION语句描述求最小数电路。语句描述求最小数电路。 ARCHITECTUREARCHITECTURE example16 example16 OFOF min min ISIS FUNCTIONFUNCTION min ( min ( a,a, b: b: ININ STD_LOGIC_VECTOR) STD_LOGIC_VECTOR) RETURNRETURN STD_LOGIC_VE

298、CTOR STD_LOGIC_VECTOR; FUNCTIONFUNCTION min ( min ( a,a, b: b: ININ STD_LOGIC_VECTOR STD_LOGIC_VECTOR) RETURN RETURN STD_LOGIC_VECTOR STD_LOGIC_VECTOR ISIS BEGINBEGIN IFIF ( ( a a b) b) THENTHEN RETURNRETURN a a; ELSEELSE RETURNRETURN b b; END IFEND IF; ENDEND min min; BEGINBEGIN Y Y = min( Amin( A,

299、B )B ); ENDEND example16 example16; -定义函数首定义函数首-定义函数体定义函数体VHDL语言的描述语句语言的描述语句 286 用来结束子程序的执行,无条件跳转到子程序用来结束子程序的执行,无条件跳转到子程序的结束处。的结束处。 子程序返回语句只能用于子程序体中,子程序返回语句只能用于子程序体中,有两种有两种格式。格式。 3.3. 子程序返回语句子程序返回语句 该语句为无条件返回,只能用于过程。该语句为无条件返回,只能用于过程。 格式格式1 1: RETURN; 该语句该语句只能用于函数,返回时给出一个函数返回值。只能用于函数,返回时给出一个函数返回值。 格式

300、格式2 2: RETURN 表达式表达式 ; VHDL语言的描述语句语言的描述语句 287有限状态机设计有限状态机设计288为什么要使用状态机为什么要使用状态机 有限状态机克服了纯硬件数字系统顺序方式控制不灵活有限状态机克服了纯硬件数字系统顺序方式控制不灵活的缺点。的缺点。 状态机的结构模式相对简单状态机的结构模式相对简单。 状态机容易构成性能良好的同步时序逻辑模块状态机容易构成性能良好的同步时序逻辑模块。 状态机的状态机的VHDLVHDL表述丰富多样表述丰富多样, ,层次分明,结构清晰。层次分明,结构清晰。 在高速运算和控制方面,状态机更有其巨大的优势在高速运算和控制方面,状态机更有其巨大的

301、优势。 就可靠性而言,状态机的优势也是十分明显的就可靠性而言,状态机的优势也是十分明显的。289一般有限状态机的设计一般有限状态机的设计1. 1. 说明部分说明部分一般状态机结构框图工作示意图一般状态机结构框图工作示意图ARCHITECTURE .IS TYPE FSM_ST IS (s0,s1,s2,s3); SIGNAL current_state, next_state: FSM_ST; . 2903. 3. 主控组合进程主控组合进程一般有限状态机的设计一般有限状态机的设计主控组合进程的任务是根据外部输入的控制信号(包括主控组合进程的任务是根据外部输入的控制信号(包括来自状态机外部的信号

302、和来自状态机内部其它非主控的来自状态机外部的信号和来自状态机内部其它非主控的组合或时序进程的信号),或(和)当前状态的状态值组合或时序进程的信号),或(和)当前状态的状态值确定下一状态(确定下一状态(next_statenext_state)的取向,即的取向,即next_statenext_state的的取值内容,以及确定对外输出或对内部其它组合或时序取值内容,以及确定对外输出或对内部其它组合或时序进程输出控制信号的内容。进程输出控制信号的内容。2. 2. 主控时序进程主控时序进程 主控时序进程的任务是负责状态机运转和在时钟驱动下负责状态转换的进程。4. 4. 辅助进程辅助进程辅助进程用于配合

303、状态机工作的组合进程或时序进程。291【例】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY s_machine IS PORT ( clk,reset : IN STD_LOGIC; state_inputs : IN STD_LOGIC_VECTOR (0 TO 1); comb_outputs : OUT INTEGER RANGE 0 TO 15 );END s_machine;ARCHITECTURE behv OF s_machine IS TYPE FSM_ST IS (s0, s1, s2, s3); SIGNAL current_

304、state, next_state: FSM_ST;BEGIN REG: PROCESS (reset,clk) BEGIN IF reset = 1 THEN current_state = s0; ELSIF clk=1 AND clkEVENT THEN current_state comb_outputs= 5; IF state_inputs = 00 THEN next_state=s0; ELSE next_state comb_outputs= 8; IF state_inputs = 00 THEN next_state=s1; ELSE next_state comb_ou

305、tputs= 12; IF state_inputs = 11 THEN next_state = s0; ELSE next_state comb_outputs = 14; IF state_inputs = 11 THEN next_state = s3; ELSE next_state IF( x = 0) THEN state = s0;ELSE state IF( x = 0 ) THEN state = s2;ELSE state IF( x = 0 ) THEN state = s1;ELSE state z IF( x = 0) THEN z = 0;ELSE z IF( x

306、 = 0 ) THEN z = 1;ELSE z = 0;END IF; END CASE; END PROCESS output; END ARCHITECTURE arch;295296AD574:采样周期20us。单片机时钟频率:12MHZ。以51单片机为例,在控制A/D进行一个采样周期中必须完成的操作是:1、初始化AD574;2、启动采样;3、等待约20uS;4、发出读数命令;5、分两次将12位转换好的数从AD574读进单片机中;6、再分两次将此数存入外部RAM中;7、外部RAM地址加1,此后再进行第2次采样周期的控制。整个控制周期最少需要30条指令,每条指令平均2个机器周期,每一个机

307、器周期为1us,30条指令需要60us,加上等待周期20us,共80us,50个采样周期需时4ms。TLC5540:采样速率40MHz,采样周期0.025us。FPGA:100MHz,从一个状态到另一状态的转换时间为一个时钟周期,即10ns,那么一个采样周期约50ns.利用利用FPGA和单片机进行数据采集的比较和单片机进行数据采集的比较297CECS RC K12/8 A0工 作 状 态0XXXX禁止X1XXX禁止100X0启动12位转换100X1启动8位转换1011X12位并行输出有效10100高8位并行输出有效10101低4位加上尾随4个0有效表表 AD574逻辑控制真值表(逻辑控制真值表

308、(X表示任意)表示任意)298AD574工作时序工作时序 299AD574采样状态图采样状态图300PROCESSREG时序进程PROCESSCOM组合进程PROCESSLATCH锁存器current_statenext_stateLOCK状态机FSMFPGA/CPLDFPGA/CPLDCLK CS A0 RC K12/8 STATUSD11.0AD574Q11.0模拟信号输入采样数据输出301LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; ENTITY AD574 IS PORT (D :IN STD_LOGIC_VECTOR(11 DOWNTO 0);

309、CLK ,STATUS : IN STD_LOGIC;-状态机时钟状态机时钟CLK,AD574状态信号状态信号STATUS LOCK0 : OUT STD_LOGIC; -内部锁存信号内部锁存信号LOCK的测试信号的测试信号 CS,A0,RC,K12X8 : OUT STD_LOGIC; -AD574控制信号控制信号 Q : OUT STD_LOGIC_VECTOR(11 DOWNTO 0); -锁存数据输出锁存数据输出 END AD574;ARCHITECTURE behav OF AD574 IS TYPE states IS (st0, st1, st2, st3,st4); SIGNA

310、L current_state, next_state: states :=st0 ; SIGNAL REGL : STD_LOGIC_VECTOR(11 DOWNTO 0); SIGNAL LOCK : STD_LOGIC; BEGIN K12X8 = 1; LOCK0 next_state next_state IF (STATUS=1) THEN next_state = st2; ELSE next_state next_state next_state next_state CS=1; A0=1;RC=1;LOCK CS=0; A0=0;RC=0;LOCK CS=0; A0=0;RC

311、=0;LOCK CS=0; A0=0;RC=1;LOCK CS=0; A0=0;RC=1;LOCKCS=1; A0=1;RC=1;LOCK=0;-其它情况返回初始态其它情况返回初始态 接下页接下页接上页接上页303END CASE ; END PROCESS COM2 ;REG: PROCESS (CLK) - 时序进程时序进程 BEGIN IF ( CLKEVENT AND CLK=1) THEN current_state = next_state; END IF; END PROCESS REG; LATCH1 : PROCESS (LOCK) - 数据锁存器进程数据锁存器进程 BEGI

312、N IF LOCK=1 AND LOCKEVENT THEN REGL = D ; END IF; END PROCESS ; Q CS=1; A0=0; RC=0; LOCK=0; next_state CS=0; A0=0; RC=0; LOCK=0; next_state CS=0; A0=0; RC=0; LOCK=0; IF (STATUS=1) THEN next_state = st2;ELSE next_state CS=0; A0=0; RC=1; LOCK=0; next_state CS=0; A0=1; RC=1; LOCK=1; next_state next_state = st0; END CASE ; END PROCESS COM ; REG:PROCESS (CLK) BEGIN IF ( CLKEVENT AND CLK=1) THEN current_state = next_state; END IF; END PROCESS REG; LATCH: PROCESS (LOCK) BEGIN IF LOCK=1 AND LOCKEVENT THEN REGL = D ; END IF; END PROCESS ; Q = REGL; K12X8 = 1 ;END behav;状态机状态机VHDL源程序源程序306

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 销售管理

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号