Sök…


Introduktion

Rekursivitet är en programmeringsmetod där underprogram kallar sig själva. Det är mycket bekvämt att lösa vissa typer av problem på ett elegant och generiskt sätt. VHDL stöder rekursion. De flesta logiska synthesizers stöder också det. I vissa fall är den härledda hårdvaran ännu bättre (snabbare, samma storlek) än med motsvarande slingbaserad beskrivning.

Beräkna Hamming-vikten på en vektor

-- 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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow