Главная » Микроконтроллеры
Призовой фонд
на октябрь 2020 г.
1. 1500 руб
Сайт Паяльник
2. Тестер компонентов MG328
Сайт Паяльник
3. 150 руб.
От пользователей

Похожие статьи:



Программатор ST-Link V2

Внутреннее устройство ПЛИС (FPGA)

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

ПЛИС - Программируемая Логическая Интегральная Схема. ВАЖНО! Существует два типа БИС (Большая Интегральная Схема), которые у нас в СНГ попадают под определение ПЛИС, но тем не менее принцип работы этих БИС отличается, что создает некоторый диссонанс с реальным положением вещей. В то же время на западе у каждой из этих БИС есть вполне свое собственное название, четко ставящее все точки над i, а именно: CPLD-микросхема  - это ПЛИС, прошивка (конфигурация) которой ВСЕГДА хранится в самой микросхеме и при выключении питания НИКОГДА не стирается. Кажется вполне себе логичным, что прошивка само-собой должна хранится в микросхеме, и заострять внимание на этом не следует, но перейдем к следующей БИС. FPGA-микросхема - это тоже ПЛИС, но ее конфигурация хранится на внешнем энергонезависимом источнике памяти (например всякого рода flash). Как это работает? Очень просто, при каждом включении, FPGA прошивает саму себя конфигурацией, которую берет из памяти, а при выключении стирается.

Хочется отметить, что процесс написания конфигурации на CPLD и на FPGA ничем не отличается: все пишется на языке описания аппаратуры VHDL или Verilog. Потом происходит синтез и имплементация (компилятор сначала пытается понять, что вы написали, а потом пытается разместить все структуры, регистры и соединения в ПЛИС, на основе написанного), и на последнем этапе генерится .bit - файл, который зашивается программатором по JTAG-интерфейсу в устройство.

Если с CPLD еще как-то привычнее работать ("Ну как в микроконтроллере!" - скажите Вы), то FPGA, со всеми ее непонятными внешними источниками памяти, кажутся каким-то несуразным зверем, поэтому все ниже написанное будет посвящено FPGA (но приемы программирования справедливы и для CPLD), чтобы внести некую ясность в этот вопрос. Все примеры кода будут выполнятся на языке VHDL.

Рассмотрим наименьшую составляющую FPGA, которая называется PLB - Программируемый Логический Блок. 

Рисунок 1

PLB состоит из LUT-таблицы соответствия, мультиплексора и D-триггера. Рассмотрим для начала LUT. По-сути, LUT - это статическое ОЗУ (ОЗУ - Оперативное Запоминающее Устройство. Является энергозависимой памятью, т.е. при отключении питания данные стираются. (Включил. Записал. Выключил. Включил снова, а все записанные данные стерты). Обладает высокими показателями скорости.), в котором хранятся выходные значения X, образованные значениями A,B,C,D.  

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

   

Сигналы A, В, С, D подаются на вход LUT, далее исходя из таблицы истинности, которая хранится в LUT, моментально формируется сигнал X. Все очень просто. В коде это выглядит так:

X <= (A nand B) nand (C nand D); 

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

Но что, если нам нужно синхронизировать сигнал по тактовой частоте? Тогда, в процессе написания конфигурации, нам нужно указать, что выходной сигнал будет устанавливаться либо по фронту (rising_edge(clk)) или по срезу (falling_edge(clk)) тактового сигнала CLK, и компилятор будет брать выходной сигнал не c выхода X, а с выхода Y. На языке VHDL это выглядит так:

process(clk)

begin

  if (rising_edge(clk)) then

   Y <= (A nand B) nand (C nand D); 

  end if;

end process;

На аппаратном уровне это происходит так: сигнал с LUT идет на Т-триггер, который устанавливает значение выхода Y по CLK.  

Что делать если нужно задержать входной сигнал на один такт? Тогда в конфигурации мы присваиваем сигнал, который нужно задержать, новому сигналу в процессе синхронизированном по CLK:

process(clk)

begin

  if (rising_edge(clk)) then

   Y <= Е; 

  end if;

end process;

Аппаратно это происходит так:

Напомню, все выше рассмотренное происходит в рамках ОДНОЙ НАИМЕНЬШЕЙ составляющей FPGA, а именно PLB. Но внутри FPGA десятки тысяч таких PLB (а может и сотни, технологии они такие: не стоят на месте), которые могут соединяться между собой. Для простоты организации связей между ними, в FPGA применяется некий модульный принцип: малое составляет большое: две PLB образуют один SLICE. 

Два SLICE образуют один конфигурационный логический блок (CLB), внутри которого SLICE могут образовывать связь. Таким образом, за счет оптимизации адресации внутри FPGA, компилятору проще производить имплементацию нашей конфигурации по кристаллу. 

В завершении хотелось бы рассказать почему стоит присмотреться к ПЛИС, и в частности к FPGA-микросхемам. Во-первых это неограниченное поле для творчества: нужен экзотический 13-битный таймер/счетчик? - получи. Требуется 15 UART? - легко. Передать данные со скоростью 6 Гбит/с? - не вопрос. И если преимущества ПЛИС очевидны, то перейдем к тому какая из них предпочтительнее: CPLD или FPGA? Хочется отметить, что собственно тут все зависит от применения. Если проект не большой, но требует специфической периферии, то это CPLD. А если нужна гибкость и очень большие скорости, то это FPGA. Ничто не мешает вам сделать так, чтобы в какой-то момент времени FPGA работала сначала по-одной прошивке, потом по-второй, третьей, пятой, десятой (свойство реконфигурируемости), ведь в отличие от других микросхем, ресурс запись/стирание у FPGA стремиться к бесконечности (когда последний раз вы меняли оперативную память в своем ПК по причине того, что выработали ее ресурс на запись/стирание? Вот и я об этом. Собственно на этом все, спасибо за внимание

Теги:

Опубликована: 0 5
Я собрал 0 Участие в конкурсе 3
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 4.5 Проголосовало: 3 чел.

Комментарии (19) | Я собрал (0) | Подписаться

0
Публикатор #
На форуме автоматически создана тема для обсуждения статьи.
Ответить
0
Vascom #
Хорошая статья. Побольше бы таких, популяризирующих FPGA, материалов.
Только жаль, что в качестве языка выбран VHDL. Поскольку Verilog более прост для освоения, понимания, более читаем, а по функциональности ни в чём не уступает VHDL.
Ответить
0

[Автор]
sboldenko #
Если честно, то сложность VHDL слишком преувеличивают. Хватило недели, чтобы перейти от стадии "эмммм, что это?", до "сделаю-ка я здесь машину состояния..." Главное заставить себя
Ответить
0
Vascom #
Это пока проект не перевалил за 100 строк и несколько модулей. Но, конечно, хозяин - барин.
Ответить
0

[Автор]
sboldenko #
Доводилось писать модули по 500-600 строк, коих в проекте было 7-8, все на VHDL. Никаких трудностей. Видимо стоит написать статью по VHDL
Ответить
0
Vascom #
Не будем устраивать холивар.
Хотя интересно было бы посмотреть на два одинаковых модуля на разных языках и сравнить преимущества/недостатки обоих языков.
Ответить
0

[Автор]
sboldenko #
Будет время - обязательно сделаю. Если честно, даже не подозревал что к VHDL так скептически относятся.
Ответить
0
Начинающий #
Тут я по вашей ссылке, увидел минимальную системную плату с установленной на нее ALTERA FPGA CycloneII EP2C5T144. Так вот, о чем это я, для использования этой платы мне придется подключить к ней внешнюю флеш микросхему памяти? Или, прошивку необходимо будет загружать байтбластером при каждом включении платы, и она будет работать до отключения питания без внешней памяти?
Ответить
0

[Автор]
sboldenko #
На самой отладочной плате уже есть микросхема памяти, где будет храниться прошивка, так что лично Вам припаивать память не придется. Что касается процесса прошивки, то когда Вы будете прошивать, среда предложит Вам выбрать куда загрузить прошивку: в FPGA микросхему или в FLASH микросхему. Если Вы загрузите в FPGA, то да, при отключении питания прошивка сотрется, если в FLASH, то при отключении питания прошивка останется во FLASH, и уже при повторном включении FPGA сама загрузит в себя прошивку из FLASH, без помощи ByteBlaster'a.
Ответить
0
Начинающий #
В этой малюсенькой 24Схх ? Кстати, а зачем она там?
А в целом все понятно, спасибо.
Ответить
0

[Автор]
sboldenko #
К сожалению, не могу сказать точно что за микросхема памяти будет на этой отладочной плате.
Ответить
0
Владимир #
Спасибо за статью, надеюсь на продолжение. Какую из предлагаемых на алиэкспрессе отладочных плат вы посоветуете начинающим?
Ответить
0

[Автор]
sboldenko #
Продолжение будет. Это первая статья, вот вторая статья, сейчас пишу третью. Что касается отладочных плат то ситуация такая, что сейчас популярны два производителя Xilinx и Altera. Вкратце мои впечатления такие: для Altera можно за 15$ можно взять и самую дешевую отладочную плату на EPM240 и программатор к ней, но среда разработки Quartus очень требовательна к ресурсам компьютера, мой слабенький ноут (Asus k52de: AMD Athlon II P320 2100 МГц, 4 ГБ, 500 Гб (HDD), ATI Mobility Radeon HD 5470) при синтезе простых проектов через раз перезагружался, проблема решилась увеличением объема оперативной памяти. Что касается Xilinx, то тут примерно такие же цены как и у Altera, но за программатор придется отдать примерно 25-30$, и среда разработки у Xilinx, ISE 14.7, менее требовательна к ресурсам компьютера. Решайте сами что в приоритете и какими ресурсами Вы располагаете.
Ответить
0
Vascom #
Для ответа надо знать в какой суммой для покупки вы располагаете.
Но в общем случае для совсем начинающих могу порекомендовать сразу брать нормальную FPGA, а не CPLD и более-менее современного поколения, например
И для начала лучше от Альтеры, у них ПО более адекватное и наглядное.
Ответить
0
vgoffer #
Спасибо, воспользуюсь Вашей рекомендацией.
Ответить
0
Начинающий #
Где на этой плате флеш память? Или необходимо подключать внешнюю?
Ответить
0
Vascom #
Флешка для хранения прошивки на обратной стороне платы в корпусе so8. Конечно же подключать внешнюю ни к одной из подобных плат не требуется.
В описании указана модель флешки EPCS4N.
Отредактирован 01.03.2017 14:17
Ответить
0
Roman #
Спасибо за статью.
У вас там ошибка в таблице истинности, ну или в схеме. На выходе , вместо "и" надо "или "
Ответить
0

[Автор]
sboldenko #
Подскажите, где именно Вы увидели ошибку? Вроде все соответствует таблице истинности для 2И-НЕ.
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическая мощность?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Программатор Pickit3
Программатор Pickit3
Лазерный модуль 650нм 5мВт Бокс для хранения компонентов
вверх