我希望这是可能的。我希望能够编写这样的递归代码:
entity myEntity
generic (
size : natural -- a power of 2
)
port (
-- whatever
);
end;
architecture structural of myEntity is
begin
smallerEntity : entity component.myEntity(structural)
generic map (
size => size/2
);
port map (
...
);
end;
因此每个体系结构都会实例化一个较小的版本。在通用'大小'的某个值上,我希望有不同的实现。
可以通过配置完成吗?如果是这样,怎么样?
至于为什么我希望能够这样做 - 所以我可以构建可重复使用的代码来计算FFT / DCT和类似的变换。
答案 0 :(得分:5)
您可以在VHDL中使用递归。但是您需要将实例化封装在if-generate
语句中。类似的东西:
recursive_structure : if size/2 > 0 generate
smallerEntity : entity component.myEntity(structural)
generic map (
size => size/2
);
port map (
...
);
end generate recursive_structure;
答案 1 :(得分:0)
我使用的函数如下:
-- convert natural to min vector length
function min_len_uns(arg : natural) return natural is
begin
case arg is
when 1 | 0 =>
return 1;
when others =>
return 1 + min_len_uns(arg/2);
end case;
end;
when 1 | 0 =>
return 1;
when others =>
return 1 + min_len_uns(arg/2);
end case;