Введение в ПЛИС: Содержание курса

Введение в ПЛИС

Базовый курс

yecbslbdpprb6utqeutkee6nevc.jpeg

Андрей Жадан______________________Ростов-на-Дону______________________2024

Предисловие к циклу статей

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

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

Оглавление

  1. Что такое ПЛИС.

    • Определение.

    • История развития ПЛИС.

    • Типы ПЛИС.

    • Сравнение ПЛИС с другими интегральными схемами.

    • Работа с ПЛИС.

    • Производители ПЛИС.

    • Задание 1.

  2. Языки описания аппаратуры.

    • HDL.

    • История развития.

    • Модульный принцип организации проектов.

    • Комментарии.

    • Примеры описания модуля.

    • Типы данных.

    • Состояния линий и форматы чисел.

    • parameter и localparam.

    • Операции в SystemVerilog.

    • always-блок.

    • Задание 2.

  3. Процесс сборки и системы симуляции.

    • Quartus и Vivado.

    • Процесс сборки проекта.

    • Препроцессор.

    • Анализ исходного кода.

    • Синтез проекта.

    • Implementation.

    • Знакомство с процессом симуляции.

    • Виды Симуляции.

    • Testbench.

    • Системные функции.

    • Задание 3.

  4. Подготовка проекта к портированию на плату.

    • Тип ПЛИС.

    • Серии и поколения.

    • Внутреннее устройство.

    • Примитивы.

    • Атрибуты.

    • Сопоставление пинов.

    • Дифференциальные сигналы.

    • Задание 4.

  5. Конфигурация ПЛИС. Временные параметры.

    • Файл конфигурации ПЛИС.

    • JTAG.

    • Подключение к ПЛИС.

    • Логические анализаторы.

    • Анализ временных параметров.

    • Констрейнты.

    • Задание 5.

  6. Система распределения тактовых сигналов. IP-блоки.

    • Дерево тактирования. Глобальные и локальные клоки.

    • Сигналы сброса.

    • Клоковые буферы.

    • IP-блоки.

    • PLL и MMCM.

    • Задание 6.

  7. Внутрисистемные интерфейсы (Avalon/AXI). Потоковые интерфейсы (Streaming).

    • AXI Stream.

    • AvalonST.

    • Пакетная передача данных.

    • Модули FIFO. Одноклоковые и двухклоковые.

    • Переход между тактовыми доменами. Код Грея.

    • Метастабильность.

    • Задание 7.

  8. Внутрисистемные интерфейсы (Avalon/AXI). Адресные интерфейсы (Memory mapped).

    • Взаимодействие Master-Slave.

    • Контрольно-статусный регистр (CSR).

    • Типы управляющих воздействий.

    • Avalon-MM.

    • AXI-Lite.

    • AXI3 и AXI4.

    • Режим Burst.

    • Задание 8.

  9. Периферийные последовательные интерфейсы. UART, SPI, I2C, CAN.

  10. Начала цифровой обработки на ПЛИС.

    • Съем данных с АЦП.

    • Теорема Котельникова. Зоны Найквиста. Частота дискретизации.

    • Квадратурное понижающее преобразование.

    • Числа с плавающей точкой. IEEE754.

    • Цифровая фильтрация. КИХ-фильтр.

    • Блоки generate.

    • Функции и таски.

    • Задание 10.

  11. Знакомство с системами интеграции. Platform Designer / Qsys — IP Integrator.

    • Platform Designer / Qsys.

    • IP Integrator.

    • Обзор встроенных IP-ядер.

    • Источник тактового сигнала.

    • Ввод/вывод данных. GPIO.

    • Интерконнект.

    • Добавление собственных IP-ядер.

    • Задание 11.

  12. Знакомство с софт-процессорными системами. Microblaze и Nios.

  13. Продолжение работы с процессорными системами. Знакомство с SDK и процессом написания встроенного ПО.

    • Nios II Software build tools for eclipse.

    • Xilinx SDK.

    • Vitis.

    • BSP.

    • .elf и конфигурирование системы.

    • Базовые принципы написания встроенного ПО.

    • Задание 13.

  14. Элементы памяти DDR.

  15. Прямой доступ к памяти. Знакомство с ядрами DMA.

    • MSGDMA.

    • Дескрипторы.

    • Диспетчер.

    • Префетчер.

    • Задание 15.

  16. Высокоскоростные трансиверы. SFP-модули. Интерфейсы SerialLite и Aurora.

    • Высокоскоростные приемо-передатчики. Принципы ввода-вывода и тактирования.

    • Аппаратное блоки.

    • Aurora.

    • SerialLiteII.

    • SerialLiteIII.

    • SFP-модули.

    • Задание 16.

  17. PCI-e. Драйверы устройств.

  18. Сетевое взаимодействие. Ethernet. Уровни модели OSI.

  19. Цифровая обработка сигналов. Цифровые фильтры, БПФ.

  20. Системы на кристалле.

  21. Верификация. UVM.

Методические рекомендации.

При подготовке данного пособия я опирался на средний уровень студентов старших курсов бакалавриата и магистратуры физического факультета ЮФУ (начиная с 3 — 4 го курса). Предполагается, что студенты уже знакомы с основами дискретной математики (булева алгебра) и схемотехники. Однако, данные условия не являются категоричными, неизвестные понятия и конструкции могут быть разобраны самостоятельно параллельно с прохождением курса. Поэтому пособие может быть полезно для всех, кто хочет разобраться в теме разработки проектов на ПЛИС.

Курс носит ознакомительный характер, призван дать общее понимание специфики работы с ПЛИС. Он составлен в основном на базе личного опыта автора с использованием различных материалов, но редким прямым цитированием, а также с использованием языковых моделей, в частности ChatGPT. Пособие не является истиной в последней инстанции и может содержать ошибки и неточности. При нахождении таких прошу уведомить меня по адресу z.a.013@rambler.ru. По задумке курс должен состоять из двух частей: «Введение в ПЛИС» и «Разработка на ПЛИС», где первая часть будет знакомить с актуальной тематикой профессии, а вторая будет представлять из себя сборник статей и материалов, которые подробным образом описывают конкретную тему.

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

В качестве материальной базы для выполнения проектных заданий буду рассматривать плату AX7A035B от Alinx и набор плат расширения: AN9767(2-канальный ЦАП (14 бит, 125MSPS)), AN9238(2-канальный АЦП (12 бит, 65MSPS)), AN706(8-канальный АЦП (16 бит, 200kSPS)), AN5642(бинокулярная камера), AN430(дисплей). Будем считать, что на группу из 12 человек мы имеем 3 базовых платы AX7A035B и по одной плате расширения. Для дальнейшего изучения систем на кристалле будем использовать плату управления Antminer S9 на базе ZYNQ7010. Также нам потребуется программатор, источник питания и, само собой, ЭВМ с релевантным софтом. Подробнее материальное обеспечение рассмотрим в статье: «Введение в ПЛИС: Материальное обеспечение курса / Хабр».

Введение.

Современный мир невообразим без вычислительной техники. Каждый день мы используем компьютеры и мобильные устройства, чтобы общаться с друзьями, работать, учиться и развлекаться. Но что находится внутри этих устройств? Как они работают? Наверное, многие задавали себе эти вопросы в детстве. У некоторых с возрастом они отошли на второй план. Другие же решили связать свою жизнь с технологиями и сами определяют, каков будет ответ.

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

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

Рассматривая сферу разработки «железа», нельзя игнорировать аспект материальной выгоды, который для многих является значительным стимулом. Работа в высокотехнологичной индустрии часто ассоциируется с конкурентными и привлекательными уровнями дохода, чаще всего при этом вспоминают такие направления, как веб-разработка, мобильные приложения или искусственный интеллект. Если говорить более конкретно, специалисты в области hardware development, включая разработчиков на ПЛИС, выделяются своей редкостью и уникальностью навыков, что делает их особенно ценными на рынке труда. Как правило, карьера в области разработки на ПЛИС предлагает конкурентный уровень дохода, учитывая сложность и специфику работы. Даже будучи наемным работником можно зарабатывать значительно больше среднего уровня зарплаты по региону. Это не только отражает повышенный спрос на такие навыки, но и подчеркивает важность постоянного обучения и развития в этой быстро меняющейся сфере. Более того, растущий интерес к инновационным технологиям и развитие новых направлений, таких как искусственный интеллект и машинное обучение, продолжают открывать новые горизонты для специалистов в нашей сфере. Важно отметить, что спрос на квалифицированных специалистов в области разработки на ПЛИС остается высоким во многих странах, что делает эту профессию особенно привлекательной для тех, кто стремится к стабильности и профессиональному росту. Кроме того, навыки в этой области открывают широкие возможности для работы в международных компаниях и проектах, что дополнительно увеличивает их ценность на рынке.

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

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

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

Что же требуется, чтобы стать успешным разработчиком?

  • Знание языков описания аппаратуры: Необходимо иметь опыт работы с языками описания аппаратуры, такими как Verilog, VHDL и SystemVerilog, которые используются для создания цифровых схем.

  • Понимание архитектуры FPGA: Разработчики ПЛИС должны понимать, как устроены FPGA и как работают внутренние блоки, такие как блоки памяти, умножители, сумматоры, и т.д.

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

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

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

  • Знание принципов верификации: Важно знать принципы верификации, такие как тестирование функциональности, проверка временных характеристик и т.д.

  • Навыки командной работы: Работа в области hardware development часто включает в себя работу в команде, поэтому важно иметь навыки командной работы и уметь эффективно коммуницировать со своими коллегами. Не лишними будут умения работать с системами контроля версий и управления проектами.

  • Знание английского языка. По крайней мере, на уровне свободного чтения технической документации. Это может сильно облегчить вашу работу.

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

© Habrahabr.ru