RobFPGA 28 15 февраля, 2022 Опубликовано 15 февраля, 2022 · Жалоба 4 minutes ago, Мур said: Замучила метастабильность по данным? Такими костылями ничего не вылечить, разве что как "ходить" правильно забыть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Мур 1 15 февраля, 2022 Опубликовано 15 февраля, 2022 · Жалоба 3 hours ago, RobFPGA said: Такими костылями ничего не вылечить, разве что как "ходить" правильно забыть. Спасибо. Понимаю, что не всегда. Для регистра управления вполне. Для непрерывного потока "такое низзя" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 28 15 февраля, 2022 Опубликовано 15 февраля, 2022 · Жалоба 16 minutes ago, Мур said: Для регистра управления вполне. Такое можно применять везде и всегда где только хочется НО только не для борьбы с метастабильностью! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Мур 1 16 февраля, 2022 Опубликовано 16 февраля, 2022 · Жалоба 11 hours ago, RobFPGA said: Такое можно применять везде и всегда где только хочется НО только не для борьбы с метастабильностью! Ой-ли! На границе между доменами тактирования создается картина нарушения времен удержания\захвата (источник нарушения предсказуемого срабатывания триггеров). Предложенное решение, если не с первой записи, но со второй точно пропишет триггера регистра в заказанное значение. Ну а если разные разряды брошены на свободную разводку без привязки к LLR , то отдельные разряды могут на такт "отставать".... Ну вы поняли! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 23 16 февраля, 2022 Опубликовано 16 февраля, 2022 · Жалоба 13 hours ago, Мур said: Замучила метастабильность по данным? Готовых решений полно на edn: Synchronizer techniques for multi-clock domain SoCs & FPGAs 10 design issues to avoid during clock domain crossing Get those clock domains in sync И в конце каждой статьи есть ещё ссылки на похожие статьи по этой же теме. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 28 16 февраля, 2022 Опубликовано 16 февраля, 2022 · Жалоба 2 hours ago, Мур said: если не с первой записи, но со второй точно пропишет триггера регистра в заказанное значение Так и обычный триггер в синхронизаторе это же делает, если не на этом такте так на следующем. Вы теряете суть метастабильной. Не важно на каком входе возникнет нарушение setup/hold (на D или на ENA,...) чтобы триггер забрался на вершину метастабильности. А вы своей схеме создаете все условия для этого. Из за обратной связи и логики XOR в цепи ENA создается дополнительный путь могущий приводить к возникновению и распространению метастабильности. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Мур 1 16 февраля, 2022 Опубликовано 16 февраля, 2022 · Жалоба 1 hour ago, RobFPGA said: Так и обычный триггер в синхронизаторе это же делает, если не на этом такте так на следующем. Вы теряете суть метастабильной. Не важно на каком входе возникнет нарушение setup/hold (на D или на ENA,...) чтобы триггер забрался на вершину метастабильности. А вы своей схеме создаете все условия для этого. Из за обратной связи и логики XOR в цепи ENA создается дополнительный путь могущий приводить к возникновению и распространению метастабильности. А внимательно посмотреть?.. 1. Все происходит в одной макроячейке. 2. Тут нет связи с источником события кроме как по единственной линии данных и вы тут верно заметили - обычный триггер синхронизатора, но его привязка идет в точке приема, где этот триггер и находится. Такое решение не требует второго триггера, как в стандартном решении. Такой способ может протянуть через всю ПЛИС некое событие, а с учетом большого количества пересекаемых доменов тактирования. Тут остается оценить фиксированную латентность. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 28 16 февраля, 2022 Опубликовано 16 февраля, 2022 · Жалоба 1 minute ago, Мур said: А внимательно посмотреть?.. 1. Я смотрел внимательно (на сколько это возможно во вырви-глаз VHDL коде ) И вот что я увидел - фактически вы предлагаете делать обычный D триггер с разрешением на запись по несовпадению входа и выходы этого же триггера. При этом вход (din) асинхронен always @(posedge clk) begin if ((din ^ dou)==1'b1) begin dou <= din; end end Отсюда следует что метастабильность может возникнуть при нарушении setup/hold как на входе D триггера так и на входе ENA этого же триггера. То есть крит. путей уже в 2 раза больше. И если реализация после синтеза реально будет использовать отдельный ENA порт на триггере то разные задержки этих путей только увеличивают окно в котором может возникнуть метастабильность. Если же логика ENA будет реализована на LUT то обратная связь с выхода триггера в состоянии метастабильности IMHO не будет способствует быстрому выходу последнего в нормальный режим. Да и наивно считать что логически операции могут применятся и быть истинными для операндов в состоянии метастабильноасти Да еще и множественные пути с выхода этого триггера к разным получателям будут создавать условия для неопределенной работы логики дизайна. Так что как говорится "... хотели как лучше, а получилось как всегда" А что вы видите в этой схеме? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Мур 1 16 февраля, 2022 Опубликовано 16 февраля, 2022 · Жалоба 1 minute ago, RobFPGA said: А что вы видите в этой схеме? Мы все знаем классическую схему перехода между разными зонами тактирования( тем более частотами) на основе Т-триггера. И там переворот логического уровня, который как раз сообщает о моменте некой активности, а на приемной стороне выделялся однотиковый сигнал, который и отрабатывал уже в другой сетке тактирования эту активность. Латентность в итоге не малая(+2 триггера). Тут еще проще! Дифференциатор (искл ИЛИ) обнаруживает расхождение в уровнях и формирует разрешение срабатывания триггера в произвольный (грубо говоря) момент и если он не сработал, по вине вхождения в метастабильность, то это разрешение будет держаться и на следующий такт. Главное - поменять состояние! По построению макроячейки у каждого триггера есть логика на входе и из неё как раз и формируется XOR( больше нет ничего тяжелого, чтобы цеплять соседей!) и все эти страсти локализуются в месте одной макроячейки. Что может быть приятней иметь гарантированную установку повтора заказанного уровня на входе от удаленного источника? Естественно исполнителя событий в ответ на новый уровень надо размещать рядом с этим триггером! Такое решение считаю проще чем с применением удаленного Т-триггера! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 28 16 февраля, 2022 Опубликовано 16 февраля, 2022 · Жалоба 22 minutes ago, Мур said: Тут еще проще! Дифференциатор (искл ИЛИ) обнаруживает расхождение в уровнях и формирует разрешение срабатывания триггера в произвольный (грубо говоря) момент и если он не сработал, по вине вхождения в метастабильность, то это разрешение будет держаться и на следующий такт. C какой это стати будет держатся разрешение (и вообще будет работать логика XOR) если на вход у нее приходит неопределенный сигнал. Ведь ваш триггер уже находится в метастабильном состоянии(и не 0 и не 1)! Какое при этом значение приходит на вход XOR? А какое будет выходе XOR? Поэтому я и говорю что вы теряете суть метастабильности. В этих условиях нельзя говорить о логических операция так как операнды находятся в неопределённом состоянии. Поэтому и требование такое что нужна синхронизация на цепочке триггеров прежде чем вы с высокой долей вероятности можете считать выход стабильными и соответствующим логическим уровням. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Мур 1 16 февраля, 2022 Опубликовано 16 февраля, 2022 · Жалоба 7 minutes ago, RobFPGA said: C какой это стати будет держатся разрешение (и вообще будет работать логика XOR) если на вход у нее приходит неопределенный сигнал. Quote Для регистра управления вполне. Для непрерывного потока "такое низзя" (читай - максимальная динамика!) На вход этого триггера приходит ПОТЕНЦИАЛЬНЫЙ(определенный!) сигнал. Я же заранее говорил, что уровень на входе! (Т-триггер это делитель) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 28 16 февраля, 2022 Опубликовано 16 февраля, 2022 · Жалоба 3 minutes ago, Мур said: а вход этого триггера приходит ПОТЕНЦИАЛЬНЫЙ(определенный!) сигнал. Я же заранее говорил, что уровень на входе! (Т-триггер это делитель) На вход триггера приходит сигнал асинхронно к тактовой. Значит возможен момент когда сигнал изменится в момент фронта клока, с нарушением setup|hold. Что при этом произойдет с триггером? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Мур 1 16 февраля, 2022 Опубликовано 16 февраля, 2022 · Жалоба 1 minute ago, RobFPGA said: На вход триггера приходит сигнал асинхронно к тактовой. Значит возможен момент когда сигнал изменится в момент фронта клока, с нарушением setup|hold. Что при этом произойдет с триггером? Совершенно верно! В худшем случае влетит в метастабильное состояние, а на следующем такте окончательно определится, поскольку все выдержки T\H будут уже соблюдены! Расхождения по тактированию одной частотой при прохождению границы домена как раз и будут провоцировать подобные события.. В лучшем - сразу произойдет повтор уровня на ближайшем такте.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 28 16 февраля, 2022 Опубликовано 16 февраля, 2022 · Жалоба 11 minutes ago, Мур said: Совершенно верно! В худшем случае влетит в метастабильное состояние Вот именно - и это состояние убивает вашу идею с XOR. 11 minutes ago, Мур said: а на следующем такте окончательно определится Так это и обычный триггер в цепочке синхронизации делает. Если попадает в состояние метастабильности, то либо сам выходит из него (до момента следующего клока), либо следующим тактом устанавливается если сигнал на входе стабильный. В чем тогда нужда XOR (да еще и неработающего)? При этом если первый триггер не успеет выйти из состояния метестабильности до момента следующего клока (триггер медленный или клок быстрый) то следующий триггер тоже может попасть в состояние метастабильности! Но с меньшей вероятностью. Отсюда и необходимость цепочки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Мур 1 16 февраля, 2022 Опубликовано 16 февраля, 2022 · Жалоба 1 minute ago, RobFPGA said: Вот именно - и это состояние убивает вашу идею с XOR. Так это и обычный триггер в цепочке синхронизации делает. Если попадает в состояние метастабильности, то либо сам выходит из него (до момента следующего клока), либо следующим тактом устанавливается если сигнал на входе стабильный. В чем тогда нужда XOR? 1. XOR - способ выявить разные уровни. Время его активности будет в активе до перекидывания триггера! 2. И не нужно будет дополнительных триггеров! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться