4.5 KiB
4.5 KiB
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 и на отправку, и на получение