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

 
 
 
Reply to this topicStart new topic
> Тактовая частота через PLL, три нагрузки, Spartan6
AVR
сообщение Dec 18 2016, 15:50
Сообщение #1


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Здравствуйте!
Я всегда использовал PLL только для того чтобы изменить частоту внутри ПЛИС и это всегда было просто и легко. Теперь завяз в более сложной конфигурации. Требуется входную частоту 24 МГц превратить в 48 МГц и подать на три нагрузки:
1) внутренняя логика
2) выход однополярный клок ЦАП
3) выход дифференциальный клок АЦП
Перед созданием темы произвел поиск по форуму, но решая одну проблему возникает прежняя.

Сейчас схема такая:
Код
[Вход 24 МГц] -> [PLL из 24 в 48 МГц] -> [BUFG] -> (*) -> [такты внутриПЛИСной логики]
(*) -> [OBUF тактовый выход ЦАП]
(*) -> [OBUFDS дифф выход тактов АЦП]

Схема не разводится ни при наличии BUFG после PLL ни при его отсутствии, ни если убрать OBUF для тактов ЦАП а задействовать просто assign.
Что не правильно в этой схеме и как правильно делать?
Презентацию spartan-6-clocking-resources.pptx от Xilinx смотрел, просветления не произошло.


--------------------
Go to the top of the page
 
+Quote Post
dm.pogrebnoy
сообщение Dec 18 2016, 16:20
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 747
Регистрация: 11-04-07
Пользователь №: 26 933



Цитата(AVR @ Dec 18 2016, 18:50) *
Схема не разводится ни при наличии BUFG после PLL ни при его отсутствии, ни если убрать OBUF для тактов ЦАП а задействовать просто assign.


Телепаты в отпуске. Проясните, что вы под этим подразумеваете?


--------------------
Go to the top of the page
 
+Quote Post
AVR
сообщение Dec 18 2016, 17:09
Сообщение #3


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Цитата(dm.pogrebnoy @ Dec 18 2016, 19:20) *
Телепаты в отпуске. Проясните, что вы под этим подразумеваете?
Компиляция завершается с ошибками на этапе map либо на этапе формирования файла прошивки. Какая именно ошибка - не имеет значения, каждая комбинация выдает свою ошибку. Мне кажется я уже перепробовал все мыслимые варианты.

Честно, мне трудно сформулировать эту ситуацию...
Попробую иными словами: нужно из входного тактового сигнала 24 МГц сделать 48 МГц и получившуюся частоту 48 МГц подать на три потребителя: внутренняя логика, выдать из ПЛИС однополярные такты на ЦАП, выдать из ПЛИС дифференциальные такты на АЦП.

По отдельности, если 48 МГц подавать только на внутреннюю логику (always posedge), или на OBUFDS чтобы выдать такты АЦП, или только выводить для ЦАП - всё собирается. Когда же я хочу всё сразу одновременно, возникают ошибки.

Либо это ограничения ПЛИС, либо могут выводы не позволять выводить такты (но отдельно то можно), либо я буферы неправильно использую, не там и не туда сую BUFG. Просто хотел бы попросить совета как это делать правильно, и вообще возможно ли выход PLL подать на три разные нагрузки?

Может просто у PLL задействовать ТРИ выхода и на всех них будет одна частота по 48 МГц? (это я уже под конец додумался, надо проверить завтра)


--------------------
Go to the top of the page
 
+Quote Post
makc
сообщение Dec 18 2016, 18:34
Сообщение #4


Гуру
******

Группа: Админы
Сообщений: 3 621
Регистрация: 18-10-04
Из: Москва
Пользователь №: 904



Есть User Guide UG382, в котором описана структура ПЛИС в части формования и распределения тактовых сигналов. Может быть Вы хотите невозможного, но чтобы это понять - нужно проанализировать структуру Ваших тактовых цепей с точки зрения этого документа. Возможно, что автоматическое размещение не позволяет потом при трассировке использовать какие-то выделенные ресурсы и требуется ручное размещение.

В любом случае для получения более детальных советов требуется текст сообщений об ошибках. Пусть он и разный.


--------------------
BR, Makc
В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
Go to the top of the page
 
+Quote Post
TRILLER
сообщение Dec 18 2016, 20:22
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 180
Регистрация: 17-02-09
Из: Санкт-Петербург
Пользователь №: 45 001



Используйте ODDR.
Go to the top of the page
 
+Quote Post
Bad0512
сообщение Dec 19 2016, 02:11
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 802
Регистрация: 11-05-07
Из: Томск
Пользователь №: 27 650



Цитата(AVR @ Dec 18 2016, 22:50) *
2) выход однополярный клок ЦАП
3) выход дифференциальный клок АЦП

Это очень плохая идея - прогонять тактирующие клоки для АЦП и ЦАП через ПЛИС. Угробите все характеристики за счёт адского джиттера по клоку.
Не экономьте на клоковых буферах в следующий раз.

Go to the top of the page
 
+Quote Post
AVR
сообщение Dec 25 2016, 16:56
Сообщение #7


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Цитата(TRILLER @ Dec 18 2016, 23:22) *
Используйте ODDR.
Благодарю за совет. Если честно, столь короткий комментарий был мной решительно проигнорирован - не ясно как это могло помочь, а напрасно. Дополнительное чтение ошибок компилятора, а также UG382 привело к пониманию что ODDR2 ведь расположен у самого выхода из ПЛИС, и если дать данные 1 и 0 и заклокать их - будет тот же самый клок на выходе, о чем и пишут в UG382 если я правильно понял суть этой ихней хитроумной задумки.

Пока что вижу что проект хотя бы разводится! Спасибо за помощь и подсказки!
Попробую его посимулить с задержками, будет ли всё хорошо.

Код
wire pll_fb;
wire clock48m_logic;
wire clock48m_dac;
wire clock48m_adc;
pll24to48 pll(
.fb_in(pll_fb),
.fb_out(pll_fb),
.clock24m(clock24m),
// три разные нагрузки
.clock48m_1(clock48m_logic),
.clock48m_2(clock48m_dac),
.clock48m_3(clock48m_adc));

wire adc_clock;
ODDR2 adc_clk(
.D0(1), .D1(0),
.C0(clock48m_adc),
.C1(~clock48m_adc),
.Q(adc_clock));
OBUFDS adc_clk_diff( // дифф клок на выходе - так правильно???
.I(adc_clock),
.O(CLKP),
.OB(CLKM));

ODDR2 dac_clk(
.D0(1), .D1(0),
.C0(clock48m_dac),
.C1(~clock48m_dac),
.Q(dac_clock)); // клок ЦАП
always @(posedge clock48m_logic) begin
    dac <= dac + 10'b1; // просто тестовая пила
end

always @(posedge clock48m_logic) begin
// тут логика живет
end
Хотя тут же увидел ошибку - вход C1 у ODDR2 кажется уже сам по себе инвертирует.

Цитата
Это очень плохая идея - прогонять тактирующие клоки для АЦП и ЦАП через ПЛИС. Угробите все характеристики за счёт адского джиттера по клоку.
Не экономьте на клоковых буферах в следующий раз.
Вы предлагаете ставить полностью внешние клочья? Дело в том что у меня в одном режиме просто 24->48 МГц, а в другом режиме более экзотическая частота, которую ПЛИСный DCM вполне получает, внешнюю микросхему для решения такой задачи (да еще с тремя выходами, один из них дифф, хотя может еще один буфер это решает) по неопытности еще пока не присмотрел...


--------------------
Go to the top of the page
 
+Quote Post
dm.pogrebnoy
сообщение Dec 25 2016, 20:31
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 747
Регистрация: 11-04-07
Пользователь №: 26 933



Цитата(AVR @ Dec 25 2016, 19:56) *
Вы предлагаете ставить полностью внешние клочья? Дело в том что у меня в одном режиме просто 24->48 МГц, а в другом режиме более экзотическая частота, которую ПЛИСный DCM вполне получает, внешнюю микросхему для решения такой задачи (да еще с тремя выходами, один из них дифф, хотя может еще один буфер это решает) по неопытности еще пока не присмотрел...

Если укажете модели ЦАП и АЦП, то можно прикинуть, но в общем случае идея очень плохая.


--------------------
Go to the top of the page
 
+Quote Post
ViKo
сообщение Dec 26 2016, 05:37
Сообщение #9


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



В Риголах и Теквэях с Циклона идут 8 тактов, сдвинутых по фазе, на АЦП, и получается 1 ГВыб/с.
Go to the top of the page
 
+Quote Post
AVR
сообщение Dec 26 2016, 07:01
Сообщение #10


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Цитата(dm.pogrebnoy @ Dec 25 2016, 23:31) *
Если укажите модели ЦАП и АЦП, то можно прикинуть, но в общем случае идея очень плохая.
Прошу прощения, какая идея плохая? Выше мне подсказывают что генерировать и распределять такты внутри ПЛИС это вредно для джиттера (хотя не сильно ясно почему, у меня только предположения). Другое мнение что правильнее всё же внешне генерировать и распределять клоки вне ПЛИС (используя клок-буферы, да?).
ЦАП: AD8065ARZ
АЦП: ADS5542

Цитата(ViKo @ Dec 26 2016, 08:37) *
В Риголах и Теквэях с Циклона идут 8 тактов, сдвинутых по фазе, на АЦП, и получается 1 ГВыб/с.
Кстати, не так ли работает SERDES? А то я в книжечке от Xilinx "Serial made simple" (как-то так) читал что именно так делают большую частоту в подобных блоках. В общем, мне понятен комментарий, в плане что выводить из ПЛИС так много тактовых сигналов это допустимо и это работает.


--------------------
Go to the top of the page
 
+Quote Post
ViKo
сообщение Dec 26 2016, 09:11
Сообщение #11


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(AVR @ Dec 26 2016, 10:01) *
Кстати, не так ли работает SERDES?

Там джиттер вместе с остальными определяет состояние "работает - не работает". А в АЦП и ЦАП плавно влияет на отношение сигнал-шум.
Go to the top of the page
 
+Quote Post
Lmx2315
сообщение Dec 26 2016, 10:46
Сообщение #12


отэц
*****

Группа: Свой
Сообщений: 1 729
Регистрация: 18-09-05
Из: Москва
Пользователь №: 8 684



http://www.ti.com/tool/jitter-snr-calc
тут можно скачать архивчик с екселевским листочком для расчёта требуемого джиттера клоков в зависимости от ожидаемого качества сигнала и его частоты.
А тут табличка есть с примерами:
https://ru.wikipedia.org/wiki/%D0%90%D0%BD%...%B5%D0%BB%D1%8C
Откуда следует что если у вас джитер клоков будет хуже чем 2 пс , то для измерений 10 МГц сигнала уже можно 16 битный АЦП не закладывать.


--------------------
b4edbc0f854dda469460aa1aa a5ba2bd36cbe9d4bc8f92179f 8f3fec5d9da7f0
SHA-256
Go to the top of the page
 
+Quote Post
AVR
сообщение Dec 26 2016, 12:00
Сообщение #13


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Цитата(Lmx2315 @ Dec 26 2016, 13:46) *
http://www.ti.com/tool/jitter-snr-calc
тут можно скачать архивчик с екселевским листочком для расчёта требуемого джиттера клоков в зависимости от ожидаемого качества сигнала и его частоты.
А тут табличка есть с примерами:
https://ru.wikipedia.org/wiki/%D0%90%D0%BD%...%B5%D0%BB%D1%8C
Откуда следует что если у вас джитер клоков будет хуже чем 2 пс , то для измерений 10 МГц сигнала уже можно 16 битный АЦП не закладывать.

Спасибо, это важная информация. Единицы пикосекунд мне кажутся жестким требованием, и похоже заложенный генератор хуже необходимого...
Интересует тогда такой вопрос: DCM_SP блок в ПЛИС Spartan 6 он лишь ухудшает джиттер?
Почему мне не стыдно задавать такие вопросы: в этой задаче я отвечаю за цифровую часть, аналоговой стороной занимается другой человек. Пожалуй, есть мысли как сделать следующую ревизию платы.

Я так понимаю, лучше всего напрямую подавать такты с генератора. Каждому устройству - свой генератор с наименьшим джиттером. Правда как тогда решить задачу, что разность фазы между разными генераторами должна быть постоянной величиной. Мне известно что они не обладают точной настройкой и вообще плывут со временем и от температуры. Поэтому казалось логичным что они будут заклоканы через ПЛИС от одного генератора.

Правильно ли я понимаю что наилучший вариант это сделать от одного генератора через "разветвитель клоков" (конкретных микросхем пока не знаю) - так будет постоянная разность фаз.


--------------------
Go to the top of the page
 
+Quote Post
Lmx2315
сообщение Dec 26 2016, 16:02
Сообщение #14


отэц
*****

Группа: Свой
Сообщений: 1 729
Регистрация: 18-09-05
Из: Москва
Пользователь №: 8 684



Вы наберите в поиске по форуму фразу - "разветвитель клоков" , много любопытных тем есть, советую.


--------------------
b4edbc0f854dda469460aa1aa a5ba2bd36cbe9d4bc8f92179f 8f3fec5d9da7f0
SHA-256
Go to the top of the page
 
+Quote Post

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

 


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


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