# Ethernet UDP Stack Полный стек для Ethernet. Имеется поддержка ARP, ICMP (ping), и UDP. - Рассчитан на скорость 1 ГБит/с - IP адреса устанавливаются заранее в axis_mac.sv - ARP и ICMP работают автоматически после инициализации модуля - Получаемые пейлоады по UDP выводятся через AXIS Master, когда получатель будет ready - Для отправки пейлоада по UDP используется сигнал-импульс send_req, который можно подать, когда модуль req_ready, после этого по готовности AXIS Slave можно начинать передавать данные пакета. Отправка следующего пакета будет доступна, когда данные предыдущего начнут отправляться (тоже сигнал req_ready). - Для прием имеется небольшая память на 2Кб. Пакет сначала помещается в нее и может быть отправлен по AXIS как только получатель готов. Если получатель не успевает принять полученный UDP пакет, то он может быть перезатерт новым. - Для отправки есть FIFO глубиной 2Кб. После запроса на отправку (send_req), при наполнении этого FIFO считается checksum пакета. Когда все data_length байт записаны - начинается отправка пакетов. Когда первые байты ушли - можно начинать передачу байт следующего пакета. ## Структура src ``` ├── eth - исходный код ethernet модуля │   ├── arbi - арбитер RGMII <-> GMII │   │   ├── gmii_arbi.v │   │   ├── gmii_rx_buffer.v │   │   └── gmii_tx_buffer.v │   ├── axis_mac.sv - обертка для AXIS │   ├── mac - основные файлы MAC части │   │   ├── arp_cache.v │   │   ├── crc.v │   │   ├── icmp_reply.v │   │   ├── mac_test.v │   │   ├── mac_top.v │   │   ├── rx - прием │   │   │   ├── arp_rx.v │   │   │   ├── ip_rx.v │   │   │   ├── mac_rx_top.v │   │   │   ├── mac_rx.v │   │   │   └── udp_rx.v │   │   └── tx - отправка │   │   ├── arp_tx.v │   │   ├── ip_tx_mode.v │   │   ├── ip_tx.v │   │   ├── mac_tx_mode.v │   │   ├── mac_tx_top.v │   │   ├── mac_tx.v │   │   └── udp_tx.v │   ├── reset.v │   └── util_gmii_to_rgmii.v └── ip: XCI файлы ip блоков ``` ## Тесты В tests есть Testbench, эмулирующий прием и отправку пакетов (test_axis_mac_rx.sv), а также имеются следующие тестовые проекты для отладки на ПЛИС AX7A035B: - Симуляция запускается в eth_axis через ```make sim``` - eth_minimal - минимальный проект для теста PHY части. По умолчанию просто отправляет UDP пакет с фиксированным содержимым Hello ALINX на заданный IP. Если отправить UDP - то начнется трансляция пейлоада из принятого пакета. - eth_axis - проект с axis_mac и своеобразным echo-loopback. Начинает с ARP запроса, если получает ответ - то готов к работе. Можно отправлять UDP и получать эхо в ответ. ## Сборка - Для сборки используется make - Собрать все вплоть до битстрима: ```make all``` - Создать (если нету) и открыть вивадовский проект: ```make vivado``` - По умолчанию в проектах используются IP 192.168.0.2 для платы и 192.168.0.3 для хоста, порт 8080 и на отправку, и на получение