FPGA в цикле (FIL) позволяет вам запустить Simulink® или симуляцию MATLAB®, которая синхронизируется с проектом HDL, работающим на плате FPGA. Эта ссылка между средством моделирования и платой позволяет вам проверить реализации HDL непосредственно по Simulink или алгоритмам MATLAB. Можно применить реальные данные и сценарии тестирования от этих алгоритмов до проекта HDL, который работает на FPGA.
В Simulink можно использовать Кадр FIL Для Пикселей и Пикселей FIL, Чтобы Структурировать блоки, чтобы ускорить связь между 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) скрипт для более эффективной симуляции протокола потокового видео 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 в каждом пакете, значительно повысив эффективность линии связи.