С coder.hdl.pipeline
прагма, можно задать размещение и количество конвейерных регистров в HDL-коде, сгенерированном для выражения MATLAB®.
Если вы вставляете конвейерные регистры и включаете распределенную конвейеризацию, HDL Coder™ автоматически перемещает конвейерные регистры, чтобы повредить критический путь.
Чтобы вставить конвейерные регистры при выходе выражения в коде 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 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 выражения. Чтобы изучить, как вставить конвейерный регистр для переменной входного параметра функции, смотрите Регистры Порта.