Данное учебное пособие является первым из серии из двух частей, в которой рассказывается о том, как разработать формирователь луча в Simulink ®, подходящий для внедрения на аппаратном обеспечении, например, в FPGA. Он также покажет, как сравнивать результаты модели реализации с результатами поведенческой модели. Во второй части учебного пособия FPGA Based Beamforming in Simulink: Part 2 - Code Generation показано, как сгенерировать код HDL из модели реализации и проверить, что сгенерированный код HDL дает правильные результаты по сравнению с поведенческой моделью.
В учебном пособии показано, как спроектировать формирователь луча, готовый к внедрению FPGA, в соответствии с соответствующей поведенческой моделью в Simulink ® с использованием Toolbox™ системы с фазированным массивом, DSP System Toolbox™ и Fixed-Point Designer™. Чтобы проверить модель реализации, она сравнивает выходные данные моделирования модели реализации с выходными данными поведенческой модели.
Toolbox™ Система фазированных массивов (Phased Array System) используется для проектирования и проверки функционального алгоритма с плавающей запятой, который обеспечивает поведенческую ссылочную модель. Поведенческая модель затем используется для проверки результатов модели реализации с фиксированной точкой, используемой для генерации кода HDL.
Fixed-Point Designer™ предоставляет типы данных и инструменты для разработки алгоритмов с фиксированной точкой и одной точностью для оптимизации производительности встраиваемого оборудования. Можно выполнять бит-истинное моделирование, чтобы наблюдать влияние ограниченного диапазона и точности без реализации конструкции на оборудовании.
При подготовке модели Simulink ® для целевых FPGA необходимо учитывать три основные концепции моделирования:
Sample-based processing (Обработка на основе образцов) - это эффективный метод обработки данных в аппаратном обеспечении, который позволяет выбирать между ресурсами и пропускной способностью.
Подсистема, предназначенная для генерации кода HDL: Чтобы генерировать код HDL из модели, алгоритм реализации должен находиться внутри подсистемы Simulink.
Выровненные по времени выходные данные поведенческих моделей и моделей реализации: для сравнения выходных данных поведенческих моделей и моделей реализации FPGA необходимо выровнять по времени их выходные данные путем добавления задержки к поведенческой модели.
В этом примере в качестве поведенческого алгоритма используется фазово-сдвигающий формирователь луча, который повторно реализуется в подсистеме алгоритма 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. Помимо построения графика выходных данных обеих ветвей для сравнения двух, мы также вычисляем и строим график разности или ошибки между обоими выходами.
Обратите внимание, что
на выходе поведенческой модели имеется задержка (). Это необходимо, потому что алгоритм реализации использует 55 задержек, чтобы разрешить конвейерную обработку, которая создает задержку, которая должна быть учтена. Учет этой задержки называется балансировкой задержки и необходим для выравнивания по времени выходных данных между поведенческой моделью и моделью реализации, чтобы упростить сравнение результатов.
Для синтеза принятого сигнала на фазированной антенной решетке модель включает в себя подсистему, которая генерирует многоканальный сигнал. Подсистема многоканального сигнала основной полосы частот моделирует передаваемый сигнал и принятый целевой эхо-сигнал при угле падения, захваченном через 10-элементную антенную решетку. Подсистема также включает в себя модель предварительного усилителя приемника для учета шума приемника. Эта подсистема генерирует входной стимул для наших моделей поведения и реализации.
% Open subsystem that generates the received multi-channel signal. open_system([modelname '/Baseband Multi-channel Signal']);

Модель включает в себя подсистему сериализации и квантования, которая преобразует сигналы с плавающей запятой, основанные на кадрах, в сигналы с фиксированной запятой, основанные на выборке, необходимые для моделирования потоковых данных в аппаратных средствах. Выборочная обработка была выбрана, потому что наша система будет работать медленнее 400 МГц; поэтому мы оптимизируем ресурсы вместо пропускной способности.
% Open subsystem that serializes and quantizes the received signal. open_system([modelname '/Serialization & Quantization']); set_param(modelname,'SimulationCommand','update')

Входной сигнал в подсистему сериализации имеет 10 каналов с 300 выборками на канал или сигнал размера 300x10. Подсистема выполняет сериализацию или распаковку сигнала, формирующего сигнал на основе выборки, который равен 1 10, т.е. один отсчет на канал, который затем квантуется для удовлетворения требований нашей системы.
Тип выходных данных блока квантования сигнала устанавливается равным:
Тип выходных данных = fixdt (1,12,19)
которая представляет собой длину слова со знаком, 12 бит и точность длины дроби 19 бит. Эта точность была выбрана, потому что мы нацелены на Xilinx ® Virtex ® -7 FPGA, который подключен к 12-битному ADC. Длина фракции была выбрана для максимального диапазона входного сигнала.
Подсистема алгоритма HDL, предназначенная для генерации кода HDL, реализует формирователь луча, который был разработан с использованием блоков Simulink, поддерживающих генерацию кода HDL.
Подсистема Angle2SteeringVec вычисляет задержку сигнала в каждом антенном элементе однородной линейной решетки (ULA). Затем задержка подается в подсистему умножения и накопления (MAC) для выполнения формирования луча.
% Open subsystem with HDL algorithm. open_system([modelname '/HDL Algorithm']);

Алгоритм в подсистеме алгоритма HDL функционально эквивалентен поведенческому алгоритму формирования диаграммы направленности со сдвигом фазы, но может генерировать код HDL. Существует три основных отличия, позволяющих этой подсистеме генерировать эффективный код HDL:
обработка выполняется последовательно, т.е. используется обработка на основе проб
арифметика выполняется с фиксированными типами данных
были добавлены задержки, чтобы разрешить конвейерную обработку с помощью инструмента синтеза 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,
за которым следует комплексный блок умножения, который содержит a,
затем есть a,
за которым следуют 4 блока задержки для
в общей сложности 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 в данные с плавающей запятой, установив тип выходных данных блока преобразования типов данных равным удвоенному.
Запустите модель для отображения результатов. Модель Simulink можно запустить, нажав кнопку «Воспроизведение» или вызвав команду sim в командной строке MATLAB. Используйте области для визуального сравнения выходных данных.
sim(modelname);



Как видно из временной области, показывающей сигнал, сформированный лучом, и сигнал, сформированный лучом (HDL), эти два сигнала почти идентичны. Мы можем увидеть ошибку порядка 10 ^ -3 в области Ошибка. Это показывает, что подсистема алгоритма HDL выдает те же результаты, что и поведенческая модель в пределах ошибки квантования. Это важный первый шаг перед созданием кода HDL.
Поскольку модель ЛПВП использовала 55 задержек, область, названная «Сигнал с формированием луча ЛПВП», задерживается на 55 мс по сравнению с исходным переданным сигналом или сигналом с формированием луча, показанным в области «Поведенческий сигнал с формированием луча».
Этот пример является первым в серии учебных пособий из двух частей, посвященных разработке алгоритма, готового к внедрению FPGA, автоматическому созданию кода HDL и проверке кода HDL в Simulink. В этом примере показано, как использовать блоки из панели инструментов системы фазированных массивов для создания поведенческой модели, служить золотой ссылкой и как создать подсистему для реализации с использованием блоков Simulink, поддерживающих генерацию кода HDL. Он также сравнил выходные данные модели реализации с выходными данными соответствующей поведенческой модели для проверки того, что два алгоритма функционально эквивалентны.
После проверки того, что ваш алгоритм реализации функционально эквивалентен вашей золотой ссылке, вы можете использовать HDL Coder™ для генерации кода HDL из Simulink (HDL Coder) и HDL Verifier™ для создания Cosimulation Model (HDL Coder) тестового стенда.
Вторая часть этого двухчастного учебного пособия FPGA Based Beamforming in Simulink: Part 2 - Code Generation показывает, как генерировать код HDL из модели реализации и проверять, что сгенерированный код HDL дает те же результаты, что и поведенческая модель с плавающей запятой, а также модель реализации с фиксированной запятой.