реклама на сайте
подробности

 
 
> И снова про метастабильность, Почему 2 триггер "защищает" от метастабильности.
Flip-fl0p
сообщение Aug 18 2016, 08:52
Сообщение #1


В поисках себя...
****

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



Помогите разобраться с метастабильным состоянием. Я прочитал кучу статей, но так и не понял главного. Почему второй триггер позволяет уменьшить вероятность возникновения метастабильности ?
Допустим у нас нарушены параметры времени установки или удержания сигнала данных для триггера и он переходит в так называемое метастабильное состояние.
Далее до прихода второго синхросигнала у нас возможны 3 варианта развития событий.
1 вариант. У нас триггер так и остался в метастабильном состоянии и эта неопределенность на выходе передается на второй триггер. Что будет на выходе второго триггера зависит лишь от параметров его транзисторов. Триггер прочитает это состояние как 0, или как 1. Либо так-же перейдет в метастабильное состояние
2 вариант. Триггер побыл в метастабильном состоянии и до прихода второго синхроимпульса решил переключится в состояние 1. С приходом второго синхросигнала значение выхода первого триггера передалось на второй триггер. И все работает как положено.
3 вариант. Триггер решил переключитсья в состояние нуля. В этом случае с приходом второго синхроимпульса триггер передал ноль в следующий регистр. И этот ноль является ошибкой.
Вот читаю я статьи про метастабильность и никак не могу понять, что же делает такого особенного второй триггер, что на его выходе получается правильный сигнал ? Может я что-то не понимаю ?
Go to the top of the page
 
+Quote Post
4 страниц V  < 1 2 3 4 >  
Start new topic
Ответов (15 - 29)
yes
сообщение Aug 18 2016, 13:14
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 2 198
Регистрация: 23-12-04
Пользователь №: 1 640



что-то не так в этой теме sm.gif

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

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

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

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

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

-----------

на пальцах как-то так - если порыться в книжках или в сети, то можно найти и формулы
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Aug 18 2016, 13:32
Сообщение #17


В поисках себя...
****

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



Цитата(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-триггера, идущих подряд. И решил разобраться в этой теме. Поскольку мне показалось, что автор приемопередатчика как раз и написал этот модуль, чтобы избавляться от метастабильности.
Я правильно понял задумку ?

Сообщение отредактировал Flip-fl0p - Aug 18 2016, 13:34
Go to the top of the page
 
+Quote Post
iosifk
сообщение Aug 18 2016, 13:49
Сообщение #18


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(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;
не применяйте вообще никогда...


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
ViKo
сообщение Aug 18 2016, 13:55
Сообщение #19


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Там, по-моему, просто находится фронт или срез сигнала. Был 1, стал 0 - ага, срез...
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Aug 18 2016, 14:03
Сообщение #20


В поисках себя...
****

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



Цитата(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 - ага, срез...

Да не как-то он хитрее работает.
Вот времянки:
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Aug 19 2016, 04:50
Сообщение #21


В поисках себя...
****

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



Сам приёмопердатчик UART достаточно простой. Но вот его регистровая модель достаточно сложная https://www.lammertbies.nl/comm/info/serial-uart.html
Go to the top of the page
 
+Quote Post
_Anatoliy
сообщение Aug 19 2016, 07:49
Сообщение #22


Утомлённый солнцем
******

Группа: Свой
Сообщений: 2 646
Регистрация: 15-07-06
Из: г.Донецк ДНР
Пользователь №: 18 832



Цитата(Flip-fl0p @ Aug 18 2016, 17:03) *
Увы готовых решений акромя этого я не нашел.

Вот вам ещё для анализа решение от Альтеры. rolleyes.gif
Прикрепленные файлы
Прикрепленный файл  nios2s_uart_0.v ( 33.99 килобайт ) Кол-во скачиваний: 46
 
Go to the top of the page
 
+Quote Post
iosifk
сообщение Aug 19 2016, 07:59
Сообщение #23


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(Flip-fl0p @ Aug 18 2016, 17:03) *
А что там некрасиво ?


http://surf-vhdl.com/how-to-design-a-good-edge-detector/
Но я бы поставил простой автомат...


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
Maverick
сообщение Aug 19 2016, 08:07
Сообщение #24


я только учусь...
******

Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



от Xilinx

Прикрепленные файлы
Прикрепленный файл  UART_Xilinx.rar ( 33.33 килобайт ) Кол-во скачиваний: 23
 


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Aug 19 2016, 08:28
Сообщение #25


В поисках себя...
****

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



Спасибо за готовые решения. Поковыряю их на выходных.
Вот только мне бы с регистровой моделью. Там -же как минимум должно быть 12 регистров куда запиываются все настройки прерываний, частота передачи, количество бит, и пр. Во всех вариантах этого нет. Там жестко заданы все эти вещи, без возможности их менять. А хотелось бы полноценный UART реализовать. Т.е по сути сделать копию микросхемы 16С550.
Go to the top of the page
 
+Quote Post
iosifk
сообщение Aug 19 2016, 08:39
Сообщение #26


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



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

Смотрите на opencores.org, там этого добра полно. Только в жизни практически никогда нет смысла в изменении режимов работы "на ходу"... Только бесполезный перевод ресурса...


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
Maverick
сообщение Aug 19 2016, 08:57
Сообщение #27


я только учусь...
******

Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



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

вроде то что Вам надо
Прикрепленные файлы
Прикрепленный файл  6850_Altera.zip ( 272.54 килобайт ) Кол-во скачиваний: 22
 


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Aug 19 2016, 09:03
Сообщение #28


В поисках себя...
****

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



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

Спасибо. На выходных если буду трезвым начну разбирать до винтика.... smile3046.gif
Go to the top of the page
 
+Quote Post
justontime
сообщение Nov 16 2016, 20:42
Сообщение #29


Местный
***

Группа: Свой
Сообщений: 254
Регистрация: 6-12-14
Из: СПб
Пользователь №: 84 003



Наверное, спрошу глупость, но, тем не менее, метастабильность может возникнуть только в триггере ?

А если, условно говоря, на один из входов логического "И" придет единица практически в тот же момент, когда со второго входа она исчезнет, не может получиться, что этот элемент перейдет в метастабильное состояние ?
Go to the top of the page
 
+Quote Post
iosifk
сообщение Nov 16 2016, 20:49
Сообщение #30


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



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

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


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post

4 страниц V  < 1 2 3 4 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 10:22
Рейтинг@Mail.ru


Страница сгенерированна за 0.01528 секунд с 7
ELECTRONIX ©2004-2016