Пока были праздники, сделал небольшой проект на Verilog, который давно хотел попробовать.

Суть проекта в следующем: к FPGA подключено быстродействующее (относительно, конечно) АЦП с двумя каналами и параллельным интерфейсом (14-16 бит на канал). FPGA читает данные с АЦП и складывает в буфер (свою внутреннюю память BRAM). Когда буфер заполнен, чтение останавливается, и внешнее устройство (микроконтроллер) может считать данные из буфера по интерфейсу SPI. Также можно по SPI конфигурировать некоторые параметры (об этом будет написано в следующем посте).

Тест проекта (картинка кликабельна).

Результат синтеза для Cyclone IVE

Результат я синтезировал в Quartus II, для FPGA семейства Cyclone IVE (EP4CE6E22A7). Это одна из самых простых и недорогих FPGA в корпусе QFP144 на 6272 логических элемента. Микросхема имеет память объёмом 30K * 9 бит. Пользовательских пинов - 92.

микросхема EP4CE6E22A7
логических элементов - 301 (5%)
пинов - 41 (45%)
память - 65536 бит (24%)
частота для наихудшего случая (125 С) - 151 МГц.

Память 8 Кб, это собственно буфер, куда происходит запись данных. При двух каналах по 16 бит получается 32 бита на отсчёт, и 2048 отсчётов. Я решил, что этого вполне хватит, хотя буфер можно расширить хоть на весь объём.

Частота вполне устраивает, я рассчитывал, что будет частота тактирования 50 МГц, и АЦП на 25 МГц. То есть получается трёхкратный запас по частоте.

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

Есть более новое семейство Cyclone 10.

Результат синтеза для Cyclone 10

Выбираем чип 10CL006YE144C8G. Он имеет столько же логических элементов (6272), что и вариант на Cyclone 4, и столько же памяти (30К х 9). Корпус такой же, QFP144, пользовательских пинов даже меньше - 89.

микросхема 10CL006YE144C8G
логических элементов - 289 (5%)
пинов - 41 (46%)
память - 65536 бит (24%)
частота для наихудшего случая (85 С) - 145,5 МГц.

Любопытно то, что проект стал компактнее по логическим элементам. То есть при той же ёмкости логики в Cyclone 10 влезет более сложный проект. Всё остальное примерно на том же уровне.

Возникает резонный вопрос: можно ли сэкономить, поставив другую FPGA или CPLD?

Давайте попробуем FPGA MAX10.

Результат синтеза для MAX 10

Здесь читатель (если он в теме) может воскликнуть: нет, всё не так! Семейство MAX - это CPLD, а не FPGA, а путать эти понятия - вопиющий непрофессионализм!

Однако стараниями маркетологов Intel (все ведь в курсе, что речь про чипы Intel?) семейство MAX10 превратилось в FPGA, хотя и имеет внутреннюю энергонезависимую память конфигурации, как любая CPLD.

Итак, выбираем чип, например, 10M02SCE144A7G (2304 LE, 101 GPIO, 12Kx9 BRAM), корпус QFP144.

микросхема 10M02SCE144A7G.
логических элементов - 298 (13%)
пинов - 41 (41%)
память - 65536 бит (59%)
частота для наихудшего случая (125 С) - 153 МГц.

Мы видим, что абсолютные показатели остались практически теми же, увеличилась только степень заполнения кристалла, что и понятно - 2304LE против 6272 LE.

Можно ли использовать MAX II?

Теперь вопрос: а можно ли использовать какую-либо совсем дешёвую CPLD, типа MAX II? Здесь всё сложнее. У них нет памяти BRAM, т.е. нужна будет ещё и внешняя быстрая SRAM.

Для подключения SRAM нужна будет дополнительная логика, конечно. Если мы используем память объёмом 4K x 16, то нам будет нужно дополнительно 16 пинов для данных, 12 для адреса и 3 для управления (/cs, /we, /oe), всего 31 дополнительный пин.

Логика также увеличится в размерах. На сколько точно, сложно сказать, но в CPLD на 240 LE она не влезет изначально, а в 570 LE может быть, и влезет.

Выбираем CPLD EPM570 в корпусе QFP100. Нам нужно всего 72 пина, корпус имеет 76 пинов для GPIO, т.е. должно хватить на всё, но для расширения уже совсем мало места.

Плюсы такого решения: возможно, более низкая цена (даже с учётом дополнительной микросхемы SRAM), минусы: бОльшая сложность схемы и площадь платы.

Цена вопроса

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

EP4CE6E22C8N - 456,55 Р (Промэлектроника, Екб, розн.)
10CL006YE144C - 754,71 (Пятый элемент, Спб, опт)
10M02SCE144C8G - 456 Р (Элитан, Екб, опт)
EPM570F100C5N - 368 Р (Хайтек, Спб) + память (CY7C1021DV33-10ZSXI, SRAM 1MBIT 10NS 44TSOP) - 92,51 Р (Промэлектроника, Екб, розн.)

Конечно, можно найти и дешевле, это просто розничные цены в магазине, но соотношение будет примерно тем же.

Видно, что вариант с CPLD никак не выигрывает по цене, при этом имея множество недостатков. Остальные варианты примерно равноценны, разве что Cyclone 10 пока немного дороже и мало у кого есть в наличии. Однако это совсем новое семейство, пока что все дистрибьюторы его не привезли.

Лично мне больше всего нравится вариант на MAX 10. Он имеет одно преимущество: не нужно загружать конфигурацию FPGA при старте. В варианте на Cyclone 4 нужно будет загружать конфигурацию FPGA, что можно сделать либо с помощью дополнительной микросхемы конфигурационной памяти, либо с помощью микроконтроллера. Есть ещё третий вариант: прошить через JTAG и никогда не снимать питание с чипа. Я слышал, что кто-то так делал, не знаю, шутка это или нет, но я так делать точно не буду.

Впрочем, у варианта с прошивкой Cyclone 4 через микроконтроллер есть преимущество: возможность обновлять прошивку FPGA через пользовательские интерфейсы: USB, Ethernet, etc.

Возможен ещё один нетривиальный вариант: вообще не ставить микроконтроллер, а прошить в FPGA какой-либо встраиваемый процессор. Но это не очень хороший вариант, возможно, т.к. при этом однозначно понадобится внешнее ПЗУ и ОЗУ, а также, как минимум, мост USB. Заведомо отказываться от этого варианта не нужно, конечно, но он мне кажется более сложным в реализации, чем с микроконтроллером.

Про то, какие функции выполняет эта прошивка, я напишу в следующем посте.

ИСПОЛЬЗОВАНИЕ ПЛИС В СОВРЕМЕННЫХ УСТРОЙСТВАХ

Тупиков Павел Андреевич

студент 5 курса, кафедра АРТ ОмГТУ, РФ, г. Омск

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

· Улучшаются временные характеристики изделия.

· Уменьшается цена изделия.

· Уменьшаются габариты изделия.

· Увеличивается надежность изделия (уменьшается количество дискретных микросхем)

· Повышается гибкость изделия (ПЛИС всегда можно перепрограммировать)

Архитектура ПЛИС имеет сложную структуру (Рис. 1)

Рисунок 1. Внутренняя структура ПЛИС

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

Сам процесс программирования (прошивки) ПЛИС состоит в формировании нужных связей между входами и выходами устройства.

На сегодняшний день в мире есть два мировых лидера в производстве ПЛИС. Это американские фирмы Xilinx и Altera.

Каждая фирма предлагает свой САПР для работы с ПЛИС. Фирма Xilinx предлагает Xilinx Software Development Kit (SDK). Фирма Altera предлагает Max+Plus II и Quartus II, а так же систему моделирования ModelSim.

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

· Verilog HDL.

Язык VHDL является наиболее сложным для обучения, но при этом обладает наибольшими возможностями на функциональных и поведенческих уровнях абстракции, однако имеет меньшие возможности на структурном уровне абстракции по сравнению с Verilog HDL, для расширения возможностей языка VHDL была разработана библиотека VITAL (Рис. 2) .


Рисунок 2. Уровни абстракции Verilog и VHDL

Примером работы языка Verilog HDL является программа, реализованная на ПЛИС CYCLONE III EP3C5E1444C8N стенда Mini-DiLab общий вид которого представлен на рис. 3.


Рисунок 3. Общий вид платы Mini - DiLab

Данная программа реализует последовательное переключение светодиодов led0-led7, с выбором набавления движения «огонька» при помощи кнопок pba и pbb, а так же управлением скоростью переключения при помощи переключателей sw0, sw1.

//Текст программы

module proect(output led, input clk_25mhz, input pba, input pbb,

input sw);

// Назначение внутренних соединений проекта

wire s1;

wire s2;

wire s3;

// Вызов других файлов (подпрограмм), подключаемых к проекту

Tr tr_1 (.out(s2), .set(pba), .res(pbb));

Counter counter_1 (.q(s1), .clk(clk_25mhz), .up(s2));

Mx mx_1 (.a(s3), .in(s1), .load(sw));

Dc3_8 dc3_8_1 (.out(led), .in(s3));

endmodule // конец программы

Подпрограмма tr

module tr (out, set, res); // Создание программы

// Назначение входов/выводов

output reg out;

input set;

input res;

// Инициализация

initial

begin

Out <= 1"d0;

// Основной код программы

always @(negedge set or negedge res)

begin

if (~(set))

Out <= 1"d1;

else

Out <= 1"d0;

endmodule // Конец программы

Подпрограмма counter

module counter (con, q, clk,up); // Начало программы

output reg con;

output q = con;

input up, clk;

// Основной код программы

always @(posedge clk)

begin

if (clk)

if (up)

Con <= con - 1"d1;

else

Con <= con + 1"d1;

endmodule //Конец программы

Подпрограмма mx(мультиплексор)

module mx (output reg a, input in, input load);

// Основной код программы

always @*

begin

case (load)

2"b00: a = in;

2"b01: a = in;

2"b10: a = in;

2"b11: a = in;

endcase

endmodule // Конец программы

Подпрограмма dc3_8 (мультиплексор)

module dc3_8 (out, in); // Начало программы

// Назначение входов/выходов

output reg out;

input wire in;

// Основной код программы

always @*

begin

case (in)

3"d0: out = 8"b11111110;

3"d1: out = 8"b11111101;

3"d2: out = 8"b11111011;

3"d3: out = 8"b11110111;

3"d4: out = 8"b11101111;

3"d5: out = 8"b11011111;

3"d6: out = 8"b10111111;

3"d7: out = 8"b01111111;

endcase

endmodule // Конец программы

Программа была реализована в САПР Quartus II.

После компиляции программы компилятор не выдал ошибки и замечания в программе, связанные с анализом и синтаксисом программы (рис. 4).


Рисунок 4. Окно сообщений проекта

Замечание, сделанные компилятором, говорят об отсутствии лицензии на Quartus II(была использована бесплатная версия программы, для обучения) и отсутствия файлов, необходимых для моделирования проекта.

RTL Структура данного проекта представлена на рис. 5.


Рисунок 5. Реализация проекта ( RTL структура)

Как показано на рис. 6 в данной программе испозльзуется лишь незначительная часть возможностей данной ПЛИС.

Рисунок 6. Часть ПЛИС, участвующая в работе проекта

Выводы: Программируемые логические интегральными схемы являются могут находить применение во многих устройствах. Для обучения работы с ними следует вводить в образовательную программу специальностей, связанных с проектированием и конструированием радиоэлектронной аппаратуры знакомство с языками описания аппаратуры(Verilog HDL и VHDL).

Список литературы:

1.Грушевицкий Р.И. Проектирование систем на микросхемах программной логики/ Р.И. Грушевицкий, A.X. Мурсаев, Е.П. Угрюмое. СПб.: БХВ Петербург, 2002. - 608 с.

2.Коломов Д.А. Системы автоматизированного проектирования фирмы Altra MAX+plus II и Quartus II. Краткое описание и самоучитель/ Д.А. Коломов, Р.А. Мяльк, А.А. Зобенко, А.С. Филиппов. М.: ИП РадиоСофт, 2002. - 126 с.

3.Максфилд К. Проектирование на ПЛИС. Курс молодого бойца./ К. Максфилд. М.: Издательский дом «Додэка-XXI», 2007. - 408 с. (перевод с английского).

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

Введение

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

  • ГОСТ 2.102-68 ЕСКД. Виды и комплектность конструкторских документов.
  • ГОСТ 15.101-98. Система разработки и постановки продукции на производство. Порядок выполнения научноисследовательских работ.
  • ГОСТ Р 15.201-20-00. Система разработки и постановки продукции на производство. Продукция производственно-технического назначения. Порядок разработки и постановки продукции на производство.

Как правило, это были файл-прошивки и программа (описание цифрового устройства на VHDL/Verilog или набор цифровых схем, разработанных в схемотехническом редакторе с использованием библиотечных элементов цифровой логики, такие как триггеры, регистры, счетчики, дешифраторы и т. д.) на CD или DVD и инструкция по программированию. И все.

Автор, например, столкнулся со следующей проблемой. Один из сотрудников разработал сложное многомодульное цифровое устройство. Все модули описывал на языке VHDL, а циклограммы работы этих модулей и цифрового устройства в целом смотрел на хорошем и дорогом осциллографе. Про Test Bench файлы и про возможность проведения моделирования он не знал или не умел их писать, кстати, комментарии к проекту и к описаниям модулей также отсутствовали. Ситуация может быть еще хуже, если модули будут представленными цифровыми схемами, разработанными в схемотехническом редакторе c использованием библиотечных элементов. Здесь и заключен один из главных недостатков: кроме самого разработчика, вряд ли кто-то другой будет разбираться в этом цифровом устройстве, особенно если проект многомодульный, а описание каждого модуля составляет более 100 строк или более одного экрана монитора. А значит, при желании другого разработчика внедрить в новую разработку или проект такое, уже разработанное цифровое устройство для ПЛИС, ему снова необходимо потратить время на разработку этого цифрового устройства.

История вопроса проектирования для ПЛИС

В настоящее время рынок ПЛИС - один из наиболее динамично развивающихся. ПЛИС применяются во многих отраслях техники. На данный момент нет однозначной, удовлетворяющей всех разработчиков аппаратуры методологии получения конфигурации ПЛИС по функциональной модели устройства на системном уровне. Наиболее популярный подход по решению этой проблемы - применение технологии ІР-ядер (Intellectual Property Cores). IP-ядра - это готовые компоненты, позволяющие легко включать их в собственный проект для создания более сложной системы. У этого подхода есть один существенный недостаток - привязанность ІР-ядер к элементному базису. Каждое IP-ядро оптимизировано под конкретную серию микросхем конкретного производителя, что существенно ухудшает возможность переноса уже созданных устройств из одного элементного базиса в другой. Закрытость архитектур коммерческих САПР делает невозможным добавление собственных функциональных моделей устройств на системном уровне для получения на их основе моделей устройства на уровне регистровых передач (RTL). Разработка цифрового модуля осуществляется в виде цифровой схемы, нарисованной в схемном редакторе с помощью встроенной в САПР производителя библиотеки базовых схемных элементов, таких как триггеры, дешифраторы, счетчики, сумматоры и т. д.

Другой популярный подход, позволяющий осуществить переход от функциональной модели на системном уровне к модели устройства на уровне регистровых передач, - применение языков описания аппаратуры на системном уровне (system-level design languages, SLDLs). К таким языкам относятся SystemC, Handel-C, VHDL, Verilog, System Verilog. Основным плюсом является независимость от аппаратного базиса, в котором будет реализовано устройство.

Таким образом, с одной стороны, при применении технологии IP-ядер разработчик аппаратуры получает качественное решение, но жестко привязанное к аппаратному базису, в котором реализуется устройство. С другой стороны, при применении языков описания аппаратуры на системном уровне реализация устройства является аппаратно независимой. Из вышесказанного следует, что в настоящее время актуально совместное использование для ускорения процесса проектирования цифровых модулей на языке описания аппаратуры и ІР-ядер производителя (Xilinx, Altera, Actel и др.) и сторонних фирм-разработчиков. При использовании цифровых модулей сторонних производителей иногда возникает нехватка в информативности сопроводительной документации.

Предоставление информации о разработанном цифровом модуле для ПЛИС

В зависимости от методологии получения конфигурации ПЛИС по функциональной модели устройства на системном уровне разработчиком можно выделить следующие виды цифрового модуля для ПЛИС:

  • Software - разработанный цифровой модуль, передаваемый потребителю в виде описания на языке описания аппаратуры (VHDL, Verilog) или/и разработанный в схемотехническом редакторе Schematic Editor для дальнейшего использования в программах автоматизированного синтеза логических схем и оптимизированный по функциональным параметрам.
  • Firmware - разработанный сторонней фирмой-разработчиком цифровой модуль, который называется IР-ядром, передаваемый потребителю в виде логической схемы (списка цепей - netlist) в базисе библиотеки логических элементов изготовителя ПЛИС и оптимизированный по функциональным и электрическим параметрам.

На этапе разработки документации, исходя из личного опыта, необходимо оформить в дополнение к обычным КД и ТУ, выполняемым в соответствии с ГОСТ 15.101, ГОСТ 15.201, ГОСТ 2.102, ГОСТ 2.114, документацию на все виды моделей (системных, логических, схемотехнических), создаваемых на этапах проектирования цифровых устройств на ПЛИС.

Другими словами, в комплект конструкторской документации цифрового устройства для ПЛИС, кроме файла-прошивки, инструкции по программированию и записанного проекта на CD/DVD, должна также входить сопроводительная документация.

Таблица. Список разделов сопроводительной документации

Название раздела Вид
Software Firmware
Общие сведения
Назначение и область применения О Р
Технические характеристики О О
Описание сигналов сброса О О
Описание сигналов синхронизации О О
Описание интерфейсов О Р
Временные диаграммы Р О
Описание регистров управления О О
Структурная (функциональная) схема Р Р
Руководство по программированию О О
Модель или семейство ПЛИС,
фирма-производитель
Р О
Представление цифрового модуля
для логического проектирования на ПЛИС
RTL-модель О Нет
Логическая модель Нет О
Проектные ограничения О О

Приведем список разделов (таблица), которые должны входить в сопроводительную документацию проекта цифрового модуля для ПЛИС. Для каждого раздела показаны признаки необходимости включения раздела в комплект документов:

  • «О» - обязательно поставляемый раздел;
  • «Р» - рекомендуемый для поставки раздел.

Рекомендуемые форматы файлов для передачи сопроводительной документации - MS Word, PDF (наилучший формат), HTML. Файлы описания на языке описания аппаратуры (VHDL, Verilog) или/и разработанные в схемотехническом редакторе Schematic Editor предоставляются в таком виде, как требует программное обеспечение САПР для разработки. Исключением может быть дополнительное предоставление в графическом формате (JPEG, BMP) файлов цифровых схем, разработанных в схемотехническом редакторе Schematic Editor.

Общие сведения

В этом разделе описываются общие сведения о разработанном цифровом модуле в виде описания:

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

Назначение и область применения

Определяется назначение цифрового модуля, области его применения.

Технические характеристики

Приводится описание его основных технических характеристик, таких как производительность, потребляемая мощность для конкретного кристалла ПЛИС, количество занимаемых вентилей, тип применяемого кристалла ПЛИС. Дополнительно указывается используемое при разработке цифрового модуля САПР производителя ПЛИС и программное обеспечение, используемое для моделирования и верифицирования. Для всех используемых программ указывается версия и установленные обновления. Приводится графическое представление цифрового модуля в виде «черного ящика» с обозначением внешних входов/выходов и дается краткое описание их назначения.

Описание сигналов сброса

Приводится подробная информация о сигналах сброса:

  • Перечень внешних и внутренних сигналов сброса.
  • Временные параметры и временные диаграммы сигналов сброса.
  • Схемы формирования внутренних сигналов сброса, если таковые входят в состав цифрового модуля.
  • Соотношения с другими сигналами (особенно с сигналами синхронизации).

Описание сигналов синхронизации

Приводится подробная информация о сигналах синхронизации:

  • описание внешних сигналов синхронизации;
  • временные параметры сигналов синхронизации;
  • описание внутренних сигналов синхронизации и схемы их формирования;
  • временные соотношения между сигналами синхронизации из различных источников;

Описание интерфейсов

Приводятся особенности использования всех интерфейсов, входящих в состав разработанного цифрового модуля, желательно унифицированного для организации взаимодействия с другими узлами системы на кристалле. Дополнительно приводится Internet-ссылка на полное описание стандартного интерфейса или предоставляется само описание интерфейса. На данный момент в качестве унифицированных интерфейсов цифровых модулей приняты интерфейсы к шине AMBA, PLB, Wishbone.

Временные диаграммы

Приводится необходимая информация для организации обмена данными через интерфейсы и другие входы/выходы цифрового модуля: графическое представление временных диаграмм, описание протоколов передачи данных, требования к внешним сигналам, подаваемым на цифровой модуль (длительность, периодичность и т. д.), и другая информация.

Описание регистров управления

Приводится описание всех регистров управления цифрового модуля. Типовое описание регистра управления содержит имя регистра, адрес регистра во внутреннем адресном пространстве, начальное значение после снятия сигнала сброса, тип доступа (чтение/запись), описание внутренних полей.

Структурная (функциональная) схема

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

Количество описываемых блоков и объем описания определяет разработчик цифрового модуля. Предпочтительно соответствие минимального количества описываемых модулей количеству элементов структурной (функциональной) схемы цифрового модуля.

Типовое описание внутреннего блока содержит:

  • назначение блока;
  • структурную (функциональную) схему блока (при необходимости);
  • режимы и алгоритмы работы;
  • временные диаграммы работы;
  • организацию управления блоком;
  • организацию связи с другими блоками;
  • любую другую информацию.

Руководство по программированию

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

Модель или семейство ПЛИС, фирма-производитель

Для Firmware цифрового модуля указывается фирма-производитель ПЛИС, модель или семейство ПЛИС и ее скоростные характеристики. Для Software цифрового модуля приводится информация о количестве занимаемых ресурсов, требования к применяемой ПЛИС.

Представление цифрового модуля для логического проектирования

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

RTL-модель

Цифровой модуль, описанный на синтезируемом подмножестве языка Verilog или VHDL или/и разработанный в схемотехническом редакторе Schematic Editor, предназначен для использования на этапе логического синтеза ПЛИС. Поставляется для Software в виде собранного проекта цифрового модуля в САПР производителя ПЛИС. Для цифрового модуля Firmware RTL-модель предоставляется по отдельному соглашению.

Помимо файлов RTL-модели, передаются:

  • Инструкция по использованию модели.
  • Описание блоков памяти, входящих в состав модели, включающее тип памяти, размер, число блоков памяти, иерархическое имя блока памяти.
  • Описание процесса создания готовых ядер при использовании программ для их создания (например, CoreGenerator для Xilinx ISE). При отсутствии описаний могут возникнуть ограничения для повторного проектирования и применения из-за зависимости от технологии и производителя.
  • В случае использования микропроцессора от производителя (например, от фирмы Altera - процессор Nios; от фирмы Xilinx - микропроцессоры Microblaze, PowerPC) требуется описание процесса конфигурирования ядра процессора и его периферии.
  • Набор тестов (Test Bench файлов) для проведения верификации и моделирования цифрового модуля, написанных на языке Verilog или/и на VHDL, или/и на System Verilog.
  • Любая другая дополнительная информация.

Логическая модель

Модель является списком цепей, описанным с помощью языков Verilog или VHDL в базисе библиотеки изготовителя ПЛИС, и поставляется для Firmware цифрового модуля.

Помимо файлов логической модели, передаются:

  • Инструкция по использованию этой модели.
  • Набор тестов (Test Bench файлов) для проведения верификации и моделирования цифрового модуля, написанных на языке Verilog или/и на VHDL, или/и на System Verilog.
  • Руководство по работе с набором тестов для проведения моделирования и верификации цифрового модуля.
  • Любая другая дополнительная информация.

Проектные ограничения

Проектные ограничения предоставляются в виде файла с описанием набора ограничений, накладываемых на цифровой модуль при его включении в логическую модель системы на кристалле. В этот набор входят ограничения для сигналов синхронизации (clock constrains), временные ограничения (timing constrains), ограничения на взаимодействие цифрового модуля с другими модулями и условия работы цифрового модуля. Предпочтителен формат описания проектных ограничений Synopsis Design Constraints (SDC) или формат для САПР производителя ПЛИС.

Примерный список ограничений для сигналов синхронизации:

  • временная диаграмма (Clock waveform);
  • нестабильность тактовой частоты (Jitter);
  • изменение фазы тактовой частоты;
  • длительность времен переключения (Transition times);
  • временные диаграммы производных синхросигналов (Generated clock waveforms);
  • любая другая дополнительная информация.

Набор ограничений для сигналов синхронизации обязателен для Software и Firmware цифровых модулей.

Примерный список временных ограничений:

  • время появления сигналов на входах (Arrival times at inputs);
  • время появления сигналов на выходах (Required times at outputs);
  • многотактовые пути (Multi-cycle paths);
  • ложные пути (False paths);
  • длительность времен переключения сигналов данных (Data signal transition times);
  • любая другая дополнительная информация.

Заключение

Приведенный состав сопроводительной документации на разработанные цифровые модули для ПЛИС предоставляется по договоренности между потребителем и разработчиком. Чаще всего разработчик предоставляет просто цифровой модуль, описанный на языке VHDL, Verilog, System Verilog и/или разработанный в схемотехническом редакторе. По поводу дополнительной документации ответ у разработчика чаще всего бывает следующим: «Цифровой модуль работает, так берите и пользуйтесь. В описании схемы на языке аппаратуры ничего сложного нет: разберетесь сами».

На взгляд автора, разобраться можно в чем угодно, все зависит от желания и потраченного времени, а время, потраченное на то, чтобы разобраться в «чужом» проекте на уже разработанный цифровой модуль, прямо пропорционально опыту описания аппаратуры на языках VHDL, Verilog и знаниям цифровой и микропроцессорной схемотехники. Этого можно избежать, если изначально договориться с разработчиком о составе сопроводительной документации, тогда использование цифрового модуля в своем проекте становится проще, и быстрее произойдет его внедрение.

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

Литература

  1. Денисов А. Несколько советов по проектированию цифровых устройств на VHDL для ПЛИС // Компоненты и технологии. 2009. № 12.
  2. ГОСТ 2.102-68 ЕСКД. Виды и комплектность конструкторских документов.
  3. ГОСТ 2.114-95 ЕСКД. Технические условия.
  4. ГОСТ 15.101-98. Система разработки и постановки продукции на производство. Порядок выполнения научно-исследова-тельских работ.
  5. ГОСТ Р 15.201-20-00. Система разработки и постановки продукции на производство. Продукция производственно-технического назначения. Порядок разработки и постановки продукции на производство.

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

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

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

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

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

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

Xilinx или Altera?

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

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

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

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

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

Установка Vivado

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

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

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

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

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

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

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

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

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

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

`timescale 1ns / 1ps

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

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

endmodule

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

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

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

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

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

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

Симуляция

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

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

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

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

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

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

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

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

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

`timescale 1ns / 1ps

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

Hello hello_t(clck_t, sw_t, led_t) ;

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

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

endmodule

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

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

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

Заключение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Из лекций:

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

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

Информация

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

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

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

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

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