Ich implementierte die ALU gemäß den Angaben in meinem Buch The Elements of Computing systems. Ich stecke nur in einem Problem fest. Wie finde ich heraus, ob eine bestimmte Zahl Null ist oder nicht? Eine Sache, die ich tun kann, ist oder jedes bisschen im Bus, und dann ein Nicht-Gatter darauf anwenden. Aber es muss eine andere elegante Lösung geben.
16
Antworten:
Es führt einfach kein Weg daran vorbei, alle Teile zu ORen, so unbefriedigend das auch scheinen mag. Sie sind jedoch auch nicht auf zwei Eingangsgatter in Silizium beschränkt. Sie können ein NOR-Gatter mit 4 Eingängen in CMOS-Logik erstellen, indem Sie 4 p-Serientransistoren in das Pullup-Netzwerk und 4 parallele n-Transistoren in das Pulldown-Netzwerk einfügen. Dies verringert die Tiefe Ihrer Baumtopologie und damit die Laufzeitverzögerung. Sie können diese Theorie nur so weit führen, aber bevor der kumulative Spannungsabfall an den Serientransistoren dazu führt, dass der Pull-up nicht hoch genug ist, um eine "1" zu sein ... vier ist eine gute Faustregel, wenn ich mich richtig erinnere.
quelle
Die Logikfunktion ist das NOR-Gatter. Das ist die einfachste Logikfunktion, die es gibt.
quelle
Die typische Lösung für 8-Bit-Maschinen war, dass die ALU eine Reihe von Flag-Bits erzeugt, die das Ergebnis der letzten Operation darstellen. Während es möglich wäre, eine beliebige Anzahl von Flag-Bits zu haben (dh, Sie könnten ein 'Z'-Flag für jedes Register in Ihrer CPU haben), ist es normalerweise das, was Sie gerade berechnet haben, für das Sie am interessantesten sind Es macht einen gewissen Sinn, dies so zu tun.
Einige dieser alten CPUs setzten automatisch Flag-Bits für fast jede Datenbewegung, während andere erfordern würden, dass Sie eine bestimmte 'Compare'-Anweisung in Ihren Code einfügen, wenn Sie nur plötzlich wissen müssen, ob ein bestimmtes Register Null ist. Unabhängig davon, ob Sie für jedes Register oder nur für das, was gerade berechnet wurde, eine Nullprüfung durchführen, gibt es keinen einfacheren Weg, nach "Ist dieses Wort Null" zu suchen, als einfach alle Bits zusammen zu ODER.
quelle
Einige CPUs, z. B. MIPS, haben ein Register, das immer Null enthält, was das Testen eines anderen Registers auf Null sehr schnell macht.
quelle
Ich bin ein großer Fan von
or_reduce
- die meisten Synthesewerkzeuge optimieren es auf die beste Implementierung, da sie genau wissen, was Sie tun.quelle