Скачайте в формате документа WORD

Методичка для курсового проектирования по ПТЦА (прикладная теория цифровых автоматов)

нтик М.И. 11_03_91 МИРЭА


АЛГОРИТМЫ ПРОЦЕДУРНОГО ТИПА. ОПЕРАЦИОННЫЕ СТРОЙСТВА

Алгоритмы этого типа являются следующим этапом обобщения

описаний вычислительных процессов. Теперь, по сравнению с ал-

горитмами автоматного типа, на каждом шаге, помимо модифика-

ции памяти, идентифицирующей шаг алгоритма, разрешается изме-

нять любую другую память стройства локально (по частям)а или

глобально (всю сразу).

Устройство-исполнитель алгоритма этого типа будема назы-

вать операционным стройством (ОУ).

ОУ можно рассматривать как одина синхронный автомата со

сложно структурированной памятью - состоянием:а часть памяти

используется для идентификации шага алгоритма, остальная па-

мять используется для запоминания промежуточныха данных, вы-

числяемых в процессе последовательного, по шагам, выполнения

лгоритма. Такая модель вычислителя особенно добна для рас-

чета продолжительности одного такта работы стройства.

Другой удобной моделью вычислителя является совокуп-

ность взаимодействующих синхронных автоматов, один из которых

называется правляющим автоматом (УА), объединение всех ос-

тальных автоматов называется операционным автоматом (о).

у является исполнителем алгоритма автоматного типа, ко-

торый входит составной частью в любой алгоритма процедурного

типа. Кроме того, у инициирует действия отдельных шагова ал-

горитма и частвует в их выполнении.

о выполняет все вычисления на отдельных шагах алгоритма

под правлением А; кроме того, к о добно отнести всеа вы-

числения предикатных функций, оставив у только анализ вычис-

ленных предикатных значений.

Прежде чем переходить к точным терминам, рассмотрим сле-

дующиe примеры алгоритмов процедурного типа.

Например, каноническое описание синхронного конечного

втомата может быть интерпретировано (истолковано) кака одно-

шаговый алгоритм процедурного типа.

┌──────┐а │

а ┌──V──V─────┐

│ B=FO(S,A) │

│ │

│ S:=FS(S,A)│

а └─────┬─────┘

└─────────┘


Исполнитель этого алгоритма состоита только иза о. На

каждом шаге этого алгоритма изменяется вся память устройства,

поэтому правление памятью не требуется, идентифицировать ша-

ги этого алгоритма не надо.

Например, инкрементор с одноразрядным входом иа однораз-

рядным выходом может быть реализацией следующиха преобразова-

ний:

█ p:=1 █

┌────────┐ │

┌─────V─V───────┐

│ (p:, b) = a+p │

└───────┬───────┘

└──────────┘



о, реализующий инкрементор в целом, будет следующим:

┌──┬─┐

a ──────────────────┤HS│S├────b

┌─┬─┐p │ │

начальное значен.─┤S│T├──┤а │P├──┐

├─┤ └──┴─┘а │

SYN ─────────/C│ │ │

┌┤D│ │ │

│└─┴─┘ │

└───────────────┘


Конечно, эта реализация совпадает с реализацией алгоритма ав-

томатного типа, если состояние р1 кодируется 1, состояние

р0 - 0.

Этот пример показывает,что до начал вычисленийа может

потребоваться начальная становка памяти. На самома делеа это

необходимо было же в алгоритмах автоматного типа, така как

код начального состояния требуета предварительной станов-

ки. Ограничимся здесь обозначением этой проблемы, решение

ее, связанное прежде всего са корректнойа синхронизацией с-

тройства в первом такте его работы, рассмотрим ниже.

При рассмотрении процедуры построения автомата Мур эк-

вивалентного автомату Мили, не обсуждалась простая возмож-

ность ее реализации и на структурном ровне. Например, только

что рассмотренный автомат Мили может быть преобразована в эк-

вивалентный автомат Мура по одному из следующих вариантов:

┌┬─┬┐t┌──┬─┐ ┌──┬─┐а ┌┬─┬┐

a ──┤│T│├┤HS│S├─b a ─────┤HS│S├─┤│T│├─b

─/┴┴─┴┘ │ │ │ │─/┴┴─┴┘

C │ │ C │ │ C

─/┬┬─┬┐p │ │ ─/┬┬─┬┐p │ │

┌┤│T│├┤а │P├┐ ┌┤│T│├┤а │P├┐

│ └┴─┴┘ └──┴─┘│ │ └┴─┴┘ └──┴─┘│

└─────────────┘ └─────────────┘

При таких структурных преобразованияха проще истолковы-

вать алгоритмы как процедурные.

█ █

█ p:=1; t:=0 █ █ p:=1 █

█ █

┌────────┐ │ ┌────────┐ │

┌─────V─V───────┐ ┌─────V─V───────┐

│t:=a;(p:,b)=t+p│ │ (p, b):= a+p │

└───────┬───────┘ └───────┬───────┘

└──────────┘ └──────────┘


БЛОК-ТЕКСТ. Способ описания автоматного алгоритм после

некоторых дополнений может быть использована иа для описания

лгоритмов в процедурной форме:

Блок-текст состоит из трех частей:

1)- Описание переменных и начальных значений памяти.

2)- Описания функций и связей. Записываются любые функцииа и

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

ющие запоминания. Переменные из левой части операции присва-

ивания таких функциональных описаний используются ва блоках

процедуры.

3)- Процедура, состоящая из блоков (микроблоков) операторных

и блоков переходов:

- операторные - в скобках вид {.....},

- переход - в скобках вид <<...>>;

и те, и другие блоки могут снабжаться метками, стоящими перед

блоком. В блоках перехода используется оператора GOа в одной



из двух форм:

GO m - безусловный переход,

GO (P; m0,m1,m2,...) - словный переход.

здесь m0,m1,... - метки блоков,

P - предикатное значение,интерпретируемое оператором GO

как неотрицательное целое число, являющееся порядковыма номе-

ром метки в списке меток оператора GO. Са этойа метки должно

быть продолжено выполнение алгоритма. Блоки словныха перехо-

дов эквивалентны предикатным вершинам блок-схемы алгоритма.


На следующем более сложном примере демонстрируется пос-

ледовательность синтеза операционного стройства.

Пример. Вычислитель наибольшего общего делителя (НОД)

двух натуральных чисел (8-разрядных).

1) Разработаем интерфейс вычислителя:


8а ┌──┬─────┬──┐

═══╪═>╡I1│ НОД │

│ 8

8а │ │D ╞══╪══>

═══╪═>╡I2│ │

├──┤ ├──┤

─────>┤rI│ │rO├─────>

├──┤ │

─────>┤ C│ │

└──┴─────┴──┘


I1[7..0], I2[7..0] -входные информационные шины.

rI -входной сигнал готовности: если rI=1, то н входаха I1,

I2 готовы операнды.

D[7..0] -выходная информационная шина.

rO -выходной сигнал готовности: если rO=1, то готова резуль-

тат на шине D, который сохраняется до появления новых операн-

дов.

2) Математическое обоснование алгоритма вычислений:

Идея алгоритма, следуя Евклиду (в. до р.Х.), заключа-

ется в том, что НОД двух натуральных чисел А и В в случае ра-

венства этих чисел совпадает с любым из них, ва случае их

неравенства совпадает с НОД двуха другиха чисел:а меньшего и

разности между большим и меньшим. Последовательно, меньшая

числа, получим два равных числа -значение одного из них и бу-

дет НОД исходных чисел.

3) Блок-схема алгоритма (микропрограмма в содержательном

виде):



┌──────V──────┐

m1 rO: = 0 │

└──────┬──────┘

│┌──────────────────┐

││┌─────┐ │

── │ │

/ \ 0 │ │

< rI>─────┘ │

\_/ │

│1 │

┌──────V──────┐ │

rO: = 0 │ │

│ │ │

m2а А: = I1 │ │

│ │ │

а B: = I2 │ │

└──────┬──────┘ │

┌───────────────────┐│ │

│ ┌─────VV──────┐ │

│ m3│ (p,S)=A - B │ │

│ └──────┬──────┘ │

│ ─V─ m6 │

│ /а \ =0а ┌──────────┐│

│ z <S==0>───>┤ rO:=1;D=A├┘

│ \__/ └──────────┘

│ │╪0

│ V

│ 0 / \ 1

│ ┌───────< p >────────┐

┌───────V──────┐ \_/ ┌───────V──────┐

│m4 (x,B:)=-A+B а m5│ (x,A:)=A - B │

└───────┬──────┘ └───────┬──────┘

└──────────┴────────────────────┘


Или в виде блок-текста:

I1[7..0], I2[7..0] --входные шины

D[7..0] --выходная шина

rI, rO --сигналы готовности

A[7..0]:, B[7..0]: --память текущих значений

S[7..0] --разность

z, p --предикатные переменные

z=┐(!/S) --сжатие(свертка) S[7..0] по ИЛИ-НЕ

--можно записать иначе z=(S==0)

D=A

------------------------------------------m1{rO:=0}

g1<<GO(rI;g1,m2)>>

m2{rO:=0; A:=I1; B:=I2}

m3{(p,S)=A-B}

<<GO(z;g2,m6)>>

g2<<GO(p;m4,m5)>>

m4{(x,B:)=-A+B}

<<GO m3>>

m5{(x,A:)= A-B}

<<GO m3>>

m6{rO:=1}

<<GO g1>>


4) Разработка функциональной схемы операционного автома-

та.



В о должны быть реализованы все переменные с памятьюа и

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


A ╔══════════════════════════════>D

─/┬┬──┬┐а ║ ┌────────────┐

C││RG│ ║ f1=(A-B) │

│ │ ║ A│ │

I1═════> ══>╡ │╞══╝а ═>╡ f2=(-A+B)│ ┌─┐

│ ││ │ │S S│1│

│ ││ │ ╞> ═>┤ o───>z

┴┴──┴┘ │ │ │ │

B │ │ └─┘

─/┬┬──┬┐ │ │

C││RG││ │ ├────────────>p

│ ││B B│ │

I2═════> ═>╡ │╞> ═>╡ │ ─/┬┬─┬┐

│ ││ │ │ C││ │├>rO

│ ││ │ │ ││ ││

rI─────> ┴┴──┴┘ └────────────┘ └┴─┴┘


Кроме того, в о необходимо реализовать все информацион-

ные связи, соответствующие микрооперации коммутации, также

микрооперации запоминания (загрузки, записи) и обнуления.

╔══════════════════════════════════════════════╗

║ A ╔══════════════════════║═══════>D

║а ┌────┐ ─/┬┬──┬┐а ║ ┌────┐ ┌──────┐ ║

║а │ MUX│ C││RG│ ║ │M2*8│ 1─>┤crа SM│ ║

╠═>┤0 │ │ │ ║ │ │ ├─ │ ║

I1══║═>┤1 ╞══════>╡ │╞══╩══>╡ ╞═══>╡I1 │ ║ ┌─┐

║а ├ │ │ │ A │ │ │ │ ║ │1│

║а │ │ W│ ││ ├─ │ │ S╞═╩>╡ o───>z

║а └A───┘ ─A┴┴──┴┘ └A───┘ │ а │ │

║ │ │ │ │ а └─┘

║а umA uA uiA │ │

║ B │ │

║а ┌────┐ ─/┬┬──┬┐ ┌────┐ │ │

║а │ MUX│ C││RG││ │M2*8│ │ p├─────────>p

╚═>╡0 │ │ ││ B │ │ │ │

I2════>╡1 ╞══════>╡ │╞═════>╡ ╞═══>╡I2 C

├ │ │ ││ │ │ │ │ ─/┬┬─┬┐

│ │ W│ ││ ├─ │ │1─>┤│T│├>rO

└A───┘ ─A┴┴──┴┘ └A───┘ └──────┘R W││ ││

│ │ │ ─A─A┴┴─┴┘

uMB uB uiB urO uwO


5) Формулировка требований к правляющему автомату.

При формировании правляющих сигналова следуета обратить

внимание не только на операции, которые необходимо выполнить

на данном шаге, но и на те оперции, которые нельзя выполнять

на этом шаге, это - как правило, операции изменения памяти.

Будем считать, что операция активна, если значение п-

равляющего сигнала равно 1.

Для правления вычислениями н каждома шаге алгоритма



потребуются следующие правляющие сигналы:


║umA│umB│uwA│uwB│uiA│uiB│urO│uwO│

══╬═══╪═══╪═══╪═══╪═══╪═══╪═══╪═══╡

m1║ а а а │ 1 │ 0 │

──╫───┼───┼───┼───┼───┼───┼───┼───┤

m2║ 1 │ 1 │ 1 │ 1 а │ 1 │ 0 │

──╫───┼───┼───┼───┼───┼───┼───┼───┤

m3║ │ 0 │ 0 │ 0 │ 1 а │ 0 │

──╫───┼───┼───┼───┼───┼───┼───┼───┤

m4║ │ 0 │ 0 │ 1 │ 1 │ 0 а │ 0 │

──╫───┼───┼───┼───┼───┼───┼───┼───┤

m5║ 0 │ 1 │ 0 │ 0 │ 1 а │ 0 │

──╫───┼───┼───┼───┼───┼───┼───┼───┤

m6║ │ 0 а а │ 0 │ 1 │

──╨───┴───┴───┴───┴───┴───┴───┴───┘


В незаполненных клеткаха сигналы безразличны.

Заметив, что umA = umB, uiB = ┐uiA, окончательно полу-

чаем:

╔══════════════════════════════════════════════╗

║ A ╔══════════════════════║═══════>D

║а ┌────┐ ─/┬┬──┬┐а ║ ┌────┐ ┌──────┐ ║

║а │ MUX│ C││RG│ ║ │M2*8│ 1─>┤crа SM│ ║

╠═>╡0 │ │ │ ║ │ │ ├─ │ ║

I1══║═>╡1 ╞══════>╡ │╞══╩══>╡ ╞═══>╡I1 │ ║ ┌─┐

║а ├ │ │ ││ │ │ │ │ ║ │1│

║а │ │ W│ ││ ├─ │ │ S╞═╩>╡ o───>z

║а └A───┘ ─A┴┴──┴┘ └A───┘ │ а │ │

║ └────┐ ┌─┘а B ┌────┘ ├─ а └─┘

║а ┌────┐а │─/┬┬──┬┐а а ┌────┐ │ │

║а │ MUX│а │ C││RG│ а │M2*8│ │ p├─────────>p

╚═>╡0 │а │ │ а │ │ │ │

I2════>╡1 ╞│═══│═>┤ │╞══│══>┤ ╞═══>╡I2 │

├ │а │ │ а │ │ │ а│

│ │а │ W│ │ а ├─ │ │ а C

└A───┘а │─A┴┴──┴┘а а └A───┘ └──────┘а ─/┬┬─┬┐

│ │ └─┐ │ ┌─┐│ 1─>┤│T│├>rO

│ а │ ├>┤ o┘ R W││ ││

├────┘ а │ │ └─┘ ─A─A┴┴─┴┘

umB uwAа uwB uiA urO uwO

---│--------│----│-----│----------------------│-│----y1 y2 y3 y4 y5 y6


║y1│y2│y3│y4│y5│y6│

══╬══╪══╪══╪══╪══╪══╡

m1║а │ 1│ 0│

──╫──┼──┼──┼──┼──┼──┤

m2║ 1│ 1│ 1 │ 1│ 0│

──╫──┼──┼──┼──┼──┼──┤

m3║а │ 0│ 0│ 0 │ 0│

──╫──┼──┼──┼──┼──┼──┤

m4║ 0│ 0│ 1│ 1 │ 0│

──╫──┼──┼──┼──┼──┼──┤

m5║ 0│ 1│ 0│ 0 │ 0│

──╫──┼──┼──┼──┼──┼──┤

m6║а │ 0 │ 0│ 1│

──╨──┴──┴──┴──┴──┴──┘



Структура вычислителя:

┌────────────────────────────────┐

══>╡I1 │

│ │

══>╡I2 О D╞══>

│ │

┌──/C rO├──>

│ │

│zа p umB uwA uwB uiA urO uwO │

└┬──┬──A───A───A───A───A───A─────┘

а а а а │

а а а а │

┌V──V──┴───┴───┴───┴───┴───┴─────┐

│zа pа y1а y2а y3а y4а y5а y6 │

│ │

┴──/C │

│ У │

──>┤rI │

└────────────────────────────────┘


у должен выполнять следующий алгоритм автоматного типа,

представленный в виде блок-текста:

m1{10}

g1<<GO(rI;g1,m2)>>

m2{x10}

m3{xx0}

<<GO(z;g2,m6)>>

g2<<GO(p;m4,m5>>

m4{0011x0}

<<GO m3>>

m5{0100x0}

<<GO m3>>

m6{x0xx01}

<<GO g1>>

МИКРОПРОГРАММИРОВАНИЕ. ОПРЕДЕЛЕНИЯ.

МИКРООПЕРАЦИЯ - базисное (элементарное) действие, необ-

ходимое для получения (вычисления) значения одной илиа более

переменных.

Микрооперация присваивания В=А означает, что переменные

левой части получаюта значения выражения иза правой части.

Всегда разрядность левой части равна разрядности правой час-

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

левой и правой частях, равны.

Неиспользуемые разряды в левой части и произвольные зна-

чения в правой части микрооперации присваивания обозначаются

(х). Например:

(В[7],x,B[6..0]) = (A[7..0],x)

означает арифметический сдвиг влево на один разряда 8-разряд-

ного числа с присваиваниема произвольного значения младшему

разряду и с потерей старшего после знака разряда. А, напри-

мер, микрооперация

(B[7..0],d) = (A[7],A[7..0])

означает арифметический сдвиг вправо на один разряд.

Микрооперация

(p,S[3..0]) = A[3..0] + B[3..0] + q

описывает действие, выполняемое стандартным 4-разрядныма сум-

матором, если ( А,В,q ) являются его непосредственными входа-

ми, ( р,S ) - выходами.

Микрооперация ( : ) - двоеточие -а означаета запоминание

(изменение значения) в памяти стройства. Переменная типа па-

мять сохраняет свое значение между двумя очереднымиа присва-



иваниями.

Микрооперации всегда входят в состав микрооператоров.

МИКРООПЕРАТОР - набор взаимосвязанных микроопераций (или

одна микрооперация ), выполняемых одновременно и необходимых

для получения одного или более значений. Например:

( e,D:) = R1 + R2 + c

Фрагмент аппаратуры, реализующей этот микрооператор, мога бы

быть, например, таким:

┌───┐

c │MUX│

┌┬──┬┐ а │ ┌───┐

││T │├───>┤0а │ ┌────┐ │MUX│ D

└┴──┴┘ ──>┤1а │ SM│ │ ┌┬──┬┐

──>┤ ├───>┤crа ═══>╡0а ╞═══>╡│RG│╞══>

├───┤ а S╞═════>╡1а │ └┴──┴┘

R1 │MUX│ │ ═══>╡ │

┌┬──┬┐ а │ │ │ └───┘

││RG│╞═══>╡0а ╞═══>╡I1а │ ┌───┐

└┴──┴┘ ══>╡1а │ │ │ │MUX│

══>╡ │ │ │ а ├────────────>e

├───┤ а p├─────>┤0а │

R2 │MUX╞═══>╡I2 а ───>┤1а │

┌┬──┬┐ а │ └────┘а ───>┤ │

││RG│╞═══>╡0а │ └───┘

└┴──┴┘ ══>╡1а │

══>╡ │

└───┘


Имена всех переменных, используемыха ва этома микрооператоре,

означают выполнение микроопераций коммутации ( транспортиров-

ки ). Значения переменныха коммутируются на входы суатора,

результат суммирования - в места расположения переменных.

МИКРОБЛОК - набор микрооператоров, выполняемыха одновре-

менно ( в одном такте ) и синхронно. В одном микроблоке любо-

му из битов присваивается только одно значение.

Синхронность означает, что во всех микрооператорах одно-

го микроблока используется только "старое" значение памяти.

Например:

{ (p,A):= A + B

(C,r):= A + D }

- и в том, и в другом микрооператоре используется одно иа то

же старое значение А.

В то же время в микроблоке:

{ (C,x):= A + D

(x,A)= C + B }

в первом микрооператоре используется новое значение А, во

втором - старое значение С. Разумеется, эти два действия вы-

полняются одновременнo на двух разных сумматорах.

При реализации микроблока { A:= B ; B:= 0 }а обязательна

синхронная реализация В:=0 ( хотя обычно такое действие проще

реализовать асинхронно, но это приводит к ошибкеа ). Другой

правильный вариант: можно выполнить В:=0а асинхронно, но в

следющем такте.

Всегда предполагается, что предиката вычисляется вместе

(в одном такте) с тем микроблоком, за которым непосредственно

следует его использование.Таким образом, здесь, также как и в

микроблоке, используется старое значение памяти, существовав-

шее перед входом в микроблок. Это связано са особенностями

взаимодействия о и А. Например:



█ █

█ CT:=(╪0)█ █ CT:=(╪0)█

█ █

│ │

┌────V───┐ ┌────V───┐

m1│ CT:=3а │ m1│ CT:=3а │

└────┬───┘ └────┬───┘

┌──────>│ ┌──────>│

│ ─V─ │ ─V─

│ / \ =0 │ / \ =0

│ <CT==0>─> │ <CT==0>─>

│ \/ │ \/

│ │╪0 │ │╪0

┌────V───┐ ┌────V───┐

│m2│........│ │m2│........│

│ │ │ │

│CT:=CT-1│ │CT:=CT-1│

└────┬───┘ └────┬───┘

└───────┘ ┌────V───┐

│m3│........│

└────┬───┘

└───────┘


В первом случае цикл будет выполнен 4 раза; во втором -а если

в микроблоке m3 нет операций, модифицирующиха СТ, -а 3а ра-

за. ( Обратите внимание на начальное значение СТ!)

МИКРОКОМАНДА - набор сигналов, поступающий из у в О и

интерпретируемый как правляющий,т.е. необходимый для выпол-

нения всех микроопераций одного микроблока. Сигналы, входящие

в микрокоманду, могут принимать частие в микрооперациях и в

качестве информационных.

Микрокомандой также иногд называюта слово управляющей

памяти (обычно ПЗУ), являющееся частьюа УА. Для различения

этих понятий слово правляющей памяти будема называть МИКРО-

ИНСТРУКЦИЕЙ.

МИКРОПРОГРАММА СОДЕРЖАТЕЛЬНАЯ - алгоритм, представленный

в виде микроблоков и предикатных блоков ва одной иза принятых

форм, например, в виде блок-схемы или блок-текста.

МИКРОПРОГРАММА КОДИРОВАННАЯ - аппаратная форм содержа-

тельной микропрограммы в виде кодов, заполняющиха правляющую

память.

КАНОНИЧЕСКЯа СТРУКТУР ОПЕРАЦИОННГо АВТОМАТА

В общем случае каноническая структура операционного ав-

томата имеет вид:

███████████████████████████████████████████████████████████

█ █

█а ┌──────────┐ ┌┬──────┬┐ ┌──────────┐ ┌───────┐а █

██>╡коммутация│ ││память│а │коммутация │функции▐███

│ ▐███>╡│ │▐██>╡ ▐██>╡ │

██>╡ │ ││ │а │ │ ▐███>

└─A────────┘ ─/─┴┴───A──┴┘ └──A───────┘ └──A────┘

█ ┌─┐│CC █ █ █

█ SYN─>┤&├┘ █ █ █

█ ┌┤ │ █ █ █

█ yC│└─┘ █ █ █

└────────────────────────────────────────────────┘

сигналы правления


Столь четкого разграничения операций на зоны (память, комму-

тация, функции) может и не быть. Например, такие широко ис-

пользуемые функцииа как сдвиги либо хорошо совмещаются с

коммутацией, либо интегрируются са регистрамиа хранения.Также



часто интегрируются са хранением функции инкремент и

декремента (счетчики обычные и реверсивные).

Особо выделим сигнал yС, правляющий доступом синхросиг-

налов в о. Такойа варианта правления, называемыйа условной

синхронизацией, позволяет запретить любые изменения памяти о

в каком-либо такте. Причем, если рабочим является среза (зад-

ний фронт) сигнала синхронизации, то используется элемента И,

как и показано на рисунке.Если же рабочим является фронт (пе-

редний фронт) сигнала, то используется элемента ИЛИ.а (Первый

перепад сигнала синхронизации в новом такте неа должена быть

рабочим.)

ОПТИМИЗАЦИЯ ОПЕРАЦИОННОГО АВТОМАТА

При проектировании вычислительного стройств основными

являются ограничения на:

1)- время вычисления;

2)- объем аппаратуры, реализующей вычисления;

3)- тип применяемых базовых функций.

ОПТИМИЗАЦИЯ РАТУРЫ ПРИ СОХРАНЕНИИ МИНИМАЛЬНОГО ВРЕМЕНИ

Алгоритм функционального типа обладает максимальныма по-

тенциальным параллелизмом (ва рамкаха данной алгоритмической

идеи), и,следовательно, его реализация ва виде Са обладает

максимальным быстродействием по сравнению c любыми другими

вычислителями. Невозможность реализации вычислителя в виде КС

может быть обусловлена следующими причинами:

- слишком велик объем аппаратуры КС;

- функциональное представление и его реализация являются

статическим отображением входных объектова н выходные:а это

исключает возможность работы с объектами, которые "ведута се-

бя" более сложно во времени;а невозможно такжеа реализовать

принципиально рекуррентные алгоритмы (см.,например, лгоритм

Евклида для нахождения НОД).

Тем не менее, если формально алгоритма функционального

типа может быть записан, то проектирование стройств надо

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

Минимизация аппаратуры "сложной" КС с переходом н про-

цедурный вариант реализации связан с "экономией" числа опера-

ционных элементов, т.е. со слиянием некоторых из ниха ва один

функциональный модуль, выполняющий эти операции по очереди.

Такое решение потребует запоминания всех переменныха (входных

и выходных),связанных с выполнением этих операций. Требуется

также правление памятью, связанной с этим функциональным мо-

дулем, также - может быть - правление самим функциональным

модулем, если он объединил существенно различные функции.

Переход к процедурной реализации и, следовательно, к

дискретизации времени неизбежно величит время вычисления од-

ного результата - даже при реализации структуры подобной КС.

При этом, как ни странно, может меньшиться время следующих

друг за другом вычислений именно за счет дискретизации време-

ни и применения так называемых "конвейерных" вычислений -а но

об этом речь пойдет в другом курсе.

Рассмотрим возможность сокращения аппаратуры беза увели-

чения времени решения, достигнутого в алгоритме функциональ-

ного типа. Сопоставим схеме стройства, реализующего алгоритм

функционального типа, простую модель ва виде направленного

графа. Вершины графа будут соответствовать операциям, дуги

- переменным алгоритма. Назовем такой граф сигнальным (графом

потоков данных). Заметим, что сигнальный графа всегд будет

циклическим.

Минимальность времени вычислений сохранится, если совме-

щать в один функциональный модуль операции, которые располо-

жены на одном и том же пути в сигнальном графе, либо н аль-

тернативных путях решения.



МИНИМИЗАЦИЯ АППАРАТУРЫ

Может оказаться, что на одном пути ва сигнальнома графе

расположены операции, плохо или вовсе не совмещаемые друга с

другом (т.е. совмещение не дает экономии в аппаратуре функци-

онального модуля). Возможно также, что проведенная минимиза-

ция, сохраняющая минимальное время, неа позволяета выполнить

ограничение на объем аппаратуры. Ва такома случае необходима

более глубокая минимизация,охватывающая параллельные ветви

сигнального графа. Минимизация должна быть взаимосвязанной по

всем компонентам о: по памяти, функциональным модулям и ком-

мутации.

В настоящее время процедуры минимизации не формализованы

и сводятся к перебору "правдоподобных" вариантов.

Можно предложить следующую последовательность действий:

1)- все "похожие" функцииа (операции)а реализовать на одном

функциональном модуле, например, все суммирования выполнять

на одном сумматоре;

2)-скорректировать алгоритм так, чтобы в одном микроблоке не

выполнялось более одной операции на одном и тома же функци-

ональном модуле;

3)- минимизировать память автомата, т.е. число запоминаемых

промежуточных переменных;

Выполнение этих этапов может привести к сложнениюа ком-

мутации, значит, и к величению этой компоненты в аппарату-

ре о. Если ограничение по объему аппаратуры все еще наруше-

но, то повторить этапы 1 - 3 с другима вариантома объединения

функциональных модулей и памяти.

При реализации о - во избежание ошибок -необходимо бук-

вально следовать описанию алгоритма, но в то жеа время, при

проектировании самого алгоритма надо представлять себе реали-

зацию микроблоков. Реализация одних и тех же вычислений может

быть существенно различной по объемуа аппаратуры.

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

─┬─

┌───────V───────┐ A ┌────┐

│ J:=0 │ ┌┬──┬─┐ │ MUX│ ┌────┐

└───────┬───────┘ ││RG│0├───>┤0 │ │ fа │

┌──────┐а │ │ │.│. │. │A[J] │ │

│ ┌────V──V───────┐ │ │.│. │. ├────>┤ │

│ │ ..... │ │ │.│. │. │ │ │ B

│ │ │ │ │ │ │ │ │ ╞══>

│ │ B= f(...,A[J])│ │ │K├───>┤K │ │ │

│ │ │ │ │.│ │. ══>╡ │

│ │ J:=J+1 │ │ │.│ │. │ │ │

│ └───────┬───────┘ │ │.│ │. │ │ │

│ ─V─ └┴──┴─┘ ├─ │ └────┘

│ <K /а \ =K J═════════>╡ │

└──────<J==K>─────> └────┘

\__/


(реализация счетчика J не показанa).

Запишем этот фрагмент алгоритма иначе так, чтобы нужный

бит извлекался за счет сдвига в регистре D. Тогда получим:



───┬── A D

│ ┌┬──┬┐ а┌┬──┬─┐ A[J] ┌─────┐

┌───────V───────┐ ││RG││ ││RG│0├─────>┤а fа │

│ J:=0 │ │ ││ │ │.│ │ │

│ │ │ ││ ││->│.│ │ B

│ D:=A │ │ │╞══════>╡ │.│ ╞══>

└───────┬───────┘ │ ││ │ │ │ │ │

┌──────┐а │ │ ││ │ │K├ │ │

│ ┌────V──V───────┐ │ │ x ──>┤Dn │.│ │ │

│ │ ..... │ │ ││ │ │. ══>╡ │

│ │ │ │ ││ S W│ │.│ │ │

│ │ B= f(...,D[0])│ └┴──┴┘ ─v─v┴┴──┴─┘ └─────┘

│ │ │

│ │ (D,x):=(x,D)а │

│ │ │

│ │ J:=J+1 │

│ └───────┬───────┘

│ ─V─

│ <K /а \ =K

└──────<J==K>─────>

\__/


Промежуточный регистр A введен для общности, если потребуется

сохранить слово А (чаще всего он и не нужен).

Другой пример: фрагмент алгоритма, реализующий регуляр-

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

───┬── ┌┬─┬┐B[0]

│ a ────────────┬─────>┤│T│├────>

┌───────V───────┐ │ W││ ││

│ J:=0 │ ┌───┐ │ ─A┴┴─┴┘

└───────┬───────┘ │DC │ ┌──┼─────┘| |

┌──────┐а │ 0├─┘а │ | |

│ ┌────V──V───────┐ .│. │ ┌┬─┬┐B[K]

│ │ ..... │ .│. └─────>┤│T│├────>

│ │ │ .│. W││ ││

│ а a=f(...) │ J ══>╡ │ ─A┴┴─┴┘

│ │ │ K├──────────┘

│ а B[J]:=a │ .│

│ │ │ .│

│ │ J:=J+1 │ .│

│ └───────┬───────┘ └───┘

│ ─V─

│ <K /а \ =K

└──────<J==K>─────>

\__/


Слово В нельзя реализовать в виде регистра, только ва виде

отдельных триггеров.

Можно формировать слово с использованием операцииа сдви-

га при обязательном словии D[K..0], тогда алгоритм и его ре-

лизация имеют вид:



───┬──

│ D B

┌───────V───────┐ ┌──┬──┬┐ ┌┬──┬┐

│ J:=0 │ │RG││ ││RG││

└───────┬───────┘ │->││ │ ││

┌──────┐а │ aа │╞═════>╡ ││

│ ┌────V──V───────┐ ──>┤Dk ││ │ ││

│ │ ..... │ S ││ W│ ││

│ │ │ ─v┴──┴──┴┘ ─v┴┴──┴┘

│ а a=f(...) │

│ │ │

│ │ (D,x):=(a,D)а │

│ │ │

│ │ J:=J+1 │

│ └───────┬───────┘

│ ─V─

│ <K /а \ =K ┌────┐

└──────<J==K>──>┤B:=D├>

\__/ └────┘


В этом случае, так же, как и в предыдущем, чаще всего не ну-

жен промежуточный регистр (В).


УНИВЕРСАЛЬЫй о

Использование при проектировании ниверсальных о c за-

ранее фиксированной и минимизированной структуройа оправдано

тем, что такие ниверсальные О изготавливаются промышлен-

ностью в виде БИС большим тиражом и поэтому они сравнительно

дешевы. Такие ниверсальные о входят в микропроцессорные на-

боры 582, 583, 584, 588, 589, 1800, 1804 и т.д., которые на-

зываются микропрограммируемыми, секционными, разрядно-модуль-

ными.

В основе перечисленных ниверсальных о лежита следующая

структура:

╔══════════════════╦═══════════════════════════╗

║ ║ ║

║ ║ SYN┐а ACC ║

║ ┌─┬─────┬┐ ║ ─/┬┬──┬┐ ┌─────┐ ║

║ │ │ RGF ││ ║ C││RG││ │ ALU ║

║ │ │ ││ ║ │ ││ │ а ║

║ │ │ ││ ╚════>╡ │╞═════>╡ а ║

║ │ │ ││ │ ││ │ ╞═══╩═>DO

╚═══>╡D│ ││ └┴──┴┘ │ │

│ │ ││ T │ │

│ │ ││ ┌┬──┬┐ │ ╞═════>P

│ │ ││ ││RG││ │ а│

│ │ │╞═════════>╡ │╞═════>╡ │

│ │ ││ │ ││ │ │

C W│ ││ C│ │а ╔═>╡ │

─o─A┴A┴─────┴┘ ─┬┴┴──┴┘ ║а └──A──┘

SYN┘ │ ║ SYN┘ ║ ║

│ ║ ║ ║

yW YA DI═════╝ YF


ALU - арифметико-логическое стройство -а комбинационная

схема с небольшим, но ниверсальным набором арифметическиха и

логических операций.

RGF - регистровый файл - адресуемая память RAM со стати-

ческой синхронизацией при записи.

RG'T' - регистр-фиксатор со статической синхронизацией.

RG'АCC' - регистр-аккумулятор с динамической синхрониза-

цией.



DI,DO - входная и выходная информационные шины.

- предикатные сигналы (флажки).

YF - сигналы управления выбором функции.

YA - адрес чтения и/или записи RGF.

yW - разрешение записи в RGF.

Память сравнительно большого объема, какой является RGF,

дешевле реализовать со статической синхронизацией. Для то-

го,чтобы такая память могла работать в замкнутом информацион-

ном кольце и при этом не возникали бы гонки, добавляется еше

один промежуточный регистр RG'T' со статическойа синхрониза-

цией. Если передний фронт является рабочим для регистрова п-

равляющего автомата и RG'ACC', то на первой фазе синхрониза-

ции при SYN=1 информация читается иза RGF;а при этома RG'T'

прозрачен. На следующей фазе синхронизации при SYN=0 информа-

ция фиксируется в RG'T', т.е. он закрыт для записи, запись

(если она разрешена) производится в RGF. Фиксируется информа-

ция в RGF и RG'ACC' с началом следующего такта, т.е. н пе-

реднем фронте сигнала.

ВЗАИМОДЕЙСТИе О и А

Для исключения гонок при взаимодействии О иа У будем

проектировать у как автомат Мура. Схем иха взаимодействия

может быть представлена в виде:

╔══════════════════════════╗

║┌────┐ ┌┬──┬┐ ┌────┐ ║

╚╡ CS │ ││RG│а │CSа ╞<╝

│ ╞<═╦═╡ │╞<══╡ │

┌───┤а b ║ │ │а │ cа ├<────┐

а └────┘а ║ └┴──┴┴A─ └────┘ │

а ┌────┐а ║ └───────────┐ │

а │CSа ╞<═╝ │ │

│┌──┤ aа ├<───────────────────┐ │ │

О │ └────┘ │ │ │

----││----------------------------│-│-│-У ││РА┌────┐ ┌┬──┬┐а ┌─────┐│ │ │┐

│└─>┤а CS│ ││RG│ │ CSа ├┘ │ ││

└──>┤ ╞════>╡ │╞═>╡ ├──┘ ││Y

РВ │ │ │ │ │ ├────┘│

╔>╡а p │ │ │ yа ╞═╗ ┘

║ └────┘ └┴──┴┘а └─────┘ ║

╚════════════════════════════╝


Отметим, что РА(t)=f(Y(t)) зависит без сдвиг ота сигналов

правления,

PB(t+1)=F(Y(t)) зависит со сдвигома ота сигналов

правления,

где РА и РВ - предикатные перемнные.

Продолжительность такта работы схемы определяется наибо-

лее длинными цепями между регистрами. Для данной схемы, кото-

рую будем называть последовательной схемой взаимодействия,

зададимся (так чащеа всего бывает), что такой критической

цепью является цепь (CSy,CSa,CSp,RG). Поэтому длительность

такта определяется:

Т > ty + ta + tp + trg,

где tj- время становления соответствующего компонента цепи.

Чтобы сократить длину этой цепи, применяют другойа вари-

нт взаимодействия автоматов - конвейерный:



╔══════════════════════════╗

║┌────┐ ┌┬──┬┐ ┌────┐ ║

╚╡ CS │ ││RG│а │CSа ╞<╝

│ ╞<═╦═╡ │╞<══╡ │

┌───────────┤а b ║ │ │а │ cа ├<────┐

│ FF └────┘а ║ └┴──┴┴A─ └────┘ │

┌┬──┬┐ ┌────┐а ║ └───────────┐ │

│┌─┤│RG│╞<══╡ CS ╞<═╝ │ │

││ │ │а a ├<───────────────────┐ │ │

││ └┴──┴┴A─ └────┘ │ │ │

о ││ └──────────────────────────┐ │ │ │

---││----------------------------------│-│-│-│-УА ││ MKа │ │ │ │

│ PA ┌────┬────┐ ┌┬──┬┐│ │ │ │┐

│└────>┤а CS│ CS │ ││RG│├┘ │ │ ││

РВ │ │ │ │ │├──┘ │ ││Y

└─────>┤ │ ╞═══════════>╡ │├────┘ ││

│ │ │ │ │├──────┘│

╔>╡а p y │ │ │╞═╗ ┘

║ └────┴────┘ └┴──┴┘ ║

╚═══════════════════════════════╝


При этом варианте взаимодействия такой длинной цепи, как

в предыдущем случае, не возникает.Эта цепь разделен регис-

трами RG'FF' (регистр флажков) и RG'MK' (регистра микрокоман-

ды) на две цепи. Продолжительность такта становится меньше и

ее можно определить следующим образом:

T > max( ta,(tp + ty) )+ trg,

При конвейерном варианте взаимодействия

PA(t+1)=f(Y(t)), т.е. и эти значения стали зависить со

сдвигом от сигналов правления. Тогда фрагмент микропрограммы

mS{...;pA=f(...)}

<< GO(pA;mi,mj)>>,

выполняемый в последовательной схеме з одина такт, ва кон-

вейерном варианте за один такт выполнен быть не может и дол-

жен быть модифицирован следующим образом:

mS{...,pA=f(...)}

mS'{нет операции}

<< GO(pA;mi,mj)>>

Таким образом, время выполнения этого фрагмента не только не

уменьшилось, но даже возросло несмотря на меньшение продол-

жительности каждого из тактов. Зато во всех остальныха случа-

ях (при безусловных переходах, при переходах по значению РВ)

время выполнения микропрограммы меньшается.


НАЧАЛЬНАЯ ИНИЦИАЛИЗАЦИЯ СИНХРОННОЙ СХЕМЫ

Пусть устройство, кроме сигнала синхронизации SYN, имеет

еще один сигнал Н, обозначающий начало и конец синхронной ра-

боты стройства. При Н=0 - нерабочее состояние - можно выпол-

нять начальную становку значений памяти стройства. Измене-

ние значения Н с 0 на 1 происходит в случайный момент времени

(асинхронно), но при этом начальный такта работы стройства

должен быть полным. "Затягивание" асинхронного сигнал На в

синхронный режим происходит с помощью простейшего синхронного

втомата с диаграммой:

┌──────────┐ ┌────────┐

Vа 0H/CONST│ Vа 1H/SYN│

█▀▀▀█────────┘ █▀▀▀█──────┘

>▌ 0 ▐──────────────>▌ 1 ▐──────┐

█▄▄▄█ 1H/CONST █▄▄▄█ 0H/X │

л │

└────────────────────────────┘

У этого автомата простейшей является функция переходов, так



кака диаграмм автомат совпадаета са диаграммойа переходов

D-триггера.

Схема автомата вместе са цепями словнойа синхронизации

выглядит следующим образом (для синхронизации по фронтам):

)-по переднему фронту, б)- по заднему фронту:

┌──┐ ┌──┐

SYN ──┬──────────┤ 1├── CC SYN ──┬──────────┤ &├── CC

│ ┌─┬─┐а ┌─┤а │ │ ┌─┬─┐а ┌─┤а │

└─/C│T │ └──┘ └─\C│T │ └──┘

│ │ ├а │ │ │ ├──┘

┌─┤D│ │ ┌─┤D│ │

│ ├─┤ o──┘ │ ├─┤ o─

├─oR│ │ ├─oR│ │

Hа │ └─┴─┘уст. нач. зн. Hа │ └─┴─┘уст. нач. зн.

──┴─────────────────── ──┴───────────────────


Такая разница в цепях словной синхронизации, как же объяс-

нялось выше, определяется тем, что первый перепад сигнал СС

не должен быть рабочим.


нтик М.И. 11_03_91 МИРЭА


УПРАВЛЯЮЩИЕ АВТОМАТЫ.

ОСНОВНЫЕ СПОСОБЫ АДРЕСАЦИИ МИКРОКОМАНД

Начнем с рассмотрения простейшего варианта управления, в

котором не частвуют предикатные функции (переменные), т.е. в

микропрограмме переходы только безусловные. В таком случае А

является автономным синхронным автоматом.

В более общем случае функция переходова У зависита от

предикатных переменных, но у должен быть автоматом Мура.

словимся о некоторых ограничениях, позволяющиха прос-

тить схему на начальныха этапаха проектирования (ота которых

легко впоследствии и отказаться):

- на каждом шаге процесса вычислений ветвление можета осу-

ществляться только по одной двузначной предикатнойа перемен-

ной (т.е. разветвление возможно лишь на два направления);

- начальные значения всех регистрова У являются нулевыми.

Впредь на схемах у не будем показывать цепей становкиа на-

чальных значений.

Для реализации в самом общем случае микропрограмм произ-

вольной структуры будем строить у так, чтобы основныма мате-

риальным носителем правляющей (автоматной)а компоненты мик-

ропрограммы являлась бы управляющая память (реализованная,

например, в виде ПЗУ). В этом случае структура слова управля-

ющей памяти - МИКРОИНСТРУКЦИЯ -а состоита иза двуха составных

частей: микрокоманды и адресной части.

Адресная часть микроинструкции содержит информацию, поз-

воляющую в следующем такте работы выбрать ( казать )а новый

дрес правляющей памяти. Реализация именно этого момента яв-

ляется основным предметом дальнейшего рассмотрения и опреде-

ляет, в основном, структуру, объема аппаратуры и быстродей-

ствие А. При этом подлежит рассмотрению реализация следующих

типова переходова кака междуа шагами алгоритма, так, соот-

ветственно, и между микроинструкциями:

- безусловный переход,

- словный переход,

- функциональный переход,

- переход к микроподпрограмме с возвратом.

Будем изучать работу правляющиха автоматова различной

структуры, демонстрирующие основные применяемые варианты ад-

ресации микроинструкций, на следующем алгоритме:



███

┌───┐│

┌VV─┐

n1 │m1 │ n1 { m1 }

└─┬─┘

┌─V─┐ n2 { m2 }

n2 │m2 │

└─┬─┘ g1 <<GO(a;g1,n3)>>

│ │<──┐

┌V┐ 0│ n3 { m3 }

g1 < a >─┘

└┬┘ n4 { m4 }

а 1│<────┐

│ │┌───┐│ g2 <<GO((a,b);n5,n3,n1,n1)>>

┌─VV┐а ││

n3 │m3 ││ n5 { m5 }

└─┬─┘а ││

┌─V─┐а ││ g3 <<GO(a;n5,n3)>>

n4 │m4 ││

└─┬─┘а ││

│10 ┌V┐ 01││

g2└──< ab>──┘│

11 └┬┘ │

00│┌───┐│

┌─VV┐а ││

n5 │m5 ││

└─┬─┘а ││

┌V┐ 0 ││

g3 < a >──┘│

└┬┘ 1а │

└─────┘

кажем на некоторые особенности этого алгоритма:а Опера-

тор переход (предикатная вершина), помеченный меткой g1,

называют ждущим. Оператор, помеченный меткойа g2, использует

для перехода 4-значный предикат, что не довлeтворяета выше-

указанномуа ограничению. Поэтому потребуются эквивалентные

преобразования алгоритма для того, чтобы удовлетворить этому

ограничению.

Алогоритмы эквмвалентны, если они преобразуют информа-

цию одинаковым образом. Наиболее распространенным приемом эк-

вивалентного преобразования алгоритмов и микропрограмма явля-

ется включение микроблоков и, соответственно, тактов, в кото-

рых не выполняется модификация памяти о -а "нета операции".

Но и это преобразование может быть не эквивалентным - см.при-

мер при определении понятия "микроблок"; кроме того, следует

учесть различное поведение во времени предикатныха переменных

типа "РА" и "РВ" - см. раздел "Взаимодействие о и А".

( Запретить модификацию памяти можно, вводя словную

синхронизацию о, но для этого должна быть изменен микроко-

манда, предшествующая добавляемому такту.)


СХЕМА С АДРЕСНЫМ ПЗУ

Начнем рассмотрение с правляющего автомата, структура

которого совпадает с канонической структурой автомата Мура.

┌───┐ ┌───┐ ┌┬──┬┐ ┌───┐

│MUX│ q │ROM│ ││RG│а │ROM│

a─>┤0а ├──>┤ │ S' │ ││ S Y

b─>┤1а а ╞═══>╡ │╞═╦>╡ ╞══>

а │ ╔>╡ │ │ ││ ║ ├─┐

а │ ║ │ 2 C│ ││ ║ │ 1 │ │

└A──┘ ║ └───┘а ─/┴┴──┴┘ ║ └───┘ │

│ Hа ╚═════════════════╝ │

└──────────────────────────────┘



Функцию перехода и функцию выхода реализуем в видеа ПЗУ.

В литературе, рассматривающей микропрограммные стройства уп-

равления, у с такой структурой называют микропрограммным ав-

томатом илкса.

В ПЗУ (ROM_1), реализующем функцию выхода, следуета раз-

местить микрокоманды; при этом их распределение по определен-

ным адресам совершенно произвольно, за исключениема начальной

микрокоманды, которая в силу вышеуказанного ограничения дол-

жна располагаться по нулевому адресу.

ПЗУ (ROM_2), реализующее функциюа переходова автомата,

можно трактовать как адресное ПЗУ. Ячеек в адресном ПЗУ в два

раза больше, чем в ПЗУ микрокоманд. Каждой ячейке Зу микро-

команд соответствуют две ячейки в адресном ПЗУ, в которых за-

писываются два альтернативных адреса.


n1 { m1 } S│ Y H│ S q│S'│

─┼────┤ ───┼──┤

n2 { m2 } 0│m1 x│ 0 0│ 1│

│ │ 0 1│ 1│

<<GO(a;d1,n3)>> │ │ │

1│m2 0│ 1 0│ 2│

d1 { m0 } │ │ 1 1│ 3│

│ │ │

<<GO(a;d1,n3)>> 2│m0 0│ 2 0│ 2│

│ │ 2 1│ 3│

n3 { m3 } │ │ │

3│m3 x│ 3 0│ 4│

n4 { m4 } │ │ 3 1│ 4│

│ │ │

<<GO(a;d2,n1)>> 4│m4 0│ 4 0│ 5│

│ │ 4 1│ 0│

d2 { m0 } │ │ │

5│m0 1│ 5 0│ 6│

<<GO(b;n5,n3)>> │ │ 5 1│ 4│

│ │ │

n5 { m5 } 6│m6 0│ 6 0│ 6│

│ │ 6 1│ 4│

<<GO(a;n5,n3)>> ─┴────┘ ───┴──┘


Конвейерный вариант схемы с таким же способома адресации

должен программироваться с четом замечаний, сделанных в раз-

деле "Взаимодействие о и А". Кромеа того, ограничения на

расположение микрокоманд в ROM_1 выглядят несколько иначе: по

0-адресу в ROM_1 можно расположить микрокоманду, после кото-

рой безусловно выполняется начальная микрокоманда.


┌───┐ qа ┌───┐ ┌───┐ ┌┬──┬┐

│MUX├──────────>┤ROMа │ROM│Yа ││RG│ Y'

a─>┤0а C а │ S ╞══>╡ │╞══>

b─>┤1а │ ─/┬┬──┬┐а а ╞═╦>╡ │Hа │ ││

а │ ╔>╡│RG│╞═>╡а а│ ║ ├──>┤ │├┐

а │ ║ │ ││S'│ 2 │ ║ │ 1 C│ │││

└A──┘ ║ └┴──┴┘а └───┘ ║ └───┘ ─/┴┴──┴┘│

│H'а ╚═══════════════╝ │

└────────────────────────────────────┘



СХЕМА С ЯВНЫМ КАЗАНИМа АЛЬТЕРНАТИВНЫХ АДРЕСОВ


╔═══════════════════════════╗

║╔═════════════════════════╗║

║║ ┌───┐ ┌┬──┬┐а ┌───┐A0║║

║║ │MUX│ ││RG│ │ROM╞══╝║

║╚>╡0а │ │ ││A │A1 ║

┌───┐╚═>╡1а ╞═══>╡ │╞═>╡ ╞═══╝

│MUXа │ │ │ ╞══>Y

a─>┤0а а а C│ │ а ├┐

b─>┤1а └A──┘а ─/┴┴──┴┘а └───┘│H

а ├────┘ │

└A──┘ │

└────────────────────────────┘


Конвейерный вариант


╔════════════════════════════╗

║╔══════════════════════════╗║

║║ ┌───┐а ┌────┐A0 ┌┬──┬┐A0'║║

║║ │MUX │ROM ╞══>╡│RG│╞═══╝║

║║ а │ │A1 │ ││A1' ║

║╚>╡0а │A │ ╞══>╡ │╞════╝

┌───┐╚═>╡1а ╞═>╡ │ Y │ │ Y'

│MUXа │ ╞══>╡ │╞══>

а а │ │ H │ ││

a─>┤0а а │ ├──>┤ │├┐H'

b─>┤1а └A──┘а └────┘ ─/┴┴──┴┘│

а ├────┘ C │

└A──┘ │

└────────────────────────────┘


Эта схема отличается от предыдущей тем, что, по сущес-

тву, тот же способ адресации выполнен с использованием только

одного ПЗУ. В этом варианте альтернативные адреса записывают-

ся в той же микроинструкции, что и микрокоманда.


n1 { m1 } A│ Y H A0 A1│

─┼──────────┤

n2 { m2 } 0│m1 xа 1а 1│

│ │

<<GO(a;d1,n3)>> 1│m2 0а 2а 3│

│ │

d1 { m0 } 2│m0 0а 2а 3│

│ │

<<GO(a;d1,n3)>> 3│m3 xа 4а 4│

│ │

n3 { m3 } 4│m4 0а 5а 0│

│ │

n4 { m4 } 5│m0 1а 6а 4│

│ │

<<GO(a;d2,n1)>> 6│m5 0а 6а 4│

─┴──────────┘

d2 { m0 }

<<GO(b;n5,n3)>>

n5 { m5 }

<<GO(a;n5,n3)>>


СХЕМА С ЧАСТИЧНОЙ ЗАПИСЬЮ АДРЕСА


Последовательный вариант Конвейерный вариант


┌────────────────────────┐ ┌─────────────────────────┐

│ ┌───┐ ┌┬──┬┐а ┌───┐│e │ ┌───┐ ┌───┐ e ┌┬──┬┐│

│ │MUX qа ││RG││q'│ROM├┘ │ │MUX│ q'│ROM├────>┤│RG│├┘

└>┤0а ├────>┤ │├─>┤ Y └>┤0а ├──>┤ │ Y │ ││Y'

a─>┤1а Sа │ ││S'а ╞══> a─>┤1а │ S'а ╞════>╡ │╞═>

b─>┤2а │ ╔══>╡ │╞═>╡ ╞══╗ b─>┤2а │ ╔>╡ │ H │ ││

│ ║а C│ │ а ╞╗ ║ а │ ║ а ├────>┤ │╞═╗

└A──┘ ║ ─/┴┴──┴┘а └───┘║ ║ │ ║ │ S │ ││ ║

║ Hа ╚════════════════╝ ║ │ ║ а ╞════>╡ │╞╗║

╚═══════════════════════╝ └A──┘ ║ └───┘ ─/┴┴──┴┘║║

║ H' ║ C ║║

║ ╚═════════════════╝║

╚═══════════════════════╝


При этом способе адресации альтернативные адреса отлича-

ются только одним разрядом ( в данном варианте -а младшима ),

формируемым входным сигналом. Остальные разряды адреса указы-

ваются вместе с микрокомандой в одной и той же микроинструк-

ции. При безусловном переходе в данном варианте схемы младший

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

одного и того же микроблока различными операторами словного

перехода может возникнуть КОНФЛИКТ АДРЕСАЦИИ. Ва этома случае

одну и ту же микроинструкцию приходится располагать в различ-

ных ячейках правляющей памяти. Если различные операторы с-

ловного перехода одними иа теми же предикатнымиа значениями

указывают на одни и те же микроблоки, то нет и конфликт ад-

ресации.

Адрес


n1 { m1 } --(0,0),(2,1) S'q'│ Y H S e│

────┼────────┤

n2 { m2 } --(4,0) 0 0 │m1 0 4 0│

│ │

<<GO(a;d1,n3)>>-- 1,x 0 1 │m4 1 2 x│

│ │

d1 { m0 } --(1,0) 1 0 │m0 1 1 x│

│ │

<<GO(a;d1,n3)>>-- 1,x 1 1 │m3 0 0 1│

│ │

n3 { m3 } --(1,1),(3,1) 2 0 │m0 2 3 x│

│ │

n4 { m4 } --(0,1) 2 1 │m1 0 4 0│

│ │

<<GO(a;d2,n1)>>-- 2,x 3 0 │m5 1 3 x│

│ │

d2 { m0 } --(2,0) 3 1 │m3 0 0 1│

│ │

а<<GO(b;n5,n3)>>-- 3,x 4 0 │m2 1 1 x│

│ │

n5 { m5 } --(3,0) ────┴────────┘

<<GO(a;n5,n3)>>-- 3,x

Распределять микроинструкции по ячейкама памяти добно

в следующем порядке:

- связать с различными операторами словного перехода, кон-

фликтующими между собой по адресации, различающиеся между со-

бой старшие разряды адреса;



- распределить микроблоки по ячейкам памяти с четом назнач-

енных старших разрядов адреса и входных значений;

- оставшимся нераспределенным микроблокама назначить произ-

вольные свободные адреса.

СХЕМА С СОКРАЩЕННЫМ ТАКТОМ

Использование этой схемы позволяет при сохранении пре-

имуществ последовательного варианта взаимодействия сократить

наиболее длинные цепи, общие для о и А, до длины цепей кон-

вейерного варианта.


┌──────────────────────────────────┐ ──┬──────────┬

│ ╔══════════════════════════╗│ ROM_0а A'│ Yа Hа A e│

│ ║ ┌────┐ ║│ ──┼──────────┼

│ ║ │ROM ╞═╬A ║│ 0 │m1а 0а 4 0│

│ ║ │ ├─╫e ║│ 1 │m0а 1а 1 x│

│ ╠>╡ ╞═╬Yа ┌───┐ ┌┬──┬┐║│ 2 │m0а 2а 3 x│

│ ║ │ ╞═╬Hа │MUXа ││RG│╞╝│ 3 │m5а 1а 3 x│

│ ║ │ 0а │ ╚══>╡0а а │ │├─┘e' 4 │m2а 1а 1 x│

│ A'║ ├────┤ а а │ ││ ──┴──────────┘

│ ║ │ROM ╞═╬Aа а ╞══>╡ │╞══>Y' ──┬──────────┬

│ ┌───┐║ │ │ ╠══>╡1а а │ ││ ROM_1а A'│ Yа Hа A e│

│ │MUX│╚>╡ ├─╫eа а C│ │╞╗H' ──┼──────────┼

└>┤0а │ ╞═╬Yа └A──┘ ─/┴┴──┴┘║ 0 │m4а 1а 2 x│

a>┤1а │ 1а ╞═╬H │ ║ 1 │m3а 0а 0 1│

b>┤2а └────┘ │ ║ 2 │m1а 0а 4 0│

а ├──────────────┘ ║ 3 │m3а 0а 0 1│

└A──┘ ║ ──┴──────────┴

╚══════════════════════════════╝


Способ адресации, по существу, такой же, как и ва преды-

дущей схеме. Только в рассматриваемой схемеа входной сигнал

управляет выбором одного из двух блоков ПЗУ (можно интерпре-

тировать этот сигнал как старший разряд адреса).

СХЕМА С РЕГУЛЯРНОЙ АДРЕСАЦИЕЙ


┌───┐а ┌──┐ 0W- +1

│MUX├─>┤M2├──┐ 1W- загрузка

0─>┤0а │┌>┤а │ ─V┬┬──┬┐а ┌───┐ Y

a─>┤1а ││ └──┘а W││CT│ │ROM╞══>

b─>┤2а ││ │ │ а │H

а ││ │ ││A ╞════╗

а ││ ╔══>╡ │╞═>╡ │e ║

└A──┘│ ║ │ │ а ├──┐ ║

║ │ ║а C│ │ а ╞═╗│ ║

║ │ ║ ─/┴┴──┴┘а └───┘S║│ ║

║ │ ╚═════════════════╝│ ║

║ └───────────────────────┘ ║

╚═════════════════════════════╝


В этой схеме при разветвлении процесс вычислений пара

альтернативных адресов получается следующим образом: один ад-

рес всегда на единицу больше, чем текущий (а т.е. изменяется

"регулярным" образом ), второй адрес - произвольный и содер-

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

Элементом, "вычисляющим" адрес, является счетчмк, прав-

ляемый сигналом, являющимся входныма для УА. При различных



значениях входного сигнала счетчик выполняет две функции: ли-

бо прибавляет единицу к значению, которое хранилось в счетчи-

ке и являлось текущим адресом, либо загружается значением ад-

реса из правляющей памяти.

В схему введен элемента М2, позволяющийа инвертировать

значение входного сигнала, что облегчает распределение микро-

инструкций по ячейкам правляющей памяти.

Адрес


n1 { m1 } -- 0 A │ Yа Hа eа S│

──┼───────────┤

n2 { m2 } -- 1 0 │m1а xа xа 1│

│ │

<<GO(a;d1,n3)>> 1 │m2а 1а 0а 3│

│ │

d1 { m0 } -- 2 2 │m0а 1а 1а 2│

│ │

<<GO(a;d1,n3)>> 3 │m3а xа xа 4│

│ │

n3 { m3 } -- 3 4 │m4а 1а 0а 0│

│ │

n4 { m4 } -- 4 5 │m0а 2а 0а 3│

│ │

<<GO(a;d2,n1)>> 6 │m5а 1а 1а 6│

│ │

d2 { m0 } -- 5 7 │m0а 0а 1а 3│

──┴───────────┘

<<GO(b;n5,n3)>>

n5 { m5 } -- 6

<<GO(a;n5,n3)>>


В схеме для конвейерного вариант взаимодействия регу-

лярное изменение адреса приходится организовывать так, чтобы

не величивать число мест конвейера.


╔══════════════════════════════╗

║╔═════════════════════╗ ║

║║ а┌┬──┬┐ ┌───┐║ ┌───┐S║

║║а ┌───┐а ││RG││ │MUX│║ │ROM╞═╝

║╚═>╡INC╞═>╡ │╞>╡0а │║ │Yа ┌┬──┬┐Y'

║ └───┘ C│ ││ │║ а ╞══>╡│RG│╞══>

║ ─/┴┴──┴┘ ╞╩>╡ а │ ││

║ ─/┬┬──┬┐ │A │Hа │ ││H'

║ C││RG││ а ╞══>╡ │╞══╗

╚═════════>╡ │╞>╡1а а │eа │ ││e'║

│ ││ а а ├──>┤ │├┐ ║

┌───┐а └┴──┴┘ └A──┘а └───┘ ─/┴┴──┴┘│ ║

│MUX ┌──┐ │ C │ ║

0─>┤0а ├─>┤M2├────┘ │ ║

a─>┤1а │┌>┤а │ │ ║

b─>┤2а ││ └──┘ │ ║

а ││ │ ║

└A──┘└─────────────────────────────┘ ║

╚═══════════════════════════════════╝



СХЕМА С ЕСТЕСТВЕННОЙ АДРЕСАЦИЕЙ И

СОВМЕЩЕННЫМ НАЗНАЧЕНИЕМ РАЗРЯДОВ ЯЧЕЙКИ ПЗУ


╔════════════════════════════╗ C

║╔═══════════════════╗ ║ ─/┬┬──┬┐H'

║║ ┌┬──┬┐ ┌───┐║ ┌───┐ ║ ╔══>╡│RG│╞══╗

║║ ┌───┐ ││RG││ │MUX│║ │ROM│ ║ ║ ┌>┤ │├─┐║

║╚>╡INC╞>╡ │╞>╡0а │║ │S║H║e│ └┴──┴┘ │║

║а └───┘C│ ││ │║ │ ║ ║ │ ┌┬──┬┐Y│║а для RG"Y"

║ ─/┴┴──┴┘ ╞╩>╡ ▐██████>╡│RG│╞>│║

║ ─/┬┬──┬┐ │A │ w c│ ││ │║а 0w-загрузка

║ C││RG││ а а ─A─/┴┴──┴┘ │║

╚═══════>╡ │╞>╡1а а │k ┌┬─┬┐k'│║а 1w-нет загрузки

│ ││ │ А ├────┴─>┤│T│├┐ │║

┌───┐а └┴──┴┘ └─A─┘а └───┘ ─/┴┴─┴┘│ │║а k ┌───┐

│MUX ┌──┐а ┌─┐│ C │ │║а └────┤ 1 ├─ CC

0>┤0а ├─>┤M2├─>┤&├┘ │ │║а ┌────┤ │

a>┤1а │┌>┤а │┌>┤ │ │ │║а SYNа └───┘

b>┤2а ││ └──┘│ └─┘ │ │║

││e' └──────────────────────────┘ │║а где CC -

└A──┘└──────────────────────────────────┘║ синхронизация о

╚═══════════════════════════════════════╝

Эта схема используется только ва конвейернома варианте

взаимодействия. Метод вычисления адреса для следующего такта

такой же, как и в схеме с регулярной адресацией. (Другой тер-

мин -"естественный" - потреблен только ради различения самих

схем.) Но в этой схеме, по сравнению c же рассмотренными,

разряд правляющей памяти с одним и тем же номером (разрядный

срез) в различныха микроинструкцияха можета быть использован

различным образом. Будем различать микроинструкции двуха ти-

пов:

- операционные,

- алресации (выбора).

В лданном варианте схемы тип микроинструкцииа устанавли-

вается разрядом с именема "k". При k=0а выполняется микро-

инструкция операционного типа. Все остальные разряды ячейки

загружаются в регистра микрокоманды и правляют выполнением

микроопераций в о. Следующий адрес всегда на единицу больше.

При k=1а выполняется микроинструкция адресации. Все

разряды микроинструкции могут быть использованы для вычисле-

ния следующего адреса. В данном варианте схемы, так же кака и

в схеме с регулярной адресацией, один из адресов явно записы-

вается в микроинструкцию, другой альтернативный адрес на еди-

ницу больше текущего.

Адрес A ▌kа Y │

n1 { m1 } -- 0 ▌ │ H│ e│ S│

──▌─┼──┴──┴──┤

n2 { m2 } -- 1 0 ▌0 m1 │

1 ▌0 m2 │

g1 <<GO(a;g1,n3)>>-- 2 ──▌─┼──┬──┬──┤

2 ▌1│ 1│ 1│ 2│

n3 { m3 } -- 3 ──▌─┼──┴──┴──┤

3 ▌0 m3 │

n4 { m4 } -- 4 4 ▌0 m4 │

──▌─┼──┬──┬──┤

g2 <<GO(a;g3,n1)>>-- 5 5 ▌1│ 1│ 0│ 0│

6 ▌1│ 2│ 0│ 3│

g3 <<GO(b;n5,n3)>>-- 6 ──▌─┼──┴──┴──┤

7 ▌0 m5 │

n5 { m5 } -- 7 ──▌─┼──┬──┬──┤

8 ▌1│ 1│ 1│ 7│

g4 <<GO(a;n5,n3)>>-- 8 9 ▌1│ 0│ 1│ 3│



Вместе с этой схемой обычно используется словная син-

хронизация, которая позволяет длинить такт выполнения микро-

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


SYN ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌────

└─┘ └─┘ └─┘ └─┘ └─┘

| | | | |

k 0 ▄▄▄▄▄▄▄▄ 0 ▄▄▄▄▄▄▄▄─────▄▄▄▄▄▄▄▄─────▄▄▄▄▄▄▄▄ 0 ▄▄▄

──────▀▀▀▀▀▀▀▀─────▀▀▀▀▀▀▀▀ 1 ▀▀▀▀▀▀▀▀ 1 ▀▀▀▀▀▀▀▀─────▀▀▀

| | | | |

CC┐ ┌──────────┐ ┌────────────────────────────────────┐ ┌────

└─┘ └─┘ └─┘

| | | | |

Y────▄────────────▄──────────────────────────────────────▄───

─────▀────────────▀──────────────────────────────────────▀───


ФУНКЦИОНАЛЬНЫЙ ПЕРЕХОД.

ПЕРЕХОД НА МИКРОПОДПРОГРАММУ С ВОЗВРАТОМ

Функциональный переход

При необходимости выполнения несколькиха вычислительныых

функций, правление которыми представляется в виде независи-

мых микропрограмм, необходимо организовать независимый вызов

этих микропрограмм.

Начальные адреса микропрограмм, правляющих вычислениями

различных функций, обычно существуют вне правляющей памяти.

В у достаточно предусмотреть механизма коммутации, позволя-

ющий сделать начальный адрес текущим. Это можно осуществить в

любой из рассмотренных схем. (К механизму коммутации относят-

ся, кроме аппаратуры, специальные разряды управляющей памяти

и специальные микроинструкции.)


╔══════════════════════╗ C

╔══════║══════════════╗ ║а ─/ ┬┬──┬┐H'

║ ║ ┌───┐║ ┌───┐ ║ ╔══>╡│RG│╞══╗

║ ║ │MUX│║ │ROM│ ║ ║ ┌>┤ │├─┐║

F ═║══════║════════>╡0а │║ │ ║ ║ │ └┴──┴┘ │║

║ ║ ┌┬──┬┐а а │║ │ ║ ║ │ │║

║ ║ ││RG│ а │║ │ ║ ║ │ │║

║ ╚>╡ │╞═>╡1а │║ │S║H║e│ │║

║ C│ │ а │║ │ ║ ║ │ ┌┬──┬┐Y│║ для RG"Y"

║ ─/┴┴──┴┘а а ╞╩>╡ ▐██████>╡│RG│╞>│║

║ ┌┬──┬┐а а │A │ │ ││ │║ 0w-загрузка

║ ┌───┐а ││RG│ а а │ w c│ ││ │║

╚>╡INC╞═>╡ │╞╦>╡2а │ а ─A─/┴┴──┴┘ │║ 1w-нет загр.

└───┘ C│ ││║ а │ │ │║

─/┴┴──┴┘║ а │ │ │║

╔══════════╝ а а │ │ │║

║ ┌┬─────┬┐а а а ┌┘k │║

╚>╡│STACK│╞═>╡3а а │Kа │ ┌┬──┬┐K' │║

└┴────A┴┘а а а ╞═══╧>╡│RG│╞╗а │║

║ │ А а │ │ ││║а │║

║ └─A─┘а └───┘ ─/┴┴──┴┘║а │║

┌───┐ ║ ║ C ║а │║

│MUX ┌──┐ ┌╨──────╨┐ ║а │║

0>┤0а ├─>┤M2├>┤а CS ╞<══════════════════╝а │║

a>┤1а │┌>┤а │ │ │ │║

b>┤2а ││ └──┘ └────────┘ │║ k ┌───┐

││e' │║ └─┤ 1 ├─CC

└A──┘└──────────────────────────────────────┘║ ──┤ │

╚═══════════════════════════════════════════╝ SYN └───┘



Переход к микроподпрограмме с возвратом

При реализации достаточно сложных вычислений добно вос-

пользоваться механизмом микроподпрограмм.

Одна и та же микроподпрограмм можета быть вызван из

разных точек вызывающиха микропрограмм. Поэтому приа вызове

микроподпрограммы необходимо запомнить адрес, c тем, чтобы

восстановить его при возвращении из микроподпрограммы. Чтобы

запомнить и восстановить адреса возврата ота вложенныха вызо-

вов, используется безадресная память - стек (stack).

Принцип (дисциплина) работы стека описывается словием

"последний вошел - первым вышел" (Last In - First Out, LIFO).

чтобы описать этот принцип будем считать, что слова, хранящи-

еся в стеке, перенумерованы с помощью первых натуральныха чи-

сел 1,2,...,N. Слово с наибольшим номерома называюта вершиной

стека.

Стек может выполнять следующие действия:

-"чтение" слова с наибольшим номером,

-"выталкивание" (стирание) из памяти слова с наибольшима номером,

-"запись" нового слова с присваиванием ему наибольшего номера.

При вызове микроподпрограммы выполняется операция "запи-

си" адреса возврата в стек. При возвращении иза микроподпрог-

раммы выполняется операция "чтения" адреса возврата, затема -

"выталкивания" его же из стека.

Операция "чтения" без "выталкивания" выполняется при ис-

пользовании стека для организации циклов.

Разряды с именем "К" определяют типа выполняемой микро-

инструкции. В связи с тем, что теперь ва схемеа существуета 4

источника адреса для правляющей памяти, возможны 4 тип бе-

зусловных переходов, кроме того, возможны различные словные

переходы в различных сочетаниях комбинирующие этиа источники

дреса и входные переменные.

С помощью комбинационной схемы CS разряды микроинструкции

"К" преобразуются в сигналы правления стеком и мультиплексо-

ром.

УПРАВЛЕНИЕ С ПРЕДВОСХИЩЕНИЕМ

В конвейерном варианте для команд переходов по предикат-

ным переменным, зависящих без сдвига от сигналова правления,

приходится добавлять еще один такт для того, чтобы "увидеть"

значение переменной, по которой выполняется ветвление, и выб-

рать нужную МКИ.

Можно построить правляющий автомат, в котором для ско-

рения выполнения программы выполняются следующие действия:

Предварительно выбирается из ПЗУ одна из двуха альтернативных

МКИ, соответствующая наиболее вероятному значению переменной

ветвления. Это значение должно храниться в той МКИ, после ко-

торой выполняется ветвление. В конце такт выработанноеа ре-

льное значение переменной сравнивается с предсказанным, если

они совпадают, то выбранная из ПЗУ МКИ записывается ва выход-

ной регистр, если нет, то предыдущий такт продлевается, т.е.

не синхронизируются о и RG'МКИ. Микропрограмм будета такой

же как и для последовательного варианта взаимодействия О и

УА, но в МКИ добавляются два разряда:

F = { 1, если используется предвосхищение; 0, если нет },

P - наиболее вероятное значение переменной ветвления.

Фрагмент схемы УА, обеспечивающий предвосхищение может

быть таким:



──────────────┐а │ │W

┌┬──┬┐ │ ─V┬───┐ qа ┌A───┐а f

t ││RG││ └──>┤MUX├───>┤ SS ├<──────────────────────┐

──┬───>┤ │├────>┤ │┌──>┤ ├<─────────────────────┐│

│ │ ││ а ││tа │ p ││

─\┴┴──┴┘ └───┘│ ─\┴┬───┘ ││

│ │ │j ││

└───┼────────────────┘а │─V┬───┐ ┌─────┐ Pа ┌┬──┬┐p││

│ │MUXа │ ROM ├───>┤│RG│├─┘│

│ а │ │ Fа │ ││f │

│ │ │ ├───>┤ │├──┘

│ │ │ │ ││

│ │ │ ▐███>│ │▐██>

│ │ │ │ │ ││

C │ │ └─────┘ ─\A┴┴──┴┘

────┴───────────────────┴───────────────────┘└────── W

Пусть c=1 в конце такта.

Схема SS это автомат, который может находиться ва одном

из двух состояний s0 и s1,

если s0, 0f, то w=1, j=q

если s0, 1f, 0c, то w=0, j=p

если s0, 1f, 1c, p==t, то w=1, j=p

если s0, 1f, 1c, p=/=t, то w=0, j=x, переход ва s1

если s1, то w=1, j=q, переход ва s0