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

UptoLike

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

17
Для одномерных массивов определяются две дополнительных операции: вырезка (slicing) и конкатенация
(знак &). Вырезка позволяет выбрать непрерывное подмножество массива. Конкатенация создает большой
массив из двух массивов или из массива и одного значения элементного типа. Все приведенные ниже булевы
выражения имеют значения true.
constant A:bit_vector := "01010";
constant B:bit_vector := "010";
variable S:string (1 to 5);
.
.
.
...A(0)='0' ... -- Элемент выбирается при помощи индекса
...A(3)='1' ...
...A(1 to 3) = "101"... -- Вырез выбирается диапазоном
...B(1 to 2) = A(3 to 4) ...
...A = '0'&"101"&'0'... -- Массив создается конкатенацией
...A = B & "10" ...
S:="AbCdE"; -- Переменной S назначается значение
...S(2) = 'b' ...
...S(4) = 'd' ...
...S(3 to 5) = "CdE"...
S(2 to 4) := "XYZ"; -- Вырезу из S назначается новое значение
...S = "AXYZE"...
Операторы упорядочивания (<,<=,>,>=) являются предопределенными для одномерных массивов с
элементами целого или перечислительного типа. Сравнение производится поэлементно слева-направо до тех
пор, пока не будет обнаружено различие или массивы не будут просмотрены. Необязательно, чтобы массивы
были одинаковой длины; если элементы короткого массива совпадают с начальными элементами длинного
массива, то длинный массив будет считаться больше, чем короткий. Приведенные ниже булевы выражения
являются истинными.
name1 := "Jones";
name2 := "Smith";
...name1 = name1 ...
...name2 < "Smithson"...
count1 :=(2,3,6);
count2 :=(2,3,7);
...count1 <= count2...
...count2>(1,3,7,9)...
Логические операторы, определенные для скаляров типа bit и boolean, могут также использоваться для
одномерных массивов с элементами этих типов (и тесно связанных с ними). Операция выполняется
последовательно над каждым элементом и результатом является массив с элементами, имеющими тот же тип,
что и аргументы. Оба массива должны иметь одну и ту же длину и тип.
signal Areg,Breg:bit_vector(32 downto 0);
type bool_vector is array (natural range <>) of boolean;
signal stage_full,required:bool_vector(1 to 24);
.
.
.
Areg<=Areg xor Breg;
stage_full<=(stage_full(13 to 24) & stage_full(1 to 12))
and required;
Если массивное значение назначается объекту, то число элементов в подтипе должно проверяться в процессе
моделирования. Если размер неправильный, то моделирование будет остановлено и будет выдано
соответствующее сообщение об ошибке.
Например, следующее назначение будет вызывать ошибку во время моделирования.
Areg <= Areg&Breg; -- ОШИБКА: значение выражения не будет
-- переслано в Areg
Для того, чтобы быть назначенным массиву данного подтипа или быть связанным с ним, массивное значение
должно быть корректного базового типа, то есть недостаточно только того, чтобы совпадали типы входящих в
массив элементов.
signal data_reg:bit6_data(0 to 7);
signal address_reg: bit6_address(0 to 7);
.