Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lekz5_massiv.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
121 Кб
Скачать
☆

6. Инициализация (задание) начальных значений массивов типов bit_vector и std_logic_vector посредством строки бит.

Строка бит в языке VHDL – это образование, которое состоит из множества допустимых значений в указанных типах и которое охвачено двойными кавычками.

“1101101”  строка бит для типа bit_vector

“10zu1h0”  строка бит для типа std_logic_vector

При инициализации массивов строкой бит реализуется списочный метод соответствия. Причем число бит в строке должно точно соответствовать количеству элементов в массиве.

Пример 10.

Signal Da_inbv: bit_vector (0 to 7);

Da_inbv <= “10100011”;

В этом массиве биты:

0, 2, 6, 7 –> 1

1, 3, 4, 5  0

Пример 11.

Variable Da_instd: std_logoc_vector (0 to 3);

Da_instd <= “z,1,x,h”;

В этом массиве биты:

0  z

1  1

2  x

3 h

7. Инициализация (задание) начальных значений символьных типов массивов посредством символьной строки.

В языке VHDL символьная строка – это образование, содержащее любой набор ASCII символов, который охвачен двойными кавычками.

“Masha12”  строка бит

“shzur148”  строка бит

Важно помнить, что при инициализации символьного массива символьной строкой, число символов в строке должно строго соответствовать числу элементов в массиве.

Пример 12.

Signal mass : string (0 to 7);

mass <= “shutov!!”;

Пример 13.

type mas_ch is array (0 to 5) of character;

signal mas1_ch : mas_ch := “papasa”;

Пример 14.

type mas_ch2m is array (0 to 3, 0 to 4) of character;

s ignal mass2m: mas_ch2m := ((“Mama”),

(“Mila”), агрегат из символьн.строк

(“Ramu”));

В этом примере объявлен пользовательский тип массива mas_ch2m , который определяет характеристики для будущих двухмерных массивов программных величин. Этим типом объявлена переменная mass2m , которая является двухмерным массивом, содержащим 3 строки и 4 столбца.

Массив mass2m инициализирован агрегатом, содержащим три символьные строки.

В пределах символьных строк ассоциация элементов является списочной.

Элементы массива mass2m получают значения:

M a m a

M i l a

R a m u

Пример 15.

type mas_ch2m is array (positive range<>, positive range <>) of character;

signal sig1_mas2: mas_ch2m(1 to 3, 1 to 4)<= ((‘f’,’a’,’s’,’t’),

(‘a’,’b’,’d’,’e’),

(‘L’,’N’,’M’,’K’));

Этот двумерный символьный массив проинициализирован с помощью комплексного агрегата, который содержит три подагрегата.

В подагрегатах принят списочный способ соответствия.

f a s t

a b d e

L M N K

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

При программном формировании значений элементов массивов идентификатор уже объявленного массива должен располагаться в разделе выполняемых операторов тела архитектуры или в разделе выполняемых операторов тела явно заданного оператора process и быть конструктивным элементом левой части оператора назначения значения сигналу или быть конструктивным элементом левой части оператора присвоения значений переменной.

Идентификатор массива при этом должен снабжаться числовыми или символьными индексами. Индексы массива должны располагаться в круглых скобках и для случая двухмерного массива отделяться друг от друга запятой. С помощь индексов мы адресуемся к конкретным номерам элементов массива, т.е. фактически выбираем отдельный элемент, которому следует назначить значение.

Заметим, символьные индексы обычно используются, когда значения элементов массива формируются в теле оператора цикла. Следует помнить, что в такой ситуации индексы в массиве должны быть символьными и идентификаторы индексов в массиве должны совпадать с идентификаторами переменных цикла.

Числовые значения индексов обычно применяются, когда требуется сформировать значение для отдельного элемента массива.

Примеры:

Пример 1.

Пусть в разделе объявлений тела архитектуры был декларирован двухмерный массив вещественного типа вида:

Type Da_float3_4 is array (0 to 2, 0 to 3) of real;

В разделе объявлений тела архитектуры пусть также был декларирован двухмерный массив-сигнал вещественного типа вида Da_float3_4:

Signal Da_16: Da_float3_4;

Пусть требуется сформировать значения элементов сигнал-массива программным способом. Эту процедуру можно реализовать в разделе выполняемых операторов тела оператора process, размесив идентификатор сигнал-массива в теле операторов цикла for…loop. Программный код проекта, с учетом приведенных выше условий, может иметь такой вид:

library IEEE;

use IEEE.STD_LOGIC_1164.all;

entity form_mass is

port( s1_in : in real range 0.1 to 128.9;

clock : in STD_LOGIC;

s2_out : out real range 0.0 to 12568.9);

end form_mass;

architecture form_mass_ar of form_mass is

Type Da_float3_4 is array (0 to 2, 0 to 3) of real;

Signal Da_16: Da_float3_4;

begin

process(clock)

begin

z1 : for i in 0 to 2 loop

z2 : for j in 0 to 3 loop Da_16(i,j) <= 4.56 * s1_in; s2_out <= Da_16(i,j);

end loop z2;

end loop z1;

end process;

end form_mass_ar;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]