Från VHDL-kod till färdig krets

VHDL är ett språk som man använder för att definiera vad FPGA:n ska göra. VHDL-syntaxen påminner om mjukvaruspråken (typ C, Pascal m.m.). Den stora skillnaden mellan mjukvaruspråk och VHDL är att i VHDL exekveras (rad av programmet som körs) alla rader samtidigt till skillnad mot mjukvara där instruktionerna exekveras i en sekvens. Skillnaden beror på att VHDL-koden generar slutna och öppna grindar som alla jobbar parallellt. Mjukvaran generera ettor och nollor som körs genom en hårdvara (som t.ex. kan vara grindar i en FPGA) sekvensiellt.

Nästan alla moderna FPGA:er kan programmeras om (det var värre förr när en bränd krets inte kunde ändras). Detta gör att hårdvara lätt kan uppdateras eller ändras med en ny konfigurationsfil. FPGA kan därför ses som ett mellanting mellan hårdvara och mjukvara. Den har hårdvarans snabbhet och mjukvarans omprogrammerbarhet. FPGA-kod brukar i engelsk litteratur också benämnas som "Firmware" d.v.s. segvara.

Att översätt VHDL-kod till grindar är ett processorkrävande jobb för VHDL-verktygen. Marknadens största FPGA:er har alltid tagit timmar att kompelera (översätta) eftersom datorer och verktyg har blivit bättre i samma takt som FPGA:erna har blivit större.

En FPGA består av grindmatriser, logikceller, RAM (de tidiga FPGA:erna saknade RAM) och anslutningar mot omvärlden (s.k I/O-paddar). Grindmatrisen används för att sätta upp ledningsdragningar mellan alla olika element. Man kan likna det med att man i ett hus drog ledningar mellan alla kontakter, uttag och lampor. Programmeringen går sedan till så att man klipper av all ledare man inte vill ha.

Bild över en oprogrammerad
grindmatris i FPGA:n

Bild över programmerad
grindmatris i FPGA:n

 

Logikcellen kan skilja mellan olika tillverkare men stjärnan består för det mesta av en LUT (Lock Up Table) och en D-vippa. LUT är ett ROM (Read Only Memory) som programmeras vid uppstart och som gör att alla kombinationer av insignaler till den ger ett definierat svar. T.ex. kan en LUT med fyra ingångar vara programmerad så att om alla insignaler är ettor blir utsignalen en etta och annars noll (d.v.s. en fyraingångs AND-grind). D-vippan i logikcellen används sedan efter LUT (eller utan LUT) för att klocka signalen.

Exempel på en Logikcell.

RAMblocken kan vid uppstart få ett startvärde. Efter uppstart fungerar blocken som vanliga RAM men om man aldrig skriver till blocket kan man se det som ett ROM.

I/O-paddar är kretsens block för att kommunicera med omvärlden. Eftersom kretsarna internt har blivit snabbare måste även I/O-paddarna bli snabbare. Det är idag vanligt att FPGA:er har tre vippor i I/O-padden. En för ingående signaler, en för utgående och en för signalen som väljer riktning.

Denna sida uppdaterades: 2005-05-29. Kommentarer/frågor om denna hemsida.