Полезные схемы на микроконтроллерах и плис
Ты ждал знак? Вот он!
Много лет я не решался начать программировать ПЛИС, потому что это сложно, дорого и больно (как мне казалось). Но хорошо, когда есть друзья, которые помогают сделать первый шаг. И теперь я не понимаю одного — ПОЧЕМУ Я ЖДАЛ ТАК ДОЛГО?
Сейчас я помогу сделать первый шаг и тебе!
А зачем оно мне?
Ты устал постоянно читать доки по своему МК или держать кучу информации в голове. Ты все переписал на asm, но скорости все равно не хватает. Ты подключил два внешних устройства к своему МК, подключаешь третье, но у тебя кончились прерывания, перестают работать те модули, что уже работали. Ты берешь другой МК, более мощный из той же линейки, но опять мануалы, регистры флагов, биты… ад. Меняешь платформу: переходишь на другой МК и выкидываешь на помойку свои знания по прежней платформе. Что бы ты не делал — оно дается тяжело. Ты находишь популярную платформу, в которой можно легко из компонентов собирать проект, но выше аппаратных ограничений данного МК все равно не удается прыгнуть… Где-то на краешке сознания иногда проскакивает мысль, что вот на ПЛИС это бы точно заработало быстро и параллельно, что это «именно та задача, которую бы надо решать на плис», но я стар/глуп/занят/etc чтобы суметь/начать такое делать.
Хочешь наконец вздохнуть свободно? Идем дальше!
Радость от разработки на ПЛИС
У меня был тяжелый рабочий день. С одной работы я приехал на вторую работу, потом на дачу, вечером домашние дела, уроки, потом семейный просмотр кино и только в 23 часа я оказался совершенно свободен! Сказать, что я был уставший — ничего не сказать. Но в таком состоянии я сел за ноут с твердой целью: сделать генератор меандра на 440 Гц. Прошло 20 минут и я уже слышал его в наушниках. Я не верил своим ушам! Еще 15 минут мне потребовалось, чтобы сделать ШИМ и менять громкость. К тому времени плата с ПЛИС у меня была всего с неделю и до этого я пролистал всего пару книг по Verilog.
В тот вечер я понял: ВОТ ОНО! Вот та платформа, в которой я быстро и легко могу превращать свои мысли в реально работающее железо!
Почему так?
Опишу плюсы, которые есть в изучении и применении ПЛИС, хотя их и так все знают:
- Универсальность знаний — при смене модели МК нужно читать доки. При смене производителя МК нужно читать доки. Нужно постоянно читать доки, постоянно держать в голове кучу информации. При разработке на ПЛИС, если знаешь Verilog или VHDL, то можно не только программировать любой ПЛИС из линейки одного производителя, но и при желании перейти на другого (Altera, Xilinx). Хоть и будут моменты с освоением другой среды разработки, тонких аппаратных моментов, но сама суть подхода проектирования устройств на HDL от этого не изменится.
- От идеи к железу — при разработке проекта, если тебе не хватает одного мк, то приходится выбирать другой. В принципе можно строить предположения справится или не справится этот МК с проектом. Либо есть какой-то конкретный МК и ты пытаешься туда вместить проект. Чаще всего именно так. Мне это чем-то напоминает подход моего деда, который делает лестницу из того, что есть в сарайке. Хотя можно спроектировать лестницу, купить досок, которые подойдут… От идеи к железу, а не наоборот.
- Простота применения чужих разработок — можно взять чужой модуль и применить его в своем проекте. По коду сможете понять, как он работает. Даже, если он для xilinx, а вы делаете под altera. Иногда это получается не сарзу, но это проще, чем, например, добавлять двоичные библиотеки к проекту на c++/Qt
- Независимость блоков. Блоки в HDL, как чистые фунции в ЯП. Зависят только от входных сигналов. Разработанный и отлаженный модуль в будет и дальше работать правильно, как бы не рос проект. Ничто снаружи не повлияет на правильность его работы изнутри. Да и вообще можно забыть, как он работает — это черный ящик. К тому же, блоки работают параллельно.
Проблема выбора
Сильно останавливают вопросы, что выбрать: Altera/Xilinx, Verilog/VHDL, какую отладочную плату взять. Но обо всем по порядку.
Производитель
Я выбрал Altera. Почему? Ну мы вот так с другом решили, хотя название Xilinx мне красивее. НО. Если ты сейчас не можешь выбрать, то я сделаю это за тебя. Тебе нужен Altera! Почему? Я не знаю. Сейчас важнее сделать шаг: сделать выбор. Я выбрал Altera и пока не пожалел.
Язык
Берем Verilog — потомучто… ну ты понял.
Отладочная плата
На выбор отладочной платы ушло больше всего времени. Понятно, что платы отличаются установленной микросхемой ПЛИС. А микросхемы ПЛИС отличаются друг от друга количеством элементов. Но совершенно не понятно, сколько их потребуется для твоих тестовых проектов. Поэтому большую часть времени я потратил на поиск всевозможных проектов на ПЛИС на предмет того, чтобы узнать, сколько они потребляют ресурсов ПЛИС.
В семействе Altera, за разумные деньги мы можем купить платы с CPLD MAX II на 240, 570 и 1270 элементов, либо более старшие микросхемы FPGA, которые Cyclone 1, 2, 3, 4 с количеством до 10000 и более ячеек. Как же выбрать?
Даже на базе 240 ячеек, проект Марсоход делает просто огромное количество проектов. Настоятельно рекомендую ознакомиться, чтобы иметь примерное представление о сложности проектов, которые можно уместить в 240 ячеек. С другой стороны, существуют проекты, которые полностью программируются под аппаратную копию определенного ПК, включая процессор и всю логику вокруг него (NES, Speccy, Orion, ЮТ-88, etc). Для этого уже требуется пять, десять и более тысяч ячеек. Плюс эти платы содержат дополнительные внешние устройства.
Поэтому я бы посоветовать взять что-то среднее между 240 и 10000 ячейками, с предпочтением в сторону увеличения в зависимости от доступных средств. На отладочной плате лишние ячейки это не страшно, а если их не хватит — уже ничего не поделаешь. Потом, когда устройство отлажено, станет ясно, сколько надо ячеек, купить под нужное количество, без лишнего «обвеса», дешевле и оставить в готовом устройстве.
То, чем действительно отличаются MAX от Cyclone’ов, кроме количества ячеек, это:
1) У серии MAX внутри нет PLL. На каждой отладочной плате есть генератор, как правило на 50 МГц. Основной массе проектов этого будет достаточно. Все синхронизации будут происходить путем деления 50 МГц на какое-нибудь значение. Либо, можно взять внешний генератор и подать на отдельный вход ПЛИС. А что, если потребуется частота выше 50 МГц? Мне не удалось с ходу найти генераторы выше 50 МГц. Но тут как раз на помощь и приходит PLL, который встроен в Циклоны. На нем можно умножить частоту, например, до 100 МГц.
2) В серии Cyclone встроены аппаратные блоки умножения. Их количество зависит от конкретной модели — тут как раз можно «всетаки заглянуть в инструкции», чтобы узнать сколько. Если предполагаете делать какой-то ЦОС, то они пригодятся: сэкономят ячейки, увеличат скорость. С другой стороны, если нет умножителей, их можно синтезировать, но у маленькой ПЛИС на это может не хватить ресурсов.
Во всем остальном у меня критерий «влезло/не влезло». Отладка на заведомо бОльшей, чем нужно плате, с последующей заливкой в минимально необходимую для этого.
Сколько нужно денег?
Программатор
Я считаю, что у меня нет времени, чтобы паять программаторы на рассыпухе.
300 рублей. Я свой брал на ебее, выглядит так:
Отладочная плата
Выбор широкий, в зависимости от количества денег.
Начальный уровень 350 — 550 рублей. Это платы на MAX II (240 или 570 ячеек). Могут подойти для начального ознакомления и дальнейшего пристройства в конечные устройства. На плате есть генератор, пара кнопок, пара светодиодов, остальные 80 выводов на свое усмотрение.
Блок питания
Обязательно должен быть, но не всегда идет в комплекте. Потребуется БП на 5 вольт и ток 2А.
Средний уровень от 900 до 1500 рублей. Это платы Cyclone 1, 2, 3, 4 отличающиеся в основном количеством ячеек.
Маркируются примерно так:
EP2C5T144 — Cyclone 2 примерно 5к ячеек
EP4CE6E22C8N — Cyclone 4 примерно 6к ячеек
EP2C8Q208C8N — Cyclone 2 примерно 8к ячеек
Можно заметить, что Cyclone 3 может иметь больше ячеек, чем Cyclone 4.
Вот несколько вариантов:
835 рублей.
ALTERA FPGA CycloneII EP2C5T144 Minimum System Board for Learn good
880 рублей
Altera CycloneII EP2C5T144 FPGA Mini Development Learn Core Board E081
1265 рублей
EP2C8 EP2C8Q208C8N ALTERA Cyclone II FPGA Evaluation Development Core Board
Платы с расширенными возможностями. Это платы, на которых установлены дополнительные модули (UTP, USB, AUDIO), разъемы (SD, VGA), кнопки, переключатели, светодиоды, семисегментные индикаторы и т.д. Либо может идти базовая плата, а к ней могут прилагаться платы расширения отдельно.
У меня трудится такой комплект — плата + плата расширения:
Altrea EP4CE10E22 FPGA CORE Board+ Device Board USB/Sound/Ethernet/SD Card/VGA
2760 рублей
Вот основная плата. На ней есть 2 светодиода, 2 кнопки, 4 переключателя, семисегментный интикатор и микросхема оперативной памяти.
Плата расширения. На ней распаяны SD, VGA, а так же контроллеры USB(High Speed USB2.0 Chip: CY7C68013A), AUDIO(Sound Card up to 96kHz/32bit ADC/DAC: WM8731S), UTP(100M Ethernet interface: DM9000A):
Эти платы просто вставляются одна в другую, но у меня она пока лежит в ящике. Для своих поделок у меня макетка, с которой я соединяюсь шлейфом, который идет в комплекте. Еще в комплекте идет блок питания на 5 вольт.
Еще варианты:
Altera Cyclone NIOS II SOPC FPGA Development Learning Board EP2C8Q208C8N+LCD1602 — 2670 рублей
Terasic Altera FPGA DE0-Nano Cyclone IV Development and Education Board — 4600 рублей
Широкий выбор альтеровских плат и расширений к ним
Проект Марсоход
Но в целом, большие и дорогие отладочные платы я бы не рекомендовал сразу покупать. Дорогие покупки должны быть обоснованы, сейчас же пока не ясно что подойдет лучше. Ясно станет, когда начнется практика.
Заказал, ждем
Пока идут платы, можно начать себя морально и технически готовить:
— Установить Quartus II v.11.1
Почитать:
— Книга: А.К. Поляков Языки VHDL и Verilog в проектировании цифровой аппаратуры 2003
— www.kit-e.ru/articles/circuit/2008_3_161.php — Краткий курс HDL
— Уроки на марсоходе по верилогу, архитектура, простые советы по стилю.
— VERILOG как образ жизни
— Хорошие примеры (EN)
— Как начать работать с ПЛИС (Xilinx)
ВСЕ!
Мы ждем от тебя интересных проектов на ПЛИС!
PS. Обращаясь к тебе на «ты», я обращаюсь, как к равному, личности, а не части толпы. Если обращение на «ты» оскорбило, прошу меня извинить.
ВНИМАНИЕ! Verilog и ПЛИС не являются серебряной пулей и волшебным средством решения любых задач, они не могут заменить микроконтроллеры во всех проектах. Для работы с ПЛИС требуется определенный уровень технической подготовки. Вы сами несете ответственность за все решения в вашей жизни. Автор снимает с себя ответственность за возможные финансовые и временные потери, связанные с вашими исследованиями в области ПЛИС и Verilog.
Источник
С чем ассоциируется цифровая электроника? В первую очередь с логическими элементами И, ИЛИ, НЕ. Далее в память приходят сдвиговые регистры, дешифраторы, мультиплексоры и прочее. Однако, по мере роста сложности электронных устройств и тенденции к миниатюризации, создание приборов на базе интегральных микросхем (ИМС) из вышеперечисленных компонентов затруднилось, заказные ИМС нужной топологии и схемотехники оправдывали себя только при крупном тиражировании устройства, в остальных случаях — это было неоправданно дорого.
Выходом из сложившейся ситуации стало развитие программируемых интегральных логических схем (сокращенно — ПЛИС, зарубежная аббревиатура — programmable logic device, PLD). Что это такое и где используется мы расскажем в этой статье.
Отличия от микроконтроллеров
При слове «программируемый» у большинства новичков происходит ассоциация с микроконтроллерами. Не смотря на то что их также программируют, ПЛИС — это совершенно другое устройство.
Для разработчиков в микроконтроллерах доступен фиксированный набор решений и средств присущих конкретному чипу, отступить от архитектуры никаким образом не получится. Вам предоставлен набор команд, с помощью которых вы производите операции взаимодействия с окружающей средой, посредством считывания данных с цифровых и аналоговых входов и отправка сигналов исполнительным устройствам с помощью выходов.
Кроме этого вы можете производить вычисления, сохранять данные в регистрах или ПЗУ, а также оперировать данными прошитыми в память микроконтроллера. На этом в сущности и заключается назначение и особенности работы с микроконтроллерами.
Программируемые логические интегральные схемы (ПЛИС) отличаются тем, что, программируя устройство вы сами создаете архитектуру из базовых логических элементов. Таким образом вы получаете высокое быстродействию и гибкость микросхемы. Это даёт возможность, не изменяя одного чипа сделать целый ряд проектов.
Обобщённо внутреннее устройство ПЛИС можно разделить на три основных группы:
1. Массив из логических элементов (макроячеек, логических блоков).
2. Блоки входа-выхода (IO).
3. Линии связи между ними и устройство, которое управляет этими связями.
Однако такое структурирование очень обобщено, немного подробнее мы рассмотрим этот вопрос ниже.
Программируя вы соединяете элементы подобно тому как бы вы это делали, собирая из отдельных элементов устройство и соединяя их входы и выходы проводниками.
Примечание:
Главным отличием ПЛИС от микроконтроллеров является то, что в микроконтроллере вы не можете изменять внутренних связей между простейшими элементами, а в ПЛИС на основе прописывания связей основывается программирование и работа с ними.
Выбор микроконтроллеров происходит на основе множества критериев, таких как:
Быстродействие и тактовая частота;
Объем ПЗУ и ОЗУ;
Количество входов и выходов.
Другие функциональные особенности и периферии, типа поддержки линий связи и протоколов (I2C, one-wire, PWM-сигнал и прочее).
При выборе ПЛИС основным критерием является количество программируемых блоков — их должно хватить для реализации задачи.
В зависимости от конкретного ПЛИС количество блоков может изменяться в широких пределах, соответственно изменяется и стоимость.
Микроконтроллер выполняет последовательно все операции, прописанные в его программе, в то время как блоки ПЛИС выполняют задачу параллельно и независимо друг от друга, поэтому сравнение этих устройств по тактовой частоте нецелесообразно. Слишком различается их принцип работы.
Виды
Актуальными на сегодняшний день являются два основных вида ПЛИС:
1. CPLD (Complex Programmable Logic Device — Программируемая Логическая Интегральная Микросхема, собственно это и есть ПЛИС в её классическом понимании). В ней обычно есть встроенная энергонезависимая памятью, в которую загружается прошивка.
Внутренняя структура строится на матрице макроячеек или логических блоков, а количество элементов в них лежит в пределах сотен и тысяч штук. Благодаря относительной простоте стоят дешевле чем следующий вид программируемой логики. Всё это приводит к тому, что используется CPLD в основном в схемах, где нужна высокая скорость и большое число выводов, при этом выполняют несложные задачи.
2. FPGA (Field-Programmable Gate Array — Программируемая Пользователем Вентильная Матрица, однако её часто относят к ПЛИС) — более развитые и сложные устройства по сравнению с CPLD, строятся на логических блоках с гибкой коммутаций и содержат большее число элементов (десятки или сотни тысяч штук).
Прошивка, как правило, хранится во внешней энергонезависимой памяти. Кроме простейших логических элементов в FPGA могут содержаться готовые блоки для выполнения каких-либо операций, например, блоки обработки сигнала DSP. Всё это позволяет реализовать процессор, устройства обработки сигналов и другие сложные устройства.
Интересно:
Хотя фактически наличие энергонезависимой памяти не делает программируемую логику CPLD. Это частично заблуждение. Главным отличием CPLD от FPGA является внутренняя структура.
Подробнее внутреннее устройство CPLD изображено на рисунке ниже.
А примерная схема её макроячейки выглядит таким образом:
Макроячейка состоит из программируемых мультиплексоров, триггеров (одного или нескольких) и формирует группу выходных сигналов ФБ в нескольких их вариантах.
Ниже приведен еще один пример – блок-схема CPLD микросхемы семейства MAX II фирмы Altera.
И структурный план микросхем этого же семейства.
Промежуточные шины макроячейкам назначаются с помощью такого узла, как распределитель, на англ. он звучит как Logic Allocator, что изображено на схеме ниже, на ней же изображена матрица переключений (Global Routing Pool), а у выходных макроячейки (macrocells) имеют по две обратных связи.
Внешние выводы микросхемы соединяются с выходами макроячеек через еще один блок (матрицу) – ORP (Output Routing Pool), обратите внимание, что через неё же происходит соединение ВХОДНОЙ логики с GRP, что изображено на иллюстрации ниже.
Примечание:
В некоторых CPLD есть т.н. прямые входы (Direct Input) – они соединены со входами ячеек напрямую, что уменьшает задержки.
У FPGA структура имеет вид:
L – логический конфигурируемый блок;
S (substitution block) – блок подстановок, он получает на ход определенное число бит, преобразует, по определенному алгоритму, а на выходе выдаёт другое число бит. Другими словами – дешифратор, шифратор и коммутатор.
C (connection block) – блок соединений.
Схема S-блока:
Программирование
HDL (Hardware Description Language, рус. Язык описания аппаратуры) — так называется язык с помощью которого программируются ПЛИС. Популярными и универсальными являются Verilog HDL и VHDL. Существуют и другие языки, например, присущие конкретным производителям, как AHDL для изделий компании ALTERA.
Разработчикам, которые работают с ПЛИС доступно графическое программирование. То есть вы можете просто рисовать логические схемы или комбинировать код с графикой. Последнее называют модульным методом разработки, когда конкретные модули прописываются, а верхний модуль, в котором всё объединяется программируется графическим способом.
Примеры популярных производителей и серий
На момент написания статьи наиболее известными являются изделия двух производителей.
Altera (основана в 1983 году);
Xilinx (Основана в 1984 году).
У Altera есть несколько основных серий программируемой логики:
MAX, MAX II, MAX IIZ;
7000S;
3000A;
MAX V;
Cyclone;
Arria;
Stratix.
Рассмотрим каждый из них подробнее. В таблицах ниже вы видите общие сведения о микросхемах семейства.
CPLD фирмы Altera 3 CPLD:
MAX — это CPLD для использования в мобильных устройствах, отличительными чертами является относительно малое энергопотребление и тепловыделение. В зависимости от сложности и годов выпуска различают следующие модификации:
7000S на сегодняшний день устарела, она выпущена в 1995 году.
3000A — выпущена в 2002 году, производится по 300нм технологии. Состоит из небольшого числа макроячеек (32-512)
MAX II выпущена в 2004 году, производится по 100нм технологии, состоит из большего числа блоков (240-2210), работающих на частоте до 304МГц. Изделие выполняется в корпусах типа TQFP 0.5 mill со 100 и более ножек.
MAX IIZ — 2007 года, основной особенностью является пониженное энергопотребление — это положительный момент, однако и частоты понижены до 152МГц. Питание данных микросхем осуществляется от 1.8 В.
MAX V — 2010 год. Производится по технологии 180нм, может содержать от 40 до 2210 блоков и работать на частотах до 152МГц или на 304МГц — это зависит от количества блоков.
FPGA:
Cyclone — это уже бюджетные микросхемы типа FPGA. Различаются пять поколений, которые маркируются греческими цифрами (от I до V соответственно). Первое поколение выпущено в 2002 году, производилось по 180нм технологии, а пятое поколение вышло в 2011 году и производится по 28нм технологии. Стоит отметить что все поколения остаются актуальными.
Arria — также относятся к FPGA среднего уровня.
Stratix — мощные FPGA.
Ниже приведены сводные таблицы по программируемой логике FPGA от компании Altera.
И полная таблица по ссылке: https://electrik.info/tablitsa.docx
У производителя Xilinx CPLD представлены сериями:
XC9500XL из 36-288 макроячейках. Работают на частотах до 178МГц, а модели на 288 макроячеек на 208МГц. Выполняется как в небольших корпусах с 44 пинами (выводами) на расстоянии 0.8 мм друг от друга — такие корпуса считаются легкопаяемыми. Также бывают и с 64 и со 100 ножках с шагом в 0.5 мм, а также моделями в корпусах типа PLCC.
Серия CoolRunner-II — это энергоэффективные, но производительные CPLD. Особенностью является питание от напряжения в 1.8В, входы-выходы рассчитаны на работу в диапазоне 1.5-3.3В. Состоят из 32-512 макроячеек и производятся по 180нм технологии. В зависимости от количества ячеек работают в диапазоне частот 179-323МГц, при этом чем меньше ячеек — тем с большей частотой они могут работать в этом случае. Встречаются в разных корпусах, в том числе легкопаяемых, как в микросхемах рассмотренной выше серии.
Компания Xilinx не обошла стороной и FPGA:
Spartan-6 — состоят из 6-входовых логических блоков, их количество лежит в пределах 3840-147443 штуки. Интересны тем что могут содержать контроллеры для обмена данными типа DDR2, DDR3, PCI-EXPRESS, Ethernet 1Gbit, SerialATA etc…
Серия Vitrex-7 отличается сложностью, микросхемы могут содержать до 2 000 000 логических блоков и 1200 контактов.
Ниже вы можете ознакомиться со сводными таблицами с характеристиками CPLD и FPGA от Xilinx 6 и 7 серии, а также Zynq-7000.
Заключение
ПЛИС и ППВМ производится и другими компаниями такими как Lattice Semiconductor (в 2002 году начала производить FPGA), Actel и небезызвестный читателям нашего сайта своими микроконтроллерами ATMEL и многие другие. На программируемой логике можно реализовать ряд устройств, в одном устройстве реализовать параллельные независимые друг от друга вычисления, однако для домашних проектов часто их покупка является финансово неоправданной, но при этом довольно разумна в производственных масштабах, как альтернатива заказным интегральным схемам.
Алексей Бартош
P.S. Посмотрите видео, в нём вы увидите пример реализации игровой приставки Nintendo на FPGA:
Источник