【问题标题】:How to ignore output ports with port maps如何使用端口映射忽略输出端口
【发布时间】:2013-10-25 02:00:49
【问题描述】:

在 VHDL 中,我经常注意到某个组件具有多个输出端口。即在我们的一个示例中,我们得到了以下组件:

COMPONENT eight_bitadder
  PORT ( a, b: in std_logic_vector(7 downto 0); 
        f: in std_logic; 
        C: out std_logic_vector(7 downto 0); 
        o, z: out std_logic);
END COMPONENT;

其中z判断结果是否为0,o溢出时触发。

现在就我而言,我希望使用这个加法器,但实际结果并不重要,我只想检查结果是否为“0”。我当然可以添加一个虚拟信号并将端口存储到该信号中,但这似乎不必要地复杂,并且可能会在合成过程中添加额外的组件?

【问题讨论】:

    标签: port vhdl


    【解决方案1】:

    当您实例化组件时,您可以将您不关心的输出端口保持打开状态。您在下面唯一关心的信号是“溢出”。

    编辑:请注意,综合工具会优化掉所有未使用的输出。

    EIGHT_BITADDER_INST : eight_bitadder
      port map (
        a => a,
        b => b, 
        f => f, 
        c => open, 
        o => overflow,
        z => open
        );
    

    【讨论】:

    • 所以 open 是一个特殊的关键字 - 这也可以与您没有明确命名端口并使用顺序的语法一起使用吗? (只是要求验证/澄清)?
    • 是的,“open”在 VHDL 中是保留的。老实说,我从来没有尝试过,试一试,让我知道它是怎么回事。我总是明确声明端口映射。
    • 对其进行了很好的测试,是的,我可以编译和合成它,即使是非显式命名。再次感谢。
    【解决方案2】:

    您也可以选择不将输出绑定到任何类似的东西:

    EIGHT_BITADDER_INST : eight_bitadder
        port map (
        a => a,
        b => b, 
        f => f, 
        o => overflow
    );
    

    请注意,我只是没有在端口映射中包含输出 c 和 z。有些人可能会争论这个是否清晰(因为可能不清楚输出 c 和 z 是否存在),但它也将代码减少到只有必要的部分。

    【讨论】:

    • 请注意,可能还需要从组件声明中删除这些行或为要删除的端口分配默认值。如果不这样做,那么在尝试编译时可能会遇到错误。
    • @TW80000 我可以确认这一点。这就是为什么这个答案不是最好的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-23
    • 1970-01-01
    • 2015-08-09
    • 2020-02-29
    • 2020-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多