VHDL 双向总线不匹配

VHDL bidirectional bus mismatch

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

port map( IO16bit => IO4bit )

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

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

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

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

您可以使用 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 端口通常是个问题。