exponenta event banner

Передовые практики для генерации кода HDL

При создании кода HDL из проекта MATLAB ® выполняется преобразование алгоритма в архитектуру, которая должна соответствовать требованиям к аппаратной области и скорости. Некоторые рекомендации по использованию циклов в коде MATLAB для генерации кода HDL :

  • Используйте монотонно увеличивающиеся счетчики цикла с шагом 1, чтобы минимизировать количество аппаратных средств, генерируемых в коде HDL.

  • Если вы хотите использовать оптимизацию потоковой передачи цикла:

    • При назначении новых значений постоянным переменным внутри цикла не используйте другие постоянные переменные в правой части назначения. Вместо этого используйте промежуточную переменную.

    • Если цикл изменяет какие-либо элементы в постоянном массиве, он должен изменить все элементы в постоянном массиве.

Монотонно увеличивающиеся счетчики контуров

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

a=1;
for i=1:10
    a=a+1;
end

Если счетчик цикла увеличивается на приращение, отличное от 1, генерируемый код HDL может потребовать дополнительных сумматоров. Из-за этого дополнительного оборудования не используйте следующий тип цикла.

a=1;
for i=1:2:10
    a=a+1;
end

Если счетчик цикла уменьшается, генерируемый код HDL может потребовать дополнительных сумматоров. Из-за этого дополнительного оборудования не используйте следующий тип цикла.

a=1;
for i=10:-1:1
    a=a+1;
end

Постоянные переменные в контурах

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

В следующем примере: var1 и var2 являются постоянными переменными. var1 используется в правой части назначения. Поскольку постоянная переменная находится справа от назначения, не используйте этот тип цикла:

for i=1:10
    var1 = 1 + i;
    var2 = var1 * 2;
end

Вместо использования var1 в правой части назначения используйте промежуточную переменную, которая не является постоянной. Этот пример демонстрирует это с промежуточной переменной var_intermediate.

for i=1:10
    var_intermediate = 1 + i;
    var1 = var_intermediate;
    var2 = var_intermediate * 2;
end

Постоянные массивы в контурах

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

В следующем примере: a является постоянным массивом. Первый элемент изменяется вне контура. Не используйте этот тип цикла.

for i=2:10
    a(i)=1+i;
 end
 a(1)=24;

Вместо изменения первого элемента вне контура измените все элементы внутри контура.

for i=1:10
   if i==1
      a(i)=24;
   else
      a(i)=1+i;
   end
end

См. также

Приложения

Классы

Связанные темы