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中的递归和重复硬件模型”,你可以在谷歌上搜索。