Асинхронный дешифратор

в 13:22, , рубрики: fpga, асинхронные схемы, асинхронный дешифратор

Как и обещал в предыдущей статье, речь в этой статье пойдет о представлении в асинхронном виде операций над адресами. В качестве примера опишу операцию дешифрации адреса. Сразу же хочу предупредить инсинуации, с которыми столкнулся после опубликования предыдущей статьи. Речь пойдет о целиком и полностью асинхронном устройстве. И прошу, не надо ссылаться на реферат узбекского университета. Якобы асинхронный дешифратор можно получить из синхронного с помощью нехитрых манипуляций. Заодно вопрос тем, кто утверждает, что асинхронный процессор произведен 20 лет назад. Как это удалось без асинхронного дешифратора?

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

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

Итак, опишем исходное поведение двухразрядного асинхронного дешифратора. Как ни странно, это не сложно сделать на языке STG, и дело тут даже не в маленькой разрядности.

image

Входные сигналы:
d — сигнал — команда на операцию дешифрации адреса;
r1, r2 — сигналы разрядов регистра адреса.

Выходные сигналы:
q1 — переключается если r1=1 и r2=1;
q2 — переключается если r1=1 и r2=0;
q3 — переключается если r1=0 и r2=1;
q4 — переключается если r1=0 и r2=0.

Поэтапно выполнение операции дешифрации выглядит следующим образом:
0. Когда сигнал d равен 0, внешняя управляющая схема (ВУС) произвольным образом переключает сигналы r1 и r2. Схема дешифратора (СД) не отслеживает изменения сигналов r1 и r2.
1. ВУС вырабатывает сигнал d+, команду на операцию дешифрации. К этому моменту ВУС устанавливает сигналы r1 и r2 в какое-то конкретное значение. ВУС обеспечивает, что до окончания операции дешифрации сигналы r1 и r2 менять свое значение не будут.
2. В зависимости от значения сигналов r1 и r2, СД вырабатывает один из сигналов: либо q1+, либо q2+, либо q3+, либо q4+.
3. ВУС вырабатывает сигнал d-.
4. СД вырабатывает один из сигналов в соответствии с пунктом 2: либо q1-, либо q2-, либо q3-, либо q4-. Этот сигнал является сигналом окончания операции дешифрации. После этого ВУС снова может изменять сигналы r1 и r2 произвольным образом.

Немного рассуждений о том как была синтезирована схема двухразрядного асинхронного дешифратора. По сути она представляет из себя два, происходящих параллельно, «выбора по уровню» (для каждого из сигналов r1 и r2). Подробнее о «выборе по уровню» можно прочитать здесь. Затем альтернативные ветви в двух параллельных процессах попарно синхронизируются. В результате получаются четыре альтернативные ветви. В приведенном графе скорректированного итогового поведения видны только четыре альтернативные ветви. Но это дань языку STG. Описывать на нем реально происходящие процессы крайне не удобно. Все вышеуказанные «выборы по уровню» и «синхронизации альтернативных ветвей» зашифрованы в данном поведении.

image

Можно добавить что синтезированное поведение не результат каких-то озарений. Это результат целенаправленного применения методологии, обзорно представленной здесь. Для каждого нового сигнала существует логическое обоснование его добавления.

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

$e=NOT(o1)$; $e1=AND(o1,j1)$; $e2=AND(o2,h1)$; $e3=NAND(e,i1)$;
$e4=OR(o2,h1)$; $f1=AND(d,r1)$; $f2=AND(d,r2)$; $g=NOT(d)$;
$h1=NOR(g,r1)$; $h2=NOR(g,r2)$; $i1=NOR(f1,j1)$; $i2=NOR(f2,j2)$;
$j1=NOR(g,i1)$; $j2=NOR(g,i2)$; $k1=AND(e1,j2)$; $k2=AND(e1,h2)$;
$k3=AND(e2,j2)$; $k4=AND(e2,h2)$; $l1=AND(t1,i2)$; $l2=NOR(t2,h2)$;
$l3=AND(t3,i2)$; $l4=NOR(t4,h2)$; $m1=NOR(k1,n1)$; $m2=NOR(k2,n2)$;
$m3=NOR(k3,n3)$; $m4=NOR(k4,n4)$; $n1=NOR(l1,m1)$; $n2=NOR(l2,m2)$;
$n3=NOR(l3,m3)$; $n4=NOR(l4,m4)$; $o1=NOR(p1,p2)$; $o2=NOR(p3,p4)$;
$p1=NOR(m1,s1)$; $p2=NOR(m2,s2)$; $p3=NOR(m3,s3)$; $p4=NOR(m4,s4)$;
$s1=NOR(n1,l1)$; $s2=NOR(n2,l2)$; $s3=NOR(n3,l3)$; $s4=NOR(n4,l4)$;
$t1=NOR(e3,s1)$; $t2=OR(e3,s2)$; $t3=NOR(e4,s3)$; $t4=OR(e4,s4)$;
$q1=NOR(s1,k1)$; $q2=NOR(s2,k2)$; $q3=NOR(s3,k3)$; $q4=NOR(s4,k4)$.

Как видно, все уравнения помещаются в базис 2И-НЕ, 2ИЛИ-НЕ.

А вот собственно и сама SI схема двухразрядного асинхронного дешифратора.

image

У меня нет возможности проверить схему в реальном воплощении. Но если кто-то этим заинтересуется, я буду это только приветствовать. Чтобы произвести начальную установку, надо входной сигнал d установить в 0. Внутренние сигналы m1, m2, m3, m4 надо установить в 1. Чтобы не выходить из двухвходового базиса, сделать это можно следующим образом для каждого из элементов m1, m2, m3, m4.

image

Элемент слева преобразуется в подсхему справа. Входные сигналы r1, r2 можно установить произвольным образом.

Автор: ajrec

Источник

Поделиться

* - обязательные к заполнению поля