(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元素的片