Опубликован: 04.08.2025 | Доступ: свободный | Студентов: 5 / 0 | Длительность: 01:52:00
Лекция 4:

Освоение средств разработки

< Лекция 3 || Лекция 4 || Лекция 5 >
Аннотация: Тема занятия: обсуждение возможностей ПО для разработки исходного кода, верификации, синтеза, проведение самостоятельной отработки элементарных навыков на готовом проекте демонстрационного примера.

Разработка исходного кода

Для описания аппаратных схем удобно использовать специально разработанные для описания поведения аппаратуры языки, как VHDL, Verilog, System Verilog. В этих языках выполняется описание поведения на уровне отдельных регистров и передач сигналов между ними - т.н. RTL - уровень регистровых передач.

Исходный код (VHDL):

if (Clk = '1' and Clk'EVENT) then If (X = '1') then
Y <= A and B;
else
Y <= not(A or B) xor C;
end if; end if;

Исходный код (Verilog):

always@(posedge Clk) if (X = 1)
Y <= A & B;
else
Y <= ~(A | B) ^ C;
end

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

К наиболее популярным САПР относятся Vivado(Xilinx), Quartus (Intel/Altera).

Vivado Design Suite - это программный пакет, созданный Xilinx для синтеза и анализа конструкций, написанных на языках семейства HDL - описания аппаратуры hardware description language (HDL), представляет собой интегрированную среду проектирования (IDE), построенными на общей масштабируемой модели данных и общей среде отладки.

В состав входят компилятор, симулятор и интегратор IP для быстрого конфигурирования и встраивания в проект IP ядер из предоставляемого набора библиотек; так же имеется подсистема хранения и исполнения сценариев на языке TCL для расширения возможностей среды.

Создаваемое RTL-представление представляет собой конечный автомат (то есть схему, выполненную в синхронном стиле, что предпочтительно для современных FPGA), управляющий потоками вычислений. Результаты зависят от проектных ограничений (constraints), а также, причем в большой степени, от директив компилятора. Директивы также могут облегчить формирование интерфейсов создаваемого модуля: он может быть экспортирован в виде IP-ядра с интерфейсом, определенным пользователем, но также можно указать на необходимость его экспорта в виде периферийного модуля для шины AXI4 (для установки в процессорную систему) или модуля для инструмента System Generator for DSP.

Логический синтез

На следующем этапе разработки логика работы преобразуется в описание на вентильном уровне.

Логическое выражение после синтеза:

DFF.D <= (X and (A and B)) or (not(X) and (not(A or B) xor C));
Y <= DFF.Z

Схемные примитивы (рисунок 3.1):

Схемные примитивы

Рис. 3.1. Схемные примитивы

Схемное представление логики исходного кода ( рисунок 3.2):

Схемное представление логики исходного кода

Рис. 3.2. Схемное представление логики исходного кода

где k - коэффициент разветвления для цепи, а t_{prop0}, t_{prop1} - время распространения сигнала по ветвям логики 0 и 1 соответственно.

Поэлементное представление примитивов ( рисунок 3.3):

Поэлементное представление примитивов

Рис. 3.3. Поэлементное представление примитивов

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

Собственно, синтезатор - инструмент логического синтеза, предназначенный для трансляции и оптимизации схемы из описания на уровне RTL в список цепей (netlist) на уровне стандартных ячеек (транзисторной, вентилей).

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

Инструмент допускает распараллеливания вычислений на нескольких ядрах.

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

Синтезаторы обычно встроены в мощные пакеты САПР, но есть и выполненные в виде отдельных программных продуктов:

Встроенные (как часть пакета разработки от изготовителя FPGA): Lattice Synthesis Engine (Lattice), Quartus Synthesis (Intel/Altera);

Отдельные (предлагаемые как отдельные решения, не привязанные к единственной архитектуре): Design Compiler, FPGA Compiler (Synopsys), Precision Series, Leonardo Spectrum (Siemens).

Верификация

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

Поведенческая верификация выполняется на симуляторах с возможностью параллельной работы. Обеспечивает работу на уровне регистровых передач (RTL) и на вентильном уровне. Может использоваться при разработке тестирующего окружения (DFT). Обычно САПР для верификации использует методологию UVM - Universal Verification Methodology, может выполнять симуляцию для проектов с низким уровнем потребления, со смешанными сигналами (цифровые + аналоговые). Тестирование может проводиться и на уровне кристалла и на уровне отдельных IP блоков, тесты обычно формируются на языках SystemVerilog/UVM, SystemC. По результатам формируется база данных из результатов симуляции, верификации по различным метрикам, результатов анализа покрытия тестами.

Примеры САПР: Xcelium (Cadence), QuestaSim.

Формальная верификация - инструмент оценки соответствия RTL- описания блока заданной формальной логической модели. Статический анализ на основе математических методов теории доказательств дает возможность провести исчерпывающую проверку логики работы блока и сравнить её с формальными требованиями.

Проверки выполняются с помощью механизма предположений (утверждений - Assert). Этот механизм позволяет проверить заданное разработчиком условие. Например, в блоке HDL-кода можно вставить проверку состояния внутренних переменных, которая постоянно будет выполняться в процессе моделирования. Использование встроенных утверждений позволяет увеличить наблюдаемость проекта при моделировании, быстрее и легче локализовать источник ошибки, поскольку проверки делаются непосредственно по месту. Кроме того, встроенные утверждения очень полезны в методах формальной верификации. Встроенные утверждения отражают то, что мы ожидаем от устройства, как оно должно работать. Непосредственно в утверждении может быть определено как правильное, так и неправильное поведение компонентов устройства (RTL-блоки, интерфейсные блоки и блоки управления). Таким образом, можно контролировать и правильность поведения схемы, и возникновение запрещенных ситуаций.

Примеры САПР: JasperGold.

Вопросы для самостоятельной работы

В качестве практической работы рекомендуется проведение самостоятельной отработки элементарных навыков на готовом проекте демонстрационного примера. Для этого рекомендуется открыть проект чистого Кузнечика (архивный файл gstdr3432015_apbctr_ahbdflow_tb_struct.rar) и выполнить доработку кода проекта: дописать счётчик записей ключа, отсинтезировать, модифицировать тестбенч, запустить моделирование, получить временные диаграммы.

< Лекция 3 || Лекция 4 || Лекция 5 >