Jump to content

    

Поиск метастабильности

Всем доброго времени суток.

 

Несколько дней назад des00 и SM просветили меня по поводу метастабильного состояния в ПЛИС.

Для Xilinx есть документ XAPP094 в котором проблема описана и приведена схема для фиксации ошибок.

Я провёл эксперимент по защёлкиванию асинхронного сигнала.

 

Модуль AMBPEX8

ПЛИС: XC4VSX35-11

Текст компонента прикреплён.

 

Тактовая частота подаётся с синтезатора. На вход триггера подаётся частота 125 МГц. Программа рассчитывает

среднее время между обнаруженными ошибками метастабильности.

 

300 МГц - не обнаружено

390 МГц - 20 секунд

400 МГц - 8 секунд

420 МГц - 1.5 секунды

450 МГц - 360 мс

480 МГц - 60 мс

500 МГц - 20 мс

520 МГц - 9 мс

540 МГц - 3.9 мс

550 МГц - 2.6 - ошибка метастабильности второго тирггера.

 

Выводы:

1. При защёлкивании асинхронного сигнала возможна задержка появления сигнала после триггера длительностью до 1.5 нс.

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

cl_check_mt.vhd

Share this post


Link to post
Share on other sites
Выводы:

1. При защёлкивании асинхронного сигнала возможна задержка появления сигнала после триггера длительностью до 1.5 нс.

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

 

1. это зависит от типа ПЛИС (вообще элемента) и в правильном дизайне это время не должно иметь значения. btw : для современных V5 / V6 должно быть меньше

 

2. на N последовательных триггерах (2 - частный случай), так как явление вероятностное, то добавление триггера уменьшает вероятность (можно ставить триггера на разные фронты такта posedge/negedge)

 

-----------------------------------

 

как правило все ошибки типа "метастабильность" возникают от неправильных констрейнов, если дизайн синхронный и правильно обконстрейнен, то таких ошибок не бывает

 

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

 

если есть где-то защелкивание ассинхронного сигнала, то такой путь должен быть помечен как false path и должно быть поставлено несколько триггеров - этот элемент называется синхронизатор, количество триггеров в нем определяется исходя из паранои разработчика или оценок размера окна метастабильности (которое не есть hold - setup (меньше)) и времени выхода триггера из метастабильности

 

-------------------------------------

 

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

Share this post


Link to post
Share on other sites

Интересно следующее:

1. Триггера синхронизатора находятся как можно ближе на кристалле? (конкретное размещение)

2. Будет ли разница между 2-мя синхронизаторами: 1 - два триггера по переднему фронту, 2 - три триггера: передний, задний, передний? Задержка у синхронизаторов одинаковая, количество триггеров разное.

Share this post


Link to post
Share on other sites
Интересно следующее:

1. Триггера синхронизатора находятся как можно ближе на кристалле? (конкретное размещение)

2. Будет ли разница между 2-мя синхронизаторами: 1 - два триггера по переднему фронту, 2 - три триггера: передний, задний, передний? Задержка у синхронизаторов одинаковая, количество триггеров разное.

 

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

 

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

Share this post


Link to post
Share on other sites
2. Первый вариант - лучше, так как больше свободного времени остается на выход из метастабильности при вычитании из периода клока всех задержек.

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

Share this post


Link to post
Share on other sites
1. Да, чем ближе - тем лучше. Для триггеров по одинаковой технологии......

 

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

1. Это я и сам знаю. Вопрос был к dsmv как реально стоят триггеры в проекте, так как размещение приведено не было.

 

2. И все же не факт. Поэтому, хотелось бы, по возможности, проверить это экспериментально.

Share this post


Link to post
Share on other sites
1. Это я и сам знаю. Вопрос был к dsmv как реально стоят триггеры в проекте, так как размещение приведено не было.

 

Вот размещение - красным выделены триггеры qa, qb, qc, qd

 

На них наложены атрибуты RLOC - и они выполнены, справа видны реальные размещения.

 

post-8284-1268132684_thumb.png

 

На второй триггер я забыл наложить ограничения - но он тоже развёлся хорошо:

 

post-8284-1268133050_thumb.png

 

Будет ли разница между 2-мя синхронизаторами: 1 - два триггера по переднему фронту, 2 - три триггера: передний, задний, передний? Задержка у синхронизаторов одинаковая, количество триггеров разное.

 

Мне второй вариант не очень нравиться. Но всё равно попробую его проверить. Так же и вариант с ипользованием сдвигового регистра на основе LUT.

Я сейчас больше склоняюсь к варианту с двумя триггерами и разрешением защёлкивания через несколько тактов.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
А аппаратные сдвиговые регистры использовать и нельзя. У них другая структура. Об этом часто упоминают в аппнотах на xilinx.

 

А можно уточнить - почему нельзя. И где про это написано. Я не нашёл.

Share this post


Link to post
Share on other sites
А можно уточнить - почему нельзя.

почему нельзя, я не в курсе, а структура там - RAM со счетчиком адреса, который по кругу бегает. А не цепочка триггеров.

Share this post


Link to post
Share on other sites
почему нельзя, я не в курсе, а структура там - RAM со счетчиком адреса, который по кругу бегает. А не цепочка триггеров.

 

Тем только лучше. Больше времени остаётся у триггера на выход из метастабильности.

 

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

 

Исхожу из простейшей модели метастабильности. Триггер, оказавшийся вблизи метастабильности, вываливается из неё экспоненциально с постоянной времени, определяемой неустойчивым полюсом, который зависит прежде всего от технологии производства триггера. То есть чтобы через время t выходное напряжение оказалось на расстоянии Uout от равновесной траектории, напряжение на входе в момент времени ноль должно быть на расстоянии Uin = Uout * exp(-(t-tp)/tau) от равновесного, где tp - это чистая задержка переключения триггера. Соответственно, вероятность пронаблюдать метастабильность пропорциональна вероятностью попасть в это окно на входе, то есть она прямо пропорциональна Uin для соответствующим образом выбранного Uout. Пусть мы два триггера включили последоваетльно с задержкой клока T между ними. Тогда для этой пары триггеров Uin = Uout * exp(-((t - T) - tp)/tau) * exp(-(T -tp)/tau) = Uout * exp(-(t - 2 * tp)/tau) и вероятность пронаблюдать метастабильность p ~ exp(-(t - 2 * tp)/tau). Как легко видеть, T исчезло, а чистые задержки просто просуммировались. Говоря простыми словами, для вероятности пронаблюдать метастабильность на выходе цепочки триггеров важно только остающеся суммарное время на успокоение после вычитания суммы всех чистых задержек.

Share this post


Link to post
Share on other sites
Исхожу из простейшей модели метастабильности.

Так и именно... А если учесть разброс этих самых равновесных траекторий, обусловленный градиентом технологических параметров на кристалле, его температуры, да и просто случайной флуктуации примесей, что дает примерно +-20 % гуляния порога вверх-вниз как минимум. Причем тут чем дальше два триггера друг от друга, тем больше этот разброс, хотя тем меньше времени из-за задержки в разводке. Т.е. о чем я - если попали в достаточно длинную метастабильность, и второй триггер щелкает пока первый еще на стадии достаточного медленного выхода из метастабильности, т.е. его выход вблизи какого-то того критического уровня, при котором время выхода велико, то вероятность того, что следующий триггер защелкнув этот уровень, влетит в метастабильность, достаточно мала. Он, скорее всего, такой входной сигнал расценит как 0 или 1 вследствие технологического разброса. А область высокой веротности входа второго триггера в метастабильность окажется на относительного небольшом участке траектории первого триггера, где скорость его прохода уже достаточно велика, и вероятность попадания фронта клока второго триггера на этот участок довольно низкая. Я, честно говоря, не вижу способа аналитически оценить эту составляющую, если не на том фабе работать, где оно делается... И иметь достаточно статистики по разбросам.

Share this post


Link to post
Share on other sites
Так и именно... А если учесть разброс этих самых равновесных траекторий, обусловленный градиентом технологических параметров на кристалле, его температуры, да и просто случайной флуктуации примесей, что дает примерно +-20 % гуляния порога вверх-вниз как минимум. Причем тут чем дальше два триггера друг от друга, тем больше этот разброс, хотя тем меньше времени из-за задержки в разводке.

 

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

 

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

Share this post


Link to post
Share on other sites
В любом случае даже если тау изменяется непредсказуемо на те же 20% - это совершенно не важно.

Почему на те же 20%? ИМХО зависимость между разбросом порога и тау отнюдь не линейная, учитывая еще, что не все возможные метастабильные траектории могут существовать в этой схеме, из-за жестких ограничений на характер входных сигналов. Уход порога эквивалентен задержке по времени на то время, за которое предыдущий каскад пройдет по своей траектории от своего "критического" уровня (того, в котором он может находиться сколь угодно долго) на тот самый разброс порога. А эта задержка уже сама по себе вероятностная величина.

Share this post


Link to post
Share on other sites
Почему на те же 20%? ИМХО зависимость между разбросом порога и тау отнюдь не линейная, учитывая еще, что не все возможные метастабильные траектории могут существовать в этой схеме, из-за жестких ограничений на характер входных сигналов. Уход порога эквивалентен задержке по времени на то время, за которое предыдущий каскад пройдет по своей траектории от своего "критического" уровня (того, в котором он может находиться сколь угодно долго) на тот самый разброс порога. А эта задержка уже сама по себе вероятностная величина.

 

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

 

Возьмите любое окно напряжений на выходе триггера, которое обзовите метастабильным состоянием. Любой отрезок напряжений на выходе, не включающий стабильные состояния триггера и между ними. В первом приближении детерминированной траектории (которое, разумется, лишь грубое приближение, но при переходе к вероятностным рассмотрениям всё окажется аналогично) этому окну на выходе соответствует окно на входе, траектории триггера отображают напряжения на входе в момент 0 в напряжения на выходе в момент t. А теперь представьте себе это отображение. Если окна брать малыми, это отображение входного окна в выходное непрерывное и монотонное. К тому же, для достаточно малых окон, все высшие степени ряда Тейлора исчезают и это отображение линейное. То есть входное окно просто экспоненциально расширяется. Обратное отображение - выходное окно при отображении во входное экспоненциально сужается. Из-за этого экспоненциального сужения небольшие смещения выходного окна приводят к экспоненциально меньшим смещениям входного. Да и постоянная времени не может существенно меняться при небольших смещениях выходного окна.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this