FPGA основанный Beamforming в Simulink: часть 1 - проект алгоритма

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

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

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

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

Разделение модели для FPGA

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

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

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

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

Алгоритм Beamforming

В этом примере мы используем Формирователь луча Сдвига Фазы в качестве поведенческого алгоритма, который повторно реализован в подсистеме Алгоритма 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 задержек, чтобы позволить конвейерно обработать, который создает задержку, которая должна составляться. Составление этой задержки называется балансировкой задержки и необходимо для времени - выравнивают выход между поведенческой моделью и моделью реализации, чтобы облегчить сравнивать результаты.

Многоканальный получают сигнал

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

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

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

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

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

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

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

  • Выходные данные вводят = fixdt (1,12,19)

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

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

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

Подсистема Angle2SteeringVec вычисляет задержку сигнала в каждом антенном элементе Универсальной линейной матрицы (ULA). Задержка затем питается умножение, и накопите (MAC) подсистему, чтобы выполнить beamforming.

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

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

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

  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, мы видим, что a$Z^{-2}$, сопровождаемые комплексом, умножают блок, который содержит a$Z^{-1}$, затем существует a$Z^{-4}$, сопровождаемый 4 блоками задержки$Z^{-3}$ для в общей сложности 19 задержек. Значения задержки заданы в коллбэке PreLoadFcn в Model Properties.

Вычисление держащегося вектора

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

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

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

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

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

совпадать с основанным на выборке выходом сигнала из алгоритма реализации. В этом случае только необходимо преобразовать выход подсистемы Алгоритма HDL к с плавающей точкой, установив тип выходных данных блока Data Type Conversion удвоиться.

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

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

sim(modelname);

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

Поскольку модель HDL использовала 55 задержек, осциллограф назвал HDL, Сигнал Beamformed задержан на 55 мс, когда по сравнению с оригиналом передал или сигнал beamformed, показанный на Поведенческом осциллографе Сигнала Beamformed.

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

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

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

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