首页 > 解决方案 > 参数化端口中使用的记录中的元素

问题描述

参数化记录元素的最佳方法是什么?

例如:

我有这个组件:

component C1 is
port (
  clk               : in  std_logic;
  reset_n           : in  std_logic; 
  cam               : out t_CAM_OUT
);
end component C1;

类型t_CAM_OUT在包中定义:

package camera_signals_pkg is

  -- Output signals related to camera
  type t_CAM_OUT is record
    ...
    pixel_data      : std_logic_vector(31 downto 0);
    ...
  end record t_CAM_OUT;

end package camera_signals_pkg;

但是我想参数化信号pixel_data

在组件C1的一个实例中,我要求pixel_data为 16 位,而在另一个实例中,它必须为 32 位。

最好的方法是什么?

标签: parametersvhdlrecordhdl

解决方案


如果您乐于使用 VHDL 2008,您可以简单地pixel_data在类型中保持不受约束,然后在端口声明期间对其进行约束,无论是从每个实体的文字还是从泛型,就像您对任何类型一样。

-- Output signals related to camera
  type t_CAM_OUT is record
    ...
    pixel_data      : std_logic_vector;
    ...
  end record t_CAM_OUT;
entity ent1 is
port (
  clk               : in  std_logic;
  reset_n           : in  std_logic; 
  cam               : out t_CAM_OUT( pixel_data(15 downto 0) );
);
entity generic_ent is
generic (
  W : natural
);
port(
  clk               : in  std_logic;
  reset_n           : in  std_logic; 
  cam               : out t_CAM_OUT( pixel_data(W-1 downto 0) );
);

推荐阅读