2017-09-03 3 views
1

Ich arbeite in einem VHDL-Programm und ich muss ein RAM 256 mit dem ALTERA DE2-115 tun. Die Ausgänge werden in einer Sieben-Segment-Anzeige angezeigt. Das Problem ist, dass ich eine dataout Ausgangsvariable habe. Dann wird die Variable, die die folgenden Werte des temp_ram Array hat:VHDL-Puffer Variable vs Variable

dataout <= temp_ram(conv_integer(dir)); 

dann mag ich die Werte annehmen von dataout zu unterteilen in dem Sieben-Segment setzen

dataout(7 downto 4) 
dataout(3 downto 0) 

Dies zeigt die folgenden Fehler:

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

Wenn ich in Puffer wechseln und diese laufen Präfekt, aber ich kann nicht verstehen, was passieren

+0

Siehe [VHDL Interface Deklarationsfehler in : Schnittstellenobjekt "" des Modus out kann nicht gelesen werden. Ändern Sie den Objektmodus in den Puffer. (ID: 10309)] (http://quartushelp.altera.com/14.0/mergedProjects/msgs/msgs/evrfx_vhdl_read_from_out.htm) – user1155120

Antwort

1

Für plattformübergreifende Kompatibilität und Code-Wiederverwendung, würde ich ein Zwischensignal empfehlen (dataout_int von anderen Anweisungen verwendet werden kann):

dataout_int <= temp_ram(conv_integer(dir)); 

und die Ausgabe in dieses Zwischensignal zuweisen:

2

Sie verwenden conv_integer aus einem Synopsys-Paket. Bitte verwenden Sie nur offizielle IEEE-Pakete.

dataout ist ein Signal, keine Variable, weil Sie eine Signalzuweisungsanweisung verwenden. Außerdem ist das Signal ein Port des Modus out. (Ports sind auch Signale).

Neben der statischen Typisierung überprüft VHDL auch die Signalrichtung in den Ports. Ihr Signal ist vom Modus out, so dass es nicht gelesen werden kann.

Als eine Lösung, können Sie:

  • verwenden, um ein Zwischensignal,
  • Verwendung Modus buffer, die nicht von allen Synthese-Tool ebenso
  • Verwendung VHDL-2008 unterstützt wird, die erlaubt Ports des Modus out gelesen werden.

Quartus unterstützt einige VHDL-2008-Funktionen.

+0

Vor -2002 ein Port des Modus 'Puffer' formal mit einem tatsächlichen verbunden ist, dass ein Port könnte nur einem Port des Modus 'Puffer' zugeordnet werden. Dies kann die Frage nach dem Revisionsstand des VHDL-Tools aufwerfen, wenn eine Ausgabe der Modus- "Puffer" -Verbindung mehrere Schnittstellen in einer Entwurfshierarchie nach oben durchläuft. – user1155120

+1

Siehe [Brians Antwort] (https://stackoverflow.com/questions/27129747/trying-to-use-a-buffer-in-vhdl-not-working/27130438#27130438) zu [Versuch, einen Puffer in VHDL zu verwenden - funktioniert nicht] (https://stackoverflow.com/questions/27129747/trying-to-use-a-buffer-in-vhdl-not-working). – user1155120