Основанное на FPGA формирование луча в Simulink: Часть 2 - Генерация кода

Это руководство является вторым из двухкомпонентных серий, которые проведут вас через шаги, чтобы сгенерировать HDL-код для алгоритма формирования луча и проверить, что сгенерированный код функционально правильен. Первая часть учебника FPGA Based Beamforming in Simulink: Part 1 - Algorithm Design показывает, как разработать алгоритм в Simulink, подходящий для реализации на оборудовании, таком как программируемая матрица ворот (FPGA), и как сравнить вывод модели реализации с фиксированной точкой с

Это руководство использует HDL- Coder™ для генерации HDL-кода из модели Simulink ®, разработанной в первой части, и проверяет HDL-код с помощью HDL- Verifier™. Мы используем HDL- Verifier™, чтобы сгенерировать тестовую модель косимуляции, чтобы проверить поведение автоматически сгенерированного HDL-кода. Испытательный стенд использует ModelSim ® для косимуляции, чтобы проверить автоматически сгенерированный HDL код.

Phased Array System Toolbox™ Блоков Simulink моделировать операции с подкреплением данных с плавающей точкой и обеспечивает поведенческий образец модели. Мы используем эту поведенческую модель, чтобы проверить результаты модели реализации и в конечном счете автоматически сгенерированного HDL-кода.

HDL Coder™ генерирует портативный, синтезируемый код Verilog ® и VHDL ® для более чем 300 блоков Simulink, поддерживающих генерацию HDL-кода. Эти блоки Simulink работают с последовательными данными, используя арифметику с фиксированной точкой с надлежащими задержками, чтобы позволить конвейеризацию с помощью инструмента синтеза.

HDL Verifier™ позволяет тестировать и проверять проекты Verilog ® и VHDL ® для FPGA, ASIC и СнК. Мы проверим RTL, сгенерированный из нашей модели Simulink, на тестовом стенде, работающем в Simulink ®, используя косимуляцию с помощью HDL-симулятора.

Модель реализации

Это руководство предполагает, что у вас есть правильно настроенная модель Simulink, которая содержит подсистему с алгоритмом формирования луча, разработанным с использованием блоков Simulink, которые используют арифметику с фиксированной точкой и поддерживают генерацию HDL-кода. FPGA Based Beamforming in Simulink: Part 1 - Algorithm Design показывает, как создать такую модель.

Кроме того, если вы начинаете с новой модели, можно запустить hdlsetup (HDL Coder), чтобы сконфигурировать модель Simulink для генерации HDL-кода. И, чтобы сконфигурировать модель Simulink для создания тестового стенда, необходимого для верификации, необходимо открыть Simulink's Model Settings, выбрать Test Bench под HDL Code Generation на левой панели и проверить HDL-тестовый стенд и модель косимуляции в группе свойств Test Bench Generation Oute Oute.

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

Запустите модель, созданную в FPGA Based Beamforming в Simulink: Part 1 - Algorithm Design, чтобы отобразить результаты. Можно запустить модель Simulink, нажав кнопку Play или вызвав команду sim в командной строке MATLAB, как показано ниже. Используйте блоки Time Scope, чтобы визуально сравнить выходные системы координат.

modelname = 'SimulinkBeamformingHDLWorkflowExample';
open_system(modelname);

% Ensure model is visible and not obstructed by scopes.
open_system(modelname);
set(allchild(0),'Visible','off');

sim(modelname);

Настройки модели

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

  • Цель: Xilinx Vivado синтез инструмент; Virtex7 семейства; Устройство xc7vx485t; пакет fg1761, скорость -1; и целевой частотой 300 МГц.

  • Оптимизация: Выключите все оптимизации, кроме задержек баланса

  • Глобальные настройки: Установите тип сброса на Asynchronous

  • Испытательный стенд: Выбор HDL- испытательного стенда и модели косимуляции

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

Генерация HDL-кода и создание испытательного стенда

После установки параметров модели Simulink можно использовать HDL- Coder™ для генерации HDL-кода для подсистемы алгоритма HDL. Для получения примера смотрите Сгенерировать HDL-код из модели Simulink (HDL Coder).

% Uncomment these two lines to generate HDL code and test bench.
% makehdl([modelname '/HDL Algorithm']);   % Generate HDL code
% makehdltb([modelname '/HDL Algorithm']); % Generate Cosimulation test bench

Заметьте, что при выполнении команды makehdl информация отображается в командном окне MATLAB. В этой информации указывается величина задержки, добавленная в процессе автоматической генерации кода. В этом случае добавляются задержки 24 которые приводят к дополнительной задержке 24 * 1 мс = 24 мс. Эта задержка будет замечена при рассмотрении наших конечных результатов, которые имеют общую задержку 79 мс.

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

После генерации HDL-кода и тестирования в рабочей директории создается новая модель Simulink с именем gm_<modelname>_mq, содержащая блок ModelSim ®, которая выглядит следующим образом:

% Uncomment the following two lines to open the test bench model.
% modelname = ['gm_',modelname,'_mq'];
% open_system(modelname);

На данной точке можно хотеть изменить настройку задержки в блоке HDL Latency на 79, чтобы учесть 24 задержки, добавленные процессом генерации кода. Использование задержки 79 гарантирует, что выход поведенческой модели согласован по времени с выходом реализации и выходом косимуляции.

HDL-код, Верификация через косимуляцию

Следующие шаги запустят ModelSim; поэтому убедитесь, что команда запуска ModelSim, vsim, находится на пути машины, на которой вы работаете.

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

Запустите тестовую модель Simulink, чтобы отобразить результаты симуляции. Можно запустить модель Simulink, нажав кнопку Play или вызвав команду sim в командной строке MATLAB, как показано ниже. Тестовая модель включает блоки Time Scope, чтобы сравнить вывод косимуляции, выполненной с ModelSim с выходом подсистемы HDL в Simulink.

% Uncomment the following line, if ModelSim is installed, to run the test bench.
% sim(modelname);

После запуска ModelSim, запуск тестовой модели Simulink заполнит Questa Sim осциллографами HDL-модели и Time Scopes в Simulink. Ниже приведены примеры результатов в Questa Sim и Осциллографы Simulink.

ПРИМЕЧАНИЕ. Необходимо перезапускать Questa Sim каждый раз, когда необходимо запустить симуляцию Simulink. Это можно сделать, выполнив «перезапуск» в командной строке Questa Sim. Также можно выйти из Questa Sim и запустить его заново, дважды щелкнув по синему полю в верхнем левом углу тестовой модели Simulink.

Область видимости Simulink ниже показывает как модель косимуляции, так и модель HDL (DUT), выдающую версию исходного сигнала с задержкой 79 мс, полученную поведенческой моделью, как и ожидалось, без различий между двумя формами волны. Задержка 79ms обусловлена первоначальной задержкой 55 мс, добавленной в подсистему HDL Algorithm, чтобы включить конвейеризацию с помощью инструмента синтеза, и дополнительной задержкой 24 мс из-за балансировки задержки, которая выполняется во время автоматической генерации HDL-кода. Дополнительные 24 добавленных задержки сообщаются на шаге генерации кода выше.

Осциллографы Simulink, сравнивающие результаты косимуляции, можно найти в тестовой модели стенда внутри подсистемы Compare, которая находится на выходе подсистемы Algorithm_mq HDL.

% Uncomment the following line to open the subsystem with the scopes.
% open_system([modelname,'/Compare/Assert_beamformingOutHDL'])

Сводные данные

Этот пример является вторым из двухкомпонентной серии уроков о том, как автоматически сгенерировать HDL-код для алгоритма формирования луча на основе фиксированной точки и проверить сгенерированный код в Simulink. Первая часть учебника FPGA Based Beamforming in Simulink: Part 1 - Algorithm Design показывает, как разработать алгоритм в Simulink, подходящий для реализации на FPGA. Этот пример показал, как настройка модель для генерации HDL-кода и испытательного стенда косимуляции для подсистемы Simulink, созданной с блоками, которые поддержка генерацию HDL-кода. Он показал, как настроить и запустить ModelSim, чтобы косимулировать HDL-код и сравнить его вывод с выходом, сгенерированным моделью реализации.