Читайте также:
|
|
В информатике Массивом обычно называется некоторый упорядоченный набор данных, имеющих одинаковый тип.
Понятие Массив в информатике также часто формулируют таким образом: Массив – это образование (множество), содержащее набор элементов одного и того же типа.
В литературе, связанной с описанием языка VHDL понятие массив определено следующим образом: Массив – это составной программный объект VHDL проекта, элементы которого имеют одинаковый тип.
Существуют различные виды классификации массивов. Наиболее часто для классификации массивов используются такие классификационные характеристики:
· Размерность массива;
· Размер массива;
· Тип массива (Информационный тип).
· Программный тип (constant, variable, signal)
По классификационной характеристике размерность массивы (могут быть) подразделяют на:
Ø Одномерные;
Ø Двухмерные;
Ø N – мерные.
Примечание: язык VHDL оперирует только с одномерными и двухмерными массивами.
В одномерном массиве элементы упорядочиваются по одному измерению. Направление упорядочивания может быть возрастающим (to) и убывающим (downto). При возрастающем способе упорядочения номера элементов изменяются в пределах и направлении от 0 до n. При убывающем способе упорядочения номер элементов изменяются в пределах и направлении от n до 0.
В двухмерном массиве элементы упорядочиваются по двум измерениям (по строкам и столбцам). Направление упорядочивания по каждому измерению может быть или возрастающим или убывающим.
Размерность массива часто ассоциируется с количеством индексов, которое содержится в определении массива. Число индексов, указываемое при определении массива, соответствует размерности массива. Т.е. идентификатор одномерного массива в своем определении будет содержать один индекс, двухмерный массив имеет два индекса, трехмерный – три и т.д.
Адрес каждого элемента в массиве (место расположения элемента в массиве) отождествляется с числовым значением индексов. Значение Индекса обычно является натуральным числом (числом типа natural) или числом типа positive.
Что касается классификационной характеристики размер массива, то в языке VHDL массивы подразделяются на:
ü Ограниченные (constrained);
ü Неограниченными (un constrained)
Эта характеристика определяет конструктивное устройство массива с точки зрения объема хранимой в нем информации. Объем хранимой информации (размер массива) определяется как произведение максимальных значений всех индексов массива (N*M*…….*K).
Массив является ограниченным, если в его измерениях (в связанных с размерностью индексах) значения индексов лежат в заранее ограниченных диапазонах, т. е. принимают значения от: 0 to 20, 30 downto 0.
Массив является неограниченным, если в его измерениях диапазоны изменения значений связанных с ним индексов является явно незаданным, т.е. число элементов в измерении не известно.
Примечание: в VHDL такой массив обычно содержит символы <>.
Заметим, что если пользовательский тип массива является неограниченным, то фактический его размер (конкретные параметры индексов) должен явно задаваться при объявлении программных величин (constant, variable, signal) типа массив.
(**) Относительно классификационной характеристики информационный тип (вид) содержащихся в массиве данных, массивы подразделяются на:
· Битовые;
· Целого типа;
· Вещественные;
· Символьные (строки символов);
· Стандартной логики;
· Signed (Знаковые);
· Unsigned (Беззнаковые).
Битовые массивы содержат элементы, значения которых могут принимать 0 или 1 (или low или high), т.е. быть битом.
Массивы целого типа содержат элементы, значения каждого из которых может быть только целым числом (integer), как положительным, так и отрицательным.
Числа типа integer могут изменяться в диапазоне:
-2 147 483 647 до +2 147 483 647
Массивы вещественного типа содержат элементы, каждый из которых может быть вещественным числом, как положительным, так и отрицательным.
Вещественные числа в свою очередь могут быть представлены в естественной форме (содержать целую и дробную части, разделяемые точкой), так и в экспоненциальной форме. Диапазон значений для элементов массива типа Real может изменяться:
-1.0Е38 до +1.0Е38
Символьные массивы (строка символов) содержат элементы, каждый из которых может быть ASCII символом, т.е. каждый элемент строкового массива имеет тип character.
Массивы стандартной логики содержат элементы, каждый из которых может принимать одно из 9 допустимых значений (U, X, 0, 1, Z, W, L, H, -), т.е. иметь тип std_logic или std_logic_vector.
Знаковые (signed) массивы – содержат элементы, каждый из которых может принимать одно из 9 допустимых значений стандартной логики (std_logic). Обычно эти массивы отождествляются с числами двоичной системы счисления, которые снабжены знаковым разрядом.
Беззнаковые (unsigned) массивы – содержат элементы, каждый из которых может принимать одно из допустимых значений стандартной логики (std_logic). Обычно эти массивы отождествляются с числами двоичной системы счисления, которые не снабжены знаком.
В языке VHDL для массивов используются еще таких две классификационных характеристики (эти характеристики определяют массивы с точки зрения правомочности по отношению к языку VHDL, т.е. с точки зрения введения их в VHDL программу):
- Предопределенные массивы;
- Массивы пользователя.
2. Предопределенные типы массивов.
Предопределенный массив – это массив с заранее описанной разработчиками языка VHDL структурой и типом содержащихся в нем элементов. Некоторые из ранее проклассифицированных массивов описаны в пакетах Standart, Std_logic_1164, Std_logic_arith и Numeric_std.
Пакет Standart библиотеки Std описывает два одномерных неограниченных массива вида (типа):
- Bit_vector;
- String.
Объявления этих типов массивов имеют вид:
type bit_vector isarray (natural range <>) of bit;
один индекс
type string isarray (positive range <>) of character;
один индекс
Пакет Std_logic_1164 объявляет неограниченный одномерный массив типа std_logic_vector. Это объявление имеет вид:
type std_logic_vector isarray (natural range <>) of std_logic;
Пакеты Std_logic_arith и Numeric_std объявляют неограниченные одномерные массивы типов signed и unsigned.
Эти объявления имеют вид:
type signed isarray (natural range <>) of std_logic;
один индекс
type unsigned isarray (positive range <>) of std_logic;
Обратите внимание, что в состав ранее приведенных объявлений входит один и тот же набор ключевых слов. Особо обратите внимание на слова isarray. Эти ключевые слова означают, что слово, стоящее после ключевого слова type становится зарезервированным идентификатором типа, который можно использовать в VHDL программе. Это означает, что любая программная величина (constant, variable, signal), связанная с этим зарезервированным идентификатором типа, является одномерным массивом, имеющим характеристики, определяемые этим зарезервированным идентификатором.
В круглых скобках выше приведенных объявлений содержится информация о количестве индексов и диапазоне их изменения. В конструкции этих объявлений после ключевого слова range стоит пара символов <>. Эта пара символов означает, что диапазон изменения индекса пока не задан. Количество индексов в этих объявлениях составляют 1. Тип значений, которые может принимать индекс, определяется словами natural или positive.
После ключевого слова of указан тип элементов, который может содержать массив.
Как говорилось выше, объявления некоторых одномерных массивов содержаться в пакетах. Поэтому для корректной работы VHDL программ, где используются программные величины указанных типов в заголовке программы должны содержаться имена библиотек и пакетов, которые содержат описания этих предопределенных массивов.
Для корректной работы VHDL программы, которая использует указанные выше предопределенные типы массивов, пользователю необходимо самому определить диапазон изменения индекса массива при объявлении программных величин.
Итак, если мы желаем использовать в программном проекте величину, связанную с одним из одномерных предопределенных массивов, мы должны сделать в программе записи вида:
signal masha: string (1 to 56)
тип прогр.величины имя величины структура этой величины
constant pas1: bit_vector (7 downto 0);
constant message1: string (0 downto 70);
variable perem1: std_logic_vector (0 to 15);
signal DataBus: unsigned (0 to 31);
Важное замечание: В языке VHDL с термином одномерный массив часть отождествляется термин vector. Другими словами, vector – это синоним для одномерного массива. Этот термин часто используется при работе с массивами типов:. bit_vector, std_logic_vector.
3. Массивы пользователя.
Язык VHDL дает возможность пользователю самому объявить и определить любой тип для формирования характеристик массивов. Причин для самостоятельного объявления пользователем массива может быть несколько:
· Отсутствует определение типа массива в библиотечных пакетах;
· Не нравится идентификатор типа массива, который объявлен в пакете.
· Уменьшить аппаратные затраты при реализации проекта
Если просмотреть более внимательно списочный состав типов массивов, приведенных в подразделе ** (стр.2), то нужно заметить, что ни в одном из пакетов языка VHDL нет объявления одномерных массивов целого типа и вещественного типа.
Отсутствуют объявления двухмерных массивов всех указанных в подразделе ** типов.
А именно эти разновидности массивов часто приходиться использовать при построении VHDL проектов криптографических процессоров.
Конструкция объявления одномерного массива пользовательского типа имеет такой вид:
type (имя пользов.типа) isarray (диапазон измен.индекса) of тип содержащихся в нем элементов;
Конструкция объявления двухмерного массива пользовательского типа имеет такой вид:
type (имя пользов.типа) isarray (диапазон измен.индекса 1-го измерения; диапазон измен.индекса 2-го измерения;) of тип содержащихся в нем элементов;
4. Примеры оформления объявлений пользовательских массивов:
Пример 1.
Пусть для работы нашей программы нужно организовать одномерный массив, содержащий 5 элементов типа integer. Для этого нужно объявить пользовательский тип массива с указанием того, что он будет содержать элементы типа integer:
type mas_int is array (0 to 4) of integer;
Теперь, используя имя объявленного типа можно с помощью его объявить программные величины (constant, variable, signal) как массивы:
Signal sig_mas: mas_int;
Эта запись означает, что в нашей VHDL программе мы используем программную величину Signal, которая имеет имя (идентификатор) sig_mas и эта величина является массивом типа mas_int. Другими словами, эта величина является одномерным (в круглых скобках один индекс) массивом, содержащим 5 элементов. Нумерация начинается с 0 и заканчивается 4 (range 0 to 4), элементами этого массива являются integer числа.
Пример 2.
type BYTE12 is array (0 to 7) of bit;
имя пользов. типа один индекс *
constant const12: BYTE;
Последнюю запись следует понимать так:
В VHDL программе планируется использовать программную величину constant с именем const12, которая имеет пользовательский тип BYTE12 и является одномерным массивом, содержащим 8 элементов, нумерация элементов начинается с 0 и заканчивается 7, элементы этого массива имеют тип bit.
Примечание: Программную величину constant const12 мы могли бы определить, используя предопределенный тип bit_vector (0 to 7):
constant const12: bit_vector (0 to 7);
Пара строк примера 2, помеченная * и последняя строка примечания являются абсолютно эквивалентными с точки зрения функционирования программы.
Пример 3.
type mas1 is array (0 to 7) of character;
signal mas2_sig: mas1;
Пример 4.
В этом примере объявляется двухмерный символьный массив, содержащий 8-м строк и 16-ть столбцов. Затем этим
type mas2x is array (0 to 7; 0 to 15) of character;
variable mas2x_var: mas2x;
Дата добавления: 2015-10-30; просмотров: 147 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Пересечение прямой и поверхности. | | | Методы и средства для определения массивов (Задание значений элементам массивов) |