vhdl
recursiviteit
Zoeken…
Invoering
Recursiviteit is een programmeermethode waarbij subprogramma's zichzelf noemen. Het is erg handig om sommige soorten problemen op een elegante en generieke manier op te lossen. VHDL ondersteunt recursie. De meeste logische synthesizers ondersteunen dit ook. In sommige gevallen is de afgeleide hardware zelfs beter (sneller, dezelfde grootte) dan met de equivalente lusgebaseerde beschrijving.
Het Hamming-gewicht van een vector berekenen
-- 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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow