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

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

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

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

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

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

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

Сигнал с одной силой (две логических величины). Это про-

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

Сигнал с двумя силами (три или четыре логических ве-

личины). Во многих схемах некоторый проводник может быть не соединен с землей, источником питания или другим узлом схемы. Например, могут содержать схемы с открытым коллектором (истоком) или для выхода с тремя состояниями (‘0’, ‘1’ и ’Z’). Для выхода с тремя состояниями при одном из вариантов управления оба транзистора закрыты (не проводят, т.е. Z состояние). В результате выход будет отключен от полюсов источ-

191

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

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

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

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

192

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

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

В 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";

193

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

7.2. ПРОЕКТИРОВАНИЕ НА VHDL УСТРОЙСТВ ВВОДА-ВЫВОДА ПО МОДЕЛИ ПРОГРАММНО-УПРАВЛЯЕМОГО АВТОМАТА

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

иалгоритмические описания.

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

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

194

все исполняет процессор; в случае VHDL исполнителем является симулятор или синтезированная аппаратура.

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

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

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

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

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

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

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

195

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

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

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

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

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 --выходной символ

);

196

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 =>

 

--условие перехода из состояния S1 в S2

if X='1' then

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;

 

 

end process;

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

Z_ASSIGNMENT:

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

197

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

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

Возможны различные варианты реализации архитектуры. Рассмотрим первый вариант, основанный на организации механизма нумерации тактов. Для этого потребуется двоичный счетчик. В синхронных устройствах изменение состояния элемента памяти может происходить либо только по фронту синхросигнала, либо только по его срезу. Потому изменение таких сигналов может происходить через минимальное время, равное длительности периода тактового интервала. Для формирования полутактовых интервалов необходимо вдвое увеличить частоту тактового сигнала. На рис. 7.10 приведена временная диа-

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

198

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

library ieee;

use ieee.std_logic_1164.all;

use ieee. std_logic_unsigned.all;

 

entity example

is

 

port(clk: in std_logic;

 

 

X: in std_logic;

 

 

Y:

out std_logic

 

 

);

 

 

end;

 

 

architecture RTL1 of example is

 

signal cnt: std_logic_vector(3 downto 0);

begin

 

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

OPERATION1: process (clk)

begin

 

-- условие асинхронной инициализации

if

X=’0’ then

 

 

cnt<=”0000”;

-- условие синхронной работы

 

elsif rising_edge(clk) then

if

cnt /=13 then

 

 

cnt<= cnt +1;

 

 

end if;

 

 

end if;

 

 

end process;

 

--формирование Y

OPERATION2: process (clk)

begin

 

 

if

X=’0’ then

 

 

 

Y <=’0’;

 

 

elsif rising_edge(clk) then

 

 

if (cnt=0) or (cnt=1) or (cnt=6)

 

or (cnt=8) or (cnt=9) or

(cnt=10) or (cnt=11) then

 

Y <= ’1’;

 

 

else

Y <= ’0’; end if;

end if; end process;

end RTL1;

199

Второй вариант реализации архитектуры основан на сдвиговом регистре s_registr, выполняющем функцию одноразрядной памяти магазинного типа. Эта память по сигналу Х запоминает по тактам временную диаграмму для сигнала Y, подключенного к старшему разряду s_registrt(11) (это реализует параллельный оператор присвоения Y <= s_registrt(11); ), далее выполняется сдвиг s_registrt в сторону старших разрядов по фронту clk. На рис. 7.11 приведена временная диаграмма работы этого варианта описания устройства, а ниже – текст на VHDL.

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

architecture RTL2 of example is

signal s_registr: std_logic_vector(11 downto 0); begin

Y <= s_registr(11); SHIFT: process (clk) begin

if X =’0’ then s_registr<=”110000101111”;

elsif rising_edge(clk) then

s_registr (11 downto 1)<= s_registr(10 downto 0); s_registr(0)<=’0’;

200

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