VHDL输入输出端口

VHDL输入输出端口,vhdl,ports,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 Behavior

使用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;
IEEE库;
使用IEEE.STD_LOGIC_1164.ALL;
实体问题2是
端口(A:输入输出整数;
B:输出整数
);
结束问题2;
问题2的架构是
程序更改(信号A:inout integer;信号B:out integer)为
开始
BA,B=>B);
结束行为;
过程“change”是a上的驱动程序,但没有显式地驱动任何东西,因此a将被驱动到“U”。尝试此更改,它将实现您似乎期望的效果:

procedure change (signal A: inout integer; signal B: out integer) is 
begin
  A <= 'Z';
  B <= A after 20 ns;
end change;
过程更改(信号A:inout integer;信号B:out integer)为
开始

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

通常,您不需要inout端口。特别是如果您刚刚开始使用VHDL,请坚持使用in或out。Inout用于对三态总线进行建模。正如@wjl所指出的,如果您希望能够读取对方正在写入的内容,则需要为信号指定“Z”


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

这些问题不属于电子学吗?stackexchange?@blueshift VHDL可以被认为是一种编程语言。她应该很好。”…但它不会模拟”对我们没有多大帮助-它不会详细说明吗?或者它运行,但不做你期望的,在这种情况下,告诉我们它做什么,你期望什么?真的吗?对于这样的高端工具来说,这似乎不太可能!还是我误解了限制?是的。我在使用VCS时遇到了这个问题。我仍在努力解决这个问题。我要换一条线吗?我可以分享我正在使用的代码,我们都可以看一看。是的,如果可以的话,请提出一个新的问题