FPGA в цикле

FPGA в цикле (FIL) позволяет вам запустить Simulink® или MATLAB® симуляция, которая синхронизируется с проектом HDL, работающим на плате FPGA. Эта ссылка между средством моделирования и платой позволяет вам проверить реализации HDL непосредственно по Simulink или алгоритмам MATLAB. Можно применить реальные данные и сценарии тестирования от этих алгоритмов до проекта HDL, который работает на FPGA.

В Simulink можно использовать FIL Frame To Pixels и блоки FIL Pixels To Frame, чтобы ускорить связь между Simulink и платой FPGA. В MATLAB можно изменить сгенерированный код, чтобы ускорить связь с платой FPGA.

FPGA в симуляции цикла с блоками Vision HDL Toolbox

В этом примере показано, как изменить сгенерированный FPGA в модели (FIL) цикла для более эффективной симуляции протокола потокового видео Vision HDL Toolbox™.

Автоматически сгенерированная модель FIL

Когда вы генерируете файл программирования для цели FIL в Simulink, HDL Workflow Advisor создает модель, чтобы сравнить симуляцию FIL с вашим проектом Simulink. Для получения дополнительной информации того, как сгенерировать артефакты FIL для модели Simulink, см. Симуляцию FIL с HDL Workflow Advisor для Simulink (HDL Verifier).

Для проектов Vision HDL Toolbox блок FIL в сгенерированной модели реплицирует передающий потоком пиксель интерфейс и отправляет один пиксель за один раз в FPGA. Показанная модель была сгенерирована из модели в качестве примера в Алгоритмах Обработки видеоданных Проекта для HDL в Simulink.

Верхняя часть модели реплицирует ваш проект Simulink. Сгенерированный блок FIL в нижней части связывается с FPGA. Подсистема ToFILSrc копирует пиксельный потоковый ввод блока HDL Algorithm к подсистеме FromFILSrc. Подсистема ToFILSink копирует пиксельный поток выход блока HDL Algorithm в Сравнить подсистему, где это по сравнению с выходом блока HDL Algorithm_fil. Для обработки изображений и обработки видеоданных, эта настройка является медленной, потому что модель отправляет только один пиксель и его связанные управляющие сигналы, в каждом пакете к и от платы FPGA.

Измененная модель FIL для пиксельной потоковой передачи

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

Преобразовывать от сгенерированной модели до модифицированной модели:

  1. Удалите ToFILSrc, FromFILSrc, ToFILSink, и Сравните подсистемы и создайте ветвь во входе системы координат блока Frame To Pixels.

  2. Вставьте блок FIL Frame To Pixels перед блоком HDL Algorithm_fil. Вставьте блок FIL Pixels To Frame после блока HDL Algorithm_fil.

  3. Ветвь система координат выход блока Pixels To Frame для сравнения. Можно сравнить целую систему координат целиком с блоком Diff. Сравните validOut сигналы с помощью блока XOR.

  4. В Системе координат FIL К Пикселям и Пикселям FIL, Чтобы Структурировать блоки, установите параметр Формата видео, чтобы совпадать с форматом видео Системы координат К Пикселям и Пикселям, Чтобы Структурировать блоки.

  5. Установите Размер вектора в Системе координат FIL К Пикселям и Пикселям FIL Структурировать блоки к Frame или Line. Размер Системы координат FIL К Пиксельному вектору выход должен совпадать с размером Пикселей FIL, Чтобы Структурировать векторный вход. Размер вектора интерфейсов блока FIL не изменяет сгенерированный HDL-код. Это влияет только на пакетный размер связи между средством моделирования и платой FPGA.

Модифицированная модель передает целый кадр к плате FPGA в каждом пакете, значительно повысив эффективность линии связи.

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

При использовании FPGA в цикле с мультипиксельным проектом потоковой передачи необходимо сгладить пиксельные порты к векторам для ввода и вывода блока FIL. Используйте блоки Selector, чтобы разделить потоки входного пикселя на векторы NumPixels и использовать блок Vector Concatenate, чтобы повторно объединить выходные векторы.

Если каждый пиксель представлен больше чем одним компонентом, блок FIL Frame To Pixels имеет один порт данных на компонент, и блок FIL имеет NumPixels ×NumComponents порты. Разделите каждую матрицу компонента в векторы NumPixels.

Эта модель показывает мультипиксель, один проект компонента.

Для генерации кода VHDL, в Configuration Parameters> HDL Code Generation> Global Settings> Ports, устанавливает параметр Scalarize ports на DUT Level.

FPGA в симуляции цикла с системными объектами Vision HDL Toolbox

В этом примере показано, как изменить сгенерированный FPGA в цикле (FIL) скрипт для более эффективной симуляции протокола потокового видео Vision HDL Toolbox™. Для получения дополнительной информации того, как сгенерировать артефакты FIL для MATLAB® System object™, см. Симуляцию FIL с HDL Workflow Advisor для MATLAB (HDL Verifier).

Автоматически сгенерированная функция FIL

Когда вы генерируете файл программирования для цели FIL в MATLAB, HDL Workflow Advisor создает испытательный стенд, чтобы сравнить симуляцию FIL с вашим проектом MATLAB. Для проектов Vision HDL Toolbox, DUTname_fil функция в испытательном стенде реплицирует передающий потоком пиксель интерфейс и отправляет один пиксель за один раз в FPGA. DUTname является именем функции что вы сгенерированный HDL-код от.

Этот фрагмент кода от сгенерированного испытательного стенда TBname_fil.m, сгенерированный из скрипта в качестве примера в Передающем потоком пиксель Проекте в MATLAB. Код вызывает сгенерированный DUTname_fil функционируйте однажды для каждого пикселя в системе координат.

for p = 1:numPixPerFrm
    [pixOutVec( p ),ctrlOutVec( p )] = PixelStreamingDesignHDLDesign_fil( pixInVec( p ), ctrlInVec( p ) );
end

Сгенерированное DUTname_fil вызовы функции ваша предназначенная на HDL функция. Это также вызывает DUTname_sysobj_fil функция, которая содержит Системный объект, который соединяется с FPGA. DUTname_fil сравнивает выход двух функций, чтобы проверить, что реализация FPGA совпадает с исходными результатами MATLAB. Этот отрывок из файла DUTname_fil.m.

% Call the original MATLAB function to get reference signal
[ref_pixOut,tmp_ctrlOut] = PixelStreamingDesignHDLDesign(pixIn,ctrlIn);
  ...
% Run FPGA-in-the-Loop
[pixOut,ctrlOut_hStart,ctrlOut_hEnd,ctrlOut_vStart,ctrlOut_vEnd,ctrlOut_valid] ...
  = PixelStreamingDesignHDLDesign_sysobj_fil(pixIn,ctrlIn_hStart,ctrlIn_hEnd,ctrlIn_vStart,ctrlIn_vEnd,ctrlIn_valid);
  ...
% Verify the FPGA-in-the-Loop output
hdlverifier.assert(pixOut,ref_pixOut,'pixOut');

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

Измененный испытательный стенд FIL для пиксельной потоковой передачи

Чтобы улучшить коммуникационную полосу пропускания с платой FPGA, можно изменить автоматически сгенерированный испытательный стенд, TBname_fil.m. Модифицированный испытательный стенд вызывает Системный объект FIL непосредственно с одной системой координат за один раз. Эти отрывки от PixelStreamingDesignHDLTestBench_fil_frame.m скрипт, измененный от артефактов FIL, сгенерирован из скрипта в качестве примера в Передающем потоком пиксель Проекте в MATLAB. Вы не можете запустить этот скрипт, как. Необходимо сгенерировать собственный Системный объект FIL, функцию и файл потока битов, которые используют плату и настройки подключения. Затем или измените свою версию сгенерированного испытательного стенда или измените этот скрипт, чтобы использовать ваш сгенерированный объект FIL.

Объявите экземпляр сгенерированного Системного объекта FIL.

fil = class_PixelStreamingDesignHDLDesign_sysobj;

Закомментируйте цикл по пикселям в системе координат.

%         for p = 1:numPixPerFrm
%            [pixOutVec( p ),ctrlOutVec( p )] = PixelStreamingDesignHDLDesign_fil( pixInVec( p ), ctrlInVec( p ) );
%         end

Замените прокомментированный цикл на код ниже. Вызовите step метод fil объект с векторами, содержащими целую систему координат пикселей данных и управляющих сигналов. Передайте каждый управляющий сигнал объекту отдельно как вектор из логических значений. Затем повторно объедините векторы управляющего сигнала в вектор из структур.

[pixOutVec,hStartOut,hEndOut,vStartOut,vEndOut,validOut] = ...
    step(fil,pixInVec,[ctrlInVec.hStart]',[ctrlInVec.hEnd]',[ctrlInVec.vStart]',[ctrlInVec.vEnd]',[ctrlInVec.valid]');
ctrlOutVec = arrayfun(@(hStart,hEnd,vStart,vEnd,valid) ...
    struct('hStart',hStart,'hEnd',hEnd,'vStart',vStart,'vEnd',vEnd,'valid',valid),...
    hStartOut,hEndOut,vStartOut,vEndOut,validOut);     

Эти изменения кода удаляют попиксельную верификацию результатов FIL против результатов MATLAB. Опционально, можно добавить пиксельный цикл, чтобы вызвать ссылочную функцию и покадровое сравнение результатов. Однако вызывание исходной функции для ссылки замедляет симуляцию.

for p = 1:numPixPerFrm
     [ref_pixOutVec(p),ref_ctrlOutVec(p)] = PixelStreamingDesignHDLDesign(pixInVec(p),ctrlInVec(p));
end

После вызова fil возразите, сравните выходные векторы.

hdlverifier.assert(pixOutVec',ref_pixOutVec,'pixOut')
hdlverifier.assert([ctrlOutVec.hStart],[ref_ctrlOutVec.hStart],'hStart')
hdlverifier.assert([ctrlOutVec.hEnd],[ref_ctrlOutVec.hEnd],'hEnd')
hdlverifier.assert([ctrlOutVec.vStart],[ref_ctrlOutVec.vStart],'vStart')
hdlverifier.assert([ctrlOutVec.vEnd],[ref_ctrlOutVec.vEnd],'vEnc')
hdlverifier.assert([ctrlOutVec.valid],[ref_ctrlOutVec.valid],'valid')

Этот модифицированный испытательный стенд передает целый кадр к плате FPGA в каждом пакете, значительно повысив эффективность линии связи.

Смотрите также

Блоки

Объекты

Похожие темы