Цикл (FIL) позволяет вам запустить Simulink® или MATLAB® симуляция, которая синхронизируется с проектом, выполняемым на плате FPGA. Эта ссылка между симулятором и платой позволяет вам проверить реализации HDL непосредственно на основе алгоритмов Simulink или MATLAB. Можно применить реальные данные и сценарии тестирования из этих алгоритмов к проекту, работающему на FPGA.
В Simulink можно использовать блоки FIL Frame To Pixels и FIL Pixels To Frame для ускорения связи между Simulink и платой FPGA. В MATLAB можно изменить сгенерированный код, чтобы ускорить связь с платой FPGA.
Этот пример показывает, как изменить сгенерированную модель цикл (FIL) для более эффективной симуляции протокола потокового Toolbox™ видео Vision HDL.
Автогенерированная модель FIL
Когда вы генерируете файл программирования для цели FIL в Simulink, HDL Workflow Advisor создает модель, чтобы сравнить симуляцию FIL с вашим проектом Simulink. Для получения дополнительной информации о том, как сгенерировать программные продукты FIL для модели Simulink, смотрите Симуляция with HDL Workflow Advisor for Simulink (HDL Verifier).
Для проектов Vision HDL Toolbox, блок FIL в сгенерированной модели наследует потоковый интерфейс пикселей и отправляет по одному пикселю за раз в FPGA. Показанная модель была сгенерирована из модели примера в Проект Video Processing Algorithms для HDL в Simulink.
Верхняя часть модели наследует ваш проект Simulink. Сгенерированный блок FIL внизу взаимодействует с FPGA. Подсистема ToFILSrc копирует вход потока пикселей блока HDL Algorithm в подсистему FromFILSrc. Подсистема ToFILSink копирует пиксельный поток блока HDL Algorithm в подсистему Compare, где сравнивается с выходом блока HDL Algorithm_fil. Для обработки изображений и видео эта настройка является медленной, потому что модель отправляет только один пиксель и связанные с ним сигналы управления в каждом пакете на и от платы FPGA.
Измененная модель FIL для потоковой передачи пикселей
Чтобы улучшить пропускную способность связи с платой FPGA, можно использовать сгенерированный блок FIL с векторным входом, а не потоковой передачей. Этот пример включает модель FILSimulinkWithVHTExample.slx, созданную путем изменения сгенерированной модели FIL. Измененная модель использует блоки FIL Frame To Pixels и FIL Pixels To Frame, чтобы отправлять одну систему координат за раз в сгенерированный блок FIL. Вы не можете запускать эту модель как есть. Вы должны сгенерировать свой собственный блок FIL и битовый файл, которые используют вашу плату и настройки соединения.
Чтобы преобразовать из сгенерированной модели в измененную:
Удалите подсистемы ToFILSrc, FromFILSrc, ToFILSink и Compare и создайте ветвь на входе системы координат блока Frame To Pixels.
Вставьте блок FIL Frame To Pixels перед блоком HDL- Algorithm_fil. Вставьте блок FIL Pixels To Frame после блока HDL- Algorithm_fil.
Для сравнения измените выход системы координат блока Pixels To Frame. Можно сравнить всюсь систему координат сразу с блоком Diff. Сравните validOut
сигналы с использованием блока XOR.
В блоках FIL Frame To Pixels и FIL Pixels To Frame установите параметр Video format, чтобы соответствовать формату видео блоков Frame To Pixels и Pixels To Frame.
Установите размер вектора в системе координат FIL на пиксели и пиксели FIL на блоки кадра на Frame
или Line
. Размер выходного вектора FIL Frame To Pixels должен совпадать с размером входного сигнала FIL Pixels To Frame. Размер вектора интерфейсов блоков FIL не изменяет сгенерированный HDL-код. Это влияет только на размер пакета связи между симулятором и платой FPGA.
Измененная модель отправляет на плату FPGA целую систему координат в каждом пакете, значительно улучшая эффективность ссылки связи.
При использовании цикл с мультипиксельным потоковым проектом необходимо уплощать порты пикселей в векторы для входа и выхода блока FIL. Используйте Selector блоки, чтобы разделить входные пиксельные потоки на NumPixels вектора и использовать Vector Concatenate блок, чтобы рекомбинировать выходные векторы.
Если каждый пиксель представлен больше чем одним компонентом, FIL Frame To Pixels у блока есть один порт данных за компонент, и у блока FIL есть порты <reservedrangesplaceholder2> × <reservedrangesplaceholder1>. Разделите каждую матрицу компонента на NumPixels векторов.
Эта модель показывает мультипиксельный однокомпонентный проект.
Для генерации кода VHDL, в Configuration Parameters> HDL Code Generation> Global Settings> Ports, устанавливает Scalarize ports параметр на DUT Level
.
Этот пример показывает, как изменить сгенерированный скрипт цикл (FIL) для более эффективной симуляции протокола потокового Toolbox™ видео Vision HDL. Для получения дополнительной информации о том, как сгенерировать программные продукты FIL для системного object™ MATLAB ®, смотрите Simulation FIL with HDL Workflow Advisor for MATLAB (HDL Verifier ).
Автогенерированная функция FIL
Когда вы генерируете файл программирования для цели FIL в MATLAB, HDL Workflow Advisor создает испытательный стенд для сравнения симуляции FIL с вашими проектами MATLAB. Для проектов Vision HDL Toolbox, DUTname
_fil
функция в испытательном стенде наследует пиксельный потоковый интерфейс и отправляет по одному пикселю в FPGA. DUTname - это имя функции, из которой вы сгенерированными HDL-кодами.
Этот фрагмент кода получен из сгенерированного испытательного стенда TBname
_fil.m
, сгенерированный из примера скрипта в Pixel-Streaming Design в 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 System непосредственно, с одной системой координат за раз. Эти фрагменты из PixelStreamingDesignHDLTestBench_fil_frame.m
скрипт, измененный из программных продуктов FIL, сгенерированных из примера скрипта в Pixel-Streaming Design в MATLAB. Вы не можете запустить этот скрипт как есть. Вы должны сгенерировать свой собственный объект FIL System, функцию и файл с битовым потоком, которые используют настройки платы и подключения. Затем либо измените версию сгенерированного испытательного стенда, либо измените этот скрипт, чтобы использовать сгенерированный объект FIL.
Объявить образец сгенерированного объекта FIL System.
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 в каждом пакете, значительно улучшая эффективность ссылки связи.