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

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> И снова про метастабильность, Почему 2 триггер "защищает" от метастабильности.
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 Текстовая версия Сейчас: 18th July 2025 - 17:54
Рейтинг@Mail.ru


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