Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Синхронизация в ПЛИС
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Kenav
Здравствуйте! smile.gif
При разработке проекта возникла такая проблема. Используем ПЛИС CyclonII, генератор на 16.384 Мгц. Фреймер DS21Q50. Тактовую частоту генератора завожу на глобальный клок Плис(использую четвертый банк). Там эта частота делится на 8 (получаем частоту 2048) и вывожу ее с ножки плис на MCLK фреймера. Для фреймера эта частота является опорной. С фреймера идет частота 16.384 Мгц тоже на глобальный клок ПЛИС (используем первый банк). Эта частота формируется самим фреймером. И она, возможно, может отличаться от частоты, которая идет с генератора. Так как в фреймере есть ФАПЧ и он подстраивает частоту под себя. На Плис реализуется FIFO. При такой организации сбиваются внутренние счетики. Получается рассинхронизация. Если подавать на фреймер частоту 2,048 МГц с генератора (т.е. с отдельного прибора) то все работает. При этом не используем делитель на ПЛИС. То есть получается что нельзя использовать делитель частоты или что то еще. Не могу разобраться в чем проблема. Прошу помощи, коллеги. help.gif
Сколько разных частот можно заводить на ПЛИС. Так чтобы не было влияния.
У нас получается, что мы подаем две разные частоты на ПЛИС.
Если подавать с прибора частоту 16.384 МГц и подавать на делитель ПЛИС. Эффект такой же. Не работает. help.gif На выходе все по честному. Частота делится. Не могу разобраться. angry.gif
EvgenyNik
Количество используемых частот в ПЛИС явно не ограничено.
Скажите, а почему нельзя сделать так - оставить в покое исходную частоту 2,048МГц, получаемую Вами делением исходной, и только подавайть её на фреймер. А вот частоту фреймера 16.384МГц завести на PLL CycloneII, где сдвинуть на нужную фазу (компенсировать длину линии связи), а уж потом поделить на 8 и пользоваться этой частотой 2,048МГц, котороя будет строго кратной и сфазированной с частотой фреймера.
Или всё гораздо сложнее? :-)
Kenav
Цитата(Евгений Николаев @ Apr 12 2007, 12:04) *
Скажите, а почему нельзя сделать так - оставить в покое исходную частоту 2,048МГц, получаемую Вами делением исходной, и только подавайть её на фреймер.

Это я так и делаю.
Только если подавать частоту с генератора без делителя то все синхронно работает.
Если же подавать частоту с ПЛИС то происходит рассинхронизация.

"А вот частоту фреймера 16.384МГц завести на PLL CycloneII, где сдвинуть на нужную фазу (компенсировать длину линии связи), а уж потом поделить на 8 и пользоваться этой частотой 2,048МГц, котороя будет строго кратной и сфазированной с частотой фреймера.
"
Идея конечно хорошая, но 2048 для фреймера является опорной. Без нее она не сформирует свои 16.384 Мгц. angry.gif
-=Sergei=-
Цитата(Kenav @ Apr 12 2007, 12:32) *
Это я так и делаю.
Только если подавать частоту с генератора без делителя то все синхронно работает.
Если же подавать частоту с ПЛИС то происходит рассинхронизация.

"А вот частоту фреймера 16.384МГц завести на PLL CycloneII, где сдвинуть на нужную фазу (компенсировать длину линии связи), а уж потом поделить на 8 и пользоваться этой частотой 2,048МГц, котороя будет строго кратной и сфазированной с частотой фреймера.
"
Идея конечно хорошая, но 2048 для фреймера является опорной. Без нее она не сформирует свои 16.384 Мгц. angry.gif


Асинхронное ФИФО, Код Грея. Классика жанра.
EvgenyNik
Кто-то из нас кого-то (опять-таки из нас :-) ) не понял.
Я предлагаю:
Частоту генератора Fген=16.384 поделить на 8 и получить Fген8=2.048, которую подать на фреймер и кроме как в этом фреймере нигде больше в ПЛИС её не использовать.
Получиться эффект:
Цитата
Если подавать на фреймер частоту 2,048 МГц с генератора (т.е. с отдельного прибора) то все работает.

С фреймера принимать в ПЛИС частоту Fфр=16.384 и именно её делить на 8, чтобы получать Fфр8=2.048, которую и использовать в ПЛИС.
Таким образом, основная прошивка ПЛИС и "знать не будет" о существовании Fген и Fген8, а будет работать синхронно и в фазе с частотами фреймера Fфр и Fфр8.
Или опять не то :-)
---
И ещё... Не знаю - применяете или нет, но прямое без строба декодирование кода счётчика для выполнения какой-либо функции - вещь опасная, т.к. счётчики идеально синхронно все разряды не переключают, ну и декодеры идеально (по таблице истинности) во времени не декодируют. В динамике не работает.
Kenav
Цитата(Евгений Николаев @ Apr 12 2007, 13:19) *
Кто-то из нас кого-то (опять-таки из нас :-) ) не понял.
Я предлагаю:
Частоту генератора Fген=16.384 поделить на 8 и получить Fген8=2.048, которую подать на фреймер и кроме как в этом фреймере нигде больше в ПЛИС её не использовать.
Получиться эффект:

С фреймера принимать в ПЛИС частоту Fфр=16.384 и именно её делить на 8, чтобы получать Fфр8=2.048, которую и использовать в ПЛИС.
Таким образом, основная прошивка ПЛИС и "знать не будет" о существовании Fген и Fген8, а будет работать синхронно и в фазе с частотами фреймера Fфр и Fфр8.
Или опять не то :-)
---
И ещё... Не знаю - применяете или нет, но прямое без строба декодирование кода счётчика для выполнения какой-либо функции - вещь опасная, т.к. счётчики идеально синхронно все разряды не переключают, ну и декодеры идеально (по таблице истинности) во времени не декодируют. В динамике не работает.

Скрее опять не то. smile.gif
Я все так и делаю. Я частоту генератора 16,384 делю на 8 в ПЛИС и подаю полученные 2048 на фреймер. Больше у меня эта частота (2048) кроме как на фреймер никуда не идет. С фреймера 16,384 я подаю на Плис.
Проблема в том, что если подавать на фреймер 2048 с Плис, то происходит рассинхронизация. А если на прямую с прибора, то все работает. Тое есть получается, что что то с делителем не то. Хотя сигналы выходят все по честному.
help.gif

Цитата(-=Sergei=- @ Apr 12 2007, 13:15) *
Асинхронное ФИФО, Код Грея. Классика жанра.


Да не, наверное не в этом деле. Все работает, если частоту с генератора брать, а не с ПЛИС.
Все проверил уже. Не знаю что еще придумать.
sazh
Проблема в том, что если подавать на фреймер 2048 с Плис, то происходит рассинхронизация. А если на прямую с прибора, то все работает. Тое есть получается, что что то с делителем не то. Хотя сигналы выходят все по честному.
///////////////////////////////////////////////////////////////////
Надо полагать при двух вариантах подачи клока используется один и тот же проект. Значит дело в проекте, когда фактически используется две частоты. некорректный переход из одного клокового домена в другой. Странно, что фифо не помогло. По большому счету неограниченное число gate clk можно навесить на global clk.
Kenav
Цитата(sazh @ Apr 12 2007, 15:16) *
Проблема в том, что если подавать на фреймер 2048 с Плис, то происходит рассинхронизация. А если на прямую с прибора, то все работает. Тое есть получается, что что то с делителем не то. Хотя сигналы выходят все по честному.
///////////////////////////////////////////////////////////////////
Надо полагать при двух вариантах подачи клока используется один и тот же проект. Значит дело в проекте, когда фактически используется две частоты. некорректный переход из одного клокового домена в другой. Странно, что фифо не помогло. По большому счету неограниченное число gate clk можно навесить на global clk.

Один клоковый домен имеется ввиду банк ввода ввывода? cranky.gif
Да у меня один проект. В нем одну частоту делим. И больше нигде не используем. А вторую частоту с фреймера используем для дальнейших преобразований. А что может быть с проектом? cranky.gif
EvgenyNik
Если не секрет - выложите проект, чтобы можно было взглянуть. А это больше похоже на стрельбу с закрытыми глазами и подсказками "мишень такая маленькая, круглая, с точкой посередине" и "эээ, опять не попал" :-)
sazh
Один клоковый домен имеется ввиду банк ввода ввывода?
///////////////////////////////////////////////////////////////////////
Можно и так сказать. У Вас два домена одной частоты, но не синхронны. И фифо как раз должно было помочь.
Вот пример посмотрите (представьте, что эти два регистра одноклоковое фифо)

module in_out_data
(
output reg [7:0] out_data,
output out_clk,
input global_clk,
input [7:0] input_data,
input in_clk_a,
input in_clk_b
);

reg [7:0] data_rg;
reg [2:0] sdvig_in_rg;
reg [2:0] sdvig_out_rg;

wire e_wr_rg;
wire e_rd_rg;

assign out_clk = in_clk_b;

always @ (posedge global_clk)
begin
sdvig_in_rg <= {sdvig_in_rg[1:0], in_clk_a};
sdvig_out_rg <= {sdvig_out_rg[1:0], in_clk_b};
if (e_wr_rg) data_rg <= input_data;
if (e_rd_rg) out_data <= data_rg;
end

assign e_wr_rg = sdvig_in_rg[1] & ~sdvig_in_rg[2];
assign e_rd_rg = ~sdvig_out_rg[1] & sdvig_out_rg[2];

endmodule
Kenav
Ну вот так в кратце. Вроде все просто, но не получается. angry.gif Нажмите для просмотра прикрепленного файла
DmitryR
Цитата(Kenav @ Apr 13 2007, 09:36) *
Ну вот так в кратце. Вроде все просто, но не получается. angry.gif Нажмите для просмотра прикрепленного файла


Дело в том, что для PLL второго циклона 16 МГц - предельно низкая частота, а реализация делителя на счетчике думаю грязновата получается - все же фреймер требует 50 ppm. Поэтому мне кажется, что надо просто поставить на фреймер отдельный генератор, не пропуская его через ПЛИС. Если не удастся найти 2.048 - поставьте 16.384, ведь фреймер умеет сам делить опорную частоту на 2, 4 или 8.
Postoroniy_V
Цитата(DmitryR @ Apr 13 2007, 10:11) *
Дело в том, что для PLL второго циклона 16 МГц - предельно низкая частота, а реализация делителя на счетчике думаю грязновата получается - все же фреймер требует 50 ppm. Поэтому мне кажется, что надо просто поставить на фреймер отдельный генератор, не пропуская его через ПЛИС. Если не удастся найти 2.048 - поставьте 16.384, ведь фреймер умеет сам делить опорную частоту на 2, 4 или 8.

1) предельно низкая не 16384 вообще то, для циклона2 смотрите в
Table 5–51. PLL Specifications (Part 1 of 2) - 10 Мгц

2)если у вас генератор 50 ppm то эти самые ppm не могут прибавится за счёт делителя
3) проблемы возможно как раз в самом генераторе который тактирует плис - ведь насколько стало ясно
"так работает" - это происходит при тактировании от внешнего источника
DmitryR
Цитата(Postoroniy_V @ Apr 13 2007, 11:03) *
1) предельно низкая не 16384 вообще то, для циклона2 смотрите в
Table 5–51. PLL Specifications (Part 1 of 2) - 10 Мгц


Хорошо, скажем точнее - минимальная выходная частота тоже 10 МГц, а пытаются получить 2. По поводу делителя на счетчике - разные там могут быть проблемы, предлагаю признать такую реализацию недопустимой не углубляясь.
Postoroniy_V
Цитата(DmitryR @ Apr 13 2007, 11:32) *
Хорошо, скажем точнее - минимальная выходная частота тоже 10 МГц, а пытаются получить 2. По поводу делителя на счетчике - разные там могут быть проблемы, предлагаю признать такую реализацию недопустимой не углубляясь.

Речь в моём посте шла про минимульную входную частоту так? а не про то что нельзя получить на выходе pll 2,048 МГц smile.gif .
а получить эти самые 2,048 за счёт деления - нормальное явление.
И уж будьте любезны привидите пжлста аргументы за то чтобы не применять делитель. и как он может изменить PPM?
Я не могу такую реализацию признать недопустимой совершенно не углубляясь в проблемы smile.gif
форум для того существует - обсудить-поделитсья проблемами-опытом
а если вы не желаете делиться - ваше право smile.gif
EvgenyNik
Послушайте, а в качестве генератора 16.384МГц Вы что используете? Если кварц с инвертором на ПЛИС, то может быть у Вас сбоит схема генерации и кварц периодически "срывается" на 3-ю гармонику... Тогда всё объяснимо.
Без деления выведите на внешний пин циклона эту частоту 16.384 и посмотрите на неё чем-нибудь приличным - может там частота плавает.
Postoroniy_V
Цитата(Евгений Николаев @ Apr 13 2007, 12:10) *
Послушайте, а в качестве генератора 16.384МГц Вы что используете? Если кварц с инвертором на ПЛИС, то может быть у Вас сбоит схема генерации и кварц периодически "срывается" на 3-ю гармонику... Тогда всё объяснимо.
Без деления выведите на внешний пин циклона эту частоту 16.384 и посмотрите на неё чем-нибудь приличным - может там частота плавает.


или попробуйте с вашего генератора подать 16.384 МГц, если есть такая возможность
smile.gif советов у нас много, мы не жадные biggrin.gif
Stewart Little
Ну, ИМХО сперва нужно посмотреть, какие сигналы выдает фреймер. Если длинельность его сигналов составляет 1 период выходной частоты PLL, то может возникать проблема из-за рассинхронизации частот которые подаются на ФИФО (т.е., если исходная частота с генератора, и выходная частота PLL фреймера сдвинуты по фазе непойми как, и чуть-чуть отличаются).
Есть статьи Клиффа Каммингса по организации асинхронного фифо, где такие моменты рассматриваются, например :
http://www.sunburst-design.com/papers/Cumm...002SJ_FIFO1.pdf
или
http://www.sunburst-design.com/papers/Cumm...002SJ_FIFO2.pdf
или
http://www.sunburst-design.com/papers/Cumm...SJ_AsyncClk.pdf

И еще много полезного можно найти здесь : http://www.sunburst-design.com/papers/
Kenav
Цитата(Stewart Little @ Apr 13 2007, 13:00) *
Ну, ИМХО сперва нужно посмотреть, какие сигналы выдает фреймер. Если длинельность его сигналов составляет 1 период выходной частоты PLL, то может возникать проблема из-за рассинхронизации частот которые подаются на ФИФО (т.е., если исходная частота с генератора, и выходная частота PLL фреймера сдвинуты по фазе непойми как, и чуть-чуть отличаются).
Есть статьи Клиффа Каммингса по организации асинхронного фифо, где такие моменты рассматриваются, например :
http://www.sunburst-design.com/papers/Cumm...002SJ_FIFO1.pdf
или
http://www.sunburst-design.com/papers/Cumm...002SJ_FIFO2.pdf
или
http://www.sunburst-design.com/papers/Cumm...SJ_AsyncClk.pdf

И еще много полезного можно найти здесь : http://www.sunburst-design.com/papers/

Я подавал на ПЛИС с генератора частот 16,384 МГц(лабораторного прибора) там делил и 2048 на фреймер. Так тоже не работает. Тоесть дело в Плис? sad.gif
Stewart Little
Цитата(Kenav @ Apr 13 2007, 15:15) *
Тоесть дело в Плис? sad.gif

Имхо не в плис. Прочтите внимательно еще раз мой предыдущий пост.
Tosha
Все таки непонятно где именно происходит рассинхронизация. Откуда и куда передаются данные? С одной стороны частота 16384 от фреймера, а с другой? Частота 16384 от генератора? Или еще что-то? В принципе частота от фреймера не обязана быть синхронной с опорной частотой 2048 в режиме синхронизации от линии.
Опять же используется ли PLL? Выходной сигнал от фреймера нельзя подавать на вход PLL циклона из-за наличия большого джиттера.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.