VHDL缓冲区变量与输出变量

VHDL缓冲区变量与输出变量,vhdl,fpga,intel-fpga,Vhdl,Fpga,Intel Fpga,我在一个VHDL程序中工作,我需要使用ALTERA DE2-115做一个RAM 256。输出将以七段式显示。 问题是:我有一个dataout输出变量。然后该变量具有以下temp\u ram数组值: dataout <= temp_ram(conv_integer(dir)); 这显示了以下错误: Error (10309): VHDL Interface Declaration error in RAM.vhd(45): interface object "dataout" of mod

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

dataout <= temp_ram(conv_integer(dir));
这显示了以下错误:

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

当我更改为buffer并运行此程序时,我无法理解会发生什么

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

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

除了静态类型之外,VHDL还检查端口中信号的方向。您的信号处于模式
out
,因此无法读取

如果是解决方案,您可以:

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

Quartus支持一些VHDL-2008功能。

为了跨平台兼容性和代码重用性,我建议使用中间信号(dataout\u int可由其他语句使用):


dataout\u int-2002之前与实际端口关联的模式端口
buffer
formal只能与模式端口
buffer
关联。当mode
buffer
连接的输出在设计层次结构中向上遍历多个接口时,这可能会引发VHDL工具的修订级别问题。请参阅。请参阅
Error (10309): VHDL Interface Declaration error in RAM.vhd(45): interface object "dataout" of mode out cannot be read. Change object mode to buffer.
    dataout_int <= temp_ram(conv_integer(dir));
    dataout <= dataout_int;