Помощь в написании студенческих работ
Антистрессовый сервис

Конечные автоматы. 
Язык AHDL

РефератПомощь в написанииУзнать стоимостьмоей работы

В приведенном примере реализован простейший автомат, обеспечивающий деление на четыре частоты следования импульсов синхронизации, поступающих на внешний входной порт clock. Выходные импульсы автомата, появляющиеся в четыре раза реже синхронизирующих, подаются на внешний порт outf. Автомат объявлен в разделе переменных с именем fcont и четырьмя состояниями: f0, f1, f2 и f3. Первые две строки… Читать ещё >

Конечные автоматы. Язык AHDL (реферат, курсовая, диплом, контрольная)

Конечный автомат (state machine) — это цифровое устройство с памятью, выходные сигналы которого зависят от предыстории поступления входных сигналов. Примером простого конечного автомата может служить устройство, обеспечивающее деление частоты следования входных импульсов, например на 10. У такого автомата должно быть 10 состояний, один вход и один выход. Переход из одного состояния в другое должен происходить, например, с приходом каждого очередного возрастающего фронта входного сигнала. При переходе из девятого состояния в десятое на выходе должна появляться логическая единица, которая вновь превращается в логический нуль при переходе из десятого состояния в первое (начальное). При всех остальных переходах значение выходного сигнала не изменяется.

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

  • * clk — вход сигнала синхронизации триггеров (активным, т. е. изменяющим состояние триггеров, является возрастающий фронт);
  • * reset — вход асинхронного сброса автомата — принудительного перевода его в исходное состояние (активный уровень — vcc);
  • * ena — вход разрешения работы автомата (активный уровень — vcc).

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

Для создания конечного автомата на языке AHDL необходимо выполнить следующие шаги:

  • * в разделе переменных объявить конечный автомат и его состояния;
  • * в логическом разделе поместить выражения, обеспечивающие поступление предопределенных сигналов управления в автомат;
  • * в логическом разделе с помощью операторов case или table описать логику переходов между состояниями автомата, а также поставить в соответствие тем состояниям, для которых это необходимо, логические значения выходов автомата.

Простейшее объявление конечного автомата должно содержать имя автомата, сопровождаемое двоеточием и ключевым словом machine. За ключевым словом machine должен следовать список состояний, заключенный в круглые скобки и предваряемый ключевыми словами with states. Первое состояние в списке является исходным для автомата, оно устанавливается по сигналу reset.

Пример:

subdesign example8.

(.

clock:input; —сигнал синхронизации.

f_on:input; —внешний сигнал включения.

outf:output; —выход автомата.

).

variable.

fcont:machine with states (f0,f1,f2,f3);

begin.

fcont.clk=clock; —подключение сигнала синхр.

fcont.ena=f_on; —подача сигнала включения.

table.

fcont => fcont, outf;

f0 => f1, gnd;

f1 => f2, gnd;

f2 => f3, vcc;

f3 => f0, gnd;

end table;

В приведенном примере реализован простейший автомат, обеспечивающий деление на четыре частоты следования импульсов синхронизации, поступающих на внешний входной порт clock. Выходные импульсы автомата, появляющиеся в четыре раза реже синхронизирующих, подаются на внешний порт outf. Автомат объявлен в разделе переменных с именем fcont и четырьмя состояниями: f0, f1,f2 и f3. Первые две строки логического раздела подключают внешние входные порты clock и f_on к предопределенным управляющим входам автомата clk и ena. Следующий далее оператор table описывает переходы между состояниями, а также соответствующие новым состояниям значения выходного порта outf.

Согласно приведенному описанию автомата, для перехода из любого текущего состояния в следующее не требуется каких-либо управляющих сигналов. Переходы осуществляются с приходом возрастающего фронта сигнала clk. Поскольку все конечные автоматы, синтезируемые компилятором MAX+Pius II, являются синхронными, явное указание сигнала clk в качестве логической переменной внутри оператора table (или иного оператора, описывающего переходы между состояниями автомата) не требуется. При синтезе такого автомата компилятор выделит минимальное количество триггеров (запоминаемых битов), требуемое для выбранного семейства микросхем. В частности при реализации примера в микросхеме семейства MAX3000 это будут два триггера.

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

Пример:

subdesign example9.

(.

clock:input;

f_on:input;

outb[3.0]: output; —выходы автомата.

).

variable.

fcont:machine of bits (ba, bb, bc, bd).

with states (.

f0=b" 0001″ ,.

f1=b" 0010″ ,.

f2=b" 0100″ ,.

f3=b" 1000″ .

);

begin.

fcont.clk=clock; —подключение сигнала синхронизации.

fcont.ena=f_on; —подача сигнала включения.

outb[]=(ba, bb, bc, bd);

table.

fcont => fcont;

f0 => f1;

f1 => f2;

f2 => f3;

f3 => f0;

end table;

end;

В приведенном примере реализован автомат, который, в отличие от предыдущего, в каждом состоянии подает логическую единицу на соответствующий этому состоянию выход (так работает автомат «бегущие огни»). Поскольку в таком устройстве необходимы 4 выхода, то автомат с помощью ключевых слов of bits и списка в круглых скобках объявлен с четырьмя именованными битами хранения состояний ba, bb, bc и bd. Эти биты (триггеры) в логическом разделе подключены к 4 выходным портам outb[3.0]. Кроме этого, при объявлении состояний автомата им поставлены в соответствие требуемые значения кодов состояний (b" 0001″, b" 0010″ и т. д.), т. е. наборов бит для хранения состояний. Эти коды автоматически присваиваются объявленной группе битов (ba, bb, bc, bd), что позволяет не включать значения выходов автомата в каждую строку оператора table.

Показать весь текст
Заполнить форму текущей работой