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

А как? Если вход 27М х 8 бит, то выход последовательного должен быть 1 х (27*8) = с частотой не меньше 216 МГц. Иначе всяко переполнение будет.
Для увеличения частоты можно плисовый PLL подключить. Опишите поподробней требования, не все ясно. С 50 МГц на выходе шириной в 1 бит ничего не выйдет. Или у вас поток входной прерывается? Тогда скважность пачек данных какая?
Иван Панченко
Цитата(alexPec @ Apr 30 2011, 22:26) *
А как? Если вход 27М х 8 бит, то выход последовательного должен быть 1 х (27*8) = с частотой не меньше 216 МГц.

думаю, что там,наверное, есть какая-то скважность по входу... и,видимо, чуть больше 4х.
а по поводу решения - по-моему, здесь напрашивается FIFO(если что, http://en.wikipedia.org/wiki/FIFO =) ).
Ну только аккуратно прикиньте объем, в зависимости от входной скважности...
Грендайзер
Да, извините, забыл сказать, между пакетами, что идут с 8-ми битной шины имеется задержка по времени (т.е. покет отправлен, задержка, затем ещё пакет и опять задержка и т. д.). По поводу FIFO вроде ясно, но тем не мене эт немного не то. Систему я организовал след. образом: получаю пакет с параллельной шины (ПШ) и записываю его в буфер (это происходит с частотой 27 МГц). Далее, пока не пришёл следующий пакет начинаю выкладывать данные на последовательную шину (ПСШ) с частотой 50 МГц. Естественно за один цикл работы ПШ (27 МГц) я не успеваю выложить весь байт на ПСШ, и следующий пришедший байт, кладу в след. ячейку буфера. Как только весь байт из первой ячейки оказался на ПСШ, начинаю выкладывать биты на ПСШ из следующей ячейки и т. д., пока интервал в работе обеих шин не станет достаточным, что бы байты с ПШ можно было начать записывать опять в первую ячейку. Но т. к. частоты вообще никак не кратны, то боюсь, что даже несмотря на временной интервал между пакетами приходящими с ПШ кто то кого то догонит...
Иван Панченко
Нет-нет, FIFO как раз то... Вам нужно FIFO и сериалайзер(преобразователь в последовательный код из параллельного). Когда в FIFO не пусто, вы читаете из FIFO и преобразуете это в последовательный код(нужен сигнал запрещения повторной записи в сериалайзер, когда он еще что-то двигает). После того как сериалайзер выдвинул данные, если в FIFO что-то есть вы снова оттуда читаете и преобразуете это в последовательный код... идея ясна,я надеюсь?
Грендайзер
Да, ясна, потому, что я именно так и поступил (часа полтора думал как поступить, и придумал таки rolleyes.gif ), система у меня такая получилась: когда с параллельной шины я пишу в ячейку буфера, активизируется флаг, относящийся к этой ячейки, который запрещает в эту ячейку писать, когда ячейка полностью оказалась на последовательной шине, этот флаг опускается, позволяя заново писать в эту ячейку... Для каждой ячейки имеется свой флаг (это наверное не очень экономно и практично, но на большее меня не хватило sad.gif ) Но вопрос вот в чём, если произойдёт набег фаз двух синхросигналов (50 МГц и 27МГц), то параллельная шина начнёт, в какой то момент времени ждать когда можно будит писать в ячейку (поскольку в этот момент времени последовательная шина ещё не успела всё считать из данной ячейки), и это опять таки приведёт к потере пакетов... Возможно я просто чего то не понимаю, и прошу сразу извинить, т. к. ещё раз подчёркиваю, я этим совсем недавно стал заниматься blush.gif
iosifk
Цитата(Грендайзер @ Apr 30 2011, 22:17) *
Всем доброго))) Имеется некоторая плата, которая выплёвывает байты данных с частотой 27 МГц, и имеется девайс (на ПЛИСине) который эти байты из параллельной шины должен перегонять в последовательную, и который работает на частоте 50 МГц.


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

У меня на сайте - в статьях найдите "Краткий Курс HDL", раздел об CDC... Удачи!
XVR
Вам нужно FIFO, причем не самописное, а стандартное (из CoreGen'а или MegaWizard'а, смотря какая у вас FPGA). Оно корректно отслеживает заполненность себя и корректно работает в разных клоковых доменах.
Но если у вас принципиально возможна ситуация, когда входные данные поступают потоком большим, чем они же вычерпываются по выходной шине, то никакое FIFO не спасет sad.gif
Грендайзер
Спасибо всем, кто откликнулся=) я уже въехал в ситуацию и кажется разобрался... Я решил всё сделать в лобешник, тупо увеличить размер буфера до размера пакета. Интервалов между пакетами вполне достаточно, что быиз буфера всё выгрести подчистую... Ещё раз спасибо всем за терпение, ваши советы действительно помогли rolleyes.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.