Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: И снова про метастабильность
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Страницы: 1, 2
Flip-fl0p
Помогите разобраться с метастабильным состоянием. Я прочитал кучу статей, но так и не понял главного. Почему второй триггер позволяет уменьшить вероятность возникновения метастабильности ?
Допустим у нас нарушены параметры времени установки или удержания сигнала данных для триггера и он переходит в так называемое метастабильное состояние.
Далее до прихода второго синхросигнала у нас возможны 3 варианта развития событий.
1 вариант. У нас триггер так и остался в метастабильном состоянии и эта неопределенность на выходе передается на второй триггер. Что будет на выходе второго триггера зависит лишь от параметров его транзисторов. Триггер прочитает это состояние как 0, или как 1. Либо так-же перейдет в метастабильное состояние
2 вариант. Триггер побыл в метастабильном состоянии и до прихода второго синхроимпульса решил переключится в состояние 1. С приходом второго синхросигнала значение выхода первого триггера передалось на второй триггер. И все работает как положено.
3 вариант. Триггер решил переключитсья в состояние нуля. В этом случае с приходом второго синхроимпульса триггер передал ноль в следующий регистр. И этот ноль является ошибкой.
Вот читаю я статьи про метастабильность и никак не могу понять, что же делает такого особенного второй триггер, что на его выходе получается правильный сигнал ? Может я что-то не понимаю ?
_Anatoliy
Цитата(Flip-fl0p @ Aug 18 2016, 11:52) *


А здесь смотрели? Обратите внимание на ответы SM и Oldring
мета
Flip-fl0p
Цитата(Flip-fl0p @ Aug 18 2016, 11:52) *
А здесь смотрели? Обратите внимание на ответы SM и Oldring

Читал. Внимательно и долго. Но на свой вопрос я ответ не нашел.
Как я понял основная задача второго триггера обеспечить время равное 1 периоду частоты для того чтобы первый триггер успел "разобраться" со своей метастабильностью, и к моменту начала второго периода синхросигнала он был в устойчивом состоянии. Но вот я не могу понять одного. Ведь триггер из метастабильного состояния может переключиться не только в единицу, так-же он может переключиться в ноль. По аналогии как везде рисуют мяч на горе. Он может как в одну сторону скатиться, так и в другую. И мы вторым триггером лишь даем время упасть мячу. Но никак на процесс падения не влияем. И даже поставив 2 триггер мы не можем быть уверенны в достоверности данных.
Или я что-то путаю ?
Кнкн
Цитата(Flip-fl0p @ Aug 18 2016, 14:28) *
Читал. Внимательно и долго. Но на свой вопрос я ответ не нашел.
Как я понял основная задача второго триггера обеспечить время равное 1 периоду частоты для того чтобы первый триггер успел "разобраться" со своей метастабильностью, и к моменту начала второго периода синхросигнала он был в устойчивом состоянии. Но вот я не могу понять одного. Ведь триггер из метастабильного состояния может переключиться не только в единицу, так-же он может переключиться в ноль. По аналогии как везде рисуют мяч на горе. Он может как в одну сторону скатиться, так и в другую. И мы вторым триггером лишь даем время упасть мячу. Но никак на процесс падения не влияем. И даже поставив 2 триггер мы не можем быть уверенны в достоверности данных.
Или я что-то путаю ?


Достигается только однозначность работы схем, зависящих от ресинхронизированного сигнала.
BackEnd
Данное схемное решение снижает вероятность нежелательного события. "Вероятность" - ключевое слово.
Flip-fl0p
Цитата(BackEnd @ Aug 18 2016, 14:57) *
Данное схемное решение снижает вероятность нежелательного события. "Вероятность" - ключевое слово.

То есть самое правильное решение - это задавать констрейны таким образом чтобы времена установки и удержания триггеров были в соответствии с рекомендациями производителя чипа ? Ну и периодически добавлять триггеры в "узких местах" ?
BackEnd
Именно. Чудес не бывает.
Dima_G
Цитата(Flip-fl0p @ Aug 18 2016, 15:52) *
1 вариант. У нас триггер так и остался в метастабильном состоянии и эта неопределенность на выходе передается на второй триггер. Что будет на выходе второго триггера зависит лишь от параметров его транзисторов. Триггер прочитает это состояние как 0, или как 1. Либо так-же перейдет в метастабильное состояние

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

Цитата(Flip-fl0p @ Aug 18 2016, 15:52) *
3 вариант. Триггер решил переключитсья в состояние нуля. В этом случае с приходом второго синхроимпульса триггер передал ноль в следующий регистр. И этот ноль является ошибкой.

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

(*) тут не совсем корректен термин "ошибочное вычитывание". Скажем так, в случае метастабильности первого триггера, значение просто считается с задержкой в такт
Flip-fl0p
Цитата(Dima_G @ Aug 18 2016, 15:05) *
Не вариант. Триггер рано или поздно выпадет из метастабильного состояния. Если это время меньше периода тактовой - хватит двух триггеров в цепочке.
Если больше - ставят три.


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

(*) тут не совсем корректен термин "ошибочное вычитывание". Скажем так, в случае метастабильности первого триггера, значение просто считается с задержкой в такт

Не понял... Если триггер в метастабильном состоянии и если в это время считать с него данные то мы же считаем случайное значение....
ViKo
Цитата(Flip-fl0p @ Aug 18 2016, 15:10) *
Не понял... Если триггер в метастабильном состоянии и если в это время считать с него данные то мы же считаем случайное значение....

Случайное, но конкретное. Мала вероятность, что состояние на входе второго триггера загонит его в метастабильное состояние. Здесь получается произведение малых вероятностей.
Flip-fl0p
Цитата(ViKo @ Aug 18 2016, 15:15) *
Случайное, но конкретное. Мала вероятность, что состояние на входе второго триггера загонит его в метастабильное состояние. Здесь получается произведение малых вероятностей.

Полностью согласен, что вероятность того, что второй триггер "свалиться" в метастабильное состояние - это очень и очень маленькая вероятность.
Но каким-же образом тогда нам поможет это знание ? Ведь после прихода второй частоты - мы считали значение. Но мы не знаем какое оно истине или ложное..... И хоть 10 триггеров поставить можно подряд. Если второй триггер словил чушь, то и все остальные будут принимать эту чушь, как эстафетную палочку.
Dima_G
Цитата(Flip-fl0p @ Aug 18 2016, 19:25) *
Если второй триггер словил чушь, то и все остальные будут принимать эту чушь, как эстафетную палочку.

Еще раз - синхронизаторы предназначены лишь для недопущения на вход схемы неопределенного значения.
Вот пример - заводите извне сигнал enable в схему и нарываемся на метастабильность (те внешний сигнал меняется рядом с тактовой частотой вашей схемы из 0 в 1).
И тут получается, что часть триггеров вашей FPGA решила, что enable == 1, другая, что enable == 0.
Логика работы схемы гарантированно разрушится!

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

В случае синхронизаторов, вы лишь ЧУТЬ ПОЗЖЕ (на такт) получите сигнал enable, если первый синзхронизатор ошибочно "свалится" в ноль.
Обычно это не страшно при корректном выборе соотношений внутренних и внешних частот.

Кажется понял. Например мы где-то из вне жамкаем кнопку, которая всю схему сбрасывает.
При нажатии кнопки у нас триггер вошел в метастабильное состояние. Второй триггер считал с него данные и выдал гарантированно ноль или единицу.
Таким образом существует вероятность, что мы кнопку нажали, а схема не сбросилась ?
Dima_G
Цитата(Flip-fl0p @ Aug 18 2016, 19:49) *
Таким образом существует вероятность, что мы кнопку нажали, а схема не сбросилась ?

Если время нажатия кнопки примерно равно (или меньше) тактовой триггеров синхронизатора.
Почему я и написал ранее - "при корректном выборе частот". Сделайте тактовую в 10 раз выше, чем частота внешнего сигнала - и все будет отлично работать.

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

На следующем такте получим 1, если не получили на текущем (а получили 0, хотя на входе сигнал изменяется из 0 в 1).
yes
что-то не так в этой теме sm.gif

там где можно применить констрейны, там никакой метастабильности не возникает (не должно в результате следования процессу разработки)

возможное место метастабильности - асинхронные сигналы, то есть такие сигналы момент изменения которого не известен на этапе проектирования

там ставится синхронизатор - два или больше последовательных триггера

почему это помогает - существует время выхода триггера из метастабильности, как правило в современных ПЛИС и АЗИКах оно очень короткое (и тема метастабильности и применения больше чем 2х последовательных триггеров не имеет сейчас практического смысла) и к моменту следующего тактового сигнала и защелкивания следующим триггером этот выход имеет определенное значение
а вот если бы за первым триггером была комбинаторная логика, а не триггер, то эта задержка на выход из метастабильности добавилась бы к пути и в следующих стадиях защелкивалась бы ошибка (хотя формально констрейн на эту логику, input_delay (upd : вернее clock, так как между триггерами дизайна) был бы удовлетворен синтезом)

также окно входного сигнала триггера, которое защелкнется метастабильно гораздо уже, чем значение выхода в метастабильном состоянии - это применялось, когда строили цепочки из более чем 2х триггеров
обычно асинхронный сигнал в виде импульса не ловят, это фронт, поэтому не важно, как разрешится метастабильность в 0 или 1 в этой цепочке - это просто приводит к задержке на 1 такт такта получателя, что приемлемо для асинхронного приемника

-----------

на пальцах как-то так - если порыться в книжках или в сети, то можно найти и формулы
Flip-fl0p
Цитата(yes @ Aug 18 2016, 16:14) *
что-то не так в этой теме sm.gif

там где можно применить констрейны, там никакой метастабильности не возникает (не должно в результате следования процессу разработки)

возможное место метастабильности - асинхронные сигналы, то есть такие сигналы момент изменения которого не известен на этапе проектирования

там ставится синхронизатор - два или больше последовательных триггера

почему это помогает - существует время выхода триггера из метастабильности, как правило в современных ПЛИС и АЗИКах оно очень короткое (и тема метастабильности и применения больше чем 2х последовательных триггеров не имеет сейчас практического смысла) и к моменту следующего тактового сигнала и защелкивания следующим триггером этот выход имеет определенное значение
а вот если бы за первым триггером была комбинаторная логика, а не триггер, то эта задержка на выход из метастабильности добавилась бы к пути и в следующих стадиях защелкивалась бы ошибка (хотя формально констрейн на эту логику, input_delay (upd : вернее clock, так как между триггерами дизайна) был бы удовлетворен синтезом)

также окно входного сигнала триггера, которое защелкнется метастабильно гораздо уже, чем значение выхода в метастабильном состоянии - это применялось, когда строили цепочки из более чем 2х триггеров
обычно асинхронный сигнал в виде импульса не ловят, это фронт, поэтому не важно, как разрешится метастабильность в 0 или 1 в этой цепочке - это просто приводит к задержке на 1 такт такта получателя, что приемлемо для асинхронного приемника

-----------


на пальцах как-то так - если порыться в книжках или в сети, то можно найти и формулы


Я пока только учусь, и вопросы у меня глупые smile3046.gif
К чему я вообще эту тему создал. Я на просторах интернета как-то обнаружил тему про метастсбильность триггеров, прочитал, ничего не понял, но оставил пометку "РАЗОБРАТЬСЯ".
Поигравшись с семисегментными индикаторами, реализовав на макетной плате всякие динамические индикации, часы, и прочую лабуду решил перейти к более серьезным вещам. Решил разобраться с протоколом UARТ, и всё что с ним связано. Сам протокол простой. А вот его регистровая модель - тихий ужас. Скачал на сайте проекта OpenCore готовую реализацию микросхемы UART приемопередатчика принялся его разбирать по винтикам. И обнаружил там такую штуку
Код
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;

ENTITY GH_EDGE_DET IS
    PORT
    (
        CLK : IN  STD_LOGIC;
        RST : IN  STD_LOGIC;
        D   : IN  STD_LOGIC;
        RE  : OUT STD_LOGIC; -- RISING EDGE (NEED SYNC SOURCE AT D)
        FE  : OUT STD_LOGIC; -- FALLING EDGE (NEED SYNC SOURCE AT D)
        SRE : OUT STD_LOGIC; -- SYNC'D RISING EDGE
        SFE : OUT STD_LOGIC  -- SYNC'D FALLING EDGE
    );
END GH_EDGE_DET;


ARCHITECTURE A OF GH_EDGE_DET IS
    SIGNAL Q0 : STD_LOGIC;
    SIGNAL Q1 : STD_LOGIC;  
BEGIN    
    PROCESS
    (
        CLK,
        RST
    )
    BEGIN
        IF (RST = '1') THEN        
            Q0 <= '0';                  
            Q1 <= '0';
        ELSIF (RISING_EDGE(CLK)) THEN
            Q0 <= D;                
            Q1 <= Q0;            
        END IF;
    END PROCESS;
RE  <= D AND (NOT Q0);              
FE  <= (NOT D) AND Q0;
SRE <= Q0 AND (NOT Q1);
SFE <= (NOT Q0) AND Q1;
END A;


И очень часто там применяется выражение типа DATA <= SRE OR SFE

Код
DATA_SEND_READY : GH_EDGE_DET
    PORT MAP
    (
        CLK => CLK,
        RST => RST,
        D   => DSRN,
        SRE => DSRN_RE,
        SFE => DSRN_FE
    );    
IDDSR <= DSRN_RE OR DSRN_FE;


Я заинтересовался этим, поскольку с "наскока" понять смысл данной операции невозможно.
Поковыряв этот модуль (GH_EDGE_DET) я обнаружил что его RTL описание, отображенное в виде схемы, очень похоже на то, что и в статьях про метастабильность триггера: так-же 2 D-триггера, идущих подряд. И решил разобраться в этой теме. Поскольку мне показалось, что автор приемопередатчика как раз и написал этот модуль, чтобы избавляться от метастабильности.
Я правильно понял задумку ?
iosifk
Цитата(Flip-fl0p @ Aug 18 2016, 16:32) *
Я пока только учусь, и вопросы у меня глупые smile3046.gif
К чему я вообще эту тему создал. Я на просторах интернета как-то обнаружил тему про метастсбильность триггеров, прочитал, ничего не понял, но оставил пометку "РАЗОБРАТЬСЯ".


Я заинтересовался этим, поскольку с "наскока" понять смысл данной операции невозможно.
Поковыряв этот модуль (GH_EDGE_DET) я обнаружил что его RTL описание, отображенное в виде схемы, очень похоже на то, что и в статьях про метастабильность триггера: так-же 2 D-триггера, идущих подряд. И решил разобраться в этой теме. Поскольку мне показалось, что автор приемопередатчика как раз и написал этот модуль, чтобы избавляться от метастабильности.
Я правильно понял задумку ?


Лучше бы Вы взяли примеры Ксайлинкса, которые ставятся вместе с ИСЕ. На самом деле, если говорить о приемной части UARТ, то там надо данные и сброс привести к системной частоте проекта. А само ядро UARТ делается либо на FSM, либо берутся 2 сдвиговых регистра по 11 бит. В одном принимаются биты, другой заполняется 1 и когда 1 появится в крайнем разряде, то значит все биты приняты... И никакие фокусы типа:
RE <= D AND (NOT Q0);
FE <= (NOT D) AND Q0;
SRE <= Q0 AND (NOT Q1);
SFE <= (NOT Q0) AND Q1;
не применяйте вообще никогда...
ViKo
Там, по-моему, просто находится фронт или срез сигнала. Был 1, стал 0 - ага, срез...
Flip-fl0p
Цитата(iosifk @ Aug 18 2016, 16:49) *
Лучше бы Вы взяли примеры Ксайлинкса, которые ставятся вместе с ИСЕ. На самом деле, если говорить о приемной части UARТ, то там надо данные и сброс привести к системной частоте проекта. А само ядро UARТ делается либо на FSM, либо берутся 2 сдвиговых регистра по 11 бит. В одном принимаются биты, другой заполняется 1 и когда 1 появится в крайнем разряде, то значит все биты приняты... И никакие фокусы типа:
RE <= D AND (NOT Q0);
FE <= (NOT D) AND Q0;
SRE <= Q0 AND (NOT Q1);
SFE <= (NOT Q0) AND Q1;
не применяйте вообще никогда...

А что там некрасиво ?
Просто это готовый проект где реализована регистровая модель. Вот мне и интересно с ней разобраться. Увы готовых решений акромя этого я не нашел.

Цитата(ViKo @ Aug 18 2016, 16:55) *
Там, по-моему, просто находится фронт или срез сигнала. Был 1, стал 0 - ага, срез...

Да не как-то он хитрее работает.
Вот времянки:
Flip-fl0p
Сам приёмопердатчик UART достаточно простой. Но вот его регистровая модель достаточно сложная https://www.lammertbies.nl/comm/info/serial-uart.html
_Anatoliy
Цитата(Flip-fl0p @ Aug 18 2016, 17:03) *
Увы готовых решений акромя этого я не нашел.

Вот вам ещё для анализа решение от Альтеры. rolleyes.gif
iosifk
Цитата(Flip-fl0p @ Aug 18 2016, 17:03) *
А что там некрасиво ?


http://surf-vhdl.com/how-to-design-a-good-edge-detector/
Но я бы поставил простой автомат...
Maverick
от Xilinx
Flip-fl0p
Спасибо за готовые решения. Поковыряю их на выходных.
Вот только мне бы с регистровой моделью. Там -же как минимум должно быть 12 регистров куда запиываются все настройки прерываний, частота передачи, количество бит, и пр. Во всех вариантах этого нет. Там жестко заданы все эти вещи, без возможности их менять. А хотелось бы полноценный UART реализовать. Т.е по сути сделать копию микросхемы 16С550.
iosifk
Цитата(Flip-fl0p @ Aug 19 2016, 11:28) *
Спасибо за готовые решения. Поковыряю их на выходных.
Вот только мне бы с регистровой моделью. Там -же как минимум должно быть 12 регистров куда запиываются все настройки прерываний, частота передачи, количество бит, и пр. Во всех вариантах этого нет. Там жестко заданы все эти вещи, без возможности их менять. А хотелось бы полноценный UART реализовать. Т.е по сути сделать копию микросхемы 16С550.

Смотрите на opencores.org, там этого добра полно. Только в жизни практически никогда нет смысла в изменении режимов работы "на ходу"... Только бесполезный перевод ресурса...
Maverick
Цитата(Flip-fl0p @ Aug 19 2016, 11:28) *
Спасибо за готовые решения. Поковыряю их на выходных.
Вот только мне бы с регистровой моделью. Там -же как минимум должно быть 12 регистров куда запиываются все настройки прерываний, частота передачи, количество бит, и пр. Во всех вариантах этого нет. Там жестко заданы все эти вещи, без возможности их менять. А хотелось бы полноценный UART реализовать. Т.е по сути сделать копию микросхемы 16С550.

вроде то что Вам надо
Flip-fl0p
Цитата(Maverick @ Aug 19 2016, 11:57) *
вроде то что Вам надо

Спасибо. На выходных если буду трезвым начну разбирать до винтика.... smile3046.gif
justontime
Наверное, спрошу глупость, но, тем не менее, метастабильность может возникнуть только в триггере ?

А если, условно говоря, на один из входов логического "И" придет единица практически в тот же момент, когда со второго входа она исчезнет, не может получиться, что этот элемент перейдет в метастабильное состояние ?
iosifk
Цитата(justontime @ Nov 16 2016, 23:42) *
А если, условно говоря, на один из входов логического "И" придет единица практически в тот же момент, когда со второго входа она исчезнет, не может получиться, что этот элемент перейдет в метастабильное состояние ?

Это называется гонка сигналов. И чтобы от нее уйти применяется стробирование задержанным импульсом. Ну например, селектор адреса на параллельной шине всегда будет некоторое время "трясти". Поэтому сигнал WR подают с задержкой, которая гарантирует установление сигнала выбора адреса...
justontime
С гонкой понятно, меня интересовало, может ли не-триггер зависнуть в непонятном состоянии ?

iosifk
Цитата(justontime @ Nov 16 2016, 23:56) *
С гонкой понятно, меня интересовало, может ли не-триггер зависнуть в непонятном состоянии ?

"не-триггер" после дребезга на фронтах всегда перейдет в устойчивое состояние, определяемое входными сигналами... С чего это он должен "зависнуть"? Он же не имеет внутри себя положительной обратной связи...
dvladim
Цитата(justontime @ Nov 16 2016, 23:42) *
Наверное, спрошу глупость, но, тем не менее, метастабильность может возникнуть только в триггере ?

Метастабильность может возникнуть в элементе, который хранит состояние (т.е. с положительной обратной связью). У логического И обратной связи нет.
rudy_b
В логическом элементе подобное тоже может быть если сигнал вблизи порога срабатывания. А если от с триггером Шмидта, то вот вам и положительная обратная связь.
Arranje
Хочу добавить свои 5 копеек по теме вопроса.

Топикстартер спрашивал почему 2-й триггер "защищает" от метастабильности. Я хочу пояснить суть слова "защищает".
Как вы знаете, есть 2 стабильных состояния 0 и 1, но из-за некорректных таймингов триггер может попадать в метастабильное состояние "0.5". Я назвал его "0.5" потому что с точки зрения напряжения это "среднее" значение между напряжениями 0 и 1. При напряжении "0.5" все транзисторы, на которое это напряжение поступает, будут полуоткрыты, что повлечёт за собой жуткое потребление тока и сильный нагрев микросхемы (микросхема гипотетически может повредиться, если комбинационная логика (а значит кол-во полуоткрытых транзисторов) после метастабильного триггера большая).

Так вот второй триггер не даёт напряжению "0.5" поступать на комбинационную логику, защищая микросхему от опасного состояния.
Flip-fl0p
Цитата(Arranje @ Nov 25 2016, 02:59) *
Хочу добавить свои 5 копеек по теме вопроса.

Топикстартер спрашивал почему 2-й триггер "защищает" от метастабильности. Я хочу пояснить суть слова "защищает".
Как вы знаете, есть 2 стабильных состояния 0 и 1, но из-за некорректных таймингов триггер может попадать в метастабильное состояние "0.5". Я назвал его "0.5" потому что с точки зрения напряжения это "среднее" значение между напряжениями 0 и 1. При напряжении "0.5" все транзисторы, на которое это напряжение поступает, будут полуоткрыты, что повлечёт за собой жуткое потребление тока и сильный нагрев микросхемы (микросхема гипотетически может повредиться, если комбинационная логика (а значит кол-во полуоткрытых транзисторов) после метастабильного триггера большая).

Так вот второй триггер не даёт напряжению "0.5" поступать на комбинационную логику, защищая микросхему от опасного состояния.

Спасибо !
Я долго врубался в смысл второго триггера и понял наконец в чём смысл его. И правильно я понимаю, что если период входного асинхронного сигнала меньше чем период синхрочастоты, то есть вероятность что этот сигнал после выхода триггера из метастабильного состояния так и не попадет на выход (по аналогии с мячиком, мячик скатиться в область нуля..)
Shivers
Цитата(justontime @ Nov 16 2016, 23:42) *
Наверное, спрошу глупость, но, тем не менее, метастабильность может возникнуть только в триггере ?


Метастабильность бывает только у триггеров (бистабильных элементов). При этом, все равно какой триггер - Шмитдта, на элементах И, ИЛИ, либо сделанный на проходных ключах и двунаправленных буферах. Абсолютно любой триггер может попасть в метастабильное состояние, это доказано с помощью математики в Theory of metastable Operations.

Условие для возникновения метастабильного состояния - энергии переключающего импульса(ов) недостаточно, чтобы полностью переключить триггер, но и обратно в стабильное состояние триггер вернуться уже не может, и как бы подвисает в некоем устойчивом состоянии между логическим нулем и единицей. Время выхода из метастабильного состояния определяется распределением по Пуассону и может теоретически достигать бесконечности. На практике всегда присутствуют тепловые токи, которые выводят триггер из метастабильного состояния.

Можно рассчитать вероятность попадания триггера в метастабильное состояние. К примеру, такой расчет проводят для CDC - Clock Domains Crossing. Двух триггеров достаточно, чтобы метастабильность возникала раз в несколько лет, трех триггеров - раз в несколько миллионов лет. Но всегда остается шанс, что даже три триггера не защитят от метастабильности на выходе.

Цитата(Arranje @ Nov 25 2016, 02:59) *
При напряжении "0.5" все транзисторы, на которое это напряжение поступает, будут полуоткрыты, что повлечёт за собой жуткое потребление тока и сильный нагрев микросхемы (микросхема гипотетически может повредиться,


Сопротивление открытых КМОП каналов очень велико и токи низкие, поэтому никакого жуткого потребления и нагрева нет.
Метастабильность плоха только неправильной интерпретацией схемы логического уровня - к примеру вместо 0 схема отработала 1, это считается сбоем.
Arranje
Цитата(Flip-fl0p @ Nov 25 2016, 07:45) *
Спасибо !
Я долго врубался в смысл второго триггера и понял наконец в чём смысл его. И правильно я понимаю, что если период входного асинхронного сигнала меньше чем период синхрочастоты, то есть вероятность что этот сигнал после выхода триггера из метастабильного состояния так и не попадет на выход (по аналогии с мячиком, мячик скатиться в область нуля..)

ДА, при метастабильности значение выхода будет "случайным". И выход триггера может потерять информацию о входе (если держать входной сигнал меньше 1-го такта). Добавлю только, что это справедливо и для обратного случай (вход триггера переключился из 1 в 0, а выход так и остался 1).

Цитата(Shivers @ Nov 25 2016, 09:20) *
Сопротивление открытых КМОП каналов очень велико и токи низкие, поэтому никакого жуткого потребления и нагрева нет.

У открытых каналов сопротивление очень маленькое, у закрытых - очень большое. У полуоткрытых, когда вместо логической '1', например, величиной в 2.5В подают 1.25В, сопротивление транзисторов на стоке и истоке относительно небольшое, в результате имеем большой ток от питания к земле. Как известно, кМОП логика потребляет при переключении, а если состояние переключение "зависло" (из-за метастабильности), то микросхема начнёт потреблять, оснобенно при развесистой комбинационной логике после триггера.

Некорректные значения - это тоже проблема.
Shivers
Цитата(Arranje @ Nov 25 2016, 11:58) *
У открытых каналов сопротивление очень маленькое, у закрытых - очень большое.

Я моделировал эти режимы на спайсе для 65нм, в т.ч. и токи "КЗ", когда у инвертора открыты оба транзистора. Сопротивление между шинами в этот момент - килоОмы, так о "КЗ" речь вообще не идет! Не будет ни нагрева, ни повышенной электромиграции, ничего. Просто, течет чуть повышенный ток.


Цитата(Arranje @ Nov 25 2016, 11:58) *
Как известно, кМОП логика потребляет при переключении, а если состояние переключение "зависло" (из-за метастабильности), то микросхема начнёт потреблять, оснобенно при развесистой комбинационной логике после триггера.

Кому известно, где это написано? Если схема состоит из одного транзистора и десяти логических элементов, то ток вырастет заметно. А если в схеме транзисторов - миллионы, и один попал в метастабильность, то разницу в потреблении ни один прибор не увидит.
Метастабильность конечно распространяется в логике, но через 3-5 вентилей уровень сигнала достигает нижнего или верхнего порога, и дальше уже идет нормальный сигнал.
ViKo
Цитата(Shivers @ Nov 27 2016, 18:31) *
Я моделировал эти режимы на спайсе для 65нм

Не выдадите ли спайс-модели КМОП выходов, которые использовали?
Shivers
Цитата(ViKo @ Nov 27 2016, 20:42) *
Не выдадите ли спайс-модели КМОП выходов, которые использовали?

Я не очень понял вопроса про модели выходов. Имеются ввиду какие то эквивалентные схемы замещения моделей транзисторов?
Я использовал модели транзисторов TSMC 65нм (BSIM4), и элементы из этой же библиотеки: логику, триггеры. Все это NDA, публиковать не могу. Для обычного D-триггера пробовал вычислять постоянную времени и окно метастабильности. По моим расчетам, на частотах около гигагерца (CDC) метастабильность должна возникать на выходе триггера раз в несколько секунд. Если брать килогерцы, то - раз в миллионы лет. Расчеты делал для себя, они очень грубые; и я не готов их публиковать.
ViKo
Имел в виду логические выходы целиком. Не обязательно ПЛИС, но и стандартной логики. Ну, нет, так нет.
Shivers
Компрехенсив гайд по метастабильности: https://habrahabr.ru/post/317514/
sonycman
Так это что получается, полностью от метастабильности избавиться нельзя, и сбои будут в любом случае?
И все эти clock crossing bridge не дают 100% гарантии корректности передаваемых данных?
dima32rus
Цитата(sonycman @ Dec 13 2016, 22:18) *
Так это что получается, полностью от метастабильности избавиться нельзя, и сбои будут в любом случае?
И все эти clock crossing bridge не дают 100% гарантии корректности передаваемых данных?

100% не дают, зато дают 99,9999....%
ViKo
Цитата(Shivers @ Dec 13 2016, 18:57) *
Компрехенсив гайд по метастабильности: https://habrahabr.ru/post/317514/

Автор статьи сам легонько плавает в теме. Особенно умиляет вывод 5. Засунул голову в песок, и нет проблемы.
Shivers
Цитата(ViKo @ Dec 14 2016, 08:33) *
Автор статьи сам легонько плавает в теме. Особенно умиляет вывод 5. Засунул голову в песок, и нет проблемы.

Плавает, конечно. Не плавают те, кто постит в IEEE, а не хабр wink.gif Да и то не факт
По пункту 5 - пост все же о метастабильности, а не STA. Хороший гайд по STA+CDC получится объемом не меньше, а может быть даже больше. Есть желающие написать? Я бы почитал

p.s. Вы просили спайс модели - там в комментах есть ссылки на FreePDK 45
ViKo
Цитата(Shivers @ Dec 14 2016, 09:30) *
p.s. Вы просили спайс модели - там в комментах есть ссылки на FreePDK 45

Да-да, я заметил. Пойду качать.
А вот поставить параллельно два триггера, и объединить выходы. Лучше три. biggrin.gif Тоже вероятность получить неопределенное состояние значительно уменьшится. Особенно, если на вход данных подать сигналы с разными подтяжками. А такт не теряем. ?

Цитата(Shivers @ Dec 14 2016, 09:30) *
Хороший гайд по STA+CDC получится объемом не меньше, а может быть даже больше. Есть желающие написать? Я бы почитал

http://www.alterawiki.com/wiki/Timing_Constraints
http://www.alterawiki.com/wiki/File:TimeQuest_User_Guide.pdf

Или чуть-чуть задержать данные по-разному.
likeasm
Всех с наступившим! Родился у меня вопрос про вероятность появления метастабильного состояния. Что будет надежнее при приеме асинхронного сигнала, цепочка из 2-х Д триггеров работающая на частоте CLK, или цепочка из 3-х или может 4-х biggrin.gif Д триггеров работающая на частоте CLK*2?
des333
Цитата(likeasm @ Jan 5 2017, 19:55) *
Всех с наступившим! Родился у меня вопрос про вероятность появления метастабильного состояния. Что будет надежнее при приеме асинхронного сигнала, цепочка из 2-х Д триггеров работающая на частоте CLK, или цепочка из 3-х или может 4-х biggrin.gif Д триггеров работающая на частоте CLK*2?


Я думаю, что самый простой и надежный способ узнать ответ -- это подставить числа в формулу и посчитать.

Судя по графикам -- на 4-х триггерах будет надежнее.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.