Перейти к содержанию
    

Тактирование внешнего устройства с ПЛИС

Доброго всем времени суток.

Столкнулся с задачей выдачи дифференциального тактового импульса на внешнюю микруху. Вроде бы ниечго такого, а как это сделать правильно?

ПЛИС использую 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:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Доброго всем времени суток.

Столкнулся с задачей выдачи дифференциального тактового импульса на внешнюю микруху.

 

..выводите lVDS сигнал через OBUFDS, в свойствах выставьте LVDS_25 , банк питайте от 3.3.

з.ы.

Только плохо это очень - делать в ПЛИС клоки для DDS синтезаторов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

..выводите 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 нет ничего подходящего. И как быть?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

..вы же lvds выводите, зачем в свойствах ног вы пишете LVCMOS33 ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

..вы же lvds выводите, зачем в свойствах ног вы пишете LVCMOS33 ?

А что нужно написать?...на LVDS_33 он тоже ругается, что не поддреживается! :rolleyes:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А что нужно написать?...на LVDS_33 он тоже ругается, что не поддреживается! :rolleyes:

попробуйте - LVDS_25

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

попробуйте - 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не вижу никакой проблемы.

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, чтобы убрать разность времени прохождения сигнала по связям кристалла.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Достаточно разместить два триггера (для 0 и 180°) делителя частоты 200 МГц так, чтобы они оказались в IOB, чтобы убрать разность времени прохождения сигнала по связям кристалла.

Т.е. правильно будет, если я возьму с DCM CLK0 и CLK180 ...пропущу их через два триггра, тактируя их частотой 200 МГц и запихаю их в IOB?

Если для выходных сигналов, кот. выходят из триггеров указать в ucf INST "signal_name" IOB = TRUE; - от это значит, что он будет запихнут в IOB, я правильно понял?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не вижу никакой проблемы.

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В

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На сколько я помню выходные триггеры в IOB не имеют обратной связи в логику, чтобы можно было сделать на них делитель. Тем не менее все остальное верно, лучше всего использовать ODDR. На один информационный вход подать единицу, на другой ноль и затактировать требуемой частотой, как я понял 50 МГц. На соседнем ODDR ноль и единицу поменять местами. Судя по даташиту на ДДС такое подключение возможно если банк в ПЛИС питается от 3.3В

И мои 5 копеек : мудохаться с поворачиванием фазы на 180 градусов на DCM совсем необязательно - в примитивах есть встроенный инвертор клока.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Создаём на внутренней логике двухбитный счётчик-делитель на 4(выходная частота будет 50МГц), его выход подаём на SDR триггер в IOB, инверсированный выход подаём на SDR триггер во втором IOB и всё. Будет работать от 200МГц по одному фронту без инверсий клока, сдвигов фаз, DDR-ов и обратной связи через IOB.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И мои 5 копеек : мудохаться с поворачиванием фазы на 180 градусов на DCM совсем необязательно - в примитивах есть встроенный инвертор клока.

Дык я и не предлагаю поворачивать фазу при помощи DCM.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

тогда на 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. нужно оставить что-то одно. у вас вообще есть лвдс-ные банки? есть возможность перекинуть туда?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...