Применение языка VHDL при проектировании специализированных СБИС. Ивченко В.Г. - 15 стр.

UptoLike

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

16
signal data_bus:bit6_data(15 downto 0);
.
.
.
data_bus<="UUUUUUUUFFFFFFFF";
Замечание. Не следует путать запись символа (например, 'A') с записью строки, представляющей массив
длиной 1 (например, "A").
VHDL позволяет компактно описывать битовые строки (значение типа bit 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) записи или комбинации этих двух форм. Рассмотрим несколько примеров.
Позиционная форма записи:
сonstant clear:bit_vector:=('0','0','1','0','1','0','1','0');
constant mos_delay:transition_delay :=
-- 'U' '0' '1' 'F' 'R' 'X' --второй индекс
-- --первый индекс
( (0ns, 4ns, 5ns, 3ns, 5ns, 0ns), --'U'
(5ns, 0ns, 5ns, 3ns, 5ns, 0ns), --'0'
(5ns, 4ns, 0ns, 3ns, 5ns, 0ns), --'1'
(5ns, 4ns, 5ns, 0ns, 5ns, 0ns), --'F'
(5ns, 4ns, 5ns, 3ns, 0ns, 0ns), --'R'
(5ns, 4ns, 5ns, 3ns, 5ns, 0ns)) --'X'
Поименованная форма записи:
parts_per_color <= (green => 3,indigo => 10,blue => 5);
square := (1 to 10 => (1 to 10 => 0.0));
Комбинированная форма записи:
unit <= ( (1 => 1.0, others => 0.0),(2 => 1.0 others =>0.0),
(3 => 1.0, others => 0.0),(4 => 1.0 others => 0.0));
Это новое объявление для clear имеет точно тот же смысл, что и предыдущее. Агрегат записывается, как
список значений элементов, разделенных запятыми. Первое значение элемента назначается элементу с самым
левым значением индекса и затем эта операция выполняется в порядке слева-направо. Значением элемента
может быть произвольное выражение.
Константе mos_delay в процессе инициализации присваивается значение массива времен перехода между
состояниями. Агрегат состоит из списка строковых значений, разделенных запятыми. Каждое строковое
значение само представляется в форме агрегата. Заметим, что последнее предписание на изменение массива
наиболее быстрое.
Сигналу parts_per_color присваивается значение с использованием поименованной, а не позиционной формы
записи.
В этом случае агрегат также является списком, элементы которого разделены запятыми, но в то же время
каждый элемент списка состоит из выбора значения индекса, правой стрелки и значения, которое должно быть
назначено выбранному элементу массива. Значения индекса нет необходимости представлять в порядке,
соответствующем типу, так как каждое значение индекса явно поименовано.
Все элементы в square будут иметь значения 0.0 после выполнения назначения. Вложенные агрегаты
порождают сложное значение, имеющее значение 0.0 во всех строковых элементах с индексами от1 до 10. Затем
это сложное значение назначается каждой строке массива.
Сигналу unit будет назначено значение 1.0 для всех элементов, находящихся на главной диагонали, нуль для
всех других элементов. Поименованная запись используется для выбора одной индексной позиции и присвоения
значения элементу в каждой строке. Для остальной части строки используется операция выбора others. Во
втором измерении массива unit назначение производится при помощи позиционной записи.
Операции над массивами
Массив может появляться в выражении во множестве случаев. Элемент массива выбирается путем задания
значений индексов для каждой индексной позиции. Два массива так же, как два значения одного типа, можно
сравнивать, используя операторы равенства и неравенства. Результат будет булевого типа.