Введение в ПЛИС
Базовый курс
Андрей Жадан______________________Ростов-на-Дону______________________2024
Предисловие к циклу статей
Цикл статей посвящен изучению базовых принципов работы с ПЛИС. Данная статья включает в себя оглавление с ссылками на последующие публикации и введение курса. Последующие статьи будут раскрывать отдельные темы курса, возможно, также появятся вспомогательные статьи по разбору проектных заданий и сборник материалов профессионального уровня.
Разработка курса является частной инициативой, курс может содержать неточности, ошибки, однобокое освещение явлений и понятий, а его публикация может затянуться на долгое время, если вообще когда-то будет закончена. Обо всем, что можно улучшить или исправить, вы можете сообщить в комментариях, по возможности постараюсь это учесть.
Оглавление
Что такое ПЛИС.
Определение.
История развития ПЛИС.
Типы ПЛИС.
Сравнение ПЛИС с другими интегральными схемами.
Работа с ПЛИС.
Производители ПЛИС.
Задание 1.
Языки описания аппаратуры.
HDL.
История развития.
Модульный принцип организации проектов.
Комментарии.
Примеры описания модуля.
Типы данных.
Состояния линий и форматы чисел.
parameter и localparam.
Операции в SystemVerilog.
always-блок.
Задание 2.
Процесс сборки и системы симуляции.
Quartus и Vivado.
Процесс сборки проекта.
Препроцессор.
Анализ исходного кода.
Синтез проекта.
Implementation.
Знакомство с процессом симуляции.
Виды Симуляции.
Testbench.
Системные функции.
Задание 3.
Подготовка проекта к портированию на плату.
Тип ПЛИС.
Серии и поколения.
Внутреннее устройство.
Примитивы.
Атрибуты.
Сопоставление пинов.
Дифференциальные сигналы.
Задание 4.
Конфигурация ПЛИС. Временные параметры.
Файл конфигурации ПЛИС.
JTAG.
Подключение к ПЛИС.
Логические анализаторы.
Анализ временных параметров.
Констрейнты.
Задание 5.
Система распределения тактовых сигналов. IP-блоки.
Дерево тактирования. Глобальные и локальные клоки.
Сигналы сброса.
Клоковые буферы.
IP-блоки.
PLL и MMCM.
Задание 6.
Внутрисистемные интерфейсы (Avalon/AXI). Потоковые интерфейсы (Streaming).
AXI Stream.
AvalonST.
Пакетная передача данных.
Модули FIFO. Одноклоковые и двухклоковые.
Переход между тактовыми доменами. Код Грея.
Метастабильность.
Задание 7.
Внутрисистемные интерфейсы (Avalon/AXI). Адресные интерфейсы (Memory mapped).
Взаимодействие Master-Slave.
Контрольно-статусный регистр (CSR).
Типы управляющих воздействий.
Avalon-MM.
AXI-Lite.
AXI3 и AXI4.
Режим Burst.
Задание 8.
Периферийные последовательные интерфейсы. UART, SPI, I2C, CAN.
UART.
RS485, RS422, RS232.
SPI.
I2C.
CAN.
Типовые задачи управления периферией.
Задание 9.
Начала цифровой обработки на ПЛИС.
Съем данных с АЦП.
Теорема Котельникова. Зоны Найквиста. Частота дискретизации.
Квадратурное понижающее преобразование.
Числа с плавающей точкой. IEEE754.
Цифровая фильтрация. КИХ-фильтр.
Блоки generate.
Функции и таски.
Задание 10.
Знакомство с системами интеграции. Platform Designer / Qsys - IP Integrator.
Platform Designer / Qsys.
IP Integrator.
Обзор встроенных IP-ядер.
Источник тактового сигнала.
Ввод/вывод данных. GPIO.
Интерконнект.
Добавление собственных IP-ядер.
Задание 11.
Знакомство с софт-процессорными системами. Microblaze и Nios.
Microblaze.
Nios II.
Nios V.
Адресация.
Память инструкций и пользовательская память.
Прерывания. Контроллер прерываний.
Задание 12.
Продолжение работы с процессорными системами. Знакомство с SDK и процессом написания встроенного ПО.
Nios II Software build tools for eclipse.
Xilinx SDK.
Vitis.
BSP.
.elf и конфигурирование системы.
Базовые принципы написания встроенного ПО.
Задание 13.
Элементы памяти DDR.
Типы элементов памяти DDR.
Разбор временных характеристик микросхем.
Задание 14.
Прямой доступ к памяти. Знакомство с ядрами DMA.
MSGDMA.
Дескрипторы.
Диспетчер.
Префетчер.
Задание 15.
Высокоскоростные трансиверы. SFP-модули. Интерфейсы SerialLite и Aurora.
Высокоскоростные приемо-передатчики. Принципы ввода-вывода и тактирования.
Аппаратное блоки.
Aurora.
SerialLiteII.
SerialLiteIII.
SFP-модули.
Задание 16.
PCI-e. Драйверы устройств.
PCI-e.
Драйверы устройств.
Linux.
Задание 17.
Сетевое взаимодействие. Ethernet. Уровни модели OSI.
Сетевое взаимодействие.
Уровни модели OSI.
RJ45.
Ethernet.
UDP.
TCP.
IP.
Задание 18.
Цифровая обработка сигналов. Цифровые фильтры, БПФ.
БПФ.
Различные виды фильтров.
Модуляторы и демодуляторы.
Задание 19.
Системы на кристалле.
Сборка процессорной системы.
Bootloader. UBoot.
Device Tree.
Модули ядра.
Задание 20.
Верификация. UVM.
UVM.
Agent. Sequencer. Driver. Monitor.
Формальная верификация.
Задание 21.
Методические рекомендации.
При подготовке данного пособия я опирался на средний уровень студентов старших курсов бакалавриата и магистратуры физического факультета ЮФУ (начиная с 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 часто включает в себя работу в команде, поэтому важно иметь навыки командной работы и уметь эффективно коммуницировать со своими коллегами. Не лишними будут умения работать с системами контроля версий и управления проектами.
Знание английского языка. По крайней мере, на уровне свободного чтения технической документации. Это может сильно облегчить вашу работу.
Все это – навыки, которые можно приобрести и отточить в ходе обучения и работы по данной специальности, в этом мы и хотим вам помочь. Пока что, мы рассчитываем, что вам знакомы основы математики и физики, в частности булева алгебра и основы схемотехники. Впрочем, изучить можно все, поехали!