Автор: Пользователь скрыл имя, 23 Ноября 2012 в 10:03, курс лекций
Конечные автоматы и такие связанные с ними конструкции как линейные грамматики и регулярные выражения относятся к важнейшим понятиям информатики. Различные варианты конечных автоматов и близкие им математические объекты служат для описания и анализа технических устройств, различных систем и процессов, программ и алгоритмов. Теория автоматов является одним из старейших разделов теоретической информатики.
В читаемом курсе рассматриваются цифровые автоматы как теоретическая основа проектирования аппаратных средств ЭВМ последовательного типа. В этом случае принято рассматривать цифровой автомат как совокупность операционного автомата (исполнительного устройства) и управляющего автомата (собственно конечного автомата), образующих операционное устройство.
Теория автоматов. Введение.
Теория автоматов. Арифметика ЦВМ
Теория автоматов. Системы счисления
Теория автоматов. Конечные цифровые автоматы.
Рисунок 7 Гонки в цифровом автомате
Если после воздействия на вход автомата сигнала хi автомат попадает в состояние, которое имеет код (0010), а затем на вход его поступает сигнал xk, который должен перевести автомат в состояние с кодом (1011), то во время этого перехода должны переключиться два элемента памяти. При этом возможны промежуточные переключения в состояния с кодами (1010) или (0011), не входящие в программу работы автомата. Избежать критических состязаний элементов памяти можно, кодируя состояния таким образом, чтобы все переходы совершались между состояниями, закодированными соседними кодами. Кодирование смежных состояний соседними кодами называется противогоночным кодированием. Такие коды, как правило, избыточны. Кроме того, для таких кодов существуют ограничения:
Поэтому такой метод борьбы с гонками практически не применяется.
Аппаратные методы борьбы с гонками
Один из способов ликвидации гонок состоит в тактировании входных сигналов автомата импульсами определенной длительности. Если длительность тактирующего сигнала меньше самого короткого пути прохождения тактированного сигнала обратной связи по комбинационной схеме, то к моменту перехода в промежуточное состояние тактирующий сигнал равен 0 и, следовательно, не влияет на формирование функций возбуждения. Это исключает гонки.
Другой способ ликвидации гонок состоит в использовании двухтактной памяти. В этом случае каждый элемент памяти дублируется, причем переключение второго слоя триггеров происходит по отсутствию тактирующего сигнала. Сигналы обратной связи снимаются со второго слоя триггеров, а поступление сигналов возбуждения на входы триггеров и сигналов обратной связи на входы схемы оказываются разнесенными во времени, что и устраняет причину гонок.
Обычно число переменных, от которых существенно зависит каждый переход в микропрограммном автомате (МПА), невелико по сравнению с мощностью множества входных переменных. Пусть МПА задан таблицей переходов-выходов, Табл. 1. Рассмотрим способ реализации МПА, основанный на замене множества входных переменных Х множеством новых переменных Р, содержащим, как правило, существенно меньшее число элементов. Обозначим через X{am} множество входных переменных, определяющих все переходы автомата из состояния am. В рассматриваемом примере :
X(a1)={x1}, X(a2)=Æ, X(a3)={x7,x8}, X(a4)={x1, x2, x3}, X(a5) = {x4, x6}, X(a6) = {x5, x7}, X(a7)=Æ, X(a8) = {x6}.
Из этих выражений видно, что наибольшее число переменных (три) случается на переходе из состояния а4. Обозначим это число в общем случае через G и образуем новое множество переменных P={p1, p2 , ... , pG}. Ясно, что мощность этого множества меньше мощности множества входных переменных Х. На практике бывает значительно меньше. Тогда каждую переменную из множества Х можно заменить переменной из множества Р так, чтобы pg =xl, если в состоянии am переменная xl заменена переменной pg.
Предположим, что в примере замена переменных уже сделана так, как это представлено в Табл. 2. В этой таблице на пересечении строки am и столбца pg записан элемент xl , если в состоянии am переменная xl заменяется переменной pg.
Таблица 32
am |
as |
X(am,as) |
[am] |
[as] |
P(am, as) |
Yt |
D1 D2 D3 |
h |
a1 |
a1 a3 |
`x1 x1 |
000 |
000 001 |
`p1 p1 |
- Y0 y7 Y8 |
0 0 0 0 0 1 |
1 2 |
a2 |
a3 |
1 |
011 |
001 |
1 |
y10 y11 Y4 |
0 0 1 |
3 |
a3 |
a6 a8 a2 |
x7 `x7 x8 `x7 `x8 |
001 |
101 111 011 |
p2 `p2p3 `p2`p3 |
y10 y11 Y4 Y0 y2 y5 y10 Y1 |
1 0 1 1 1 1 0 1 1 |
4 5 6 |
a4 |
a1 a3 a7 a4 |
x1 x3 x1 `x3 `x1 x2 `x1 `x2 |
010 |
000 001 100 010 |
p1p3 p1`p3 `p1p2 `p1`p2 |
y3 y4 Y2 y1 y3 y4 Y3 y3 y4 Y7 y1 Y6 |
0 0 0 0 0 1 1 0 0 0 1 0 |
7 8 9 10 |
a5 |
a4 a5 a8 |
x4 x6 x4 `x6 `x4 |
110 |
010 110 100 |
p1p2 p1`p2 `p1 |
y6 y13 Y9 y6 y13 Y9 y6 y8 Y5 |
0 1 0 1 1 0 1 0 0 |
11 12 13 |
a6 |
a2 a3 a8 |
x5 `x5 x7 `x5`x7 |
101 |
011 001 111 |
p1 `p1p2 `p1`p2 |
y10 y11 Y4 y12 Y10 y10 y11 Y4 |
0 1 1 0 0 1 1 1 1 |
14 15 16 |
a7 |
a5 |
1 |
100 |
110 |
1 |
y1 Y6 |
1 1 0 |
17 |
a8 |
a8 a5 |
x6 `x6 |
111 |
111 110 |
p2 `p2 |
- Y0 y9 y11 Y7 |
1 1 1 1 1 0 |
18 19 |
Предположим, что связь входных переменных и состояний, переход из которых они инициируют, а также новые переменные, заменяющие исходные, представлены в Табл. 2. В этой таблице в столбцы p1, p2, p3 записаны имена новых переменных, от которых существенно зависит переход из состояния am в любое состояние as. Из таблицы видно, что р1 должна быть равна х1 в состояниях а1 и а4, х4 в состоянии а5, х5 в состоянии а6. Тогда выражение для р1 будет иметь вид
p1 =a1x1 Ú a4x1 Ú a6x5.
Действительно, если МПА находится в состоянии а1, то а4 = а5 = а6 = =0, а а1 = 1, поэтому р1 = х1 . Выражения для р1, р2, и р3 можно получить непосредственно из табл. 2. Однако, если в какой либо клетке данного столбца таблицы стоит прочерк, то функция не полностью определенная, т.е. переменная pg может быть равна любой переменной в состоянии am. Точно так же переменная р1 не определена в состояниях а2, а7 и а8. В связи с этим в выражение для р1 можно добавить всевозможные слагаемые: a2xt, a3xt, a7xt, a8xt, используя их для упрощения р1. В качестве xt следует выбирать только переменные из столбца р1. Тогда выражение для р1 примет вид
p1 = a1x1 Ú a4x1 Ú a5x4 Ú a6x5 Ú [(a2 Ú a3 Ú a7 Ú a8) & (x1 Ú x4 Ú x5)],
где доопределяющие слагаемые заключены в квадратные скобки. Для р2 и р3 получим аналогичные выражения и преобразуем их таким образом, чтобы дизъюнктивный сомножитель при каждой исходной переменной содержал имена тех состояний, переход из которых зависит от этой переменной, и тех состояний, которые не зависят от этой переменной.
p1 = (a1 Ú a4 Ú [a2 Ú a3 Ú a7 Ú a8] )x1 Ú (a5 Ú [a2 Ú a3 Ú a7 Ú a8] )x4 Ú
(a6 Ú [a2 Ú a3 Ú a7 Ú a8] )x5;
p2 = (a3 Ú a6 Ú [a1 Ú a2 Ú a7] )x7 Ú (a4 Ú [a1 Ú a2 Ú a7] )x2 Ú (a5 Ú a8 Ú [a1 Ú a2 Ú a7] )x6;
p3 = (a3 Ú [a1 Úa2 Ú a5 Ú a6 Ú a7 Ú a8] )x8 Ú (a4 Ú [a1 Úa2 Ú a5 Ú a6 Ú a7 Ú a8] )x3.
Для кодирования состояний МПА используем диаграмму Вейча, размещая в ней имена состояний таким образом, чтобы они склеивались между собой, образуя интервалы наименьшего ранга. В каждой склейке могут участвовать метки состояний, соответствующие переменной xj, в данном столбце табл.2, и метки состояний, занесенных в квадратные скобки данного уравнения. Если для кодирования состояний используются не все возможные кодовые комбинации, соответствующие всем наборам значений внутренних переменных, то неиспользуемые коды образуют области неопределенности функции (диаграммы), которые могут участвовать в любых склейках. Необходимо только следить за тем, чтобы в склейку, определяющую конъюнкцию при переменной xj, не попадали метки состояний , для которых обозначен переход в другие состояния под действием других переменных в этом же столбце таблицы. Очевидно, что разным способам размещения меток в диаграмме будут соответствовать разные выражения, определяющие новые внешние переменные МПА. Искусство разработчика состоит в минимизации суммарной сложности выражений, определяющих значения новых переменных.
a5 |
a8 |
a2 |
a4 |
a7 |
a6 |
a3 |
a1 |
Таблица 33
Pg am |
p1 |
p2 |
p3 |
a1 |
x1 |
- |
- |
a2 |
- |
- |
- |
a3 |
- |
x7 |
x8 |
a4 |
x1 |
x2 |
x3 |
a5 |
x4 |
x6 |
- |
a6 |
x5 |
x7 |
- |
a7 |
- |
- |
- |
a8 |
- |
x6 |
- |
В правой части Табл. 2 приведен возможный вариант кодирования состояний. В этом случае уравнения для новых входных переменных микропрограммного автомата примут вид:
p1 = `t1 x1 Ú t1t2x4 Ú `t2 t3x5,
p2 = `t2x7 Ú `t1`t3x2 Ú t1t2x6,
p3 = `t2x8 Ú t2x3.
Введем в структурной таблице МПА, Табл. 1, дополнительный столбец P(am, as), в котором входные переменные из множества Х заменены переменными p1, p2, p3 в соответствии с Табл.2. В столбцы [am], [as] запишем коды состояний МПА в соответствии с размещением меток в диаграмме Вейча, показанном в правой части Табл.2, и определим функции возбуждения элементов памяти, а именно входные сигналы D- триггеров.
Следующим этапом проектирования МПА является построение логических функций возбуждения элементов памяти. Простейшим способом является построение этих функций непосредственно по таблице переходов-выходов (тривиальная реализация).
D1 = a3(p2Ú`p2p3) Ú a4`p1p2 Ú a5(p1`p2Ú`p1) Ú a6`p1`p2 Ú a7 Ú a8(p2 Ú`p2);
D2 = a3(`p2p3 Ú `p2`p3) Ú a4`p1`p2 Ú a5(p1p2 Ú p1`p2) Ú a6(p1 Ú`p1`p2) Ú a7 Ú a8(p2 Ú `p2);
D3 = a1p1 Ú a2 Ú a3(p2 Ú `p2p3 Ú `p2`p3) Ú a4p1`p3 Ú a6(p1 Ú `p1p2 Ú `p1`p2) Ú a8p2.
Преобразуя эти выражения с использованием правил склеивания, обобщенного склеивания и поглощения, получим:
D1 = a3(p2 Ú p3) Ú a4`p1p2 Ú a5 (`p1 Ú `p2) Ú a6`p1`p2 Ú a7 Ú a8;
D2 = a3`p2 Ú a4`p1`p2 Ú a5p1 Ú a6(p1 Ú `p2) Ú a7 Ú a8;
D3 = a1p1 Ú a2 Ú a3 Ú a4p1`p3 Ú a6 Ú a8p2.
Можно проверить, что суммарная сложность схем, реализующих преобразование переменных и функции возбуждения элементов памяти, меньше, чем при тривиальной реализации функций исходной таблицы. При больших таблицах этот выигрыш более существен.
Замену переменных и кодирование состояний автомата можно выполнять различными способами, которые будут приводить к различным выражениям для функций D1, D2, D3 и различным значениям сложностей схем. Поэтому важно выполнить замену переменных и кодирование таким образом, чтобы обеспечить минимальное число термов в окончательных уравнениях. С этой целью рекомендуется руководствоваться следующими правилами:
О кодировании микрокоманд имеет смысл говорить только для случая построения автомата Мили. В принципе выходные сигналы автомата Мили формируются из тех же конъюнкций, из которых строились функции возбуждения элементов памяти автомата. Так что можно использовать имеющиеся термы, полученные при тривиальной реализации, и сформировать из них микрокоманды. Так как некоторые микрооперации выполняются более чем в одной микрокоманде, для последующего формирования сигналов, инициирующих выполнение микроопераций, используются дизъюнкции микрокоманд. Например, для выходных сигналов в Табл.1 микрокоманды имеют следующий состав: