VHDL 缓冲区变量与输出变量

VHDL buffer variable vs out variable

我在 VHDL 程序中工作,我需要使用 ALTERA DE2-115 做一个 RAM 256。输出将显示在七段显示器中。 问题是:我有一个 dataout 输出变量。然后该变量具有以下 temp_ram 数组的值:

dataout <= temp_ram(conv_integer(dir));

那我想把dataout的分值分成七段

dataout(7 downto 4)
dataout(3 downto 0)

这显示了以下错误:

Error (10309): VHDL Interface Declaration error in RAM.vhd(45): interface object "dataout" of mode out cannot be read. Change object mode to buffer.

当我更改为缓冲区和此 运行 省长时,但我无法理解发生了什么

您正在使用来自 Synopsys 软件包的 conv_integer。请仅使用官方 IEEE 软件包。

dataout是信号,不是变量,因为你用的是信号赋值语句。此外,该信号是模式 out 的端口。 (端口也是信号)。

除了静态类型之外,VHDL 还会检查端口中的信号方向。你的信号是 out 模式所以无法读取。

作为解决方案,您可以:

  • 使用中间信号,
  • 使用模式buffer,并非所有综合工具都同样支持
  • 使用 VHDL-2008,它允许读取模式 out 的端口。

Quartus 支持一些 VHDL-2008 特性。

为了跨平台兼容性和代码可重用性,我推荐一个中间信号(dataout_int可以被其他语句使用):

    dataout_int <= temp_ram(conv_integer(dir));

并将输出分配给这个中间信号:

    dataout <= dataout_int;