FPGA eller MCU – hvad skal man vælge?

Samme spørgsmål stillede jeg i et nyhedsbrev for ikke mindre end 6 år siden. Så jeg tænker at der er løbet nok vand i åen til at tage sagen op til fornyet debat.
Skønt MCU-markedet er mere end 3 gange større end FPGA-markedet, så siger prognoserne at FPGA-markedet vil opleve større vækstrater end MCU’erne. Hvorfor nu det?
Skønt der er klassiske styrker i begge lejre, så bliver der konstant flyttet grænser. Så, hvor ligger grænserne nu? Hvad er dagens puls på, om man skal vælge en MCU eller en FPGA? Eller er det mere et både-og fremfor enten-eller?

 

Grundlæggende, så vil jeg vove at påstå, at man historisk set har kunnet slippe afsted med en unit  cost som er lavere med en MCU-løsning frem for en FPGA-løsning, og desuden spare udviklingstid og dermed R&D cost på MCU-løsningen.
Såfremt denne hypotese (stadig) holder, hvorfor skal man så overhovedet overveje en FPGA løsning? Eller kan jeg selv skyde hypotesen ned? Her er mine bud:
De klassiske dyder
Realtids-beregninger
Såfremt man står med hårde krav til deterministisk timing, så vil en FPGA-løsning klart give nogle fordele. Ja, ofte vil en MCU ganske enkelt ikke kunne løse opgaven.  Det kan selvfølgelig være en udfordring at få timingen lukket, hvis man kører til kanten af hvad en given FPGA kan præstere, men ikke desto mindre giver FPGA’en en langt bedre styring af den reelle timing og latency end i en MCU.

 

IO-fleksibilitet
Hvor en MCU jo har en forholdsvis fastlås pinout – nogle pins har typisk flere funktioner og kan anvendes til forskellige fysiske interfaces – så har FPGA’en en endnu mere fri konfiguration, og dermed mulighed for at give et fysisk snit til et interface som måske ingen MCU på markedet umiddelbart understøtter.

 

Parallelitet
Selvfølgelig, så findes der også MCU’er med flere kerner, således at man kan afvikle forkellige funktioner i parallel. Men en af de klare fordele ved FPGA’er er, at man få mulighed for at fylde den op med parallelle processer, og vel at mærke i en pipelined struktur som kan sikre en reel clock, som er langt højere end hvad man vil kunne få i en MCU.

 

Og så var der mit bud på at skyde ovenstående hypotese ned:
I udgangspunktet, så vil udviklingstiden af en FPGA baseret løsning selvfølgelig afhænge rigtig meget af hvor meget erfaring man har i sit udviklingsteam. Og selvfølgelig af kompleksiteten af ens forestående opgave.
Eftersom som MCU markedet er mere end 3 gange større end FPGA markedet i USD, så må man alt andet lige kunne forvente en del mere fokus på værktøjsudvikling, support mm. på MCU-siden, kort sagt, flere forhold kan være med til at gøre MCU design mere ligetil.
FPGA-markedet ser imidlertid ind i en tid med langt større vækst. Ikke mindst mange nyere applikationer i forbindelse med selvkørende biler, AI, computer vision, nye radio typer.  Og vel sagtens også derfor har Xilinx og andre FPGA-producenter ikke ligget på den lade side med at dels forbedre værktøjerne, men også lukke op for en anden principiel tilgang i værktøjerne. Således kan man nærmest trække færdige moduler ind i sit FPGA-design. Og dermed virkelig kickstarte sit designforløb, og i øvrigt spare udviklingstid.
Desuden, så er det langt fra unormalt at FPGA’er rummer hårdt indlejrede CPU’er, således at man har friheden til at bruge FPGA’en som en MCU. Til en hurtig start, vil man derfor kunne bringe sit design til live med en MCU, og dernæst optimere ved at flytte funktioner ud i FPGA’ens logiske blokke, hvor det måtte være påkrævet (se mine bud ovenfor). Men også andre indlejrede funktioner, I/O blokke kan være designet ind i FPGA’en, så man så fint opnår et System-On-a-Chip, SoC.  Men værktøjerne vil desuden ofte kunne hjælpe med at lokalisere en ressourcekrævende softwareklump og automatisk konvertere den til et optimeret modul i den programmerbare logik.
Mange FPGA’er kan desuden ved behov konvertere programmerbar logik til en softcore CPU, andre har dem hårdt indlejret. Disse indbyggede CPU’er kommer i 1, 2 og 4 kerner varianter. Nogle har sågar også egne dedikerede sektorer til at afvikle Real-time opgaver, håndtere video eller køre AI.
Dette lægger desuden op til, at mere klassiske FW-udviklere kan hoppe ombord i et FPGA design, hvilket kan give mere båndbredde i FPGA-udviklingsteamet, og dermed hastighed i udviklingsprocessen.
C/C++ er selvfølgelig et oplagt sprog til selve CPU designet.
Men også Linux, Embedded Windows, Android og Python er blandt de mange  muligheder.
Faktisk er det vores ambition, at vi til efteråret kan få slået et seminar op, hvor omdrejningspunktet netop vil være anvendelse af Python i forbindelse med FPGA design. Jeg skal nok holde dig opdateret!

 

Såfremt du måtte have spørgsmål eller kommentarer til denne artikel, eller måtte have brug for hjælp i forbindelse med FPGA- eller MCU-designs, eller interesse for andre af vores services, så kontakt mig på lr@circleconsult.dk .

Creative Commons LicenseThis work is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 2.5 Generic License.