VHDL:是否可以定义带记录的泛型类型?

时间:2011-06-15 10:58:55

标签: types definition vhdl records

我正在尝试定义一个复杂类型(即一个由实部和虚部组成的类型),并试图找到一种方法使其成为通用的。

This my current static code:

  type complex_vector is record
    Re : signed(15 downto 0);
    Im : signed(15 downto 0);
  end record;

现在我想知道是否有办法使这个通用,换句话说就像:

  type complex_vector (Generic: Integer := WIDTH) is record
    Re : signed(WIDTH downto 0);
    Im : signed(WIDTH downto 0);
  end record;

我试图谷歌寻求解决方案以及浏览我的书籍,但我找不到任何解决方案。真的没有吗?如果没有记录,就有可能做出这样的事情:

type blaaa is array (NATURAL range <>) of STD_LOGIC;

感谢任何输入

编辑:

或者我可以做以下的事情吗?

type complex_primitives is (re, im);
type complex_vector is array (re to im) of signed(natural range <>);

编译器抱怨但是..

2 个答案:

答案 0 :(得分:7)

以下是VHDL-2008中的合法语法:

type complex is record
  re : signed ;  -- Note that this is unconstrained
  im : signed ;
end record ;

signal my_complex_signal : complex (re(7 downto 0), im(7 downto 0)) ;

重要说明此示例使用带有无约束数组的记录。此时对VHDL-2008的支持是偶然的。有些工具支持许多VHDL-2008功能,但许多工具尚未完全支持所有新功能。

要阅读有关VHDL-2008和新功能的信息,请参阅this presentation,这是关于该主题的一个很好的总结。

答案 1 :(得分:5)

直到支持VHDL-2008(不要屏住呼吸!),有一个次优的软糖...

在多个同名包中创建所需的不同大小的记录,然后可以选择在定义要使用的宽度的包中进行编译。

-- complex_vector_16.vhd
package types is
  type complex_vector is record
    Re : signed(15 downto 0);
    Im : signed(15 downto 0);
  end record;
end;

-- complex_vector_32.vhd
package types is
  type complex_vector is record
    Re : signed(31 downto 0);
    Im : signed(31 downto 0);
  end record;
end;


library complex.types
use complex.types.complex_vector;

此方法的严重限制是您只能在设计中支持单一形式的complex_vector,但从好的方面来说,您不必担心工具支持!

向工具链中的每个供应商提出有关您的用例的支持/增强请求会很有用。他们越多越好,越早支持VHDL-2008。