VHDL硬件描述语言二_第1页
VHDL硬件描述语言二_第2页
VHDL硬件描述语言二_第3页
VHDL硬件描述语言二_第4页
VHDL硬件描述语言二_第5页
已阅读5页,还剩151页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、VHDL硬件描述语言二VHDL硬件描述语言二2.1 VHDL程序结构程序结构2.2 VHDL的语言元素的语言元素2.3 VHDL的基本描述语句的基本描述语句2.4 VHDL结构体的三种描述方法结构体的三种描述方法VHDL硬件描述语言二u 2.1.1 VHDL程序基本结构程序基本结构u 2.1.2 VHDL结构体的基本子结构结构体的基本子结构VHDL硬件描述语言二2.1.1 VHDL程序基本结构程序基本结构例例1 一个一个2输入的与门的逻辑描述输入的与门的逻辑描述LIBRARY ieee; -库说明语句库说明语句USE ieee.std_logic_1164.ALL; -程序包说明语句程序包说明

2、语句ENTITY and2 ISPORT(a,b: IN STD_LOGIC; y : OUT STD_LOGIC);END and2;ARCHITECTURE and2x OF and2 ISBEGINy=a AND b;END and2x;实体部分实体部分结构体部分结构体部分VHDL硬件描述语言二VHDL设计文件的两个基本组成部分实体实体(Entity)结构体结构体(Architecture)配置配置(Configuration)包集合包集合(Package)库库(Library)一个完整的一个完整的VHDL程序程序库库 用于存放已编译的实体、结构体、包集合和配置l2.1.1 VHDL程序

3、基本结构程序基本结构实体部分实体部分描述设计系统的外部接口信号(即输入/输出信号)结构体结构体用于描述系统的内部电路配置配置用于从库中选取所需元件安装到设计单元的实体中包集合包集合存放各设计模块能共享的数据类型、常数、子程序等VHDL硬件描述语言二2.1.1.1 实体(实体(ENTITY)实体的一般格式为:实体的一般格式为:ENTITY 实体名实体名 IS类属参数说明类属参数说明;端口说明端口说明;END; ENTITY、IS、END是是VHDL的关键字(保留字)。的关键字(保留字)。 实体中的每一个实体中的每一个I/O信号被称为端口,其功能对应于电路信号被称为端口,其功能对应于电路 图图符号

4、的一个引脚。端口说明则是对一个实体的一组端口的定义,符号的一个引脚。端口说明则是对一个实体的一组端口的定义,即对基本设计实体与外部接口的描述。端口是设计实体和外部即对基本设计实体与外部接口的描述。端口是设计实体和外部环境动态通信的通道。环境动态通信的通道。ayand2b类属参数说明是可选部分。如果需要,可使用以类属参数说明是可选部分。如果需要,可使用以“GENERIC”语语句来指定该设计单元的类属参数(如延时、功耗等)。句来指定该设计单元的类属参数(如延时、功耗等)。 实体名、端口名等均应为实体名、端口名等均应为符合符合VHDL命名规则命名规则 的标识符。的标识符。VHDL硬件描述语言二端口说

5、明的一般格式为:端口说明的一般格式为: PORT(端口名(端口名,端口名,端口名:端口模式:端口模式 数据类型;数据类型; 端口名端口名,端口名,端口名:端口模式:端口模式 数据类型);数据类型); 端口模式用来说明数据传输通过该端口的方向。端口模式有以下几类:端口模式用来说明数据传输通过该端口的方向。端口模式有以下几类: IN(输入):仅允许数据流进入端口。主要用于时钟输入、控制输入、(输入):仅允许数据流进入端口。主要用于时钟输入、控制输入、单向数据输入。单向数据输入。 OUT(输出):仅允许数据流由实体内部流出端口。该模式通常用于终(输出):仅允许数据流由实体内部流出端口。该模式通常用于

6、终端计数一类的输出,不能用于反馈。端计数一类的输出,不能用于反馈。 BUFFER(缓冲):该模式允许数据流出该实体和作为内部反馈时用,(缓冲):该模式允许数据流出该实体和作为内部反馈时用,但不允许作为双向端口使用。但不允许作为双向端口使用。 INOUT(双向):可以允许数据流入或流出该实体。该模式也允许用于(双向):可以允许数据流入或流出该实体。该模式也允许用于内部反馈。内部反馈。如果端口模式没有指定,则该端口处于缺省模式为:如果端口模式没有指定,则该端口处于缺省模式为:IN 。数据类型原则上可以是任何标准的数据类型和用户自定义类型。数据类型原则上可以是任何标准的数据类型和用户自定义类型。PO

7、RT (a,b: IN STD_LOGIC; y : OUT STD_LOGIC);VHDL硬件描述语言二inininoutoutbufferinoutmodemode模式及其信号源VHDL硬件描述语言二类属参数说明的格式为:类属参数说明的格式为: GENERIC(参数名:参数类型:(参数名:参数类型:=初始值);初始值); 例例2:加入类属说明的:加入类属说明的2输入的与门的逻辑描述输入的与门的逻辑描述ENTITY and2 ISGENERIC (m:TIME:=1ns);PORT(a,b: IN STD_LOGIC; y : OUT STD_LOGIC);END and2;ARCHITEC

8、TURE and2x OF and2 ISSIGNAL u: BIT;BEGINu=a AND b;y=u after(m) when u=1 else u after(m) ;END and2x;VHDL硬件描述语言二例例3 3: 四位加法器实体说明程序四位加法器实体说明程序ENTITY add4 IS PORT(a, b: IN STD_LOGIC_VECTOR(3 downto 0); Ci: IN STD_LOGIC; Sum: OUT STD_LOGIC_VECTOR(3 downto 0); Co: OUT STD_LOGIC);END add4;由实体说明画出四位加法器由实体说明

9、画出四位加法器add4的电路图如下所示。的电路图如下所示。add4a3.0b3.0Sum3.0CiCoVHDL硬件描述语言二l2.1.1.2 结构体(结构体(ARCHITECTURE )结构体的一般格式如下:结构体的一般格式如下:ARCHITECTURE 结构体名结构体名 OF 实体名实体名 IS结构体说明部分结构体说明部分;BEGIN并发处理语句并发处理语句;END 结构体名;结构体名; 结构体说明是指对结构体需要使用的信号、常数、数据类结构体说明是指对结构体需要使用的信号、常数、数据类 型和函数进行型和函数进行定义和说明。定义和说明。 并发处理语句位于并发处理语句位于BEGIN和和END之

10、间,这些语句具体地描述了构造体的之间,这些语句具体地描述了构造体的行为。行为。并发处理语句是功能描述的核心部分,也是变化最丰富的部分并发处理语句是功能描述的核心部分,也是变化最丰富的部分。并发处。并发处理语句可以使用赋值语句、进程语句、元件例化语句、块语句以及子程序等。理语句可以使用赋值语句、进程语句、元件例化语句、块语句以及子程序等。需要注意的是需要注意的是,这些语句都是并发(同时)执行的,与排列顺序无关。,这些语句都是并发(同时)执行的,与排列顺序无关。VHDL硬件描述语言二l2.1.1.3 配置(配置(CONFIGURATION) 配置的基本格式为:配置的基本格式为: CONFIGURA

11、TION 配置名配置名 OF 实体名实体名 IS配置说明配置说明; END 配置名;配置名; 配置语句描述了层与层之间的连接关系,以及实体与构造配置语句描述了层与层之间的连接关系,以及实体与构造体之间的连接关系。设计者可以利用配置语句选择不同的构造体之间的连接关系。设计者可以利用配置语句选择不同的构造体,使其与要设计的实体相对应;在仿真某一个实体时,可以体,使其与要设计的实体相对应;在仿真某一个实体时,可以利用配置选择不同的构造体进行性能对比实验,以得到性能最利用配置选择不同的构造体进行性能对比实验,以得到性能最佳的构造体。佳的构造体。VHDL硬件描述语言二 CONFIGURATION 配置名

12、配置名 OF 实体名实体名 IS FOR 选配结构体名选配结构体名 END FOR; END 配置名配置名; 配置语句根据不同情况,其说明语句有简有繁。最简单配置语句根据不同情况,其说明语句有简有繁。最简单的缺省配置格式为:的缺省配置格式为:例例4 4:加入了配置的加入了配置的4位等值比较器设计文件位等值比较器设计文件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硬件描述语言二

13、-结构体结构体 1:ARCHITECTURE behavior OF comp4 ISBEGINComp: PROCESS(a, b) BEGIN IF a=b THEN y=1; ELSE y=0; END IF; END PROCESS comp;END behavior;-结构体结构体 2:ARCHITECTURE dataflow OF comp4 ISBEGIN y RETURN 1; WHEN 1= RETURN 0; WHEN Z= RETURN Z; END CASE; END invert;END BODY;VHDL硬件描述语言二l2.1.1.5 库(库(LIBRARY) 库

14、是用来放置可编译的设计单元的地方,通过其目录可查询库是用来放置可编译的设计单元的地方,通过其目录可查询和调用。和调用。 VHDL中的库大致可归纳为中的库大致可归纳为5种:种:IEEE库、库、STD库、库、ASIC矢量库、矢量库、WORK库和用户定义库。库和用户定义库。 v IEEE库。库。常用的资源库。常用的资源库。IEEE库包含经过库包含经过IEEE正式认可的正式认可的S T D _ L O G I C _ 11 6 4 包 集 合 和 某 些 公 司 提 供 的 一 些 包 集 合 , 如包 集 合 和 某 些 公 司 提 供 的 一 些 包 集 合 , 如STD_LOGIC_ARITH(

15、算术运算库)、(算术运算库)、STD_LOGIC_UNSIGNED等。等。v STD库。库。VHDL的标准库。库中存放有称为的标准库。库中存放有称为“standard”的标准包集合,的标准包集合,其中定义了多种常用的数据类型,均不加说明可直接引用。其中定义了多种常用的数据类型,均不加说明可直接引用。STD库中还包含库中还包含有称为有称为“textio”的包集合。在使用的包集合。在使用“textio”包集合中的数据时,应先说明库包集合中的数据时,应先说明库和包集合名,然后才可使用该包集合中的数据。和包集合名,然后才可使用该包集合中的数据。v ASIC矢量库。矢量库。在在VHDL语言中,为了进行门

16、级仿真,各公司可提供面语言中,为了进行门级仿真,各公司可提供面向向ASIC的逻辑门库。在该库中存放着与逻辑门一一对应的实体。为了使用面的逻辑门库。在该库中存放着与逻辑门一一对应的实体。为了使用面向向ASIC的库,对库进行说明是必要的。的库,对库进行说明是必要的。VHDL硬件描述语言二vWORK库。库。WORK库是现行作业库。设计者所描述的库是现行作业库。设计者所描述的VHDL语语句不需要任何说明,将都存放在句不需要任何说明,将都存放在WORK库中。库中。WORK库对所有库对所有设计都是隐含可见的,因此在使用该库时无需进行任何说明。设计都是隐含可见的,因此在使用该库时无需进行任何说明。v用户定义

17、库。用户定义库简称用户库,是由用户自己创建并定用户定义库。用户定义库简称用户库,是由用户自己创建并定义的库。设计者可以把自己经常使用的非标准(一般是自己开发义的库。设计者可以把自己经常使用的非标准(一般是自己开发的)包集合和实体等汇集成在一起定义成一个库,作为对的)包集合和实体等汇集成在一起定义成一个库,作为对VHDL标准库的补充。用户定义库在使用时同样要首先进行说明。标准库的补充。用户定义库在使用时同样要首先进行说明。vVITAL库。库。 VHDL硬件描述语言二库说明语句的语法形式为:库说明语句的语法形式为: LIBRARY 库名;库名; -说明使用什么库说明使用什么库USE 包集合名;包集

18、合名; -说明使用库中哪一个包集合及包集说明使用库中哪一个包集合及包集 合中的项目(如过程名、函数名等)合中的项目(如过程名、函数名等) 包集合名最多为三个层次,即 : library-name. packge-name. item-name LIBRARY 语句和USE语句的作用范围: 仅限于紧跟起后的实体和结构体。仅限于紧跟起后的实体和结构体。VHDL硬件描述语言二l2.1.2 VHDL结构体的基本子结构结构体的基本子结构 在规模较大的电路设计中,整个电路将被分成若干个相对在规模较大的电路设计中,整个电路将被分成若干个相对独立的模块来描述。这样,一个结构体可以用几个子结构,即独立的模块来描

19、述。这样,一个结构体可以用几个子结构,即相对独立的几个模块来构成。相对独立的几个模块来构成。VHDL语言有以下语言有以下3种形式的子结种形式的子结构描述语句:构描述语句: BLOCK 语句结构语句结构 PROCESS 语句结构语句结构 SUBPROGRAMS 结构结构VHDL硬件描述语言二l2.1.2.1 块(块( BLOCK ) BLOCK语句的语法格式为:语句的语法格式为: 块标号:块标号:BLOCK (块保护条件块保护条件) 说明语句说明语句; BEGIN 并发处理语句并发处理语句; END BLOCK 标号名;标号名; 保护条件是可选项,它是一个布尔表达式。如果有保护条件,则该条件应用

20、保护条件是可选项,它是一个布尔表达式。如果有保护条件,则该条件应用圆括号括起来,放在圆括号括起来,放在BLOCK之后。保护条件的作用是:只有当其为真时,该之后。保护条件的作用是:只有当其为真时,该块中的语句才被启动执行;否则,该块中的语句不被执行。块中的语句才被启动执行;否则,该块中的语句不被执行。 BLOCK语句中所描述的各个语句是可以并行执行的,它和书写顺序无关。语句中所描述的各个语句是可以并行执行的,它和书写顺序无关。 一个大规模的电原理图通常可以分割成多张子原理图,以便于设计和存档。一个大规模的电原理图通常可以分割成多张子原理图,以便于设计和存档。同样,在同样,在VHDL程序设计中,构

21、造体对应整个电原理图,而构造体可由多个程序设计中,构造体对应整个电原理图,而构造体可由多个BLOCK块组成,每一个块组成,每一个BLOCK块则对应一张子原理图。电原理图的分割关系块则对应一张子原理图。电原理图的分割关系和和VHDL程序中用程序中用BLOCK块分割构造体的关系是一一对应的。块分割构造体的关系是一一对应的。VHDL硬件描述语言二例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

22、 IS SIGNAL tmp1,tmp2,tmp3 : STD_LOGIC; BEGIN cale: BLOCK BEGINtmp1=d0 AND sel;tmp2=d1 AND (not sel);tmp3=tmp1 OR tmp2;q=tmp3; END BLOCK cale; END amux; 上述结构体中只有一个 BLOCK块,若电路复杂时可由几个BLOCK块组成。2选1 数据选择器d1d0qselu2u1u3tmp1tmp2tmp3VHDL硬件描述语言二例8 用带保护条件的BLOCK语句描述一个锁存器的结构。 ENTITY latch ISPORT(d, clk: INSTD_LO

23、GIC; q, qn : OUT STD_LOGIC); END latch; ARCHITECTURE latch_a OF latch IS BEGIN g1:BLOCK(clk=1) BEGIN q=guarded d after 5ns; qn=guarded not(d) after 7ns; END BLOCK g1; END latch_a;qnq QD Cdclk 在在BLOCK块中的两个信号传送语句都写有前卫关键词块中的两个信号传送语句都写有前卫关键词guarded,表明只有,表明只有clk=1为真时,这两个语句才能执行。为真时,这两个语句才能执行。 (注意注意 :这里的综合

24、工具不支持:这里的综合工具不支持 guarded block 语句和语句和 after 短语短语。) )VHDL硬件描述语言二l2.1.2.2 进程(进程( PROCESS ) PROCESS语句是语句是VHDL中描述硬件系统并发行为的最常用、中描述硬件系统并发行为的最常用、最基本的语句。最基本的语句。进程语句的一般格式为;进程语句的一般格式为; 进程名:进程名: PROCESS (敏感信号表敏感信号表)进程说明语句进程说明语句 BEGIN顺序描述语句;顺序描述语句; END PROCESS 进程名进程名; Example:PROCESS ( CLK )BEGINIF CLKEVENT AND

25、 CLK = 1 THENQ1= D; END IF;Q=Q1;END PROCESS;VHDL硬件描述语言二何时 PROCESS 被执行?何时 PROCESS 执行结束 ?可以有多个进程出现吗?多个进程之间如何通信?与C 代码中的函数 的区别 ?VHDL硬件描述语言二PROCESS ( CLK )BEGINIF CLKEVENT AND CLK = 1 THENQ1= D; END IF;Q=Q1;END PROCESS;CLK 信号信号 发生变化时发生变化时 PROCESS 被执行被执行VHDL硬件描述语言二 LIBARY IEEE; USE IEEE.STD_LOGIC_1164.ALL

26、; ENTITY and2 IS PORT ( a:INSTD_LOGIC;b:INSTD_LOGIC;q:OUT STD_LOGIC); END ENTITY and2; ARCHITECTURE bhv OF and2 IS SIGNALQ1:STD_LOGIC; BEGIN P0: process(a,b) beginq = a and b; end process p0; END ARCHITECTURE bhv;VHDL硬件描述语言二 ARCHITECTURE BEHAV OFmulIS SIGNAL temp:BIT BEGIN p_a:PROCESS ( a, b, selx )

27、BEGINIF ( selx=0 ) THENtemp=a;ELSEtemp=b;END IF;END PROCESS p_a; p_b:PROCESS ( temp, c, sely )BEGINIF ( sely=0 ) THENdata_out=temp;ELSEdata_out=datac;END IF;END PROCESS p_b; END ARCHITECTURE BEHAV;VHDL硬件描述语言二VHDL硬件描述语言二VHDL硬件描述语言二 敏感信号表所标明的信号是用来敏感信号表所标明的信号是用来启动进程启动进程的。敏感信号表中的信号无论哪的。敏感信号表中的信号无论哪一个发生变

28、化(如由一个发生变化(如由0变变1或由或由1变变0 )都将启动该)都将启动该PROCESS语句。语句。一旦启动后,一旦启动后, PROCESS中的语句将从上至下逐句执行一遍。当最后一个执行中的语句将从上至下逐句执行一遍。当最后一个执行完毕以后,即返回到开始的完毕以后,即返回到开始的PROCESS语句,等待下一次启动语句,等待下一次启动。因此,只要因此,只要PROCESS中指定的信号变化一次,该中指定的信号变化一次,该PROCESS语句就会执行一遍。语句就会执行一遍。 PROCESS内部内部各语句之间是顺序关系各语句之间是顺序关系 。在系统仿真时,。在系统仿真时, PROCESS语句语句是按书写

29、顺序一条一条向下执行的。而不象是按书写顺序一条一条向下执行的。而不象BLOCK中的语句可以并行执行。中的语句可以并行执行。 若构造体中有多个进程存在,若构造体中有多个进程存在,各进程之间的关系是并行关系各进程之间的关系是并行关系 ;进程之间的;进程之间的通信通信则一边通过接口由信号传递,一边并行地同步执行。则一边通过接口由信号传递,一边并行地同步执行。VHDL硬件描述语言二l2.1.2.3 子程序(子程序( SUBPROGRAM )VHDL的子程序有两种类型:过程(PROCEDURE)函数(FUNCTION)VHDL硬件描述语言二 过程(过程(PROCEDURE)过程语句的结构:过程语句的结构

30、:PROCEDURE 过程名(参数过程名(参数1;参数;参数2; )IS定义语句定义语句;BEGIN顺序处理语句顺序处理语句;END 过程名;过程名;过程语句的调用格式:过程语句的调用格式:过程名(实际参数表);过程名(实际参数表);VHDL硬件描述语言二例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; 函数的参数均为输入参数。函数的参

31、数均为输入参数。 函数调用返回一个指定数据类型的值。函数调用返回一个指定数据类型的值。VHDL硬件描述语言二例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;VHDL硬件描述语言二ARCHITECTURE rtl OF dpeak ISSIGNAL peak

32、 : STD_LOGIC_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;VHDL硬件描述语言二子程序的特点:子程序的特点: 子程序可以在结构体或程序包的任何位置被调用,而且可以反子程序可以在结构体或程序包的任何位置被调用,而且可以反复调用。复调用。 子程序是一个非重入的程序,即子程序返回后才能再被调用。子程

33、序是一个非重入的程序,即子程序返回后才能再被调用。在调用时子程序首先要进行初始化,执行结束后子程序终止;再在调用时子程序首先要进行初始化,执行结束后子程序终止;再调用时要再进行初始化。因此,子程序内部的值不能保持。调用时要再进行初始化。因此,子程序内部的值不能保持。 VHDL的子程序具有可重载性,即允许有许多重名的子程序,的子程序具有可重载性,即允许有许多重名的子程序,但这些子程序的参数类型和返回数值类型是不同的。但这些子程序的参数类型和返回数值类型是不同的。VHDL硬件描述语言二u 2.2.1 标识符标识符u 2.2.2 数据对象数据对象u 2.2.3 数据类型数据类型u 2.2.4 运算符

34、与操作符运算符与操作符u 2.2.5 属性属性VHDL硬件描述语言二标识符规则标识符规则: 标识符规则是在书写标识符规则是在书写VHDL程序时的一般文字规则。基本标程序时的一般文字规则。基本标识符由识符由字母字母、数字数字以及以及下划线下划线字符组成,且具有以下特征要求:字符组成,且具有以下特征要求: 第一个字符必须是字母;第一个字符必须是字母; 最后一个字符不能是下划线;最后一个字符不能是下划线; 不允许连续两个下划线;不允许连续两个下划线; 在标识符中大、小写字母是等效的。在标识符中大、小写字母是等效的。 VHDL中的注释文字一律为中的注释文字一律为2个连续的连接线个连续的连接线“-”,可

35、以出,可以出现在任一语句后面,也可以出现在独立行;现在任一语句后面,也可以出现在独立行; VHDL的保留字(关键字)不能用于标识符;的保留字(关键字)不能用于标识符;2.2.1 标识符标识符VHDL硬件描述语言二如下标识符是非法的:如下标识符是非法的: _ tx_clk 8B10B large#number link_bar select rx_clk_例如:如下标识符是合法的:例如:如下标识符是合法的: tx_clk Three_state_Enable sel7D HIT_1124-标识符必须起始于字母标识符必须起始于字母-只能是字母、数字、下划线只能是字母、数字、下划线-不能有连续两个下

36、划线不能有连续两个下划线-关键字(保留字)不能用于标识符关键字(保留字)不能用于标识符-最后字符不能是下划线最后字符不能是下划线VHDL硬件描述语言二2.2.2 数据对象数据对象 在在VHDL中,数据对象是可以赋予一个值的客体。常用的数中,数据对象是可以赋予一个值的客体。常用的数据对象为据对象为常量常量、变量变量 和和信号信号,在使用前必须给予说明。,在使用前必须给予说明。 常量(常量(CONSTANT) 常量常量是指在设计描述中不会变化的值。在是指在设计描述中不会变化的值。在VHDL描述中,一般描述中,一般用常量名代替数值。用常量名代替数值。常量说明语句的一般格式为:常量说明语句的一般格式为

37、: CONSTANT 常量名常量名,常量名,常量名:数据类型:数据类型 := 取值;取值; 例如:例如: CONSTANT width : integer : = 8 ; 常量所赋值和定义的数据类型应一致。常量所赋值和定义的数据类型应一致。 常量一旦赋值就不能再改变。常量一旦赋值就不能再改变。VHDL硬件描述语言二 变量(变量(VARIABLE) 变量是暂存数据的量。变量是暂存数据的量。变量说明语句的格式是:变量说明语句的格式是: VARIABLE 变量名变量名,变量名,变量名:数据类型:数据类型 :=初始值初始值; 例如:例如:VARIABLE count: INTEGER RANGE 0

38、TO 99 : =0 变量是一个变量是一个局部量局部量 ,它只用于进程和子程序。变量必须在,它只用于进程和子程序。变量必须在进程进程或子程序或子程序的说明区域中加以说明。的说明区域中加以说明。 变量赋值是变量赋值是直接的、非预设的直接的、非预设的 ,它在某一时刻仅包含一个值。,它在某一时刻仅包含一个值。变量的赋值变量的赋值立即生效,不存在延时行为立即生效,不存在延时行为。变量常用在实现某种运。变量常用在实现某种运算的赋值语句中。算的赋值语句中。 赋值语句中的表达式必须与目标变量赋值语句中的表达式必须与目标变量具有相同的数据类型具有相同的数据类型。变量赋值语句格式为:变量赋值语句格式为: 目标变

39、量名目标变量名 := 表达式;表达式;VHDL硬件描述语言二 信号(信号(SIGNAL) 信号是电子电路内部硬件实体相互连接的抽象表示。信号能够信号是电子电路内部硬件实体相互连接的抽象表示。信号能够代表连线,也可内连元件,端口也是信号。代表连线,也可内连元件,端口也是信号。信号说明语句的格式为:信号说明语句的格式为: SIGNAL 信号名信号名,信号名,信号名 :数据类型:数据类型 :=初始值初始值; 例如:例如: SIGNAL count: BIT_VECTOR(3 downto 0); 信号包括信号包括I/O引脚信号以及引脚信号以及IC内部缓冲信号,有硬件电路与之内部缓冲信号,有硬件电路与

40、之 对应,故对应,故信号之间的传递有实际的附加延时信号之间的传递有实际的附加延时。 信号通常在构造体、包集合和实体中说明;信号信号通常在构造体、包集合和实体中说明;信号不能在进程中不能在进程中 说明说明(但可以在进程中使用)。(但可以在进程中使用)。VHDL硬件描述语言二 硬件中的信号总是硬件中的信号总是同时同时工作的,即信号工作的,即信号同时同时在各个模块中流在各个模块中流动,这就是硬件电路的动,这就是硬件电路的并发性并发性 。HDL体现了实际电路中信号体现了实际电路中信号“同时同时”流动的这种基本特性。流动的这种基本特性。信号赋值语句格式为:信号赋值语句格式为: 目标信号名目标信号名 =

41、表达式;表达式; 赋值语句中的表达式必须与目标信号赋值语句中的表达式必须与目标信号具有相同的数据类型具有相同的数据类型。VHDL硬件描述语言二1. 变量变量 是一个局部量,只能用于进程或子程序中;是一个局部量,只能用于进程或子程序中; 信号信号 是一个全局量,它可以用来进行进程之间的通信。是一个全局量,它可以用来进行进程之间的通信。2. 变量赋值变量赋值 立即生效,不存在延时行为;立即生效,不存在延时行为; 信号赋值信号赋值 具有非立即性,信号之间的传递具有延时性。具有非立即性,信号之间的传递具有延时性。4. 信号赋值信号赋值 可以出现在进程中,也可以直接出现在结构体中,可以出现在进程中,也可

42、以直接出现在结构体中,但它们的但它们的运行含义运行含义不同:前者属顺序信号赋值,此时的赋值操作不同:前者属顺序信号赋值,此时的赋值操作要视进程是否已被启动;后者属并行信号赋值,其赋值操作是各要视进程是否已被启动;后者属并行信号赋值,其赋值操作是各自独立并行发生的。自独立并行发生的。3. 变量变量 用作进程中暂存数据的单元;用作进程中暂存数据的单元; 信号信号 用作电路中的信号连线。用作电路中的信号连线。VHDL硬件描述语言二5. 在进程中在进程中变量和信号的赋值形式与操作过程不同变量和信号的赋值形式与操作过程不同: 在变量的赋值语句中在变量的赋值语句中,该语句一旦被执行,其值立即被赋予变,该语

43、句一旦被执行,其值立即被赋予变量。在执行下一条语句时,该变量的值即为上一句新赋的值。量。在执行下一条语句时,该变量的值即为上一句新赋的值。 在信号的赋值语句中在信号的赋值语句中,该语句即使被执行,其值不会使信号立,该语句即使被执行,其值不会使信号立即发生代入,在下一条语句执行时,仍使用原来的信号值。直到即发生代入,在下一条语句执行时,仍使用原来的信号值。直到进程结束之后,所有信号赋值的实际代入才顺序进行处理。因此,进程结束之后,所有信号赋值的实际代入才顺序进行处理。因此,实际代入过程和赋值语句的执行是分开进行的。实际代入过程和赋值语句的执行是分开进行的。 如例如例12所示。所示。VHDL硬件描

44、述语言二例例12 12 信号和变量值代入的区别举例信号和变量值代入的区别举例 PROCESS (a,b,c,d)BEGIN d=a; x=b+d; d=c; 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;y=b+c;-信号量的值是将进程语句最后带入的的信号量的值是将进程语句最后带入的的值作为最终值值作为最终值-变量的值一经带入则立即改变。变量的值

45、一经带入则立即改变。 VHDL硬件描述语言二2.2.3 数据类型数据类型 标准数据类型标准数据类型 用户自定义数据类型用户自定义数据类型 数据类型的转换数据类型的转换VHDL硬件描述语言二1. 标准数据类型标准数据类型u VHDL提供的提供的10种标准数据类型。种标准数据类型。(2 2)RealReal(实数)。(实数)。取值范围为取值范围为 1.0E+38 +1.0E+38。和整数一样,。和整数一样,实数能被约束。由于实数运算需要大量的资源,因此综合工具常常并不支持实数能被约束。由于实数运算需要大量的资源,因此综合工具常常并不支持实数类型。实数类型。(3 3)BitBit(位)。(位)。 只

46、有两种取值,即只有两种取值,即 0 和和 1 ,可用于描述信号的取值。,可用于描述信号的取值。(4 4)Bit_VectorBit_Vector(位矢量)。(位矢量)。 是用双引号括起来的一组数据,每位只是用双引号括起来的一组数据,每位只有两种取值:有两种取值:0 和和 1。在其前面可加以数制标记,如。在其前面可加以数制标记,如X(16进制)、进制)、B(2进制、进制、默认)、默认)、O(8进制)等。位矢量常用于表示总线的状态。进制)等。位矢量常用于表示总线的状态。(1 1)IntegerInteger(整数)。(整数)。 取值范围为取值范围为 (2311)(2311)。一个)。一个整数类型和

47、要被综合进逻辑的信号或变量在其范围上应有约束。例如:整数类型和要被综合进逻辑的信号或变量在其范围上应有约束。例如:variable a: integer range 255 to 255;整数可通过语句内带符号矢量来表达给综合工具。整数可通过语句内带符号矢量来表达给综合工具。VHDL硬件描述语言二(5 5)BooleanBoolean(布尔量)。(布尔量)。 又称逻辑量。有又称逻辑量。有“真真”、“假假”两种状态,两种状态,分别用分别用TRUE和和FALSE标记。用于关系运算和逻辑运算。标记。用于关系运算和逻辑运算。(6 6)CharacterCharacter(字符)。(字符)。是用单引号括

48、起来的一个字母、数字、空格是用单引号括起来的一个字母、数字、空格或一些特殊字符(如或一些特殊字符(如$、%等)。字符区分大、小写字母。等)。字符区分大、小写字母。(7 7)StringString(字符串)。(字符串)。是用双引号括起来的一个字符序列。字符串区是用双引号括起来的一个字符序列。字符串区分大、小写字母。常用于程序的提示和结果说明等。分大、小写字母。常用于程序的提示和结果说明等。(8 8)TimeTime(时间)。(时间)。时间的取值范围从时间的取值范围从 (2311)(2311)。时间)。时间由整数值、一个以上空格以及时间单位组成。常用的时间单位有:由整数值、一个以上空格以及时间单

49、位组成。常用的时间单位有:fs、ns、s、ms、s、min、hr等。时间常用于指定时间延时和标记仿真时刻。等。时间常用于指定时间延时和标记仿真时刻。VHDL硬件描述语言二 上述上述10种数据类型是种数据类型是VHDL种标准的数据类型,在种标准的数据类型,在编程时可以直接引用。如果用户需使用其它的数据类编程时可以直接引用。如果用户需使用其它的数据类型,则必须进行自定义。型,则必须进行自定义。(9 9)NaturalNatural(自然数)和(自然数)和PositivePositive(正整数)。(正整数)。是整数类型的子是整数类型的子类型。自然数取值范围为类型。自然数取值范围为0 (2311);

50、正整数是大于);正整数是大于 0 的整数。的整数。(1010)Severity LevelSeverity Level(错误等级)。(错误等级)。错误等级分为:错误等级分为:NOTE(注意注意)、WARNING(警告)、(警告)、ERROR(出错)、(出错)、FAILURE(失败)四级,用于提示(失败)四级,用于提示系统的错误等级。系统的错误等级。 VHDL硬件描述语言二数据类型数据类型含含 义义整数整数整数整数32位,位, 取值范围:取值范围:(2311) (2311)实数实数浮点数,取值范围:浮点数,取值范围: -1.0e+38 1.0e+38位位逻辑逻辑0或或1位矢量位矢量位矢量,用双引

51、号括起来的一组数据位矢量,用双引号括起来的一组数据布尔量布尔量逻辑逻辑“真真” 或或“假假”,用,用TRUE和和FALSE标记标记字符字符ASCII字符字符字符串字符串字符矢量字符矢量时间时间时间单位时间单位fs,ps,ns,s,ms,sec,min,hr自然数、正整数自然数、正整数整数的子集:自然数取值范围为整数的子集:自然数取值范围为0 (2311);正);正整数是大于整数是大于0的整数的整数错误等级错误等级Note,warning,error,failure标准数据类型VHDL硬件描述语言二u IEEE库库STD_LOGIC_1164程序包中定义的程序包中定义的STD_LOGIC类型和类

52、型和STD_LOGIC_VECTOR类型。类型。STD_LOGIC类型的数据可以具有九种取值,其含义如下类型的数据可以具有九种取值,其含义如下:U:初始值:初始值X:不定态:不定态0: 强制强制01: 强制强制1Z: 高阻态高阻态W:弱信号不定态:弱信号不定态L:弱信号:弱信号0H:弱信号:弱信号1_:不可能情况(可忽略值):不可能情况(可忽略值)其中,其中,“X”方便了系统仿真,方便了系统仿真,“Z”方便了双向总线的描述。方便了双向总线的描述。VHDL硬件描述语言二STD_LOGIC_VECTOR类型定义如下类型定义如下: TYPE STD_LOGIC_VECTOR IS ARRAY (NA

53、TURAL RANGE ) OF STD_LOGIC;VHDL硬件描述语言二2. 用户自定义数据类型用户自定义数据类型 VHDL允许用户自己定义数据类型。允许用户自己定义数据类型。常用的常用的用户自定义数据类型用户自定义数据类型主要有:主要有: (1 1)枚举()枚举(EnumeratedEnumerated)类型。)类型。 通过列举某类变量所有可能的通过列举某类变量所有可能的取值来加以定义。对这些取值,一般使用自然语言中有相应含义取值来加以定义。对这些取值,一般使用自然语言中有相应含义的单词或字符序列来代表,以便于阅读和理解。的单词或字符序列来代表,以便于阅读和理解。自定义数据类型说明语句的

54、一般格式是:自定义数据类型说明语句的一般格式是: TYPE 数据类型名数据类型名 ,数据类型名,数据类型名 IS 数据类型定义数据类型定义;枚举类型定义的格式为:枚举类型定义的格式为: TYPE 数据类型名数据类型名 IS (元素(元素1,元素,元素2,);); 该数据类型括号中的值自左向右该数据类型括号中的值自左向右按升序排列,中间用逗号分隔。按升序排列,中间用逗号分隔。在在VHDL中,对其中每一个元素中,对其中每一个元素都赋予一个位置编号,最左边的都赋予一个位置编号,最左边的元素开始记为元素开始记为“0” ,向右依次递,向右依次递增增“1” 。这为。这为“属性属性”提供了一提供了一个访问位

55、置编号的机制。个访问位置编号的机制。VHDL硬件描述语言二例如,在程序包例如,在程序包STD_LOGIC_1164中对中对STD_LOGIC的定义为的定义为TYPE STD_LOGIC IS ( U ,X ,0 ,1 ,Z ,W ,L ,H ,_ ); (2) 数组(数组(ARRAY)类型。)类型。 又称为向量,是多个相同类型的又称为向量,是多个相同类型的数据集合。它可以是二维的和多维的。数据集合。它可以是二维的和多维的。数组类型定义的格式为:数组类型定义的格式为: TYPE 数据类型名数据类型名 IS ARRAY (范围)(范围) OF 元素类型名;元素类型名; 范围一项规定数组下标的类型和

56、范围。默认的下标类型是整型,范围一项规定数组下标的类型和范围。默认的下标类型是整型,但也可以使用其它数据类型,这就需要在范围中标明下标的类型。但也可以使用其它数据类型,这就需要在范围中标明下标的类型。 例如:例如:TYPE count1 IS ARRAY ( STD_LOGIC _ DOWNTO U ) OF INTEGER; 多维数组需要用两个以上的范围来多维数组需要用两个以上的范围来描述,而且多维数组不能生成逻辑描述,而且多维数组不能生成逻辑电路,因此只能用于生成仿真图形电路,因此只能用于生成仿真图形及硬件的抽象模型。及硬件的抽象模型。VHDL硬件描述语言二(3) 纪录纪录(RECORD)

57、类型。类型。 是多个不同类型的数据集合。是多个不同类型的数据集合。 纪录类型定义的格式为:纪录类型定义的格式为:TYPE 数据类型名数据类型名 IS RECORD元素名:元素名: 数据类型名;数据类型名;元素名:元素名: 数据类型名;数据类型名; END RECORD; 纪录适用于描述总线、仿真等。对于记录类型的对象进行纪录适用于描述总线、仿真等。对于记录类型的对象进行单元素赋值时,可在记录类型对象名后加点单元素赋值时,可在记录类型对象名后加点“”,然后再加,然后再加赋值元素的元素名。赋值元素的元素名。 VHDL硬件描述语言二(4)时间()时间(TIME)类型(物理类型)。表示时间的数据类型,

58、)类型(物理类型)。表示时间的数据类型, 在仿真时是必不可少的。在仿真时是必不可少的。 时间类型定义的一般格式为:时间类型定义的一般格式为:TYPE 数据类型名数据类型名 IS 范围;范围;UNITS 基本单位;基本单位; 单位;单位;END UNITS; VHDL硬件描述语言二例如:例如:TYPE time IS range 1e18 TO 1e18;UNITS fs; ps=1000fs; ns=1000ps; s=1000ns; ms=1000s; set=1000ms; min=60set; hr=60min;END UNITS; 这里的基本单位是“fs”。时间是物理类型的数据,当然对

59、容量、阻抗值也可以做定义。VHDL硬件描述语言二(5) 子类型(子类型(SYBTYPE)。子类型是一个具有限制条件的类型,)。子类型是一个具有限制条件的类型,通常用来定义具有一定限制条件的基本类型的数据对象。通常用来定义具有一定限制条件的基本类型的数据对象。子类型定义的一般格式为:子类型定义的一般格式为: SYBTYPE 子类型名子类型名 IS 数据类型名数据类型名约束范围约束范围; 例如:如下例如:如下 Byte 被定义作为一个子类型,而后数据对象被定义被定义作为一个子类型,而后数据对象被定义为从属于该子类型。为从属于该子类型。SYBTYPE Byte IS Bit_Vector(7 dow

60、nto 0);SIGNAL Byte1, Byte2:Byte;SIGNAL Data1, Data2:Byte;SIGNAL Addr1, Addr2:Byte;VHDL硬件描述语言二3. 数据类型的转换数据类型的转换 在在VHDL程序中,不同类型的对象不能代入,因此要进行类型程序中,不同类型的对象不能代入,因此要进行类型转换。类型转换的方法有:转换。类型转换的方法有:(1)类型标记法。用类型名称来实现关系密切的标量类型之间的)类型标记法。用类型名称来实现关系密切的标量类型之间的 转换。转换。 例如:例如:VARIABLE x:INTEGER;VARIABLE y:REAL; 使用类型标记(即类型名)实现类型转换时,可采用赋值

温馨提示

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

评论

0/150

提交评论