Kredsløb

Sådan opbygges en 8-bit computer: 18 trin (med billeder)

OTECKOVIA - Nehanebná Stella. S Alexom ich takmer pristihli

OTECKOVIA - Nehanebná Stella. S Alexom ich takmer pristihli

Indholdsfortegnelse:

Anonim

At opbygge en 8-bit TTL-computer lyder som en skræmmende og kompliceret opgave, eller i det mindste gjorde det for mig, da jeg startede på min rejse for at forstå arkitekturen i en grundlæggende CPU. Når det kommer til det, er en CPU ret simpel i drift, når man lærer fundamentet bag alle sine processer. Dette projekt er beregnet til at hjælpe alle interesserede i at opbygge deres egen computer og få den vidunderlige viden, der følger med processen. Vær ikke bange for at prøve, du kan kun lære.
Dette projekt vil starte med at beskrive de grundlæggende elektronikker. Derefter beskrives fundamentet af binær og boolsk logik. Endelig vil vi så flytte ind på funktionen af ​​de forskellige dele af en simpel som muligt computer (med nogle få ændringer) som beskrevet i Malvinos tekst Digital Computer Electronics . Dette betyder, at slutproduktet af denne instruktør er en computer, som du kan programmere med et unikt instruktionssæt. Dette projekt overlader også mange af computerens designaspekter til dig og fungerer som vejledning til opbygning af din egen computer. Dette skyldes, at der er mange måder at nærme sig på dette projekt. Hvis du allerede har en god forståelse af boolsk logik, og det binære føler dig fri til at springe over til projektets kød. Jeg håber, at du alle nyder godt af og får noget ud af en bygning som dette, jeg ved, at jeg sikkert gjorde det.
Til dette projekt skal du:
1.) En strømforsyning
2.) Breadboards + masser af ledninger
3.) LED'er til udgang
4.) Forskellige logiske IC'er (diskuteret senere)
5.) fritid
6.) En vilje til at ødelægge og lære af fejl
7.) Meget tålmodighed
Valgfri (men meget nyttig):
1.) oscilloskop
2.) Digital multimeter
3.) EEPROM programmerer
4.) Sonic skruetrækker
Nyttige links til et projekt som dette:
Digital Computer Electronics:
http://www.amazon.com/Digital-computer-electronics-Albert-Malvino/dp/007039861
TTL Cookbook: http://www.amazon.com/TTL-Cookbook-Understanding-Transistor-Transistor-Integrated/dp/B0049UUV38

forsyninger:

Trin 1: Hvad er en computer?

Dette kan virke som et meget forenklet spørgsmål, der ikke behøver at svare, når det faktisk er et spørgsmål, at mange mennesker ikke kender det sande svar til. Computere har eksisteret meget længere end transistoren i mekanisk og teoretisk form. Den egentlige definition af en computer blev opfundet af en meget intelligent person ved navn Alan Turing. Han beskrev en maskine, der blev betegnet Turing Machine. Hver computer, vi bruger i dag, fra den computer eller mobiltelefon, som du læser dette til superdatamaskiner, kan alle klassificeres som en Turing Machine på deres mest forenklede niveau.
Hvad er en Turing Machine? En Turing Machine består af 4 dele: båndet, hovedet, bordet og statens register. For at visualisere driften af ​​en sådan maskine skal man først forestille sig en filmstrimmel, der spænder uendeligt i hver retning. Forestil dig nu, at hver celle i denne filmstrimmel kun kan indeholde et af et defineret sæt symboler (som et alfabet). For dette eksempel lad os forestille os, at hver celle kun kan indeholde enten "0" eller "1". Disse celler kan omskrives en uendelig tid, men bevarer deres information på ubestemt tid, indtil de ændres igen. Den del af Turing Machine kendt som hovedet kan skrive symboler til cellerne såvel som enten øge eller formindske dets position på filmstrimlen med et givet heltal (heltal) af celler. Den næste del er tabellen, som indeholder et givet sæt instruktioner til hovedet, der skal udføres som "Flyt højre 4 celler" og "Sæt celle til 1". Den fjerde og sidste del af en Turing Machine er dens statsregister, hvis formål er at holde maskinens aktuelle tilstand. Staten indeholder instruktioner såvel som de aktuelle data på båndet.
Det er så simpelt, at en computer fungerer. Når din computer fungerer, fungerer den faktisk som en turing maskine. Den behandler data, der holdes på din computer ved hjælp af et givet sæt instruktioner og algoritmer. Den computer, der beskrives i denne vejledning, er en meget simpel model af en computer, men den fungerer stadig som en, som du kan programmere med et sæt instruktioner, som den vil følge og udføre.
Nyttige links:
Wikipedia på Turing Machines:
http://en.wikipedia.org/wiki/Turing_machine

Trin 2: En introduktion til elektronik

Før du bygger en 8-bit computer, er det yderst nyttigt at tage fat på de grundlæggende egenskaber af el og analog kredsløb. Der er dele på den computer, du vil bygge, vil have brug for analoge komponenter. Der er mange elektronik selvundervisning guider til rådighed for en minimal pris, der giver et crash kursus i elektroteknik. Jeg fandt personligt Elektronik Selvundervisning Guide af Harry Kybet og Earl Boysen at være en vidunderlig bog for at tackle verden af ​​analog elektronik.
Elektronik Selvundervisning Guide : http://www.amazon.com/Electronics-Self-Teaching-Guide-Teaching-Guides/dp/0470289619/
Fælles komponenter:
Modstand - Grænser nuværende, målt i ohm.
Kondensator - Opbevaringsgebyr kan enten være polær eller ikke-polær (polar, hvilket betyder at den skal placeres i den rigtige retning til arbejde). Målt i farads.
Diode - Tillader kun strømmen at strømme i en retning, bryder ned ved en bestemt spænding, når den placeres i den forkerte retning.
Transistor - En aktuel port, der styres af en tredje pin, der fungerer som mægler. Der er mange typer af transistorer, men her vil vi tale om BJT (bipolar junction transistor), der kommer i to typer: NPN og PNP.

Strøm, spænding og modstand går hånd i hånd i et kredsløb. Forholdet mellem de tre kan udtrykkes med Ohms lov: V = IR. Med andre ord er spændingen lig med strømmen i ampere multipliceret med modstanden i ohm. Ohms lov er en af ​​de vigtigste formler i elektronik, og det er værd at vide ud af toppen af ​​dit hoved.
For at anvende Ohms lov skal du kende modstanden af ​​et kredsløb. For at finde værdien af ​​en modstand skal du bruge sin farvekode. Modstandens farvekode er baseret på det synlige spektrum og kan gemmes i mange forskellige modearter. For dem der ikke er ligeglad med at huske det, er der en overflod af værktøjer, der eksisterer for at hjælpe dig med at finde den korrekte værdi for din modstand. For at beregne total modstand i et kredsløb har du brug for to formler til to forskellige modstandskonfigurationer: serie og parallel. I serie følger en modstand den anden, mens de parallelt arbejder sammen med hinanden. I serie er formlen meget enkel:
Modstande i serie: R (total) = R (1) + R (2) +. . . + R (N)
Det betyder, at du bare skal tilføje værdierne af modstandene.
Modstande i Parallel: R (total) = 1 / {1 / R (1) + 1 / R (2) +. . . + 1 / R (N)}
Et godt værktøj til at finde modstand fra farvekode: http://www.csgnetwork.com/resistcolcalc.html
Det er lettere at forstå formlen for modstande parallelt, hvis du tænker på modstanderne som at arbejde sammen som to personer, der arbejder sammen om et projekt. Den samme formel bruges til ordproblemer, hvor du får den hastighed, hvormed to personer opererer, og du skal finde ud af, hvor hurtigt deres projekt vil blive gennemført, hvis arbejdet sammen.
For at finde ud af, hvor meget strøm der leveres til en given komponent med en given modstandsværdi, skal du blot tilslutte modstands- og spændingsværdierne i Ohms lov og løse for I. For eksempel:
Et lys er i et kredsløb, og to 1K (1 000 ohm) modstande er placeret foran den parallelt. Med en strømforsyning på 9 volt, hvor meget strøm leveres til lyset?
1.) Beregn R (total):
R (total) = 1 / (1/1000 + 1/1000) = 1 / (2/1000) = 1000/2 = 500 ohm
2.) Beregn strøm ved hjælp af Ohms lov:
9 = I * 500
I = 9/500 = .018 A = 18 mA (milliamps)
Du kan også arrangere modstande i et kredsløb for at regulere spændingen. Dette kaldes en spændingsdeler og involverer to modstande i serie. Spændingsudgangen af ​​de to modstande er ved deres kryds. For en bedre ide, se på det billede, jeg har vedhæftet. I dette arrangement er formlen for spændingsudgang:
V (ud) = V (kilde) * R (2) / {R (1) + R (2)}
Kondensatorer vil være nyttige i din computer med opbygningen af ​​uret. Uret er simpelthen et kredsløb, der tændes og slukkes med konstant hastighed. Ligesom modstande har kondensatorer to formler til at finde den samlede værdi for både serier og parallelle konfigurationer.
Serie: C (total) = 1 / {1 / C (1) + 1 / C (2) +. . . + 1 / C (N)}
Parallel: C (total) = C (1) + C (2) +. . . + C (N)

Den hastighed, hvormed en kondensatorladning afhænger af kredsløbets modstand før (eller efter, hvis du udleder) kondensatoren såvel som dens kapacitans. Opladningen af ​​en kondensator måles i tidskonstanter. Det tager 5 tidskonstanter at fylde eller aflade en kondensator fuldt ud. Formlen for at finde tidskonstanten for en kondensator i sekunder er:
T (konstant) = Modstand * Kapacitans
Dioder er enkle i drift og kan bruges til at opbygge en TTL-computer. De tillader kun strøm strømme i en retning. Når de er placeret i den rigtige retning, er de det, der kaldes fremadrettet. Når de vender tilbage, bryder de ned ved en bestemt spænding. Når en diode arbejder mod strømmen, er den omvendt forspændt.
En Transistor fungerer som en ventil, der drives af strøm. En BJT har tre ben: samleren, emitteren og bunden. For enkelhedens skyld i dette trin vil jeg beskrive en NPN-transistor, hvor strøm strømmer fra samleren til emitteren. Strømmen, der anvendes på bunden, styrer, hvor meget strømmen strømmer fra samleren til emitteren. Transistorer er ideelle til mange applikationer på grund af deres evne til at forstærke et signal. Dette skyldes, at strømmen, som anvendes ved bunden af ​​transistoren, kan være betydeligt mindre end den nuværende styrede. Denne gevinst i nuværende kaldes den aktuelle forstærkning af transistoren eller beta. Formlen for beta er:
Beta = Nuværende (Collector) / Current (Base)
Når en transistor er helt på, siges det at være mættet. En boolsk transistor er en, der enten er i sin mættede eller off-state og aldrig imellem. Dette er den type transistor, som du vil beskæftige sig med mest i digital elektronik. Transistorer danner de logiske porte, der er nødvendige for at en computer skal fungere. Disse vil blive beskrevet senere.
Nyttige links:
http://en.wikipedia.org/wiki/Resistor
http://en.wikipedia.org/wiki/Capacitor
http://en.wikipedia.org/wiki/Diode
http://en.wikipedia.org/wiki/Transistor

Trin 3: Binære tal

I dag er vi vant til et verdensomspændende nummereringssystem, der er baseret på nummer ti. Dermed mener jeg, at vi ikke har et tal i vores talesystem, der er værd at værdien af ​​ti og dermed er vores talesystem base ti.
Tænk på vores talesystem som kilometertæller. Et kilometertæller tæller fra det laveste ciffer til det højeste ciffer og styrker derefter den næste rotor i rækkefølge for at fremme et sted. For eksempel:
0 1
0 2
0 3
0 4
0 5
0 6
0 7
0 8
0 9
1 0 <- Fortsæt til det næste ciffer
Binær er base to, hvilket betyder at den kun har to tal og ikke har et tal for 2. Binær har kun tallene 0 og 1 eller "off" og "on". For at tælle i binære bruger du blot kilometerteknikken:
0001b - 1
0010b - 2
0011b - 3
0100b - 4
0101b - 5
0110b - 6
0111b - 7
1000b - 8
etc . . .
Der er en anden faktor af vores talesystem, der gør det til grund ti; Når vi bevæger os højere i cifre, øges antallet af tal med en effekt på ti. For eksempel 1 = 10 ^ 0, 10 = 10 ^ 1, 100 = 10 ^ 2, osv. . . I binær er tingene selvfølgelig base to, og som sådan er hvert efterfølgende tal en anden kraft af to. 1b = 1 = 2 ^ 0, 10b = 2 = 2 ^ 1, 100b = 4 = 2 ^ 2 osv. . .
At konvertere et decimaltal til binært er et simpelt trick kendt som dobbelt dabble, der gør processen meget lettere:
Sig, vi vil konvertere 13 til et binært tal, vi begynder med at dividere 13 for to og skrive ned resten. Derefter direkte over det skriver du det resulterende tal uden resten (6 i dette tilfælde) og deler det med to og skriv resten ned over det foregående. Du fortsætter denne proces, indtil du når enten en 1 eller en 0. I slutningen læser du fra toppen ned for at få resultatet.
1/2 = 0 R1 <Læs fra top til bund. Resultatet er 1101 eller 2 ^ 0 + 0 + 2 ^ 2 + 2 ^ 3 = 1 + 0 + 4 + 8 = 13. Dette kaldes et binært ord.
3/2 = 1 R1 <
6/2 = 3 R0 <
13/2 = 6 R1 <
Hexadecimal bruges meget ofte med binær. Hexadecimal er base 16 og indeholder tallene 0-9 og a-f. Et hexadecimalt tal bruges til at beskrive en nibble eller fire bits data. En smule er en enkelt 1 eller 0 af binær. En nibble kan tælle fra 0 til 15 (0000 til 1111), inden den næste bit er i næste nibble. To nibbles sammen er en byte eller 8 bits. Da det første tal er 2 ^ 0, er det sidste tal vægtet 2 ^ 7. Derfor kan en byte være et sted i området fra 0 til 255. For at udtrykke byte 00101110 (46 i decimal) i hexadecimal skal du først adskille de to nibbles til 0010 og 1110. Den første nibble har en værdi på 2 og den anden man har en værdi på E (eller 14 i decimal). Derfor vil byte 00101110 i hexadecimal være 2E.
Nyttige links:
http://en.wikipedia.org/wiki/Binary_numeral_system
http://en.wikipedia.org/wiki/Hexadecimal

Trin 4: Logiske porte

En computer består af tusindvis af logiske porte, der er indrettet til at udføre visse funktioner. En logisk gate er en komponent i digital elektronik, hvis produktion afhænger af dets input. De fleste logiske porte har to indgange og en udgang. Du kan tænke på logiske porte som beslutningstagere inden for digital elektronik. De seks hovedlogiske porte, der anvendes i digital elektronik, er:
OG Gate: Output er høj, når alle hvis dens indgange er høje.
ELLER port: Udgang er høj, når en af ​​dens indgange er høj.
NOT Gate: Har kun en indgang. Output er høj, når dens indgang er lav.
NAND Gate: Output er høj, medmindre alle dens indgange er høje.
NOR Gate: Output er høj, når ingen af ​​dens indgange er høje.
XOR Gate: Output er høj, når et ulige antal indgange er høje.

Tri-State Buffer: En buffer, der styres af et tredje logisk signal.
Det er vigtigt at nævne forskellen mellem et højt "1" signal og et lavt "0" signal. Et højt signal kan enten være en forbindelse til positiv spænding, eller det kan være en flydende indgang. En flydende indgang er en, der ikke er tilsluttet nogen udgang. Et eksempel på en flydende input ville være en, der ikke er forbundet i det hele eller en, der er forbundet til udgangen af ​​en 3-state buffer, der ikke er aktiveret. Et lavt signal er til stede, når en indgang er i jorden.
Logiske porte kan fodres ind i hinanden for at producere næsten enhver tænkelig funktion. For eksempel kan to NOR-porte indføres i hinanden for at gemme en bit data i en RS_NOR-lås, mens strøm tilføres til kredsløbet.

Trin 5: Binær tælling (Programtælleren)

En af de væsentligste dele til en computer er dens programtæller. Programtælleren giver computeren den aktuelle adresse på den instruktion, der skal udføres. For at programtælleren skal arbejde, skal den dog tælle i binær. For at gøre dette bruges JK flip flops. En flip-flop er et arrangement af logiske porte, der gemmer en bit (ligesom RS_NOR-låsen beskrevet i logikporten). En JK-flip-flop ændrer sin tilstand, når dens impulsindgang går højt og derefter lav igen (dens J- og K-indgange skal også være høje). Med andre ord, når en JK-flip-flop får den faldende kant af en urpuls, ændres dens tilstand fra enten en "0" til en "1" eller fra en "1" til en "0".
Hvis du forbinder output fra en JK-flip-flop til en anden og kaskader dem, er resultatet en binær tæller, der virker som et kilometertæller. Dette skyldes, at som den første JK-flip-flop i sekvensen bliver høj og så lav, udløser den den næste i sekvensen. Urets frekvens (hvor mange gange det tænder og slukker et sekund) halveres med hver efterfølgende tilsætning af en JK-flip-flop. Derfor kaldes en JK-flip-flop også et split-by-two kredsløb. Det resulterende mønster for fire JK-flip-flops vil være 0000, 0001, 0010, 0011, 0100 osv. . .
For den enkle og mulige computer, der er beskrevet i denne vejledning, er der dog nogle få funktioner, du har brug for for at gøre computeren i drift. For at computeren skal kunne genstarte sit program, behøver det evnen til at slette eller indstille alle sine output til nul. Programtælleren har også brug for evnen til at indlæse et binært ord til JMP op-koden, som gør det muligt for computeren at hoppe til en bestemt instruktion. Logiske porte bruges til at nå dette mål. Heldigvis for os kommer binære tællere i bekvemme chips med alle de funktioner, du har brug for.

Trin 6: Registre

registre:

Registre kan potentielt være den vigtigste del af en computer. Et register gemmer midlertidigt en værdi under driften af ​​en computer. Den 8-bit computer, der er beskrevet i denne instruktionsbog, har to registre knyttet til dets ALU, et register for at gemme den aktuelle instruktion og et register for computerens udgang.

Afhængigt af chippen vil et register have 2 eller 3 kontrolstifter. De registre, som vi vil bruge, har to kontrolnåle: output enable og input enable (både aktive når lav). Når outputaktiveringsstiften er forbundet til jord, sendes det aktuelt lagrede binære ord ud over outputstifterne. Når indgangsstiften er forbundet til jord, er det binære ord, der er til stede på indgangsstifterne, indlæst i registret.

Et eksempel på brugen af ​​et register på en computer er akkumulatoren på ALU (aritmetisk logisk enhed, der udfører matematiske operationer). Akkumulatoren er som scratchpad til computeren, der lagrer output fra ALU. Akkumulatoren er også den første indgang til ALU. B-registeret er det andet input. For en tilføjelsesoperation lægges den første værdi i akkumulatoren. Derefter lægges den anden værdi, der skal tilføjes til den første værdi, ind i B-registret. Udgangene fra akkumulatoren og B-registret er fusioneret åbne og fodrer konstant ind i ALU'en. Det sidste trin for tilsætning er at overføre udgangen af ​​operationen til akkumulatoren.

Registre alle opererer på en fælles datalinje kaldet bussen. Bussen er en gruppe af ledninger, der er ens i antal til arkitekturen af ​​enhver CPU. Dette er virkelig at sætte hesten før vognen i betragtning af busbredde er den afgørende måling for CPU-arkitektur. Da en digital 1 betyder positiv spænding, og en 0 betyder jordforbindelse, ville det være umuligt at få alle registre til at dele den samme bus uden at give dem mulighed for selektivt at forbinde og frakoble bussen. Heldigvis for os er der en tredje stat mellem 1 og 0, der er ambivalent med den nuværende imput, der fungerer godt til dette. Indtast tri-state buffer: en chip, der giver dig mulighed for selektivt at forbinde grupper af ledninger til en bus. Ved hjælp af nogle af disse tri-state buffere kan du have hvert register og chip på hele computeren, der har brug for kommunikation, dele de samme ledninger som en bus. I tilfældet med min computer var det et 8-ledigt bredt bånd af breadboard-slots, der spænder over bordets bundstifter. Eksperiment rundt med busser, da de bærer al information fra stykke til stykke i computeren, kan en defekt bus betyde fejlagtige data, der krøller ned ad linjen.

Trin 7: ALU

Den ALU (aritmetiske logiske enhed) på en computer er den del, der udfører matematiske operationer. For SAP-computeren behøver det kun at have to funktioner: tilføjelse og subtraktion. Tilføjelse og subtraktion i binære værker svarer meget til tilsætning og subtraktion i decimaler, for eksempel:
1 <- Carry 1 1 <- Carry Bits
05 0101
+05 +0101
10 1010
For at tilføje binære har vi brug for, hvad der hedder en fuldadder. En fuld-adder tilføjer effektivt en smule binær til en anden med en bære ind og udføre. Bæren i en fuld adder er som en tredje indgang til additionsprocessen. De er vant til at kæde flere fuld-adders sammen. Udførelsen af ​​en fuldadder opstår, når der er et par i tillægsprocessen. Udførelsen af ​​en fuld adder indføres i bæreindgangen for at tilføje flere bits binære. For at konstruere en fuld adder skal du have to XOR porte, to AND porte og en ELLER port.
For at subtrahere binære skal vi konvertere et tal til sin negative modpart og føje det til det antal, vi trækker fra. For at gøre dette bruger vi det, der kaldes 2's kompliment. For at tage 2's kompliment af et binært ord, drejer du om hver bit (skift hver 0 til en 1 og hver 1 til en 0) og tilføj en.
5 = 0101, -5 = 1010+1 = 1011
Ikke brugt -> 1 1
10 1010
+(-5) +1011
5 0101
For at kontrollere inversionen af ​​bits bruger vi XOR porte med en normalt lav indgang. Med en normalt lav indgang svarer udgangen til den anden indgang. Når du indstiller kontrolindgangen højt, drejer du om den anden indgang. Hvis vi parrer denne inversion med en smule sendt til bæreindholdet i de fulde adders, er en subtraktion operation resultatet.

Trin 8: Programhukommelse og RAM

Programhukommelsen på din computer gemmer de instruktioner, der skal udføres. Det fungerer også som RAM, der kan gemme værdier under driften af ​​computeren. Programhukommelsen består af tre hoveddele: hukommelsen, hukommelsesadresseregistret (MAR) og multiplexeren. Hukommelsen er en chip, der har 16 byte lagring. Der er en fire-bit adresse, der er fodret ind i hukommelsen, der fortæller det, hvilken byte den skal læse eller skrive. MAR lagrer den aktuelle adresse for byten, der skal læses eller skrives fra hukommelsen. Det fodrer konstant ind i hukommelseschipet, medmindre computeren er i programmeringsstatus. En multiplexer giver dig mulighed for at vælge mellem to indgange og output det givne input. Multiplexeren, der bruges i min computer, giver dig mulighed for at vælge mellem to fire bit-indgange (MAR og en manuel indgang). Når computeren er i programmerings tilstand, bliver den manuelle adresse indlæst i hukommelsen og giver dig mulighed for at programmere byte i computerens hukommelse på den adresse, du definerer.

Trin 9: Instruktionsregister

Undervisningsregisteret for en computer gemmer den aktuelle instruktion samt en adresse, som instruktionen vil fungere på. Det er en meget enkel komponent med et meget vigtigt formål. Under driften af ​​computeren overføres indholdet af en given adresse i hukommelsen til instruktionsregisteret. I min computer er de venstre fejlbitser OP-koden eller den aktuelle instruktion, der skal udføres. De rigtige fire bits, eller de laveste fire bits, fortæller computeren, hvilken adresse der skal bruges til operationen. De første fire bits føder løbende OP-koden i kontrolmatrixen, som fortæller computeren, hvad man skal gøre for en given instruktion. De højre fire bits går ind i computeren, så adressen kan overføres til MAR- eller programtælleren.

Trin 10: Output Register

Hvis en computer skulle matche busens output til operatøren, ville aflæsningen ikke give nogen mening. Derfor er der et outputregister, hvis formål er at gemme værdier beregnet til output. Udgangen til din computer kan enten være enkle LED'er, der viser rå binær, eller du kan have en skærm, der viser faktiske numre på syv segmenters displays. Alt afhænger af, hvor meget arbejde du vil sætte ind i din computer. For min computer bruger jeg nogle IV-9 russiske Numitron-rør til udgangen af ​​min computer kombineret med en Arduino til at gøre konverteringen fra binær til decimal.

Trin 11: Ur

Hver del af computeren skal være helt synkroniseret for at fungere korrekt. For at gøre dette behøver din computer et ur eller et kredsløb, der har en udgang, der tændes og slukkes med konstant hastighed. Den nemmeste måde at gøre dette på er at bruge en 555 timer. 555 timer er en ekstremt populær timer, der blev opfundet i den tid, hvor computeren opstod, der er stille ekstremt populær hos hobbyister i dag. For at opbygge 555 kredsløbet skal du vide, hvordan man arbejder.
Uret for din computer skal først være relativt langsomt. 1Hz eller en cyklus pr. Sekund er en god startværdi. Dette giver dig mulighed for at se driften af ​​din computer og kontrollere eventuelle fejl. Den 555 chip har brug for to modstande og en kondensator til drift. De to modstande bestemmer, hvor lang tid de høje og lave pulser er, samt den samlede frekvens. Kondensatoren ændrer pulslængden for begge dele. Hvis du ikke har nogen erfaring med 555 timer, anbefaler jeg at eksperimentere med dem.
Nyttige links:
http://en.wikipedia.org/wiki/555_timer_IC

Trin 12: Arkitektur

Dette er det trin, hvor alt kommer sammen. Det er på tide at designe arkitekturen på din computer. Arkitekturen er, hvordan registre og forskellige komponenter på din computer er organiseret. Designaspektet er helt op til dig, selv om det hjælper med at holde et mål for øje (hvad du vil have din computer til at gøre) og en model at gå væk fra. Hvis du vil designe din computer efter min, er det helt fint. Jeg ændrede arkitekturen i SAP-1 fundet i Digital Computer Electronics til min 8-bit computer.
Et designaspekt, der altid skal tages i betragtning, er, hvordan data overføres mellem de forskellige komponenter på din computer. Den mest almindelige metode er at have en fælles "bus" til alle dataene på computeren. Indgangene og udgange fra registre, ALU, programtæller og RAM alle er forbundet til computerens bus. Ledningerne er arrangeret i rækkefølge fra mindst signifikante bit (1) til højeste signifikante bit (128).
Enhver og alle udgange, der er forbundet til bussen, skal afbrydes fuldstændigt, mens de er inaktive, ellers ville de fusionere hinanden og resultere i fejlagtige output. For at gøre dette bruger vi Tri-state buffere til at styre udgangen af ​​visse elementer, der som standard output som akkumulatoren, ALU og det faktiske input til programmeringen af ​​computeren.

Trin 13: Kontrolmatrix

Kontrolmatrixen på en computer fortæller hver enkelt del, hvornår den skal indtaste og output dens værdi. Der er flere tilstande af hver operation i en computer. Disse stater udløses af en type tæller kaldet en ringtæller. En ringtæller har kun en smule høj ad gangen og cykler gennem sine udgange efter hinanden. For eksempel, hvis en ringtæller har 4 udgange, vil den først have sin første udgang aktiv. Ved den næste urpuls sætter den sin anden udgang høj (og den første lav). Den næste urpuls vil forøge bit et output højere og så videre. Disse trin kaldes T stater. Computeren i denne vejledende bruger 6 T stater for driften af ​​en kommando. De første tre T-tilstande er det, der hedder hentningscyklussen, hvor den aktuelle instruktion hentes og placeres i instruktionsregisteret. Programtælleren øges også med en. Det andet sæt af tre T-tilstande afhænger af, hvilken OP-kode der indføres i kontrolmatrixen fra instruktionsregisteret. T-tilstandene er som følger:
T1: Indholdet af programtælleren overføres til hukommelsesadresseregisteret. (Adresse stat)
T
2: Programtælleren øges med en. (Stigningstilstand)
T3: Den adresserede byte i programhukommelsen overføres til instruktionsregisteret. (Hukommelsesstat)
T4: Afhængig af hvilken kommando der udføres.
T5: Afhængig af hvilken kommando der udføres.
T6: Afhængig af hvilken kommando der udføres.
Der er to primære måder at oprette en kontrolmatrix på: Brug af diskret logik og brug af ROM'er. ROM-metoden er den nemmeste og mest effektive. Brug af diskret logik indebærer at designe en massiv logisk skematisk, der vil udgive de korrekte kontrolord til din computer baseret på en OP-kodeindgang. ROM står for skrivebeskyttet hukommelse. Der er flere typer ROM'er, som du kan overveje til brug i din build. For min computer brugte jeg oprindeligt EEPROM (elektronisk sletbar programmerbar ROM), men derefter skiftet til NVRAM (ikke-flygtig tilfældig adgangshukommelse) efter at EEPROM-chipsene ikke kunne skrive. Jeg anbefaler ikke NVRAM, da det er beregnet til tilfældig adgangshukommelse og ikke permanent lagring. EEPROM er den mest effektive løsning efter min mening.
Kontrolmatrixen vil have tre ROM-chips, der hver har mindst 32 adresser på 8 bit storage (såvel som timing og tællingselementerne). Det binære ord, der sendes ud fra kontrolmatrixen hedder kontrol-ROM'en og indeholder alle styrebitene for hver komponent på din computer. Du vil være sikker på at organisere kontrolbitene og kende deres ordre. For ingen operation vil du have et kontrolord, der gør hver del af computeren inaktiv (undtagen uret selvfølgelig). Kontrolordet til den computer, der er beskrevet i denne vejledning, er 16 bits i længden og opbevares i to af kontrol ROM chips. De tre første adresser på kontrol ROM chips indeholder kontrolordene for hentningscyklusen. Resten af ​​adresserne på chippen holder kontrolordene i parvis tre for hver OP-kode. Den tredje ROM-chip holder hukommelsesstedet for starten af ​​kontrolordsekvensen for hver OP-kode og adresseres af OP-koden selv. For eksempel i min computer, hvis du giver kontrollen OP-kode 0110, vil den udgive binær 21, som er adressen til starten af ​​JMP-kommandoen. Der er en 8-bit tæller mellem OP ROM og kontrol ROM'en, der tæller fra 0-2 (første tre T-tilstande), og i den tredje T-tilstand indlæser den adresse, der udføres af OP ROM'en og tæller fra denne position indtil T1'en tilstand rydder tælleren igen. Ringen og den binære tæller for kontrolmatrixen styres ved en inversion af urpulsen, således at kontrolord er til stede, når den stigende urpuls går til computerens elementer. Hele processen i rækkefølge er som følger:
1.) T1-tilstand fjerner tælleren til 0, kontrolordet gemt ved 0 sendes ud
2.) Uret går højt og adressetilstanden finder sted
3.) Uret går lavt, og derimod sendes kontroltæller og kontrolord 1 ud
4.) Uret går højt og stigningscyklussen finder sted
5.) Uret går lavt, og kontrol tælleren øges til 2, kontrolord 2 sendes ud
6.) Uret går højt, og hukommelsestilstanden finder sted, og OP-koden ankommer til instruktionsregisteret, T3 er også aktiv, hvilket betyder ved den næste lave urpuls, vil OP-kontroladressen blive indlæst
7.) Uret går lavt og læser tælleren med adressen for det første af de tre kontrolord for den givne OP-kode
8.) T4, T5 og T6 udfører OP-koden
9.) T1 nulstiller tælleren, processen fortsætter, indtil en HLT OP modtages. HLT-kommandoen stopper uret.

Trin 14: Mikroprogrammering

Nu er den del, hvor du bestemmer, hvilke kommandoer du vil have din computer til at kunne. Jeg gav min computer 6 unikke operationer, der ville give det de grundlæggende programmeringsfunktioner, som jeg ville have brug for. De kommandoer, som du vil programmere i din computer, er det, der hedder Assembly language. Montering er et af de tidligste programmeringssprog og kan stadig bruges på computere i dag. Kommandoer på sproget inkluderer indlæsning af akkumulatoren, tilføjelse, flytning, udlæsning og lagring af variabler. Hver kommando har sin egen 4-bit OP-kode i denne 8-bit computer. De kommandoer, jeg valgte til min computer, er:
NOP: Ingen operation. (0000)
LDA: Indlæs akkumulatoren med værdien på denne adresse. (0001)
ADD: Tilføj værdien på den angivne adresse til værdien i akkumulatoren. (0010)
SUB: Træk værdien på den angivne adresse fra værdien i akkumulatoren. (0011)
STO: Opbevar akkumulatorens indhold på den angivne adresse. (0100)
OUT: Opbevar akkumulatorens indhold i outputregisteret, så operatøren kan se det. (0101)
JMP: Gå til en bestemt instruktion i hukommelsen på den angivne adresse. (0110)
HLT: Stop computeren. (0111)
For at afgøre, hvilke kontrolord der skal sendes ud for hver OP, skal du vide, hvilke bits der skal være aktive under hver T-tilstand. For min computer organiserede jeg bitene som følger (en understrebet angiver en aktiv lav bit):
CE CO J MI RO II IO O BI EO SU AI AO RI HLT X
CE - Count Enable (aktiverer programtællerens urindgang)
CO - Clock out enable
J - Jump aktiver
MI - MAR Input
RO - Programhukommelse ud
II - Instruktionsregister i
IO - Instruktionsregister ud
OI - Output register i
BI - B registreres i
EO - ALU output enable
SU - Subtrahere
AI - Akkumulator i
AO - Aktivering af akkumulatorudgang
RI - Programhukommelse i
HLT - Halt
X - Ikke brugt
Her er hvad bits skal være aktive for hver T-tilstand for en given instruktion samt den adresse, de skal være i kontrol ROM:
Hent:
0: CO, MI - Programtælleren udsender til MAR
1: CE - Tælleren er aktiveret til den næste urpuls
2: RO, II - Den adresserede byte udleveres fra RAM til instruktionsregisteret
INTET P:
3: X
4: X
5: X
LDA:
6: IO, MI - Adressen i instruktionsregisteret overføres til MAR (laveste fire bits)
7: RO, AI - Den adresserede byte udleveres fra hukommelsen til akkumulatoren
8: X
TILFØJE:
9: IO, MI - Adressen i instruktionsregisteret overføres til MAR (laveste fire bits)
10: RO, BI - Den adresserede byte udleveres fra hukommelsen til akkumulatoren
11: EO, AI - Summen af ​​akkumulatoren og B-registret lægges i akkumulatoren
SUB:
12: IO, MI - Adressen i instruktionsregisteret overføres til MAR (laveste fire bit)
13: RO, BI - Den adresserede byte udleveres fra hukommelsen til akkumulatoren
14: AI, SU, EO - Forskellen på akkumulatoren og B-registret lægges i akkumulatoren
STO:
15: IO, MI - Adressen i instruktionsregisteret overføres til MAR (laveste fire bits)
16: AO, RO, RI - Akkumulatorudgangene i programhukommelsen på det adresserede sted (RO og RI skal være aktive for en skrive på den chip, jeg brugte)
17: X
UD:
18: OI, AO - Akkumulatoren udgange til outputregistret
19: X
20: X
JMP:
21: J, IO - Undervisningsregisteret læser programtælleren med sine laveste fire bits
22: X
23: X
HLT:
24: HLT - Et stop signal sendes til uret
25: X
26: X
Din OP ROM indeholder multipler på tre på hver hukommelsesplacering. Dette er naturligvis fordi hver cyklus tager tre eksekveringsstande. Derfor vil de adresserede data til din OP ROM være:
0 - 3
1 - 6
2 - 9
3 - 12
4 - 15
5 - 18
6 - 21
7 - 24
For at programmere dit valg af chip har du mange forskellige muligheder. Du kan købe en EEPROM og EPROM programmerer, men de koster normalt en betydelig sum penge. Jeg byggede en breadboard programmerer til min ROM, der drives ved at flytte ledninger rundt og styre skrive og læs aktiveringstaster med trykknapper. Senere forenklede jeg processen og designet en Arduino programmerer til min NVRAM specifikt. Jeg vedhæfter koden, da den let kan ændres til at programmere næsten enhver parallel memory chip, som du vil bruge til dette projekt.

Trin 15: Køb af reservedele

Den store ting ved at opbygge en 8-bit computer er, at de fleste dele vil koste dig mindre end en dollar et stykke, hvis du køber dem fra det rigtige sted. Jeg købte 90% af mine dele fra Jameco Electronics, og jeg har været helt tilfreds med deres tjenester. De eneste dele, jeg virkelig har købt fra andre steder, er breadboards og breadboard-ledninger (og Numitron-rørene). Disse kan findes betydeligt billigere på websteder som Amazon. Sørg altid for at sikre, at de dele, du bestiller, er de rigtige. Hver del, du køber, skal have et dataark tilgængeligt online, der forklarer alle de funktioner og begrænsninger af varen, du køber. Sørg for at holde disse organiserede, da du bruger mange datablade i opbygningen af ​​din computer. For at hjælpe dig med din computer vil jeg liste de dele, jeg brugte til min:
4-bit-tæller:
74161 - http://www.jameco.com/webapp/wcs/stores/servlet/ProductDisplay?freeText=74161&langId=-1&storeId=10001&productId=49664&search_type=jamecoall&catalogId=10001&ddkey=http:StoreCatalogDrillDownView
4-bit register (jeg bruger to for hvert 8-bit register):
74LS173 - http://www.jameco.com/webapp/wcs/stores/servlet/ProductDisplay?freeText=74LS173&langId=-1&storeId=10001&productId=46922&search_type=jamecoall&catalogId=10001&ddkey=http:StoreCatalogDrillDownView
2-1 Multiplexer:
74LS157 - http://www.jameco.com/webapp/wcs/stores/servlet/Product_10001_10001_46771_-1
16x8 RAM (output skal omvendt):
74189 - http://www.jameco.com/webapp/wcs/stores/servlet/ProductDisplay?freeText=74189&langId=-1&storeId=10001&productId=49883&search_type=jamecoall&catalogId=10001&ddkey=http:StoreCatalogDrillDownView
Fuld tilføjere:
74LS283 - http://www.jameco.com/webapp/wcs/stores/servlet/ProductDisplay?freeText=74LS283&langId=-1&storeId=10001&productId=47423&search_type=all&catalogId=10001&ddkey=http:StoreCatalogDrillDownView
Tri-State buffere:
74S244 - http://www.jameco.com/webapp/wcs/stores/servlet/Product_10001_10001_910750_-1

XOR Gates:
74LS86 - http://www.jameco.com/webapp/wcs/stores/servlet/Product_10001_10001_295751_-1
OG Gates:
74LS08 - http://www.jameco.com/webapp/wcs/stores/servlet/Product_10001_10001_295401_-1
NOR Gates:
74LS02 - http://www.jameco.com/webapp/wcs/stores/servlet/Product_10001_10001_283741_-1
Inverters:
74LS04 - http://www.jameco.com/webapp/wcs/stores/servlet/Product_10001_10001_283792_-1
Ringtæller:
CD4029 - http://www.jameco.com/webapp/wcs/stores/servlet/ProductDisplay?freeText=4029&langId=-1&storeId=10001&productId=12925&search_type=jamecoall&catalogId=10001&ddkey=http:StoreCatalogDrillDownView
JK Flip-Flops:
74LS10 - http://www.jameco.com/webapp/wcs/stores/servlet/Product_10001_10001_295427_-1

Trin 16: Konstruktion

Her er hvor tålmodigheden virkelig kommer ind. Jeg valgte at bruge et brødbræt til den egentlige computer, men der er mange andre metoder derude (som for eksempel trådindpakning), der vil fungere lige så godt. For at gøre tingene meget enklere indbefattede jeg et blokdiagram for den faktiske skematiske af min computer. Jeg har dog ikke inkluderet delnumre eller pinnumre. Jeg tror, ​​at dette vil gøre tingene mere enkle og åbne for kreativitet. 4-bit programs tællerudgang, MAR input og instruktionsregister output er alle forbundet til de fire mindst signifikante bits i computerens bus.
Det andet diagram, der er vist, er styrelogikken for operationens ende af computeren. Kontrolelementerne er udformet således, at skifte kan være input til computeren. RS_NOR låse er placeret foran omskifterne for at debounce dem. Toggle switches har ofte beskidte forbindelser, der kan hoppe fra en til en slukket tilstand og give flere pulser, end du vil have. Tilføjelse af en flip-flop til udgangen af ​​et skifte eliminerer de ekstra impulser. Dette ville være yderst nyttigt, når du bruger indstillingen manuelt ur. Du vil ikke vende omskifteren og starte 8 klokkeimpulser. Læse / skrive-knappen skriver den aktive input byte til den adresserede hukommelse. Ved at ændre standard kontrolordindgangen til RAM til to lave RO- og RI-bits, der initierer en skrivecyklus. Kør / programkontakten ændrer hvilken indgang der er aktiv på hukommelsesadressemultiplexeren. JK-flip-flop efter 555 betyder, at når computeren køres, starter den ikke midt i en urpuls. Et lavt HLT signal vil stoppe uret fra at passere enten det manuelle ur eller 555. Og endelig er run / clear-kontakten forbundet til alle de klare stifter på computeren, såsom dem på registre og tællere.

Trin 17: Programmering

Nu hvor computeren er færdig, kan den programmeres til at udføre instruktioner. For at gøre dette skal du først sætte computeren i sin programindstilling ved at vende run / programomskifteren til programpositionen. Derefter vælger du adresser fra 0 og går til 15 og indsætter de nødvendige data til dit program. For eksempel at starte med 5 og tilføje 4 med hver output, ville programmet være som følger:
Adresse - Data:
0000 - 00010111 LDA 7: Indlæs akkumulatoren med den værdi, der er gemt på hukommelsesadresse 7 (5)
0001 - 00101000 ADD 8: Tilføj værdi gemt på hukommelsesadresse 8 (4)
0010 - 01010000 OUT: Udløb akkumulatoren
0011 - 01100001 JMP 1: Gå til instruktion 1
0100 - X
0101 - X
0110 - X
0111 - 00000101 5
1000 - 00000100 4
1001 - X
1010 - X
1011 - X
1100 - X
1101 - X
1110 - X
1111 - X

Trin 18: Går videre

Jeg håber, du har nydt godt af denne vejledende, og mest af alt håber jeg, at du har noget ud af det. Du kan overveje alt dette hårde arbejde en utrolig værdifuld læringserfaring, der vil give dig en bedre forståelse af elektronik, computere og programmering. I sidste ende vil du også have noget meget cool at vise til alt dit hårde arbejde også.
Efter at have bygget din første 8-bit computer kan du gå videre og tilføje mere funktionalitet. ALU'en, der bruges i denne computer, er meget forenklet i drift, og ægte ALU har i dag et utal af funktioner som bitskiftende og logiske sammenligninger. Et andet vigtigt aspekt at bevæge sig på er betinget forgrening. Betinget forgrening betyder, at en instruktion afhænger af den aktuelle tilstand af flag, der er indstillet af ALU. Disse flag ændres, da akkumulatorens indhold bliver negativt eller er lig med nul. Dette giver mulighed for en meget mere ekspansiv mulighed for anvendelse af din computer.
Hvis du har spørgsmål til dette projekt, er du velkommen til at kommentere denne instruktør eller på min hjemmeside på http://8-bitspaghetti.com. Jeg ønsker dig held og lykke med dette projekt.

3 personer lavede dette projekt!

  • JamesP383 lavede det!

  • xdola lavede det!

  • realhet gjort det!

Har du lavet dette projekt? Del det med os!

anbefalinger

  • Vintage Look Media PC fra en gammel bærbar computer

  • Digi-Comp II Replica

  • Internet af Things Class

  • Farver i Rainbow Contest

  • Classroom Science Contest

  • Fandom Contest

173 Diskussioner

0

AtomicFerryt

1 år siden

Tror du, du kunne lave et digitalt diagram til bundkortet? Jeg har aldrig brugt et brødbræt før, men er dybt interesseret i gamle computere.

0

FarsinHamza

1 år siden

En af de smukke instruktioner jeg nogensinde har set …. Jeg sætter pris på din tålmodighed … :)

0

bob491

1 år siden

dette er en yderst velskrevet og detaljeret instrukser og meget cool også. Tak skal du have.

0

champ12345

1 år siden

ser lidt kompleks ud

0

mkpeker

1 år siden

flot bygning. du vil muligvis kontrollere min simpleste 4 bit ttl cpu (MP-4) for at forstå grundlæggende:

http://www.instructables.com/id/Simplest-4-Bit-TTL-CPU/

0

mkpeker

2 år siden

godt projekt kan være, du vil tjekke min;

Endelig er min skærmtype OS (med inline assembler og disassembler) klar
Opsætning og prøv dette v1.0b
Du kan finde alle nødvendige oplysninger på mine Efex-sider;

http://mkpeker.wixsite.com/efex

vær venlig at sende mig dine kommentarer, end jeg kan forbedre software
tak skal du have

0

TheMrCode

2 år siden

hvad hvis du gjorde det ved hjælp af leds i stedet for ledninger. kan du se, hvor signalerne gik

0

GeorgeW134

2 år siden

Hvordan ville du programmere en if-statement?

2 svar 0

JuliaS87GeorgeW134

Besvar 2 år siden

Du behøver ikke en ny opcode. Hvad du har brug for er en værdi, der repræsenterer sand og falsk som 1 og 0. Du indlæser den værdi i akkumulatoren og trækker 1. Så gør du et betinget spring. Hvis værdien var 1 (ægte), vil subtraktionen forårsage overløb, og det betingede spring udføres. Hvis værdien var 0 (falsk), forekommer der ingen overløb, og der sker således ingen spring.

0

calebj20GeorgeW134

Besvar 2 år siden

Da der er et register (akkumulator), der gemmer den foregående sum fra ALU, kan du tjekke, om resultatet giver et negativt, positivt eller nultall, så kan du tilføje en ny opcode, der kontrollerer denne tilstand og hopper, hvis tilstanden er rigtigt.
for eksempel

4 - 10 = -6 -> -6 er negativ, så enhver grenskommando med N-bitset sat til 1 ville hoppe

samling: BRN RA Dette ville gren på negativ til placering gemt i A

binær antager opcode er 1000: 10001000

Hvor det her er opdelingen af ​​opcode

BR: 1000

N: 1 | 0

Z: 1 | 0

P: 1 | 0

0: 0 | 0

Også hvis du vil gøre det mere alsidigt, kan du prøve at tilføje B mulighed for at indstille busværdien, så den sidste bit '0' kan være for A eller B som henholdsvis 0 eller 1.

0

T0BY

2 år siden

Crikey, du har lidt tålmodighed!

0

SuperNovaa41

2 år siden

Jeg har et spørgsmål. Alle dele på listen er der med undtagelse af 2.
tri state buffere og jk flip flops
Der var en anden hjemmeside med samme model som de tre state buffere
men
der var ikke en JK-flip-flop erstatning, skal jeg bruge det nøjagtige
samme model som du har angivet eller kan jeg bruge en anden model? og hvis ja hvilket
model skal jeg bruge?

0

SuperNovaa41

2 år siden

Hej! Jeg ved, at dette er en ældre post, men kan du give mig nogle opdaterede links til Tri State Buffers og JK Flip Flops? Jeg forsøgte at undersøge produkterne, men jeg ved ikke, hvilke modeller der skal bruges. Tak på forhånd!

0

BartH19

2 år siden

Jeg er interesseret i at lave en simpel CPU, som jeg kan bruge til at skrive på en LED eller endda LCD-skærm. Er dette projektet for mig eller kan du pege mig i bedre retning, tak?

Jeg er en komplet novice på dette. Jeg er tømrer, der forsøger at lave en slags træcomputer!

5 svar 0

FinnW3BartH19

Besvar 2 år siden

I stedet for at opbygge en CPU skal du bare bygge en computer med et træhus. Computere kan koste en hel del, men du kan faktisk få dem under $ 300. Prøv at bruge dette websted: pcpartpicker.com

0

BartH19FinnW3

Besvar 2 år siden

Tak for dette. Jeg håber, at der er dele tynde nok. Jeg vil have, at det er som en regnemaskine for ord. Jeg tjekker linket: D

0

KyleF45BartH19

Besvar 2 år siden

Hvis alt, hvad du vil have, er at fungere som en regnemaskine, vil du måske gerne se på Raspberry Pi. Det bliver meget mindre og billigere, pi er som størrelsen af ​​en telefon.

0

KyleF45KyleF45

Besvar 2 år siden

Nu når jeg tænker på det, kan Pi gøre stort set alt, hvad en fuld desktop computer kan, det er bare meget mindre. Der er nok en slags software, du kan bruge til det.

0

BartH19KyleF45

Besvar 2 år siden

Tak for dit svar: D

Kort efter min oprindelige kommentar fandt jeg faktisk denne fyr: http: //www.etsy.com/shop/writeotron? Ref = unav_lis …

Vi skal arbejde sammen om en ny. Det er en Pi!

0

bharathis

2 år siden

Dens vidunderlige og opmuntrende mig til at lave en af ​​mine egne ..

sikker på, jeg vil trykke "Jeg lavede det". Jeg er lidt ved at bygge den. hee hee sin fantastiske digitale elektronik