Лучшие практики For-Loop для генерации 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

См. также

Приложения

Классы

Похожие темы