Главная страница  Автономные управляющие системы 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 [ 28 ] 29 30 31 32 33 34 35 36 37 38 39 40

4.1. ОБЩИЕ СВЕДЕНИЯ

Языки описания аппаратуры (Hardware Description Languages) являются набором формальных записей, которые могут быть использованы на всех этапах разработки цифровых электронных систем Это возможно вследствие того, что язык легко воспринимается как машиной, так и человеком, он может использоваться на этапах проектирования, верификации, синтеза и тестирования аппаратуры так же, как и для передачи данных о проекте, модификации и сопровождения Наиболее универсальным и распространенным языком описания аппаратуры является VHDL На этом языке возможно как поведенческое, так структурное и потоковое описание цифровых схем

Язык VHDL используется во многих системах для моделирования цифровых схем, проектирования программируемых логических интегральных микросхем, базовых матричных кристаллов, заказных интегральных микросхем

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

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

Помимо скалярных данных можно использовать агрегаты массивы array, в том числе и битовые векторы bit vector, и символьные строки string, записи record, файлы fiie

Последовательно выполняемые (последовательные) операторы VHDL могут использоваться в описании процессов, процедур и функций Их состав включает.

♦ оператор присваивания переменной ( =),

♦ последовательный оператор назначения сигналу (<=),

♦ последовательный оператор утверждения (assert),

♦ условный (if),

♦ выбора (case),

♦ цикла (loop),

♦ пустой оператор (null),

♦ оператор возврата процедуры - функции (return),

♦ оператор последовательного вызова процедуры.

Язык поддерживает концепции пакетного и структурного программирования Сложные операторы заключены в операторные скобки If- end If, process- end process, case- end case, loop- end loop и T. Д

Различаются локальные и глобальные переменные Область видимости локальных переменных ограничена пределами блока (процессного, процедурного, оператора блока, оператора описания архитектуры)

Фрагменты описаний, которые могут независимо анализироваться компилятором и при отсутствии ошибок помещаться в библиотеку проекта (рабочую библиотеку Work), называются проектными пакетами design unit Такими пакетами могут быть объявление интерфейса объекта проекта entity, объявление архитектуры architecture, объявление конфигурации configuration, объявление интерфейса пакета package и объявление тела пакета package body

Модули проекта, в свою очередь, можно разбить на две категории первичные и вторичные К первичным пакетам относятся объявления пакета, объекта проекта, конфигурации К вторичным -

объявление архитектуры, тела пакета Один или несколько модулей проекта могут быть помещены в один файл, называемый файлом проекта (design file)

Каждый проанализированный модуль проекта помещается в библиотеку проекта (design library) и становится библиотечным модулем (library unit)

Каждая библиотека проекта в языке VHDL имеет логическое имя (идентификатор)

По отношению к сеансу работы с VHDL- системой существует два класса рабочих библиотек проекта, рабочие библиотеки и библиотеки ресурсов

Рабочая библиотека - это библиотека WORK, с которой в данном сеансе работает пользователь и в которую помещается пакет, полученный в результате анализа пакета проекта

Библиотека ресурсов - это библиотека, содержащая библиотечные модули, ссылка на которые имеется в анализируемом модуле проекта

В каждый конкретный момент времени пользователь работает с одной рабочей библиотекой и произвольным количеством библиотек ресурсов

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

Так же, как в описаниях проектируемых систем разделяются описания интерфейсов и тел, в VHDL у пакета разделяются описание интерфейса и тела пакета По умолчанию предусмотрено подключение стандартных пакетов STANDART и TEXT 10 Пакет STANDART в частности, содержит описание булевых операций над битовыми данными и битовыми векторами Нестандартные пакеты реализуются пользователями, желающими более точно отобразить свойства описываемых ими объектов Например, можно в пользовательском пакете переопределить логические операции И, ИЛИ и НЕ и перейти от булевого (О, 1) к многозначному (1, О, X, Z) алфавиту моделирования

Проблемно-ориентированная компонента позволяет описывать цифровые системы в привычных разработчику понятиях и терминах Сюда можно отнести

♦ понятие модельного времени now,

♦ данные типа time, позволяющие указывать время задержки в физических единицах,

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

♦ средства объявления объектов entity и их архитектур architecture Если говорить про операторную часть проблемно-ориентированной компоненты, то условно ее можно разделить на средства поведенческого описания аппаратуры (параллельные процессы и средства их взаимодействия), средства потокового описания (описание на уровне межрегистровых передач) - параллельные операторы назначения сигнала (<=) с транспортной transport или инерциальной задержкой передачи сигналов и средства структурного описания объектов (операторы конкретизации компонент с заданием карт портов port map и карт настройки депепс тар, объявление конфигурации и т д )

Параллельные операторы VHDL включают

♦ оператор процесса process,

♦ оператор блока block,

♦ параллельный оператор назначения сигналу <=,



♦ оператор условного назначения сигналу when,

♦ оператор селективного назначения сигналу select,

♦ параллельный оператор утверждения assert,

♦ параллельный оператор вызова процедуры,

♦ оператор конкретизации компоненты port map,

♦ оператор генерации конкретизации generate.

Как видно из этого перечня, последовательные и параллельные операции назначения, вызова процедуры и утверждения различаются контекстно, то есть внутри процессов и процедур они последовательные, внепараллельные

Базовым элементом описания систем на языке VHDL является блок Блок содержит раздел описаний данных и раздел параллельно исполняемых операторов Частным случаем блока является описание архитектуры объекта В рамках описания архитектуры могут использоваться внутренние, вложенные блоки Наряду со всеми преимуществами блочной структуры программы и ее соответствия естественному иерархическому представлению структуры проекта операторы блока языка VHDL позволяют устанавливать условия охраны (запреты) входа в блок Только при истинности значения охранного выражения управление передается в блок и инициирует выполнение операторов его тела

4.2. АЛФАВИТ ЯЗЫКА

Как и любой другой язык программирования, VHDL имеет свой алфавит - набор символов, разрешенных к использованию и воспринимаемых компилятором В алфавит языка входят

1 Латинские строчные и прописные буквы

А, В, ,.,2иа, Ь, ,z

2 Цифры от О до 9

3. Символ подчеркивания (код ASCII номер 95)

Из символов, перечисленных в пп 1-3 (и только из них!) могут конструироваться идентификаторы в программе Кроме того, написание идентификаторов должно подчиняться следующим правилам

♦ идентификатор не может быть зарезервированным словом языка;

♦ идентификатор должен начинаться с буквы,

♦ идентификатор не может заканчиваться символом подчеркивания

♦ идентификатор не может содержать двух последовательных символов подчеркивания

Примеры корректных идентификаторов

cont, с1оск2, full add Примеры некорректных идентификаторов

1 clock, adder, add sub, entity Следует отметить, что прописные и строчные буквы не различаются, т е. идентификаторы clock и CLOCK являются эквивалентными

4. Символ пробел (код 32), символ табуляции (код 9), символ новой строки (коды 10 и 13)

Данные символы являются разделителями слов в конструкциях языка. Количество разделителей не имеет значения Таким образом, следующие выражения для компилятора будут эквивалентны count.=2+2; count := 2 + 2 , count := 2

+ 2;

5 Специальные символы, участвующие в построении

конструкций языка

+ -*/ = <>.,().,# ! 6. Составные символы, воспринимаемые компилятором как один символ. <=>==> =/=

Разделители между элементами составных символов недопустимы

4.2.1. Комментарии

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

4.2.2. Числа

В стандарте языка определены числа как целого, так и вещественного типа Однако средства синтеза ПЛИС допускают применение только целых чисел Целое число в VHDL может быть представлено в одной из четырех систем счисления двоичной, десятичной, восьмеричной и шестнадцатеричной Конкретные форматы написания числовых значений будут описаны далее при рассмотрении различных типов языка.

К разновидности числовых значений можно отнести также битовые строки

4.2.3. Символы

Запись символа представляет собой собственно символ, заключенный в одиночные кавычки Например А, *,

В средствах синтеза ПЛИС область применения символов ограничена использованием их в качестве элементов перечислимых типов

4.2.4. Строки

Строки представляют собой набор символов, заключенных в двойные кавычки Чтобы включить двойную кавычку в строку, необходимо ввести две двойные кавычки Например А string А string in а string А string

4,3. ТИПЫ ДАННЫХ

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

Необходимо отметить, что в данном пособии рассматриваются не все типы данных, определенные в стандарте, а только те, которые поддерживаются средствами синтеза ПЛИС

4.3.1. Простые типы

Следующие простые типы являются предопределенными 1. BOOLEAN (логический) - объекты данного типа могут принимать значения FALSE (ложь) и TRUE (истина)

2 INTEGER (целый) - значения данного типа представляют собой 32-разрядные числа со знаком Объекты типа INTEGER могут содержать значения из диапазона -(2-1)...2-1 (-2147483647 2147483647).

3 BIT (битовый) - представляет один логический бит Объекты данного типа могут содержать значениеО или 1



4. STD LOGIC (битовый) - представляет один бит данных Объекты данного типа могут принимать 9 состояний Данный тип определен стандартом IEEE 1164 для замены типа BIT.

5 STD ULOGIC (битовый) - представляет один бит данных Объекты данного типа могут принимать 9 состояний. Данный тип определен стандартом IEEE 1164 для замены типа BIT (см. Примечание).

6. ENUMERATED (перечислимый) - используется для задания пользовательских типов.

7. SEVERITY LEVEL - перечислимый тип, используется только в операторе ASSERT

8. CHARACTER - символьный тип. Примечание

В действительности тип STD ULOGIC является базовым типом для типа STD LOGIC, т. е объекты обеих типов могут принимать одно и то же множество значений и имеют одинаковый набор допустимых операций. Единственное различив между типами заключается в том, что для типа STD ULOGIC не определена функция разрешения (resolving function) В языке VHDL функция разрвшвния используется для определения значения сигнала, имеющего несколько источников (драйверов).

Пример: Выходы двух буферов с тремя состояниями подключены к одной цепи X. Пусть выход одного буфера установился в состояние Z, а выход другого - в состояние 1. Функция разрешения определяет, что в этом случае значение сигнала X будет равно 1.

Поскольку для типа STD ULOGIC не определена функция разрешения, сигналы этого типа могут иметь только один источник

Далее рассматривается только тип STD LOGIC, однако все сказанное будет справедливо и для типа STD UL0G1C На практике, в подавляющем большинстве случаев достаточно использования типа STD LOGIC

4.3.2. Сложные типы

Из всей совокупности сложных типов, определенных в стандарте языка, для синтеза логических схем используются только массивы (тип ARRAY) и записи (тип RECORD) Однако тип RECORD поддерживается не всеми средствами синтеза и в данном пособии рассмотрен не будет.

Следующие типы-массивы являются предопределенными

1. BIT VECTOR - одномерный массив элементов типа BIT

2. STD LOGIC \/ECTOR - одномерный массив элементов типа STD LOGIC.

3. STD ULOGIC VECTOR - одномерный массив элементов типа STD ULOGIC

4. STRING - одномерный массив элементов типа CHARACTER Направление и границы диапазона индексов не содержатся в

определении указанных типов и должны быть указаны непосредственно при объявлении объектов данных типов

4.3.3. Описание простых типов

Тип BOOLEAN

Тип BOOLEAN является перечислимым типом Объект данного типа может принимать значения FALSE (ложь) и TRUE (истина), причем FALSE эквивалентно О, а TRUE эквивалентно 1

Все три типа объектов в VHDL (константы, переменные и сигналы) могут иметь тип BOOLEAN Таким объектам может быть присвоено только значение типа BOOLEAN

Пример

PROCESS (а, Ь) VARIABLE eond : BOOLEAN; BEGIN

cond := a > b; IF cotKl THEN

output <= Ч ; ELSE

output <= 0; END IF; END PROCESS;

Операторы отношения

Значения типа BOOLEAN могут участвовать в выражениях Операторы отношения (=, /=, <, <=, >, >=) определены для операндов типа BOOLEAN и одномерных массивов, содержащих элементы типа BOOLEAN. Результат выражения также имеет тип BOOLEAN (Как для всех перечислимых типов, операции сравнения над одномерными массивами типа BOOLEAN производятся поэлементно, начиная с крайнего левого элемента )

Логически? рпдратрры

Для операндов типа BOOLEAN и одномерных массивов, содержащих элементы типа BOOLEAN, определены все логические операции (AND, OR, NAND, NOR, XOR и NOT) Тип и размер операндов должны быть одинаковыми Тип и размер результата такой же, как тип и размер операндов

Оператор конкатенации

Оператор конкатенации также определен для операндов типа BOOLEAN и одномерных массивов, содержащих элементы типа BOOLEAN Результат выражения представляет собой одномерный массив, содержащий элементы типа BOOLEAN; размер массива равен сумме размеров операндов

Другие операторы

Другие операции над операндами типа BOOLEAN не определены Тип INTEGER

Стандарт VHDL определяет тип INTEGER дпя использования в арифметических выражениях По умолчанию объекты типа INTEGER имеют размерность 32 бита и представляют целое число в интервале-(2-1) 2-1(-2147483647 2147483647) Стандарт языка позволяет также объявлять объекты типа INTEGER, имеющие размер меньше 32 бит, используя ключевое слово RANGE, ограничивающее диапазон возможных значений

SIGNALX INTEGER RANGE-127 ТО 127 Данная конструкция определяет X как 8-битное число. Кроме того, можно определить ограниченный целый тип, используя следующую конструкцию

TYPE имя типа IS RANGE диапаэон индвкс08; диапазон индвксов определяется следующим образом. тТОп nDOWNTOm где т,п- целочисленные константы, т<=п Пример

TYPE byte J.nt О ТО 255;

TYPE signed word int xs range -32768 TO 32768, TYPE bit index IS range 31 DOWNTO 0;



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 [ 28 ] 29 30 31 32 33 34 35 36 37 38 39 40

© 2000 - 2021 ULTRASONEX-AMFODENT.RU.
Копирование материалов разрешено исключительно при условии цититирования.