数字密码锁ISP器件VHDL编程EDA技术 第12页
TYPE 记录名 IS RECORD
---记录中元素的类型说明;
END RECORD
一个具体的实例如下:
TYPE month_name(Jan, Feb, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec);
TYPE date IS RECORD
day : integer range 0 to 31;
month : month_name;
year : Integer range 0 to 3000;
END RECORD;
数组(ARRAY):数组用于定义同一类型值的集合。数组可以是一文的(有一个下标),也可以是多文的(有多个下标)。此外,数组还可分为限定性数组和非限定想数组,限定性数组下标的取值范围在该数组类型定义时就被确定;而非限定性数组下标的取值范围随后才确定。其具体格式如下:
TYPE 数据类型名 IS ARRAY 范围 OF 原数据类型;
举例如下:
TYPE word IS ARRAY (1 TO 8) OF STD_LOGIC;
“STD_LOGIC_VECTOR”也属于数组,因它在程序包“STD_LOGIC_1164”中被定义成数组。
子类型:所谓子类型是用户对定义的数据类型作一些范围限制而形成的一种新的数据类型。子类型定义的一般格式为:
SUBTYPE 子类型名 IS 数据类型名 [范围];
子类型可以是对其父类型施加限制条件,也可以是简单地对其父类型重新起个名字,而没有增加任何新的意义。
2.数据类型的转换
在VHDL语言中,数据类型的定义是相当严格的,不同类型数据是不能进行运算和直接赋值的。为了实现正确的运算和赋值操作,必须将数据进行类型转换。数据类型的转换是由转换函数完成的,VHDL的标准程序包提供了一些常用的转换函数,
VHDL语言的运算操作符:如同别的程序设计语言一样,VHDL中的表达式是由运算符将基本元素连接起来的式子。VHDL的运算符可分为4组:
算数运算符、关系运算符、逻辑运算符和其他运算符以及它们的优先级别如下表所示:
表3-3-3 VHDL的运算符及优先级别
优先级顺序 |
运算符类型 |
运 算 符 |
功 能 |
低 高 |
逻 辑 运 算 符 |
AND |
与 |
OR |
或 | ||
NAND |
与非 | ||
NOR |
或非 | ||
XOR |
异或 | ||
XNOR |
异或非 | ||
关 系 运 算 符 |
= |
等于 | |
/= |
不等于 | ||
< |
小于 | ||
> |
大于 | ||
<= |
小于等于 | ||
>= |
大于等于 | ||
+ |
加 | ||
― |
减 | ||
& |
连接 | ||
+ |
正 | ||
― |
负 | ||
* |
乘 | ||
/ |
除 | ||
MOD |
求模 | ||
REM |
取余 | ||
* * |
指数 | ||
ABS |
取绝对值 | ||
NOT |
取反 |
a AND b AND c AND d
(a OR b) NAND c
关系运算符=、/=、<、<=和>=的两边类型必须相同,因为只有相同的数据类型才能比较,其比较的结果为BOOLEAN型。
正(+)负(-)号和加减号的意义与一般算术运算相同。连接运算符用于一文数组,“&”符号右边的内容连接之后形成一个新的数组,也可以在数组后面连接一个新的元素,或将两个单元素连接形成数组。连接操作常用于字符串。
乘除运算符用于整形、浮点数与物理类型。取模、取余只能用于整数类型。
取绝对值运算用于任何数值类型。乘方运算的左边可以是整数或浮点数,但右边必须为整数,且只有在左边为浮点时,其右边才可以为负数。
在用VHDL语言描述系统的硬件行为时,按语句执行的顺序可分为顺序语句和并行语句。顺序语句主要用来实现模型的算法部分;而并行语句则基本上用来表示黑盒的连接关系。黑盒中所包含的内容可以是算法描述或一些相互连接的黑盒。
一. 顺序语句
VHDL提供了一系列丰富的顺序语句,用来定义进程、过程或函数的行为。所谓“顺序”,意味着完全按照程序中出现的顺序执行各条语句,而且还意味着在结构层次中前面语句的执行结果可能直接影响后面语句的结果。顺序语句包括:
l WAIT语句
l 变量赋值语句
<< 上一页 [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] ... 下一页 >>