Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Примеры. тип_индекса определяется следующим образом:




TYPE имя_типа IS

ARRAY ( тип_индекса

[, тип_индекса ] )

OF тип_элемента;

тип_индекса определяется следующим образом:

подтип RANGE <>

где подтип может быть:

INTEGER – индекс находится в диапазоне –(231-1)... 231-1;

NATURAL – индекс находится в диапазоне 0... 231-1;

POSITIVE – индекс находится в диапазоне 1... 231-1;

1) Объявление ограниченного массивного типа:

TYPE word IS ARRAY (31 DOWNTO 0) OF STD_LOGIC;

TYPE register_bank IS ARRAY (byte RANGE 0 TO 132) OF INTEGER;

TYPE memory IS ARRAY (address) OF word; -- двумерный массив

2) Объявление неограниченного массивного типа:

TYPE logic IS ARRAY (INTEGER RANGE <>) OF BOOLEAN;

3) Объявление двумерного массива:

TYPE Reg IS ARRAY (3 DOWNTO 0) OF STD_LOGIC_VECTOR(7 DOWNTO 0);

TYPE transform IS ARRAY (1 TO 4, 1 TO 4) OF BIT;

Как было сказано, в языке имеется несколько предопределенных типов "массив". Их объявления выглядят следующим образом:

TYPE STRING IS ARRAY (POSITIVE RANGE <>) OF CHARACTER;

TYPE BIT_VECTOR IS ARRAY (NATURAL RANGE <>) OF BIT;

TYPE STD_LOGIC_VECTOR IS ARRAY (NATURAL RANGE <>) OF STD_LOGIC;

TYPE STD_ULOGIC_VECTOR IS ARRAY (NATURAL RANGE <>) OF STD_ULOGIC;

Объявление объекта типа "неограниченный массив" должно содержать ограничения на индекс. Диапазон изменения индексов может быть ограничен:

1. с использованием ключевых слов TO или DOWNTO:

TYPE data_memory_type IS ARRAY (INTEGER RANGE <>) OF BIT;

...

VARIABLE data_ memory: data_memory_type(0 TO 255);

2. путем использования диапазона начального значения:

CONSTANT part_id: STRING:="M38006";

СТРОКИ, БИТОВЫЕ СТРОКИ И АГРЕГАТЫ

Строки,битовые строки,агрегаты (strings, bit strings, aggregates) используются для конструирования значений обьектов массивных типов. Они могут использоваться в любом месте, где допускается значение типа массив, например, как начальное значение константы или операнд в выражении.

Строковая запись может быть использована для представления значений как объектов некоторых предопределенных типов (string, bit_vector, std_logic_vector), так и для любого одномерного массива, элементы которого имеют тип character; например:

TYPE bit6 IS ('U', '0', '1', 'F', 'R', 'X');

TYPE bit6_data IS ARRAY (POSITIVE RANGE<>) OF bit6;

...

SIGNAL data_bus: bit6_data(15 DOWNTO 0);

.

.

data_bus <= "UUUUUUUUFFFFFFFF";

VHDL позволяет компактно описывать битовые строки (значение типа bit_vector или std_logic_vector) в базисе 2, 8 и 16. Например:

CONSTANT clear: bit_vector:= B"00_101_010";

CONSTANT empty: bit_vector:= O"052";

CONSTANT null: bit_vector:= X"2A";

Все три константы имеют одно и то же значение. Отметим, что символы подчеркивания могут использоваться в любом месте битовой строки для облегчения чтения. Расширенными цифрами (extended digits) для шестнадцатеричного представления являются буквы от A до F, причем могут использоваться как прописные, так и строчные буквы.

Массивные агрегаты используются для присваивания объектам типа массив значений. Массивные агрегаты формируются при помощи позиционной (positional) записи, поименованной (named) записи или комбинации этих двух форм. Рассмотрим пример.

Предположим, что имеются следующие описания

TYPE ArayType IS ARRAY (1 TO 4) OF CHARACTER;

...

VARIABLE Test: ArrayType;

и требуется, чтобы переменная Test содержала элементы 'f', 'o', 'o', 'd' в указанном порядке.

Позиционная запись имеет вид:

Test:= ('f', 'o', 'o', 'd');

Агрегат в данном случае записывается как список значений элементов, разделенных запятыми. Первое значение назначается элементу с наименьшим значением индекса (крайнему левому).

Поименованная запись имеет вид:

Test:= (1=>'f', 3=>'o', 4=>'d', 2=>'o');

В этом случае агрегат также является списком, элементы которого разделены запятыми, однако элементы списка имеют формат:

позиция => значение

Порядок перечисления элементов при поименованной записи не имеет значения.

Комбинированная запись имеет вид:

Test:= ('f', 'o', 4=>'d', 3=>'o');

В этом случае сначала записываются элементы, присваиваемые с использованием позиционной записи, а оставшиеся элементы присваиваются с использованием поименованной записи.

При формировании агрегата с использованием поименованной (или комбинированной) записи вместо номера позиции можно указывать ключевое слово OTHERS, которое определяет значение для всех элементов, которые еще не были описаны в агрегате. Например

Test:= ('f', 4=>'d', OTHERS=>'0');

Подтипы

Использование подтипов позволяет объявлять объекты, принимающие ограниченный набор значений из диапазона, допустимого для базового типа.

Подтипы применяются в двух случаях:

1) Подтип может ограничить диапазон значений базового скалярного типа (ограничение по диапазону). В этом случае объявление подтипа выглядит следующим образом

SUBTYPE имя_подтипа IS имя_базового_типа RANGE диапазон_индексов;

диапазон_индексов определяется следующим образом:

m TO n

n DOWNTO m

где m, n – целочисленные константы, m <= n.




Поделиться с друзьями:


Дата добавления: 2015-06-30; Просмотров: 323; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.012 сек.