exponenta event banner

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

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

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

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

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

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

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

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

Кроме того, при запуске с новой модели можно выполнить hdlsetup (HDL Coder) для настройки модели Simulink для генерации кода HDL. Кроме того, чтобы настроить модель Simulink для создания тестового стенда, необходимого для проверки, необходимо открыть настройки модели Simulink, выбрать Test Bench в разделе Создание кода HDL на левой панели и проверить тестовый стенд HDL и модель Cosimulation в группе Свойства вывода генерации тестового стенда.

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

Запустите модель, созданную на основе FPGA Beamforing in Simulink: Part 1 - Algorithm Design, чтобы отобразить результаты. Модель Simulink можно запустить, нажав кнопку «Воспроизведение» или вызвав команду sim в командной строке MATLAB, как показано ниже. Используйте блоки временной области для визуального сравнения выходных кадров.

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 в диалоговом окне Configuration Parameters. В этом примере в разделе «Параметры модели» в разделе «Создание кода HDL» задаются следующие параметры:

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

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

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

  • Испытательный стенд: Выберите испытательный стенд ЛПВП и модель Cosimulation

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

Создание кода HDL и испытательного стенда

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

% 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 на 79, чтобы учесть 24 задержки, добавленные процессом генерации кода. Использование задержки 79 гарантирует, что выходной сигнал поведенческой модели выровнен по времени с выходным сигналом реализации и выходным сигналом косимуляции.

Проверка кода HDL с помощью Cosimulation

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

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

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

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

После запуска ModelSim, запуск модели испытательного стенда Simulink заполнит Questa Sim формами сигналов модели HDL и временными областями в Simulink. Ниже приведены примеры результатов в областях Questa Sim и Simulink.

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

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

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

% 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 для косимуляции кода ЛПВП и сравнения его выходных данных с выходными данными, генерируемыми моделью реализации ЛПВП.