|
|
  |
И снова про метастабильность, Почему 2 триггер "защищает" от метастабильности. |
|
|
|
Aug 18 2016, 11:28
|

В поисках себя...
   
Группа: Свой
Сообщений: 729
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140

|
Цитата(Flip-fl0p @ Aug 18 2016, 11:52)  А здесь смотрели? Обратите внимание на ответы SM и Oldring Читал. Внимательно и долго. Но на свой вопрос я ответ не нашел. Как я понял основная задача второго триггера обеспечить время равное 1 периоду частоты для того чтобы первый триггер успел "разобраться" со своей метастабильностью, и к моменту начала второго периода синхросигнала он был в устойчивом состоянии. Но вот я не могу понять одного. Ведь триггер из метастабильного состояния может переключиться не только в единицу, так-же он может переключиться в ноль. По аналогии как везде рисуют мяч на горе. Он может как в одну сторону скатиться, так и в другую. И мы вторым триггером лишь даем время упасть мячу. Но никак на процесс падения не влияем. И даже поставив 2 триггер мы не можем быть уверенны в достоверности данных. Или я что-то путаю ?
Сообщение отредактировал Flip-fl0p - Aug 18 2016, 11:28
|
|
|
|
|
Aug 18 2016, 12:05
|
Местный
  
Группа: Свой
Сообщений: 279
Регистрация: 2-07-08
Из: Новосибирск
Пользователь №: 38 699

|
Цитата(Flip-fl0p @ Aug 18 2016, 15:52)  1 вариант. У нас триггер так и остался в метастабильном состоянии и эта неопределенность на выходе передается на второй триггер. Что будет на выходе второго триггера зависит лишь от параметров его транзисторов. Триггер прочитает это состояние как 0, или как 1. Либо так-же перейдет в метастабильное состояние Не вариант. Триггер рано или поздно выпадет из метастабильного состояния. Если это время меньше периода тактовой - хватит двух триггеров в цепочке. Если больше - ставят три. Цитата(Flip-fl0p @ Aug 18 2016, 15:52)  3 вариант. Триггер решил переключитсья в состояние нуля. В этом случае с приходом второго синхроимпульса триггер передал ноль в следующий регистр. И этот ноль является ошибкой. Вы не верно понимаете задачи цепочек синхронизации - они не защищают от "ошибочного вычитывания" (*), они защищают от ошибочного состояния (между нулем и единицей). (*) тут не совсем корректен термин "ошибочное вычитывание". Скажем так, в случае метастабильности первого триггера, значение просто считается с задержкой в такт
|
|
|
|
|
Aug 18 2016, 12:42
|
Местный
  
Группа: Свой
Сообщений: 279
Регистрация: 2-07-08
Из: Новосибирск
Пользователь №: 38 699

|
Цитата(Flip-fl0p @ Aug 18 2016, 19:25)  Если второй триггер словил чушь, то и все остальные будут принимать эту чушь, как эстафетную палочку. Еще раз - синхронизаторы предназначены лишь для недопущения на вход схемы неопределенного значения. Вот пример - заводите извне сигнал enable в схему и нарываемся на метастабильность (те внешний сигнал меняется рядом с тактовой частотой вашей схемы из 0 в 1). И тут получается, что часть триггеров вашей FPGA решила, что enable == 1, другая, что enable == 0. Логика работы схемы гарантированно разрушится! В случае синхронизаторов, вы лишь ЧУТЬ ПОЗЖЕ (на такт) получите сигнал enable, если первый синзхронизатор ошибочно "свалится" в ноль. Обычно это не страшно при корректном выборе соотношений внутренних и внешних частот.
|
|
|
|
|
Aug 18 2016, 12:49
|

В поисках себя...
   
Группа: Свой
Сообщений: 729
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140

|
Цитата(Dima_G @ Aug 18 2016, 15:42)  Еще раз - синхронизаторы предназначены лишь для недопущения на вход схемы неопределенного значения. Вот пример - заводите извне сигнал enable в схему и нарываемся на метастабильность (те внешний сигнал меняется рядом с тактовой частотой вашей схемы из 0 в 1). И тут получается, что часть триггеров вашей FPGA решила, что enable == 1, другая, что enable == 0. Логика работы схемы гарантированно разрушится!
В случае синхронизаторов, вы лишь ЧУТЬ ПОЗЖЕ (на такт) получите сигнал enable, если первый синзхронизатор ошибочно "свалится" в ноль. Обычно это не страшно при корректном выборе соотношений внутренних и внешних частот. Кажется понял. Например мы где-то из вне жамкаем кнопку, которая всю схему сбрасывает. При нажатии кнопки у нас триггер вошел в метастабильное состояние. Второй триггер считал с него данные и выдал гарантированно ноль или единицу. Таким образом существует вероятность, что мы кнопку нажали, а схема не сбросилась ?
Сообщение отредактировал Flip-fl0p - Aug 18 2016, 12:50
|
|
|
|
|
Aug 18 2016, 12:58
|
Местный
  
Группа: Свой
Сообщений: 279
Регистрация: 2-07-08
Из: Новосибирск
Пользователь №: 38 699

|
Цитата(Flip-fl0p @ Aug 18 2016, 19:49)  Таким образом существует вероятность, что мы кнопку нажали, а схема не сбросилась ? Если время нажатия кнопки примерно равно (или меньше) тактовой триггеров синхронизатора. Почему я и написал ранее - "при корректном выборе частот". Сделайте тактовую в 10 раз выше, чем частота внешнего сигнала - и все будет отлично работать. Для случая сравнимых частот применяются другие решения. Например, двухклоковое ФИФО. Вообщем, читайте инфу по CDC - информации море.
|
|
|
|
|
  |
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|
|