Здравствуйте, уважаемые читатели! Сегодня я, aquaratixc, автор блога LightHouse Software, покажу, как можно практически безболезненно погрузиться в мир архитектуры RISC-V и начать использовать микроконтроллер на ее базе. Оговорюсь сразу, что мы будем использовать не аппаратный микроконтроллер. Вместо этого мы возьмем уже готовое soft-ядро и загрузим его в FPGA-плату BlackIce II, уже знакомую читателям данного блога.

В одном из видео на канале OpenTechLab рассказывалось о плате под названием Alinx AN108. Плата предназначена для использования совместно с FPGA. Она объединяет в себе АЦП на базе чипа AD9280 (8 bit, 32 Msps, даташит [PDF]), а также ЦАП на базе AD9708 (8 bit, 100 Msps, даташит [PDF]). Цена устройства составляет около 20$, на eBay его можно найти по запросу «fpga ad da». Плата показалась мне довольно интересной. Поэтому я решил обзавестись такой же и повторить эксперименты из видео.

В свете нашумевших атак на CPU (из последних атак — Meltdown и Spectre) наблюдается рост интереса к открытым процессорам. Тот факт, что спецификация и конкретные реализации таких процессоров полностью открыты, существенно упрощает их анализ с точки зрения безопасности. Еще одно преимущество открытых процессоров заключается в том, что любой производитель может просто взять и начать выпускать такие процессоры, и никто его за это не попытается засудить, как в случае с x86/x64 или ARM. Сегодня наиболее хайповыми открытыми процессорами, по всей видимости, являются процессоры RISC-V (читается «риск файф»).

Разбираясь, какие сейчас существуют отладочные платы на базе ICE40, я обратил особое внимание на BlackIce II. Дело в том, что мне стало надоедать постоянно возиться с проводами при подключении сторонних модулей к iCEstick. Для решения этой проблемы BlackIce II имеет множество Pmod-разъемов, является совместимой с Arduino-шилдами, а также имеет распаянные 4 Мбит SRAM и разъем для подключения SD-карты. Интересно, что на плате есть не только FPGA ICE40HX4K, но и микроконтроллер STM32L433. Так получилось, что микроконтроллеры STM32 меня тоже интересуют. Было бы удобно иметь устройство «два в одном». Наконец, плата является полностью открытым проектом, и самое главное — она черная! В общем, я решил обзавестись такой.

Некоторое время назад я прочитал в блоге hackaday.com заметку о проекте VGA1306. Некто господин Dan O’Shea (@uXeBoy) решил сделать адаптер, преобразующий сигнал к OLED-экранчикам на базе SSD1306 в VGA-сигнал, и использовал для этого FPGA серии ICE40. Просто берем любой существующий код, работающий с крохотными дисплеем 0.96", и выводим его на монитор с диагональю, скажем, 24". В силу пропорций изображения 128x64, без внесения искажений мы сможем использовать только 17.3″ монитора, но все равно очень круто. В общем, идея мне так понравилась, что я решил попробовать повторить проект. К счастью, автор любезно согласился поделиться исходниками.

Логический анализатор — это устройство, похожее на осциллограф. В отличие от осциллографа, логический анализатор предназначен для работы только с цифровыми сигналами, но никак не аналоговыми. При прочих равных логический анализатор скорее всего будет дешевле осциллографа и предлагать больше каналов. В рамках этой заметки мы познакомимся с довольно нетипичным логическим анализатором SUMP2 от Black Mesa Labs. Нетипичен он тем, что представляет собой конфигурацию для iCEstick и запускаемую на компьютере клиентскую часть, написанную на Python 3.

Одно из традиционных развлечений с FPGA заключается в генерации видео-сигнала для VGA-мониторов. В этой заметке будет рассмотрено решение этой задачи на примере платы iCEstick и открытого стека разработки под нее в лице проекта IceStorm. Если у вас нет iCEstick, но есть другая плата на базе FPGA серии ICE40 от Lattice, например, TinyFPGA B2 или Nandland Go Board, они тоже подойдут и потребуют внесения минимальных изменений в коде проекта. Также сгодятся платы на базе других FPGA, однако они потребуют внесения более существенных изменений в код, особенно в части, касающейся PLL. Кроме того, потребуется установка соответствующего проприетарного ПО, например, Quartus для FPGA от Intel / Altera или Vivado для устройств производства Xilinx.

Ранее мы познакомились с IceStorm, открытым набором инструментов для разработки под FPGA серии Lattice iCE40, а также дешевой отладочной платой iCEstick на базе чипа ICE40HX1K. Кроме того, с использованием IceStorm, iCEstick и языка SystemVerilog нам удалось сделать электронные часы. Сегодня же при помощи тех же инструментов мы попробуем поработать со звуком. Однако на пути к этой благородной цели таится преграда, да не одна!

Захотелось вот поупражняться в программировании на SystemVerilog. Какую-то шибко интересную задачу выдумывать не стал — решил просто сделать часы на FPGA. Понятно, что электронные часы являются не слишком интересным устройством. Тем более, что их намного проще сделать на базе микроконтроллера. Однако реализация часов на SystemVerilog позволяет столкнуться с множеством тонкостей данного языка. Понимание этих тонкостей является необходимым для создания более сложных проектов.

В одном из предыдущих постов, а именно — посте Учимся программировать под FPGA на SystemVerilog, мы познакомились с основами разработки под FPGA, а также платой Arty Artix-7 и средой разработки Vivado от компании Xilinx. Помимо прочего, было сказано, что все ПО в мире FPGA является закрытым и совместимым только с железом конкретного производителя (то есть, полный вендор лок). Так вот, оказывается, что это не совсем правда. Открытое ПО для разработки под FPGA все-таки существует, и сегодня мы научимся с ним работать.