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

Схемотехнические трюки для ПЛИСоводов

4 minutes ago, Мур said:

Замучила метастабильность по данным? 

Такими  костылями  ничего не  вылечить, разве что как "ходить" правильно забыть. :wacko2: 

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


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

3 hours ago, RobFPGA said:

Такими  костылями  ничего не  вылечить, разве что как "ходить" правильно забыть. :wacko2: 

Спасибо.  Понимаю, что не всегда.   Для регистра управления вполне.  Для непрерывного потока "такое низзя"

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


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

16 minutes ago, Мур said:

 Для регистра управления вполне.

Такое можно применять везде и всегда где только хочется  НО только не для борьбы с метастабильностью!    

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


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

11 hours ago, RobFPGA said:

Такое можно применять везде и всегда где только хочется  НО только не для борьбы с метастабильностью!    

Ой-ли!   На границе между доменами тактирования создается картина нарушения времен удержания\захвата (источник нарушения предсказуемого срабатывания триггеров). Предложенное решение, если не с первой записи, но со второй точно пропишет триггера регистра в заказанное значение. Ну а если разные разряды брошены на свободную разводку без привязки к LLR , то отдельные разряды могут на такт "отставать"....  Ну вы поняли!

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


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

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

 

И в конце каждой статьи есть ещё ссылки на похожие статьи по этой же теме.

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


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

2 hours ago, Мур said:

если не с первой записи, но со второй точно пропишет триггера регистра в заказанное значение

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

Вы теряете суть метастабильной. Не важно на каком входе возникнет нарушение setup/hold (на D или на ENA,...) чтобы триггер забрался на вершину метастабильности.   
А вы своей схеме создаете все условия для этого.  Из за обратной связи и  логики XOR в цепи ENA создается дополнительный путь могущий приводить к возникновению и распространению метастабильности.   

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


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

1 hour ago, RobFPGA said:

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

Вы теряете суть метастабильной. Не важно на каком входе возникнет нарушение setup/hold (на D или на ENA,...) чтобы триггер забрался на вершину метастабильности.   
А вы своей схеме создаете все условия для этого.  Из за обратной связи и  логики XOR в цепи ENA создается дополнительный путь могущий приводить к возникновению и распространению метастабильности.   

А внимательно посмотреть?..  1. Все происходит в одной макроячейке. 2. Тут нет связи с источником события кроме как по единственной линии данных и вы тут верно заметили - обычный триггер синхронизатора, но его привязка идет в точке приема, где этот триггер и находится.

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

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


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

1 minute ago, Мур said:

А внимательно посмотреть?..  1.

Я  смотрел  внимательно  (на сколько это возможно во вырви-глаз VHDL коде :cray:
И вот что я увидел - фактически вы предлагаете  делать обычный  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 не будет способствует быстрому выходу последнего в нормальный режим.
Да и наивно считать что логически операции могут применятся и быть истинными для операндов в состоянии метастабильноасти :wacko2:
Да еще и множественные пути с выхода этого триггера к разным получателям будут создавать условия для неопределенной работы логики дизайна.
Так что как говорится "... хотели как лучше, а получилось как всегда" :unknw:

А что вы видите в этой схеме? 

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


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

1 minute ago, RobFPGA said:

А что вы видите в этой схеме? 

Мы все знаем классическую схему перехода между разными зонами тактирования( тем более частотами) на основе Т-триггера.

И там переворот логического уровня, который как раз сообщает о моменте некой активности, а на приемной стороне выделялся однотиковый сигнал, который и отрабатывал уже в другой сетке тактирования эту активность. Латентность в итоге не малая(+2 триггера).

Тут еще проще! Дифференциатор (искл ИЛИ) обнаруживает расхождение в уровнях и формирует разрешение срабатывания триггера в произвольный (грубо говоря) момент и если он не сработал, по вине вхождения в метастабильность, то это разрешение будет держаться и на следующий такт. Главное - поменять состояние! По построению макроячейки у каждого триггера есть логика на входе и из неё как раз и формируется XOR( больше нет ничего тяжелого, чтобы цеплять соседей!) и все эти страсти локализуются в месте одной макроячейки. Что может быть приятней иметь гарантированную установку повтора заказанного уровня на входе от удаленного источника? Естественно исполнителя событий в ответ на новый уровень надо размещать рядом с этим триггером!

Такое решение считаю проще чем с применением удаленного Т-триггера!

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


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

22 minutes ago, Мур said:

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

C какой это стати будет держатся разрешение (и вообще  будет работать  логика XOR) если на вход у нее приходит неопределенный сигнал. :shok: 
Ведь ваш триггер уже находится в метастабильном состоянии(и не 0 и не 1)! Какое при этом значение приходит на вход XOR? А какое будет выходе XOR? 
Поэтому я и говорю что вы теряете суть метастабильности. В этих условиях нельзя говорить о логических операция так как операнды находятся в неопределённом состоянии. Поэтому и  требование такое что нужна синхронизация на цепочке триггеров прежде чем вы с высокой долей вероятности можете считать  выход стабильными и соответствующим логическим уровням.  

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


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

7 minutes ago, RobFPGA said:

C какой это стати будет держатся разрешение (и вообще  будет работать  логика XOR) если на вход у нее приходит неопределенный сигнал. :shok: 

 

Quote

Для регистра управления вполне.  Для непрерывного потока "такое низзя"  (читай - максимальная динамика!)

 

На вход этого триггера приходит ПОТЕНЦИАЛЬНЫЙ(определенный!) сигнал. Я же заранее говорил, что уровень на входе! (Т-триггер это делитель)

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


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

3 minutes ago, Мур said:

а вход этого триггера приходит ПОТЕНЦИАЛЬНЫЙ(определенный!) сигнал. Я же заранее говорил, что уровень на входе! (Т-триггер это делитель)

На вход триггера  приходит сигнал асинхронно к тактовой.  Значит  возможен  момент когда сигнал изменится в момент фронта клока,  с нарушением setup|hold.  Что при этом произойдет с триггером?      

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


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

1 minute ago, RobFPGA said:

На вход триггера  приходит сигнал асинхронно к тактовой.  Значит  возможен  момент когда сигнал изменится в момент фронта клока,  с нарушением setup|hold.  Что при этом произойдет с триггером?     

Совершенно верно! В худшем случае влетит в метастабильное состояние, а на следующем такте окончательно определится, поскольку все выдержки T\H будут уже соблюдены! Расхождения по тактированию одной частотой при прохождению границы домена как раз и будут провоцировать подобные события..

В лучшем - сразу произойдет повтор уровня на ближайшем такте..

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


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

11 minutes ago, Мур said:

Совершенно верно! В худшем случае влетит в метастабильное состояние

Вот именно - и это состояние убивает  вашу идею  с XOR.  

11 minutes ago, Мур said:

а на следующем такте окончательно определится

Так это и обычный триггер в цепочке синхронизации делает. 
Если попадает в состояние метастабильности,  то либо сам выходит из него (до момента следующего клока),  либо следующим тактом устанавливается если сигнал на входе стабильный.  В чем тогда нужда XOR (да еще и неработающего)? :scratch_one-s_head:

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

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


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

1 minute ago, RobFPGA said:

Вот именно - и это состояние убивает  вашу идею  с XOR.  

Так это и обычный триггер в цепочке синхронизации делает. 
Если попадает в состояние метастабильности,  то либо сам выходит из него (до момента следующего клока),  либо следующим тактом устанавливается если сигнал на входе стабильный.  В чем тогда нужда XOR?    

1.  XOR  - способ выявить разные уровни. Время его активности будет в активе до перекидывания триггера! 

2. И не нужно будет дополнительных триггеров! 

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


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

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

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

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

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

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

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

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

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

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