Перейти к содержанию
    

Влияние асинхронного сброса на Fmax

не испортит следующий триггер, он выходит из метастабильности за <= половины стандартного его времени clock-to-output, это раз, а два - вероятность того, что второй триггер схватит метастабильность от первого уже как правило выходит за единицу в 10^8 лет, что, собственно, с той же вероятностью может случиться и в синхронизаторе того же резета. Об этом, естественно, надо помнить, и при работе с асинхронным сбросом, и при построении синхронизатора.

 

 

Это да, только это приведет к тому, что из-за синхронизатора синхронный резет (поставленный "на автомате" по привычке) не сработает :)

1) "выходит из метастабильности за <= половины стандартного его времени clock-to-output" - это речь о времени метастабильности вообще или именно о "следующем такте который удаляет метастабильность"?

2) А время метастабильности на следующем FF.D, как по вашему зависит от наличия\отсутствия комбинаторики на проедыдущем метастабильном FF.Q?

Не увеличится ли оно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1) "выходит из метастабильности за <= половины стандартного его времени clock-to-output" - это речь о времени метастабильности вообще или именно о "следующем такте который удаляет метастабильность"?

Именно и конкретно об очередном такте, который защелкивает стабильное данное в защелку, болтающуюся между небом и землей.

 

2) А время метастабильности на следующем FF.D, как по вашему зависит от наличия\отсутствия комбинаторики на проедыдущем метастабильном FF.Q?

Не увеличится ли оно?

комбинаторика представляет собой, очень грубо говоря, обычные аналоговые усилители сигналов - каждый лог. элемент имеет очень нехреновый КУ по напряжению, поэтому, чем больше их по дороге от триггера, болтающегося между 0 и 1 до следующего, тем ниже вероятность того, что после всей этой комбинаторики сигнал так и останется между порогов 0/1, а не придет к какому-то четкому уровню. То есть, самый худший случай, это когда выход триггера соединен прямо с входом следующего. Время метастабильности от этого вообще никак не зависит, зависит вероятность ее распространения по схеме.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Именно и конкретно об очередном такте, который защелкивает стабильное данное в защелку, болтающуюся между небом и землей.

 

 

комбинаторика представляет собой, очень грубо говоря, обычные аналоговые усилители сигналов - каждый лог. элемент имеет очень нехреновый КУ по напряжению, поэтому, чем больше их по дороге от триггера, болтающегося между 0 и 1 до следующего, тем ниже вероятность того, что после всей этой комбинаторики сигнал так и останется между порогов 0/1, а не придет к какому-то четкому уровню. То есть, самый худший случай, это когда выход триггера соединен прямо с входом следующего. Время метастабильности от этого вообще никак не зависит, зависит вероятность ее распространения по схеме.

интересная информация.

Насчёт "<= половины стандартного его времени clock-to-output" это я какраз про время метастабильности вообще от фабов слышал, а никак не второго такта.

В любом случае, HOLD time задержка "удержит" метастабильное состояние во время активного фронта на следующем тригере и он его поймает.

 

Насчёт комбинаторики... По вашему выходит, что идеальный синхронизатор это 2 FF между которыми максимум буферов...

А почему-то у всех фабов синхро-эдлементы сделаны наоборот без буферов и с флопами побыстрее....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Насчёт комбинаторики... По вашему выходит, что идеальный синхронизатор это 2 FF между которыми максимум буферов...

А почему-то у всех фабов синхро-эдлементы сделаны наоборот без буферов и с флопами побыстрее....

 

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

 

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А озвучить эти аргументы вы можете? Очень интересно

Да, и что именно понимать под "синхронным сбросом"? Единоразовю загрузку 0 во все тригеры, после включения питания, через отдельный вход по первому активному фронту клока?

Что именно я подразумеваю, я написал а первой странице. Естественно, речь идёт про отдельный сигнал сброса, который может быть использован в любой момент времени.

Про аргументы я уже написал, что мне жаль времени их перетирать по 10 раз. К тому же, тут и так уже несколько страниц перетирания образовалось. Основной смысл в том, что при использовании строго синхронного сброса, получаем схему с гарантированной повторяемостью результатов и отсутствием кучи возможностей ошибиться. При наличии желания и опыта, всех этих ошибок можно избежать, но я не сторонник известной русской традиции - создать себе трудности, а потом их мужественно преодолевать. :) Тем более, что при следовании тем пунктам, которые я привёл в первом посте, какого-то заметного влияния на fmax и прочее наличие синхронного сброса не оказывает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

 

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

...честно говоря сказанное тут противоречит тезису "элемент имеет очень нехреновый КУ по напряжению, поэтому, ....., тем ниже вероятность того, что ... сигнал так и останется между порогов 0/1, а не придет к какому-то четкому уровню" и "То есть, самый худший случай, это когда выход триггера соединен прямо с входом следующего."

И обяснение это скорее сомнительное но...

Тем неменее вывод о том, что " решение с подряд стоящими быстрыми FF самое удобное, потому что универсальное, на все случаи жизни точно работающее" - совпадает с тем что многие пишут.

---------

А что-же делать с HOLD тайм задержкой которая продержит метастабильность после 2-го фронта клока (который укоротит время метастабильности до 0.5clk-to-out)?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А что-же делать с HOLD тайм задержкой которая продержит метастабильность после 2-го фронта клока (который укоротит время метастабильности до 0.5clk-to-out)?

 

Да ничего не делать. Если на входе следующего триггера полууровень, то вероятность, что после фронта он так и распространится дальше, уменьшается во много порядков раз. Скорее всего, на выходе следующего установится 0 или 1. На этом все синхронизаторы построены. Просто знать вероятность этого события и учитывать его.

 

честно говоря сказанное тут противоречит тезису

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это "золотое правило" ленивых. Если использовать только синхронный сброс - то можно не думать ни о чем, все будет работать всегда, но не факт, что схема будет оптимальна по скорости и/или площади. Если использовать асинхронный, то надо подумать, все ли сделано корректно, и если все сделать корректно, то тоже все будет работать, и, часто, оптимальнее, чем с синхронным.

 

Что-то мне говорит о том, что если на синхронных сброс подать сигнал несинхронный к основному клоку, то хорошо тоже не будет. Так что и тут придется подумать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что-то мне говорит о том, что если на синхронных сброс подать сигнал несинхронный к основному клоку, то хорошо тоже не будет. Так что и тут придется подумать.

Что то мне говорит о том, что в этом случае сброс уже не будет синхронным. ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да ничего не делать. Если на входе следующего триггера полууровень, то вероятность, что после фронта он так и распространится дальше, уменьшается во много порядков раз. Скорее всего, на выходе следующего установится 0 или 1. На этом все синхронизаторы построены. Просто знать вероятность этого события и учитывать его.

Выходит что подача 0.5 на вход тригера не приводит к его переходу в метастабильное состояние, или намного мало вероятнее, чем изменение уровня во время клока?

Или всётаки полууровень и изменение уровня во время клока равновероятно поставит тригер в метастабильность?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что то мне говорит о том, что в этом случае сброс уже не будет синхронным. ;)

 

Вопрос терминологии. По факту надо различать два отдельных признака: используется синхронный (не важно как именно он реализуется) либо асинхронный вход сброса триггера и используемый источник сигнала сброса синхронизирован либо нет к клоку. И зло как раз-таки во втором - если сигнал не синхронен клоку, независмо от типа используемого сброса.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Выходит что подача 0.5 на вход тригера не приводит к его переходу в метастабильное состояние, или намного мало вероятнее, чем изменение уровня во время клока?

Или всётаки полууровень и изменение уровня во время клока равновероятно поставит тригер в метастабильность?

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот...

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

 

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

 

А вы что наделали? Сначала научили что они есть, потом написали что лучше использовать их, а потом?! а потом 3 страницы противопоказаний и трудностей с вероятностями. Не стыдно?

 

 

Подведу итоги, с вашего позволения.

Если рассматривать задачу именно для ПЛИС, причем достаточно современной с большими ресурсами:

1. использование Асинхронного ресета позволяет сбрасывать состояние регистров без наличия тактового сигнала, платим за это чуть большим вниманием по архитектуре автомата, чтобы учесть все неприятности связанные с появлением сигнала в любой момент.

2. использование Синхронного ресета забирает чуть больше ресурсов на формирование входного значения для регистра, вместо дерганья спец входа элемента, но дает схему "для ленивых", поведение которой более предсказуемо и устойчиво.

 

При этом оба метода не оказывают существенного влияния на частоту работы схемы. Отсюда я делаю выводы что выскочкам(современным) программистам предпочтительнее использовать синхронные ресеты везде, до тех пор пока не понадобятся специальные свойства асинхронных ресетов. Поскольку цена ресурсов ПЛИС сильно ниже цены ошибки.

 

При создании схем для изготовления кристаллов аргументация и подходы другие.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

При создании схем для изготовления кристаллов аргументация и подходы другие.

Да одинаковые они. Сегодня ваш модуль синтезируют в ПЛИС, завтра понадобится в ASIC его упрятать, а послезавтра его дяде продадите, а куда он его запихнет Вам и неведомо.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

откуда такие данные что более а что менее вероятно? Насколько я знаю - это равноодинаково.

-----

Итак...

Мы обсуждаем способ борьбы с метастабильностью, где за счёт кодировки состояний, модуль, попавший в метастабильность, либо переходит в следующее правильное состояние либо остаётся в ресете после снятия сброса.

Мы установили, что:

1) подача 0.5 уровня на вход или изменение данных во время клока равновероятно устанавливает тригер в метастабильное состояние.

2) мы поняли, что комбинаторика на выходе метастабильного тригера скорее увеличивает время метастабильности.

3) мы предположили, что следующий фронт клока выводит тригер с метастабильного состояния за время ~0.5 clk-to-out.

При этом, за счёт HOLD time delay метастабильное состояние гарантировано удерживается на входе следующего тригера в момент прихода фронта клока и как следствие имеем ситуацию п.1).

 

Выводы отсюда такие:

а) в общем случае, блоки имеют комбинаторику на выходе. Согласно п.2) время пребывания такого блока в метастабильном состоянии увеличивается.

б) Если метастабильное состояние сохранится до следующего фронта клока (а согласно п.а) этому способствует схема), то согласно п.1) и 3) Х может попасть в следующий тригер и .т.д (Х побежит по схеме)

в) предложенное решение (" кодировки состояний, модуль, попавший в метастабильность, либо переходит в следующее правильное состояние либо остаётся в ресете") не только не способствует подавлению метастабильности, а наоборот (за счёт комбинаторики) способствует её распространению.

 

Правильно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...