Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие_VHDL.doc
Скачиваний:
59
Добавлен:
13.11.2019
Размер:
3.18 Mб
Скачать

5.2. Инженерный подход к проектированию цифровых автоматов

Важность цифровых автоматов в проектировании разнообразных цифровых устройств и определенная специфика их синтеза вызывала и продолжает вызывать огромный интерес разработчиков электронной аппаратуры. Большое количество работ посвящено способам перехода от описаний автоматов к их схемной реализации [10]. На ранних этапах развития вычислительной техники методики перехода в основном ориентировались на ручные методы синтеза (например, [6]). В ряде работ [11] предлагались методики, пригодные для формального перехода от описания поведения автоматов к структуре вычислительных устройств. Эти работы послужили основой для разработки современных автоматизированных систем проектирования автоматов. Теперь разработчик в зависимости от опыта и имеющихся ресурсов может выбирать способ создания описания синтезируемого автомата: ручной, полуавтоматический или автоматический.

Форма задания описания автоматов – состояний, переходов, приоритетов

Относительно кодирования состояний следует отметить, что большинство разработчиков САПР настоятельно не рекомендуют пользователям самостоятельно задавать коды состояния (использовать битовые вектора для представления состояний), а ориентируют на использование перечислимого типа для представления состояний. САПР автоматически выберет коды состояний. Некоторые САПР позволяют задать способ кодирования: двоичное кодирование обеспечит уменьшение разрядности регистра, унитарное кодирование (один единичный бит в коде) уменьшает сложность логической схемы, имеются промежуточные типы кодирования. Выбор конкретных кодов из множества заявленного типа остается за программой синтеза. Для достижения оптимального кодирования используются переборные алгоритмы, которые системы автоматического синтеза исполняют эффективнее человека.

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

Если для входа автомата предполагается большое число комбинаций, а значения отдельных источников входа слабо связаны между собой, предпочтительно представление входа в виде набора независимых логических единиц, представляемых в программе типами BIT или std_logic (при реализации это набор одноразрядных линий связи). При этом для определения действия часто требуется анализировать не все входные линии, а лишь существенные в данном состоянии, что реально может привести к экономии оборудования. Появляется возможность принудительно устанавливать приоритеты сигналов и даже кодовых комбинаций.

Перенос внешних относительно автоматов элементов в тело описаний

Стремление устранить паразитные эффекты, связанные с наличием гонок в схемах формирования выходных сигналов, приводит к добавлению тактируемых синхросигналами триггеров. Возможность включения таких триггеров в перечень допустимых действий САПР привело даже к введению специального типа автомата – автомата Мили с синхронизированными выходами. Структурная модель автомата этого типа приведена на рис. 5.6.

В условиях автоматического синтеза автомата на вентильном уровне достаточно часто могут появиться проблемы с использованием выходных сигналов. В моменты смены состояний автомата или изменения значений входных сигналов могут возникать паразитные импульсы, обусловленные рисками, появляющимися в комбинационных схемах выработки выходных сигналов. Поэтому выходные сигналы автомата опасно использовать в качестве тактовых сигналов или сигналов асинхронных сбросов и установок триггеров. Для устранения указанного эффекта используются автоматы с синхронизированными выходами (рис. 5.6). На рисунке YC – комбинационные сигналы, а YR – синхронизируемые тактовым сигналом.

Рис. 5.6. Структурная модель автомата Мили с синхронизированным выходом

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

V: S × Y–>Y, y(n)=V(s(n-1), y(n-1)). (3)

Фиксация входных сигналов

Другая проблема – возможность появления временных перекосов в блоках комбинационной логики автомата. Это может происходить вследствие асинхронности входных сигналов относительно тактовой частоты автомата. Когда изменение входного сигнала приводит к тому, что выходы логики следующего состояния изменяют свои значения в моменты близкие к фронту тактового сигнала, то появляется вероятность перехода автомата в неправильное состояние. В этой ситуации и в логике формирования выходных сигналов могут возникать ложные импульсы. И то, и другое чаще всего приводит к катастрофическим последствиям для системы управляемой автоматом. Модификация схемы автомата (рис. 5.6), снижающая вероятность появления сбоев подобного типа, приведена на рис. 5.7. , где XC – синхронные входные сигналы, а XA – асинхронные.

Рис. 5.7. Автомат с предварительной фиксацией входных данных

Смешанные системы

В смешанных моделях можно выделить несколько выходов, относящихся к разным множествам. Выходы имеют индивидуальные функции выходов, а правила их формирования соответствуют любому из выражений 1 – 3.

Например, легко представить автомат с двумя выходами, для которого

y’(N)=V1(s(N)); y”(N)= V2(s(N-1), y”(N-1)). (4)

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

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

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

В качестве примера описания рассмотрим автомат, диаграмма состояний которого приведена на рис. 5.8. Описание автомата создавалось с помощью САПР фирмы Mentor Graphics под названием HDL Designer Series. Эта система создает программу на языке VHDL, соответствующую графическому описанию. Текст программы, сгенерированный САПР (за исключением удаленных несущественных деталей), приводится ниже (листинг 5.1). САПР легко создаёт автоматы комбинированной структуры (Мура, Мили и Мили с синхронными выходами в одной реализации).

В автомате под именем состояния или сигнала при переходе перечисляются имена сигналов, активизируемых (устанавливаемых в единицу) в этом (или этим) состоянием.

Рис. 5.8 Граф переходов автомата

Например, сигналы En и Ld устанавливаются в состоянии Write. Если из состояния возможен переход в несколько других состояний, то на дугах переходов указываются логические выражения, составленные из имен входных сигналов, определяющих условия переходов. Если из текущего состояния переходы являются условными, то обычно предполагается, что альтернативой является возврат в текущее состояние. В примере это сигналы Ack, Rd и Wr. В кружочках на дугах (или рядом) указывается приоритет переходов при одновременности выполнения условий для нескольких переходов. Кроме выражения, определяющего переход, на дуге может содержаться информация о сигналах, возникновение которых обусловлено выполнением условия этого выражения. Такие сигналы в примере – Busy и En.

Система HDL Designer Series поддерживает три типа выходных сигналов комбинационные, тактируемые и регистровые:

1. Комбинационные сигналы – это выходные сигналы автомата, значения которых непосредственно передаются в выходной порт. 2. Тактируемые сигналы – сигналы конечных автоматов, значения которых присваиваются внутренним сигналам с рабочей частотой автомата (т. е. запоминаются в триггерах). Выходные сигналы триггеров постоянно связаны с выходным портом. Необходимо указать значения по умолчанию. Обычно этот тип сигналов используется для внутренних счетчиков, значение которых требуются на выходе автомата. 3. Регистрируемые сигналы – сигналы конечного автомата (типа Мили с сихронизированными выходами). Внутренний сигнал, защелкиваемый на частоте автомата в триггере, который непосредственно соединяется с выходным портом автомата. Необходимо указать значения по умолчанию, чтобы избежать создания защелки в процессе синтеза. 

Листинг 5.1

LIBRARY ieee;

USE ieee.std_logic_1164.ALL;

USE ieee.std_logic_arith.ALL;

ENTITY example IS

PORT(

Ack, Addr7, Clk, Rd, Reset, WR : IN std_logic;

Busy, BusyR, BusyT : OUT std_logic;

ClrAddr, En, EnInc, Ld : OUT std_logic;

Str, StrS : OUT std_logic:

StrS2 : OUT std_logic -- вставка 1

);

-- Declarations

END example ;

-- hds interface_end

LIBRARY ieee;

USE ieee.std_logic_1164.ALL;

USE ieee.std_logic_arith.ALL;

ARCHITECTURE fsm OF example IS

-- Architecture Declarations

TYPE STATE_TYPE IS (Unit, Idle, Write, Read, Inc);

-- State vector declaration

ATTRIBUTE state_vector : string;

ATTRIBUTE state_vector OF fsm : ARCHITECTURE IS "current_state" ;

-- Declare current and next state signals

SIGNAL current_state, next_state : STATE_TYPE ;

Declare any pre-registered internal signals

SIGNAL BusyR_int : std_logic ;

SIGNAL BusyT_cld : std_logic ;

SIGNAL StrS2_int : std_logic ; -- вставка 2

BEGIN

------------------------------------------------------------------

clocked : PROCESS(Clk, Reset)

------------------------------------------------------------------

BEGIN

IF (Reset = '1') THEN

current_state <= Unit;

Default Reset Values

BusyR <= '0';

BusyR_cld <= '0';

StrS2 <= '0'; -- вставка 3

ELSIF (Clk'event AND Clk = '1') THEN

current_state <= next_state;

-- Registered output assignments

BusyR <= BusyR_int;

StrR <= StrR_int;

StrS2 <= StrS2_int; -- вставка 4

-- Default Assignment To Internals

BusyT_cld <= '0';

-- Combined Actions for internal signals only

CASE current_state IS

WHEN Write =>

IF (Emp = '1') THEN BusyT_cld <= '1' ; END IF;

WHEN OTHERS =>

NULL;

END CASE;

END IF;

END PROCESS clocked;

------------------------------------------------------------------

nextstate : PROCESS (Ack, Addr7, Emp, Rd, WR, current_state)

------------------------------------------------------------------

BEGIN

CASE current_state IS

WHEN Unit =>

next_state <= Idle;

WHEN Idle =>

IF (WR = '1') THEN next_state <= Write;

ELSIF (Rd = '1') THEN next_state <= Read;

ELSE next_state <= Idle;

END IF;

WHEN Write =>

IF (Emp = '1') THEN next_state <= Write;

ELSIF (Ack = '1') THEN next_state <= Inc;

ELSE next_state <= Write;

END IF;

WHEN Read =>

IF (Emp = '1') THEN next_state <= Read;

ELSIF (Ack = '1') THEN next_state <= Inc;

ELSE next_state <= Read;

END IF;

WHEN Inc =>

IF (Addr7 /= '1') THEN next_state <= Idle;

ELSIF (Addr7 = '1') THEN next_state <= Unit;

ELSE next_state <= Inc;

END IF;

WHEN OTHERS =>

next_state <= Unit;

END CASE;

END PROCESS nextstate;

------------------------------------------------------------------

output : PROCESS (Ack, Emp, Rd, WR, current_state)

------------------------------------------------------------------

BEGIN

-- Default Assignment

Busy <= '0'; BusyR_int <= '0';

ClrAddr <= '0'; En <= '0';

EnInc <= '0'; Ld <= '0';

Str <= '0'; StrR_int <= '0';

-- Default Assignment To Internals

StrS2_int <= '0'; -- вставка 5

-- Combined Actions

CASE current_state IS

WHEN Unit =>

ClrAddr <= '1' ;

WHEN Idle =>

IF ((Rd = '1') AND (WR = '0')) THEN StrS2_int <= '1' ; -- вставка 6

END IF;

WHEN Write =>

En <= '1' ; Ld <= '1' ;

IF (Emp = '1') THEN

Busy <= '1' ;

END IF;

WHEN Read =>

Str <= '1' ; StrR_int <= '1' ;

IF (Emp = '1') THEN

Busy <= '1' ; BusyR_int <= '1' ;

END IF;

IF (Ack='0') OR (Ack=’1’ AND Emp=’1’)THEN StrS2_int <= '1' ; -- вставка 7

END IF;

WHEN Inc =>

EnInc <= '1' ;

WHEN OTHERS => NULL;

END CASE;

END PROCESS output;

-- Concurrent Statements

-- Clocked output assignments

BusyT <= BusyT_cld;

END fsm;

Приведем основные выводы при рассмотрении этой программы-образца.

Программа написана в форме трех процессов и одного параллельного оператора назначения значения сигнала. Регистру памяти состояния автомата соответствует процесс по имени clocked, комбинационной схеме, определяющей следующее состояние автомата, – процесс nextstate, комбинационной схеме, определяющей значения выходных сигналов, – output. Для представления состояний автомата, входов и выходов использованы сигналы перечислимых типов. Декларации типов размешаются в разделе деклараций архитектурного тела, но могут объявляться и в пакете.

Регистр состояний представлен сигналом current_state. Так как регистр состояний является датчиком информации о текущем состоянии и одновременно приемником нового значения, во избежание гонок использован регистр с динамическим управлением. Выход комбинационной логики представлен сигналом next_state. Важно иметь в виду необходимость принудительного задания начального состояния автомата (оператор “IF reset = ’1’ THEN…) . Хотя в процессе моделирования по умолчанию при запуске устанавливается крайнее левое значение из списка значений, в синтезированной схеме установка по умолчанию игнорируется. Начальное значение не определено, а это может привести к любым непредсказуемым последствиям. После вычисления нового состояния и выходных сигналов в системах моделирования процесс переходит в состояние ожидания нового запускающего события (обратите внимание на то, что сигналы вычисляются на основе состояний, которые были перед фронтом тактирующего сигнала, а не вычисленных в текущем такте).

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

В автомате Мили с асинхронными выходами и автомате Мура выход формируется комбинационной логической схемой. В программе это должно интерпретироваться параллельным оператором присваивания, а если алгоритм формирования выхода слишком сложный, то оператором PROCESS, список чувствительности которого включает все аргументы функции выходов (состояние, а для автомата Мили с асинхронными выходами также и вход).

Из девяти выходных сигналов примером основных видов сигналов служат три сигнала Busy, BusyT и BusyR. Первый из них соответствует комбинационному типу, второй – тактируемому а третий – регистрируемому. Комбинационный сигнал повторяет на выходе автомата во времени возникновение и исчезновение условия с задержкой соответствующей задержке комбинационной схемы. Тактируемые и регистрируемые сигналы выставляются и снимаются на выходе по условию их формирования в моменты тактирования. Если длительность комбинационных сигналов совпадает с длительностью соответствующих им входным сигналам, то для тактируемых и регистрируемых сигналов длительность оказывается зависящей от условия их формирования и кратной периоду тактирования.

По схемотехническому назначению (целевому) управляющие сигналы систем могут быть отнесены к одному из двух классов – разрешающие (потенциальные) и непосредственно управляющие (импульсные). Для комбинационных сигналов (при значительной ярусности синтезируемой схемы) характерна потенциальная возможность появления ложных выбросов (пиков). По условиям их возникновения их временная привязка в тактируемой системе оказывается смещенной от фронта таковых сигналов. Поэтому появление пиков для разрешающих сигналов оказывается безопасным. В примере к этому классу сигналов можно (в соответствии с их именами) отнести сигналы En, EnInc и Ld.

Сигналы ClrAddr и Str (в соответствии с их именами) по-видимому, являются комбинационными сигналами импульсного типа. И если, например, сигнал ClrAddr планировался для использования в качестве асинхронного сигнала начальной установки счетчика, то паразитные импульсы могут сбрасывать счетчик в моменты времени не предусмотренные разработчиком. Моделирование синтезированного описания в САПР MAX+Plus II фирмы Altera показало, что ложные пики появляется у большинства комбинационных сигналов. Для сигнала Str были проведены дополнительные исследования. В проект был включен регистровый сигнал StrS (фрагмент автомата Мили с синхронными выходами), у которого ложные выбросы отсутствуют, но ценой за это является задержка на один такт автомата относительно сигнала Str. Поэтому изменение выхода происходит в следующем такте после соответствующего изменения состояния. Для соблюдения взаимного расположения сигналов временного кластера с сигналом StrS необходимо и остальные комбинационные сигналы кластера перевести в разряд регистрируемых.

Рассмотренное выше запаздывание на такт можно устранить только добавлением в текст программы, создаваемый САПР HDL Designer Series (и ей подобным), дополнительных конструкций. В них присваивания комбинационным частям выходных триггеров должны размещаться в операторах аналогичным операторам присваивания состояния, как и принято в программе 5.1. Набор этих конструкций для сигнала StrS2 приведен в листинге 5.1 с комментарием «вставка №Х».

На рис. 5.9 приведена временная диаграмма работы автомата (листинг 5.1),

Рис. 5.9 Временная диаграмма работы автомата