Найти в Дзене
ПЛИСовод.

FPGA. Пустой проект и Quartus на macOS

Интересная цель - запустить linux на fpga. Да и давненько у меня валяется плата с Altera Cyclone IV. А заодно, попрактикуюсь в Verilog и попробую поковырять linux с нуля.
Оглавление

Интересная цель - запустить linux на fpga. Да и давненько у меня валяется плата с Altera Cyclone IV. А заодно, попрактикуюсь в Verilog и попробую поковырять linux с нуля.

Моя платка с Cyclone IV на 6к логических элементов.
Моя платка с Cyclone IV на 6к логических элементов.

Ничему никого учить не собираюсь, данную статью предполагаю как начало блога, в котором буду рассказывать о содеянном...

Поехали!

Как и в любом другом проекте, важно с чего-то начать. Конечная цель довольно размыта, и далеко не все необходимые для достижения шаги мне сейчас ясны. Так что выбираем что-то, чем заняться можно прямо сейчас:

  • Нужно найти какие-нибудь уроки по 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!