Skriv ut
Processorer och FPGA:er (Field-Programmable Gate Array) hanteras ofta som en enhet under designfasen. Det ger ingenjören större flexibilitet, både programvaru- och maskinvarumässigt. Xilinx bidrog till utvecklingen genom sin lansering av Virtex II Pro-familjen år 2002.
embexLadda ner artikeln på 500 kbyte här (länk, pdf).
Fler tekniska rapporter finns på etn.se/expert
Varje Virtex II Pro FPGA-krets var utrustad med inte bara en, utan två, inbyggda mikroprocessorer från PowerPC 400-serien. Det var ett visionärt drag, som ökade flexibiliteten hos FPGA-kretsen eftersom programvaran nu effektivare kunde införas i den programmerbara strukturen. Därmed kunde PowerPC-processorn utgöra en grund för komplexa statiska maskiner eller fungera som en värd för realtidsoperativsystem. Det gjorde att ett oberoende undersystem kunde inrymmas i en större design.

Idag har FPGA-kretsarna så hög täthet att en enda enhet kan utgöra centrum i ett komplett inbäddat system. Enheterna har både det utrymme och den prestanda som krävs för processor, minne och anpassad logik. Även om en processor som installeras vid sidan om FPGA-strukturen tar upp mindre utrymme, väljer många konstruktörer idag att placera en eller flera processorkärnor i den programmerbara logiken för att komma åt den enorma flexibiliteten.

Under de senaste åren har FPGA-tillverkare i stor utsträckning valt ARM-arkitekturen för sina inbyggda processorer. Microsemi var först med att ge stöd för ARM-arkitekturen i FPGA-kretsarna. I företagets SmartFusion-arkitektur kombinerades ARM Cortex-M3 med en icke-flyktig FPGA-struktur baserad på flashteknik. Det innebär att de maskinvarubaserade delarna av systemet aktiveras så snart som strömmen slås på, och de behöver inte att vänta på FPGA-konfigurationen från ett externt ROM.

Altera och Xilinx har nyligen lanserat två FPGA-serier som byggts kring den ännu mer högpresterande Cortex-A9. Både Alteras Cyclone SoC och Xilinx Zynq har två ARM-processorer, vilket gör att enheterna kan användas som högpresterande beräkningsmotorer.

Microsemi lanserade inte bara Cortex-M3 på FPGA-marknaden, utan var också drivande vid lanseringen av en MCU-version av ARM M-serien för användning i programmerbar standardlogik. Cortex-M1 är optimerad för att implementeras i den programmerbara strukturen i en FPGA, och är en strömlinjeformad version av Cortex-M3. Cortex M1 kräver inte mycket mer utrymme än en 8051-kärna, trots att den är baserad på en 32-bitars pipeline istället för en 8-bitars.

M1 kör precis som M3 instruktionsuppsättningen Thumb2, men vissa instruktioner och funktioner har tagits bort. M1-avbrottsstrukturen har förenklats för att bli mer utrymmessnål, och har därför stöd för 32 avbrottskällor jämfört med de 256 som fanns i M3.

Tillgången på utvecklingsverktyg i öppen källkod har bidragit till att det nu finns också andra arkitekturkärnor i FPGA:er. Altera, Lattice och Xilinx har egna RISC-liknande processorarkitekturer. Varje arkitektur har optimerats för användning inom strukturen för den programmerbara logiken. Genom att FPGA-leverantörerna erbjuder sina kompilerings- och länkverktyg i öppna miljöer som Eclipse, har det blivit lättare för utvecklarna att gå över från en standardarkitektur till en egen.

Licensieringskrav kan påverka vilken kärna och FPGA en designer väljer om målet är att använda en standardcells-asic. En del programvarubaserade MCU:er är bara licensierade för användning med enheter från vissa FPGA-leverantörer. Det begränsar designerns möjligheter att migrera en design till en asic. Fördelen med dessa MCU-kärnor är att de har fullt stöd för hela design- och implementeringsflödet, vilket underlättar betydligt vid infogande av IP och under det efterföljande utvecklingsarbetet.

Lattice Mico32 har ett mer flexibelt licensarrangemang, vilket har bidragit till att arkitekturen gärna används av de som föredrar maskinvara med öppen källkod. Tack vare Lattice kan processorn användas i konstruktioner som kan migreras till asicar från fristående tillverkare eller till och med till andra FPGA-arkitekturer.

Designern behöver inte begränsa sig till programvarubaserade processorkärnor från vissa leverantörer. Kärnorna i Leon-serien och OpenRISC 1200 är IP-block med öppen källkod från fristående källor. De är baserade på Sparc-arkitekturen som ursprungligen utvecklades av Sun Microsystems (ingår numera i Oracle). Kärnorna tar normalt upp mer utrymme än LatticeMico32, Microblaze eller Nios – vanligen 1,5 till 2 gånger mer än de logikelement som används i en arkitektur som använder konventionella uppslagningstabeller med fyra ingångar – men de utgör ett flexibelt alternativ till de kärnor som leverantörerna erbjuder.

I likhet med standardkärnor för direkt användning, gör FPGA-kretsens programmerbarhet det möjligt för designern att bygga anpassade processorer. Cyclone SoC- och Zynq-arkitekturerna utvecklades specifikt för detta användningsområde – enheterna i bägge serierna har breda I/O-bussar för överföring av bulkdata mellan de programmerbara logiksektionerna och processorn.

Med tiden har FPGA-leverantörerna kompletterat med stöd för höghastighetsberäkningar, särskilt för signalbearbetningstillämpningar. Multiplicerare kan förbruka mycket utrymme i en standardarkitektur som baseras på uppslagstabellelement. Det effektivaste sättet att implementera multiplikation i programmerbara celler är att använda bit-seriell aritmetik. Multiplicerarna är långsamma eftersom de arbetar genom att lägga till och växla en bit i taget. Bit-seriella multiplicerare kommer till sin rätt när de används i massivt parallella matriser, där de kan ge stöd för mycket höga datahastigheter. Den bit-seriella multiplicerarens enkla och kompakta utformning gör att många av dem kan användas tillsammans i en enda FPGA. I sammanhang där latens är mind­re viktigt, utgör de fortfarande ett fullgott alternativ.

För att få snabbare bearbetningar har FPGA-tillverkarna lagt till bärkedjelogik för att det ska bli möjligt att snabbare implementera carry-lookahead och carry-save adders i den programmerbara logiken. Många FPGA-arkitekturer, inklusive kostnadsoptimerade produkter som Altera Cyclone och Xilinx Spartan-6, innehåller nu multiplicerarblock i maskinvaran för användning i DSP-tillämpningar med hög hastighet.

Dessa block kan vara ganska smala för att minska utrymmesbehovet, men de kan enkelt kopplas ihop till mer sofistikerade 32-bitars och 64-bitars multiplicerare med hjälp av programmerbara logikceller som ger stöd till mer avancerade funktioner såsom flyttalsaritmetik. En del arkitekturer erbjuder ett urval med DSP-kärnor för att passa olika måltillämpningar. Kärnorna innehåller de smalare niobitarsenheter som föredras för bild- och videobearbetning samt de bredare kärnor som används för ljud- och kommunikationssignaler.

Tack vare de programmerbara egenskaperna hos FPGA-strukturen går det att bygga hjälpprocessorer som anpassar sig till systemets behov. Partiell omkonfiguration kan tillåta olika hjälpprocessorblock att laddas i strukturen, där de körs och därefter ersätts med en annan algoritm. Ett exempel: i en ljudbearbetningsalgoritm kan FPGA-strukturen utföra spektral bearbetning med hjälp av snabba Fourier-omvandlingar (FFT) åtföljt av filtrering med ett ändligt impulssvarsfilter (FIR) som laddas in i samma sektion efter att spektralanalysen har avslutats.

Strukturens programmerbarhet gör också att dataflödet kan effektiviseras med ett hjälpprocessorelement. När det gäller en FFT implementeras algoritmen i en generell processor ofta ganska sakta, eftersom det fjärilsformade dataåtkomstmönster som algoritmen kräver involverar upprepade hämtningar och skrivningar av tillfälliga värden i buffert- eller primärminne. Latensen vid dessa åtkomster kan leda till att interna aritmetiskt logiska enheter får slut på data. FPGA-strukturen gör det möjligt att införa dessa tillfälliga värden i en komplex pipelinestruktur som säkerställer att DSP-elementen alltid matas med relevanta data.

FPGA-strukturen är bra för åtgärder som inte är så lätta att hantera i ALU:er i standardutförande. Kryptografiska funktioner och många algoritmer som används i digital kommunikation, såsom Viterbi- och Turbo-avkodare, använder sig till exempel ofta av moduloaritmetik och annan aritmetik som inte följer standard. En FPGA-baserad anpassad ALU kommer med full kontroll över de logiska elementen nästan alltid att prestera bättre än en programvaruemulering som körs på en standardprocessorkärna.

Nya språk som OpenCL kommer sannolikt att underlätta konstruktionen av hjälpprocessorelement, som kan ordnas och brytas upp efter behov. OpenCL utvecklades ursprungligen för att göra grafikprocessorernas beräkningskapacitet tillgänglig för programmerare som var mer vana vid att arbeta med generella arkitekturer såsom ARM eller x86, men företag som Altera använder OpenCL eftersom det blir enklare att konstruera anpassade beräkningsmotorer.

OpenCL-funktionerna fungerar som beräkningskärnor – smala vektorformade slingor som kan användas för att bearbeta flera dataelement parallellt. OpenCL består av en runtime-miljö som laddar kärnor och motsvarande data i målprocessorerna, startar körningen och därefter hämtar resultaten när de är klara. Kompileringsverktygen ser till att algoritmen som uttrycks i OpenCL-språket konverteras till en implementering som passar för en FPGA-konfiguration.

Ett annat sätt att avlasta processorn i en FPGA från programvarubearbetningar är att minska avbrottens frekvens. Vid varje avbrott måste den aktuella processen i processorn avbrytas för att låta processorn hämta eller skicka ett fragment med data via en I/O-port. Vid varje avbrott sänds och registreras även innehåll i stacken, vilket upptar processorcykler. Den analoga beräkningsmotorn (ACE) i Microsemis SmartFusion är en liten, fristående parallell processor som styr de olika analoga I/O-portar som stöds av enheten.

Den kombinerar en SSE (Sample Sequencing Engine) med en PPE (Post-Processing Engine). SSE hämtar in data från de analoga ingångarna och skickar dem vidare till PPE-motorn som utför funktioner för att eliminera brus, till exempel lågpassfiltrering. Därefter omvandlas data till ett format som passar processorn. När dessa funktioner flyttas över till maskinvaran minskar avbrottsfrekvensen i processorn dramatiskt.

Liknande tekniker kan självklart implementeras i FPGA:er som saknar dessa funktioner för att belastningen på andra processorkärnor ska minska. Fördelen med FPGA-kretsar är att det alltid finns flera olika sätt att få programvarubearbetningar och parallellkopplad maskinvara att fungera tillsammans.