Der Programmzähler der CPU besteht aus einem asynchronen 12-bit Binärzähler.
Dieser ist auf drei Platinen im Format 160mmx100mm verteilt, von denen jede einen 4-bit-Vorwärtszähler trägt.
Der Zähler besitzt einen Takteingang, einen Übertragsausgang, vier Stelleingänge, vier Zählerausgänge und einen Reseteingang.
Der Zähler besteht aus vier flankengetriggerten RS-Flip-Flops, die in einer Kette zusammengeschaltet sind.
Die Schaltung stellt einen Kompromiss dar.
Die Vorteile der Schaltung liegen im geringen Bauteilaufwand, da pro Zählstufe nur 2 Relais benötigt werden.
Die Nachteile sind jedoch auch nicht zu übersehen.
Der Zähler ist ein Asynchronzähler und der Nachteil besteht darin, dass das Taktsignal von Flip-Flop zu Flip-Flop weitergegeben wird.
Dadurch dauert es im ungünstigsten Fall 12T (12 Relaisschaltzeiten), bis der Zählerstand vollständig incrementiert ist.
Das muss in der Ablaufsteuerung der CPU beachtet werden.
Wenn der aktuelle Befehl kein Sprungbefehl ist, muss man in der Befehlsdecodierung sofort die Erhöhung des Programmzählers auslösen.
Dadurch erreicht man, dass während der Befehlsdecodierung genügend Zeit zur Verfügung steht um den Programmzählerstand zu incrementieren.
Wenn die Befehlsdecodierung abgeschlossen ist, kann somit der nächste Befehl geladen werden kann.
Das Incrementieren des Programmzählers und die Befehlsdecodierung müssen also parallel ablaufen, der aktuelle Befehl muss deshalb zwischengespeichert werden.
Ein Synchronzähler wäre also sinnvoller, der Bauteilaufwand wäre aber ungleich höher, da dafür D-Flip-Flops notwendig wären und damit 4 Relais pro Zählstufe eingesetzt werden müssten, statt nur zwei Flip-Flops.
Der zweite Nachteil liegt in der verwendung von polarisierten Elektrolytkondensatoren im Takteingang.
Diese Kondensatoren sind notwendig, da die Zählstufen flankengetriggert sein müssen.
Das bedeutet, dass der Schaltvorgang des Flip-Flops mit der steigenden Flanke des Taktsignals ausgelöst wird.
Da die Relais zum Anziehen einen beträchtlichen Strom von ca. 30mA benötigen, muss der Kondensator eine entsprechend hohe Kapazität besitzen.
Damit kamen nur Elektrolytkondensatoren in Frage, jedoch werden diese in bestimmten Phasen des Schaltvorganges falsch gepolt, sodass sich die Lebensdauer der Kondensatoren verkürzt.
Da ungepolte Kondensatoren wegen des deutlich höheren Preises ausschieden, habe ich mich für Elektrolytkondensatoren mit 50V Spannungsfestigkeit entschieden, sodass sie mit der Falschpolung von ca. 5V wohl gut zurecht kommen sollten.
Um das RESET-Signal dominant zu machen, wurde ein Schaltungskniff angewendet.
Die RESET-Leitung versorgt bei inaktivem RESET-Signal mit dem Logikpegel 0 (0V) die Relais f&uum;r den invertierten Flip-Flop-Ausgang.
Dadurch wird erreicht, dass bei aktivem RESET sofort alle Zählstufen in den entsprechenden stabilen Zustand geschaltet werden und an das jeweils folgende Flip-Flop über den Takteingang keine aktiven Flanken weitergegeben werden, was zu Problemen beim RESET führen würde. besondere
Sollte sich das nicht bewähren, so muss eine andere Lösung gefunden werden.
Um die Funktionsweise der obigen Schaltung zu verstehen, soll nur ein einzelnes der Flip-Flops betrachtet werden.
Die Relais REL1 und REL2 bilden zusammen mit den Dioden D1 bis D6 zwei NOR-Gatter.
Die Dioden an den Relaisanschlüssen 1 realisieren die ODER-Funktion und die Relais arbeiten als Inverter. |
Im Prinzipschaltbild links ist nun die Verschaltung der beiden NOR-Gatter in einer Zählerstufe zu sehen.
Alle Bauelemente, die für die Funktion nicht unbedingt nötig sind, wurden weggelassen.
Gatter 1 besitzt die Eingänge E1.1, E1.2 und E1.3, sowie den Ausgang A1 und an Gatter 2 sind es die Eingänge E2.1, E2.2 und E2.3, sowie der Ausgang A2. |
|
Blockschaltbild des Zählers |
In der Wahrheitstabelle sind nun die einzelnen Pegel zur Zählersteuerung aufgelistet.
0=logisch 0-Pegel, entspricht 0V
1=logisch 1-Pegel, entspricht 12V
H=hochohmiger Zustand
X=beliebiger Zustand
| Reset | |||||||||||
| Eingangssignale | Ausgangssignale | ||||||||||
| R | S0 | S1 | S2 | S3 | CLK | Q0 | Q1 | Q2 | Q3 | /QU | Erläuterungen |
| 1 | X | X | X | X | X | 0 | 0 | 0 | 0 | 1 | Rücksetzen aller Zählerstufen. Eintreffende Setz- oder Taktsignale bleiben während des Resets wirkungslos. |
| Setzen | |||||||||||
| Eingangssignale | Ausgangssignale | ||||||||||
| R | S0 | S1 | S2 | S3 | CLK | Q0 | Q1 | Q2 | Q3 | /QU | Erläuterungen |
| 0 | 1 | 1 | 1 | 1 | 0,1,H | 1 | 1 | 1 | 1 | 1 | Logikpegel 1 an den Setzeingängen führt zum Setzen des entsprechenden Ausgangs. Eintreffende steigende Taktflanken würden Zählereignisse auslösen. |
| 0 | 0,H | 0,H | 0,H | 0,H | 0,1,H | X | X | X | X | /Q3 | Logikpegel 0 an den Setzeingängen führt zu keiner Veränderung des entsprechenden Ausgangs. Eintreffende steigende Taktflanken würden Zählereignisse auslösen. |
| Zählbetrieb | |||||||||||
| Eingangssignale | Ausgangssignale | ||||||||||
| R | S0 | S1 | S2 | S3 | CLK | Q0 | Q1 | Q2 | Q3 | /QU | Erläuterungen |
| 0 | 0,H | 0,H | 0,H | 0,H | 0->1 | /Q0 | Q1' | Q2' | Q3' | /Q3' | Eine steigende Flanke am Takteingang führt zur Erhöhung des Zählerstandes um 1. |
| 0 | 0,H | 0,H | 0,H | 0,H | 1->0 | Q0 | Q1 | Q2 | Q3 | /Q3 | Eine fallende Flanke am Takteingang verändert den Zählerstand nicht. |
| 0 | 0,H | 0,H | 0,H | 0,H | 0,H | Q0 | Q1 | Q2 | Q3 | /Q3 | Ein fester Logikpegel 0 am Takteingang verändert den Zählerstand nicht. |
| 0 | 0,H | 0,H | 0,H | 0,H | 1 | Q0 | Q1 | Q2 | Q3 | /Q3 | Ein fester Logikpegel 1 am Takteingang verändert den Zählerstand nicht. |
Zeitverhalten bei RESET |
Zeitverhalten im Zählbetrieb
In den folgenden Diagrammen ist ein vollständiger Zählzyklus des Binärzählers dargestellt.
Am Start wird ein Reset durchgeführt und in der Folge sind die Signalverläufe der Ausgänge Q0, Q1, Q2, Q3 und /QU innerhalb von 16 Taktperioden zu erkennen.
Im Diagramm sind die Zeitverzögerungen bis zum Setzen der Ausgänge deutlich zu erkennen, die durch die asynchrone Zählweise entstehen.
Diese Verzögerungen sind besonders hoch, wenn mehrere aufeinanderfolgende Zählerausgänge von 1->0 wechseln müssen.
Zählerzustände 0, 1, 2, 3, 4, 5, 6, 7 |
![]() |
Zählerzustände 7, 8, 9, A, B, C, D, E |
![]() |
Zählerzustände E, F, 0 |
![]() |
Der Zähler ist über einen 20-polige Pfostenstecker mit der Programmzählereinheit verbunden.
| Die Belegung des Steckverbinders P1: | |||
| Pin | Name | Funktion | Pegel |
| 1 | +12V | Stromversorgung | 12V |
| 2 | CLK | Takteingang | 0V,12V,H |
| 3 | +12V | Stromversorgung | 12V |
| 4 | S0 | Setzeingang Bit0 | 0V,12V,H |
| 5 | +12V | Stromversorgung | 12V |
| 6 | Q0 | Datenausgang Bit0 | 0V,12V |
| 7 | +12V | Stromversorgung | 12V |
| 8 | S1 | Setzeingang Bit1 | 0V,12V,H |
| 9 | R | Reset-Eingang | 0V,12V |
| 10 | Q1 | Datenausgang Bit1 | 0V,12V |
| 11 | GND | Stromversorgung | 0V |
| 12 | S2 | Setzeingang Bit2 | 0V,12V,H |
| 13 | GND | Stromversorgung | 0V |
| 14 | Q2 | Datenausgang Bit2 | 0V,12V |
| 15 | GND | Stromversorgung | 0V |
| 16 | S3 | Setzeingang Bit3 | 0V,12V,H |
| 17 | GND | Stromversorgung | 0V |
| 18 | Q3 | Datenausgang Bit3 | 0V,12V |
| 19 | GND | Stromversorgung | 0V |
| 20 | /QU | Taktausgang | 0V,12V |
Der 4-bit Binärzähler wurde auf einer Platine mit den Abmessungen 160mmx100mm aufgebaut.
Insgesamt bilden 3 dieser Platinen den 12bit-Programmzähler der CPU.
Diese Schaltung ist die erste, mit der ich wirklich unzufrieden bin, da ich beim Schaltungsentwurf die Nachteile der asynchronen Arbeitsweise des Zählers nicht bedacht habe.
Sollte sich der Programmzähler als Problem erweisen, so werde ich ihn gegen einen synchron arbeitenden Zähler austauschen müssen.
![]() 4bit-Zählereinheit von oben |
![]() 4bit-Zählereinheit von unten |
|
Sollte jemand seine Rechte durch eine Veröffentlichung auf dieser oder einer anderen meiner Seiten verletzt sehen, bitte ich um sofortige Kontaktaufnahme.
Ich werde die entsprechenden Inhalte umgehend entfernen.
Somit sind sowohl ein anwaltlicher Rat als auch eine kostenpflichtige Abmahnung nicht erforderlich!
Weiterhin weise ich darauf hin, dass der Inhalt verlinkter Seiten nicht in meiner redaktionellen Verantwortung liegt. |
www.schlaefendorf.de 2012