我正在尝试定义一个复杂类型(即一个由实部和虚部组成的类型),并试图找到一种方法使其成为通用的。
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 <>);
编译器抱怨但是..
答案 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。