des00 25 16 февраля, 2022 Опубликовано 16 февраля, 2022 · Жалоба До кучи, @SM лет 14 назад, выкладывал на форум детектор метастабильности для своего хитрого процессора. ЕМНП там в теме было обсуждение и выкладывание информации по метастабильности по разным технологиям. Можно попробовать поискать, но очень давно это было Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 8 16 февраля, 2022 Опубликовано 16 февраля, 2022 · Жалоба 2 часа назад, Мур сказал: Понимаю. Тут речь о жесткой логике (это для нашего XOR), которая уровни выше 0,8В ("серая" зона) для 5 вольтовой логики воспринимает как лог.1... Хотелось бы увидеть картинку для моп структуры. Ибо ттл структура для плис не актуальна. Помниться на 133 серии 5 вольтовой ттл логике на висячем входе был уровень 1.3 В и уверенно воспринимался как лог.1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 33 16 февраля, 2022 Опубликовано 16 февраля, 2022 · Жалоба 3 hours ago, des00 said: Ну, у того же спартана 3 го это время было порядка сотен нс, софт то общий для всех. Таблица режимов DRC совсем не показатель. Вы можете открыть дизайн для последних US+ и посмотреть какое MBTF считается для CDC цепочек. Команда report_synchronizer_mtbf. Только вот эта команда один триггер за CDC не считает. Даже для US+. А для цепочки минимальной длинны 2 у меня получаются во такие цифры. При этом 10^12 по умолчанию в Vv считается как "../ маловато будет". Spoiler 100 MHz -> 100 MHz +----------+-----------------+------------------------+-----------------------+-------------------------+----------------+------------------+---------------+--------------+ | CDC Path | MTBF | Data Toggle Rate(Mtrs) | Data Sample Rate(Mhz) | Total Settling Time(ns) | Sending Domain | Receiving Domain | Number Stages | CDC Net Name | +----------+-----------------+------------------------+-----------------------+-------------------------+----------------+------------------+---------------+--------------+ | 1 | 8.57e+192 years | 6.25 | 100 | 19.4 | CLK1 | CLK2 | 2 | din_r | +----------+-----------------+------------------------+-----------------------+-------------------------+----------------+------------------+---------------+--------------+ 100 MHz -> 500 MHz +----------+----------------+------------------------+-----------------------+-------------------------+----------------+------------------+---------------+--------------+ | CDC Path | MTBF | Data Toggle Rate(Mtrs) | Data Sample Rate(Mhz) | Total Settling Time(ns) | Sending Domain | Receiving Domain | Number Stages | CDC Net Name | +----------+----------------+------------------------+-----------------------+-------------------------+----------------+------------------+---------------+--------------+ | 1 | 4.38e+23 years | 6.25 | 500 | 3.35 | CLK1 | CLK2 | 2 | din_r | +----------+----------------+------------------------+-----------------------+-------------------------+----------------+------------------+---------------+--------------+ +----------+----------------+------------------------+-----------------------+-------------------------+----------------+------------------+---------------+--------------+ | CDC Path | MTBF | Data Toggle Rate(Mtrs) | Data Sample Rate(Mhz) | Total Settling Time(ns) | Sending Domain | Receiving Domain | Number Stages | CDC Net Name | +----------+----------------+------------------------+-----------------------+-------------------------+----------------+------------------+---------------+--------------+ | 1 | 5.48e+22 years | 50 | 500 | 3.35 | CLK1 | CLK2 | 2 | din_r | +----------+----------------+------------------------+-----------------------+-------------------------+----------------+------------------+---------------+--------------+ 500 MHz -> 602 MHz +----------+----------------+------------------------+-----------------------+-------------------------+----------------+------------------+---------------+--------------+ | CDC Path | MTBF | Data Toggle Rate(Mtrs) | Data Sample Rate(Mhz) | Total Settling Time(ns) | Sending Domain | Receiving Domain | Number Stages | CDC Net Name | +----------+----------------+------------------------+-----------------------+-------------------------+----------------+------------------+---------------+--------------+ | 1 | 4.98e+15 years | 31.2 | 602 | 2.67 | CLK1 | CLK2 | 2 | din_r | +----------+----------------+------------------------+-----------------------+-------------------------+----------------+------------------+---------------+--------------+ +----------+----------------+------------------------+-----------------------+-------------------------+----------------+------------------+---------------+--------------+ | CDC Path | MTBF | Data Toggle Rate(Mtrs) | Data Sample Rate(Mhz) | Total Settling Time(ns) | Sending Domain | Receiving Domain | Number Stages | CDC Net Name | +----------+----------------+------------------------+-----------------------+-------------------------+----------------+------------------+---------------+--------------+ | 1 | 6.22e+14 years | 250 | 602 | 2.67 | CLK1 | CLK2 | 2 | din_r | +----------+----------------+------------------------+-----------------------+-------------------------+----------------+------------------+---------------+--------------+ 500 MHz -> 700 MHz +----------+----------------+------------------------+-----------------------+-------------------------+----------------+------------------+---------------+--------------+ | CDC Path | MTBF | Data Toggle Rate(Mtrs) | Data Sample Rate(Mhz) | Total Settling Time(ns) | Sending Domain | Receiving Domain | Number Stages | CDC Net Name | +----------+----------------+------------------------+-----------------------+-------------------------+----------------+------------------+---------------+--------------+ | 1 | 1.18e+11 years | 31.2 | 699 | 2.25 | CLK1 | CLK2 | 2 | din_r | +----------+----------------+------------------------+-----------------------+-------------------------+----------------+------------------+---------------+--------------+ +----------+----------------+------------------------+-----------------------+-------------------------+----------------+------------------+---------------+--------------+ | CDC Path | MTBF | Data Toggle Rate(Mtrs) | Data Sample Rate(Mhz) | Total Settling Time(ns) | Sending Domain | Receiving Domain | Number Stages | CDC Net Name | +----------+----------------+------------------------+-----------------------+-------------------------+----------------+------------------+---------------+--------------+ | 1 | 1.48e+10 years | 250 | 699 | 2.25 | CLK1 | CLK2 | 2 | din_r | +----------+----------------+------------------------+-----------------------+-------------------------+----------------+------------------+---------------+--------------+ 500 MHz -> 600 MHz XOR и ENA на LUT +----------+------------+------------------------+-----------------------+-------------------------+----------------+------------------+---------------+--------------+ | CDC Path | MTBF | Data Toggle Rate(Mtrs) | Data Sample Rate(Mhz) | Total Settling Time(ns) | Sending Domain | Receiving Domain | Number Stages | CDC Net Name | +----------+------------+------------------------+-----------------------+-------------------------+----------------+------------------+---------------+--------------+ | 1 | UNDEFINED | 28.9 | 602 | INFINITE | CLK2 | CLK2 | 2 | p_3_out[0] | +----------+------------+------------------------+-----------------------+-------------------------+----------------+------------------+---------------+--------------+ 500 MHz -> 600 MHz XOR и ENA на выделенный пин триггера ENA +----------+------------+------------------------+-----------------------+-------------------------+----------------+------------------+---------------+--------------+ | CDC Path | MTBF | Data Toggle Rate(Mtrs) | Data Sample Rate(Mhz) | Total Settling Time(ns) | Sending Domain | Receiving Domain | Number Stages | CDC Net Name | +----------+------------+------------------------+-----------------------+-------------------------+----------------+------------------+---------------+--------------+ | 1 | UNDEFINED | 31.2 | 602 | INFINITE | CLK1 | CLK2 | 2 | din_r | +----------+------------+------------------------+-----------------------+-------------------------+----------------+------------------+---------------+--------------+ Кстати Vv конструкцию с XOR выбрасывает при синтезе (если жестко атрибутам не прибить), ведь с точки зрения логики это эквивалентно обычному D триггеру. Если прибить то варианта с XOR вообще за CDC не считается для еще и ругается, что впрочем и ожидаемо: Source Clock: CLK1 Destination Clock: CLK2 CDC Type: No Common Primary Clock Row ID Severity Description Depth Exception Source (From) Destination (To) --- ------ -------- ---------------------------------------------- ----- ------------------- ------------- ---------------- 1 CDC-1 Critical 1-bit unknown CDC circuitry 0 Asynch Clock Groups din_r_reg/C cdc_reg_1/CE 2 CDC-15 Warning Clock enable controlled CDC structure detected 0 Asynch Clock Groups din_r_reg/C cdc_reg_1/D P.S. А вот так выглядит расчет для 10 и 100 таких цепочек Spoiler 600 -> 700 Mhz +----------+----------------+------------------------+-----------------------+-------------------------+----------------+------------------+---------------+----------------+ | CDC Path | MTBF | Data Toggle Rate(Mtrs) | Data Sample Rate(Mhz) | Total Settling Time(ns) | Sending Domain | Receiving Domain | Number Stages | CDC Net Name | +----------+----------------+------------------------+-----------------------+-------------------------+----------------+------------------+---------------+----------------+ | 1 | 2.11e+10 years | 31.2 | 699 | 2.16 | CLK1 | CLK2 | 2 | g_bit[0].din_r | | 2 | 2.88e+10 years | 31.2 | 699 | 2.18 | CLK1 | CLK2 | 2 | g_bit[1].din_r | | 3 | 3.92e+10 years | 31.2 | 699 | 2.19 | CLK1 | CLK2 | 2 | g_bit[2].din_r | | 4 | 5.13e+08 years | 31.2 | 699 | 1.98 | CLK1 | CLK2 | 2 | g_bit[3].din_r | | 5 | 5.96e+10 years | 31.2 | 699 | 2.21 | CLK1 | CLK2 | 2 | g_bit[4].din_r | | 6 | 5.89e+07 years | 31.2 | 699 | 1.88 | CLK1 | CLK2 | 2 | g_bit[5].din_r | | 7 | 1.31e+10 years | 31.2 | 699 | 2.14 | CLK1 | CLK2 | 2 | g_bit[6].din_r | | 8 | 5.58e+10 years | 31.2 | 699 | 2.21 | CLK1 | CLK2 | 2 | g_bit[7].din_r | | 9 | 4.21e+10 years | 31.2 | 699 | 2.2 | CLK1 | CLK2 | 2 | g_bit[8].din_r | | 10 | 1.79e+10 years | 31.2 | 699 | 2.16 | CLK1 | CLK2 | 2 | g_bit[9].din_r | +----------+----------------+------------------------+-----------------------+-------------------------+----------------+------------------+---------------+----------------+ * Summary: Overall Synchronizer MTBF:5.2e+07 years ... | 96 | 1.75e+10 years | 31.2 | 699 | 2.15 | CLK1 | CLK2 | 2 | g_bit[96].din_r | | 97 | 1.57e+10 years | 31.2 | 699 | 2.15 | CLK1 | CLK2 | 2 | g_bit[97].din_r | | 98 | 2.19e+10 years | 31.2 | 699 | 2.17 | CLK1 | CLK2 | 2 | g_bit[98].din_r | | 99 | 1.97e+11 years | 31.2 | 699 | 2.27 | CLK1 | CLK2 | 2 | g_bit[99].din_r | | 100 | 5.55e+09 years | 31.2 | 699 | 2.1 | CLK1 | CLK2 | 2 | g_bit[9].din_r | +----------+----------------+------------------------+-----------------------+-------------------------+----------------+------------------+---------------+-----------------+ * Summary: Overall Synchronizer MTBF:2.02e+07 years Заметьте как "гуляет" MBTF от актуального Setting time. Которое как я понимаю зависит от clock skew и задержек роутинга между регистрами цепочки. 3 hours ago, Мур said: Тут речь о жесткой логике (это для нашего XOR), которая уровни выше 0,8В ("серая" зона) для 5 вольтовой логики воспринимает как лог.1... Даже для обычной TTL логики производитель гарантировал что все что <0.8 это точно 0, а >2.4 это точно 1. А вот как будет трактоваться все что между этим производитель не гарантировал. Может и 1, а может и линейный режим с генерацией или усилением помех из питания. А уж гадать как уровень метастабильности трактовать внутри FPGA ... это надо к бабке гадалке на прием идти Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Мур 1 16 февраля, 2022 Опубликовано 16 февраля, 2022 · Жалоба 2 hours ago, RobFPGA said: Даже для обычной TTL логики производитель гарантировал что все что <0.8 это точно 0, а >2.4 это точно 1. А вот как будет трактоваться все что между этим производитель не гарантировал. Может и 1, а может и линейный режим с генерацией или усилением помех из питания. А уж гадать как уровень метастабильности трактовать внутри FPGA ... это надо к бабке гадалке на прием идти Сразу видно, что вы не практик!... "Железо" четко реагирует на "Серый уровень" как на не ноль!... А на эпюрах с осциллографа бесполезно ожидать реакции от логических элементов, если не достигнут уровень 0.8В. Так и останется лог1. Как буд-то там все 5В! Можно известным методом ввести элемент в активную зону усиления, но это уже аналоговая техника. Так что смело можно считать доминантой в лог.1 все что выше 0.8В. Первое, что делает наладчик,- удостоверяется, что есть верный лог.0! Если нет,- жди проблем... 3 hours ago, sazh said: Хотелось бы увидеть картинку для моп структуры. Ибо ттл структура для плис не актуальна. Помниться на 133 серии 5 вольтовой ттл логике на висячем входе был уровень 1.3 В и уверенно воспринимался как лог.1 Совершенно верно! Именно так и было... Может такое сравнение не уместно, но думаю, что переходы из 0 в 1 и из 1 в 0 имеют также разные величины. Насыщение и отсечка у транзистора сильно влияют на симметрию перехода... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 33 16 февраля, 2022 Опубликовано 16 февраля, 2022 · Жалоба 1 hour ago, Мур said: Сразу видно, что вы не практик!... Конечно сейчас "не видно", я с 5-вольтовой TTL последний раз работал наверное в конце 90-х, а начинал в начале 80. Так что можете считать в промежутке от 0.8 до 2.4 есть жизнь (как на Марсе). Но это никоим образом не меняет того что костыль с XOR нельзя использовать для защиты от метастабильности. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 17 февраля, 2022 Опубликовано 17 февраля, 2022 · Жалоба 12 hours ago, RobFPGA said: Вы можете открыть дизайн для последних US+ и посмотреть какое MBTF считается для CDC цепочек. Команда report_synchronizer_mtbf. Только вот эта команда один триггер за CDC не считает. Даже для US+. Да нет у меня таких чипов в работе и на компе. Нищеброды мы) Подозреваю что команда ищет синхронизаторы по паттерну, а паттерн 2 подряд триггера. От того и такое поведение. По хорошему стенд надо собирать. Ну или можно на ieee порыться, по любому кто-то из студентов писал диссер с исследованиями современных технологий. А цифры интересные, даже в худшем случае, 10^7 лет, это при среднем сроке жизни изделия 10-20 лет непрерывной работы) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Мур 1 17 февраля, 2022 Опубликовано 17 февраля, 2022 · Жалоба 9 hours ago, RobFPGA said: Конечно сейчас "не видно", я с 5-вольтовой TTL последний раз работал наверное в конце 90-х, а начинал в начале 80. Так что можете считать в промежутке от 0.8 до 2.4 есть жизнь (как на Марсе). Но это никоим образом не меняет того что костыль с XOR нельзя использовать для защиты от метастабильности. Я не много раньше... 77! Считаю не уместным сравнение с TTL . Но это намеренно, чтобы усвоили, что на самом деле техническая система на ПЛИС не симметрична по уровням 1\0. И есть разные времена. Не стоит мой костыль считать универсальным. При некотором воображении в нем можно увидеть те же решения, которые вы признали (см. удаленный Т-триггер). Вам рекомендую нарисовать временную диаграмму критичного поведения (в вашем понимании) и выставить тут для обоих случаев переходов. Это будет лучше любых текстов. Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 17 февраля, 2022 Опубликовано 17 февраля, 2022 · Жалоба Just now, Мур said: Не стоит мой костыль считать универсальным. При некотором воображении в нем можно увидеть те же решения, которые вы признали (см. удаленный Т-триггер). Вам рекомендую нарисовать временную диаграмму критичного поведения (в вашем понимании) и выставить тут для обоих случаев переходов. Это будет лучше любых текстов. @RobFPGA тоже прав, как и вы. Ваше решение имеет место быть, но и диапазон применения у него тоже ограничен) Да и вообще, есть у меня проекты, где настройки задаются в поле регистров на частоте проца, асинхронной всему проекту. Никакой дополнительной логики я не использую. Просто передаю эти константы) ну выпадет пара отсчетов в цифровом фильтре, никакой беды в моих проектах не сделает) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 33 17 февраля, 2022 Опубликовано 17 февраля, 2022 · Жалоба 2 hours ago, des00 said: ... Подозреваю что команда ищет синхронизаторы по паттерну, а паттерн 2 подряд триггера. От того и такое поведение. Как раз Vv находит все ситуации переходов между клоками. Только вот не все считается правильным CDC. Логика на пути от регистра на одном клоке до регистра на другом (цепь CDC) - ошибка CDC. Fanout >1 в этой же цепи - ошибка CDC. Цепочка синхронизатора <2 - "это вообще что такое" ? ... Я просто как раз сейчас в Vv "чищу" один старый но большой проект как раз на предмет CDC. В том числе и от похожих "оптимизаций" типа XOR. 3 hours ago, des00 said: Просто передаю эти константы) ну выпадет пара отсчетов в цифровом фильтре, никакой беды в моих проектах не сделает) Так тоже можно делать если четко понимаешь чем это грозит. А то вдруг потом в набор таких констант попадает порог для какого ни будь счетчика в FSM из другого клока и начинается "веселье" ... 3 hours ago, des00 said: А цифры интересные, даже в худшем случае, 10^7 лет, это при среднем сроке жизни изделия 10-20 лет непрерывной работы) Это цифры можно считать идеальными. Пустой vu09p-2 чип, только синхронизаторы. Но вот зависят они как видно от реальных задержек в цепочке синхронизации. Соответвенно если запас по setup|hold , будет минимальным то это может сильно уменьшить время MBTF. Ну и если таких переходов в проекте много то это тоже снижает это время. Вот и получается что одним триггером делать CDC ну очень стремно, особенно для высоких целевых клоков. 3 hours ago, Мур said: При некотором воображении в нем можно увидеть те же решения, которые вы признали (см. удаленный Т-триггер). При "богатом" воображении увидеть все что угодно. Но сути реальных вещей это увы не меняет. Тот же Т-триггер работает как toggle CDC только через обычный синхронизатор. А без синхронизатора как CDC не работает. 3 hours ago, Мур said: Вам рекомендую нарисовать временную диаграмму критичного поведения (в вашем понимании) и выставить тут для обоих случаев переходов. Это будет лучше любых текстов. Тоже советую и вам. И сравнить поведение конструкции XOR с обычным D триггером. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Мур 1 17 февраля, 2022 Опубликовано 17 февраля, 2022 · Жалоба Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 33 17 февраля, 2022 Опубликовано 17 февраля, 2022 · Жалоба 28 minutes ago, Мур said: ... И что тут где? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Мур 1 17 февраля, 2022 Опубликовано 17 февраля, 2022 · Жалоба Есть схема(триггер + искл.ИЛИ). Есть обозначения сигналов. Можно видеть временные диаграммы для 2х случаев метастабильного поведения (именно критичные случаи). Вы просили сигнал с выхода искл.ИЛИ? Это точка Е. Что тут не понятного? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 33 17 февраля, 2022 Опубликовано 17 февраля, 2022 · Жалоба 4 hours ago, Мур said: yfЕсть схема(триггер + искл.ИЛИ). Есть обозначения сигналов. Можно видеть временные диаграммы для 2х случаев метастабильного поведения (именно критичные случаи). Вы просили сигнал с выхода искл.ИЛИ? Это точка Е. Что тут не понятного? Я просил сравнить поведение ваше схемы из вашего кода с поведением обычного синхронизатора на D триггере. На приведенной картинке не совсем то что в вашем коде. Но даже так, на верхней как я понял вы показываете случай когда метастабильность длиннее такта клока. Так? И что будет при этом со следующим триггером в схеме ? Скорее все так как на выходе out2. Вот и получается - XOR от попадания триггера в метастабильность не защищает. Если триггер попал в метастабильность и не вышел из нее до следующего такта то эта метастабильность идет дальше со всеми вытекающими печальными последствиями, ведь вы думаете что эта чудесная схема "защитит" от метастабильности. Если же триггер вывалился из метастабильности чуть раньше чем следующий клок то он .... снова туда может попасть ведь есть задержка от выхода триггера через XOR на вход E. И пока сигнал с выхода на вход доберется то может попасть аккурат на новый фронт. Пример розовым нарисовал, чтобы не страшно было Заодно пририсовал там и поведение простого D триггера из обычной цепочки синхронизации. И чем это поведение отличается от вашей схемы? Вот и получается смысла в такой схеме для борьбы с метастабильность нет! Если не хуже... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Мур 1 17 февраля, 2022 Опубликовано 17 февраля, 2022 · Жалоба 56 minutes ago, RobFPGA said: Заодно пририсовал там и поведение простого D триггера из обычной цепочки синхронизации. И чем это поведение отличается от вашей схемы? Вот и получается смысла в такой схеме для борьбы с метастабильность нет! Если не хуже... Итак, Есть отличие только в одном,- передающая сторона не управляет моментом записи нового результата. Он выявляется по смене уровня. И этот процесс может длиться бесконечно при неудачных вбросах, когда метастабильность не уходит. Достоинство в самом стробировании\разрешении, которое дозировано адаптивно результату на выходе. Пусть это мелочь, но это потребление. Спасибо. Разобрался. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 8 17 февраля, 2022 Опубликовано 17 февраля, 2022 · Жалоба 4 часа назад, Мур сказал: Итак, Есть отличие только в одном,- передающая сторона не управляет моментом записи нового результата. Он выявляется по смене уровня. И этот процесс может длиться бесконечно при неудачных вбросах, когда метастабильность не уходит. Достоинство в самом стробировании\разрешении, которое дозировано адаптивно результату на выходе. Пусть это мелочь, но это потребление. Спасибо. Разобрался. Вы привели графический вариант, который отличается от вашего проекта rg_ch. А функционально Ваш проект - это д триггер, реализованный на д триггере со входом разрешения и xor в цепи обратной связи. Синтезатор его должен в д триггер превратить. И где тут борьба с метастабильностью. Добавьте еще триггер, будет как в старые добрые времена. Кстати хочу по VHDL проехаться. --signal tg_s : std_logic := '0'; --signal one_tic : std_logic := '0'; Давать указание симулятору - выход логики в ноль установить ? Он конечно проигнорировал, но ему по барабану, сигнал и сигнал. У меня получилось так. Разницы не увидел. module rg_ch ( input clk, change_a, change_b, output [1:0] rg_oa, rg_ob ); reg tg_sa = 1'b0; reg tg_sb = 1'b1; reg [1:0] rg_dff = 2'b10; wire one_tica = change_a ^ tg_sa, one_ticb = change_b ^ tg_sb; always @(posedge clk) begin if(one_tica) tg_sa <= change_a; if(one_ticb) tg_sb <= change_b; rg_dff <= {change_b, change_a}; end assign rg_oa = {tg_sb, tg_sa}, rg_ob = rg_dff; endmodule Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться