реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Синхронизация, Синхронизация устройств
Грендайзер
сообщение Apr 30 2011, 18:17
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 368
Регистрация: 18-04-11
Из: Город-герой Москва
Пользователь №: 64 451



Всем доброго))) Имеется некоторая плата, которая выплёвывает байты данных с частотой 27 МГц, и имеется девайс (на ПЛИСине) который эти байты из параллельной шины должен перегонять в последовательную, и который работает на частоте 50 МГц. Вопрос: частоты принципиально не кратны друг другу, и я боюсь, что рано или поздно, кто то кого то догонит (или параллельная шина начнёт забивать ячейки во входном буфере, биты из которых ещё не успели отправится на последовательную шину, или на последовательную шину начнут вылезать биты которые на ней уже были (запись во входной буфер я организовал, как циклический сдвиг)) и естественно произойдёт потеря пакетов. Я не в этой области вообщето специализируюсь, но так вышло, что приходится и этим то же заниматься, может кто подскажет выход, заранее спасибо=)
Go to the top of the page
 
+Quote Post
alexPec
сообщение Apr 30 2011, 18:26
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Цитата(Грендайзер @ Apr 30 2011, 22:17) *
Всем доброго))) Имеется некоторая плата, которая выплёвывает байты данных с частотой 27 МГц, и имеется девайс (на ПЛИСине) который эти байты из параллельной шины должен перегонять в последовательную, и который работает на частоте 50 МГц. Вопрос: частоты принципиально не кратны друг другу, и я боюсь, что рано или поздно, кто то кого то догонит (или параллельная шина начнёт забивать ячейки во входном буфере, биты из которых ещё не успели отправится на последовательную шину, или на последовательную шину начнут вылезать биты которые на ней уже были (запись во входной буфер я организовал, как циклический сдвиг)) и естественно произойдёт потеря пакетов. Я не в этой области вообщето специализируюсь, но так вышло, что приходится и этим то же заниматься, может кто подскажет выход, заранее спасибо=)

А как? Если вход 27М х 8 бит, то выход последовательного должен быть 1 х (27*8) = с частотой не меньше 216 МГц. Иначе всяко переполнение будет.
Для увеличения частоты можно плисовый PLL подключить. Опишите поподробней требования, не все ясно. С 50 МГц на выходе шириной в 1 бит ничего не выйдет. Или у вас поток входной прерывается? Тогда скважность пачек данных какая?
Go to the top of the page
 
+Quote Post
Иван Панченко
сообщение Apr 30 2011, 19:00
Сообщение #3


Участник
*

Группа: Свой
Сообщений: 74
Регистрация: 29-11-08
Из: санкт-петербург
Пользователь №: 42 061



Цитата(alexPec @ Apr 30 2011, 22:26) *
А как? Если вход 27М х 8 бит, то выход последовательного должен быть 1 х (27*8) = с частотой не меньше 216 МГц.

думаю, что там,наверное, есть какая-то скважность по входу... и,видимо, чуть больше 4х.
а по поводу решения - по-моему, здесь напрашивается FIFO(если что, http://en.wikipedia.org/wiki/FIFO =) ).
Ну только аккуратно прикиньте объем, в зависимости от входной скважности...
Go to the top of the page
 
+Quote Post
Грендайзер
сообщение May 1 2011, 14:33
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 368
Регистрация: 18-04-11
Из: Город-герой Москва
Пользователь №: 64 451



Да, извините, забыл сказать, между пакетами, что идут с 8-ми битной шины имеется задержка по времени (т.е. покет отправлен, задержка, затем ещё пакет и опять задержка и т. д.). По поводу FIFO вроде ясно, но тем не мене эт немного не то. Систему я организовал след. образом: получаю пакет с параллельной шины (ПШ) и записываю его в буфер (это происходит с частотой 27 МГц). Далее, пока не пришёл следующий пакет начинаю выкладывать данные на последовательную шину (ПСШ) с частотой 50 МГц. Естественно за один цикл работы ПШ (27 МГц) я не успеваю выложить весь байт на ПСШ, и следующий пришедший байт, кладу в след. ячейку буфера. Как только весь байт из первой ячейки оказался на ПСШ, начинаю выкладывать биты на ПСШ из следующей ячейки и т. д., пока интервал в работе обеих шин не станет достаточным, что бы байты с ПШ можно было начать записывать опять в первую ячейку. Но т. к. частоты вообще никак не кратны, то боюсь, что даже несмотря на временной интервал между пакетами приходящими с ПШ кто то кого то догонит...
Go to the top of the page
 
+Quote Post
Иван Панченко
сообщение May 1 2011, 18:46
Сообщение #5


Участник
*

Группа: Свой
Сообщений: 74
Регистрация: 29-11-08
Из: санкт-петербург
Пользователь №: 42 061



Нет-нет, FIFO как раз то... Вам нужно FIFO и сериалайзер(преобразователь в последовательный код из параллельного). Когда в FIFO не пусто, вы читаете из FIFO и преобразуете это в последовательный код(нужен сигнал запрещения повторной записи в сериалайзер, когда он еще что-то двигает). После того как сериалайзер выдвинул данные, если в FIFO что-то есть вы снова оттуда читаете и преобразуете это в последовательный код... идея ясна,я надеюсь?
Go to the top of the page
 
+Quote Post
Грендайзер
сообщение May 2 2011, 08:51
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 368
Регистрация: 18-04-11
Из: Город-герой Москва
Пользователь №: 64 451



Да, ясна, потому, что я именно так и поступил (часа полтора думал как поступить, и придумал таки rolleyes.gif ), система у меня такая получилась: когда с параллельной шины я пишу в ячейку буфера, активизируется флаг, относящийся к этой ячейки, который запрещает в эту ячейку писать, когда ячейка полностью оказалась на последовательной шине, этот флаг опускается, позволяя заново писать в эту ячейку... Для каждой ячейки имеется свой флаг (это наверное не очень экономно и практично, но на большее меня не хватило sad.gif ) Но вопрос вот в чём, если произойдёт набег фаз двух синхросигналов (50 МГц и 27МГц), то параллельная шина начнёт, в какой то момент времени ждать когда можно будит писать в ячейку (поскольку в этот момент времени последовательная шина ещё не успела всё считать из данной ячейки), и это опять таки приведёт к потере пакетов... Возможно я просто чего то не понимаю, и прошу сразу извинить, т. к. ещё раз подчёркиваю, я этим совсем недавно стал заниматься blush.gif
Go to the top of the page
 
+Quote Post
iosifk
сообщение May 3 2011, 04:59
Сообщение #7


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(Грендайзер @ Apr 30 2011, 22:17) *
Всем доброго))) Имеется некоторая плата, которая выплёвывает байты данных с частотой 27 МГц, и имеется девайс (на ПЛИСине) который эти байты из параллельной шины должен перегонять в последовательную, и который работает на частоте 50 МГц.


поскольку личная почта не работает, то... (Виктор, где Вы?)

У меня на сайте - в статьях найдите "Краткий Курс HDL", раздел об CDC... Удачи!


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
XVR
сообщение May 3 2011, 14:10
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Вам нужно FIFO, причем не самописное, а стандартное (из CoreGen'а или MegaWizard'а, смотря какая у вас FPGA). Оно корректно отслеживает заполненность себя и корректно работает в разных клоковых доменах.
Но если у вас принципиально возможна ситуация, когда входные данные поступают потоком большим, чем они же вычерпываются по выходной шине, то никакое FIFO не спасет sad.gif
Go to the top of the page
 
+Quote Post
Грендайзер
сообщение May 3 2011, 18:38
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 368
Регистрация: 18-04-11
Из: Город-герой Москва
Пользователь №: 64 451



Спасибо всем, кто откликнулся=) я уже въехал в ситуацию и кажется разобрался... Я решил всё сделать в лобешник, тупо увеличить размер буфера до размера пакета. Интервалов между пакетами вполне достаточно, что быиз буфера всё выгрести подчистую... Ещё раз спасибо всем за терпение, ваши советы действительно помогли rolleyes.gif
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 14th July 2025 - 08:26
Рейтинг@Mail.ru


Страница сгенерированна за 0.01431 секунд с 7
ELECTRONIX ©2004-2016