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

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

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

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

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

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

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

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

Чтобы начать с новой модели, запустите hdlsetup, чтобы сконфигурировать модель Simulink для генерации HDL-кода. Откройте настройки модели Simulink, чтобы сконфигурировать модель Simulink для создания испытательного стенда, необходимого для верификации. Выберите Test Bench в разделе HDL Code Generation на левой панели и проверьте HDL-тестовый стенд и модель косимуляции в группе свойств Test Bench Generation Output.

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

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

modelname = 'SimulinkDDCMonopulseHDLWorkflowExample';
open_system(modelname);

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

sim(modelname);

Генерация

кода

В этом разделе описывается процедура генерации HDL-кода для DDC и моноимпульсного метода и проверки функциональности сгенерированного кода. Поведенческая модель предоставляет ссылочные значения, чтобы убедиться, что выход из HDL находится в пределах допуска. Основанный на настройке модели Simulink, как описано выше, метод монопульса, разработанный с использованием арифметики с фиксированной точкой и поддерживающий генерацию HDL-кода. Кроме того, если вы начинаете с новой модели, можно запустить hdlsetup (HDL Coder), чтобы сконфигурировать модель Simulink для генерации HDL-кода.

Чтобы сконфигурировать модель Simulink для создания тестового стенда, откройте Simulink's Model Settings, выберите Test Bench в разделе HDL Code Generation на левой панели и проверьте HDL-тестовый стенд и модель косимуляции в группе свойств вывода Test Bench Generation.

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

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

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

  • Оптимизация: Выключите все оптимизации

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

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

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

После обновления Simulink Model Settings можно использовать HDL Coder для генерации HDL-кода из Simulink ®, чтобы сгенерировать HDL-код для подсистемы алгоритма HDL. Используйте HDL Verifier, чтобы сгенерировать тестовую модель.

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

Поскольку модель учитывала конвейеризацию в умножениях, а мы не проверяли все оптимизации, никаких дополнительных задержек в модели не добавляется. Мы должны компенсировать эти задержки для выхода поведенческой модели с плавающей точкой. Это выравнивает выход поведенческой модели с моделью реализации, а также с косимуляцией. Задержка $Z^{-215}$() добавляется к выходу цифрового компаратора. Эта задержка добавляется, чтобы компенсировать задержку в цепи DDC. Кроме того, из 220 модулей задержки 215 модулей задержки компенсируют задержку в цепи DDC и 5 модули в подсистеме моноимпульсной суммы и различия.

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

% To open the test bench model, uncomment the following lines of code
% modelname = ['gm_',modelname,'_mq'];
% open_system(modelname);

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

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

Тестовая модель Simulink ® заполнит Questa Sim сигналом HDL-модели и Time Scopes в Simulink. Ниже приведены примеры результатов в Questa Sim и Осциллографы Simulink.

Область осциллографа Simulink ниже показывает действительные и мнимые части как для косимуляции, так и для теста проекта (DUT), а также ошибку между ними

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

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

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

Сгенерированный HDL-код, а также испытательный стенд косимуляции для подсистемы Simulink были созданы с блоками, которые поддержка генерацию HDL-кода. В нем было показано, как настроить и запустить ModelSim для косимуляции HDL-кода. Косимуляция выполняется через ModelSim для HDL-кода и сравнения результатов с выходными данными, генерируемыми HDL- модели. Пример помог в автоматической генерации HDL-кода для метода с фиксированной точкой и моноимпульсом и верификации сгенерированного кода в Simulink ®.