Язык описания электронной аппаратуры VHDL. Берчун Ю.В. - 19 стр.

UptoLike

Составители: 

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