|
(1) 数组
数组是同构复合类型,也就是说,数组的各个元素具有同一类型。数组可以是一维、二维或多维的。每一维含有一个类型,并且必须是离散类型(整数类型或枚举类型)。数组类型的定义可以是限定性的,或者是非限定性的。限定性数组的定义指定了数组的上下界,而非限定性数组则并不指定上下界。这种可以定义大小不确定的对象的功能在接口表中十分有用。例如,可以定义一个具有位数可变的端口的实体,使得一个实体可以代表或8位、或16位、或32位的移位寄存器。其位数取决于对应于该非限定性端口的实际数组信号的范围。
在限定性数组的定义中,每维的类型和范围以离散范围的形式指定。表示离散范围的形式有两种。第一种是简单的范围声明,其结构与整数或实数类型定义中的范围限制相同。
type Word is array (15 downto
1) of Bit;
type Severity_level_states is array (Note to
Faiture) of Integer;
离散范围的第二种形式是子类型标记。子类型标记含一个类型名,其后可以跟一个范围限制。下面,我们给出两个整数类型Column和Row的定义,然后定义两个以子类型标记表示的二维限定性数组类型。在Matrix类型中,子类型标记只含类型名Column和Row;该数组2个维的范围分别是1到
24和1到 80。在Reduced_matrix类型中,子类型标记跟有范围限制的类型名Column和Row,该类型的范围是1到10和1到40。
type Column is range l to 80;
type Row is range l to 24;
type Matrix is array (row, column) of Boolean;
type Reduced_matrix is array
(Row range 1 to 10,Column range l to 40) of
Booleanl;
非限定性数组类型给出了每维的类型,但并末指定每维的准确范围和方向。因此,数组的大小并未指定,使用记号range <>。
type Screen is array (Integer range <>,Integer
range <>) of Pixel;
--Pixel在其他地方定义。
VHDL有两种预定义的非限定性数组:一个是Bit_Vector,其下标类型的范围是自然数;另一个是String,其下标类型的范围是正整数.
type Bit_vector is array (Natural range <>)
of Bit;
type String is array (Positive range <>)
of Charaeter;
注意VHDL对Natural和Positive范围的规定,
前者包括0, 后者不包括0。参看教材附录中标准程序包中的定义。
访问数组的某一对象时,可对其整体进行访问,也可以只对它的一个元素进行访问。访问整个数组时只需引用它的名字,而访向数组中的元素时则要引用加下标的名字。加下标的名字是由数组名及其后所跟的括号部分组成,括号中是下标表达式。数组的每一维都有一个下标表达式。加下标的名字所代表的元素的类型就是诙数组的元素类型。例如,数组信号s定义如下:
signal S:Matrix;
用加下标的名字访问信号的一个元素(该元素为布尔类型):
s(1, 1)
s(3, 14)
使用片名可以对一维数组中元素的相邻子集进行访同.一维数组名后附加上一个括在括号中的离散范围,就构成了一个片名。对多维数组不能构造片名。片名的类型与基数组的类型相同。
type Byte is array (7 downto 0) of Bit
;
type Memory is array (0 to 2**16-1) of
Byte;
signal S_byte:Byte;
signal S_memory: Memory;
以下是用片名访问数组信号的相邻元素的例子:
S_byte (3 downto 1) --三个元素的片
S_memory (2**15-l to 2**16-1) --2**15个Byte元素的片
S_memory (0) (0 downto 0) --一个Bit元素的片
|