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

    Как и обещал в предыдущей статье, речь в этой статье пойдет о представлении в асинхронном виде операций над адресами. В качестве примера опишу операцию дешифрации адреса. Сразу же хочу предупредить инсинуации, с которыми столкнулся после опубликования предыдущей статьи. Речь пойдет о целиком и полностью асинхронном устройстве. И прошу, не надо ссылаться на реферат узбекского университета. Якобы асинхронный дешифратор можно получить из синхронного с помощью нехитрых манипуляций. Заодно вопрос тем, кто утверждает, что асинхронный процессор произведен 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 можно установить произвольным образом.
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 29

      +2
      Забавно как то.
      Асинхронный дешифратор на два входа с тремя входами, причем третий работает как строб — мне одному такая асинхронность кажется странной?
        –3
        Про управляющие сигналы слышали? D — не строб, не тактовый сигнал. Это управляющий сигнал, команда на операцию. Про хэндшейк слышали? Дилетанты куражатся.
          +2
          Если нетрудно, с этого момента поподробнее, пожалуйста.
          Чем именно отличается команда на операцию (хэндшейк по вашему) от синхросигнала — если тем, что по неактивному уровню все выходы гасятся, то такая схема проектируется на раз без привлечения сверхсложных способов. Профессионалы отвечают дилетантам и выигрывают?
            –1
            Синхросигнал молотит без устали. И что по каждому изменению синхросигнала нужно делать дешифрацию? Наверно нужен еще какой-то управляющий сигнал, разрешающий выполнить операцию. У меня такой сигнал есть, а синхросигнала нет. А Вам синхросигнал нужен, чтобы гасить все состязания, которые при Вашем подходе несомненно будут. Я нисколько не умаляю Ваших достижений в синхронной схемотехнике. Но эта область другая.
            +1
            Дешифратор «2 входа-4 выхода» можно построить гораздо проще. Если без защелкивания выхода- всего 6 логических элементов. Не понятно назначение третьего сигнала- Какую еще операцию должен выполнять дешифратор кроме, собственно дешифрации? И да, в Вашей схеме он работает именно как стробирующий.
              –1
              При этом у Вас несомненно проявятся состязания, которые Вы будете гасить синхросигналом. Дешифратор делает дешифрацию. Но по Вашему он делает ее беспрестанно. Зачем это? Наверно надо так: пришла команда, сделали операцию и стоим ждем следующей команды, хоть год. В этом смысл сигнала d. А постоянно молотящего синхросигнала здесь нет. Вы наверно тоже специалист по синхронным схемам. И пытаетесь применить свой опыт здесь.
                +1
                Вы наверно тоже специалист по синхронным схемам
                Вовсе нет. Немного увлекаюсь электроникой, немного помню из курса «Основы вычислительной техники». Там мы этих дешифраторов нарисовались до почернения локтей.
                у Вас несомненно проявятся состязания, которые Вы будете гасить синхросигналом.

                Состязаниям там появиться просто неоткуда- дешифратор просто будет реагировать на любое изменение входной комбинации, в соответствии с таблицей истинности.
                Наверно надо так: пришла команда, сделали операцию и стоим ждем следующей команды
                А тут уже зависит от задачи: если мне нужно чтобы выход менялся только при наступлении некого события (команды в Вашем случае)- добавлю к дешифратору регистр, который застробирую каким-либо сигналом. Ну и собственно- разве не логично, что входная комбинация (которую дешифруем) не должна меняться до завершения операции?
                Кстати, стробирующий импульс не есть синхросигнал- в отличии от синхросигнала (сигнала тактирования) строб появляется только при наступлении какого-либо события (например завершения длительной операции)
                Мне не совсем понятна идея Вашего дешифратора. У Вас выходной сигнал формируется только при наличии сигнала разрешения операции и состояние выхода фиксируется до прихода следующего разрешения, так? Каким образом этот сигнал формируется?
                  –1
                  Состязаниям там появиться просто неоткуда- дешифратор просто будет реагировать на любое изменение входной комбинации, в соответствии с таблицей истинности.

                  А представьте, какой-то вентиль задумается и будет показывать значение, соответствующее прежней входной комбинации. Тогда и выходной сигнал не будет соответствовать настоящему состоянию входов. В асинхронной схеме такое невозможно.
                  Я в синхронных схемах не спец, термины могу путать.
                  Идея такая. Управляющая схема (контроллер) дает команду на дешифрацию (d+). При этом контроллер фиксирует входы (адресные) до окончания операции. Дешифратор выдает в ответ один из четырех сигналов q+, соответствующий адресным входам. Далее контроллер делает с этим сигналом то что ему надо: обращается к ячейке памяти или запоминает этот сигнал… После этого наступает вторая фаза работы дешифратора. приводящая все к исходному состоянию. Контроллер дает сигнал d-, после чего дешифратор приводит себя в исходное состояние, о чем сообщает сигналом q-. После этого контроллер снова может менять состояние адресного регистра, который не является частью схемы дешифратора. А дешифратор будет ждать новой команды.
                    +1
                    какой-то вентиль задумается и будет показывать значение, соответствующее прежней входной комбинации. Тогда и выходной сигнал не будет соответствовать настоящему состоянию входов. В асинхронной схеме такое невозможно
                    Хм, если какой-то вентиль «залипнет» то и асинхронная схема на выходе пургу гнать будет- не факт что «залипший» вентиль «отлипнет» по сигналу «вернись в исходное». Разве что ввести в логику контроллера (в составе которого и работает данный дешифратор, я правильно Вас понял?) проверку, что все вентили сбросились… Как поведет себя Ваш дешифратор, если какой-то вентиль повиснет в исходном состоянии (как после сброса)? Как-то сложно все это выходит.
                    … управляющая схема (контроллер) дает команду на дешифрацию (d+). При этом контроллер фиксирует входы (адресные) до окончания операции…
                    … контроллер делает с этим сигналом то что ему надо:
                    … наступает вторая фаза работы…
                    … Контроллер дает сигнал d-..
                    Вот здесь- контроллер ждет завершения операции или делает что-то еще в период между запросом к дешифратору «декодируй мне 11001111» и ответом от него «получилось 103»?
                    Потом —
                    (контроллер) дает команду на дешифрацию (d+). При этом контроллер фиксирует входы (адресные) до окончания операции
                    т.е. до окончания операции данные на входе дешифратора не могут поменяться в принципе? В чем же тогда достоинство Вашего дешифратора, который вынужденно синхронизируется с управляющей схемой? Честно говоря, в нашем споре я не понимаю сути «синхронная/асинхронная схема», может растолкуете?
                      –1
                      1. Если уж что-то испортится, будет плохо всем. Я говорю о том, что задержка элемента вышла за пределы Ваших предположений. А такие предположения Вы делаете, раз делаете синхронные схемы.
                      2. Контроллер после запроса на операцию может делать что угодно, это уж от Вас зависит, как Вы его сделаете.
                      3. Ну привяжите регистр к дешифратору. А сам адрес храните на другом регистре. И делайте с ним, что хотите, в любое время.
                        –1
                        такие предположения Вы делаете, раз делаете синхронные схемы.
                        Нет, не делаю (в смысле- не проектирую схем)- максимум закладываю логику, аналогичную «железной» схеме, в виде подпрограммы в каком-нибудь алгоритме для ПЛК. И как-то не задавался вопросом- синхронные ли эти схемы(если составлять программу для ПЛК на языке FBD- она очень походит на электронную схему) или какие другие.
                        Ну привяжите регистр к дешифратору. А сам адрес храните на другом регистре. И делайте с ним, что хотите, в любое время.
                        Дык я так и делаю, а Вы называете это «синхронной» схемой. Вообще- прошу меня извинить, я честно попытался понять Ваш подход к созданию логических схем и… попросту сломал голову. Похоже- это та область знаний, которая каким-то образом осталась мне абсолютно непонятной.
              0
              Почитал вики на тему асинхронности. Осталось всё равно непонятным — с какого момента выходную комбинацию можно считать достоверной? В статье на вики пишут о опциональном «индикаторе-маркере», который гарантированно аккумулирует задержку всех элементов.
              В вашей схеме путь прохождения сигналов тоже немаленький — и задержка будет сильно выше обычной синхронной схемы. В чем плюс?
                –1
                В синхронном дешифраторе нужно действительно выдержать какую-то задержку, чтобы считать «выходную комбинацию» достоверной. В асинхронном устройстве само появление «выходной комбинации» говорит о ее достоверности.
                В сравнении способов реализации плюсом асинхронной можно считать энергопотребление (в связи с отсутствием тактового сигнала).
                Я здесь не сравниваю реализации. Демонстрирую принципиальную возможность синтеза асинхронного дешифратора. Что вместе с предыдущей статьей доказывает возможность построения целиком и полностью асинхронного процессора.
                –1
                Кажется я понял, что имеется в виду — здесь вопрос терминологии.
                В синхронных схемах (в рамках терминологии поста) тактовый сигнал генерируется всегда, даже если состояния на входе не меняются, а в асинхронных схемах (в рамках терминологии поста) есть запуск (после очередного изменения), а далее информация проходит через последовательность устройств, и каждое из них генерирует свой собственный выходной сигнал, гарантирующий, что операция завершена.
                Нет общего для всех устройств тактового сигнала, но для каждого устройства сигнал начала работы есть, он и является третьим входом.
                Тогда должен быть и выходной сигнал завершения работы — но его нет, так как сам один из выходов является стартом для очередного устройства, что и вызвало очевидное непонимание.
                  –1
                  Изменение на любом из выходов и означает завершение работы. Незачем это дублировать еще одним выходным сигналом.
                    0

                    Я правильно понимаю, что данная схема защищена от глитчей "по построению"? Если так, то зачем нужен сигнал d, если можно начать дешифрацию сразу в момент изменения входных значений?

                      0
                      Все правильно, в асинхронной схеме не должно быть никаких непредвиденных переключений. Все строго как нарисовано в итоговом графе. Нельзя начинать операцию, не убедившись, что входная информация достоверна. В противном случае пойдут непредсказуемые переключения. Переключение одного входа можно считать началом процесса смены входного кода. Но окончание этого процесса не определено. После переключений, например, двух входов из четырех, дешифратор не сможет определить: ждать ли ему переключения оставшихся двух входов, или же это итоговая входная комбинация. Сигнал d сообщает, что на входе достоверный набор и можно начинать операцию.
                        0

                        А, точно, что-то я туплю, входов же несколько. Тогда такой вопрос: чем по существу отличается предложенная схема дешифратора от схемы, полученной непосредственно из таблицы истинности и карты Карно с устранением потенциальных переключений? Мне кажется, такая схема должна получиться намного компактнее.
                        Выглядит всё это довольно интересно, но закрадываются сомнения в эффективности такого построения в плане количества логических элементов. Казалось бы, нужно к обычной схеме добавить всего лишь сигнал готовности результата, а получается что-то на порядок более крупное, чем без этого сигнала.

                          0
                          Потенциально то что сделано по таблице истинности может дать волну на выходах. В конце концов все устаканится как надо. Но нужна задержка в виде синхросигнала. Асинхронный дешифратор лишен этого недостатка, переключится только один нужный выход. Что касается габаритов, согласен: игрушка увесистая. Но тут ничего не поделаешь. Тут дело даже не в том что я не доработал. Такова природа этих вещей. Я не ставлю вопрос так, что асинхронный дешифратор лучше синхронного. Наверно, для огромного количества задач синхронный предпочтительнее. Но если кто-то захочет полностью отказаться от тактовых сигналов, возможно и мое творение пригодится. А вообще в этой статье и предыдущей я отвечал на утверждение, что задача асинхронного представления операций над данными и адресами не решена. Вот я и решил эти задачки. Хотя повторюсь, решение вопроса о нужности асинхронного дешифратора не моя сфера.
                            0
                            А еще! Моя штуковина не требует дуальности входных сигналов.
                              0

                              Всё равно непонятно. В общем случае, если строить схему просто по таблице истинности, то могут быть проблемы, а если взять карту Карно и покрыть её как надо, то можно избавиться от переходных процессов (насколько мне известно). В случае дешифратора карта Карно вообще содержит одну единицу и остальные нули и покрыть её — тривиальное дело. И вот я попробовал построить схему таким образом и получил четыре отдельных схемы вида
                              q1=AND(d, AND(r1, r2))
                              q2=AND(d, NOR(NOT(r1), r2))
                              q3=AND(d, NOR(r1, NOT(r2)))
                              q4=AND(d, NOR(r1, r2))
                              Эта схема, вроде как, должна работать без проблем при условии, что сигнал d приходит после стабилизации сигналов r1, r2. Что я упускаю?


                              Ещё заметил пару недостатков в вашей схеме. Если предлагается использовать каскадирование этих дешифраторов, то кто и каким образом будет подавать сигнал d дешифраторам следующих уровней? Возможно, всё-таки нужен какой-то выходной сигнал, сигнализирующий о готовности результата.
                              Кроме того, тут есть проблема с определением, когда можно опустить сигнал d в ноль: нужна обратная связь, что наталкивает на мысль о том, что в гипотетическом процессоре будет замкнутый контур, в котором первому элементу нужна будет обратная связь от самого последнего для управления неким сигналом d. Процессор будет как бы ждать сам себя. Не вызывает ли это противоречий? Возможно, стоит как-то изменить характер сигнализирования о готовности, но всё равно не очень понятно, как избавиться от обратной связи, ибо данные на вход некоторому участку схемы могут приходить быстрее, чем он их будет обрабатывать, что всё равно приведёт к простоям.


                              И это, а что есть дуальность входных сигналов? Нагуглить не получилось.

                                0
                                Дуальность — это о том, что входные сигналы подаются в прямом и в инвертированном виде, чтобы исключить влияние переходных процессов.
                                А насчет избавления от переходных процессов картой Карно — это принципиально невозможно, поскольку переходной процесс при смене 00-11 и переход 00-01 с последующим 01-11 карты Карно отличите не способны, вот и появляется третий входной сигнал (типа тактового, но это не тактовый).
                                  0

                                  Мысль была именно в том, что здесь наиболее важно получить отсутствие проблем при переходном процессе для сигнала d в условии обнуления выходов при d=0, а там как раз всё хорошо, ибо остальные входные сигналы к этому времени стабильны.
                                  Думаю, в общем случае это работать, конечно, не будет, но вот для дешифратора — почему бы и нет?

                                    0
                                    Прошу прощения, 4 дня назад не сдержался. Злой был, три с лишним дня не кушал.
                                    0
                                    Так кубы, карты Карно — это инструменты, применяемые к таблице истинности. Так что все это одно и тоже. Получившиеся уравнения — прекрасные, в модели Маллера (задержка приведена к выходу элемента) все будет работать. В общем со всей асинхроникой не было бы проблем. Но в действительности такие сложные элементы (3 уровня) не реализовать (в соответствии с моделью Маллера), задержка будет размазана по NOT, NOR. Чем меньше элемент, тем роднее он для модели Маллера.
                                    Возьмем уравнение для q3. Представьте ситуацию: d=0, r1=0, r2=1, NOT(r2)=0, NOR(...)=1, q3=0. А теперь переключим r2-, а затем d+. По идее q3 должен остаться в 0. Но при достаточно большой задержке NOT и NOR, d+ дойдет до AND раньше чем «0» с NOR. В итоге получим q3+. Со временем эти ложные выбросы рассосутся. Вместе с тактовым сигналом такую схему употреблять можно, без него будет плохо. Комбинационная логика в асинхронном виде реализуется тяжеловато. Но это не потому что синхронные схемы хорошие а асинхронные плохие. Асинхронные схемы делаются при соблюдении гораздо более жестких условий: нет предположений об ограничении задержек элементов, недопустимы ложные выбросы.
                                    О каскадировании я собирался написать попозже. Не надо воспринимать так, что более высокий уровень будет состоять из готовых дешифраторов. Над двумя дешифраторами вдвое меньшей разрядности будет надстраиваться схема, похожая на правую часть двухразрядного дешифратора. В этой правой части выделяются 4 одинаковых блока. Такой блок (с небольшими изменениями) будет соответствовать каждому выходу дешифратора с удвоенной разрядностью.
                                    Теперь о взаимодействии с контроллером.
                                    Сигнал d — чисто управляющий. Сигналы q несут две функции: управляющую и информационную. Переключение одного из этих сигналов говорит о том, что:
                                    1 — на входе дешифратора определенная комбинация (информационная составляющая),
                                    2 — процесс переключений закончился (управляющая составляющая).
                                    Таким образом сигнал q для верхнего каскада и информационный, и управляющий.
                                    Общая схема взаимодействия такая. Контроллер вырабатывает d+ для самого нижнего каскада. Также самый нижний каскад получает информацию от разрядов регистра (r1, r2...).
                                    Далее от каскада к каскаду передаются сигналы q+. С самого верхнего каскада q+ поступает в контроллер, который вырабатывает d- для самого младшего каскада и вторая фаза проходит аналогично.
                                    Под дуальностью подразумевал представление входного сигнала как самим собой, так и своей инверсией.
                      0
                      Чую, получу еще один минус. Кто-то упорный минусует все мои комментарии, и все комментарии хоть с малейшим положительным отношением. Наверно что-то личное.
                        0

                        я насчитал как минимум 6 триггеров на мелкой логике с цепями очень похожими синхронизацию,
                        например на базе n1...n4 и m1...m4, а так же i1-j1 и i2-j2
                        поэтому вопрос, почему эта схема считается асинхронной?
                        может здесь просто путаница и в реальности применена очень оригинальная методика проектирования?

                          0
                          Да, Вы правы и это очень похоже на синхронизацию, но это все таки не она, потому что для каждого устройства есть свой сигнал готовности и они по времени разбегаются, в отличие от общей цепи синхронизации, которая тактирует все устройства сразу и они обязаны завершить свои действия до очередного такта.
                          Но это понятие применимо к устройству в целом, поэтому отдельные узлы выглядят, как тактируемые.
                            0
                            По поводу оригинальности спорить не буду. Но это схема асинхронная. Причем асинхроннийшая из асинхроннийших, чесно. Все эти триггера сами собой получаются. Здесь нет никакой навязанной структуры. Например С-элемент в минимальном базисе также содержит триггер и обратные связи. Такова природа исходных заданий. Если копнуть глубже, то грань между синхронным и асинхронным размывается. Можно ведь тактовый сигнал зашить в исходное задание как обычный входной сигнал. И сделать по этому заданию асинхронную схему. А потом можно принять ограничения на разброс задержек элементов. И сделать асинхронную схему при этих условиях. Получится некий аналог синхронной схемы.

                          Only users with full accounts can post comments. Log in, please.