Ein dritter Zustand neben 0 und 1
Der Ausgang eines gewöhnlichen Gatters treibt immer aktiv entweder 0 oder 1. Ein Tri-State-Puffer fügt eine dritte Möglichkeit hinzu: Ist sein Enable-Eingang niedrig, trennt sich der Ausgang vollständig ab — Hochohmigkeit (Hi-Z) —, als wäre die Leitung abgesteckt statt auf eine Spannung getrieben. Boolflow bildet das direkt mit dem TRIBUF-Element ab: ein Dateneingang, ein Enable-Eingang, ein Ausgang, der entweder den Daten folgt oder frei schwebt.
Warum überhaupt eine Leitung teilen
Ein Bus ist eine Gruppe von Leitungen, auf die mehrere Bausteine zu unterschiedlichen Zeiten schreiben müssen — ein Speicherbus mit mehreren Chips, oder eine Registerdatei mit mehreren Leseports auf einen Ausgang. Statt jede Quelle über einen Multiplexer zu leiten, verbindet man mehrere TRIBUF-Ausgänge direkt mit derselben Leitung und aktiviert jeweils genau einen Treiber: Welcher Puffer aktiv ist, beschreibt den Bus, alle anderen bleiben abgetrennt.
Buskonflikt und schwebender Bus
Falsche Enable-Logik führt zu zwei Fehlerarten. Aktiviert man zwei uneinige Treiber gleichzeitig, versuchen beide aktiv, dieselbe Leitung auf entgegengesetzte Spannungen zu treiben — ein Konflikt (Contention), der in echter Hardware Energie verschwendet und die Treiber beschädigen kann. Aktiviert man gar keinen, schwebt der Bus: Wer ihn liest, bekommt einen undefinierten, rauschanfälligen Wert statt einer sauberen 0 oder 1.
Was Boolflows Check-Werkzeug tatsächlich prüft
Boolflows Check-Werkzeug prüft gewöhnliche Verdrahtung — dass jeder Eingang, der einen Treiber braucht, auch einen hat, und dass jeder Ausgang, der irgendwohin führen sollte, das auch tut —, hat aber kein spezielles Verständnis für Tri-State-Sharing: Zwei gleichzeitig auf dieselbe Leitung aktivierte TRIBUFs werden nicht als Konflikt gemeldet, wie es eine echte EDA-Timing-/DRC-Prüfung tun würde. Dass zu jedem Zeitpunkt genau ein Treiber aktiviert ist, muss der Entwerfer von Hand sicherstellen — das prüft der Simulator nicht für Sie.
Probieren Sie es selbst
Bauen Sie im Schaltungseditor einen gemeinsamen Bus aus zwei TRIBUF-Elementen, schalten Sie deren Enable-Leitungen von Hand um und beobachten Sie, was der Simulator tatsächlich tut — statt meldet —, wenn kurzzeitig beide gleichzeitig aktiv sind.