
Совсем недавно осознал, что нашему Open Source HW проекту marsohod.org уже пятнадцать лет. С ума сойти можно. Когда время-то пролетело? Как-то даже не верится. Наверное можно попробовать подвести какие-то итоги.
Ну или можно сделать хоть самому себе отчет о проделанной работе..
Рождение проекта наверное получилось спонтанным. Пятнадцать лет назад Юрий, мой товарищ по работе сделал своей дочке на день рождения машинку, которой можно было управлять пультом от телевизора. Там была маленькая плата с ПЛИС Altera MAX II, 240 логических элементов, для управления шаговыми моторчиками. Машинку назвали Марсоход, ну и плату управления тоже заодно:

Моторчики были взяты из жестких дисков. На плате были объединены многие выходы ПЛИС, чтобы ток был достаточным для прямого подключения шаговых двигателей. Из истории, вот так когда-то ездил этот Марсоход:
Несмотря на то, что плата была очень простой на её основе с 2010 года было создано почти 70 проектов ПЛИС. Проекты были разные и простые и сложные, возможно даже иногда и часто наивные. На сайте мы сделали раздел загрузок откуда читатели нашего сайта могли скачивать исходники архивов проектов ПЛИС.
Потом сайт стал развиваться. Сказать по правде, у нас не было чёткой цели. Просто было понимание, что это скорее хобби с уклоном на техническое образование. Именно поэтому на сайте marsohod.org стали появляться статьи, которые рассказывали, как пользоваться средой САПР Altera Quartus II и позже Intel Quartus Prime для разработки FPGA проектов.
Дальше мы сделали на мой взгляд несколько чрезвычайно важных дел.
Во-первых на сайте появился отдельный раздел посвященный языку описания аппаратуры Verilg HDL. Я называю для себя этот раздел «Verilog в картинках». В статьях этого раздела я пытался показать соответствие языковых конструкций верилога синтезированным цифровым схемам. Это нужно для того, чтобы программисты лучше понимали во что превращается их код после компиляции. В процессе этой работы приходилось читать много всякой информации и конечно самому учиться. И я даже написал своё собственное «Введение в Verilog» в пяти частях. По статистике нашего сайта этот файл в виде PDF за всё время был скачан почти 100 тысяч раз. Ну и 200 тысяч раз инструкцию посмотрели просто на сайте не скачивая. Конечно, я не претендую на роль великого писателя и для себя лично я считаю «Краткий курс HDL. Язык Verilog» Иосифа Каршенбойма наиболее понятным русскоязычным руководством по Verilog. Но и моё «Введение» мне кажется достижением.
Во-вторых, существенное продвижение вперёд marsohod.org получил после появления нашего собственного программатора MBFDTI:

Наш программатор построен на основе известной микросхемы FT2232HL компании FTDI (Future Technology Devices International). Микросхема хороша тем, что она USB2.0, HI-speed, она двухканальная и дает либо 2 виртуальных последовательных порта, либо последовательный порт и JTAG интерфейс либо скоростное параллельное FIFO. Для функций программатора нам нужен JTAG интерфейс и он замечательно работает. Ну и последовательный порт очень часто нужен в FPGA проектах. Так что микросхема 2-в-одном тут очень кстати. На самом деле таких программаторов на микросхемах FTDI конечно создано немало разными производителями. Почему компания Altera игнорировала популярные FTDI чипы для меня до сих пор является загадкой. У Альтеры есть свой программатор USBBlaster на своей микросхеме и со своей прошивкой. Копировать его аппаратную часть было несколько проблематично.
Что же такого особенного в нашем программаторе MBFTDI? Да ничего особенного, кроме уникального ПО, которое мы создали. Конечно, это SVF плеер, который позволяет загружать FPGA используя SVF файлы — результат компиляции в САПР Altera/Intel Quartus. И, конечно, это DLL драйвер, который позволяет использовать наш программатор MBFDTI прямо из САПР Quartus и SignalTap. С нашим DLL драйвером прямо САПР Altera Quartus Prime может обнаруживать наш программатор и работать с ним:

Этот DLL драйвер это результат экспериментов и реверс-инжиниринга.
Исходники наших программ находятся на github: SVF-плеер имеет 34 звезды гитхаба, а DLL драйвер к квартусу имеет 30 звезд. Тоже своего рода достижение.
После появления нашего собственного программатора мы выпустили еще несколько FPGA плат: и на Altera Cyclone III (Марсоход2) и Cyclone IV (Марсоход2бис) и Altera/Intel MAX10 (Марсоход3 и Марсоход3бис, M02mini). На этих платах наш программатор MBFTDI был уже встроен на печатную плату. Даже на нашей плате с ПЛИС Gowin теперь стоит этот программатор, но надо сказать, что китайская САПР Gowin FPGA Designer по умолчанию знает и умеет работать с программаторами на основе FTDI микросхем.
Следующий важный шаг, который произошёл — с течением времени как‑то постепенно мы перестали размещать архивы исходников FPGA проектов в нашем разделе загрузок на сайте. Это оказалось не очень практичным. Вместо этого мы стали размещать их на github. И более того, если раньше был один архив это один проект, то последнее время структура больше похожа на «одна FPGA плата — один репозиторий». Так сейчас выглядит репозиторий для нашей FPGA платы Marsohod3GW2 на основе чипа Gowin. В репозитории есть и схема платы, и все её проекты и документация на микросхемы. Вот такая у нас получилась FPGA плата:

На этой FPGA плате мы запускаем и простые и сложные учебные проекты:
двоичный счётчик на светодиодах (_clk_counter);
двоичный счётчик на семи сегментном индикаторе (_clk_pll_counter_7seg);
получение данных с АЦП и отображение их на компьютере программой на питоне (_adc_serial_python);
проекты с выводом изображения на HDMI разъём (_hdmi_*);
скоростная передача данных в FPGA плату в режиме синхронного FIFO микросхемы FTDI (_ftdi_sync_fifo);
запускаем радио приём SDR радио (_sw_def_radio);
запускаем RISC_V микропроцессор (_picotiny),
и прочее..
Сейчас и для некоторых других наших плат по такому же принципу «одна плата — один репозиторий» сделаны хранилища проектов: плата MA3128 или плата Марсоход2бис на Cyclone IV.
Мне хотелось бы особенно отметить, что развивая наш сайт мы всегда старались использовать именно Open Source инструменты. Ну там, где это удавалось по крайней мере.
Например, в качестве инструмента для функциональной симуляции я всегда рекомендую Icarus Verilog плюс GtkWave. Или еще я написал отдельную статью про Verilator — тоже достойный и очень быстрый симулятор.
Когда я делал проект SDR радиоприёмника, то для расчёта коэффициентов фильтра я советую и использую не MathLab, а GNU Octave.
В проектах, где FPGA плата подключается например к Raspberry я рассказываю, как использовать для загрузки ПЛИС отладчик OpenOCD.
А ещё, оказывается есть очень интересный Open Source проект YosysHQ, с помощью которого можно собирать проекты для некоторых FPGA чипов Gowin. То есть существует Open Source компилятор для ПЛИС, который делает и синтез и place&route (OSS-CAD-SUITE). И это работает с нашей платой Марсоход3GW2. Мне такое очень нравится.
Вообще Open Source это очень круто. К примеру, на наших разных платах я запускал микропроцессорные ядра ARMv2a, MIPS, RISC-V/Syntacore и RISC-V/Yosys. Про весь этот наш опыт я рассказывал на страницах нашего сайта marsohod.org. Без Open Source это было бы в принципе невозможно. А сейчас можно легко выбрать ядро и быстро его испытать даже в одиночку или небольшим коллективом.
Конечно, у меня у самого есть несколько моих самых любимых опубликованных мною FPGA проектов. Вот они:
Да на самом деле довольно много FPGA проектов сделали. Какие-то изобрели сами, где-то посмотрели идеи, как люди делают. Где-то портировали просто интересные сторонние проекты на наши платы.
А ещё мы поучаствовали в Open Source проекте @YuriPanchul и добавили поддержку нашей FPGA платы Марсоход3GW2 в лабораторные работы «Школы Синтеза Цифровых Схем».
Конечно, не всё у нас в проекте идет гладко, как я рассказываю. Периодически возникают и житейские и технические трудности.
Из технических трудностей, ну, например, сайт разрастался и с течением времени его структура стала слишком разветвлённой. Иногда даже сам не находишь информацию, которая тут точно есть. Сейчас пытаемся сделать его структуру более линейной и понятной.
Некоторые обстоятельства в настоящее время оказываются выше нас. Например, пытаясь продвигать сайт когда-то поддерживали страничку на facebook, где делились сообщениями о новых проектах. Но facebook по неизвестным причинам заблокировал нашу страницу и доступ утерян похоже безвозвратно. Ну или, к примеру, блокировки youtube фактически закрывают доступ читателей нашего сайта к видео файлам, которые демонстрируют работу наших проектов. А ведь там на ютюбе у нас целый канал и больше ста видео. Что-то с этим надо делать, нужно перезаливать все видео на альтернативные площадки - но это целая работа, которую придётся делать.
Случаются и более прозаические вещи. Самый простой пример: недавно понял, что некоторые наши ПЛИС проекты просто невозможно повторить при всём желании. Даже взять самый простой пример с первым проектом машинки Марсохода. Ну вот где человеку взять шаговые моторчики от жестких дисков? Ну невозможно же! Чтобы как-то выйти из создавшейся ситуации мы разработали буквально недавно.. новый Марсоход. На самом деле разработали простое шасси для Марсохода:

Такое шасси можно напечатать на 3D принтере и собрать. Исходники есть на нашем гитхабе, вот и все детали для сборки:

Инструкция, как собрать машинку есть вот здесь.
Ну и конечно, плата другая, моторчики другие (известные 28BYJ-48), нужны новые ПЛИС проекты. И их тоже сделали, фактически пересоздали, то, что когда-то уже работало.
Марсоход управляется пультом от телевизора, да на новый лад:
Мне так нравится, что он может почти на месте разворачиваться.
Пересоздали ещё парочку других проектов: движение Марсохода по полосе (beam‑robot) и Марсоход управляемый из браузера. Надеюсь, что теперь название сайта «marsohod.org» стало более оправданным.
Вот так и движемся вперёд! Будем стараться и дальше делать новые проекты, новые платы, писать новые статьи.