Проект чисто для самообразования. Ибо в FPGA я пока не очень хорошо разбираюсь.
Сейчас мне нужно подключить к USB обычный дешевый USB HID joystick. С самом джойстиком проблем нет - обычное HID LS устройство. Смотрел обмен снифером USB порта - все тривиально.
На плате USB порт сидит на чипе
USB3317 с ULPI интерфейсом. Далее чип FPGA на 20К.
В среде есть IP ядра. Есть "USB 2.0 Device Controller IP core". Но это здоровая универсальная дура на кучу LUT и кучей совершенно не нужного функционала.
Искал и по инету. Все в основном гонят поток "наверх" и реализуют USB стек на софт-процессоре. Их можно понять.
Есть несколько вариантов работы с клавиатурой через ULPI. Но там реализован очень урезанный режим USB - клавиатура в "boot mode".
Есть много вариантов через "ногодрыжество"" - не подходит.
Есть куча вариантов "USB HOST" на базе конечного автомата без контроля таймингов - не понравилось. Схема молотит вообще без понимания ошибок и самого факта наличия USB устройства.
Решил сам реализовать на базе вольной интерпретации существующих примеров.
Первый вариант на базе прямой работе с ULPI не взлетел. Возможно в таймингами намудрил. А может с верилоге что намудрил.
Сейчас переписываю.
Первым делом прикрутил "ULPI ‹-› UTMI Wrapper". Через него проще работать и контролировать состояние USB интерфейса.
Потом прикручиваю допиленный под свои задачи "USB Full Speed Host". Пока в работе.