exponenta event banner

coder.hdl.loopspec

Отмена свертки или цикла потока в сгенерированном коде HDL

Описание

пример

coder.hdl.loopspec('unroll') полностью разворачивает цикл в сгенерированном коде HDL. Вместо инструкции цикла созданный код содержит несколько экземпляров тела цикла с одним экземпляром тела цикла на одну итерацию цикла.

coder.hdl.loopspec прагматика не влияет на поведение моделирования MATLAB ®.

Примечание

При указании coder.unroll pragma, эта pragma имеет приоритет над coder.hdl.loopspec. coder.hdl.loopspec не имеет эффекта.

пример

coder.hdl.loopspec('unroll',unroll_factor) разворачивает цикл по указанному коэффициенту разворачивания, unroll_factor, в сгенерированном коде HDL.

Сгенерированный код HDL представляет собой инструкцию цикла, содержащую unroll_factor экземпляры исходного тела цикла. Число итераций цикла в сгенерированном коде равно (original_loop_iterations / unroll_factor). Если (original_loop_iterations / unroll_factor) имеет остаток, остальные итерации полностью разворачиваются как экземпляры тела цикла вне цикла.

Эта прагматика не влияет на поведение моделирования MATLAB.

пример

coder.hdl.loopspec('stream') генерирует один экземпляр тела цикла в коде HDL. Вместо использования оператора цикла созданный код реализует локальную избыточную выборку и добавленную логику для соответствия функциональности исходного цикла.

Эту прагматику можно указать для циклов на верхнем уровне конструкции MATLAB.

Эта прагматика не влияет на поведение моделирования MATLAB.

пример

coder.hdl.loopspec('stream',stream_factor) разворачивает цикл с помощью unroll_factor установить в значение original_loop_iterations / stream_factor округляется до ближайшего целого числа, а также превышает выборку цикла. Если (original_loop_iterations / stream_factor) имеет остаток, остальные экземпляры тела цикла вне цикла не избыточно дискретизированы и выполняются с исходной скоростью.

Эту прагматику можно указать для циклов на верхнем уровне конструкции MATLAB.

Эта прагматика не влияет на поведение моделирования MATLAB.

Примеры

свернуть все

Разобрать цикл в сгенерированном коде.

function y = hdltest
    pv = uint8(1);
    y = uint8(zeros(1,10));
  
    coder.hdl.loopspec('unroll');
    % Optional comment between pragma and loop statement
    for i = 1:10
        y(i) = pv + i;
    end
end

Создайте инструкцию цикла в коде HDL, который имеет две итерации и содержит пять экземпляров исходного тела цикла.

function y = hdltest
    pv = uint8(1);
    y = uint8(zeros(1,10));
  
    coder.hdl.loopspec('unroll', 5);
    % Optional comment between pragma and loop statement
    for i = 1:10
        y(i) = pv + i;
    end
end

В сгенерированном коде реализуйте 10-итерационный цикл MATLAB как единственный экземпляр исходного тела цикла, который избыточно дискретизирован в 10 раз.

function y = hdltest
    pv = uint8(1);
    y = uint8(zeros(1,10));
  
    coder.hdl.loopspec('stream');
    % Optional comment between pragma and loop statement
    for i = 1:10
        y(i) = pv + i;
    end
end

В сгенерированном коде реализуйте 10-итерационный цикл MATLAB как пять экземпляров исходного тела цикла, которые избыточно дискретизированы в 2 раза.

function y = hdltest
    pv = uint8(1);
    y = uint8(zeros(1,10));
  
    coder.hdl.loopspec('stream', 2);
    % Optional comment between pragma and loop statement
    for i = 1:10
        y(i) = pv + i;
    end
end

Входные аргументы

свернуть все

Коэффициент потока цикла, заданный как положительное целое число.

Настройка stream_factor к числу исходных итераций цикла эквивалентно полной потоковой передаче цикла или использованию coder.hdl.loopspec('stream').

Пример: 4

Число экземпляров тела цикла, указанное как положительное целое число.

Настройка unroll_factor количество исходных итераций цикла эквивалентно полному развертыванию цикла или использованию coder.hdl.loopspec('unroll').

Пример: 10

Представлен в R2015a