Fpga. просто о сложном — философия написания конфигураций для плис

Fpga. просто о сложном – философия написания конфигураций для плис

Основы создания конфигураций ПЛИС на VHDL в Xilinx ISE

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

Например это могут быть задачи высокоскоростных/многопоточных вычислений, задачи реализации многоканальных интерфейсов, аппаратные сопроцессоры и тому подобное. Для их решения обычно приходится самому разрабатывать микросхемы. Одним из дешевых и доступных вариантов такой разработки является ПЛИС (программируемая логическая интегральная схема).

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

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

Что подразумевается под словом “описывает” я и попытаюсь на конкретном примере объяснить в этой и последующих статьях.

Применение VHDL для описания устройств я буду показывать на примере ПЛИС фирмы Xilinx семейства Spartan 6(FPGA). Самые дешевые чипы данного семейства поштучно стоят порядка 9$ в Китае, например модель xc6slx9-3tqg144, которую я укажу в настройках проекта.

Разрабатывать конфигурацию для ПЛИС я буду в среде Xilinx ISE WebPACK 14.3, она кросс-платформенная и без проблем установилась на Arch linux.

Чтобы создать проект надо выполнить File -> New Project -> придумать Name -> Next -> выбрать Family: Spartan6, Device:XC6SLX9, Package:TQG144, Speed: -3, Preffered Language: VHDL -> Next -> Finish. Теперь можно добавлять в проект файлы с описанием.

Для этого делаем Project -> New Source -> VHDL Module, File Name: например vhdl_dev -> Next -> Next -> Finish. Вот и все – открылся текстовый редактор, там будет что-то вроде:

———————————————————————————-
— Company: — Engineer: — — Create Date: 23:42:52 05/08/2014 — Design Name: — Module Name: vhdl_dev – Behavioral — Project Name: — Target Devices: — Tool versions: — Description: —
— Dependencies: —
— Revision: — Revision 0.01 – File Created
— Additional Comments: —
———————————————————————————-
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
— Uncomment the following library declaration if using
— arithmetic functions with Signed or Unsigned values
–use IEEE.NUMERIC_STD.ALL;
— Uncomment the following library declaration if instantiating
— any Xilinx primitives in this code.
–library UNISIM;
–use UNISIM.VComponents.all;
entity vhdl_dev is
end vhdl_dev;
architecture Behavioral of vhdl_dev is
begin
end Behavioral;

Все строки, которые начинаются с двух дефисов (–) – это комментарии, их можно удалить чтобы не мешали. Операторы library и use используются для подключения стандартной библиотеки и пакета из неё.

Между строками entity is и end нужно поместить перечень сигналов (грубо говоря проводов), по которым будет осуществляться ввод/вывод в устройство (то есть описать порт устройства). Пока что там пусто. Имя должно совпадать с именем файла (без расширения).

Наконец между architecute … of … is и end … нужно поместить само описание устройства. 

Простой пример: XOR на VHDL

Давайте, допустим реализуем самое простое устройство, которое должно будет выполнять операцию “исключающего ИЛИ” (Exclusive or, XOR) над двумя сигналами.

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

При этом когда нажаты обе кнопки, или не нажата ни одна, он гореть не должен. Такое поведение описывается операцией XOR.

Нажатие кнопки в данном случае означает подачу на вход ПЛИС высокого уровня напряжения (что соответствует логической “1”), в отпущенном состоянии на входе присутствует лог. “0”. Аналогично светодиод в данной схеме будет гореть при выходном значении лог. “1”, и не гореть при лог “0”. 

На ПЛИС показаны три вывода IO, собственно к ним мы и подключим наши сигналы, то есть опишем их в entity. У нас будет два входных сигнала с названием I1, I2 а также один выходной сигнал O. В самом коде VHDL мы должны только описать операцию xor. 

Итак введем код:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity vhdl_dev is port( I1, I2 : in std_logic; O: out std_logic ); end vhdl_dev;
architecture Behavioral of vhdl_dev is
begin O  User Constraints и даблкликнуть на I/O Pin Planning (Plan Ahead) – Post Synthesis(сразу под Pre Synthesis). В окне Plan Ahead опять нажимаем F4. После этого во вкладке Schematic должна появится схема:

Первое, что мы здесь видим это примитивы IBUF и OBUF. Это так называемые входные и выходные буфферы, которые заводят сиганл в ПЛИС и выводят её наружу соответственно.

Уровни входных и выходных напряжений могут быть весьма разные – например 1.2 В, 2.5 В, 3.

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

Далее на схеме показан примитив LUT с названием “Mxor_O_xo1” (Look-UP Table, дословно таблица поиска). Примитив LUT – это базовая единица хранения конфигурации в ПЛИС.

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

Для N входов всего может быть 2^N наборов/ Например для двух это будет 2^2 = 4:

  1. Первый набор: I0=0, I1=0
  2. Второй набор: I0=0, I1=1
  3. Третий набор: I0=1, I1=0
  4. Четвертый набор: I0=1, I1=1

То есть длинна конфигурационной строки будет равна 2^N двоичных бит. Теперь давайте рассмотрим конфигурационную строку LUT для нашего примера:

Номер набора  I0  I1   Значение выходаO (бит конфигурации)
 1  0
 2 1  1
 3 1  1
 4 1 1  0

Конфигурационная строка записывается в порядке от последнего набора к первому, то есть сначала пишем 4ый бит: “0”, потом пишем третий (получаем “01”), потом 2ой (“011”), и наконец 1ый (“0110”).

Читайте также:  Измерительные трансформаторы тока

Чтобы проще было запомнить, считайте что младший разряд строки-конфигурации имеет номер один, а самый старший – последний номер. Часто, для сокращения записи, строку конфигурации LUT записывают в виде 16тиричного кода вместо двоичного (в данном случае 0110(2) = 6(16)).

Чтобы убедится, что я вам не соврал, вы можете нажать на “Mxor_O_xo1”  и в окне Instance Properties, во вкладке Arttributes, посмотреть значение INIT:

Тут указано значение атрибута INIT длинной в 4 бита, со значением hex 6.

Симуляция проекта

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

Для симуляции во первых нужно описать воздействия на наше устройства (то есть прописать интерисующие нас, разные варианты входных данных). Сделать это можно в Test Bench.

В ISE делаем Project -> New Source -> VHDL Test Bench -> В File Name: test_vhdl_dev (например) -> Next -> Next -> Finish. Появится шаблон Test Bench, в который нужно вписать свои воздействия.

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

Предлагаю стереть шаблон и написать вместо него следующее:

LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY test_vhdl_dev IS
END test_vhdl_dev;
ARCHITECTURE behavior OF test_vhdl_dev IS — Component Declaration for the Unit Under Test (UUT)
COMPONENT vhdl_dev PORT( I1 : IN std_logic; I2 : IN std_logic; O : OUT std_logic );
END COMPONENT;
–Inputs
signal I1 : std_logic := ‘0’;
signal I2 : std_logic := ‘0’;
–Outputs
signal O : std_logic;
BEGIN
— Instantiate the Unit Under Test (UUT)
uut: vhdl_dev PORT MAP ( I1 => I1, I2 => I2, O => O
); — Stimulus process
stim_proc: process
begin I1

Источник: https://bovs.org/post/117/

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

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

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) определяется производителем.

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

Читайте также:  Механически прочный двухэлементный «волновой канал»

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

Источник: https://marsohod.org/index.php/ourblog/11-blog/265-

FPGA. Просто о сложном – Философия написания конфигураций для ПЛИС

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

Дело в том, что все статьи для новичков, которые мне попадались, были типа “помигать светодиодиком” либо на ALTERA, либо на Xilinx и не раскрывали философии параллельности вычислений.

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

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

Для начала давайте разберемся зачем нужно делать конфигурацию на VHDL или Verilog, ведь в интернете полно примеров с редакторами, в которых нужно просто соединять элементы “И”, “И-НЕ”, и т.д., чтобы получить требуемую схему. Например как на рисунке ниже:

Может показаться, что это удобно, ведь все наглядно и привычно, но только как будет выглядеть схема если Вам вдруг понадобится добавить в проект хотя бы одно fifo? А если в проекте нужно реализовать БПФ (быстрое преобразование Фурье)? Такая схема разрастется до эпических масштабов так что учите язык, не издевайтесь над собой.

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

 Раз мы выяснили, что единственный путь для создания крупных проектов это языки VHDL или Verilog, то приступим к рассмотрению приемов программирования, но перед этим учтем несколько нюансов:

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

2) Любые операции могут быть синхронными (производятся только по сигналу тактирования), либо асинхронными (не зависят от сигнала тактирования и производятся в любой момент времени).

Ниже на картинке представлен пример асинхронных вычислений, давайте его разберем: на вход clk подается тактовый сигнал. Тактовый сигнал нужен для синхронизации других сигналов по времени и его источником обычно выступает кварцевый генератор, конкретно в этом примере он нужен только для наглядности и нигде не используется.

На входную 8-битную шину data подаются 8-битные слова x”01″, x”02″, x”03″, x”04″, источником данных на этой шине может служить любой другой модуль в этой же ПЛИС или же, если привязать эту шину к реальным портам, любой другой источник из внешнего мира .

 Сигналы sum1 и sum2 по-сути являются 8-битными регистрами, куда мы помещаем значение суммы между приходящим по шине data словом и некоторым прибавляемым значением. Сигнал sum3 является результатом суммирования sum1 и sum2.

Вычисления sum1, sum2, и sum3 выполняются асинхронно, это значит, что вычисления происходят мгновенно с изменением сигнала data и никак не синхронизируются по тактовому сигналу.

(Примечание: b”1000_000″ это бинарная запись шестнадцатиричного числа x”80″, а b”0000_0001 это x”01″)

Теперь давайте посмотрим на осциллограмму ниже. Вы можете убедиться, что операции вычисления sum1 и sum2 и sum3 выполнялись параллельно и асинхронно, т.е.

над одним и тем же значением сигнала data одновременно проводились две разные операции sum1 и sum2, и в этот же момент времени производилась операция суммирования между sum1 и sum2.

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

Теперь слегка изменим программу: добавим синхронизацию вычисления sum3 по фронту тактового сигнала clk и получим пример синхронных вычислений.

Если раньше значение sum3 вычислялось одновременно с sum1 и sum2, то теперь, как видно из осциллограммы ниже, значение sum3 вычисляется только с наступлением фронта тактового сигнала, т.е. на следующий такт.

Такие задержки в такт нужно учитывать при написании синхронных процессов.

Кроме того, на осциллограмме видно, что в момент, когда за один такт на шину data пришло два слова, вычисления произошли лишь над вторым словом, так-как оно было последним установившимся значением перед фронтом тактового сигнала.

На осциллограмме ниже проиллюстрировано, как происходят те же вычисления если синхронизировать источник, посылающий на шину data данные, с тактовым сигналом (с каждым тактом приходит только одно слово): мы провели операции суммирования со всеми входными данными ничего не потеряв.  

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

Например стоит задача принять пакет из 100 8-битных слов и в 99 слово записать какое-то свое значение, чтобы отправить его дальше.

Зная, что за один такт нам может придти только одно слово, не трудно завести счетчик и посчитать до 99.  

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

Автор старался излагать максимально доступно, спасибо что дочитали до конца. 

Источник: http://cxem.net/mc/mc423.php

FPGA. Просто о сложном – Создание проекта в Quartus II. Сравнение VHDL и Verilog

Самыми популярными языками описания цифровой аппаратуры являются VHDL и Verilog. В этой статье я постараюсь сравнить синтаксис двух этих языков на примере “бегущего огонька”, архивы проектов будут прикреплены в конце статьи. Для полного понимания описываемых процессов настоятельно рекомендую ознакомиться с предыдущими статьями цикла: 

  1. Внутреннее устройство ПЛИС (FPGA)
  2. Философия написания конфигураций для ПЛИС

Рассмотрим структуру создаваемого модуля “бегущего огонька”, который назовем leds_case. В модуле будет один вход для тактового сигнала clk, и четыре выхода (четырехбитная шина) для светодиодов.

Читайте также:  Что такое ток?

В модуле будет всего два процесса, которые будут выполнятся параллельно друг-другу, синхронно с тактовым сигналом clk.

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

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

Чтобы не быть голословным, реализуем данный модуль на отладочной плате от ALTERA с CPLD семейства MAX II. 

Плата прошивается по JTAG программатором USB BLASTER.

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

Итак, теперь создадим новый проект в среде Quartus II, которую можно скачать на официальном сайте Altera. Запускаем среду, для создания нового проекта кликаем на New Project Wizard (на картинке обведено красным).

В этом окне среда нам сообщает какие операции нужно совершить для создания проекта. Пропускаем.

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

Далее выбираем Empty project, тем самым подтверждаем создание абсолютно чистого проекта.

В следующем диалоговом окне нам предлагают подключить файлы проекта, но так-как нам нечего подключать, то пропустим этот шаг.

В этом диалоговом окне выбираем микросхему, которую мы будем программировать. Выбираем параметры соответствующие микросхеме на нашей плате: семейство MAX II корпус TQFP и количество ножек 100.

Немного остановимся на параметре Core Speed grade – это параметр характеризующий время задержки прохождения сигнала между внутренними соединениями в ПЛИС.

Проект созданный для ПЛИС со speed grade 5 без проблем заработает на ПЛИС со speed grade 10, но проект созданный для ПЛИС со speed grade 10 не будет адекватно работать, если вообще разведется, на ПЛИС со speed grade 5. Как определить speed grade? Очень просто: в названии микросхемы EPM240T100C5 последняя цифра 5 и есть значение speed grade.

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

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

Для начала напишем модуль на VHDL. Cоздадим VHDL файл. Выберем File -> New

В появившемся окне выбираем VHDL file.

Теперь напишем код и разберем его.

— Подключение стандартных библиотек на математику и типы данных.
library ieee; use ieee.std_logic_1164.all;
use ieee.std_logic_ARITH.all;
use ieee.numeric_std.all;
use ieee.std_logic_unsigned.all;
—————————————————————
— В entity указываются порты ввода и вывода. В начале статьи — мы выяснили что будет один вход для тактовой частоты и четыре — выхода для светодиодов. ————————————————————— entity led_case is port
( clk : in std_logic; — тип std_logic указывает на то, что сигнал будет представлен как “провод” leds : out std_logic_vector(3 downto 0) — тип std_logic_vector указывает на то, что перед нами шина данных
); — (3 downto 0) указывает, что в шине leds четыре сигнала end led_case; architecture led of led_case is — в architecture под названием led описываются все процессы происходящие в модуле, который — связан с другими файлами в проекте через entity led_case signal count : std_logic_vector(21 downto 0) := (others => ‘0’); — объявляем счетный регистр count с начальным значением 0 signal slct : std_logic_vector(1 downto 0) := (others => ‘0’); –объявляем регистр выбора светодиода с начальным значением 0 begin — начало описания процессов process(clk) — первый процесс синхронизированный по clk begin if (rising_edge(clk)) then — процесс выполняется по нарастающему фронту тактирования count

Источник: http://cxem.gq/mc/mc424.php

Программирование FPGA

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

Первое впечатление

О существовании FPGA я узнал тогда, когда получил ПО вместе с установочной платой. На мониторе компьютера появилось достаточное количество незнакомых ярлыков незнакомых программ. Сразу необходимо сообщить, что речь идет о продукции Xilinx отладочной плате с чипом Spartan 3A DSP 1800A.

Перед тем, как начинать что – то делать – подумайте

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

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

Можно попробовать на шину обмена с периферией присоединить самостоятельно сделанные модули при условии, что они будут согласованы.

Несколько слов о написании программ

Надо прояснить по – поводу создания программ для MicroBlaze. Вместе с программным обеспечением Xilinx существует Software Development Kit (SDK), который позволяет писать программы на «старинном» С/С++.Вот такая метаморфоза! Данный язык программирования большая редкость для аппаратного обеспечения.

SDK у нас Eclipse-based, в связи с этим тут есть и content assist, и понятное изменение внутренней структуры программы, и еще много всяких плюсов и плюсиков. Компилятором здесь используется GCC, который понимает потребности процессора, возможно применение XilKernel, которая является POSIX-совместимой.

Из этого следует, что если пользователь не понаслышке знает про треды и семафоры в UNIX-based системах, то разобраться в XilKernel ему будет проще простого.

Послесловие

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

Некоторые задачи уверенно решаются с помощью микросхем, что является более дешевым и доступным способом.

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

Источник: https://1comp.spb.ru/programmirovanie-fpga.html

Источник

Спасибо за ваше внимание к сайту нашим новым публикациям.