【问题标题】:VHDL buffer variable vs out variableVHDL 缓冲区变量与输出变量
【发布时间】:2017-09-03 18:46:15
【问题描述】:

我在一个 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.

当我更改为缓冲区并运行完美时,但我无法理解会发生什么

【问题讨论】:

标签: vhdl fpga intel-fpga


【解决方案1】:

为了跨平台兼容性和代码可重用性,我推荐一个中间信号(其他语句可以使用 dataout_int):

    dataout_int <= temp_ram(conv_integer(dir));

并将输出分配给这个中间信号:

    dataout <= dataout_int;

【讨论】:

    【解决方案2】:

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

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

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

    作为一种解决方案,您可以:

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

    Quartus 支持一些 VHDL-2008 特性。

    【讨论】:

    • 在-2002 年之前,模式为buffer 的端口正式与作为端口的实际相关联只能与模式为buffer 的端口相关联。当模式buffer 连接的输出在设计层次结构中向上遍历多个接口时,这可能会引发 VHDL 工具的修订级别问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-04
    • 2015-02-01
    • 2015-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多