У нас был очень короткий курс FPGA / Verilog в университете (5 лет назад), и мы всегда использовали часы везде.
Теперь я снова начинаю с FPGA как хобби, и я не могу не задуматься об этих часах. Они абсолютно необходимы, или проект на основе ПЛИС может быть полностью асинхронным? Можно ли построить сложную связку логики и сделать так, чтобы материал пронизывал ее так быстро, как только мог?
Я понимаю, что с этим связано множество проблем, например, знание того, когда сигнал распространяется по всем частям схемы и выход стабилизируется. Это не относится к делу. Дело не в том, что я хочу на самом деле создать полностью асинхронный дизайн, а просто для того, чтобы улучшить мое понимание возможностей.
На мой взгляд, для начинающих кажется, что единственная конструкция, которая абсолютно нуждается в часах, это a reg
, и я понимаю, что типичная FPGA (скажем, Cyclone II) будет иметь свои триггеры, предварительно подключенные к определенным тактовым сигналам. Это верно? Существуют ли какие-либо другие неявные часы, подобные этой, и могут ли они, как правило, управляться вручную?
Ответы:
Короткий ответ будет: да; более длинный ответ будет: это не стоит вашего времени.
Сама FPGA может работать полностью асинхронно, без проблем. В результате вы получите проблему, поскольку время прохождения через любую FPGA не очень предсказуемо. Большая проблема заключается в том, что ваше время и итоговый дизайн почти наверняка будут различаться в зависимости от места и маршрута. Вы можете накладывать ограничения на отдельные асинхронные пути, следя за тем, чтобы они не занимали слишком много времени, но я не совсем уверен, что вы можете указать минимальную задержку.
В конце концов, это означает, что ваш дизайн будет непредсказуемым и потенциально полностью изменчивым даже при незначительном изменении дизайна. Вам придется просматривать весь отчет о времени каждый раз, когда вы что-либо меняете, просто чтобы убедиться, что он все еще будет работать. С другой стороны, если проект является синхронным, вы просто ищете проход или неудачу в конце места и маршрута (при условии, что ваши ограничения настроены правильно, что совсем не займет много времени).
На практике люди стремятся к полностью синхронным схемам, но если вам нужно просто буферизовать или инвертировать сигнал, вам не нужно проходить триггер, пока вы правильно его ограничиваете.
Надеюсь, это немного прояснит ситуацию.
источник
«Можно ли построить сложную связку логики и сделать так, чтобы материал пронизывал ее так быстро, как только мог?» Да. Созданы целые процессоры, которые полностью асинхронны - по крайней мере, один из них был самым быстрым процессором в мире. http://en.wikipedia.org/wiki/Asynchronous_circuit#Asynchronous_CPU
Меня раздражает, что люди отвергают методы асинхронного проектирования, хотя теоретически они имеют несколько преимуществ по сравнению с методами синхронного проектирования, просто потому, что (как уже здесь говорили) асинхронные проекты не так хорошо поддерживаются доступными инструментами.
Для меня это все равно, что рекомендовать делать все мосты из дерева, потому что больше людей имеют инструменты для обработки древесины, чем инструменты для обработки стали.
К счастью, некоторые из преимуществ асинхронного проектирования могут быть получены при использовании в основном методов синхронного проектирования с использованием глобальной асинхронной локальной синхронной конструкции (GALS) .
источник
Одним из факторов, еще не упомянутых, является метастабильность. Если в защелкивающуюся цепь входит последовательность входов / переходов, так что результирующее состояние будет зависеть от задержек распространения или других непредсказуемых факторов, нет гарантии, что результирующее состояние будет чистым «высоким» или «низким». Рассмотрим, например, триггер, запускаемый по фронту, который в настоящее время выдает «низкий» уровень, и его входной сигнал меняется с низкого на высокий почти в то же время, когда наступает фронт тактового сигнала. Если фронт тактового сигнала происходит достаточно долго до изменения входа, выход будет просто сидеть низко до следующего фронта тактового сигнала. Если после смены входа частота фронта тактового сигнала достаточно велика, выход быстро переключится с низкого уровня на высокий и останется там до следующего фронта тактового сигнала. Если ни одно из этих условий не применяется,, Он может оставаться низким или быстро переключаться один раз и оставаться высоким, но он может оставаться низким некоторое время, а затем переключаться, или переключаться, а затем через некоторое время переключаться назад или переключаться назад и вперед несколько раз и т. Д.
Если конструкция полностью синхронизирована, а все входы синхронизированы с двойной синхронизацией, очень маловероятно, что синхронизирующий импульс попадет в первую защелку синхронизатора таким образом, что он переключится в идеальное время, чтобы запутать вторую. защелки. В целом, можно считать такие вещи «просто не произойдет». В асинхронном дизайне, однако, часто гораздо сложнее рассуждать о таких вещах. Если ограничение синхронизации для схемы с защелкой (не только триггеры, но любая комбинация логики, которая будет действовать как защелка) нарушается, невозможно сказать, что будет делать выход, пока в следующий раз не появится действительное условие ввода, которое вызывает защелку в известное состояние. Вполне возможно, что задержанные выходы приведут к нарушению временных ограничений входных сигналов, что приведет к неожиданным ситуациям,
Самый безопасный способ смоделировать асинхронную схему состоял бы в том, чтобы почти каждая выходная цепь вырабатывала выход «X» на некоторое время, когда он переключается между «0» и «1». К сожалению, такой подход часто приводит к тому, что почти все узлы показывают «X», даже в тех случаях, которые в действительности почти наверняка привели бы к стабильному поведению. Если система может работать при моделировании, когда все выходы становятся «X» сразу после изменения входа и остаются «X» до тех пор, пока входы не будут стабильными, это хороший признак того, что схема будет работать, но при этом асинхронные схемы будут работать при таких ограничениях. часто сложно.
источник
Конечно, если ваши требования к дизайну достаточно медленны, и многие внутренние задержки по-прежнему на несколько порядков длиннее, чем те, о которых вы заботитесь, это не проблема, и вы можете посмотреть на отчет о сроках, чтобы следить за этим, но есть предел тому, что вы можете с пользой делать без внутренней информации о состоянии. Если вы просто хотите сделать что-то вроде 100-входного мультиплексора, тогда хорошо, просто помните, что каждый вход будет иметь различную задержку распространения. Фактически, вы можете получить некоторые интересные и хаотичные эффекты с большим количеством колебательных контуров обратной связи с непредсказуемой задержкой - возможно, следующий «аналог» может быть полностью асинхронным синтезатором на основе FPGA.
источник
Да, ты можешь. Вы можете полностью игнорировать триггеры и строить все это из LUT. И / или вы можете использовать элементы состояния большинства FPGA Xilinx в качестве защелок (срабатывающих по уровню) вместо триггеров (срабатывающих по краям).
источник
X=(someComplexFormula)
иY=X & D
, и если компилятор подставляет эту формулу для X и определяет, чтоX & D
это эквивалентноA & D
, компилятор может заменить вычисление Y в терминах A и D, а не в терминах X, что позволяет вычислять Y действовать быстрее, чем у X. Такие замены действительны с комбинаторной логикой, но наносят ущерб асинхронной последовательной логике.Как отметил @Андрей, это не стоит вашего времени. В частности, инструменты не делают этого, поэтому вы будете полностью самостоятельно. Кроме того, поскольку они имеют встроенные регистры, вы не сможете ничего сохранить, не используя их.
источник
На самом деле есть ТРИ типа конструкций.
В целом, при синтезе / оптимизации комбинаторной логики инструменты будут предполагать, что все, что имеет значение, это каков окончательный результат и максимальное время, необходимое для достижения этого результата.
Вы можете создать чисто комбинаторный дизайн, и он даст правильный результат. Выходы могут меняться в любом порядке и могут меняться несколько раз, прежде чем достигнут их окончательных значений. Такие конструкции очень расточительны из логических ресурсов. Большинство логических элементов будут проводить большую часть своего времени бездействующими, тогда как в последовательной системе вы могли бы повторно использовать эти элементы для обработки нескольких элементов данных.
В последовательной синхронной системе все, что имеет значение, состоит в том, что выходы комбинаторного блока установились в свое правильное состояние, когда они синхронизируются в следующем триггере. Не имеет значения, в каком порядке они меняются или являются ли они глюками по пути. Опять же, инструменты могут легко превратить это в логику, которая при условии, что часы достаточно медленные, дает правильный ответ (и они могут сказать вам, достаточно ли медленны часы, которые вы хотите использовать).
В асинхронной последовательной системе эти предположения выходят за рамки. Глюки могут иметь значение, порядок изменения выходных данных может иметь значение. И инструменты, и сами FPGA были разработаны для синхронного проектирования. Было много дискуссий (асинхронный дизайн FPGA от Google, если вы хотите узнать больше) о возможности реализации асинхронных систем либо на стандартных FPGA, либо на специально разработанных, но это все еще находится за пределами общепринятой принятой практики проектирования.
источник
Да. Если у вас нет конструкций типа процесса, то он не должен делать такие вещи, как вывод регистров. Будут такие вещи, как встроенная память, для которых требуются часы, хотя, если вы действительно этого хотите, вы, вероятно, можете генерировать их асинхронно.
источник
Я подумал, что должен добавить, что одной из очевидных целей в асинхронных логических решениях будет глобальное снижение энергопотребления.
Эти глобальные часы / PLL / буферы сжигают много джоулей.
Поскольку решения FPGA проникают в арены с питанием от батареи (например, Lattice Icestick), тогда этот аспект будет привлекать гораздо больше внимания.
источник