В зависимости от наличия или отсутствия размерности, объявление типа массива может быть двух видов: — КиберПедия 

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

История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...

В зависимости от наличия или отсутствия размерности, объявление типа массива может быть двух видов:

2022-11-27 33
В зависимости от наличия или отсутствия размерности, объявление типа массива может быть двух видов: 0.00 из 5.00 0 оценок
Заказать работу

1. type type_name is array (range) of element_type;

2. type type_name is array (type range <>) of element_type;

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

· type BYTE is array (7 downto 0) of BIT; -- объявили 8- ми битовый тип

· signal BYT1: BYTE; -- объявили 8-ми битовый массив

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

· type MATRIX is array (POSITIVE range <>) of REAL; -- объявили вектор реальных чисел

· signal MATRIX1: MATRIX(1 to 3); -- объявили вектор из трех реальных чисел

Можно ли обойтись без массивов в VHDL? Можно. Но чем крупнее проект, тем проще Вам будет с массивами, нежели без них. Вот несколько примеров применения массивов - всевозможные шины, регистры, счетчики, сумматоры, ОЗУ, ПЗУ и т. д. и т. п. И чем больше разрядность этих устройств, тем сложнее обойтись без массивов.

ОПЕРАЦИИ В ЯЗЫКЕ VHDL

... операция: действие, воздействие, деятельность, сделка, поход, кампания, дело, дельце...

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

· логические операции (and, or, nand, nor, xor, xnor);

· операции сравнения (=, /=, <, <=, >, >=);

· операции сдвига (sll, srl, sla, sra, rol, ror);

· операции сложения (+, -, &);

· операции смены знака числа (+, -);

· умножение деление (*, /, mod, rem);

· прочие (**, abs, not)

Отметим, что операции перечислены в порядке увеличения приоритета выполнения (т. е. от низшего к высшему). Ну и как обычно, при равенстве приоритетов, операции выполняются слева направо и скобки дают высший приоритет. Ну и чтоб не было скучно, можем продемонстрировать на простом примере один подводный камень, с которым сталкиваются практически все начинающие разработчики на VHDL. Пусть у нас будет такой VHDL-код:

· signal x, y, z: std_logic;

· ....

· x <= '1' when (y = '1' and z = '0') else '0';

Теперь пусть сигнал х должен управлять чем-либо по if - else, а чтобы сэкономить время на вводе с клавиатуры, копируем выделенное красным и вставляем в следующий VHDL-код:

· if (x <= '1') then

· ...

· else

· ...

· end if;

Вам может показаться это смешным, а бывали случаи, что молодые специалисты по нескольку дней разбирались, почему это у них никогда не выполняется ветка else и потом приходили и говорили, что у них глючит САПР. А с точки зрения психологии, это вполне нормально. Вспомните нашу математику, и Вы поймете, что у нас принято две разные операции – сравнения и присваивания обозначать одним словом «равняется» и одним знаком «=». Кто забыл, напомним такие выражения – "если х равен y" и "х равен y". В английском эти операции разделены на equality и set.

ОПЕРАТОРЫ VHDL

- а кто такие опсосы?
- это операторы сотовой связи.

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

Последовательные операторы в VHDL (не надо путать с последовательной логикой) определяют алгоритмы выполнения подпрограмм и процессов. Они выполняются в том порядке, в каком расположены в VHDL-коде, отсюда и название такое. Одно важное замечание: все последовательные операторы могут использоваться только в теле процесса, функции или процедуры. К последовательным операторам языка VHDL относятся следующие операторы:

· assert (последовательный);

· case;

· exit;

· if;

· loop;

· next;

· null;

· report;

· return;

· wait;

· последовательные операторы присваивания.

Примеры использования последовательных операторов:

· -- Использование операторов loop, next, exit, if, присваивание

· -- Несинтезируемый фрагмент VHDL-кода подсчитывает кол-во несовпадающих бит в двух массивах

· neq:= 0;

· L1: for i in 0 to 31 loop

· next L1 when mem1(i) = mem2(i);

· for j in 7 downto 0 loop

· crash:= 1;

· exit L1 when (mem1(i)(j) = 'X' or mem2(i)(j) = 'X');

· crash:= 0;

· if (mem1(i)(j) /= mem2(i)(j)) then neq:= neq+1;

· end loop;

· end loop L1;

· -- Использование операторов wait, case, if

· -- Синтезируемый фрагмент VHDL-кода управляет состояниями сфетофора

· process begin

· wait until clk;

· if (trig = '1') then

· case state is

· when red => state <= green;

· when green => state <= yellow;

· when yellow => state <= red;

· end case;

· end if;

· end process;

Параллельные операторы в VHDL используются для определения блоков и процессов, которые описывают общее поведение или структуру проекта. Параллельные операторы VHDL, как следует из названия, выполняются (или не выполняются) параллельно друг другу и независимо от расположения в VHDL-коде. К таким операторам относятся:

· assert (параллельный);

· block;

· generate;

· process;

· применение компонентов (port map...);

· параллельные операторы присваивания.

Примеры использования оператора block:

· -- Пример защелки с использованием охранного выражения

· L1: block (LE = '1')

· begin

· Q <= guarded D; -- Выполнится только при LE = '1'

· end block L1;

· -- Пример простых блоков

· BLOCK1: block

· signal Q: std_logic;-- Этот сигнал Q виден только в BLOCK1

· begin

· Q <= A and B;

· end block BLOCK1;

· -----------------------------------

· BLOCK2: block

· signal Q: std_logic;-- Этот сигнал Q виден только в BLOCK2

· begin

· Q <= C and D;

· end block BLOCK2;

· -- Пример вложенных блоков

· BLOCK1: block

· signal Q: std_logic;-- Этот сигнал Q виден в BLOCK1 и в BLOCK2

· begin

· Q <= A and B;

· -----------------------------------

· BLOCK2: block

· signal Q1: std_logic;-- Этот сигнал Q1 виден только в BLOCK2

· begin

· Q1 <= Q and C;

· end block BLOCK2;

· -----------------------------------

· end block BLOCK1;

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


Поделиться с друзьями:

Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...

Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...

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



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.017 с.