Перейти к содержанию
    

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

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

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

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

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

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

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

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

Изменено пользователем Turgenev

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

Изменено пользователем Turgenev

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...