Komplettera Arduino- och Raspberry Pi-mixen med en smula FPGA-kraft

Utvecklingskorten Arduino och Raspberry Pi revolutionerar sättet att utveckla inbäddade system. Det fanns en tid då man utvecklade inbäddade system genom att börja med maskinvaran. Så här kunde utvecklingsprocessen se ut:

  1. Specificera systemkraven och göra en grov uppskattning av hastighets- och I/O-krav.
  2. Välja en lämplig mikrokontroller eller mikroprocessor som uppfyller kraft-, prestanda och priskraven.
  3. Bygga en maskinvaruprototyp.
  4. Felsöka prototypen. Skriva drivrutinskod, om ledningarna måste justeras.
  5. När maskinvaran fungerade: börja koda.
  6. Felsöka koden.
  7. Leverera!

Numera är det inte lika enkelt. För det första finns det tusentals processorer och mikrokontroller från en mängd olika tillverkare att välja bland. Det är omöjligt att känna till alla alternativ.

För det andra är steg tre ovan (att bygga en maskinvaruprototyp) ett problem, eftersom utvecklingsvärlden övergick till ytmontering för ungefär trettio år sedan. Manuell inkoppling och trådlindning, som på 70-talet var vanliga prototyptekniker, är att likställa med smidesteknik för konstruktion av elsystem. De metoderna används sällan nuförtiden. Du måste designa, tillverka och löda ihop ditt prototypkort själv – och vem har tid med det när det finns bättre (snabbare och mer kostnadseffektiva) alternativ?

Numera finns det utvecklingskort som eliminerar steg ett till fyra i utvecklingsprocessen ovan. Två av de mest välkända utvecklingskorten på marknaden är Arduino Uno (och dess olika varianter) och Raspberry Pi. Den senaste modellen av Raspberry Pi är Raspberry Pi 3 Model B+. Arduino och Raspberry Pi nämns ofta i samma andetag när man talar om utvecklingskort, trots att de är helt olika.

Arduino är namnet på ett maskin- och programvaruföretag inom öppen källkod, ett opensource-community, ett användarcommunity som utvecklar och tillverkar Arduino-kort, en integrerad utvecklingsmiljö (IDE) och, slutligen, namnet på ett fysisk mikrokontrollerkort. (Arduino är namnet på en bar i Ivrea i Italien, där några av Arduino-projektets grundare brukade träffas.)

Bild 1: Arduino Uno, ett enklare utvecklingskort baserat på en 8-bitars Atmel-mikrokontroller med enklare I/O-kapacitet, är en utvecklingsplattform för inbäddade system som inte kräver så höga prestanda. (Bildkälla: Arduino)

De första Arduino-utvecklingskorten baserades på Atmels AVR-mikrokontroller. Arduinos IDE användes för att utveckla koden, som man sedan kompilerade och laddade ner till flashminnet i mikrokontrollern på kortet. Arduinos IDE stöder C och C++, med ett antal unika kodstrukturregler. Eftersom Arduino-konceptet har utökats kraftigt, är de nyare Arduino-varianterna försedda med mikrokontroller som baseras på 32-bitars Arm® Cortex®-M0, för att leverera högre prestanda (bild 1).

Arduinos utvecklingskort utformades ursprungligen för att styra relativt enkla inbäddade system, och har därför begränsad I/O-kapacitet. Utöver ett antal 0,1-tums stiftlister med enkla digitala I/O-stift och analoga ingångsstift, har Arduino Uno-korten en USB-port och några LED-dioder. Det är det hela. I/O-stiften styrs av programvara, så prestandamässigt får du inte ut så mycket av dem.

Raspberry Pi som nästa steg

Om ditt inbäddade system behöver mer prestanda, har utvecklingskortet Raspberry Pi 3 B+ ganska mycket mer att erbjuda än Arduino (bild 2). Några av de främsta funktionerna är:

  • Broadcom BCM2837B0, Cortex®-A53 (Arm®v8) 64-bitars SoC vid 1,4 GHz
  • 1 GB LPDDR2 SDRAM
  • 2,4 GHz och 5 GHz IEEE 802.11.b/g/n/ac trådlöst LAN, Bluetooth 4.2, BLE
  • Gigabit Ethernet över USB 2.0 (maximal överföringshastighet 300 Mbps)
  • Utökad 40-stifts GPIO-stiftlist
  • HDMI av fullstorlek
  • Fyra USB 2.0-portar
  • Utökad 40-stifts GPIO-stiftlist
  • CSI-kameraport för anslutning av en Raspberry Pi-kamera
  • DSI-displayport för anslutning av en Raspberry Pi-touchscreen
  • 4-stifts stereoutgång och kompositvideoport
  • Micro SD-port för inläsning av ett operativsystem och lagring av data
  • 5 V/2,5 A DC strömingång
  • Stöd för Power over Ethernet (PoE) (separat PoE HAT krävs)

Bild 2: Raspberry Pi 3 Model B+ är en utmärkt utvecklingsplattform för inbäddad maskinvara. Kortet har en fyrkärnig 64-bitars Arm-applikationsprocessor, 1 Gbyte SDRAM och hög I/O-kapacitet. (Bildkälla: Raspberry Pi)

Med så mycket processorkraft, minneskapacitet och I/O-kapacitet kan man göra mycket. Raspberry Pi 3 B+ kör Linux och det finns ett stort stödcommunity kring produkten. Med tanke på det låga priset är Raspberry Pi 3 Model B+ en utmärkt maskinvaruplattform för många inbäddade utvecklingsprojekt.

Om du behöver högre hastighet?

Om Raspberry Pi 3 Model B+ uppfyller kraven för ditt inbäddade system, så kan du sluta leta. Ett extremt kapabelt kort med fördelaktigt pris – du behöver inget mer. Men vad gör du om ditt inbäddade system behöver mer I/O-kapacitet än den som erbjuds av Raspberry Pi Model 3 B+?

I en sådan situation behöver du de prestanda och möjligheter som erbjuds av FPGA-kretsar, vilka gör det möjligt att definiera nya typer av höghastighetsgränssnitt endast med hjälp av programvara. Inga extra ledningar krävs. Med Trenz Electronics TE0726-03M-kort – ZynqBerry (se bild 3) – får du FPGA-kapacitet i samma formfaktor som Raspberry Pi Model 2.

Bild 3: Trenz-kortet TE0726-03M ZynqBerry innefattar en Xilinx Zynq Z-7010 systemkrets (SoC) i en Raspberry Pi Model 2-formfaktor, för inbäddade system som kräver mer I/O-prestanda. (Bildkälla: Trenz Electronic)

ZynqBerry baseras på en Xilinx Zynq Z-7010 systemkrets, där en dubbelkärnig Arm® Cortex®-A9 32-bitars mikroprocessor kombineras med en FPGA, vilket ger en enhet som klarar många fler krävande uppgifter än vad enbart en processor klarar (eller för den delen fyra processorer vid 1,4 GHz). För att programmera Trenz ZynqBerry använder du verktygssviten Xilinx Vivado, som kan laddas ner och ger en IDE-miljö för både programvarusidan (processor) och maskinvarusidan (FPGA) hos Zynq-systemkretsen.

Föredrar du Arduinos formfaktor?

Kanske föredrar du Arduino Unos formfaktor? Även där erbjuder Trenz Electronic en lösning, med TE0723-03M ArduZynq (bild 4).

Bild 4: Trenz Electronics TE0723-03M ArduZynq ger en Xilinx Zynq-systemkrets i Arduino-kortets formfaktor, för Arduino-projekt där det behövs mer kraft och I/O-prestanda. (Bildkälla: Trenz Electronic)

Precis som för Trenz ZynqBerry, programmeras Trenz ArduZynk med den nedladdningsbara verktygssviten Xilinx Vivado.

Kort som Arduino Uno och Raspberry Pi förenklar många uppgifter inom inbäddad utveckling, men uppfyller inte alltid alla krav. Även om det behövs mer kapacitet än vad de två korten erbjuder, behöver du inte byta formfaktor. Allt som behövs är att komplettera med en smula FPGA-kraft.

Om skribenten

Image of Steve Leibson Steve Leibson har varit systemtekniker på HP och Cadnetix, chefredaktör på EDN och Microprocessor Report, skrivit bloggar om teknik för Xilinx och Cadence (för att bara nämna några) och även hunnit med att uppträda som teknikexpert i två avsnitt av ”The Next Wave with Leonard Nimoy”. I 33 år har han hjälpt konstruktörer att utveckla bättre, snabbare och mer pålitliga system.
More posts by Steve Leibson