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

Как узнать у кратных частот номер такта относительно медленной частоты?

Есть две кратные частоты сформированные от одной тактовой. Делители например на BUFR. Например соотношение частот 2. F2=2*F1. Как определить номер такта быстрой частоты относительно медленной?

 

F1=0011223344556677

F2=0101010101010101

 

Простейшее решениее подать медленную частоту на вход данных триггера и протактировать второй не прокатывает потому что фронты каждый второй такт совпадут и будет бардак.

 

Вариант 1: ставим Т триггер на быструю частоту и полученную последовательность тактируем медленной частотой.

Вариант 2: ставим T триггер на медленную частоту и выделение фронтов на быстрой.

 

Это велосипеды изобретённые на коленке за пару минут. А как правильно это называется (для гугла) и как принято подобное делать?

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


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

а можно чуть поподробнее, в чем задача, или зачем всё это?

 

а то мне всё больше приходилось принимать на clock-capable 622 MHz 16 бит, при помощи BUFR /4 делать из них 155 MHz, и при помощи DC FIFO вынимать 64 бит, чтобы потом как-то с ними на приемлемых и сходящихся времянках работать.

 

а так вообще - переводим через CDC медленную частоту вверх, получаем, в зависимости от делителя 1100110011001100, или 111100001111000011110000 на быстрой, а дальше дело техники.

проблема здесь в том, что даже с кратными частотами нельзя исключать влияния нестабильностей (температурные, техпроцесса и прочие) и делать вид, что метастабильности возникнуть не может в принципе и у вас всегда будет монотонная последовательность 0-1-2-3-4-5-6-7.

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


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

Если вам нужно знать фазовые соотношения - то они же и так известны. Частоты отличаются ровно в два раза )

Считайте такты быстрой и сможете пересчитать в медленную делением на два. Медленную умножайте.

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

Изменено пользователем Кoнстантин

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


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

Считайте такты быстрой и сможете пересчитать в медленную делением на два.
Вот тут и проблема. Потому что возможны два варианта. Просто остаток по модулю 2 и то же самое но плюс один.

 

Т.е. мы можем начать считать быструю частоту в два разных момента времени в пределах одного периода медленной частоты.

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


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

Вот тут и проблема. Потому что возможны два варианта. Просто остаток по модулю 2 и то же самое но плюс один.

 

Т.е. мы можем начать считать быструю частоту в два разных момента времени в пределах одного периода медленной частоты.

А хендшейки задействовать на входе не пробовали, тогда у вас гарантированно будут данные защёлкиваться на входах.

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


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

мы можем начать считать быструю частоту в два разных момента времени

Я считаю, такого быть не может. Фронты не могут взяться ниоткуда. При делении частоты тем более.

Еще раз поясните, откуда берется исходный тактовый сигнал и каким образом вы его делите.

Даже если, допустим, медленная появляется из PLL и есть непредсказуемое время на ее раскачку, тогда сигнал locked можно использовать как enable для счетчиков, чтобы начать считать от одного момента во времени

Очень полезно воспользоваться симулятором

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


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

А хендшейки задействовать на входе не пробовали, тогда у вас гарантированно будут данные защёлкиваться на входах.
Откуда взялись данные? Пока речь шла только про клоки.

 

Я считаю, такого быть не может. Фронты не могут взяться ниоткуда. При делении частоты тем более.

Еще раз поясните, откуда берется исходный тактовый сигнал и каким образом вы его делите.

Xilinx BUFR две штуки делят одну шуструю входную частоту. Сброс их не делается. Ибо частота входная большая синхронизировать с ней сброс не охота. Значит начальное состояние считаем неизвестным. Я конечно догадываюсь что оно буддет постоянным. Но очень не хочется нарваться на какой нибудь нюанс когда на на температуре вдруг оно измениться.
Даже если, допустим, медленная появляется из PLL и есть непредсказуемое время на ее раскачку, тогда сигнал locked можно использовать как enable для счетчиков, чтобы начать считать от одного момента во времени
Вот про это поподробнее. Как обеспечить начало счёта по совпадению фронтов двух частот? Потому что Locked может прийти в любой момент времени и как следствие неопределённость остаётся.
Очень полезно воспользоваться симулятором
Боюсь это не то место которое нужно делать глядя на симулятор.

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


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

Приветствую!

 

...

Простейшее решениее подать медленную частоту на вход данных триггера и протактировать второй не прокатывает потому что фронты каждый второй такт совпадут и будет бардак.

...

Почему столь категоричное утверждение?

Вполне рабочая схема для синхронных клоков. Естественно при этом надо учитывать задержку между буфером F1 и D входом триггера.

 

...

Боюсь это не то место которое нужно делать глядя на симулятор.

...

Вобще все как раз и нужно проверять сначала в симе! Сначала functional а затем и post-place&route с учетом реальных задержек по SDF annotation . Простенький тестовый модуль с парой буферов и парой тригеров не займет много времени на P&R и прогон сима.

 

Успехлв! Rob.

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


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

Вполне рабочая схема для синхронных клоков. Естественно при этом надо учитывать задержку между буфером F1 и D входом триггера.
Чисто теоретически должно работать. А практически кто проконтролирует время сетап-холд? Или раскладчик поймёт всё правильно и я зря парюсь?
Вобще все как раз и нужно проверять сначала в симе! Сначала functional а затем и post-place&route с учетом реальных задержек по SDF annotation . Простенький тестовый модуль с парой буферов и парой тригеров не займет много времени на P&R и прогон сима.
Симуляция не может являться гарантией работоспособности изделия. Т.е. аргумент про то что у меня всё в симуляторе работает совершенно не аргумент.

 

Аргументом может являться только верное схемотехническое решение подкреплённое цифрами из даташита. Особенно если речь идёт про начальные условия. Иначе есть шанс поиметь схему которая будет от разводки к разводке работать по разному.

 

Напрмер банальное. Глобальный ресет приходит на триггеры не одновременно. И соответственно есть шанс что часть триггеров уже сработают а вторая половина ещё в ресете. Если схемотехнически не обеспечить правильный ресет то схема будет с особенностями. Причём конкретную раскладку можно отсимулить и увидеть эти особенности. Но со следующей всё придётся делать заново.

 

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


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

Напрмер банальное. Глобальный ресет приходит на триггеры не одновременно. И соответственно есть шанс что часть триггеров уже сработают а вторая половина ещё в ресете. Если схемотехнически не обеспечить правильный ресет то схема будет с особенностями. Причём конкретную раскладку можно отсимулить и увидеть эти особенности. Но со следующей всё придётся делать заново.

То, что происходит в схеме между фронтами тактовой частоты - вас волновать по идее не должно. Вы же цифровым дизайном занимаетесь, а не аналоговым. Роутер постарается развести так, чтобы К СЛЕДУЮЩЕМУ фронту клока на выходе всех регистров был годный результат. Именно для этого пишутся констрейнты, в которых явно прописываются частоты и нестабильности клоков. Если времянка сошлась, схема БУДЕТ работать на этой частоте.

 

Чисто теоретически должно работать. А практически кто проконтролирует время сетап-холд? Или раскладчик поймёт всё правильно и я зря парюсь?

Вот, это правильные слова! Нужно написать XDC constraints - и сетапы-холды будут проверены автоматически, и даже репорт будет генериться на каждую реинкарнацию дизайна.

Изменено пользователем Кoнстантин

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


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

То, что происходит в схеме между фронтами тактовой частоты - вас волновать по идее не должно. Вы же цифровым дизайном занимаетесь, а не аналоговым. Роутер постарается развести так, чтобы К СЛЕДУЮЩЕМУ фронту клока на выходе всех регистров был годный результат. Именно для этого пишутся констрейнты, в которых явно прописываются частоты и нестабильности клоков. Если времянка сошлась, схема БУДЕТ работать на этой частоте.
Я говорил про начальные условия. Когда внутренний глобальный ресет плисины привязан совершенно не к той частоте на которой работает сама схема. В результате имеем асинхронный сброс который ещё и skew имеет. В результате если не сделать правильную схему сброса мы получим любопытный фокус. Часть триггеров уже выйдут из реста и увидят клок. А часть ещё будет в ресете.

 

Например мы имеем регистр защёлку который имеет два бита. Предположем что он сбрасывается в ноль и на входе у него единицы. Чисто по цифровому дизайну у него по включению должно быть 00 а через 1 такт на выходе должно быть 11. Но если у нас не сделана схема корректного сброса то мы имеем шанс получить на выходах вот такую последовательность: 00 -> 01 -> 11. Более того скажу что это эффект отлично симулиться при симуляции уже разложенной схемы.

 

 

Вот, это правильные слова! Нужно написать XDC constraints - и сетапы-холды будут проверены автоматически, и даже репорт будет генериться на каждую реинкарнацию дизайна.
А вот тут поподробнее. Какие дополнительные констрейны нужно прописать? Ведь формально если мы указали тактовую на выходе до делителей всё остальное вычисляется. Хватит ли раскладчику одного таймспека на частоту или нужно ещё что-то?

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


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

А вот тут поподробнее. Какие дополнительные констрейны нужно прописать? Ведь формально если мы указали тактовую на выходе до делителей всё остальное вычисляется. Хватит ли раскладчику одного таймспека на частоту или нужно ещё что-то?

Достаточно обконстрейнить быстрый клок. В общем-то и все.

У вас нет асинхронных проблем. Clock domain - всего один. Да, в нем есть еще сигнал, который меняет состояние каждый второй такт (вы его зовете медленным клоком) - ну и ОК. А еще есть внешний ресет. Да, это внешний асинхронный сигнал, его нужно синхронизировать - записать в регистр по клоку. А на выходе регистра будет он уже синхронным в этом клок домейне. ОСтальные расчеты оставьте технике.

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


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

Достаточно обконстрейнить быстрый клок. В общем-то и все.

У вас нет асинхронных проблем. Clock domain - всего один. Да, в нем есть еще сигнал, который меняет состояние каждый второй такт (вы его зовете медленным клоком) - ну и ОК.

Ну я бы всё же не называл его сигналом. Сигнал был бы если бы у меня стоял T триггер. Тогда и проблем не было бы. А тут всё же обе частоты совпадают регулярно фронтами. Хотя формально можно считать сигналом.
А еще есть внешний ресет. Да, это внешний асинхронный сигнал, его нужно синхронизировать - записать в регистр по клоку. А на выходе регистра будет он уже синхронным в этом клок домейне.
По хорошему 2 триггера надо бы :)
ОСтальные расчеты оставьте технике.
Просто хотелось убедиться что техника поймёт этот изврат правильно. :)

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


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

По хорошему 2 триггера надо бы :)

А в военное время - до 16-и... :lol:

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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