FPGA основанный Beamforming в Simulink: часть 2 - генерация кода

Этот пример является вторым из серии из двух частей, которая проведет вас по шагам, чтобы сгенерировать HDL-код для beamforming алгоритма и проверить, что сгенерированный код функционально правилен. Первая часть учебного FPGA Основанный Beamforming в Simulink: Часть 1 - Проект Алгоритма показывает, как разработать алгоритм в 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® для более чем 300 блоков Simulink та генерация HDL-кода поддержки. Те блоки Simulink работают с последовательными данными с помощью вычислений с фиксированной точкой с соответствующими задержками, чтобы позволить конвейерно обработать инструментом синтеза.

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

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

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

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

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

Запустите модель, созданную в FPGA Основанный Beamforming в Simulink: Часть 1 - Проект Алгоритма, чтобы отобразить результаты. Можно запустить модель Simulink путем нажатия на кнопку воспроизведения или вызова sim команды на командной строке MATLAB как показано ниже. Используйте блоки Time Scope, чтобы сравнить выходные системы координат визуально.

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 через диалоговое окно Параметров конфигурации. В данном примере мы устанавливаем следующие параметры в Настройках Модели под генерацией HDL-кода:

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

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

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

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

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

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

Если вы установили Настройки Simulink Модели, можно использовать HDL Coder™, чтобы сгенерировать HDL-код для подсистемы Алгоритма HDL. (Для примера смотрите, Генерируют HDL-код из Модели Simulink (HDL Coder).) Используют HDL Verifier™, чтобы сгенерировать Испытательный стенд (HDL Coder) тестовая модель SystemVerilog DPI.

% 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. Это выровняет выход поведенческой модели с моделью реализации, а также cosimulation выход.

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

Верификация HDL-кода через Cosimulation

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

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

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

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

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

ПРИМЕЧАНИЕ: необходимо перезапустить Ксту Сима каждый раз, когда вы хотите запустить симуляцию Simulink. Можно сделать это путем выполнения "перезапуска" в командной строке Ксты Сима. В качестве альтернативы можно выйти из Ксты Сима и повторно запустить его путем двойного клика по синему полю в верхнем левом углу тестовой модели Simulink.

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

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

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

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

Этот пример является вторым из ряда примера 2D части о том, как автоматически сгенерировать HDL-код для фиксированной точки, основанного на выборке beamforming алгоритма и проверить сгенерированный код в Simulink. Первая часть учебного FPGA Основанный Beamforming в Simulink: Часть 1 - Проект Алгоритма показывает, как разработать алгоритм в Simulink, подходящем для реализации на FPGA. Этот пример показал, как установить модель, чтобы сгенерировать HDL-код и cosimulation испытательный стенд для Подсистемы Simulink, созданной с блоками та генерация HDL-кода поддержки. Это показало, как установить и запустить ModelSim к cosimulate HDL-код и сравнить его выход с выходом, сгенерированным моделью реализации HDL.