|
(3) 聚集与字符串
复合类型的数值可以用聚集表示法给出。一个聚集是一个用圆括号括起来的元素关联表,每个元素关联指定了数组或记录的一个元素的数值。元素关联以逗号分隔。下面给出复合类型的定义,以及这些类型的聚集形式。
下面是类型Rational的声明:
type Rational is record
Numerator: Integer;
Denominator: Integer;
end record;
下面是Rational类型的信号R的聚集举例:
R <= (155,2077) ;
R.Numerator的值为155,R.Denominator的值为2077.
下面是类型Conversion_array的声明:
type Clock_level is (Low,Rising,High,Falling);
type Conversion_array is array (Clock_level) of
Bit;
下面是Conversion_array类型的变量C的聚集举例:
C := ('0', '1', '1', '0');
C(Low) = '0'; C(Rising)
= '1'; C(High) = '1'; C(Falling) = '0';
关联表中的关联元素有两种表示法:位置关联表示法与名字关联表示法。上例中的聚集形式是用位置关联给出的,每个元素关联到复合类型元素的对应关系以从左至右的顺序隐式地给出。而在名字关联中,这种对应关系是通过记录类型元素的域名或数组类型的下标值而显式地给出。下面所给的以名字关联表示的聚集与上面的聚集等价;
(Numerator =>155,Denominator => 2077);
(Denominator =>2077,Numerator => 155);
(Low => '0',Rising => '1',High => '1',Failing => '0');
(High => '1',Rising => '1',Failing => '0',Low => '0');
在名字关联中,箭头左边的记录元素名或数组下标值称为选项。如果有若干个元素关联指定同一个值,那么,可以将这些元素关联合并为一个,这时,用竖杠(
| )把这些赋以相同数值的选项合并起来。例如:
(Low => '0',Rising => '1',High => '1',Failing => '0');
等价于
(Low | Falling => '0',Rising | High => '1')
而
(Numerator => 1,Denominetor=> 1)
等价于
(Numerator | Denominator=> 1)
无论是在记录聚集还是在数组聚集中,都可以用保留字others来表示所有剩余的选项(即到目前为止还未指定的选项)。
constant One: Rational := (others => 1);
constant Is_decimal_digit: Hex_index := ( '0' to '9'=>True,
others=>False);
variable Hex_value: Eight_digit := (others => '0');
VHDL可使用一种特殊的表示--字符串文字量,用以表示其元素类型是字符文字量的枚举类型的一维数组的值。下例给出了使用字符串文字量指定一个一维数组的值的方法。
type Four_level_logic is ('x', '0', '1', 'z'):
type Pair is array (1 downto 0) of Four_level_logic;
constant Reset: Pair := "0z"; -- 等价于 (1=> '0',
0=> 'z')
constant Clear: pair := "z0"; -- 等价于 (1=> 'z',
0=> '0')
|