【问题标题】:Optional PORTs in VHDL?VHDL 中的可选端口?
【发布时间】:2016-03-31 20:19:06
【问题描述】:

我正在编写一个 IP-Core,根据用户选择的通用参数,并不是所有的 OUT/IN 端口都是必需的。是否可以有可选的端口?我知道类似的事情应该是可能的,因为当我使用赛灵思 IP 核时,根据参数,并非所有端口都包括在内。

【问题讨论】:

  • 并非所有端口都包含是什么意思?它们只是被 VHDL 生成器工具遗漏了吗?
  • 我再次查看了它,似乎它们不包含在 IP-Core 的 Vivado 包装器自动生成的端口中,但包含在包装器的组件声明中。我很好奇我的 IP-Core 是否也会发生同样的情况。

标签: vhdl


【解决方案1】:

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

未映射(使用)的输入端口必须在实体中具有默认值,而输出端口可以简单地保持未映射。

如果一个实体被声明为例如:

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_logic

【讨论】:

  • 这是一个很好的解决方案,类似于 GENERATE 语句。希望 Vivado 不会因为未使用端口的警告而惹恼我
  • 只需将输出分配为“打开”并将输入绑定到一个值......但我真的没有办法清理由此产生的过多警告消息......((在我认为,如果 Vivado 支持 IO 端口属性“(* 可选 *)”,然后将“可选端口”生成的所有警告移动到不同的警告树组调用“由于可选端口属性而忽略的警告”,那就太好了",那么我们可以忽略该树组,而不是总是手动过滤掉相同的警告消息。更好的是,vhdl 2020 可以向端口添加“可选”关键字
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-12
  • 2016-06-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多