How to make your own processor: Comparison and flow control

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

· Electronics Ηλεκτρονική · logic λογική

IntroductionΕισαγωγή

In our previous article, we showed how we can use NAND gates to implement addition. In this article, we will show how to implement comparators, multiplexers and demultiplexers. The implementations we present in this page are interactive (you can press buttons and change the inputs).

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

ComparisonΣύγκριση

Equal to zero comparatorΣυγκριτής ίσο με μηδέν

It outputs 1 if -and only if- all bits in the input are 0.

Α3A2Α1Α0Output
00000
XXX11
XX1X1
X1XX1
1XXX1
{ "width":350, "height":160, "editable": false, "showToolbox":false, "devices":[ {"type":"NumSrc","id":"dev0", "x":20, "y":25, "label":"A0","state":{"direction":0,"on":false}}, {"type":"NumSrc","id":"dev1", "x":20, "y":55, "label":"Α1","state":{"direction":0,"on":false}}, {"type":"NumSrc","id":"dev2", "x":20, "y":85, "label":"A2","state":{"direction":0,"on":false}}, {"type":"NumSrc","id":"dev3", "x":20, "y":115,"label":"Α3","state":{"direction":0,"on":false}}, {"type":"NAND", "id":"dev4", "x":60, "y":15, "label":"NAND"}, {"type":"NAND", "id":"dev5", "x":60, "y":45, "label":"NAND"}, {"type":"NAND", "id":"dev6", "x":60, "y":75, "label":"NAND"}, {"type":"NAND", "id":"dev7", "x":60, "y":105,"label":"NAND"}, {"type":"NAND", "id":"dev8", "x":110, "y":30, "label":"NAND"}, {"type":"NAND", "id":"dev9", "x":110, "y":90, "label":"NAND"}, {"type":"NAND", "id":"dev10","x":160, "y":30, "label":"NAND"}, {"type":"NAND", "id":"dev11","x":160, "y":90, "label":"NAND"}, {"type":"NAND", "id":"dev12","x":210, "y":60, "label":"NAND"}, {"type":"NAND", "id":"dev13","x":260, "y":60, "label":"NAND"}, {"type":"NumDsp","id":"dev14","x":315, "y":68, "label":"Output","state":{"direction":2}}], "connectors":[{"from":"dev0.out0","to":"dev4.in0"}, {"from":"dev0.out0","to":"dev4.in1"}, {"from":"dev1.out0","to":"dev5.in0"}, {"from":"dev1.out0","to":"dev5.in1"}, {"from":"dev2.out0","to":"dev6.in0"}, {"from":"dev2.out0","to":"dev6.in1"}, {"from":"dev3.out0","to":"dev7.in0"}, {"from":"dev3.out0","to":"dev7.in1"}, {"from":"dev4.out0","to":"dev8.in0"}, {"from":"dev5.out0","to":"dev8.in1"}, {"from":"dev6.out0","to":"dev9.in0"}, {"from":"dev7.out0","to":"dev9.in1"}, {"from":"dev8.out0","to":"dev10.in0"}, {"from":"dev8.out0","to":"dev10.in1"}, {"from":"dev9.out0","to":"dev11.in0"}, {"from":"dev9.out0","to":"dev11.in1"}, {"from":"dev10.out0","to":"dev12.in0"}, {"from":"dev11.out0","to":"dev12.in1"}, {"from":"dev12.out0","to":"dev13.in0"}, {"from":"dev12.out0","to":"dev13.in1"}, {"from":"dev13.out0","to":"dev14.in0"}]}

Flow controlΈλεγχος ροής

Μultiplexer (Data selector)Πολυπλέκτης (Επιλογέας δεδομένων)

A multiplexer (mux) routes one of several input lines to a single output line.

Ένας πολυπλέκτης (mux) κατευθύνει μια από τις πολλαπλές γραμμές εισόδου στη μοναδική γραμμή εξόδου.

SelectorInput AInput BOutput
0000
0010
0101
0111
1000
1011
1100
1111
{ "width":320, "height":160, "editable": false, "showToolbox":false, "devices":[ {"type":"DC", "id":"dev0","x":20,"y":20, "label":"DC"}, {"type":"Toggle","id":"dev1","x":70,"y":20, "label":"Selector","state":{"on":false}}, {"type":"NumSrc","id":"dev2","x":30,"y":75, "label":"Input A","state":{"direction":0,"on":false}}, {"type":"NumSrc","id":"dev3","x":30,"y":115,"label":"Input B","state":{"direction":0,"on":true}}, {"type":"NAND", "id":"dev4","x":120,"y":20,"label":"NAND"}, {"type":"NAND", "id":"dev5","x":170,"y":40,"label":"NAND"}, {"type":"NAND", "id":"dev6","x":220,"y":60,"label":"NAND"}, {"type":"NAND", "id":"dev7","x":120,"y":85,"label":"NAND"}, {"type":"NumDsp","id":"dev8","x":280,"y":70,"label":"Output","state":{"direction":2}}], "connectors":[ {"from":"dev0.out0","to":"dev1.in0"}, {"from":"dev1.out0","to":"dev4.in0"}, {"from":"dev1.out0","to":"dev4.in1"}, {"from":"dev4.out0","to":"dev5.in0"}, {"from":"dev2.out0","to":"dev5.in1"}, {"from":"dev5.out0","to":"dev6.in0"}, {"from":"dev6.out0","to":"dev8.in0"}, {"from":"dev1.out0","to":"dev7.in0"}, {"from":"dev3.out0","to":"dev7.in1"}, {"from":"dev7.out0","to":"dev6.in1"}]}

Demultiplexer (Data distributor)Αποπολυπλέκτης (Διανομέας δεδομένων)

A demultiplexer (demux) takes one input signal and routes it to one of several output lines.

Ένας αποπολυπλέκτης (demux) λαμβάνει ένα σήμα εισόδου και το κατευθύνει σε μία από τις γραμμές εξόδου.

SelectorInputOutput AOutput B
0000
0110
1000
1101
{ "width":320, "height":140, "editable": false, "showToolbox":false, "devices":[ {"type":"DC", "id":"dev0","x":20, "y":80,"label":"DC"}, {"type":"Toggle","id":"dev1","x":70, "y":80,"label":"Selector","state":{"on":false}}, {"type":"NumSrc","id":"dev2","x":27, "y":30,"label":"Input","state":{"direction":0,"on":true}}, {"type":"NAND", "id":"dev3","x":120,"y":50,"label":"NAND"}, {"type":"NAND", "id":"dev4","x":220,"y":80,"label":"NAND"}, {"type":"NAND", "id":"dev5","x":170,"y":20,"label":"NAND"}, {"type":"NAND", "id":"dev6","x":220,"y":20,"label":"NAND"}, {"type":"NumDsp","id":"dev7","x":280,"y":30,"label":"A","state":{"direction":2}}, {"type":"NumDsp","id":"dev8","x":280,"y":90,"label":"B","state":{"direction":2}}], "connectors":[ {"from":"dev0.out0","to":"dev1.in0"}, {"from":"dev1.out0","to":"dev3.in1"}, {"from":"dev2.out0","to":"dev3.in0"}, {"from":"dev3.out0","to":"dev4.in0"}, {"from":"dev3.out0","to":"dev4.in1"}, {"from":"dev4.out0","to":"dev8.in0"}, {"from":"dev2.out0","to":"dev5.in0"}, {"from":"dev3.out0","to":"dev5.in1"}, {"from":"dev5.out0","to":"dev6.in0"}, {"from":"dev5.out0","to":"dev6.in1"}, {"from":"dev6.out0","to":"dev7.in0"}]}

See also...

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