На этом видео - демонстрация лабораторной работы Школы Синтеза Цифровых Схем по распознаванию нот. К плате MCY316 аудио проводом подключен смартфон Андроид на котором я играю ноты, а плата распознает их и отображает на 7-ми сегментном индикаторе.
Сейчас занимаюсь портированием проектов Юрия Панчула Школы Синтеза Цифровых Схем для наших плат MCY112 и MCY316. Обе платы в принципе подходят для выполнения лабораторных работ.
Исходные тексты проектов находятся вот здесь https://github.com/yuri-panchul/basics-graphics-music
А я сделал форк этих проектов, надеюсь потом мои изменения вольются в основной репозиторий.
Структура всего проекта я считаю не сложная.
Есть папка boards, где расположены специфичные для каждой отдельной платы назначения выводов, здесь же находятся какие-то дополнительные модули и самое главное модуль самого верхнего уровня board_specific_top. Таким образом, удается запустить лабораторные работы на самых разных платах. Я добавил в эту папку две новых папки marsohod_mcy112 и marsohod_mcy316 для двух наших плат MCY112 (на базе Cyclone I) и MCY316 (на Cyclone III).
Далее расскажу чуть подробнее о лабораторных работах.
В папке labs расположены собственно подпапки лабораторных работ:
На сегодняшний день я запустил первые 14 лабораторных на обеих наших платах MCY112 и MCY316, они отмечены на рисунке выше.
Чтобы начать работать с платами MCY нужно запустить из консоли git bash скрипт ./check_setup_and_choose_fpga_board.bash и потом на запрос выбрать плату, то есть ввести номер платы. Сейчас для наших плат это 18 или 19, но в будущем, конечно, это может поменяться, если будут добавлены еще платы других производителей:
После того, как выберете плату скрипт отработает и создаст проекты Altera Quartus II в каждой из папок каждой лабораторной работы. Папка с проектами будут лежать в подпапках run.
Сразу скажу, что я работал с лабораторными работами только из Altera Quartus GUI, хотя теоретически подразумевается, что можно и компиляцию и загрузку ПЛИС запускать из консоли.
Напоминаю, что для плат MCY112 нужен Altera Quartus II Web Edition 9.1sp2, а для платы MCY316 нужен Altera Quartus II Web Edition v13.1. Скачать их можно в облаке https://disk.yandex.ru/d/_EhuBxmR4mrrlA
Что понадобится для выполнения лабораторных работ на платах от marsohod? Вот что:
1) FPGA плата MCY112 или MCY316;
2) программатор MBFTDI устанавливаемый на плату;
3) учебник "Цифровая схемотехника и архитектура компьютера" Хэррис и Хэррис (без учебника некоторые лабы могут показаться непонятными);
4) плата расширения Адаптер Raspberry Pi GPIO-VGA, если нужны лабы с видеовыходом 06_vga и / или 14_game;
5) аудио провод 3.5mm Jack <-> 3.5mm Jack для проектов со звуком 11_note_recognition и 13_music_recognition;
6) самодельная платка на GPIO (или не платка, а просто джамперы) для двух дополнительных кнопок.
Немного поясню по вышеперечисленным требованиям.
Например пункт 6 две дополнительные кнопки. На платах MCYxxx к сожалению есть только две кнопочки. Как оказалось, для лабораторных работ этого мало. Нужно еще хотя бы одна кнопка для проекта 02_mux. В этом проекте два входных сигнала идут от кнопки 0 и кнопки 1. Но нужна еще третья кнопка как селектор мультиплексора. Ну и еще, некоторым проектам нужен сигнал сброса. Например, в лабораторной работе 13_music_recognition после распознавания мелодии для приведения схемы в исходное состояние нужен сигнал сброса, а значит еще одна четвертая кнопка. Так что, кнопки придется сделать самому. Вот схема:
Про аудио провод. Говорят, что на лабораторных в Школе Синтеза Цифровых Схем давали флейты, чтобы студент играл ноты, а платы FPGA с подключенным микрофоном распознавали эти ноты. Я предлагаю обойтись без флейт и микрофонов, а просто подключать аудио разъем платы MCYxxx аудио проводом, например, к смартфону или компьютеру. Я предлагаю использовать вот такой провод, его можно даже изготовить самому при желании:
У моего кабеля есть еще дополнительный параллельный разъем для подключения колонки. Таким образом, я могу на колоночках слушать звук, который прямо сейчас идет от источника сигналов.
На смартфоне можно запустить приложение пианино и играть ноты там. Демонстрация этого проекта есть в самом начале этой статьи. Я нажимаю клавиши в программе на смартфоне, а плата отображает букву обозначающую ноту.
Есть еще вторая лабораторная работа labs/13_music_recognition связанная со звуком - это распознавание мелодии. Эту лабораторную так же легко выполнить, но нужно сперва потренироваться игре на пианино:
FPGA проект пытается обнаружить одну из трех известных ему мелодий. Старший разряд индикатора показывает распознанную ноту, а разряды 0, 1 и 2 показывают положение в машине состояний трёх распознавателей. Выигрывает нулевой распознаватель - он по шагам проходит всю мелодию до конца и потом показывает на индикаторе кружочек - конец поиска.
Или можно подключить аудио проводом FPGA плату MCYxxx к компьютеру, а на компьютере питоновской программой воспроизводить музыку. Я написал питоновский скрипт, который играет мелодию Yesterday, а плата замечательно распознает её.
Должен сказать, что на платах MCYxxx стоят аудио АЦП PCM1801 и с его помощью можно оцифровывать звук, что собственно и реализовано в FPGA проекте. Модуль оцифровки установлен в самом верхнем уровне board_specific_top и студенту не нужно заботиться, как это происходит. Студенту в его топ модуль придет только сигнал [23:0]mic с ним и нужно ему работать..
Ну и платка расширения Raspberry Pi GPIO-VGA конечно тоже нужна - на самих платах MCY316 или MCY112 нет выхода VGA, но есть квази совместимый разъем Raspberry GPIO. Вот сюда установим эту плату расширения:
Понятно, что плата нужна для всех лабораторных, которые отображают на мониторе какую-то информацию. Такую платку можно купить на Али Экспресс или в российских хобби магазинах.
В целом лабораторный стенд с программатором, платой расширения VGA, аудио кабелем и самодельными доп кнопочками выглядит вот так:
Без платы VGA можно выполнять некоторые лабораторные работы, но не все. А с VGA платкой проекты становятся интересней.
В лабораторных работах проект 06_vga отображает вот такую картинку:
Есть еще проект 14_game, который тоже на VGA мониторе показывает. В этом проекте реализована видеоигра, где нужно управляя ракеткой сбить пролетающую цель.
В целом, конечно, такие лабораторные работы вполне помогут студентам с освоением цифровой схемотехники. Надеюсь использование плат MCY112 или MCY316 так же будет полезным, но, как я уже написал, нужна дополнительно плата расширения Raspberry GPIO-VGA, аудио-провод 3.5 Jack, самодельная платка с двумя дополнительными кнопками.
От себя напомню, что для наших плат в гитхабе есть отдельные репозитории, где так же есть набор интересных учебных проектов:
1) https://github.com/marsohod4you/MCY316
2) https://github.com/marsohod4you/MCY112
Подробнее...