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