我在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.
当我更改为缓冲区并且运行完美时,但我无法理解发生了什么
答案 0 :(得分:2)
您正在使用Synopsys软件包中的conv_integer
。请仅使用官方IEEE软件包。
dataout
是一个信号,而不是变量,因为您使用信号赋值语句。此外,信号是模式out
的端口。 (端口也是信号)。
除静态类型外,VHDL还检查端口信号的方向。您的信号处于out
模式,因此无法读取。
这是一个解决方案,你可以:
buffer
,所有综合工具均不支持out
的端口。Quartus支持一些VHDL-2008功能。
答案 1 :(得分:1)
对于跨平台兼容性和代码可重用性,我建议使用中间信号(dataout_int可以被其他语句使用):
dataout_int <= temp_ram(conv_integer(dir));
并将输出分配给此中间信号:
dataout <= dataout_int;