Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Методы и средства для определения массивов (Задание значений элементам массивов)

Читайте также:
  1. A) подстановка фиксированного набора значений
  2. CПЕЦИАЛИЗИРОВАННЫЕ СРЕДСТВА РАЗМЕЩЕНИЯ 1 страница
  3. CПЕЦИАЛИЗИРОВАННЫЕ СРЕДСТВА РАЗМЕЩЕНИЯ 2 страница
  4. CПЕЦИАЛИЗИРОВАННЫЕ СРЕДСТВА РАЗМЕЩЕНИЯ 3 страница
  5. CПЕЦИАЛИЗИРОВАННЫЕ СРЕДСТВА РАЗМЕЩЕНИЯ 4 страница
  6. CПЕЦИАЛИЗИРОВАННЫЕ СРЕДСТВА РАЗМЕЩЕНИЯ 5 страница
  7. CПЕЦИАЛИЗИРОВАННЫЕ СРЕДСТВА РАЗМЕЩЕНИЯ 6 страница

Для того чтобы воспользоваться в программном проекте какой-либо программной величиной (переменной, сигналом, константой), она должна быть объявлена и определена. Это положение же касается и программных величин (переменной, сигнала, константы), когда они имеют составную структуру, т.е. являются массивами. Для определения программных величин такого вида (часто говорят массивов) в языке VHDL используются такие конструкции:

ü Агрегат (aggregate);

ü Сектор (slice).

ü Строка бит;

ü Символьная строка (string);

Эти компоненты не играют самостоятельной роли в языке VHDL. Они являются составными частями конструкциями операторов объявлений составных программных величин.

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

Aggregate.

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

Агрегат чаще всего располагается в правой части операторов присвоения для инициализации и назначения значений сигналам.

Естественно, что конструктивный элемент языка VHDL агрегат целесообразно применять с программными величинами (signal, variable, constant), когда они объявлены как массивы.

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

По своему конструктивному оформлению наипростейший агрегат инициализирующий одномерный массив типа integer из 5 элементов, представляет собой запись, содержащую круглые скобки, внутри которых содержаться значения его элементов, отделенных запятыми: (2, 3, 10, -10, 15);

Наипростейший агрегат инициализирующий одномерный массив типа real содержащий 5 элементов, представляет собой запись, содержащую круглые скобки, внутри которых содержаться значения его элементов, отделенных запятыми: (-2.3, 4.3, 15.6, 78.9, 1.9);

Наипростейший агрегат инициализирующий одномерный массив типа bit_vector или std_logic_vector содержащий 4 элементов, представляет собой запись, содержащую круглые скобки, внутри которых содержаться значения его элементов, отделенных запятыми. Значения самих элементов массива должны быть охвачены апострофами: (‘1’, '0', '0', '1');

Наипростейший агрегат инициализирующий одномерный массив типа character содержащий 6 элементов, представляет собой запись, содержащую круглые скобки, внутри которых содержаться значения его элементов, отделенных запятыми. Значения самих элементов массива должны быть охвачены апострофами: (‘G’, 'k', 'w', 'f', ‘z’, ‘s’);

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

Важно помнить, даже для инициализации сигнал-массивов, когда они объявляются в разделе объявлений тела архитектуры, должна использоваться операция :=. Для сигнал-массивов операция <= используется в разделе выполняемых операторов тела архитектуры.

В языке VHDL применяется два класса ассоциации элементов агрегата с элементами массива:

· Позиционная (списочная) ассоциация;

· Именованная ассоциация.

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

- Ключевое слово others, которое в конструкции агрегата должно быть всегда последним;

- Простое выражение, которое может иметь или позиционное или именованное соответствие

- Комбинацию позиционного или списочного соответствия

- При позиционном соответствии допускается использовать выражения вида: n1 to n2, n4 downto n3, где n1, n2, n3, n4 - номера элементов живого массива и агрегата, между которыми устанавливается соответствие;

- Операцию многократного соответствия, которая читается как “И” и в конструкции агрегата обозначается символом |.

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

Пример 1.

Пусть в программном проекте криптографического процессора имеется объявление переменной вида:

variable Data12: bit_vector (0 to 3);

Эта переменная объявлена посредством предопределенного одномерного массива bit_vector и содержит 4 элемента (4 бита), для которых установлен возрастающий порядок.

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

Data12:= (‘0’, ‘1’, ‘1’, ‘0’); --это агрегат, который является простым по своему конструктивному устройству.

Ассоциация элементов агрегата и битов массива здесь позиционная (списочная). Значения элементов для массива будут взяты из агрегата в порядке их расположения, т.е.:

Data12(0)=0

Data12(1)=1

Data12(2)=1

Data12(3)=0

Пример 2.

Variable Da14:bit_vector(3downto0):= (3=>’0’,2=>’1’,0=>’1’,1=>’1’);

 
 


агрегат

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

Пример 3.

Variable Da_15: std_logic_vector(7 downto 0):= (‘0’,’x’,’1’,’1’, 2=>’w’,3=>’0’,1=>’z’,0=>’1’);

       
   


Спичное соответствий Именованное соответствие

 

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

7 бит = 0

6 бит = x

5 бит = 1

4 бит = 1

3 бит = 0

2 бит = w

1 бит = z

0 бит = 1

Этот агрегат является простым по конструктивному устройству. Однако он содержит как позиционный (списочный) способ ассоциации, так и именованный способ. При таком варианте оформления агрегата сначала должен использоваться вариант списочного, а затем именованного соответствия.

Пример 4.

Signal Da_16: std_logic_vector (7 downto 0) <=(‘0’, ’x’,

5 downto 2=>’z’, 1=>’1’, 0=>’x’);

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

7 бит = 0

6 бит = x

5-2 бит = z

1 бит = 1

0 бит = x

Пример 5.

Type Da_int4 is array (natural range <>) of integer;

Signal Da_16: Da_int4(0 to 3):=(7, 26, -39, 67);

Одномерный Массив Da_16 типа Da_int4, содержащий 4-ре элемента инициализирован агрегатом посредством списочного соответствия. Нумерация элементов (индексация) начинается с нуля.

В этом примере элементам массива будут назначены такие значения:

0 элем = 7

1 элем = 26

3 элем = -39

4 элем = 67

Пример 6.

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

Signal Da_16: Da_float3_4:= ((2.3, 6.8, -4.7, 5.0),

(11.7, 2.8, 3=>5.2, 2=>6.8),

(12.9, others=>-1.2));

Здесь объявлен двухмерный вещественный пользовательский массив Da_float3_4 содержащий 3-ри строки и 4-ре столбца. Затем объявляется программная величина Da_16 как массив типа Da_float3_4. Следовательно, программная величина Da_16, будет являться двухмерным массивом, содержащим три строки и четыре столбца. Элементы этого массива являются числами типа real. Для инициализации этого массива используется комплексный агрегат. В этом агрегате каждая строка содержит свой подагрегат. Каждый подагрегат использует свой способ ассоциации. Подагрегаты заключаются в круглые скобки иотделяются друг от друга запятыми. В данном примере элементы двухмерного массива Da _16 будут такими:

2.3 6.8 -4.7 5.0

11.7 2.8 6.8 5.2

12.9 -1.2 -1.2 -1.2

Пример 7.

Signal Data_bus:std_logic_vector(15 downto 0);

Data_Bus<=(‘1’, ‘0’, 13 downto 6=> ’1’, 5 downto 0=> ’z’);

       
   
 


Списочная ассоциация Именованная ассоциация с указанием диапазона

15 бит = 1

14 бит = 0

13-6 бит = 1

5-0 бит = z

Пример 8.

Signal Data_bus15:std_logic_vector(15 downto 0);

Data_Bus15<=(13 downto 7=>’0’, others=>’1’);

В массиве Data_bus15 элементы с 13 по 7 получают значение 0, все остальные (15, 14 и с 6 по 0) – значение 1.

Пример 9.

Этот пример иллюстрирует пример многократного соответствия (назначения), т.е. использование операции многократного назначения, которая обозначается символом | (Символ вертикальная черта).

Signal Data_bus15:std_logic_vector(0to15);

Data_Bus15<=(0|1|2|3 to 7=> ’1’, 6=>’z’, others=>’x’);

многократное соответствие именован. Соотв. соответствие others

В этом случае элементы массива:

0, 1, 2 и с 3 по 7 = 1

6 элем. = z

остальные = x

СЕКТОР (slice).

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

В литературе по языку VHDL можно встретить определение понятия сектор: сектор – это подмассив уже существующего (определенного) массива, который (сектор) может включать в свой состав от одного элемента, взятого из родительского массива, до всех элементов из родительского массива.

Идентификатор (имя) сектора должно совпадать с идентификатором родительского массива.

Сектор должен использоваться в том же качестве, как и родительский массив. Так, например, если родительский массив имеет тип signal, то и сектор должен использоваться в VHDL программе как signal.

Пусть имеется определение родительского массива вида:

Signal Da_bus: bit_vector (31 downto 0);

Из этого родительского массива мы можем организовать несколько секторов:

Signal Da_bus (31 downto 31); --сектор содержит один элемент (31й элемент)

Signal Da_bus (15 downto 7); --сектор содержит элементы с 15 по 7 из родительского массива.

Важное замечание:

Направление в указаниях диапазонов родительского массива и сектора должны совпадать.

Так, объявление сектора вида Da_bus (13 downto 17); является ошибкой.

 

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


Дата добавления: 2015-10-30; просмотров: 128 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Вводные замечания и классификация массивов| NASA'S Chandra Shows Milky Way is Surrounded by Halo of Hot Gas

mybiblioteka.su - 2015-2024 год. (0.016 сек.)