Составители:
19
явлением неограниченного массива. В этом случае определяется не диапазон значений ин-
декса, а только тип индексной переменной. Такое определение предполагает задание диапа-
зона при определении конкретного экземпляра объекта, относимого к такому типу, напри-
мер, при вызове подпрограмм. В подобных случаях диапазон устанавливается динамически в
соответствии с диапазоном подставляемого фактического параметра.
Примеры:
type ram1 is array (length-1 downto 0) of integer range 2**width-l downto 0;
type ram2 is array (length-1 downto 0,width-1 downto 0) of std_logic;
type ram3 is array (integer range<>, integer range<>) of std_logic;
Во всех приведенных декларациях объявляется в сущности одно и то же, а именно —
матрица ячеек памяти емкостью
length слов по width разрядов в каждом, причем предпо-
лагается, что эти параметры были ранее определены. Однако выполнено это разными спосо-
бами, а значит, и ссылаться на эти типы следует по-разному,
ram1 и ram2 определены как
ограниченные типы массивов, ram1— как одномерный массив целых, а ram2 — как дву-
мерный массив битов;
ram3 определен как неограниченный тип и требует задания границ
индексов при декларации объектов выбранного типа.
Декларации объектов, принадлежащих приведенным типам, могут выглядеть следую-
щим образом:
variable ram1_instance: ram1;
variable ram2_instance: ram2;
variable ram3_instance: ram3 (length-1 downto 0, width-1 downto 0);
При обращении к элементам массива в программе индексы помещаются в скобках сле-
дом за именем массива. Тип индексного выражения должен соответствовать типу индекса,
объявленного при декларации типа массива. При обращении к элементу многомерного мас-
сива индексные выражения записываются через запятые в порядке, определенном в деклара-
ции типа.
Для одномерных массивов определено
несколько групповых операций, в которых мас-
сив рассматривается как единое целое. Это, прежде всего, операция конкатенации
& (объе-
динение строк). Например, приведенная ниже последовательность операторов присваивает
сигналу
b значение "11011001".
а := "1001";
Ь <= "1101" & а;
Здесь a и b — строки или битовые векторы, причем a — переменная, а b — сигнал.
Операции сдвига определены для одномерных массивов типа
bit или boolean и за-
писываются следующим образом:
<имя массива> <символ операции сдвига> <целое>
В VHDL'93 определены следующие операции сдвига (в VHDL'87 их нет):
9 логические сдвиги влево и вправо
sll и srl;
9 арифметические сдвиги влево и вправо
sla и sra;
9 циклические сдвиги влево и вправо
rol и ror.
явлением неограниченного массива. В этом случае определяется не диапазон значений ин- декса, а только тип индексной переменной. Такое определение предполагает задание диапа- зона при определении конкретного экземпляра объекта, относимого к такому типу, напри- мер, при вызове подпрограмм. В подобных случаях диапазон устанавливается динамически в соответствии с диапазоном подставляемого фактического параметра. Примеры: type ram1 is array (length-1 downto 0) of integer range 2**width-l downto 0; type ram2 is array (length-1 downto 0,width-1 downto 0) of std_logic; type ram3 is array (integer range<>, integer range<>) of std_logic; Во всех приведенных декларациях объявляется в сущности одно и то же, а именно — матрица ячеек памяти емкостью length слов по width разрядов в каждом, причем предпо- лагается, что эти параметры были ранее определены. Однако выполнено это разными спосо- бами, а значит, и ссылаться на эти типы следует по-разному, ram1 и ram2 определены как ограниченные типы массивов, ram1— как одномерный массив целых, а ram2 — как дву- мерный массив битов; ram3 определен как неограниченный тип и требует задания границ индексов при декларации объектов выбранного типа. Декларации объектов, принадлежащих приведенным типам, могут выглядеть следую- щим образом: variable ram1_instance: ram1; variable ram2_instance: ram2; variable ram3_instance: ram3 (length-1 downto 0, width-1 downto 0); При обращении к элементам массива в программе индексы помещаются в скобках сле- дом за именем массива. Тип индексного выражения должен соответствовать типу индекса, объявленного при декларации типа массива. При обращении к элементу многомерного мас- сива индексные выражения записываются через запятые в порядке, определенном в деклара- ции типа. Для одномерных массивов определено несколько групповых операций, в которых мас- сив рассматривается как единое целое. Это, прежде всего, операция конкатенации & (объе- динение строк). Например, приведенная ниже последовательность операторов присваивает сигналу b значение "11011001". а := "1001"; Ь <= "1101" & а; Здесь a и b — строки или битовые векторы, причем a — переменная, а b — сигнал. Операции сдвига определены для одномерных массивов типа bit или boolean и за- писываются следующим образом: <имя массива> <символ операции сдвига> <целое> В VHDL'93 определены следующие операции сдвига (в VHDL'87 их нет): 9 логические сдвиги влево и вправо sll и srl; 9 арифметические сдвиги влево и вправо sla и sra; 9 циклические сдвиги влево и вправо rol и ror. 19
Страницы
- « первая
- ‹ предыдущая
- …
- 17
- 18
- 19
- 20
- 21
- …
- следующая ›
- последняя »