реклама на сайте
подробности

 
 
> Десериализатор 600 MHz на Stratix II
boulon
сообщение Aug 11 2009, 08:34
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 25-08-06
Пользователь №: 19 820



Добрый день.

Столкнулся с проблемой следующего характера.
Реализовываю десериализатор, который принимает 8 LVDS 12-битных потоков с АЦП ADC5271 (50MSPS, 12 bits) на частоте 600 MHz, которые синхронизируются частотой 50 MHz тоже от этой микросхемы.
Из приходящей частоты 50 MHz сделал 2 клока 300MHz (сдвиг 180 град) для фиксации четных и нечетных бит и 50MHz для конечной фиксации 12-бит слова. Настроил фазы всех этих частот по паттернам из микросхемы (микросхема может генерировать 2 паттерна "101010101010" и "111111000000") для настройки. Все работает хорошо, но...
При добавлении новых модулей в стратикс и новой компиляции происходит рассинхронизация - меняется расскладка и приходится каждый раз подбирать фазы клоков. А так как на плате стоит 8 микросхем АЦП, то работа достаточно долгая и нудная.
Зафиксировал десериализатор при помощи FloorPlan. Помогло, но не надолго. Сейчас, как я понимаю, могут меняться пути от ног микросхемы, куда приходят данные, до модуля десериализатора на кристале.
Нужно как то все зафиксировать чтобы при добавлении новых модулей и компиляции не было нужды каждый раз снова корректировать фазы клоков.
Уверен есть людт которые решали такую проблему.
Как грамотно разрешить ситуацию? Возможно можно зафиксировать раз и навсегда пути до модуля.

Спасибо.
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 24)
DmitryR
сообщение Aug 11 2009, 08:54
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770



Цитата(boulon @ Aug 11 2009, 12:34) *
Уверен есть людт которые решали такую проблему.

Вы правильно уверены, только зря не поискали по форуму: эта тема раз в пару месяцев обсуждается стабильно. Меняются только ADC, но все они на самом деле работают одинаково. Краткий пересказ:
- ловить данные надо по двум фронтам LCLK
- определять нулевой бит и записывать в FIFO надо по ADCLK
- если внутренности FPGA работают на ADCLK то без FIFO можно обойтись, если на синхронной, но другой частоте (например от PLL, которая раздает по плате частоты) - то FIFO можно заменить на эластичный буфер
Go to the top of the page
 
+Quote Post
boulon
сообщение Aug 11 2009, 10:22
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 25-08-06
Пользователь №: 19 820



Цитата(DmitryR @ Aug 11 2009, 11:54) *
Вы правильно уверены, только зря не поискали по форуму: эта тема раз в пару месяцев обсуждается стабильно. Меняются только ADC, но все они на самом деле работают одинаково. Краткий пересказ:
- ловить данные надо по двум фронтам LCLK
- определять нулевой бит и записывать в FIFO надо по ADCLK
- если внутренности FPGA работают на ADCLK то без FIFO можно обойтись, если на синхронной, но другой частоте (например от PLL, которая раздает по плате частоты) - то FIFO можно заменить на эластичный буфер


я все так и делаю. Проблема в том, что при добавлении модуля и компиляции все расстраивается и надо снова подбирать фазы клоков.
Можно ли как то зафиксировать пути сигналов от ног и до модуля дессериализации?
Go to the top of the page
 
+Quote Post
SM
сообщение Aug 11 2009, 10:36
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(boulon @ Aug 11 2009, 14:22) *
Можно ли как то зафиксировать пути сигналов от ног и до модуля дессериализации?

Можно, использовав входные триггеры в IO-целлах. Они никуда переехать не могут smile.gif
Go to the top of the page
 
+Quote Post
boulon
сообщение Aug 11 2009, 10:53
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 25-08-06
Пользователь №: 19 820



Цитата(SM @ Aug 11 2009, 13:36) *
Можно, использовав входные триггеры в IO-целлах. Они никуда переехать не могут smile.gif


нет я имел ввиду другое. Данные заходят в кристал через IO селл и потом идут через кристал в модуль десериализатора. Так вот эти пути, от IO селл до модуля. Потому что получается что от одной компиляции к другой они могут быть разные и набег фаз разный. А у меня 8 каналов данных параллельно.
Go to the top of the page
 
+Quote Post
SM
сообщение Aug 11 2009, 11:00
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(boulon @ Aug 11 2009, 14:53) *
нет я имел ввиду другое. Данные заходят в кристал через IO селл и потом идут через кристал в модуль десериализатора. Так вот эти пути, от IO селл до модуля. Потому что получается что от одной компиляции к другой они могут быть разные и набег фаз разный. А у меня 8 каналов данных параллельно.

Если триггер в модуле и триггер в IO-целле тактируются одним клоком, и правильно указаны констрейны, то квартус автоматически выдержит правильную времянку при разводке от IO-целла до модуля.
Go to the top of the page
 
+Quote Post
DmitryR
сообщение Aug 11 2009, 11:19
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770



Цитата(boulon @ Aug 11 2009, 14:22) *
я все так и делаю.

Цитата(boulon @ Aug 11 2009, 12:34) *
Из приходящей частоты 50 MHz сделал 2 клока 300MHz (сдвиг 180 град) для фиксации четных и нечетных бит и 50MHz для конечной фиксации 12-бит слова.

Еще раз: вы делаете АБСОЛЮТНО не так, как я сказал. Или очень плохо описываете свои мысли. Не надо ничего делать из приходящей 50, LCLK - это 300 МГц. Надо прямо на ней хлопать по двум фронтам.
Go to the top of the page
 
+Quote Post
boulon
сообщение Aug 11 2009, 11:26
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 25-08-06
Пользователь №: 19 820



Цитата(SM @ Aug 11 2009, 14:00) *
Если триггер в модуле и триггер в IO-целле тактируются одним клоком, и правильно указаны констрейны, то квартус автоматически выдержит правильную времянку при разводке от IO-целла до модуля.

то есть из моего модуля вынести первый тригер "захвата" входящих данных в IO селл? Каким констрейнтом это можно сделать?
Go to the top of the page
 
+Quote Post
SM
сообщение Aug 11 2009, 11:29
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(boulon @ Aug 11 2009, 15:26) *
то есть из моего модуля вынести первый тригер "захвата" входящих данных в IO селл? Каким констрейнтом это можно сделать?

Fast Input Register = ON (для пина), причем Вам надо смотреть в сторону DDR-регистров, коих в IO-целле как раз пара, и потом еще проверить по отчетам, вынесся ли он туда. А то не каждый триггер можно туда засунуть, он должен соответствовать неким требованиям, в основном в части сигналов сброса, предустановки. Читайте апноты.
Go to the top of the page
 
+Quote Post
boulon
сообщение Aug 11 2009, 11:30
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 25-08-06
Пользователь №: 19 820



Цитата(DmitryR @ Aug 11 2009, 14:19) *
Еще раз: вы делаете АБСОЛЮТНО не так, как я сказал. Или очень плохо описываете свои мысли. Не надо ничего делать из приходящей 50, LCLK - это 300 МГц. Надо прямо на ней хлопать по двум фронтам.

у меня нету на альтере такого клока, все что заведено на плате это 50 MHz для синхронизации нулевого бита (начало слова) и данные (8 последовательных потоков). Теперь для фиксации каждого бита мне надо 50 мегагерц умножать в 6 раз и получать нужные клоки - 300 мегагерц. Вобщем, у меня модуль делает из входного клока 50MHz 3 частоты: 300MHz, 300MHz(180 град) и 50 MHz уже для фиксации всех 12 бит после их накопления в сдвиговых регистрах.
Да, действительно, я это не описал раньше.

Цитата(SM @ Aug 11 2009, 14:29) *
Fast Input Register = ON

спасибо, если это поможет

Сообщение отредактировал boulon - Aug 11 2009, 11:37
Go to the top of the page
 
+Quote Post
SM
сообщение Aug 11 2009, 11:36
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(boulon @ Aug 11 2009, 15:30) *
спасибо, если это поможет


Смотрите картинку 2-52 вот там http://www.altera.com/literature/hb/stx2/stx2_sii51002.pdf
Там есть 2 input-регистра, один работает по фронту, второй по спаду, так вот Вам лучше их задействовать, да и клока одного хватит, не надо делать два разных двинутых 300-МГцовых.
Go to the top of the page
 
+Quote Post
boulon
сообщение Aug 11 2009, 11:57
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 25-08-06
Пользователь №: 19 820



Цитата(SM @ Aug 11 2009, 14:36) *
Смотрите картинку 2-52 вот там http://www.altera.com/literature/hb/stx2/stx2_sii51002.pdf
Там есть 2 input-регистра, один работает по фронту, второй по спаду, так вот Вам лучше их задействовать, да и клока одного хватит, не надо делать два разных двинутых 300-МГцовых.

не хватит,
пишут что их всего 6 на микросхеме, у меня же всего 64 канала с АЦП (8 восьмиканальных АЦП на плате)
Go to the top of the page
 
+Quote Post
SM
сообщение Aug 11 2009, 12:00
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(boulon @ Aug 11 2009, 15:57) *
пишут что их всего 6 на микросхеме, у меня же всего 64 канала с АЦП (8 восьмиканальных АЦП на плате)

Что-то не то пишут... Вы знаете, какой ширины бывает шина DDR-памяти? Ну никак не 6 бит. 64 уж точно. А то и 128.
Go to the top of the page
 
+Quote Post
DmitryR
сообщение Aug 11 2009, 12:04
Сообщение #14


Профессионал
*****

Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770



Цитата(boulon @ Aug 11 2009, 15:30) *
у меня нету на альтере такого клока, все что заведено на плате это 50 MHz для синхронизации нулевого бита (начало слова) и данные (8 последовательных потоков).

То есть человек, который делал плату даже не поинтересовался, что же это за выход такой у АЦП, LCLK. Поэтому у вас теперь будет гемморой, если вообще что-то выйдет. И вот почему:
1. Фронт ADCLK может гулять +-350ps, то есть 700 ps p-p (стр. 7), и вместе с ним будет гулять фаза умноженного клока, а у вас все окно данных 1666 ps, минус фронт еще 180 ps минимум (на той же странице).
2. Из документации непонятно, какой у этого ADCLK джиттер и соответственно непонятно, какой он будет у вас на выходе PLL.
Вобщем я думаю, что тут без периодической перекалибровки не получится. И в любом случае я бы не отдал такую плату заказчику: надо переделать, разведя LCLK, и все станет легко.
Go to the top of the page
 
+Quote Post
boulon
сообщение Aug 11 2009, 12:31
Сообщение #15


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 25-08-06
Пользователь №: 19 820



Цитата(DmitryR @ Aug 11 2009, 15:04) *
То есть человек, который делал плату даже не поинтересовался, что же это за выход такой у АЦП, LCLK. Поэтому у вас теперь будет гемморой, если вообще что-то выйдет. И вот почему:
1. Фронт ADCLK может гулять +-350ps, то есть 700 ps p-p (стр. 7), и вместе с ним будет гулять фаза умноженного клока, а у вас все окно данных 1666 ps, минус фронт еще 180 ps минимум (на той же странице).
2. Из документации непонятно, какой у этого ADCLK джиттер и соответственно непонятно, какой он будет у вас на выходе PLL.
Вобщем я думаю, что тут без периодической перекалибровки не получится. И в любом случае я бы не отдал такую плату заказчику: надо переделать, разведя LCLK, и все станет легко.

человек, который делал плату уволился и поэтому...
а меня этот постоянная настройка уже выводит и очень сильно, я решил глобально решить эту проблему, поэтому и обратился сюда.
После каждой компиляции корректировать фазы на PLL и компилировать снова очень расточительно.Одна компиляция занимает 15 минут.
Go to the top of the page
 
+Quote Post
DmitryR
сообщение Aug 11 2009, 12:42
Сообщение #16


Профессионал
*****

Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770



Увы, я абсолютно уверен, что глобально решить эту проблему можно только переделкой платы. А так я думаю у вас и без перекомпиляции фаза будет периодически съезжать. В дополнении ко всему еще возникает конечно ощущение, что у вас сам дизайн сделан как-то неверно. Параллельно с переделкой платы (надеюсь, ваш уволившийся не унес схематику с собой) сделайте timesim модель десериализатора (по-правильному, с LCLK) и добейтесь того, чтобы она работала идеально.

P.S. А что вы FPGA-то такие древние взяли?
Go to the top of the page
 
+Quote Post
boulon
сообщение Aug 11 2009, 12:54
Сообщение #17


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 25-08-06
Пользователь №: 19 820



Цитата(DmitryR @ Aug 11 2009, 15:42) *
Увы, я абсолютно уверен, что глобально решить эту проблему можно только переделкой платы. А так я думаю у вас и без перекомпиляции фаза будет периодически съезжать. В дополнении ко всему еще возникает конечно ощущение, что у вас сам дизайн сделан как-то неверно. Параллельно с переделкой платы (надеюсь, ваш уволившийся не унес схематику с собой) сделайте timesim модель десериализатора (по-правильному, с LCLK) и добейтесь того, чтобы она работала идеально.

P.S. А что вы FPGA-то такие древние взяли?

да, вы правы, при изменении температуры платы/чипа (например при начальном запуске) видно как фаза уезжает.
Кристалл сейчас занят на треть и я боюсь что если еще пихать модули так я не смогу настроить в принципе.
По выбору микросхем и платы - это было еще до меня, моя задача теперь запрограммировать с таким железом как есть.
А чип выбран EP2S60 1020 ног.
Я бы взял специальные для этого дела Arria

Сообщение отредактировал boulon - Aug 11 2009, 13:01
Go to the top of the page
 
+Quote Post
SM
сообщение Aug 11 2009, 13:08
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Задействуйте DDR-регистры, и фаза должна перестать уезжать вообще. Они придуманы специально для этого.
Go to the top of the page
 
+Quote Post
DmitryR
сообщение Aug 11 2009, 13:13
Сообщение #19


Профессионал
*****

Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770



Не смешивайте две проблемы. Сначала сделайте работоспособный дизайн с помощью модели (тайминговой). На модели у вас будет для начала идеальная частота, все должно заработать. Потом на модели же испортите входную частоту (введите вандер например +-150 ps), посмотрите в каких пределах ее качества дизайн сохраняет работоспособность. Если будут подозрения, что запаса прочности дизайна окажется недостаточно - стройте динамическую перекалибровку (АЦП периодически переводится в тестовый режим и фаза PLL гоняется до тех пор, пока не встанет в нужное место). Но опять же IMHO, это все можно делать чтобы удовлетворить начальство, типа смотрите я из мертвой платы сделал что-то. Клиенту такое монстрячество отдавать нельзя. Да еще там 64 канала, устройство серьезное видно.
Go to the top of the page
 
+Quote Post
boulon
сообщение Aug 11 2009, 13:19
Сообщение #20


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 25-08-06
Пользователь №: 19 820



Цитата(DmitryR @ Aug 11 2009, 16:13) *
Не смешивайте две проблемы. Сначала сделайте работоспособный дизайн с помощью модели (тайминговой). На модели у вас будет для начала идеальная частота, все должно заработать. Потом на модели же испортите входную частоту (введите вандер например +-150 ps), посмотрите в каких пределах ее качества дизайн сохраняет работоспособность. Если будут подозрения, что запаса прочности дизайна окажется недостаточно - стройте динамическую перекалибровку (АЦП периодически переводится в тестовый режим и фаза PLL гоняется до тех пор, пока не встанет в нужное место). Но опять же IMHO, это все можно делать чтобы удовлетворить начальство, типа смотрите я из мертвой платы сделал что-то. Клиенту такое монстрячество отдавать нельзя. Да еще там 64 канала, устройство серьезное видно.

фазы на выходе PLL разве можно менять динамически, не перекомпилируя проект?
Go to the top of the page
 
+Quote Post
DmitryR
сообщение Aug 11 2009, 13:55
Сообщение #21


Профессионал
*****

Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770



AN367 читайте.

Цитата(boulon @ Aug 11 2009, 16:54) *
Я бы взял специальные для этого дела Arria

Arria бы вам тут ничем не помогла - ее трансиверы с такими сигналами не работают.
Go to the top of the page
 
+Quote Post
boulon
сообщение Aug 11 2009, 14:18
Сообщение #22


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 25-08-06
Пользователь №: 19 820



Цитата(SM @ Aug 11 2009, 16:08) *
Задействуйте DDR-регистры, и фаза должна перестать уезжать вообще. Они придуманы специально для этого.

подскажите как это проще сделать?
Go to the top of the page
 
+Quote Post
SM
сообщение Aug 11 2009, 14:28
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(boulon @ Aug 11 2009, 18:18) *
подскажите как это проще сделать?


мегафункция altddio_in.
Go to the top of the page
 
+Quote Post
ArMouReR
сообщение Aug 16 2009, 12:47
Сообщение #24


Участник
*

Группа: Свой
Сообщений: 61
Регистрация: 3-03-06
Пользователь №: 14 936



Цитата(boulon @ Aug 11 2009, 16:19) *
фазы на выходе PLL разве можно менять динамически, не перекомпилируя проект?

Да.
Для етого в MegaWizarde выберите функцию ALTPLL_RECONFIG.

У Вас появятся входы для динамической реконфигурации.
Go to the top of the page
 
+Quote Post
boulon
сообщение Sep 30 2009, 12:06
Сообщение #25


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 25-08-06
Пользователь №: 19 820



Даю отчет.

Сделал как советовали, используя входные регистры в IO селлах. И это действительно помогло. Уже добавил много новых модулей в проект, фазы никуда не уехали. Плату пока не переделываем.

Спасибо всем за содействие.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 10:12
Рейтинг@Mail.ru


Страница сгенерированна за 0.01617 секунд с 7
ELECTRONIX ©2004-2016