Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Синхронизатор
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Страницы: 1, 2
Мур
Цитата(Oldring @ Apr 11 2011, 14:32) *
Эта метастабильность выходит через логику на выход этой схемы.

Может я чего не понимаю... Можете сформулировать вариант, когда на один входной импульс на выходе не появиться отклик вообще , или их вдруг появится пара?
Oldring
Цитата(Мур @ Apr 11 2011, 14:36) *
Может я чего не понимаю... Можете сформулировать вариант, когда на один входной импульс на выходе не появиться отклик вообще , или их вдруг появится пара?



А вы не видите сами условие, когда на выходе вашей схемы появится метастабильность, которая может привести к неправильной работе логики в последующих схемах, если не хватит времени на её разрешение? А времени там может не хватить, потому что неизвестно сколько логики подключено к вашей схеме, и каковы задержки в самой этой подключенной логике. Да, можно в принципе попытаться обконстрейнить время распространения сигнала с выхода, если очень хочется, с огромной вероятностью не вписаться в тайминги вблизи максимальной частоты кристалла.
Ethereal
Цитата(Мур @ Apr 11 2011, 14:36) *
Может я чего не понимаю... Можете сформулировать вариант, когда на один входной импульс на выходе не появиться отклик вообще , или их вдруг появится пара?

Когда на фронте f2 попадется переключение входного триггера, защелкивающего инверсное состояние f1.
Мур
Цитата(Oldring @ Apr 11 2011, 14:41) *
А вы не видите сами условие, когда на выходе вашей схемы появится метастабильность, которая может привести к неправильной работе логики в последующих схемах, если не хватит времени на её разрешение? А времени там может не хватить, потому что неизвестно сколько логики подключено к вашей схеме, и каковы задержки в самой этой подключенной логике. Да, можно в принципе попытаться обконстрейнить время распространения сигнала с выхода, если очень хочется, с огромной вероятностью не вписаться в тайминги вблизи максимальной частоты кристалла.

Ну почему же? Даже если возникнет неопределённость при соотношении входного уровня на D-входе и фронта CLK, он уверенно поймается следующим фронтом! Триггер в любом случае в сером уровне не останется (иначе бы это не был триггер!). Мне не важен (ещё раз!) момент. Мне важен факт! Он гарантировано появится! И на выходе будет выдан одноклоковый импульс, но привязанный уже к другой опорной частоте. Что и требуется...
Я постараюсь расширить варианты проблем.. Помогите!
sazh
Цитата(Oldring @ Apr 11 2011, 13:41) *
может привести к неправильной работе логики в последующих схемах


Если метастабильность - неопределенное состояние на выходе триггера, то ведь конкретно для этой схемы
это состояние или будет отработано последующим триггером как переход из например 0 в 1 или нет.
Что на выходе будет давать формирование импульса или в одном такте или в последующем, что для флага не так уж и важно.
Важно что событие на входе будет отработано однозначно. Нет?
Мур
Цитата(sazh @ Apr 11 2011, 14:55) *
Если метастабильность - неопределенное состояние на выходе триггера, то ведь конкретно для этой схемы
это состояние или будет отработано последующим триггером как переход из например 0 в 1 или нет.
Что на выходе будет давать формирование импульса или в одном такте или в последующем, что для флага не так уж и важно.
Важно что событие на входе будет отработано однозначно. Нет?

Вот и я о том!
Страшно, когда на один входной импульс на выходе не появиться отклик вообще , или их вдруг появится пара! Вот это есть ошибка! Возможно тут такое?

Oldring
Цитата(sazh @ Apr 11 2011, 14:55) *
Если метастабильность - неопределенное состояние на выходе триггера, то ведь конкретно для этой схемы
это состояние или будет отработано последующим триггером как переход из например 0 в 1 или нет.
Что на выходе будет давать формирование импульса или в одном такте или в последующем, что для флага не так уж и важно.
Важно что событие на входе будет отработано однозначно. Нет?



Это неопределенное состояние попадает через логику прямо на выход, как и в вашей первоначальной схеме. Соответственно, этот импульс на выходе схемы сам оказывается "нелогическим" вначале, и поэтому на него тоже распространяются требование иметь запас по времени для выхода из метастабильности. Если при этом путь прохождения этого импульсу до следующих входов окажется слишком большим, времени для выхода из метастабильности не хватит. Ситуация ничем не отличается от попытки использования в синхронизаторе только одного триггера. Теоретически обконстрейнить можно, но сложнее проконтролировать, и нужен дополнительный запас по времени за счет большего периода клока.
ViKo
Цитата(Мур @ Apr 11 2011, 14:02) *
Страшно, когда на один входной импульс на выходе не появиться отклик вообще , или их вдруг появится пара! Вот это есть ошибка! Возможно тут такое?

Про эту картинку речь идет? Пусть висит.
Если на входе Data будет импульс в 3 такта Clock1, на Output появится 2 импульса длительностью Clock2. И без всякой метастабильности.
В метастабильном состоянии триггер может висеть "между небом и землей" сколь угодно долго, в идеальном случае. До следующего такта. А если в следующем такте вход неопределен, то все продолжится.
Если вдруг почему-то Clock1 отстанет от Data, доберется до "желтого" триггера чуть позже, триггер влетит в метастабильное состояние.
Это я не к тому, что схема плохая или неправильная, а к тому, что идеального в мире ничего нет. Нужно смотреть внимательно.
Oldring
Цитата(ViKo @ Apr 11 2011, 16:28) *
В метастабильном состоянии триггер может висеть "между небом и землей" сколь угодно долго, в идеальном случае.
...
Если вдруг почему-то Clock1 отстанет от Data, доберется до "желтого" триггера чуть позже, триггер влетит в метастабильное состояние.


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

В вашей схеме 4 триггера, а в обсуждаемой - три. В вашей схеме внутри полноценный голубой синхронизатор, в обсуждаемой его нет. Но предполагается, что Data синхронна по отношению к Clock 1, и поэтому она отстать не может.
ViKo
Цитата(Oldring @ Apr 11 2011, 15:54) *
Вероятность оставания в метастабильном состоянии экспоненциально уменьшается со временем...

Конечно. Это мы обсуждали год назад sm.gif
Цитата
В вашей схеме 4 триггера, а в обсуждаемой - три. В вашей схеме внутри полноценный голубой синхронизатор, в обсуждаемой его нет.

Это рисунок 8, на который ссылается Мур. Думаю, часть темы стоит посвятить этой картинке.
Цитата
Но предполагается, что Data синхронна по отношению к Clock 1, и поэтому она отстать не может.

Я сейчас смотрю в TimeQuest (пришло время), и прихожу к выводу, что по ПЛИС такты приходят на триггера совсем не одновременно.

P.S. Отстаивая честь Quartus'а, скомпилировал следующий код.
Код
  always @(posedge clkin, posedge din)
    if (din)  dout[4] <= din;
    else dout[4] <= 0;

Для Циклона-2 получил триггер с ADATA и ALOAD, подключенными к din, тактовым сигналом на clkin, и нулем на входе данных. Спасен!
Oldring
Цитата(ViKo @ Apr 11 2011, 17:27) *
Это рисунок 8, на который ссылается Мур. Думаю, часть темы стоит посвятить этой картинке.


Мур совсем недавно опубликовал схему от себя. В общем, журнальная схема Иосифа - правильная, схема Мур потенциально ошибочна.

Цитата(ViKo @ Apr 11 2011, 17:27) *
Я сейчас смотрю в TimeQuest (пришло время), и прихожу к выводу, что по ПЛИС такты приходят на триггера совсем не одновременно.


Разумеется, но все тулзы об этом знают отлично, обеспечивая согласованность прихода к каждому триггеру данных и соответствующего клока без нарушения setup/hold в самых крайних условиях эксплуатации.
Мур
Цитата(ViKo @ Apr 11 2011, 16:28) *
Про эту картинку речь идет? Пусть висит.
Если на входе Data будет импульс в 3 такта Clock1, на Output появится 2 импульса длительностью Clock2. И без всякой метастабильности.
В метастабильном состоянии триггер может висеть "между небом и землей" сколь угодно долго, в идеальном случае.

Спасибо за науку! Для меня это новость. Серый уровень на выходе триггера возможен оказывается...

тогда схема ошибочна............ wacko.gif А я поверил авторитету.

Цитата(Oldring @ Apr 11 2011, 17:38) *
Мур совсем недавно опубликовал схему от себя. В общем, журнальная схема Иосифа - правильная, схема Мур потенциально ошибочна.


Это из-за дополнительного триггера на выходе?
Oldring
Цитата(Мур @ Apr 11 2011, 20:22) *
Это из-за дополнительного триггера на выходе?



Из-за дополнительного триггера в середине, который вместе со следующим триггером образуют нормальный синхронизатор.
Мур
Цитата(Oldring @ Apr 11 2011, 20:27) *
Из-за дополнительного триггера в середине, который вместе со следующим триггером образуют нормальный синхронизатор.

Я понял! Проблема в первом =переходном триггере=, который берёт на себя =все грехи= метастабильности. К моей схеме надо добавить тригерок. Правильно?
Oldring
Цитата(Мур @ Apr 11 2011, 21:15) *
Я понял! Проблема в первом =переходном триггере=, который берёт на себя =все грехи= метастабильности. К моей схеме надо добавить тригерок. Правильно?



Примерно там. Можно сказать, что "берет грехи".
ViKo
Цитата(Мур @ Apr 11 2011, 19:22) *
Серый уровень на выходе триггера возможен оказывается...

Да, возможен. И именно в триггере. В обычной логике такое невозможно. В момент фронта тактового сигнала, если изменяется сигнал на входе данных, триггер "не знает", что ему защелкивать. И думает до-о-о-о-о-о-лго... если сигнал на входе попадает точно на порог переключения. Если не точно, то думает недо-о-олго...
Мур
Цитата(ViKo @ Apr 11 2011, 22:30) *
Да, возможен. И именно в триггере. В обычной логике такое невозможно. В момент фронта тактового сигнала, если изменяется сигнал на входе данных, триггер "не знает", что ему защелкивать. И думает до-о-о-о-о-о-лго... если сигнал на входе попадает точно на порог переключения. Если не точно, то думает недо-о-олго...

ОК! Я считал, что проблема для триггера на входе, а не на выходе. В моём представлении триггер не может быть в сером уровне по определению.

Тогда в =моём случае= действительно возможна ситуация отсутствия или удвоенного импульса на выходе. Всё будет зависеть от трактовки серости либо элементом искл-или либо выходным триггером. А дополнительный триггер по Oldring-у, если так случится при асинхронщине, может пребывать в неопределённом состоянии серости(а не чёрно-белом!) до следующего такта.
Вот почему я его =за ненабностью= удалил!....(по сравнению с рис.8)-считал лишним. А он по грехам работает!
Всем огромное спасибо! Усвоил качественно! tort.gif
Oldring
Цитата(Мур @ Apr 12 2011, 09:47) *
А дополнительный триггер по Oldring-у, если так случится при асинхронщине, может пребывать в неопределённом состоянии серости(а не чёрно-белом!) до следующего такта.


Нет, не до следующего.
Выход из метастабильного состояния - это вероятностный процесс. Вероятность остаться в метастабильном состоянии понижается экспоненциально с увеличением премени. Поэтому достаточно несколько десятков постоянных времени выхода из метастабильности, чтобы эта вероятность стала практически нулевой. Но тонкость в том, что если после метастабильного триггера подключен на небольшом расстоянии следующий триггер, то разница между периодом клока и временем распространения сигнала превышает эти несколько постоянных времени, по крайней мере, для триггеров в FPGA. А если там еще несколько слоёв логики, то эти разница может оказаться близка а нулю, и хоть и первый триггер вывалится из метастабильного состояния к следующему фронту клока, сигнал на входах следующих триггеров, после этих слоёв логики, еще останется нелогическим или, скорее, нестабильным, с заметно отличной от нуля вероятностью.
Мур
Цитата(Oldring @ Apr 12 2011, 09:56) *
Нет, не до следующего.
Выход из метастабильного состояния - это вероятностный процесс. Вероятность остаться в метастабильном состоянии понижается экспоненциально с увеличением премени. Поэтому достаточно несколько десятков постоянных времени выхода из метастабильности, чтобы эта вероятность стала практически нулевой. Но тонкость в том, что если после метастабильного триггера подключен на небольшом расстоянии следующий триггер, то разница между периодом клока и временем распространения сигнала превышает эти несколько постоянных времени, по крайней мере, для триггеров в FPGA. А если там еще несколько слоёв логики, то эти разница может оказаться близка а нулю, и хоть и первый триггер вывалится из метастабильного состояния к следующему фронту клока, сигнал на входах следующих триггеров, после этих слоёв логики, еще останется нелогическим или, скорее, нестабильным, с заметно отличной от нуля вероятностью.

Интересно! И что, долбёжка по входу, при серости на выходе, не решает неопределённости?
...Базовый синхронизатор(в синем цвете)- это пара триггеров. По первому мы определились! А второй, получается, нужен для вероятностного вываливания первого из неопределённости?

Призрак триггера Шмидта стоит передо мной! rolleyes.gif
Oldring
Цитата(Мур @ Apr 12 2011, 10:12) *
Интересно! И что, долбёжка по входу, при серости на выходе, не решает неопределённости?
...Базовый синхронизатор(в синем цвете)- это пара триггеров. По первому мы определились! А второй, получается, нужен для вероятностного вываливания первого из неопределённости?

Призрак триггера Шмидта стоит передо мной! rolleyes.gif


Нет, долбежка по входу не поможет - это же триггеры, они переключаются по фронту клока.
Второй нужен только для того, чтобы оттянуть логику с выхода первого, дав ему времени на размышления о смысле его бытия. Поэтому, кстати, без отключения ретайминга через него, он бесполезен.
Триггер Шмидта тут ничем помочь не может. Метастабильность принципиально неизбежна при перехода асинхронного сигнала в синхронный домен.
Мур
Цитата(Oldring @ Apr 12 2011, 10:27) *
Нет, долбежка по входу не поможет - это же триггеры, они переключаются по фронту клока.

Я и имел ввиду фронт клока! Понятие =неопределённо долго= я утрировал на события нескольких фронтов клока...
Цитата(Oldring @ Apr 12 2011, 10:27) *
Второй нужен только для того, чтобы оттянуть логику с выхода первого, дав ему времени на размышления о смысле его бытия. Поэтому, кстати, без отключения ретайминга через него, он бесполезен.
Триггер Шмидта тут ничем помочь не может. Метастабильность принципиально неизбежна при перехода асинхронного сигнала в синхронный домен.

А гистерезис? Уж он-то должен решать неопределённость выхода. Положительная обратная связь всё-таки!...

Цитата(Мур @ Apr 12 2011, 10:12) *
А второй, получается, нужен для вероятностного вываливания первого из неопределённости?

Можно считать второй триггер триггером Шмидта? Образно!
1.За ним последнее слово в оценке(в наихудшем истечении событий) состояния первого триггера.

2.Второй вариант- к следующему фронту клока первый триггер уже будет в норме гарантировано. И это повторит второй! Это черезвычайно важно для одноклоковых сигналов разрешения в синхронных проектах. Там всё строго и вариации длительности недопустимы
Oldring
Цитата(Мур @ Apr 12 2011, 10:59) *
А гистерезис? Уж он-то должен решать неопределённость выхода. Положительная обратная связь всё-таки!...


Нет. Метастабильность и есть неустойчивое равновесие при наличии положительной обратной связи. Гистерезис тоже бесполезен, так как тут важно поведение линеаризованной системы вблизи точки неустойчивого равновесия при малом сигнале.
Мур
Цитата(Oldring @ Apr 12 2011, 10:03) *
Нет. Метастабильность и есть неустойчивое равновесие при наличии положительной обратной связи. Гистерезис тоже бесполезен, так как тут важно поведение линеаризованной системы вблизи точки неустойчивого равновесия при малом сигнале.

Прошу не раздражаться на мои импровизации. Я это делаю умышленно, чтобы была полная ясность не только для меня, сомневающегося...

Т.е. если провести аналогию с перевёрнутым маятником. Метастабильность порождается ситуацией попадания маятника в вертикальное положение, откуда он может свалиться в любую сторону и в случайный момент времени. Приход следующего фронта ускорит развязку, а может быть и раньше.... и без него... smile3046.gif
ViKo
Долбежка тактами поможет. Ведь защелкиваться будет уже новое состояние входов, которое, будем надеяться, в этот момент уже стабильное.
Гистерезис не поможет, потому что в этом случае просто появляется два порога восприятия сигнала как 0 или как 1 - при переходе из 0 в 1, и наоборот. Сами пороги технологически остаются примерно теми же.
Так как метастабильное состояние выхода триггера не обязательно совпадает с порогом восприятия 0 или 1 для следующего триггера, то следующий триггер зашелкнет уже нечто, похожее на 0 или 1. Но и такой сигнал должен увеличить время срабатывания триггера. Вероятность, что напряжение будет вблизи порога, мала. Следующий триггер уменьшает эту вероятнось почти до нуля.

P.S. нужно писать "триггер Шмитта"
Мур
Цитата(Мур @ Apr 7 2011, 16:33) *
CODE

library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity syn is
port(
clk : in STD_LOGIC;
in_level : in STD_LOGIC;
reset : in STD_LOGIC;
imp : out STD_LOGIC
);
end syn;
architecture syn_body of syn is
signal jjj : STD_LOGIC;
signal qqq : STD_LOGIC;
signal ddd : STD_LOGIC;
begin
tg: process (clk)
begin
if clk'event and clk = '1' then
if reset='1' then
jjj <= '0';
qqq <= '0';
ddd <= '0';
else
jjj <= ddd;
qqq <= jjj;
ddd <= in_level;
end if;
end if;
end process;
imp <= jjj xor qqq;
end syn_body;

Тогда первый текст должен быть таким!

Цитата(ViKo @ Apr 12 2011, 10:35) *
P.S. нужно писать "триггер Шмитта"


Призрак лейтенанта Штидта парил надо мной!...

Посыпаю голову пеплом! smile3009.gif
Oldring
Цитата(ViKo @ Apr 12 2011, 11:35) *
Долбежка тактами поможет. Ведь защелкиваться будет уже новое состояние входов, которое, будем надеяться, в этот момент уже стабильное.


Нет. Так как сигнал асинхронный, он может прийти в самый неподходящий момент, именно перед тем фронтом клока, который защелкивает сигнал, далее используемой логикой внутри.

Цитата(ViKo @ Apr 12 2011, 11:35) *
Так как метастабильное состояние выхода триггера не обязательно совпадает с порогом восприятия 0 или 1 для следующего триггера, то следующий триггер зашелкнет уже нечто, похожее на 0 или 1.


Если внутри нелогической зоны нет плато, то это всё не имеет никакого значения.
Oldring
Цитата(Мур @ Apr 12 2011, 11:15) *
Т.е. если провести аналогию с перевёрнутым маятником. Метастабильность порождается ситуацией попадания маятника в вертикальное положение, откуда он может свалиться в любую сторону и в случайный момент времени. Приход следующего фронта ускорит развязку, а может быть и раньше.... и без него... smile3046.gif


Почти.

У механического маятника бывает трение покоя, приводящее к появлению на самом верху глобального максимума энергии небольшого локального минимума, приводящего к появлению там немного устойчивого состояния. Поэтому механический маятник может в принципе там находиться бесконечно долго, тем более, если его ось со временем заржавеет. В случае электронных триггеров всё обычно проще.
Мур
Цитата(Oldring @ Apr 12 2011, 12:22) *
Почти....У механического маятника бывает трение покоя, приводящее к появлению на самом верху глобального максимума энергии небольшого локального минимума, приводящего к появлению там немного устойчивого состояния. Поэтому механический маятник может в принципе там находиться бесконечно долго, тем более, если его ось со временем заржавеет. В случае электронных триггеров всё обычно проще.

Спасибо! Мне понравилось -> =появления там немного устойчивого состояния=
В электронных триггерах =ось не ржавеет=, и активная зона, вроде массы механического маятника, способна балансировать случайным образом, пока какой-либо фактор не преобладает.
...Помнится, в таком сотоянии возрастает потребление элементов(нет отсечки или насыщения). Это я к тому, что за метастабильные состояния наказывают повышением потребления. Хоть и не значительным. В былые времена дефектные триггеры выгорали от сквозного тока...
Boris_TS
Цитата(Boris_TS @ Apr 10 2011, 21:28) *
Цитата(AlphaMil @ Apr 10 2011, 21:17) *
Да, частоты зависимы и генерируются от одного клока. Сейчас использую S3 и ISE 12.4. Среда понимает соотношение частот.

Это хорошо, что от одного генератора. Теперь остаётся уточнить, как Вы получали эти частоты: при помощи DLL ? Хорошо бы схемку (ну или HDL описание) глянуть этого места.

Если всё сделать правильно, то и метастабильности не будет - а значит, всё будет тривиально (как функционально моделируется - так и работает,.. если, конечно all constraints are met).

Т.к. схематика/описания схемы генерирующей clock 100М и 50М от автора не последовало, то предположу, что он сделал это место "правильно". Тогда для пересаживания импульса, длинной от 1 до 2 периодов CLK_100M на частоту 50М (получится импульс длинной в один период), достаточно такой схемы:
Нажмите для просмотра прикрепленного файла
ISE разведёт сигнал A с ограничениями как для 100М, и обратная связь (цепь Event_50M) со второго триггера на первый тоже будет разведена с ограничением как для 100М. Цепь Event_50M ко всем остальным синхронным элементам домена Clk_50M будет разведена с ограничениями как для 50М.

Ну вот, как-то так примитивно всё получается,.. если схема генерирующая clock’и сделана правильно.
ViKo
Хочу вернуться к рис.8 (см. сообщение №58).
Возник у меня вопрос о целесообразности мультиплексора в "желтой" части схемы. И подумал я, почему его не заменить на схему И - один вход - Data, другой /Q с триггера.
Что делает мультиплексор в "желтой" части.
Пока на Data 0, это латч, поддерживающий свой 0. Незнамо, зачем.
Пришла "длинная" 1, мультиплексор переключился на вход 1, передает 1 с инверсного выхода триггера на вход D триггера. По такту Clock1 эта 1 записалась в регистр. На инверсном выходе триггера появился 0, и этот 0 пришел через мультиплексор на D. Пришел следующий такт, в триггер записался 0, на входе мультиплексора 1. И т.д., генерация.
Когда Data стала 0, мультиплексор запомнил свое последнее состояние. И триггер записал его, и выдал наружу.
Аналогично ведет себя схема на И. С той разницей, что принудительно подаст 0 на вход D, когда Data станет 0. И выход триггера гарантированно переключится в 0.
При "короткой" 1 на Data, однотактовой, обе схемы работают одинаково.
"Развод" какой-то!? sm.gif

Ethereal
Цитата(ViKo @ Apr 18 2011, 17:07) *
Что делает мультиплексор в "желтой" части.
Пока на Data 0, это латч, поддерживающий свой 0. Незнамо, зачем.
Пришла "длинная" 1, мультиплексор переключился на вход 1, передает 1 с инверсного выхода триггера на вход D триггера. По такту Clock1 эта 1 записалась в регистр. На инверсном выходе триггера появился 0, и этот 0 пришел через мультиплексор на D. Пришел следующий такт, в триггер записался 0, на входе мультиплексора 1. И т.д., генерация.
Когда Data стала 0, мультиплексор запомнил свое последнее состояние. И триггер записал его, и выдал наружу.
Аналогично ведет себя схема на И. С той разницей, что принудительно подаст 0 на вход D, когда Data станет 0. И выход триггера гарантированно переключится в 0.
При "короткой" 1 на Data, однотактовой, обе схемы работают одинаково.
"Развод" какой-то!? sm.gif

Там синхронизатор, передающий 1clk импульсы, поэтому "длинная" 1 на входе может быть, только если мы хотим передать много-много импульсов, идущих друг за другом.
А если на входе "короткий" импульс (1clk), то выход желтого каскада переключится в инверсное состояние, после чего смененное состояние зафиксируется. Выходной сигнал будет передан во второй домен, где смена состояния будет отловлена по xor.

А с лэтчем они криво нарисовали, да. На самом деле там что-то вроде:
Код
always @(posedge clkA)
Out<=(En)?~Out:Out;
ViKo
Цитата(Ethereal @ Apr 18 2011, 17:25) *
А если на входе "короткий" импульс (1clk), то выход желтого каскада переключится в инверсное состояние, после чего смененное состояние зафиксируется.

Импульс может и должен быть равен такту. Но даже если он и короче, то он уже отловлен триггером. Зачем его держать? Разве что чтобы выдержать время удержания на входе D?
А если не отловлен - туда ему и дорога! sm.gif

Цитата(Ethereal @ Apr 18 2011, 17:25) *
А с лэтчем они криво нарисовали, да. На самом деле там что-то вроде:

не думаю
ViKo
Присмотрелся внимательнее к рисунку. Да, есть в нем смысл. Был неправ.

1. Короткие импульсы 1 на Data захватываются защелкой, затем триггер фиксирует это состояние. И находится в нем долго, до следующего импульса на Data. По этому импульсу защелкивается 0, и дальше триггер... Таким образом, состояние триггера по каждому импульсу на Data изменяется на противоположное.
Стоящий после него синхронизатор с исключающим или на конце вылавливает каждое изменение приходящего "желтого" триггера сигнала, формируя импульс в один свой такт по фронту, и по срезу. Так "восстанавливается" удвоенная частота импульсов Data.

2. Если на Data импульс достаточно длительный, так, что в него попадает один фронт Clock1, или в короткий импульс попал фронт Clock1, "желтый" триггер сформирует импульс в один такт. Который может не словиться "синими" триггерами. А если словится, сформируются два подряд идущих импульса. Нехорошо.

3. Если на Data импулься длинный, "желтый" триггер будет генерировать то 0, то 1. Аналогичный сигнал появится на выходе синхронизатора. Тоже не хорошо.

Особо нужно посмотреть, когда импульс на Data равен периоду Clock1. В этом случае выход триггера переключается одновременно со срезом Data. Вот она - потенциальная возможность для метастабильного состояния защелки-мультиплексора. Если защелкнется новое состояние триггера - сформируется одиночный импульс (вариант 2). Если сохранится старое - все нормально (вариант 1). Но, так как при "защелкивании" сигнал с триггера проходит по мультиплексору дважды, сначала по цепи для входа 1, потом по цепи для входа 0, то он гарантированно "защелкнет" старое состояние триггера. Триггер начнет формировать длинный импульс (вариант 1).

Примерно так. sm.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.