Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

1531

.pdf
Скачиваний:
2
Добавлен:
15.11.2022
Размер:
52.65 Mб
Скачать

Оператор wait позволяет управлять моментами времени, в которые параллельные операторы будут реагировать на изменения сигналов. Операторы ожидания имеют следующий синтаксис:

wait [on имя_сигнала {, …}] [until булево_выражение] [for выражение_времени];

Оператор wait позволяет приостановить выполнение параллельного оператора в модели и программно задавать условия, при которых его выполнение может быть возобновлено. Как только заданные условия будут выполнены, процесс продолжит свое выполнение.

Для синтеза используется секция until, позволяющая определить булево выражение, которое должно иметь значение true (для того чтобы процесс продолжил выполнение после этой инструкции). Если же в момент выполнения оператора wait условие уже имело значение true, то выполнение процесса будет продолжено только после того, как заданное условие сначала приметзначение false, потом вновь значение true.

Рассмотрим модель синхронного (по фронту) D-триггера. Пусть:

signal c,d,q: bit; -- с-вход синхронизации --d-вход данных --q-выход

тогда process begin

wait until rising_edge( с); q<=d;

end process;

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

101

1.10.2.4.Цикл моделирования VHDL

Всоответствии со стандартом [20] выполнение модели в VHDL описывается следующим образом.

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

Вфазе инициализации оговоренные начальные значения присваи-

ваются сигналам, текущему модельному времени Tc присваивается значение 0 и однократно выполняется каждый оператор process.

Каждый цикл моделирования начинается с установки текущего времени в следующий момент времени, на который назначены измене-

ния значений сигналов. Это время Tn было вычислено во время инициализации или последнего выполнения цикла моделирования. Моделирование прекращается, когда текущее время достигнет установленного максимума.

Каждый цикл моделирования содержит следующие шаги:

1. Tc присваивается Tn.

2. Каждый сигнал, явно заданный в модели, обновляется (в результате могут появиться события, если сигналы меняют свое значение).

Вцикле, предшествовавшем текущему циклу, были вычислены

новые будущие значения. Если Tc соответствует времени, в которое эти значения становятся действительными, то они и присваиваются сигналам. Новые значения никогда сразу не присваиваются в выполняемом цикле моделирования. Сигналы, которые изменяют свое значение, генерируют события, которые, в свою очередь, могут запустить выполнение операторов process, чувствительных к этим сигналам.

3. Для каждого process P, если P чувствителен к сигналу S и если событие имеет место для сигнала S в этом цикле моделирования, тогда P выполняется.

4.Каждый process, который получил разрешение на выполнение

втекущем цикле, выполняется до момента приостановки.

102

5. Время следующего цикла Tn определяется установкой его в наиболее раннее из значений:

а) TIME’HIGH – время окончания моделирования;

б) время, когда драйвер сигнала становится активным (задержка формирования значения сигнала);

в) время, в которое разрешается выполняться оператору process (это время определяется операторами wait for.

Если Tn = Tc, то следующий цикл моделирования будет δ-циклом. Рис. 53 иллюстрируетитеративную природу цикла моделирования. Итак, принцип продвижения модельного времени системой моделирования формулируется следующим образом: от момента события до следующего момента модельного времени, в котором происходит хотя бы одно событие, пропуская промежуточные моменты, в которые не происходит никаких событий. В системах моделирования это назы-

вают событийным моделированием.

Рис. 53. Цикл моделирования VHDL

Транзакция. В реализации сигналов, изменяемых в модельном времени, основным становится планирование в этом времени изменений сигналов. При выполнении операторами присваивания значения сигналу системой моделирования формируется специальная структура данных, пара: значение сигнала/момент модельного времени, когда сигнал примет это значение. Такая пара в VHDL называется транзакцией. Транзакция – это внутренняя инструкция системы моделирования по изменениюуказанного сигнала в заданный момент модельного времени.

В реализации языка VHDL запланированная источником временная диаграмма сигнала представляется упорядоченным списком транзакций, формирующих моменты изменения сигнала на временной диаграмме. Часто в описании VHDL именно этот список, связанный с одним источником сигнала, называют драйвером.

103

1.10.2.5. Многозначная логика и стандарт IEEE 1164

Во многих случаях может быть целесообразным или необходимым использование для моделирования цифровых устройств логики с числом значений больше двух. Например, в системе могут быть электрические сигналы различной «силы», и может потребоваться вычислить силу и логический уровень в результате соединения двух или более таких источников сигналов. Использование дискретного множества «сил» позволяет избежать необходимости решать уравнения Кирхгофа и получить результат с требуемой точностью.

Сигнал с одной силой (две логических величины) – это простейший случай с двумя логическими значениями ‘0’ и ‘1’ и одной силой для каждого значения. Означает, что если соединить сигналы один со значением ‘0’, а другой со значением ‘1’, то ничего не будет известно об уровне результирующего сигнала. Сигнал одной силы достаточен для систем, в которых нет таких соединений.

Сигнал с двумя силами (три или четыре логических величины). Во многих схемах некоторый проводник может быть не соединен с землей, источником питания или с другим узлом схемы. Например, могут содержать схемы с открытым коллектором (истоком), или для выхода с тремя состояниями (‘0’, ‘1’ и ’Z’) при одном из вариантов управления оба транзистора закрыты (не проводят, т.е. Z-состояние). В результате выход будет отключен от полюсов источника. Очевидно, что сила сигнала у отключенных таким образом выходов меньше в состоянии ’Z’ по сравнению с ‘0’ и ‘1’. Если сигнал со значением ’Z’ соединен с другим сигналом, то этот другой сигнал будет доминировать. Функцию, выполняющую вычисление результирующей величины при таких соединениях, называют функцией разрешения.

Во многих случаях трехзначное множество значений {’0’,’1’,’Z’} дополняется значением ’X’, представляющим неизвестную величину такой же силы, как ‘0’ и ‘1’. Функция разрешения для этого случая получается весьма простой и может быть наглядно представлена с помощью схемы частичного порядка, как на рис. 54. Определим операцию sup над двумя сигналами, которая возвращает верхнее значение двух сигналов. Верхнее значение c двух сигналов a и b является слабейшей величиной, для которой сохраняется c a и c b. Например, sup (’Z’, ’0’) =’0’, sup(Z’,’1’) =’1’.

104

Рис. 54. Граф частичного порядка для значений из множества {’0’,’1’,’Z’, ’X’}

Сигнал с тремя силами (семь логиче-

ских величин). Во многих случаях двух сил сигналов недостаточно. Например, когда верхний МОП-транзистор комплиментарного каскада является транзистором с обеднением. Эффект от этого транзистора подобен резистору низкой проводимости на пути к источнику питания (протекает маленький ток). Этот транзистор вместе с нижним транзистором управляет величиной выходного сигнала

схемы, которая может быть вычислена с помощью функции разрешения. Нижний транзистор обеспечивает выход значениями ’0’ или’Z’. Транзистор с обеднением обеспечивает значение сигнала слабее, чем для ’0’ и ’1’, а его уровень соответствует ’1’. Это значение транзистора с обеднением обозначают как ’H’ – слабая логическая ’1’. Подобным образом определяется слабый логический ’0’ – ’L’, результат взаимодействия слабых сигналов – слабая логическая неопределенность, обозначаемая как ’W’. В результате получаем три силы и семь значений величины сигнала {’0’, ’1’, ’L’, ’H’, ’W’, ’X’, ’Z’}. Граф частичного порядка представлен на рис. 55.

Рис. 55. Граф частичного порядка для значений из множества {’0’, ’1’, ’L’, ’H’, ’W’, ’X’, ’Z’}

105

В VHDL предопределена только двузначная логика (тип dit). Поэтому был разработан стандарт IEEE 1164, содержащий девять значе-

ний {’0’, ’1’, ’L’, ’H’, ’X’, ’W’, ’Z’, ’U’, ’–’}, где ’U’ обозначает неини-

циализированное значение, используемое при моделировании сигналов без точной инициализации. Символ ’–’ обозначает «беззаботный вход» или «вход не имеет значения для описания булевых функций». В качестве примера рассмотрим условный параллельный оператор присвоения сигнала select, подобный операторам switch и case языков программирования.

Пусть необходимо представить булеву функцию f (a, b, c) = ab + bc, неопределенную для случая a = b = c =’0’. Наиболее удобный способ представлен ниже.

f <= select a & b & c -- & обозначает объединение ’1’ when "10-" --соответствует первому терму ’1’ when "-11" -- соответствует второму терму

’X’ when "000";

Это должно легко моделироваться. К сожалению, получим не то, что хотели. Всякий раз, когда средства разработки VHDL оценивают подобный оператор, они проверяют выражение в пункте select (в примере a & b & c) на значения из пунктов when, в частности "10-". Поскольку значение ’–’ никогда не присваивается сигналам, эта проверка никогда не даст истины. Приведенное нереализуемое удобство – плата за гибкость введения девятизначного множества значений, но все-таки стало возможным моделировать схемы с обедненными МОП-транзисторами.

1.11.Проектирование устройств ввода-вывода

иконтроллеров интерфейсов ввода-вывода по модели программно-управляемого автомата

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

106

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

Для тех, кто имеет дело с разработкой программного обеспечения, написание проектов на поведенческом уровне VHDL не будет казаться чем-то новым. Разница состоит в базовой исполнительной платформе: в случае программного обеспечения все исполняет CPU; в случае VHDL исполнителем является симулятор или синтезированная аппаратура.

На поведенческом уровне описание может выполняться в виде алгоритма, потока данных или простых булевых выражений.

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

Основными компонентами цифровых систем являются регистры. На уровне абстракции потока данных описывается перемещение данных между регистрами схемы. Поэтому этот уровень часто называют уровнем регистровых передач (RTL – register transfer level). Этот промежуточный уровень позволяет упростить рутинную работу с комбинационной логикой (отдать ее средствам синтеза) и сконцентрироваться на более полной спецификации регистров, как наиболее важной части схемы. В RTL-описании присутствует точное задание тактовой частоты. Операции планируется выполнять в специфическом тактовом периоде, но не детализируются задержки внутри периода. Глобальная тактовая частота не является обязательным элементом, но может быть предпочтительной. Дополнительной особенностью может быть коррекция синхронизации, позволяющая перепланировать операции.

107

Для проектирования сложных цифровых устройств часто применяют модель программно-управляемого автомата (ПУА) [16]. ПУА состоит из устройства управления (УУ) и операционного устройства (ОУ), как показано на рис. 56.

Рис. 56. Программно-управляемый автомат

Первое свойство этой модели заключается в том, что операционное устройство задается на уровне RTL, а устройство управления задается на алгоритмическом уровне (в частности, конечным автоматом). Второе свойство определяет, что ПУА является рекурсивной моделью. Это означает, что УУ может быть представлено в виде ПУА1 (ОУ1, УУ1), УУ1 в виде ПУА2 (ОУ2, УУ2) и т.д.

На ОУ определено множество микроопераций (МО), выполняющих преобразование входных сигналов X из окружающей среды в выходные сигналы Y для окружающей среды. Выполнение той или иной МО инициируется выходными сигналами c УУ, зависящими от состояния УУ, его входов R и s. Сигналы s характеризуют результаты выполнения операций в ОУ, а R – управляющие воздействия окружающей среды.

Рассмотрим пример описания для синтеза синхронного автомата Мили, реализующего детектор входной последовательности 1011 [21]. На рис. 57 представлена его диаграмма состояний, а ниже текст на

VHDL.

Рис. 57. Диаграмма состояний детектора последовательности 1011, реализующая автомат Мили

108

library ieee;

use ieee.std_logic_1164.all; entity detector1011 is

port (

CLK: in STD_LOGIC; --синхросигнал

RST: in STD_LOGIC; --сигнал инициализации

X: in STD_LOGIC; --входной символ Z: out STD_LOGIC --выходной символ );

end;

architecture state_ machine of detector1011 is

type Sreg0_type is (S1, S2, S3, S4); -- символическоекодированиесостояний автомата signal Sreg0: Sreg0_type; -- регистр состояний

begin

--функция переходов автомата

Sreg0_machine: process (CLK) begin

if rising_edge(CLK) then -- синхронизация по фронту тактового сигнала if RST='1' then -- синхронный сброс в начальное состояние

Sreg0 <= S1; else

case Sreg0 is when S1 =>

if X='1' then --условие перехода из состояния S1 в S2 Sreg0 <= S2;

end if; when S2 => if X='1' then

Sreg0 <= S2; else

Sreg0 <= S3; end if;

when S3 => if X='1' then Sreg0 <= S4; else

Sreg0 <= S1; end if;

when S4 => if X='0' then Sreg0 <= S3; else

Sreg0 <= S2; end if;

when others => null;

end case; end if; end if;

109

end process;

Z_assignment: --функция выходов автомата

Z <= '1' when (Sreg0 = S4 and X='1') else '0'; end state_ machine;

Разработка описания на VHDL ОУ базируется на задании временной диаграммы устройства. Пусть необходимо разработать синхронное устройство, на выходе Y которого формируется последовательность из трех импульсов в ответ на входной импульс X, как показано на рис. 58 (выходные импульсы сопоставлены с тактами работы устройства).

Рис. 58. Пример задания на разработку ОУ

Возможны различные варианты реализации архитектуры. Рассмотрим первый вариант, основанный на организации механизма нумерации тактов. Для этого потребуется двоичный счетчик. В синхронных устройствах изменения состояния элемента памяти могут происходить либо только по фронту синхросигнала, либо только по его срезу. Потому изменения таких сигналов могут происходить через минимальное время, равное длительности периода тактового интервала. Для формирования полутактовых интервалов необходимо увеличить вдвое частоту тактового сигнала. На рис. 59 приведена временная диаграмма работы устройства (ниже – текст на VHDL). Сигнал cnt представляет четырехразрядный двоичный счетчик, изменяющий свое состояние по фронту синхросигнала clk. Длительность clk составляет половину длительности исходного такта.

Рис. 59. Временная диаграмма первого варианта описания

110

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