硬件描述语言VHDLppt课件

上传人:无*** 文档编号:144687024 上传时间:2022-08-27 格式:PPT 页数:81 大小:1.34MB
收藏 版权申诉 举报 下载
硬件描述语言VHDLppt课件_第1页
第1页 / 共81页
硬件描述语言VHDLppt课件_第2页
第2页 / 共81页
硬件描述语言VHDLppt课件_第3页
第3页 / 共81页
资源描述:

《硬件描述语言VHDLppt课件》由会员分享,可在线阅读,更多相关《硬件描述语言VHDLppt课件(81页珍藏版)》请在装配图网上搜索。

1、原理图设计方法:设计人员普遍熟悉并使用直观的原理图描述方法进行系统设计,随着数字原理图设计方法:设计人员普遍熟悉并使用直观的原理图描述方法进行系统设计,随着数字系统设计规模日益增大、复杂程度日益提高,如果仍然采用图形方式描述电路,设计工作的系统设计规模日益增大、复杂程度日益提高,如果仍然采用图形方式描述电路,设计工作的周期长、成本高,无法满足快速高效的设计要求。周期长、成本高,无法满足快速高效的设计要求。硬件描述语言设计方法:为了满足设计人员对抽象层次更高的电路描述需求,硬件描述语言硬件描述语言设计方法:为了满足设计人员对抽象层次更高的电路描述需求,硬件描述语言(HDL:Hardware De

2、scription Language)应运而生。)应运而生。HDL优势:具有对系统的高层次描述功能,为数字系统设计提供了强大的灵活性和通用性,优势:具有对系统的高层次描述功能,为数字系统设计提供了强大的灵活性和通用性,有效地缩短了设计周期,降低了设计成本。有效地缩短了设计周期,降低了设计成本。HDL标准化:标准化:2080年代后期,硬件描述语言向着标准化、集成化的方向发展,其中年代后期,硬件描述语言向着标准化、集成化的方向发展,其中VHDL和和Verilog HDL先后成为先后成为IEEE标准。标准。超高速集成电路硬件描述语言超高速集成电路硬件描述语言VHDL:Very High Speed

3、Integrated Circuit Hardware Description LanguageVHDL,是最早被接纳为,是最早被接纳为IEEE标准的硬件描述语言。标准的硬件描述语言。VHDL由美国国防由美国国防部组织开发,部组织开发,1987IEEE确认为确认为IEEE1076标准,标准,1993IEEE1164标准。标准。本章介绍本章介绍VHDL:介绍:介绍VHDL程序结构、语法规则、常用语句。相信通过硬件描述语言的学程序结构、语法规则、常用语句。相信通过硬件描述语言的学习,你会发现硬件电路的设计,原来也可以如同软件设计一样,方便修改和完善。通过本章习,你会发现硬件电路的设计,原来也可以如

4、同软件设计一样,方便修改和完善。通过本章的学习,将为顺利完成的学习,将为顺利完成FPGA设计应用打下良好的设计基础。设计应用打下良好的设计基础。1;.5.1 VHDL 程序结构程序结构 5.2 VHDL 语法规则语法规则 5.3 VHDL并行语句并行语句 5.4 VHDL 顺序语句顺序语句 第5章 硬件描述语言VHDL2;.硬件描述语言硬件描述语言 ABEL AHDL Verilog HDL VHDL 美国国防部在美国国防部在80年代初提出了年代初提出了VHSIC(Very High Speed Integrated Circuit)计划,其目标)计划,其目标之一是为下一代集成电路的生产,实现

5、阶段性的工艺极限以及完成之一是为下一代集成电路的生产,实现阶段性的工艺极限以及完成10万门级以上的设计,建万门级以上的设计,建立一项新的描述方法。立一项新的描述方法。1981年提出了一种新的年提出了一种新的HDL,称之为,称之为VHSIC Hardware Description Language,简称为,简称为VHDL。IEEE标准标准3;.VHDL语言的主要优点语言的主要优点 是一种多层次的硬件描述语言,覆盖面广,描述能力强。即设计的原始描述可以是一种多层次的硬件描述语言,覆盖面广,描述能力强。即设计的原始描述可以是非常简练的描述,经过层层细化求精,最终成为可直接付诸生产的电路级是非常简练

6、的描述,经过层层细化求精,最终成为可直接付诸生产的电路级或版图参数描述,整个过程都可以在或版图参数描述,整个过程都可以在VHDL的环境下进行。的环境下进行。VHDL 有良好的可读性,即可以被计算机接受,也容易被理解用有良好的可读性,即可以被计算机接受,也容易被理解用VHDL 书写的书写的原文件,即是程序,又是文挡,即是技术人员之间交换信息的文件,又可作原文件,即是程序,又是文挡,即是技术人员之间交换信息的文件,又可作为合同签约者之间的文件。为合同签约者之间的文件。4;.VHDL本身的生命期长。因为本身的生命期长。因为VHDL的硬件描述与工艺技术无关,不会因工艺变化而的硬件描述与工艺技术无关,不

7、会因工艺变化而使描述过时。与工艺技术有关的参数可通过使描述过时。与工艺技术有关的参数可通过VHDL提供的属性加以描述,工艺改变提供的属性加以描述,工艺改变时,只需修改相应程序中的属性参数即可。时,只需修改相应程序中的属性参数即可。支持大规模设计的分解和已有设计的再利用。一个大规模设计不可能一个人独立完成,支持大规模设计的分解和已有设计的再利用。一个大规模设计不可能一个人独立完成,它将由多人,多项目组来共同完成。它将由多人,多项目组来共同完成。VHDL为设计的分解和设计的再利用提供了有为设计的分解和设计的再利用提供了有力的支持。力的支持。VHDL已成为已成为IEEE承认的一个工业标准,事实上已成

8、为通用硬件描述语言。承认的一个工业标准,事实上已成为通用硬件描述语言。VHDL语言的主要优点语言的主要优点5;.5.1 VHDL程序结构程序结构VHDL可以描述什么:一个系统、一个单元模块或一个门电路都可以。可以描述什么:一个系统、一个单元模块或一个门电路都可以。VHDL程序结构:无论程序结构:无论VHDL描述的电路复杂还是简单,一段描述的电路复杂还是简单,一段VHDL程序包含五个部分:实体程序包含五个部分:实体entity、结构体、结构体architecture、库、库library、配置、配置configuration和包和包package。实体实体entity:描述电路和系统的输入、输出

9、端口等外部信息。:描述电路和系统的输入、输出端口等外部信息。结构体结构体architecture:描述电路和系统的功能信息,对系统的结构或行为的具体描述。:描述电路和系统的功能信息,对系统的结构或行为的具体描述。库库library:库中存放的是已经编译过的实体、结构体、配置和包,库可以由设计者自己生成,:库中存放的是已经编译过的实体、结构体、配置和包,库可以由设计者自己生成,也可以由也可以由ASIC制造商或其他公司提供。放在制造商或其他公司提供。放在VHDL程序段的最前面。程序段的最前面。配置配置configuration:完成对库的使用,从库中选择需要的单元完成自己的设计方案。:完成对库的使

10、用,从库中选择需要的单元完成自己的设计方案。包包package:存放共享数据、常数和子程序等。:存放共享数据、常数和子程序等。VHDL程序结构必须有的两个部分:在五个组成部分中,实体和结构体是必不可少的,其余的程序结构必须有的两个部分:在五个组成部分中,实体和结构体是必不可少的,其余的部分可以根据需要选用。部分可以根据需要选用。6;.VHDLVHDL的基本组成的基本组成VHDL 语言语言参数部分参数部分library库库 接口部分接口部分设计实体设计实体描述部分描述部分结构体结构体7;.1.库的用途:库是一个集合,专门用来存放已经编译过的实体、结构体,库可以由设计者自己库的用途:库是一个集合,

11、专门用来存放已经编译过的实体、结构体,库可以由设计者自己生成,也可以由其他公司提供。生成,也可以由其他公司提供。2.库的种类:库的种类:VHDL中有五类库:中有五类库:IEEE库、库、STD库、库、ASIC库、库、WORK库和用户自定义库。库和用户自定义库。IEEE库:存放库:存放IEEE标准标准1076中的标准包集合,如中的标准包集合,如std_logic_1164,std_logic_arith和和std_logic_unsigned等。等。STD库:存放库:存放VHDL的标准数据类型,如的标准数据类型,如Boolean等数据类型的定义等,包括输入等数据类型的定义等,包括输入/输出两个标输

12、出两个标准程序包,由于准程序包,由于STD库是库是VHDL的标准配置,可以不用进行库的说明,的标准配置,可以不用进行库的说明,STD库对库对VHDL程序均程序均是可见的。是可见的。WORK库:用于存放用户设计和定义的设计单元和程序包,保存当前进行的设计库:用于存放用户设计和定义的设计单元和程序包,保存当前进行的设计.只要在VHDL的应用环境中,都可以随时调用STD库和WORK库,所以不需专门的调用语句。ASIC库:存放与逻辑门对应的实体,目的是为了进行门级仿真。在库:存放与逻辑门对应的实体,目的是为了进行门级仿真。在FPGA/CPLD的设计中一般的设计中一般都不需要都不需要VITAL库的程序包

13、。库的程序包。用户自定义库:存放用户自己定义的实体集合,使用前必须首先进行库的说明。用户自定义库:存放用户自己定义的实体集合,使用前必须首先进行库的说明。5.1.1 library库库 8;.3.库的说明库的说明库说明语句如下:库说明语句如下:LIBRARY ieee;USE ieee.std_logic_1164.all;在在VHDL语言中,库的说明通常放在实体描述的最前面。语言中,库的说明通常放在实体描述的最前面。注意:多数情况下,只有对库进行说明,设计者才能使用库集合中已经定义的数据。注意:多数情况下,只有对库进行说明,设计者才能使用库集合中已经定义的数据。USE 库名.程序包名.项目名

14、USE 库名.程序包名.ALL调用程序包语句标准程序包定义程序包9;.4.库的使用库的使用五类库中除了五类库中除了WORK和和STD库,其它三类库在使用之前需要进行库的说明,还要说明使用库,其它三类库在使用之前需要进行库的说明,还要说明使用库中的哪个包集合。库中的哪个包集合。库使用举例:为了使用库使用举例:为了使用IEEE库中的库中的std_logic_1164、std_logic_arith和和std_logic_unsigned程程序包,应使用下列语句:序包,应使用下列语句:library IEEE;-使用使用IEEE库库 use IEEE.std_logic_1164.all;-使用使用

15、IEEE库库std_logic_1164程序包所有设计单元程序包所有设计单元 use IEEE.std_logic_arith.all;-使用使用IEEE库库std_logic_arith程序包所有设计单元程序包所有设计单元 use IEEE.std_logic_unsigned.all;-使用使用IEEE库库std_logic_unsigned程序包所有设计单元程序包所有设计单元注意:如果使用注意:如果使用std_logic和和std_logic_vector,必须在实体描述前写出下面的库说明和使用,必须在实体描述前写出下面的库说明和使用包集合的说明语句:包集合的说明语句:10;.entit

16、y实体:用来描述设计的对外端口信息,如输入和输出端口的描述,也可以描述参数化的实体:用来描述设计的对外端口信息,如输入和输出端口的描述,也可以描述参数化的数值。提供设计模块的公共信息,是数值。提供设计模块的公共信息,是VHDL设计电路的最基本部分。设计电路的最基本部分。1.entity实体描述格式实体描述格式entity 实体名实体名 isgeneric(类属表);(类属表);port(端口表);(端口表);declarations说明语句;说明语句;begin 实体语句部分实体语句部分;end 实体名实体名;表示其中的部分是可选项。表示其中的部分是可选项。5.1.2 entity实体实体11

17、;.kxora1b1c11.entity实体描述格式实体描述格式VHDL实体的描述方法:实体的描述方法:ENTITY kxor IS PORT(a1,b1:IN std_logic;c1:OUT std_logic);END kxor;调用程序包调用程序包语句语句标标准准程程序序包包定定义义程程序序包包实体实体 及实及实体声体声明语明语句句实体语句的一般格式ENTITY 实体名 IS PORT(端口名)END ENTITY 实体名12;.ENTITY kxor IS PORT(a1,b1:IN std_logic;END kxor;c1:OUT std_logic);ENTITY、IS、POR

18、T、IN、OUT和和END为关键字;为关键字;ENTITY.END之间表示实体内容;之间表示实体内容;kxor表示实体的名称,即电路的符号名;表示实体的名称,即电路的符号名;PORT端口(引脚)信息关键字,描述了信号的流向;端口(引脚)信息关键字,描述了信号的流向;std_logic表示信号取值的类型为标准逻辑。表示信号取值的类型为标准逻辑。设计实体说明设计实体说明13;.2.端口表端口表端口表:用来说明设计实体对象的对外信息。端口表:用来说明设计实体对象的对外信息。端口表书写格式:端口表书写格式:port(端口名(端口名,端口名,端口名:方向方向 子类型子类型 bus:=初始值初始值;端口名

19、;端口名,端口名,端口名:方向方向 子类型子类型 bus:=初始值初始值););端口名是端口的标识符,端口方向表明数据通过该端口的流动方向,端口子类型说明端口端口名是端口的标识符,端口方向表明数据通过该端口的流动方向,端口子类型说明端口的数据类型。的数据类型。端口很重要:端口是实体和外界通信的动态信息通道,每个端口都有端口名、端口方向以端口很重要:端口是实体和外界通信的动态信息通道,每个端口都有端口名、端口方向以及端口子类型。及端口子类型。例如:例如:2选选1数据选择器端口的数据选择器端口的VHDL描述如下:描述如下:entity mux21 is-实体名:实体名:mux21port(d0,d

20、1,sel:in bit;-输入信号:输入信号:d0,d1,sel,均为,均为bit数据类型数据类型y:out bit);-输出信号:输出信号:y,为,为bit数据类型数据类型end mux21;-实体描述结束实体描述结束14;.3.类属表类属表类属表:描述的是实体与外界通信的静态信息通道。类属表主要用来规定端口的大小,实体中类属表:描述的是实体与外界通信的静态信息通道。类属表主要用来规定端口的大小,实体中元件的数目,实体的定时特性等。通常放在端口语句之前。元件的数目,实体的定时特性等。通常放在端口语句之前。类属表的书写格式:类属表的书写格式:generic(常量常量名字表:名字表:in类属标

21、识类属标识:=初始值初始值;););例如:例如:generic(wide:integer:=32););-说明说明wide为常数,其数值为整数为常数,其数值为整数3215;.3.端口方向端口方向端口方向的四种模式:输入端口方向的四种模式:输入in、输出、输出out、双向、双向inout和缓冲和缓冲buffer。缺省值是输入。缺省值是输入。输入输入in:输入仅允许数据由外部流向实体输入端口。主要用于时钟输入、复位、使能,单向数:输入仅允许数据由外部流向实体输入端口。主要用于时钟输入、复位、使能,单向数据输入等输入信号的描述。据输入等输入信号的描述。输出输出out:输出仅允许数据从实体内部流向实体

22、输出端口,输出模式不能用于反馈,因为输出端:输出仅允许数据从实体内部流向实体输出端口,输出模式不能用于反馈,因为输出端口在实体内部不可读。通常用于电路的各种输出,如计数器、移位寄存器等输出信号描述。口在实体内部不可读。通常用于电路的各种输出,如计数器、移位寄存器等输出信号描述。双向双向inout:双向模式允许数据流入或流出实体,双向模式允许用于内部反馈。双向模式可以替:双向模式允许数据流入或流出实体,双向模式允许用于内部反馈。双向模式可以替代其它任一模式,适合描述双向数据总线等。代其它任一模式,适合描述双向数据总线等。缓冲缓冲buffer:缓冲模式通常用于内部有反馈需求的信号描述。:缓冲模式通

23、常用于内部有反馈需求的信号描述。buffer与与out类似,只是类似,只是buffer允许允许用于内部反馈,而用于内部反馈,而out不能用于内部反馈。不能用于内部反馈。16;.Out与与Buffer的区别的区别Entity test1 is port(a:in std_logic;b,c:out std_logic );end test1;architecture a of test1 is begin b=not(a);c=b;-Error end a;Entity test2 is port(a:in std_logic;b:buffer std_logic;c:out std_logic

24、 );end test2;architecture a of test2 is begin b=not(a);c=b;end a;17;.4.常用端口类型常用端口类型常用端口类型:布尔常用端口类型:布尔boolean、位、位bit、位矢量、位矢量bit_vector、整数、整数integer、标准逻辑、标准逻辑std_logic和标准和标准逻辑矢量逻辑矢量std_logic_vector等。等。布尔布尔boolean:布尔类型的取值为:布尔类型的取值为“true”或或“false”。位位bit:位类型的取值只有:位类型的取值只有“0”或或“1”。位矢量位矢量bit_vector:位矢量是位类型

25、的集合,基本元素是:位矢量是位类型的集合,基本元素是bit类型。类型。整数整数integer:整数常用来说明常数,不用来说明输入输出信号。:整数常用来说明常数,不用来说明输入输出信号。标准逻辑标准逻辑std_logic:标准逻辑由:标准逻辑由IEEE_std_logic_1164程序包支持,其取值有程序包支持,其取值有9种:种:0(信号(信号0)、)、1(信号(信号1)、)、H(弱信号(弱信号1)、)、L(弱信号(弱信号0)、)、Z(高阻)、(高阻)、X(不定)、(不定)、W(弱信号不定)、(弱信号不定)、U(初始值)和(初始值)和(不可能情况)等。(不可能情况)等。标准逻辑矢量标准逻辑矢量s

26、td_logic_vector:标准逻辑矢量是标准逻辑的集合,基本元素是:标准逻辑矢量是标准逻辑的集合,基本元素是std_logic类型。类型。使用时注意:如果使用使用时注意:如果使用std_logic或或std_logic_vector,需要在实体前使用下述语句进行说明:,需要在实体前使用下述语句进行说明:library IEEE;use IEEE_std_logic_1164.all;18;.ENTITY sel IS PORT(d0,d1,d2,d3:IN BIT;s :IN INTEGER RANGE 0 TO 3;out1 :OUT BIT);END sel;d0d1d2d3sout

27、1sel设计实体举例设计实体举例再例:再例:19;.结构体:是电路和系统的逻辑功能描述部分。所结构体:是电路和系统的逻辑功能描述部分。所有的结构体均附属于该实体,是实体的说明。描有的结构体均附属于该实体,是实体的说明。描述实体硬件的互连关系、数据的传输和变换以及述实体硬件的互连关系、数据的传输和变换以及动态行为。即描述设计实体的内部结构和对外部动态行为。即描述设计实体的内部结构和对外部设计实体端口间的逻辑关系。设计实体端口间的逻辑关系。5.1.3 architecture结构体结构体 一个实体可以对应多个结构体,每个结构体一个实体可以对应多个结构体,每个结构体可以代表该硬件的某一方面特性,例如

28、行为可以代表该硬件的某一方面特性,例如行为特性,结构特性。特性,结构特性。调用程序包调用程序包语句语句标标准准程程序序包包定定义义程程序序包包实体实体 及实及实体声体声明语明语句句结结构构体体1结结构构体体2结结构构体体n20;.1.结构体描述格式结构体描述格式architecture 结构体名结构体名 of 实体名实体名 is说明语句说明语句;begin并行语句并行语句;end 结构体名结构体名;结构体由两部分组成:结构体由两部分组成:begin前的说明语句部分和前的说明语句部分和begin后的并行语句部分。后的并行语句部分。结构体名:是该结构体的唯一名称,结构体名:是该结构体的唯一名称,o

29、f后面跟随的实体名表明该结构体对应的是哪个实体,后面跟随的实体名表明该结构体对应的是哪个实体,is表明结构体的命名结束。表明结构体的命名结束。说明语句:用于对结构体内部所用到的信号、常数和函数等的定义,其定义只对结构体内部可说明语句:用于对结构体内部所用到的信号、常数和函数等的定义,其定义只对结构体内部可见,即结构体内部可以使用。见,即结构体内部可以使用。并行语句:描述电路和系统并行发生的行为。有关结构体的说明语句和并行语句在后面有详细并行语句:描述电路和系统并行发生的行为。有关结构体的说明语句和并行语句在后面有详细的介绍。的介绍。21;.ARCHITECTURE kxor_arc OF kx

30、or ISBEGIN c1=(NOT a1 AND b1)OR(a1 AND NOT b1);END kxor_arc;当异或门的符号和外部端口当异或门的符号和外部端口a1、b1和和c1确定之后,就要确定实体的内部电路,使之与实体相确定之后,就要确定实体的内部电路,使之与实体相对应。对应。kxora1b1c1a1b1c1结构体举例结构体举例22;.LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY kxor IS PORT(a1,b1:IN std_logic;c1:OUT std_logic);END kxor;ARCHITECTURE kxor_

31、arc OF kxor ISBEGIN c1=(NOT a1 AND b1)OR(a1 AND NOT b1);END kxor_arc;该例的完整程序该例的完整程序23;.kxora1b1c1a1b1c1kxora1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c124;.结构体举例结构体举例2(自学自学)举例:二选一数据选择器的结构体描述。举例:二选一数据选择

32、器的结构体描述。architecture con of mux21 is-实体实体mux21的结构体的结构体con的描述的描述signal tmp:bit;-说明语句:内部信号说明语句:内部信号tmp的定义的定义begintmp=(d0 and sel)or (d1 and(not sel);-并行语句:关于数据选择器的功能描述并行语句:关于数据选择器的功能描述y=tmp;-并行语句:内部信号的输出并行语句:内部信号的输出end con;在前面实体部分曾经定义了二选一数据选择器的端口,在结构体部分给出了该数据选择器信号之在前面实体部分曾经定义了二选一数据选择器的端口,在结构体部分给出了该数据选

33、择器信号之间逻辑关系的描述。间逻辑关系的描述。25;.举例:将实体和结构体举例的两部分程序联在一起,则实现二选一数据选择器完整的设计描述。举例:将实体和结构体举例的两部分程序联在一起,则实现二选一数据选择器完整的设计描述。完整程序如下:完整程序如下:entity mux21 is-实体名:实体名:mux21 port(d0,d1,sel:in bit;-输入信号:输入信号:d0,d1,sel y:out bit);-输出信号:输出信号:yend mux21;architecture con of mux21 is-实体实体mux21的结构体的结构体con的描述的描述 signal tmp:bi

34、t;-说明语句:关于内部信号说明语句:关于内部信号tmp的定义的定义begin tmp=(d0 and sel)or (d1 and(not sel);-并行语句:关于数据选择器的功能描述并行语句:关于数据选择器的功能描述 y=tmp;-并行语句:内部信号的输出并行语句:内部信号的输出end con;26;.子程序:是在主程序调用它以后能将处理结果返回主程序的程序模块。子程序可以反复调用,子程序:是在主程序调用它以后能将处理结果返回主程序的程序模块。子程序可以反复调用,使用方便。调用子程序时首先需要对其初始化,再次调用时要再次初始化,子程序内部的值不使用方便。调用子程序时首先需要对其初始化,再

35、次调用时要再次初始化,子程序内部的值不能保持。能保持。子程序有两种:过程(子程序有两种:过程(procedure)和函数()和函数(function)。)。procedure和和function有所不同,前者有所不同,前者的参数可以是输入的参数可以是输入in、输出、输出out或双向或双向inout属性的参数,其返回值可以是多个,其返回值在声属性的参数,其返回值可以是多个,其返回值在声明语句中说明。后者的所有参数都是明语句中说明。后者的所有参数都是in属性,返回值只有一个,在声明语句之外说明。属性,返回值只有一个,在声明语句之外说明。子程序内部语句:是顺序语句,有关顺序语句的介绍请参考子程序内部

36、语句:是顺序语句,有关顺序语句的介绍请参考5.4节。节。5.1.4 子程序子程序 27;.1过程过程过程语句的书写格式:过程语句的书写格式:procedure过程名(参数过程名(参数1,参数,参数2,)is定义语句定义语句;begin顺序语句顺序语句;end过程名;过程名;28;.举例:实现输入数据举例:实现输入数据din的循环左移,根据输入的循环左移,根据输入s值确定循环左移的位数。值确定循环左移的位数。procedure shift(din,s:in std_logic_vector;-输入信号输入信号s、din signal dout:out std_logic_vector)is-输出

37、信号输出信号dout variable sc:integer;-整数变量整数变量scbegin sc:=conv_integer(s);-左移位数左移位数s的数据格式转换的数据格式转换 for i in dinrange loopif(sc+i=dinleft)then dout(sc+i)=din(i);-实现循环左移实现循环左移else dout(sc+i-dinleft)=din(i);end if;end shift;使用过程之前,需要将初始值传递给过程的输入参数,启动过程的执行。执行结束后,应使用过程之前,需要将初始值传递给过程的输入参数,启动过程的执行。执行结束后,应当将输出值拷贝

38、到过程调用者定义的变量或信号中。当将输出值拷贝到过程调用者定义的变量或信号中。29;.2函数函数函数的书写格式:函数的书写格式:function 函数名(参数函数名(参数1,参数,参数2,)return 数据类型名数据类型名 is定义语句定义语句;begin顺序语句顺序语句;return 返回变量名返回变量名;end 函数名函数名;由于函数中所有的参数都是输入信号,因此端口方向由于函数中所有的参数都是输入信号,因此端口方向in可以省略。函数的输入值由调用者拷贝到可以省略。函数的输入值由调用者拷贝到输入参数中,如果没有特别指定,在输入参数中,如果没有特别指定,在function语句中按常数处理。

39、语句中按常数处理。30;.举例:返回两数中的较小数值的函数描述。举例:返回两数中的较小数值的函数描述。function min(x,y:integer)-函数函数min,有两个参数,有两个参数x和和yreturn integer is-返回整数类型的数据返回整数类型的数据 beginif xy then -两数中较小的数返回两数中较小的数返回return x;else return y;end if;end min;使用函数的方法:首先需要将函数集合到包(使用函数的方法:首先需要将函数集合到包(package)中,再利用)中,再利用use语句使包对设计成为可见、语句使包对设计成为可见、可使用的

40、,然后,在设计结构体中就可以直接使用函数了。可使用的,然后,在设计结构体中就可以直接使用函数了。rerurn语句:既可以用于函数语句:既可以用于函数function内部,也可以用于过程内部,也可以用于过程procedure内部,用来结束当前函数内部,用来结束当前函数或过程体的执行。或过程体的执行。关于函数的使用:读者可参考书中第关于函数的使用:读者可参考书中第7章章7.4节节 RC6算法设计实现,使用了大量的算法设计实现,使用了大量的function,极大,极大地方便了复杂程序的设计描述。地方便了复杂程序的设计描述。31;.5.2 VHDL语法规则语法规则VHDL语言与其它高级语言一样,编写程

41、序时也要遵循一定的语法规则。语言与其它高级语言一样,编写程序时也要遵循一定的语法规则。介绍的介绍的VHDL语言规则有:数据对象、数据类型、属性、基本运算符语言规则有:数据对象、数据类型、属性、基本运算符5.2.1 数据对象数据对象 数据对象有四种类型:常数数据对象有四种类型:常数constant、信号、信号signal、变量、变量variable和文件和文件files类型。类型。数据对象的使用:常数数据对象的使用:常数constant、信号、信号signal、变量、变量variable属于可综合的数据对象,文属于可综合的数据对象,文件件files类型仅在行为仿真时使用。类型仅在行为仿真时使用。

42、32;.1.对象说明对象说明常数说明格式:常数说明格式:constant 常数名表:数据类型常数名表:数据类型:=表达式表达式;信号说明格式:信号说明格式:signal 信号名表:数据类型信号名表:数据类型:=表达式表达式;变量说明格式:变量说明格式:variable 变量名表:数据类型变量名表:数据类型:=表达式表达式;注意:常数名表、信号名表和变量名表,用注意:常数名表、信号名表和变量名表,用“,”隔开多个标识符。隔开多个标识符。举例:举例:constant a1,a2:bit;-常数常数a1和和a2均为均为bit类型类型signal out1,out2:std_logic_vector(

43、3 downto 0);-信号信号out1,out2均为均为 std_logic_vector类型类型variable a,b,c:std_logic;-变量变量a,b,c均为均为std_logic类型类型33;.2.信号与变量信号与变量使用时应当特别注意:信号与变量都与一定的物理对象相对应,但是它们有许多不同之处。使用时应当特别注意:信号与变量都与一定的物理对象相对应,但是它们有许多不同之处。物理意义不同:信号对应电路设计中一条硬件连接线;变量与硬件没有直接对应关系,变量通常用物理意义不同:信号对应电路设计中一条硬件连接线;变量与硬件没有直接对应关系,变量通常用来暂存某些值。信号是全局量,可

44、以用于进程之间的联系,变量是局部量,只能在进程语句、函数来暂存某些值。信号是全局量,可以用于进程之间的联系,变量是局部量,只能在进程语句、函数语句和过程中使用。语句和过程中使用。赋值符号不同:信号赋值用赋值符号不同:信号赋值用“=”符号;变量赋值用符号;变量赋值用“:=”符号。符号。定义位置不同:信号应当在结构体(定义位置不同:信号应当在结构体(architecture)、包()、包(package)、实体()、实体(entity)的说明语句定)的说明语句定义。变量则在进程(义。变量则在进程(process)、函数()、函数(function)和过程()和过程(procedure)的说明部分定

45、义。)的说明部分定义。附加延时不同:信号赋值语句执行时有可能附加延时。变量赋值语句执行时,没有延时立刻执行。附加延时不同:信号赋值语句执行时有可能附加延时。变量赋值语句执行时,没有延时立刻执行。34;.下面有两个进程描述语句举例,进一步说明了信号与变量的不同之处。下面有两个进程描述语句举例,进一步说明了信号与变量的不同之处。例如:例如:process(a,b,c,d)-a,b,c,d均定义为信号均定义为信号begind=a;x=b+d;d=c;y=b+d;end process;程序执行的结果是:程序执行的结果是:x=b+c;y=b+c。程序分析:信号程序分析:信号d先代入先代入a,接着再代入

46、,接着再代入c,但是并未进行处理,当进程中的所有语句执行完毕,但是并未进行处理,当进程中的所有语句执行完毕,信号信号d最后代入的值最后代入的值c作为最终的数值,所以作为最终的数值,所以d中的数值是中的数值是c。程序执行的结果是:程序执行的结果是:x=b+d=b+c;y=b+d=b+c。35;.例如:例如:process(a,b,c)-a,b,c是信号是信号variable d:std_logic;-d是变量是变量begind:=a;x=b+d;d:=c;y=b+d;end process;程序执行的结果是:程序执行的结果是:x=b+a;y=b+c。程序分析:由于程序分析:由于d是变量,没有延时

47、立即执行,因此执行语句是变量,没有延时立即执行,因此执行语句d:=a 后,后,a的值赋给的值赋给d,所以在,所以在执行语句执行语句x=b+d后,后,x=b+a;接着又执行语句;接着又执行语句d:=c,c的值又赋给的值又赋给d,所以执行语句,所以执行语句y=b+d之后,之后,y=b+c。程序执行的结果是:程序执行的结果是:x=b+d=b+a;y=b+d=b+c。36;.5.2.2 数据类型数据类型 VHDL的数据类型:的数据类型:VHDL中的每个数据对象都具有特定的数据类型,数据对象进行的操作类中的每个数据对象都具有特定的数据类型,数据对象进行的操作类型必须与其数据类型相匹配,不匹配时必须使用转

48、换函数。型必须与其数据类型相匹配,不匹配时必须使用转换函数。VHDL提供的数据类型:多种标准数据类型以及用户自定义的数据类型。提供的数据类型:多种标准数据类型以及用户自定义的数据类型。介绍的内容:标准数据类型、用户自定义数据类型、数据类型之间的转换。介绍的内容:标准数据类型、用户自定义数据类型、数据类型之间的转换。37;.1.标准数据类型标准数据类型标准数据类型有标准数据类型有10种:这些数据类型及其含义如表所示。种:这些数据类型及其含义如表所示。使用时应当注意:不是所有的综合工具都支持上述使用时应当注意:不是所有的综合工具都支持上述10种标准数据类型。种标准数据类型。QuartusII综合工

49、具不支综合工具不支持实数、时间、错误等级和字符串等数据类型。持实数、时间、错误等级和字符串等数据类型。标准数据类型标准数据类型含含 义义整数(整数(integer)整数整数32位,位,21474836472147483647((2311)(2311)实数(实数(real)浮点数,浮点数,1.0E381.0E38位(位(bit)逻辑逻辑“0”或或“1”位矢量(位矢量(bit_vector)位矢量,元素为位矢量,元素为bit布尔量(布尔量(boolean)逻辑逻辑“true”或逻辑或逻辑“false”字符(字符(character)ASCII字符字符时间(时间(time)时间单位时间单位fs,ps

50、,ns,s,ms,sec,min,hr错误等级(错误等级(severity level)NOTE(注意)(注意),MARNING(警告)(警告),ERROR(出错)(出错),FAILURE(失败)(失败)自然数(自然数(natural)正整数(正整数(positive)整数的子集。自然数是大于等于整数的子集。自然数是大于等于0的整数的整数正整数是大于正整数是大于0的正整数的正整数字符串(字符串(string)字符矢量字符矢量38;.2.用户定义的数据类型用户定义的数据类型在在VHDL语言的使用过程中,可以由用户自己定义数据类型。语言的使用过程中,可以由用户自己定义数据类型。用户定义的数据类型书

51、写格式:用户定义的数据类型书写格式:type数据类型名数据类型名,数据类型名,数据类型名 is 数据类型定义;数据类型定义;可以由用户定义的数据类型有:枚举类型、整数类型、实数和浮点数类型、数组类型、存取类型、可以由用户定义的数据类型有:枚举类型、整数类型、实数和浮点数类型、数组类型、存取类型、文件类型、记录类型和物理类型等。文件类型、记录类型和物理类型等。这里介绍:这里介绍:QuartusII综合工具支持的常用用户定义数据类型。综合工具支持的常用用户定义数据类型。39;.(1)整数类型)整数类型VHDL已经预定义的整数:从已经预定义的整数:从(2311)到到(2311),即从,即从21474

52、83647到到2147483647。整数和适用于整数的运算符整数和适用于整数的运算符VHDL已经预先定义,编写已经预先定义,编写VHDL程序时可以直接使用。程序时可以直接使用。用户定义的整数类型:自定义的整数类型可以认为是用户定义的整数类型:自定义的整数类型可以认为是VHDL预定义整数的一个子类。预定义整数的一个子类。书写格式:书写格式:type 数据类型名数据类型名 is 数据类型定义数据类型定义 约束范围;约束范围;例如:例如:type a is integer range -63 to 63;40;.(2)枚举类型)枚举类型枚举类型:是一种非常重要的数据类型,用于建立抽象的模型。设计者用

53、枚举类型严格地表达枚举类型:是一种非常重要的数据类型,用于建立抽象的模型。设计者用枚举类型严格地表达一个特定操作所需的值,枚举类型的所有值都由设计者自己定义。一个特定操作所需的值,枚举类型的所有值都由设计者自己定义。枚举类型使用:枚举类型常用来定义状态机中的状态。枚举类型使用:枚举类型常用来定义状态机中的状态。枚举类型格式:枚举类型格式:type数据类型名数据类型名is(元素,元素,(元素,元素,)例如:例如:type states is(idle,decision,read,write););-数据数据states枚举类型定义,有枚举类型定义,有4种取值。种取值。枚举类型可以用于信号和变量的

54、定义,例如:枚举类型可以用于信号和变量的定义,例如:signal present_state,next_steate:states;-状态信号状态信号present_state,next_steate定义定义variable present_state,next_steate:states;-状态变量状态变量present_state,next_steate定义定义41;.(3)数组类型)数组类型数组类型:相同类型的数据集合形成的数据类型就是数组类型。数组类型:相同类型的数据集合形成的数据类型就是数组类型。数组类型格式:数组类型格式:type 数组类型名数组类型名 is array(范围)(范

55、围)of 原数据类型名;原数据类型名;例如:例如:type big_word is array(0 to 63)of std_logic;-一维数组的定义一维数组的定义除定义一维数组外,还可以定义两维数组。除定义一维数组外,还可以定义两维数组。例如:例如:type matrix_type is array(0 to 15)of std_logic_vector(0 to 31););推荐使用:数组元素的排列即可以用升序(推荐使用:数组元素的排列即可以用升序(to),也可以用降序(),也可以用降序(downto)。推荐使用后者。)。推荐使用后者。42;.(4)记录类型)记录类型记录类型:数组类型

56、是同一类型数据集合形成的,而记录类型是将不同类型数据和数据名组织在记录类型:数组类型是同一类型数据集合形成的,而记录类型是将不同类型数据和数据名组织在一起形成的新类型。一起形成的新类型。记录类型格式:记录类型格式:type 数据类型名数据类型名 is record元素名:数据类型名;元素名:数据类型名;元素名:数据类型名;元素名:数据类型名;end record;例如:例如:type opcode is(add,sub,mul,div););-枚举类型定义枚举类型定义type instruction is record-记录类型定义记录类型定义operator:opcode;-枚举类型元素枚举

57、类型元素op1:integer;-整数类型元素整数类型元素op2:integer;-整数类型元素整数类型元素end record;-结束记录类型定义结束记录类型定义43;.3.数据类型的转换数据类型的转换在在VHDL语言中,数据类型的定义是非常严格的,不同数据类型的数据不能进行运算和直接代入。语言中,数据类型的定义是非常严格的,不同数据类型的数据不能进行运算和直接代入。为了进行运算和代入操作,必要时需要进行数据类型之间的转换。为了进行运算和代入操作,必要时需要进行数据类型之间的转换。数据类型的转换函数如表所示,转换函数通常由数据类型的转换函数如表所示,转换函数通常由VHDL包集合提供,因此在使

58、用转换函数之前,包集合提供,因此在使用转换函数之前,使用使用library和和use语句,使包集合可以使用。语句,使包集合可以使用。包集合包集合函数名函数名功功 能能std_logic_1164to_stdlogicvector(a)由bit_vector转换为转换为std_logic_vectorto_bitvector(a)由std_logic_vector转换为转换为bit_vectorto_stdlogic(a)由bit转换为转换为std_logicto_bit(a)由std_logic转换为转换为bitstd_logic_arithconv_std_logic_vector(a,位长

59、)由integer,unsigned,signed转换为转换为std_logic_vectorconv_integer(a)由unsigned,signed转换为转换为integerstd_logic_unsignedconv_integer由std_logic_vector转换为转换为integer44;.例如:由例如:由std_logic_vector转换为转换为integer的的VHDL程序。程序。library IEEE;use IEEE.Std_logic_1164.all;-使用使用std_logic_1164包集合包集合use IEEE.Std_logic_unsigned.al

60、l;-使用使用std_logic_unsigned包集合包集合Entity add3 is port(data:in std_logic_vector(2 downto 0););end add3;architecture ver1 of add3 issignal in_data:integer range 0 to 5;begin in_data=con_integer(data);-数据类型的转换数据类型的转换 end ver1;45;.5.2.3 属性属性 属性问题:属性提供的是关于信号、类型等的指定特性。属性问题:属性提供的是关于信号、类型等的指定特性。这里介绍常用的属性:值类属性、

61、函数类属性、范围属性这里介绍常用的属性:值类属性、函数类属性、范围属性46;.1.值类属性值类属性值类属性:用于返回数据类型或数组类型的特定值,还可返回数组的长度或者类型的最底边界。值类属性:用于返回数据类型或数组类型的特定值,还可返回数组的长度或者类型的最底边界。值类属性表示:常用单引号值类属性表示:常用单引号指定属性,单引号后面跟属性名,单引号前面是所附属性的对象。指定属性,单引号后面跟属性名,单引号前面是所附属性的对象。常用的值类属性:常用的值类属性:left、right、high、low、length等。等。例如:属性例如:属性left生成一个类型最左边的值;属性生成一个类型最左边的值

62、;属性right是生成一个类型最右边的值;是生成一个类型最右边的值;例如:属性例如:属性high生成一个类型的最大值;属性生成一个类型的最大值;属性low生成类型的最小值;生成类型的最小值;例如:属性例如:属性length生成限制性数组中的元素数。生成限制性数组中的元素数。需要注意的是:需要注意的是:EDA综合软件不同对预定义属性的支持程度也各不相同,使用时应参考特定的综综合软件不同对预定义属性的支持程度也各不相同,使用时应参考特定的综合工具说明。合工具说明。47;.返回值返回值属性描述属性描述Count left=0left生成的是类型最左边的值生成的是类型最左边的值States left=

63、idleWord left=15Count right=127right生成的是类型最右边的值生成的是类型最右边的值States right=writeWord right=0Count high=127high生成的是类型最大值生成的是类型最大值States high=writeWord high=15Count low=0low生成的是类型最小值生成的是类型最小值States low=idleWord low=0Count length=128length生成的是限制性数组中元件数生成的是限制性数组中元件数States length=4Word length=16举例:举例:type co

64、unt is integer range 0 to 127;type states is(idle,decision,read,write););type word is array(15 downto 0)of std_logic;对上述数据类型求其属性及其返回值如表所示。对上述数据类型求其属性及其返回值如表所示。48;.2.函数类属性函数类属性最常用的函数类属性:最常用的函数类属性:event。event函数类属性:表明若属性对象有事件发生,则函数类属性:表明若属性对象有事件发生,则event属性生成布尔值属性生成布尔值“true”。event使用:常用来检查时钟边沿是否有效。使用:常用来

65、检查时钟边沿是否有效。例如:例如:if clkevent and clk=1 then -判断是否发生判断是否发生clk信号变化且变化为信号变化且变化为1,即,即clk的上升沿的上升沿if clkevent and clk=0 then -判断是否发生判断是否发生clk信号变化且变化为信号变化且变化为0,即,即clk的下降沿的下降沿49;.3.范围属性范围属性最常用的范围属性:最常用的范围属性:range range范围属性:生成一个限制性数组对象的范围。范围属性:生成一个限制性数组对象的范围。例如:例如:signal word:bit_vector(10 downto 0););wordra

66、nge=10 downto 0;50;.5.2.4 基本运算符基本运算符 VHDL定义的运算符主要有:定义的运算符主要有:算术运算符、关系运算符、逻辑运算符、赋值运算符、关联运算符和其它运算符。算术运算符、关系运算符、逻辑运算符、赋值运算符、关联运算符和其它运算符。运算符的优先级别:运算符的优先级别:优先级最高的是乘方优先级最高的是乘方(*)、取绝对值(、取绝对值(abs)和非()和非(not);其次是乘、除、取模、求余;然后依);其次是乘、除、取模、求余;然后依次是正负号、连接符、移位运算符、关系运算符、逻辑运算符。次是正负号、连接符、移位运算符、关系运算符、逻辑运算符。需要注意的是:需要注意的是:操作数的数据类型应当与操作符所要求的数据类型一致。操作数的数据类型应当与操作符所要求的数据类型一致。EDA综合软件对运算符支持程度各不综合软件对运算符支持程度各不相同,使用时应参考综合工具的说明。相同,使用时应参考综合工具的说明。51;.类别类别运算符运算符功能功能数据类型数据类型算术运算符算术运算符+加加整数、实数、物理量整数、实数、物理量_减减*乘乘/除除MOD取模取模REM取余取余*

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!