Vhdl 使用通用参数作为端口阵列长度

Vhdl 使用通用参数作为端口阵列长度,vhdl,Vhdl,我想做的是: entity FIRfilter is generic ( NTAPS : integer ); port ( -- ... h : in array(0 to NTAPS-1) of std_logic_vector(15 downto 0) ); end FIRfitler; 但是h行上的语法不正确 这个问题是类似的:但这并不能得到实例化时的一般点击次数。这是可能的吗?如果在包中声明一个不受约束的数组类型,则可以基于泛型约束该数

我想做的是:

entity FIRfilter is
   generic (
      NTAPS : integer );
   port (
      -- ...
      h : in array(0 to NTAPS-1) of std_logic_vector(15 downto 0) );
end FIRfitler;
但是
h
行上的语法不正确


这个问题是类似的:但这并不能得到实例化时的一般点击次数。这是可能的吗?

如果在包中声明一个不受约束的数组类型,则可以基于泛型约束该数组,如下面的代码所示:

library ieee; use ieee.std_logic_1164.all;

package FIRfilter_pkg is
  type x_t is array(natural range <>) of std_logic_vector(15 downto 0);
end package;


library ieee; use ieee.std_logic_1164.all;
library work; use work.FIRfilter_pkg.all;

entity FIRfilter is
   generic (
      NTAPS : integer );
   port (
     x : in x_t(0 to NTAPS-1);
     z : out std_logic_vector(15 downto 0) );  -- For simple example below
end FIRfilter;


library ieee; use ieee.numeric_std.all;

architecture syn of FIRfilter is
begin
  z <= std_logic_vector(unsigned(x(0)) + unsigned(x(1)));  -- Usage example
end architecture;
ieee库;使用ieee.std_logic_1164.all;
包装FIRfilter_包装为
类型x_t是标准逻辑向量(15到0)的数组(自然范围);
端包装;
图书馆ieee;使用ieee.std_logic_1164.all;
图书馆工作;使用work.FIRfilter_pkg.all;
实体过滤器是
一般的(
NTAPS:整数);
港口(
x:in x_t(0到NTAPS-1);
z:out标准逻辑向量(15到0));--下面是一个简单的例子
末端过滤器;
图书馆ieee;使用ieee.numeric_std.all;
FIRfilter的架构syn为
开始

z端口声明可能包含一个接口信号声明,其中按照模式(in)提供子类型指示,包括一个可选的解析函数声明(无)、一个类型标记(x_t)和一个范围或索引约束(如图所示)。操作思想是接口信号声明声明一个命名的子类型而不是一个类型。无法向后引用类型的实体声明性部分声明,因此该类型在package.Perfect中声明。我是VHDL新手,以前从未创建过无约束类型。这一切都很有道理,大卫的加入也有帮助;如果你能用一本书,那么看看,你可能不需要其他的;-)@我实际上拥有那本书(开心脸和尴尬脸)。我已经浏览了数组声明中的一些部分,但显然没有任何内容适合我。谢谢你把这件事弄清楚。我会再看一遍这本书。如果两个维度都没有固定,怎么办?