FPGA. Первое знакомство

В данной статье рассказывается о том, я начал знакомиться с программированием программируемых логических интегральных схем (FPGA). Подробнее о предпосылках описываемых в статье событий можно прочитать на главной странице раздела.

Светодиоды. Мигаем кнопками

Недорогая плата для прототипирования, которую я приобрёл, оснащена четырьмя кнопками и четырьмя светодиодами, подключенными к ПЛИС Cyclone компании Altera следующим образом:

  • Светодиоды (выводы PIN_141, PIN_142, PIN_143, PIN_144).

Схема подключения светодиодов к FPGA Cyclone
  • Кнопки (выводы PIN_37, PIN_38, PIN_39, PIN_41).

Схема подключения кнопок к FPGA Cyclone

Так что самое простое, что можно было сделать -- это просто соединить их друг с другом с помощью виртуальных проводов. Для этого даже не понадобилось писать какой-либо код -- вот такую схему я изобразил в программе Quartus II:

Схема соединения кнопок и светодиодов

Скомпилировав проект и запрограммировав микросхему, я получил именно то, что ожидал увидеть: все четыре светодиода светятся, при нажатии на одну из кнопок один из светодиодов гаснет.

Добавляем логики

Следующим шагом логично добавить в схему немного бинарной логики, например я соединил кнопки BTN[0] и BTN[1] элементом AND2 с выводом на светодиод LED[0] и элементом NAND2 с выводом на светодиод LED[1], а кнопки BTN[2] и BTN[3] элементами OR2 и XOR2 с выводами на светодиоды LED[2] и LED[3].

Схема с использованием логических элементов

Получилась следующая логика работы схемы (скачать BDF):

Логика работы схемы

То есть, если первые две кнопки (группа AND и NAND) при нажатии одной ли, другой ли, обоих ли вместе, производят одинаковый эффект - свечение светодиодов переключается, то вторая группа (OR и XOR) ведёт себя иначе - при нажатии на одну из двух кнопок включается четвёртый светодиод, и только нажатие обоих кнопок вместе выключает оба светодиода.

Автор: Андрей Шаройко <vanyamboe@gmail.com>