Перейти к содержанию
    

переход из одного клокового домайна в друго

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

Обсуждали недавно в Вашей же теме :biggrin:https://electronix.ru/forum/index.php?showt...p;#entry1472599

Для частоты 500МГц сбой для двух триггеров раз в 10^7 лет

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Обсуждали недавно в Вашей же теме :biggrin:https://electronix.ru/forum/index.php?showt...p;#entry1472599

Для частоты 500МГц сбой для двух триггеров раз в 10^7 лет

Именно ! Вот только как отследить возникновение метастабильности в схеме ? К примеру проект проходит по временным ограничениям. Моделирование показывает всё нормально. А периодически проект "ломается". Тут либо у меня где-то возникает метастабильность. Но скорее всего я не все возможные условия протестировал....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Именно ! Вот только как отследить возникновение метастабильности в схеме ? К примеру проект проходит по временным ограничениям. Моделирование показывает всё нормально. А периодически проект "ломается". Тут либо у меня где-то возникает метастабильность. Но скорее всего я не все возможные условия протестировал....

Моделируйте нетлист с задержками. Триггера пересинхронизации периодически будут сыпать в лог ошибками нарушения setup/hold. Потом начните чистить лог - убирайте известные Вам триггера пересинхронизации. В логе останутся триггеры с нарушениями CDC, которые Вы забыли или пропустили.

Либо, есть специальные тулы для анализа CDC - они помогают автоматически выявить все триггеры пересинхронизации в проекте. Я с ними не работал, называются вроде бы Spyglass и Comformal CDC.

В остальном могу только посоветовать увеличивать покрытие проекта тестами, пока не найдете ошибку.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так, ушли в сторону, обсуждать стандартные рекомендации, там и так всё понятно. Для новичком прикрепляю то, что уже было ранее на форуме.

 

Вопрос был не в том, нужно ли 2, нужно, во всех рекомендациях так указывается, и объясняется почему, в этом случае вероятность ошибка крайне мала, в отличии от случая, когда один стоит. Иногда и 3 могут рекомендоваться, но тут нужно технологию чипа знать, что бы посчитать вероятность, оправдано ли 3. Причем во всех рекомендациях указано, что два регистра ставятся без логики между ними, тоже в принципе понятно - меньше вносим новых задержек, меньше вероятность повлиять на второй триггер, в худшую сторону.

 

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

Не правильнее ли ставить два триггера и уже со второго что-то считать, как сделано в сообщении #13 (я у себя примерно так-же делаю).

Да, так лишний может быть так (в среднем пол такта), но зато голова не болит, всё ли правильно работает.

 

Или я что-то не понимаю...

async_signals.pdf

an042.pdf

design_rules_for_stable.pdf

CummingsSNUG2001SJ_AsyncClk_rev1_1.pdf

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Имеете ввиду что все же вероятность провала остается и чем чаще мы ее испытываем тем больше шансов все же ее поймать?

Разумеется, это азы теории вероятностей.

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

Изменено пользователем x736C

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Разумеется, это азы теории вероятностей.

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

То есть именно это вы имели ввиду по серийностью, понятно...

 

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

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

Второй триггер остается единственным потребителем сигнала первого(пусть и измененного), это его основная функция, так что схема вполне корректна. Я поставил бы 3 триггера в этой ситуации, просто чтобы вопросов небыло%).

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Второй триггер остается единственным потребителем сигнала первого(пусть и измененного), это его основная функция, так что схема вполне корректна. Я поставил бы 3 триггера в этой ситуации, просто чтобы вопросов небыло%).

 

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

Понятно, как-то повлияет, но для количественной оценки нужно знать константы микросхемы и задержки, из которых по формулам, аналогичным app Altera, что прикрепил, оценивать как влияет. Причем это влияние сильно не линейно, в app показано, что доли наны очень сильно влияют на время сбоя, на несколько порядков.

Но вопрос - стоит ли так делать в общем случае, остался открыт.

Не в проекте лишний триггер и так погоды не делают - оставил два на входе.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

я триггеры не экономлю и делаю в общем случае так.

 

2 на входе - пересинхронизация,

если нужна логика выделения фронта - это уже следующий этап пути данных и еще один триггер.

 

Логически разделяю прием и выделение фронта. Так и в поддержке потом меньше вопросов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Ничего хлопотного, прямо в коде синхронизатора вставить ограничение ASYNC_REG.

Для VHDL это будет:

    
attribute ASYNC_REG : string;
attribute ASYNC_REG of data_pipe: signal is "TRUE";

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...