Конвейерно обработайте выражения MATLAB

С coder.hdl.pipeline прагма, можно задать размещение и количество регистров трубопровода в HDL-коде, сгенерированном для MATLAB® выражение.

Если вы вставляете регистры трубопровода и включаете распределенную конвейеризацию, HDL Coder™ автоматически перемещает регистры трубопровода, чтобы повредить критический путь.

Как конвейерно обработать выражение MATLAB

Чтобы вставить регистры трубопровода при выходе выражения в коде MATLAB, поместите выражение в coder.hdl.pipeline прагма. Задайте количество регистров.

Можно вставить регистры трубопровода в сгенерированный HDL-код:

  • При выходе целой правой стороны оператора присваивания.

    Следующий код вставляет три регистра трубопровода при выходе выражения MATLAB, a + b * c:

        y = coder.hdl.pipeline(a + b * c, 3);
    
  • В промежуточной стадии в рамках более длительного выражения MATLAB.

    Следующий код вставляет пять регистров трубопровода после расчета b * c в рамках более длительного выражения, a + b * c:

        y = a + coder.hdl.pipeline(b * c, 5);
    
  • Вложением несколько экземпляров прагмы.

    Следующий код вставляет пять регистров трубопровода после расчета b * c, и два регистра трубопровода при выходе целого выражения, a + b * c:

        y = coder.hdl.pipeline(a + coder.hdl.pipeline(b * c, 5),2);
    

В качестве альтернативы, чтобы вставить один регистр трубопровода вместо нескольких регистров трубопровода, можно не использовать второй аргумент в прагме:

y = coder.hdl.pipeline(a + b * c);
y = a + coder.hdl.pipeline(b * c);
y = coder.hdl.pipeline(a + coder.hdl.pipeline(b * c));

Ограничения конвейеризации для выражений MATLAB

Примечание

Когда вы используете код MATLAB в блоке MATLAB Function и выбираете MATLAB Datapath архитектура, эти ограничения не применяются.

HDL Coder не может вставить регистр трубопровода при выходе выражения MATLAB, если какая-либо из переменных в выражении:

  • В цикле.

  • Персистентная переменная, которая сопоставляет с элементом состояния, как государственный реестр или RAM.

  • Выход функции. Например, в следующем коде, вы не можете добавить регистр трубопровода для выражения, содержащего y:

    function [y] = myfun(x)
    y = x + 5;
    end

  • В обратной связи данных. Например, в следующем коде, вы не можете конвейерно обработать выражение, содержащее t или pvar переменные:

    persistent pvar;
    t = u + pvar;
    pvar = t + v;

Вы не можете использовать coder.hdl.pipeline вставить регистр трубопровода для одной переменной или другого никакого-op выражения. Чтобы изучить, как вставить регистр трубопровода для переменной входного параметра функции, смотрите Регистры Порта.

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

Похожие темы