Здравствуйте, уважаемые коллеги.
Стоит такая задача.
Система формирует частоту 50 МГц для АЦП, которую к тому же надо сдвигать с шагом 500 ps (всего 40 сдвигов на период 20 нс). Либо система должна держать эту частоту, но с такой же задержкой (40 сдвигов) формировать импульс. Длительность же импульса программируемая, с шагом 5 ns.
Пытался задействовать функцию "PhaseShifter" в DCM (который позволяет сдвигать выходную частоту, в зависимости от количества поступивших в него импульсов), там можно перестроить фазу частоты на выходе, с определенным шагом ( у меня получался 1 шаг = 28-30 ps). Поначалу даже все получилось, но оказалось, что со сменой партии микросхем шаг может изменится, не намного, 1-2 ps, но может. Получается что для каждой серии микросхем надо задавать новую таблицу (количество нужных шагов у меня задается таблицой), что несовсем удобно.
В даташите на Spartan6 ("ds162" стр. 60) также написано "DCM_DELAY_STEP (Finest delay resolution, averaged over all steps) - 10...40 ps. A typical delay step size is 23 ps." Шаг от 10 до 40 ps. - очень большой разброс.
Как еще можно добиться "надежного" сдвига в 500 ps.
Спасибо.
Джеймс
Feb 25 2014, 16:06
Цитата(boul @ Feb 25 2014, 14:46)

Как еще можно добиться "надежного" сдвига в 500 ps.
Ну частоту 2GHz вы очевидно в кристалле не получите. Значит сделайте грубые и точные шаги. Какой частоты достигните в кристалле? 300-400МНz? Эта частота определит грубую сетку. Точную сетку добейте лог. примитивами.
это вы плисину еще не грели и не морозили
в общем, в ПЛИС, никак, чтобы с такой точностью
RobFPGA
Feb 25 2014, 17:54
Приветствую!
Цитата(SM @ Feb 25 2014, 19:11)

в общем, в ПЛИС, никак, чтобы с такой точностью
Ну зачем так категорично.
Например берем и запускаем мультигигабит трансивер на 2 GHz без всякого 8/10 кодирования,
соответственно меня последовательность байт на входе трансивера можно управлять "фазой" и "скважностью" выходного сигнала и с шагом точно 500 ps.

Однако вот абсолютная задержка относительно входной референтной частоты будет также зависит от температуры и вольтажа. Чтобы уменьшить это вредное влияние враждебной среды можно формировать таким образом 2 выхода - один из которых будет работать опорным, а второй с изменяемой задержкой относительно первого.
2 boul
Вы бы объяснили более полно зачем Вам такое нужно. Тогда было бы легче давать Вам вредные советы.
Мне вот так кажется что Вы мил человек пытаетесь стробоскопический режим для АЦП сварганить.
Тогда я думаю проще поискать внешнюю мс регулируемой задержки которая бы обеспечивала требуемые точности.
Успехов! Rob.
Объясню зачем мне это нужно.
Проект - оптический рефлектометр. Запускается импульс лазера в оптоволокно и измеряется отражение в линии. При дескретизации 20 нс будем иметь сетку 2 метра (свет он довольно быстрый), а минимальный шаг должен быть 5 см, т.е. в 40 раз меньше, поэтому и нужно 20 нс разбить на 40 частей. Тут есть 2 варианта: клок АЦП стоит на месте, а двигается импульс запуска с шагом 500 пс, либо наоборот - запуск на месте, двигается клок.
это вы плисину еще не грели и не морозили sm.gif
и морозил и грел. Да, клок относительно импульса немного уходил, приходилось добавлять вентили (инвертены на лутах) в цепь формирования импульса и говорить синтезатору чтобы не оптимизировал. И все было нормально. Но в итоге возникла проблема, которую я описал.
И еще одна проблема, возможно связанная с разводкой платы, боролись долго, но пока безрезультатно. Когда работает модуль сдвига фазы в DCM, но сильно фонит на аналоговую часть, ту которая стоит до АЦП, что увеличивает шумы, один из ключевых параметров для рефлектометра. Отключил эту схему и все стало хорошо.
Bad0512
Feb 26 2014, 07:48
Цитата(boul @ Feb 26 2014, 14:42)

Объясню зачем мне это нужно.
Проект - оптический рефлектометр. Запускается импульс лазера в оптоволокно и измеряется отражение в линии. При дескретизации 20 нс будем иметь сетку 2 метра (свет он довольно быстрый), а минимальный шаг должен быть 5 см, т.е. в 40 раз меньше, поэтому и нужно 20 нс разбить на 40 частей. Тут есть 2 варианта: клок АЦП стоит на месте, а двигается импульс запуска с шагом 500 пс, либо наоборот - запуск на месте, двигается клок.
это вы плисину еще не грели и не морозили sm.gif
и морозил и грел. Да, клок относительно импульса немного уходил, приходилось добавлять вентили (инвертены на лутах) в цепь формирования импульса и говорить синтезатору чтобы не оптимизировал. И все было нормально. Но в итоге возникла проблема, которую я описал.
И еще одна проблема, возможно связанная с разводкой платы, боролись долго, но пока безрезультатно. Когда работает модуль сдвига фазы в DCM, но сильно фонит на аналоговую часть, ту которая стоит до АЦП, что увеличивает шумы, один из ключевых параметров для рефлектометра. Отключил эту схему и все стало хорошо.
Я конечно дико извиняюсь, но ... использовать АЦП с приемлемой частотой дискретизации (2ГГц в вашем случае) религия не позволяет?
Цитата(Джеймс @ Feb 25 2014, 18:06)

Ну частоту 2GHz вы очевидно в кристалле не получите. Значит сделайте грубые и точные шаги. Какой частоты достигните в кристалле? 300-400МНz? Эта частота определит грубую сетку. Точную сетку добейте лог. примитивами.
Да, я думал об этом. У меня есть 200МГц, по которым я формирую импульс запуска с шагом 5 нс. Но получается уж очень сложная схема. Синхронизация от фронта импульса, 4 импульса клока, в каждом из которых надо на примитивах сделать 10 задержек. Тут я абсолютно не уверен что можно получить 500 пс или близкую к ней, будет например 400 пс или 600 на одном луте. И в добавок ко всему на выходе большой мультиплексор 40/1, который тоже даст непонятный перекос фаз. Ну или каскад мультиплексоров для меньшего перекоса. Все это, конечно, надо будет привязать в Floorplanner чтобы при новой раскладке все не разъехалось.
Цитата(Bad0512 @ Feb 26 2014, 09:48)

Я конечно дико извиняюсь, но ... использовать АЦП с приемлемой частотой дискретизации (2ГГц в вашем случае) религия не позволяет?
Да именно религия. У нас портативное устройство на батарейках, соответственно первый параметр - время автономной работы, прибор должен работать многие часы, а не минуты.
Джеймс
Feb 26 2014, 08:09
Посмотрите еще программируемые линии задержки Maxim/Dallas DS10xxxx
(для точной сетки, грубая сетка остается внутри ПЛИС)
http://www.digikey.com/product-search/en?F...amp;pageSize=50
Bad0512
Feb 26 2014, 08:14
Цитата(boul @ Feb 26 2014, 14:59)

Да именно религия. У нас портативное устройство на батарейках, соответственно первый параметр - время автономной работы, прибор должен работать многие часы, а не минуты.
Ну тогда у вас только один путь - использовать внешние линии задержки.На этом пути тоже немало разных граблей разложено (типа выравнивания усиления аналоговых каналов и пр.) .
Но на ПЛИС _стабильные_ задержки вам получить не удастся. Всё будет сильно плавать от температуры, партии микросхем, напряжения питания и т.д.
Можно ситуацию улучшить калибровкой, но это во-первых достаточно сложно, а во-вторых не во всех случаях можно использовать - зависит от применения.
Как вариант.
Можно попробовать сформировать два тактовых сигнала CLK1 и CLK2 с периодом T1=20нс и T2=20,5нс.
Период когерентности двух сигналов T0 = 41*T1 = 40*T2 = 820нс.
Т.е. два сигнала будут в одинаковой фазе каждый 41-й период CLK1 или каждый 40-й период CLK2.
В каждом периоде между двумя сигналами будет фазовый сдвиг равный N*500ps, где N - номер такта.
Первым тактовым сигналом CLK1 формировать сигнал сбора данных и сигнал разрешения импульса в нужный такт.
Вторым тактовым сигналом CLK2 в этот же такт по сигналу разрешения формировать импульс.
Между сигналом сбора данных (сигнал разрешения импульса) и фронтом импульса по идее должен быть нужный фазовый сдвиг (+/- джиттер + некоторая фиксированная задержка).
o_khavin
Feb 27 2014, 12:52
Цитата(boul @ Feb 25 2014, 15:46)

Как еще можно добиться "надежного" сдвига в 500 ps.
Подтверждаю слова вышеотписавшихся товарищей - стабильные задержки вы на tap-ах не получите, они не для этого предназначены. Единственный вариант (помимо чисто внешних задержек) - это калибровка, но для неё всё равно нужен некий внешний опорный элемент или придумывать статистический вариант по аналогии с калибровкой, которая производится у Xilinx-а для SDRAM-интерфейсов (в MIG-е).
Ставьте внешний DDS. Только с экономией тепла у подходящих вам DDS будет не очень...
Если не секрет, чем лазер модулируете? Я сейчас подобным, занимаюсь
Стоит посмотреть на продукцию Altera и Lattice, у них PLL умеют делать калиброванный динамический сдвиг фазы. Особенно, на Lattice MachXO2, они относительно дешёвые и малопотребляющие.
В MachXO2 Tdly = 250 ps, не пойдет. У LattidceXP2 там 16 шагов по 22.5 градусов фазы, тоже маловато будет. Хотя пишут, что для клока в 420 МГц удается получить 32 шага по 70 ps (с использованием WRDEL), но, как бы, тоже маловато будет. У ECP3 есть одновременно и то и это, но там tPA (Tdly по machxo2) 65...260 ps (!разброс!), а фаза с тем же шагом... В общем не катит
Цитата(SM @ Feb 28 2014, 12:28)

В MachXO2 Tdly = 250 ps, не пойдет. У LattidceXP2 там 16 шагов по 22.5 градусов фазы, тоже маловато будет. Хотя пишут, что для клока в 420 МГц удается получить 32 шага по 70 ps (с использованием WRDEL), но, как бы, тоже маловато будет.
Насколько я понял, ТС не надо абсолютно точно выдерживать именно 500ps, да это и не получится ни на каких FPGA, из-за джиттера хотя бы, и плавающих задержек в IOB, которые, правда, можно компенсировать внешним фидбэком, но не полностью ведь.
Я немного не про то... ТС писал, что надо (всего 40 сдвигов на период 20 нс) - а PLL латиса может дать только 16 сдвигов фаз. Хотя, может быть, если подумать хорошо, и сделать, например, один клок с периодом 4 нс, и рулить в нем фазовым сдвигом, разделив период на 8 частей (по 500 пс), и как-то эту задержку использовать уже для задерживания главного клока, где надо 5*8=40 сдвигов по 500 пс.... В любом случае, это MachXO2 не сможет, только XP2 или ECP3. А 500 пс будут относительно точные, так как это не задержка на аналоговой линии, а управление фазой (хотя я, честно, недопонимаю как она сделана, если fVCO 435...870 MHz, а для 16 сдвигов фазы надо иметь fVCO хотя бы в 8 раз выше, чем вых. клок, или может там замаскировалась DLL)
Цитата(jks @ Feb 27 2014, 13:36)

Как вариант.
Можно попробовать сформировать два тактовых сигнала CLK1 и CLK2 с периодом T1=20нс и T2=20,5нс.
Период когерентности двух сигналов T0 = 41*T1 = 40*T2 = 820нс.
Т.е. два сигнала будут в одинаковой фазе каждый 41-й период CLK1 или каждый 40-й период CLK2.
В каждом периоде между двумя сигналами будет фазовый сдвиг равный N*500ps, где N - номер такта.
Первым тактовым сигналом CLK1 формировать сигнал сбора данных и сигнал разрешения импульса в нужный такт.
Вторым тактовым сигналом CLK2 в этот же такт по сигналу разрешения формировать импульс.
Между сигналом сбора данных (сигнал разрешения импульса) и фронтом импульса по идее должен быть нужный фазовый сдвиг (+/- джиттер + некоторая фиксированная задержка).
Уважаемый jks,
да, спасибо за интересное решение, и схема не очень сложная, я до такого не додумался...
Попробывал сформировать два клока на DCM (20 нс и 20,5 нс), с входного 100 МГц - 20,5 не может. Самое близкое что получается это: 48МГц (20,833) и 52Мгц (19,230).
Но! Можно сформировать 2 клока 21 нс с фазами 0 и 180.
Цитата(boul @ Feb 28 2014, 16:51)

Уважаемый jks,
да, спасибо за интересное решение, и схема не очень сложная, я до такого не додумался...
Попробывал сформировать два клока на DCM (20 нс и 20,5 нс), с входного 100 МГц - 20,5 не может. Самое близкое что получается это: 48МГц (20,833) и 52Мгц (19,230).
Но! Можно сформировать 2 клока 21 нс с фазами 0 и 180.
Но! Можно сформировать 2 клока 21 нс с фазами 0 и 180.
Хотя нет, это ничего не даст, погорячился.
Golikov A.
Feb 28 2014, 19:53
можно более сложную сетку, можно чтобы между клоками было не 0.5 нС, а допустим N*0.5 нС, при некоторых периодах клока, и нечетных N, можно будет получать разные задержки кратные 0.5 нС
Цитата(SM @ Feb 28 2014, 12:52)

Я немного не про то... ТС писал, что надо (всего 40 сдвигов на период 20 нс) - а PLL латиса может дать только 16 сдвигов фаз. Хотя, может быть, если подумать хорошо, и сделать, например, один клок с периодом 4 нс, и рулить в нем фазовым сдвигом, разделив период на 8 частей (по 500 пс), и как-то эту задержку использовать уже для задерживания главного клока, где надо 5*8=40 сдвигов по 500 пс.... В любом случае, это MachXO2 не сможет, только XP2 или ECP3. А 500 пс будут относительно точные, так как это не задержка на аналоговой линии, а управление фазой (хотя я, честно, недопонимаю как она сделана, если fVCO 435...870 MHz, а для 16 сдвигов фазы надо иметь fVCO хотя бы в 8 раз выше, чем вых. клок, или может там замаскировалась DLL)
Если в MachXO2 настроить f_VCO = 500МГц, output dividers=10, то получим output frequency=50МГц, phase shift step=45град/10 = 4.5град. То есть период 20нс поделится на 80 равных частей по 250пс, что и требовалось и даже лучше

. Я тоже думаю, что для сдвига фазы маленькими кусочками там используется скрытая DLL, работающая на частоте VCO.
Так вроде в MachXO2 нету нормального phase shift, он есть только в XP2/ECP3. А в XO2 только есть fine delay, измеряемая в неких попугаях 250ps/шаг +-полкилометра ухода с PVT. В XP2 нету fine delay, но есть phase shift. А в ECP3 есть и то, и это сразу.
PS
Может и не прав, я довольно поверхностно смотрел на XO2, но не нашел честного phase shift (динамического, управляемого входами), только неточный fine delay, который имеет полукилометровый разброс.
Golikov A.
Mar 2 2014, 18:09
а что если повторить опыт с 20 и 20.5 нСек частоты, но с одним или двумя внешними генераторами частоты?
Цитата(SM @ Mar 2 2014, 20:53)

Может и не прав, я довольно поверхностно смотрел на XO2, но не нашел честного phase shift (динамического, управляемого входами), только неточный fine delay, который имеет полукилометровый разброс.
См. TN1199, MachXO2 sysCLOCK PLL Design and Usage Guide, page 13-18. Там PLL похож на альтеровские - 4 выхода с независимыми делителями и фазовращателями.
Цитата(Timmy @ Mar 3 2014, 11:17)

См. TN1199, MachXO2 sysCLOCK PLL Design and Usage Guide, page 13-18. Там PLL похож на альтеровские - 4 выхода с независимыми делителями
Только эти фазовращатели не имеют динамического управления, а только параметрами (см. хэндбук, MachXO sysCLOCK PLL Design and Usage Guide, Figure 10-2, порт DDAIDEL[2:0] - рулить из схемы можно только входной задержкой, которая не точная. В отличие от этого у XP2 для руления фазы порт заведен совсем не туда - порт DPHASE, Figure 9-4, хэндбук по XP2. Разницу понимаете? В первом можно поиграть через порт только
задержкой в петле до фазового детектора уже деленного сигнала обратной связи, а во втором - честно
фазой выходного сигнала.
У ECP3 - есть оба механизма сразу, порт DPHASE управляет
фазой выхода, а FINEDELA/FINEDELB -
задержкой входа. Управление задержкой в задаче не годится, так как там разброс +-полкилометра. А вот управление фазой,
которого нет в MACHXO2, возможно, подойдет.
Цитата(SM @ Mar 3 2014, 11:29)

Только эти фазовращатели не имеют динамического управления, а только параметрами (см. хэндбук, MachXO sysCLOCK PLL Design and Usage Guide, Figure 10-2, порт DDAIDEL[2:0] - рулить из схемы можно только входной задержкой, которая не точная. В отличие от этого у XP2 для руления фазы
Вы даёте ссылку на MachXO, а я говорю о MachXO2, у них PLL совершенно разные.
Цитата(Timmy @ Mar 3 2014, 11:49)

Вы даёте ссылку на MachXO, а я говорю о MachXO2,.
Ой. Извиняюсь. На самом деле, а я и не заметил, что документы перепутал
Цитата(Golikov A. @ Mar 2 2014, 20:09)

а что если повторить опыт с 20 и 20.5 нСек частоты, но с одним или двумя внешними генераторами частоты?
Поясните, что вы имеете ввиду.
Как я понимаю, эти две частоту должны быть синхронизированные (например сгенерированные на DCM), если они будут независимые то никогда не получим повторения фазы через кратный промежуток времени.
По поводу "можно более сложную сетку, можно чтобы между клоками было не 0.5 нС, а допустим N*0.5 нС, при некоторых периодах клока, и нечетных N, можно будет получать разные задержки кратные 0.5 нС"
подходит N = 3 (21,5 нс), тогда за время 3*21,5*20 можно перебрать все варианты сдвигов.
Но, опять же, DCM не дает такие частоты. Для 21,5 нс дает самое близкое 21,43 нс (+70 ps), что за 40 сдвигов даст уход в 2,8 нс. Для 18,5 нс дает - 18,52 (-20 ps). Уже близко, но за 40 сдвигов уход в 0,8 нс.
Или может подобрать так входной генератор клока, чтобы DCM смог сформировать 2 частоты 20 нс и 20,5 нс, то есть подобрать какую-то кратную этим периодам частоту?
Спор про Латтис конечно интересен, но у меня плата на Спартане 6, про замену FPGA речи не идет.
RobFPGA
Mar 3 2014, 11:06
Приветствую!
Цитата(boul @ Mar 3 2014, 12:52)

Спор про Латтис конечно интересен, но у меня плата на Спартане 6, про замену FPGA речи не идет.
А какой именно Спартан 6 ?
Успехов! Rob.
Цитата(RobFPGA @ Mar 3 2014, 13:06)

Приветствую!
А какой именно Спартан 6 ?
Успехов! Rob.
XC6SLX16-CSG225
RobFPGA
Mar 3 2014, 11:57
Приветствую!
Цитата(boul @ Mar 3 2014, 13:11)

XC6SLX16-CSG225
Ой какая маленькая
Вариант с GTP тут конечно отпадает ввиду отсутствия оного, ах вот хотя бы 25T.
Остается только пытается сделать динамическую калибровку для подстройки варианта со сдвигом фазы DCM.
Ну или все же внешнюю задержку лепить.
Успехов! Rob.
Сформировать два клока с периодами 20нс и 41нс.
Второй клок с периодом 41нс использовать в DDR режиме. (период 20.5нс).
Цитата(jks @ Mar 3 2014, 13:57)

Сформировать два клока с периодами 20нс и 41нс.
Второй клок с периодом 41нс использовать в DDR режиме. (период 20.5нс).
Да это уже похоже на правду.
Похоже что DCM умножает входную частоту до 1000МГц (в меня генератор на входе 100 МГц) и потом делит на 20 для 50 МГц (20 нс) и на 41 для 24,39 МГц (41 нс).
Спасибо.
И все было бы хорошо, но я забыл об одном существенном моменте.
Да, клок 20 нс подается на АЦП, а клоком 41 нс можно формировать импульс запуска с шагом 0,5 нс, но... нужно сформировать импульс запуска, длительностью кратной 5 нс. Имея клок с периодом 41 нс такой не получишь. Тут надо иметь 200 МГц.
Golikov A.
Mar 5 2014, 18:50
кратной или длинной 5 нс?
потому что 41*5 = 205 нс - это кратно 5 нс...

а зачем такой импульс? чтобы ацп 2 раза не стартанула? Ну так запустите рядом 3 клок который вырубит вашу систему
Цитата(Golikov A. @ Mar 5 2014, 20:50)

кратной или длинной 5 нс?
потому что 41*5 = 205 нс - это кратно 5 нс...

а зачем такой импульс? чтобы ацп 2 раза не стартанула? Ну так запустите рядом 3 клок который вырубит вашу систему
кратной 5 нс - имеется ввиду 5 нс, 10 нс, 15 нс и т.д.
про третий клок не понял.
У меня задача: подавать на АЦП частоту 50 МГц, а на запуск лазера импульс кратный 5 нс (см. выше). Один относительно другого должны сдвигаться на 0,5 нс, то есть 40 сдвигов на период сэмплирования АЦП. Неважно что куда двигать, важно иметь заданный сдвиг.
Вообще задача была внутри FPGA сформировать сдвиги для того чтобы выкинуть с платы схему сдвигов на дискрентых компонентах. Видимо пока на получится.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.