How to make your own processor: Logic gates and addition

Πως να φτιάξετε τον δικό σας επεξεργαστή: Λογικές πύλες και πρόσθεση

· Electronics Ηλεκτρονική · logic λογική arithmetic αριθμητική

IntroductionΕισαγωγή

Ever wondered what truly powers the computer sitting in front of you? It's not magic, it's logic. Logic built from billions of tiny electronic switches. In this series of articles, we'll show how we can create a functional processor from the ground up, starting with the simplest elements: humble NAND gates. These gates (and NOR also) are universal gates. This means that any other logical operation and every complex circuit required for arithmetic or memory operations can be created using logical NAND gates only.

Αναρωτηθήκατε ποτέ πώς πραγματικά δουλεύει ένας υπολογιστής; Δεν είναι μαγεία, είναι λογική. Λογική χτισμένη από δισεκατομμύρια μικροσκοπικούς ηλεκτρονικούς διακόπτες. Σε αυτή τη σειρά άρθρων, θα δείξουμε πως μπορούμε να δημιουργήσουμε έναν λειτουργικό επεξεργαστή από το μηδέν, ξεκινώντας από τα πιο απλά στοιχεία: ταπεινές πύλες NAND. Αυτές οι πύλες (όπως και οι NOR) είναι καθολικές πύλες. Αυτό σημαίνει ότι κάθε άλλη λογική πράξη και κάθε σύνθετο κύκλωμα που απαιτείται για αριθμητικές ή μνημονικές λειτουργίες μπορεί να δημιουργηθεί χρησιμοποιώντας μόνο λογικές πύλες NAND.

This theoretical simplicity of the universal NAND gate translates into highly practical real-world implementations, making it the most common and essential building block in digital electronics. In its most basic form, before modern microchips, a NAND gate could be constructed using simple electromechanical relays. However, the dominant implementation today uses semiconductors (transistors). This highly efficient, low-power, design is the foundation of virtually all modern integrated circuits, from simple chips to complex processor cores.

Αυτή η θεωρητική απλότητα της καθολικής πύλης NAND μεταφράζεται σε άκρως πρακτικές εφαρμογές στον πραγματικό κόσμο, καθιστώντας την το πιο κοινό και απαραίτητο δομικό στοιχείο στα ψηφιακά ηλεκτρονικά. Στην πιο βασική της μορφή, πριν από τα σύγχρονα μικροτσίπ, μια πύλη NAND μπορούσε να κατασκευαστεί χρησιμοποιώντας απλά ηλεκτρομηχανικά ρελέ. Ωστόσο, η κυρίαρχη υλοποίηση σήμερα χρησιμοποιεί ημιαγωγούς (τρανζίστορ - κρυσταλλοτριόδους). Αυτή η εξαιρετικά αποδοτική, χαμηλής κατανάλωσης ενέργειας, σχεδίαση αποτελεί τη βάση σχεδόν όλων των σύγχρονων ολοκληρωμένων κυκλωμάτων, από απλά τσιπ έως σύνθετους πυρήνες επεξεργαστών.

Logic gatesΛογικές πύλες

Let's see first how we can implement other logical gates usign only NAND gates. For each gate, we present its truth table and interactive implementations. You can press the input buttons to toggle their status.

Ας δούμε πρώτα πως μπορούμε να υλοποιήσουμε άλλες λογικές πύλες χρησιμοποιώντας μόνο πύλες NAND. Για κάθε πύλη, παρουσιάζουμε τον πίνακα αληθείας της και διαδραστικές υλοποιήσεις της. Μπορείτε να πατάτε τα κουμπιά των εισόδων για να αλλάζετε την κατάστασή τους.

NAND

Input AInput BOutput
001
011
011
110
{ "width":300, "height":140, "editable": false, "showToolbox":false, "devices":[ {"type":"DC", "id":"dev0","x":20, "y":50,"label":"DC"}, {"type":"Toggle","id":"dev1","x":100,"y":15,"label":"A","state":{"on":false}}, {"type":"Toggle","id":"dev2","x":100,"y":85,"label":"B","state":{"on":false}}, {"type":"NAND", "id":"dev3","x":180,"y":50,"label":"NAND"}, {"type":"LED", "id":"dev4","x":250,"y":50,"label":"Output"}], "connectors":[ {"from":"dev0.out0","to":"dev1.in0"}, {"from":"dev0.out0","to":"dev2.in0"}, {"from":"dev1.out0","to":"dev3.in0"}, {"from":"dev2.out0","to":"dev3.in1"}, {"from":"dev3.out0","to":"dev4.in0"}] }

NOT

InputOutput
01
10
{ "width":300, "height":140, "editable": false, "showToolbox":false, "devices":[ {"type":"DC", "id":"dev0","x":20, "y":50,"label":"DC"}, {"type":"Toggle","id":"dev1","x":100,"y":50,"label":"Input","state":{"on":false}}, {"type":"NOT", "id":"dev2","x":180,"y":50,"label":"NOT"}, {"type":"LED", "id":"dev3","x":250,"y":50,"label":"Output"} ], "connectors":[ {"from":"dev0.out0","to":"dev1.in0"}, {"from":"dev1.out0","to":"dev2.in0"}, {"from":"dev2.out0","to":"dev3.in0"} ] }
{ "width":300, "height":140, "editable": false, "showToolbox":false, "devices":[ {"type":"DC", "id":"dev0","x":20, "y":50,"label":"DC"}, {"type":"Toggle","id":"dev1","x":100,"y":50,"label":"Input","state":{"on":false}}, {"type":"NAND", "id":"dev2","x":180,"y":50,"label":"NAND"}, {"type":"LED", "id":"dev3","x":250,"y":50,"label":"Output"}], "connectors":[ {"from":"dev0.out0","to":"dev1.in0"}, {"from":"dev1.out0","to":"dev2.in0"}, {"from":"dev1.out0","to":"dev2.in1"}, {"from":"dev2.out0","to":"dev3.in0"}] }

AND

Input AInput BOutput
000
010
010
111
{ "width":300, "height":140, "editable": false, "showToolbox":false, "devices":[ {"type":"DC", "id":"dev0","x":20, "y":50,"label":"DC"}, {"type":"Toggle","id":"dev1","x":100,"y":15,"label":"A","state":{"on":false}}, {"type":"Toggle","id":"dev2","x":100,"y":85,"label":"B","state":{"on":false}}, {"type":"AND", "id":"dev3","x":180,"y":50,"label":"AND"}, {"type":"LED", "id":"dev4","x":250,"y":50,"label":"Output"}], "connectors":[ {"from":"dev0.out0","to":"dev1.in0"}, {"from":"dev0.out0","to":"dev2.in0"}, {"from":"dev1.out0","to":"dev3.in0"}, {"from":"dev2.out0","to":"dev3.in1"}, {"from":"dev3.out0","to":"dev4.in0"}]}
{ "width":300, "height":140, "editable": false, "showToolbox":false, "devices":[ {"type":"DC", "id":"dev0","x":20, "y":50,"label":"DC"}, {"type":"Toggle","id":"dev1","x":80, "y":15,"label":"A","state":{"on":false}}, {"type":"Toggle","id":"dev2","x":80, "y":85,"label":"B","state":{"on":false}}, {"type":"NAND", "id":"dev3","x":140,"y":50,"label":"NAND"}, {"type":"NAND", "id":"dev4","x":200,"y":50,"label":"NAND"}, {"type":"LED", "id":"dev5","x":250,"y":50,"label":"Output"}], "connectors":[ {"from":"dev0.out0","to":"dev1.in0"}, {"from":"dev0.out0","to":"dev2.in0"}, {"from":"dev1.out0","to":"dev3.in0"}, {"from":"dev2.out0","to":"dev3.in1"}, {"from":"dev3.out0","to":"dev4.in0"}, {"from":"dev3.out0","to":"dev4.in1"}, {"from":"dev4.out0","to":"dev5.in0"}]}

OR

Input AInput BOutput
000
011
011
111
{ "width":300, "height":140, "editable": false, "showToolbox":false, "devices":[ {"type":"DC", "id":"dev0","x":20, "y":50,"label":"DC"}, {"type":"Toggle","id":"dev1","x":100,"y":15,"label":"A","state":{"on":false}}, {"type":"Toggle","id":"dev2","x":100,"y":85,"label":"B","state":{"on":false}}, {"type":"OR", "id":"dev3","x":180,"y":50,"label":"OR"}, {"type":"LED", "id":"dev4","x":250,"y":50,"label":"Output"}], "connectors":[ {"from":"dev0.out0","to":"dev1.in0"}, {"from":"dev0.out0","to":"dev2.in0"}, {"from":"dev1.out0","to":"dev3.in0"}, {"from":"dev2.out0","to":"dev3.in1"}, {"from":"dev3.out0","to":"dev4.in0"}]}
{ "width":300, "height":140, "editable": false, "showToolbox":false, "devices":[ {"type":"DC", "id":"dev0","x":20, "y":50,"label":"DC"}, {"type":"Toggle","id":"dev1","x":80, "y":15,"label":"A","state":{"on":false}}, {"type":"Toggle","id":"dev2","x":80, "y":85,"label":"B","state":{"on":false}}, {"type":"NAND", "id":"dev3","x":140,"y":15,"label":"NAND"}, {"type":"NAND", "id":"dev4","x":140,"y":85,"label":"NAND"}, {"type":"NAND", "id":"dev5","x":200,"y":50,"label":"NAND"}, {"type":"LED", "id":"dev6","x":250,"y":50,"label":"Output"}], "connectors":[ {"from":"dev0.out0","to":"dev1.in0"}, {"from":"dev0.out0","to":"dev2.in0"}, {"from":"dev1.out0","to":"dev3.in0"}, {"from":"dev1.out0","to":"dev3.in1"}, {"from":"dev2.out0","to":"dev4.in0"}, {"from":"dev2.out0","to":"dev4.in1"}, {"from":"dev3.out0","to":"dev5.in0"}, {"from":"dev4.out0","to":"dev5.in1"}, {"from":"dev5.out0","to":"dev6.in0"}]}

XOR

Input AInput BOutput
000
011
011
110
{ "width":300, "height":140, "editable": false, "showToolbox":false, "devices":[ {"type":"DC", "id":"dev0","x":20, "y":50,"label":"DC"}, {"type":"Toggle","id":"dev1","x":100,"y":15,"label":"A","state":{"on":false}}, {"type":"Toggle","id":"dev2","x":100,"y":85,"label":"B","state":{"on":false}}, {"type":"XOR", "id":"dev3","x":180,"y":50,"label":"XOR"}, {"type":"LED", "id":"dev4","x":250,"y":50,"label":"Output"}], "connectors":[ {"from":"dev0.out0","to":"dev1.in0"}, {"from":"dev0.out0","to":"dev2.in0"}, {"from":"dev1.out0","to":"dev3.in0"}, {"from":"dev2.out0","to":"dev3.in1"}, {"from":"dev3.out0","to":"dev4.in0"}]}
{ "width":300, "height":140, "editable": false, "showToolbox":false, "devices":[ {"type":"DC", "id":"dev0","x":10, "y":50,"label":"DC"}, {"type":"Toggle","id":"dev1","x":60, "y":15,"label":"A","state":{"on":false}}, {"type":"Toggle","id":"dev2","x":60, "y":85,"label":"B","state":{"on":false}}, {"type":"NAND", "id":"dev3","x":110,"y":50,"label":"NAND"}, {"type":"NAND", "id":"dev4","x":160,"y":15,"label":"NAND"}, {"type":"NAND", "id":"dev5","x":160,"y":85,"label":"NAND"}, {"type":"NAND", "id":"dev6","x":210,"y":50,"label":"NAND"}, {"type":"LED", "id":"dev7","x":260,"y":50,"label":"Output"}], "connectors":[ {"from":"dev0.out0","to":"dev1.in0"}, {"from":"dev0.out0","to":"dev2.in0"}, {"from":"dev1.out0","to":"dev4.in0"}, {"from":"dev1.out0","to":"dev3.in0"}, {"from":"dev2.out0","to":"dev5.in1"}, {"from":"dev2.out0","to":"dev3.in1"}, {"from":"dev3.out0","to":"dev4.in1"}, {"from":"dev3.out0","to":"dev5.in0"}, {"from":"dev4.out0","to":"dev6.in0"}, {"from":"dev5.out0","to":"dev6.in1"}, {"from":"dev6.out0","to":"dev7.in0"}]}

AdditionΠρόσθεση

Binary adders are the essential digital circuits that enable computers to perform arithmetic. The simplest is the Half Adder (HA), which adds two single-bit inputs (A and B). However, it lacks the ability to receive a carry from a previous stage. This limitation is solved by the Full Adder (FA), which adds three inputs (A, B, and a carry C), making it the fundamental building block for adding larger numbers. By cascading multiple Full Adders, we can create a Multi-bit Adder, capable of performing addition on multi-bit binary words, a functionality that is essential for any modern processor.

Οι δυαδικοί αθροιστές (binary adders) είναι τα απαραίτητα ψηφιακά κυκλώματα που επιτρέπουν στους υπολογιστές να εκτελούν αριθμητικές πράξεις. Ο απλούστερος είναι ο Ημιαθροιστής (Half Adder, HA), ο οποίος προσθέτει δύο μονοψήφιες δυαδικές εισόδους (A και B). Ωστόσο, του λείπει η ικανότητα να δέχεται κρατούμενο από προηγούμενο στάδιο. Αυτή η αδυναμία λύνεται από τον Πλήρη Αθροιστή (Full Adder - FA), ο οποίος προσθέτει τρεις εισόδους (A, B, και κρατούμενο C), καθιστώντας τον το θεμελιώδες δομικό στοιχείο για την πρόσθεση μεγαλύτερων αριθμών. Με τη διαδοχική σύνδεση πολλαπλών Πλήρων Αθροιστών μπορούμε να δημιουργήσουμε έναν Πολυψήφιο Αθροιστή (Multi-bit Adder), ικανό να εκτελεί πρόσθεση σε πολυψήφιες δυαδικές λέξεις, μια απαραίτητη λειτουργία για κάθε σύγχρονο επεξεργαστή.

Half AdderΗμιαθροιστής

Input AInput BOutput
0000
0101
1001
1110
{ "width":300, "height":140, "editable": false, "showToolbox":false, "devices":[ {"type":"DC", "id":"dev0","x":20, "y":50,"label":"DC"}, {"type":"Toggle","id":"dev1","x":100,"y":15,"label":"A","state":{"on":false}}, {"type":"Toggle","id":"dev2","x":100,"y":85,"label":"B","state":{"on":false}}, {"type":"XOR", "id":"dev3","x":180,"y":15,"label":"XOR"}, {"type":"AND", "id":"dev4","x":180,"y":85,"label":"AND"}, {"type":"LED", "id":"dev5","x":250,"y":15,"label":"Output 0"}, {"type":"LED", "id":"dev6","x":250,"y":85,"label":"Output 1"}], "connectors":[ {"from":"dev0.out0","to":"dev1.in0"}, {"from":"dev0.out0","to":"dev2.in0"}, {"from":"dev1.out0","to":"dev3.in0"}, {"from":"dev2.out0","to":"dev3.in1"}, {"from":"dev1.out0","to":"dev4.in0"}, {"from":"dev2.out0","to":"dev4.in1"}, {"from":"dev3.out0","to":"dev5.in0"}, {"from":"dev4.out0","to":"dev6.in0"}]}
{ "width":300, "height":140, "editable": false, "showToolbox":false, "devices":[ {"type":"DC", "id":"dev0","x":10, "y":50,"label":"DC"}, {"type":"Toggle","id":"dev1","x":55, "y":15,"label":"A","state":{"on":false}}, {"type":"Toggle","id":"dev2","x":55, "y":85,"label":"B","state":{"on":false}}, {"type":"NAND", "id":"dev3","x":100,"y":50,"label":"NAND"}, {"type":"NAND", "id":"dev4","x":150,"y":15,"label":"NAND"}, {"type":"NAND", "id":"dev5","x":150,"y":85,"label":"NAND"}, {"type":"NAND", "id":"dev6","x":200,"y":15,"label":"NAND"}, {"type":"NAND", "id":"dev7","x":200,"y":65,"label":"NAND"}, {"type":"LED", "id":"dev8","x":250,"y":15,"label":"Output 0"}, {"type":"LED", "id":"dev9","x":250,"y":65,"label":"Output 1"}], "connectors":[ {"from":"dev0.out0","to":"dev1.in0"}, {"from":"dev0.out0","to":"dev2.in0"}, {"from":"dev1.out0","to":"dev4.in0"}, {"from":"dev1.out0","to":"dev3.in0"}, {"from":"dev2.out0","to":"dev5.in1"}, {"from":"dev2.out0","to":"dev3.in1"}, {"from":"dev3.out0","to":"dev4.in1"}, {"from":"dev3.out0","to":"dev5.in0"}, {"from":"dev3.out0","to":"dev7.in0"}, {"from":"dev3.out0","to":"dev7.in1"}, {"from":"dev4.out0","to":"dev6.in0"}, {"from":"dev5.out0","to":"dev6.in1"}, {"from":"dev6.out0","to":"dev8.in0"}, {"from":"dev7.out0","to":"dev9.in0"}]}

Full AdderΠλήρης Αθροιστής

Input AInput BInput COutput
00000
00101
01001
01110
10001
10110
11010
11111
{ "width":300, "height":175, "editable": false, "showToolbox":false, "devices":[ {"type":"DC","id":"dev0","x":10,"y":65,"label":"DC"}, {"type":"Toggle","id":"dev1","x":60,"y":15,"label":"A","state":{"on":false}}, {"type":"Toggle","id":"dev2","x":60,"y":65,"label":"B","state":{"on":false}}, {"type":"Toggle","id":"dev3","x":60,"y":115,"label":"C","state":{"on":false}}, {"type":"HalfAdder","id":"dev4","x":115,"y":40,"label":"HalfAdder"}, {"type":"HalfAdder","id":"dev5","x":115,"y":100,"label":"HalfAdder"}, {"type":"OR","id":"dev7","x":200,"y":100,"label":"OR"}, {"type":"LED","id":"dev8","x":250,"y":40,"label":"Output 0"}, {"type":"LED","id":"dev9","x":250,"y":100,"label":"Output 1"}], "connectors":[ {"from":"dev0.out0","to":"dev1.in0"}, {"from":"dev0.out0","to":"dev2.in0"}, {"from":"dev0.out0","to":"dev3.in0"}, {"from":"dev1.out0","to":"dev4.in0"}, {"from":"dev2.out0","to":"dev4.in1"}, {"from":"dev3.out0","to":"dev5.in1"}, {"from":"dev4.out0","to":"dev5.in0"}, {"from":"dev4.out1","to":"dev7.in0"}, {"from":"dev5.out0","to":"dev8.in0"}, {"from":"dev5.out1","to":"dev7.in1"}, {"from":"dev7.out0","to":"dev9.in0"} ]}
{ "width":300, "height":220, "editable": false, "showToolbox":false, "devices":[ {"type":"DC","id":"dev0","x":10,"y":90,"label":"DC"}, {"type":"Toggle","id":"dev1" ,"x":55,"y":30, "label":"A","state":{"on":false}}, {"type":"Toggle","id":"dev2" ,"x":55,"y":90, "label":"B","state":{"on":false}}, {"type":"Toggle","id":"dev3" ,"x":55,"y":150,"label":"C","state":{"on":false}}, {"type":"NAND", "id":"dev4" ,"x":105,"y":50,"label":"NAND"}, {"type":"NAND", "id":"dev5" ,"x":155,"y":10,"label":"NAND"}, {"type":"NAND", "id":"dev6" ,"x":155,"y":60,"label":"NAND"}, {"type":"NAND", "id":"dev7" ,"x":205,"y":35,"label":"NAND"}, {"type":"NAND", "id":"dev8" ,"x":105,"y":130,"label":"NAND"}, {"type":"NAND", "id":"dev9" ,"x":155,"y":120,"label":"NAND"}, {"type":"NAND", "id":"dev10","x":155,"y":170,"label":"NAND"}, {"type":"NAND", "id":"dev11","x":205,"y":145,"label":"NAND"}, {"type":"NAND", "id":"dev12","x":205,"y":90, "label":"NAND"}, {"type":"LED", "id":"dev13","x":255,"y":60, "label":"Output 0"}, {"type":"LED", "id":"dev14","x":255,"y":120,"label":"Output 1"}], "connectors":[ {"from":"dev0.out0","to":"dev1.in0"}, {"from":"dev0.out0","to":"dev2.in0"}, {"from":"dev0.out0","to":"dev3.in0"}, {"from":"dev1.out0","to":"dev4.in0"}, {"from":"dev2.out0","to":"dev4.in1"}, {"from":"dev1.out0","to":"dev5.in0"}, {"from":"dev4.out0","to":"dev5.in1"}, {"from":"dev4.out0","to":"dev6.in0"}, {"from":"dev2.out0","to":"dev6.in1"}, {"from":"dev5.out0","to":"dev7.in0"}, {"from":"dev6.out0","to":"dev7.in1"}, {"from":"dev7.out0","to":"dev8.in0"}, {"from":"dev3.out0","to":"dev8.in1"}, {"from":"dev7.out0","to":"dev9.in0"}, {"from":"dev3.out0","to":"dev10.in1"}, {"from":"dev8.out0","to":"dev9.in1"}, {"from":"dev8.out0","to":"dev10.in0"}, {"from":"dev9.out0","to":"dev11.in0"}, {"from":"dev10.out0","to":"dev11.in1"}, {"from":"dev4.out0","to":"dev12.in0"}, {"from":"dev8.out0","to":"dev12.in1"}, {"from":"dev11.out0","to":"dev13.in0"}, {"from":"dev12.out0","to":"dev14.in0"}]}

Multi-bit AdderΠολυψήφιος Αθροιστής

Input A1Input A0Input B1Input B0Input COutput
00000000
01000001
01010010
01100011
01110100
10110101
11110110
11111111
{ "width":350, "height":275, "editable": false, "showToolbox":false, "devices":[ {"type":"DC","id":"dev0","x":15,"y":120,"label":"DC"}, {"type":"Toggle", "id":"dev1", "x":70,"y":20, "label":"A0","state":{"on":false}}, {"type":"Toggle", "id":"dev2", "x":70,"y":70, "label":"A1","state":{"on":false}}, {"type":"Toggle", "id":"dev3", "x":70,"y":120, "label":"B0","state":{"on":false}}, {"type":"Toggle", "id":"dev4", "x":70,"y":170, "label":"B1","state":{"on":false}}, {"type":"Toggle", "id":"dev5", "x":70,"y":220, "label":"C", "state":{"on":false}}, {"type":"FullAdder","id":"dev6", "x":130,"y":60, "label":"FullAdder"}, {"type":"FullAdder","id":"dev7", "x":130,"y":150,"label":"FullAdder"}, {"type":"LED", "id":"dev8", "x":220,"y":60, "label":"Output 0"}, {"type":"LED", "id":"dev9", "x":220,"y":115,"label":"Output 1"}, {"type":"LED", "id":"dev10","x":220,"y":170,"label":"Output 2"}, {"type":"4bit7seg", "id":"dev11","x":270,"y":100,"label":"Output"}], "connectors":[ {"from":"dev0.out0","to":"dev1.in0"}, {"from":"dev0.out0","to":"dev2.in0"}, {"from":"dev0.out0","to":"dev3.in0"}, {"from":"dev0.out0","to":"dev4.in0"}, {"from":"dev0.out0","to":"dev5.in0"}, {"from":"dev5.out0","to":"dev6.in0"}, {"from":"dev1.out0","to":"dev6.in1"}, {"from":"dev3.out0","to":"dev6.in2"}, {"from":"dev2.out0","to":"dev7.in1"}, {"from":"dev4.out0","to":"dev7.in2"}, {"from":"dev6.out1","to":"dev7.in0"}, {"from":"dev6.out0","to":"dev8.in0"}, {"from":"dev7.out0","to":"dev9.in0"}, {"from":"dev7.out1","to":"dev10.in0"}, {"from":"dev6.out0","to":"dev11.in0"}, {"from":"dev7.out0","to":"dev11.in1"}, {"from":"dev7.out1","to":"dev11.in2"} ]}

See also...

Δείτε επίσης...