Проектирование цифровых устройств с использованием ПЛИС (1055366), страница 4
Текст из файла (страница 4)
При объявлении может быть указановыражение, определяющее значение константы:<КОНСТАНТА> ::=CONSTANT <СПИСОК ИДЕНТИФИКАТОРОВ> : <ТИП> [ := <ВЫРАЖЕНИЕ> ]Пример декларации константы типа TIME:CONSTANT A: TIME := 30ns;22СигналыСигналы — это объекты, обладающие историей изменения(прошлым и текущим состояниями). В процессе моделированиявозникают события, которые являются причинами возникновенияновых событий.
При возникновении события, приводящего к изменению сигнала, это изменение происходит не мгновенно, а черезнекоторое оговоренное время (большее или равное дельтазадержке). Это свойство сигнала позволяет учесть при моделировании причинно-следственные связи между воздействием и откликом.Объявление сигнала:<СИГНАЛ> ::=SIGNAL <СПИСОК ИДЕНТИФИКАТОРОВ> : <ТИП> [ <ВИД> ][ := <ВЫРАЖЕНИЕ> ] ;<ВИД СИГНАЛА> ::= REGISTER | BUSДля каждого сигнала предопределены следующие атрибуты,поддерживаемые программами синтеза (на примере сигнала s):• s’stable[(T)] — атрибут равен значению true, если за время Tсигнал не изменял своего состояния;• s’transaction — атрибут типа bit, изменяющий состояние напротивоположное при каждом присваивании нового значения сигналу s;• s’event — атрибут, равный true, если в данном цикле моделирования произошло изменение сигнала s;• s’active — атрибут, равный значению true, если в данномцикле моделирования произошло присваивание нового значениясигналу s;• s’last_value — атрибут, равный сигналу s, до момента его последнего изменения.Пример декларации и инициализации сигнала:SIGNAL B: BIT_VECTOR(3 DOWNTO 0):=”0000”;Пример присвоения значения сигналу:B<=”0001”;Пример использования атрибутов сигнала:23IF CLK’event AND CLK=’1’ THENB<=D; --Изменить значение по фронту синхросигналаEND IF;ПеременныеЗначения переменных также могут изменяться в процессе работы устройства.
Однако при моделировании изменения значенийпеременных происходят «мгновенно» и в том порядке, в которомприсвоения встречаются в коде.Объявление переменной:<ПЕРЕМЕННАЯ> ::=[ SHARED ] VARIABLE <СПИСОК ИДЕНТИФИКАТОРОВ> : <ТИП> [ :=<ВЫРАЖЕНИЕ> ] ;Опция SHARED используется при объявлении переменных винтерфейсах и архитектурах устройств, интерфейсах и телах пакетов, а также в блоках.Пример декларации переменной:VARIABLE C: INTEGER := 100;Пример присвоения значения переменной:B:=200;ФайлыФайл — это объект, позволяющий в процессе моделированияпроизводить операции чтения и записи физического файла.
Данный объект относится к несинтезируемому подмножеству языкаVHDL.Сигналы типа STD_LOGIC и STD_LOGIC_VECTORНаиболее широко на практике применяются типы STD_LOGICи STD_LOGIC_VECTOR, описанные в библиотеке STD_LOGIC_1164. Для данных типов в библиотеке реализованы многочисленные функции преобразования, арифметические и логическиефункции, а также функции разрешения. Функцией разрешения на24зывается функция, по которой определяется результирующее значение сигнала, управляемого несколькими источниками. Присхемной реализации программа синтеза по указанию разработчикаустановит для таких сигналов дополнительный элемент, позволяющий реализовать эквивалентную функцию (например, дизъюнктор). Сигнал типа STD_LOGIC принимает одно из девяти значений:• 'U' — не инициализировано;• 'X' — неизвестное (сильное значение);• '0' — логический нуль (сильное значение);• '1' — логическая единица (сильное значение);• 'Z' — третье состояние;• 'W' — неизвестное (слабое значение);• 'L' — логический нуль (слабое значение);• 'H' — логическая единица (слабое значение);• '-' — неопределенное значение.Слабые сигналы имеют меньший приоритет по сравнению ссильными.
Значения 'U', 'X', 'W', '-' служат для моделирования некорректных состояний устройств.Библиотека STD_LOGIC_1164 поддерживается современнымипрограммами синтеза.Примеры использования сигналов STD_LOGIC и STD_LOGIC_VECTOR:CLK :IN std_logic;RST :IN std_logic;CH_CODE :INOUT std_logic;DATA_BUS :INOUT std_logic_vector(w-1 DOWNTO 0);Операции языка VHDLНад объектами стандартных типов, как над переменными вязыках программирования, можно выполнять арифметические илогические операции, объединяя их в выражения. Операции языкаVHDL для типов BIT и BOOLEAN перечислены в табл.
2 в порядке возрастания их приоритета.Примеры выполнения операций над объектами:25result <= a + b;--сумматор (поведенческий вариант)sum <= (a XOR b) XOR cin;--сумматор (структурный вариант)cout <= (a AND b) OR (a AND cin) OR (b AND cin);equal <= '1' WHEN a = b ELSE '0'; --компараторoutp <= "00000001" SLL conv_integer(inp); --дешифраторТаблица 2Операции языка VHDLТипоперацийЛогическиеСравненияСдвигаЗнакаи сложенияУмноженияСмешанные126ОбозначениеАNDORNANDNORXORXNOR=/=<><=>=SLLSRLSLASRAROLROR+–&*/MODREMABSNOT**КомментарийЛогическое ИЛогическое ИЛИЛогическое И-НЕЛогическое ИЛИ-НЕИсключающее ИЛИЭквивалентностьРавенствоНеравенствоМеньшеБольшеМеньше или равноБольше или равноСдвиг влево логическийСдвиг вправо логическийСдвиг влево арифметическийСдвиг вправо арифметическийСдвиг влево циклическийСдвиг вправо циклическийСложение (знак плюс)Вычитание (знак минус)КонкатенацияУмножениеДеление1Модуль1Остаток1Абсолютное значениеОтрицаниеСтепеньОперации синтезируются ограниченно.2.3.
Интерфейс и архитектура устройствУстройство или его часть описывается на языке VHDL с помощью двух связанных конструкций: интерфейса устройства(ENTITY) и архитектуры устройства (ARCHITECTURE). Конструкции ENTITY могут соответствовать несколько вариантов конструкции ARCHITECTURE, описывающих поведение или структуруустройства. Если описаний ARCHITECTURE несколько, то необходимо для каждого используемого экземпляра устройства указатьтребуемое описание.
Устройства могут быть организованы по иерархическому принципу, т. е. могут состоять из других устройств.Связность частей устройства задается с помощью сигналов.Упрощенный синтаксис конструкции ENTITY:<ИНТЕРФЕЙС> ::=ENTITY <ИДЕНТИФИКАТОР> IS[GENERICS <СПИСОК НАСТРОЕЧНЫХ КОНСТАНТ>][PORT <СПИСОК ПОРТОВ>]<ДЕКЛАРАТИВНАЯ ЧАСТЬ>[ BEGIN<ПАССИВНЫЕ КОНСТРУКЦИИ ЯЗЫКА> ]END [ ENTITY ] [ <ИДЕНТИФИКАТОР>] ;В конструкции ENTITY предусмотрена возможность задаватьсписок настроечных параметров с помощью ключевого словаGENERIC.
Это позволяет описать универсальное устройство, некоторые числовые параметры которого (например, ширина шиныданных и адреса) будут определены при его включении в проект.Декларация портов PORT позволяет описать входные объекты (IN)только для чтения, выходные объекты (OUT) — только для изменения, двунаправленные объекты (INOUT) — для чтения и изменения, двунаправленные объекты (BUFFER) — для чтения и изменения только одним источником. Объект в режиме LINKAGEможет читаться или изменяться только подстановкой в качествефактического параметра для другого объекта в режиме LINKAGE.Упрощенный синтаксис декларации PORT:<ОПИСАНИЕ ПОРТОВ>::=PORT(<ОПИСАНИЕ ПОРТА> {;<ОПИСАНИЕ ПОРТА>});<ОПИСАНИЕ ПОРТА>::= <СПИСОК ИДЕНТИФИКАТОРОВ> :<РЕЖИМ> <ТИП><РЕЖИМ> ::= BUFFER|IN|OUT|INOUT|LINKAGE27Пример конструкции ENTITY:ENTITY Decoder ISPORT ( inp: IN std_logic_vector(2 DOWNTO 0);outp: OUT std_logic_vector(7 DOWNTO 0));END Decoder;В декларативной части ENTITY описываются объекты, типы,подпрограммы и прочие элементы, которые будут использованыпри описании устройства.
Пассивные конструкции языка не синтезируются. Они позволяют выполнять различные проверки в процессе моделирования.Структура или поведение устройств описываются с помощьюконструкции ARCHITECTURE.Упрощенный синтаксис ARCHITECTURE:<Архитектура> ::=ARCHITECTURE <Идентификатор> OF <Интерфейс> IS<Декларативная часть>BEGIN<Параллельные операторы>END [ ARCHITECTURE ] [<Идентификатор>] ;В декларативной части ARCHITECTURE описываются объекты, типы, подпрограммы и прочие элементы, которые будут использованы при описании устройства. После ключевого словаBEGIN с помощью параллельных операторов описываются параллельно работающие части устройства.Пример описания устройства:-- Комментарий: Интерфейс полного сумматораENTITY Full_Adder ISPORT (X, Y, Cin:IN Bit;Cout, Sum:OUT Bit);END Full_Adder ;-- Комментарий: Архитектура 1 полного сумматора (потоковый стиль)ARCHITECTURE DataFlow1 OF Full_Adder ISSIGNAL A,B: Bit;BEGINA <= X XOR Y;B <= A AND Cin;Sum <= A XOR Cin;28Cout <= B OR (X AND Y);END ARCHITECTURE DataFlow1 ;-- Комментарий: Архитектура 2 полного сумматора (потоковый стиль)ARCHITECTURE DataFlow2 OF Full_Adder ISBEGINSum <= (X XOR Y) XOR Cin;Cout <= (X AND Y) or (X AND Cin) OR (Y AND Cin);END DataFlow2;2.4.
Пакеты и библиотекиДля описания простого устройства достаточно в единственномфайле проекта описать хотя бы один интерфейс и его архитектуру.При проектировании же сложных устройств, которые предполагается использовать многократно, целесообразно компоновать описания в пакеты (PAKAGE). Декларация пакета состоит из описания интерфейса и описания тела:<ИНТЕРФЕЙС ПАКЕТА> ::=PACKAGE <ИМЯ> IS<ДЕКЛАРАТИВНАЯ ЧАСТЬ>END [ PACKAGE ] [ <ИМЯ> ] ;<ТЕЛО ПАКЕТА> ::=PACKAGE BODY <ИМЯ> IS<ДЕКЛАРАТИВНАЯ ЧАСТЬ>END [ PACKAGE ] [ <ИМЯ> ] ;В декларативной части интерфейса могут быть объявленыподпрограммы, типы, подтипы, объекты всех видов, атрибуты,компоненты и т.
д. В теле пакета приводятся реализации процедури указываются значения констант, декларированных в интерфейсной части:PACKAGE TriState ISTYPE Tri IS ('0', '1', 'Z', 'E');FUNCTION BitVal (Value: Tri) RETURN Bit;FUNCTION TriVal (Value: Bit) RETURN Tri;TYPE TriVector IS ARRAY (Natural RANGE <>) OF Tri;FUNCTION Resolve (Sources: TriVector) RETURN Tri;END PACKAGE TriState;PACKAGE BODY TriState IS29FUNCTION BitVal (Value: Tri) RETURN Bit ISCONSTANT Bits : Bit_Vector := "0100";BEGINRETURN Bits(Tri'Pos(Value));END;FUNCTION TriVal (Value: Bit) RETURN Tri ISBEGINRETURN Tri'Val(Bit'Pos(Value));END;FUNCTION Resolve (Sources: TriVector) RETURN Tri ISVARIABLE V: Tri := 'Z';BEGINFOR i IN Sources'Range LOOPIF Sources(i) /= 'Z' THENIF V = 'Z' THENV := Sources(i);ELSERETURN 'E';END IF;END IF;END LOOP;RETURN V;END;END PACKAGE BODY TriState ;Пакеты, в свою очередь, объединяются в библиотеки (LIBRARY). Для подключения библиотеки необходимо использоватьоператор подключения библиотеки и использования пакета:<ПОДКЛЮЧЕНИЕ БИБЛИОТЕКИ> ::=LIBRARY <ИМЯ БИБЛИОТЕКИ> { , <ИМЯ БИБЛИОТЕКИ> };<ИСПОЛЬЗОВАНИЕ ПАКЕТА>::=<ИМЯ БИБЛИОТЕКИ>.<ИМЯ ПАКЕТА>.<СИМВОЛЬНОЕ ИМЯ> |<ИДЕНТИФИКАТОР> | ALL;Пример использования библиотеки и пакета:LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.ALL;302.5.