Цикл

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

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

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

Этот пример показывает, как изменить сгенерированную модель цикл (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 и битовый файл, которые используют вашу плату и настройки соединения.

Чтобы преобразовать из сгенерированной модели в измененную:

  1. Удалите подсистемы ToFILSrc, FromFILSrc, ToFILSink и Compare и создайте ветвь на входе системы координат блока 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 Frame To Pixels и FIL Pixels To Frame установите параметр Video format, чтобы соответствовать формату видео блоков Frame To Pixels и Pixels To Frame.

  5. Установите размер вектора в системе координат 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.

Симуляция цикл с использованием системных объектов Vision HDL Toolbox

Этот пример показывает, как изменить сгенерированный скрипт цикл (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 в каждом пакете, значительно улучшая эффективность ссылки связи.

См. также

Блоки

Объекты

Похожие темы