VHDL缓冲区变量与变量



我在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功能。

最新更新