Найти тему
ПЛИСовод.

Порт пианинки на Марсоход

Оглавление

Отличительной особенностью этой статьи является то, что для большинства людей её название представляется случайным набором слов.

Но несмотря на странное название, делать я буду вполне понятную вещь - портирую проект пианино на FPGA, допиленное в прошлой статье, на плату с копеечным Altera MAX II EPM240.

Наш 800-рублёвый герой
Наш 800-рублёвый герой

В стане FPGA, этот экземпляр, наверное, один из самых дешёвых. За 800 рублей его можно приобрести уже в комплекте с USB Blaster-ом и доставкой. Но интересен он ещё и тем, что наши соотечественники выпускают платку с таким камнем под брендом Марсоход.

Тот же камень, но другая плата.
Тот же камень, но другая плата.

Марсохода у меня нет, но есть синее недоразумение. Вот на него я и буду портировать проект пианино.

Хочется отметить особенность ПЛИС. Ни один из файлов Verilog-а при портировании трогать не придётся. Несмотря на то, что я использую другую плату, код остаётся прежним.

Ну что-то всё-таки поменять придётся. В первую очередь - нужно сделать копии файлов qpf и qsf для MAX II. Назову их max.qpf и max.qsf. Далее, в файле max.qpf поменяю top на max. Я до сих пор и не понял, зачем Quartus-у вообще дался этот файл. Он ничего полезного не содержит.

В max.qsf нужно поменять строки с

на

И переопределить пины. Вот это уже выглядит не как тривиальная задача. Для начал нужно определить - куда подключен кварц. Для этого ищу схему, из которой ничего непонятно, но вроде выглядит как 12 ножка. А больше то на плате и ничего нет. Разве что на 77 ногу подвязан светодиод, да и тот выключается джампером.

С кварцем понятно, теперь нужно куда-то присоединить кнопки. В целом - можно их подключить куда угодно, но для удобства владельцев Марсохода я их присоединю туда-же, где у Марсохода свои кнопки: 15, 16, 17 и 18 пины. Оставшуюся колонку подсоединяю к 26 пину. Этот пин является выводом как для меня, так и для Марсохода (f5)

И Quartus успешно всё компилирует. Но не видать мне успеха - файл max.sof не найден. А всё потому, что для CPLID проектов никаких sof-файлов и не создаётся. Создаются pof-файлы!

Допиливаю Makefile...

После доработки Makefile, всё отрабатывает и заливается на платку. Вот только работает оно на ней... странно. А всё потому, что при нажатой кнопке, на вход подаётся 0 - это как и ожидается. А при отпущенной... наводки из воздуха. При отпущенной кнопке, её входная ножка работает как антенна, что может быть хорошей идеей для реализации аппаратного генератора случайных чисел... Вот только для кнопки это как раз плохая идея. Нужно сделать так, чтобы при отпущенной кнопке на пине была единица. И именно для этого и существуют pull-up резисторы. И они даже есть на MAX II. Попробую найти: набираю в консольке

make PROJECT=max quartus

и открываю Pin Planner. Вот только не вижу ничего полезного. Гугл в помощь, надо в табличке пинов по заголовку щёлкнуть правой кнопкой мыши и выбрать Customize Columns...

-3

А в открывшемся списке добавить пункт Weak Pull-Up Resistor. Осталось добавить этих резисторов для всех входов s1 - s4. Вот так

-4

И теперь всё работает уже как надо! Ну и вся миграция. Остаётся залить

make PROJECT=max flash

И наслаждаться:

Если есть желание

И плата для того, чтобы повторить мой проект, то в Makefile нужно заменить верхнюю строку на PROJECT := max, так как без подобной замены будет создан стандартный проект для Cyclone IV. Вместо этого можно забить на все мейкфайлы и открыть проект max.qpf в Quartus. А ещё можно вбить в терминал команду как над видосом.

Владельцам Марсохода

На моей плате и в марсоходе, кварц подключен к разным пинам. Поэтому нужно поменять в файле max.qsf строку

на

А ещё придётся подправить частоту кварца в top.v Всё таки в марсоходе кварц в 2 раза более быстрый.

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

А в качестве бонуса видос с более разросшейся клавиатурой (которой всё-равно не хватило, из-за чего пришлось сфальшивить в одном месте)