Использование плис в современных устройствах. Новостной и аналитический портал "время электроники" Примеры оформления больших проектов fpga

Представьте, что процессор вместо того, чтобы выполнять определенный набор инструкций, будет перестраиваться под каждую программу и превращать алгоритм непосредственно в «железо». Именно так и работают FPG. В сегодняшней статье я расскажу, как вообще такое возможно, и познакомлю вас с различными методами проектирования FPGA.

Для начала необходимо немного разбираться в цифровой логике работы микросхем ASIC, но начинать с них очень сложно и дорого, и вместо этого лучше начать с FPGA.

Что такое FPGA?

FPGA расшифровывается как field-programmable gate array (программируемые пользователем вентильные матрицы, ППВМ). В более общем случае они называются ПЛИС - программируемые логические интегральные схемы.

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

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

Пока мы не настроим FPGA, внутри микросхемы просто нет логики для обработки данных с интерфейсов, и посему работать конечно же ничего не будет. Но в результате проектирования будет создана прошивка, которая после загрузки в FPGA создаст необходимую нам цифровую схему. Таким образом можно создать контроллер 100G Ethernet, который будет получать и обрабатывать сетевые пакеты.

Важная особенность FPGA - возможность перенастройки. Допустим сейчас нам нужен контроллер 100G Ethernet, а через неделю эта же плата может использоваться для реализации независимых четырех интерфейсов 25G Ethernet.

На рынке работают два лидера в производителя FPGA-чипов: всеми известный Intel и Xilinx. Они контролируют 58 и 42% рынка. Первый свой чип FPGA основатели Xilinx изобрели в далеком 1985 году. Intel пришла на рынок совсем недавно - в 2015 году, поглотив компанию Altera, которая была основана в то же время, что и Xilinx. Технологии Altera и Xilinx во многом схожи, как и среды разработки. Чаще я работал с продуктами компании Xilinx, поэтому не удивляйтесь ее постоянному упоминанию в статье.

FPGA широко распространены в разных сферах: потребительской электронике, оборудовании телекома, платах-ускорителях для применения в дата-центрах, робототехнике, прототипировании микросхем ASIC. Пару примеров я разберу чуть ниже.

Также рассмотрим технологию, которая обеспечивает аппаратную реконфигурацию, познакомимся с процессом проектирования и разберем простой пример реализации аппаратного счетчика на языке Verilog. Если у вас есть любая отладочная плата FPGA, вы сможете повторить это самостоятельно. Если платы нет, то все равно сможете познакомиться с Verilog, смоделировав работу схемы на своем компе.

Принцип работы FPGA

Микросхема FPGA - это та же заказная микросхема ASIC, состоящая из таких же транзисторов, из которых собираются триггеры, регистры, мультиплексоры и другие логические элементы для обычных схем. Изменить порядок соединения этих транзисторов, конечно, нельзя. Но архитектурно микросхема построена таким хитрым образом, что можно изменять коммутацию сигналов между более крупными блоками: их называют CLB - программируемые логические блоки.

Также можно изменять логическую функцию, которую выполняет CLB. Достигается это за счет того, что вся микросхема пронизана ячейками конфигурационной памяти Static RAM. Каждый бит этой памяти либо управляет каким-то ключом коммутации сигналов, либо является частью таблицы истинности логической функции, которую реализует CLB.

Так как конфигурационная память построена по технологии Static RAM, то, во-первых, при включении питания FPGA микросхему обязательно надо сконфигурировать, а во-вторых, микросхему можно реконфигурировать практически бесконечное количество раз.

Очень упрощенная 2D-структура микросхемы без конфигурационной памяти

Блоки CLB находятся в коммутационной матрице, которая задает соединения входов и выходов блоков CLB.

Схема коммутационной матрицы

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

CLB

CLB очень упрощенно состоит из блока, задающего булеву функцию от нескольких аргументов (она называется таблицей соответствия - Look Up Table, LUT) и триггера (flip-flop, FF). В современных FPGA LUT имеет шесть входов, но на рисунке для простоты показаны три. Выход LUT подается на выход CLB либо асинхронно (напрямую), либо синхронно (через триггер FF, работающий на системной тактовой частоте).

Принцип реализации LUT

Интересно посмотреть на принцип реализации LUT. Пусть у нас есть некоторая булева функция y = (a & b) | ~ c . Ее схемотехническое представление и таблица истинности показаны на рисунке. У функции три аргумента, поэтому она принимает 2^3 = 8 значений. Каждое из них соответствует своей комбинации входных сигналов. Эти значения вычисляются программой для разработки прошивки ПЛИС и записываются в специальные ячейки конфигурационной памяти.

Значение каждой из ячеек подается на свой вход выходного мультиплексора LUT, а входные аргументы булевой функции используются для выбора того или иного значения функции. CLB - важнейший аппаратный ресурс FPGA. Количество CLB в современных кристаллах FPGA может быть разным и зависит от типа и емкости кристалла. У Xilinx есть кристаллы с количеством CLB в пределах примерно от четырех тысяч до трех миллионов.

Помимо CLB, внутри FPGA есть еще ряд важных аппаратных ресурсов. Например, аппаратные блоки умножения с накоплением или блоки DSP. Каждый из них может делать операции умножения и сложения 18-битных чисел каждый такт. В топовых кристаллах количество блоков DSP может превышать 6000.

Другой ресурс - это блоки внутренней памяти (Block RAM, BRAM). Каждый блок может хранить 2 Кбайт. Полная емкость такой памяти в зависимости от кристалла может достигать от 20 Кбайт до 20 Мбайт. Как и CLB, BRAM и DSP-блоки связаны коммутационной матрицей и пронизывают весь кристалл. Связывая блоки CLB, DSP и BRAM, можно получать весьма эффективные схемы обработки данных.

Преимущества FPGA

Первый чип FPGA, созданный Xilinx в 1985 году, содержал всего 64 CLB. В то время интеграция транзисторов на микросхемах была намного ниже, чем сейчас, и в цифровых устройствах часто использовались микросхемы «рассыпной логики». Были отдельно микросхемы регистров, счетчиков, мультиплексоров, умножителей. Под конкретное устройство создавалась своя печатная плата, на которой устанавливались эти микросхемы низкой интеграции.

Использование FPGA позволило отказаться от такого подхода. Даже FPGA на 64 CLB значительно экономит место на печатной плате, а доступность реконфигурации добавила возможность обновлять функциональность устройств уже после изготовления во время эксплуатации, как говорят «in the field» (отсюда и название - field-programmable gate array).

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

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

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

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


Сравнение аппаратных платформ

Давайте подумаем, чем принципиально отличаются CPU, GPU, FPGA и ASIC. CPU универсален, на нем можно запустить любой алгоритм, он наиболее гибок, и использовать его легче всего благодаря огромному количеству языков программирования и сред разработки.

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

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

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

Если алгоритм можно распараллелить, то на GPU получится добиться значительного ускорения по сравнению с CPU. С другой стороны, последовательные алгоритмы будут реализовываться хуже, поэтому платформа оказывается менее гибкой, чем CPU. Также для разработки под GPU надо иметь специальные навыки, знать OpenCL или CUDA.

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

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

Использование FPGA позволяет решать эту задачу мгновенно: байты пакета еще только начали поступать в микросхему из сетевого интерфейса, а его заголовок уже анализируется. Использование процессоров тут может существенно замедлить скорость обработки сетевого трафика. Ясно, что для маршрутизаторов можно сделать заказную микросхему ASIC, которая будет работать наиболее эффективно, но что, если правила обработки пакетов должны меняться? Достичь требуемой гибкости в сочетании с высокой производительностью поможет только FPGA.

Таким образом, FPGA используются там, где нужна высокая производительность обработки данных, наименьшее время реакции, а также низкое энергопотребление.

FPGA in the cloud

В облачных вычислениях FPGA применяются для быстрого счета, ускорения сетевого трафика и осуществления доступа к массивам данных. Сюда же можно отнести использование FPGA для высокочастотной торговли на биржах. В серверы вставляются платы FPGA с PCI Express и оптическим сетевым интерфейсом производства Intel (Altera) или Xilinx .

На FPGA отлично ложатся криптографические алгоритмы, сравнение последовательностей ДНК и научные задачи вроде молекулярной динамики. В Microsoft давно используют FPGA для ускорения поискового сервиса Bing, а также для организации Software Defined Networking внутри облака Azure.

Бум машинного обучения тоже не обошел стороной FPGA. Компании Xilinx и Intel предлагают средства на основе FPGA для работы с глубокими нейросетями. Они позволяют получать прошивки FPGA, которые реализуют ту или иную сеть напрямую из фреймворков вроде Caffe и TensorFlow.

Причем это все можно попробовать, не выходя из дома и используя облачные сервисы. Например, в Amazon можно арендовать виртуальную машину с доступом к плате FPGA и любым средствам разработки, в том числе и machine learning .

FPGA on the edge

Что еще интересное делают на FPGA? Да чего только не делают! Робототехника, беспилотные автомобили, дроны, научные приборы, медицинская техника, пользовательские мобильные устройства, умные камеры видеонаблюдения и так далее.

Традиционно FPGA применялись для цифровой обработки одномерных сигналов (и конкурировали с процессорами DSP) в устройствах радиолокации, приемопередатчиках радиосигналов. С ростом интеграции микросхем и увеличением производительности платформы FPGA стали все больше применяться для высокопроизводительных вычислений, например для обработки двумерных сигналов «на краю облака» (edge computing).

Эту концепцию легче всего понять на примере видеокамеры для анализа автомобильного трафика с функцией распознавания номеров машин. Можно взять камеру с возможностью передачи видео через Ethernet и обрабатывать поток на удаленном сервере. С ростом числа камер будет расти и нагрузка на сеть, что может привести к сбоям системы.

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

Что до робототехники и дронов, то в этой сфере как раз особенно важно выполнять два условия - высокая производительность и низкое энергопотребление. Платформа FPGA подходит как нельзя лучше и может использоваться, в частности, для создания полетных контроллеров для беспилотников . Уже сейчас делают БПЛА, которые могут принимать решения на лету.

Разработка проекта на FPGA

Существуют разные уровни проектирования: низкий, блочный и высокий. Низкий уровень предполагает использование языков типа Verilog или VHDL, на которых вы управляете разработкой на уровне регистровых передач (RTL - register transfer level). В этом случае вы формируете регистры, как в процессоре, и определяете логические функции, изменяющие данные между ними.

Схемы FPGA всегда работают на определенных тактовых частотах (обычно 100–300 МГц), и на уровне RTL вы определяете поведение схемы с точностью до такта системной частоты. Эта кропотливая работа приводит к созданию максимально эффективных схем с точки зрения производительности, потребления ресурсов кристалла FPGA и энергопотребления. Но тут требуются серьезные скиллы в схемотехнике, да и с ними процесс небыстрый.

На блочном уровне вы занимаетесь в основном соединением уже готовых крупных блоков, которые выполняют определенные функции, для получения нужной вам функциональности системы на кристалле (system-on-chip).

На высоком уровне проектирования вы уже не будете контролировать данные на каждом такте, вместо этого сконцентрируешься на алгоритме. Существуют компиляторы или трансляторы с языков C и C++ на уровень RTL, например Vivado HLS. Он довольно умный и позволяет транслировать на аппаратный уровень широкий класс алгоритмов.

Главное преимущество такого подхода перед языками RTL - ускорение разработки и особенно тестирования алгоритма: код на C++ можно запустить и верифицировать на компьютере, и это будет намного быстрее, чем тестировать изменения алгоритма на уровне RTL. За удобство, конечно, придется заплатить - схема может получиться не такой быстрой и займет больше аппаратных ресурсов.

Часто мы готовы платить эту цену: если грамотно использовать транслятор, то эффективность не сильно пострадает, а ресурсов в современных FPGA достаточно. В нашем мире с критичным показателем time to market это оказывается оправданным.

Часто в одном дизайне нужно совместить все три стиля разработки. Допустим, нам нужно сделать устройство, которое мы могли бы встроить в робота и наделить его способностью распознавать объекты в видеопотоке - например, дорожные знаки. Возьмем микросхему видеосенсора и подключим ее напрямую к FPGA. Для отладки можем использовать монитор HDMI, тоже подключенный к FPGA.

Кадры с камеры будут передаваться в FPGA по интерфейсу, который заведомо определен производителем сенсора (USB тут не катит), обрабатываться и выводиться на монитор. Для обработки кадров понадобится фреймбуфер, который обычно находится во внешней памяти DDR, установленной на печатной плате рядом с микросхемой FPGA.


Типичная блок-схема проекта FPGA

Если производитель видеосенсора не предоставляет Interface IP для нашей микросхемы FPGA, то нам придется писать его самостоятельно на языке RTL, считая такты, биты и байты в соответствии со спецификацией протокола передачи данных. Блоки Preprocess, DDR Controller и HDMI IP мы, скорее всего, возьмем готовые и просто соединим их интерфейсы. А блок HLS, который выполняет поиск и обработку поступающих данных, мы можем написать на C++ и транслировать при помощи Vivado HLS.

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

Рассмотрим путь проектирования от написания кода RTL до получения конфигурационного файла для загрузки в FPGA.

Путь проектирования

Итак, вы пишете код RTL, который реализует нужную вам схему. Прежде чем его проверять на реальном железе, надо убедиться, что он верный и корректно решает требуемую задачу. Для этого используется RTL-моделирование в симуляторе на компьютере.

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

Далее логически верифицированный код подается на вход программе-синтезатору. Она преобразует текстовое описание схемы в связанный список цифровых элементов из библиотеки, доступной для данного кристалла FPGA. В этом списке будут отображены такие элементы, как LUT, триггеры, и связи между ними. На этой стадии элементы пока никак не привязаны к конкретным аппаратным ресурсам. Чтобы это сделать, требуется наложить на схему ограничения (Constraints) - в частности, указать, с какими физическими контактами ввода-вывода микросхемы FPGA связаны логические входы и выходы вашей схемы.

В этих ограничениях также требуется указать, на каких тактовых частотах должна работать схема. Выход синтезатора и файл ограничений отдаются процессору Implementation, который, помимо прочего, занимается размещением и трассировкой (Place and Route).

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

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

Часто сразу удовлетворить это требование не удается, и тогда надо вернуться на начальный этап и изменить код RTL: например, попытаться сократить логику в критической цепи. После успешного завершения Implementation нам известно, какие элементы где находятся и как они связаны.

Только после этого запускается процесс создания бинарного файла прошивки FPGA. Остается его загрузить в реальное железо и проверить, работает ли оно так, как ожидалось. Если на этом этапе возникают проблемы, значит, моделирование было неполным и на этом этапе не были устранены все ошибки и недочеты.

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

РЕАЛИЗАЦИЯ ПРОЕКТА НА ПЛИС

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

Рис. 82. Этапы проектирования цифрового устройства на ПЛИС

Основные этапы проектирования на ПЛИС (из лекций):

    Разрабатывается схема устройства и вводится в XILINX.

    Выполняется IMPLEMENTATION (трансляция, формирование схемы путем извлечения библиотечных элементов, оптимизация, размещение на кристалле).

    Программирование.

  1. Ассоциативная память. Организация, способ выборки, отличия от адресного зу.

Ассоциативный доступ реализует поиск информации по некоторому признаку, а не по ее расположению в памяти (адресу или месту в очереди). В наиболее полной версии все хранимые в памяти слова одновременно проверяются на соответствие признаку, например, на совпадение определенных полей слов (тегов - от английского слова tag) с признаком, задаваемым входным словом (теговым адресом). На выход выдаются слова, удовлетворяющие признаку. Дисциплина выдачи слов, если тегу удовлетворяют несколько слов, а также дисциплина записи новых данных могут быть разными. Основная область применения ассоциативной памяти в современных ЭВМ - кэширование данных.

В ассоциативных запоминающих устройствах поиск информации производится по ассоциативному признаку, записанному в каждую ячейку памяти.

В регистр маски записывается слово, разрешающее запрос по всем или только некоторым разрядам ассоциативного признака, применение маски позволяет сократить или расширить область поиска.

Поиск информации производится параллельно по всем ячейкам путем сравнения запроса с ассоциативным признаком каждой ячейки.

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

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

Проверка разряда занятости производится по установке n-го разряда (разряда занятости) маски. При использовании дополнительных комбинационных схем в ассоциативной памяти можно выполнять различные логические операции, определяя максимальное или минимальное число, количество слов, имеющих одинаковый ассоциативный признак и т.д. Ячейки памяти ассоциативного запоминающего устройства должны быть элементами статической памяти, в ассоциативной памяти обращение производится ко всем ячейкам одновременно и не должно прерываться циклами регенерации. Ассоциативная память наиболее быстродействующая, но очень дорогая, так как требует введения дополнительно схемы сравнения, позволяющей осуществить поиск, для каждой ячейки памяти. Поэтому такая память обычно не используется в чистом виде, а быстродействующие устройства памяти типа Кэш обычно выполняются как частично ассоциативные.

В полностью ассоциативной кэш-памяти (FACM, Fully Associated Cache Memory), каждая ячейка хранит данные, а в поле "тег" - полный физический адрес информации, копия которой записана. При любых обменах физический адрес запрашиваемой информации сравнивается с полями "тег" всех ячеек и при совпадении их в любой ячейке устанавливается сигнал Hit.

При чтении и значении сигнала Hit = 1 данные выдаются на шину данных, если же совпадений нет (Hit = 0), то при чтении из основной памяти данные вместе с адресом помещаются в свободную или наиболее давно не используемую ячейку кэш-памяти.

При записи данные вместе с адресом сначала, как правило, размещаются в кэш-памяти (в обнаруженную ячейку при Hit = 1 и свободную при Hit = 0). Копирование данных в основную память выполняется под управлением специального контроллера, когда нет обращений к памяти.

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

Из лекций:

Ассоциативные запоминающие устройства

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

Информация

Тег – отличительный признак, по совпадению с которым достается кусок информации.

Упрощенная схема ассоциативного ЗУ:

Зона хранения – адресное ЗУ с пронумерованными ячейками, хранит в себе информацию и теги.

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

Применение: БД, базы знаний, ПК в качестве кэша.

ИСПОЛЬЗОВАНИЕ ПЛИС В СОВРЕМЕННЫХ УСТРОЙСТВАХ

Тупиков Павел Андреевич

студент 5 курса, кафедра АРТ ОмГТУ, РФ, г. Омск

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

· Улучшаются временные характеристики изделия.

· Уменьшается цена изделия.

· Уменьшаются габариты изделия.

· Увеличивается надежность изделия (уменьшается количество дискретных микросхем)

· Повышается гибкость изделия (ПЛИС всегда можно перепрограммировать)

Архитектура ПЛИС имеет сложную структуру (Рис. 1)

Рисунок 1. Внутренняя структура ПЛИС

Как видно из рисунка 1 основная часть ПЛИС состоит из программируемых логических блоков и программируемых внутренних связей .

Сам процесс программирования (прошивки) ПЛИС состоит в формировании нужных связей между входами и выходами устройства.

На сегодняшний день в мире есть два мировых лидера в производстве ПЛИС. Это американские фирмы Xilinx и Altera.

Каждая фирма предлагает свой САПР для работы с ПЛИС. Фирма Xilinx предлагает Xilinx Software Development Kit (SDK). Фирма Altera предлагает Max+Plus II и Quartus II, а так же систему моделирования ModelSim.

Для создания программ прошивки обычно используются языки описания работы аппаратуры, наиболее распространенные на сегодняшний день распространены следующие языки:

· Verilog HDL.

Язык VHDL является наиболее сложным для обучения, но при этом обладает наибольшими возможностями на функциональных и поведенческих уровнях абстракции, однако имеет меньшие возможности на структурном уровне абстракции по сравнению с Verilog HDL, для расширения возможностей языка VHDL была разработана библиотека VITAL (Рис. 2) .


Рисунок 2. Уровни абстракции Verilog и VHDL

Примером работы языка Verilog HDL является программа, реализованная на ПЛИС CYCLONE III EP3C5E1444C8N стенда Mini-DiLab общий вид которого представлен на рис. 3.


Рисунок 3. Общий вид платы Mini - DiLab

Данная программа реализует последовательное переключение светодиодов led0-led7, с выбором набавления движения «огонька» при помощи кнопок pba и pbb, а так же управлением скоростью переключения при помощи переключателей sw0, sw1.

//Текст программы

module proect(output led, input clk_25mhz, input pba, input pbb,

input sw);

// Назначение внутренних соединений проекта

wire s1;

wire s2;

wire s3;

// Вызов других файлов (подпрограмм), подключаемых к проекту

Tr tr_1 (.out(s2), .set(pba), .res(pbb));

Counter counter_1 (.q(s1), .clk(clk_25mhz), .up(s2));

Mx mx_1 (.a(s3), .in(s1), .load(sw));

Dc3_8 dc3_8_1 (.out(led), .in(s3));

endmodule // конец программы

Подпрограмма tr

module tr (out, set, res); // Создание программы

// Назначение входов/выводов

output reg out;

input set;

input res;

// Инициализация

initial

begin

Out <= 1"d0;

// Основной код программы

always @(negedge set or negedge res)

begin

if (~(set))

Out <= 1"d1;

else

Out <= 1"d0;

endmodule // Конец программы

Подпрограмма counter

module counter (con, q, clk,up); // Начало программы

output reg con;

output q = con;

input up, clk;

// Основной код программы

always @(posedge clk)

begin

if (clk)

if (up)

Con <= con - 1"d1;

else

Con <= con + 1"d1;

endmodule //Конец программы

Подпрограмма mx(мультиплексор)

module mx (output reg a, input in, input load);

// Основной код программы

always @*

begin

case (load)

2"b00: a = in;

2"b01: a = in;

2"b10: a = in;

2"b11: a = in;

endcase

endmodule // Конец программы

Подпрограмма dc3_8 (мультиплексор)

module dc3_8 (out, in); // Начало программы

// Назначение входов/выходов

output reg out;

input wire in;

// Основной код программы

always @*

begin

case (in)

3"d0: out = 8"b11111110;

3"d1: out = 8"b11111101;

3"d2: out = 8"b11111011;

3"d3: out = 8"b11110111;

3"d4: out = 8"b11101111;

3"d5: out = 8"b11011111;

3"d6: out = 8"b10111111;

3"d7: out = 8"b01111111;

endcase

endmodule // Конец программы

Программа была реализована в САПР Quartus II.

После компиляции программы компилятор не выдал ошибки и замечания в программе, связанные с анализом и синтаксисом программы (рис. 4).


Рисунок 4. Окно сообщений проекта

Замечание, сделанные компилятором, говорят об отсутствии лицензии на Quartus II(была использована бесплатная версия программы, для обучения) и отсутствия файлов, необходимых для моделирования проекта.

RTL Структура данного проекта представлена на рис. 5.


Рисунок 5. Реализация проекта ( RTL структура)

Как показано на рис. 6 в данной программе испозльзуется лишь незначительная часть возможностей данной ПЛИС.

Рисунок 6. Часть ПЛИС, участвующая в работе проекта

Выводы: Программируемые логические интегральными схемы являются могут находить применение во многих устройствах. Для обучения работы с ними следует вводить в образовательную программу специальностей, связанных с проектированием и конструированием радиоэлектронной аппаратуры знакомство с языками описания аппаратуры(Verilog HDL и VHDL).

Список литературы:

1.Грушевицкий Р.И. Проектирование систем на микросхемах программной логики/ Р.И. Грушевицкий, A.X. Мурсаев, Е.П. Угрюмое. СПб.: БХВ Петербург, 2002. - 608 с.

2.Коломов Д.А. Системы автоматизированного проектирования фирмы Altra MAX+plus II и Quartus II. Краткое описание и самоучитель/ Д.А. Коломов, Р.А. Мяльк, А.А. Зобенко, А.С. Филиппов. М.: ИП РадиоСофт, 2002. - 126 с.

3.Максфилд К. Проектирование на ПЛИС. Курс молодого бойца./ К. Максфилд. М.: Издательский дом «Додэка-XXI», 2007. - 408 с. (перевод с английского).

Пока были праздники, сделал небольшой проект на Verilog, который давно хотел попробовать.

Суть проекта в следующем: к FPGA подключено быстродействующее (относительно, конечно) АЦП с двумя каналами и параллельным интерфейсом (14-16 бит на канал). FPGA читает данные с АЦП и складывает в буфер (свою внутреннюю память BRAM). Когда буфер заполнен, чтение останавливается, и внешнее устройство (микроконтроллер) может считать данные из буфера по интерфейсу SPI. Также можно по SPI конфигурировать некоторые параметры (об этом будет написано в следующем посте).

Тест проекта (картинка кликабельна).

Результат синтеза для Cyclone IVE

Результат я синтезировал в Quartus II, для FPGA семейства Cyclone IVE (EP4CE6E22A7). Это одна из самых простых и недорогих FPGA в корпусе QFP144 на 6272 логических элемента. Микросхема имеет память объёмом 30K * 9 бит. Пользовательских пинов - 92.

микросхема EP4CE6E22A7
логических элементов - 301 (5%)
пинов - 41 (45%)
память - 65536 бит (24%)
частота для наихудшего случая (125 С) - 151 МГц.

Память 8 Кб, это собственно буфер, куда происходит запись данных. При двух каналах по 16 бит получается 32 бита на отсчёт, и 2048 отсчётов. Я решил, что этого вполне хватит, хотя буфер можно расширить хоть на весь объём.

Частота вполне устраивает, я рассчитывал, что будет частота тактирования 50 МГц, и АЦП на 25 МГц. То есть получается трёхкратный запас по частоте.

Количество логических элементов совершенно незначительно для такой FPGA, т.е. можно при желании много чего ещё туда приделать, тем более, что и пинов остаётся целых 51.

Есть более новое семейство Cyclone 10.

Результат синтеза для Cyclone 10

Выбираем чип 10CL006YE144C8G. Он имеет столько же логических элементов (6272), что и вариант на Cyclone 4, и столько же памяти (30К х 9). Корпус такой же, QFP144, пользовательских пинов даже меньше - 89.

микросхема 10CL006YE144C8G
логических элементов - 289 (5%)
пинов - 41 (46%)
память - 65536 бит (24%)
частота для наихудшего случая (85 С) - 145,5 МГц.

Любопытно то, что проект стал компактнее по логическим элементам. То есть при той же ёмкости логики в Cyclone 10 влезет более сложный проект. Всё остальное примерно на том же уровне.

Возникает резонный вопрос: можно ли сэкономить, поставив другую FPGA или CPLD?

Давайте попробуем FPGA MAX10.

Результат синтеза для MAX 10

Здесь читатель (если он в теме) может воскликнуть: нет, всё не так! Семейство MAX - это CPLD, а не FPGA, а путать эти понятия - вопиющий непрофессионализм!

Однако стараниями маркетологов Intel (все ведь в курсе, что речь про чипы Intel?) семейство MAX10 превратилось в FPGA, хотя и имеет внутреннюю энергонезависимую память конфигурации, как любая CPLD.

Итак, выбираем чип, например, 10M02SCE144A7G (2304 LE, 101 GPIO, 12Kx9 BRAM), корпус QFP144.

микросхема 10M02SCE144A7G.
логических элементов - 298 (13%)
пинов - 41 (41%)
память - 65536 бит (59%)
частота для наихудшего случая (125 С) - 153 МГц.

Мы видим, что абсолютные показатели остались практически теми же, увеличилась только степень заполнения кристалла, что и понятно - 2304LE против 6272 LE.

Можно ли использовать MAX II?

Теперь вопрос: а можно ли использовать какую-либо совсем дешёвую CPLD, типа MAX II? Здесь всё сложнее. У них нет памяти BRAM, т.е. нужна будет ещё и внешняя быстрая SRAM.

Для подключения SRAM нужна будет дополнительная логика, конечно. Если мы используем память объёмом 4K x 16, то нам будет нужно дополнительно 16 пинов для данных, 12 для адреса и 3 для управления (/cs, /we, /oe), всего 31 дополнительный пин.

Логика также увеличится в размерах. На сколько точно, сложно сказать, но в CPLD на 240 LE она не влезет изначально, а в 570 LE может быть, и влезет.

Выбираем CPLD EPM570 в корпусе QFP100. Нам нужно всего 72 пина, корпус имеет 76 пинов для GPIO, т.е. должно хватить на всё, но для расширения уже совсем мало места.

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

Цена вопроса

Вот что я нашёл с помощью efind. Микросхемы немного другие, но цифра и буква в конце - это индекс быстродействия и температурный диапазон (коммерческий). Так как у нас трёхкратный запас по частоте, нам эти цифры абсолютно не важны.

EP4CE6E22C8N - 456,55 Р (Промэлектроника, Екб, розн.)
10CL006YE144C - 754,71 (Пятый элемент, Спб, опт)
10M02SCE144C8G - 456 Р (Элитан, Екб, опт)
EPM570F100C5N - 368 Р (Хайтек, Спб) + память (CY7C1021DV33-10ZSXI, SRAM 1MBIT 10NS 44TSOP) - 92,51 Р (Промэлектроника, Екб, розн.)

Конечно, можно найти и дешевле, это просто розничные цены в магазине, но соотношение будет примерно тем же.

Видно, что вариант с CPLD никак не выигрывает по цене, при этом имея множество недостатков. Остальные варианты примерно равноценны, разве что Cyclone 10 пока немного дороже и мало у кого есть в наличии. Однако это совсем новое семейство, пока что все дистрибьюторы его не привезли.

Лично мне больше всего нравится вариант на MAX 10. Он имеет одно преимущество: не нужно загружать конфигурацию FPGA при старте. В варианте на Cyclone 4 нужно будет загружать конфигурацию FPGA, что можно сделать либо с помощью дополнительной микросхемы конфигурационной памяти, либо с помощью микроконтроллера. Есть ещё третий вариант: прошить через JTAG и никогда не снимать питание с чипа. Я слышал, что кто-то так делал, не знаю, шутка это или нет, но я так делать точно не буду.

Впрочем, у варианта с прошивкой Cyclone 4 через микроконтроллер есть преимущество: возможность обновлять прошивку FPGA через пользовательские интерфейсы: USB, Ethernet, etc.

Возможен ещё один нетривиальный вариант: вообще не ставить микроконтроллер, а прошить в FPGA какой-либо встраиваемый процессор. Но это не очень хороший вариант, возможно, т.к. при этом однозначно понадобится внешнее ПЗУ и ОЗУ, а также, как минимум, мост USB. Заведомо отказываться от этого варианта не нужно, конечно, но он мне кажется более сложным в реализации, чем с микроконтроллером.

Про то, какие функции выполняет эта прошивка, я напишу в следующем посте.

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

Введение

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

  • ГОСТ 2.102-68 ЕСКД. Виды и комплектность конструкторских документов.
  • ГОСТ 15.101-98. Система разработки и постановки продукции на производство. Порядок выполнения научноисследовательских работ.
  • ГОСТ Р 15.201-20-00. Система разработки и постановки продукции на производство. Продукция производственно-технического назначения. Порядок разработки и постановки продукции на производство.

Как правило, это были файл-прошивки и программа (описание цифрового устройства на VHDL/Verilog или набор цифровых схем, разработанных в схемотехническом редакторе с использованием библиотечных элементов цифровой логики, такие как триггеры, регистры, счетчики, дешифраторы и т. д.) на CD или DVD и инструкция по программированию. И все.

Автор, например, столкнулся со следующей проблемой. Один из сотрудников разработал сложное многомодульное цифровое устройство. Все модули описывал на языке VHDL, а циклограммы работы этих модулей и цифрового устройства в целом смотрел на хорошем и дорогом осциллографе. Про Test Bench файлы и про возможность проведения моделирования он не знал или не умел их писать, кстати, комментарии к проекту и к описаниям модулей также отсутствовали. Ситуация может быть еще хуже, если модули будут представленными цифровыми схемами, разработанными в схемотехническом редакторе c использованием библиотечных элементов. Здесь и заключен один из главных недостатков: кроме самого разработчика, вряд ли кто-то другой будет разбираться в этом цифровом устройстве, особенно если проект многомодульный, а описание каждого модуля составляет более 100 строк или более одного экрана монитора. А значит, при желании другого разработчика внедрить в новую разработку или проект такое, уже разработанное цифровое устройство для ПЛИС, ему снова необходимо потратить время на разработку этого цифрового устройства.

История вопроса проектирования для ПЛИС

В настоящее время рынок ПЛИС - один из наиболее динамично развивающихся. ПЛИС применяются во многих отраслях техники. На данный момент нет однозначной, удовлетворяющей всех разработчиков аппаратуры методологии получения конфигурации ПЛИС по функциональной модели устройства на системном уровне. Наиболее популярный подход по решению этой проблемы - применение технологии ІР-ядер (Intellectual Property Cores). IP-ядра - это готовые компоненты, позволяющие легко включать их в собственный проект для создания более сложной системы. У этого подхода есть один существенный недостаток - привязанность ІР-ядер к элементному базису. Каждое IP-ядро оптимизировано под конкретную серию микросхем конкретного производителя, что существенно ухудшает возможность переноса уже созданных устройств из одного элементного базиса в другой. Закрытость архитектур коммерческих САПР делает невозможным добавление собственных функциональных моделей устройств на системном уровне для получения на их основе моделей устройства на уровне регистровых передач (RTL). Разработка цифрового модуля осуществляется в виде цифровой схемы, нарисованной в схемном редакторе с помощью встроенной в САПР производителя библиотеки базовых схемных элементов, таких как триггеры, дешифраторы, счетчики, сумматоры и т. д.

Другой популярный подход, позволяющий осуществить переход от функциональной модели на системном уровне к модели устройства на уровне регистровых передач, - применение языков описания аппаратуры на системном уровне (system-level design languages, SLDLs). К таким языкам относятся SystemC, Handel-C, VHDL, Verilog, System Verilog. Основным плюсом является независимость от аппаратного базиса, в котором будет реализовано устройство.

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

Предоставление информации о разработанном цифровом модуле для ПЛИС

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

  • Software - разработанный цифровой модуль, передаваемый потребителю в виде описания на языке описания аппаратуры (VHDL, Verilog) или/и разработанный в схемотехническом редакторе Schematic Editor для дальнейшего использования в программах автоматизированного синтеза логических схем и оптимизированный по функциональным параметрам.
  • Firmware - разработанный сторонней фирмой-разработчиком цифровой модуль, который называется IР-ядром, передаваемый потребителю в виде логической схемы (списка цепей - netlist) в базисе библиотеки логических элементов изготовителя ПЛИС и оптимизированный по функциональным и электрическим параметрам.

На этапе разработки документации, исходя из личного опыта, необходимо оформить в дополнение к обычным КД и ТУ, выполняемым в соответствии с ГОСТ 15.101, ГОСТ 15.201, ГОСТ 2.102, ГОСТ 2.114, документацию на все виды моделей (системных, логических, схемотехнических), создаваемых на этапах проектирования цифровых устройств на ПЛИС.

Другими словами, в комплект конструкторской документации цифрового устройства для ПЛИС, кроме файла-прошивки, инструкции по программированию и записанного проекта на CD/DVD, должна также входить сопроводительная документация.

Таблица. Список разделов сопроводительной документации

Название раздела Вид
Software Firmware
Общие сведения
Назначение и область применения О Р
Технические характеристики О О
Описание сигналов сброса О О
Описание сигналов синхронизации О О
Описание интерфейсов О Р
Временные диаграммы Р О
Описание регистров управления О О
Структурная (функциональная) схема Р Р
Руководство по программированию О О
Модель или семейство ПЛИС,
фирма-производитель
Р О
Представление цифрового модуля
для логического проектирования на ПЛИС
RTL-модель О Нет
Логическая модель Нет О
Проектные ограничения О О

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

  • «О» - обязательно поставляемый раздел;
  • «Р» - рекомендуемый для поставки раздел.

Рекомендуемые форматы файлов для передачи сопроводительной документации - MS Word, PDF (наилучший формат), HTML. Файлы описания на языке описания аппаратуры (VHDL, Verilog) или/и разработанные в схемотехническом редакторе Schematic Editor предоставляются в таком виде, как требует программное обеспечение САПР для разработки. Исключением может быть дополнительное предоставление в графическом формате (JPEG, BMP) файлов цифровых схем, разработанных в схемотехническом редакторе Schematic Editor.

Общие сведения

В этом разделе описываются общие сведения о разработанном цифровом модуле в виде описания:

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

Назначение и область применения

Определяется назначение цифрового модуля, области его применения.

Технические характеристики

Приводится описание его основных технических характеристик, таких как производительность, потребляемая мощность для конкретного кристалла ПЛИС, количество занимаемых вентилей, тип применяемого кристалла ПЛИС. Дополнительно указывается используемое при разработке цифрового модуля САПР производителя ПЛИС и программное обеспечение, используемое для моделирования и верифицирования. Для всех используемых программ указывается версия и установленные обновления. Приводится графическое представление цифрового модуля в виде «черного ящика» с обозначением внешних входов/выходов и дается краткое описание их назначения.

Описание сигналов сброса

Приводится подробная информация о сигналах сброса:

  • Перечень внешних и внутренних сигналов сброса.
  • Временные параметры и временные диаграммы сигналов сброса.
  • Схемы формирования внутренних сигналов сброса, если таковые входят в состав цифрового модуля.
  • Соотношения с другими сигналами (особенно с сигналами синхронизации).

Описание сигналов синхронизации

Приводится подробная информация о сигналах синхронизации:

  • описание внешних сигналов синхронизации;
  • временные параметры сигналов синхронизации;
  • описание внутренних сигналов синхронизации и схемы их формирования;
  • временные соотношения между сигналами синхронизации из различных источников;

Описание интерфейсов

Приводятся особенности использования всех интерфейсов, входящих в состав разработанного цифрового модуля, желательно унифицированного для организации взаимодействия с другими узлами системы на кристалле. Дополнительно приводится Internet-ссылка на полное описание стандартного интерфейса или предоставляется само описание интерфейса. На данный момент в качестве унифицированных интерфейсов цифровых модулей приняты интерфейсы к шине AMBA, PLB, Wishbone.

Временные диаграммы

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

Описание регистров управления

Приводится описание всех регистров управления цифрового модуля. Типовое описание регистра управления содержит имя регистра, адрес регистра во внутреннем адресном пространстве, начальное значение после снятия сигнала сброса, тип доступа (чтение/запись), описание внутренних полей.

Структурная (функциональная) схема

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

Количество описываемых блоков и объем описания определяет разработчик цифрового модуля. Предпочтительно соответствие минимального количества описываемых модулей количеству элементов структурной (функциональной) схемы цифрового модуля.

Типовое описание внутреннего блока содержит:

  • назначение блока;
  • структурную (функциональную) схему блока (при необходимости);
  • режимы и алгоритмы работы;
  • временные диаграммы работы;
  • организацию управления блоком;
  • организацию связи с другими блоками;
  • любую другую информацию.

Руководство по программированию

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

Модель или семейство ПЛИС, фирма-производитель

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

Представление цифрового модуля для логического проектирования

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

RTL-модель

Цифровой модуль, описанный на синтезируемом подмножестве языка Verilog или VHDL или/и разработанный в схемотехническом редакторе Schematic Editor, предназначен для использования на этапе логического синтеза ПЛИС. Поставляется для Software в виде собранного проекта цифрового модуля в САПР производителя ПЛИС. Для цифрового модуля Firmware RTL-модель предоставляется по отдельному соглашению.

Помимо файлов RTL-модели, передаются:

  • Инструкция по использованию модели.
  • Описание блоков памяти, входящих в состав модели, включающее тип памяти, размер, число блоков памяти, иерархическое имя блока памяти.
  • Описание процесса создания готовых ядер при использовании программ для их создания (например, CoreGenerator для Xilinx ISE). При отсутствии описаний могут возникнуть ограничения для повторного проектирования и применения из-за зависимости от технологии и производителя.
  • В случае использования микропроцессора от производителя (например, от фирмы Altera - процессор Nios; от фирмы Xilinx - микропроцессоры Microblaze, PowerPC) требуется описание процесса конфигурирования ядра процессора и его периферии.
  • Набор тестов (Test Bench файлов) для проведения верификации и моделирования цифрового модуля, написанных на языке Verilog или/и на VHDL, или/и на System Verilog.
  • Любая другая дополнительная информация.

Логическая модель

Модель является списком цепей, описанным с помощью языков Verilog или VHDL в базисе библиотеки изготовителя ПЛИС, и поставляется для Firmware цифрового модуля.

Помимо файлов логической модели, передаются:

  • Инструкция по использованию этой модели.
  • Набор тестов (Test Bench файлов) для проведения верификации и моделирования цифрового модуля, написанных на языке Verilog или/и на VHDL, или/и на System Verilog.
  • Руководство по работе с набором тестов для проведения моделирования и верификации цифрового модуля.
  • Любая другая дополнительная информация.

Проектные ограничения

Проектные ограничения предоставляются в виде файла с описанием набора ограничений, накладываемых на цифровой модуль при его включении в логическую модель системы на кристалле. В этот набор входят ограничения для сигналов синхронизации (clock constrains), временные ограничения (timing constrains), ограничения на взаимодействие цифрового модуля с другими модулями и условия работы цифрового модуля. Предпочтителен формат описания проектных ограничений Synopsis Design Constraints (SDC) или формат для САПР производителя ПЛИС.

Примерный список ограничений для сигналов синхронизации:

  • временная диаграмма (Clock waveform);
  • нестабильность тактовой частоты (Jitter);
  • изменение фазы тактовой частоты;
  • длительность времен переключения (Transition times);
  • временные диаграммы производных синхросигналов (Generated clock waveforms);
  • любая другая дополнительная информация.

Набор ограничений для сигналов синхронизации обязателен для Software и Firmware цифровых модулей.

Примерный список временных ограничений:

  • время появления сигналов на входах (Arrival times at inputs);
  • время появления сигналов на выходах (Required times at outputs);
  • многотактовые пути (Multi-cycle paths);
  • ложные пути (False paths);
  • длительность времен переключения сигналов данных (Data signal transition times);
  • любая другая дополнительная информация.

Заключение

Приведенный состав сопроводительной документации на разработанные цифровые модули для ПЛИС предоставляется по договоренности между потребителем и разработчиком. Чаще всего разработчик предоставляет просто цифровой модуль, описанный на языке VHDL, Verilog, System Verilog и/или разработанный в схемотехническом редакторе. По поводу дополнительной документации ответ у разработчика чаще всего бывает следующим: «Цифровой модуль работает, так берите и пользуйтесь. В описании схемы на языке аппаратуры ничего сложного нет: разберетесь сами».

На взгляд автора, разобраться можно в чем угодно, все зависит от желания и потраченного времени, а время, потраченное на то, чтобы разобраться в «чужом» проекте на уже разработанный цифровой модуль, прямо пропорционально опыту описания аппаратуры на языках VHDL, Verilog и знаниям цифровой и микропроцессорной схемотехники. Этого можно избежать, если изначально договориться с разработчиком о составе сопроводительной документации, тогда использование цифрового модуля в своем проекте становится проще, и быстрее произойдет его внедрение.

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

Литература

  1. Денисов А. Несколько советов по проектированию цифровых устройств на VHDL для ПЛИС // Компоненты и технологии. 2009. № 12.
  2. ГОСТ 2.102-68 ЕСКД. Виды и комплектность конструкторских документов.
  3. ГОСТ 2.114-95 ЕСКД. Технические условия.
  4. ГОСТ 15.101-98. Система разработки и постановки продукции на производство. Порядок выполнения научно-исследова-тельских работ.
  5. ГОСТ Р 15.201-20-00. Система разработки и постановки продукции на производство. Продукция производственно-технического назначения. Порядок разработки и постановки продукции на производство.