Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Spartan 6 Ввод тактового сигнала ПЛИС
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
ZZZRF413
Всем доброго дня!

Помогите пожалуйста разобраться: "проседает" тактовый сигнал на ПЛИС XC6SLX100T с генератора. Микросхема генератора AD9518. Выходы генератора запрограммированы на выходное дифференциальное напряжение в 960 mV. Стандарт LVPECL_33. ПЛИС запускается 50/50. В последнее время преимущественно не запускается. На рисунках 1 и 3 в прикреплении показан тактовый сигнал на ПЛИС (рис. 1 (CLK_1)) и тактовый сигнал на АЦП с того же генератора (рис. 3 (CLK_ADC_3)).

Так же сильно "подсажен" с АЦП сигнал DCO, который используется в качестве тактового (рис. 2 (DCO_2)). Тип сигнала DCO: LVDS.
Сигнал с DCO в ПЛИС заводиться на PLL (DCO => IBUFDS => BUFG => PLL). PLL не запускается.
Если сделать на проход (DCO => IBUFDS => test_pin) то с выхода ПЛИС постоянный уровень '1'.
Ранее на тестовом сигнале в 200 МГц DCO сигнал воспринимался ПЛИС как тактовый (но не заводился на PLL) т.е. DCO => IBUFDS => BUFG, все работало. Форма сигнала не контролировалась.

Терминирующие резисторы тактового сигнала и DCO внешние и равны 100 Ом.

В чем может быть причина? Почему не работает? Как можно ещё по тестировать?
Timmy
Цитата(ZZZRF413 @ Feb 4 2015, 09:12) *
Терминирующие резисторы тактового сигнала и DCO внешние и равны 100 Ом.

Вот эта фраза наводит на подозрение, что вы неправильно терминировали lvpecl, там одним резистором не обойтись. По lvds, внешние терминирующие резисторы надо ставить возле источника, если невозможно их установить в непосредственной близости от приёмника, я обсуждал эту тему при первом появлении на форумеsm.gif. Так у меня успешно работает lvds 200МГц на 250мм линии. Кстати, на 180мм линии 200МГц клок на строне передатчика становится почти не виден, так как излучённый сигнал противофазно складывается с отражённым, но на стороне приёмника при этом всё в порядке.
В вашем случае можно попробовать использовать для LVDS внутренние терминаторы S6, а внешние отключить.

Ну и всё это надо моделировать Hyperlynx-ом, там проблемы видно хорошо, если правильно модель сделать.
des00
а смотрите чем ? 10-20 пф щупом ?
krux
схему подключения тактового - в студию!
ZZZRF413
Цитата(Timmy @ Feb 4 2015, 11:28) *
Вот эта фраза наводит на подозрение, что вы неправильно терминировали lvpecl, там одним резистором не обойтись. По lvds, внешние терминирующие резисторы надо ставить возле источника, если невозможно их установить в непосредственной близости от приёмника, я обсуждал эту тему при первом появлении на форумеsm.gif. Так у меня успешно работает lvds 200МГц на 250мм линии. Кстати, на 180мм линии 200МГц клок на строне передатчика становится почти не виден, так как излучённый сигнал противофазно складывается с отражённым, но на стороне приёмника при этом всё в порядке.
В вашем случае можно попробовать использовать для LVDS внутренние терминаторы S6, а внешние отключить.

Ну и всё это надо моделировать Hyperlynx-ом, там проблемы видно хорошо, если правильно модель сделать.


Убрал внешний резистор (он был непосредственно рядом с выводами; номинал проверел - 100 Ом), добавил внутренний. Картина не изменилась, ну может чуть чуть побольше сигнал стал.
Внутрений включал так:
ADC2_BUF: IBUFDS
generic map ( DIFF_TERM => TRUE)
...

Цитата(des00 @ Feb 4 2015, 18:01) *
а смотрите чем ? 10-20 пф щупом ?


Щуп Tektronix P6139B
10 МОм, 8 пФ

Цитата(krux @ Feb 4 2015, 18:38) *
схему подключения тактового - в студию!


В приложении
Lmx2315
..судя по схемам - вы отрезали среднюю точку у PECL, а для LVDS новую среднюю точку 1.25V не создали.
Timmy
Цитата(Lmx2315 @ Feb 5 2015, 13:27) *
..судя по схемам - вы отрезали среднюю точку у PECL, а для LVDS новую среднюю точку 1.25V не создали.

Да, есть такое дело. Но это не объясняет двукратную просадку напряжения на линии к FPGA по сравнению с линией к ADC.
8 pf щуп имеет емкостное сопротивление 50 Ом на 400МГц, так что пользоваться им нужно с оглядкой.
И вообще нет объяснения низкому напряжению на LVDS, разве что АЦП не сконфигурирован и ничего не передаёт. Кстати, это похоже на правду, ведь на осциллограмме LVDS 400МГц, а должно бы быть 200МГц.
des00
да нормальное у него напряжение, на щупе все падает 99%. нужен щуп с емкостью пару пикушек.
Timmy
Цитата(des00 @ Feb 5 2015, 15:56) *
да нормальное у него напряжение, на щупе все падает 99%. нужен щуп с емкостью пару пикушек.

От ёмкости не могла разница в 2 раза набраться, ведь сигнал к АЦП эта ёмкость тоже сажает. Хотя надо бы уточнить у ТС контрольные точки. Может быть, решающую роль сыграл длинный заземлитель через крокодил.
des00
Цитата(Timmy @ Feb 5 2015, 21:38) *
От ёмкости не могла разница в 2 раза набраться, ведь сигнал к АЦП эта ёмкость тоже сажает. Хотя надо бы уточнить у ТС контрольные точки. Может быть, решающую роль сыграл длинный заземлитель через крокодил.

Могла, был у меня подобный случай, как раз с тактовой под 200 МГц, судя по осцилу там все плохо по уровню. Взял нормальный осцил с полосой под гиг и высокочастотные щупы и все там стало нормально sm.gif
ZZZRF413
Цитата(Lmx2315 @ Feb 5 2015, 14:27) *
..судя по схемам - вы отрезали среднюю точку у PECL, а для LVDS новую среднюю точку 1.25V не создали.


Цитата(Timmy @ Feb 5 2015, 15:49) *
Да, есть такое дело. Но это не объясняет двукратную просадку напряжения на линии к FPGA по сравнению с линией к ADC.
8 pf щуп имеет емкостное сопротивление 50 Ом на 400МГц, так что пользоваться им нужно с оглядкой.
И вообще нет объяснения низкому напряжению на LVDS, разве что АЦП не сконфигурирован и ничего не передаёт. Кстати, это похоже на правду, ведь на осциллограмме LVDS 400МГц, а должно бы быть 200МГц.


В рабочем режиме частота должны быть 400 МГц. Это для тестирования я брал 200 МГц, чтобы посмотреть chipscope-ом (у него максимум 320 МГц). На chipscope в качестве тактового подавался сигнал DCO. Все работало.

Цитата(des00 @ Feb 5 2015, 16:56) *
да нормальное у него напряжение, на щупе все падает 99%. нужен щуп с емкостью пару пикушек.


Попробую щуп с меньшей емкостью

В приложении снимки DCO с использованием внутреннего сопротивления и с ножек разрядов данных D0, D1.
des00
Цитата(ZZZRF413 @ Feb 5 2015, 21:07) *
Попробую щуп с меньшей емкостью

вы еще не забывайте что если смотрите прямоугольный сигнал, то вам нужен осцил с намного более широкой аналоговой полосой и малым временем установления сигнала Иначе вы увидите смещенный недосинус маленькой амплитуды.
krux
картинка до конденсаторов С119 и С120 и после - одинаковая?
а с загруженной ПЛИС и с пустой?
а если снять С119 и С120?
если во всех случаях всё примерно одинаково выглядит - я бы проверил номиналы, что вам впаяли вместо R35 R36.

а так, вообще-то, подтяните входы к средней точке 1.25 В, сами они не подтянутся ;-)

и ещё, в отчете PAR какие буферы в LOC'ах фигурируют? должны быть только входные, и никак не BIDIR.
ViKo
Если у вас LVDS, то R39, R40 не нужны. А если PECL, то не нужен R10.
ZZZRF413
Сделал следующее:
Второй канал DCO 2 отключил, закоментировав соотвествующие выводы. Понизил частоту до 200 МГц. Картинки на линиях DCO_1 и DCO_2 в приложении. Так же подключил chipscope с тактовым сигналом (ADC1_DCO) от АЦП 1. И он работает! (см. приложение). А вот сигнала LOCKED с соотвествующей PLL нет. Может быть с PLL что-нибудь не так?
Код:
CODE

...
ADC1_DIFF_BUF : IBUFDS
generic map( DIFF_TERM => FALSE,
IOSTANDARD => "LVDS_25")
port map( I => ADC1_DCO_p,
IB => ADC1_DCO_n,
O => ADC1_DCO);
ADC1_DCO_BUFG: BUFG
port map(
I => ADC1_DCO,
O => ADC1_CLKIN);
ADC1_PLL:PLL_ADV
generic map
(
BANDWIDTH => "OPTIMIZED",
CLKIN1_PERIOD => 2.5,
CLKIN2_PERIOD => 2.5,
CLKOUT0_DIVIDE => 1,
CLKOUT1_DIVIDE => 4,
CLKOUT2_DIVIDE => 1,
CLKOUT3_DIVIDE => 1,
CLKOUT4_DIVIDE => 1,
CLKOUT5_DIVIDE => 1,
CLKOUT0_PHASE => 0.000,
CLKOUT1_PHASE => 0.000,
CLKOUT2_PHASE => 0.000,
CLKOUT3_PHASE => 0.000,
CLKOUT4_PHASE => 0.000,
CLKOUT5_PHASE => 0.000,
CLKOUT0_DUTY_CYCLE => 0.500,
CLKOUT1_DUTY_CYCLE => 0.500,
CLKOUT2_DUTY_CYCLE => 0.500,
CLKOUT3_DUTY_CYCLE => 0.500,
CLKOUT4_DUTY_CYCLE => 0.500,
CLKOUT5_DUTY_CYCLE => 0.500,
COMPENSATION => "INTERNAL",
DIVCLK_DIVIDE => 1,
CLKFBOUT_MULT => 1,
-- CLKFBOUT_MULT => 2,
CLKFBOUT_PHASE => 0.0,
REF_JITTER => 0.1,
SIM_DEVICE => "SPARTAN6"
)
port map
(
CLKFBIN => ADC1_CLKFB,
CLKINSEL => '1',
CLKIN1 => ADC1_CLKIN,
CLKIN2 => '0',
DADDR => (others => '0'),
DCLK => '0',
DEN => '0',
DI => (others => '0'),
DWE => '0',
REL => '0',
RST => reset,
CLKFBDCM => open,
CLKFBOUT => ADC1_CLKFB,
CLKOUTDCM0 => open,
CLKOUTDCM1 => open,
CLKOUTDCM2 => open,
CLKOUTDCM3 => open,
CLKOUTDCM4 => open,
CLKOUTDCM5 => open,
CLKOUT0 => ADC1_CLK,
CLKOUT1 => ADC1_DCLK,
CLKOUT2 => open,
CLKOUT3 => open,
CLKOUT4 => open,
CLKOUT5 => open,
DO => open,
DRDY => open,
LOCKED => ADC1_PLL_LOCKED
);

ADC1_BUFFPLL:BUFPLL
generic map( DIVIDE => 4,
ENABLE_SYNC => TRUE)
port map ( PLLIN => ADC1_CLK,
-- GCLK => ADC1_DIVCLK,
GCLK => DIVCLK,
LOCKED => ADC1_PLL_LOCKED,
IOCLK => ADC1_SerDes_CLK,
SERDESSTROBE => ADC1_SerDes_Strobe,
LOCK => adc1_bufpll_locked
);
ADC1_DCLK_BUF : BUFG
port map( I => ADC1_DCLK,
O => ADC1_DIVCLK);

--ADC2_DIFF_BUF : IBUFDS
-- generic map( DIFF_TERM => TRUE,
-- IOSTANDARD => "LVDS_25")
-- port map( I => ADC2_DCO_p,
-- IB => ADC2_DCO_n,
-- O => ADC2_DCO);
--test_out<=ADC2_DCO;
--ADC2_DCO_BUFG: BUFG
-- port map(
-- I => ADC2_DCO,
---- I => ADC2_DCO_BUF,
-- O => ADC2_CLKIN);
ADC2_CLKIN<='0';
ADC2_PLL:PLL_ADV
generic map
(
BANDWIDTH => "OPTIMIZED",
CLKIN1_PERIOD => 2.5,
CLKIN2_PERIOD => 2.5,
CLKOUT0_DIVIDE => 1,
CLKOUT1_DIVIDE => 4,
CLKOUT2_DIVIDE => 1,
CLKOUT3_DIVIDE => 1,
CLKOUT4_DIVIDE => 1,
CLKOUT5_DIVIDE => 1,
CLKOUT0_PHASE => 0.000,
CLKOUT1_PHASE => 0.000,
CLKOUT2_PHASE => 0.000,
CLKOUT3_PHASE => 0.000,
CLKOUT4_PHASE => 0.000,
CLKOUT5_PHASE => 0.000,
CLKOUT0_DUTY_CYCLE => 0.500,
CLKOUT1_DUTY_CYCLE => 0.500,
CLKOUT2_DUTY_CYCLE => 0.500,
CLKOUT3_DUTY_CYCLE => 0.500,
CLKOUT4_DUTY_CYCLE => 0.500,
CLKOUT5_DUTY_CYCLE => 0.500,
COMPENSATION => "INTERNAL",
DIVCLK_DIVIDE => 1,
CLKFBOUT_MULT => 1,
-- CLKFBOUT_MULT => 2,
CLKFBOUT_PHASE => 0.0,
REF_JITTER => 0.1,
SIM_DEVICE => "SPARTAN6"
)
port map
(
CLKFBIN => ADC2_CLKFB,
CLKINSEL => '1',
CLKIN1 => ADC2_CLKIN,
CLKIN2 => '0',
DADDR => (others => '0'),
DCLK => '0',
DEN => '0',
DI => (others => '0'),
DWE => '0',
REL => '0',
RST => reset,
CLKFBDCM => open,
CLKFBOUT => ADC2_CLKFB,
CLKOUTDCM0 => open,
CLKOUTDCM1 => open,
CLKOUTDCM2 => open,
CLKOUTDCM3 => open,
CLKOUTDCM4 => open,
CLKOUTDCM5 => open,
CLKOUT0 => ADC2_CLK,
CLKOUT1 => ADC2_DCLK,
CLKOUT2 => open,
CLKOUT3 => open,
CLKOUT4 => open,
CLKOUT5 => open,
DO => open,
DRDY => open,
LOCKED => ADC2_PLL_LOCKED
);

ADC2_BUFFPLL:BUFPLL
generic map( DIVIDE => 4,
ENABLE_SYNC => TRUE)
port map ( PLLIN => ADC2_CLK,
-- GCLK => ADC2_DIVCLK,
GCLK => DIVCLK,
LOCKED => ADC2_PLL_LOCKED,
IOCLK => ADC2_SerDes_CLK,
SERDESSTROBE => ADC2_SerDes_Strobe,
LOCK => adc2_bufpll_locked
);

ADC2_DCLK_BUF : BUFG
port map( I => ADC2_DCLK,
O => ADC2_DIVCLK);
...
ZZZRF413
Посмотрел тактовый сигнал на входе ПЛИС активным щупом - с ним все ОК (см. приложение).
В итоге пришел к выводу, что ПЛИС входную тактовую частоту 400 МГц не тянет. На 200 МГц все работает.
Timmy
Цитата(ZZZRF413 @ Feb 12 2015, 13:20) *
Посмотрел тактовый сигнал на входе ПЛИС активным щупом - с ним все ОК (см. приложение).
В итоге пришел к выводу, что ПЛИС входную тактовую частоту 400 МГц не тянет. На 200 МГц все работает.

Это очень даже вероятно. Думаю, при 400МГц не успевают переключаться линии общего интерконнекта, задержка по которым составляет ориентировочно более 2нс. Линия работает, как НЧ фильтр, и клок до конца не доходит. Теоретически, можно гарантировать прохождение клока через интерконнект, если максимальная задержка, выданная TRACE, составляет менее полупериода. А вот выделенные тактовые линии должны 400МГц пропускать.
ZZZRF413
Интересная особенность...
Установил на оба АЦП частоту тактирования 300 МГц. В результате один АЦП запускается, другой нет (т.е. PLL от сигнала DCO АЦП). А особенность в том что запускается PLL от сигнала DCO АЦП у которого есть внешний терминирующий резистор. PLL от сигнала DCO АЦП с внутренним терминирующем резистором не запускается. Посмотрел на вскидку уровни сигналов DCO на местах терминирующих резисторов - одинаковые.
Timmy
Цитата(ZZZRF413 @ Feb 12 2015, 20:10) *
Интересная особенность...
Установил на оба АЦП частоту тактирования 300 МГц. В результате один АЦП запускается, другой нет (т.е. PLL от сигнала DCO АЦП). А особенность в том что запускается PLL от сигнала DCO АЦП у которого есть внешний терминирующий резистор. PLL от сигнала DCO АЦП с внутренним терминирующем резистором не запускается. Посмотрел на вскидку уровни сигналов DCO на местах терминирующих резисторов - одинаковые.

Это может быть связано и с разной полосой пропускания в интерконнекте, интересно, что в отчёте STA сказано на этот счёт?
ZZZRF413
В STA все ок.
Ещё одна интересная особенность: обратно вернул внешний терминирующий резистор и все равно не работает :-)
( а на 200 МГц работает)...
В итоге взял тактовый сигнал на PLL с рабочего канала DCO...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.