Я работал с fpgas в течение многих лет и всегда использовал синхронный сброс для всех частей (которые в этом нуждаются) моих цепей. Это помогает сбрасывать схему в глобальном масштабе при заданном такте.
Однако мне сказали, что в схемах ASIC люди обычно используют асинхронный сброс везде. Мне интересно, почему, и если это так в некоторых проектах fpga тоже. Я хотел бы услышать профессиональные мнения.
Благодарность
Я предпочел бы асинхронный сброс по сравнению с синхронным сбросом по нескольким причинам (без определенного порядка):
В конечном счете, я не думаю, что какие-либо из этих проблем являются ограничителями показа, но они определенно способствовали бы сильному предпочтению асинхронного сброса на ASIC.
источник
Асинхронный сброс с синхронным удалением работает очень хорошо. Как упомянуто выше, асинхронные сбрасывающие флопы меньше и не требуют активных часов для обеспечения сброса, поэтому вы можете принудительно сбросить часть (обычно известное состояние с низким энергопотреблением) только с помощью питания и одного жесткого проводного контакта или питания. при сбросе.
Если вы действительно хотите углубиться в это, вы можете прочитать статьи Камминга по этому поводу, в частности:
http://www.sunburst-design.com/papers/CummingsSNUG2003Boston_Resets.pdf
Приветствия.
источник
Другой подход, который может показаться даже более безопасным, чем подход «асинхронное подтверждение / синхронное освобождение», состоит в том, чтобы иметь детектор асинхронного сброса (во многом как описано в другом месте, с асинхронным «утверждение» и синхронное «освобождение»), но с выходом из это блокирует любые внешние устройства ввода-вывода без асинхронного сброса чего-либо (кроме защелки в самом детекторе). Если один использует два асинхронных детектора сброса, один для линий ввода / вывода и один для питания детектора синхронного сброса, и если один проектирует один для линий ввода / вывода, так что он будет отключаться только импульсами сброса, которые достаточно надежны для надежной работы отключив основной детектор, можно избежать даже сбоев на выходах в случаях, когда не требуется перезагружать процессор. Обратите внимание, что если это сделать, импульс сброса допустимой длины сбрасывает выходы асинхронно,
Еще одна вещь, которую следует учитывать, это то, что системы часто имеют некоторые регистры, которые не должны быть затронуты сбросом. Если асинхронный сброс может привести к попаданию в схему, которая записывает данные в эти регистры, возможно, что импульс сброса, который поступает в неправильное время, затормаживает эти регистры, даже если это чистый (ненормативный) импульс. Например, если код пытается выполнить запись по адресу 1111 и выполняется асинхронный сброс, который происходит незадолго до того, как тактовый импульс заставляет один из защелок адреса обнулиться, как только поступает тактовый импульс, это может привести к ошибочной записи в адрес 1110. Хотя Можно использовать несколько внутренних линий сброса с комбинаторными задержками, чтобы гарантировать, что запись в регистр была отключена до того, как адрес был захвачен, использование логики синхронного внутреннего сброса позволяет полностью избежать этой проблемы.
Кстати, вот схема, иллюстрирующая концепцию. Рядом с нижним левым углом находятся два логических входа для сброса. Один сгенерирует «чистый» импульс сброса, а другой сгенерирует действительно неприглядный. Желтый светодиод указывает на сброс основной системы; Голубой светодиод указывает, что ввод / вывод разрешен. Нажатие на чистый сброс приведет к немедленному «сбросу» выходов; нажатие на icky reset приведет к отложенному сбросу выходов или оставит их без изменений (в симуляторе нет способа вызвать случай «оставь их без изменений»).
источник
Как опытный инженер ( 3 года с проектированием FPGA и встроенными системами ), я говорю вам, что вам нужно проверить таблицу данных и руководство пользователя FPGA. Это не простой ответ.
Вы должны сделать свой дизайн подходящим для выбранного типа FPGA . Некоторые FPGA имеют FlipFlops которые были разработаны для асинхронного сброса, некоторые предназначены для сброса синхронизации.
Вы должны проверить руководство пользователя FPGA для того, какой тип FlipFlops у вас есть.
Implementor / Mapper выберет выделенные маршруты для сброса ( код может выполняться с более высокой частотой и занимает меньше места ), если вы сопоставите свой код с типом примитивов FPGA.
Ваш дизайн будет работать в ЛЮБОМ случае , но иногда FPGA Implementor изо всех сил старается заставить вашу логику работать ( добавляет больше логики ), но это приведет к снижению максимальной частоты и / или большему количеству ресурсов FPGA.
Пример: протестирован с ZYNQ от Xilinx ( FPGA предназначен для синхронного сброса - см. Руководство пользователя примитивов ). Изменив сброс с асинхронного на синхронизированный , максимальная стабильная частота изменилась с 220 МГц до 258 МГц, и я преодолел свой запас по частоте.
Также я мог бы добавить, что Исполнитель не знает, что такое часы и сигнал сброса. Он назначает триггерные выводы сигналам по ЗАКАЗУ, а не по имени. Таким образом, в некоторых FPGA разработчик выбирает первый сигнал после «process () begin» в VHDL в качестве тактового сигнала, а в некоторых - в качестве сброса, в зависимости от того, на какую FPGA установлен разработчик.
источник