Сброс: синхронный против асинхронного

15

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

Однако мне сказали, что в схемах ASIC люди обычно используют асинхронный сброс везде. Мне интересно, почему, и если это так в некоторых проектах fpga тоже. Я хотел бы услышать профессиональные мнения.

Благодарность

Аурелиен Рибон
источник

Ответы:

11

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

Вы бы использовали синхронизатор сброса (два FF) с выходом, привязанным к остальным сборам проектов:

Сброс настроек

Пара обсуждений:
Асинхронный и синхронный сброс. Письма о синхронизации против Асинхронного сброса.

Оли Глейзер
источник
Как соотносятся требования к времени установки / удержания между выдачей сигнала сброса защелки и его часами с требованиями для ввода данных? Я чувствовал бы себя более комфортно, если бы защелки в системе видели, что конец сигнала сброса происходит на неактивном фронте тактовой частоты. Будет ли гарантировано, что сброс асинхронного сброса на активном фронте тактовой частоты не повлияет на цикл, в котором он происходит?
Суперкат
Нет, сброс сброса асинхронно не гарантированно будет чистым из-за необходимого времени восстановления сброса (например, настройка / удержание). Вот почему вы должны сбросить сброс синхронно.
Оли Глейзер
Мой вопрос заключается в том, является ли наличие у latch1 освобождения latch2 для подачи сигнала сброса на том же фронте тактовой частоты, который использовался бы latch2, полностью кошерным, т.е. будет ли минимальное время распространения от часов latch1 до его выхода удовлетворять требованию удержания для входа сброса latch2. Кстати, что вы думаете о моем ответе выше? Схема, которую вы нарисовали, мало защищена от коротких импульсов на линии сброса, когда почти полная устойчивость должна быть возможной.
суперкат
При дальнейшем рассмотрении можно добавить защиту от коротких импульсов, добавив третью защелку, а ее асинхронный сигнал сброса будет представлять собой версию с подавлением помех, подаваемую на первые два, так что сигнал, который асинхронно нарушает третью защелку, будет гарантированно чистый сброс первых двух. Импульс ускорения на входе сброса может привести к тому, что главная линия сброса в микросхеме получит импульс замедления, но если такой импульс произойдет, за ним последует синхронный импульс сброса.
суперкат
Извините, я думаю, что я понимаю, что вы имеете в виду сейчас. Если вы имеете в виду вывод из второй защелки в синхронизаторе для сброса FF системы, я понимаю, что время восстановления сброса обычно меньше, чем время настройки данных для того же FF, поэтому все должно быть в порядке. Я согласен с пульсирующими импульсами, они не дают иммунитета тем, кто не предлагает что-то вроде того, что вы предлагаете.
Оли Глейзер
7

Я предпочел бы асинхронный сброс по сравнению с синхронным сбросом по нескольким причинам (без определенного порядка):

  • Добавление асинхронной функции set или reset к триггеру, вероятно, приведет к уменьшению конструкции из-за интеграции логики в одну ячейку (по сравнению с не сбрасываемым триггером с вентилем AND на входе)
  • Чем меньше ворот, тем меньше перегруженность проводки / места и маршрута
  • Это более простой / более простой процесс сброса чипа (более удобный для пользователя / тестируемый)
  • Делание пути сброса асинхронным упрощает статическое временное разделение анализа сигнала сброса
  • Синхронный сброс добавит дополнительную логику в критический путь потока данных и усложнит выполнение требований по настройке и хранению.
  • В то время как FPGA имеет входную функцию произвольной логики с 4-6 входами, вы «платите» за каждый вход в вентиль ASIC (больше входов = больший вентиль; сложные функции = несколько вентилей)

В конечном счете, я не думаю, что какие-либо из этих проблем являются ограничителями показа, но они определенно способствовали бы сильному предпочтению асинхронного сброса на ASIC.

W5VO
источник
2
Одна из опасностей, связанных с использованием асинхронного сброса во внутренней логике, состоит в том, что импульс короткого замыкания на входе сброса может привести к любому хаосу. Если нужно разрешить асинхронный сброс своей схемы, следует спроектировать входную схему таким образом, чтобы гарантировать, что любой импульс сброса, достаточный для того, чтобы любой тип асинхронного сброса достиг внутренней схемы, также гарантированно вызовет произойдет синхронный сброс.
суперкат
4

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

Если вы действительно хотите углубиться в это, вы можете прочитать статьи Камминга по этому поводу, в частности:

http://www.sunburst-design.com/papers/CummingsSNUG2003Boston_Resets.pdf

Приветствия.

mixed_signal_old
источник
Одна проблема, которую, как мне кажется, г-н Каммингс упускает из своей статьи, заключается в том, что, хотя детекторы сбоев могут подавлять то, что в противном случае могло бы быть импульсами ускорения, они также могут превращать импульсы допустимой длины в импульсы ускорения. Эффект этого состоит в том, что импульс, который имеет правильную длину, может произвольно заглушить состояние системы, не вызывая надлежащего сброса. Поскольку избежать метастабильности во всех случаях без двойной синхронизации очень трудно, я бы предложил использовать две схемы асинхронного захвата, одна из которых имеет более «строгий» критерий обнаружения сбоев, а затем ...
суперкат
... устроить так, чтобы короткий сбой мог или не мог вызвать сброс через один или два цикла позже, но достаточно длинный импульс вызовет немедленный сброс. Кроме того, хотя использование «асинхронного сброса» на триггерах может помочь синтезу в некоторых топологиях, это не означает, что они должны использоваться асинхронно. Может быть полезно синхронизировать большинство внутренних сигналов сброса с часами даже при подаче входов «асинхронного сброса» на защелки.
суперкат
Каммингс говорит, что фильтры сбоев "ужасны". Я никогда не видел ни одного в IC, над которыми я работал. Мы стараемся использовать триггеры Шмитта во всех ячейках входной панели, чтобы избежать этих проблем, и сбросы при включении питания, которые я использую, очищаются аналогичным образом. Кстати, в каких случаях у вас будут короткие импульсы на линии сброса? Я видел это в некоторых тестовых сценариях сканирования, но они все еще имеют порядок длин тактового цикла, а не целенаправленных коротких импульсов. В вашем последнем комментарии, сброс сброса должен быть синхронизирован с часами, чтобы избежать нарушений s / h при сбросе и обеспечить сброс сброса всех флопов на одном фронте.
mixed_signal_old
Глит-фильтры часто полезны для определения того, какие типы входов могут вызвать метастабильность, но они не устраняют метастабильные состояния. Цель с использованием фильтра сбоев должна состоять в том, чтобы гарантировать, что любые метастабильные состояния, которые могут возникнуть, находятся в ситуациях "безразличия". Иногда необходимо, чтобы одно устройство было способно сбрасывать другое устройство, которое подключено к нему. Если провод сброса не является двойной синхронизацией, существует риск коротких импульсов от ближайших событий ESD и других подобных неприятностей.
суперкат
Что касается последнего пункта, я просто говорил, что даже кто-то синтезирует проект на оборудовании, которое обеспечивает «бесплатные» входы асинхронного сброса на триггерах, это не значит, что нельзя полностью синхронизировать сигнал с основными часами на обоих утверждение и освобождение. Внешние сигналы могут реагировать асинхронно на вход сброса, но это не значит, что нужно асинхронно сбрасывать все защелки. Действительно, чтобы избежать противоречивых состояний, может быть полезно, чтобы все, кроме двух защелок в одной конструкции были синхронными.
суперкат
2

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

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

Кстати, вот схема, иллюстрирующая концепцию. Рядом с нижним левым углом находятся два логических входа для сброса. Один сгенерирует «чистый» импульс сброса, а другой сгенерирует действительно неприглядный. Желтый светодиод указывает на сброс основной системы; Голубой светодиод указывает, что ввод / вывод разрешен. Нажатие на чистый сброс приведет к немедленному «сбросу» выходов; нажатие на icky reset приведет к отложенному сбросу выходов или оставит их без изменений (в симуляторе нет способа вызвать случай «оставь их без изменений»).

Supercat
источник
Я думаю, это звучит как хорошая идея. так много оттенков серого с такими, казалось бы, простыми вещами, как сброс.
Оли Глейзер
0

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

Вы должны сделать свой дизайн подходящим для выбранного типа FPGA . Некоторые FPGA имеют FlipFlops которые были разработаны для асинхронного сброса, некоторые предназначены для сброса синхронизации.

Вы должны проверить руководство пользователя FPGA для того, какой тип FlipFlops у вас есть.

Implementor / Mapper выберет выделенные маршруты для сброса ( код может выполняться с более высокой частотой и занимает меньше места ), если вы сопоставите свой код с типом примитивов FPGA.

Ваш дизайн будет работать в ЛЮБОМ случае , но иногда FPGA Implementor изо всех сил старается заставить вашу логику работать ( добавляет больше логики ), но это приведет к снижению максимальной частоты и / или большему количеству ресурсов FPGA.

Пример: протестирован с ZYNQ от Xilinx ( FPGA предназначен для синхронного сброса - см. Руководство пользователя примитивов ). Изменив сброс с асинхронного на синхронизированный , максимальная стабильная частота изменилась с 220 МГц до 258 МГц, и я преодолел свой запас по частоте.

Также я мог бы добавить, что Исполнитель не знает, что такое часы и сигнал сброса. Он назначает триггерные выводы сигналам по ЗАКАЗУ, а не по имени. Таким образом, в некоторых FPGA разработчик выбирает первый сигнал после «process () begin» в VHDL в качестве тактового сигнала, а в некоторых - в качестве сброса, в зависимости от того, на какую FPGA установлен разработчик.

Achex
источник
Я не согласен с вашим утверждением, что «Исполнитель не знает, что такое часы и сигнал сброса». Инструменты синтеза определяют, какие часы и какие сбрасываются в зависимости от того, как они используются. Тактовый сигнал используется со спецификацией фронта, сброс - нет. Кроме того, любой триггер может использоваться со спецификацией синхронного сброса, и, как вы заметили, это часто приводит к более быстрым критическим путям.
Джо Хасс