8-900-374-94-44
[email protected]
Slide Image
Меню

Плис программирование для начинающих – ПЛИС. Заметки начинающего. / ПЛИС / Сообщество EasyElectronics.ru

Как подготовить и загрузить проект в ПЛИС фирмы Altera

Подготовим и загрузим в ПЛИС фирмы Altera проект из среды разработки Quartus II.

Вам понадобится

  • ПЛИС фирмы Altera;
  • программатор USB-Blaster;
  • компьютер со средой разработки Quartis ii.

1Назначение выводов в проекте Quartus II

В меню Assignements Device… выбираем ПЛИС, в которую вы собираетесь «залить» проект. В группе Device Family нужно выбрать семейство, к которому относится ваша ПЛИС. В поле Available devices выберите модель вашей ПЛИС. У меня, например, это Cyclone II, модель EP2C5T144C8.

Выбираем семейство и модель ПЛИС в окне Device

В группе Show in «Available devices» list можно отсортировать устройства по типу корпуса (Package) или по количеству выводов (Pin count), чтобы быстрее найти вашу модель ПЛИС.

Нелишним будет задать, в каком состоянии будут находиться неподключённые ножки ПЛИС. Нажмите кнопку

Device and Pin Options…, перейдите к пункту Unused Pins, и укажите состояние выводов.

Определение состояния незадействованных выводов

После того как указали модель ПЛИС, закрываем окно Device, нажав кнопку OK.

Если вы хотите, чтобы синтезатор сам назначил функции выводам, то можно ничего больше не делать. А для того, чтобы вручную назначить выводы ПЛИС, идём в меню Assignements Pin Planner или нажимаем сочетание клавиш Ctrl+Shift+N.

Запуск инструмента назначения выводов Pin Planner

Запустится инструмент назначения выводов Pin Planner. Внизу отображается список используемых в вашем проекте пинов ввода-вывода с соответствующими именами Node Name.

Инструмент Pin Planner и список вводов-выводов проекта ПЛИС

Теперь в столбце Location нужно задать номера выводов. Дважды кликаем на соответствующей ячейке и выбираем номер вывода, или же вводим с клавиатуры номер. Номера выводов будут зависеть от вашей макетной платы. Например, в моей плате тактовый импульс CLK, согласно мануалу, на 17 выводе, а выходам OUT1…OUT5 я назначу свободные выводы 94, 97, 100, 103 и 93.

Назначаем соответствие выводов ПЛИС сигналам проекта

После того, как все выводы были определены, окно планировщика пинов Pin Planner можно закрыть. Теперь скомпилируйте проект: Processing Start Compilation или Ctrl+L.

Запускаем полную перекомпиляцию проекта в Quartus II

2Установка драйвера для программатора USB Blaster

Подключим программатор USB Blaster к компьютеру (если у вас его нет, то можно приобрести на Али-Экспресс). При первом подключении необходимо установить драйвер. Он устанавливается стандартным образом, и находится в директории Квартуса, в папке drivers: C:\altera\13.0sp1\quartus\drivers

Установка драйвера для программатора USB Blaster

После установки драйвера, программатор будет отображаться в диспетчере устройств как Altera USB-Blaster.

3Загрузка прошивки через интерфейс JTAG

ПЛИС фирмы Altera поддерживают несколько режимов программирования. Сначала рассмотрим загрузку прошивки в ПЛИС через интерфейс JTAG. Подключите программатор к разъёму JTAG на плате с ПЛИС.

Запустим инструмент для программирования: Tools Programmer.

Добавим программатор. Для этого нажмём кнопку Hardware Setup… и в выпадающем списке выберем подключённый USB Blaster. Закроем окно

Hardware Setup.

Настройка программатора

В окне программатора Programmer нажмите кнопку Auto Detect, чтобы Quartus попытался автоматически определить подключённую ПЛИС и файл прошивки *.sof.

Файл прошивки создаётся Квартусом по умолчанию при компиляции и сохраняется в директории output_files, если не задано иное.

В окне Programmer выберите режим JTAG, установите галочку Program/Configure и нажмите кнопку Start. Прошивка будет записана в память ПЛИС.

Загрузка прошивки в ПЛИС через JTAG

4Загрузка прошивки в режиме Active Serial

Чтобы прошивка сохранилась в ПЗУ, запишем прошивку в режиме Active Serial.

Подключите кабель программатора к разъёму AS или Active Serial. Запустите программу прошивки:

Tools Programmer.

Выберите режим Mode Active Serial. Соглашайтесь при ответе на уточняющий вопрос.

Добавим файл прошивки, нажав кнопку Add File… В поддиректории проекта output_files найдите файл с расширением .pof.

Добавляем файл прошивки в режиме Active Serial

После открытия файла прошивки, установите галочки Program/Configure и, по желанию,остальные.

Загрузка прошивки в ПЛИС в режиме Active Serial

Обратите внимание на тип конфигурационной памяти в столбце Device: он должен соответствовать типу памяти, которая установлена у вас на плате.

Нажмите кнопку Start для загрузки прошивки в конфигурационную память ПЛИС.

Проверка с помощью осциллографа результата прошивки ПЛИС

Для преобразования и настройки файлов прошивок существует инструмент, который доступен из меню File Convert Programming Files….

soltau.ru

Схемотехническое проектирование для ПЛИС / ПЛИС / Сообщество EasyElectronics.ru

Чтобы заставить ПЛИС что-либо делать можно описать ее поведение с помощью языков описания аппаратуры (VHDL, Verilog) или нарисовать схему устройства на дискретных логических элементах. Про языки уже писали, но ПЛИС это набор логических ячеек, раньше это были элементы 2И-НЕ, сейчас они более сложные, которые изначально не соединены, а потом, в зависимости от программы, соединяются в определенной последовательности. Таким образов внутри микросхемы строится некий набор логики, т. е. код на языке программирования преобразовывается в набор логики. Так почему бы сразу не описать этот набор логики?

Ответ на этот вопрос будет в конце статьи, а сейчас про схемотехническое проектирование в среде Quartus II.

Чтобы было проще показать как все работает я переведу программу на VHDL из статьи UART приемник на VHDL на набор логики.

После создания проекта, создаем файл схематического описания
File->New->Block Diagram/Schematic File

Перед созданием схемы лучше все начеркать на бумажке.

Чтобы добавить логический элемент жмем на кнопочку с изображением элемента 2И (Symbol Tool), появляется окошко

Поклацайте, посмотрите что есть в библиотеках. Более интересным будет MegaWizard Plug-In Manager.

Запускаем, жмем Next. Перед вами множество «мегафункций» которые можно настраивать под себя, тоже поклацайте (если название мегафункии серое, значит она не поддерживается в вашей микросхеме). Показывать буду на примере счетчика.

Жмем Next

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

На следующих этапах также выбираем различные настройки в зависимости от задачи. В конце жмем Finish, соглашаемся. После этого наш счетчик появляется в папке Project.

Чтобы скопировать элемент который уже на схеме, выделяем его, зажимаем Ctrl и перетаскиваем.

У меня получилась такая схема

(кликайте)

Отличие от программы на VHDL в асинхронном обнаружении старта передачи

(здесь ловим спад от 1 до 0 при отсутствии работы счетчика)
Также в асинхронном сбросе при отсутствии старт-бита и окончания приема.

Найдем соответствие между VHDL кодом и схемой устройства.
(соединения с одинаков названиям являются одним проводом, чтобы присвоить имя соединению, на нем жмем правой кнопкой мыши->Properties, в поле Name вводим название. Это удобно когда на схеме много соединений. Для шины номер бита вписывается в квадратных скобках)

Это соответствует примерно этому коду

if (counter = 8) then
case (state) is
	when 0 =>
		if (rx = '0') then	-- проверяем старт-бит
			state := 1;	
		else state := 0;
			count <= '0';
		end if;
	when 1 => data(0) := rx;	-- запоминаем бит
		state := 2;
	when 2 => data(1) := rx;
		state := 3;
	when 3 => data(2) := rx;
		state := 4;
	when 4 => data(3) := rx;
		state := 5;
	when 5 => data(4) := rx;
		state := 6;
	when 6 => data(5) := rx;
		state := 7;
	when 7 => data(6) := rx;
		state := 8;
	when 8 => data(7) := rx;
		state := 9;
	when 9 => state := 0;
		count <= '0';
		if (rx = '1') then		-- проверяем стоп-бит
			data_out <= data;	-- выводим данные
		end if;
end case;

Переменная counter это счетчик counter_16, когда счетчик досчитает до 8, что соответствует 1000 в двоичной системе, счетчик counter_12 увеличит свое значение. counter_12 соответствует переменной state, вместе с

16 BIT DEMUX он составляет оператор case. При увеличении counter_12 переключаются выходы дешифратора 16 BIT DEMUX, во время переключения которых (по фронтам) защелкиваются D-триггеры, эти триггеры аналогичны переменной data.


Это проверка на стоп-бит, примерно соответствует этому коду

if (rx = '1') then		-- проверяем стоп-бит
	data_out <= data;	-- выводим данные
end if;

Выходной буфер

Соответствует этому присвоению

data_out <= data;

Чего нет в программе

это внутренний генератор MAX II и делитель частоты.

uart.rar

А теперь о вопросе.
Все это я решил проделать ради спортивного интереса после этого сообщения http://we.easyelectronics.ru/plis/osvoenie-plis-s-ispolzovaniem-yazyka-verilog.html#comment1938. Сначала я подумал что описание на логике будет более эффективное чем на VHDL (мало что там компилятор может напартачить), но оказалось что нет. Программа на VHDL занимает в кристалле 41 логический элемент, а схемотехническое описание – 39, я это связываю с асинхронным определением старта передачи.

Время написания кода и составления схемы примерно одинаково, поскольку перед написанием программы на языке описании аппаратуры вы продумываете устройство как набор блоков, которые в конечном счете превратятся в логические элементы внутри кристалла.

we.easyelectronics.ru

ПЛИС (FPGA) и микроконтроллер. В чем разница? — МикроПрогер

 

Altera-Cyclone and Arduino

 

Каждый начинающий микропрогер на определенном этапе своего развития задается вопросом в чем же разница между ПЛИС (фирм Altera или Xilinx) и микроконтроллером (микропроцессором)?

Читаешь форумы — знатоки дела пишут, что это совершенно разные вещи, которые нельзя сравнить, аргументируя это тем, что у них разная архитектура. Читаешь мануал по Verilog или C++ —  и тот и другой используют похожие операторы со схожим функционалом, даже синтаксис похож, а почему разные? Заходишь на марсоход  — там светодиодами (или даже просто лампочками) с  помощью FPGA моргают, смотришь проекты на Arduino — там роботами управляют. СтОп!

А вот теперь остановимся и спросим себя: почему с ПЛИС — тупо лампочка, а Ардуино — умно робот? Ведь и первый и второй вроде как программируемое устройство, неужели у ПЛИС возможностей для робота не хватает?

В какой-то степени суть вопроса  «В чем разница между ПЛИС и микроконтроллером?» раскрывается именно на таком примере.

Отметим сразу. Функционал ПЛИС изначально не уступает микроконтроллеру (и микропроцессору, кстати, тоже), точнее —  основные функции у одного и второго по сути идентичны — выдавать логические 0 или 1  при определенных условиях, а если говорить о быстродействии, количестве выводов(ножек) и возможностях конвейерной обработки, то микроконтроллеру до ПЛИСа вообще далеко. Но есть одно «но». Время на разработку одного и того же программного алгоритма на двух разных устройствах (ПЛИС и микроконтроллер) различается в разы, а то и в десятки раз. Именно ПЛИС здесь в 99% случаев  сильно уступает МК. И дело вовсе не в замороченности языков Verilog, VHDL или AHDL, а в устройстве самой ПЛИС.

 

FPGA: в ПЛИС и  нет сложных автоматизированных цепочек(делающих часть работы за вас). Есть только железные проводные трассы и магистрали,  входы, выходы, логические блоки и блоки памяти. Среди трасс есть особый класс — трасса для тактирования(привязанная к определенным ножкам, через которые рекомендуется проводить тактовую частоту).

Основной состав:

Трасса — металл, напаянный на слои микросхемы, является проводником электричества между блоками.

Блоки — отдельные места в плате, состоящие из ячеек. Блоки служат для запоминания информации, умножения, сложения и логических операций над сигналами вообще.

Ячейки — группы от нескольких единиц до нескольких десятков транзисторов.

Транзистор — основной элемент ТТЛ логики.

Выводы (ножки микросхемы) — через них происходит обмен ПЛИС с окружающим миром. Есть ножки специального назначения, предназначенные для прошивки, приема тактовой частоты, питания, а так же ножки, назначение которых устанавливаются пользователем в программе. И их, как правило, гораздо больше, чем у микроконтроллера.

Тактовый генератор — внешняя микросхема, вырабатывающая тактовые импульсы, на которых основывается большая часть работы ПЛИС.

 

Трассы подключаются к блокам с помощью специальных КМОП-транзисторов. Эти транзисторы способны сохранять свое состояние(открытое или закрытое) на протяжении длительного периода времени. Изменяется состояние транзистора при подаче сигнала по определенной трассе, которая используется только при программировании ПЛИС. Т.е., в момент прошивки осуществляется именно подача напряжения на некоторый набор КМОП-транзисторов. Этот набор определяется прошивочной программой. Таким образом происходит сложное построение огромной сети трасс и магистралей внутри ПЛИС, связывающей сложным образом между собой огромное количество логических блоков. В программе вы описываете какой именно алгоритм нужно выполнять, а прошивка соединяет между собой элементы, выполняющие функции, которые вы описываете в программе. Сигналы бегают по трассе от блока к блоку. А сложный маршрут задается программой.

Архитектура ПЛИС (FPGA)

 

 

В этом элементе ТТЛ логики все операции по обработкам отдельных сигнальчиков проводятся независимо от вас. Вы лишь указываете что делать с тем или иным набором принятых сигналов и куда выдавать те сигналы, которые нужно передать. Архитектура микроконтроллера состоит совсем из других блоков, нежели ПЛИС. И связи между блоками осуществляются по постоянным магистралям(а не перепрошиваемым). Среди блоков МК можно выделить основные:

Постоянная память (ПЗУ) — память, в которой хранится ваша программа. В нее входят алгоритмы действий и константы. А так же библиотеки(наборы) команд и алгоритмов.

Оперативная память (ОЗУ) — память, используемая микроконтроллером для временного хранения данных(как триггеры в ПЛИС). Например, при вычислении в несколько действий. Допустим, нужно умножить первое пришедшее число на второе(1-е действие), затем третье на четвертое(2 действие) и сложить результат(3 действие). В оперативную память при этом занесется результат 1 действия на время выполнения второго, затем внесется результат 2 действия. А затем оба этих результата пойдут из оперативной памяти на вычисление 3 действия.

Процессор — это калькулятор микроконтроллера. Он общается с оперативной памятью, а так же с постоянной. С оперативной происходит обмен вычислениями. Из постоянной процессор получает команды, которые заставляют процессор выполнять определенные алгоритмы и действия с сигналами на входах.

Средства (порты) ввода-вывода и последовательные порты ввода-вывода — ножки микроконтроллера, предназначенные для взаимодействия с внешним миром.

Таймеры — блоки, предназначенные для подсчета количества циклов при выполнении алгоритмов.

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

Контроллер прерываний — блок, принимающий запросы на прерывание от внешних устройств. Запрос на прерывание — сигнал от внешнего устройства, информирующий о том, что ему необходимо совершить обмен какой-либо информацией с микроконтроллером.

Внутренние магистрали — трассы, проложенные внутри микроконтроллера для информационного обмена между блоками.

Тактовый генератор — внешняя микросхема, вырабатывающая тактовые импульсы, на которых основывается вся работа микроконтроллера.

 

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

Архитектура микроконтроллера

 

 

ПЛИС прошивается на уровне железа, практически по всей площади кристалла. Сигналы проходят через сложные цепочки транзисторов. Микропроцессор же прошивается на уровне программы для железа, сигналы проходят группами, от блока к блоку — от памяти к процессору, к оперативной памяти, от оперативной к процессору, от процессору к портам ввода-вывода, от портов ввода-вывода к оперативной памяти, от оперативной памяти… и так далее. Вывод: за счет архитектуры ПЛИС выигрывает в быстродействии и более широких возможностях конвеерной обработки, МК выигрывает в простоте написания алгоритмов. За счет более простого способа описания программ, фантазия разработчика Микроконтроллера менее скованна временем на отладку и разработку, и, таким образом, время на программирование того же робота на МК и ПЛИС будет отличаться во многие и многие разы. Однако робот, работающий на ПЛИС будет гораздо шустрее, точнее и проворнее.

 

В ПЛИС всю работу нужно делать самому, вручную: для того, чтобы реализовать какую-либо программу на ПЛИС,  нужно отследить каждый сигнальчик по каждому проводку, приходящему в ПЛИС, расположить какие-то сигнальчики в ячейки памяти, позаботиться о том, чтобы в нужный момент именно к этим ячейкам памяти обратился другой сигнальчик, который вы так же отслеживаете или даже генерируете, и в итоге набор сигнальчиков, задержанный в памяти задействовал нужный вам сигнальчик, который, например, пойдет на определенную выходную ножку и включит светодиодик, который к ней подключен. Часть сигнальчиков идет не в память, а например на запуск определенной части алгоритма(программы). То есть, говоря языком микропрогера, эти ножки являются адресными. Например,  имеем  на нашей плате в нашей программе три адресные ножки для включения неких не связанных(или связанных) друг с другом алгоритмов, которые мы реализовали на языке Verilog в ПЛИС. Также в программе, кроме трех адресных ножек, у нас есть еще например 20 информационных ножек, по которым приходит набор входных сигнальчиков(например с разных датчиков) с какой-либо информацией (например температура воды в аквариуме с датчика температуры воды в аквариуме). 20 ножек = 20 бит. 3 ножки -3 бита.  Когда приходит адресный сигнал  001(с трех ножек адреса) — запускаем первый алгоритм, который записывает 20 информационных сигнальчиков в 20 ячеек памяти(20  триггеров), затем следующие 20 сигнальчиков умножаем на полученные ранее 20, а результат умножения записываем в память, а потом отсылаем по другим ножкам например в терморегулятор воды в аквариуме. Но Отошлем мы этот результат только тогда, когда на наши адресные ножки придет код например 011 и запустит алгоритм считывания и передачи. Ну, естественно «отсылаем», «считываем» и еще что-то прописываем в ручную. Ведем каждый сигнальчик в каждый такт работы ПЛИС по определенному пути, не теряем. Обрабатываем или записываем. Складываем или умножаем. Не забываем записать. Не забываем принять следующий сигнал и записать в другие триггеры.  Еще добавьте сюда работу, привязанную к тактовой частоте, синхронизацию (которая так же реализуется вручную), неизбежные ошибки на этапах разработки и отладки и кучу других проблем, которые в данной статье рассматривать просто бессмысленно. Трудно. Долго. Но зато на выходе работает супер оперативно, без глюков и тормозов. Железно!

Теперь микроконтроллер. 20 ножек на прием информации — для большинства микроконтроллеров физически невозможная задача. А вот 8 или 16 — да пожалуйста! 3 информационных — в легкую! Программа? По адресу 001 умножить первое пришедшее число на второе, по адресу 011 отсылай результат в терморегулятор. Все! Быстро. Легко. Не супер, но оперативно. Если очень грамотно написать программу- без глюков и тормозов. Программно!

Железо и Программа! Вот главное отличие между ПЛИС и Микроконтроллером.

В микроконтроллере большинство замороченных, но часто используемых алгоритмов уже вшиты железо(в кристалл). Нужно лишь вызвать программным способом нужную библиотеку, в которой этот алгоритм хранится, назвать его по имени и он будет делать всю грязную работу за вас. С одной стороны это удобно, требует меньшего количества знаний о внутреннем устройстве микросхемы. Микрик берет на себя заботу об отслеживании принятых, генерируемых и результирующих сигналов, об их складировании, обработке, задержке. Все делает сам. В большинстве микропрогерских задач это то, что нужно. Но если безграмотно использовать все эти удобства, то возникает вероятность некорректной работы. Железо и Программа!

 

Заключение

Современные разработчики процессоров и микропроцессоров изначально разрабатывают свои устройства на ПЛИС. Да-да, вы правильно догадываетесь: сначала они имитируют создаваемую архитектуру микроконтроллера с помощью разработки и прошивки программы на ПЛИС, а затем измеряют скорость выполнения алгоритмов при том или ином расположении имитируемых блоков МК и том или ином наборе функционала каждого блока отдельно.

По характеристикам выдаваемого сигнала, ПЛИС чаще всего рассчитана на 3,3В, 20мА, Микроконтроллер на 5В, 20мА.

Под микроконтроллер AVR, успешно внедренный в платформу Arduino, написано множество открытых программ, разработано великое множество примочек в виде датчиков, двигателей, мониторчиков, да всего, чего только душе угодно! Arduino в настоящее время больше похож на игровой конструктор для детей и взрослых. Однако не стоит забывать, что ядро этого конструктора управляет «умными домами», современной бытовой электроникой, техникой, автомобилями, самолетами, оружием и даже космическими аппаратами. Несомненно, такой конструктор будет являться одним из лучших подарков для любого представителя сильной половины человечества.

В принципе, все просто!

Остались вопросы? Напишите комментарий. Мы ответим и поможем разобраться =)

Автор публикации

не в сети 11 месяцев

wandrys

877 Комментарии: 1Публикации: 31Регистрация: 17-03-2016

micro-proger.ru

МК VS ПЛИС / ПЛИС / Сообщество EasyElectronics.ru

Жуткое название получилось 🙂 Шифровка.
Попробую теоретически показать преимущество ПЛИС над контроллером в задаче реализации классического генетического алгоритма. Генетические алгоритмы применяться в задачах поиска, когда необходимо для функции y=f(X), где X – вектор параметров по известному значению Y найти X. Можно конечно решить такую задачу методом перебора, но при помощи ГА решить такую задачу возможно быстрее. Будем считать, что мы строим на основе ГА какую то адаптивную систему, в которой необходимо в реальном масштабе времени реагировать на изменения X и быстро находить новые значения X. Например, в системах адаптивной фильтрации для поиска необходимых коэффициентов фильтра. Такая система будет очень требовательна к скорости нахождения коэффициентов.
Что из себя представляет ГА. Вся идея заключается в том что мы кодируем двоичными комбинациями все элементы вектора X, полученная комбинация называется хромосома, а потом при помощи нехитрых операций пытаемся найти наилучший подходящий нам вариант набора параметров вектора X. Насколько хорошо подходят значения вектора Х мы определяем при помощи заданной фитнесс функции, которая как раз зависит от решаемой задачи. Подставляя полученный вектор значений Х в функцию мы получаем определенное значение, которое характеризует приспособленность хромосомы. Рассмотрим приведенный алгоритм.

Из него видно, что для начала работы там надо генерировать случайным образом набор хромосом, т.е. создать популяцию. Дальше мы оцениваем меру приспособленности хромосом всей популяции, для того что бы выявить сильнейших, которые будут иметь в последствии больше шансов на участие в создании следующего поколения, если нашлась хромосома которая удовлетворяет условию остановки алгоритма, то можно поиск решения на этом закончить. Если решение не было обнаружено, то к популяции начинают применять генетические операторы. Их сутью является на основе родительской популяции создать более приспособленную популяцию, которая в свою очередь может дать еще более приспособленную популяцию и т.д. пока не будут выполнены условия останова. Родители для создания новой популяции выбираются при помощи различных методов селекции, которые выдерживают принцип — Чем больше приспособленность хромосомы, тем больше вероятность ее выбор в родительский пул. Основные операторы ГА это
  • Оператор скрещивания. На первом этапе скрещивания выбираются пары хромосом из родительской популяции (родительского пула). Пусть имеются две родительские особи с хромосомами X={x_i,i∈[0;L]} и Y={y_i,i∈[0;L]}. Случайным образом определяется точка внутри хромосомы (точка разрыва), в которой обе хромосомы делятся на две части и обмениваются ими, очевидно, что точка скрещивания, представляет собой натуральное число, меньшее L. Этот вариант скрещивания называется одноточечным.
  • Оператор мутации. Данный оператор необходим для «выбивания» популяции из локального экстремума и препятствует преждевременной сходимости. Это достигается за счет того, что с вероятностью рm изменяет значение гена в хромосоме на противоположное (т.е. с 0 на 1 или обратно).
Рассмотрим реализацию на примере этих простейших операторов.
В итоге, что нам придётся реализовать:
  • Генератор случайных чисел
  • Оператор селекции
  • Оператор скрещивания
  • Оператор Мутации
Сравним вероятные реализации на ПЛИС и микроконтроллере данных операторов. Пускай у нас будет популяция из 100 32-разрядных хромосом. В качестве контроллера берем RISC контроллер с тактовой частотой 200 Мгц.

Для генерации чисел на МК используем генератор М- последовательности по схеме Галуа

Каждый такт работы такого генератора состоит из следующих операций: сдвиг, проверка условия и переход или проверка условия и логическое исключающее сложение; оба варианта выполняются за 3 машинных цикла. Для генерации одной хромосомы необходимо выполнить количество тактов равное ее длине, т.е. для генерации хромосомы необходимо (3+1)*L машинных циклов, так как необходимо записывать в регистр значение сгенерированного бита. Для инициализации всей популяции, с учетом размещения особей в ОЗУ или ПЗУ, необходимо выполнить ((3+1)*L+2)*R машинных циклов.
Например, при размере популяции равном 100 и разрядности хромосомы равной 32, для инициализации начальной популяции потребуется ((3+1)*32+2)*100 = 13000 тактов, что при частоте тактовой частоте 200 MHz составит 65 мкс.
Результат неплохой, но не все МК обладают такими характеристиками. По – этому если у вас МК имеет меньшую тактовую частоту и меньшую разрядность, это время увеличится в разы, а то и в десятки.
Для реализации генератора на ПЛИС используем схему Фибоначчи

Немного модифицировав ее получим следующую схему.

Она позволяет получать одну хромосому за так, при этом как видно с точки зрения ресурсов ПЛИС такой генератор не сильно дорогой и можно запросто сделать 100 таких. Значит, при частоте работы такого генератора 100 МГц мы сможем сформировать целую популяцию за 10 нс. Чувствуете разницу?
Оператор селекции реализуем турнирным методом. Выбираем случайно 4 хромосомы из родительского пула, сравниваем их приспособленности и передаем в родительский пул, только одну из них. Это надо повторить 100 раз. Будем считать, что расчет приспособленности хромосом популяции уже был выполнен и эти значения, где то хранятся. Если не считать, что память контроллера для хранения хромосом довольно ограничена, то посчитаем время выполнения данной операции следующим образом. Считаем что операция чтения 2 такта, а операция сравнения 1 такт — 100*(4*2 + 3+2) – работаем по следующему алгоритму – выбор четырех хромосом, три раза сравнение и одна запись лучшей хромосомы. В итоге при частоте 200 Мгц получим 6.5 мкс. Результат неплохой, но алгоритм весьма утрированный.
Для ПЛИС возьмем следующую схему

Для экономии ресурсов, будем передавать не сами хромосомы, а их номера в популяции, да и везде будет легче работать с их адресами, а сами хромосомы переписывать только там, где это требуется. Как видно здесь три уровня логики, которые будут иметь незначительную задержку порядка тех же 10 нс, если сделать схему синхронной до добавится набольшие задержки до и после прихода синхросигнала. Единственная проблема, в том что вытаскивать случайным образом хромосомы из популяции, при реализации на ПЛИС не выгодно, так как потребуется огромной ресурс в виде большого количества мультиплексоров мультиплексоров для выбора любой хромосомы из популяции. На представленную схему так же потребуется не особо большой ресурс и будет зависеть от разрядности значения приспособленности, где то по одному LUT на разряд для каждого компаратора. Основной расход ресурсов будет на схему выбора хромосомы для проведения турнира. Но это тоже не беда можно будет реализовать параллельный выбор всего родительского пула. Т.е. выполнение будет около 10 нс. Намного лучше чем у контроллера.
Со скрещиванием все просто.
Операцию скрещивания в микроконтроллере выполняется с использованием маски и сводится к последовательному выполнению логических операций: извлечение двух родительских хромосом из ОЗУ (4 машинных цикла), маскирование каждой хромосомы по 2 раза (4 машинных цикла), логическое сложение двух маскированных хромосом по 2 раза (2 машинных цикла), запись двух хромосом в ОЗУ (4 машинных цикла).

При размере популяции равном 100, для получения всех потомков потребуется (4+4+2+4)*50 = 700 тактов, что при частоте тактовой частоте 200 MHz составит 3.5 мкс.
На ПЛИС такую операцию можно выполнить, например по такой схеме.

Как видно здесь два каскада логики, что даст задержку так же порядка 10 нс. Затраты ресурсов будут приходиться на компараторы, разрядность которых зависит от длины хромосомы. Для старших микросхем семейства Spartan 6 такие затраты будут весьма скромными, по этому существует так же возможность обработать все пары параллельно, что даст нам время выполнения операции в 10 нс.
Оператор мутации на МК и ПЛИС можно совместить со скрещиванием, думаю тут особо расписывать нечего.
А теперь посчитайте, сколько потребуется времени для поиска решения, для нахождения решения требуется порядка 50-100 итераций алгоритма.
Тут ПЛИС выходит вперед, а если мы еще допустим организацию конвейера на ПЛИС, сможем вообще пустить несколько поколений в обработку параллельно.
В результате исследования видно преимущество ПЛИС в данной задаче. При это гибкость перестройки всех параметров работы алгоритма(например разрядностей) в ПЛИС будет куда проще, чем переделывание программы для МК.
Вопрос цены, ну пускай плис стоит в 100 раз дороже МК. Но как видно из примера, если вы захотите такую же скорость работы как на ПЛИС, вам потребуются 100 МК плюс титанические усилия по разводке платы, если вообще возможно будет ее сделать.
Надеюсь мне удалось показать, что все таки ПЛИС в некоторых задачах выигрывает МК.

we.easyelectronics.ru

понятие, определение, правила программирования и основы для начинающих

ПЛИС (FPGA) расшифровывается как «Field Programmable Gate Array» и представляет собой огромный массив вентилей, которые могут быть запрограммированы и перестроены в любое время и в любом месте. Многие пользователи до сих пор не понимают, что такое ПЛИС. «Огромный набор ворот» — упрощенное описание модели. Некоторые FPGA имеют встроенные жесткие блоки: контроллеры памяти, высокоскоростные коммуникационные интерфейсы и конечные точки PCIe. Внутри FPGA много вентилей, которые можно свободно соединить вместе. Принцип работы более или менее похож на подключение отдельных микросхем логических элементов. FPGA выпускаются ведущими компаниями мира Xilinx, Altera, и Microsemi.

История развития FPGA

Индустрия ПЛИС выросла из программируемой постоянной памяти PROM и логических устройств PLD. В 1970 г. Philips изобрел программируемую в полевых условиях матрицу. В конструкции такой ПЛИС, что состояла из двух планов, достигалась специфическая реализация логических схем: программируемая проводная «И» либо «ИЛИ». Это давало ей возможность реализации функции в виде Sum of Products.

Altera была создана в 1983 году, а уже в 1984 году выпустила первое в отрасли перепрограммируемое логическое устройство — EP300 с кварцевым окном в упаковке, что позволило использовать ультрафиолетовую лампу на матрице для удаления EPROM метки.

Чтобы преодолеть трудности стоимости и скорости, была разработана программируемая логика массива, в которую входил только один программируемый «И», вводимый в фиксированные «ИЛИ» ворота. PAL и PLA вместе с другими вариантами группируются как простые программируемые логические устройства SPLD. Такие ПЛИС, что интегрированы в один чип с предоставленными межсоединениями для программного соединения блоков, использовались для удовлетворения растущих технологических требований. Они названы комплексными PLD и разработаны Altera.

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

Идея разработки первой коммерчески жизнеспособной ПЛИС принадлежит соучредителям Xilinx Россу Фримену и Бернарду Вондершмитту. XC2064 был изобретен в 1985 году и состоял из 64 настраиваемых логических блоков с 3-мя справочными таблицами. Он дает современное понимание, что такое ПЛИС. Это было в конце 1980 года, когда предложенный Стивом Кассельман эксперимент по созданию компьютера с 6000000 перепрограммированных ворот нашел спонсоров в отделе надводных боевых действий ВМС США, а затем получил патент в 1992 году.

К концу 1990 года появилась большая конкуренция в производстве ПЛИС, тогда доля рынка Xilinx начала снижаться. Такие игроки, как Actel, Altera, Lattice, QuickLogic, Cypress, Lucent и SiliconBlue, заняли свою нишу на мировом рынке FPGA наряду с Xilinx. В 1997 году Адриану Томпсону удалось объединить программирование ПЛИСов и технологию генетического алгоритма с FPGA, начав новую эпоху Evolvable.

Сегодня ПЛИС стали достаточно доступными, в связи с чем продолжают завоевывать популярность на потребительских рынках. Они состоят из набора логических ячеек, называемых таблицами поиска LUT, окруженных межкомпонентной сетью, обеспечивающей гибкую систему, которая может реализовать практически любой цифровой алгоритм.

Принципы программирования

Программирование ПЛИС для начинающих — это процесс изучения, планирования, проектирования и реализации решения на FPGA. Количество и тип планировки варьируются от программы к программе. Создание документа с требованиями и создание документа с дизайном, с объяснением, как будет реализовано предлагаемое решение, может быть очень полезным для решения потенциальных проблем.

Время, затраченное на создание качественного проектного документа, сэкономит его в будущем на рефакторинге, отладке и исправлении ошибок. Реализация решения с помощью программирования ПЛИС включает в себя создание проекта с использованием одного из методов введения проекта. Среди них схемы или код HDL, например, Verilog или VHDL. FPGA могут запрограммировать выходной файл на физическое устройство FPGA с использованием инструментов программирования ПЛИС Altera. Введение дизайна с применением схем больше не используется в промышленности. Синтез и программирования почти полностью позаботились об инструментах вендора, таких как инструменты конфигурации ISE и Vivado и Numato Lab.

Уровень передачи регистра RTL

RTL обозначает уровень передачи регистра. Разработчик также может столкнуться с терминами Register Transfer Logic или Register Transfer Language, все они означают одно и то же в контексте проектирования оборудования. RTL — это абстракция более высокого уровня для цифрового аппаратного дизайна, которая находится где-то между строго поведенческим моделированием на одном конце и чисто структурным на уровне шлюза — на другом.

Моделирование гейтов означает описание аппаратных средств с использованием базовых вентилей, что является достаточно утомительным. RTL можно рассматривать как аналог термина «псевдокод», используемого в основах программирования ПЛИС. Можно описать аппаратный дизайн как последовательность шагов или потока данных от одного набора регистров к следующему в каждом тактовом цикле.

RTL также называют дизайном «потока данных». Как только проект RTL готов, его легче превратить в реальный код HDL, используя такие языки, как Verilog, VHDL, SystemVerilog или любой другой язык описания оборудования.

ПЛИС — это гораздо больше, чем просто множество ворот. Хотя можно строить логические схемы любой сложности, организуя и соединяя логические элементы. Это способ выразить логику в простом формате, который в конечном итоге можно превратить в массив элементов. Два популярных метода сделать это: введение схемы и языка описания оборудования HDL. До того, как он стал широко используемым, инженеры проектировали все с помощью схем. Они были очень простыми для небольших проектов, но болезненно неуправляемыми — для крупных. Стоит только представить себе, как инженеры Intel рисуют схемы для Pentium, у которого миллионы шлюзов! Это неприемлемо сложно.

Verilog — это язык описания аппаратных средств HDL, который можно использовать для цифровых схем в текстовом виде. Изучение Verilog не так сложно, если у пользователя есть опыт программирования. VHDL является еще одним популярным HDL, широко используемым в отрасли. Verilog и VHDL имеют более или менее одинаковое признание на рынке, но пользователи обычно выбирают Verilog, поскольку он прост в изучении и имеет синтаксическое сходство с языком Си.

Технологии программирования

ПЛИС можно считать строительными блоками, которые позволяют осуществить нужную настройку оборудования. Это особая форма PLD с более высокой плотностью и расширенными возможностями функционала за более короткий промежуток времени с использованием CAD. ПЛИС доступны в различных вариантах на основе используемой технологии программирования.

Они могут быть запрограммированы с использованием:

  1. Antifuse Technology.
  2. Программирование на основе технологии Flash как устройства от Actel.
  3. FPGA может быть перепрограммирован несколько тысяч раз, что занимает несколько минут в самом поле для перепрограммирования и имеет энергонезависимую память.

ПЛИС на основе технологии SRAM, которая предлагает неограниченное перепрограммирование и очень быструю реконфигурацию или частичную реконфигурацию во время самой работы с небольшим количеством дополнительных схем. Большинство таких компаний, как Altera, Actel, Atmel и Xilinx, производят эти устройства.

Конфигурируемые логические блоки

Независимо от различных производителей и несколько разных архитектур и наборов функций, большинство FPGA имеет общий подход. Основными компонентными блоками любой FPGA являются гибкий программируемый «логический блок» (CLB), окруженный программируемыми «блоками ввода / вывода» с иерархией каналов маршрутизации, соединяющих различные блоки на плате.

Кроме того, они могут состоять из DLL-библиотек для распределения и управления часами и памяти RAM выделенного блока с основным строительным блоком логической ячейкой. Последняя состоит из генератора входных функций, логики переноса и элементов хранения. Генераторы реализуются в виде справочных таблиц и зависят от введения. Например, Xilinx Spartan II имеет 4 входных LUT с обеспечением каждого 16X1 битным синхронным ОЗУ с использованием мультиплексоров как регистров сдвига для захвата данных в пакетном режиме. Элементы хранения являются чувствительными к краям триггеров или к уровню задвижек.

Фрагмент программирования ПЛИСов:

  1. Арифметическая логика включает в себя вентиль XOR для работы с полным сумматором и выделением логических линий переноски.
  2. Блок ввода / вывода и матрица маршрутизации. Этот блок имеет входы и выходы, поддерживающих широкий спектр стандартов и интерфейсов сигнализации.

Базовый блок ввода / вывода показан ниже.

Буфера во входных и выходных путях направляют сигналы во внутреннюю логику и итоговые площадки непосредственно или через триггер. Они настраиваются на соответствие различным поддерживаемым стандартам сигнализации, которые могут быть определены пользователем и установлены извне.

Матрица маршрутизации

На любой сборочной линии медленный сегмент определяет общую производительность. Алгоритмы маршрутизации используются для разработки наиболее эффективных путей обеспечения оптимальной производительности. Маршрутизация осуществляется на разных уровнях, таких, как локальный, маршрутизация общего назначения между различными CLB, маршрутизация ввода-вывода между блоками и CLB, выделенная маршрутизация для определенных сигнальных классов с целью максимизации производительности и Global Routing для распределения тактовых и других сигналов с очень большим разветвлением. Семейства FPGA также имеют большие блочные структуры RAM для дополнения распределенных LUT RAM, размер которых варьируется для различных устройств FPGA.

Проектирование FPGA предполагает в основном тот же подход, что и любая система VLSI, основными этапами которой является проектирование, моделирование поведение, синтез, моделирование после синтеза, трансляция, отображение и маршрутизация, а также последующий анализ, такой как моделирование синхронизации и статический анализ синхронизации. На компьютере дизайн выглядит упорядоченным и уложенным плиткой, однако фактически имеется несовершенное размещение и маршрутизация, что приводит к снижению производительности.

Чтобы повысить производительность FPGA, всегда можно использовать больше транзисторов. Служебная площадь высокая. Установка большего количества транзисторов означает, что возможны масштабные конструкции. Утечка является серьезной проблемой для ПЛИС и в то же время представляет интерес. Использование асинхронной архитектуры FPGA показывает лучшие результаты в сочетании с технологией конвейерной обработки, которая уменьшает глобальные входы и улучшает пропускную способность.

Качество и проблемы ворот

Безопасность системы всегда была главной проблемой, так как код должен раскрываться каждый раз, когда загружался в ПЛИС. Такая гибкость делает FPGA потенциальной угрозой вредоносных модификаций при изготовлении, поэтому шифровании битовых потоков вовремя пришло ему на помощь.

Часто неопытные дизайнеры и пользователи сталкиваются с дилеммой, насколько мощная ПЛИС подходит для их разработок. Производители часто указывают метрики, например, «количество ворот». Например, программирование ПЛИС Xilinx использует 3 метрики для измерения объема FPGA, максимальных логических элементов, максимальных битов памяти и типового диапазона шлюзов. Пока они являются согласованными, миграция между моделями несколько упрощается, но она редко предлагает точное сравнение у различных поставщиков через разнообразие в архитектурах и из-за различий в производительности.

Наилучшим показателем является сравнение типа и количества предоставленных логических ресурсов. В дополнение к этому, разработчик должен полностью осознать, что именно нужно от устройства, поскольку производители могут похвастаться возможностями, которые будут иметь наименьшее значение для работы. Например, Stratix II EP2S180 от Altera имеет около 1,86,576 LUT с 4 входами, а Xilinx Virtex-4 XC4VLX200 содержит соответственно 1,78,176. Однако, если для проектирования нужна только 177 тыс. LUT, это будет достаточно.

Если ОЗУ — это желательная метрика для дизайнера, то ни 6 Мбит Xilinx XC4VLX200, ни 9 Мбит Altera EP2S180 не будут предпочтительнее по сравнению с менее рекламируемой, более старой моделью XC4VFX140 с 9,9 Мбит.

Языки программирования и ПО

Программирование ПЛИС Altera для начинающих стартует с выбора языка. Опция C, C ++ или System C позволяет использовать возможности крупнейших устройств и, в то же время, достижения сходства реалистической графики разработки. Возможность использования на базе C для проектирования FPGA обеспечивается HLS (синтез высокого уровня), который уже много лет находится на грани прорыва с таким инструментом, как Handle-C. В последнее время это стало реальностью благодаря тому, что крупные поставщики Altera и Xilinx предлагают HLS в своих наборах инструментов Spectra-Q и Vivado HLx соответственно.

Доступен ряд других реализаций программирования ПЛИС Altera для начинающих на основе C, таких как OpenCL, который предназначен для разработчиков программного обеспечения, желающих повышения производительности с помощью FPGA без глубокой понимание дизайна FPGA.

Как и в случае с HDL, HLS имеет ограничения при использовании подходов программирования ПЛИС на C также, как и с традиционными HDL, разработчикам приходится работать с подмножеством языка. Например, сложно синтезировать и реализовать системные вызовы, так как нужно убедиться, что все ограничено и имеет фиксированный размер. В HLS приятно то, что можно разрабатывать свои алгоритмы с плавающей запятой и имеется инструмент HLS преобразования плавающей запятой в фиксированную.

Программировать ПЛИС с ПО Xilinx совсем не сложно. Получить его можно, покупая продукты Xilinx, бесплатно или по цене, ориентированной на конкретные модели. Можно получить доступ к видео на профильном сайте, который наглядно показывает процедуру использования. Из всех компаний, которые можно выбрать при поиске программируемых вентильных массивов, Xilinx безусловно лучший из всех. Они являются создателями этого продукта, и в течение многих лет вносили в него улучшения. Фирменное ПО стало более мощным, чем когда-либо прежде.

Этапы проектирования

Обучение программированию ПЛИС можно проводить онлайн, поскольку платформа хорошо представлена в интернете. При настройке ПЛИС первым шагом является проектирование схемы, для которой необходимо знание цифровой электроники. В отличие от программирования, гораздо сложнее начать нарезку кода, если архитектура программы не ясна. Как только станет ясно, что нужно реализовать, приступают к описанию схемы, используя один из языков: Verilog или VHDL.

Факт, который свидетельствует об изменении парадигмы, состоит в том, что они не называются языками программирования ПЛИС, а являются языками описания. Из-за сложности тестирования цифровых схем обычно на этом этапе используются банки тестов, моделирующих поведение оборудования. Этот тип инструментов позволяет видеть состояние сигнала в любой момент и проверять, есть ли переходы с желаемыми результатами.

Третий этап известен как синтез схемы является одним из ключевым. Он выбирает используемые элементы и их взаимосвязь в соответствии с файлами описания. Для этого этапа требуются инструменты, которые в большинстве ситуаций облегчают и автоматизируют задачи.

Аппаратные средства и наладка

Intel Quartus Prime Software Suite Lite Edition — программное обеспечение для проектирования ПЛИС. Оно идеально подходит для начинающих, так как его можно скачать бесплатно, а файл лицензии не требуется. Можно загрузить программное обеспечение на сайте производителя. Файлы имеют большой размер (несколько гигабайт), их загрузка и установка может занять много времени. Чтобы минимизировать время и необходимое дисковое пространство, рекомендуется загружать только те элементы, которые необходимы для пользовательских задач. При запросе, файлах для загрузки, снимают флажок «Select All» и выбирают только Quartus Prime и поддержку Cyclone V устройства.

Алгоритм создания проекта:

  1. Открывают Мастер нового проекта.
  2. Выбирают Next > Каталог > Имя > объект верхнего уровня.
  3. Выбирают каталог для размещения проекта, например, «Blink» и помещают его в папку intelFPGA_lite, но можно разместить его где угодно и нажимают «Далее».
  4. Когда будет предложено создать каталог, выбирают «Да».
  5. Выбирают «Пустой проект» и нажимают «Далее».
  6. Добавляют файлы и «Далее».
  7. Настраивают семейства, устройства и платы, выбирая следующее: семья — Циклон V, устройство — Циклон V SE, база, название устройства: 5CSEBA6U2317.
  8. Чтобы выбрать конкретное устройство, нужно нажимать стрелки вверх / вниз, чтобы увидеть список поддерживаемых устройств, пока не появится 5CSEBA6U2317.
  9. Пользователю может понадобиться расширить поле «Имя», чтобы увидеть полное имя устройства, нажать «Далее».
  10. При настройке инструмент EDA, используют стандартные инструменты, поэтому никаких изменений не будет, нажимают «Далее» и «Готово». Появится экран резюме.
  11. Создают файл HDL с внедрением Verilog в качестве HDL.
  12. Переходят на вкладку File (главное окно) и выбирают New.
  13. Выбирают Verilog HDL File и нажимают кнопку ОК.
  14. Выбирают «Файл»> «Сохранить как».
  15. Выбирают имя файла. Это имя файла верхнего уровня, и оно должно совпадать с именем проекта.
  16. Нажимают «Сохранить».
  17. Создают модуль Verilog.
  18. Копируют и вставляют ниже размещенный код Verilog в окно blink.v, а затем сохраняют файл кода.
  19. Нажимают правой кнопкой мыши «Анализ и синтез», а затем нажимают «Пуск», чтобы выполнить проверку синтаксиса и синтеза кода Verilog.

Если процесс завершается успешно, рядом с анализом и синтезом отображается зеленая галочка. Если ошибка, проверяют синтаксис и убеждаются, что он точно соответствует блоку кода, указанному выше.

Все опытные программисты знают, что сложные программы, даже подпрограммы, не работают правильно с первого раза. Способности к абстракции у человека, основанные на опыте, позволяют ему находить решения, не беспокоясь о мельчайших деталях. Но суровая правда заключается в том, что физическая система, в которую встраиваются программы, требует, чтобы каждая мелочь была учтена, прежде чем все заработает.

С улучшением программных инструментов для разработки ПЛИС в основном от традиционных поставщиков, а также независимых поставщиков инструментов: Synplicity, FPGA — становится день ото дня все более популярной. Теперь ПЛИС начали включать специализированное аппаратное обеспечение необходимых клиенту функций, снижая издержки производителей. Таким образом, в будущем может появиться конкуренция между жесткими и дешевыми системами с гибкими ядрами. Ожидается, что в ближайшей будущем расходы будут снижаться еще больше, поскольку популярность FPGA вырастет в разы.

Производители начали экспериментировать с таким понятием, как встраивание ПЛИС в интегральные микросхемы для создания гибридного устройства. Основное внимание по-прежнему уделяется маршрутизации межсоединений, а в архитектурах CLB наблюдаются меньшие изменения. Поскольку ПЛИС продолжают включать процессоры, новое поколение потребует не только знаний аппаратного обеспечения цифрового дизайна, но и опыта разработчиков в процессе однократного программирования ПЛИС. В целом, ожидается, что FPGA отнимет долю рынка в устройствах ASIC и станет доминирующей технологией, охватывающей множество приложений из различных областей.

fb.ru

Архитектура ПЛИС (FPGA)

Подробности
Категория: Разное
Создано 20 Январь 2014
Автор: Николай Ковач
Просмотров: 138965

FPGA – это сокращение от английского словосочетания Field Programmable Gate Array.

ПЛИС – это сокращение от словосочетания «Программируемая Логическая Интегральная Схема». Слово ПЛИС встречается в русскоязычных документациях и описаниях вместо слова FPGA. Далее по тексту в основном будет использоваться этот термин — ПЛИС.
 
ПЛИС и FPGA – это аббревиатуры, обозначающие один и тот же класс электронных компонентов, микросхем. Это микросхемы, применяемые для создания собственной структуры цифровых интегральных схем.

Логика работы ПЛИС определяется не на фабрике изготовителем микросхемы, а путем дополнительного программирования (в полевых условиях, field-programmable) с помощью специальных средств: программаторов и программного обеспечения.

Микросхемы ПЛИС – это не микропроцессоры, в которых пользовательская программа выполняется последовательно, команда за командой. В ПЛИС реализуется именно электронная схема, состоящая из логики и триггеров.

Проект для ПЛИС может быть разработан, например, в виде принципиальной схемы. Еще существуют специальные языки описания аппаратуры типа Verilog или VHDL.

В любом случае, и графическое и текстовое описание проекта реализует цифровую электронную схему, которая в конечном счете будет «встроена» в ПЛИС.

Обычно, сама микросхема ПЛИС состоит из:

  • конфигурируемых логических блоков, реализующих требуемую логическую функцию;
  • программируемых электронных связей между конфигурируемыми логическими блоками;
  • программируемых блоков ввода/вывода, обеспечивающих связь внешнего вывода микросхемы с внутренней логикой.

Строго говоря это не полный список. В современных ПЛИС часто бывают встроены дополнительно блоки памяти, блоки DSP или умножители, PLL и другие компоненты. Здесь, в этой статье я их рассматривать не буду.

Разработчик проекта для ПЛИС обычно абстрагируется от внутреннего устройства конкретной микросхемы. Он просто описывает желаемую логику работы «своей» будещей микросхемы в виде схемы или текста на Verilog/ VHDL. Компилятор, зная внутреннее устройство ПЛИС сам пытается разместить требуемую схему по имеющимся конфигурируемым логическим блокам и пытается соединить эти блоки с помощью имеющихся программируемых электронных связей. В общем случае размещение и трассировка связей между логическими блоками в ПЛИС остается за компилятором.

Классификация ПЛИС по типу хранения конфигурации.

SRAM-Based.
Это одна из самых распространенных разновидностей ПЛИС. Конфигурация ПЛИС хранится ячейках статической памяти, изготовленной по стандартной технологии CMOS.
Достоинство этой технологии – возможность многократного перепрограммирования ПЛИС. Недостатки – не самое высокое быстродействие, после включения питания прошивку нужно вновь загружать. Значит на плате должен еще стоять загрузчик, специальная микросхема FLASH или микроконтроллер – все это удорожает конечное изделие.

Flash-based.
В таких микросхемах хранение конфигурации происходит во внутренней FLASH памяти или памяти типа EEPROM. Такие ПЛИС лучше тем, что при выключении питания прошивка не пропадает. После подачи питания микросхема опять готова к работе. Однако, у этого типа ПЛИС есть и свои недостатки. Реализация FLASH памяти внутри CMOS микросхемы – это не очень просто. Требуется совместить два разных техпроцесса для производства таких микросхем. Значит они получаются дороже. Кроме того, такие микросхемы, как правило, имеют ограниченное количество циклов перезаписи конфигурации.

Antifuse.
Специальная технология по которой выполняются однократно программируемые ПЛИС. Программирование такой ПЛИС заключается в расплавлении в нужных местах чипа специальных перемычек для образования нужной схемы.
Недостаток – собственно программировать / прошивать чип можно только один раз. После этого исправить уже ничего нельзя. Сам процесс прошивки довольно не быстрый. Зато есть масса достоинств у таких ПЛИС: они довольно быстрые (могут работать на больших частотах), меньше подвержены сбоям при радиации – все из-за того, что конфигурация получается в виде перемычек, а не в виде дополнительной логики, как у SRAM-based.

Конфигурируемые логические блоки.

В документации компании Альтера встречается выражение Logic Array Block (LAB) – массив логики. У компании Xilinx в микросхемах ПЛИС есть примерно такие же блоки — Configurable Logic Block (CLB). Конфигурируемый логический блок – это базовый элемент в ПЛИС, в нем может быть выполнена какая-то простая логическая функция или реализовано хранение результата вычисления в регистрах (триггерах).

Сложность и структура конфигурируемого логического блока (CLB) определяется производителем.

Теоретически, конфигурируемый логический блок может быть, например, очень простым, просто как отдельный транзистор. Или он может быть очень сложным, как целый процессор. Это крайние точки реализации.

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

Именно поэтому конфигурируемый блок обычно представляет из себя что-то среднее: он обычно достаточно сложен, чтобы можно было бы зашить туда некоторую функцию, но и довольно мал, чтобы разместить множество таких блоков внутри ПЛИС и чтобы была возможность связать их в единую схему.

Таким образом, выбор структуры конфигурируемого логического блока производителем ПЛИС – это всегда поиск компромиса по площади кристалла, по быстродействию, энергопотреблению и так далее.

Конфигурируемый логический блок может состоять из одного или нескольких базовых логических элементов. В англоязычной литературе это Basic Logic Element (BLE) или просто Logic Element  (LE). В ПЛИС обычно используются так называемые LUT-based базовые логические элементы. Что-то вроде этого:


Рис. 1. Пример традиционного базового логического элемента.

LUT – это Look-Up Table, таблица преобразования. Например, на Рис.1 показан четырехбитный LUT в составе базового логического блока. Здесь четырехбитному числу на входе логической функции ставится в соответствие однобитный результат. Красные квадратики на Рис. 1 обозначают программируемый элемент, регистр – это та память, где хранится прошивка для ПЛИС. Видно, что для конфигурации 4-х битного LUT требуется 16 конфигурационных регистра. Содержимое этих регистров определяют логическую функцию, реализованную внутри  базового логического элемента.

Еще один конфигурационный регистр (на Рис. 1 это одиночный красный квадратик справа) определяет нужно ли на выход базового логического элемента выдавать прямо значение с LUT или нужно выдать зафиксированное в D-триггере значение с LUT. Фиксация и хранение данных в цифровых схемах нужна практически в любом проекте.

Примерно такой логический элемент использовался в моем экспериментальном проекте «ПЛИС внутри ПЛИС».

Рассматривая Рис. 1 как пример традиционного базового логического элемента понимаешь какая избыточность заложена внутрь современного кристалла ПЛИС (SRAM-based). Ведь в самом деле, конфигурационные регистры (красные квадратики) прямо не доступны для использования в цифровом проекте. Они только служат для формирования пользовательской функции. Для одного D-триггера в пользовательском проекте требуется более 16 (иногда много больше) триггеров для хранения конфигурации ПЛИС.

На самом деле базовый логический элемент в разных ПЛИС оказывается гораздо сложнее, чем показано на Рис. 1. Ниже есть некоторые примеры из документации на разные типы ПЛИС.

Рис. 2. Базовый логический элемент CPLD MAX II компании Альтера.

Здесь хорошо видны LUT и D-Триггер хранения результата. Ниже, на Рис. 3 представлен базовый элемент Cyclone III.

Рис. 3. Базовый логический элемент FPGA Cyclone III компании Альтера.

В микросхемах Альтеры в одном LAB может содержаться 10-16 LE.

В микросхемах компании Xilinx Virtex-6 базовый логический элемент – это так называемый Slice. В одном CLB всего два Slice. Зато один Slice – это довольно сложное устройство:

Рис. 4. Базовый элемент Xilinx Virtex-6 Slice.

В одном CLB Virtex-6 имеется 8 LUT и 16 D-Триггеров и еще кое-что плюс к этому. Вот так все сложно.

Другая крайность – микросхемы FPGA компании Microsemi (бывшая Actel).
Например, в микросхемах серии 40MX базовый логический элемент выглядит вот так:

Рис. 5. Logic Module of Microsemi 40MX serie.

Восемь входов и один выход.
Здесь нет ни Look-Up Table, ни даже D-Триггера. Триггера, как и остальная логика, формируются где нужно из вот таких крошечных кирпичиков – Logic Module.

Почему у разных компаний получилась такая большая разница в реализации базового логического элемента? Видимо в микросхемах Microsemi связь между базовыми блоками обходится гораздо дешевле: серия 40MX является однократно программируемой. В ней межблочные связи «проплавляются» между соединяющими дорожками и позже не могут быть изменены. Нет никаких регистров для временного хранения прошивки. Здесь нет программируемых переключателей, мультиплексоров, как в FPGA других типов. Ну микросхемы компании Microsemi — это несколько особый случай. Это технология называется antifuse – для производства таких микросхем используется модифицированный техпроцесс CMOS с дополнительными слоями для организации межблочных связей.

Программируемые связи между логическими блоками.

Чтобы в ПЛИС заработала нужная нам цифровая схема мало того, что нужно сконфигурировать имеющиеся логические блоки особым образом, еще нужно создать, запрограммировать связи между логическими блоками.

Для этого в ПЛИС имеются специальные конфигурируемые коммутаторы.

В англоязычной документации встречаются следующие термины: FPGA Routing Architecture и Programmable Routing Interconnect. Это все об этом, о программируемых связях между логическими блоками.

Известно две основных методики построения ПЛИС по типу архитектуры связей: островная и иерархическая.

Рис. 6. Островная ПЛИС.

Островная ПЛИС называется так потому, что конфигурируемые блоки все равны между собой и находятся, как острова в океане, между узлами коммутации и линиями связи.

Здесь, на Рис. 6 обозначаются CB – Connection Box и SB – Switch Box. В сущности это программируемые мультиплексоры, подключающие тот или иной CLB к другому CLB через цепочки проводов в ПЛИС.

Это island-style FPGA или mesh-based FPGA. Типичный пример таких микросхем – это серии Altera Cyclone и Stratix.

Второй известный тип ПЛИС – это иерархические ПЛИС. Здесь идет расчет на то, что в схеме всегда есть участки которые взаимодействуют друг с другом более тесно, чем с отдаленными модулями проекта.

Рис. 7. Иерархическая ПЛИС.

Здесь близлежащие CLB соединить довольно просто, нужно не много коммутаторов и получающиеся связи работают быстро. Вот если нужен более крупный блок вычислителей, то сигнал должен выйти на более высокий уровень иерархии и потом зайти вглубь в соседнюю «комнату».

Нельзя сказать, что это существенно хуже, чем island-style. Просто каждый метод имеет свои плюсы и минусы.

Типичные представители иерархических ПЛИС – это микросхемы компании Альтера серии Flex10K, APEX.

Программное обеспечение для проектирования ПЛИС.

Программное обеспечение для проектирования ПЛИС, а именно компилятор (синтезатор логики и фиттер и ассемблер) – это, возможно, самая сложная часть всей ПЛИС технологии.

Компилятор должен проанализировать пользовательский проект (схемы и текстовые описания на Verilog HDL или VHDL ) и сгенерировать нетлист (netlist) – список всех элементов схемы и связи между ними. Netlist должен быть оптимизирован – логические функции нужно минимизировать, возможные дублированные регистры нужно удалить.

Затем компилятор должен вместить всю логику из netlist в имеющуюся архитектуру ПЛИС. Это делает фиттер (fitter). Он размещает логические элементы и выполняет трассировку связей между ними (процесс place and route). Сложность состоит в том, что один и тот же проект может быть размещен в ПЛИС разными способами и этих способов миллионы. Некоторое размещение и трассировка оказываются лучше, другие хуже. Главный критерий качества полученной системы – максимальная частота, на которой сможет работать проект при данном размещении элементов и при данной трассировке связей. Здесь оказывает влияние длина связей между логическими блоками и количество программируемых коммутаторов между ними.

Компилятор, зная архитектуру ПЛИС по результатам работы дополнительно выдает отчет о времени прохождении сигналов от регистра до регистра. Эта информация часто бывает полезной для разработчика высокопроизводительных систем. Разработчик для ПЛИС имеет возможность давать некоторые советы компилятору где, в каком месте кристалла лучше разместить тот или иной модуль проекта.

Выбирая для своего проекта, для своей платы конкретную микросхемы ПЛИС разработчик в некоторой мере попадает в зависимость от производителя этой ПЛИС, так как должен в работе пользоваться программным обеспечением от этого же производителя.

Программное обеспечение компании Альтера: Quartus II.
ПО Xilinx для проектирования для ПЛИС: ISE Suite, Vivaldo Design Suite.
ПО компании Microsemi: Libero IDE, Libero SoC.

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

На страницах нашего сайта https://marsohod.org мы уделяем внимание прежде всего проектированию систем на базе ПЛИС компании Альтера и пользуемся средой разработки Altera Quartus II.

 

Добавить комментарий

marsohod.org

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *