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 в модели (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 и файл потока битов, которые используют плату и настройки подключения.
Преобразовывать от сгенерированной модели до модифицированной модели:
Удалите ToFILSrc, FromFILSrc, ToFILSink, и Сравните подсистемы и создайте ветвь во входе системы координат блока Frame To Pixels.
Вставьте блок FIL Frame To Pixels перед блоком HDL Algorithm_fil. Вставьте блок FIL Pixels To Frame после блока HDL Algorithm_fil.
Ветвь система координат выход блока Pixels To Frame для сравнения. Можно сравнить целую систему координат целиком с блоком Diff. Сравните validOut
сигналы с помощью блока XOR.
В Системе координат FIL К Пикселям и Пикселям FIL, Чтобы Структурировать блоки, установите параметр Формата видео, чтобы совпадать с форматом видео Системы координат К Пикселям и Пикселям, Чтобы Структурировать блоки.
Установите Размер вектора в Системе координат FIL К Пикселям и Пикселям FIL Структурировать блоки к Frame
или Line
. Размер Системы координат FIL К Пиксельному вектору выход должен совпадать с размером Пикселей FIL, Чтобы Структурировать векторный вход. Размер вектора интерфейсов блока FIL не изменяет сгенерированный HDL-код. Это влияет только на пакетный размер связи между средством моделирования и платой 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 в цикле (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 в каждом пакете, значительно повысив эффективность линии связи.