Hembyggd processor/dator

Berätta om dina pågående projekt.
Hoffa_
Inlägg: 18
Blev medlem: 2 februari 2010, 01:03:50
Ort: Sollentuna

Hembyggd processor/dator

Inlägg av Hoffa_ »

För några år sedan fick jag en idé: Att konstruera och bygga en egen dator, alltså själva processorn i en dator. Ingen färdigköpt MCU eller CPU, alltså.
Först hade jag tänkt att det skulle bli en dator med fyrabitars ordlängd. Jag satte upp en tabell över nödvändiga operationer/instruktioner och konstaterade snabbt att fyra bitar var för lite, så det fick bli en åttabitars.

I lådorna hemma fanns en hel del 74LS-logikkretsar, så målet var att bygga av dessa. Ja, de drar ström, men målet var inte att göra en strömsnål dator. Och dessutom fanns två 74LS181 4-bit ALU som fick ingå i bygget.
I en låda fanns också några SRAM av 6116-typ, så det fick bli 12-bitars adressbuss (6116 har 11-bitars adressering).

Att konstruera tog ett par år av funderingar och skissande, med flera månader av stillestånd då och då. När konstruktionen var klar var det dags att börja bygga. Det tog ungefär ett år, inklusive några längre stillestånd.

Jag byggde på halva Europakort "labbkort" som sätts i en rack. Alla anslutningar mellan IC-kretsarna gjordes med fastlödd virtråd, för att göra ombyggnad enkel. Det blev ett kort som genererar alla klockpulser. Ett kort för minne och adressbuss. Ett kort som avkodar instruktioner och skickar ut styrsignaler till övriga kort. Ett kort med register, ALU, flaggor och logik för villkorliga hopp. Och ett kort med hexadecimal-displayer och roterande omkopplare för programmering.

När bygget var klart var det dags för testkörning och felsökning. Ganska nervöst att slå på labb-agget. Men det gick ganska bra. Några mindre feltänk och några felkopplade trådar. Sedan fungerade den!

Den har ca 65 op-koder/instruktioner. Tre åtta-bitars register. Åtta-bitars ALU med flaggor. Carry kan sparas för 16-bitars addition t ex.
För enkelhetens skull består varje instruktion av två byte, en byte op-kod och en byte argument. Argumentet kan vara data eller låg-byte av adress (låg-nib av op-kod är hög-nib av adress för 12-bitars adressering). Exempel på instruktioner: Hämta byte från minne till register, spara register i minne, halt (stoppar processorn), ovillkorliga och villkorliga hopp, call (hopp med sparad återhoppsadress, en nivå endast), villkorlig return, addition, subtraktion, compare, increase, decrease, AND, OR, XOR, XNOR, NOT, mm.

Den drar ca 1,3 A på 5 V. Men, som sagt, målet var inte att bygga en strömsnål dator.

Varför konstruera och bygga en dator? Jo, för att visa för mig själv att det gick. Folk frågar mig vad man kan använda den till. Jag förstår inte frågan...
Användarvisningsbild
stekern
Inlägg: 453
Blev medlem: 2 november 2008, 08:24:18
Ort: Esbo, Finland

Re: Hembyggd processor/dator

Inlägg av stekern »

Kul projekt, du har inte några bilder på det? Skulle vara kul att se.
laban12
Inlägg: 1199
Blev medlem: 17 april 2008, 16:01:56
Ort: Stockholm

Re: Hembyggd processor/dator

Inlägg av laban12 »

Använda? Nej, folk är bra underliga!!
Bilder hade varit kanon att få se!!
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Hembyggd processor/dator

Inlägg av jesse »

Häftigt. Sånt här gillar jag. Minns att jag ritade också på en egen processor när jag var i tonåren. Men det stannade på ritstadiet. Jag var väldigt facinerad av microprocessorer då, minns att det fanns en bok som beskrev en processor i detalj, vad hete den ?

jo, Mikroprocessor i CMOS : funktion och tillverkning / Gunnar Markesjö, Ingmar Höglund, 1978.

Men du har väl något blockschema?
Har du separata minnen för program och data?
ristomemo
Inlägg: 1028
Blev medlem: 29 mars 2004, 14:12:18

Re: Hembyggd processor/dator

Inlägg av ristomemo »

Hoffa_ skrev:Jo, för att visa för mig själv att det gick. Folk frågar mig vad man kan använda den till. Jag förstår inte frågan...
Detta fick mig att tänka på "the big bang theory" och just detta klipp.


Senast redigerad av ristomemo 16 februari 2010, 16:00:46, redigerad totalt 1 gång.
Användarvisningsbild
Icecap
Inlägg: 26632
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Hembyggd processor/dator

Inlägg av Icecap »

Låter kul! Respekt! Nu är det bara att fixa en C-kompiler till den ;-)
Användarvisningsbild
Electricguy
Inlägg: 12480
Blev medlem: 15 augusti 2007, 16:52:14
Ort: Kälmä' typ..

Re: Hembyggd processor/dator

Inlägg av Electricguy »

det här MÅSTE du bara lägga upp bilder på!! jag älskar hemmabyggda datorer o CPU:er :P :D
SvenW
Inlägg: 1156
Blev medlem: 24 april 2007, 16:23:10
Ort: Göteborg

Re: Hembyggd processor/dator

Inlägg av SvenW »

>> Jag förstår inte frågan...

Inte jag heller. Alla borde bygga en TTL-dator. Den som inte har gjort det har troligen inte heller riktigt förstått hur en dator fungerar.
Hoffa_, du kansle skulle gå med här: http://www.homebrewcpu.com/
danwi
Inlägg: 385
Blev medlem: 16 oktober 2008, 17:00:59
Ort: Linköping

Re: Hembyggd processor/dator

Inlägg av danwi »

Uj, här dök det upp gamla "halvledarminnen" vill jag lova. Typ sådär 1998 så byggde jag och ett par kamrater en 8-bitarsdator i form av 74LS-kretsar på virkort. Runt 100 kapslar blev det nog och det blev mycket sladd vill jag lova :)

En äkta von Neumann-arkitekturs-CISC-manick (med mikroprogram i EPROM) som kompletterades med en assemblator, "mikrokodsassemblator" (för att kunna skriva mikrokoden i läsbart format) samt en emulator skriven i C++. Jag har dock inga digitala foton på åbäket...
Hoffa_
Inlägg: 18
Blev medlem: 2 februari 2010, 01:03:50
Ort: Sollentuna

Re: Hembyggd processor/dator

Inlägg av Hoffa_ »

Vad kul att få så mycket respons! Tack!

jesse, blockschema... nja, jag hade nog blockschemat i huvet. Se'n blev det skisser på grindar, register och vippor. En lång iterativ process där funktionerna växte fram och förfinades innan det var dags att börja bygga. Jag ska lägga upp bilder (när jag har begripit hur man gör), då ser man blocken.

Det är ett minne för program och data. Minnet är gigantiskt, hela 2kB! Jag tror att det längsta program jag har gjort är ca 30 instruktioner, dvs 60 byte. Iom att det är samma minne, skulle man kunna skriva själv-modifierande kod, eller lägga ett monitorprogram i EPROM.

danwi,
med mikroprogram i EPROM
, Vilket fusk! :lol: Jag byggde mitt av avkodare och grindar.


När bygget var klart och jag gjort några enkla program, fick jag en konstig känsla. Det som jag gått och funderat på under flera år - det var som bortglömt. Tankarna bara slutade. Det var konstigt.

--------
Lite mer funktionsprincip (om någon orkar läsa):
Varje instruktion består av två byte, op-kod resp argument. Argumentet kan vara data, adress eller funktion till ALU:n.

Varje instruktion tar 12 klockcykler. Kan tänkas onödigt många, men det ger en säker funktion. Ingen risk för bit-racing och liknande.
Klockcykel:
0: Datorn kan växlas mellan RUN och HLT, mha två knappar. Datorn kan inte stoppas halvvägs igenom en instruktion.
1-3: SRAM lägger ut data (op-kod) på bussen.
2: Data från bussen klockas in i OP-REG.
4: PC=PC+1.
5-7: SRAM lägger ut data (argument) på bussen.
6: Data från bussen klockas in i ARG-register.
8: PC=PC+1.
9-11: Nu utförs instruktionen. T ex läggs data från SRAM eller ett register ut på databussen. Vid hopp läggs en hoppadress ut från ARG in på programräknarens (PC) ingång. Vid hopp till subrutin (SUB), klockas återhoppsadressen in i registret RA vid klockcykel 9.
10: Nu klockas data in i SRAM eller in i ett register. Vid ALU-operation klockas resultat och flaggor in i sina respektive register. Vid hopp klockas hoppadressen in i PC.

Block/kort:
CK-GEN: Ett kort som skapar alla klockpulser. En tillståndsmaskin som består av synkrona JK-vippor 74LS112 och diverse grindar. Här finns även logik och vippor för RUN/HLT.
OP-AVK: Avkodning av op-kod. Består av ett register 74LS374 och ett antal 3-8 avkodare 74LS138 samt en rad AND och OR-grindar. Härifrån går klock- respektive output enable-signaler till resten av datorn.
SRAM: Minneskort och hela adressbussen. Programräknaren PC består av tre 4-bitars synkrona räknare med load-funktion, 74LS163. Register för ny hoppadress resp återhoppsadress (RA) är tre+tre 4-bitars D-vippor 74LS173A. Kontakt för programmering. Samt givetvis en rad blinkande lysdioder för PC.
ALU: Arbetsregister och ALU. ALU består av två 4-bitars ALU 74LS181. Registren består av 74LS374 och 74LS244. Flaggor sparas i en 4-bitars D-vippa 74LS175. Till flagg-logiken hör även en väljare 74LS157 (sätter ingående carry till 0 eller 1 eller ärver carry från tidigare ALU-operation). En MUX 74LS151 används för villkorliga hopp (och villkorlig RET).
PP: Programmeringspanel. Fem TIL311 LED-displayer med latch, kan visa 0-9, A-F. Fem roterande omkopplare med binär utgång 0-F. Knappar för RUN/HLT, samt knappar för utläsning ur och inprogrammering i SRAM.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Hembyggd processor/dator

Inlägg av jesse »

sanslöst!
När bygget var klart och jag gjort några enkla program, fick jag en konstig känsla. Det som jag gått och funderat på under flera år - det var som bortglömt. Tankarna bara slutade. Det var konstigt.
hehe, så som bergsbestigare beskriver det när de bestigit sin drömtopp... år av tankar, månader av förberedelser. Sen när dom väl varit där så är huvudet helt tomt. Vad göra nu?
Användarvisningsbild
HUGGBÄVERN
Tidigare soundbrigade
Inlägg: 34919
Blev medlem: 23 augusti 2006, 22:44:11
Ort: Lilla Paris
Kontakt:

Re: Hembyggd processor/dator

Inlägg av HUGGBÄVERN »

Lite OT: Jag vill minnas att engelska tidningen Practical Electronics hade ett megaprojekt med bygge av antingen "miniräknare" eller smärre dator när månaden efter de första kalkylatorerna (eller om det vara mikrodatorerna) släpptes ... lite snopet.
Hoffa_
Inlägg: 18
Blev medlem: 2 februari 2010, 01:03:50
Ort: Sollentuna

Re: Hembyggd processor/dator

Inlägg av Hoffa_ »

Lite bilder enligt önskemål:

Först hela bygget:
Bild

Klockpuls-kortet (CK-GEN): JK-vippor och grindar. Logik för driftläge RUN/HLT. Knappar för RUN, HLT och Reset. En grön/röd lysdiod (vita kvadraten) indikerar RUN/HLT. Summer för indikering (blå), aktiveras av instruktionen BEL.
Bild

Minneskortet: De röda trådarna är adressbussen. SRAM uppe i mitten. PC rakt under SRAM. Nere till vänster en lysdiod-stapel, en LED per adressbit. Kontakt till höger till programmeringspanelen.
Bild

ALU-kortet: De stora kretsarna är 74LS181 ALU. Övriga kretsar är register och logik för flaggor.
Bild

OP-AVK: Avkodning av op-koder. OP-REG nere till vänster. 5 st 74LS138 samt AND och OR-grindar.
Bild

Programmeringspanelen:
Bild

PP i närbild: Knappar uppifrån och ner: Run, Halt, Reset, Read, Write och Write pulse. Roterande omkopplare (hex) under varje display.
Bild

Hela bygget består av ca 75 IC. En instruktionsuppsättning på ca 65 instruktioner.
Användarvisningsbild
JimmyAndersson
Inlägg: 26568
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Re: Hembyggd processor/dator

Inlägg av JimmyAndersson »

Riktigt läckert! :mrgreen:

Har du en större variant av den första bilden? (Länka om den är bredare än 700 pixlar.)

Hur lång tid tog det från idé tills du var klar?
Vad var roligast/jobbigast?


Hålmonterat, logikkretsar och moduldesign... Det blir många pluspoäng från mig. :)
Hoffa_
Inlägg: 18
Blev medlem: 2 februari 2010, 01:03:50
Ort: Sollentuna

Re: Hembyggd processor/dator

Inlägg av Hoffa_ »

JimmyAndersson, här är bilden: http://www.hoffsten.se/johan/processor/DSCN0687.JPG

Idén dök upp i mars 2003 när jag såg en beskrivning av en hembyggd 4-bitars dator på nätet. När jag studerade den beskrivningen tänkte jag "nej, men varför har han gjort si?" och "det skulle vara bättre att göra så". Se'n var det kört, det var bara att börja rita. Och rita om. Jag började att bygga i mars 2007 och den fungerade i oktober 2008. Det blev många sena nätter i tät lödrök...

Vad som var svårast? Det var tillståndsmaskinen som genererar alla klockpulser. Den svåraste detaljen där var logiken för RUN/HLT. Datorn skulle bara kunna starta och stoppa i klockpuls nummer 0, mitt emellan två instruktioner, när alla signaler är passiva. Och alla klocksignaler skulle vara helt utan räknespikar, glitchar.

Roligast var nog att tänka igenom principen för hur alla op-koder skulle fungera. Alla op-koder som bara hanterar register har en logisk maskinkod. MAB (move A to B) har maskinkoden AB, MBC har maskinkod BC, AE är UTA, EA är INA osv.

Den roligaste detaljen att konstruera var registret som sparar flaggor. I logiken runt detta register finns en mux som kan välja om flaggorna C (carry), EQ (equal) och Z (zero) ska nollställas eller föras vidare till nästa ALU-operation, så att man kan utföra additioner, subtraktioner eller compare med 16 eller fler bitar. Se länk: http://www.hoffsten.se/johan/processor/DSCN0707.JPG
Skriv svar