Flip-fl0p 4 18 августа, 2016 Опубликовано 18 августа, 2016 · Жалоба Помогите разобраться с метастабильным состоянием. Я прочитал кучу статей, но так и не понял главного. Почему второй триггер позволяет уменьшить вероятность возникновения метастабильности ? Допустим у нас нарушены параметры времени установки или удержания сигнала данных для триггера и он переходит в так называемое метастабильное состояние. Далее до прихода второго синхросигнала у нас возможны 3 варианта развития событий. 1 вариант. У нас триггер так и остался в метастабильном состоянии и эта неопределенность на выходе передается на второй триггер. Что будет на выходе второго триггера зависит лишь от параметров его транзисторов. Триггер прочитает это состояние как 0, или как 1. Либо так-же перейдет в метастабильное состояние 2 вариант. Триггер побыл в метастабильном состоянии и до прихода второго синхроимпульса решил переключится в состояние 1. С приходом второго синхросигнала значение выхода первого триггера передалось на второй триггер. И все работает как положено. 3 вариант. Триггер решил переключитсья в состояние нуля. В этом случае с приходом второго синхроимпульса триггер передал ноль в следующий регистр. И этот ноль является ошибкой. Вот читаю я статьи про метастабильность и никак не могу понять, что же делает такого особенного второй триггер, что на его выходе получается правильный сигнал ? Может я что-то не понимаю ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_sda 0 18 августа, 2016 Опубликовано 18 августа, 2016 · Жалоба А здесь смотрели? Обратите внимание на ответы SM и Oldring мета Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 18 августа, 2016 Опубликовано 18 августа, 2016 (изменено) · Жалоба А здесь смотрели? Обратите внимание на ответы SM и Oldring Читал. Внимательно и долго. Но на свой вопрос я ответ не нашел. Как я понял основная задача второго триггера обеспечить время равное 1 периоду частоты для того чтобы первый триггер успел "разобраться" со своей метастабильностью, и к моменту начала второго периода синхросигнала он был в устойчивом состоянии. Но вот я не могу понять одного. Ведь триггер из метастабильного состояния может переключиться не только в единицу, так-же он может переключиться в ноль. По аналогии как везде рисуют мяч на горе. Он может как в одну сторону скатиться, так и в другую. И мы вторым триггером лишь даем время упасть мячу. Но никак на процесс падения не влияем. И даже поставив 2 триггер мы не можем быть уверенны в достоверности данных. Или я что-то путаю ? Изменено 18 августа, 2016 пользователем Flip-fl0p Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Кнкн 5 18 августа, 2016 Опубликовано 18 августа, 2016 · Жалоба Читал. Внимательно и долго. Но на свой вопрос я ответ не нашел. Как я понял основная задача второго триггера обеспечить время равное 1 периоду частоты для того чтобы первый триггер успел "разобраться" со своей метастабильностью, и к моменту начала второго периода синхросигнала он был в устойчивом состоянии. Но вот я не могу понять одного. Ведь триггер из метастабильного состояния может переключиться не только в единицу, так-же он может переключиться в ноль. По аналогии как везде рисуют мяч на горе. Он может как в одну сторону скатиться, так и в другую. И мы вторым триггером лишь даем время упасть мячу. Но никак на процесс падения не влияем. И даже поставив 2 триггер мы не можем быть уверенны в достоверности данных. Или я что-то путаю ? Достигается только однозначность работы схем, зависящих от ресинхронизированного сигнала. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
backend 0 18 августа, 2016 Опубликовано 18 августа, 2016 · Жалоба Данное схемное решение снижает вероятность нежелательного события. "Вероятность" - ключевое слово. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 18 августа, 2016 Опубликовано 18 августа, 2016 · Жалоба Данное схемное решение снижает вероятность нежелательного события. "Вероятность" - ключевое слово. То есть самое правильное решение - это задавать констрейны таким образом чтобы времена установки и удержания триггеров были в соответствии с рекомендациями производителя чипа ? Ну и периодически добавлять триггеры в "узких местах" ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
backend 0 18 августа, 2016 Опубликовано 18 августа, 2016 · Жалоба Именно. Чудес не бывает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DimaG 0 18 августа, 2016 Опубликовано 18 августа, 2016 · Жалоба 1 вариант. У нас триггер так и остался в метастабильном состоянии и эта неопределенность на выходе передается на второй триггер. Что будет на выходе второго триггера зависит лишь от параметров его транзисторов. Триггер прочитает это состояние как 0, или как 1. Либо так-же перейдет в метастабильное состояние Не вариант. Триггер рано или поздно выпадет из метастабильного состояния. Если это время меньше периода тактовой - хватит двух триггеров в цепочке. Если больше - ставят три. 3 вариант. Триггер решил переключитсья в состояние нуля. В этом случае с приходом второго синхроимпульса триггер передал ноль в следующий регистр. И этот ноль является ошибкой. Вы не верно понимаете задачи цепочек синхронизации - они не защищают от "ошибочного вычитывания" (*), они защищают от ошибочного состояния (между нулем и единицей). (*) тут не совсем корректен термин "ошибочное вычитывание". Скажем так, в случае метастабильности первого триггера, значение просто считается с задержкой в такт Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 18 августа, 2016 Опубликовано 18 августа, 2016 · Жалоба Не вариант. Триггер рано или поздно выпадет из метастабильного состояния. Если это время меньше периода тактовой - хватит двух триггеров в цепочке. Если больше - ставят три. Вы не верно понимаете задачи цепочек синхронизации - они не защищают от "ошибочного вычитывания" (*), они защищают от ошибочного состояния (между нулем и единицей). (*) тут не совсем корректен термин "ошибочное вычитывание". Скажем так, в случае метастабильности первого триггера, значение просто считается с задержкой в такт Не понял... Если триггер в метастабильном состоянии и если в это время считать с него данные то мы же считаем случайное значение.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 18 августа, 2016 Опубликовано 18 августа, 2016 · Жалоба Не понял... Если триггер в метастабильном состоянии и если в это время считать с него данные то мы же считаем случайное значение.... Случайное, но конкретное. Мала вероятность, что состояние на входе второго триггера загонит его в метастабильное состояние. Здесь получается произведение малых вероятностей. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 18 августа, 2016 Опубликовано 18 августа, 2016 (изменено) · Жалоба Случайное, но конкретное. Мала вероятность, что состояние на входе второго триггера загонит его в метастабильное состояние. Здесь получается произведение малых вероятностей. Полностью согласен, что вероятность того, что второй триггер "свалиться" в метастабильное состояние - это очень и очень маленькая вероятность. Но каким-же образом тогда нам поможет это знание ? Ведь после прихода второй частоты - мы считали значение. Но мы не знаем какое оно истине или ложное..... И хоть 10 триггеров поставить можно подряд. Если второй триггер словил чушь, то и все остальные будут принимать эту чушь, как эстафетную палочку. Изменено 18 августа, 2016 пользователем Flip-fl0p Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DimaG 0 18 августа, 2016 Опубликовано 18 августа, 2016 · Жалоба Если второй триггер словил чушь, то и все остальные будут принимать эту чушь, как эстафетную палочку. Еще раз - синхронизаторы предназначены лишь для недопущения на вход схемы неопределенного значения. Вот пример - заводите извне сигнал enable в схему и нарываемся на метастабильность (те внешний сигнал меняется рядом с тактовой частотой вашей схемы из 0 в 1). И тут получается, что часть триггеров вашей FPGA решила, что enable == 1, другая, что enable == 0. Логика работы схемы гарантированно разрушится! В случае синхронизаторов, вы лишь ЧУТЬ ПОЗЖЕ (на такт) получите сигнал enable, если первый синзхронизатор ошибочно "свалится" в ноль. Обычно это не страшно при корректном выборе соотношений внутренних и внешних частот. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 18 августа, 2016 Опубликовано 18 августа, 2016 (изменено) · Жалоба Еще раз - синхронизаторы предназначены лишь для недопущения на вход схемы неопределенного значения. Вот пример - заводите извне сигнал enable в схему и нарываемся на метастабильность (те внешний сигнал меняется рядом с тактовой частотой вашей схемы из 0 в 1). И тут получается, что часть триггеров вашей FPGA решила, что enable == 1, другая, что enable == 0. Логика работы схемы гарантированно разрушится! В случае синхронизаторов, вы лишь ЧУТЬ ПОЗЖЕ (на такт) получите сигнал enable, если первый синзхронизатор ошибочно "свалится" в ноль. Обычно это не страшно при корректном выборе соотношений внутренних и внешних частот. Кажется понял. Например мы где-то из вне жамкаем кнопку, которая всю схему сбрасывает. При нажатии кнопки у нас триггер вошел в метастабильное состояние. Второй триггер считал с него данные и выдал гарантированно ноль или единицу. Таким образом существует вероятность, что мы кнопку нажали, а схема не сбросилась ? Изменено 18 августа, 2016 пользователем Flip-fl0p Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DimaG 0 18 августа, 2016 Опубликовано 18 августа, 2016 · Жалоба Таким образом существует вероятность, что мы кнопку нажали, а схема не сбросилась ? Если время нажатия кнопки примерно равно (или меньше) тактовой триггеров синхронизатора. Почему я и написал ранее - "при корректном выборе частот". Сделайте тактовую в 10 раз выше, чем частота внешнего сигнала - и все будет отлично работать. Для случая сравнимых частот применяются другие решения. Например, двухклоковое ФИФО. Вообщем, читайте инфу по CDC - информации море. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 18 августа, 2016 Опубликовано 18 августа, 2016 · Жалоба Полностью согласен, что вероятность того, что второй триггер "свалиться" в метастабильное состояние - это очень и очень маленькая вероятность. Но каким-же образом тогда нам поможет это знание ? Ведь после прихода второй частоты - мы считали значение. Но мы не знаем какое оно истине или ложное..... И хоть 10 триггеров поставить можно подряд. Если второй триггер словил чушь, то и все остальные будут принимать эту чушь, как эстафетную палочку. На следующем такте получим 1, если не получили на текущем (а получили 0, хотя на входе сигнал изменяется из 0 в 1). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться