サーチ…
前書き
再帰は、サブプログラムが自分自身を呼び出すプログラミング方法です。いくつかの種類の問題を優雅で汎用的な方法で解決することは非常に便利です。 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