Введение в ПЛИС
Базовый курс
Андрей Жадан______________________Ростов-на-Дону______________________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 часто включает в себя работу в команде, поэтому важно иметь навыки командной работы и уметь эффективно коммуницировать со своими коллегами. Не лишними будут умения работать с системами контроля версий и управления проектами.
-
Знание английского языка. По крайней мере, на уровне свободного чтения технической документации. Это может сильно облегчить вашу работу.
Все это – навыки, которые можно приобрести и отточить в ходе обучения и работы по данной специальности, в этом мы и хотим вам помочь. Пока что, мы рассчитываем, что вам знакомы основы математики и физики, в частности булева алгебра и основы схемотехники. Впрочем, изучить можно все, поехали!
ссылка на оригинал статьи https://habr.com/ru/articles/857322/
Добавить комментарий