Введение в ПЛИС
Базовый курс
Андрей Жадан______________________Ростов-на-Дону______________________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 часто включает в себя работу в команде, поэтому важно иметь навыки командной работы и уметь эффективно коммуницировать со своими коллегами. Не лишними будут умения работать с системами контроля версий и управления проектами.
Знание английского языка. По крайней мере, на уровне свободного чтения технической документации. Это может сильно облегчить вашу работу.
Все это – навыки, которые можно приобрести и отточить в ходе обучения и работы по данной специальности, в этом мы и хотим вам помочь. Пока что, мы рассчитываем, что вам знакомы основы математики и физики, в частности булева алгебра и основы схемотехники. Впрочем, изучить можно все, поехали!
Комментарии (34)
nixtonixto
09.11.2024 16:50Скажите, пожалуйста, возможно ли изготовить АЛУ (арифметико-логическое устройство) с другой математикой в своей основе или только собирать из того, что есть?
На ПЛИС возможно всё. Лишь бы хватило ячеек.
LenKon
09.11.2024 16:50"Всё" это очень абстрактно! Я уже довольно давно ищу тех, кто способен реализовать математику в железе, но пока тщетно.
В статье речь идет о понимании архитектуры и того, как работают внутренние блоки, такие как блоки памяти, умножители, сумматоры, и т.д. Мой вопрос о возможности реализации новых принципов построения самих внутренних блоков. В первую очередь сумматора и как следствие остальных.az013 Автор
09.11.2024 16:50Ну в составные устройства вы можете заложить ту логику, которую захотите, а вот изменить физическую структуру триггеров, лутов или аппаратных блоков памяти уже, конечно, не получится, это то, что зашито в кристалле на заводе. Здесь уже нужно обращаться к asic, но это не уровень отдельного человека или маленькой группы, этим занимаются корпорации, уж больно дорого.
LenKon
09.11.2024 16:50Спасибо за ответ! Хотя бы узнать, какие корпорации этим занимаются...
Или они штампуют готовое с сумасшедшей скоростью и никаких разработчиков по этой теме уже нет. Но, по логике вещей, они всё равно должны экспериментировать с материалами кристалловaz013 Автор
09.11.2024 16:50Ну если вас именно физика кристаллов интересует, из наших, например, Микрон этим должен заниматься. Но техпроцессы, естественно, гораздо более крупные, чем у лидеров.
Yak52
09.11.2024 16:50Мой вопрос о возможности реализации новых принципов построения самих внутренних блоков.
А говоря о новых принципах, вы что подразумеваете? Если вы остаетесь в базисе двоичной логики И-ИЛИ-НЕ, то пользуйтесь ПЛИС и реализуйте все, что вам угодно. Но, видимо, вы имеете ввиду какие то другие принципы?
Yuri0128
09.11.2024 16:50Вам нужно подготовить ТЗ и связаться с проектировщиками, - вам они порасказывают много чего. Но, ожидайте что разработа обойдется в приличную сумму (50-150 k$) и прогон на прототипе еще +25 k$. Все это весьма примерно. Потом, если зайдет, - еще и по стоимости пластин (зависит от техпроцесса) + разварка и корпусирование. Недешево выйдет.
Если вы не знаете как подготовить ТЗ - то дальше просто не имеет смысла двигаться.
nckma
09.11.2024 16:50А какую математику в железе Вы хотите реализовать?
wire [7:0]result;
wire [7:0]a;
wire [7:0]b;
assign result = a+b;
Ну вот на Verilog уже сумматор. Это математика? Откомпилируете, загрузите в ПЛИС и будет суммировать.
Affdey
09.11.2024 16:50Что именно вы хотите? "Другая математика в своей основе" это смело. Троичная логика? Комплексные числа? Это всё возможно на стандартной ПЛИС. У меня на руках ПЛИС GW5A.
Madfisht3
09.11.2024 16:50Хоть xilinx, хоть altera, не поставляют официально чипы в Россию и вообще везде пытаются перекрыть кислород разработчикам.
Даже квартус лет 5 назад не мог официально скачать из России на офсайте.
Объясните какой смысл вкладывать столько усилий ради того чтобы потом не иметь возможности работать с fpga этих производителей по причине присоединения к санкциям сша?
az013 Автор
09.11.2024 16:50Да, действительно, сейчас есть определенные проблемы с доставаимостью чипов, особенно это касается altera, с xilinx наши заграничные товарищи подружились лучше. Здесь я рассматриваю xilinx и altera потому что, во-первых, они пока еще держат большую часть мирового рынка, во-вторых, с чисто китайской архитектурой пока не работал, сложно учить тому, в чем сам не разбираешься.
LenKon
Пыталась понять, что же такое ПЛИС, но после прочтения статьи всё же пришлось гуглить.
Ниже, чтобы другим не приходилось искать, привожу фрагмент из вики.
Так же нашла в продаже для юридических лиц "Микросхемы ПЛИС (PLD, CPLD, FPGA)"...
У меня такой вопрос к автору статьи. Скажите, пожалуйста, возможно ли изготовить АЛУ (арифметико-логическое устройство) с другой математикой в своей основе или только собирать из того, что есть?
Спасибо за статью и за вашу работу! С удовольствием добавляю статью в закладки и буду ждать новых!
Определение ПЛИС из вики: "Программи́руемая логи́ческая интегра́льная схе́ма (ПЛИС, англ. programmable logic device, PLD) — электронный компонент (интегральная микросхема), используемый для создания конфигурируемых цифровых электронных схем. В отличие от обычных цифровых микросхем, логика работы ПЛИС не определяется при изготовлении, а задаётся посредством программирования (проектирования). Для программирования используются программатор и IDE (отладочная среда), позволяющие задать желаемую структуру цифрового устройства в виде принципиальной электрической схемы или программы на специальных языках описания аппаратуры (Verilog, VHDL, AHDL и других). Альтернативой ПЛИС являются:
БМК — базовые матричные кристаллы, требующие заводского производственного процесса для программирования;
ASIC — специализированные заказные большие интегральные схемы (БИС), которые при малосерийном и единичном производстве существенно дороже;
специализированные компьютеры, процессоры (например, цифровой сигнальный процессор) или микроконтроллеры, которые из‑за программного способа реализации алгоритмов в работе медленнее ПЛИС;
непрограммируемые цифровые устройства и системы, настроенные на решение заранее известных задач, построенные на принципах так называемой «жёсткой логики».
Некоторые производители для своих ПЛИС предлагают программные процессоры, которые можно модифицировать под конкретную задачу, а затем встроить в ПЛИС. Тем самым:
обеспечивается увеличение свободного места на печатной плате (возможность уменьшения размеров платы);
упрощается проектирование ПЛИС;
увеличивается быстродействие ПЛИС."
az013 Автор
Большое спасибо за комментарий! По поводу АЛУ - да, возможно. При помощи ПЛИС вы можете организовать собственную схему на уровне регистров, комбинационных схем, некоторых аппаратных блоков и связей между ними. Но, как правильно заметили, есть ряд ограничений, таких как количество логических ячеек, предельная частота работы и т.д.
LenKon
Большое спасибо за ответ! И наконец, мне стало понятно, почему название именно ПЛИС!
Это аналог БИС и МИС (больших и малых интегральных микросхем)
Теперь можно программировать под задачи саму логику интегральных микросхем...
Очень круто! И очень интересно!
VBKesha
Это можно сравнить с набором однотипных деталей. Которые можно соеденять между собой, для получения сложных схем(да в результате компиляции тескта на языке VHDL/Verillog проще считать что получается именно схема а не программа, но это тоже не всегда верно). Тут вроде более менее наглядно раскисано что это за детали. Но это в общем в частности там бывют всяки хитрые дополнения.
Можно реализовать всё то можно описать опиать базовыми блоками. Тоесть аналоговое АЛУ написать не получится, а вот цифровое без проблем.
LenKon
На сколько понимаю: аналоговое устройство не пишут, его собирают. Для сборки нужна схема электрическая принципиальная. Но это уже давно прошлый век. Хотя в электричестве программистам тоже полезно разбираться, без него ни один комп пока что не работает...
VBKesha
Я глубоко не изучал попрос но кажется были(или есть) и нечто вроде аналоговых FPGA. А по поводу пишут/собирают ну вот цифровое можно собрать на какой нибудь 74 серии, а можно наспиать и загнать в FPGA.
Yuri0128
Тут такое, - по факту на FPGA тоже "собирают" схему (описанную на Verilog или на другом языке) из ячеек FPGA. И да, есть программируемые аналоговые матрицы (FPAA), которые позволяют "собирать" аналоговые схемы. Например от Lattice.
KeisN13
может мой старый видос поможет тебе лучше понять што такое плис