Types VHDL:可以用记录定义泛型类型吗?

Types VHDL:可以用记录定义泛型类型吗?,types,definition,vhdl,records,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: Integ

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

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;
类型blaaa是STD_逻辑的数组(自然范围);
谢谢你的意见

编辑:

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

type complex_primitives is (re, im);
type complex_vector is array (re to im) of signed(natural range <>);
类型复合_原语为(re,im);
类型复数_向量是有符号(自然范围)的数组(re到im);

尽管编译器抱怨..

以下是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和新功能的信息,请参阅关于该主题的一个很好的总结。

在支持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;
这种方法的严重局限性在于,您在设计中只能支持单一形式的复杂_向量,但从好的方面来说,您不必担心工具支持


向工具链中的每个供应商提出关于用例的支持/增强请求将非常有用。它们被窃听的越多,VHDL-2008就越快得到支持。

用整数定义复数类型来表示实部和虚部似乎很不寻常。@mark4o:如果你在门中进行信号处理,这是正常的。直到最近,FPGA还没有浮点。所以,如果不使用VHDL-2008,这是不可能的-(无论如何,谢谢!如果我用Xilinx ISE合成它,你认为它会得到支持吗?不幸的是,我不相信Xilinx XST(内置合成工具)迄今为止支持VHDL-2008。一些其他工具(如Synplify)对VHDL-2008的支持有限。目前VHDL-2008是一个雷区,因为您的模拟器可能支持某些功能,但您的合成工具可能不支持(反之亦然)。我将向供应商提出:-)。谢谢你的解决方案。这正是我实现它的方式。您还可以在同一个包中使用唯一名称定义所有这些,并在实体声明性项、块声明性项、子程序声明性项、包声明性项、包体声明性项、受保护类型声明性项或进程声明性项中使用非对象别名。对于-2008支持,还有一个泛型类型。