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

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

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

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

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

HDL Verifier™ позволяет вам протестировать и проверить Verilog® и проекты VHDL® для FPGAs, ASICs и SoCs. Мы проверим RTL, сгенерированный из нашей модели Simulink против испытательного стенда, запускающегося в Simulink® с помощью cosimulation с симулятором HDL.

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

Этот пример принимает, что вы имеете правильно модель Simulink настройки, которая содержит подсистему с моноимпульсным методом созданные с использованием блоки Simulink, которые используют вычисления с фиксированной точкой, и поддерживает генерацию HDL-кода. Основанный на FPGA Моноимпульсный Рабочий процесс Метода: Часть 1 - Проект Алгоритма показывает, как создать такую модель.

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

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

Запустите модель, созданную в основанном на FPGA Моноимпульсном Рабочем процессе Метода: Часть 1 - Проект Алгоритма, чтобы отобразить результаты. Можно запустить модель Simulink путем нажатия на кнопку воспроизведения или вызова 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 Модели, выберите Test Bench под генерацией HDL-кода в левой панели и проверяйте испытательный стенд HDL и модель Cosimulation в группе Выходных свойств Генерации Испытательного стенда.

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

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

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

  • Оптимизация: Снимите флажок со всей оптимизацией

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

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

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

После того, как Настройки Модели Simulink были обновлены, можно использовать 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

Поскольку модель составляла конвейеризацию в умножении, и мы сняли флажок со всей оптимизацией, нет никаких дополнительных задержек, добавленных к модели. Мы должны компенсировать эти задержки поведенческой модели с плавающей точкой выход. Это выровняет выход поведенческой модели с моделью реализации, а также cosimulation. Задержка ($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 и запустите cosimulation модель, чтобы отобразить результаты симуляции. Можно нажать на кнопку воспроизведения на верхней части холста Simulink, чтобы запустить испытательный стенд, или можно сделать это через командное окно из кода ниже

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

Тестовая модель Simulink® заполнит Ксту Сима с сигналом модели HDL и Time Scope в Simulink. Ниже примеры результатов в Ксте Симе и Осциллографах Simulink.

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

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

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

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

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