From df6c204cbd71f6fccde42d24b0fd16530c09bdb5 Mon Sep 17 00:00:00 2001 From: Phil Date: Tue, 14 Apr 2026 12:36:05 +0300 Subject: [PATCH] docs: add readme to ethernet-udp --- rtl/ethernet-udp/README.md | 54 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 rtl/ethernet-udp/README.md diff --git a/rtl/ethernet-udp/README.md b/rtl/ethernet-udp/README.md new file mode 100644 index 0000000..d88b331 --- /dev/null +++ b/rtl/ethernet-udp/README.md @@ -0,0 +1,54 @@ +# 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 и на отправку, и на получение