exponenta event banner

Поток операций по моноимпульсной технике на основе FPGA: Часть 2 - Создание кода

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

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

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

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

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

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

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

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

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

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

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», выберите «Тестовый стенд» в разделе «Генерация кода HDL» на левой панели и проверьте тестовый стенд HDL и модель Cosimulation в группе свойств «Вывод генерации тестового стенда».

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

После проверки реализации с фиксированной точкой и получения моделью реализации тех же результатов, что и в поведенческой модели с плавающей точкой, можно создать код HDL и тестовый стенд. Для создания кода и тестового стенда установите параметры генерации кода HDL в диалоговом окне Configuration Parameters. В разделе Создание кода HDL (HDL Code Generation) в настройках модели (Model Settings) установлены следующие параметры:

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

  • Оптимизация: Отменить выбор всех оптимизаций

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

  • Испытательный стенд: выбор испытательного стенда HDL, модели Cosimulation и испытательного стенда SystemVerilog DPI

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

После обновления настроек модели Simulink можно использовать кодер HDL для создания кода HDL из Simulink ® для создания кода HDL для подсистемы алгоритма HDL. Используйте проверку HDL для создания модели испытательного стенда.

% 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 и временными областями в 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 для метода с фиксированной точкой и моноимпульсом и проверить созданный код в Simulink ®.