VHDL中的可选端口?

VHDL中的可选端口?,vhdl,Vhdl,我正在编写一个IP核心,根据用户选择的通用参数,不需要所有的输出/输入端口。可以有可选端口吗?我知道类似的事情应该是可能的,因为当我使用Xilinx IP核时,根据参数,并不是所有端口都包括在内 端口不能是可选的,但端口的使用可以是可选的,这对于设计器来说就像它们不存在一样 未映射(使用)的输入端口在实体中必须具有默认值,输出端口可以不映射 如果实体被声明为,例如: entity mdl_sub is generic( A_C_USE : boolean := FALSE;

我正在编写一个IP核心,根据用户选择的通用参数,不需要所有的输出/输入端口。可以有可选端口吗?我知道类似的事情应该是可能的,因为当我使用Xilinx IP核时,根据参数,并不是所有端口都包括在内

端口不能是可选的,但端口的使用可以是可选的,这对于设计器来说就像它们不存在一样

未映射(使用)的输入端口在实体中必须具有默认值,输出端口可以不映射

如果实体被声明为,例如:

entity mdl_sub is
  generic(
    A_C_USE : boolean := FALSE;
    B_D_USE : boolean := FALSE);
  port(
    clk_i : in  std_logic;
    rst_i : in  std_logic;
    a_i   : in  std_logic := 'X';
    b_i   : in  std_logic := 'X';
    c_o   : out std_logic;
    d_o   : out std_logic);
end entity;
然后,该模块可以在如下不同的配置中使用,其中端口的使用可以根据配置的不同而有所不同:

-- Using port a_i and c_o
mdl_sub_0 : entity work.mdl_sub
  generic map(
    A_C_USE => TRUE)
  port map(
    clk_i => clk_i,
    rst_i => rst_i,
    a_i   => m0_a_i,
    c_o   => m0_c_o);

-- Using port b_i and d_o
mdl_sub_1 : entity work.mdl_sub
  generic map(
    B_D_USE => TRUE)
  port map(
    clk_i => clk_i,
    rst_i => rst_i,
    b_i   => m1_b_i,
    d_o   => m1_d_o);

所有信号和端口都是
std_逻辑

您所说的不包括所有端口是什么意思?它们只是被VHDL生成器工具遗漏了吗?我再次研究了一下,它们似乎没有包含在IP核心Vivado包装器自动生成的端口中,而是包含在包装器的组件声明中。我很好奇我的IP核心是否也会发生同样的情况。这是一个很好的解决方案,类似于GENERATE语句。希望Vivado不会因为端口未被使用的警告而烦扰我,只需将输出分配为“打开”并将输入绑定到一个值……但我所知道的是,没有办法清除由此产生的过多警告消息。。。((在我看来,如果Vivado支持IO端口属性“(*optional*)”,然后将“可选端口”生成的所有警告移动到另一个警告树组调用“由于可选端口属性而忽略警告”,那就太好了。),然后我们可以忽略该树组,而不是总是手动过滤出相同的警告消息