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

О массивах в языке vhdl

... Районы, кварталы, жилые массивы ...

В разделах "ТИПЫ ДАННЫХ" и "ПОДРОБНО О STD_LOGIC" мы уже встречались с массивами. Как известно, массив — именованный набор однотипных переменных, доступ к которым осуществляется по индексу. Массивы могут быть одномерными и многомерными, что определяется количеством индексов. При использовании массивов в VHDL, разработчику следует учитывать, что синтезаторы обычно не поддерживают многомерные массивы, за исключением массивов векторов. Массив не может состоять из файлов.

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

  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.

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