Поиск…


Вступление

Рекурсивность - это метод программирования, в котором подпрограммы называют себя. Очень удобно решать некоторые проблемы в элегантном и общем виде. VHDL поддерживает рекурсию. Большинство логических синтезаторов также поддерживают его. В некоторых случаях предполагаемое оборудование еще лучше (быстрее, того же размера), чем при эквивалентном описании на основе цикла.

Вычисление веса Хэмминга вектора

-- loop-based version
function hw_loop(v: std_logic_vector) return natural is
  variable h: natural;
begin
  h := 0;
  for i in v'range loop
    if v(i) = '1' then
      h := h + 1;
    end if;
  end loop;
  return h;
end function hw_loop;

-- recursive version
function hw_tree(v: std_logic_vector) return natural is
  constant size: natural := v'length;
  constant vv: std_logic_vector(size - 1 downto 0) := v;
  variable h: natural;
begin
  h := 0;
  if size = 1 and vv(0) = '1' then
    h := 1;
  elsif size > 1 then
    h := hw_tree(vv(size - 1 downto size / 2)) + hw_tree(vv(size / 2 - 1 downto 0));
  end if;
  return h;
end function hw_tree;


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow