|
Измерение интервалов меньше 1нс на FPGA |
|
|
|
Oct 28 2009, 14:18
|
Группа: Участник
Сообщений: 10
Регистрация: 28-10-09
Пользователь №: 53 261

|
Доброго времени суток.
Видел на днях висел топик по теме. Сейчас не могу найти. Удалили что-ли. У меня идентичная задача. Надо мерить длительность импульсов на 5 каналах, оцифровывать и передавать дальше в цифровом виде. LSB должен быть 1 нс. Делаю так: Имею 2 PLL 125МГц. Первый PLL дает 125 МГц и 125МГц сдвинутый на 90 градусов. Второй PLL - соответственно на 45 и 135 градусов. Итого, после несложных манипуляций имею 8 линий частоты 125 МГц сдвинутых друг относительно друга на 45 градусов.
По приходе входного импульса защелкиваю состояния этих линий в регистр. Далее декодирую его для получения двоичного кода. В итоге имею LSB 1нс.
Варьируя частоты PLL, впринципе можно опустить это значение до ~358пс. Все упирается в верхнюю частоту PLL.
Если что могу обьяснить поподробнее. Вот только у меня проблема. Что будет если защелкивание состояния этих 8-и линий произойдет по фронту двух из них? (Очевидно что можно попасть или на два фронта или на 0).
Как можно решить такую проблему? И еще. Чтобы расширить динамический диапазон, есть еще обычный счетчик, который работает от тех же 150 МГц. Как быть с моментом когда счетчик меняет состояние?
Заранее благодарю.
|
|
|
|
|
 |
Ответов
|
Oct 29 2009, 14:12
|
Знающий
   
Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905

|
К сожалению, не нашел быстро документ, который содержал наглядные рассчеты MTBF и объяснения.
Помню, что для Virtex-II pro меня устроила схема, при которой сначала всего два расположенных в одном слайсе регистра последовательно перезахватывают сигнал, а затем, выполняется голосование по результатам 3 регистров, тоже недалеко размещенных. Я привел именно такую схему. Размножать сигнал сразу невыгодно, так как увеличивается количество потребителей, что сделает более пологим фронт исходного сигнала и повысит вероятность сбоя. Вот когда уже сигнал "очищен" от метастабильного состояния, можно голосованием выбрать наиболее достоверное значение. В общем случае, как я считаю, снижение вероятности сбоя выглядит как один сдвиговый регистр на входе, затем ветвление в сколько хочется сдвиговых регистров и после голосование. Чем длиннее регистр, тем меньше вероятность того, что каждый следующий "цапнет" генерацию как раз пока генерирует прошлый. Можно было б понаставить хоть сотню регистров, но площадь растет и задержка набегает. Особенно это неприятно в dual clock FIFO.
Кстати, про FIFO. Применение фирменного компонента dual clock fifo - хорошая отмазка, чтобы самому не думать.
|
|
|
|
|
Oct 29 2009, 14:40
|
Группа: Участник
Сообщений: 10
Регистрация: 28-10-09
Пользователь №: 53 261

|
Цитата(Shtirlits @ Oct 29 2009, 17:12)  К сожалению, не нашел быстро документ, который содержал наглядные рассчеты MTBF и объяснения.
Помню, что для Virtex-II pro меня устроила схема, при которой сначала всего два расположенных в одном слайсе регистра последовательно перезахватывают сигнал, а затем, выполняется голосование по результатам 3 регистров, тоже недалеко размещенных. Я привел именно такую схему. Размножать сигнал сразу невыгодно, так как увеличивается количество потребителей, что сделает более пологим фронт исходного сигнала и повысит вероятность сбоя. Вот когда уже сигнал "очищен" от метастабильного состояния, можно голосованием выбрать наиболее достоверное значение. В общем случае, как я считаю, снижение вероятности сбоя выглядит как один сдвиговый регистр на входе, затем ветвление в сколько хочется сдвиговых регистров и после голосование. Чем длиннее регистр, тем меньше вероятность того, что каждый следующий "цапнет" генерацию как раз пока генерирует прошлый. Можно было б понаставить хоть сотню регистров, но площадь растет и задержка набегает. Особенно это неприятно в dual clock FIFO.
Кстати, про FIFO. Применение фирменного компонента dual clock fifo - хорошая отмазка, чтобы самому не думать. Дорогой Shtirlits, Цитата Считаю, что это не к добру, так как FPGA проектируются не для этого и специально сконструированные механизмы доставки клока не используются, как результат, точность доставки сигналов от PLL будет хуже возможной. Как не обкладывай их констрейнами, это не поможет. Так почему же все таки Вы считаете, что механизмы доставки клока в этом случае не используются? Metastability Report я нашел у Actela. Почитаю. В аппноте Xilinx исползуется аж 3 последовательных FF. http://www.xilinx.com/support/documentation/application_notes/xapp861.pdfA вообще получается, даже если бы я реализовал это на элементах задержки, все равно надо было бы такую же логику делать чтобы избежать метастабильных состояний? И еще вопрос. Стоит ли думать о возможном относительном фазовом сдвиге этих двух PLL?
Сообщение отредактировал АБС - Oct 29 2009, 14:56
|
|
|
|
|
Oct 29 2009, 19:04
|
Знающий
   
Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905

|
Цитата(АБС @ Oct 29 2009, 17:40)  Так почему же все таки Вы считаете, что механизмы доставки клока в этом случае не используются? Чую.  Вообще мое чутье обусловлено двумя вещами: 1) опытом с virtex, stratix, fpslic, в них перетаскивание клока на вход данных или затягивание сигнала с ресурсов общего назначения на вход тактирования приводят к заметному перекосу. В документации на ProASIC3 я не нашел никаких ограничений на соединения. Так что хоть данные, хоть клок можно цеплять к low skew ресурсам. Остается опасность из пункта 2. 2) опытом с синтезаторами quartus, xst, synplify, leonardo spectrum - если они захотят нагадить незадачливому разработчику, то могут воткнуть где не нужно глобальный буфер или не сделать его где нужно. И все, толкаем веревку, по расчудесной fpga потащится провод мимо глобальных сетей, потому что его не посчитали клоком и плевать им на перекос и на то, что вы хотели сделать, им это не ведомо. Полистал я документацию на proasic3 и мысли следующие: Оцифровку нужно делать на одном блоке CCC с PLL. Второй замучаешься синхронизировать. Если умножить с помощью PLL частоту до 250 MHz, то получается тоже самое, что и с двумя PLL на 125MHz. После PLL есть 3 селектора фазы с делителем частоты и программируемой задержкой. Но делители нам не помогут, так как VCO больше 350 MHz не разогнать. Остается только выбрать фазы 0 и 90 и с разной задержкой выдать на 4 клоковых сети квадранта. Например, получится 4 сети тактируемые с периодом 4nS: GLB 0 + 0 pS = +0 pS/+2000pS (это задний фронт) YB 0 +600 pS = +600 pS/+2600pS GLC 90 + 0 pS = +1000 pS/+3000pS YC 90 +600 pS = +1600 pS/+3600pS GLA можно сделать 125 MHz со сдвигом 0. Захватываемый сигнал тоже надо подать на глобальную сеть. Дальше наверное все равно кого кем захватывать, это вопрос не разрешения, а крутизны фронтов, надежности и предпочтений. Еще, если учесть: - джиттер до 5.6% периода ~225 pS - skew глобальной сети 250 pS, который надо бы удвоить, так как перекос клока и перекос данных. - ошибку duty cycle +-1.5% ~60 pS то видно, что точнее 1nS может и не получиться. Кстати, "градусник" из регистров и элементов задержки может дать результат лучше, если его непрерывно калибровать. Для этого можно сделать пару экземпляров градусника, один калибруется по биениям частот двух PLL, другой работает, потом меняются. Еще лучше перестать использовать fpga не по назначению и применить что-то специальное. Цитата(АБС @ Oct 29 2009, 17:40)  A вообще получается, даже если бы я реализовал это на элементах задержки, все равно надо было бы такую же логику делать чтобы избежать метастабильных состояний? Да. Это нужно делать в любой схеме, в которой есть вероятность нарушения таймингов. Цитата(АБС @ Oct 29 2009, 17:40)  Стоит ли думать о возможном относительном фазовом сдвиге этих двух PLL? Да.
|
|
|
|
|
Oct 30 2009, 12:02
|
Группа: Участник
Сообщений: 10
Регистрация: 28-10-09
Пользователь №: 53 261

|
Цитата(Shtirlits @ Oct 29 2009, 22:04)  Кстати, "градусник" из регистров и элементов задержки может дать результат лучше, если его непрерывно калибровать. Для этого можно сделать пару экземпляров градусника, один калибруется по биениям частот двух PLL, другой работает, потом меняются. ... Еще, если учесть: - джиттер до 5.6% периода ~225 pS - skew глобальной сети 250 pS, который надо бы удвоить, так как перекос клока и перекос данных. - ошибку duty cycle +-1.5% ~60 pS то видно, что точнее 1nS может и не получиться. ... А. Можно по-подробнее про калибровку градусника? Б. Зачем же вы удваиваете skew глобальной сети? И причем вообще skew глобальной сети? Эта задержка постоянная, и по моему никак не влияет на ошибку измерения. Джиттер и ошибка duty cycle это да, это надо сложить. Вы определенно правы насчет двух PLL. В этом случае видимо надо удвоить и jitter и duty cycle. Или в случае с двумя PLL вообще не стоит расчитывать на хоть какую-то синхронность их работы? Цитата(DmitryR @ Oct 30 2009, 13:33)  На мой взгляд задача измерения интервала сводится к подсчету количества малых интервалов, укладывающихся в измеряемый. Да, моя задача именно в этом и состоит.
Сообщение отредактировал АБС - Oct 30 2009, 12:18
|
|
|
|
|
Oct 30 2009, 13:40
|
Знающий
   
Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905

|
Цитата(АБС @ Oct 30 2009, 15:02)  А. Можно по-подробнее про калибровку градусника? Во-первых, я так не делал, а только размышлял на тему. На входе "градусника" ставим мультиплексор, чтобы выбирать измеряемый сигнал или периодический сигнал с другой PLL, период которого отличается минимально. Дальше логика должна наблюдать стробоскопический эффект при прокурчивании сдвигов фазы полный оборот. На каждом такте должно наблюдаться смещение фронта, если разрешение градусника выше, чем разница в периодах. Если сделать много оборотов, то можно попытаться сделать выводы о точности. Цитата(АБС @ Oct 30 2009, 15:02)  Б. Зачем же вы удваиваете skew глобальной сети? Сгоряча, так как не знаю перекос между сетями. В документации обычно указан перекос между точками одной сети. Думаю, что это знает статический анализатор таймингов.
|
|
|
|
|
Oct 30 2009, 14:49
|
Группа: Участник
Сообщений: 10
Регистрация: 28-10-09
Пользователь №: 53 261

|
Получается что работать с двумя PLL для такой задачи вообще не реально? Их фронты будут плавать друг относительно друга? Или поскольку всетаки они запитываются от одного клока можно ожидать только постоянный фазовый сдвиг, но не разницу в частотах?
|
|
|
|
|
Oct 30 2009, 15:11
|
Знающий
   
Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905

|
Цитата(АБС @ Oct 30 2009, 17:49)  Получается что работать с двумя PLL для такой задачи вообще не реально? Их фронты будут плавать друг относительно друга? Или поскольку всетаки они запитываются от одного клока можно ожидать только постоянный фазовый сдвиг, но не разницу в частотах? Проблемы я вижу две - раздать опорный клок и доставить клок к измеряемому сигналу. Если придумать способ обнаружения перекоса между PLL, то можно подобрать задержку на входе PLL. К счастью CCC на лету можно реконфигурировать. Но делать это нужно именно на ходу, так как задержки не стоят на месте. На мой взгляд лучше будет, если каждый CCC будет питать свои региональные сети, а измеряемый сигнал через глобальную сеть разойдется по микросхеме. Про глобальную сеть. Это такой ресурс, из назначения которого следует пара полезных свойств - низкий skew и крутые фронты. Можно пользоваться и другими ресурсами, если есть возможность измерить и устранить skew. Надеюсь, плавать будет в пределах джиттера обозначенного в документации, гораздо больше будет постоянный фазовый сдвиг. Не знаю, откуда может взяться разница в частотах, если PLL питаются общим опорным клоком и делители у них одинаковые.
|
|
|
|
|
Oct 30 2009, 15:56
|
Группа: Участник
Сообщений: 10
Регистрация: 28-10-09
Пользователь №: 53 261

|
Цитата(Shtirlits @ Oct 30 2009, 18:11)  Проблемы я вижу две - раздать опорный клок и доставить клок к измеряемому сигналу. Если придумать способ обнаружения перекоса между PLL, то можно подобрать задержку на входе PLL. К счастью CCC на лету можно реконфигурировать. Но делать это нужно именно на ходу, так как задержки не стоят на месте. На мой взгляд лучше будет, если каждый CCC будет питать свои региональные сети, а измеряемый сигнал через глобальную сеть разойдется по микросхеме.
Про глобальную сеть. Это такой ресурс, из назначения которого следует пара полезных свойств - низкий skew и крутые фронты. Можно пользоваться и другими ресурсами, если есть возможность измерить и устранить skew.
Надеюсь, плавать будет в пределах джиттера обозначенного в документации, гораздо больше будет постоянный фазовый сдвиг. Не знаю, откуда может взяться разница в частотах, если PLL питаются общим опорным клоком и делители у них одинаковые. Насчет плавания частот - я просто немного запутался уже во всех эти джиттерах и т.д.. У меня на симуляторе была ситуация когда я включил два ПЛЛ от одного и того же клока 40МГц, выход одного ПЛЛ был 160, а другого 320 (так просто поиграть). Симулятор показал что-то очень странное, как будто бы частота второго была не 320, а 319,99. Тоесть фаза второго ПЛЛ постепенно уползала, причем с постоянной скоростью этого самого уползания - что может быть следствием только разных частот. Плюс к этому ваше замечание о том что Цитата Оцифровку нужно делать на одном блоке CCC с PLL. Второй замучаешься синхронизировать. Вот что меня запутало. При двух ПЛЛ-ах с одинаковой выходной частотой такого не наблюдалось. Джиттер - это имеется ввиду кратковременные отклонения параметра (в данном случае периода) от заданного, ведь так? Но никак не разница в частотах, как вы правильно заметили, если ПЛЛ питаются общим опорным клоком. Тоесть два ПЛЛ они ВПРИНЦИПЕ синхронны в этой схеме, разница фаз будет в пределах 5.6%?
|
|
|
|
|
Oct 30 2009, 16:43
|
Знающий
   
Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905

|
Цитата(АБС @ Oct 30 2009, 18:56)  ...два ПЛЛ от одного и того же клока 40МГц, выход одного ПЛЛ был 160, а другого 320.... Симулятор показал что-то очень странное, как будто бы частота второго была не 320, а 319,99. На каком интервале это наблюдалось? Попробуйте помоделировать несколько десятков микросекунд. Фильтр обратной связи режет частоты выше 15-45kHz. Возможно, вы наблюдаете tracking jitter, он довольно большой. Кстати, это и есть причина, по которой две PLL использовать трудно. Вероятно, у вас коэффициенты 8/1 и 4/1, попробуйте 8/1 и 8/2. Цитата(АБС @ Oct 30 2009, 18:56)  Тоесть два ПЛЛ они ВПРИНЦИПЕ синхронны в этой схеме, разница фаз будет в пределах 5.6%? Упомянутый tracking jitter все и испортит, который может быть до 1.6nS в A3P250 и A3P1000 и до 0.8nS в других моделях при LockControl=1 в худшем случае. И еще нужно добавить перекос опорного клока, который мне не известен - я не знаю как они у вас соединены, внутри или снаружи микросхемы, а если бы и знал, все равно затруднился бы сосчитать. PS: Что это за LockControl я так и не понял.
|
|
|
|
|
Oct 30 2009, 17:28
|
Группа: Участник
Сообщений: 10
Регистрация: 28-10-09
Пользователь №: 53 261

|
Цитата(Shtirlits @ Oct 30 2009, 19:43)  На каком интервале это наблюдалось? Попробуйте помоделировать несколько десятков микросекунд. Фильтр обратной связи режет частоты выше 15-45kHz. Возможно, вы наблюдаете tracking jitter, он довольно большой. Кстати, это и есть причина, по которой две PLL использовать трудно. Вероятно, у вас коэффициенты 8/1 и 4/1, попробуйте 8/1 и 8/2. Да, коэффициенты были типа этого. Кажется понимаю о чем речь. Цитата Упомянутый tracking jitter все и испортит, который может быть до 1.6nS в A3P250 и A3P1000 и до 0.8nS в других моделях при LockControl=1 в худшем случае. И еще нужно добавить перекос опорного клока, который мне не известен - я не знаю как они у вас соединены, внутри или снаружи микросхемы, а если бы и знал, все равно затруднился бы сосчитать.
PS: Что это за LockControl я так и не понял. Я тоже не понял. Посмотре Виртекс6 Там вообще другие параметры даны. Выходной джиттер не описан, отсылаю к какому то визарду. есть только duty cycle precision 150-200ps. Получается что ВООБЩЕ на любой ФПГА сделать такую вещь достаточно стабильную и точную нельзя чтоли?
|
|
|
|
Сообщений в этой теме
АБС Измерение интервалов меньше 1нс на FPGA Oct 28 2009, 14:18 Shtirlits Какая у вас микросхема?
Периодические ли сигналы?
... Oct 28 2009, 15:55 АБС Цитата(Shtirlits @ Oct 28 2009, 19:55) Ка... Oct 28 2009, 16:18  DmitryR Можно, просто для решения означенной вами проблемы... Oct 28 2009, 18:15   АБС Цитата(DmitryR @ Oct 28 2009, 21:15) Можн... Oct 28 2009, 19:39 Shtirlits АБС, я подозреваю вас в том, что вы используете вх... Oct 28 2009, 22:16 АБС Цитата(Shtirlits @ Oct 29 2009, 01:16) АБ... Oct 29 2009, 10:49 lamination Цитата(Shtirlits @ Oct 29 2009, 01:16) ..... Oct 29 2009, 12:52 iosifk Цитата(АБС @ Oct 28 2009, 18:18) По прихо... Oct 29 2009, 06:28 DmitryR Кстати да, оверсэплинг-то делается не так: надо на... Oct 29 2009, 08:29   DmitryR Цитата(Shtirlits @ Oct 29 2009, 22:04) Ещ... Oct 30 2009, 09:39    Shtirlits Цитата(DmitryR @ Oct 30 2009, 12:39) На с... Oct 30 2009, 09:41     DmitryR На мой взгляд задача измерения интервала сводится ... Oct 30 2009, 10:33           АБС Цитата(DmitryR @ Oct 30 2009, 21:15) А че... Nov 4 2009, 12:17 lamination Цитата(Shtirlits @ Oct 29 2009, 17:12) К ... Oct 29 2009, 16:20
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|