我在使用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;
答案 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)不会模拟(显示为红色)