Для улучшения этой статьи желательно: |
Асинхро́нная ло́гика — разновидность взаимодействия логических элементов цифровых устройств. Отличается от синхронной тем, что её элементы действуют асинхронно, не подчиняясь глобальному генератору тактовых импульсов.
Асинхронные схемы управляются двумя сигналами: запрос, который выдается после установки входов и ответ. Относительно пары этих сигналов переходной процесс в асинхронной схеме моделируется элементом задержки, величина которой конечна и заранее неизвестна. В синхронных схемах аномалии динамического поведения (состязания и риски) маскируются с помощью тактового генератора. Для борьбы с аномалиями в асинхронных схемах используется механизм индикации[1], который фиксирует моменты окончания переходных процессов. Готовность сигналов индикации определяется величинами реальных задержек, которые могут изменяться и зависят от условий функционирования схемы (например от температуры). Физически, индикатор окончания переходных процессов в схеме может отсутствовать, тогда его роль выполняют специальные самосинхронные коды[2][3]. Таким образом, по сравнению с синхронными схемами, асинхронные в общем случае, содержат больше логических элементов. Основные преимущества асинхронных схем по сравнению с синхронными это[4]:
Синхронные схемы практически любого уровня сложности могут быть реализованы на относительно дешевых ПЛИС. Напротив, строго-самосинхронные схемы предъявляют очень жесткие требования к внутренней структуре ПЛИС[5][6] и практически единственным решением является изготовление ПЛИС на заказ[7][8][9]. Однако, стоит отметить попытки реализации асинхронных схем на биполярных ПЗУ[10][11], стандартных PAL (CPLD)[12][13] и FPGA[14][15][16]. Поскольку стандартные FPGA являются синхронными устройствами, на них относительно легко построить схемы с согласованной задержкой[17][18][19] и, сложнее, локально-синхронные (GALS) схемы[20][21]. В большинстве стандартных FPGA отсутствуют средства реализации арбитров. Один из способов обойти это ограничение представлен в[14]. В статье[15] для реализации строго-самосинхронной схемы предлагается модифицировать FPGA Atmel AT40K с очень мелким размером элементарной ячейки (fine grained)[22][23].
Асинхронная схема может рассматриваться как аппаратная реализация параллельной распределенной программы[30]. Для выполнения такой программы во времени обычно необходим какой-либо механизм, в то время как асинхронной схеме этот механизм не нужен. Аналогами операторов и команд в асинхронной схеме являются логические элементы, триггеры или сложные иерархические модули. Роль данных, которыми обмениваются компоненты схемы играют переключения сигналов на соединительных линиях. Таким образом, асинхронная система как правило, определяется как набор асинхронных модулей, которые взаимодействуют через асинхронные протоколы. Все события на системном уровне упорядочены во времени через причинно-следственные связи между действиями модулей. Порядок, установленный разработчиком должен быть сохранен в схеме, то есть фактически сгенерирован, что в конечном счете обеспечивает правильное функционирование. В общем случае, классификация самосинхронных схем довольно сложна и неоднозначна[1][31][32]. Однако, существуют по крайней мере две достаточно общие модели таких схем с разными предположениями о задержке в элементах, проводах и их соединениях[33][34]:
Дистрибутивные схемы являются подмножеством полумодулярных, которые в свою очередь, являются подмножеством SI-схем. На практике, класс SI-схем эквивалентен классу QDI. Теория и методы проектирования QDI-схем хорошо развиты и, поэтому, такие схемы наиболее популярны для реализации.
Сложные асинхронные системы нельзя однозначно представить ни моделью Хаффмана ни моделью Маллера. Такие системы могут быть построены как асинхронные конечные автоматы[42][43] или, в очень крупном масштабе, как асинхронные микропроцессорные комплекты[44][45], использующие микропрограммное управление[46][47][48][49]. Подобные комплекты представлены сериями К587[50][51], К588[52] и К1883 (U83x в ГДР)[53]. Обучение проектированию сложных последовательных самосинхронных схем целесообразно начинать с реализации простого одноразрядного процессора MC14500B и объединения таких процессоров в вычислительную структуру[54].
На интуитивном уровне, обусловленность (причинная-следственная связь, causality) в асинхронных схемах — это зависимость порядка появления выходных сигналов от порядка появления входных. Эта зависимость может быть сильной (И) и слабой (ИЛИ), что соответствует схемам с полной индикацией (full indication) и досрочным получением результата (early evaluation)[55].
Предположим, что некоторое событие имеет две причины: и . И-обусловленность предполагает, что оба события и должны иметь место, прежде чем может произойти событие . Таким образом, в случае И, каждая причина сильно предшествует результату. Аналогом такого поведения в социологии является коллективизм и товарищество. В случае ИЛИ-обусловленности событие может произойти после того, как любое из событий или произошло (здоровый индивидуализм).
Таким образом, в случае ИЛИ, результат появляется если по крайней мере одно событие из набора слабых причин произошло. Чтобы определить как ведет себя событие после того, как обе его слабые причины и произошли, вводятся понятия совместной и несовместной обусловленности[56] (соответственно управляемый и неуправляемый индивидуализм). Для двух входных сигналов И-обусловленность моделируется с помощью гистерезисного триггера (Г-триггер, Muller C-element), заданного уравнением . Модель совместной ИЛИ-обусловленности — это элемент «включающее ИЛИ» (inclusive OR, EDLINCOR)[57], который использует выход гистерезисного триггера и задается уравнением . Модель полностью несовместной ИЛИ-обусловленности — это схемы, основанные на арбитрах.
Рассмотрим асинхронную схему, в которой есть двухвходовый элемент ИЛИ (двухвходовый элемент И). В фазе гашения на входе элемента ИЛИ установлен код 00, а на входе элемента И — код 11. В рабочей фазе сначала один из входов переключится в 1 (0), а затем второй. Необходимо индицировать оба изменения, но в случае OR-causality процесс будет развиваться по одному входу, а затем второй вход где-то индицируется. Иными словами процесс начинает ветвиться по первому изменению входа, без ожидания второго то есть без синхронизации со вторым сигналом. Чем больше таких элементов, тем больше параллельность в схеме. Синхронизация входов возможна, но нежелательна, так как это будет другой процесс с меньшей параллельностью. OR-causality описывается либо небезопасной, но устойчивой сетью Петри, либо безопасной, но неустойчивой.
Оба типа обусловленности приводят к полумодулярным схемам. Однако, в случае И-обусловленности эти схемы являются дистрибутивными, а в случае ИЛИ — недистрибутивными. Дистрибутивные схемы могут быть построены из элементов только одного типа (например, И-НЕ или ИЛИ-НЕ), а недистрибутивные требуют использования обоих типов элементов. В случае небезопасной, но устойчивой сети Петри необходимо также бороться с накоплением точек в вершинах OR-causality. Методологии DIMS и NCL, как и любые другие методологии с полной индикацией, имеют все преимущества и недостатки И-обусловленности. Графы сигнальных переходов в своем наиболее простом варианте также реализуют полную индикацию. Диаграммы изменений позволяют моделировать как И-, так и совместную ИЛИ-обусловленность, но не могут напрямую представлять процессы с конфликтами или выбором.
При проектировании асинхронной схемы необходимо сделать предположение о задержках. Методология самосинхронизации использует гипотезу Маллера относительно задержек в проводах — вся задержка провода приведена к выходу элемента, а разбросом задержек в проводах после разветвления можно пренебречь. В этом случае провода вообще исключаются из рассмотрения. Нарушение гипотезы Маллера приводит к нарушению причинной обусловленности поведения, являющейся логической основой самосинхронизации. Причинная обусловленность требует, чтобы каждое событие в системе являлось причиной, по крайней мере, одного другого события (свойство индицируемости самосинхронных систем[2]). В логических структурах, в отличие от систем передачи, изменение состояния отрезка провода после разветвления может не приводить к переключению логического элемента и, следовательно, не индицироваться. При этом отрезок провода начинает выступать как элемент памяти. Для борьбы с этим, то есть для построения схем, не зависящих от задержек в проводах, необходимо использование либо специальных дисциплин переключения (что сужает класс реализуемых схем[59]), либо использование специальных логических или топологических конструкции, как, например, изохронные разветвления[60][61] или разветвления полем (field forks[62][63]), требующих введения новых гипотез или/и приемов проектирования, зависящих от технологии. Эта проблема усугубляется с ростом влияния задержек в проводах и дисперсии этих задержек. Подавляющее большинство современных методологий проектирования приводят к схемам квази-нечувствительным к задержкам, то есть к схемам где все разветвления являются достаточно короткими и поэтому изохронными[64][65]. Основная задача синтеза асинхронных схем формулируется так[66][67]. Задается спецификация, моделирующая реальный процесс. Затем она анализируется чтобы выявить как полезные, так и аномальные свойства процесса. По результатам анализа исходная спецификация модифицируется с целью предотвращения или/и устранения аномалий. По новой, модифицированной спецификации синтезируется схема, поведение которой совпадает с исходной спецификацией. Краткий список методов анализа и синтеза асинхронных схем на основе моделей событийного типа приведен в[68]. Полный цикл использования этих моделей в современных средствах разработки обсуждается в[69]. Методы синтеза основанные на компиляции программ с языков высокого уровня, а также на теории трейсов рассмотрены в[70][71][72].
Простые синхронные схемы можно соединять между собой практически без проблем. Если в полученной сложной схеме отсутствуют критические гонки сигналов, она будет работоспособной. Соединение асинхронных схем гораздо сложнее, в полученной сложной схеме свойство асинхронности может быть утеряно. Результатом этого будет остановка работы или наоборот, генерация пачки импульсов. Если не рассматривать общий провод, то тактовый сигнал на синхронную схему подается по одному проводу. Связать асинхронные схемы можно также по одному проводу[73] но для этого нужно использовать специальный последовательный самосинхронный код. По сравнению с параллельным кодом, это означает более низкое быстродействие и дополнительные расходы оборудования. Для повышения быстродействия можно представлять разделитель (spacer) третьим уровнем сигнала[74][75]. Это позволяет также уменьшить количество проводов (если слоев металлизации не больше двух), но не позволяет переключать линии от разных задатчиков разным исполнителям, то есть не приспособлено для шинных структур. Поскольку в современных технологиях используются семь и более слоев металлизации, экономить таким образом на проводах не имеет смысла. Два провода позволяют использовать парафазный[76][77][78] протокол связи. Впервые такой подход был использован Д. Е. Маллером для построения строго самосинхронного микроконвейера[77]. Близким к этому способу является Delay Insensitive Minterm Synthesis (DIMS)[79]. Методология Null Convention Logic (NCL)[80][81][82] также предназначена для синтеза строго самосинхронных микроконвейеров. В отличие от DIMS, где используются C-элементы, NCL использует многовходовые Г-триггеры, которые называются пороговыми элементами и самосинхронный код М-из-N. В некоторых случаях это позволяет строить более простые схемы. Заметим, что в силу использования Г-триггеров, микроконвейеры DIMS и NCL реализуют только И-обусловленность[83]. Некоторые способы построения микроконвейеров с ИЛИ-обусловленностью рассмотрены в[84],[85]. Строго самосинхронные микроконвейерные схемы также могут быть синтезированы при компиляции программ с языков высокого уровня. Следует однако, ожидать, что полученные таким образом схемы будут не оптимальными. Например, сумматор синтезированный в[86] сложнее, чем предложенный в[87].
Идея использования примитивов для построения асинхронной схемы аналогична идее конструктора. Детали такого конструктора должны быть по возможности, универсальными[88]. Как правило, они описываются фрагментами сети Петри[89]. Наиболее известные асинхронные примитивы — это:
Сигнальные графы[100][101] (сиграфы, англ. Signal Graphs[102], англ. Signal Transition Graphs, STG[103][104])основаны на сетях Петри, переходы в которых помечены именами сигналов.
Самый простой класс STG — STG/MG соответствует классу маркированных графов сетей Петри. Это сети Петри, где каждая позиция имеет максимум один входной переход и один выходной переход. В таком графе позиция может иметь только маркеры, удалённые из него через одиночный переход, ведущий от него и переход, однажды разрешённый, может быть запрещен только при фактическом запуске, поэтому не может быть обработана ситуация, где могут происходить А или B, но не оба[105] . Отметим, что графически STG заменяет помеченный переход его меткой, и позиции с одним входом и одним выходом опускаются. Маркеры в этих опущенных положениях просто помещаются на соответствующую дугу. В STG метки переходов содержат не только имя сигнала, но также и определенный тип перехода, растущего («+») или падающего («-»).
Таким образом, когда запускается переход, помеченный «а+», сигнал «a» идет из 0 в 1; когда запускается переход, помеченный «а-», сигнал «a» идет из 1 в 0. Переходы на входных сигналах также различаются подчеркиванием. Чтобы создавать схемы по STG, часто требуются выполнения одного или нескольких ограничений: живучести, надежности, постоянства, непротиворечивого назначения состояния, уникального назначения состояния, одноцикловых переходов.
STG живучий, если от каждой доступной маркировки каждый переход может быть, в конце концов, запущен.
STG надёжен, если никакая позиция или дуга никогда не могут содержать больше одного маркера.
STG постоянен, если для всех дуг а* → b* (где t* означает переход t+ или t-) имеются другие дуги, гарантирующие, что b* запустится перед противоположным переходом a*.
STG имеет непротиворечивое назначение состояния, если переходы сигнала строго чередуются между + и — (то есть, нельзя ни повышать уже высокий сигнал, ни понижать низкий сигнал).
STG имеет уникальное назначение состояния, если никакие две различных маркировки STG не имеют идентичных значений для всех сигналов. Наконец,
STG имеет одноцикловые переходы, если каждое имя сигнала в STG появляется в точно одном растущем и одном падающем переходе.
Диаграммы изменений (англ. Change Diagrams, CD)[106][107][108] подобно STG имеют узлы, маркированные у переходов, и дуги между переходами, которые определяют разрешённые последовательности запуска переходов. CD имеют дуги трех типов: сильного предшествования, слабого предшествования и несвязанного сильного предшествования, а также начальную маркировку, хотя маркеры помещаются в переходы CD вместо позиций. Дуги сильного предшествования подобны дугам в STG и их можно считать дугами AND, так как переход не может запускаться, пока все дуги, указывающие на него, не отмечены маркером. Дуги слабого предшествования являются дугами OR, где переход может запускаться всякий раз, когда какой-либо переход с дугой слабого предшествования к нему отмечен маркером. Заметим, что переход не может иметь сильные и слабые дуги одновременно. Когда дуги сильного или слабого предшествования заставляют переход запускаться, на всех дугах, указывающих на этот переход, маркер удаляется и помещается на все дуги, разрешающие запуск перехода. Поскольку переход с дугами слабого предшествования, ведущими к нему, может запускаться раньше всех дуг, имеющих маркеры, дуги без маркеров имеют открытые циклы, добавленные к ним для индикации «долга» одного маркера. Когда маркер достигает дуги с долгом, маркер и долг взаимно уничтожаются. Таким образом, если маркер приходит на каждую входную дугу слабого предшествования к узлу (если ни одна из этих дуг изначально не отмечена маркерами или открытыми циклами), он будет запускаться только однажды, и может делать это, как только прибудет первый маркер. Наконец, освобождаемые дуги сильного предшествования идентичны дугам сильного предшествования, за исключением того, что после перехода, ведущего к запуску, дуга больше не сдерживает систему (считается удаляемой из CD). Таким образом, эти дуги могут использоваться для связи начального, неповторяющегося набора переходов с бесконечно повторяющимся циклом.
Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".
Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.
Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .