Обновить
21.89

FPGA *

Программируемые логические интегральные схемы

Сначала показывать
Порог рейтинга
Уровень сложности

Custom floating point format on FPGA

Время на прочтение10 мин
Количество просмотров26K
Всем привет!

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


Читать дальше →

Как делать парсинг текста голым хардвером, без процессора и без софтвера

Время на прочтение13 мин
Количество просмотров39K
Кто-то парсирует текстовый файл программой на Питоне, другой пишет скрипт с регулярными выражениями на Перле, Си-программист стыдливо возится с буферами и указателями, иногда применяя Yacc и Lex.

А можно ли парсировать текст голым железом? Вообще без программы?

— А как это?, — спросил меня знакомый, — С помощью Ардуино?

— Внутри Ардуино стоит вполне фон-неймановский процессор и работает программа, — ответил я, — Нет, еще более голое железо.

— А-а-а-а, этот, микрокод?, — догадался мой товарищ и взглянул на меня победно.

— Нет, термин «микрокод» использовался для специфической организации процессоров в 1970-е годы, потом его использование сошло на нет, — ответил я и добавил, — Правда есть еще микрооперации в интеловских процессорах, в которые перекодируется x86, но это тоже другое. Нет, я имею в виду парсинг текста устройством, состоящим из логических элементов И-ИЛИ-НЕ и Д-триггерами, как на картинке ниже.

— Невозможно! — воскликнул мой приятель, — в таком устройстве где-то сбоку должен сидеть процессор и хитро подмигивать!

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

— Нуу, машина Тьюринга, — протянул приятель, — это абстракция, типа Демона Максвелла.

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

mfp_srec_parser_fragment
Читать дальше →

Embedded World 2016: куда катится embedded-мир?

Время на прочтение7 мин
Количество просмотров17K
Всем привет!

Давненько мы ничего не писали. А тем временем...

В тридевятом царстве, в тридесятом государстве, в баварской вотчине, в средневековом городе Нюрнберге проходит выставка под названием Embedded World. Цель выставки — собрать в одном месте производителей, разработчиков, студентов и других заинтересованных граждан. Проходит она три дня — с 23 по 25 февраля.




Сайт выставки: http://www.embedded-world.de

Около 900 участников, примерно 25 тысяч посетителей. Двух дней еле-еле хватает, чтобы понять, что к чему. Поэтому выставка длится три дня :)

Судьба забрасывает меня на это мероприятие уже не в первый раз: мы с коллегами по НТЦ Метротек посещали выставку в 2013, 2014 и 2015 годах. Именно здесь мы впервые увидели Cyclone V SoC (System On Chip c ARM и FPGA на борту), который впоследствии лёг в основу новых девайсов производства НТЦ Метротек (это — Беркут-ЕТ, EthOnd, BlueSoM, ETL-N). Именно здесь мы нашли производителей корпусов EMKO и наладили с ними сотрудничество, теперь все стоечные приборы (свитч Metrotek X10-24, Беркут-МХ) выглядят единообразно. Здесь мы узнаём о новинках и трендах.

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

Как я ошибся при написании хеш-таблицы и какие выводы из этого сделал

Время на прочтение23 мин
Количество просмотров26K
Для ясности теоретического понимания нет лучшего пути, чем учиться на своих собственных ошибках, на собственном горьком опыте. (Фридрих Энгельс)

Всем привет!


Несколько недель назад мне в линкедине написал коллега и сообщил, что в моем проекте на гитхабе не совсем верно работает хеш-таблица.


Мне прислали тесты и фикс, и действительно создавалась ситуация, где система "зависала". При расследовании проблемы я понял, что допустил несколько ошибок при верификации. На Хабре тема верификации RTL-кода не слишком подробна расписана, поэтому я и решил написать статью.


Из статьи вы узнаете:


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

Добро пожаловать под кат!

Читать дальше →

Hello, World! На ПЛИС. Мигаем светодиодом

Время на прочтение1 мин
Количество просмотров15K
Мигаем светодиодом, с помощью ПЛИС Altera Cyclone iv, ПО Quartus и языка Verilog.
В этом видео я рассказываю о том, как сделать мигалку светодиодом: создам проект, напишу модуль, назначу выводы ПЛИС и прошью микросхему.

Пожалуйста, прибавьте громкость.



PS. Как выяснилось, Хабр не любит смотреть видео. Статья оставлена, как пример для других хаброписателей.

Часы на ПЛИС Lattice

Время на прочтение19 мин
Количество просмотров35K
Некоторое время назад, хаброжитель DmitrySpb79 написал статьи о создании электронных часов. В них он рассмотрел источники точного времени, а так-же элементную базу для создания электронных часов. Были упомянуты Arduino, STM, Raspberry PI, ESP8266, но совсем забыли про ПЛИС.

Давайте заполним этот небольшой пробел. Узнаем, на сколько просто сделать часы на ПЛИС и какие аппаратные ресурсы для этого потребуются. К тому же, мне подарили микросхему ПЛИС очень малого объема — 64 макроячейки. Это ПЛИС LC4064v фирмы Lattice с которыми я до этого никогда не работал. Я думаю, будет интересно!

Цели:

  • попытаться уместить логику работы часов в ПЛИС малого размера (64 макроячейки);
  • освоить статическую либо динамическую светодиодную индикацию на ПЛИС для вывода времени;
  • собрать кучу граблей, связанных с самостоятельной разработкой схем и получить новый опыт;
  • освоить новую среду разработки и программирования для ПЛИС фирмы Lattice, оценить сложность перехода

Меня ожидает несколько очень приятных вечеров, посвященных разработке на ПЛИС!

Добро пожаловать под кат!

Добавляем инструкции в микропроцессор MIPS, которые работают в конвейере как его собственные

Время на прочтение8 мин
Количество просмотров12K
Можно ли добавить в микропроцессор инструкции (команды)? Если вы используете микросхемы ПЛИС / FPGA с реконфигурируемой логикой и микропроцессорное ядро, которые синтезирутся из описания на языках Verilog и VHDL, то можете. Причем это будет «честное», настоящее расширение системы команд, а не трюк типа программной эмуляции инструкции в обработчике исключения от зарезервированной команды, и не «микрокод», популярный в исторических процессорах 1970-х годов.

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

Главная проблема с модификацией исходников дизайна процессора на Verilog или VHDL — трудоемкость. Нужно понять, как работает логика различных блоков и избежать нежелательных побочных эффектов. К счастью, существует способ расширения процессора, который превращает семестровый студенческий проект в нечто, что студент может спроектировать за одну лабораторную работу. Этот способ — интерфейс CorExtend / UDI (User Defined Instructions) в микропроцессорном ядре MIPS microAptiv UP, которое используется в пакете для образования MIPSfpga.

В рамках университетской программы MIPSfpga компании Imagination Technologies можно скачать настоящий индустриальный код на Verilog процессора MIPS microAptiv UP.
https://community.imgtec.com/university/resources/

Одним из распространенных применений UDI является манипуляции битами в алгоритмах шифрования. Другой пример — создание специальных инструкций для ускорения алгоритмов ЦОС Accelerating DSP Filter Loops with MIPS® CorExtend® Instructions.

Однако в наборе документации к MIPSfpga интерфейс между ядром и CorExtend описан недостаточно подробно. Подробная документация предоставляется только лицензиатам ядер. В этой статье представлено мое описание данного интерфейса на основе изучения исходного кода. Его можно также скачать в формате pdf MIPS microAptiv UP Processor CorExtend UDI interface protocol guide.

CorExtend занимает следующее место в RTL иерархии ядра m14k microAptiv.

CorExtend RTL Hierarchy
Читать дальше →

Как начать работать с MIPSfpga

Время на прочтение3 мин
Количество просмотров26K
MIPSfpga — это пакет, который содержит процессорное ядро в исходниках на Verilog, которое можно менять, добавлять новые инструкции, строить многопроцессорные системы, менять одновременно софтвер и хардвер, симулировать на симуляторе верилога, синтезировать для ПЛИС/FPGA и т.д. Его можно в целях эксперимента например запускать с частотой 1 такт в секунду и выводить наружу информацию о состоянии кэша, конвейера, и любых структур внутри процессора. При этом ядро MIPS microAptiv UP внутри MIPSfpga — это то же ядро которое например используется в платформе IoT Samsung Artik 1 и Microchip PIC32MZ, т.е. студенты получают возможность работать с тем же кодом, с которым работают инженеры в Samsung и Microchip.

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



Читать дальше →

Генераторы хаоса на FPGA

Время на прочтение8 мин
Количество просмотров36K
Всем привет!

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


Окунуться в мир хаоса...

Разработка цифровой аппаратуры на C++/SystemC глазами SystemVerilog программиста

Время на прочтение19 мин
Количество просмотров36K


SystemC это библиотека для C++ позволяющая моделировать всевозможные аппаратные системы на различном уровне абстракции. Поддерживается как традиционное дискретно-событийное моделирование, привычное программистам на Verilog и VHDL, так и аналоговое моделирование в духе SPICE/Verilog AMS. В комплект также входит библиотека и методология для виртуального прототипирования, библиотеки для написания тестовых окружений и верификации с использованием рандомизированных тестов.

В этой я расскажу о синтезируемом подмножестве SystemC, сравнивая его с синтезируемым SystemVerilog. Сам я пользуюсь SystemC уже где-то 3 года, а до этого несколько лет писал на Verilog/SystemVerilog. Попытаюсь охватить предмет с разных сторон: начиная с философских рассуждений о причинах возникновения SystemC, краткого обзора экосистемы и инструментария и заканчивая практическими примерами синтаксиса и семантики.

Подразумевается, что читатели знакомы с Verilog и C++.
Читать дальше →

Цифровая фильтрация на ПЛИС – Часть 2

Время на прочтение23 мин
Количество просмотров105K


Всем привет!

Это вторая публикация на тему «Цифровая фильтрация на ПЛИС». Вторая часть будет посвящена практической реализации КИХ фильтров на FPGA. В процессе подготовки материала я понял, что она раздуется до небывалых размеров, но делить ее на несколько частей не хочется. Поэтому все тонкости теории и синтеза FIR фильтров будут в одной статье, разбитой на взаимосвязанные разделы. Начну обзор с теоретической части, в частности — расскажу об особенностях и методах расчета коэффициентов фильтров. Подробно рассмотрю создание КИХ фильтров в различных средах — MATLAB, CoreGENERATOR, Vivado HLS. Всех заинтересовавшихся прошу под кат.
Читать дальше →

Altera + OpenCL: вскрываем ядро

Время на прочтение23 мин
Количество просмотров17K


Всем привет!

В прошлой статье я запустил простой OpenCL пример на FPGA фирмы Altera:
// ACL kernel for adding two input vectors
__kernel void vector_add( __global const uint *restrict x,  
                          __global const uint *restrict y,  
                          __global       uint *restrict z )
{
    // get index of the work item
    int index = get_global_id(0);
 
    // add the vector elements
    z[index] = x[index] + y[index];
}

Я намеренно не углублялся в детали и показал верхушку айсберга: процесс разработки, сборку проекта, запуск на системе.

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

В этой статье мы попробуем вскрыть ядро и найти ответы на следующие вопросы:
  • Какая у него архитектура?
  • Как происходит его настройка? Как попадают данные на обработку?
  • На какой частоте он работает? Чем это определяется?
  • Можно ли просимулировать только ядро в RTL-симуляторах?
  • Какие блоки занимают больше всего ресурсов? Можно ли как-то это соптимизировать?

Давайте взглянём на его внутренности! Добро пожаловать под кат!
Читать дальше →

Цифровая фильтрация на ПЛИС – Часть 1

Время на прочтение9 мин
Количество просмотров77K
Всем привет!

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


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

Ближайшие события

Сдвиг фазы сигнала на VHDL

Время на прочтение4 мин
Количество просмотров9.5K
Данная статья продолжение серии топиков Элемент задержки на VHDL, Элемент задержки на VHDL. Другой взгляд о элементах задержки на VHDL реализованных в ПЛИС.

Акцент будет сделан на конкретный прикладной пример, который любой желающий может запустить в симуляторе или реальном железе. Пример создан для удобной симуляции в среде Xilinx ISE с использованием Modelsim SE и с минимальными изменениями реализован в полноценное IP Core.
Читать дальше →

«Глупые» часы на FPGA

Время на прочтение10 мин
Количество просмотров24K
Привет всем!

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


Проект называется «глупые часы», поскольку он ничего не умеет, кроме как считать время и дату и выводить их на дисплей. В первую очередь проект рассчитан на студентов старших курсов и новичков. В нём нет никаких необычных блоков, не используются вендорные IP-ядра, и уж тем более нет сложных интерфейсов обмена (типа PCIe, Ethernet, USB и т.д.).
В этот раз проект на программируемых логических интегральных схемах (ПЛИС) будет примитивен и предельно прост, а я постараюсь рассказать обо всех трудностях, с которыми пришлось столкнуться при выполнении поставленной задачи.
Читать дальше →

MIPSfpga: вне канона

Время на прочтение10 мин
Количество просмотров16K

В течении последних трёх недель в МИЭТ, МГУ, МИФИ, МФТИ и других российских ВУЗах прошли семинары по процессору на ПЛИС MIPSfpga. В рамках семинаров прошли лабораторные работы на которых демонстрировалось как применять MIPSfpga на практике.
В публикации я расскажу о своих экспериментах с MIPSfpga, которые выходят за рамки лабораторных работ, рассмотрю возможности интеграции процессорного ядра MIPSfpga с IP-блоками opencores.org. Также поведаю о портировании MIPSfpga на некоторые платы на базе ПЛИС Altera (приведены значения Fmax и показатели использования ресурсов ПЛИС).
Читать дальше →

Altera + OpenCL: программируем под FPGA без знания VHDL/Verilog

Время на прочтение14 мин
Количество просмотров44K
image

Всем привет!

Altera SDK for OpenCL — это набор библиотек и приложений, который позволяет компилировать код, написанный на OpenCL, в прошивку для ПЛИС фирмы Altera. Это даёт возможность программисту использовать FPGA как ускоритель высокопроизводительных вычислений без знания HDL-языков, а писать на том, что он привык, когда это делает под GPU.

Я поигрался с этим инструментом на простом примере и хочу об этом вам рассказать.

План:

Добро пожаловать под кат! Осторожно, будут картинки!
Читать дальше →

Установка Quartus II Web Edition для Linux

Время на прочтение6 мин
Количество просмотров32K


В публикации рассказывается о том, как произвести установку САПР Altera Quartus II Web Edition (далее просто Quartus) в пакетном режиме на компьютер, работающий под управлением ОС Debian Linux amd64. Автор использует Quartus для работы с платами семейства Марсоход, так что в публикации также приведён небольшой обзор этого семейства, и то, какие версии Quartus для каких плат Марсоход годятся.
Материал будет полезен всем, кто начинает работать с Quartus под ОС GNU/Linux.

Читать дальше →

Статический временной анализ demystified

Время на прочтение7 мин
Количество просмотров15K
Многие начинающие разработчики ПЛИС (и ASIC) не до конца понимают влияние временных ограничений (constraints – далее констрейнты) на результаты синтеза; то, каким образом констрейнты используются в статическом временном анализе. Большая часть литературы по этой тематике сводится к рассмотрению всевозможных видов констрейнтов, но ничего не говорит о внутренней “кухне” и используемых алгоритмах. Рассмотрению констрейнтов посвящен и недавний пост по данной тематике на ГТ (geektimes.ru/post/254932/ [1]). Между тем, констрейнты — лишь вершина айсберга. Их использование должно опираться на фундаментальные знания о статическом временном анализе, которые дают, к примеру, в американских университетах, но ничего не рассказывают у нас. Поэтому, собственно, поговорим о фундаменте.
Читать дальше →

Ethernet + PCIe + FPGA = LOVE

Время на прочтение12 мин
Количество просмотров71K
image

Доступ по Ethernet невозможен без сетевых карточек (NIC). На небольших скоростях (до 1G) NIC встраивают в материнки, а на больших (10G/40G) NIC размещается на отдельной PCIe плате. Основным ядром такой платы является интегральный чип (ASIC), который занимается приемом/отправкой пакетов на самом низком уровне. Для большинства задач возможностей этого чипа хватит с лихвой.

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

Какие задачи на них решают, что размещают, а так же самых интересных представителей вы увидите под катом!

Осторожно, будут картинки!
Читать дальше →