6

我希望这是可能的。我希望能够编写这样的递归代码:

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 和类似的转换。

4

2 回答 2

7

可以在 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; 
于 2012-12-17T10:15:07.637 回答
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;
于 2013-04-03T21:54:56.093 回答