Меню
Бесплатно
Главная  /  Прошивка  /  Небольшой проект на FPGA. FPGA

Небольшой проект на FPGA. FPGA

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

Примечание: Насколько я смог выяснить, в русском языке на сегодняшний день термины ПЛИС и FPGA (Field-Programmable Gate Array, Программируемая Пользователем Вентильная Матрица), принято считать взаимозаменяемыми, что будет использовано далее по тексту. Однако стоит знать о существовании и альтернативной точки зрения, согласно которой FPGA (ППВМ) является одной из разновидностей ПЛИС (PLD, Programmable Logic Device).

Основные сведения об FPGA

Для программирования FPGA используются языки описания аппаратуры (HDL, Hardware Description Language). Среди них наибольшей популярностью пользуются Verilog (и его диалекты, в частности SystemVerilog), а также VHDL . Языки во многом похожи, но имеют разный синтаксис и различаются в некоторых деталях. Если Verilog — это такой C мира описания аппаратуры, то VHDL — соответственно, Pascal. Насколько мне известно, VHDL несколько менее популярен, в частности, из-за его многословности по сравнению с Verilog. Из преимуществ VHDL (или недостатков, кому как) можно назвать строгую статическую типизацию. Verilog же иногда допускает неявное приведение типов. Если продолжать аналогию с C и Pascal, языки различаются не настолько сильно, чтобы не выучить их оба.

На данный момент лидирующими производителями FPGA являются компании Altera (сейчас принадлежит Intel) и Xilinx. По информации из разных источников, вместе они контролируют не менее 80% рынка. Из других игроков стоит отметить Actel (куплена Microsemi), Lattice Semiconductor, Quicklogic и SiliconBlue. С железом от Xilinx можно работать только из среды разработки от Xilinx (называется Vivado), а среда разработки от Altra (называетя Quartus) понимает только железо от Altera. То есть, полный вендор лок, и выбирая конкретную FPGA для своего проекта, вы автоматически выбираете и инструменты разработки соответствующего производителя, их техническую поддержку, документацию, условия лицензирования софта, политику касаемо прекращения поддержки железа, и так далее.

FPGA часто используются в задачах, где некие вычисления хочется существенно ускорить, реализовав их прямо в железе. Например, FPGA нашли широкое применение в области обработки сигналов, скажем, в осциллографах, анализаторах спектра , логических анализаторах , генераторах сигналов, Software Defined Radio и даже некоторых мониторах . В частности, в LimeSDR используется Altera Cyclone IV, а в осциллографе Rigol DS1054Z стоит Xilinx Spartan-6, а также ProASIC 3 от компании Actel. Еще из применений, о которых я слышал, могу назвать компьютерное зрение, распознавание речи и биоинформатику. Есть и другие проекты, в частности по разработке веб-серверов и СУБД, работающих на FPGA . Но, насколько мне известно, это направление все еще остается сильно экспериментальным.

Xilinx или Altera?

Как говорится, лучший Linux тот, который использует ваш знакомый гуру по Linux.

Мой знакомый гуру по FPGA в лице Дмитрия Олексюка посоветовал начать с девборды Arty Artix-7 от компании Digilent. Используемой в ней FPGA является Artix-7 от Xilinx. Сам Digilent не производит доставку в Россию, но устройство доступно и на AliExpress , хотя и с заметной наценкой (официальная цена составляет 99$). Также его продают на eBay. Это довольно мощная плата, которая, тем не менее, стоит вполне адекватных денег.

Fun fact! Если вам просто хочется попрограммировать на Verilog или VHDL, строго говоря, покупать какую-либо плату с FPGA не требуется. Первое время можно ограничиться симулятором, работа с которым будет рассмотрена далее.

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

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

Установка Vivado

Среда разработки Vivado доступна для скачивания на сайте Xilinx . Будьте морально готовы к тому, что перед скачиванием вам придется пройти регистрацию и заполнить довольно подробную форму о себе. Скачиваем архив под названием «Vivado HLx 2017.2: All OS installer Single-File Download». Не перепутайте случайно с каким-нибудь «Vivado Lab Solutions», это совершенно не то, что нужно. Архив весит более 20 Гб, поэтому запасаемся терпением.

Распаковываем архив, запускаем инсталлятор. Ставим Vivado HL System Edition. Полная его версия займет на диске 47 Гб. Лично я снял галочку напротив Software Development Kit и оставил поддержку только 7 Series устройств, что уменьшило размер до 12 Гб. Забегая немного вперед отмечу, что такой конфигурации оказалось вполне достаточно.

Перед запуском Vivado нужно добавить в него поддержку Arty Artix-7, так как из коробки он ничего об этой плате не знает. Делается это как-то так:

cd ~/ opt/ xilinx/ Vivado/ 2017.2 / data/ boards/ board_files
wget https:// github.com/ Digilent/ vivado-boards/ archive/ master.zip
unzip master.zip
mv vivado-boards-master/ new/ board_files/* ./
rm -r vivado-boards-master
rm master.zip

Также скачиваем и сохраняем куда-нибудь файл Arty_Master.xdc. Он понадобится нам далее. Файл содержит описание находящихся на плате светодиодов, переключателей и так далее. Без него поморгать светодиодами на Verilog будет непросто.

Первый проект на SystemVerilog

В Vivado говорим File → New Project… В качестве типа проекта выбираем RTL Project, ставим галочку Do not specify sources at this time. В диалоге выбора типа платы находим в списке Arty.

Первым делом добавляем к проекту скачанный ранее XDC файл. Копируем его в каталог с проектом. Затем говорим File → Add Sources… → Add or create constraints → Add Files, находим копию файла, жмем Finish. В дереве файлов проекта (Sources) в группе Constraints появится файл Arty_Master.xdc, или как вы там назвали копию. Открываем его и раскомментируем все строчки в группах Clock signal, Switches и LEDs.

Далее говорим File → Add Sources… → Add or create design sources → Create File. В типе файла выбираем SystemVerilog, в имени файла вводим что-нибудь вроде hello. Говорим Finish. Далее появится диалог Define Module, который предложит накликать интерфейс модуля. Диалог довольно бесполезный, потому что то же самое удобнее сделать прямо в коде, так что жмем Cancel.

В дереве исходников находим новый файл hello.sv, он будет в группе Design Sources. Открываем и пишем следующий код:

`timescale 1ns / 1ps

module hello(
input logic CLK100MHZ,
input logic [ 3 : 0 ] sw,
output logic [ 3 : 0 ] led
) ;

always @ (posedge CLK100MHZ)
begin
if (sw[ 0 ] == 0 )
begin
led <= 4"b0001 ;
end
else
begin
led <= 4"b0000 ;
end
end

endmodule

Если все было сделано правильно, на этом этапе Vivado у вас будет выглядеть как-то так (кликабельно, PNG, 71 Кб):

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

Запустим синтез, сказав Flow → Run Synthesis, или просто нажав F11. В правом верхнем углу вы увидите индикацию того, что процесс идет. Он может занимать довольно много времени, в зависимости от вашего компьютера и сложности программы. На моем ноутбуке синтез приведенной выше программы выполнился где-то секунд за 10. Если теперь сказать Flow → Open Synthesized Design, то можно увидеть красивую картинку вроде такой:

Настало время прошить нашу плату. Говорим Flow → Run Imlementation, затем Flow → Generate Bitstream. Подключаем плату к компьютеру по USB, в Vivado говорим Flow → Open Hardware Manager → Open target → Auto Connect → Program device. Потребуется указать путь к bit-файлу. У меня он был следующим:

./first-project.runs/impl_1/hello.bit

Говорим Program. Теперь на плате горит светодиод LD4, если переключатель SW0 опущен (см приведенную выше фотографию платы). Если же переключатель поднят, светодиод не горит. Простенько, конечно, но это же «hello, world», чего вы ожидали? :)

Симуляция

Симуляция — это виртуальное выполнение кода на Verilog или VHDL прямо на вашем компьютере, безо всяких там ПЛИС’ов. Это одновременно и отладочный инструмент, и своего рода фреймворк для покрытия кода тестами.

При знакомстве с симуляцией первое, что я обнаружил, было то, что она у меня не работает. В логах было просто:

ERROR: Failed to compile generated C file [...]xsim_1.c.

Google по этой ошибке находил только всякую ерунду в стиле «попробуйте отключить антивирус». В итоге решить проблему помогло добавление флага -v 2 в скрипт ~/opt/xilinx/Vivado/2017.2/bin/xelab. С его помощью я выяснил, что Clang, бинарник которого Vivado таскает за собой, падает со следующей ошибкой:

/a/long/path/to/clang: error while loading shared libraries:
libncurses.so.5: cannot open shared object file: No such file or
directory

А эта ошибка и ее решение уже описаны на Arch Wiki . Лично я просто скопировал уже существующий файл из каталога Vivado_HLS:

cp ~/opt/xilinx/Vivado_HLS/2017.2/lnx64/tools/gdb_v7_2/libncurses.so.5\
~/opt/xilinx/Vivado/2017.2/lib/lnx64.o/libncurses.so.5

… после чего все заработало. Итак, а теперь, собственно, пример симуляции.

По аналогии с тем, как ранее мы создавали hello.sv, создаем новый файл hello_sim.sv в группе Simulation Sources. В файле пишем следующий код:

`timescale 1ns / 1ps

module hello_sim() ;
logic clck_t;
logic [ 3 : 0 ] sw_t;
logic [ 3 : 0 ] led_t;

Hello hello_t(clck_t, sw_t, led_t) ;

initial begin
clck_t <= 0 ;
sw_t <= 4"b0000 ; # 1 ; clck_t <= 1 ; # 1 ; clck_t <= 0 ; # 1 ;
assert (led_t === 4"b0001 ) ;

Sw_t <= 4"b0001 ; # 1 ; clck_t <= 1 ; # 1 ; clck_t <= 0 ; # 1 ;
assert (led_t === 4"b0000 ) ;
end

endmodule

В дереве исходников делаем правый клик по файлу, выбираем Source Node Properties. В секции Used In снимаем галочки Synthesis и Implementation. Мы же не хотим, чтобы какие-то там тесты засоряли нашу далеко не резиновую FPGA?

Теперь говорим Flow → Run Simulation → Run Behavioral Simulation. В итоге вы увидите что-то примерно такого плана:

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

Заключение

Архив с описанным выше проектом можно скачать . В качестве дополнительных источников информации я бы рекомендовал следующие:

  • Если вас интересуют подробности по железу, обратите внимание на

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

Может быть, ты умеешь взламывать устройства на другом конце света или кодить крутые веб-приложения, но понимаешь ли ты, как работает твой компьютер? И речь не о том, что делает операционка, как функционирует garbage collector в Java или как устроен компилятор C++. Я говорю о самом низком, аппаратном уровне, ниже ассемблера: как работает железо.

Что происходит в микросхеме сетевой карты, когда приходит пакет Ethernet? Как этот пакет передается дальше в оперативную память компьютера через шину PCI Express? Как работают самые быстрые системы распознавания изображений на аппаратном уровне?

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

INFO

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Из лекций:

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

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

Информация

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

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

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

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

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

65 нанометров - следующая цель зеленоградского завода «Ангстрем-Т», которая будет стоить 300-350 миллионов евро. Заявку на получение льготного кредита под модернизацию технологий производства предприятие уже подало во Внешэкономбанк (ВЭБ), сообщили на этой неделе «Ведомости» со ссылкой на председателя совета директоров завода Леонида Реймана. Сейчас «Ангстрем-Т» готовится запустить линию производства микросхем с топологией 90нм. Выплаты по прошлому кредиту ВЭБа, на который она приобреталась, начнутся в середине 2017 года.

Пекин обвалил Уолл-стрит

Ключевые американские индексы отметили первые дни Нового года рекордным падением, миллиардер Джордж Сорос уже предупредил о том, что мир ждет повторение кризиса 2008 года.

Первый российский потребительский процесор Baikal-T1 ценой $60 запускают в массовое производство

Компания «Байкал Электроникс» в начале 2016 года обещает запустить в промышленное производство российский процессор Baikal-T1 стоимостью около $60. Устройства будут пользоваться спросом, если этот спрос создаст государство, говорят участники рынка.

МТС и Ericsson будут вместе разрабатывать и внедрять 5G в России

ПАО "Мобильные ТелеСистемы" и компания Ericsson заключили соглашения о сотрудничестве в области разработки и внедрения технологии 5G в России. В пилотных проектах, в том числе во время ЧМ-2018, МТС намерен протестировать разработки шведского вендора. В начале следующего года оператор начнет диалог с Минкомсвязи по вопросам сформирования технических требований к пятому поколению мобильной связи.

Сергей Чемезов: Ростех уже входит в десятку крупнейших машиностроительных корпораций мира

Глава Ростеха Сергей Чемезов в интервью РБК ответил на острые вопросы: о системе «Платон», проблемах и перспективах АВТОВАЗа, интересах Госкорпорации в фармбизнесе, рассказал о международном сотрудничестве в условиях санкционного давления, импортозамещении, реорганизации, стратегии развития и новых возможностях в сложное время.

Ростех "огражданивается" и покушается на лавры Samsung и General Electric

Набсовет Ростеха утвердил "Стратегию развития до 2025 года". Основные задачи – увеличить долю высокотехнологичной гражданской продукции и догнать General Electric и Samsung по ключевым финансовым показателям.

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

Введение

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

  • ГОСТ 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. Система разработки и постановки продукции на производство. Продукция производственно-технического назначения. Порядок разработки и постановки продукции на производство.