Ein Register sind einfach Flip-Flops mit gemeinsamem Takt
Ein D-Flip-Flop speichert ein Bit; verschalten Sie N davon mit demselben Taktsignal, und Sie erhalten ein N-Bit-Register, das bei jeder Taktflanke ein ganzes Wort übernimmt. Das einzig Neue, das ein brauchbares Register braucht, ist ein Ladefreigabe-Eingang (Load), der entscheidet, ob das Register in diesem Takt einen neuen Wert übernimmt oder seinen aktuellen Inhalt hält.
Ladefreigabe aus einem Multiplexer aufbauen
Der einfachste Weg, einem Flip-Flop ohne eingebauten Enable-Pin eine Ladefreigabe hinzuzufügen, ist ein 2:1-Multiplexer vor seinem D-Eingang: Bei Load=1 lässt der Multiplexer den neuen Wert durch; bei Load=0 speist er den eigenen aktuellen Ausgang des Flip-Flops wieder in sich selbst ein, sodass der gespeicherte Wert unverändert bleibt, obwohl der Takt weiterläuft. Boolflows REG4-Block baut genau das als fertige 4-Bit-Einheit ein.
Von einem Register zu einer Registerdatei
Die Registerdatei einer CPU ist nichts weiter als mehrere solcher Register, die sich einen Satz Dateneingangsleitungen teilen, wobei ein Dekoder eine binäre Registeradresse in genau eine aktive Load-Leitung umsetzt — so erreicht ein Schreibvorgang nur das adressierte Register, während der Multiplexer jedes anderen Registers weiterhin dessen eigenen Ausgang zurückspeist. Bei nur zwei Registern genügt ein einziges NOT-Gatter (Load0 = ¬Addr, Load1 = Addr); bei mehr skalieren Boolflows Decoder-2:4- oder Decoder-3:8-Blöcke dieselbe Idee.
Probieren Sie es selbst
Bauen Sie im Schaltungseditor zwei REG4-Blöcke, die sich einen 4-Bit-Datenbus teilen, steuern Sie den Load-Eingang des einen direkt mit einem einzelnen Adressbit an und den des anderen über ein NOT-Gatter, und bestätigen Sie, dass das Umschalten des Adressbits einen neuen Wert jeweils nur in ein Register leitet.