Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Передача сигнала из синхронной 66MHz в синхронную схему 50MHz
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
gosha
Подск пож: необходимо передать 2 сигнала (hsync, vsync) по 1бит с выхода D триггеров (clk_in=66MHz), на вход триггеров 50MHz.

Длительность имп на частоте 50MHz может быть неск тактов (не критично).

В схеме 50Mhz будет производиться взаимный анализ сигналов.

Код
if(vsync)
else
   if(hsync)
       else


Если увеличить длительность пульсов vsync, hsync на частоте 66MHz, все- равно это приводит к иногда (1/100) нестабилльности работы схемы (Chipscope)

Спасибо.
DmitryR
Ищите: в форуме тема перехода временного домена раскрыта чуть более, чем полностью. Кратко, надо поставить синхронизаторы и длительность импульса на 66 сделать минимум наверное 3 такта.
gosha
Цитата(DmitryR @ Jul 8 2009, 17:40) *
Ищите: в форуме тема перехода временного домена раскрыта чуть более, чем полностью. Кратко, надо поставить синхронизаторы и длительность импульса на 66 сделать минимум наверное 3 такта.


Не очень ищется.

http://www.google.ru/search?hl=ru&neww...mp;aq=f&oq=

Может ссылочку подбросите?
Шурила
Цитата(DmitryR @ Jul 8 2009, 16:40) *
Ищите: в форуме ...

ключевое слово метастабильность
например:
Констрейнты при переходе из одного клокового домена в другой.
метастабильность
Maverick
Цитата(gosha @ Jul 8 2009, 16:03) *
Подск пож: необходимо передать 2 сигнала (hsync, vsync) по 1бит с выхода D триггеров (clk_in=66MHz), на вход триггеров 50MHz.

Длительность имп на частоте 50MHz может быть неск тактов (не критично).

В схеме 50Mhz будет производиться взаимный анализ сигналов.

Код
if(vsync)
else
   if(hsync)
       else


Если увеличить длительность пульсов vsync, hsync на частоте 66MHz, все- равно это приводит к иногда (1/100) нестабилльности работы схемы (Chipscope)

Спасибо.


Попробуйте это

Код
--  Provides a one-shot pulse from a non-clock input, with reset
--**Insert the following between the 'architecture' and
---'begin' keywords**
signal Q1, Q2, Q3 : std_logic;

--**Insert the following after the 'begin' keyword**
process(<clock>)
begin
   if (<clock>'event and <clock> = '1') then
      if (<reset> = '1') then
         Q1 <= '0';
         Q2 <= '0';
         Q3 <= '0';
      else
         Q1 <= D_IN;
         Q2 <= Q1;
         Q3 <= Q2;
      end if;
   end if;
end process;

Q_OUT <= Q1 and Q2 and (not Q3);

код на VHDL
Дополнительно скажу: сделайте строб готовности данных - этот строб пропускаете через схему (см код на VHDL), т.о. производите синхронизацию и забираете свои данные уже на другой тактовой частоте
rsv
тут все замечательно расписано:
http://en.wikipedia.org/wiki/Clock_domain_crossing
там есть ссылочки на 2 статьи, очень полезные.

если тяжко читать по английски, то есть цикл статей вот этого господина http://iosifk.narod.ru/hdl_coding/verilog.htm , глава номер 11. В электронном виде нет, можно либо диск заказть у него, либо взять нужный номер журнала "компоненты и технологии" и почитать там
des00
Цитата(gosha @ Jul 8 2009, 08:03) *
Подск пож: необходимо передать 2 сигнала (hsync, vsync) по 1бит с выхода D триггеров (clk_in=66MHz), на вход триггеров 50MHz.

В схеме 50Mhz будет производиться взаимный анализ сигналов.

Если увеличить длительность пульсов vsync, hsync на частоте 66MHz, все- равно это приводит к иногда (1/100) нестабилльности работы схемы (Chipscope)


я бы не решал эту задачу через з...цу, а провел бы взаимный анализ на частоте 66МГц, а результат его передал в домен 50МГц. Это будет проще и надежнее smile.gif

ЗЫ. Если взаимный анализ включает в себя замер временных интервалов, то тем более заниматься этим после нарезки сигнала на 50МГц (с ошибкой по положению фронта) ИМХО глупо.
gosha
Цитата(des00 @ Jul 9 2009, 07:32) *
я бы не решал эту задачу через з...цу, а провел бы взаимный анализ на частоте 66МГц, а результат его передал в домен 50МГц. Это будет проще и надежнее smile.gif

ЗЫ. Если взаимный анализ включает в себя замер временных интервалов, то тем более заниматься этим после нарезки сигнала на 50МГц (с ошибкой по положению фронта) ИМХО глупо.


Спасибо.

Как я понял:
- для передачи одиночного сигнала через временной домен, на приемной стороне необходимо ставить 2 последовательных D триггера (на передающей 66MHz стороне длина имп- не менне 3 такта clk 50MHz?).
- для передачи слов данных - использовать FIFO ise_core_generator, которое использует код грея для счетчиков wr_fifo_adr/rd_fifo_adr адресов.
- сравнением кодов грея wr_fifo_adr/rd_fifo_adr, ip_core вычислет флаг fifo_empty.

Это так?
des00
Цитата(gosha @ Jul 9 2009, 01:42) *
Как я понял:
- для передачи одиночного сигнала через временной домен, на приемной стороне необходимо ставить 2 последовательных D триггера (на передающей 66MHz стороне длина имп- не менне 3 такта clk 50MHz?).
- для передачи слов данных - использовать FIFO ise_core_generator, которое использует код грея для счетчиков wr_fifo_adr/rd_fifo_adr адресов.
- сравнением кодов грея wr_fifo_adr/rd_fifo_adr, ip_core вычислет флаг fifo_empty.

Это так?


вариантов много, все зависит от того что и куда передаем, оптимальное решение для одного слова пятилетку будет отличаться от пакета данных, для строба будет отличаться от постоянного уровня. Есть конечно универсальные решения, но они не всегда оптимальны. В общем как и везде в фпга выбираем компромис smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.