Любой сигнал, используемый как X'event and X= 1
или rising_edge.(X)
, будет обрабатываться синтезатором как часы.
В ПЛИС это означает, что инструмент маршрутизации попытается назначить выделенную тактовую сеть сигналу со всеми вытекающими отсюда последствиями. например сигнал должен быть направлен на выделенный тактовый вход, который может вызвать значительную задержку и отклониться от других сигналов.
Также сигнал должен быть «чистым». Это означает, что FF будет синхронизироваться, если на сигнале будет самый малый всплеск. Это также означает, что если ваш сигнал не «чистый», некоторые FF могут срабатывать, а некоторые - нет.
Инструменту синхронизации нужно будет знать период и время максимума / минимума и попытаться заставить время настройки и задержки работать против всех других часов. Это может вызвать серьезные проблемы и / или дополнительную логику в дизайне. Если сигнал полностью асинхронен по отношению к другим часам, вы можете иметь метастабильность и, возможно, потребуется добавить синхронизаторы после синхронизированных регистров.
Итак, все сводится к следующему: настоятельно рекомендуется использовать только «реальные» тактовые сигналы для конструкций X'event and X= 1
или rising_edge.(X)
.
В то же время в цифровом дизайне существует одно правило, которое гласит: все правила не действуют, если нет другого решения.
В индустрии ASIC, откуда я родом, вам пришлось поговорить с некоторыми старшими дизайнерами, прежде чем вы нарушили основные правила. Затем вы должны были добавить несколько больших подчеркнутых комментариев вокруг кода, в котором говорилось «Да, это нарушает правило, но другого пути не было, потому что у нас было то и это, и это, и это было рассмотрено и подписано X и Y» И да, я однажды использовал защелку в дизайне.