Раздача слонов: FPGA платы для образовательных проектов с MIPSfpga. FPGA. Первые шаги

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

В частности, в честь Нового Года я в кооперации с Виталием Кравченко из univeda.ru планируем небольшую раздачу слонов, то бишь бесплатных плат Terasic DE0-CV с FPGA Altera Cyclone V. Так что вы сможете повторить подвиг Антона Павлова. Так как данная конкретная раздача делается _не_ на деньги Imagination Technologies, не на деньги Altera и не на деньги НПЦ «Элвис», а на деньги частных благотворителей, включая меня лично, то слоны будут раздаваться с довольно конкретными условиями, описанными ниже.

Цели мероприятия:

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

2. Повысить количество русских текстов на MIPS Insider дабы посетители из международной электронной промышленности и academia начинали понимать, что русские идут

3. Изготовить, от лица коммьюнити, кучу учебных материалов вокруг MIPSfpga, которыми могли бы пользоваться как преподаватели российских вузов, так и преподаватели университетов в других странах - США, Японии, Китае и т.д.

Условия:

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

2. Желательно, чтобы этим вузом не был МГУ, МФТИ, МИФИ, МИЭТ и ИТМО, которые могут получить эти платы из других источников.

3. Очень желательно, чтобы перед получением платы креативный товарищ прислал бы мне не только описание проекта, но и код на Verilog или VHDL, C и/или ассемблере, с которым он симулировал прототип будущей синтезированной системы в среде ModelSim или Icarus. Временные диаграммы тоже приветствуются.

4. Код проекта по завершению выкладывается на http://github.com/MIPSfpga - см. в качестве примера http://github.com/MIPSfpga/mipsfpga-plus

5. Там же описывается в секции Wiki:

5.1. Что находится в каждом файле
5.2. Иерархия модулей хардверной части
5.3. Как симулировать - инструкция со скриншотами
5.4. Временные диаграммы симуляции
5.5. Как синтезировать - инструкция со скриншотами
5.6. Результаты синтеза - размер и максимальная частота
5.7. Описание софтверной части
5.8. Фотографии работающей платы FPGA

6. Это же выкладывается на в форме статьи
7. Это же выкладывается на http://silicon-russia.com
8. Это же выкладывается на http://community.imgtec.com/forums/cat/mips-insider/mipsfpga
9. Язык (6), (7), (8) может быть русский или английский

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

11. Если мы (я и UnivEDA) будем делать какие-либо мероприятия в России типа конкурсов или трейнингов, мы у вас плату тоже на некоторое время заберем назад

Примеры проектов с платами:

1. Интерфейс между MIPSfpga и сенсорами с интефейсами SPI, I2C, UART и другими. Сенсоры влажности, температуры, звука, компасы, дальномерка и т.д.

2. Интерфейс между MIPSfpga и внешней по отношению к FPGA памяти - SDRAM, DDR и т.д. (в текущих примерах память системы строится из block memory внутри FPGA)

3. Интерфейс между MIPSfpga и более крупными устройствами - VGA дисплей, мышь, клавиатура, джойстик.

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

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

6. Добавление команд в процессор с помощью интерфейса CorExtend / User Defined Instructions (UDI). Пример - специальные команды для шифрования.

7. Лабораторные работы с демонстрацией работы прерываний в разных режимах и обработчика прерываний.

8. Мосты между шиной AHB-Lite и другими шинами - AXI, APB, OCP, Wishbone, PLB и т.д.

9. Многопрооцессорные системы без когерентности кэшей первого уровня и (для самых продвинутых) с когерентными кэшами и реализацией протоколов типа MESI.

10. Портирование на MIPSfpga разного рода программ и операционных систем - от простых RTOS до различных вариантов Linux (MIPSfpga поддерживает TLB MMU).

Прошу присылать предложения на [email protected] с копией [email protected]

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

Итак, начнем с небольшого количества теории. ПЛИС делятся на две основных группы: CPLD (Complex Programmed Logic Device) и FPGA (Field Programmed Gate Array). CPLD - это обычно ПЛИС класса "эконом", т.е. имеют невысокую цену и довольно скудное количество ресурсов, особенно это заметно на триггерах. FPGA обычно подороже, содержат побольше ресурсов (простой логики - триггеров...) и, самое важное, в последнее время дополнительные "непростые" блоки, как, например, умножители, блоковую память, интерфейсные причиндалы (Ethernet, PCI-express...) и даже процессорные ядра PowerPC. Отдельно можно упомянуть серию Zinq от Xilinx - туда вообще ядра ARM запихали. Главным же отличием FPGA от CPLD является потребность в загрузке конфигурации при включении питания и, соответственно, внешней ПЗУ с конфигурацией. Даже семейство SPARTAN-3AN имеет на борту встроенную ПЗУ-шку, из которой и грузится.

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

Перейдем от теории к практике. Для начала нам хватит какой-нибудь микросхемы CPLD. Ресурсов мало, но для освоения самое оно. Я возьму XC95288XL в корпусе TQ144 (опять же просто оказалась в наличии), вообще рекомендую взять что-нибудь посвежее, например, из серии CoolRunner 2 . Чтобы получить готовое изделие (пусть даже минимально мигающее светодиодом), нам необходимо: спаять аппаратную часть (тут, я надеюсь, проблем не возникнет, а нюансы я упомяну), "написать" прошивку (в нашем случае, скорее, нарисовать) и зашить прошивку в микросхему. В общем, нам понадобятся софт, генерящий прошивку, и программатор. Софт (Xilinx ISE Webpack) качаем с официального сайта (правда, попросят зарегистрироваться), лицензия Webpack - свободная. Программатор можно сделать по схеме на рис.1 (под LPT-порт) или приобрести заводской USB-шный (в китайских интернет-магазинах встречал по цене порядка 50$, но сам не покупал). Более .

Рис. 1

После того, как мы припаяли ПЛИС на макетную плату, спаяли или купили программатор, скачали и установили пакет ISE Webpack (у меня версия 13.2), запускаем Project Navigator и создаем новый проект. Чтобы создать проект, выбираем File -> New Project, указываем имя проекта и куда его сохранить, также указываем тип исходника TOP-LEVEL (рис.2). Дело в том, что для ПЛИС не обязательно рисовать схему из триггеров и их соединений, можно, например, писать на языках высокого уровня (VHDL, Verilog) и совсем не обязательно в пределах одного проекта использовать что-то одно. Мы же пока используем только Schematic на всех уровнях.


Рис. 2
(рисунок кликабелен для увеличения, откроется в новом окне)

В следующем окошке (рис. 3) выбираем нашу микросхему (остальное поначалу не трогаем); в окне, появившемся после нажатия на кнопку "Next", любуемся на параметры созданного проекта, жмем "Финиш" - и готово: проект создан.


Рис. 3

Теперь надо, собственно, нарисовать схему: правым кликом на окошко с проектом и new sourсe (рис 4.), нарекаем этот исходник именем (это имя нашей схемы, их в проекте может быть много), выбираем опять-таки Schematic, жмем "Next", любуемся на параметры вновь создаваемого файла, жмем "Финиш" и получаем чистую схему.


Рис. 4
(рисунок кликабелен для увеличения, откроется в новом окне)

Начинается самое интересное: на панельке слева (не с самого краю) жмем кнопочку "add symbol" (рис. 5).


Рис. 5
(рисунок кликабелен для увеличения, откроется в новом окне)

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

Для примера рассмотрим следующую задачу: нужно максимально точно определить время задержки между передними фронтами 2-х импульсов, появляющихся на разных проводах, и слить это значение в контроллер по интерфейсу SPI. Всякое сходство задачи с темой "Повышение рабочей частоты МК" на одном из робототехнических форумов умышленное. Итак, на входе устройства 2 провода для импульсов и 3 провода для SPI контроллера. Добавляем еще вход тактирования (пока мы не знаем на какой частоте, можем только предположить, что не менее 70 МГц). Начинаем рисовать прошивку: нам нужны триггеры-защелки, которые будут "ловить" импульсы, счетчик времени, регистр сдвига (создавать их не надо, они есть библиотечные). Что такое триггеры и счетчики, описывать не буду, надеюсь, читатели "в теме" и проблем не возникнет, в противном случае придется писать еще несколько статей. Получили вот такую схему (рис. 6), как вы видите, необязательно тянуть провод от выхода символа до входа, достаточно просто обозвать цепь. Для обозначения внешних входов и выходов используем кнопку "Add I/O Marker".


Рис. 6
(рисунок кликабелен для увеличения, откроется в новом окне)

Когда схема готова, переходим на вкладку Design, и даблкликаем на Implement Design - начинаются всякие процессы (для начала не важно какие именно - главное, что всё вместе - это процесс перегонки исходника в прошивку). Когда всё отработает, смотрим на эрроры с варнингами: всё, что важно, исправляем, остальное оставляем. Например, не нужны нам выходы СЕО и ТС счетчика и остальные 15 бит параллельного выхода регистра сдвига тоже не нужны, а варнингами ругается. Если ругается эррорами на то, что мы так и хотим, значит, мы хотим чего-то не того. Если нас (и синтезатор) всё устраивает - любуемся дальше на репорты: сколько каких ресурсов израсходовано, какие тактовые частоты доступны... Если опять всё хорошо, то самое время просимулировать схему и убедиться, что она, собственно, работает согласно поставленной задаче. Симуляцию после проверки таймингов я предлагаю проводить по причине того, что иногда для получения нужной тактовой частоты приходится всю схему перетрясти, что, естественно, может сказаться на результате...

Итак, симуляция: на вкладке Design (в левой панельке) выбираем simulation (рис. 7).


Рис. 7
(рисунок кликабелен для увеличения, откроется в новом окне)

Внизу, в процессах, вместо процессов синтеза и разводки появился процесс Simulate Behavioral Model, даблкликаем на него - запускается симулятор, в котором мы видим наши сигналы (не только входные-выходные, но и промежуточные) (рис 8).


Рис. 8
(рисунок кликабелен для увеличения, откроется в новом окне)

Наводим на кнопочки курсор мышки, читаем комментарии к кнопочкам. Устанавливаем время шага симуляции (рис. 9) и начальные значения входных сигналов, сразу же настраиваем тактовые сигналы (не будем же мы каждые 5 нс симулировать и клок переключать).


Рис. 9
(рисунок кликабелен для увеличения, откроется в новом окне)

Шагая по времени путем манипуляций с входами и (при необходимости) с шагом симуляции, получаем временную диаграмму (рис. 10).


Рис. 10
(рисунок кликабелен для увеличения, откроется в новом окне)

Убеждаемся, что всё работает так, как задумано (или отлаживаем схему дальше), и переходим к следующему шагу - распределению выходов и входов по ножкам микросхемы. Для этого добавляем еще один файл-исходник (рис. 11), а именно Implementation Constraints File.


Рис. 11
(рисунок кликабелен для увеличения, откроется в новом окне)

Прописываем "распиновку микросхемы" (рис. 12), здесь же прописываем требования к тактовым частотам. И вот мы дошли до нюанса, связанного с тактовыми сигналами. Дело в том, что сигналы тактирования должны приходить на так называемые глобальные линии - линии, которые проходят через всю микросхему, остальные линии имеют локальный характер и от блока к блоку проходят через коммутационную логику. У микросхемы XC95288XL в корпусе TQ144 таких линий 3, и подключаются они к ногам 30, 32, 38. Остальные сигналы можно подключить к любым ножкам ввода-вывода (I/O).


Рис. 12
(рисунок кликабелен для увеличения, откроется в новом окне)

Снова даблкликаем Implement Design, ждем, читаем замечания на тему варнингов с эррорами и переходим на отчеты по распиновке (рис. 13) и таймингам (рис. 14); убеждаемся в том, что всё нас устраивает, и имеем счастье в виде файла %project_name%.jed.


Рис. 13
(рисунок кликабелен для увеличения, откроется в новом окне)


Рис. 14
(рисунок кликабелен для увеличения, откроется в новом окне)

Файл прошивки готов. Допустим, устройство тоже. Подключаем к ЭВМ JTAG кабель и даблкликаем на Configure Target Device. Запустится утилитка прошивки (Impact.exe), собственно, при изготовлении нескольких устройств для прошивки серии можно ограничиться запуском только ее одной. Создаём новый проект (это проект для программки-прошивалки), разрешаем ей автоматически найти программатор и подключенную микросхему, показываем файл прошивки и жмем Program. Ждем несколько десятков секунд, видим надпись о том, что всё хорошо, - устройство готово.

Наше повествование о разновидностях ЦАПов было бы неполным без упоминания FPGA-модулей. Не всякий ЦАП может быть FPGA, но всякий FPGA может побыть ЦАПом. Уже запутались? Ничего, надеюсь, дальше будет проще.

До сих пор цифро-аналоговым преобразованием (т.е. переводом двоичного кода в ток либо напряжение) занимались вполне определенные устройства, работающие по R-2R либо дельта-сигма алгоритму. Если вам захочется включить в процесс новое логическое звено (например, мастер-клок), традиционному чипу ЦАПа понадобится внешний дискретный элемент. А вот для FPGA-архитектуры этого всего не надо, логическое звено «припаивается» виртуально.

Поле логических вентилей

FPGA расшифровывается как Field-Programmable Gate Array и называется по-разному - и программируемая вентильная матрица, и программируемая логическая интегральная схема (ПЛИС), но суть ее одна. Строго говоря, ПЛИС не является процессором, которому нужно прописывать набор определенных инструкций. Это чистое поле так называемых «логических вентилей», где вы строите свою электронную схему собственно «процессора». Вот здесь можно от души кувыркаться с самой смелой разрядностью хоть 128 бит, идеальными пост-фильтрами и другой обработкой звука. И все это на очень приличной скорости вычисления и без дополнительных высокочастотных помех, присущих дискретным цепям.


Первые коммерческие образцы FPGA появились в середине 80-х благодаря компании Xilinx, она же до сих пор сохраняет лидерство на рынке. В аудиопромышленности более всех прочих с конверторами на базе ПЛИС ассоциируются источники Chord Electronics. Как там говорят - «никого не оставляет равнодушным»? Не хочется повторяться, но деваться некуда.

Компоненты Chord действительно своеобразны. Они одними из первых в усилителях перестали стесняться импульсных блоков питания и класса D, да и дизайн у них такой, чтобы вывести любителя классического винтажа из равновесия. Словом, все кто верует в правильность поступи технического прогресса, следует сверять часы по Chord Electronics. Сверим их и мы по топовому фирменному ЦАПу DAVE, который вот-вот должны презентовать официально.

Знакомьтесь: DAVE

Внешне для поклонников (да и ненавистников) марки, в принципе, ничего нового: крепенький алюминиевый корпус в индустриальной отделке, болты, мехобработка, вот это вот все. Раньше в подобных устройствах Chord Electronics в круглом «окне» можно было рассмотреть на тот момент диковинку - собственно FPGA плату. Сейчас в DAVE (акроним Digital to Analog Veritas Extremus) используется Xilinx Spartan 6 версии LX75. Это не самая мощная в мире ПЛИС - существуют модели и больше, и даже дороже самого Chord DAVE, стоимость которого в Англии составляет невялые восемь тысяч фунтов. Но в мире аудио Spartan 6, определенно, самая продвинутая на текущий момент платформа.

Но, как уже упоминалось, это только поле. Что на нем засеяно? Алгоритм Chord DAVE использует 166 DSP-ядер и КИХ-фильтр на 164 тысячи отсчетов с коэффициентом 256 fs - скорость обработки звука доселе неслыханная на компонентах, использующих самые топовые ЦАПы. Так что теперь на месте окна у DAVE расположен цветной дисплей, потому что область интересов у современного конвертера определенно расширилась.


ЦАП Chord DAVE

Во-первых, помимо основного предназначения устройство можно напрямую подключить к оконечнику, так что знать уровень сигнала будет не лишним. Управлять им можно со штатного пульта ДУ для всей линейки Chord, правда, не очень-то презентабельного вида для устройств данной ценовой категории. Что касается коэффициента усиления, вообще следует иметь в виду, что и раньше на линейных выходах источники Chord Electronics имеют повышенные относительно стандартного уровни выходного напряжения 3 и 6 Вольт, на RCA и балансных выходах соответственно.

Это особенно важно при сравнении DAVE с другими конвертерами на соседних входах усилителя. Без выравнивания уровня более громкий источник всегда субъективно покажется более уверенно звучащим. Также следует упомянуть опцию усиления для наушников с практически полным охватом импеданса от 8 до 800 Ом, чего раньше не было в топовых источниках Chord Electronics. И, кстати, об импедансе. Не все производители считают за труд упомянуть этот важный параметр согласования между источником и усилителем, но у DAVE это значение на выходе (0,0055 Ом) практически стремится к нулю.

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

Итак, вместо привычной разводки на «тюльпане», мы имеем четыре коаксиала BNC, плюс столько же на выходе. «Тюльпаны» здесь используются только для небалансных выходов. И в самом деле, если бы эти цифровые разъемы были выполнены на RCA, и все это без разметки задней панели, хаос с коммутацией только бы крепчал. Но если серьезно, то выбор BNC в данном случае не просто прихоть, а необходимость реализации так называемого Dual Mode - это когда цифровой поток передается по двум веткам с уменьшенной вдвое частотой дискретизации. Также присутствуют пара оптики TosLink и AES/EBU входы. Самое же интересное сейчас, что умеет делать конвертер через USB-вход.


Тыловая панель Chord DAVE

Вот здесь становится понятно, для чего был нужен электронный дисплей. Если по коаксиальным входам верхний предел частоты дискретизации был «всего» 384 кГц, то здесь уже вдвое больше 768 кГц плюс поддержка DSD вплоть до DSD512. Чтобы понимать, что такое DSD512, напомним, что на SACD уложен так называемый DSD64 с частотой 2,8 МГц, что в восемь раз меньше. Конечно, подобные фонограммы пока представлены единицами, и вряд ли эта затея вообще выберется дальше загородки для аудиогурманов, но суть в том, что концептуально архитектура FPGA подразумевает перенастройку преобразования хоть под DSD1024, которого еще не существует в природе. Производитель указывает, что коаксиальные выходы способны поддерживать дискретизацию до 768 кГц в связке с некими неназванными продуктами Chord в будущем. Собственно, за это и просятся деньги - не столько за вычурный дизайн (хотя и за это тоже), сколько за аутентичный софт, который позволяет гибко управлять инструментами обработки сигнала.

У DAVE данные инструменты представлены отключаемым ультразвуковым фильтром на 60 кГц, а также режимами PCM+ и DSD+. Производитель отмечает, что в любом из них возможно воспроизведение обоих форматов, но все-таки оптимизация выполнена под что-то одно. Не забыты и старинные опции вроде смены фазы или фильтра для компакт-дисков с пре-эмфазисом. Это же программный алгоритм, здесь все можно предусмотреть.

Мягкость на гиперскорости

По отзывам первых слушателей, в непосредственной работе DAVE производит благоприятное впечатление. В свое время, надо признаться, ЦАПы Chord могли смутить слишком напористым «квадратным» саундом, но сейчас многие слушатели DAVE отмечают его весьма деликатную, атмосферную подачу и, что немаловажно, - толерантность к огрехам музыкального материала.

Данное впечатление, вероятно, основано на двух технических моментах.

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


ЦАП Chord DAVE

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

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

И если аудиобудущее окажется именно таким, каким его сегодня представляет Chord DAVE - на очень быстрых FPGA с продвинутыми алгоритмами фильтрации, то братцу-слухачу определенно бояться нечего. Разве что придется привыкать к алюминиевым «крабам» на полке.

Другие материалы цикла .