Hoogniveauontwerp bewijst nut voor fpga/cpu-hybride

Ronald Grootelaar is systeemarchitect bij 3T en gespecialiseerd in embedded processing en modelgebaseerd ontwerpen voor embedded toepassingen.

De afgelopen jaren hebben fpga-leveranciers zich volledig gestort op het idee van de fpga-soc: een systeemchip die de herconfigureerbare logica combineert met hard-coded cpu- en dsp-kernen en high-speed-communicatie-interfaces.
De hybride chips kunnen op een warm onthaal rekenen binnen de markt, want ze verenigen het beste van twee werelden: de
flexibiliteit van software en de prestaties van de fpga.

FPGA/CPU hybride chipMaar deze aanpak betekent dat er meer komt kijken bij het ontwikkelen van een systeem. Traditioneel is fpga-functionaliteit voorbehouden aan een relatief kleine groep van wereldwijd enkele tienduizenden hardware-engineers, die een hardware description language zoals VHDL of Verilog gebruiken om functionaliteit te ontwikkelen. De systeemchips spreken echter een veel groter publiek aan, met naast hardware-engineers ook architecten, systeem- en softwareontwikkelaars.

Fpga-producenten hebben dit gelukkig erkend en de afgelopen jaren flink geïnvesteerd in nieuwe ontwikkelgereedschappen die de abstractie naar een hoger niveau tillen. Multidisciplinaire projectteams kunnen hierdoor optimaal samenwerken zonder dat iedereen alle technische details van de complexe systeemchips hoeft te kennen.

De belangrijkste fpga-fabrikanten, Intel en Xilinx, hebben een vergelijkbaar aanbod. Hun ontwikkelomgevingen gaan uit van C en C++ om alles in te ontwerpen: algoritmes, drivers en applicaties, maar ook de fpga-logica. Beide bedrijven maken onderscheid tussen twee aanpakken: high-level synthese (hls) en de softwareontwikkelflow. Kort gezegd komt het erop neer dat de eerste is bedoeld om fpga-ip te genereren waarmee de hardwareontwikkelaar aan de slag kan, terwijl de tweede aanpak bedoeld is voor programmeurs die rekenintensieve delen van hun softwareapplicaties willen uitbesteden aan de fpga.

Het aanbod van Xilinx

Bij Xilinx waren de eerste ontwikkelingen in hoogniveau-ontwerp volledig gericht op hls. In 2011 kwam dat in een stroomversnelling met de overname van Autoesl Design Technologies, de toenmalige marktleider op dit gebied. In 2012 werd het resultaat voor de buitenwereld zichtbaar in de vorm van een compleet nieuwe toolset: Xilinx Vivado HLS. Met Vivado HLS wordt vanuit C/C++ een rtl-beschrijving (register transfer language) gegenereerd, de ‘natuurlijke taal’ voor fpga-synthese. Het resultaat is een kant-en klaar ip-blok dat fpga-(hardware-)engineers kunnen toevoegen aan een ontwerp.

Het gebruik van hls biedt vele voordelen. De design- en verificatiecycli worden aanzienlijk korter en het ontwerp is achteraf eenvoudiger aan te passen en te optimaliseren. Het beschrijven van bijvoorbeeld een pid-regelaar of een iir-(biquad-)filter kan in slechts enkele regels C-code, terwijl een fpga-designer al gauw meerdere dagen bezig is met dit soort toepassingen.

Daarnaast gaat functioneel simuleren factoren sneller met C/C++-code dan met een rtl-simulator. De engineers die zich bezighouden met de regelalgoritmes kunnen hun werk bovendien makkelijker naar hardware-engineers overdragen op basis van geteste C/C++-code.

De hls-toolflow is in eerste instantie bedoeld voor hardware-engineers met kennis van fpga’s. Zeker voor het optimaliseren van de code voor performance en de bezettingsgraad van de fpga-cellen is kennis van de hardware een vereiste. De engineers moeten hun eisen rond hardwaregebruik in de code aangeven via annotaties voor de hls-compiler (pragma’s).

De hls-toolflow is daarom later aangevuld met een softwareontwikkelaanbod. Het uitgangspunt is dat applicaties worden gebouwd voor de Arm-cpu-kernen in de Xilinx-socs, en dat rekenintensieve functies vervolgens in de fpga worden geaccelereerd.

Deze Xilinx SDX-omgeving is gebaseerd op een voor softwareontwikkelaars vertrouwde Eclipse-ide. Applicaties worden ontwikkeld in C/C++ (eventueel met Opencl-toevoegingen) en zijn als Linux-, Freertos- of als standalone toepassing uit te rollen naar de cpu. Een profiler brengt de performance-bottlenecks in deze toepassingen in kaart. Onder water wordt vervolgens de hsl-tooling gebruikt om deze onderdelen te accelereren in de fpga.

Met SDX kunnen softwareontwikkelaars hun broncode automatisch omzetten naar fpga-blokken. Maar om de tool te kunnengebruiken, moet wel eerst een platformbeschrijving worden gemaakt voor het fpga-deel van de systeemchip. Dit is typisch een klus voor de hardwareontwerper, die zaken als i/o-configuratie, klok- en resetcircuits, de configuratie voor het processorsysteem, communicatiekanalen en ad/da-interfaces moet omschrijven. En ook hier komt kennis van hls-pragma’s van pas om de code te optimaliseren voor de fpga-logica.

Intels aanbod

Intel (voorheen Altera) heeft bij de ontwikkeling van zijn hoogniveau-ontwikkelgereedschappen min of meer de omgekeerde route bewandeld als Xilinx. Het eerste aanbod hier was de FPGA SDK for Open Computing Language, die vier jaar geleden werd geïntroduceerd.

Anders dan bij Xilinx gaat het Intel-pakket volledig uit van Opencl. Deze open standaard om parallellisme te beschrijven, is oorspronkelijk ontwikkeld voor gpu-accelerators en wordt breed gedragen door de industrie. Het model gaat uit van een hostprogramma op een cpu-systeem, met kleine stukjes parallelle code die naar een accelerator kunnen worden gestuurd. Deze zogeheten kernels worden geschreven in een afgeleide van Ansi C en kunnen worden gecompileerd naar verschillende typen hardware, zoals cpu’s, gpu’s en fpga’s. Het grote voordeel van fpga’s is dat de hardwarestructuur van de kernels niet vastligt maar precies wordt ingesteld voor het specifieke algoritme.

Oorspronkelijk is Intels fpga-sdk ontwikkeld voor x86-gebaseerde systemen, die via PCI Express communiceren met fpga’s op uitbreidingskaarten. In recentere versies van de tooling worden ook de nieuwe systeemchips van Intel ondersteund, die net als de Xilinx-chips beschikken over een Arm-core. Communicatie met de kernels loopt hier via de interne Arm Axi-databussen (Advanced Extensible Interface).

Intel ondersteunt diverse features van Opencl 2.0 standaard, waaronder Opencl-Systeemchips pipes. Hiermee is het mogelijk om data uit te wisselen tussen kernels onderling of data naar een kernel te streamen vanaf een externe interface. Pipes kunnen bijvoorbeeld worden gebruikt om een beeldverwerkingspijplijn te ontwikkelen waarbij videoframes op hoge snelheid worden bewerkt in de fpga, zonder tussenkomst van een host.

Net als bij Xilinx maakt de sdk onder water gebruik van hls om kernels in de fpga te plaatsen. Op dit moment wordt de hls-compiler echter nog niet als zelfstandig product op de markt gebracht, maar in de komende softwarerelease zal dat veranderen. Daarmee wordt het mogelijk om vanuit C/C++-modellen fpga-ip te genereren, vergelijkbaar met Xilinx Vivado HLS.

Intel besteedt veel aandacht aan de ontwikkeling van Opencl-tooling, en het is te verwachten dat dit de komende jaren een enorme boost krijgt nu het Altera heeft ingelijfd. Daarbij richt de chipmaker zich vooral op datacentra en automotivetoepassingen.

Enkele regels C-code

3T heeft de hls-tooling van Xilinx toepast op een digitaal versterkerplatform (PEPPER)

Bij 3T hebben we de Vivado HLS-tooling succesvol toegepast bij een project rond een digitaal vierkanaals precisieversterkerplatform voor hoogvermogentoepassingen, gebaseerd op state-of-the-art galliumnitride (GaN) fets. Dit soort transistoren zijn sterk in opkomst voor hoogwaardige powerapplicaties vanwege hun eigenschappen rond vermogensdichtheid, efficiëntie, nauwkeurigheid en bandbreedte.

Het regelalgoritme is gebaseerd op een klassieke pid-regelaar (versterker) met drie infinite impulse response-filters (biquads). Om het platform flexibel inzetbaar te maken voor verschillende projecten, worden de fets rechtstreeks aangestuurd door de fpga. Dankzij de hls-tooling konden we de pid en filters in slechts enkele regels C-code beschrijven. De tool vertaalt de code automatisch naar fpga-logica.

Doordat de fets worden aangestuurd met een pwm-frequentie tot 1 MHz, hoeven de regelaar en filters met maximaal die snelheid te worden doorgerekend. Dat maakt het mogelijk om de veel hoger geklokte fpga-logica efficiënt te benutten via time multiplexing. Zo kan dezelfde fysieke vermenigvuldigingshardware worden ingezet voor verschillende berekeningen. Tussenresultaten worden bewaard in registers en de eindresultaten worden geproduceerd op de lagere systeemklok van 1 MHz. Met behulp van een hls-pragma hebben we de verhouding tussen de interne fpga-klok en de pwm-frequentie ingesteld op 128.HSL pragma's in c-code

Verder zijn alle pid-parameters en filtercoëfficiënten instelbaar via een bijbehorende Linux-softwareapplicatie op de Arm-cpu. Doordat alle waardes in het ip-blok zijn gestandaardiseerd op IEEE 754 voor floating point, is de interface richting de software eenduidig vastgelegd. Met behulp van een pragma kan het ip-blok vervolgens worden voorzien van een standaard Axi-businterface, zodat de datastructuur met instellingen in haar geheel is uit te wisselen met de cpu. Hiervoor is geen hardwarekennis vereist.

Zwevende magneten

De nieuwere softwaretoolflow van Xilinx hebben we nog niet toegepast voor een daadwerkelijk project, maar we hebben er al wel een evaluatietraject mee uitgevoerd waarbij we een elektromagneet boven een magneet laat zweven en bewegen. Deze applicatie combineert een snelle 500 kHz stroomregeling met een 1 kHz positieregeling op basis van magneetveld-(Hall-)sensoren. De regeling is gebaseerd op een Xilinx-ontwikkelbord met een systeemchip uit de Xilinx Zynq-7000-serie, aangesloten op een stroomversterker.

Zwevende magneet demo met HLS

De softwareontwikkelkit van Xilinx werd gebruikt in een demoproject om een magneet te laten zweven.

We hebben de complete functionaliteit hiervan beschreven in C. De pid-positieregeling op 1 kHz wordt in software afgehandeld door de processor. Omdat dit realtime functionaliteit vereist, hebben we Freertos gekozen als besturingssysteem. Met behulp van de profiler werd al vrij snel duidelijk dat de benodigde performance voor de stroomregeling niet softwarematig kan worden gerealiseerd. Dit deel hebben we daarom geaccelereerd in de fpga.
De tool heeft de betreffende functies omgezet naar fpga-ip-blokken en automatisch toegevoegd aan het vooraf ingestelde hardwareplatform. Voor een optimale balans tussen fpga-hardwarebezetting en performance hadden we een aantal hls-pragma’s nodig.

Wat ons betreft, tonen deze projecten duidelijk aan dat hoogniveau-ontwerp het ontwikkeltraject voor een fpga-soc effectiever en sneller maakt. Voor specifieke applicaties kan een slimme VHDL-programmeur de hls-tools wellicht verslaan, maar de voordelen zullen daar doorgaans ruimschoots tegen opwegen. Wel blijft het onontbeerlijk om zowel hardware- als software-engineeers te betrekken bij de ontwikkeling, maar door de gemeenschappelijke programmeertaal kunnen ze optimaal samenwerken.

De twee belangrijkste fpga-leveranciers hebben daarvoor een vrijwel vergelijkbaar aanbod. Zowel op gebied van chiptechnologie als rond de ontwerptooling tonen de oplossingen in principe weinig verschil. Overstappen van leverancier is dan ook niet nodig om te profiteren van de hoogniveau-aanpak.

Ronald Grootelaar is systeemarchitect bij 3T en gespecialiseerd in embedded processing en modelgebaseerd ontwerpen voor embedded toepassingen.

Bron: Bits & Chips editie 4, 2017-04-07