当前位置:首页 > VHDL语言简介
在上述数据类型中,有标准的,也有用户自己定义的。当用户自己定义时,其具体的格式如下:
TYPE 数据类型名 数据类型的定义; 下面对常用的几种数据类型作一些说明。 ? 整型(INTEGER)
VHDL中的整型与数学中的整形定义相似,可以使用加、减、乘、除等运算符。整数的最小范围从-2147483647到+2147483647,即32位有符号的二进制数。 ? 实数(REAL)
实数即浮点数,有正有负,书写时一定要有小数点。实数的最小范围从-1.0E+38到+1.0E+38。
? 记录(RECORD)
记录是异构复合类型,也就是说,记录中的元素可以是不同的类型。记录类型的格式如下:
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 数据类型名 [范围];
子类型可以是对其父类型施加限制条件,也可以是简单地对其父类型重新起个名字,而没有增加任何新的意义。
30
2. 数据类型的转换
在VHDL语言中,数据类型的定义是相当严格的,不同类型数据是不能进行运算和直接赋值的。为了实现正确的运算和赋值操作,必须将数据进行类型转换。数据类型的转换是由转换函数完成的,VHDL的标准程序包提供了一些常用的转换函数,如: ? FUNCTION TO_bit (s : std_ulogicl; xmap : BIT :=?0?) RETURN BIT;
? FUNCTION TO_bit_vector ( s : std_logic_vector; xmap : BIT :=?0? ) RETURN
BIT_VECTOR; 等函数。
2.4.3 VHDL语言的运算操作符
如同别的程序设计语言一样,VHDL中的表达式是由运算符将基本元素连接起来的式子。VHDL的运算符可分为4组:
算数运算符、关系运算符、逻辑运算符和其他运算符以及它们的优先级别如下表所示:
表2-2 VHDL的运算符及优先级别 优先级顺序 运算符类型 运 算 符 功 能 AND 与 逻 低 OR 或 辑 NAND 与非 运 NOR 或非 算 XOR 异或 符 XNOR 异或非 = 等于 /= 不等于 < 小于 > 大于 <= 小于等于 >= 大于等于 + 加 关 ― 减 系 & 连接 运 + 正 算 ― 负 符 * 乘 / 除 MOD 求模 REM 取余 * * 指数 ABS 取绝对值 NOT 取反 高
通常,在一个表达式中有两个以上的算符时,需要使用括号将这些操作分组。如果一
31
串操作的算符相同,且是AND、OR、XOR这三个算符中的一种,则不需要使用括号,如果一串操作中的算符不同或有除这三种算符之外的算符,则必须使用括号。如:
a AND b AND c AND d (a OR b) NAND c
关系运算符=、/=、<、<=和>=的两边类型必须相同,因为只有相同的数据类型才能比较,其比较的结果为BOOLEAN型。
正(+)负(-)号和加减号的意义与一般算术运算相同。连接运算符用于一维数组,“&”符号右边的内容连接之后形成一个新的数组,也可以在数组后面连接一个新的元素,或将两个单元素连接形成数组。连接操作常用于字符串。
乘除运算符用于整形、浮点数与物理类型。取模、取余只能用于整数类型。
取绝对值运算用于任何数值类型。乘方运算的左边可以是整数或浮点数,但右边必须为整数,且只有在左边为浮点时,其右边才可以为负数。
2.4.4 VHDL语言的主要描述语句
在用VHDL语言描述系统的硬件行为时,按语句执行的顺序可分为顺序语句和并行语句。顺序语句主要用来实现模型的算法部分;而并行语句则基本上用来表示黑盒的连接关系。黑盒中所包含的内容可以是算法描述或一些相互连接的黑盒。 一.顺序语句
VHDL提供了一系列丰富的顺序语句,用来定义进程、过程或函数的行为。所谓“顺序”,意味着完全按照程序中出现的顺序执行各条语句,而且还意味着在结构层次中前面语句的执行结果可能直接影响后面语句的结果。顺序语句包括:
? WAIT语句 ? 变量赋值语句 ? 信号赋值语句 ? IF语句 ? CASE语句 ? LOOP语句 ? NEXT语句 ? EXIT语句 ? RETURN语句 ? NULL语句 ? 过程调用语句 ? 断言语句
? REPORT语句
下面逐个介绍其中常用的一些语句: 1. 等待(WAIT)语句
进程在运行中总是处于两种状态之一:执行或挂起。当进程执行到WAIT语句时,就将被挂起来,并设置好再执行的条件。WAIT语句可以设置四种不同的条件:无限等待、时间到、条件满足以及敏感信号量变化。这几类条件可以混用。
32
语句格式如下:
(1)WAIT; (2)WAIT ON 信号; (3)WAIT UNTIL 条件表达式; (4)WAIT FOR 时间表达式;
第1种格式为无限等待,通常不用;
第2种当指定的信号发生变化时,进程结束挂起状态,继续执行; 第3种当条件表达式的值为TRUE时,进程才被启动; 第4种当等待的时间到时,进程结束挂起状态。 2.断言(ASSERT)语句
ASSERT语句主要用于程序仿真、调试中的人-机对话,它可以给出一串文字作为警告和错误信息。ASSERT语句的格式如下:
ASSERT 条件 [REPORT 输出信息] [SEVERITY级别] 当执行ASSERT语句时,会对条件进行判断。如果条件为“真”,则执行下一条语句;若条件为“假”,则输出错误信息和错误严重程度的级别。 3.信号赋值语句
信号赋值语句的格式如下:
信号量 <= 信号量表达式
如:
a<= b AFTER 5 ns;
信号赋值语句指定延迟类型,并在后面指定延迟时间。但VHDL综合器忽略延迟特性。 4.变量赋值语句 在VHDL中,变量的说明和赋值限定在进程、函数和过程中。变量赋值符号为“:= ”,同时,符号“ := ”也可用来给变量、信号、常量和文件等对象赋初值。其书写格式为:
变量:= 表达式; 例如:
a := 2; d := d+e; 5. IF语句
IF语句的一般格式如下: IF 条件 THEN
顺序处理语句; {ELSIF 条件 THEN 顺序处理语句; ∶
ELSIF 条件 THEN 顺序处理语句;} ELSE
顺序处理语句;
33
共分享92篇相关文档