Thomas Boersma werkt als consultant voor Altran Technologies aan diverse VHDL-projecten.

15 December 2017

Wie hardware wil leren ontwerpen in VHDL kan in het begin flink worstelen met de syntax van deze modelleertaal. Zonde, want het leidt af van het hardwaredesign zelf. Thomas Boersma ontwierp een VHDL-variant van de Blockly-tool, waarmee ontwerpen visueel kunnen worden opgebouwd.

Net beginnende programmeurs die een programmeertaal proberen te beheersen, lopen meestal tegen twee problemen tegelijk op: de syntax en de logica. Programmeertalen hanteren een zeer strikte grammatica waarin een gemiste puntkomma of ontbrekend aanhalingsteken al een fout oplevert bij compilatie van de code. Het zoeken naar dit soort fouten is vaak een ergernis, want het slokt tijd op die beginners beter hadden kunnen gebruiken om een ontwerp te leren maken en de functies van een programmeertaal te ontdekken en uit te proberen.

Google zag beginnende programmeurs die appjes voor Android wilden maken hier ook mee worstelen, en startte in 2011 een project om hen met een grafische interface te helpen. Deze interface was oorspronkelijk geschreven in Java, maar de technologiegigant gaf een van zijn ingenieurs, Neil Fraser, de opdracht een Javascript-versie te maken die je kon draaien in een browser.

Een paar maanden later zette Google het project stop, maar Fraser bleef erin geloven, nam al zijn vakantiedagen op en begon er zelf aan te werken. Toen hij na twee maanden een demo gaf, waren zijn managers daar zo van onder de indruk dat ze het project opnieuw opstartten onder de naam Blockly. Als beloning kreeg Fraser zijn vakantiedagen terug.

Zodoende werd Blockly een client-side Javascript-bibliotheek voor het ontwerpen van visuele programmeertalen en editors. Iedereen kan de editor inzetten en op dit moment zijn er honderden educatieve, bedrijfs- en hobbyprojecten die er gebruik van maken.

 advertorial 
Microchip

Device lifecycle management for fleets of IoT devices

Microchip gives insight on device management, what exactly is it, how to implement it and how to roll over the device management during the roll out phase when the products are in the field. Read more. .

BlocklyVHDL_interface
Blocklyvhdl-gebruikers kunnen standaard VHDL-bouwblokken uit een menu naar het werkblad slepen. Met een druk op de ‘Generate VHDL’-knop verschijnt de corresponderende VHDL-code. Ontwerpen zijn ook als xml-bestand op te slaan of in te lezen.

Rode draad

Een paar jaar terug begon ik als VHDL-programmeur geïnteresseerd te raken in de mogelijkheden van Blockly. De hardwaremodelleringstaal VHDL is namelijk geen uitzondering op het probleem dat beginners er flink mee kunnen worstelen. Een Blockly-versie voor VHDL was op dat moment niet beschikbaar, maar na wat onderzoek kwam ik tot de conclusie dat het mogelijk moest zijn om zelf zo’n versie te maken.

Na ongeveer een jaar was de eerste versie van Blocklyvhdl klaar. Met deze opensource tool kunnen gebruikers een VHDL-ontwerp opbouwen uit standaard blokjes, die ze als puzzelstukjes in elkaar kunnen klikken. Daardoor is het bijna onmogelijk om een syntaxfout te maken en kan de ontwerper zich volledig focussen op processen, functies, if-then-else-constructies, for-loops en variabelen, zonder zich zorgen te hoeven maken over een verkeerd geplaatst aanhalingsteken of een vergeten puntkomma.

De tool is vooral handig voor beginnende VHDL-ontwerpers en elektronicastudenten. Blocklyvhdl leent zich daarnaast ook prima voor ontwerpen van hardware op een tablet; het intikken van tekst is daar minder gemakkelijk, maar slepen van blokken is juist erg eenvoudig.

BlocklyVHDL_type
Om het aantal verschillende blokjes beperkt te houden, kan de gebruiker sommige types via een dropdown instellen.

Blocklyvhdl bevat blokjes voor bijna de complete verzameling aan declaraties, expressies en structuren die in VHDL bekend zijn. De rode draad hierin is om de structuur van de VHDL-syntax zo veel mogelijk terug te laten komen in de blokken zelf, zodat het ontwerp herkenbaar blijft. Hier en daar liet de Blockly-code het niet toe om de structuur exact te volgen en heb ik een concessie moeten doen, maar dit zou geen belemmering moeten vormen om de structuur te herkennen.

Ik heb er wel voor gekozen om gelijkaardige functies, types of variabelen te combineren, omdat het simpelweg onwerkbaar zou worden om elke VHDL-functie en -expressie zijn eigen aparte blokje te geven. Met een dropdown-menu kun je dan het juiste type selecteren. Sommige blokjes zijn bovendien voorzien van een mutator-window; een if-then-else-blok kun je bijvoorbeeld met een mutator uitbreiden met extra if-condities.

BlocklyVHDL_mutator
Sommige blokken zijn voorzien van een mutator om ze verder te configureren.

Opensource

Een beperking ten opzichte van reguliere editors is dat Blocklyvhdl een losstaand gereedschap is. Om simulaties te draaien of om de code te compileren naar een hardware-implementatie moet je de gegenereerde code exporteren of kopiëren naar een externe tool.

Aan de andere kant draait Blocklyvhdl in elke standaard webbrowser en kun je het gereedschap direct vanaf een webpagina gebruiken. De Blocklyvhdl-website maakt hier handig gebruik van door tutorials aan te bieden die uitleg geven over hoe je een VHDL-ontwerp kunt realiseren. De eerste tutorials beginnen simpel met eenvoudige ontwerpen en introduceren van daar steeds nieuwe VHDL-functies. Op dit moment zijn er drie tutorials, maar daar komen in de toekomst meer voorbeelden bij.

Een van de voordelen van werken met VHDL is dat het mogelijk is om de modellen uitgebreid te simuleren en te testen op functioneel gedrag. De eerste contouren van een simulator voor simpele ontwerpen in de browser zijn er al. Deze zal als eerste in de tutorials komen, later moet de simulator ook worden geïntegreerd in de Blocklyvhdl-tool. Een andere uitbreiding die in het verschiet ligt, is een parser die VHDL-code met een simpele druk op een knop kan omzetten naar een Blocklyvhdl-ontwerp.

Wie geïnteresseerd is in Blocklyvhdl, of een van de tutorials, kan altijd de laatste versie vinden op de website. Omdat Blockly zelf opensource is, is Blocklyvhdl dat ook; het project is ondergebracht op Github. Hulp is van harte welkom!

Edited by Pieter Edelman