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

                                  

Оглавление

  Введение   Классы и объекты   Комментарии   Типы данных   Подробно о std_logic   О массивах в языке VHDL   Операции в языке VHDL   Операторы VHDL   Интерфейс   Архитектура   Процессы   Атрибуты   Подпрограммы VHDL   Библиотеки VHDL   Тестирование   Заключение   Приложение А

Введение

...товарищи, а в каком ключе докладывать.

Язык VHDL был разработан в 1983 г. по заказу МО США для формального описания логических схем на всех этапах разработки электронных систем. Аббревиатура VHDL (Very High Speed Integrated Circuit Hardware Description Language) переводится как язык описания высокоскоростных интегрированных схем.

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

Международный стандарт - IEEE Std 1076-2002 IEEE Standard VHDL Language Reference Manual.

Отечественный стандарт - ГОСТ Р 50754-95 Язык описания аппаратуры цифровых систем VНDL. Описание языка.

И т.д. и т.п. Ничего интересного? Тогда ответьте на вопрос и проверьте себя - можно ли VHDL-выражение 1 заменить выражением 2 и наоборот:

  1. y <= x;

  2. if x = '0' then y <= '0' ; else y <= '1' ; end if ;

Ответ: Честно говоря, для правильного ответа необходимо знать, какой тип данных у объектов х и у. Дело в том, что если мы имеем дело с типом BIT, то выражения вполне идентичны. А теперь посмотрим, что будет, если объекты х и у имеют тип std_logic? Если Вы уже догадались в чем дело, то Вы вполне владеете основами VHDL (или выше того) и можете пропустить дальнейшие рассуждения.

Итак, в VHDL есть несколько типов данных, два из них мы упомянули выше : bit и std_logic. Их множества значений таково:

  • bit :          {'0', '1'};

  • std_logic : { 'U','X','0','1','Z','W','L','H','- ', }

Как видите, объекты типа std_logic могут принимать девять различных значений, а объекты типа bit только два. Теперь рассмотрим такой код:

  •     signal x, y : std_logic;

  •     if x = 'U' then y <= 'U' ;

  • elsif x = 'X' then y <= 'X' ;

  • elsif x = '0' then y <= '0' ;

  • elsif x = '1' then y <= '1' ;

  • elsif x = 'Z' then y <= 'Z' ;

  • elsif x = 'W' then y <= 'W' ;

  • elsif x = 'L' then y <= 'L' ;

  • elsif x = 'H' then y <= 'H' ;

  • elsif x = '- ' then y <= '- ' ;

  • end if ;

Вышеприведенный VHDL код теперь идентичен выражению 1 для типа std_logic. Надеюсь теперь понятен смысл задачки, решенной нами. Ну вообще-то они не совсем идентичны, если мы будем синтезировать эти выражения. Тут все будет зависеть от способов оптимизации и прочего, но об этом позже. А сейчас перейдем к более подробному рассмотрению языка VHDL.

Классы и объекты

... а вы товарищ из буржуев будете? Или пролетарий?

В отличие от приплюснутого Си в VHDL не предусмотрена возможность создавать новые классы, они уже встроены и их всего три:

  1. Constant - константа.

  2. Variable - переменная;

  3. Signal - сигнал;

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

Прежде чем использовать какой либо объект, его нужно объявить членом какого-нибудь класса. Например, объявляются три объекта х, у и gnd:

  • constant gnd : bit :='0';

  • variable y : bit;

  • signal z : bit;

Далее мы можем записать следующий VHDL код:

  • y := gnd;

  • z <= y;

Как видите, оператор присваивания для сигналов отличается от аналогичных для объектов других классов. Этот код дан для примера т.к. мы спокойно можем написать z <= gnd; или еще проще - z <= '0'; Без первых двух классов можно обойтись в любом синтезируемом проекте, а без класса signal - вряд ли.

Давайте разберемся. Первое - после объявления константы должно быть её определение (constant const : bit :='1';) Константы могут объявляться в интерфейсах, архитектурах, процессах, процедурах и функциях. Если символов ":=" нет в декларации константы, то константа называется задержанной. Такие константы могут быть в разделе деклараций пакета. Соответствующая полная декларация должна быть в теле пакета. Второе - сигналы объявляются в области объявлений архитектурного тела и видны во всем этом теле или в области объявлений интерфейса, тогда они видны во всех архитектурах, использующих данный интерфейс. Порты по умолчанию являются сигналами. Третье - переменные объявляются в области деклараций процесса, функции или процедуры и видны только там. Правда есть возможность сделать переменную глобальной, - это объявить ее в архитектуре или в интерфейсе следующим VHDL-кодом:

  • shared variable y : bit;

Да и еще, переменным можно задавать начальное значение при объявлении:

  • variable y : bit:='1';

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