Artikel-ID: 000077812 Inhaltstyp: Fehlerbehebung Letzte Überprüfung: 11.09.2012

Warum werden in der Quartus II Software Version 8.1 einige VHDL-Tri-State-Signale fälschlicherweise abgeleitet?

Umgebung

BUILT IN - ARTICLE INTRO SECOND COMPONENT
Beschreibung

In der Quartus® II Software Version 8.1 gibt es ein Problem, das dazu führen könnte, dass VHDL-Tri-State-Signale fälschlicherweise als Multiplexer abgeleitet werden. Wenn das Signal mit einem Ausgabestift des Geräts verbunden ist, kann das Kompilierungsergebnis dazu führen, dass der Pin auf das Mainboard ausläuft, anstatt als Tri-State-Ausgabe zu fungieren.

Das Softwareproblem tritt nur auf, wenn eine VHDL-Design-Entität einen nicht verwendeten Ausgabeport mit einem Standardwert 'Z' enthält (das heißt, der Ausgabe-Port hat die 'Z' Tri-State-Zuweisung in der Entitätsdeklaration, aber keine explizite Zuweisung zum Signal im Design). Wenn das Problem auftritt, wird jede abgeleitete Tri-State-Logik, die von Verhaltensaussagen in der umschließenden Architektur beschrieben wird, fälschlicherweise als Multiplexer abgeleitet. Das Problem ist auf die einzelne Hierarchie in der Architektur und nicht auf instanziierte Hierarchien beschränkt, es sei denn, andere Entitäten haben den gleichen Typ von nicht verwendeten Ausgabeport mit einem Standardwert, der enthält 'Z'. Lesen Sie das Beispiel am Ende dieser Lösung für ein kleines Design, das dieses Problem veranschaulicht.

Wenn es sich bei den betroffenen Tri-State-Signalen um interne Tri-State-Verbindungen handelt, wird erwartet, dass Multiplexer infereniert werden, da Altera Geräten keine interne Tri-State-Logik vorhanden ist. Wenn jedoch tri-angegebene Entitätsports I/O-Pins auf das Gerät einsenden, kann dieses Softwareverhalten dazu führen, dass der nicht verwendete Ausgabestift auf das Mainboard aussteigt, anstatt als Tri-State-Ausgabe zu fungieren, was zu Signalauswirkungen im System führen kann.

Um das Problem zu umgehen und das definierte Tri-State-Verhalten zu folgern, weisen Sie die nicht verwendeten Ausgabestifte mit einer Signalzuweisung im Design explizit einem Tri-State-Wert zu, anstatt sich auf die Standard-Anweisung zu verlassen. Verwenden Sie beispielsweise eine Anweisung wie unused_output <= 'Z'; oder unused_output <= (others => 'Z');

Zur Behebung dieses Problems steht in der Quartus II Software Version 8.1 ein Patch zur Verfügung. Laden Sie das Windows Patch 0.34 oder Linux Patch 0.34 herunter, installieren Sie dann den Patch und kompilieren Sie das Design erneut.

Dieses Softwareproblem wird auch in einer zukünftigen Version der Quartus II Software behoben.

Das Folgende ist ein Beispieldesign, das von diesem Problem betroffen ist:

library ieee;
use ieee.std_logic_1164.all;
entity example is
  port (
    en : in std_logic;
    data : in std_logic;
    unused_output: out std_logic := 'Z';
    other_output : out std_logic);
end example;

architecture rtl of example is
begin  
   -- other_output should be tri-state but won't be tri-state due to this problem
   other_output <= data when en = '1' else 'Z';
end rtl;

Fügen Sie zur Folgerung des korrekten Tri-State-Verhaltens für beide Ausgabe-Pins im oben genannten Designbeispiel mit der Quartus II SoftwareVersion 8.1 die folgende Anweisung in der Architektur hinzu:
   unused_output <= 'Z';

Zugehörige Produkte

Dieser Artikel bezieht sich auf 1 Produkte

Intel® programmierbare Geräte

Der Inhalt dieser Seite ist eine Kombination aus menschlicher und computerbasierter Übersetzung des originalen, englischsprachigen Inhalts. Dieser Inhalt wird zum besseren Verständnis und nur zur allgemeinen Information bereitgestellt und sollte nicht als vollständig oder fehlerfrei betrachtet werden. Sollte eine Diskrepanz zwischen der englischsprachigen Version dieser Seite und der Übersetzung auftreten, gilt die englische Version. Englische Version dieser Seite anzeigen.