VHDL递归组件/实体

时间:2012-12-17 08:12:40

标签: 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)
        generic map (
            size => size/2
        );
        port map ( 
            ... 
        );
end;

因此每个体系结构都会实例化一个较小的版本。在通用'大小'的某个值上,我希望有不同的实现。

可以通过配置完成吗?如果是这样,怎么样?

至于为什么我希望能够这样做 - 所以我可以构建可重复使用的代码来计算FFT / DCT和类似的变换。

2 个答案:

答案 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;