Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Cyclone V + TSE + HPS(baremetal)
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
shurikman
Добрый день. Есть задача поднять на этом ките TSE под управлением HPS без Linux. Реализация стека TCP/IP не обязательна, достаточно прием/передача буфера, соединение точка-точка. Вкачестве отправной точки воспользовался похожей темой, но про Nios. С уважаемым vadimuzzz уже обсудили кое какие детали реализации задуманного. Для тех кто поднимал TSE схема вроде как понятная: TSE + 2xmSGDMA (один на прием, другой на передачу) + прерывание при приёме. Со стороны HPS добавляется LWH2F AXI мост для доступа к регистрам TSE и mSGDMA. Если есть кто прошёл этот путь, отписывайтесь, приоритет данной задачи пока высок. Постараюсь тему не бросать, а довести до конца с выкладыванием всех исходников.
shurikman
В качестве кода для копипаста были выбраны исходники Linux для TSE и mSGDMA, а также исходники Modular SGDMA с altera wiki. Были перепилены функции записи/чтения в регистры под HPS. Пока работает только передача, приём будет, но позже. Особенность данной реализации подразумевает использование обоих портов(система с двумя TSE). Для теста были сгенирированы два UDP пакета с соответствующими (разными) заголовками и правильными чек суммами. Далее всё это соединил простеньким свичём с компом. Так вот, оба порта инитятся нормально, но передача идёт только с первого порта, при этом светодиод передачи на втором порту мигает, но в вайшарке пусто. Пробовал инитить только второй порт, таже ерунда(в вайшарке пусто). Пробовал без свича, напрямую в комп, тоже самое. Может есть кому что сказать? Спасибо.

Нажмите для просмотра прикрепленного файла
shurikman
Поставил на тест погонять. Всё таки за час в вайшарке около 20 пакетов накопилось со второго порта.
shurikman
Добавлен приём пакетов и прерывания. Немного причёсан код и разложено всё по папкам. Приём кстати работает на обоих портах, а вот отсылка только с TSE0. Будем разбираться дальше.
Нажмите для просмотра прикрепленного файла
smersh
Привет!
Занимаюсь примерно тем же, только NIOS на Cyclone IV. Хочу прикрутить именно mSGDMA, на старом SGDMA все работает.
Заметил такую штуку: если попытаться прочитать

IORD_ALTERA_MSGDMA_RESPONSE_ACTUAL_BYTES_TRANSFERRED(rx_msgdma_dev->response_base);

когда Response CSR FIFO пусто, NIOS виснет наглухо! В Сигналтапе - response_read и response_waitrequest оба активны.

Еще странно, трансфер запускается даже если не производить write_extended_descriptor(). Т.е. достаточно construct_extended_st_to_mm_descriptor(), и трансфер запускается по приходу SOP от TSE. Почему - неясно совершенно. Паркинг, естественно, отключен. Соврал это я, виноват...



QUOTE (shurikman @ Jan 19 2017, 18:22) *
Добавлен приём пакетов и прерывания. Немного причёсан код и разложено всё по папкам. Приём кстати работает на обоих портах, а вот отсылка только с TSE0. Будем разбираться дальше.
Нажмите для просмотра прикрепленного файла
shurikman
Столкнулся со следующей проблемой. Для приема/отправки данных со стороны HPS используются соответствующие глобальные буферы. Для начала необходимо было организовать поддержку сети на уровне ответов на ARP запросы. Так вот, после формирования ARP ответа, я копирую эти данные в выходной буфер, используемый mSGDMA для отправки, но в вайшарке 0. Тормозил дебагером, буфер заполнен тем что надо. Смотрел примеры для ниоса, там обычно буфера в кеше защёлкиваются, а что в HPS делать в этом случае???
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.