VHDL inout端口

时间:2012-04-01 23:15:49

标签: vhdl ports

我在使用inout端口创建实体时遇到问题。我尝试编写以下代码,其中A是输入,B是输出,它工作正常。但是一旦我将A更改为inout端口,它就会实现但不会模拟。谁能告诉我这是什么问题?

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity Problem2 is
Port ( A : inout  integer;
       B : out  integer
          );
end Problem2;

architecture Behavioral of Problem2 is

procedure change (signal A: inout integer; signal B: out integer) is 
begin
B<=A after 20 ns;
end change;

begin

change(A=>A, B=>B);

end Behavioral;

3 个答案:

答案 0 :(得分:2)

程序“更改”是A上的驱动程序,但没有明确地驱动任何内容,因此A将被驱动为“U”。试试这个应该做你期望的改变:

procedure change (signal A: inout integer; signal B: out integer) is 
begin
  A <= 'Z';
  B <= A after 20 ns;
end change;

答案 1 :(得分:1)

通常,您不需要inout端口。特别是如果您刚刚开始使用VHDL,请坚持使用。 Inout用于建模三态总线。正如@wjl指出的那样,如果你想要阅读另一方正在写的东西,你需要为信号分配'Z'。

此外,如果您正在编写后续重用的过程,则不应将它们包装在实体中,然后测试实体。这只会导致额外的问题(正如您现在所经历的那样)。相反,直接从测试平台调用该过程,就像在软件中测试过程(或函数)一样。

答案 2 :(得分:0)

您使用的是Synopsys VCS吗? VCS中存在一个已知的限制,即实体中的inout(s)不会模拟(显示为红色)