Мы разработали новую FPGA плату M02mini.
Для каждой из наших плат мы делаем самый первый проект очень простым, "почти пустым". Как правило, в нем используются только светодиоды платы, они отображают двоичный счет и кнопки, которые либо останавливают счет либо сбрасывают его.
Вот и сейчас расскажу немного про такой проект.
Цель этого простого проекта - дать шаблон для всех последующих проектов.
Исходный код проекта на github:
https://github.com/marsohod4you/M02mini.git
в папке max10_02_first.
Важно понимать, что в таком проекте кроме реализованной цифровой схемы еще даны названия всем доступным для программирования данной платы сигналам FPGA и все эти сигналы уже приписанны к конкретным выводам микросхемы. Вот так выглядит окно назначений Assignments Editor в среде САПР Intel Quartus Prime для платы M02mini для этого проекта-шаблона:
Назначения выводов в проекте квартуса должны точно соответствовать схеме платы. Схему платы можно посмотреть здесь:
Таким образом, когда все важные настройки уже однажды сделаны, легче начинать новый проект просто скопировав этот шаблонный проект в новую папку и потом начинать новую работу уже в новой папке.
Что же здесь есть у нас? Посмотрим на схему проекта выполненного в САПР Quaruts Prime:
1) PLL, который принимает сигнал тактовой частоты CLK100MHZ с генератора платы 100МГц и из этой частоты делает выходную частоту 50МГц. Вы можете перенастроить этот PLL так, как нужно вам. Здесь сделано деление на два просто для примера.
2) Двоичный счетчик lpm_counter, 32бита. Из этих 32х бит только выходы q[23:20] идут на выходной сигнал, на светодиоды платы LED[3:0]. Обратите внимание, что по схеме платы M02mini светодиод загорится, если на выходе сигнала будет ноль, а не единица. Посмотрите фрагмент схемы платы:
Если нужно, чтобы светодиод загорался, когда на выход LED подана единица, то перед выходом в проекте FPGA нужно ставить инвертор.
3) Сигнал KEY0 с первой кнопки подается на разрешение тактовой частоты счетчика lpm_counter.
4) Сигнал KEY1 со второй кнопки подается через инвертор на асинхронный сброс счетчика lpm_counter. Учтите, что на сигнале с ненажатой кнопки приходит логическая единица. Это происходит из-за того, что в настройках проекта на сигналы KEY0 и KEY1 назначены прямо внутри ПЛИС подтягивающие на питание резисторы Weak Pull-up resistors (смотрите вышев назначениях проекта). При нажатии на кнопки идет сигнал ноль. Поэтому я так в проекте и сделал: ненажатая кнопка KEY0 дает единицу на разрешение тактовой частоты счетчика и счетчик по умолчанию считает. А по нажатию на KEY0 на clk_enable будет ноль и счетчик перестает считать. На сброс логика противоположная. Ненажатая кнопка KEY1 дает единицу, но стоит инвертор, то есть получается сброса нет и счетчик по умолчанию считает. По нажатию кнопки KEY1 на сброс счетчика после инвертора придёт единица и счетчик сбрасывается.
5) Сигнал SERIAL_RX с внешней микросхемы FT2232H это приходящие последовательные данные. Они в проекте передаются на выходной сигнал SERIAL_TX. Таким образом, если на компьютере, куда подключена плата, открыть последовательный порт любой программой терминалом, например, Putty, на любой скорости, то можно печатать в терминале и передаваемые коды проделают путешествие в плату и в FPGA через сигналы SERIAL_RX => SERIAL_TX вернутся назад и будут напечатанны на экране терминала.
6) Четырнадцать сигналов IO[13:0] пока не используются в проекте и вы можете использовать их по своему усмотрению.
На видео демонстрации в начале статьи видно, как подключается плата, в нее загружается проект и начинают работать счетчики.
Вот и все - шаблонный проект готов. Надеюсь из него мы выпустим еще много других интересных проектов.
Подробнее...