Может ли дизайн ПЛИС быть в основном (или полностью) асинхронным?

39

У нас был очень короткий курс FPGA / Verilog в университете (5 лет назад), и мы всегда использовали часы везде.

Теперь я снова начинаю с FPGA как хобби, и я не могу не задуматься об этих часах. Они абсолютно необходимы, или проект на основе ПЛИС может быть полностью асинхронным? Можно ли построить сложную связку логики и сделать так, чтобы материал пронизывал ее так быстро, как только мог?

Я понимаю, что с этим связано множество проблем, например, знание того, когда сигнал распространяется по всем частям схемы и выход стабилизируется. Это не относится к делу. Дело не в том, что я хочу на самом деле создать полностью асинхронный дизайн, а просто для того, чтобы улучшить мое понимание возможностей.

На мой взгляд, для начинающих кажется, что единственная конструкция, которая абсолютно нуждается в часах, это a reg, и я понимаю, что типичная FPGA (скажем, Cyclone II) будет иметь свои триггеры, предварительно подключенные к определенным тактовым сигналам. Это верно? Существуют ли какие-либо другие неявные часы, подобные этой, и могут ли они, как правило, управляться вручную?

Роман Старков
источник
3
Я знаю, что Саймон Мур из Кембриджского университета провел множество исследований в области асинхронного проектирования, включая изготовление тестового чипа. Он требует совершенно нового набора инструментов проектирования и имеет странные побочные эффекты: например, скорость выполнения обратно пропорциональна температуре.
pjc50

Ответы:

27

Короткий ответ будет: да; более длинный ответ будет: это не стоит вашего времени.

Сама FPGA может работать полностью асинхронно, без проблем. В результате вы получите проблему, поскольку время прохождения через любую FPGA не очень предсказуемо. Большая проблема заключается в том, что ваше время и итоговый дизайн почти наверняка будут различаться в зависимости от места и маршрута. Вы можете накладывать ограничения на отдельные асинхронные пути, следя за тем, чтобы они не занимали слишком много времени, но я не совсем уверен, что вы можете указать минимальную задержку.

В конце концов, это означает, что ваш дизайн будет непредсказуемым и потенциально полностью изменчивым даже при незначительном изменении дизайна. Вам придется просматривать весь отчет о времени каждый раз, когда вы что-либо меняете, просто чтобы убедиться, что он все еще будет работать. С другой стороны, если проект является синхронным, вы просто ищете проход или неудачу в конце места и маршрута (при условии, что ваши ограничения настроены правильно, что совсем не займет много времени).

На практике люди стремятся к полностью синхронным схемам, но если вам нужно просто буферизовать или инвертировать сигнал, вам не нужно проходить триггер, пока вы правильно его ограничиваете.

Надеюсь, это немного прояснит ситуацию.

Андрей
источник
3
Мне пришлось использовать некоторые устройства с асинхронными проектами ПЛИС. С ними было тяжело работать. Пожалуйста, используйте, по крайней мере, временные ограничения
Тим Виллискрофт
1
Хотя это правда, что возможно реализовать асинхронные проекты с FPGA, большинство FPGA построены для поддержки специально синхронных проектов. У них есть много ресурсов (ФАПЧ, схемы распределения тактового сигнала и огромное количество триггеров), которые будут потрачены впустую в асинхронном дизайне.
Дмитрий Григорьев
2
Этот ответ не дает особенно хороших советов. Вы можете создать FPGA без часов, и это фактически упрощает место и маршрут, устраняет массу проблем, связанных с требованиями к времени, и благодаря мелкозернистой конвейерной обработке может иметь заметно более высокую пропускную способность. Настоящая проблема возникает, когда вы пытаетесь отобразить тактовую схему на бесконтактную ПЛИС, потому что они имеют очень разные временные характеристики. Это может быть сделано, просто требуется немного больше внешней обработки, чтобы сделать преобразование. vlsi.cornell.edu/~rajit/ps/rc_overview.pdf
Нед Бингхэм
20

«Можно ли построить сложную связку логики и сделать так, чтобы материал пронизывал ее так быстро, как только мог?» Да. Созданы целые процессоры, которые полностью асинхронны - по крайней мере, один из них был самым быстрым процессором в мире. http://en.wikipedia.org/wiki/Asynchronous_circuit#Asynchronous_CPU

Меня раздражает, что люди отвергают методы асинхронного проектирования, хотя теоретически они имеют несколько преимуществ по сравнению с методами синхронного проектирования, просто потому, что (как уже здесь говорили) асинхронные проекты не так хорошо поддерживаются доступными инструментами.

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

К счастью, некоторые из преимуществ асинхронного проектирования могут быть получены при использовании в основном методов синхронного проектирования с использованием глобальной асинхронной локальной синхронной конструкции (GALS) .

davidcary
источник
Я точно так же чувствую современную тенденцию маршрутизировать печатные платы по квадратной сетке , хотя выгоды от миграции гораздо менее значительны.
Роман Старков
@romkyns - Это связано с тем, что написание программного обеспечения для печатных плат, использующего не прямолинейные сетки, является трудным делом .
Коннор Вольф
1
@supercat: Я подозреваю, что вы намекаете на четырехфазную логику . Это один из многофазных тактовых сигналов, который, кажется, забыт.
Дэвидкари
1
@davidcary: вроде, кроме обеих «фаз» на одном проводе - одна фаза контролируется нарастающим фронтом, а другая - падающим фронтом. По сути, я бы разделил часы-защелки на четыре категории: чистое повышение, чистое падение, позднее повышение, позднее падение. Защелки, синхронизированные (L / CB) чистым нарастающим или падающим фронтом, могут получить данные от любого нарастающего или падающего фронта. L / CB с поздним нарастающим фронтом может принимать данные от L / CB с чистым нарастающим фронтом при любом спаде. L / CB по позднему падению может взять данные из чистого падения L / CB или любого повышения.
суперкат
1
@davidcary: при условии, что самое быстрое время распространения для любой защелки превышает самое длительное время удержания, и при условии, что самый длинный путь прохождения сигнала от фронта тактового генератора, через логику стробирования тактового генератора и «поздние» защелки, запускаемые этим фронтом, до любого фиксатора, инициируемого Следующее ребро, не превышающее минимальное время между фронтами тактового генератора, я думаю, такая конструкция должна быть полностью надежной и не иметь внутренней генерируемой метастабильности при любой комбинации задержек распространения.
суперкат
5

Одним из факторов, еще не упомянутых, является метастабильность. Если в защелкивающуюся цепь входит последовательность входов / переходов, так что результирующее состояние будет зависеть от задержек распространения или других непредсказуемых факторов, нет гарантии, что результирующее состояние будет чистым «высоким» или «низким». Рассмотрим, например, триггер, запускаемый по фронту, который в настоящее время выдает «низкий» уровень, и его входной сигнал меняется с низкого на высокий почти в то же время, когда наступает фронт тактового сигнала. Если фронт тактового сигнала происходит достаточно долго до изменения входа, выход будет просто сидеть низко до следующего фронта тактового сигнала. Если после смены входа частота фронта тактового сигнала достаточно велика, выход быстро переключится с низкого уровня на высокий и останется там до следующего фронта тактового сигнала. Если ни одно из этих условий не применяется,, Он может оставаться низким или быстро переключаться один раз и оставаться высоким, но он может оставаться низким некоторое время, а затем переключаться, или переключаться, а затем через некоторое время переключаться назад или переключаться назад и вперед несколько раз и т. Д.

Если конструкция полностью синхронизирована, а все входы синхронизированы с двойной синхронизацией, очень маловероятно, что синхронизирующий импульс попадет в первую защелку синхронизатора таким образом, что он переключится в идеальное время, чтобы запутать вторую. защелки. В целом, можно считать такие вещи «просто не произойдет». В асинхронном дизайне, однако, часто гораздо сложнее рассуждать о таких вещах. Если ограничение синхронизации для схемы с защелкой (не только триггеры, но любая комбинация логики, которая будет действовать как защелка) нарушается, невозможно сказать, что будет делать выход, пока в следующий раз не появится действительное условие ввода, которое вызывает защелку в известное состояние. Вполне возможно, что задержанные выходы приведут к нарушению временных ограничений входных сигналов, что приведет к неожиданным ситуациям,

Самый безопасный способ смоделировать асинхронную схему состоял бы в том, чтобы почти каждая выходная цепь вырабатывала выход «X» на некоторое время, когда он переключается между «0» и «1». К сожалению, такой подход часто приводит к тому, что почти все узлы показывают «X», даже в тех случаях, которые в действительности почти наверняка привели бы к стабильному поведению. Если система может работать при моделировании, когда все выходы становятся «X» сразу после изменения входа и остаются «X» до тех пор, пока входы не будут стабильными, это хороший признак того, что схема будет работать, но при этом асинхронные схемы будут работать при таких ограничениях. часто сложно.

Supercat
источник
4

Конечно, если ваши требования к дизайну достаточно медленны, и многие внутренние задержки по-прежнему на несколько порядков длиннее, чем те, о которых вы заботитесь, это не проблема, и вы можете посмотреть на отчет о сроках, чтобы следить за этим, но есть предел тому, что вы можете с пользой делать без внутренней информации о состоянии. Если вы просто хотите сделать что-то вроде 100-входного мультиплексора, тогда хорошо, просто помните, что каждый вход будет иметь различную задержку распространения. Фактически, вы можете получить некоторые интересные и хаотичные эффекты с большим количеством колебательных контуров обратной связи с непредсказуемой задержкой - возможно, следующий «аналог» может быть полностью асинхронным синтезатором на основе FPGA.

mikeselectricstuff
источник
4

Да, ты можешь. Вы можете полностью игнорировать триггеры и строить все это из LUT. И / или вы можете использовать элементы состояния большинства FPGA Xilinx в качестве защелок (срабатывающих по уровню) вместо триггеров (срабатывающих по краям).

Мартин Томпсон
источник
3
Опасность заключается в том, что если кто-то не ограничивает логический компилятор, он может создавать логику, которая имеет отрицательное время распространения для некоторых гейтов. Например, если указано X=(someComplexFormula)и Y=X & D, и если компилятор подставляет эту формулу для X и определяет, что X & Dэто эквивалентно A & D, компилятор может заменить вычисление Y в терминах A и D, а не в терминах X, что позволяет вычислять Y действовать быстрее, чем у X. Такие замены действительны с комбинаторной логикой, но наносят ущерб асинхронной последовательной логике.
Суперкат
@supercat - я никогда не работал с инструментами Xilinx, но когда я работал с FPGA Altera, у вас всегда была возможность указать любые критические пути в виде подключенных модулей шлюзов, а не в RTL, и в этот момент любая такая оптимизация отключен.
Жюль
@Jules: Все мои проекты программируемой логики использовали Abel, который является несколько глупым языком, но позволяет задавать вещи способами, которые могут реализовывать некоторые CPLD, но которые могут создавать трудности для инструмента синтеза VHDL или Verilog. Например, в одном из моих проектов я использовал тот факт, что части Xilinx имеют часы, асинхронный набор и асинхронный сброс для реализации асинхронно-загружаемого сдвигового регистра. Если мне нужно делать такие вещи в ПЛИС, так как я никогда не использовал Verilog или VHDL, как мне узнать, что для этого нужно? Кстати, если память не изменяет, я использовал T-флопы для шифтера и ...
суперкат
... время было таким, что асинхронная запись могла происходить только в те моменты, когда входной сигнал Т был бы низким, предполагая, что, если тактовые импульсы произошли вблизи начала импульса записи, асинхронная запись продолжится достаточно далеко, чтобы обеспечить стабильное значение, и если nop-clock произошел ближе к концу, он просто зафиксировал бы все еще стабильное значение. Я не уверен, как можно эффективно обрабатывать такие случаи в VHDL или Verilog.
суперкат
@supercat - рассматривая аналогичную проблему, просматривая Справочник по устройству Cyclone IV, я вижу, что наилучшим подходом к той же проблеме было бы использование опции «синхронная загрузка всей LAB» («LAB» - это группа из 16 логических элементов). , поэтому, если размер такого регистра не заканчивается кратным 16 битам, то некоторые биты будут потрачены впустую, но в любом случае это кажется наиболее полезной опцией). Теперь у меня есть два варианта: я могу написать функциональный verilog, который потребует, чтобы инструмент синтеза выбрал способ реализации требуемого регистра (который обычно был бы лучшим вариантом), или, если у меня был строгий хронометраж ...
Жюль
3

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

Брайан Карлтон
источник
3

На самом деле есть ТРИ типа конструкций.

  1. Комбинаторные. Здесь нет часов и путей обратной связи, а в системе нет «памяти». Когда один или несколько входов изменяют изменения, они изменяются. Через некоторое время выход переходит в новое состояние, в котором он остается, пока входы не изменятся снова.
  2. Синхронный, последовательный. Система построена из регистров и блоков комбинаторной логики, регистры синхронизируются небольшим количеством (часто 1) тактов. Если имеется несколько тактовых импульсов, то могут потребоваться специальные предварительные проверки сигналов, которые передаются из одного тактового домена в другой.
  3. Асинхронный последовательный. Существуют пути обратной связи, защелки, регистры или другие элементы, которые обеспечивают память проекта прошлых событий и которые не синхронизируются анализируемыми линиями часов easilly.

В целом, при синтезе / оптимизации комбинаторной логики инструменты будут предполагать, что все, что имеет значение, это каков окончательный результат и максимальное время, необходимое для достижения этого результата.

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

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

В асинхронной последовательной системе эти предположения выходят за рамки. Глюки могут иметь значение, порядок изменения выходных данных может иметь значение. И инструменты, и сами FPGA были разработаны для синхронного проектирования. Было много дискуссий (асинхронный дизайн FPGA от Google, если вы хотите узнать больше) о возможности реализации асинхронных систем либо на стандартных FPGA, либо на специально разработанных, но это все еще находится за пределами общепринятой принятой практики проектирования.

Питер Грин
источник
2

Да. Если у вас нет конструкций типа процесса, то он не должен делать такие вещи, как вывод регистров. Будут такие вещи, как встроенная память, для которых требуются часы, хотя, если вы действительно этого хотите, вы, вероятно, можете генерировать их асинхронно.

mikeselectricstuff
источник
1
Вы хотели сделать один ответ?
Кевин Вермеер
1

Я подумал, что должен добавить, что одной из очевидных целей в асинхронных логических решениях будет глобальное снижение энергопотребления.

Эти глобальные часы / PLL / буферы сжигают много джоулей.

Поскольку решения FPGA проникают в арены с питанием от батареи (например, Lattice Icestick), тогда этот аспект будет привлекать гораздо больше внимания.

Harrygoz
источник
Это хороший момент, хотя стоит учесть, что плохо спроектированная комбинаторная схема, выполняющая ту же операцию, что и последовательная схема, может в некоторых случаях выполнять много переходных процессов, так как вычисляются частичные результаты и обновляется конечный результат, чтобы учесть их, и в схемах CMOS (как большинство FPGA) потребляемая мощность примерно пропорциональна количеству переходов. Синхронизация может вызывать ненужные переходы, но вы также можете значительно снизить энергопотребление, отключив такты в тех частях схемы, которые в данный момент не нужны.
Жюль