【问题标题】:VHDL bidirectional bus mismatchVHDL 双向总线失配
【发布时间】:2016-10-07 14:37:24
【问题描述】:

我有一个带有 16 位输入输出总线的模块。在我的顶级实体中,我只想连接其中的 4 个(也是双向的)。直接连接它们会导致课程错误

port map( IO16bit => IO4bit )

所以我通过内部信号连接了 m

signal temp : std_logic_vector (15 downto 0);
port map(IO16bit => temp);
IO4bit <= temp(3 downto 0);

但现在我得到了错误: 三态节点不直接驱动顶层管脚 并将扇出转换为或门

我在这里失去了双向性。 我该如何解决这个问题?

【问题讨论】:

    标签: vhdl


    【解决方案1】:

    您可以使用port map 中的一个范围,然后将其余的连接到一个dummy,例如:

    signal dummy : std_logic_vector(15 downto 4) := (others => 'Z');
    ...
    port map(
      IO16bit( 3 downto 0) => IO4bit,
      IO16bit(15 downto 4) => dummy,
    ...
    

    这将为模拟编译,但您必须检查您选择的综合工具是否也可以接受构造,并正确处理它。在可综合设计中拥有内部inout 端口通常是个问题。

    【讨论】:

    • 甚至IO16bit(15 downto 4) =&gt; open, 没有虚拟信号。如果您使用虚拟信号,请使用(others =&gt; 'Z') 驱动它以防止总线崩溃
    • @BrianDrummond:如果使用 open 而不是 dummy,则 ModelSim 会给出错误“当子元素单独关联时,正式的“az_io”不得与 OPEN 关联。”。 Z 的好点是假人。
    猜你喜欢
    • 2019-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多