1) Качаем Intellij IDEA Community Edition https://www.jetbrains.com/idea/download/#section=windows
2) Создаем проект Maven архитектуры
3) Копируем ссылку на сборку JSSC в файл pom.xml https://mvnrepository.com/artifact/org.scream3r/jssc/2.8.0
4) Качаем с github верилог https://github.com/adream307/uart/blob/master/UART.v приемопередатчика UART, выставляем скорости, назначаем пины, компилируем. Зашиваем в отладочную плату.
5) Берем любую китайскую платку FTDI https://www.ebay.com/sch/i.html?_nkw=ft232rl&_sop=12 , подключаем RX к TX, TX к RX к ПЛИС
6) В проект JAVA добавляем код из примера https://habr.com/ru/post/133766/
7) PROFIT
Следует понимать, UART - асинхронный, т.е. ПЛИС может постоянно слать в FTDI, и что JAVA может без перерыва слать в ПЛИС. Чтобы информация была синхронизирована, обычно делают Java в качестве мастера, а ПЛИС - в качестве ведомого, где ведомый отвечает только после принятию информации с мастера (м.б. через паузу). В программе Java после вызова операции port.write(packet), поток усыпляют на несколько миллисекунд, и далее вызывают response = port.read(); Т.о. нет необходимости согласовывать (маркировость) начало и конец пакетов.
Другой вариант, - выделенный поток постоянно опрашивает буфер FTDI, а ПЛИС постоянно шлет. В этом случае необходима и информационная синхронизация данных. Следует помнить что буфер FTDI не безграничен, а Java работает в НЕреальном времени, т.е. средняя производительность опроса JAVA должна быть выше чем производительность забивания буфера ПЛИСом.