- •Аннотация
- •1.1. Прототип модуля
- •1.2. Структура иерархического проекта
- •1.3. Иерархическое описание накапливающего сумматора.
- •Variable tr[8..1] : dff;
- •Variable tr[9..1] : dff;
- •Include "rg_a.Inc";
- •Include "add.Inc";
- •Include "rg_out.Inc";
- •Variable
- •2. Проектирование схем двоично-десятичной арифметики.
- •2.1. Двоично-десятичное представление схем.
- •2.2. Двоично-десятичный сумматор
- •Variable
- •2.2. Двоично-десятичный вычитатель
- •Variable
- •2.3. Двоично-десятичные счетчики
- •3.1. Способы задания абстрактных автоматов.
- •3.2. Описание работы автоматов на языке ahdl
- •Init, Working, Waiting, Resuming, Ending.
- •Variable
- •3.3. Проектирование счетчиков на базе абстрактных автоматов
- •Variable
- •4. Проектирование типовых схемотехнических узлов
- •Дешифратора
- •Считается, что одновременно может быть нажата только одна кнопка клавиатуры.
- •Variable
- •4.2. Схемы вычисления функций
- •4.3. Счетчики расхода, пробега
- •Variable
- •Variable
- •Include "t210.Inc";
- •Variable
- •4.4. Узлы обработки сигналов локаторов
- •Include "t210.Inc";
- •Variable
- •4.5. Часы, счетчики времени, календари
- •Variable
- •Variable
- •4.6. Частотомеры
- •Variable
- •4.7. Умножители
- •Input_b_is_constant)
- •5 Проектирование схем с магистральным вводом выводом данных
- •5.1 Правила работы с магистралью, арбитр.
- •Variable
- •5.2 Подготовка временных диаграмм.
- •5.3. Пример сумматора с магистральным вводом-выводом данных.
- •Variable
3.2. Описание работы автоматов на языке ahdl
Использование языка AHDL для описания алгоритма работы автоматов позволяет автоматизировать процедуру синтеза, включая выбор числа разрядов памяти и кодирование состояний автомата. В языке AHDL конечный автомат – это переменная. При описании работы автомата на языке AHDL необходимо входные и выходные порты автомата а затем ввести вышеупомянутую следующую переменную с помощью оператора следующего типа:
<имя автомата> : MACHINE OF BITS(<список имён бит>)
WITH STATES (<список состояний>)
Этот оператор определяет:
имя переменной – символическое имя автомата;
число разрядов памяти и символическое имя каждого разряда;
символические имена состояний автомата.
Указывать число разрядов памяти и их символические имена, а также коды состояний автомата необязательно. Поэтому в простейшем случае для задания конечного автомата используется следующая конструкция:
<имя автомата> : MACHINE WITH STATES (<список состояний>)
В этом случае компилятор, оптимизируя структуру автомата самостоятельно выбирает как разрядность блока памяти, так и коды состояний автомата.
В рамках языка AHDL конечный автомат, а следовательно и переменная, его обозначающая имеет три управляющих входа:
CLK - вход тактового сигнала;
Reset – вход асинхронного сброса;
ENA – вход разрешения работы.
Обязательно использование только входа CLK. Если входы Reset и ENA не используются, то на них автоматически подаются сигналы не препятствующие работе автомата.
Описание работы автомата на языке AHDL обычно осуществляется с помощью таблицы истинности. Причём в таблице описывается и функция выходов и функция переходов.
Рассмотрим пример абстрактного автомата Мура. Автомат содержит:
Входы: START, ABAR, CLK.
Выходы: WORK, END_WORK.
Автомат имеет следующие состояния.
Init, Working, Waiting, Resuming, Ending.
Таблица переходов автомата имеет следующий вид:
Исходное состояние |
Входные сигналы |
Новое состояние |
Init |
START=1 |
Working |
Init |
START=0 |
Init |
Working |
START=0 |
Waiting |
Working |
START=1 |
Working |
Waiting |
START=1 |
Ruming |
Waiting |
START=0 |
Ending |
Ruming |
START=0 |
Waiting |
Ruming |
START=1 |
Working |
Ending |
|
Init |
Выходные сигналы автомата выглядят следующим образом.
Состояние |
Выходные сигналы |
Init |
WORK=0, END_WORK=0 |
Working |
WORK=1, END_WORK=0 |
Waiting |
WORK=1, END_WORK=1 |
Ruming |
WORK=0, END_WORK=0 |
Ending |
WORK=0, END_WORK=1 |
С учётом вышесказанного, описание работы автомата на языке AHDL имеет следующий вид:
SUBDESIGN Moor1
( Start,ABAP,clk : INPUT;
Work,End_work : OUTPUT;)
VARIABLE
FSM : MACHINE WITH STATES
(INIT,WORKING,WAITING,RUMING,ENDING);
BEGIN
FSM.clk=CLK;
FSM.RESET=ABAP;
TABLE
FSM , START => WORK, END_WORK, FSM;
INIT, 0 => 0, 0, INIT;
INIT, 1 => 0, 0, WORKING;
WORKING, 0 => 1, 0, WAITING;
WORKING, 1 => 1, 0, WORKING;
WAITING, 0 => 1, 1, ENDING;
WAITING, 1 => 1, 1, RUMING;
RUMING, 0 => 0, 0, WAITING;
RUMING, 1 => 0, 0, WORKING;
ENDING, B"X" => 0, 1, INIT;
END TABLE;
END;
В приведённом описании задана внутренняя переменная FSM, являющаяся символическим именем конечного автомата, имеющего пять состояний.:INIT, WORKING, WAITING, RUMING, ENDING. Отметим, что при её задании указаны только состояния автомата.
Уравнение FSM.clk=CLK; определяет соединение тактового сигнала с тактовым входом конечного автомата.
Вход ABAP соединяется с входом асинхронного сброса автомата, что определяется уравнением FSM.RESET=ABAP;
Поскольку вход разрешения работы FSM.ENA не используется, то на него автоматически подаётся логический уровень не препятствующий нормальной работе автомата (логическая единица).
В левой части таблицы истинности (слева от знака =>) указываются текущее состояние и набор входных сигналов. В правой части – состояние в которое автомат перейдёт при появлении на входе CLK перепада из «0» в «1», т.е. состояние перехода. И кроме того в в правой части перечисляются выходные сигналы автомата.
Отметим, что описание представленного автомата может быть сделано с помощью операторов CASE и IF THEN.
Пример такого описания приведен ниже.
SUBDESIGN Moor2
( Start,ABAP,clk : INPUT;
Work,End_work : OUTPUT;)