Verwenden einer Reihe von Widerständen, um einem Bus Priorität zu geben

Ich erinnere mich, dass der ZX Spectrum eine Reihe von Widerständen verwendete, um den Ausgang eines Chips den Ausgang eines anderen Chips (auf einem Bus) überschreiben zu lassen, wenn beide den Oe auf Low gezogen hatten.

 +--------+    +--------+
 | 74HCxxx|    | 74HCxxx|
 +--------+    +--------+
  ||||||||      ||||||||
  ||||||||      RRRRRRRR
  ||||||||      ||||||||  8
 -------------------------/----...

Ich verstehe, dass dies energieineffizient ist, da Strom von logischen 1s (auf einem Chip) zu logischen 0s (auf einem anderen Chip) durch die Widerstände fließt.

Welcher Widerstandswert sollte für 74HCxxx-Chips verwendet werden, damit zwischen den 0 und 1 eine ausreichende Spannungsdifferenz besteht, um immer noch als 0 oder 1 registriert zu werden, wenn beide Chips widersprüchliche Bitwerte ausgeben?

Was ist die Versorgungsspannung, die Sie verwenden möchten?
Dies ist eine dieser Fragen. :)
Dieser Kommentar ist heute weniger relevant als früher, als TTL viel häufiger war, aber Sie sollten auch die Eingangsspezifikationen der Geräte berücksichtigen, die den Bus lesen. Sie müssten auch alles andere berücksichtigen, das an den Bus angeschlossen ist, z. B. Pull-up-/Pull-down-Widerstände.
@pipe Nun, auf einem DDR3-Bus würden Sie das nicht tun, aber für langsame Signale, wenn Sie ein sehr knappes Budget haben und sich den Verbrauch leisten können, warum nicht? Ich habe diesen Trick ein- oder zweimal für einzelne Signale überlegt, obwohl ich es nicht für einen ganzen Bus tun würde.
Eine viel bessere Lösung besteht darin, sicherzustellen, dass jeweils nur eine Ausgangsfreigabe aktiviert werden kann.
@OlinLathrop Mein Problem ist, dass ein an den Bus angeschlossener Chip keine Ausgangsfreigabe hat. Wenn ich dies also nicht tun würde, bräuchte ich einen Puffer und eine Steuerschaltung für den Puffer. Dies ist nur Homebrew-CPU-Hobbyelektronik - ich versuche es so einfach wie möglich zu halten.

Antworten (1)

Wir brauchen nur das Ohmsche Gesetz. Nehmen wir an, wir definieren Io als den Ausgangsstrom (Quelle oder Senke), den Sie zulassen.

Io muss für 74HC unter 20 mA liegen, sonst liegen Sie über den absoluten Grenzwerten. Es muss auch viel größer sein als der Eingangsleckstrom (der bei 74HC maximal 1 µA beträgt), oder Sie haben Spannungspegel außerhalb der Spezifikationen.

Je größer Sie es einstellen, desto mehr Verbrauch haben Sie, aber desto schneller kann der Chip mit den angeschlossenen Widerständen seine Ausgangszustände umschalten. Die Einstellung auf wenige mA erscheint vernünftig.

Die Widerstände sollten einfach Vsupply / Io sein .


Auswirkungen auf das Signal-Timing

Auch das lässt sich leicht abschätzen. Sie müssen die Kapazität kennen, die auf der Busleitung vorhanden ist. Es ist die Eingangskapazität der Lesegeräte, die für einen 74HC-Pin typisch 3,5 pF beträgt, plus die Ausgangskapazität des linken Geräts in HiZ, die für 74HC typisch 6 pF beträgt. Es macht etwa 10pF, wenn nur ein Lesegerät vorhanden ist. Jetzt müssen Sie nur noch die RC-Zeitkonstante mit dem von Ihnen gewählten Widerstandswert überprüfen. Bei einem 4k7-Widerstand führt dies beispielsweise zu einer Zeitkonstante von 47 ns. Dies gibt eine grobe Annäherung an die zusätzliche Verzögerung, die durch den Widerstand verursacht wird. Ob dies akzeptabel ist oder nicht, hängt vom Rest Ihrer Schaltung ab. Wenn Sie auf einer Frequenz arbeiten, die zehnmal darunter liegt (etwa 2 MHz in diesem Beispiel), ist das wahrscheinlich in Ordnung.


Hinweis: Alle hier verwendeten 74HC-Zahlen sind in diesem Dokument von NXP zu finden .


Wenn es nicht 74HC, sondern TTL LS wäre : Sie müssten genauere Berechnungen durchführen, da der Eingangsleckstrom nicht so klein ist. Darüber hinaus waren die Senken- und Quellenleckströme ( Iih / Iil ) sowie die Ausgangssenken- und -quellenfähigkeiten ( Ioh / Iol ) unterschiedlich.

Sie müssten also jeden möglichen Fall bis ins kleinste Detail prüfen, nämlich: Wenn der linke Chip auf 0 und der rechte Chip (mit den Widerständen) auf 1 ist, ist das Gegenteil (links auf 1 und rechts auf 0) links auf HiZ und rechts bei 0, links bei HiZ und rechts bei 1.

Für die beiden Nicht-HiZ-Fälle müssten Sie anhand der Worst-Case-Ausgangspegel des linken und rechten Chips berücksichtigen, ob der Busleitungspegel noch innerhalb der Spezifikationen liegt (unter Berücksichtigung des Eingangsverlusts, eventuell multipliziert mit der Anzahl der Chips). die den Bus lesen).

Überprüfen Sie für die HiZ-Fälle, ob der Spannungsabfall über dem Widerstand aufgrund des Eingangslecks (eventuell multipliziert) den Busleitungspegel nicht außerhalb der Spezifikation macht.

Hoffentlich sind diese Zeiten vorbei.

Bei der Berechnung ergibt ein 4K7-Widerstand etwa 1 mA bei 5 V Vcc. Wie stark wirkt sich dies auf die Anstiegs-/Abfallzeit aus? Würde es bei 1 MHz funktionieren? 10MHz?
@chrisdew Ich habe bearbeitet, um diese Informationen hinzuzufügen
Danke, das erklärt, wie das für den 3,5-MHz-Z80-Adressbus funktioniert hat.