Minecraft - Circuits for a CPU #3 (Adress)-Decoder & Branching [Tutorial] [HD] HD

14.11.2011
LEEESEEEN!! :) MAN KANN DIE ANMERKUNGEN AUCH DEAKTIVIEREN ;) DOWNLOAD 32 Byte RAM MODUL (16x16 Bit) http://www.xup.in/dl,80976037/32BytesRAM.schematic/ Hier in diesem Video erkläre ich euch einige wichtige Schaltkreise, den AdressDecoder und das Branchen. Wie ihr nach Abschluss des Videos vielleicht merken werdet, habe ich das ein oder andere ziemlich ungenau besprochen. Aber dafür gibt es ja die Beschreibung! :) Der AdressDecoder hat, bei 4 bit zumindest, 4 normale eingänge und einen immer negierten ausgang (fackel). um im Dezimalsystem "1" auszugeben, wird der erste INPUT ebenfalls negiert. bei "2" der zweite Input, und bei "3" werden die Eingänge 1 und 2 negiert (Dual/Binärsystem) Nach oben stapelbar kann man ihn als AdressDecoder eines RAM-Moduls (siehe Video) benutzen. Beim Branchen gibt es mehrere Dinge zu beachten: Man braucht einen ProgramCounter, und wenn dieser 16 Zeilen unterstützt, braucht man auch 16 Branch-Lines, um den PC auf jede einzelne dieser Zeilen manuell setzen zu können. Dann braucht man noch die Branchlines, die bestimmen, auf welchen Wert der PC gesetzt wird. Diese können bei 8 zeilen zum Beispiel dezimal (0-7) oder binär (3 bit, man könnte den AdressDecoder davor bauen um das binäre ins dezimale zu decodieren) eingegeben werden, UND man braucht einen Branch-Befehl, der ERST alle DFFs auf 0 setzt und 2-3 Ticks danach alle AND-Gates, an denen die BranchLines anliegen, enabled (siehe Video) Es darf meistens (sehr oft sogar) nur EINE branchline aktiv sein, da man nie mehr als eine Zeile ausliest. AdressDecoder, oder im Allgemeinen Decoder sind sehr wichtig, denn so können wir 8 AdressInputs auf 3 Binäre "komprimieren". 000 001 010 011 100 101 110 111 ... wäre das Beispiel. Ein ProgramCounter MUSS branchen können, sonst werden bei der Implementierung in eine CPU später viele Probleme auftreten. Die JUMP- Bits können wir ohne branchen vergessen, da diese eigenltich den eigentlichen (w00t, 2mal eigentlich in einem satz, jetzt sogar 3) BranchBefehl darstellen. High-Lvl: if a=b goto random esle goto another Assembler (Den, den wir auch bei der 8 Bit CPU verwenden werden) 0 mov DX,vara 1 mov BX,varb 2 sub DX,BX 3 mov (adresse des abschnittes "another" ), AX 4 JGL DX 5 mov (adresse des Labels random), AX 6 JEQ DX label another --- ... Befhle des Abschnittes Another ... --- label random --- ... Befehle des Abschnittes Random ... --- 0 Den Wert (Die RAM-Adresse) von der Variable A nach DX 1 Den Wert (Die RAM-Adresse) von der Variable B nach BX 2 Subtrahiere DX-BX und speichere in DX ab 3 Schiebe die Adresse des Labels, in dem der abschnitt "another" beginnt, nach AX (adressregister, das ist immer der Wert nachdem gebrancht wird) Wenn DX-BX ungleich 0 ist, dann ist a (dx) niemals gleich b (bx), weil 0 rauskommen müsste, wenn man 2 gleiche zahlen voneinander abzeiht 4 Springe dahin wenn es DX kleiner oder grösser 0 ist 5 Schiebe die Adresse von random nach AX 6 Springe Dahin wenn DX gleich 0 ist ACHTUNG! ich w

Похожие видео

Показать еще