Этот проект возможно будет самым простым для нашей платы Марсоход2.
Он реализует несколько несложных функций, с которыми каждый разработчик, даже начинающий, сможет легко разобраться.
Для чего нужен этот проект (проект выполнен в среде Altera Quartus II).
Во-первых, он будет служить базой для всех последующих проектов. Важно то, что в нем уже сделаны все назначения входных и выходных контактов согласно схеме платы. Названия входов и выходов этого проекта соответствуют названиям пинов в схеме платы.
Схему можно скачать здесь:
Пожалуйста обратите внимание, что некоторые пины в чипе Cyclone III имеют двойное назначение. Чтобы их можно было использовать как обычные I/O нужно поставить соответствующие опции в диалоге Device and Pin Options.
Наоборот - если понадобится специальное применение этих пинов, то нужно менять эти опции.
Например, контакт DCLK может использоваться для конфигурирования ПЛИС из внешней конфигурирующей флеш памяти, или может использоваться, как обычный пин I/O.
Это диалоговое окно можно увидеть через команды меню Assignments => Device. Далее в диалоговом окне - кнопка Device and Pin Options.
Итак, все важные назначения уже сделаны (они хранятся в файле cyclone.qsf). Когда будем создавать новые проекты, будем просто копировать проект этот в новую папку и модифицировать его.
Во-вторых, для начала работы всегда нужен самый простой проект.
Нужно что-то вроде традиционного для языка C проекта "Hello, World!". У нас здесь, конечно не язык C, но первый пример, конечно, должен быть простой.
Так вот, этот проект содержит три весьма простых составных части.
Первая часть - счетчик.
Входной сигнал тактовой частоты CLK100MHZ подается на 32-х битный двоичный счетчик LPM_COUNTER, где происходит деление тактовой частоты. Входные сигналы от двух кнопочек платы KEY0 и KEY1 подаются соответственно на асинхронный сброс aclr и разрешение счета cnt_en счетчика LPM_COUNTER. Только четыре выхода счетчика q[25..22] подаются на выходы LED[3..0] проекта и соответственно на светодиоды платы.
Таким образом, после загрузки проекта в ПЛИС, светодиоды платы начинают мигать согласно счету.
При этом, плата реагирует на нажатие кнопочек: счет обнуляется или останавливается, в зависимости какую кнопку нажмешь.
Вторая часть проекта - loopback последовательного порта.
На плате Марсоход2 установлен программатор MBFTDI, построенный на микросхеме FTDI FT2232H. Микросхема имеет 2 канала: интерфейс А и интерфейс В. Интерфейс А используется под JTAG, через него идет программирование платы, загрузка проекта в ПЛИС и отладка. Интерфейс В может использоваться различными способами (в зависимости как запрограммирована микросхема FTDI).
Самый простой способ использования - как последовательный порт (виртуальый последовательный порт через USB). В этом случае контакты в нашем проекте FTDI_BD0 и FTDI_BD1 служат сигналами последовательного порта RX и TX. Так вот, в этом простом проекте я просто соединяю их проводом и это все. Все принятые данные тут же отправляются назад.
Когда плата Марсоход2 подключена к компьютеру и драйвера FTDI установлены в диспетчере устройств видны 2 COM порта. Второй COM порт можно открыть с помощью какого нибудь терминала, вроде PUTTY и пробовать набирать к консоли символы. Они будут отправляться в плату и возвращаться из нее назад, появляясь напечатанными уже в консоли терминала.
Это - основа всех проектов, которым нужны связь с компьютером, через последовательный порт.
Третья часть - видео синхрогенератор.
Я написал на Verilog простой модуль hvsync, который выдает сигналы синхронизации VGA_HSYNC, VGA_VSYNC для VGA и собственно видео сигналы красный VGA_R, зеленый VGA_G, синий VGA_B, которые рисуют вертикальные цветные полосы на экране.
Параметры видеосигнала соответствуют стандартному видеорежиму 1440x900 60Hz.
Для этого видеорежима нужна специальная тактовая частота 106,5Mhz, которой изначально на плате нет - есть только генератор 100Мгц. К счастью, в FPGA Cyclone III есть специальные встроенные компоненты - PLL (Phase Lock Loop). Их в нашей микросхеме два.
PLL - это управляемый настраиваемый генератор. Он позволяет нам задать для исходной частоты два коэффициента: умножитель и делитель. Так вот, я создал для своего проекта компонент PLL с коэффициентами умножения 213 и деления 200!!! Получилась заветная 106,5Mhz частота, нужная для режима монитора 1440x900 60Hz.
Конечно, такой возможности у нас не было в первой плате Марсоход.
На новой плате возможностей гораздо больше: PLL, встроенные блоки памяти, умножители.
Вот так выглядят полосы на экране монитора:
Преобразование из цифры в аналоговый сигнал делается установленными на плате R2R преобразователями. Для небольшой разрядности преобразователей аналоговый сигнал получается достаточно качественный. Об этом можно судить по плавным переходам вертикальных полос на экране монитора.
Итак, для загрузки откомпилированного проекта в плату ничего на не нужно, кроме самой платы, подключенной к ПК. Программатор MBFTDI у нее уже на борту.
Откомпилированная программа занимает почти ничего в ПЛИС (меньше одного процента!):
Значит у нас еще много осталось места в чипе для творчества.
Весь проект Quartus II для платы Марсоход2 можно скачать:
Подробнее...