Turgenev 1 19 февраля Опубликовано 19 февраля (изменено) · Жалоба Если тема создана не там, скажите, я создам где надо. Есть ПЛИС, МК и ПК. ПЛИС и МК соединены через SPI, ПЛИС мастер, МК и ПК соединены через Ethernet (LAN8720). В этой цепочке интересует работа МК. Тактовые частоты МК и ПЛИС- 450 и 60 МГц соответственно. Скорость Ethernet трафика 3-4 Мбит/с. МК принимает от ПК пакет стандарта IPv4 - 20 байт заголовок и произвольное количество байт данных, не более 1480 байт. МК надо передать в ПЛИС этот пакет целиком, но разбив на более мелкие пакеты определенного размера, буферизируя в своей памяти что не успевает передать. Размеров несколько, они заранее известны и меняются пользователем служебной командой с ПО на ПК. На приемной стороне все наоборот. ПЛИС передает в МК пакеты определенным размером, синхронизированным с передатчиком. Из пакетов от ПЛИС МК должен восстановить IP-пакет и отправить его в ПК, буферизируя (в пределах своей памяти) что не успевает отправить. Я думаю использовать метод конечных автоматов (МКА, FSM) с флагами, создавая свой пакет для ПЛИС с заголовком на передатчике, который поможет собрать IP-пакет обратно на приёмной стороне. Задача очень похожа на ту, что решается в Wi-Fi роутерах, но там, наверное используются ASIC, а не софтовое решение. В любом случае, вместо того, чтобы городить что-то своё, я бы хотел сначала узнать какие решения уже есть и давно используются (проверены временем). Посоветуйте, пожалуйста, где можно посмотреть что-то подобное или, может, что-то из вашего опыта. Изменено 19 февраля пользователем Turgenev Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 180 19 февраля Опубликовано 19 февраля · Жалоба Ну да, мы же тут все знаем, что такое "алгоритм МКА с флагами"...🙂 P.S. Скрыто много полезных деталей: SPI к ПЛИС - кто мастер, кто слейв? ИМХО, решение не очень удачное: нужно было прокидывать что-то фулл-дуплексное, тот же простейший UART (если скорости не важны). Щас же придется мастером опрашивать слейва на предмет наличия пакетов данных для пересылки - не удобно. Но даже с тем, что есть, работать можно - но без своих велосипедов, разумеется, не обойтись. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Turgenev 1 19 февраля Опубликовано 19 февраля (изменено) · Жалоба 1 час назад, Arlleex сказал: Ну да, мы же тут все знаем, что такое "алгоритм МКА с флагами"...🙂 P.S. Скрыто много полезных деталей: SPI к ПЛИС - кто мастер, кто слейв? ИМХО, решение не очень удачное: нужно было прокидывать что-то фулл-дуплексное, тот же простейший UART (если скорости не важны). Щас же придется мастером опрашивать слейва на предмет наличия пакетов данных для пересылки - не удобно. Но даже с тем, что есть, работать можно - но без своих велосипедов, разумеется, не обойтись. Нет, не должны конечно знать, я имел в виду метод конечных автоматов, изменил в первом сообщении. Под флагами я понимаю, что в прерывании по окончанию приема/передачи по SPI от/к ПЛИС будут устанавливаться флаги, которые будут проверяться в МКА. Например, флаг "пакет от ПЛИС был принят" установлен? Начинаем его обработку и тд. Мастер ПЛИСа, когда она готова отдать данные, тогда МК все бросает и забирает от нее данные. Приблизительно, МК будет работать на частоте 450 МГц, а ПЛИС на 60 МГц. Скорость важна, нужно передавать со скоростью не менее 3-4 Мбит/с. Все добавил в первое сообщение. Изменено 19 февраля пользователем Turgenev Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 180 19 февраля Опубликовано 19 февраля · Жалоба Тут дело не совсем в мегагерцах, особенно когда такие копейки как 3-4 Мбит/с по SPI. Все упрется в возможности периферии SPI дать нормально реализовать слейв на МК. Ну не по прерываниям же байты принимать - это уже забег по граблям. Очевидно, осталось ответить на вопрос, как разруливать передачи с ошибками между ПЛИС и МК (псевдо-подтверждения / избыточное кодирование / вставьте свой вариант) - и можно писать код. Разумеется, конечные автоматы какие-то там точно будут)) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vladec 10 20 февраля Опубликовано 20 февраля · Жалоба SPI, вообще то, и есть полнодуплексный интерфейс, для которого 3-4 мегабита скорость совсем не высокая, а если обмен идет в пределах одной-двух плат то при нормальной схемотехнике ошибок быть на должно в принципе и на них можно не закладываться. В МК же пересылки можно делать через DMA. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 180 20 февраля Опубликовано 20 февраля · Жалоба 24 минуты назад, vladec сказал: SPI, вообще то, и есть полнодуплексный интерфейс... Да, но синхронный, с привязкой к ролям "мастер/слейв". Слейв не может просто так отправить мастеру, поэтому мастер должен опрашивать слейв любым понравившимся способом, что допустимо для всяких датчиков и памятей, но весьма костыльно для двух независимых узлов (МК и ПЛИС), которым в любой момент времени может захотеться начать передачу. Как вариант еще - постоянный клок и непрерывный двусторонний обмен. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Turgenev 1 20 февраля Опубликовано 20 февраля · Жалоба С физическим уровнем нет проблем. Вопрос к алгоритму: как оптимальнее всего организовать на передатчике перекладывание байт из IP-пакета в свои пакеты, чтобы на приемной стороне собрать этот IP-пакет обратно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 180 20 февраля Опубликовано 20 февраля · Жалоба По чип-селектам режьте на пакеты и отправляйте, на приемной стороне собирайте обратно в хронологическом порядке. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться