Як синхронізатор 2-ff забезпечує належну синхронізацію?


9

Використання синхронізаторів 2-ff було стандартом для сигналу для перетину меж годин. І є багато паперу / фігур, що ілюструють механізм, такий як цей:введіть тут опис зображення

Здається BCLK може тільки зразок пульс адата один раз (на другому наростаючому фронті BCLK ), що призводить до вихідний метастабільній на bq1_dat . Як можна bq1_dat пробувати "високу" на наступному активному краю годинника?


На додаток до свого питання, я хотів би додати те, що я думаю, щоб сигнал надійно перейшов до іншого годинникового домену (припустимо, що 2-FF достатньо, щоб задовольнити вимогу MTBF). Будь ласка, виправте мене, якщо якісь помилки.

введіть тут опис зображення

ps: Метастабільний стан не відображає форму хвилі "блукання навколо", а рівень, який не є ні "1", ні "0". На наступному малюнку показаний приклад метастабільного виводу.введіть тут опис зображення

Оригінальна цифра вийшла з конспектів лекцій для EE108A, Лекція 13: Невдача метастабільності та синхронізації (власне, коли гарні трикотажні помилки) від WJ Dally.


4
Я просто хочу сказати, що діаграми, які показують метастабільний вихід "бродіння навколо", вкрай вводять в оману. Це зовсім не так, як виглядає метастабільність. Коли FF переходить у метастабільний стан, його вихід надходить на єдину, конкретну проміжну напругу (значення залежить від технології впровадження) і залишається там. Через деякий непередбачуваний проміжок часу напруга буде коливатися або високою, або низькою, а шлях, яким вона рухається, також непередбачуваний.
Дейв Твід

@Dave Tweed ♦ Дякую за коментар. Майже у всіх документах, які я читав щодо метастабільності, я бачив форми "блукання". Я здійснив обшук і знайшов допис ( якщо фліп-флоп має порушення налаштувань і переходить у метастабільний стан, чи гарантовано він встановиться на вхідному значенні, коли він закінчує коливатися? ), Що містить знімок із o-області із захопленим метастабільним станом. Посилання на оригінальну посилання на рисунок міститься в цій публікації.
фідель

Так, це чудово ілюструє мою точку зору, а презентація Powerpoint, з якої вона походить, містить у собі багато хорошої інформації.
Дейв Твід

Відповіді:


8

Проста відповідь полягає в тому, що вони не займаються самостійно. Синхронізатор є не для того, щоб передати дані, але переконайтеся, що ви не закінчитесь метастабільними сигналами, що подають безліч інших сигналів і створюють проблеми. Другий FF, як показано на діаграмі, вловлює метастабільний перший вихід FF і не дозволяє йому поширюватися далі через конструкцію.

Існують різні види сигналів, і те, як ви включаєте синхронізатори, залежить від того, про який сигнал ви говорите. Але давайте розглянемо кілька поширених типів:

  1. Тригерні сигнали - або будь-який сигнал, який в основному є імпульсом, який повинен запустити щось інше. Зазвичай вони не несуть даних, і все, що вас цікавить, - це, скажімо, зростаюча грань для того, щоб почати щось переходити в інший годинниковий домен. Щоб перехрестити їх, вам знадобиться синхронізатор (по суті, те, що показано на вашій схемі), але вам потрібно трохи більше.

    Найпростішим варіантом є розширення імпульсу - по суті, ви впевнені, що вхідний імпульс становить більше 1 тактового періоду цільового часу призначення (він повинен бути довшим за 1 цикл, принаймні більший за час встановлення та час утримування для регістру призначення) . Наприклад, якщо ви переходите від тактової частоти 20 МГц до тактової частоти 15 МГц, ви переконайтесь, що ваш імпульс - два тактові цикли на вході, що забезпечить подання його та не втрачено. Це також дає відповідь на ваше запитання про те, як гарантовано переходити сигнал. Якщо імпульс ширший, ніж один тактовий час призначення, це означає, що якщо він переходить на перший край годинника і в кінцевому підсумку сприймається як 0, то на другому краю тактового сигналу він обов'язково вловить імпульс.

    Оскільки з цим типом сигналу вас цікавить лише те, що імпульс пройшов поперек, неважливо, чи вихідний сигнал закінчується двома тактовими циклами високий час, а інший лише один цикл. Якщо вам потрібно переконатися, що це імпульс одноциклового циклу, ви можете створити просту ланцюг детектора краю.

  2. Контрольні автобуси - або, можливо, типи шин даних. Це, мабуть, складніше, тому що якщо у вас є багатобітний потік даних, який повинен залишатися синхронізованим. У цьому випадку ви хочете реалізувати щось, що називається "рукостискання". Ви в основному завантажуєте свої дані на вихідний годинник і зберігаєте їх. Потім ви надсилаєте сигнал запиту (як у 1) через синхронізатор. Після того, як сигнал запиту попереду, ви знаєте, що шина даних також буде стабілізована в доменному призначенні. Потім ви можете перевести годинник у банк реєстру за адресою призначення. Потім пункт призначення знову надсилає імпульс підтвердження, щоб повідомити джерело, що він може завантажити наступне слово.

    Ви б використовували такий тип шини, якщо вам потрібно було надіслати керуюче слово до цільового годинника, для якого вам потрібно знати, що воно потрапило туди, перш ніж ви надсилаєте інший (наприклад, якщо ви надсилаєте команду щось робити).

  3. Шини даних - для даних, де у вас є джерело, яке викидає дані безперервно або в пакетні дані, вам, мабуть, краще використовувати FIFO, ніж синхронізатори. FIFO використовує подвійну тактову пам’ять для зберігання даних, а також лічильники для відстеження кількості даних у FIFO. Ви записуєте дані у FIFO, коли є простір, а потім збільшуєте адресу запису. Потім ця адреса зазвичай кодується у схемі "сірого кодування", яка забезпечує, що кожен приріст адреси викликає лише одинбіт в адресній шині для зміни (тобто вам не потрібно синхронізувати декілька біт). Потім ця адреса передається до домену призначення (через одну з ваших ланцюгів синхронізатора), де вона порівнюється з адресою зчитування. Якщо у FIFO є дані, то їх можна зчитувати з пам'яті за допомогою порту годинника призначення. Адреса зчитування аналогічно кодується сірим кольором та надсилається назад до джерела через інший синхронізатор, щоб порт запису міг обчислити, чи є у FIFO пробіл

  4. Скидання сигналів - вони зазвичай використовують модифіковану версію синхронізатора в тому, що відомо як "Асинхронний запуск, синхронний пустель". У цій модифікованій версії введення даних до першого фліп-флопу прив’язується до GND, і замість цього вхідний сигнал скидання підключається до асинхронних заданих сигналів кожного фліп-флопу в синхронізаторі. Це призводить до отримання вихідного сигналу, який є повністю асинхронним, коли він виходить високо, але ланцюг синхронізатора забезпечує низький синхронний синхронізацію з цільовим призначенням шляхом проходження через нулі в ланцюзі регістрів.

    Цей тип синхронізатора жахливий для даних та контролю, але ідеально підходить для скидання сигналів. Якщо вся логіка призначення подає вихід цього ланцюга на асинхронний вхід для скидання будь-якого реєстру в домені, то метастабільність при затвердженні мало побоюється (навіть якщо це асинхронно), оскільки всі регістри вимушені до відомого стану. Тоді, коли сигнал скидання відпадає у вихідному домені, він синхронно деассерирует у доменному призначенні, тобто всі регістри виходять із скидання в одному і тому ж тактовому циклі (а не +/- 1 цикл, якщо це був асинхронний дезасерв).


Як видно з вищесказаного, зробити набагато складніше робити перехрещування доменного годинника, ніж просто наклеїти на сигнал 2 синхронізатора обертання. Точний метод, що використовується, залежить від програми.


На додаток до відповіді Тома, я хочу додати посилання на PoC , який має реалізацію для цих випадків. Документи синхронізатора доступні на RTD. На додаток до теорії ланцюжка 2 тригерів для основного 2-FF синхронізатора, PoC забезпечує спеціальні реалізації ( sync_Bits) для Filga Xilinx та Altera для поліпшення поведінки метастабільності. 2-FF синхронізатор використовується, наприклад, sync_Strobeдля створення більш складних синхронізаторів для імпульсів.
Paebbels

Дякуємо за детальне вступ до стратегій синхронізації. Ця картина з'явилася із "Техніки дизайну та перевірки домену годинника (CDC) та перевірки за допомогою systemverilog" від Clifford E. Cummings. Я розумію, що для однобітного сигналу ширина повинна бути не менше 1 тактового циклу + час установки + час утримування приймальної сторони, щоб безпечно пройти. На цьому малюнку цей критерій не задовольняється, оскільки імпульс адату відбирається зразками bclk лише один раз на його падаючому краю, що призводить до метастабільності bq1_dat.
фідель

... Як результат, зчитування bq1_dat у наступному висхідному краї bclk може бути або "0", або "1". Тож синхронізація на малюнку здається невдалою. Чи правий я?
фідель

@Paebbels Дякую за довідку. Поглянемо =)
fiedel

Ви повинні відредагувати це у своєму запитанні, а не публікувати його як відповідь, але по суті, так, ви можете або не можете отримати 1 на виході у цьому прикладі.
Том Карпентер

1

1) Використовуючи малюнок як приклад, aclk і bclk є асинхронними один для одного. Іншими словами, у них різні джерела годинника. Вони показують adat як дійсні дані, але синхронізовані лише для aclk. Тут починає грати синхронізатор bclk.

2) Цей креслення передбачає найгірший сценарій, коли bq1_dat є безладним результатом, оскільки bq1 FF вловлює лише частину кінця даних, створюючи метастабільний стан, на якому вихідний результат зазвичай є сміттям. Ось трюк. Bq2 має той самий bclk, що і bq1, але для проходження даних і відображення в bq2_dat потрібні 2 тактових цикли bclk.

3) Перший bclk захопив частину даних, що призвело до безладного виводу, але другий bclk піде на один тактовий цикл пізніше, достатньо часу для неоднозначних даних з bq1_dat, щоб перейти у високий або низький стан. Брудний імпульс bq1_dat тривав досить довго, щоб bq2 захопив дійсну логіку '1' (логіка висока) і передав її bq2_dat як дійсні та тепер синхронізовані дані (логіка висока).

4) Нижче за будь-яким годинником, що використовує bclk, будуть синхронізовані дані для роботи. Зауважте, що лише перший bclk FF мав справу з метастабільним станом . Вихід може бути логічно низьким, якби Адат був просто піко або нано секундами занадто пізно. Пам'ятайте, що ці трикотажні зразки випробовують дані, що вводяться лише на висхідній грані годинника. Те, що відбувається до або після висхідного краю, ігнорується.


Зауважте, що затримка bclk забезпечує лише ймовірнісний показник безпеки, а точна сума залежить як від технології FF, так і від періоду bclk. У деяких привітних випадках може знадобитися 3 або навіть більше етапів, щоб знизити рівень помилок до прийнятних рівнів.
WhatRoughBeast

@WhatRoughBeast. Я знаю, що в гіршому випадку потрібно багато етапів синхронізації, а також цифрова фільтрація. Очевидно, моя відповідь була надто простою.
Sparky256

@ Sparky256 Що мене спантеличує 3) у вашому коментарі. Як bq2 може захопити '1', коли bq1_dat знаходиться в метастабільному стані?
фідель

@fiedel, дві речі сприяють тому, що bq2 зможе зробити чистий вхід (принаймні). По-перше, метастабільний стан повинен зберігатися протягом повного циклу годин. По-друге, метастабільне значення (псевдосередина-рейка) від bq1 може бути малоймовірним (або оптимізованим, щоб уникнути), щоб опинитися у вікні, що також призведе до метастабільності bq2 - але в основному це перше з них. Скажімо, технологія призводить до 5% шансів метастабільності зберігатися досить довго. етап синхронізації 3-FF зменшить це до 0,25%, оскільки обидві клітини мають вийти з ладу. Мессі на практиці добре виражене експоненціальне відхилення від майже стабільного стану.
Шон Хуліхане

@SeanHoulihane. Дякую за пояснення. Термін "піднімаючий край" дехто бентежить, тому що вікно прийняття даних (метастабільне або стабільне) знаходиться в половині шляху піднімаючої межі, триває лише кілька піко або наносекунд. Тільки в цей момент вводяться дані в логіці "1" або "0", є метастабільною або стабільною, залежно від рівня її напруги порівняно з порогом ІС для логіки 1 або 0.
Sparky256
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.