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;
我在 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;