FPGA-makers op zoek naar de softwareontwikkelaar

Reading time: 7 minutes

Author:

Zowel Altera als Xilinx werkt aan hybride processoren van FPGA‘s en Arm-CPU‘s. De grote verschillen zitten in de manier waarop de bedrijven softwareontwikkelaars naar hun nieuwe platforms lokken.

Met een fonkelnieuwe ontwerptool maakt Xilinx het makkelijker voor de systeemontwerper om IP-blokken aan elkaar te knopen en kunnen ook softwareontwikkelaars hardware-IP ontwikkelen. Vivado biedt echter geen duidelijk antwoord voor het programmeren van heterogene computerarchitecturen, iets wat aartsrivaal Altera al wel in de steigers heeft staan. Als we de uitgangsposities van beide bedrijven bekijken, blijkt een zekere ironie.

Zowel Altera als Xilinx werkt aan het integreren van krachtige Arm-CPU‘s. Dat is een logische keuze. In FPGA-gebaseerde systemen is vaak een processor te vinden en die moet intensief communiceren met de programmeerbare logica. Of systeemarchitecten gebruiken een softprocessor zoals Microblaze (Xilinx) of Nios (Altera). Een gecombineerd device waar een krachtige processor hard ingebakken zit, bespaart dus kosten, energie en ruimte op het bord.

Xilinix was in 2010 de eerste die met concrete plannen naar buiten kwam en sindsdien is de hypemolen goed op stoom gekomen. December vorig jaar was het zover en kwam het Zynq Extensible Processing Platform (EPP) op de markt. Altera was een stuk later. Pas oktober vorig jaar onthulde het plannen over zijn FPGA Soc – over het algemeen wordt het gezien als na-aperij van Xilinx. Op dit moment is er nog altijd geen product op de markt.

De Zynq en de FPGA Soc lijken als twee druppels water op elkaar. Beide combineren een krachtige dualcore Arm Cortex-A9-CPU met de FPGA-logica van de respectievelijke bedrijven op 28 nanometer. Beide beschikken daarbij over Arms Neon-extensies voor SimD-bewerkingen. In alle twee de aanpakken kunnen de subsystemen het werk- en cachegeheugen met elkaar delen. Allebei gebruiken ze een zeer breedbandige bus om de twee systemen aan elkaar te knopen. In beide kan de CPU de FPGA on-the-fly herprogrammeren.

De Zynq-combinatie van dualcore Arm Cortex-applicatieprocessor en FPGA-logica is Xilinx‘ paradepaardje.

Er is echter een belangrijk filosofisch verschil. In Altera‘s aanpak zijn de twee subsystemen indien gewenst compleet onafhankelijk van elkaar te gebruiken. Xilinx positioneert zijn Zynq echter eerst en vooral als CPU. Bij een reboot start eerst de processor op, die vervolgens de programmeerbare logica configureert. De FPGA wordt daarmee meer een hardwareversneller en Zynq heeft meer weg van een heterogene multicore CPU die door de softwareprogrammeur beteugeld moet worden dan van een gekrompen en geïntegreerd bordje.

Subset

Het programmeren van heterogene multicore processoren is een onderwerp waar de industrie al een tijdje mee worstelt. Het wijkt immers radicaal af van de traditionele manier om software stapje voor stapje in logische volgorde te beschrijven. Bij multicore systemen gebeuren er ineens allerlei dingen naast en door elkaar; de logische volgorde is weg en aannames blijken ineens niet meer zo vanzelfsprekend. Als de rekenkernen ook nog van aard verschillen, moet de programmeur bovendien bedenken welke bewerkingen op welke architectuur terecht moeten komen, onder meer rekening houdend met het brongebruik.

Zo kon het gebeuren dat de Cell-processor voor de Playstation 3, bij zijn introductie in 2006 als supercomputer op zakformaat gezien, zijn beloftes aanvankelijk niet kon waarmaken. De CPU bestaat uit een vrij normale Power-processor voor de hoogniveaulogica en een aantal simpele maar zeer krachtige hardwareversnellers die het zware rekenwerk voor hun rekening nemen. De software op de Power-core moet de rekenlast verdelen over de versnellers. Dit programmeermodel bleek zijn tijd te ver vooruit – zeker omdat veel van de bestaande gamesoftware niet kon worden gebruikt.

Er zijn de laatste jaren echter belangrijke stappen gezet in het programmeren van dit soort heterogene architecturen, voornamelijk aangejaagd door de fabrikanten van grafische processoren NVidia en AMD (Ati). GPU‘s kunnen een eenvoudige taak over honderden simpele cores uitsmeren en daarmee een grote rekenkracht aan de dag leggen voor niet-grafische doeleinden. Het verkopen van GPU‘s als rekenversneller is een lucratieve nieuwe groeimarkt, nu goedkope GPU‘s voor alledaags gebruik wel toereikend zijn. AMD heeft het met de overname van Ati in 2006 zelfs tot de spil gemaakt van zijn processorstrategie.

In de loop der jaren doken verschillende initiatieven op voor het programmeren van GPU‘s, maar ze volgen min of meer hetzelfde model: een hoofdprogramma op de CPU delegeert simpele maar rekenintensieve taken naar de GPU. Langzaamaan beweegt de industrie naar een standaard hiervoor: OpenCL. De rekentaken – kernels in OpenCL-terminologie – worden hier in een subset van C geschreven. De specificatie biedt een keur aan methodes om onder meer het parallellisme te beheren en geheugenmanagement te regelen, zonder de details van de onderliggende architectuur te hoeven weten. De kernels kunnen van tevoren worden gecompileerd als de systeemconfiguratie vastligt, of runtime als de applicatie meer porteerbaar moet zijn. Een GPU-specifieke compiler maakt dat rekentaken geschikt voor de grafische processor die voorhanden is. Ook IBM mikt vandaag de dag op OpenCL voor het programmeren van Cell.

Concrete plannen

OpenCL is ook de aanpak die Altera kiest voor zijn CPU/FPGA-hybrides. Hoewel de specificatie uit het GPU-domein komt, hebben de schrijvers – Altera is een contributing member – getracht om hier overeen te stappen en iets op te stellen wat algemeen is voor parallelle rekenversnellers.

Altera kwam eind vorig jaar met een eerste versie naar buiten van OpenCL-tooling voor zijn chips, waarmee softwareontwikkelaars dus componenten kunnen schrijven die op de FPGA draaien. Het ontwikkelen van de FPGA-software verschilt niet gek veel van de aanpak voor GPU-software, hoewel het volgens Altera wel helpt om wat over de onderliggende hardware te weten. De hardware-implementatie zal er wel heel anders uitzien dan bij de GPU – het is een heel ander beestje – maar de programmeur hoeft zich hier niet mee te bemoeien.

Op dit moment verkeert het OpenCL-programma van Altera nog in de bètafase. De tooling is alleen beschikbaar voor geselecteerde partners en er valt nog wel aan de efficiëntie te schaven. Er is er nog geen beslissing gevallen over het in de markt zetten van de tooling. Het ligt voor de hand dat Altera deze in zijn standaard Quartus II-omgeving zal opnemen.

Ook bij Xilinx staat OpenCL op de radar. Tot nu toe heeft het zich echter geen groot fan getoond van de standaard. Er zijn dan ook geen concrete plannen naar buiten gekomen. Het bedrijf meldt er ’wel mee bezig te zijn‘, maar dat het nog te vroeg is voor OpenCL. Het zegt niet of het er een duidelijke toekomst in ziet.

Miljoenen dollars

Met Vivado heeft Xilinx wel een compleet nieuwe ontwerpomgeving. De tool, waar vier jaar aan is gesleuteld en die mede door een aantal acquisities tot stand is gekomen, moet de bestaande ISE-omgeving op den duur volledig vervangen. Het bedrijf durft zelfs zo ver te gaan om een productiviteitsverbetering tot wel vier keer te claimen. Daarbij is Vivado bedoeld voor ’alle programmeerbare devices‘ – dus niet alleen FPGA‘s maar ook de Zynq en de 3D-hybrides, benadrukt het bedrijf keer op keer.

De tool is IP- en systeemcentrisch opgebouwd: systeemontwerpers kunnen naar hartelust IP-blokken op grafische wijze toevoegen, configureren en met elkaar integreren tot nieuwe IP-blokken, die samen met de constraints, testbanken en documentatie in een bibliotheek te plaatsen zijn. De omgeving neemt de gehele plaats- en routeerstap en RTL-generatie voor zijn rekening. ’Onder water‘ worden alle acties via een Tcl-interface gereflecteerd voor de hardcore script- en commandoregel-adepten en voor communicatie met andere EDA-tooling. De simulatiesnelheid is met gemiddeld een factor drie verbeterd.

Ook in Vivado is er iets voor de softwareontwikkelaar te vinden. De meest in het oog springende nieuwe feature is de mogelijkheid om C-, C++ of SystemC-functies te compileren naar RTL voor de FPGA. Deze AutoESL-component zullen softwareontwikkelaars makkelijk op kunnen pikken. In de de basis is het een Eclipse-gebaseerde omgeving om software te schrijven. De ontwikkelaar kan hierin als optie kiezen om een functie naar RTL te compileren. Deze functionaliteit komt van het begin 2011 overgenomen bedrijf AutoESL Design Technologies – overigens na een lange vrijage waarbij Xilinx miljoenen dollars in de start-up pompte.

Volgens Xilinx zijn er slechts enkele restricties aan de code die AutoESL aankan, voornamelijk rond dynamisch geheugengebruik. Zolang dat vermeden wordt, is RTL-generatie mogelijk. Zelfs objectoriëntatie is geen probleem. De tooling zoekt zelf de mogelijkheden voor parallellisme op en houdt rekening met de specifieke eigenschappen van de gebruikte FPGA. Ook kan de gebruiker de parameters configureren die voor de hardwaregeneratie van belang zijn.

Met AutoESL kan de programmeur dus naar hartelust experimenteren met het delegeren van softwarefuncties naar de FPGA. Een expliciete scheiding tussen software- en hardwarefuncties zoals in OpenCL is er echter niet. Het beheer over het parallellisme zit in de aanpak van de tooling, terwijl dit bij OpenCL veel meer in de code wordt ondergebracht. Xilinx positioneert de nieuwe feature dan ook niet zozeer voor de co-ontwikkeling van hardware en software, maar meer als een nieuwe manier om de hardwareblokken te ontwikkelen. Algoritmes schrijven gaat nu eenmaal een stuk sneller in software.

De ironie is dus dat Xilinx vandaag de dag een – naar eigen zeggen – heterogene multicore CPU op de markt heeft zonder duidelijke aanpak om deze als zodanig te programmeren, terwijl Altera die aanpak wel heeft maar nog geen product – op een simulatietarget na. Het is natuurlijk vroeg, maar de eerste klap is nog steeds een daalder waard – zeker bij het aantrekken van een nieuw publiek.