47601 (572042), страница 5
Текст из файла (страница 5)
т акты
Время
Рис. 5. Возможности VHDL в области отображений характеристик (аспектов) аппаратуры
Степень детализации аспектов, отображаемых в описаниях аппаратуры, определяется конкретными задачами. Например, описание некоторой микропроцессорной системы может строиться как описание структуры, состоящей из микросхем БИС и СИС, а описание самих микросхем строиться как поведенческое, так как их описание на вентильном уровне либо отсутствует, либо слишком громоздко.
Любой язык базируется на разнообразных конструкциях (словах, массивах, переменных, константах, выражениях и т.д.).
В языке VHDL в качестве конструкций выступают объекты, проекты, иерархии, архитектурные тела, пакеты, тела пакетов и др.
Объект проекта представляет собой описание компоненты проекта, имеющей чётко заданные входы и выходы и выполняющей чётко определённую функцию.
Объект проекта может представлять всю проектируемую систему, некоторую подсистему, устройство, узел, стойку, плату, кристалл, макроячейку, логический элемент и т. п.
В описании объекта проекта можно использовать компоненты, которые, в свою очередь, могут быть описаны как самостоятельные объекты проекта более низкого уровня.
Таким образом, каждый компонент объекта проекта может быть связан с объектом проекта более низкого уровня. В результате такой декомпозиции пользователь строит иерархию объектов проекта, представляющих весь проект в целом. Естественно, что вся иерархия будет состоять из нескольких уровней абстракций. Такая совокупность объектов проекта называется иерархией проекта.
Каждый объект проекта состоит, как минимум, из двух различных типов описаний: описания интерфейса и описания одного или более архитектурных тел.
Интерфейс описывается в объявлении объекта проекта и определяет только входы и выходы объекта проекта.
Для описания поведения объекта или его структуры служит архитектурное тело.
Чтобы задать, какие объекты проекта использованы для создания полного проекта, используется объявление конфигурации.
В языке VHDL предусмотрен механизм пакетов для часто используемых описаний, констант, типов, сигналов. Эти описания помещаются в объявлении пакета.
Если пользователь использует нестандартные операции или функции, их интерфейсы описываются в объявлении пакета, а тела содержатся в теле пакета.
Таким образом, при описании цифровых схем на языке VHDL возможно использование пяти различных типов описаний:
1) объявление объекта проекта,
2) объявление архитектурного тела,
3) объявление конфигурации,
4) объявление пакета и
5) объявление тела пакета.
Каждое из описаний является самостоятельной конструкцией языка VHDL, любая конструкция может быть независимо проанализирована анализатором и поэтому получило название “модуль проекта”.
Модули проекта, в свою очередь, можно разбить на две категории:
1) первичные модули и
2) вторичные модули.
К первичным модулям относятся различного типа объявления, к вторичным - отдельно анализируемые тела первичных модулей.
Один или несколько модулей проекта могут быть помещены в один файл, называемый файлом проекта.
Каждый проанализированный модуль проекта помещается в библиотеку проекта и становится библиотечным модулем.
Данная реализация позволяет создать любое число библиотек проекта. Каждая библиотека проекта в языке VHDL имеет логическое имя (идентификатор). Фактическое имя файла, содержащего эту библиотеку, может совпадать или не совпадать с логическим именем библиотеки проекта.
Для ассоциирования логического имени библиотеки с соответствующим ей фактическим именем предусмотрен специальный механизм установки внешних ссылок.
Объекты данных являются хранилищами для значений определённого типа. Следует заметить, что все типы в языке VHDL конструируются из элементов, представляющих собой скалярные типы.
Значения всех объектов в создаваемой модели, взятые все вместе, отражают текущее состояние моделирования. Описание на языке VHDL содержит объявления, которые создают объекты данных четырёх классов: константы, переменные, сигналы и файлы.
Константы и переменные содержат одно значение данного типа. Значения переменных могут быть изменены назначением нового значения в предложении назначения переменной.
Значение константы устанавливается до начала моделирования и не может после этого изменяться.
Сигнал имеет текущее значение подобно переменной. Он также имеет прошлую историю значений, на которые разработчик может пожелать сослаться, а также множество будущих значений, которые будут получены от формирователей сигналов.
Новые значения для сигналов создаются предложениями назначения сигналов. Каждый объект в описании должен ассоциироваться с одним и только одним типом. Тип состоит из множества возможных значений и множества операций.
Имеются операции двух видов. Некоторые операции являются предопределёнными, к ним , например, относятся операторы “+”, “-“ для значений типа integer.
Другие операции явно кодируются в языке VHDL; например, может быть написана функция-подпрограмма Max, которая возвращает наибольший из двух целых аргументов.
Тип объекта представляет информацию, которая окончательно определяется в момент записи модели. Эта информация способствует обнаружению несоответствий в тексте без обращения к моделированию. Например, легко обнаружить и отметить попытку назначения булевого значения (true или false) целой переменной.
Новое значение, которое должно быть создано предложением назначения, определяется выражением в правой части. Выражения используются также и в других контекстах: например, как условие в предложении if. В состав выражения могут входить константы, переменные, сигналы, операторы и указатели функций.
Когда имя объекта используется в выражении, при расчёте значения выражения учитывается его текущее значение.
Примером описания цифрового автомата является преобразователь параллельного кода в последовательный.
Преобразователь кода представляет собой устройство, на вход которого подается n-битное число в параллельном коде “d”, сигнал загрузки “load” и синхроимпульсы “clk”. По сигналу загрузки происходит запись входного слова во внутренний регистр и последовательная выдача в течении n тактов этого входного слова в последовательном коде на выходе “о” синхроимпульсами “oclk”.
После окончания преобразования на выходе “e” появляется высокий уровень сигнала в течение одного такта.
Известно большое число отечественных и зарубежных языков описания цифровой аппаратуры: МОДИС. МОДИС-В78, Автокод-М, МРL, ОСС-2, Форос, Алгоритм, СDL, DDL, VЕRILОG, ISPS, CONLAN, HILО, АВЕL, AHDL, РП8 и др.
В настоящее время только два языка удовлетворяют требованиям для цифрового логического проектирования: VHDL и VerilogНDL.
Язык VHDL отлично подходит для различных целей - для документации, синтеза и моделирования устройств и систем. Он отличается более мощной общеалгоритмической базой, более развитыми средствами отображений временных соотношений и используемых алфавитов моделирования, большим диапазоном охватываемых систем и уровней их описаний, а главное – стандартностью (т. е признаваемостью мировым сообществом).
Если посмотреть на язык VHDL глазами программиста, то можно сказать, что он состоит как бы из двух компонент - общеалгоритмической и проблемно-ориентированной (рис.6).
ЯзыкVHDL
Общеалгоритмическая
компонента
Проблемно-
ориентированная компонента
Скалярные данные типа:
целый, вещес-твенный, битовый и
другие
агрегаты:
массивы,
структуры, файлы
Операторы:
присваива-ния,
условный, цикла,
выбора и
другие
Данные вида сигнал,
данные
физического
типа, атрибуты
сигналов
Параллельные операторы:
назначения,
сигнала процесса, конкретизации компоненты и другие
Процедуры, блоки, пакеты
Описание интерфейса,
описания архитектуры,
описания конфигурации
Рис.6. Две компоненты языка VHDL
Общеалгоритмическая компонента языка VHDL - это язык, близкий по синтаксису и семантике к современным языкам программирования типа Паскаль, Си, МОДУЛА-2, АДА.
Язык VHDL относится к классу строго типизированных, что означает, например, переменной типа целый (integег) нельзя присвоить значение вещественной (геа1) переменной:
variable Х integег; Y variable геа1;
Х : = Y; - ошибочная запись.
Помимо встроенных (пакет STANDARD) простых (скалярных) типов данных: целый (integег), вещественный (геа1), булевский (bоо1еаn), битовый (bit), данных физического типа - время (time), данных типа ссылка (указатель), пользователь может вводить и использовать свои типы данных (перечислимые, физические, целые и плавающие).
Например:
type temp is range 0 to 42;— объявлен диапазонный целый тип temp;
type let is (‘i’, ‘j’, ‘k’); - перечислимый тип lеt; принимающий три значения;
variable Z, Х: temр; variable Y: let:
Х : = 10; — присваивание верно;
Х: = 1000; — неверно, выход из допустимого для Х диапазона;
Y : = 'i'; - - верно;
Y:='0'; — неверно.
Помимо скалярных типов данных можно объявлять и использовать агрегаты - составные типы данных: массивы (аггау), в том числе битовые векторы (bit vector) и символьные строки (string), а также записи (гесогd) и файлы (file).
Например:
tуре МЕМОRY is аггау (0 to 1000) оf bit; - массив из 1001 бита;
variable М: МЕМОRY;
М(i.):=М(j+1); - присваивание в элемент массива.
В языке VHDL имеются три класса объектов: константы, переменные и сигналы.
1.4.2.1. Константы
Константа - это объект, значение которого неизменно.
Примеры описаний констант:
соnstant Рi: геаl: = 3.14; - вещественная константа Pi;
соnstant D1: let: = 'k';
соnstant ALL1: bit vector (0 to 2): = '111'.
1.4.2.2. Переменные
Значения переменных могут изменяться. При описании переменных можно указать их начальное значение:
variable Х: integer:=0;
variable Y: геаl;
variable Z: let;
X:= 10; -oператор присваивания переменной Х значения 10.
1.4.2.3. Сигналы
Сигналы - это объекты, которые имеют временные параметры и могут изменяться:
signа1 ВВ1: integer;
signа1 СС1:1et; - оператор назначения сигналу с задержкой
ВВ1 <= 10 аftег 20 ns; - СС1 <= 'i’ аfteг 5 ns;.
1.4.2.4. Операторы
Последовательно выполняемые (последовательные) операторы языка VHDL могут использоваться в описаниях процессов, процедур и функций.
Их состав включает:
оператор ожидания wait;
оператор присваивания переменной (: =);
последовательный оператор утверждения (аssert);
условный оператор (if);
оператор выбора (саsе);
оператор цикла (1оор):
пустой оператор (null);
оператор возврата из процедуры-функции (геturn);
оператор выхода (ехit);
оператор перехода (nехt).
Язык поддерживает концепции модульного и структурного программирования.
Сложные операторы заключены в операторные скобки: if-end if; ргоcеss - end ргосеss; саsе - еnd саsе, 1оор - еnd 1оор и т. д. Поэтому отпадает необходимость в специальных операторных скобках для отображения составных операторов и, например, запись
if Х>Y thеn А : = В, С : == D; еnd if;
означает совместное выполнение двух присваивании при истинности условия Х>Y.
1.4.2.5. Пакеты
Пакеты, как и в обычных алгоритмических языках - это средство выделения из ряда программ и подпрограмм общих типов данных, переменных, процедур и функций, позволяющее упростить, в частности, процесс их замены. В языке VHDL у пакета разделяются описание интерфейса пакета (рас-kаgе) и описание тела пакета (расkаgе bоdy).
По умолчанию предусмотрено подключение стандартного пакета
SТАNDАRD. Этот пакет, в частности, содержит, как уже отмечалось, описание стандартных типов данных – integer, геа1, bоо1еаn, bit и др.
Пакет ТЕХТIO содержит стандартные операторы ввода-вывода. Нестандартные пакеты реализуются пользователями, желающими более точно отобразить свойства описываемых ими объектов. Например, можно в пользовательском пакете переопределить стандартные логические операции И (аnd), ИЛИ (ог) и НЕ (nоt) и перейти от булевского (0,1) к многозначному (1, О, X, ,Z) алфавиту моделирования.
Пример пользовательского пакета:
расkаgе РА is - интерфейс пакета РА.;