Recursion VHDL递归组件/实体
我希望这是可能的。我希望能够编写如下递归代码:Recursion VHDL递归组件/实体,recursion,configuration,vhdl,Recursion,Configuration,Vhdl,我希望这是可能的。我希望能够编写如下递归代码: entity myEntity generic ( size : natural -- a power of 2 ) port ( -- whatever ); end; architecture structural of myEntity is begin smallerEntity : entity component.myEntity(structural)
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和类似的转换。您可以在VHDL中使用递归。但是您需要将实例化封装在一个
if generate
语句中。比如:
recursive_structure : if size/2 > 0 generate
smallerEntity : entity <library_name>.myEntity(structural)
generic map (
size => size/2
)
port map (
...
);
end generate recursive_structure;
recursive\u结构:如果大小/2>0,则生成
smallerEntity:entity.myEntity(结构)
通用地图(
大小=>大小/2
)
港口地图(
...
);
端生成递归_结构;
我使用如下函数:
--将自然矢量长度转换为最小矢量长度
函数min_len_uns(arg:natural)返回的是natural
开始
案例arg为
when 1 | 0 =>
return 1;
when others =>
return 1 + min_len_uns(arg/2);
end case;
结束
即使generate语句在myEntity的体系结构中,也可以吗?这对我来说是新鲜事。@Stacey:这就是VHDL坚持“单独编译”的要点——首先编译实体,这意味着在编写匹配的体系结构之前,它可以用于任何设计。Peter Ashenden的一篇经典论文叫做“VHDL中的递归和重复硬件模型”,你可以在谷歌上搜索。