Интересная цель - запустить linux на fpga. Да и давненько у меня валяется плата с Altera Cyclone IV. А заодно, попрактикуюсь в Verilog и попробую поковырять linux с нуля.
Ничему никого учить не собираюсь, данную статью предполагаю как начало блога, в котором буду рассказывать о содеянном...
Поехали!
Как и в любом другом проекте, важно с чего-то начать. Конечная цель довольно размыта, и далеко не все необходимые для достижения шаги мне сейчас ясны. Так что выбираем что-то, чем заняться можно прямо сейчас:
- Нужно найти какие-нибудь уроки по Verilog.
- Нужно заставить мой MacBook компилировать и заливать код для fpga.
Первый пункт оказался достаточно легко осуществимым. Нашлось быстро, на первый взгляд - серия годная. Посмотрим, может чему научимся.
А вот со вторым пришлось немного подумать. Я попросту не знаю иного способа превратить код в прошивку для Cyclone IV, кроме как используя Altera Intel® Quartus®. А последний есть для Windows, есть для Linux, но его нет для macOs. Получается, что варианты у меня такие:
- Установить VirtualBox, поверх него Windows и поверх Quartus
- Установить VirtualBox, поверх Ubuntu/Debian, сверху Quartus
- ...?
Первый вариант я отмёл, так как радость платить за лицензию Windows, ровно как и возиться со взломами мне не улыбается. Но и второй вариант тоже не нравиться. Не люблю я работать в окне, которое в окне (на виртуалке, в общем). Да и сам Quartus в 2020 году выглядит на все 2000. По-моему Visual Studio 6.0 выглядела куда как выигрышнее, чем "современный Quartus". Возможностей, вроде автодополнения и прочего - в нём немногим больше.
Запуск Intel® Quartus® на macOs
Итоговая идея - запускать Quartus в контейнере, да ещё и в режиме командной стоки. Документация по командной строке у Intel вполне приличная.
Но главное - в репозитории докера уже есть полностью настроенный образ. Так что перехожу в консольку, вбиваю:
docker pull chriz2600/quartus-lite
В образе добрых 6гб, так что пришлось подождать. После выкачивания, создаю готовый к использованию контейнер:
docker run --name quartus chriz2600/quartus-lite
Команда создала из образа контейнер, запустила его и тут же вышла. Но я ничего и не просили от неё, ведь так? Проверим:
docker ps -a
выдаёт в списке контейнеров один с именем quartus, отлично.
Редактор для Verilog
Остаётся только выбрать редактор да и настроить процесс сборки. Вообще, с редакторами VHDL и Verilog как то не густо. Что забавно, самым лучшим оказался vim. Но и VisualStudio Code оказался неплох, остановлюсь на нём. кроме самого VSCode понадобиться: Icarus Verilog, CTags - устанавливаются через homebrew. Ну и svls, его примитивно скачал и закинул себе в ~/.local/bin. Далее чуть настройки расширения для VSCode, и сойдёт. Либо может буду на vim писать, что тоже вариант, благо coc.nvim уже настроен, а связать его с svls труда не составило. С этим разобрался, осталось сделать проект, с которым можно работать.
Шаблонный проект
Из воздуха шаблон проекта не достать, нужно-таки запустить Quartus (я это сделал на стареньком компе с виндой), сгенерировать проект под нужный камень, добавить в него наименования входов платы (это было сэмпловом проекте, которым китайцы оснастили платку). И почти всё. Дело за Makefile. А он получился у меня таким.
Ну и собственно всё, вот репозиторий:
https://github.com/alexey-asmodean/fpga-learn/tree/master/00_repeater
вроде не так уж и мало файлов получилось, но там строка кода только одна
assign clk1 = clk;
Зато достаточно набрать в консольке
make waves
и запуститься тестбенч, который создаст файл output/repeater.vcd, открываемый при помощи GTKWave.
А если подключить к ноуту USB Blaster и к нему платку, то команда
make flash
скомпилирует в контейнере исходники и зальёт их на платку. Красота. Теперь уж точно можно смело изучать Verilog!