Основы разработки с применением ПЛИС. Часть 1.

Введение

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

Терминология, определения, общие понятия

ПЛИС - Программируемая Логическая Интегральная Схема. Бывает разных типов: CPLD, FPGA и так далее. В рамках повествования я буду применять обобщения, называя устройство микросхемой ПЛИС или FPGA, независимо от ее устройства.

Выбор языка разработки и фирмы производителя — трудная задача, если нет опыта разработки. С другой стороны, не многие имеют опыт работы на нескольких языках и архитектурах. Но даже и в этом случае, силы равны и все делятся примерно 50 на 50 %. Поэтому в моем случае я просто выбрал производителя Altera и язык разработки Verilog. Дальнейшее повествование будет происходить в соответствии с этим выбором.

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



Языки программирования. Не совсем верное понятие, применительно к ПЛИС. Это связано с тем, что при разработке на ПЛИС создается архитектура, для решения задачи, а не алгоритм. Алгоритм определяет последовательность действий, в то время, как архитектура определяет совокупность блоков, которые решают задачу, при этом блоки вполне могут работать параллельно (независимо друг от друга). Следовательно, языки, которые используются при разработке на ПЛИС — это языки описания архитектуры (HDL — языки), такие как Verilog и VHDL.

Визуальная разработка архитектуры. Среды разработки ПЛИС дают возможномть получать архитектуру разными способами. Даже в одном проекте могут применятьcя блоки, разработанные на разных языках, или вообще нарисованные в виде схем. Визуальное проектирование — рисование логических схем — это, пожалуй, первое, что хочет освоить новый разработчик. Ведь блоки логических элементов, триггеры и прочие элементы есть в библиотеках, нужно их просто взять и соединить из них схему. Но у такого подхода есть свои минусы. Пока схемы не очень большие, то визуально разрабатывать, может быть, и просто. Однако, каждая среда для такого типа разработки имеет свои особенности и может оказаться, что в Xilinx нарисовать схему сложнее из за особенностей графического редактора. А уж о переносе схемы и речи нет. К тому же, языки HDL ближе к человеческому языку и логика, описанная на них на много понятнее. Язык Verilog, к примеру, позволяет одну и ту же логику описать тремя разными способами. А возможности параметризации модулей, позволяют очень сильно менять модули, в зависимости от требований, по заданным условиям. В случае визуального проектирования все бы пришлось перерисовывать. Однако, визуальная разработка иногда применяется при описании самого верхнего блока, который объединяет между собой все входящие в него подблоки. Но я придерживаюсь однообразия в разработке и даже верхний модуль описываю на Verilog.

На Verilog это можно сделать буквально за пару минут, к тому же, если приглядеться в эпюры и схему, то можно увидеть ошибку. А вот и код:

module counter(CLK, CLRN, Q); //описываем модуль и название его входов/выходов
input wire CLK, CLRN; //входные линии
output reg [3:0] Q; //4 битный регистр, соединенный с выходом

initial Q <= 4'b0000; //зададим начальное значение регистру

always @(posedge CLK) begin //по положительному фронту каждого такта
	if (CLRN) begin
		Q <= 4'b0000; //обнуляем, если получили сигнал сброса
	end else begin
		Q <= Q + 1'b1; //
	end
end
endmodule

Плюсы и минусы ПЛИС

Плюсы:

Универсальность знаний — при смене модели МК нужно читать документацию. При смене производителя МК нужно читать документацию. Нужно постоянно читать документацию, постоянно держать в голове кучу информации. При разработке на ПЛИС, если знаешь Verilog или VHDL, то можно не только программировать любой ПЛИС из линейки одного производителя, но и при желании перейти на другого (Altera, Xilinx). Хоть и будут моменты с освоением другой среды разработки, тонких аппаратных моментов, но сама суть подхода проектирования устройств на HDL от этого не изменится.

От идеи к железу — при разработке проекта, если не хватает возможностей одного МК, то приходится выбирать другой. В принципе можно строить предположения справится или не справится этот конкретный МК с проектом. Либо есть какой-то конкретный МК и разработчик пытается туда вместить проект. Чаще всего именно так. Мне это чем-то напоминает подход моего деда, который делает лестницу из того, что есть в сарайке. Хотя можно спроектировать лестницу, купить досок, которые подойдут… От идеи к железу, а не наоборот.

Простота применения чужих разработок — можно взять чужой модуль и применить его в своем проекте. По коду можно понять, как он работает. Даже, если он для xilinx, а вы делаете под altera. Иногда это получается не сарзу, но это проще, чем, например, добавлять двоичные библиотеки к проекту на c++/Qt

Независимость блоков. Блоки в HDL, как чистые фунции в ЯП. Зависят только от входных сигналов. Разработанный и отлаженный модуль будет и дальше работать правильно, как бы не рос проект. Ничто снаружи не повлияет на правильность его работы изнутри. Да и вообще можно забыть, как он работает — это черный ящик. К тому же, блоки работают параллельно.

Минусы:

ПЛИС не является универсальным решением для любых задач. Если требуется какой-то развесистый и сложный алгоритм, то его проще решить на микроконтроллере. Это проводит к тому, что применять МК всетаки придется. И тут же сразу потеряется вся прелесть реализации всего проекта на одном кристалле с применением одного объема знаний и одной среды разработки. Но у этой проблемы есть несколько вариантов решения. Если алгоритм не слишком сложный и не потребуется его дальнейшая постоянная доработка, то его можно реализовать и аппаратно. Либо, можно применить более дорогие микросхемы ПЛИС, которые содержат на кристалле МК общего назначения, типа ARM. Но тут уже появляется привязка к разработчику и архитектуре. Еще есть вариант — применение Soft-микропроцессора, когда это микропроцессорное ядро, которое может быть полностью создано с использованием только логического синтеза. Такие решения есть и у Altera и у Xilinx, это NIOS и Microblaze. Но такие решения не являются универсальными, требуют несколько тысяч логических ячеек для реализации и имеют определенные лицензионные ограничения. В качестве альтернативы, можно что-то поискать на сайте Opencores. Как, например, клон AT90S1200, который уместился в 240 ячеек.

Заблуждения:

ПЛИС — это дорого. В самом начале трудно понять, какой нужен ПЛИС. Микросхемы отличаются друг от друга количеством ячеек и другими дополнительными внутренними блоками. Если взять CPLD MAX 240 на 240 ячеек — это много? Что можно сделать из 240 ячеек? Для ЦОС 240 — это мало, но можно сделать очень многое. При затратах в 1000 рублей, можно приобрести даже более современные ПЛИС Altera серии Cyclone с количеством внутренних ячеек около 5тыс штук! С таким количеством уже возможна цифровая обработка сигналов, микросхема содержит аппаратные умножители (что очень полезно для математики ЦОС), достаточное количество внутренней памяти (для реализации фильтров) и прочие плюшки, в виде PLL. Плюс потребуется простой программатор USB за 300р.

Кликабельно:

 

 

 

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

Ссылки:

1. Сделай шаг к ПЛИС

2. Марсоход

1 комментарий
Хорошая статья!  Ждем продолжения.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.