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
端口通常是个问题。
我有一个带有 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
端口通常是个问题。