DE0-Nano - первый проект

21.11.2015

Этой заметкой я хочу начать цикл инструкций, примеров и советов для начинающих программистов ПЛИС таких же как я. Цель данного цикла - показать, что работать со программируемой логикой не так уж и сложно (надеюсь :) ). Со времен освоения Ардуино я решил, что наилучшим способом знакомится с новым железом является использование готовых "раскрученных" отладочых плат, включающих в свой состав программатор и имеющих достаточное количество примеров - типичные представители, с которых я ничинал - Arduino nano (Seeduino, Uno, Due) и STM32F3-Discovery. На ардуинке, начав с простых примеров со светодиодом дело дошло до разработки мониторов солнечной активности, спиннеров и систем сбора данных. Знакомство с STM32F3-Discovery привело к разработке и изготовлению таких научных приборов как электрохимический потенциостат с функцией регистрации фототока и фотопотенциала, а также прибора для измерения времени жизни носителей в кремнии на основе эффекта регистрации спада сигнала фотолюминесценции.  Это я к тому, что даже не имея профессионального технического образования, можно овладеть навыками программирования различных железок если есть желание, примеры и что особенно важно - цель. Моя личная цель знакомства с ПЛИС - желание изготовить прибор для регистрации и обработки быстрых изменений аналогового сигнала на входе с частотами выше 30 МГц. А позже научиться работать с камерой и анализом изображения "на лету". Предлагаю начать.

Так как я работаю в области нанотехнологий, что все что с приставкой nano меня привекает :). Так я случайно наткнулся на отладочную плату Terasic DE0-Nano - компактная плата, длиной всего 76 мм и имеющей на борту встроенный программатор USB-Blaster. Сердцем платы ( а кому и мозгом) является FPGA чип Cyclone IV E EP4CE22F17C6N

DE0-Nano

На плате распаян также небольшой АЦП, акселлерометр, снизу память SDRAM, две кнопки, 8 зеленых светодиодов и 4 переключателя. Питается плата через USB 5 вольт, предусмотрен также отдельный JST-разъем питания. За все это хозяйство я заплатил компании Терраэлектроника (Компэл) 10 тр (ноябрь 2015 года). Очень надеюсь, что вложенные средства окупятся в будущем.

Итак, ставим софт для работы с DE0-Nano - программу Quartus II Web Edition, которая поставляется на DVD вместе с платой. Для экономии места можно выбрать только Cyclone IV и только 32битную версию программы без файлов помощи. В такой конфигурации у меня от SSD диска отпочковалось 8 Гигабайт.

После установки программы вставляем плату в USB порт компьютера и наблюдаем возмущение системы о неизвестном устройстве. Делаем плату известной, указав путь до драйверов на программатор USB-Blaster по адресу Ваш путь\altera\10.x\quartus\drivers\usb-blaster

Запускаем программу Quartus II и выбираем использовать бесплатную версию Web Edition. Появится что-то типа этого:

Теперь создадим новый проект, выбрав Меню-Файл-New Project Wizard. Читаем или не читаем введение, жмем Далее и указываем путь к нашему создаваемому новому проекту и его имя. Далее пропускаем и попадаем в окно выбора чипа ПЛИС  - наше семейство Cyclone IV E и название EP4CE22F17C6. Жмем далее и Финиш.

Теперь создаем файл кода - Меню-Файл-New и выбираем VHDL file.

Появится белое поле файла, куда вставим следующий код, зажигающий светодиод при нажатии на кнопку:

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
 
entity led_switch is
port(
reset_btn : in std_logic ;
green_led : out std_logic 
);
end entity;
 
architecture behave of  led_switch is 
 
signal LED : std_logic ; 
 
begin
  blinking_process : process(reset_btn)
begin
if (reset_btn = '1') then 
LED <= '0';
else
LED <= '1';
end if;
end process blinking_process;
 
green_led <= LED;
end behave;
 
Жмем Сохранить и указываем имя файла led_switch. Указав другое имя можно получить ошибку при дальнейшей компиляции. Оно должно совпадать с именем в блоках Entity и architecture
Еще понадобится указать программе, что этот наш файл с кодом является верхом иерархии. Для этого в левой части окна в Project Navigator щелкаем по вкладке Files и выбираем правым щелчком наш единственный файл led_switch.vhd и выбираем Set as Top Level...
Теперь можно проверить корректность кода выбрав в Меню-Processing-Start-Start Analysis & Syntesis - должно пройти какое-то время и выскочить одобрительное окошко, что почти все в порядке. Можно почитать сколько ресурсов чипа понадобится для выполнения нашей программы - в данном случае понадобится 0 логических элементов и 2 вывода.
Дальше надо указать какие ножки микросхемы ПЛИС будут подключены к нашим reset_btn и green_led. Для этого в Меню выбираем Assignment и Pin Planner.
Откроется новая программа, где внизу будет таблица соответствия, где в столбце Location укажем следующее:
green_led - PIN_A15
reset_btn - PIN_J15
Все эти соответствия прописаны в User Manual DE0-Nano 

Прописали и можем закрывать это приложение крестиком. Попадаем обратно в наш Quartus II. Все готово для компиляции проекта - Меню-Processing-Start Compilation. Внизу будут появляться бесконечные надписи, ждем их окончания. Должно появиться окошко, что вск готово, 0 ошибок. 

Далее убедившись, что плата DE0-Nano подключена к компьютеру и опознана системой выбираем в Меню-Tools-Programmer. Щелкаем по кнопке Hardware Setup и выбираем USB-Blaster, жмем ОК.

После слева выбираем Add File и указываем путь к созданной при компиляции файлу прошивки. Он находится в папке Output_files/ с расширением .sof. Дальше останется выделить этот файл и нажать кнопку Start. Процесс прошивки произойдет почти мгновенно. После чего на плате погаснут все светодиоды и нажав на кнопку Key0 загориться светодиод LED0. Остальные светодиоды почему-то не полностью выключены, а еле светятся. Видимо надо четко прописывать для них нули. 

В данной заметке я не стал разбирать сам код, задача была настроить Quartus II для работы с платой De0-nano и попробовать ее запрограммировать.

В заключение скажу, что пока код будет работать до первого отключения питания платы. После повторного включения будет запускаться заводская прошивка с перемигивающими светодиодами. Как сделать свою прошивку постоянной будем разбираться позже.

 
Нажав на соответствующий значок, Вы можете добавить эту заметку к себе на страничку в социальной сети
 

Если же вы хотите первыми узнавать о выходе моих новых статей, то можете заполнить следующую форму, вписав туда адрес своего электронного ящика:

 

 

© 2016 Дневник хорошего человека
Рейтинг@Mail.ru