资源预览内容
第1页 / 共36页
第2页 / 共36页
第3页 / 共36页
第4页 / 共36页
第5页 / 共36页
第6页 / 共36页
第7页 / 共36页
第8页 / 共36页
第9页 / 共36页
第10页 / 共36页
亲,该文档总共36页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第二章 VHDL硬件描述语言,2.1 VHDL概述 2.2 VHDL的数据类型和数据对象 2.3 VHD设计的基本语句 2.4 VHDL高级语句 2.5 VHDL设计实例,2.2 VHDL的数据类型和数据对象,2.2.1 VHDL的标记 2.2.2 VHDL的数据类型 2.2.3 VHDL的运算符,2.2.1 VHDL的标记,一个完整的VHDL语句可以有下列几个部分组成:标识符、保留字(Reserved Words)、界符、常数、赋值符号和注释(Comments),所有这些统称为标记。,2.2.1 VHDL的标记,1、标识符 标识符用来表示常数、变量、信号、子程序、结构体和实体等名称。VHDL基本的标识符组成的规则如下: 标识符由26个英文字母、数字0,1,2,9及下划线“_”组成; 标识符必须是以英文字母开头; 标识符中不能有两个连续的下划线“_”,标识符的最后一个字符不能是下划线; 标识符中的英文字母不区分大小写。 例如: CLK,QO,DAT1,SX_1,NOT_Q是合法的标识符。 3DA,_QD,NA_C, DB-A,DB_等是非法的标识符。,2.2.1 VHDL的标记,2. 保留字 VHDL中的保留字是具有特殊含义的标识符号,只能作为固定的用途,用户不能用保留字作为标识符。 如 ENTITY,ARCHITECTURE,PROCESS,BLOCK,BEGIN和END等。 VHDL保留字如表2-2-1所示。,2.2.1 VHDL的标记,2.2.1 VHDL的标记,3. VHDL中的界符界符是作为VHDL语言中两个部分的分隔符用的。如每个完整的语句均以 “;” 结尾,用双减号“-”开头的部分是注释内容,不参加程序编译。信号赋值符号是“=”,变量赋值符号是 “:=” 等。 常用的界符如表2-2-2所列, : ; - _ ( ) = :=,表2-2-2,2.2.1 VHDL的标记,4. 注释符 在VHDL中,为了便于理解和阅读程序,常常加上注释,注释符用双减号 “-”表示。注释语句以注释符打头,到行尾结束。注释可以加在语句结束符 “;”之后,也可以加在空行处。,2.2.2 VHDL的数据类型,在VHDL中,定义了三种数据对象,即信号、变量和常数。 数据类型分为两大类:即预定义的数据类型和用户自定义的数据类型。 预定义的数据类型是最基本的数据类型,这些数据类型都定义在标准程序包STANARD、STD_LOGIC_1164和其它标准的程序包中,这些程序包放在EDA软件中IEEE和STD目录中,供用户随时调用。 在预定义的各种数据类型的基础上,用户可以根据实际需要自己定义数据类型和子类型,如标量型和数组型。,2.2.2 VHDL的数据类型,1. STANDARD程序包中预定义的数据类型 (1) 整数(INTEGER)数据类型 整数数据类型与数学中整数的定义是相同的,整数类型的数据代表正整数、负整数和零。VHDL整数类型定义格式为: TYPE INTEGER IS RANGE -2147483648 TO 2147483647 ; 正整数(POSITIVE)和自然数(NATURAL)是整数的子类型,定义格式为: SUBTYPE POSITIVE IS INTEGER RANGE 0 TO INTEGERHIGH ; SUBTYPE NATURE IS INTEGER RANGE 1 TO INTEGERHIGH ; 其中INTEGERHIGH是数值类属性,代表整数上限的数值,也即231-1。,2.2.2 VHDL的数据类型,1. STANDARD程序包中预定义的数据类型 (2) 实数(REAL)数据类型 VHDL的实数就是带小数点的数,分为正数和小数。实数有两种书写形式即小数形式和科学计数形式,不能写成整数形式。实数数据类型的定义格式为: TYPE REAL is range -1.7e38 to 1.7e38; 例如:SIGNAL A, B, C :REAL ; A = 5.0; B = 3.5E5; C = -4.5;,2.2.2 VHDL的数据类型,1. STANDARD程序包中预定义的数据类型 (3) 位(BIT)数据类型 位数据类型的位值用字符0和1表示,将值放在单引号中,表示二值逻辑的0和1。这里的0和1与整数型的0和1不同,可以进行算术运算和逻辑运算,而整数类型只能进行算术运算。位数据类型的定义格式为: TYPE BIT is ( 0, 1 ); 例如: RESULT : OUT BIT; RESULT = 1; 将RESULT引脚设置为高电平。,2.2.2 VHDL的数据类型,1. STANDARD程序包中预定义的数据类型 (4)位向量(BIT_VECTOR)数据类型 位向量是基于BIT数据类型的数组。VHDL位向量的定义格式为: TYPE BIT_VECTOR is array (NATURAL range ) of BIT; 使用位向量必须注明位宽,即数组的个数和排列顺序,位向量的数据要用双引号括起来。例如 “1010”,X “A8”。其中1010是四位二进制数,用X表示双引号里的数是十六进制数。 例如: SIGNAL A :BIT_VECTOR (3 DOWNTO 0 ); A = “1110” ; 表示A是四个BIT型元素组成的一维数组,数组元素的排列顺序是A3=1,A2=1,A1=1,A0=0。,2.2.2 VHDL的数据类型,1. STANDARD程序包中预定义的数据类型 (5)布尔(BOOLEAN)数据类型 一个布尔量具有真(TRUE)和假(FALSE)两种状态。布尔量没有数值的含义,不能用于数值运算,它的数值只能通过关系运算产生。例如,在IF语句中,AB是关系运算,如果A=3,B=2,则AB关系成立,结果是布尔量TRUE,否则结果为FALSE。 VHDL中,布尔数据类型的定义格式为: TYPE BOOLEAN IS (FALSE, TRUE);,2.2.2 VHDL的数据类型,1. STANDARD程序包中预定义的数据类型 (6) 字符(CHARACTER)数据类型 在STANDARD程序包中预定义了128个ASCII码字符类型,字符类型用单引号括起来,如A,b,1等,与VHDL标识符不区分大小写不同,字符类型中的字符大小写是不同的,如B和b不同。,2.2.2 VHDL的数据类型,1. STANDARD程序包中预定义的数据类型 (7) 字符串(STRING) 在STANDARD程序包中,字符串的定义是: TYPE STRING is array (POSITIVE range ) of CHARACTER; 字符串数据类型是由字符型数据组成的数组,字符串必须用双引号括起来。例如: CONSTANT STR1 :STRING := “Hellow world”; 定义常数ST1是字符串,初值是 “Hellow world ”。,2.2.2 VHDL的数据类型,(8) 时间(TIME)数据类型 表示时间的数据类型,一个完整的时间类型包括整数表示的数值部分和时间单位两个部分,数值和单位之间至少留一个空格,如1 ms,20 ns等。 STANDARD程序包中定义时间格式为: TYPE TIME is range -9223372036854775808 to 9223372036854775807 UNITS fs; - 飞秒 ps = 1000 fs; - 皮秒 ns = 1000 ps; - 纳秒 us = 1000 ns; - 微秒 ms = 1000 us; - 毫秒 sec = 1000 ms; - 秒 min = 60 sec; - 分 hr = 60 min; - 小时 END UNITS;,2.2.2 VHDL的数据类型,2. IEEE预定义的标准逻辑位和标准逻辑位向量 (1)标准逻辑位(STD_LOGIC)数据类型 STD_LOGIC是位(BIT)数据类型的扩展,是STD_ULOGIC数据类型的子类型。定义格式为: TYPE std_ulogic IS ( U, - Uninitialized X, - Forcing Unknown 0, - Forcing 0 1, - Forcing 1 Z, - High Impedance W, - Weak Unknown L, - Weak 0 H, - Weak 1 - - Dont care); FUNCTION resolved ( s : std_ulogic_vector ) RETURN std_ulogic; SUBTYPE std_logic IS resolved std_ulogic;,2.2.2 VHDL的数据类型,2. IEEE预定义的标准逻辑位和标准逻辑位向量 (2)标准逻辑位向量(STD_LOGIC_VECTOR)数据类型 STD_LOGIC_VECTOR是基于STD_LOGIC数据类型的标准逻辑一维数组,和BIT_VECTOR数组一样,使用标准逻辑位向量必须注明位宽和排列顺序,数据要用双引号括起来。例如: SIGNAL SA1 :STD_LOGIC_VECTOR (3 DOWNTO 0 ); SA1 = “0110” ;,2.2.2 VHDL的数据类型,2. IEEE预定义的标准逻辑位和标准逻辑位向量 (2)标准逻辑位向量(STD_LOGIC_VECTOR)数据类型 STD_LOGIC_VECTOR是基于STD_LOGIC数据类型的标准逻辑一维数组,和BIT_VECTOR数组一样,使用标准逻辑位向量必须注明位宽和排列顺序,数据要用双引号括起来。例如: SIGNAL SA1 :STD_LOGIC_VECTOR (3 DOWNTO 0 ); SA1 = “0110” ;,2.2.2 VHDL的数据类型,3. 其它预定义的数据类型 在STD_LOGIC_ARITH程序包中定义了无符号(UNSIGNED)和带符号(SIGNED)数据类型,这两种数据类型主要用来进行算术运算。定义格式为: TYPE UNSIGNED is array (NATURAL range ) of STD_LOGIC; TYPE SIGNED is array (NATURAL range ) of STD_LOGIC;,2.2.2 VHDL的数据类型,4. 用户自定义的数据类型 这种定义数据类型的格式: TYPE 数据类型名称 IS 数据类型名RANGE 数据范围; 例如:TYPE DATA IS INTEGER RANGER 0 TO 9 ; 定义DATA是INTEGER数据类型的子集,数据范围是09。 SUBTYPE 数据类型名称 IS 数据类型名 RANGE 数据范围; 例如:SUBTYPE DB IS STD_LOGIC_VECTOR(7 DOWNTO 0); 定义DB 是STD_LOGIC_VECTOR数据类型的子集,位宽8位。,2.2.2 VHDL的数据类型,5数组(ARRAY)的定义 数组定义的格式为: TYPE 数据类型名称 IS ARRAY 数组下标的范围 OF 数组元素的数据类型; 例如,在IEEE程序包中定义STD_LOGIC_VECTOR数据类型的语句是 TYPE std_logic_vector IS ARRAY ( NATURAL RANGE ) OF std_logic; 限定性数组的下标的范围用整数指定,数组元素的下标可以是由低到高,如 0 TO 3,也可以是由高到低,如7 DOWNTO 0,表示数组元素的个数和在数组中的排列方式。 例如: TYPE D IS ARRAY(0 TO 3)OF STD_LOGIC; TYPE A IS ARRAY(4 DOWNTO 1)OF BIT;,2.2.2 VHDL的数据类型,6数据类型的转换 在
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号