0

我在用 ModelSim 编译这个 VHDL 代码时遇到这个错误:

** Error: testVHDL_5.vhd(14): Cannot read output "z".
#   VHDL 2008 allows reading outputs.
#   This facility is enabled by compiling with -2008.

VHDL代码:

library IEEE;
use IEEE.STD_LOGIC_1164.all;

entity gate_1 is
    port(
        a, b, c : in std_logic;
        x, z : out std_logic
        );
end gate_1;

architecture arch1 of gate_1 is 
begin -- rt1
    z <= b or c;
    x <= a and b and z;
end arch1;

testVHDL_5 是我的文件名。我知道问题是z不能在x中使用。有人可以解释原因并提出解决方案。谢谢。

4

2 回答 2

2

我知道问题是z不能在x中使用。

是的,这就是错误消息所说的。

有人可以解释为什么

因为您无法在 2008 年之前的版本中读取 VHDL 输出。

并提出解决方案。

使用 2008 VHDL 版本编译。

请不要使用像 x 和 z 这样的端口名称。它们很容易与“X”和“Z”的 std_logic 值混淆。

于 2019-12-11T11:37:06.327 回答
2

您可以使用内部信号来分配(b 或 c)并将其用于计算 x。

library IEEE;
use IEEE.STD_LOGIC_1164.all;

entity gate_1 is
  port(
    a, b, c : in  std_logic;
    x, z    : out std_logic
    );
end gate_1;

architecture arch1 of gate_1 is
  signal temp : std_logic;
begin 
  temp <= b or c;
  x    <= a and b and temp;
  z    <= temp;
end arch1;

您不需要为此启用 VHDL 2008。

正如@oldfart 所说,请不要使用x,z。使用有意义的名称。

于 2019-12-11T12:45:02.447 回答