Основанное на FPGA формирование луча в Simulink: Часть 1 - Проект алгоритма

Это руководство является первым из двух серий, которые проведут вас через то, как разработать beamformer в Simulink ®, подходящий для реализации на оборудовании, таком как программируемая матрица ворот (FPGA). Это также покажет, как сравнить результаты модели реализации с результатами поведенческой модели. Вторая часть руководства FPGA Based Beamforming в Simulink: Part 2 - Генерация кода показов, как сгенерировать HDL-код из модели реализации и проверить, что сгенерированный HDL-код дает правильные результаты по сравнению с поведенческой моделью.

В руководстве показано, как спроектировать готовый к реализации FPGA beamformer, чтобы соответствовать соответствующей поведенческой модели в Simulink ®, используя Toolbox™ Phased Array System, DSP System Toolbox™ и Fixed-Point Designer™. Чтобы проверить модель реализации, она сравнивает выходы симуляции модели реализации с выходами поведенческой модели.

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

Fixed-Point Designer™ предоставляет типы данных и инструменты для разработки алгоритмов с фиксированной и одной точностью для оптимизации эффективности встроенного оборудования. Можно выполнить симуляции bit-true, чтобы наблюдать влияние ограниченной области значений и точности, не реализуя проект на оборудовании.

Модель разбиения для FPGA

Существует три ключевые концепции моделирования, которые нужно иметь в виду при подготовке модели Simulink ® для целевых FPGA:

  • Основанная на выборке обработка: Также обычно упоминается как последовательная обработка, является эффективным методом обработки данных в аппаратных проектах, который позволяет вам достичь компромисса между ресурсами и пропускной способностью.

  • Подсистема, предназначенная для генерации HDL-кода: В порядке для генерации HDL-кода из модели, алгоритм реализации должен находиться внутри подсистемы Simulink.

  • Согласованные по времени выходы поведенческих и имплементационных моделей: Для сравнения выходов поведенческой и FPGA-моделей реализации необходимо время для выравнивания их выходов путем добавления задержки к поведенческой модели.

Алгоритм формирования луча

В этом примере мы используем Beamformer Фазы-Сдвига в качестве поведенческого алгоритма, который повторно реализован в подсистеме Алгоритма HDL, используя блоки Simulink, которые поддерживают генерацию HDL-кода. Задачей устройства формирования луча является вычисление фазы, необходимой между каждым из десяти каналов, чтобы максимизировать степень принимаемого сигнала в направлении угла падения. Ниже представлена модель Simulink с поведенческим алгоритмом и соответствующим им алгоритмом реализации для FPGA.

modelname = 'SimulinkBeamformingHDLWorkflowExample';
open_system(modelname);

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

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

Заметьте, что на $Z^{-55}$выходе поведенческой модели есть задержка (). Это необходимо, потому что алгоритм реализации использует 55 задержек, чтобы включить конвейеризацию, которая создает задержку, которая должна учитываться. Учет этой задержки называется балансировкой задержки и необходим для выравнивания по времени выхода между поведенческой моделью и моделью реализации, чтобы облегчить сравнение результатов.

Многоканальный сигнал приема

Чтобы синтезировать принятый сигнал в антенне фазированной решетки, модель включает в себя подсистему, которая генерирует многоканальный сигнал. Подсистема Baseband Multi-channel Signal моделирует переданную форму волны и принятый целевой эхо-сигнал при падающем угле, захваченном через 10-элементную антенную решетку. Подсистема также включает модель предварительного усилителя приемника для учета шума приемника. Эта подсистема генерирует входной стимул для наших моделей поведения и реализации.

% Open subsystem that generates the received multi-channel signal.
open_system([modelname '/Baseband Multi-channel Signal']);

Сериализация и квантование

Модель включает подсистему Serialization & Quantzation, которая преобразует сигналы с плавающей точкой, основанные на кадре, в сигналы с фиксированной точкой, основанные на выборке, необходимые для моделирования потоковых данных в оборудовании. Обработка на основе образцов была выбрана, потому что наша система будет работать медленнее, чем 400 МГц; поэтому мы оптимизируем ресурсы вместо пропускной способности.

% Open subsystem that serializes and quantizes the received signal.
open_system([modelname '/Serialization & Quantization']);
set_param(modelname,'SimulationCommand','update')

Входной сигнал к подсистеме сериализации имеет 10 каналов с 300 выборками на канал или сигнал размера 300x10. Подсистема сериализует или распаковывает сигнал, выдающий основанный на дискретизации сигнал, который составляет 1x10, т.е. по одной выборке на канал, который затем квантуется, чтобы удовлетворить требования нашей системы.

Тип выходных данных блока Quantize Signal установлен на:

  • Тип выходных данных = fixdt (1,12,19)

который является знаком, 12-битным размером слова и 19-битной точностью длины дроби. Эта точность была выбрана, потому что мы нацелены на Xilinx ® Virtex ® -7 FPGA, который соединяется с 12-битным АЦП. Длина дроби была выбрана, чтобы соответствовать максимальной области значений входного сигнала.

Разработка Подсистемы Реализации

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

Подсистема Angle2SteeringVec вычисляет задержку сигнала для каждого антенного элемента Единого Линейного Массива (ULA). Затем задержку подают в подсистему умножения и накопления (MAC) для выполнения формирования луча.

% Open subsystem with HDL algorithm.
open_system([modelname '/HDL Algorithm']);

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

  1. обработка выполняется последовательно, т.е. используется обработка на основе выборок

  2. арифметика выполняется с типами данных с фиксированной точкой

  3. задержки были добавлены, чтобы разрешить конвейеризацию с помощью инструмента HDL-синтеза

Чтобы гарантировать правильность синхронизации синхроимпульса, любая задержка, добавленная к одной ветви модели реализации, должна совпадать со всеми другими параллельными ветвями, как показано выше. Подсистема Angle2SteeringVec, например, добавила 36 задержек; поэтому верхняя ветвь Подсистемы Алгоритма HDL включает задержку в 36 выборок непосредственно перед подсистемой MAC. Аналогичным образом, подсистема MAC использовала 19 задержек, которые должны быть сбалансированы путем добавления 19 задержек к выходу подсистемы Angle2SteeringVec. Давайте посмотрим внутри MAC подсистемы, чтобы принять во внимание 19 задержек.

% Open the MAC subsystem.
open_system([modelname '/HDL Algorithm/MAC']);
set_param(modelname,'SimulationCommand','update')

Глядя на самую нижнюю ветвь подсистемы MAC, мы видим, $Z^{-2}$что, далее, комплексный блок умножения, который содержит a, $Z^{-1}$затем есть, $Z^{-4}$затем 4 блока задержки для$Z^{-3}$ в общей сложности 19 задержек. Значения задержки заданы в коллбэке PreLoadFcn в свойствах модели.

Вычисление вектора управления

Подсистема Angle2SteeringVec разбивает задачу на несколько шагов, чтобы вычислить вектор управления из угла прибытия сигнала. Сначала он вычисляет задержку прихода сигнала на каждом датчике на матрицу, умножающую положение антенного элемента в массиве на направление падения сигнала. Задержки затем подаются в подсистему SinCos, которая вычисляет тригонометрические функции синуса и косинуса с помощью простого и эффективного алгоритма CORDIC.

% Open the Angle2SteeringVec subsystem.
open_system([modelname '/HDL Algorithm/Angle2SteeringVec']);

Поскольку наш проект состоит из 10 элементов ULA, разнесенных на половину длины волны, антенный элемент положение основан на интервале между каждым антенным элементом, измеренным снаружи от центра антенной решетки. Мы можем задать интервал между элементами как вектор из 10 чисел в диапазоне от -6.7453 до 6.7453, т.е. с интервалом 1/2 длины волны, который составляет 2.99/2. Учитывая, что мы используем арифметику с фиксированной точкой, тип данных, используемый для вектора интервала между элементами, является fixdt (1,8,4), то есть тип числовых данных со знаком 8-разрядного размера слова и 4-разрядной длины дроби.

Десериализация

Чтобы сравнить основанный на выборке проект реализации с фиксированной точкой с поведенческим проектом с плавающей точкой, основанным на кадре, вам нужно десериализовать выход подсистемы реализации и преобразовать его в тип данных с плавающей точкой. Кроме того, можно сравнить результаты непосредственно с основанными на выборке сигналами, но затем необходимо отменить буферизацию выхода поведенческой модели, как показано:

чтобы соответствовать основанному на дискретизации сигналу, выводимому из алгоритма реализации. В этом случае вам нужно только преобразовать выход подсистемы HDL Algorithm в плавающую точку, установив тип выхода данных блока преобразования типов данных в double.

Сравнение выхода модели HDL с поведенческой моделью

Запустите модель, чтобы отобразить результаты. Можно запустить модель Simulink, нажав кнопку Play или вызвав команду sim в командной строке MATLAB. Используйте возможности для визуального сравнения выходов.

sim(modelname);

Как видно из Time Scope, показывающей Сигнал Формирования Луча и Сигнал Формирования Луча (HDL), эти два сигнала почти идентичны. Мы видим ошибку порядка 10 ^ -3 в области Error. Это показывает, что подсистема Алгоритма HDL приводит к тем же результатам, что и поведенческая модель в ошибке квантования. Это важный первый шаг перед генерацией HDL-кода.

Поскольку модель HDL использовала 55 задержек, возможности, названная HDL Beamformed Signal, задерживаются на 55 мс по сравнению с исходным переданным или лучистым сигналом, показанным на Поведенческих возможностях Beamformed Signal.

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

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

Если вы проверяете, что ваш алгоритм реализации функционально эквивалентен вашей золотой ссылке, можно использовать HDL- Coder™ для генерации HDL-кода из Simulink (HDL Coder) и HDL- Verifier™, чтобы сгенерировать испытательный стенд модели косимуляции (HDL Coder).

Вторая часть этой двухсекционной серии учебников FPGA Based Beamforming in Simulink: Part 2 - Генерация Кода показывает, как сгенерировать HDL-код из модели реализации и проверить, что сгенерированный HDL-код дает те же результаты, что и поведенческая модель с плавающей точкой, а также модель реализации с фиксированной точкой.