Buscar..
Introducción
La recursividad es un método de programación donde los subprogramas se llaman a sí mismos. Es muy conveniente resolver algunos tipos de problemas de una manera elegante y genérica. VHDL soporta la recursividad. La mayoría de los sintetizadores lógicos también lo soportan. En algunos casos, el hardware inferido es incluso mejor (más rápido, del mismo tamaño) que con la descripción equivalente basada en bucles.
Cálculo del peso de Hamming de un vector.
-- 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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow