8.4.1 VHDL中的属性
Section titled “8.4.1 VHDL中的属性”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 语句中的循环控制变量。
(2) 数组的常用属性
Section titled “(2) 数组的常用属性”例如,用语句“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 |
(3) 信号的常用属性
Section titled “(3) 信号的常用属性”例如,用语句“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.2 VHDL中的运算符
Section titled “8.4.2 VHDL中的运算符”表 8.4.3 列出了 VHDL 预定义的运算符号、操作数的数据类型、运算结果的数据类型。
表 8.4.3 VHDL 的运算符
| 类别 | 运算符 | 操作数类型 | 结果类型 |
| 算术运算符 | +、-、*、/、**、MOD、REN、ABS | 整型、实型、物理型 | 与操作数相同 |
| 移位运算符 | SLL、SLA、SRL、SRA、ROL、ROR | bit、boolean、std_logic 数组 | 与操作数相同 |
| 逻辑运算符 | NOT、AND、OR、NAND、NOR、XOR | bit、boolean、std_logic | 与操作数相同 |
| 关系运算符 | =、/=、<、<=、>、>= | 任何类型 | TRUE 或 FALSE |
| 连接运算符 | & | 数组或数组元素 | 数组 |
表 8.4.3 中,“* *”为乘方运算, MOD 为取模, REN 为取余, ABS 为取绝对值。
SLL 为逻辑左移, SRL 为逻辑左移, SLA 为算术左移, SRA 为算术右移, ROL 为逻辑循环左移, ROR 为逻辑循环右移。各种移位的意义见于例8.6.4 中。
“/=”表示不等于,“<”表示小于,“>”表示大于。
使用连接运算符 & 可将元素连接起来构成数组,或将数组连接成更大的数组。例如:
则语句 ajb <= a & b; 等价于: ajb(0) <= a; ajb(1) <= b;。在 VHDL 中,可根据需要对运算符进行重载,即为其再定义处理函数。例如,对 std_logic 型数据进行逻辑与运算时,需对 AND 运算符重载,见例8.5.4。