跳转到内容

8.4 VHDL中的属性和运算符

刘培植 主编,胡春静、郭琳、孙文生、刘丽华 编著北京邮电大学出版社《数字电路与逻辑设计(第2版)》大学本科 · 教材双语助读 (Alt+Y)

VHDL 的属性(attribute)有着丰富的内涵。通常,属性表达了数据的一些特征,如范围、边界值、变化情况等。属性可增强描述的表现力和准确性,也可改善 VHDL 程序的可读性和通用性。VHDL 属性有预定义和用户自定义的两种。这里简要介绍一些预定义属性。

表达属性的一般格式如下:

项目名属性名

其中项目名可以是数据对象、数据类型、实体、结构体、块、元件等,属性名为项目名的某一特征。

(1) 数据类型的常用属性: ‘LEFT、‘RIGHT、‘HIGH、‘LOW。

例如,用语句“SUBTYPE t IS INTEGER RANGE 3 TO 31;”定义数据类型 t 后,则属性 t' LEFT 表达 t 的左范围边界,数值为 3。属性 t' RIGHT 表达 t 的右范围边界,数值为 31。同理,t 的上限 t' HIGHT 为 31,t 的下限 t' LOW 为 3。可用这些属性对信号或变量赋值,也可将它们用做 LOOP 语句中的循环控制变量。

例如,用语句“TYPE a IS ARRAY(15 DOWNTO 0)OF BIT;”定义了数组类型 a 后,可用表 8.4.1 说明数组的一些常用属性及取值。

表 8.4.1 数组的常用属性

数组a的属性意义a的属性的结果
a'LEFT 数组a的下标的左边界15
a'RIGHT 数组a的下标的右边界0
a'HIGH 数组a的下标的上限15
a'LOW 数组a的下标的下限0
a'RANGE 数组a的下标的排列15到0
a'REVERSE RANGE 数组a的下标的逆排列0到15
a'LENGH 数组元素的个数16

例如,用语句“SIGNAL s:std_logic;”定义了信号 s 后,可由表 8.4.2 给出信号的几个常用属性。

表 8.4.2 信号的常用属性

信号s的属性意义
s'STABLE 若s取值没有改变,则属性值为TRUE,反之为FALSE
s'EVENT 若s取值有改变,则属性值为TRUE,反之为FALSE
s'LAST_EVENT s上次取值改变到当前所经过的时间
s'LAST_VALUE s最近一次改变之前的取值

属性 s’STABLE 本身也可作为信号使用,例如可用在进程的敏感信号表中。目前的 VHDL 综合器在信号属性中一般只支持’EVENT 和’STABLE。

表 8.4.3 列出了 VHDL 预定义的运算符号、操作数的数据类型、运算结果的数据类型。

表 8.4.3 VHDL 的运算符

类别运算符操作数类型结果类型
算术运算符+、-、*、/、**、MOD、REN、ABS整型、实型、物理型与操作数相同
移位运算符SLL、SLA、SRL、SRA、ROL、RORbit、boolean、std_logic 数组与操作数相同
逻辑运算符NOT、AND、OR、NAND、NOR、XORbit、boolean、std_logic与操作数相同
关系运算符=、/=、<、<=、>、>=任何类型TRUE 或 FALSE
连接运算符&数组或数组元素数组

表 8.4.3 中,“* *”为乘方运算, MOD 为取模, REN 为取余, ABS 为取绝对值。

SLL 为逻辑左移, SRL 为逻辑左移, SLA 为算术左移, SRA 为算术右移, ROL 为逻辑循环左移, ROR 为逻辑循环右移。各种移位的意义见于例8.6.4 中。

“/=”表示不等于,“<”表示小于,“>”表示大于。

使用连接运算符 & 可将元素连接起来构成数组,或将数组连接成更大的数组。例如:

则语句 ajb &lt;= a & b; 等价于: ajb(0) &lt;= a; ajb(1) &lt;= b;。

在 VHDL 中,可根据需要对运算符进行重载,即为其再定义处理函数。例如,对 std_logic 型数据进行逻辑与运算时,需对 AND 运算符重载,见例8.5.4。

共 0 题