我在VHDL程序中工作,我需要使用Altera DE2-115进行RAM 256。输出将显示在七个段显示中。问题是:我有一个dataout
输出变量。然后,变量具有temp_ram
数组的以下值:
dataout <= temp_ram(conv_integer(dir));
然后,我想将dataout
的Vaules分开以放入七个段
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.
当我更改为缓冲区并且此运行县时,我不明白会发生什么
用于跨平台兼容性和代码可用性,我建议 InterMediate Signal (可以通过其他语句使用dataout_int):
) dataout_int <= temp_ram(conv_integer(dir));
并将输出分配给此中间信号:
dataout <= dataout_int;
您正在使用Synopsys软件包中的conv_integer
。请仅使用官方的IEEE软件包。
dataout
是一个信号,而不是变量,因为您使用信号分配语句。此外,信号是模式out
的端口。(端口也是信号)。
除了静态键入外,VHDL还检查了端口中信号的方向。您的信号是模式out
,因此无法读取。
ALS解决方案,您可以:
- 使用中间信号,
- 使用模式
buffer
,所有合成工具都不支持 - 使用VHDL-2008,允许读取模式
out
的端口。
Quartus支持一些VHDL-2008功能。