Содержание курса | 2. Языки описания аппаратуры

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

В простейшем случае можно представить ПЛИС, как матрицу, составленную из универсальных логических элементов, которые мы можем соединять между собой по нашему усмотрению. На самом деле, конечно, видов внутренних блоков гораздо больше. Здесь и специальные модули ввода-вывода, элементы памяти, отдельные dsp-блоки, высокоскоростные трансиверы и многое другое, в зависимости от модели ПЛИС. Чтобы понять, как мы пришли к текущей ситуации, давайте немного окунемся в историю и посмотрим на процесс развития ПЛИС. Начнем обсуждение с важного момента в истории электроники: появления транзисторов в 1947 году. О дотранзисторной эре можно почитать, например, здесь [1]. Замена громоздких ламп кремниевыми транзисторами к концу 1950-х годов позволила создавать сложные сборки логических элементов на одной подложке, что привело к появлению интегральных схем. В 60х годах продолжилось развитие полупроводниковых технологий, в частности, появились такие как ТТЛ и КМОП. Уже в 70х годах появляются первые программируемые микросхемы.

  • 1970 - Компания Fairchild представляет первую 256-битную SRAM-микросхему. SRAM (Static Random-Access Memory) – статическая память с произвольным доступом. Является энергозависимой. От DRAM (динамической памяти) отличается в первую очередь тем, что не требует периодического обновления данных. В дальнейшем эти элементы стали активно использоваться как важная составляющая ПЛИС.

  • 1970 - Разработан первый тип SPLD - микросхема ППЗУ. ППЗУ (программируемое постоянное запоминающее устройство) - это тип программируемой памяти, который обеспечивает возможность записи данных в устройство один раз, и эти данные остаются постоянными (неизменными) после этой записи.

  • 1971 - Изобретение нового типа ROM(Read-Only Memory)-памяти - EPROM. Первое постоянное запоминающее устройство, которое обладает возможностью перезаписи. Осуществлялась перезапись под воздействием ультрафиолетовых лучей.

  • 1975 - Появление нового типа SPLD - PLA (Programmable Logic Arrays), он же ПЛМ (программируемые логические матрицы). В основе PLA лежит развитие идеи микросхем ППЗУ.

  • Конец 70-х - Разработан ещё один класс SPLD – ПМЛ (программируемый массив логики) (PAL - Programmable Array Logic).

  • Конец 70-х - Началось активное использование ASIC-микросхем в связи с появлением нового типа данных устройств - вентильных матриц. Первая вентильная матрица называлась некоммутированная логическая матрица (ULA).

  • 1983 - Появление памяти EEPROM, главным отличием которой от EPROM-микросхем является высокая скорость перезаписи. Это достигается за счет стирания данных электрическим способом.

  • 1983 - Разработано устройство GAL - продолжение идеологии PAL.

  • 1984 - Впервые продемонстрирована технология Flash, основанная на EPROM- и EEPROM-технологиях. Особенностью Flash является перезапись данных блоками, что сказывается на скорости и надежности элемента памяти.

  • 1984 - Появились первые сложные программируемые логические устройства (CPLD) от созданной в этом же году компании Altera. Они представляют собой несколько SPLD, соединённых специальной программируемой логической матрицей.

  • 1984 - Основание компании Xilinx. Росс Фриман из Xilinx разработал новый класс микросхем - FPGA-микросхемы.

  • 1985 - Запуск производства первой FPGA-микросхемы, Xilinx XC2064 с 1000 вентилей. В ней применялась 3-микронная технология. [2]

Теперь давайте подробнее разберем вышеназванные типы ПЛИС. К SPLD (Simple Programmable Logic Device - простым программируемым логическим устройствам) можно отнести такие как ПЛМ, ПМЛ и GAL.

  • ПЛМ (программируемая логическая матрица) – она же PLA, представляет собой вид программируемого логического устройства, используемого для реализации комбинационных цифровых схем. В ПЛМ сигналы и/или их инвертированные копии через перекоммутируемую матрицу заводятся на массив элементов "И"("AND"), результирующие сигналы проходят еще одну матрицу и поступают на массив элементов "ИЛИ"("OR"). Такая структура позволяет синтезировать множество логических функций в одном кристалле. Обобщенный вид представлен на рис. 1 а).

Рис. 1: Обобщенная структура интегральных схем а) PLA, б) PAL, в) FPGA.

  • ПМЛ (программируемый массив логических элементов), он же PAL, состоит из фиксированных OR-матриц и программируемых AND-матриц. Это означает, что логика в PAL-устройстве программируется только в AND-матрице, а OR-матрица остается статичной. Это приводит к более ограниченной гибкости по сравнению с PLA. Но зато такие устройства получаются дешевле. Рисунок 1 б).

  • GAL – дальнейшее развитие PAL, основным отличием является возможность перезаписи прошивки, что значительно упростило прототипирование устройств.

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

  • FPGA (программируемая пользователем вентильная матрица) - это самый мощный тип ПЛИС, который представляет собой массив логических элементов, соединенных между собой в форме матрицы. FPGA имеет множество встроенных блоков, таких как умножители, счетчики, блоки памяти и т.д., что позволяет реализовывать на ней самые сложные функции. Рисунок 1 в).

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

Еще одно сравнение можно провести с микросхемами ASIC (Application-Specific Integrated Circuit), которые специально разрабатываются для определенного приложения. ASIC могут быть очень эффективными, поскольку они оптимизированы для конкретных требований, что позволяет снижать энергозатраты, сокращать размеры устройства и добиваться непревзойденной производительности. Однако, проектирование ASIC требует значительных затрат времени и денег, и может быть нецелесообразным для небольших тиражей продукции или для проектирования прототипов. В отличие от этого, ПЛИС предлагают готовые блоки, которые можно использовать для создания сложных цифровых систем и быстро прототипировать свои идеи.

CPU (Central Processing Unit) и GPU (Graphics Processing Unit) являются общепринятыми типами процессоров, используемых в вычислительных системах. CPU - это устройство, которое обрабатывает инструкции и управляет операциями в компьютере. GPU же - устройство, которое занимается обработкой графической информации, используется для вывода изображений на экран и выполнения операций с изображениями, например, рендерингом. СPU работают на высоких тактовых частотах и являются эффективным решением широкого круга повседневных задач. GPU – содержат в себе большое множество более простых процессорных ядер, что отлично подходит для решения хорошо распараллеливаемых задач, таких как уже упомянутая работа с графикой. Также они широко используются в последнее время в области машинного обучения и искусственного интеллекта. ПЛИС отличается от CPU и GPU в том, что она представляет собой программируемую логическую матрицу, внутренняя архитектура которой может быть настроена на выполнение определенных функций в соответствии с требованиями приложения. CPU и GPU, напротив, обычно специализированы для выполнения определенного набора инструкций и не могут быть изменены после изготовления.

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

Микроконтроллеры и процессоры – микросхемы с завершенной архитектурой, заточенные под исполнение последовательности команд. Но что, если мы, например, хотим сделать устройство, предназначенное для обработки большого количества сигналов, да еще и хотим, чтобы процедура обработки могла быть изменена по требованию заказчика. Тогда оптимальным решением могут быть ПЛИС.

Так как же вообще устроены ПЛИС и как с ними работать? ПЛИС представляют собой матрицу из тысяч или даже миллионов универсальных логических блоков. Каждый логический блок – сборка из комбинационной схемы, реализующей таблицу истинности, регистров, сохраняющих состояние схемы и системы управления, задающей требуемую структуру. Кроме логических элементов, ПЛИС также включает в себя элементы памяти и различные специализированные блоки, такие как PLL, используемые для генерации тактовых частот, вычислительные DSP-блоки, высокоскоростные приемопередатчики и др.

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

Здесь следует понимать, что несмотря на то, что в целом HDL-описание напоминает код на языке программирования, например, язык Verilog является C-подобным с обильным заимствованием синтаксиса, оно, в отличие от программного кода, фактически задает схему внутреннего устройства микросхемы. Другими словами, на языке программирования вы описываете последовательность команд, которые должен выполнить процессор. Даже если процессор многоядерный и вы пишите многопоточное приложение, в конечном итоге программа все-равно сводится к последовательности команд. В ПЛИС же, вместо того, чтобы писать последовательность команд для процессора, мы можем написать сам процессор. Более того, там довольно часто применяются уже готовые софт-процессоры, для которых вы уже можете написать программу на С. Но и помимо процессора вы можете описать именно ту схему, которая вам нужна. Такая гибкость позволяет решать огромное число задач, которые без ПЛИС решить было бы довольно сложно.

Основными производителями ПЛИС являются американские корпорации Xilinx (c 2022 года объединилась с AMD) и Altera, которая в 2015 году была поглощена Intel. Ориентировочные данные (точных данных нет и в различных источниках оценки разнятся) по долям рынка, занимаемым основными производителями ПЛИС на 2021 год, представлены на рис.2.
        

Рис. 2: Ориентировочные данные по долям рынка, занимаемым основными производителями ПЛИС на 2021 год.

Непосредственное производство большинства чипов осуществляется на Тайване и в Южной Корее. Также и в плане разработки, и в плане производства ПЛИС в последнее время активно развиваются китайские компании. Кроме разработки непосредственно архитектуры микросхем крупнейшие производители ПЛИС также занимаются развитием сред разработки проектов на ПЛИС. Так Xilinx развивает систему Vivado (ранее – ISE/PlanAhead), а Intel — Quartus. Данные пакеты являются сложными программными комплексами, предназначенными в основном для выполнения многоступенчатого процесса компиляции, в ходе которого по описанию на HDL синтезируется схема, после чего подбираются необходимые для ее реализации компоненты ПЛИС и происходит трассировка межблочных соединений. На выходе получаем бинарный файл прошивки, который с помощью встроенных средств среды может быть записан в ПЗУ устройства. Кроме вышеуказанного в состав сред разработки входят логические анализаторы, предназначенные для просмотра сигналов внутри ПЛИС, графические средства просмотра схем, генерируемых по описаниям, иногда — средства симуляции модулей. Также в каждой среде присутствуют системы высокоуровневой разработки, где вы можете собрать требуемую схему из уже готовых IP-блоков задавая только параметры блоков и межблочные соединения. Примерами таких IP-блоков могут служить уже упомянутые нами софт-процессоры (NiosII у Intel и MicroBlaze у Xilinx). Но и помимо процессоров имеется в запасе большой выбор модулей, предназначенных для работы с внешними интерфейсами, генерации тактовых частот, цифровой обработки сигналов и многое другое.

В этой главе мы познакомились с миром ПЛИС, начиная с их определения и заканчивая практическими аспектами их использования. Мы узнали, что ПЛИС – это высокоадаптивные микросхемы, позволяющие разработчикам гибко настраивать аппаратное обеспечение под конкретные нужды. Рассмотрев различные типы ПЛИС, включая SPLD, CPLD и FPGA, обозначили их разнообразные области применения. Сравнение ПЛИС с другими вычислительными устройствами выявило их уникальные преимущества, такие как возможность параллельной обработки данных и гибкость в применении. Мы также узнали о ключевых производителях ПЛИС и их средах разработки. В дальнейшем мы более детально разберем некоторые темы, затронутые здесь. Сейчас же переключимся на практические аспекты работы с ПЛИС.

Задание 1.

Установить одну из сред разработки на ПЛИС (Vivado или Quartus Prime) и ознакомиться с ней. Бесплатную версию ПО можно найти на сайте соответствующего разработчика. Конкретный номер версии нужно выбирать в соответствии с имеющимся в наличии отладочным модулем, на котором в последствии будет вестись работа. После установки нужно попробовать создать первый проект, посмотреть обучающие материалы можно, например, на Youtube. При создании проекта от вас потребуется придумать ему название (название может отражать его функцию, а также физический структурный элемент системы, на котором будет развернута прошивка), и указать целевую платформу (конкретный тип ПЛИС, для которой будет собираться проект).

Ресурсы

[1] https://skillbox.ru/media/code/revolyutsiya-tranzistorov/.
[2] https://parallel.ru/fpga/FPGA_history.html

Содержание курса | 2. Языки описания аппаратуры

Комментарии (19)


  1. checkpoint
    16.01.2025 21:55

    Я недавно читал студентам 3-го курса лекцию на близкую тему, может быть Вам сгодятся мои материалы.


    1. az013 Автор
      16.01.2025 21:55

      Отлично, спасибо! Может, как время будет, статью дополню)


  1. aabzel
    16.01.2025 21:55

    Какой путь проходит verilog файл с момента написания до попадания в битстрим? Подобно классическому программированию на си. С, obj, elf ,bin


    1. az013 Автор
      16.01.2025 21:55

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


    1. checkpoint
      16.01.2025 21:55

      Общими мазками это выглядит так:

      1. Verilog преборазуется в граф AST и проходит процедуру оптимизации.

      2. Из оптимизированного AST синтезируется граф Netlist с использованием стандартных ячеек конкретной ПЛИС или ASIC.

      3. Netlist проходит процедуру размещения и трассировки на поверхности кристалла ASIC или "материи" ПЛИС, формируется config файл.

      4. Config упаковывается в результирующий bitstream.


      1. HardWrMan
        16.01.2025 21:55

        Всё это видно в шагах САПР, которую вы используете. Если точнее, вы 3 пункт должны разбить на 2. Потому что шаги следующие: синтезатор, ассемблер, фиттер.

        Синтезатор берёт ваш xHDL в любом виде и формирует нетлист. Он же делает анализ и оптимизацию. Результат его работы можно посмотреть в Netlist Viewer если речь за Quartus, например.

        Ассемблер делает упаковку в конфигурацию согласно семейству выбранного устройства. Он оперирует абстрактными LE, LUT и т.д. На выходе получаем прогнозируемое количество необходимых ресурсов: pins, LEs/LUT, M9K bits, Registers и т.д.

        Следующим вступает уже фиттер. Он оперирует результатом ассемблера и конкретным корпусом выбранного устройства. И тут уже вступают в силу лимиты вышеупомянутых ресурсов. На выходе получается результирующий битстрим под конкретное корпусированное устройство.

        Дальше битстрим можно объединять уже с другими, если у вас в JTAG Chain больше одной ПЛИС или сформировать jic для программирования устройства конфигурирования.


  1. aabzel
    16.01.2025 21:55

    Можете порекомендовать миниатюрные отладочные fpga платы со встроенным аудиокодеком на борту?


    1. Gapon65
      16.01.2025 21:55

      Есть на AliExpress:

      https://wiki.sipeed.com/hardware/en/tang/tang-nano-20k/nano-20k.html

      Схематику можно найти на сайте производителя: https://dl.sipeed.com/shareURL/TANG/Nano_20K/2_Schematic


    1. az013 Автор
      16.01.2025 21:55

      Можно попробовать поспрашивать: https://t.me/fpgasystems, может накидают вариантов.


    1. checkpoint
      16.01.2025 21:55

      А зачем Вам аудио-кодек ? Сделайте сразу цифровой выход I2S. Если стоит необходимость подключать к аналоговой системе, то на выходе высокочастотный ШИМ или DSD. У Вас получится all-digital решение.


      1. aabzel
        16.01.2025 21:55

        А зачем Вам аудио-кодек ?

        Аудиокодек это не просто сдвенный ADC+DAC.
        Там есть настройки аналогового тракта. Усиление, аттенюация, мультиплексирование сигналов, PLL и прочее.


        1. checkpoint
          16.01.2025 21:55

          А кто мешает сделать самому средствами ПЛИС ? Сделайте всю обработку в цифре с выходом I2S прямо с ног ПЛИСа. Далее этот цифровой сигнал можно конвертером за 900 руб превратить в аналоговый сигнал. Или конвертором подороже в S/PDIF и подключать к профессиональной аудио технике или любому современному телевизору. Сделать свой синтезируемый кодек гораздо интереснее чем использовать готовую микросхему. :-)


          1. aabzel
            16.01.2025 21:55

            Звук надо не только воспроизводить, но и записывать. Причем двухканальный звук.
            Поэтому надо полноценный аудиокодек. Типа NAU8814YG

            https://habr.com/ru/articles/808499/


  1. aabzel
    16.01.2025 21:55

    Есть ли микросхемы с аппаратным arm Cortex m0 и fpga областью на одном чипе?


    1. Gapon65
      16.01.2025 21:55

      Не уверен насчет M0, однако есть SoC (System on Chip) Cortex М4 со встроенным eFPGA (embedded FPGA). Архитектурно, это обратный вариант тому, что есть у Xilinx Zynq 7000 SoC или Xilinx UltraScale+ MSoC. https://www.mouser.com/datasheet/2/1164/QL_EOS_S3_Ultra_Low_Power_multicore_MCU_Datasheet-2448755.pdf В таких, как правило, довольно мало (несколько тысяч gates/DFFs) в стравнении с большимы FPGA от Xilinx


      1. k_rail
        16.01.2025 21:55

        Xilinx, Altera(Intel) - бэээ. Gowin - наше всё :P


        1. az013 Автор
          16.01.2025 21:55

          Ну они активно развиваются, но пока еще путь долгий предстоит


          1. checkpoint
            16.01.2025 21:55

            Продукция Xilinx и Alter-а это уже не ПЛИС, развитие пошло в какую-то неправильную сторону - вернулись к процессорам общего назначения и куче тяжеловесных проприетарных блоков. Из классических ПЛИС остались только Lattice и Gowin. Есть еще Efinix Trion, но это очень редкий гость в наших краях. :-)


            1. Brak0del
              16.01.2025 21:55

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

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