8-900-374-94-44
[email protected]
Slide Image
Меню

Vivado для чайников – Учимся программировать под FPGA на SystemVerilog

Учимся программировать под FPGA на SystemVerilog

ПЛИС (Программируемая Логическая Интегральная Схема) — это интегральная схема, предназначенная для построения цифровых цепей из описания на специальном языке программирования. Другими словами, ПЛИС представляет собой чип, как бы содержащий в себе кучу элементов наподобие 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 [PDF]. Но, насколько мне известно, это направление все еще остается сильно экспериментальным.

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: [XSIM 43-3409] 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[0] равен нулю, led[0] равен единице, и наоборот. При этом все изменения происходят по фронту тактового сигнала. Похоже, что программа работает корректно. Ну и на ассертах ничего не свалилось, что как бы намекает.

Заключение

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

  • Если вас интересуют подробности по железу, обратите внимание на даташит Artix-7 [PDF], reference manual к Arty Artix-7 [PDF], а также схему платы [PDF];
  • Книга Цифровая схемотехника и архитектура компьютера (Digital Design and Computer Architecture) — прекрасная книга, в которой, помимо прочего, подробно объясняются языки SystemVerilog и VHDL, а также внутреннее устройство FPGA;
  • Programming FPGAs: Getting Started with Verilog — еще одна неплохая с виду и сравнительно новая (2016 год) книга. Пока я ее только полистал, прочитать не успел;
  • OpenCores.org — каталог всевозможных открытых проектов под FPGA. Для скачивания исходного кода требуется регистрация. Активация аккаунта производится модераторами вручную, поэтому может занимать несколько дней;

А пишите ли вы под FPGA? Если да, то на каком языке и какого производителя предпочитаете?

Дополнение: Также вас могут заинтересовать статьи Головоломка с логическими вентилями и решение на HDL и Знакомимся с iCEstick и полностью открытым ПО для разработки под FPGA.

Метки: FPGA, Электроника.

eax.me

Как справиться с багами в Vivado (Xilinx)

До недавнего времени моя работа с ПЛИС (FPGA, PLD) касалась лишь работы с микросхемами серии MAX7000 Altera (Intel), на тот момент времени мне казалось, что хуже Altera ничего нет из-за изобилия недостатков их ПО (Quartus), например:

Мое мнение об превосходной отвратительности ПО Altera прожило ровно до того момента, пока я не погрузился в чудесный мир от Xilinx с Vivado. Начал я с последней, на тот момент времени (осень 2016),  версией — 2016.2 Сам перенос проекта на другую версию Vivado сопряжен с рядом проблем, о которых я напишу позднее, поэтому до полной реализации устройства я не решился переносить проект и продолжил работу с 2016.2.

Сказать ужасно значит вовсе не описать качества продуктов Xilinx.

1. Документация по софтовым продуктам, чипам, проектированию и т.п. доступна в разных документах с именами UGXXX, где XXX — номер документа. Документация временами и правда UG, многие вещи необходимо искать в многостраничным pdf, в которых на зерно информации тонна воды, документы не всегда актуальны (созданы для более ранних версий Vivado).


2. Сам принцип дизайна, у 12-13 версий Quartus проектирование строилось относительно создания топового модуля с использованием HDL, у Xilinx нужно нарисовать блок дизайн, затем на основе него создать топовый модуль,  причем обязательно нужно создавать процессорное IP — ядро и IP-ядро сброса, подцеплять к минимальной системе источники тактового сигнала (клок), подцеплять DDR оперативку и т.п. Хотя это SoC, поэтому тут все сложнее, чем для более простых семейств ПЛИС, но тем не менее Xilinx  не предусмотрела ситуации когда мне нужно только логические ячейки без всех наворотов (без AXI и т.п.).

3. Работа Vivado: сотни предупреждений на собственные IP-ядра (ядра от Xilinx) при синтезе.

4. Дизайн: ориентирован на IP-ядра, а не на модули. Я не думаю, что на легковесные модули типа таблицы преобразований или инвертора нужно создавать IP-ядро, однако Vivado сильно параноит при использовании модулей.

5. Ресурсы. Очень долго выполняется синтез и имплементация проекта занимающего процентов 10-20% всех ресурсов от Zynq-7020. Например на 4-ядерном E2-6110 (слабенький 1,5 ГГц и TDP всего 15 Вт) полный цикл — 1 час. На топовых процессорах летает (на моем i7 — 1-2 минуты). По ощущениям Quartus на слабых машинах работал в разы быстрее. На аппаратной виртуальной машине, созданной на KVM с 4 ядрами и 5 Гб оперативки может упасть с Out Of Memory Exception (даже жирный своп не помогает от этой болезни).

6. Кривые и забагованные Vivado и Xilinx SDK, которые могут вылететь и закончить работу по абсолютно любым причинам с потерей всех результатов работы (на практике я не решился использовать частичный результат работы синтеза или имплементации при вылете на одном из шагов для продолжения с этого шага).

7. Отсутствие средств для инверсии логических сигналов на блок-дизайне (да мне пришлось создать модуль инвертора с телом в 3 строчки verilog кода)

8. Куча других более мелких причин…

Использование СКВ (системы контроля версий) для работы с проектом 

Наиважнейший момент при разработке на ПЛИС. Отдельную функциональность/фичу я реализую в отдельной ветке и потом уже объединяю с основной ветвью (как правило, это master). На мой взгляд, идеальный выбор это git, для ряда своих проектов я использую github. У меня была ситуация когда по непонятным причинам код в двух ветках оказался полностью нерабочим, я не мог ничего сделать несмотря на массу попыток и относительно простых изменений в дизайне, поэтому пришлось откатиться на ветку, от которой я создал ранее обе эти ветви. Если бы у меня не было СКВ или СКВ с неудобной работой с ветками (CVS, Subversion) я бы попал в неприятное положение (получил бы нерабочий дизайн в trunk) и, возможно, мне пришлось бы создать весь дизайн заново.

Для всех своих проектов я использую следующие правила размещения создаваемых мною файлов:

./src — директория с моими HDL — исходниками, если использовать %ProjectName%.srcs/sources_1/…, то, во-первых, это выглядит ужасно, а, во-вторых, мы получим кашу из генерируемых Vivado файлов и собственных HDL-исходников, сама же Vivado любит на каждый чих делать толпу изменений в файлах. Если вы что-то поменяли в одном из модулей и желаете сделать коммит изменений одного конкретного модуля, то такой подходя позволяет быстрее находить измененные модули в списке измененных файлов .
/tests — файлы тестбенчей на HDL-модули
/constraints — директория для сохранения файлов ограничений (как временных, так и физических), здесь ситуация аналогичная с src
/app — рабочее пространство (воркспэйс) С/С++ Xilinx SDK-проектов (софтина, созданная на базе Eclipse, но с бОльшим числом проблем, чем у Eclipse.
/config — файлы аппаратной конфигурация SoC.
/ip — каталог моих IP-ядер.

Чтобы в коммите не было по 1000+ изменений файлов (я не шучу их реально несколько сотен минимум), нужно правильно настроить .gitignore (список не отслеживаемых файлов/директорий с возможностью задания имен по шаблону). Например, в качестве образца можно использовать такой шаблон: https://github.com/OpticalMeasurementsSystems/2DImageProcessing/blob/master/.gitignore

А вот и сами проблемы

Описания самих проблем будет значительно меньше по объему, чем всей предыстории. Если мне удастся записать видео в момент наступления проблемы и ее решения, то позднее я добавлю ссылку и на видео. Список при обнаружении проблем и решения будет обновляться.

1. Синтез/имплементация падают с генерацией исключения и демонстрацией мессадж бокса — проблема в кэше, для лучшего эффекта стоит удалить директории %ProjectName%.hw, %ProjectName%.cache, %ProjectName%.runs.

2. Синтез/имплементация зависли на длительное время — некоторые проблемы, когда Vivado падает не отображаются в виде мессадж боксом, но они видны в окне Log. Решение сбросить синтез имплементацию (нажать на кнопку Cancel в правом верхнем углу), прибить директорию %ProjectName%.runs.

3. На блок дизайне не обновляется размер некоторых портов, например, Concat IP-ядро. Для этого можно попробовать сначала сбросить Output Products (Reset Output Products при клике правой кнопкой мыши по экземпляру HDL Wrapper’а в иерархии исходных файлов модулей), а затем сгенерировать их заново (Generate Output Products).


4. При запуске Xilinx SDK появляется Splash Screen, потом пропадает, сам SDK не запускается. Нашел 2 причины с проблемами запуска SDK:
       1) Оказалось, что у меня на компьютере было установлено 2 версии Java Development Kit (x32 и x64 параллельно), удалил x32 и SDK стал запускаться без проблем.
       2) Хардкорное решение: удаление папки .metadata, тогда из воркспэйса пропадают все проекты кроме hardware platform, восстановить проекты легко File->Import->General->Existing Project Into Workspace, выбрать галочками необходимые для импорта проекты, нажать ОК.
Видео рения этой проблемы здесь: https://www.youtube.com/watch?v=R_dwpoqsmX4

      3) [Дополнение]: Заметил, что если удалить файл lock в metadata и директорию  eclipse.cdt.ui из плагинов там же в metadata, то можно избежать повторного муторного добавления проектов в воркспэйс (не знаю, работает ли это во всех случаях или нет).

5. Неожиданно перестал собираться BSP, вероятно, в воркспеэйсе появился доп. хардварный проект, а BSP связан с другим железом, для решения этой проблемы удаляем все лишние hardware проекты и обновляем железный проект через правый клик по проекту -> Change Hardware Description File (выбираем экспортированный hdf) и вуаля, после этого можно собрать BSP и приложение.

6. Не открывается репозиторий одним из гит клиентов (GitKraken и т.п.) — это связано с запущенным SDK, который блокирует доступ к скрытой директории .git, решение — закрыть SDK.

Почему все так ужасно?

Можно сказать, что это болезнь всего ПО, заточенного под Embed-проектирование, оно все, как правило, ужасно и изобилует большим количеством багов, а современные тенденции к генерации HDL-кода из ПО для моделирования типа Matlab + SimuLink приводят к разрастанию самого кода ввиду неоптимальных подходов, плохой поддержке этого кода, к созданию «одноразового (write only)» кода и т.п., уменьшают порог вхождения и увеличивают степень энтропии создаваемого продукта людьми далекими от какого-либо понимания принципов работы цифровой электроники и программирования.

easyhwsw.blogspot.com

Проектирование на FPGA в Vivado Design Suite #1

Описание курса

Этот курс является вводным тренингом по проектированию в среде Vivado, позволяющим понять маршрут проектирования на FPGA. Он поможет начинающим разработчикам ознакомиться с основами проектирования на FPGA: созданием проекта в Vivado Design Suite с исходными файлами, моделированием, назначением контактов ввода/вывода, наложением базовых временных ограничений, синтезом, реализацией и отладкой проекта и, наконец, созданием и загрузкой файла прошивки в отладочную плату.

Продолжительность

3 дня

Кому будет полезен курс?

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

Что нужно знать заранее?

Иметь базовые знания по языку VHDL или Verilog
Иметь опыт разработки цифровых систем

Программное обеспечение

Vivado Design Suite

Аппаратные ресурсы

Архитектура: UltraScale и 7 серия
Отладочная плата: Kintex UltraScale FPGA KCU105 или Kintex-7 FPGA KC705

По завершении курса вы будете иметь все необходимые навыки для того чтобы:

С помощью мастера создания проекта (Project Wizard) уметь разработать Vivado IDE проект
Описывать поддерживаемые маршруты проектирования Vivado IDE
Создавать отчеты DRC для обнаружения ошибок на раннем этапе проектирования
Использовать Vivado IDE I/O Planning для распределения контактов ввода/вывода
Синтезировать и реализовать HDL проект
Учитывать временные ограничения, накладываемые на тактовый сигнал и контакты ввода/вывода и выполнять временной статический анализ
Уметь описать процесс «baselining», необходимый для достижения требуемых параметров быстродействия
Использовать схемотехнический и иерархический средства просмотра для анализа проекта
Применять логический анализатор Vivado и маршруты отладки для доработки проекта

Структура курса

День 1
Введение в архитектуру FPGA, 3D IC, SoC — Введение в архитектуру FPGA, технологию SSI, и архитектуру SoC (Лекция)
Введение в методологию проектирования UltraFast, — методические рекомендации и контрольный лист UltraFast (Лекция, Демонстрация)
Введение в маршруты проектирования Vivado – Введение в проектный и непроектный режимы (Лекция)
Маршрут проектирования в Vivado Designe Suit в проектном режиме – создание проекта, добавление файлов в проект, обзор графического интерфейса Vivado IDE, моделирование проекта (Лекция, Лабораторная работа)
Введение в правила описания цифровых схем – рассматриваются базовые методические рекомендации по созданию цифровых схем в FPGA (Лекция)
Синтез и реализация – задание временных ограничений в соответствии со сценарием проекта, синтез и реализация. Необязательная опция: Генерация bit-файла и его загрузка в отладочную плату (Лекция, Лабораторная работа)
Введение в конфигурирование FPGA – Описание процесса конфигурирования FPGA
Правила проверки в Vivado корректности проекта – запуск отчета DRC до синтеза для выявления ошибок в проекте на ранней стадии. Устранение нарушений DRC (Лабораторная работа)
Мастер задания временных ограничений – использование мастера задания временных ограничений для определения недостающих временных ограничений в проекте (Лекция, Лабораторная работа)

День 2
Редактор временных ограничений – введение в редактор временных ограничений (Лабораторная работа)
Отчет по тактовым цепям – использование отчета report_clock_networks для просмотра первичных и сгенерированных тактовых сигналов (Лекция, Демонстрация)
Ограничения по тактовым сигналам (основные сведения) – задание ограничений для тактовых сигналов и выполнение временного статического анализа (Лекция, Лабораторная работа, Демонстрация)
Распределение контактов ввода/вывода в Vivado Design Suite – использование инструмента I/O Planning для привязки портов ввода/вывода к контактам микросхемы и определения электрических параметров (Лекция, Лабораторная работа)
Временные ограничения по входам/выходам и виртуальные тактовые сигналы – задание временных ограничений для интерфейсов ввода/вывода и выполнение статического временного анализа (Лекция, Лабораторная работа)
Основные сведения по анализу проекта в Vivado — использование различных средств для анализа проекта в среде разработки Vivado (Лекция, Демонстрация)
Анализ параметров Setup и Hold Time – описание временного анализа по Setup и Hold (Лекция)
Введение во временные отчеты в среде разработки Vivado – генерирование и использование Vivado отчетов для выявления маршрутов, не удовлетворяющих требованиям по временным ограничениям (Лекция, Демонстрация)
Маршрут проектирования с IP – Задание параметров IP, интеграция IP в проект, проверка иерархии проекта (Лекция, Лабораторная работа, Демонстрация)

День 3
Таблица оценки потребляемой мощности для Xilinx – оценка количества логических ресурсов и частоты работы в проекте, оценка потребляемой мощности с помощью Xilinx Power Estimator (Лекция, Лабораторная работа)
Введение в логический анализатор Vivado – Рассмотрение логического анализатора Vivado для отладки проекта (Лекция, Демонстрация)
Интеграция логического анализатора в HDL код – Рассматриваются маршрут интеграции IP VIO (виртуальные входы/выходы) в HDL код и контроль поведения с помощью логического анализатора Vivado (Лекция, Лабораторная работа)
Основные сведения по запуску логического анализатора – рассматриваются базовые возможности по запуску логического анализатора Vivado (Лекция)
Интеграция логического анализатора в Netlist — рассматриваются маршрут интеграции IP ILA (интегрированный логический анализатор) в Netlist проекта и использование средств отладки для устранения типичных проблем (Лекция, Лабораторная работа)
Модули отладки – изучение использования IP Debug Hub для соединения модулей отладки VIO и ILA в проекте (Лекция)
Введение в среду Tcl – основные сведения по Tcl (Лекция, Лабораторная работа)
Использование Tcl команд в режиме проекта в Vivado Design Suite – рассмотрение того, как исполняются Tcl команды в проектном режиме Vivado DS (Лекция, Демонстрация)
Синтаксис и структура Tcl — Изучаются базовый синтаксис и структура Tcl (Лекция)

ЗАПИСАТЬСЯ НА ОБУЧЕНИЕ

plis2.ru

Эмулятор БК-0010 на FPGA / Habr

Большинство любительских проектов FPGA, опубликованных на Хабре, сделаны на оборудовании фирмы Altera (теперь Intel). Давайте для разнообразия посмотрим, что можно сделать на продукции его основного конкурента – Xilinx. Мы возьмём и сделаем достаточно большой и сложный проект, в процессе реализации которого нам понадобится:

  • Выбрать Development board и необходимые PMOD к ней
  • Определиться с дизайном проекта, выбрать clock domains и правила перехода между ними
  • Освоить основные функции Xilinx Vivado – создание проекта, работу с блочными схемами, компиляцию, симуляцию, отладку
  • Сделать несколько IP с интерфейсом AXI4
  • Поработать с внешними устройствами
  • Сделать с нуля собственный процессор с контроллером шины и обработкой прерываний
  • Написать модуль для верификации
  • Наконец собрать всё вместе и получить реализацию на FPGA легендарного (как минимум для тех, кто тогда жил) компьютера середины 80-х – БК-0010

Планируется цикл статей, в которых всё это будет подробно описано, сегодня первая из них. Проект написан на System Verilog с небольшими вставками Verilog и VHDL в тех местах, где это необходимо. От читателя требуется понимание базовых принципов языков Verilog/VHDL на уровне книжки Харрис&Харрис.

Пара слов о БК-0010


БК-0010 появился в 1986 году и представлял собой одноплатный компьютер на базе процессора КР1801ВМ1 (система команд DEC PDP-11). По мере повествования нам придётся рассмотреть кое-какие его архитектурные особенности, пока же ограничимся теми характеристиками компьютера, которые нам будут важны для выбора платы и другого оборудования:
Характеристика Значение
CPU 3 MHz, количество транзисторов около 18000 (n-МОП)
RAM 32 KB
ROM 8-32 KB

Устройства вывода
  • Бытовой телевизор, 512×256 в черно-белом режиме либо 256×256 в цветном (каждая точка могла иметь 4 цвета независимо от других)
  • Звуковая пищалка (вывод 1 бит), совмещенная с выводом на магнитофон

Устройства ввода
  • Клавиатура с расположением клавиш ЙЦУКЕН (JCUKEN)

Выбор платы


Какую плату и на каком кристалле взять для проекта? В случае с кристаллом под наши требования можно выбирать из Artix-7 и Zynq-7000, в обоих случаях будет достаточно самого маленького кристалла. Платы для разработки — кое-что делает сама Xilinx, это платы с весьма богатой начинкой, но с четырехзначным ценником. Есть европейская компания Trenz Electronic GmbH, но я бы сказал, что их продукция больше ориентирована на создание готовых устройств. На мой взгляд, наиболее подходящие платы с чипами Xilinx для любительского использования делает компания Digilent. На Artix-7 это Basys-3, Nexus 4 DDR и Nexus Video, на Zynq-7000 это Zybo и ZedBoard.

Для себя я остановился на Zybo. Эта плата одна из самых дешевых ($189, а если вы убедите Digilent, что удовлетворяете требованиям Academic Discount Program, то $125), у неё есть выходы как VGA так и HDMI, много портов PMOD, 512MB RAM. Да, эта плата основана на SoC, а возможности процессорного ядра я в этом проекте использовать не планирую. Но никто не мешает использовать эту плату просто как FPGA. У платы отсутствуют отладочные семисегментные индикаторы и нет возможности подключения PS2 либо USB клавиатуры к FPGA-части (в отличие от более дорогой Nexus 4 DDR), но разница в цене между этими двумя платами существенно больше, чем стоимость модулей PMOD, на которых эту функциональность можно получить.

Итак, в сухом остатке, для проекта нам понадобятся следующее оборудование:

Zybo


PMOD-SSD – два семисегментных индикатора для отладки

PMOD-PS2 — для подключения PS/2 клавиатуры. Я такой готовый купить забыл, так что пришлось сделать его самому. Заодно поставил туда DC-DC преобразователь 3.3->5В так как имеющаяся у меня клавиатура от 3.3В не заработала.

Я не хочу использовать устаревший PS/2, а хочу подключить клавиатуру по USB.

Можно и так, но есть некоторые сложности.
На Zybo есть USB Host, но он подключен к PS-части. Если планируется PL-проект, то потребуется подключить к плате отдельный USB host.
Полная спецификация протокола USB (с поддержкой HOST и всех типов устройств) очень сложна для реализации на FPGA, к тому же интерфейс USB довольно высокочастотен. Разумным компромиссом является подключение внешнего конвертера физического уровня например по интерфейсу ULPI, для работы с ULPI можно найти готовый IP-модуль на Verilog/VHDL. Можно также подобрать другую плату, на которой уже есть USB host для работы с клавиатурами и мышками (у Digilent это, например, Nexus 4 DDR).


Начало работы с Xilinx Vivado


Проекты для Xilinx (в данном случае речь о 7-й серии чипов) создаются в Xilinx Vivado. Поскольку мы не планируем использовать High-end чипы (UltraSCALE/UltraSCALE+), для наших целей подойдёт бесплатная Xilinx Vivado WebPACK edition. Регистрируемся на xilinx.com, скачиваем её и устанавливаем.Системные требования

В основном это RAM. Для Zybo с трудом, но хватает 8GB, для более мощных чипов надо больше.


Для работы с Zybo нам потребуется скачать и добавить в Vivado пакет Vivado Board Files, содержащий описание интерфейсов, имеющихся на плате, частотные характеристики чипа и тому подобное. Скачиваем его с сайта Digilent (а точнее с GitHub) и добавляем в Vivado.

Также понадобится файл ресурсов, в котором описано соответствие контактов чипа номерам выводов разъёмов платы. Находим нашу плату, в данном случае Zybo на GitHub/Digilent и скачиваем.

И напоследок сделаем первый проект на Verilog. Этот проект нам в дальнейшем потребуется для создания контроллера клавиатуры БК-0010.

У меня есть вот такая раритетная клавиатура Mitsumi с интерфейсом PS/2:

ishevchuk в своём проекте использовал вот этот контроллер для работы с PS/2 клавиатурой.

Возьмём его и мы и слегка переделаем. Контроллер всем хорош кроме того, что в нём жестко зашита тактовая частота 50 MHz. Такой частоты у нас в проекте БК-0010 не будет, кроме того, хардкодить такие вещи нехорошо. Создаём новый проект в Vivado, скачиваем файлы контроллера и задаём тактовую частоту в виде параметра:

Заголовок модуля с формулами
module Altera_UP_PS2_Command_Out #
(
parameter CLOCK = 100,

// Timing info for initiating Host-to-Device communication 
//   when using a 50MHz system clock
parameter	CLOCK_CYCLES_FOR_101US		= (CLOCK * 101),  // 5050;
parameter	NUMBER_OF_BITS_FOR_101US	= $clog2(CLOCK_CYCLES_FOR_101US),
parameter	COUNTER_INCREMENT_FOR_101US	= 1,

// Timing info for start of transmission error 
//   when using a 50MHz system clock
parameter	CLOCK_CYCLES_FOR_15MS		= (CLOCK * 15000),  // 750000;
parameter	NUMBER_OF_BITS_FOR_15MS		= $clog2(CLOCK_CYCLES_FOR_15MS),
parameter	COUNTER_INCREMENT_FOR_15MS	= 1,

// Timing info for sending data error 
//   when using a 50MHz system clock
parameter	CLOCK_CYCLES_FOR_2MS		= (CLOCK * 2000), // 100000;
parameter	NUMBER_OF_BITS_FOR_2MS		= $clog2(CLOCK_CYCLES_FOR_2MS),
parameter	COUNTER_INCREMENT_FOR_2MS	= 1
)


Некоторые модули в составе проекта в своём названии имеют слово Altera. На Xilinx это им работать не мешает, из уважения к разработчику я переименовывать их не стал.

Кроме того, изменим полярность сигнала RESET, у стандартных IP Xilinx сброс происходит при подаче 0 на вход RESET.

Для удобства работы оформим проект в виде IP. В Vivado есть встроенный инструмент, который это делает, он вызывается через Tools->Create and Package new IP. Входы и выходы головного файла проекта станут входами и выходами нашего нового IP. Vivado пытается сама определить тип портов, анализируя их название. В данном случае нам придётся вмешаться в этот процесс и исключить порт PS2_CLK из числа Clock and Reset Signals, чтобы уменьшить число Warnings при дальнейшей сборке проекта. PS2_CLK нельзя назвать полноценным синхросигналом, поскольку его частота лишь несколько десятков килогерц.

Инструмент весьма гибкий, мы можем не только задавать тип портов, но и управлять различными параметрами, задавать опции условной компиляции, менять внешний вид IP в зависимости от параметров. В данном проекте у нас есть два параметра — Initialize Mouse (выбор устройства — клавиатура или мышь) и Clock (тактовая частота в мегагерцах). Вопросы условной компиляции мы рассмотрим позже, когда будем писать модуль для работы с шиной MPI.

Подключаем Git к Vivado


Напоследок (а вообще это конечно нужно делать сразу после создания нового проекта) прикрутим к Vivado Git. Исходные тексты на Verilog/VHDL, constraints, описания компонент, описания интерфейсов IP-модулей, сам проект и прочее представляют собой текстовые файлы, с ними всё просто. Но есть одна сложность — в файле проекта (он в формате XML) имеются абсолютные пути к исходным текстам, это может вызвать некоторые проблемы при переносе проекта между машинами. Одно из решений — воспользоваться готовым инструментом (написанным инженерами Xilinx), этот инструмент на основе проекта Vivado создаёт переносимый tcl-скрипт, который при запуске на целевой машине создаёт там проект, идентичный оригинальному. К этому инструменту был дописан враппер, автоматизирующий создание tcl-скрипта, заполняющий файл .gitignore, осуществляющий обработку ошибок ввода и тому подобное. После установки этого враппера появляется возможность работать с Git прямо из tcl-консоли Vivado.

Заливаем проект в железо


Проверим теперь, как это всё работает. Закроем проект PS2 контроллера и создадим тестовый проект, принимающий скан-коды с клавиатуры и выдающий их на семисегментный индикатор. В этом проекте мы не напишем ни строчки Verilog-кода, а будем собирать схему из готовых IP-модулей.

В IP Integrator создаём новый блочный дизайн, добавляем в него IP и соединяем их, пока не получится вот такая схема:

Здесь были использованы следующие IP:

Clocking wizard Модуль создания синхросигналов. Предназначен для создания синхросигналов (до 6 штук) с различной частотой и скважностью (в данном случае одного меандра 100MHz). На вход ему подаётся системный клок (125 MHz). Использует ресурс PLL, выходные синхросигналы распространяются через соответствующие ресурсы кристалла. Стандартный модуль Xilinx.

Binary Counter. Настраиваемый делитель, в данном случае 8-битный. Стандартный модуль Xilinx.

Slice. Делитель шины, в данном случае вытаскивает старший бит из Binary Counter, образуя таким образом делитель на 256. Стандартный модуль Xilinx.

Вообще с синхросигналом такие вещи делать нельзя, нужно брать ещё один выход из Clocking Wizard и корректно настраивать Clock Domain Crossing. Но в данном случае для работы SSD_pmod годится любая частота от сотни герц до сотен килогерц, не синхронизированная вообще ни с чем.

SSD_pmod. Модуль, выводящий байт в шестнадцатеричном виде на двухзначный семисегментный индикатор Digilent PMOD-SSD. Байт поступает на вход модуля. Исходный текст модуль выложен на GitHub.

PMOD_GPIO. Модуль, описывающий работу с сигналами в разъёмах PMOD. В зависимости от типа модуля, подключенного к разъёму, используются различные протоколы — GPIO, SPI, I2C, UART. Я взял за основу модуль написанный Digilent для поддержки своих PMOD, и слегка изменил его. Исходный текст модуль выложен на GitHub.

Модуль Constant. Это просто константа 0 или 1. Мы не используем в данном случае передачу в сторону клавиатуры, так что на входы send_command и the_command подан 0, а на вход reset подана 1 (в окончательном проекте у нас будет полноценная схема сброса).

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

У нас используются следующие внешние соединения:

sys_clock Синхросигнал 125MHz от внешнего генератора на плате (пин L16). Используется для запуска PLL.
PMOD_C К порту C подключена клавиатура, используются биты JC2 (W15) и JC4 (T10)
PMOD_D К порту D подключен семисегментный индикатор, используются все 8 бит.

Сохраняем блочный дизайн, генерируем враппер на Verilog (Generate HDL Wrapper…), компилируем проект (Generate Bitstream), заливаем его через JTAG в плату (Open Hardware Manager, Open Target, Program Device). Теперь при нажатии кнопок на клавиатуре их скан-коды будут выводиться на семисегментном индикаторе:


8’h5E — это ‘-‘

Ссылки


Для желающих попробовать всё это на железе, все исходники выложены на Github:

→ Враппер для работы с Git из Vivado

Кроме этого потребуется установить:

→ Описание интерфейсов и плат Digilent, в том числе Zybo
→ Раз и два — вспомогательные модули для вывода шестнадцатеричных чисел на семисегментный индикатор
→ Контроллер PS2-клавиатуры
→ Модуль в котором всё это соединяется вместе

Для установки модуля необходимо скачать его с Github и запустить .tcl файл, лежащий в корне, из под Vivado

habr.com

Vivado Design Suite для пользователей ISE Project Navigator

Описание курса

Данный курс является введением в среду разработки Vivado Design Suite. Он предназначен для опытных пользователей ПО ISE, которые хотели бы в полной мере использовать возможности Vivado Design Suite. На занятиях слушатели получат представление о проектах Vivado Design Suite, маршруте проектирования, проектных ограничениях, и базовых временных отчетах.

Продолжительность

2 дня

Кому будет полезен курс?

Разработчикам проектов на FPGA, использующим ПО Xilinx ISE Design Suite.

Что нужно знать заранее?

Базовое владение языком VHDL или Verilog
Иметь опыт цифрового проектирования

Программное обеспечение

Vivado Design Suite

Аппаратные ресурсы

Архитектура: UltraScale и FPGA 7 серии
Отладочная плата: Kintex UltraScale FPGA KCU105 или плата Kintex-7 FPGA KC705
*В данном курсе основное внимание уделяется архитектуре FPGA серий UltraScale и 7

По завершении курса вы будете иметь все необходимые навыки для того чтобы:

С помощью Project Manager запускать новый проект
Правильно выбирать маршруты проектирования Vivado IDE (проектный и непроектный режимы)
Определять наборы файлов (HDL, XDC, simulation)
Уметь анализировать проект с помощью возможности перекрёстного выбора объектов, Schematic viewer, и Hierarchical viewer
Синтезировать и реализовывать HDL проект
Уметь применять системный подход для введения временных ограничений и достижения требуемых временных характеристик
Использовать доступные отчеты по синтезу и имплементации для анализа проекта (использование аппаратных ресурсов, временные характеристики, энергопотребление и т.п.)
Уметь использовать базовые Tcl отчеты (check_timing, report_clock_interaction, report_clock_networks и report_timing_summary)

Структура курса

День 1
Методология проектирования UltraFast — Планирование: Введение в методические рекомендации по планированию и контрольный список методологии проектирования UltraFast
Методология проектирования UltraFast – Создание и анализ проекта: Обзор методических рекомендаций по созданию и анализу проекта
Технологии кодирования на HDL: Основные рекомендации по цифровому кодированию проектов на FPGA
Сброс: Изучение влияния асинхронных сбросов в проекте
Дублирование регистров: Использование дублирования регистров для уменьшения количества высоконагруженных цепей в проекте
Технология синхронного проектирования: Рассмотрение технологии синхронного проектирования, используемой в проектах на FPGA
Введение в Vivado Design Suite: Ознакомление с Vivado Design Suite
Введение в режимы проектирования: Ознакомление с режимами проектирования: проектный и непроектный режимы
Маршрут проектирования в Vivado Designe Suit в проектном режиме: Создание проекта, добавление файлов в проект, обзор графического интерфейса Vivado IDE, моделирование проекта
Синтез и имплементация: Задание временных ограничений в соответствии со сценарием проекта, синтез и реализация
Базовый анализ проекта в Vivado IDE: Использование различных средств для анализа проекта в среде разработки Vivado
Распределение контактов ввода/вывода в Vivado Design Suite: Использование инструмента I/O Planning для привязки портов ввода/вывода к контактам микросхемы и определения электрических параметров

День 2
Маршрут проектирования с IP: Задание параметров IP, интеграция IP в проект, проверка иерархии проекта
Проектирование с IP интегратором: Использование Vivado IP интегратора для создания подсистемы uart_led
Маршрут проектирования в Vivado Designe Suit в непроектном режиме: Создание проекта
Введение в среду Tcl Оновные сведения по Tcl (командному языку инструментов)
Анализ проекта с использованием Tcl команд: Рассмотрение процесса анализа проекта с использованием Tcl команд
Написание скриптов для проектного режима среды проектирования Vivado: Использование Tcl команд в проектном режиме
Написание скриптов для непроектного режима среды проектирования Vivado: Использование Tcl команд в непроектном режиме

ЗАПИСАТЬСЯ НА ОБУЧЕНИЕ

plis2.ru

Продвинутый курс по XDC и статическому временному анализу в Vivado Design Suite для пользователей ISE

Описание курса

Данный курс поможет опытным пользователям ПО ISE овладеть работой в среде проектирования Vivado Design Suite. На занятиях студенты изучат механизмы работы с исходными базами данных и статического временного анализа (STA). В программу курса включены такие аспекты, как применение Tcl для навигации по проекту, использование проектных ограничений формата XDC и создание временных отчетов. Также изучаются вопросы определения временных ограничений для входных/выходных регистров в режиме SDR, DDR, интерфейсов source-synchronous и system-synchronous.Помимо этого, слушатели научатся задавать path-specific, false path, и min/max временные ограничения, а также узнают о приоритетах временных ограничений. На занятиях изучаются средства создания скриптов в Vivado Design Suite и демонстрируется использование скриптов в проектном режиме.

Кроме того, студенты смогут освоить наиболее современные приёмы проектирования на FPGA и получат опыт, гарантирующий успешную работу в Vivado Design Suite. Полученные на занятиях навыки позволят повысить производительность и надежность разрабатываемых проектов. В этом аспекте рассматриваются такие вопросы, как системный перезапуск проекта, цепи синхронизации, оптимальное кодирование на HDL и технологии оптимизации временных параметров в среде разработки Vivado. Информация этого курса входит в состав темы под общим названием “Методология проектирования UltraFast”. Также приводится контрольный список методологии проектирования UltraFast.

Продолжительность

3 дня

Кому будет полезен курс?

Действующим разработчикам на Xilinx ISE Design Suite

Что нужно знать заранее?

Настоятельно рекомендуется пройти обучение по курсу «Vivado для пользователей ISE Project Navigator»
Владение HDL (VHDL или Verilog)
Опыт цифрового проектирования

Программное обеспечение

Vivado Design Suite

Аппаратные ресурсы

Архитектура: UltraScale и FPGA 7 серии
*В данном курсе основное внимание уделяется архитектуре FPGA серий UltraScale и 7

По завершении курса вы будете иметь все необходимые навыки для того чтобы:

Используя списки фильтров объектов, осуществить доступ к исходным объектам из базы данных проекта
С помощью параметров setup и hold проверить и описать компоненты временного отчета
Задавать соответствующие ограничения по входу и выходу и создавать временные отчеты, включающие в себя входные и выходные маршруты
Понимать, как вариации процесса производства влияют на временной анализ, а также иметь представление о том, каким образом min/max информация временного анализа отображается во временном отчете
Описывать все доступные опции команд: report_timing и report_timing_summary
Применять и модифицировать в проекте соответствующие временные ограничения на входные/выходные пути для интерфейсов source-synchronous и system-synchronous
Осуществлять анализ временного отчета для определения центрального положения фронта тактового сигнала в окне данных
Создавать скрипты для маршрутов в проектном и непроектном режимах
Описать контрольный список методологии проектирования UltraFast
Определить ключевые области оптимизации вашего проекта для обеспечения его соответствия поставленным задачам и реализации требуемых параметров функционирования
Определять проект с корректно заданными временными ограничениями
Оптимизировать HDL код для эффективного использования ресурсов FPGA и обеспечения требований к параметрам быстродействия
Уметь реализовывать функцию сброса, без ухудшения надежности и снижения быстродействия проекта
Создавать более надежный проект, менее уязвимый в части метастабильности и в последующем требующий меньше времени на отладку
Уметь использовать технологию достижения требуемых временных параметров в среде проектирования Vivado Design Suite
На базе изученного материала и опыта, полученного в процессе выполнения лабораторных работ, эффективно использовать приёмы методологии проектирования UltraFast

Структура курса

День 1
Методология проектирования: UltraFast: Обзор — введение в методологию проектирования UltraFast
Методология проектирования: UltraFast: Современные технологии – методические рекомендации по использованию современных технологий
Мастер задания временных ограничений: использование мастера задания временных ограничений для определения недостающих временных ограничений в проекте
Редактор временных ограничений – обзор средств редактирования временных ограничений
Обзор временных отчётов в среде разработки Vivado – генерация и использование отчётов для выявления путей, не удовлетворяющих требованиям по временным ограничениям
Ограничения по тактовым сигналам (основные сведения) – задание ограничений для тактовых сигналов и выполнение временного анализа
Отчёт о взаимодействии тактовых доменов – Применение отчета report_clock_interaction для определения взаимодействия между тактовыми доменами
Отчёт по тактовым цепям – использование отчёта report_clock_networks для просмотра первичных и сгенерированных тактовых сигналов

День 2
Временные ограничения по входам/выходам и виртуальные тактовые сигналы – задание временных ограничений для интерфейсов ввода/вывода и выполнение статического временного анализа
Отчёт Timing Summary: Использование отчета timing_summary_report после имплементации для определения параметров быстродействия
Анализ параметров Setup и Hold Time – описание временного анализа по Setup и Hold
Сгенерированные тактовые сигналы — Использование отчета report_clock_networks для выявления наличия сгенерированных тактовых сигналов
Ограничения Clock Group – Применение ограничения set_clock_groups для асинхронных тактовых доменов
Основные сведения по Timing Exception – ограничения Timing Exception и использование их для тонкой настройки временных параметров проекта
Цепи синхронизации – Применение цепей синхронизации для передачи сигналов между тактовыми доменами
Отчёт Report Datasheet – Использование отчета report_datasheet для определения оптимального запаса времени по Setup и Hold для входных/выходных интерфейсов

День 3
Работа с временными ограничениями «baselining» — Рекомендуемый Xilinx порядок работы с процедурами baselining для последовательного достижения требуемых временных характеристик проекта
Конвейеризация – Использование конвейеризации для повышения быстродействия проекта
Сценарии для входных/выходных временных параметров – Обзор различных сценариев для входных/выходных временных параметров, таких как интерфейсы source-synchronous и system-synchronous, прямой и MMCM захват, выравнивание данных по центру или фронту
Source-Synchronous интерфейс – Применение ограничений на задержу по входу/выходу и выполнение статического временного анализа для source-synchronous, (DDR) интерфейса
System-Synchronous интерфейс — Применение ограничений на задержу по входу/выходу и выполнение статического временного анализа для входного system-synchronous интерфейса
Приоритет временных ограничений – Определение приоритета временных ограничений
Анализ «что если?» — Разъяснение процесса временного анализа при использовании мультиплексора тактовых частот
Введение в Floorplanning — Введение в Floorplanning и использование Pblock при Floorplanning Оптимизация на физическом уровне – применение оптимизации на физическом уровне для достижения требуемых временных параметров

ЗАПИСАТЬСЯ НА ОБУЧЕНИЕ

plis2.ru

Новая версия Xilin Vivado 2017.4 — 9 Января 2018

Доступна для скачивания новая версия Vivado® Design Suite 2017.4.

Что нового?

I. Model Composer

В релиз Vivado® Design Suite 2017.4 включён новый инструмент, который получил название Model Composer, построенный на основе абстрактных моделей (блоков). Model Composer работает на основе MathWorks Simulink и обладает следующими возможностями:

 

1. Высокий уровень абстракции: Пользователь имеет в своём распоряжении специализированные блоки, предназначенные для работы с векторами и матрицами. Пользователь может создавать проекты (алгоритмы), которые относятся к т.н. frame-based алгоритмам (поточные, кадровые), сохраняя время, затрачиваемое на имплементацию алгоритма в FPGA.

2. Специализированная библиотека блоков, оптимизированная по производительности: Библиотеки Computer Vision (xfOpenCV), Math, Linear Algebra теперь доступны в качестве блоков, что позволят выполнять разработку и моделирование алгоритма в графической среде Simulink

3. Импорт пользовательских блоков: Пользователь может импортировать свои собственные разработки, написанные на HLS C/C++ в виде пользовательских блоков, что позволяет достигнуть гибкости проектирования пользовательских алгоритмов

4. Автоматическая генерация кода: Автоматически генерирование HDL синтезируемого описания оптимизировано с учётом микроархитектуры целевой FPGA. Пользователь может синтезировать разработанный алгоритм в одном из трех вариантов экспорта проекта: Package RTL IP, System Generator for DSP и Vivado HLS.

5. Поддерживаемые версии MATLAB: R2016a, R2016b, R2017a and R2017b.

Больше информации можно найти на странице Model Composer: www.xilinx.com/modelcomposer

 

II. Добавлена поддержка следующих устройств:

  • Zynq ® UltraScale+™ MPSoC:
    • XCZU4EV/CG/EG (-1, -2)
    • XCZU19EG (-1L, 2L)
    • XCZU7EV/CG/EG (-1,-2)
    • XCZU5EV/CG/EG (-1, 2)
  • Kintex ® UltraScale+:
    • XCKU5P (-1L, -2L)
    • XCKU15P (-1L,-2L)
  • Artix ® -7 and Spartan ® -7
    • XC7S25 (-1, -2, -1LI)
    • XC7A25T(-1,-2, -2LE (1.0V))
    • XC7A12T(-1, 2, -2LE (1.0V))

 

III. Известные ограничения и ошибки

Список известных ошибок и ограничений Vivado ® Design Suite доступен на странице Answer Record 68923

 

IV. Список поддерживаемых операционных систем:

  • Microsoft Windows Support
    • Windows 7 SP1 Professional (64-bit), English/Japanese.
    • Windows 10 Professional Creators Update (64-bit), English/Japanese.
  • Linux Support
    • Red Hat Enterprise Workstation/Server 7.2 and 7.3 (64-bit)
    • Red Hat Enterprise Workstation 6.6, 6.7, 6.8, and 6.9 (64-bit)
    • SUSE Linux Enterprise 11.4 and 12.2 (64-bit)
    • Cent OS 7.2 and 7.3 (64-bit)
    • Cent OS 6.7, 6.8, and 6.9 (64-bit)
    • Ubuntu Linux 16.04.2 LTS (64-bit)

Больше информации по текущему релизу Вы можете найти на странице Vivado и в UG973 Release Notes, Installation, and Licensing

Остались вопросы?

Оставьте их в комментариях на www.fpga-systems.ru

fpga-systems.ru

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *