1i7

Подготовка к лабораторным работам с ПЛИС (2) - установка Xilinx ISE WebPack и Digilent Adept2

Apr 11, 2012 03:08

Для разработки программ на Verilog и программирования ими ПЛИС (FPGA) Digilent Basys2 был выбран следующий набор программного обеспечения:

1. Интегрированная среда разработки Xilinx ISE WebPack (WebPack - вариант бесплатной лицензии) - содержит:
- Редактор кода HDL - Verilog и VHDL - с подсветкой и проверкой синтаксиса
- Инструмент синтеза прошивки для ПЛИС Digilent Basys2 (Spartan 3E) - генерирует файл с расширением ".bit" в проекте - это важно
- Симулятор ISim входит в комплект дистрибутива и интегрирован в среду разработки (позволяет сразу просматривать графики сигналов модулей в удобном графическом интерфейсе)
- Встроенные средства программирвоания (заливки) прошивки на ПЛИС Digilent Basys2 отсутствуют (точнее требуют дополнительной настройки, без которой можно обойтись).

2. Инструменты Digilent Adept 2 - позволяют программировать устройства ПЛИС Digilent (в том числе Basys2) файлами с расширением ".bit", сгенерированными средой Xilinx из программы на HDL (Verilog или VHDL - не важно).

Этого набора оказалось достаточно для того, чтобы:
- написать программу на Verilog
- увидеть результат работы вживую на ПЛИС Digilent Basys2
- проверить возможный результат работы на графике сигнала в симуляторе без запуска на живом ПЛИС
- для обеих программ доступны официальные версии для ОС GNU/Linux

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

В частности, как с Xilinx ISE, так и с Digilent Adept2 можно встретить нетривиальные проблемы на относительно свежих дистрибутивах с самыми новыми версиями ядра linux и некоторых системных библиотек. Я запускал их на следующих конфигурациях:

1. OpenSUSE 12.1 64 bit с множеством обновлений пакетов из репозиториев - ядро linux 3.2.9:
- Xilinx ISE установился и запустился, но в дальнейшем вылезли проблемы как с генерацией bit-файла с прошивкой для FPGA-платы, так и с запуском симулятора ISim, которые решить так и не удалось.
- Digilent Adept2 установились, но при запуске приложение djtgcfg сразу некорректно завершает работу с сообщением segmentation fault (решить также не удалось - в службе поддержки сказали, что дело скорее всего в слишком новом ядре).

2. Ubuntu 11.10 64 bit внутри VirtualBox (версия с oracle.com с проприетарным модулем проброса USB внутрь гостевой системы):
- Xilinx ISE установилась без проблем, симулятор и генератор bit-файла заработали после кое-какого исправления в установленном приложении (см ниже).
- Digilent Adept 2 установились и заработали без проблем.

3. Mandriva 2010 32 bit - в рабочей лаборатории, ядро 2.6.31:
- Xilinx ISE установилась без проблем, симулятор и генератор bit-файла заработали после кое-какого исправления в установленном приложении (см ниже).
- Digilent Adept 2 установились и заработали без проблем.

Установка Xilinx ISE WebPack

Скачать дистрибутив: xilinx.com -> downloads: http://www.xilinx.com/support/download/index.htm

Скачать файл файл с ахривом установщика "All Platforms" (содержит платформы Linux32, Linux64 и Windows) - 7.2Гб или "Full Installer for Linux" (содержит платформы Linux32 и Linux64) - 5.8Гб.

Распаковать архив tar:

> tar -xf Xilinx_ISE_DS_13.4_O.87xd.3.0.tar

Запустить установщик:

> cd Xilinx_ISE_DS_13.4_O.87xd.3.0
> ./xsetup

Установщик можно запускать от имени обычного пользователя - прав администратора (рута) не потребуется, если выбрать разрешенный текущему пользователю для записи каталог (например внутри /home) и если не устанавливать драверы USB-кабеля (их устанавливать в любом случае не рекомеднуется - вместо них у нас будет отдельный Digilent Adept).

Начало стандартное:











Для бесплатной версии выбрать редакцию ISE WebPACK:




На экране настроек комплекта установки можно снять все снимаемые галки по желанию; галку "Install Cable Drivers" снять настоятельно рекомендуется:




Выбрать каталог назначения - по умолчанию выбран /opt/Xilinx/13.4 (потребует для записи прав администратора-рута), но подойдет любой другой - например /home/user/Xilinx (будет достаточно прав текущего пользователя):




Удачный финиш









Пробный запуск среды разработки ise

войти в каталог с установленным приложением:
> cd /opt/Xilinx/13.4/ISE_DS

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

для 32хбитной системы:
> . settings32.sh

для 64битной:
> . settings64.sh

вывод на экран будет примерно таким:
. /opt/Xilinx/13.4/ISE_DS/EDK/.settings64.sh /opt/Xilinx/13.4/ISE_DS/EDK
. /opt/Xilinx/13.4/ISE_DS/ISE/.settings64.sh /opt/Xilinx/13.4/ISE_DS/ISE
. /opt/Xilinx/13.4/ISE_DS/PlanAhead/.settings64.sh /opt/Xilinx/13.4/ISE_DS/PlanAhead
. /opt/Xilinx/13.4/ISE_DS/common/.settings64.sh /opt/Xilinx/13.4/ISE_DS/common

после этого можно вводить команду запуска среды разработки ise - ее каталог будет добавлен в PATH предыдущей командой:

> ise &

Рекомендую поместить эти две строки запуска системы:

. /opt/Xilinx/13.4/ISE_DS/settings64.sh
ise

в скрипт start_ise.sh, установить разрешение на выполнение, поместить его в каталог /opt/Xilinx/bin и запускать среду разработки с его помощью.

Получение лицензии

При первом запуске при отсутствии лицензии система попросит ее ей указать в таком диалоге:




При этом если выбрать вариант "Get Free ISE WebPack license" и нажать Next, а потом "Connect Now" или "Save Information", может создаться видимость того, что лицензия получена и программой теперь можно пользоваться, но на самом деле ничего подобного не происходит - при следующем старте система опять попросит файл с лицензией, а нужные возможности работать не будут.

На самом деле, чтобы получить правильную лицензию, нужно зайти на страницу http://www.xilinx.com/getlicense (туда можно попасть со страницы закачки приложения по ссылке License Solution Center > Obtain a license for Free or Evaluation product > Xilinx Product Licensing Site), зарегистрироваться на сайте, ввести необходимую личную информацию в форме запроса личной информации, после чего файл с лицензией Xilinx.lic будет выслан на адрес электронной почты, указанный при регистрации.

Полученный файл Xilinx.lic можно или сразу руками скопировать в домашний каталог в каталог: ~/.Xilinx/Xilinx.lic - при следующем старте приложения запрос лицензии уже не повторится. Или же на экране запроса лицензии перейти на вкладку "Manage Xilinx Licenses", нажать на кнопку "Copy License" и выбрать файл Xilinx.lic в том месте, куда он был сохранен из интерфейса управления электронной почтой.




Первый запуск, проверка работоспособности и решение одной возможной неочевидной проблемы

Для быстрой проверки работоспособности среды ISE (проверим синтез и симуляцию) можно создать новый проект (подробнее процесс создания нового проекта будет разобран в описании деталей 2й лабораторной работы).

Важные параметры целевого устройства:
Product Category: All
Family: Spartain3E
Device: XC3S100E
Package: CP132
Speed: -5




Добавить новый модуль Verilog (см кнопка "New Source" на панели инструметов слева) и поместить в него следующее простое содержимое (самый правый переключатель "рычажок" sw[0] будет включать/выключать самый правый светодиодик ld[0]):

module test1( input [0:0] sw, output [0:0] ld); assign ld[0] = sw[0]; endmodule



Таким же образом добавляем Implementation Constraints File - файл, в котором перечислены имена используемых в программе реальных устройств ввода/вывода на плате (рычажки, лампочки и т.п) - имя можно указать любое - логично назвать его basys2.ucf - добавить две строки для лампочки и рычажка (полную версию ucf-файла с именами всех остальных устройств ввода/вывода на плате можно скачать на странице Digilent Basys2):

NET "ld<0>" LOC = "m5" ;
NET "sw<0>" LOC = "p11";




Дальше пробуем сгенерировать из созданной программы файл прошивки для платы - в дереве проекта нужно выбрать созданный модуль Verilog (test1.v) и в нижней области "Processes" два раза кликнуть на элементе "Generate Programming File". Это займет некоторое время после чего слева от элемента "Generate Programming File" должна появиться зеленая галочка - значит файл прошивки сгенерирован - все нормально.

Замечание: если вместо зеленой галочки слева от "Generate Programming File" появился красный треугольник, нужно открыть внизу окна вкладку Errors, посмотреть что за ошибка и если проблема явно не в самой программе, можно поискать решение проблемы в интернете по коду ошибки или пойти на официальный форум http://forums.xilinx.com/. Решение одной из вероятных проблем, которая была выявлена на тестовых системах, будет приведено ниже.




Тестрируем симулятор - на панельке чуть выше списка файлов выбираем режим Simulation, выбираем мышкой модуль test1.v, на нижней панели Processes два раза кликаем на элемент "Simulate Behavioral Model" (или правой кнопкой в контекстном меню "Run" или "Rerun All").




Если все нормально, через несколько секунд откроется окно с симулятором следующего вида:




Если не все нормально и симулятор не запустился, нужно опять же проверить вкладку Errors, посмотреть сообщение об ошибке и попытаться найти решение в интернете или обратиться на форум http://forums.xilinx.com/.

Решение одной проблемы

В варианте устновки на Mandriva 2010 при попытке запуска симулятора ISim в лог ошибок печатлось сообщение о проблеме запуска gcc, симулятор при этом не запускался.

Вариант решения проблемы был предложен в интернете и в данном случае сработал - нужно было удалить копии системной библиотеки libstdc++ из стандартной поставки Xilinx ISE - они хранятся сразу в двух каталогах:

> rm /opt/Xilinx/13.4/ISE_DS/common/lib/lin/libstdc++.so
> rm /opt/Xilinx/13.4/ISE_DS/common/lib/lin/libstdc++.so.6
> rm /opt/Xilinx/13.4/ISE_DS/common/lib/lin/libstdc++.so.6.0.8

> rm /opt/Xilinx/13.4/ISE_DS/ISE/lib/lin/libstdc++.so
> rm /opt/Xilinx/13.4/ISE_DS/ISE/lib/lin/libstdc++.so.6
> rm /opt/Xilinx/13.4/ISE_DS/ISE/lib/lin/libstdc++.so.6.0.8

Судя по всему симулятор ISim пытается запускать компилятор gcc, установленный в системе, и при этом исполняемый файл gcc не совместим с локальной копией библиотеки libstdc++, которую с собой тащит Xilinx и выставляет для нее наивысший приоритет загрузки в стартовом скрипте. При этом если удалить копию libstdc++ из каталога устновки Xilinx, Xilinx вполне нормально работает с системной библиотекой libstdc++. Такой трюк скорее всего пройдет не на любом дистрибутиве, но в данном случае сработал.

Установка Digilent Adept 2 Linux

Скачать дистрибутив набора инструментов для программирования плат ПЛИС Xilinx Dililent Digilent Adept 2 можно на сайте производителя - регистрация не требуется. Требуется два архива (выбрать архитектуру x86 или x86_64) - Runtime и Utilities, SDK не нужен.



Сначала устанавливаем runtime (потребуются права администратора - предварительно сделать su или запускать install.sh через "sudo ./install.sh") - распаковать архив, запустить скрипт install.sh:

> tar -xzf digilent.adept.runtime_2.9.5-x86_64.tar.gz
> cd digilent.adept.runtime_2.9.5-x86_64/
> ./install.sh

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

Adept Runtime Installer
64-bit operating system detected
In which directory should libraries be installed? [/usr/local/lib64/digilent/adept]
Installing runtime libraries.....
    Checking to see if libdabs.so is already installed....
    Existing installation of libdabs.so found. Checking to see if this version should be installed.
    Version 2.7.1 is currently installed. Version libdabs.so.2.7.1 will not be installed.
    Checking to see if libdaci.so is already installed....
    Existing installation of libdaci.so found. Checking to see if this version should be installed.
    Version 2.7.1 is currently installed. Version libdaci.so.2.7.1 will not be installed.
    Checking to see if libdaio.so is already installed....
    Existing installation of libdaio.so found. Checking to see if this version should be installed.
    Version 2.7.1 is currently installed. Version libdaio.so.2.7.1 will not be installed.
    Checking to see if libdemc.so is already installed....
    Existing installation of libdemc.so found. Checking to see if this version should be installed.
    Version 2.7.1 is currently installed. Version libdemc.so.2.7.1 will not be installed.
    Checking to see if libdepp.so is already installed....
    Existing installation of libdepp.so found. Checking to see if this version should be installed.
    Version 2.7.1 is currently installed. Version libdepp.so.2.7.1 will not be installed.
    Checking to see if libdgio.so is already installed....
    Existing installation of libdgio.so found. Checking to see if this version should be installed.
    Version 2.7.1 is currently installed. Version libdgio.so.2.7.1 will not be installed.
    Checking to see if libdjtg.so is already installed....
    Existing installation of libdjtg.so found. Checking to see if this version should be installed.
    Version 2.8.1 is currently installed. Version libdjtg.so.2.8.1 will not be installed.
    Checking to see if libdmgr.so is already installed....
    Existing installation of libdmgr.so found. Checking to see if this version should be installed.
    Version 2.7.1 is currently installed. Version libdmgr.so.2.7.1 will not be installed.
    Checking to see if libdmgt.so is already installed....
    Existing installation of libdmgt.so found. Checking to see if this version should be installed.
    Version 2.7.1 is currently installed. Version libdmgt.so.2.7.1 will not be installed.
    Checking to see if libdpcomm.so is already installed....
    Existing installation of libdpcomm.so found. Checking to see if this version should be installed.
    Version 2.8.1 is currently installed. Version libdpcomm.so.2.8.1 will not be installed.
    Checking to see if libdpcutil.so is already installed....
    Existing installation of libdpcutil.so found. Checking to see if this version should be installed.
    Version 2.7.1 is currently installed. Version libdpcutil.so.2.7.1 will not be installed.
    Checking to see if libdpio.so is already installed....
    Existing installation of libdpio.so found. Checking to see if this version should be installed.
    Version 2.7.1 is currently installed. Version libdpio.so.2.7.1 will not be installed.
    Checking to see if libdpti.so is already installed....
    Existing installation of libdpti.so found. Checking to see if this version should be installed.
    Version 2.8.1 is currently installed. Version libdpti.so.2.8.1 will not be installed.
    Checking to see if libdspi.so is already installed....
    Existing installation of libdspi.so found. Checking to see if this version should be installed.
    Version 2.8.1 is currently installed. Version libdspi.so.2.8.1 will not be installed.
    Checking to see if libdstm.so is already installed....
    Existing installation of libdstm.so found. Checking to see if this version should be installed.
    Version 2.7.1 is currently installed. Version libdstm.so.2.7.1 will not be installed.
    Checking to see if libdtwi.so is already installed....
    Existing installation of libdtwi.so found. Checking to see if this version should be installed.
    Version 2.7.1 is currently installed. Version libdtwi.so.2.7.1 will not be installed.
    Checking to see if libjtsc.so is already installed....
    Existing installation of libjtsc.so found. Checking to see if this version should be installed.
    Version 2.7.1 is currently installed. Version libjtsc.so.2.7.1 will not be installed.
Successfully installed runtime libraries.
Installing system binaries.....
    installed "/usr/local/sbin/dftdrvdtch"
Successfully installed system binaries in "/usr/local/sbin".
Installing firmware images.....
Successfully installed firmware images in "/usr/local/share/digilent/data/firmware".
Installing JTSC device list.....
Successfully installed JTSC device list "/usr/local/share/digilent/data/jtscdvclist.txt".
Installing CoolRunner support files.....
Successfully installed CoolRunner support files in "/usr/local/share/digilent/data/xpla3".
Installing CoolRunner 2 support files.....
Successfully installed CoolRunner 2 support files in "/usr/local/share/digilent/data/xbr".
Installing Adept Runtime configuration.....
Successfully installed Adept Runtime configuration "/etc/digilent-adept.conf".
Installing USB UDEV rules.....
Successfully installed USB UDEV rules "/etc/udev/rules.d/52-digilent-usb.rules".
Successfully reloaded UDEV rules.
Successfully updated dynamic loader cache.
Successfully installed Adept Runtime.

Потом аналогично устанавливаем utilities - распаковать архив, запустить скрипт install.sh, потребуются права администратора - предварительно сделать su или запускать install.sh через "sudo ./install.sh":

> tar -xzf digilent.adept.utilities_2.1.1-x86_64.tar.gz
> cd digilent.adept.utilities_2.1.1-x86_64/
> ./install.sh

В процессе установки со всеми вопросами можно соглашаться - просто нажимать Enter - вывод выглядит так:

Adept Utilities Installer
64-bit operating system detected
In which directory should binaries be installed? [/usr/local/bin]
In which directory should manuals be installed? [/usr/local/man]
Installing binaries.....
    installed dadutil: "/usr/local/bin/dadutil"
    installed djtgcfg: "/usr/local/bin/djtgcfg"
Successfully installed binaries in "/usr/local/bin"
Installing manuals.....
    installed dadutil.1: "/usr/local/man/man1/dadutil.1"
    installed djtgcfg.1: "/usr/local/man/man1/djtgcfg.1"
Successfully installed manuals in "/usr/local/man"
Successfully installed Adept Utilities

Проверка работоспособности инструментов Digilent Adept 2 с платой Digilent Basys2

Подключить плату Digilent Basys2 через кабель Mini-USB, который идет с ней в комплекте к компьютеру, установить переключатель Power (в левом нижнем углу) в положение ON - рядом должна загореться красная лампочка.

После этого проверить, что инструменты Digilent Adept 2 видят подключенную плату - в терминале набрать команду (программа djtgcfg была только что установлена в систему в составе пакета Utilities на предыдущем шаге):

> djtgcfg enum

Результат тожен быть:

Found 1 device(s)

Device: Basys2
    Product Name:   Digilent Basys2-100
    User Name:      Basys2
    Serial Number:  210155389410




Если "djtgcfg enum" ничего такого не показывает, можно попробовать убедиться, что USB-устройство вообще распознается системой - для этого сразу после подключения платы через USB набрать в терминале команду dmesg:

> dmesg

вывод должен быть примерно таким:

[18650.845060] usb 3-1: new full-speed USB device number 8 using ohci_hcd
[18650.997371] usb 3-1: New USB device found, idVendor=1443, idProduct=0007
[18650.997375] usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[18650.997378] usb 3-1: Product: Digilent Adept USB Device
[18650.997379] usb 3-1: Manufacturer: Digilent

Если устройство таким образом не распознается системой, проблема вероятно в ядре или в устройстве; если устройство распознается системой, но не распознается программой djtgcfg, вероятно проблема в чем-то другом - лучше всего обратиться в службу поддержки или поискать возможное решение в интернете.

Проверка программирования платы синтезированной прошивкой

Если "djtgcfg enum" корректно распознает подключенную плату, можно попробовать запрограммировать ее bit-файлом, который на предыдущем этапе был синтезирован средой Xilinx ISE из тестового проекта.

Для этого в терминале нужно зайти в каталог теспового проекта Xilinx, созданного в предыдущем разделе, и убедиться, что сгенерированный bit-файл на месте:

> cd ~/Documents/hdl/test_basys2/
> ls *.bit
test1.bit

После этого запрограммировать плату этим bit-файлом:

> djtgcfg prog -d Basys2 -i 1 --file ./test1.bit
Erasing PROM. Do not touch your board. This may take a few minutes...
Erase succeeded.
Programming device. Do not touch your board. This may take a few minutes...
Programming succeeded.




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

Замечание: в интернете есть инструкции, которые позволяют интегрировать инструменты Digilent Adept 2 прямо в интерфейс Xilinx ISE, чтобы можно было программировать подключенную плату ПЛИС прямо из среды разработки, не выполняя вручную команды в терминале. Для этого используется специальный плагин для Xilinx ISE от Digilent и интерфейс iMPACT, доступный из меню Xilinx Tools/iMPACT. В данном случае в рамках курса этот механизм не используется во-первых, чтобы не перегружать подготовительный процесс лишними инструкциями (и избежать вероятных дополнительных проблем, которые могут возникнуть), во-вторых, чтобы иметь возможность разделять в голове и на практике общий набор необходимых инструментов по их задачам - не все части цепочки инструментов (tool chain) обязательно интегрированы внутри одной среды разработки - некоторые инструменты можно использовать отдельно от всех остальных или даже заменять один инструмент на другой при этом не заменяя весь набор инструментов разработки целиком.

ПО, плис, цифровая электроника для программистов, verilog

Previous post Next post
Up