Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Тактирование внешнего устройства с ПЛИС
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
ADA007
Доброго всем времени суток.
Столкнулся с задачей выдачи дифференциального тактового импульса на внешнюю микруху. Вроде бы ниечго такого, а как это сделать правильно?
ПЛИС использую Virtex4 тактовая 200 МГц тактировать надо AD9854asq частотой 50 МГц двумя развернутыми относительно друг друга на 180 сигналами.... в ДШ написано 3,3 CMOS level. Банк ПЛИС, подключенный к ногам такторования питается от 3.3В.
1) Думал в начале использовать OBUFDS - который преобразовует singl ended в differential - но тут оказался облом, походу 3,3 он не поддерживает! или я что-то упустил?
2) Можно конечно же прям с DCM взять CLK0 и CLK180 и пустить их на ноги ПЛИС, но надо фронты чем-то выровнять в таком случае. Как это правильно сделать?
На форуме наткнулся на подобную тему .. но у меня не получилось LVDS_25 запихать в LVCMOS33 ...

Кто в курсе, подскажите, как правильно...а то я уже 2-й день ищу.... wacko.gif
Lmx2315
QUOTE (ADA007 @ Nov 6 2014, 12:50) *
Доброго всем времени суток.
Столкнулся с задачей выдачи дифференциального тактового импульса на внешнюю микруху.


..выводите lVDS сигнал через OBUFDS, в свойствах выставьте LVDS_25 , банк питайте от 3.3.
з.ы.
Только плохо это очень - делать в ПЛИС клоки для DDS синтезаторов.
ADA007
Цитата(Lmx2315 @ Nov 6 2014, 14:08) *
..выводите lVDS сигнал через OBUFDS, в свойствах выставьте LVDS_25 , банк питайте от 3.3.
з.ы.
Только плохо это очень - делать в ПЛИС клоки для DDS синтезаторов.

Да...я понимаю, что плохо..но эт требование заказчика.
Написал в коде =
Код
    i_OBUFDS_50 : OBUFDS
   generic map (
      CAPACITANCE => "NORMAL", -- "LOW", "NORMAL", "DONT_CARE"
      IOSTANDARD => "LVDS_25") -- "DEFAULT"
   port map (
      O => RCLK_P_50_OUTP,  -- Diff_p output
      OB => RCLK_N_50_OUTP, -- Diff_n output
      I => clk_50_s         -- Buffer input
   );

При этом в UCF =
Код
NET "RCLK_P_50_OUTP" LOC = B15 | IOSTANDARD = LVCMOS33 | SLEW = FAST;
NET "RCLK_N_50_OUTP" LOC = A15 | IOSTANDARD = LVCMOS33 | SLEW = FAST;

Получил FAIL в MAP два аналогичных для P и N сигнала =
Код
ERROR:Pack:2907 - The I/O component "RCLK_N_50_OUTP" has an illegal IOSTANDARD
   value.  The IOBS component is configured to use differential signaling and
   can not use single-ended IOSTANDARD value LVCMOS33.  Two ways to rectify this
   issue are: 1) Change the IOSTANDARD value to a differential standard. 2)
   Correct the I/O connectivity by instantiating a single-ended I/O buffer.


В Pin Planer-e можно выбрать стандарты только на 2,5 LVDS и др. ... а на 3.3 нет ничего подходящего. И как быть?
Lmx2315
QUOTE (ADA007 @ Nov 6 2014, 15:02) *
При этом в UCF =
CODE
NET "RCLK_P_50_OUTP" LOC = B15 | IOSTANDARD = LVCMOS33 | SLEW = FAST;
NET "RCLK_N_50_OUTP" LOC = A15 | IOSTANDARD = LVCMOS33 | SLEW = FAST;

..вы же lvds выводите, зачем в свойствах ног вы пишете LVCMOS33 ?
ADA007
Цитата(Lmx2315 @ Nov 6 2014, 15:50) *
..вы же lvds выводите, зачем в свойствах ног вы пишете LVCMOS33 ?

А что нужно написать?...на LVDS_33 он тоже ругается, что не поддреживается! rolleyes.gif
Lmx2315
QUOTE (ADA007 @ Nov 6 2014, 16:15) *
А что нужно написать?...на LVDS_33 он тоже ругается, что не поддреживается! rolleyes.gif

попробуйте - LVDS_25
ADA007
Цитата(Lmx2315 @ Nov 6 2014, 16:29) *
попробуйте - LVDS_25

тогда на PAR fail-ится
Код
ERROR:Place:864 - Incompatible IOB's are locked to the same bank 5
   Conflicting IO Standards are:
   IO Standard 1: Name = LVDS_25, VREF = NR, VCCO = 2.50, TERM = NONE, DIR = OUTPUT, DRIVE_STR = NR
   List of locked IOB's:
       RCLK_N_50_OUTP
       RCLK_P_50_OUTP

   IO Standard 2: Name = LVCMOS33, VREF = NR, VCCO = 3.30, TERM = NONE, DIR = OUTPUT, DRIVE_STR = NR
   List of locked IOB's:
       MRST_OUTP
Lmx2315
..значит не судьба.
Zig
Не вижу никакой проблемы.
AD9854 может работать как с Single-Ended Reference Clock так и с Differential Clock Signals.
Причём Differential Clock Signals могут быть уровня LVCMOS.

Первое решение.
Single-Ended. Подайте 50МГц с делителы на ногу REFCLK, а ногу notREFCLK заземлите. Как рекомендовано в datasheet стр.10.

Второе решение.
Ести решите использовать Differential Clock Signals, то при помощи двух ODDR2 и двух OBUF типа LVCMOS33 выдайте через два вывода такты наружу.
Можно даже не использовать ODDR2. Достаточно разместить два триггера (для 0 и 180°) делителя частоты 200 МГц так, чтобы они оказались в IOB, чтобы убрать разность времени прохождения сигнала по связям кристалла.

ADA007
Цитата(Zig @ Nov 6 2014, 22:10) *
Достаточно разместить два триггера (для 0 и 180°) делителя частоты 200 МГц так, чтобы они оказались в IOB, чтобы убрать разность времени прохождения сигнала по связям кристалла.

Т.е. правильно будет, если я возьму с DCM CLK0 и CLK180 ...пропущу их через два триггра, тактируя их частотой 200 МГц и запихаю их в IOB?
Если для выходных сигналов, кот. выходят из триггеров указать в ucf INST "signal_name" IOB = TRUE; - от это значит, что он будет запихнут в IOB, я правильно понял?
dm.pogrebnoy
Цитата( @ Nov 6 2014, 22:10) *
Не вижу никакой проблемы.
AD9854 может работать как с Single-Ended Reference Clock так и с Differential Clock Signals.
Причём Differential Clock Signals могут быть уровня LVCMOS.

Первое решение.
Single-Ended. Подайте 50МГц с делителы на ногу REFCLK, а ногу notREFCLK заземлите. Как рекомендовано в datasheet стр.10.

Второе решение.
Ести решите использовать Differential Clock Signals, то при помощи двух ODDR2 и двух OBUF типа LVCMOS33 выдайте через два вывода такты наружу.
Можно даже не использовать ODDR2. Достаточно разместить два триггера (для 0 и 180°) делителя частоты 200 МГц так, чтобы они оказались в IOB, чтобы убрать разность времени прохождения сигнала по связям кристалла.


На сколько я помню выходные триггеры в IOB не имеют обратной связи в логику, чтобы можно было сделать на них делитель. Тем не менее все остальное верно, лучше всего использовать ODDR. На один информационный вход подать единицу, на другой ноль и затактировать требуемой частотой, как я понял 50 МГц. На соседнем ODDR ноль и единицу поменять местами. Судя по даташиту на ДДС такое подключение возможно если банк в ПЛИС питается от 3.3В
Bad0512
Цитата(dm.pogrebnoy @ Nov 7 2014, 04:44) *
На сколько я помню выходные триггеры в IOB не имеют обратной связи в логику, чтобы можно было сделать на них делитель. Тем не менее все остальное верно, лучше всего использовать ODDR. На один информационный вход подать единицу, на другой ноль и затактировать требуемой частотой, как я понял 50 МГц. На соседнем ODDR ноль и единицу поменять местами. Судя по даташиту на ДДС такое подключение возможно если банк в ПЛИС питается от 3.3В

И мои 5 копеек : мудохаться с поворачиванием фазы на 180 градусов на DCM совсем необязательно - в примитивах есть встроенный инвертор клока.
Timmy
Создаём на внутренней логике двухбитный счётчик-делитель на 4(выходная частота будет 50МГц), его выход подаём на SDR триггер в IOB, инверсированный выход подаём на SDR триггер во втором IOB и всё. Будет работать от 200МГц по одному фронту без инверсий клока, сдвигов фаз, DDR-ов и обратной связи через IOB.
dm.pogrebnoy
Цитата(Bad0512 @ Nov 7 2014, 08:10) *
И мои 5 копеек : мудохаться с поворачиванием фазы на 180 градусов на DCM совсем необязательно - в примитивах есть встроенный инвертор клока.

Дык я и не предлагаю поворачивать фазу при помощи DCM.
FakeDevice
Цитата(ADA007 @ Nov 6 2014, 16:32) *
тогда на PAR fail-ится
Код
ERROR:Place:864 - Incompatible IOB's are locked to the same bank 5
   Conflicting IO Standards are:
   IO Standard 1: Name = LVDS_25, VREF = NR, VCCO = 2.50, TERM = NONE, DIR = OUTPUT, DRIVE_STR = NR
   List of locked IOB's:
       RCLK_N_50_OUTP
       RCLK_P_50_OUTP

   IO Standard 2: Name = LVCMOS33, VREF = NR, VCCO = 3.30, TERM = NONE, DIR = OUTPUT, DRIVE_STR = NR
   List of locked IOB's:
       MRST_OUTP


так и правильно оно фейлится. вы же ведь в одном банке, 5-м, завели и лвдс25, и кмоп33. нужно оставить что-то одно. у вас вообще есть лвдс-ные банки? есть возможность перекинуть туда?
Bad0512
Цитата(dm.pogrebnoy @ Nov 7 2014, 14:32) *
Дык я и не предлагаю поворачивать фазу при помощи DCM.

Извиняйте, это не к вашей конкретной реплике относилось...
FakeDevice
да, а попробуйте еще все cmos-пины в 5-м банке задать как lvcmos25, а дифф-пару вместе с этим оставить lvds_25. но питание оставить 3.3. вдруг проканает?
Bad0512
Цитата(Timmy @ Nov 7 2014, 11:33) *
Создаём на внутренней логике двухбитный счётчик-делитель на 4(выходная частота будет 50МГц), его выход подаём на SDR триггер в IOB, инверсированный выход подаём на SDR триггер во втором IOB и всё. Будет работать от 200МГц по одному фронту без инверсий клока, сдвигов фаз, DDR-ов и обратной связи через IOB.

Проблема не в этом. LVDS выход предполагает 1200 mV постоянки и +-350mV размах сигнала. Кроме того этот выход имеет
приличную нагрузочную способность (может на 100ом работать например).
Два LCMOS_33 выхода будут иметь 1650mV постоянки и примерно такой же размах при крайне низкой нагрузочной способности.
Надо глядеть схему и описание на чип DDS чтобы ответить на вопрос прокатит ли такой финт.
dm.pogrebnoy
Цитата(Bad0512 @ Nov 7 2014, 12:07) *
Проблема не в этом. LVDS выход предполагает 1200 mV постоянки и +-350mV размах сигнала. Кроме того этот выход имеет
приличную нагрузочную способность (может на 100ом работать например).
Два LCMOS_33 выхода будут иметь 1650mV постоянки и примерно такой же размах при крайне низкой нагрузочной способности.
Надо глядеть схему и описание на чип DDS чтобы ответить на вопрос прокатит ли такой финт.


Дык уже поглядели, там такое можно. Размах от 400 мВ, common-voltage 1,6 В.
Timmy
Цитата(Bad0512 @ Nov 7 2014, 12:07) *
Проблема не в этом. LVDS выход предполагает 1200 mV постоянки и +-350mV размах сигнала. Кроме того этот выход имеет
приличную нагрузочную способность (может на 100ом работать например).
Два LCMOS_33 выхода будут иметь 1650mV постоянки и примерно такой же размах при крайне низкой нагрузочной способности.
Надо глядеть схему и описание на чип DDS чтобы ответить на вопрос прокатит ли такой финт.

С помощью двух(если устроит синфазное 1650мВ) или четырёх резисторов можно привести напряжение к LVDS уровню.
ADA007
Цитата(Timmy @ Nov 7 2014, 08:33) *
Создаём на внутренней логике двухбитный счётчик-делитель на 4(выходная частота будет 50МГц)

В общем так и сделал в итоге. Как-то оно работает...но фронты осциллом нет возможности пока что посмотреть, а на временной sdf модели они относительно друг друга на 6 пс разбегаются. В общем DDS вроде бы работает, но на будущее надо будет или singl-ended тактирование далать или еще лучше от отдельного генератора тактировать.
Любые попытки обмануть ISE и подсунуть в банку с питанием 3,3 стандарт 2,5 LVDS или LVCMOS ... я все варианты там перебрал - ну никак не хочет он воспринимать это безобразие.
Спасибо всем за помощь.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.