Jump to content
    

Алгоритм передачи данных

Если тема создана не там, скажите, я создам где надо.

Есть ПЛИС, МК и ПК. ПЛИС и МК соединены через SPI, ПЛИС мастер, МК и ПК соединены через Ethernet (LAN8720). В этой цепочке интересует работа МК. Тактовые частоты МК и ПЛИС- 450 и 60 МГц соответственно. Скорость Ethernet трафика 3-4 Мбит/с.

МК принимает от ПК пакет стандарта IPv4 - 20 байт заголовок и произвольное количество байт данных, не более 1480 байт. МК надо передать в ПЛИС этот пакет целиком, но разбив на более мелкие пакеты определенного размера, буферизируя в своей памяти что не успевает передать. Размеров несколько, они заранее известны и меняются пользователем служебной командой с ПО на ПК.

На приемной стороне все наоборот. ПЛИС передает в МК пакеты определенным размером, синхронизированным с передатчиком. Из пакетов от ПЛИС МК должен восстановить IP-пакет и отправить его в ПК, буферизируя (в пределах своей памяти) что не успевает отправить.

Я думаю использовать метод конечных автоматов (МКА, FSM) с флагами, создавая свой пакет для ПЛИС с заголовком на передатчике, который поможет собрать IP-пакет обратно на приёмной стороне.

Задача очень похожа на ту, что решается в Wi-Fi роутерах, но там, наверное используются ASIC, а не софтовое решение.

В любом случае, вместо того, чтобы городить что-то своё, я бы хотел сначала узнать какие решения уже есть и давно используются (проверены временем). Посоветуйте, пожалуйста, где можно посмотреть что-то подобное или, может, что-то из вашего опыта.

Edited by Turgenev

Share this post


Link to post
Share on other sites

Ну да, мы же тут все знаем, что такое "алгоритм МКА с флагами"...🙂

P.S. Скрыто много полезных деталей: SPI к ПЛИС - кто мастер, кто слейв? ИМХО, решение не очень удачное: нужно было прокидывать что-то фулл-дуплексное, тот же простейший UART (если скорости не важны). Щас же придется мастером опрашивать слейва на предмет наличия пакетов данных для пересылки - не удобно. Но даже с тем, что есть, работать можно - но без своих велосипедов, разумеется, не обойтись.

Share this post


Link to post
Share on other sites

1 час назад, Arlleex сказал:

Ну да, мы же тут все знаем, что такое "алгоритм МКА с флагами"...🙂

P.S. Скрыто много полезных деталей: SPI к ПЛИС - кто мастер, кто слейв? ИМХО, решение не очень удачное: нужно было прокидывать что-то фулл-дуплексное, тот же простейший UART (если скорости не важны). Щас же придется мастером опрашивать слейва на предмет наличия пакетов данных для пересылки - не удобно. Но даже с тем, что есть, работать можно - но без своих велосипедов, разумеется, не обойтись.

Нет, не должны конечно знать, я имел в виду метод конечных автоматов, изменил в первом сообщении. Под флагами я понимаю, что в прерывании по окончанию приема/передачи по SPI от/к ПЛИС будут устанавливаться флаги, которые будут проверяться в МКА. Например, флаг "пакет от ПЛИС был принят" установлен? Начинаем его обработку и тд.

Мастер ПЛИСа, когда она готова отдать данные, тогда МК все бросает и забирает от нее данные. Приблизительно, МК будет работать на частоте 450 МГц, а ПЛИС на 60 МГц. Скорость важна, нужно передавать со скоростью не менее 3-4 Мбит/с. Все добавил в первое сообщение.

Edited by Turgenev

Share this post


Link to post
Share on other sites

Тут дело не совсем в мегагерцах, особенно когда такие копейки как 3-4 Мбит/с по SPI. Все упрется в возможности периферии SPI дать нормально реализовать слейв на МК. Ну не по прерываниям же байты принимать - это уже забег по граблям. Очевидно, осталось ответить на вопрос, как разруливать передачи с ошибками между ПЛИС и МК (псевдо-подтверждения / избыточное кодирование / вставьте свой вариант) - и можно писать код. Разумеется, конечные автоматы какие-то там точно будут))

Share this post


Link to post
Share on other sites

SPI, вообще то, и есть полнодуплексный интерфейс, для которого 3-4 мегабита скорость совсем не высокая, а если обмен идет в пределах одной-двух плат то при нормальной схемотехнике ошибок быть на должно в принципе и на них можно не закладываться. В МК же пересылки можно делать через DMA.

Share this post


Link to post
Share on other sites

24 минуты назад, vladec сказал:

SPI, вообще то, и есть полнодуплексный интерфейс...

Да, но синхронный, с привязкой к ролям "мастер/слейв". Слейв не может просто так отправить мастеру, поэтому мастер должен опрашивать слейв любым понравившимся способом, что допустимо для всяких датчиков и памятей, но весьма костыльно для двух независимых узлов (МК и ПЛИС), которым в любой момент времени может захотеться начать передачу. Как вариант еще - постоянный клок и непрерывный двусторонний обмен.

Share this post


Link to post
Share on other sites

С физическим уровнем нет проблем. Вопрос к алгоритму: как оптимальнее всего организовать на передатчике перекладывание байт из IP-пакета в свои пакеты, чтобы на приемной стороне собрать этот IP-пакет обратно.

Share this post


Link to post
Share on other sites

По чип-селектам режьте на пакеты и отправляйте, на приемной стороне собирайте обратно в хронологическом порядке.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...