Как начать с ПЛИС Xilinx, для чайников.

Как начать с ПЛИС Xilinx, для чайников.

Статейка для тех, кто хоть немного понимает что такое ПЛИС, но совсем не понимает как его готовить, так как абсолютно не знаком с языками Verilog или VHDL (хотя для других тоже может бить полезна). Описание создания маленькой прошивочки для ПЛИС на основе программных пакетов MATLAB-Simulink R2008b (далее – Simulink) с использованием библиотечных элементов Xilinx экспортируемых из программного пакета Xilinx ISE 11 (далее – Xilinx 11). Для начала необходимо разжиться данными программами (не так уж и сложно найти;) описывать я это не буду, все по стандарту), После установки обоих пакетов необходимо для начала назначить какой MATLAB используется (Xilinx ISE 11 поддерживает 2008-й MATLAB, версия 11.2 2009-й, более поздние версии и 2010й, но функциональных различий по сути нету).

1. Создание модели в MATLAB-Simulink.

Для создания файла конфигурации устройства, работающего по формуле c=|a+b|
на базе ПЛИС Xilinx Virtex5 xc5vlx50 создаем новую модель в программе Матлаб (Рис. 1).
Рисунок 1
После создания модели открываем Библиотеку элементов Simulink (Рис. 2).
Рисунок 2
Для создания проекта любой модели Simulink для ПЛИС необходимо присутствие элемента System Generator (Рис. 3), который является связующим звеном между программными средами Simulink и Xilinx 11, а также позволяет генерировать проект
для Xilinx 11 и работать с отладочными устройствами.
Добавляем в модель элемент System Generator, для чего необходимо открыть раздел библиотеки элементов Simulink (Xilinx Blockset -> Basik Elements) (Рис. 3) и разместить необходимый элемент в окне модели.
Рисунок 3
Также в модель нужно добавить остальные элементы для реализации проекта (Рис. 4).
Рисунок 4
В связи с тем, что в составе стандартных библиотечных элементов Xilinx отсутствует элемент вычисления модуля числа (поэтому и была выбрана именно эта элементарная функция), для конфигурации этой части функции можно использовать элемент MCode. Для конфигурации элемента MCode, необходимо в папке содержащей файл модели создать М-файл с текстом (М-файл это обычный текстовый файл с расширением ".m" в данном случае «abs_xil.m», вообще имя файла должно быть таким-же как имя функции, Матлаб любит это;) более подробное описание языка М-файлов можно посмотреть покурив хелп матлаба, а при знании С/С++ проблем вообще не возникнет ):
function y = abs_xil(x)
out_type = {xlUnsigned, 17, 14} %Формат выходных данных
%(с фиксированной точкой: xlUnsigned - без знака, xlSigned - со знаком)
  if x >= 0
    y = xfix(out_type, x);
  else
    y = xfix(out_type, -x);
  end

Далее в настройках элемента MCode (Рис. 5) (открываются двойным щелчком левой кнопки мыши) необходимо нажать Browse… выбрать созданный М-Файл и нажать «ОК».
Рисунок 5
После чего элемент MCode примет вид согласно Рис. 6.
Рисунок 6
Измененный элемент MCode теперь выполняет функцию вычисления модуля числа,
М-Файл, используемый в данном блоке можно изменять и редактировать (например, формат выходных данных). (Для каждой новой модели рекомендуется создавать отдельную копию соответствующего М-Файла).
Теперь необходимо соединить все элементы модели указанным на Рис. 7 способом.
Рисунок 7
Для просмотра действия модели необходимо добавить входные данные и возможность просмотра результатов.
Настроим модель согласно Рис. 8, (всякие кубики генераторов и осцилографов можно взять в стандартной библиотеке Симулинка в разделе Simulink) параметры генераторов Sine Wave и Sine Wave 1, указаны на Рис. 9.
Рисунок 8
Рисунок 9
После запуска симуляции проекта, на экране осциллографа можно посмотреть входные сигналы, промежуточный и выходной результаты (Рис. 10).
Рисунок 10
Во время построения модели использование стандартных библиотечных элементов Simulink совместно с библиотечными элементами Xilinx невозможно (при генерации проекта, элементом System Generator стандартные элементы игнорируются), стандартные библиотечные элементы Simulink используются в модели для симулирования внешних устройств. Для замены отсутствующих в библиотеке Xilinx элементов, реализующих необходимые для задачи моделирования функции, используются полностью конфигурируемые элементы Black Box, MCode, EDK Processor, имеющие различные возможности для реализации необходимых функций (Рис. 11).
Рисунок 11
Элементы Gateway In и Gateway Out необходимы для моделирования портов ввода/вывода ПЛИС, а также для связи со стандартными библиотечными элементами Simulink (симулирующими внешние устройства) (Рис. 12).
Рисунок 12
Элементы Gateway In и Gateway Out позволяют назначить конкретные выводы микросхемы ПЛИС для использования в качестве портов ввода/вывода в формате {‘MSB’, … ,’LSB’}, (Рис. 13)
Рисунок 13
где MSB – номер вывода старшего бита, LSB – номер вывода младшего бита. То есть перечисляются номера контактов микросхемы ПЛИС, начиная со старшего бита в одинарных кавычках (контактные выводы называются по координатам их расположения, к примеру: ‘A11’, ‘D12’, что берется из Даташитины на конкретную ПЛИС) (Рис. 14).
Рисунок 14
Назначать контакты для выводов следует только в том случае, если их расположение критично для дальнейшей привязки в конкретном устройстве, а назначать выводы в среде Xilinx 11 лень:). Также преобразуют типы данных, используемых средой Simulink в тип данных, используемых в ПЛИС (с фиксированной точкой).
Также во всех библиотечных элементах Xilinx присутствует возможность жестко задать количество и вид используемых внутренних элементов ПЛИС (Рис. 15)
Рисунок 15
(элементы могут задаваться как в ручную, так и предварительно рассчитываться с помощью элемента Resource Estimator) (Рис. 16).
Рисунок 16
После создания симуляционной модели из библиотечных элементов необходимо сгенерировать проект для Xilinx 11.

2. Генерация проекта модели для Xilinx 11.

Для генерации проекта Xilinx с помощью System Generator производим настройки генерации проекта (Рис. 17).
а) Установить опции компилятора, директорию в которую будет производиться запись сгенерированного проекта Xilinx 11 (Target directory), язык в котором будет генерироваться проект (VHDL);
б) Установить тип используемой ПЛИС – Virtex5 xc5vlx50-3ff324 (поле – Part);
в) Установить параметры тактирующего сигнала: период одного такта 10 нс (FPGA clock period);
г) Установить период симуляции 1 (определяет количество шагов симуляции модели
за один цикл тактирующего сигнала).
Рисунок 17
По нажатию кнопки Generate происходит генерация проекта в указанную директорию, формируются: файл проекта (*.xise) файлы кодов на языке VHDL (*.vhd) и другие.
Для дальнейшей работы и конфигурирования файла прошивки ПЛИС необходимо открыть проект в программе Project Navigator (Рис. 18).
Рисунок 18
Выбрать пункт [Open Project] и в директории, указанной при генерации проекта открыть файл с расширением *.xise.
Экран программы разделен на области (Рис. 19):
Рисунок 19
Иерархия проекта (Hierarchy) (Рис. 20).
Рисунок 20
Позволяет смотреть состав и иерархию проекта, добавлять и удалять файлы проекта.
Настраивать свойства проекта, такие как тип используемой ПЛИС, тип корпуса используемой ПЛИС.
Область действий над проектом (Processes) – позволяет синтезировать проект, формировать отчеты по временным и другим характеристикам, формировать файл прошивки ПЛИС (Рис. 21).
Рисунок 21
Если ранее при построении модели не были заданы контактные выводы для портов ввода/вывода, то для продолжения работым над проектом и формирования файла прошивки необходимо назначить выводы ПЛИС для портов ввода/вывода. Для этого необходимо зайти в Раздел User Constraints (пользовательские установки) и выбрать пункт I/O Pin Planing (PlanAhead) – Pre-Syntesis (Рис. 22).
Рисунок 22
Откроется программа PlanAhead, входящая в программный пакет Xilinx 11 (Рис. 23).
В окне программы можно просмотреть порты ввода/вывода проекта, размещение контактных площадок корпуса, выбранной ПЛИС, структурное строение ПЛИС.
Рисунок 23
Чтобы сконфигурировать контактные выводы ПЛИС необходимо в области I/O Ports вызвать контекстное меню на All ports и выбрать пункт Auto-place I/O ports (Рис. 24) (если плата еще не разведена)
Рисунок 24
или в области просмотра контактных площадок для каждого вывода вручную назначить каждую ножку ПЛИСины (Рис. 25).
Рисунок 25
После определения выводов ПЛИС, необходимо сохранить изменения и закрыть программу PlanAhead.
В области действий над проектом, в окне программы Project Navigator, запускаем синтез проекта (Рис. 26).
Рисунок 26
Во время синтеза проекта, программа Xilinx производит рассчет и формирование логических цепей проекта.
После синтеза проекта, необходимо сгенерировать и строссировать внутренние соединения, для чего необходимо запустить на исполнение пункт Implement Design (Рис. 27).
Рисунок 27
После троссировки и построения внутренней структуры необходимо сформировать файл прошивки ПЛИС (Рис. 28).
Рисунок 28
По выполнении этой команды в папке проекта формируется файл прошивки ПЛИС (на самом деле в зависимости от типа ПЛИС это или файл прошивки для нее самой, или шаблон для формирования прошивки внешней загрузочной памяти) (по умолчанию фармируется двоичный файл *.bit)

3. Прошивка проекта в ПЛИС.

Для прошивки файла программы в ПЛИС (или во внешнюю загрузочную память) необходимо в области действий над проектом запустить пункт Configure Target Device, для создания прошивочного файла, конфигурации и осуществления загрузки в реальное устройство (Рис. 29).
Рисунок 29
При выборе данного пункта запуститься программа iMPACT, программного пакета Xilinx 11. При первом запуске программы появится сообщение об отсутствии сформированного проекта для прошивки ПЛИС (Рис. 30).
Рисунок 30
После запуска iMPACT в области действий (iMPACT Flows) необходимо выполнить пункт Create PROM File, для формирования файла прошивки EEPROM для ПЛИС Virtex (Рис. 31) (которая с внешней памяти грузится).
Рисунок 31
При этом запустится мастер настройки формата файла прошивки ПЛИС.
На первом шаге необходимо выбрать необходимый носитель файла прошивки ПЛИС, в зависимости от типа ПЛИС (в данном случае Xilinx Flash/PROM, то есть микросхема памяти производства Xilinx).
На втором шаге необходимо выбрать размер микросхемы памяти (есть возможность автоматического выбора размера носителя на этапе создания файла прошивки) (Рис. 32, 33, 34).
Рисунок 32
Рисунок 33
Рисунок 34
На третьем шаге указывается имя и формат файла, в который будет формироваться файл прошивки и папку в котором он будет размещаться.
После нажатия кнопки «Ок» появится сообщение о добавлении нового устройства (Рис. 35).
Рисунок 35
Для добавления устройства необходимо выбрать ранее сформированный bit-файл. Устройство (конкретная микросхема) будет добавлена соответственно сформированному проекту (Рис. 36).
Рисунок 36
В связи с тем, что от одной микросхемы памяти может загружаться больше одной ПЛИС, существует возможность формирования единого прошивочного файла для одной микросхемы памяти (в случае достаточности объема памяти) (Рис. 37).
Рисунок 37
После добавления устройств, в области операций (iMPACT Processes) необходимо запустить пункт «Generate File», после завершения которого, будет выбрана конкретная микросхема памяти и сгенерирован соответствующий файл прошивки (Рис. 38, 39).
Рисунок 38
Рисунок 39
После формирования файла прошивки микросхемы памяти необходимо произвести подключение программатора (например Platform Cable USB) к ПК и устройству, содержащему программируемые микросхемы. Физическое подключение программатора следует производить при выключенном напряжении питания программируемого устройства (Рис. 40). После завершения всех соединений напряжение питания программируемого устройства необходимо включить.
Рисунок 40
После включения напряжения питания светодиод статуса на программаторе загорится зеленым светом, что сигнализирует о готовности программирования целевого устройства.
Для продолжения программирования в области действий необходимо запустить на исполнение пункт Boundary Scan (Рис. 41).
Рисунок 41
После запуска команды Boundary Scan в основной области программы по контекстному меню (правая кнопка мыши) необходимо выбрать пункт Initialize Chain (Рис. 42).
Рисунок 42
Программа подключится через программатор к программируемому устройству и определит микросхемы находящиеся на линии программирования (Рис. 43).
Рисунок 43
После определения микросхем находящихся в целевом устройстве необходимо назначит соответствующие по формату файлы для прошивки в конкретные микросхемы (Рис. 44, 45).
Рисунок 44
Рисунок 45
После назначения файлов необходимо настроить свойства программирования целевой микросхемы (в данном случае целевой микросхемой является только микросхема памяти). В окне свойств необходимо установить, назначение микросхемы (загрузка ПЛИС – Load FPGA), режим загрузки (параллельный – Parallel Mode), режим работы (Master/Slave) (Рис. 46).
Рисунок 46
После настройки свойств программирования в области операций необходимо запустить пункт Program (Рис. 47, 48, 49).
Рисунок 47
Рисунок 48
Рисунок 49
После окончания программирования нужно отключить напряжение питания от программируемого устройства и отключить от него программатор. И радоваться бесполезному устройству:)
В общем вкратце описал, позже расскажу как на ПЛИСинах в Симулинке делать более полезные устройства, цифровые фильтры к примеру, или ШИМ на стопиццот серв;)

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

RSS свернуть / развернуть
За первую часть статьи минус, за вторую — плюс :) Я конечно признаю, что описанный выше способ имеет право на существование, и что новичкам он может быть полезен. Но обычно используются стандартные средства среды ISE — либо рисование схем в редакторе schematic, либо их описание на соответствующих языках. То же самое с симуляцией — также существуют мощные и удобные средства, например, ISim. И дело тут не только в привычках разработчиков, годами работающих с этими инструментами.
По сути, даже PlanAhead не особо нужен. Можно просто создать и отредактировать файл *.ucf. Я бы не сказал, что это сильно сложно.
Что касается создания файла прошивки и программирования ПЛИС и конфигурационной флешки — палец вверх :) Здесь про это еще никто не писал (про девайсы фирмы Xilinx, по крайней мере).
Новичкам хочется сказать: хотите серьезно работать с ПЛИС — учите VHDL (Verilog). Без этого никуда.
0
Знать VHDL (Verilog) очень хорошо, однако время разработки при ручном написании несоизмеримо больше чем при прямом моделировании, особенно если брать Vertex5, 6 а то и 7 й серии, мировая тенденция такая, что многие крупные разработчики работают как раз в программах прямого моделирования, кстати и НАСА и Европейцы с Японцами, для проектирования архитектуры ПЛИСов для спутников и других космических аппаратов используют именно Симулинк, а в ручную только шлифовка результата и оптимизация (если программная не справляется).
Просто одно дело засунуть пару ШИМ в ПЛИСину какуюнить 95хх, а другое обработку 2-х аналоговых оцифрованных потоков, с фазокорекцией, фильтрацией по нескольким полосам, потом матричная корреляция с таблицей 100х100 значений, после этого еще демодулировать и декодировать и все в одном кристале, вот тут вручную пару лет писать будешь)
Но VHDL (Verilog) все равно УЧИТЕ!
0
Да, насчет времени разработки я согласен. Крупные проекты без подобных инструментов, пожалуй, не вытянешь. Но малые и средние вполне возможно. Всё зависит от задачи.
Но про пару лет в примере Вы, конечно, загнули:) Люди свои процессорные ядра на VHDL пишут, и ничего:)
0
ну имелось ввиду с учетом отладки и ловли блох, так сказать) как раз на пару лет и птянет)
0
… я правельно понял, что весь проект можно писать на Матлабе, а потом транслировать (System Generator) в нужный язык (Verilog или VHDL)?
0
Можно, причем можно сделать и на стандартных библиотечных элементах, а потом транслировать в нужный язык, (даже в С можно на любой микроконтроллер), только при таком способе нужно очень внимательно к типам данных относиться и тактирующим цепям.
0
Полезная статья. Почему только Virtex, везде называется Vertex? По идее можно и без Матлаба использовать просто IP ядра в ISE и собирать из них устройства в схемотехническом редакторе, эффект тот же будет и для новичков проще будет, чем еще в Матлабе разбираться. Использование Матлаба похоже просто выгодно в случае, если надо сделать моделирование или исследование какое нибудь.
0
конечно Virtex правильно))) поправил, это у меня просто привычка устно их так называть вот и пишу не глядя.
А Матлаб удобней в качестве именно симулчции и математической отладки, когда можно глянуть сигналы в любой точке в любое время и конечно на элементарные проекты он избыточен, но когда надо обрабатывать несколько ВЧ каналов с демодуляцими, фазовой подстройкой и т.д. то он почти незаменим.
0
Подскажите, можно ли на ПЛИС создать простую логическую схему работающую без тактирования. (на входа подали, получили что то на выходе)
0
ну а по чему нет? можно, я собирал делитель для пробы на CPLD.
0
А сколько стоит такой xilinx дебаггер, как на фото?
0
  • avatar
  • A-10
  • 11 августа 2011, 20:31
В магазинах, типо микры и терры несколько тысяч наверное…
А на ибее можно баксов за 50 найти, например тут
0
Спасибо за линк.
А то офф. вроде под 15к стоит.
0
Есть гарантия, что этот прошивальщик будет поддерживаться новыми версиями IDE?
0
А то куплю этот девайс с расчетом на будущее, а через годик, когда руки дойдут до него, он уже устареет.
0
Обновлялка прошивальщика автоматически грузится с инета, если прошивка изменилась, причем это даже отслеживать не надо
0
Где взять Xilinx Blockset и как поступать c ALtera?
0
После установки Xilinx ISE в меню пуск запустить «Xilinx ISE Design Suite 11/DSP Tools/Select MATLAB version for Xilinx System Generator» и назначит матлаб версию которая установлена (не ниже 2008 вроде) и в библиотеках симулинка появится раздел Xilinx Blockset
а насчет Альтеры не совсем понял, если имелось ввиду можно-ли разрабатывать в Матлабе под нее, то можно, только к Xilinx Blockset это никакого отношения не имеет, надо делать стандартными элементами, а потом генерировать VHDL/Verilog.
0
Спасибо, с Xilinxom все понятно. Если возможно, то несколько слов о альтере, каким образом генерируется VHDL/Verilog, или ссылки где можно про ето почитать.
0
Оформляете всю модель в подсистему, на ней правой кнопкой мыши и там будет пункт HDL код генератор, ну перед этим лучше хелп просмотреть все-же
0
Ок, спасибо буду пробовать, экспериментировать, на сайте нашел такое: http://www.mathworks.com/fpga-design/simulink-with-altera-dsp-builder.html
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.