簡體   English   中英

VHDL緩沖區變量vs輸出變量

[英]VHDL buffer variable vs out variable

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

當我改為緩沖區並且運行完美時,但我無法理解發生了什么

您正在使用Synopsys軟件包中的conv_integer 請僅使用官方IEEE軟件包。

dataout是一個信號,而不是變量,因為您使用信號賦值語句 而且,信號是模式out的端口。 (端口也是信號)。

除靜態類型外,VHDL還檢查端口信號的方向。 您的信號處於模式out因此無法讀取。

Als是一個解決方案,您可以:

  • 使用中間信號,
  • 使用模式buffer ,所有綜合工具均不支持
  • 使用VHDL-2008,它允許讀取模式out端口。

Quartus支持一些VHDL-2008功能。

對於跨平台兼容性和代碼可重用性,我建議使用中間信號 (dataout_int可以被其他語句使用):

    dataout_int <= temp_ram(conv_integer(dir));

並將輸出分配給此中間信號:

    dataout <= dataout_int;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM