|
|
  |
И снова про метастабильность, Почему 2 триггер "защищает" от метастабильности. |
|
|
|
Aug 18 2016, 13:14
|
Гуру
     
Группа: Свой
Сообщений: 2 198
Регистрация: 23-12-04
Пользователь №: 1 640

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

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

|
Цитата(yes @ Aug 18 2016, 16:14)  что-то не так в этой теме  там где можно применить констрейны, там никакой метастабильности не возникает (не должно в результате следования процессу разработки) возможное место метастабильности - асинхронные сигналы, то есть такие сигналы момент изменения которого не известен на этапе проектирования там ставится синхронизатор - два или больше последовательных триггера почему это помогает - существует время выхода триггера из метастабильности, как правило в современных ПЛИС и АЗИКах оно очень короткое (и тема метастабильности и применения больше чем 2х последовательных триггеров не имеет сейчас практического смысла) и к моменту следующего тактового сигнала и защелкивания следующим триггером этот выход имеет определенное значение а вот если бы за первым триггером была комбинаторная логика, а не триггер, то эта задержка на выход из метастабильности добавилась бы к пути и в следующих стадиях защелкивалась бы ошибка (хотя формально констрейн на эту логику, input_delay (upd : вернее clock, так как между триггерами дизайна) был бы удовлетворен синтезом) также окно входного сигнала триггера, которое защелкнется метастабильно гораздо уже, чем значение выхода в метастабильном состоянии - это применялось, когда строили цепочки из более чем 2х триггеров обычно асинхронный сигнал в виде импульса не ловят, это фронт, поэтому не важно, как разрешится метастабильность в 0 или 1 в этой цепочке - это просто приводит к задержке на 1 такт такта получателя, что приемлемо для асинхронного приемника ----------- на пальцах как-то так - если порыться в книжках или в сети, то можно найти и формулы Я пока только учусь, и вопросы у меня глупые К чему я вообще эту тему создал. Я на просторах интернета как-то обнаружил тему про метастсбильность триггеров, прочитал, ничего не понял, но оставил пометку "РАЗОБРАТЬСЯ". Поигравшись с семисегментными индикаторами, реализовав на макетной плате всякие динамические индикации, часы, и прочую лабуду решил перейти к более серьезным вещам. Решил разобраться с протоколом 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
|
|
|
|
|
Aug 18 2016, 13:49
|
Гуру
     
Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369

|
Цитата(Flip-fl0p @ Aug 18 2016, 16:32)  Я пока только учусь, и вопросы у меня глупые К чему я вообще эту тему создал. Я на просторах интернета как-то обнаружил тему про метастсбильность триггеров, прочитал, ничего не понял, но оставил пометку "РАЗОБРАТЬСЯ". Я заинтересовался этим, поскольку с "наскока" понять смысл данной операции невозможно. Поковыряв этот модуль (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
|
|
|
|
|
Aug 18 2016, 14:03
|

В поисках себя...
   
Группа: Свой
Сообщений: 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 - ага, срез... Да не как-то он хитрее работает. Вот времянки:
|
|
|
|
|
Nov 16 2016, 20:42
|
Местный
  
Группа: Свой
Сообщений: 254
Регистрация: 6-12-14
Из: СПб
Пользователь №: 84 003

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