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

UptoLike

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

14
типе boolean равен 1; позиционный номер '1' в типе character равен 49 (в соответствии с его ASCII кодом);
позиционный номер элемента '1' в типе bit равен 1.
Позиционные номера определяют упорядоченность значений типа. Выражение отношения 'A'<'Z' (со
значением true) имеет смысл, потому что 65 (позиционный номер элемента 'A' в типе character меньше, чем
позиционный номер 'Z', равный 90). Имеет также смысл говорить о последователях и предшественниках
элемента; '1' следует за '0' в типе bit, а yellow предшествует green в типе color.
Функционально-значные атрибуты 'pos и 'val используются для преобразования значения типа в
соответствующий позиционный номер и наоборот. Ниже приведены выражения, результат которых булевого
типа и равен true.
...severity'pos(ERROR)=3...
...color'val(3)=green...
...color'val(severity'pos(ERROR))=green...
Функции 'pred и 'succ возвращают элементы, чьи позиционные номера на единицу больше или на единицу
меньше, чем у аргумента.
...color'succ(orange) = yellow ...
...color'pred(indigo) = blue ...
...bit'succ('1')... --
-- ОШИБКА: 'succ не определен для bit'high
Рассмотрим подтипы типа, использующие общие позиционные номера, а также функции 'succ и 'pred c
общим родителем:
subtype reverse_caps is character range 'Z' downto 'A';
variable backward:reverse_caps;
variable forward: character;
.
.
.
...character'pos('H')=72...
...reverse_caps'pos('H')=72...
.
.
.
forward:=backward;
...character'succ(forward)=reverse_caps'succ(backward) ...
Кроме того, определяются две добавочных функции, учитывающих направления подтипа. Функция 'rightof
отличается от 'succ, а 'leftof от 'pred в случае, когда подтип имеет убывающий диапазон:
...character'rigtof('B')='C'...
...reverse_caps'rightof('B')='A'...
Все эти функции действительны также для целых и физических типов. Значение целого совпадает с его
позиционным номером; позиционный номер значения физического типа является целым числом,
представляющим соответствующее количество базовых единиц.
if Oranges'pos(Seville) > Apples'pos(McIntosh)...
function"*"(I:current;R:resistance) return voltage is
begin
return
nv*(real(current'pos(I)*real(resistance'pos(R))*1.0-0); end;
1.3.2. Массивы и записи
Каждому индивидуальному скалярному объекту может быть присвоено собственное имя. Эта запись
становится громоздкой, если мы имеем дело с объектами, которые представляются таблицами или на которые
чаще всего ссылаются, как на связанную группу объектов. VHDL обеспечивает два вида составных (composite)
типов, поддерживающих связывание объектов: массивы и записи.
1.3.2.1. Массивы
Массив представляется набором одного или более идентичных элементов, рассматриваемых как одномерный
вектор, двумерная матрица или как произвольная прямоугольная структура более высокой размерности.
Объявление массивного типа может быть объявлением неограниченного или ограниченного массива, или
объявлением массивного подтипа. Любому скаляру из массива может быть присвоено значение, он может
использоваться в выражении или связываться с портом компонента, или быть параметром подпрограммы.
Элемент массива может быть выбран путем задания значения индекса вместе с именем массива. Непрерывная
часть или секция (slice) одномерного массива может быть выбрана целиком путем использования диапазона
вместо индекса. Выражение или возвращаемое значение функции может иметь значение, являющееся массивом.