VHDL中的可选端口?
我正在编写一个IP核心,根据用户选择的通用参数,不需要所有的输出/输入端口。可以有可选端口吗?我知道类似的事情应该是可能的,因为当我使用Xilinx IP核时,根据参数,并不是所有端口都包括在内 端口不能是可选的,但端口的使用可以是可选的,这对于设计器来说就像它们不存在一样 未映射(使用)的输入端口在实体中必须具有默认值,输出端口可以不映射 如果实体被声明为,例如:VHDL中的可选端口?,vhdl,Vhdl,我正在编写一个IP核心,根据用户选择的通用参数,不需要所有的输出/输入端口。可以有可选端口吗?我知道类似的事情应该是可能的,因为当我使用Xilinx IP核时,根据参数,并不是所有端口都包括在内 端口不能是可选的,但端口的使用可以是可选的,这对于设计器来说就像它们不存在一样 未映射(使用)的输入端口在实体中必须具有默认值,输出端口可以不映射 如果实体被声明为,例如: entity mdl_sub is generic( A_C_USE : boolean := FALSE;
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*)”,然后将“可选端口”生成的所有警告移动到另一个警告树组调用“由于可选端口属性而忽略警告”,那就太好了。),然后我们可以忽略该树组,而不是总是手动过滤出相同的警告消息