Då var det dags för blogginlägg nummer två! Här ska jag försöka att kort introducera vad programmerbar logik är då det kommer att bli centrum i systemet.
FPGA? VHDL?
Ett av delmålen med projekten är att damma av mina VHDL-kunskaper. Mitt mastersprogram hette “Integrated Electronics System Design” på Chalmers och där ingick en och annan kurs i VHDL. Sedan dess (drygt 2 år sedan) har jag i princip inte rört VHDL så det känns som det är läge att fräscha upp kunskaperna.
Förenklat kan man säga att VHDL är ett ett språk som beskriver hur hårdvara skall fungera, lite som att C är ett språk som beskriver hur mjukvara skall fungera. I VHDL beskriver man då önskad funktion. Sedan syntetiseras denna kod och kan sedan laddas över i en krets vilket då gör att kretsen får funktionen som beskrivits.
Den stora skillnaden är att med ett mjukvaruspråk blir slutresultatet en lång radda med instruktioner som en processor sedan tolkar och exekverar rad för rad. I hårdvara fås en beskrivning som konfigurerar en krets på önskat sätt. Sedan kan det finnas sekventiella delar i den beskrivningen (t.ex. statemaskiner) men de är “självexekverande” och tolkas inte av någon processor. En konsekvens av detta är parallellism – i en krets kan tusentals saker ske samtidigt medan mjukvara måste exekveras på en processor som betar av en instruktion i taget.
Ett litet exempel kanske kan vara på sin plats.. Säg att du vill addera två tal. Ett program för att göra detta består då av ett antal instruktioner: “Läs in tal 1”, “Läs in tal 2”, “Addera tal 1 och 2”, “Lägg ut resultatet”. I VHDL kan man beskriva det som “Lägg ut resultatet, som är summan av tal 1 och tal2”. Det är kanske en subtil men ack så viktig skillnad.
Det finns olika sorters kretsar som kan programmeras med VHDL, jag har valt att satsa på en FPGA. Genom att ladda in den syntetiserade filen i FPGA’n får jag då en krets som gör precis det jag vill. Det går att beskriva allt från enkla kretsar, så som AND/OR-grindar, till avancerade kretsar som mikroprocessorer, videogränssnitt, krocketklockor eller vad man nu önskar.
I mitt fall kommer jag alltså att i VHDL beskriva en krets som hanterar funktionaliteten som min krocketklocka behöver och sedan ladda över denna i en FPGA. Slutresultatet blir då en krets som gör precis det som behövs.
Det är svårt att på ett enkelt sätt förklara skillnaden på det här arbetssättet jämfört med vanlig mjukvara.. Är du nyfiken på mer om programmerbar logik är det bara att skriva en kommentar 🙂
Styrelektroniken
Styrelektronikens centrum kommer alltså att vara en FPGA som har “programmerats” med så gott som all logik som behövs för att klockan skall fungera.
Jag har köpt en Spartan 3E-platta med en massa olika godsaker på. Det finns bland annat serieportar, ps2-port, VGA-utgång, ethernetport, ljud ut- och ingångar, en liten skärm, ett par knappar, lite lysdioder, ett par megabyte SDRAM , och flash. En utmärkt start. Själva FPGAn sitter i mitten och rymmer ungefär 500 000 grindar. Plattan kostade runt 1500 spänn, kanske lite mycket men det får det vara värt.
Förutom själva intelligensen kommer också ett par lösa gränssnitt kommer att behövas:
- Gränssnitt mot displayerna. Beroende på hur displayerna ser ut kommer någon form av elektriskt gränssnitt att behövas. Även om FPGA’n kommer att hantera den logiska funktionen kan det behövas någon form av drivtransistorer eller liknande för att öka drivstyrkan.
- Gränssnitt mot GPS-mottagaren.
- Användargränssnitt. Man måste ju kunna ställa klockan på något sätt. Sannolikt kommer detta helt enkelt att bli en rotary encoder (vridreglage) som man vrider upp ett antal minuter. Ett par knappar kan vara bra att ha för lite annat pyssel också.
I nästa del blir det nog lite mer specifik information om just projektet, kanske en beskrivning av 7-seggarna eller så. Det har varit rätt mycket bakgrund i de första två inläggen 🙂
Jag insåg en sak idag, jag har betydligt mer intresse av att följa detta bygget än att lära mig krocket. Men när du rott iland allting kräver jag att få vara med och testa den! 🙂
känns nästan som lite overkill med en sån bräda till ett sånt här projekt men wth 8) för de som inte pluggat hårdvaruprogrammering (mig inkluderad) kunde det nog vara bra med lite basic funktionsbeskriving, tex hur informationen går och kanske förklara vidare med lite metaforer som du gjorde, det gjorde det hela mer lättsmält 🙂
Du hade ljudutgångar så du skulle kunna ha en röst som myndigt förklarar spelet för öppnat vid starten eller nåt? och när spelet är slut att den beordrar spelstopp eller nåt?
mitt i spelets gång kan den uppmana folk att sluta söla eller dra nån vits kanske?