FPGA в цикле

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

В Simulink можно использовать Кадр FIL Для Пикселей и Пикселей FIL, Чтобы Структурировать блоки, чтобы ускорить связь между 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 в симуляции цикла с системными объектами 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 в каждом пакете, значительно повысив эффективность линии связи.

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

Блоки

Системные объекты

Похожие темы