8 maj 2015

Gymnasiearbete att bygga en dator från grunden

Vincent Åström går sista året på Teknikprogrammet och har som sitt gymnasiearbete byggt en dator som han har ritat, konstruerat och programmerat från grunden. Datorns namn är VIC-I.

Här berättar Vincent med egna ord om sitt gymnasiearbete.

För mig har gymnasiearbetet varit en mycket lärorik process. Jag har fått en hel del nya kunskaper om elektronik, lödning, programmering och CAD-mjukvaror, och jag har dessutom hittat tillämpningar för stora delar av den matematik, fysik och teknik jag läst under min tid som student på teknikprogrammet. Nu har jag fått den djupa förståelse av datorn som det varit mitt mål att uppnå. Den som vill åta sig ett liknande projekt, får räkna med att läsa igenom en hel del tung teknisk dokumentation, och att lägga ned många frustrerande timmar på felsökning, men i slutändan kommer allt arbete att löna sig. Och man behöver inte vara något tekniskt geni, det räcker med att vara lite envis.

Jag har alltid fascinerats av datorer. Mitt intresse för dem ligger främst i att granska de skikt som de byggs upp av, för att kunna förstå hur sådana till synes komplexa system, som ibland ger sken av att uppträda kaosartat, kan analyseras och brytas ned till sina beståndsdelar, för att på den lägsta nivån finna ordning och förutsägbarhet. Innan det svenska språket fick ordet "dator" användes benämningen "elektronhjärnor", och jag finner stort intresse i att jämföra datorer med andra system som på samma sätt kan delas in i skikt och brytas ned, såsom organiska hjärnor och myrstackar. Även om ingen idag skulle hävda att datorer är intelligenta på samma sätt som en människa, eller att ens de mest sofistikerade programmen skulle besitta någon form av "medvetande", så saknas det också bevis för att det inte är möjligt att datorn någon gång i framtiden skulle kunna nå till sådana höjder.

I skärningspunkten mellan teknik, filosofi och psykologi finns en akademisk disciplin som kallas för AI, eller artificiell intelligens, där man ägnar sig åt problem som rör datorer, intelligens och medvetande. Det är vad jag själv drömmer om att få jobba med i framtiden. Mitt intresse för AI väcktes då jag förra året läste boken "Gödel, Escher, Bach - ett Evigt Gyllene Band" av Douglas R. Hofstadter. Boken är tjock och bitvis svår, men en rik källa till insikter för den som tar sig igenom den, och jag rekommenderar alla datorintresserade att läsa den någon gång i livet.

För några år sedan fick jag av min morbror låna en Commodore 64 - ett exemplar av en av de första hemdatorer som fick kommersiellt genomslag på bred front. Denna dator intresserade mig mycket, men jag lyckades aldrig få den att fungera, troligtvis på grund av korrosion som drabbat tangentbordet och hindrade nedslagen från att registreras ordentligt. Med datorn följde en uppsättning manualer som i detalj förklarade hur den fungerade, vilken processor den använde sig av, vilka minnesadresser som användes till vad, hur datorn genererade ljud och bild, samt hur man kunde komponera egen musik och programmera egna spel med hjälp av datorn. Aldrig förr hade tanken slagit mig att det kunde vara möjligt att så grundligt förstå sin egen dator, eftersom de datorer som jag växt upp med varit så komplicerade, att leverantörerna lagt till ytterligare abstraktionsnivåer ovanför hårdvaran, och därmed gjort datorn lättare att använda, men samtidigt också isolerat användarna från dess verkliga innanmäte. Alltsedan jag först bläddrade igenom manualerna till Commodore 64, har jag velat skaffa mig själv en förståelse för vad som egentligen försiggår bakom alla dessa nivåer av abstraktion.

Det var dessa två faktorer, min nyfikenhet på datorn som system såväl ur filosofisk som ur teknisk synvinkel, som fick mig att bestämma mig för att som gymnasiearbete bygga en egen dator från grunden. Jag gav datorn namnet VIC-I, som anspelar på VIC-64 - en alternativ benämning på Commodore 64 - och som dessutom i mitt fall är en akronym som utläses "VIncent's Computer, version 1". Namnet bildar även ett perfekt ambigram - en textsträng som kan läsas på samma sätt om den roteras 180 grader - då man låter vinkla bokstäverna "V" och "C" en aning, raderar "-"-tecknet, och låter det avslutande "I"-tecknet sammanfogas med "I"-tecknet i "VIC". Jag har låtit detta ambigram fungera som logotyp åt projektet. Logotypen pryder skärmen då datorn startar.

I varje dator sitter en (eller flera, men oftast en) centralprocessor som utför merparten av beräkningarna. Min dators centralprocessor går under benämningen 65c02, och tillverkas av Western Design Center. Jag kör den med en klockfrekvens på 1 MHz, det vill säga jag låter den styras av en klocka (en s.k. oscillator) som fungerar som ett hjärta, och genererar en elektrisk puls som svänger fram och tillbaka i formen av en fyrkantsvåg (transition 0-1-0) en miljon gånger i sekunden. Det är denna klocka som bestämmer med vilken hastighet data behandlas, och skyfflas fram och tillbaka mellan komponenterna. Ju högre frekvens processorn drivs med, desto svårare är det att få alla komponenter att fungera inom de bestämda tidsramarna, och driver man upp den för högt blir förseningar och störningar märkbara, och man råkar ut för dataförluster. I mitt projekt valde jag därför en relativt låg frekvens sett till vad komponenterna egentligen är kapabla till. Processorn är av samma typ som sitter i Commodore 64, och körs dessutom med samma frekvens.

Utöver centralprocessorn, behöver varje dator dessutom ha ett minne att lagra data i, något sätt att hantera den data som matas in av användaren under körning, samt metoder för utmatning av data, exempelvis till en skärm. För att dessa komponenter ska fungera ihop, krävs någon form av sammanfogande logik (eng. "glue logic"), som sköter avkodningen av de adresser som centralprocessorn skickar ut, och därmed ser till att data förs vidare till rätt destination.

Min dators permanenta minne består av ett chip som kallas för EEPROM (Electrically Erasable Programmable Read-Only Memory), och som har en lagringskapacitet på 32 KB. I datorn finns även ett 16 KB stort SRAM (Static Random-Access Memory) som används för temporär lagring av data, och som förlorar sitt innehåll då strömmen stängs av. Inmatning och utmatning av data sker genom två stycken chip som kallas för VIA (Versatile Interface Adapter). De hanterar ett gränssnitt mot ett PS/2-tangentbord och en LCD-skärm (128x64 pixlar). En mikrokontroller (det vill säga en enkel dator som byggts in i ett chip av den typ man kan finna i mikrovågsugnar och tvättmaskiner) har programmerats för att ta emot data från tangentbordet. Mikrokontrollern räknar inkommande databitar, "skalar av" start-, stopp- och paritetsbitar, och skickar vidare de resterande bitarna till ett skiftregister, där de omvandlas till parallellt format (8-bit) som kan hanteras av centralprocessorn. Datorns adressavkodning sköts av ett chip som innehåller fyra stycken logiska grindar av NAND-typ. Slutligen finns också en krets för att återställa processorns instruktionspekare till adress $0000 då en hastig ändring av spänning detekteras, såsom vid uppstart.

Efter att ha valt ut dessa komponenter, och kontrollerat att de var kompatibla med varandra, beställde jag dem från USA, och cirka två veckor senare levererades de hem till mig. Vid det laget hade jag hunnit skapa ett kopplingsschema över kretsen jag planerade att bygga. Den första kretsen innehöll inget annat än processorn, som jag lät exekvera instruktionen NOP (No OPeration), och gå igenom adressbussen, till vilken några lysdioder var anslutna för att kontrollera att det fungerade som det skulle. Då jag fått detta bekräftat, lade jag till EEPROM- och RAM-chipen till datorn, och började skriva ett program i 6502-assembler på min PC. Jag stötte dock på stora problem då jag skulle föra över programmet från min PC till VIC-I, och efter en månads fruktlös felsökning av programmeringsutrustningen, och en obesvarad vädjan till leverantören om att få returnera den, bestämde jag mig för att beställa en ny, av annan modell. Denna fungerade, och under månaderna som följde växte mitt assemblerprogram till att omfatta ett mindre operativsystem, medan jag tillsatte LCD-skärmen och tangentbordet. All kod som använts i projektet har jag skrivit själv från grunden, det mesta i assembler, men även en del i programspråket C.

Skicka ett tips om sidan till någon
Katrineholms Tekniska College
Postadress: 641 80 Katrineholm
Telefon: 0150-574 30
Växel: 0150-570 00
Kontaktformulär Meddelandet skickas till: Katrineholms Tekniska College
* = Obligatorisk uppgift
*