Lijst van figuren

advertisement
HiSPARC FPGA & Software Aanpassingen
Rais Mense
Instituut voor Informatica
Hogeschool van Amsterdam
Student nummer: 500502966
E-mail: [email protected]
14 juni 2011
Dit document is één van de eindproducten die ik oplever voor het afronden van mijn afstudeerstage
voor de opleiding Technische Informatica aan de Hogeschool van Amsterdam. Ik heb tijdens deze stage
van februari 2011 t/m juni 2011 gewerkt aan het verbeteren van de software voor het High School
Project on Astrophysics Research with Cosmics (HiSPARC) bij het Nationaal Instituut voor subatomaire
fysica (NIKHEF).
Commissie:
B. van Eijk (Bedrijfsbegeleider Nikhef)
F. Rietveld (Stagebegeleider HvA & examinator)
J.G.M. Derriks (2de examinator)
Inhoudsopgave
VERKLARENDE WOORDENLIJST.............................................................................................................................. 4
LIJST VAN FIGUREN ................................................................................................................................................ 6
SAMENVATTING .................................................................................................................................................... 7
1. INLEIDING .......................................................................................................................................................... 8
1.1 NIKHEF ...................................................................................................................................................................8
1.2 HISPARC ...............................................................................................................................................................9
2. HUIDIGE SITUATIE ............................................................................................................................................ 12
2.1 HARDWARE ...........................................................................................................................................................12
2.2 BESCHRIJVING DATA ACQUISITIE SYSTEEM ....................................................................................................................15
3. OPDRACHT OMSCHRIJVING ............................................................................................................................. 17
3.1 AUTOMATISCH LADEN FPGA BINARY..........................................................................................................................17
3.2 VERWERKEN CONFIGURATIE BITS VOOR GPS ................................................................................................................18
3.3 HERSTARTEN FPGA ................................................................................................................................................19
4. AANPAK ........................................................................................................................................................... 20
4.1 AUTOMATISCH LADEN FPGA BINARY..........................................................................................................................20
4.2 VERWERKEN CONFIGURATIE BITS VOOR GPS ................................................................................................................21
4.2.1 Testen en validatie ....................................................................................................................................25
5. CONCLUSIE ....................................................................................................................................................... 28
5.1 LEERDOELEN ..........................................................................................................................................................28
5.2 VERLOOP VAN DE WERKZAAMHEDEN ..........................................................................................................................30
5.3 VOORUITZICHT .......................................................................................................................................................31
BIJLAGEN ............................................................................................................................................................. 32
A. DOCUMENTATIE VOOR DLL ........................................................................................................................................32
B. DOCUMENTATIE VOOR GPS BIT ..................................................................................................................................34
C. OVERZICHT BLOKSCHEMA FPGA CODE .........................................................................................................................36
Verklarende woordenlijst
FPGA - Een Field-programmable gate array is een geïntegreerde schakeling bestaande uit
programmeerbare logische componenten. Deze logische componenten kunnen geprogrammeerd
worden met logische functies zoals AND, XOR, enzovoorts. Deze functies kunnen ook bijvoorbeeld
decoders of eenvoudige wiskundige functies zijn.
VHDL – (Very High Speed Integrated Circuit) Hardware Description Language. Dit is een hardware
beschrijvingstaal waarmee digitale geïntegreerde schakelingen en programmeerbare logica in een FPGA
kan worden beschreven en gemodelleerd.
LabVIEW – (Laboratory Virtual Instrumentation Engineering Workbench) is een grafische
programmeeromgeving, ontwikkeld door National Instruments. Het is een omgeving die vooral geschikt
is voor besturingstechniek, data-acquisitie, en het communiceren met meetinstrumenten
LabWindows/CVI – Een programmeeromgeving geproduceerd door National Instruments. Het biedt een
platform voor het ontwikkelen van test- en meetopstellingen. CVI staat voor C Virtual Instruments, de
programmeertaal die gebruikt wordt is ANSI C.
VI – Virtual Instrument. Dit is de naam gebruikt binnen LabVIEW voor het aanduiden van een virtueel
meetinstrument of blok code.
DLL – Een Dynamically Linked Library, is een bibliotheek met functies, die door meerdere applicaties
gebruikt kunnen worden.
PMT – Een fotomultiplicator, of photomultiplier tube. Een elektronenbuis waarmee zeer zwakke
lichtsignalen of zelfs individuele fotonen kunnen worden gemeten.
Foton – De verschijningsvorm van elektromagnetische straling. Afhankelijk van de gebruikte
meetopstelling zal de straling zich voordoen als golven of als een stroom van massaloze deeltjes, de
fotonen.
UART – (Universal asynchronous receiver/transmitter). Een stuk hardware wat seriële naar parallelle
communicatie om kan zetten.
4
RS-232/RS-442 – Verschillende standaarden voor seriële communicatie die onder anderen elementen
als de elektrische karakteristieken van de signalen, de snelheid van signalen en voltages definiëren.
A/D converter – Een analoog-digitaalomzetter of AD-converter zet een analoog signaal om in een
digitaal signaal.
5
Lijst van figuren
Figuur
Onderschrift
Pagina
1.1.1
Organigram NIKHEF, met aan de rechter zijde HiSPARC onder leiding van Bob van Eijk.
9
1.2.1
Schematische weergave van de ontwikkeling van een deeltjeslawine die ontstaat nadat het
primaire deeltje in de atmosfeer een kettingreactie van botsingen teweeg brengt.
10
2.1.1
Een plastic scintillator licht op onder een ultraviolette lamp.
12
2.1.2
De binnenkant van de HiSPARC unit, met in het midden de Altera FPGA.
14
2.2.1
Datastroom van detector tot opslag op NIKHEF.
15
2.2.2
Proces stroom LabVIEW applicatie.
16
4.2.1
Voorbeeld van een LabVIEW Virtual Instrument. Dit instrument kan gebruikt worden voor
het lezen en versturen van Bytes.
22
4.2.2
De opbouw van de data stroom, de byte waarin de benodigde configuratie bits staan is
aangegeven in het rood. De start en stop bytes van het bericht zijn weergegeven in blauw.
De byte nummers komen overeen met de nummering in fig. 4.2.3.
23
4.2.3
In deze tabel is weergegeven welke informatie te vinden is in het data pakket wat
gekenmerkt wordt door de start bytes “8F AB”.
23
4.2.4
Een deel van de VHLD code voor het lezen van de GPS data. Op regel 541 wordt de byte
met de GPS configuratie data (de negende byte van dit bericht) opgeslagen in een variabele
om later verwerkt te worden.
24
4.2.5
Een deel van het blokdiagram van de VHDL code voor de FPGA. In de groene omlijning
lopen de twee interne signalen die de waardes van de benodigde GPS configuratie bits
doorgeven aan het blok wat ze zal verzenden naar de PC.
24
4.2.1.1
voorbeeld uit de Questasim software. Te zien is 300 nanoseconden van gesimuleerde
kloksignalen.
26
4.2.1.2
Een voorbeeld uit de Quartus II software. Hier is het zogeheten ‘floorplan’ te zien, waar
men kan bekijken en wijzigen welke logische elementen en geheugenblokken gebruikt
zullen worden door de FPGA.
27
6
Samenvatting
Ik heb deze stage de volgende producten opgeleverd: Een DLL die het mogelijk maakt om het
programma van de FPGA automatisch in de FPGA te schrijven wanneer het LabVIEW programma gestart
wordt. Dit maakt het mogelijk om die nieuwe versie van de HiSPARC unit in gebruik te nemen bij de
diverse meetstations, zonder dat de gebruikers ter plaatse iedere keer de software opnieuw handmatig
naar de FPGA moeten schrijven wanneer deze herstart moet worden, of wanneer er een nieuwe versie
beschikbaar is.
Ik heb ook aanpassingen gemaakt in zowel de software van de FPGA als in de LabVIEW software die het
mogelijk maken om een eerder bestaand probleem met de weergave van de tijd op metingen te
verhelpen door het verwerken van de huidige configuratie van de GPS module in de HiSPARC unit. Dit
zorgt ervoor dat de meetresultaten de correcte tijdsmeting met zich mee dragen en dus correct verder
verwerkt kunnen worden.
Ik heb met veel plezier aan het HiSPARC project gewerkt, en het heeft mij een kans gegeven om te
werken met technieken waar ik eerder nog niet in aanraking mee geweest was gekomen. Ook heb ik
kunnen werken aan een echt wetenschappelijk project, en samen kunnen werken met wetenschappers.
Het Nikhef heeft een zeer vriendelijke omgeving geboden om in te kunnen werken, en veel
mogelijkheden geboden om mij te ondersteunen tijdens mijn werk aan het project.
7
1. Inleiding
In dit document zullen een aantal dingen uiteengezet worden. Allereerst zal ik een inleiding geven over
het bedrijf waar ik werkzaam geweest ben(Nikhef) en het project waar ik aan gewerkt heb (HiSPARC).
Vervolgens zal ik een overzicht geven van hoe de huidige situatie was op het moment dat ik met het
project begonnen ben, en wat de opdracht precies geweest is. Verder zal ik in gaan op hoe ik de
opdracht aangepakt heb, en hoe dit uiteindelijk verlopen is, en uiteindelijk zal ik hieruit een conclusie
formuleren waar ik verder in ga op wat ik op deze stage geleerd heb, en of dit overeenstemt met de
doelen die ik aan het begin van de stageperiode had gesteld.
1.1 Nikhef
Het Nikhef is een samenwerkingsverband tussen de stichting voor Fundamenteel Onderzoek der
Materie (FOM) en vier universiteiten: de Radboud Universiteit Nijmegen, de Universiteit van
Amsterdam, de Universiteit Utrecht en de Vrije Universiteit Amsterdam.
Het Nikhef heeft ruim tweehonderd medewerkers in dienst, dit zijn naast wetenschappers en
promovendi, technici en ondersteunende stafleden. Het grootste deel van deze medewerkers is
werkzaam in Amsterdam, een aantal is ook werkzaam aan de universiteiten van Amsterdam, Nijmegen
of Utrecht.
De missie van het Nikhef is het bestuderen van de interactie en structuur van elementaire deeltjes en
krachtenvelden op de kleinst mogelijke afstand. De bevindingen worden gebruikt om de ontwikkeling
van het vroege universum te achterhalen.
Binnen het Nikhef lopen een aantal projecten parallel, waaronder het HiSPARC project (zie fig. 1.1.1).
Verder loopt er een relatief groot aantal projecten in samenwerking met CERN (Conseil Européen pour
la Recherche Nucléaire in Genève), waaronder ALICE (A Large Ion Collider Experiment), ATLAS (A
Toroidal LHC ApparatuS) en LHCb (Large Hadron Collider beauty experiment), drie van de grote
experimenten bij de LHC (Large Hadron Collider).
8
Fig. 1.1.1: Organigram NIKHEF, met aan de rechter zijde HiSPARC onder leiding van Bob van Eijk.
1.2 HiSPARC
HiSPARC is een project waarbij middelbare scholen samen met wetenschappelijke instellingen een
netwerk vormen om kosmische straling met extreem hoge energie te kunnen meten.
Op de daken van de scholen die meedoen aan het HiSPARC project staan meetopstellingen welke via het
internet verbonden zijn met een centrale computer bij een wetenschappelijke instelling. Zo vormen zij
een lokaal netwerk. In Nijmegen worden al sinds 2002 gegevens verzameld en in Amsterdam sinds 2004.
Ook in de regio's Eindhoven, Leiden, Utrecht, Enschede en Groningen staan HiSPARC detectoren.
9
Bij de botsing van een hoogenergetisch kosmisch deeltje op atoomkernen in de atmosfeer worden
nieuwe deeltjes gemaakt. Deze nieuwe deeltjes bewegen in dezelfde richting als het primaire deeltje, en
botsen vervolgens waarbij weer nieuwe deeltjes ontstaan. Dit leidt zo tot een kettingreactie waarin een
cascade van secundaire en een grote hoeveelheid daarvan afgeleide deeltjes ontstaat (zie fig. 1.2.1). In
deze kettingreactie ontstaat als het ware een pannenkoek van deeltjes; dit wordt een lawine, of
“shower” genoemd. Alle deeltjes, die in zo een lawine naar beneden komen, bewegen met bijna de
lichtsnelheid.
Zolang de energie van de deeltjes hoog genoeg is om nieuwe deeltjes te produceren, blijft de lawine
groeien door inelastische botsingen. Daarna zijn er alleen nog elastische verstrooiingsprocessen en
neemt het aantal deeltjes lager in de atmosfeer af. Het grootste deel van de energie van het primaire
deeltje wordt geabsorbeerd in de atmosfeer. Een beperkt deel bereikt het aardoppervlak. Het zijn deze
deeltjes waar men in het HiSPARC project naar op zoek is.
Fig. 1.2.1: Schematische weergave van de ontwikkeling van een deeltjeslawine die ontstaat nadat het primaire
deeltje in de atmosfeer een kettingreactie van botsingen teweeg brengt.
10
De opstelling van elke meetlocatie bestaat uit een aantal onderdelen, waarvan de belangrijkste de
scintillator plaat is. Dit is de plaat waardoor de geladen deeltjes passeren, en in deze plaat wordt licht
geproduceerd. Er wordt er een groot aantal licht deeltjes geproduceerd, dit aantal ligt tussen de
ongeveer honderd en duizend deeltjes. Het precieze aantal is afhankelijk van de hoeveelheid energie die
het geladen deeltje kwijt raakt op zijn pad door het scintillatie materiaal. Wanneer dit licht het uiteinde
van de scintillator plaat bereikt, valt het op een PMT (photomultiplier tube) waar het licht met behulp
van het foto-elektrisch effect omgezet wordt in een elektrisch signaal.
Het elektrische signaal loopt over een coax kabel naar de HiSPARC unit, het eerste deel van het data
acquisitie systeem. Per unit kunnen er twee scintillator platen aangesloten worden, maar elke unit kan
ook een zogeheten ‘Slave’ hebben, dit is een tweede unit, met daaraan nog een tweetal scintillator
platen. Zo kunnen er dus in totaal vier scintillator platen in één meetopstelling opgenomen worden.
In de unit worden deze signalen uitgelezen door A/D converters. De hoogte van het signaal ligt tussen de
nul en min tien Volt, en wordt vierhonderd miljoen keer per seconde gesampled.
Wanneer de eerste analyse van de data is gedaan, stuurt de unit alleen de interessante data over USB
naar een PC. Op deze PC draait LabVIEW software die de verdere opslag en transport naar een lokale
database verzorgt.
11
2. Huidige situatie
Op dit moment wordt een tweede versie van de HiSPARC data acquisitie elektronica gebruikt binnen het
HiSPARC project. Dit is een unit met daarin onder anderen een FPGA, een GPS module, een aantal A/D
converters en een chip voor communicatie over USB. Er is recentelijk een derde versie ontwikkeld
waarin een aantal aanpassingen gemaakt zijn. Mede om deze nieuwe hardware in te kunnen gaan
zetten moeten er ook een aantal aanpassingen gemaakt worden in zowel de VHDL software van de
FPGA als het bijbehorende LabVIEW data acquisitie programma.
2.1 Hardware
De hardware in het HiSPARC project bestaat uit drie delen; de detectors, het data acquisitie systeem en
de opslag. De detectors bestaan uit scintillator platen, PMT's, voedings- en signaalkabels (coax). De
scintillator platen zijn voor het registreren van de geladen deeltjes. Deze platen zijn gemaakt van een
speciaal plastic, wat er voor zorgt dat wanneer een deeltje een scintillator plaat passeert, de plaat een
deel van de energie van dit deeltje absorbeert en vervolgens weer uitstraalt in de vorm van fotonen (zie
fig. 2.1.1). De scintillator is lichtdicht verpakt in Aluminiumfolie en zwart plastic om zo te voorkomen dat
er licht van buitenaf in de plaat terecht komt. Dit zorgt er ook voor dat de scintillator plaat van binnen
beter reflecteert. Omdat de plaat van binnen reflecteert, worden de fotonen die geproduceerd worden
in de plaat ook terug de plaat in gereflecteerd wanneer deze de zijkant van de plaat bereiken. De
fotonen blijven net zo lang door de plaat weerkaatsen tot deze op de PMT vallen.
Fig. 2.1.1: Een plastic scintillator licht op onder een ultraviolette lamp.
12
Wanneer een foton de PMT raakt, produceert deze met behulp van een foto-elektrisch materiaal een
elektron. Één enkele elektron is op zichzelf erg moeilijk om te meten, en is niet over een lange draad te
versturen. Daarom versterkt de PMT het signaal met behulp van secundaire emissie. Dit wil zeggen dat
er gebruik wordt gemaakt van het effect dat een metalen oppervlak meerdere elektronen uitzend
wanneer er een enkele elektron op valt. Door dit meerdere malen te herhalen kan het signaal van een
enkele elektron vele malen versterkt worden, en zo sterk genoeg worden om over een kabel verstuurd
te worden.
Wanneer het signaal van de PMT over een coax kabel de HiSPARC unit bereikt, is het aangekomen bij
het data acquisitie deel van de meetopstelling. In de HiSPARC unit vindt de eerste data verwerking
plaats. Om de data snel genoeg te kunnen verwerken is de HiSPARC unit speciaal ontworpen en
geprogrammeerd voor dit doel. Het hart is een Altera Cyclone III FPGA (fig. 2.1.2) met daarin een
programma wat speciaal voor de meetopstelling is gemaakt. Deze FPGA beschikt over 39600 logische
elementen, 126 programmeerbare geheugenblokken van 1125 bytes, 141 kilobyte RAM en kan tot 535
inputs en outputs aan. Verder bevat de unit een GPS module op basis van een Texas Instruments Digital
Signal Processor (TMS320VC5509AZHH). Deze chip verzorgt de verwerking van het GPS signaal en de
communicatie met de rest van de hardware. Verder bevat de unit vier analoog/digitaal converters voor
het uitlezen van de signalen van de PMT.
13
Fig. 2.1.2: De binnenkant van de HiSPARC unit, met in het midden de Altera FPGA.
De FPGA loopt op een 200 MHz klok, en leest de waardes van de A/D converters uit op zowel de
opgaande als de neergaande flank van de klok. Dit betekent dus dat de waarde van de AD converters
vierhonderd miljoen keer per seconde uitgelezen wordt door de FPGA. Wanneer de data de FPGA
binnen komt, wordt het opgeslagen in een circulaire buffer. Tegelijk wordt de eerste analyse op de data
gedaan om te bepalen of er een coïncidentie is opgetreden tussen de twee scintillator platen. Als dit het
geval is wordt een van tevoren bepaalde hoeveelheid data van zowel voor, tijdens als na de coïncidentie
in een nieuwe buffer geschreven. Ook wordt er met behulp van de GPS de precieze tijd bepaald waarop
de coïncidentie heeft plaatsgevonden. Vervolgens wordt deze data via USB weggeschreven naar een PC
met daarop een LabVIEW programma, wat ook weer speciaal voor de meetopstelling gemaakt is.
Dit LabVIEW programma verzorgd tijdelijke opslag van de verzamelde data zodat deze verder verstuurd
kan worden naar de permanente opslag op het NIKHEF.
14
2.2 Beschrijving data acquisitie systeem
Binnen het HiSPARC project wordt een LabVIEW programma gebruikt om de data vanuit de FPGA uit te
lezen en op te slaan. Dit programma draait op een PC die op locatie bij elke detector aanwezig is. De
uitwisseling van de data gebeurd via een USB verbinding tussen de PC en de HiSPARC unit. Het
programma zorgt voor tijdelijke data opslag. Via een aantal andere processen wordt de data vervolgens
doorgestuurd naar een centrale database bij nikhef (fig. 2.2.1). Verder biedt het programma een
gebruikersinterface voor het analyseren en configureren van een aantal verschillende aspecten van de
hardware in de HiSPARC unit. Ook kan er met deze interface in real time gekeken worden naar de
kwaliteit van de binnenkomende data, en of zich een fout heeft voorgedaan in de unit.
Fig. 2.2.1: Datastroom van detector tot opslag op NIKHEF.
Het verloop van het programma is sequentieel, en wordt grotendeels gedreven door de verzamelde
data (fig. 2.2.2). Het programma heeft een aantal standaard configuratie waarden die gebruikt worden
wanneer er geen expliciete waarde door de gebruiker opgegeven wordt. Met deze startwaarden wordt
het HiSPARC II proces gestart. Hieronder valt ook hoeveel toegang de gebruiker heeft tot de configuratie
mogelijkheden van het programma. Wanneer de gebruiker kiest voor uigebreide mogelijkheden voor
configuratie en diagnostiek, is een wachtwoord nodig om het programma te starten. Vervolgens begint
de hardware initialisatie, waarbij via USB contact wordt gezocht met de HiSPARC elektronica.
15
Wanneer deze hardware initialisatie succesvol is wordt de hoofdloop van het programma gestart. In
deze loop zal het programma blijven tot er op de stop knop gedrukt wordt in de gebruikers interface, of
totdat er een fout optreedt waar het programma zich geen raad mee weet. In dit geval wordt er
getracht opnieuw te starten met het uitvoeren van het programma vanaf de eerste configuratie.
Wanneer het programma in de hoofdloop is, zijn er vier taken waar het programma zich voornamelijk
mee bezig houdt. In het main loop blok wordt het uitlezen en doorvoeren van configuratie gedaan, en
het beslissen welke acties er verder uitgevoerd moet worden. Dit kan één van de volgende drie acties
zijn; Read bytes, in deze modus leest het programma bytes in van USB. In het Process data blok gebeurt
het verwerken van de ingelezen data om te kunnen bepalen wat voor berichten er binnengekomen zijn,
en wat er met de bijbehorende data gedaan moet worden. Wanneer het Store data blok actief is,
worden de verzamelde gegevens doorgestuurd naar de database op het NIKHEF om daar opgeslagen te
worden voor verdere analyse.
Fig. 2.2.2: Proces stroom LabVIEW applicatie.
16
3. Opdracht omschrijving
In dit hoofdstuk zal ik een beschrijving geven van elke onderdeel van mijn opdracht bij het Nikhef, zoals
deze bij mij neergelegd waren aan het begin van mijn stage. Verder zal ik een opsomming geven van de
op te leveren producten voor elk van deze onderdelen.
3.1 Automatisch laden FPGA binary
3.1.1 Omschrijving
In de tweede versie van de HiSPARC units, is een EEPROM chip aanwezig waar de FPGA zijn programma
uit laadt wanneer deze gestart wordt. Bij de derde versie is de EEPROM chip niet meer aanwezig, en
moet de FPGA zijn programmatuur over een USB poort aangeleverd krijgen wanneer deze opstart.
Er bestaat een applicatie die geschreven is voor het programmeren van de HiSPARC units, en deze werkt
met zowel versie twee als versie drie, echter is het niet erg gebruiksvriendelijk om iedere keer wanneer
de HiSPARC unit start handmatig de programmatuur erin te moeten laden met behulp van deze
applicatie. Om het proces voor de gebruiker te vereenvoudigen, moet de functionaliteit van deze
applicatie direct in het LabVIEW programma terecht komen zodat vanuit daar de programmatuur
automatisch in de FPGA van de unit geladen kan worden wanneer dit nodig is. Er moet uitgezocht
worden of de bestaande applicatie aan te passen is of dat er nieuwe software geschreven moet worden
om de gewenste functionaliteit los te verkrijgen. Hierna zal, afhankelijk van de uitkomst, een nieuwe
applicatie geschreven, of de bestaande aangepast worden.
3.1.2 Op te leveren producten
DLL – Er zal een DLL aangemaakt worden met daarin de functionaliteit van de stand alone applicatie. Dit
wil zeggen dat met behulp van deze DLL de FPGA geprogrammeerd moet kunnen worden zonder dat
hier verdere software of interactie met de gebruiker voor nodig is.
Documentatie – Een beknopte handleiding met daarin de uitleg over hoe de code voor de DLL
aangepast kan worden, hoe een DLL gebouwd kan worden vanuit de code, hoe de DLL als bibliotheek in
LabVIEW geïmporteerd en gebruikt kan worden en wat welke foutcodes betekenen (zie bijlage A).
17
3.2 Verwerken configuratie bits voor GPS
3.2.1 Omschrijving
In de HiSPARC unit is een GPS module aanwezig om de locatie van de unit, en vooral de tijd zeer
nauwkeurig te kunnen bepalen. Het zeer precies kunnen bepalen van de tijd is erg belangrijk omdat
toleranties hiervoor slechts enkele nanoseconden zijn. Echter kan de tijd weergegeven zijn in zowel de
GPS-, als UTC-tijdsaanduiding. Dit is afhankelijk van de configuratie van de GPS module. Het is belangrijk
om te weten in welke modus het bordje staat, omdat de twee tijdsaanduidingen enkele seconden van
elkaar verschillen.
Het GPS bordje geeft iedere seconde een aantal gegevens door aan de FPGA, waaronder een byte
waarin de huidige configuratie van de GPS weergegeven wordt. Op dit moment wordt er nog niets
gedaan met deze configuratie status byte. De FPGA moet deze byte ook gaan uitlezen en de relevante
informatie over de configuratie van de GPS over een USB verbinding doorgeven aan de LabVIEW
applicatie.
De LabVIEW applicatie moet ook aangepast worden om deze nieuwe informatie correct te verwerken. Er
moet een weergave bij komen zodat de gebruiker kan zien in welke tijdsconfiguratie de GPS module
staat, en deze configuratie moet verwerkt worden in de opslag van de gegevens zodat achteraf de
correcte tijd nagegaan kan worden.
3.2.2 Op te leveren producten
FPGA code – De aangepaste VHDL code die ervoor zorgt dat de configuratie van de GPS module in de
HiSPARC unit beschikbaar wordt voor de PC applicatie.
LabVIEW code – De aangepaste LabVIEW code die de configuratie van de GPS module mee neemt in het
verwerken van de tijdsstempel waarop coïncidenties plaats vinden.
Documentatie – Een korte technische beschrijving die verkaart waar de GPS data opgehaald wordt, hoe
de configuratie wordt verkregen en waar de code hiervoor te vinden is, zodat aanpassingen navolgbaar
zijn, en ook in nieuwere versies van de software toegepast kunnen worden (zie bijlage B).
18
3.3 Herstarten FPGA
Dit deel van mijn stage opdracht is wegens tijdsbeperkingen helaas buiten de scope van het project
gevallen. Het was echter wel een deel van de initiële opdracht, daarom is voor de volledigheid de
omschrijving wel toegevoegd, maar deze opdracht later niet meer terug komen in het hoofdstuk over de
aanpak.
3.3.1 Omschrijving
De FPGA in de HiSPARC unit heeft geen zelfdiagnostiek, dit betekent dat er geen waarschuwing is
wanneer er iets spaak loopt in het proces. Wanneer de FPGA niet correct functioneert, kunnen er
metingen verloren gaan, en dit is uiteraard geen wenselijke situatie. Om hier verbetering in aan te
brengen moet de er een controle komen. Wanneer er een fout optreedt of er geen resultaten meer
binnen komen, moet het LabVIEW programma kunnen beslissen om de FPGA opnieuw op te starten om
het probleem zo eventueel te kunnen verhelpen, zonder dat hier een persoon voor aanwezig hoeft te
zijn bij de meetopstelling, of er gebruik gemaakt moet worden van een login op afstand omdat dit niet
altijd betrouwbaar werkt. Verder is de tijd tussen het vaststellen van een probleem situatie en het
herstarten van de FPGA zo te minimaliseren.
3.3.2 Op te leveren producten
LabVIEW code – De aangepaste LabVIEW code welke het mogelijk maakt dat de LabVIEW applicatie de
FPGA opnieuw opstart wanneer er geen, of foutieve data wordt ontvangen van de FPGA. Een deel van
deze code zal ingepakt zijn in een LabVIEW Virtual Instrument zodat deze zowel in de huidige applicatie
als in nieuwere versies van het programma gebruikt kan worden. De rest van de code zal moeten
worden ingevoegd in het bestaande Virtual Instrument wat het verwerken van de ontvangen data doet.
Documentatie – Een technische beschrijving van de gemaakte aanpassingen en toevoegingen in de
LabVIEW code, en hoe het LabVIEW Virtual Instrument gebruikt dient te worden.
19
4. Aanpak
4.1 Automatisch laden FPGA binary
Omdat de volledige broncode van de stand alone applicatie is beschikbaar is, heb ik ervoor gekozen om
de bestaande code van deze applicatie aan te passen zodat hier een DLL van gemaakt kan worden.
Hiervoor is het nodig om de broncode van de bestaande applicatie zodanig aan te passen dat deze
autonoom kan werken, waar de bestaande applicatie gebruikers interactie vereist. Om deze autonomie
te kunnen bereiken heb ik alle code van de oude applicatie die interactie nodig had, opnieuw
geschreven om met directe input te kunnen werken. Verder heb ik alle stappen die de gebruiker
voorheen moest doorlopen ook moeten automatiseren. Deze DLL kan vervolgens in LabVIEW
geïmporteerd worden als bibliotheek. Echter brengt dit wel met zich mee dat de DLL in de eerste
instantie afhankelijk zal zijn van de LabWindows bibliotheek voor het maken van een
gebruikersinterface. Dit is niet gewenst omdat deze bibliotheek op de meeste computers niet
beschikbaar zal zijn. Het is dus nodig om de code dusdanig aan te passen dat deze afhankelijkheid niet
langer aanwezig is. Met behulp van een definitie in de code is het mogelijk gemaakt om voor het
compileren van het project aan te geven of het project als DLL of als stand alone applicatie gecompileerd
zal worden. Om dit te bereiken moet alle code die nodig is voor het opbouwen van de gebruikers
interface conditioneel gemaakt worden, zodat deze enkel opgenomen wordt bij het compileren
wanneer dit ook echt nodig is. Hierdoor zal de oude functionaliteit van stand alone applicatie
beschikbaar blijven, terwijl het ook mogelijk is om een DLL zonder afhankelijkheid van de LabWindows
bibliotheken te maken.
Om de DLL gemakkelijker in het gebruik te maken kan men vanuit LabVIEW de locatie opgeven van het
bestand wat gebruikt moet worden om de FPGA te programmeren. Dit brengt wel met zich mee dat het
nodig is om vast te kunnen stellen wanneer er een foutieve locatie opgegeven is. Om deze mogelijke
fout, en een aantal andere fouten die tijdens het programmeren van de FPGA op kunnen treden van
elkaar te kunnen onderscheiden is het zeer belangrijk dat de DLL ook aan LabVIEW weer een signaal
terug geeft waar aan af te lezen is hoe het programmeren verlopen is. Dit wordt gedaan door een nul
terug te sturen wanneer de FPGA succesvol geprogrammeerd is, of een negatieve waarde, afhankelijk
van wat er fout gegaan is (zie tabel 4.1.1). Hieraan kan de programmeur of gebruiker afleiden wat er aan
de hand is, en waar het probleem mogelijkerwijs kan liggen.
20
Return
code
Meaning
Possible reasons
0
FPGA code was successfully written to device.
No error.
-1
No suitable USB device was found.
HiSPARC box is not connected or not
receiving power.
-2
USB device could not be initialized.
Missing drivers or faulty hardware.
-3
Cannot set program clock.
Driver error or hardware failure.
-4
Could not open .rbf file.
File is not where it’s expected or the
current user does not have sufficient
permissions to open it.
-5
Read error occurred in .rbf file.
Corrupted or truncated .rbf file.
-6
Unable to set FPGA into configuration mode.
-7
No FPGA detected.
-8
Memory allocation error.
-9
FPGA configuration failed.
-10
-11
-12
FPGA does not have power or hardware
is faulty.
Not enough free memory is available for
the application.
Write error or faulty hardware.
FPGA configuration appears successful, but
FPGA is not ready.
FPGA configuration was interrupted, file could
not be completely written.
Unknown fatal error occurred during FPGA
configuration.
Corrupted or truncated .rbf file.
FPGA lost power during configuration or
corrupted or truncated .rbf file.
Reason for the error is unknown.
Tabel 4.1.1: In deze tabel is te zien wat de betekenis is van de verschillende waardes die ontvangen kunnen
worden na het aanroepen van de DLL functie voor het programmeren van de FPGA. Deze tabel is ook terug te
vinden in de documentatie voor dit onderdeel van mijn project (zie bijlage A).
Ik heb voor deze aanpak gekozen omdat dit het snelste resultaat zorgt, omdat een deel van de oude
code opnieuw gebruikt kan worden. Ook is deze code al reeds getest en in de praktijk bewezen, wat
ervoor zorgt dat de hoeveelheid tijd die nodig is voor het testen bij dit onderdeel gereduceerd wordt.
4.2 Verwerken configuratie bits voor GPS
De benodigde byte van de GPS data wordt verzonden in een reeks bytes die al door de FPGA opgepakt
wordt, maar de bewuste byte wordt niet uitgelezen. Het uitlezen van deze byte zal dan ook in de
21
bestaande structuur van het FPGA programma meegenomen en vervolgens met de rest van de data
meegezonden worden naar de LabVIEW applicatie om daar verder verwerkt te worden. Om dit te
kunnen realiseren, is het wel een vereiste dat ik leer programmeren in zowel VHDL als LabVIEW, omdat
deze beide uitvoerig gebruikt worden. Ook is het belangrijk om een goed inzicht te krijgen in het
bestaande project. Gezien de omvang van het bestaande project (±33 duizend regels VHDL code en ruim
honderd LabVIEW Virtual Instruments) is het nodig om hier enige tijd voor uit te trekken (fig. 4.2.1).
Fig. 4.2.1: Voorbeeld van een LabVIEW Virtual Instrument. Dit instrument kan gebruikt worden voor het lezen en
versturen van Bytes.
Om het gewenste resultaat te bereiken zal eerst uit de datastroom van de GPS de benodigde byte
gehaald moeten worden, uit deze byte zullen vervolgens twee bits uitgelezen worden om de huidige
configuratie te kunnen bepalen. De GPS module zit intern in de HiSPARC unit verbonden met de FPGA
door middel van een seriële verbinding die direct aangestuurd wordt door de UART op de GPS
ontvanger zonder dat daar een RS-232 of RS-422 line driver voor nodig is. Eens per seconde wordt over
deze verbinding een aantal berichten verzonden. Het type bericht kan bepaald worden door de eerste
bytes van het bericht. Voor elk type bericht is er een bekende serie bytes(fig. 4.2.2). Voor elk type
bericht is ook bekend wat voor gegevens er in staan(fig. 4.2.3), en welke serie bytes het einde van het
bericht aanduid. Op deze manier kan uit het bericht de byte met de GPS configuratie data
onderscheiden worden van de rest (fig. 4.2.4), en kunnen de twee benodigde bits worden verkregen.
Wanneer deze twee bits uitgelezen zijn, zullen deze binnen de FPGA in een intern signaal omgezet
worden.
22
Dit interne signaal kan dan verbonden worden aan het blok van de FPGA code wat verantwoordelijk is
voor de communicatie met de PC (fig. 4.2.5). In dit blok moeten de twee extra bits verwerkt worden in
een bericht wat iedere seconde verzonden wordt om de LabVIEW applicatie te informeren over de
status van de GPS. Op deze manier is het mogelijk om de twee extra bits met de huidige datastroom
mee te sturen naar LabVIEW.
Fig. 4.2.2: De opbouw van de data stroom, de byte waarin de benodigde configuratie bits staan is aangegeven in
het rood. De start en stop bytes van het bericht zijn weergegeven in blauw. De byte nummers komen overeen met
de nummering in fig. 4.2.3.
Fig. 4.2.3: In deze tabel is weergegeven welke informatie te vinden is in het data pakket wat gekenmerkt wordt
door de start bytes “8F AB”.
23
Fig. 4.2.4: Een deel van de VHLD code voor het lezen van de GPS data. Op regel 541 wordt de byte met de GPS
configuratie data (de negende byte van dit bericht) opgeslagen in een variabele om later verwerkt te worden.
Fig. 4.2.5: Een deel van het blokdiagram van de VHDL code voor de FPGA. In de groene omlijning lopen de twee
interne signalen die de waardes van de benodigde GPS configuratie bits doorgeven aan het blok wat ze zal
verzenden naar de PC. Zie bijlage C voor het volledige blokdiagram.
In LabVIEW wordt ook voor een deel de reeds bestaande structuur gebruikt voor het uitlezen van de
data. Omdat de VI's die nodig zijn voor het lezen van de data die over de USB verbinding van de HiSPARC
24
unit komt reeds bestaat, is deze aangepast om de extra bits goed af te handelen. De interpretatie van de
data en de weergave zal wel in een aparte VI gedaan worden om het makkelijker te maken om deze
code zonodig in een ander project of in een volgende versie van de software opnieuw te kunnen
gebruiken.
4.2.1 Testen en validatie
Om zowel tijdens het ontwikkelen als achteraf te kunnen valideren dat de FPGA code naar behoren
werkt, heb ik een aantal software en hardware tools tot mijn beschikking gehad.
Aan de kant van de hardware heeft de HiSPARC unit zelf een oplossing geboden voor het valideren van
signalen. Binnen in de unit zijn een aantal LEDs aanwezig die gebruikt kunnen worden voor diagnostiek.
Het is mogelijk om in de FPGA software een signaal aan deze LEDs te verbinden, en zo in real time te
kunnen zien wat een signaal doet, en hoe het reageert op bepaalde inputs. Dit is zeer waardevol om te
hebben, omdat het een duidelijke en zeer ondubbelzinnige weergave is van een signaal binnen de FPGA.
De software die ik tot mijn beschikking had voor het testen en valideren van de werking van de code
bestond voornamelijk uit een tweetal programma’s. De eerste hiervan is Questasim, een programma
wat gebruikt kan worden om de werking van de FPGA op een PC te simuleren. Dit maakt het mogelijk
om als het ware in de FPGA te kijken, en te zien wat de signalen doen, en hoe deze op elkaar reageren
(zie fig. 4.2.1.1). Hoewel ik enige tijd nodig gehad heb om dit programma te leren gebruiken, is het zeer
nuttig gebleken in het beter kunnen nagaan waar een fout optreed wanneer het programma van de
FPGA niet werkt zoals verwacht.
Het enige nadeel van deze software was dat niet alle functionaliteit van de FPGA correct gesimuleerd
werd. Zo werd de PLL, een onderdeel van de FPGA wat deling of vermenigvuldiging van een kloksignaal
verzorgd, niet gesimuleerd. Hiervoor moest dan ook extra VHDL geschreven worden, om dit alsnog te
simuleren.
25
Fig. 4.2.1.1: Een voorbeeld uit de Questasim software. Te zien is 300 nanoseconden van gesimuleerde kloksignalen.
Verder heb ik gebruik gemaakt van de Quartus II software. Dit programma wordt voornamelijk gebruikt
voor het compileren, fitten en het zorgen van de gewenste timing behaald wordt. Het is echter ook
mogelijk om dit programma voor diagnostiek te gebruiken. Zo kan men zien welke logische elementen
en geheugen blokken gebruikt zullen worden (zie fig. 4.2.1.2). Verder heeft dit programma een zeer
goede foutopsporing. Zo is er bijvoorbeeld de mogelijkheid om te detecteren wanneer een signaal maar
één maal gebruikt wordt, en het dus waarschijnlijk om een typefout gaat. Dit soort foutopsporing is zeer
nuttig om logische fouten in de programmatuur te voorkomen.
26
Fig. 4.2.1.2: Een voorbeeld uit de Quartus II software. Hier is het zogeheten ‘floorplan’ te zien, waar men kan
bekijken en wijzigen welke logische elementen en geheugenblokken gebruikt zullen worden door de FPGA.
27
5. Conclusie
5.1 Leerdoelen
5.1.1 Programmeren van een FPGA in VHDL
Het programmeren van een FPGA is tijdens mijn opleiding helaas niet aan de orde geweest, echter
worden FPGA's in een aantal beroepsvelden wel vaak gebruikt. Daarom leek het mij een nuttige
toevoeging aan mijn kennis, en een uitdagende nieuwe taal om in te programmeren. Aangezien VHDL
een industrie standaard is voor het programmeren van een FPGA, was het een logische keuze om
daarmee te werken.
Zoals al eerder aangegeven zijn deze twee onderwerpen in mijn opleiding niet aan bod gekomen.
Hierdoor was dan ook de verwachting dat ik enige tijd kwijt zou zijn om bekend te raken met de
structuur en werking. Helaas heeft dit uiteindelijk een stuk meer tijd in beslag genomen dan in de eerste
plaats verwacht was. Dit was hoofdzakelijk doordat de structuur en onderdelen van VHDL meer
verschillen van traditionele PC programmeertalen dan ik verwacht had.
Ik heb tijdens mijn project zeer veel geleerd over programmeren in VHDL en de werking van een FPGA.
Verder heb ik ook kennis opgedaan met een aantal gerelateerde software pakketten die voor dit project
gebruikt worden, waaronder EASE, een programma waarin met behulp van een combinatie van VHDL en
grafisch programmeren FPGA programma’s geschreven kunnen worden, Questasim, waarmee de VHDL
code uitgevoerd kan worden op een gesimuleerde FPGA (fig. 4.3.1.1), en Quartus II, het programma wat
gebruikt wordt om de VHDL code te compileren, te fitten en ervoor zorgt dat de beoogde timing voor de
applicatie gehaald kan worden (fig. 4.3.1.2).
5.1.2 Programmeren in LabVIEW
Ook LabVIEW is niet aan bod geweest in mijn opleiding. Grafisch programmeren is iets wat ik zeer weinig
gedaan heb, maar deze methode van programmeren wordt wel steeds vaker toegepast, en LabVIEW is
bij de ontwikkeling van portotypes ook vaak aan de orde. Vandaar dat ook dit mij een zeer nuttig
onderwerp leek om meer over te weten te komen, en ervaring mee op te doen.
28
Hoewel ik in het verleden al eens kort met LabVIEW gewerkt had, was ook dit grotendeels nieuw voor
mij. Echter was door mijn eerdere gebruik van LabVIEW, de inschatting voor de benodigde tijd om
ermee bekent te raken relatief eenvoudig. Verder volgt LabVIEW grotendeels de gangbare regels en
structuren van meer traditionele programmeertalen, en is het dus voornamelijk een kwestie van bekend
raken met de interface en werking van het programma.
Tijdens mijn stage heb ik verschillende malen met LabVIEW gewerkt, en ik heb er dan ook een redelijke
hoeveelheid ervaring mee op kunnen doen. Omdat LabVIEW vaak gebruikt wordt voor het testen van
prototypes en het schrijven van data acquisitie software, is dit voor mij een zeer waardevolle toevoeging
aan mijn kennis. Ook heb ik nog via National Instruments de mogelijkheid gekregen om deel te nemen
aan een korte introductie les over LabVIEW. Hier heb ik kennis kunnen maken met nieuwe aspecten van
het programma, en hoe LabVIEW met hardware kan communiceren.
5.1.3 Projectmatig werken
Projectmatig werken is natuurlijk iets wat in mijn opleiding al vaak naar voren gekomen is, maar vrijwel
altijd zijn de projecten op school zo ingedeeld dat men vanaf het begin zelf alles moet opbouwen. Dit is
alleen niet altijd wat men in de praktijk tegen komt, vaak wanneer je aan een project begint, is het een
voortzetting op een eerder project. Dit precies is wat ik bij Nikhef zal gaan doen, is het voor mij ook zeer
nuttig om ervaring op te doen met op deze manier in een project stappen. Ik verwachtte dat het mij
vooral zou helpen om te leren hoe ik snel in een project in kan stappen en mijn tijdsverlies bij het
inlezen op het project kan minimaliseren.
Op het gebied van projectmatig werken was deze stage ook zeer leerzaam voor mij. Hoewel ik in de
eerste plaats wel enkele inschattingsfouten gemaakt had voor de benodigde tijd voor het mijzelf inlezen
in het project en het oppakken van de benodigde software, heb ik hierdoor wel een beter inzicht
gekregen in een aantal van de factoren die de benodigde tijd bepalen. Verder heb ik veel geleerd op het
gebied van communicatie binnen een bedrijf, en waarom dit belangrijk is voor het slagen van een
project.
29
5.2 Verloop van de werkzaamheden
Het verloop was in de eerste instantie redelijk moeizaam, dit lag vooral aan het feit dat ik nog geen
ervaring had met de benodigde technieken voor het project. Ik wist van tevoren uiteraard dat ik hier
enige tijd aan zou moeten besteden, maar de tijd die ik hiervoor ingeruimd had bleek niet voldoende te
zijn, en dreigde zodanig de planning van het project in gevaar te brengen. De voornaamste misrekening
kwam voort uit het onderschatten van de omvang bestaande code van het project. Waar ik een redelijk
substantieel project verwacht had, schoten mijn verwachtingen toch te kort. Dit in combinatie van het
moeten leren van VHDL, en de structuur van het programmeren van een FPGA, zowel als het nog
moeten leren omgaan met, en programmeren in LabVIEW zorgden voor een substantieel tijdsverlies. Na
dit besproken te hebben met mijn bedrijfs- en stagebegeleider hebben we een aangepaste planning
gemaakt en is het verlies zodanig weer ingelopen.
Het leren van VHDL heb ik voornamelijk zelfstandig ondernomen, wel heb ik enkele malen bij collega’s
aan kunnen kloppen voor hulp met een specifiek probleem omterend de bestaande code, en heb ik de
mogelijkheid gehad om met auteur van de code te gaan zitten om de structuur van het project
duidelijker te krijgen.
Ook LabVIEW heb ik voornamelijk zelfstandig geleerd, echter heb ik wel een korte introductie sessie
kunnen volgen, welke was opgezet door National Instruments. Hoewel ik ook uitvoerig heb moeten
werken met LabVIEW was dit minder problematisch om te leren dan het programmeren van een FPGA,
omdat LabVIEW een structuur aanhoud die meer lijkt op die van conventionele programmeertalen.
Het uitvoeren van een status check op de FPGA, en zonodig herstarten daar van is een onderdeel van de
beoogde verbeteringen die helaas buiten de scope van het project gevallen is. Hoewel ik in de eerste
plaats wel verwacht had om hier ook aan te kunnen werken, is later toch gebleken dat de
werkzaamheden voor de andere verbeteringen dusdanig veel tijd in beslag zouden gaan nemen dat voor
dit onderdeel geen tijd meer beschikbaar zou zijn tijdens mijn stageperiode.
30
5.3 Vooruitzicht
Ik heb tijdens mijn stage bij het Nikhef veel geleerd, en heb ook werk gedaan waar het Nikhef baadt bij
heeft. Echter paste in het tijdsframe van mijn stage niet al het werk wat er nodig is voor de
aanpassingen die aan de software gedaan moeten worden. Daarom zal ik na mijn stageperiode nog
enkele weken bij het Nikhef in dienst blijven om ook de laatste aanpassingen door te voeren en te
zorgen dat er uiteindelijk een product aanwezig is waar het Nikhef mee vooruit kan.
Deze tijd zal voornamelijk gebruikt worden voor het in de bestaande gebruikersinterface implementeren
van de functionaliteiten die ik tijdens mijn stage gemaakt heb.
31
Bijlagen
A. Documentatie voor DLL
Compiling .dll from LabWindows/CVI
To compile the fpgaConfigApp as a .dll for use with LabView, the following steps are required:
1. Setting the target type to .dll: Build → Target type → Dynamic Link Library.
2. Add file include symbol for fpgaConfigApp.h: Build → Target settings → Exports → Change →
include file symbols → check fpgaConfigApp.h
In order to compile the .exe with the original functionality and user interface, set the target type back to
Executable in the Build menu.
Importing .dll as LabView library
Either in a new project, or directly in the project you want to use it, go to: Tools → Import → Shared
library (.dll)…
This will open the “Import shared library” wizard. From there you can choose to create a new VI or
update an existing one. In the next screen you can select the .dll (fpgaConfigApp.dll) and the header file
(fpgaConfigApp.h). The header file is selected automatically if it’s in the same directory as the DLL.
In the next window you can include extra paths and specify preprocessor definitions. This is usually not
needed.
The following window allows methods from the DLL to be imported into the LabView library. Functions
which cannot be selected here are usually callback functions. Only functions for which the prototype is
in the header file will be available.
The next windows will allow you to specify error handling options, names and directory where the
library will be stored as well as a few other settings. In most cases the default settings will work, even
though in the “Configure VI and Controls” window, changing the thread settings to “Run in any thread”
rather than “Run in UI thread” to avoid the LabView applications user interface from freezing when the
library routine is running.
After them import is done, the library can be used as any other LabView library.
The latest version of the .dll allows you to specify your path from LabVIEW as input to the VI.
32
Return codes
Return
code
0
Meaning
Possible reasons
FPGA code was successfully written to device.
No error.
HiSPARC box is not connected or not
receiving power.
Missing drivers or faulty hardware.
Driver error or hardware failure.
File is not where it’s expected or the
current user does not have sufficient
permissions to open it.
Corrupted or truncated .rbf file.
-1
No suitable USB device was found.
-2
-3
USB device could not be initialized.
Cannot set program clock.
-4
Could not open .rbf file.
-5
-6
Read error occurred in .rbf file.
Unable to set FPGA into configuration mode.
-7
No FPGA detected.
-8
Memory allocation error.
-9
FPGA configuration failed.
FPGA configuration appears successful, but
FPGA is not ready.
FPGA configuration was interrupted, file could
not be completely written.
Unknown fatal error occurred during FPGA
configuration.
-10
-11
-12
FPGA does not have power or hardware
is faulty.
Not enough free memory is available for
the application.
Write error or faulty hardware.
Corrupted or truncated .rbf file.
FPGA lost power during configuration or
corrupted or truncated .rbf file.
Reason for the error is unknown.
Adding methods to the DLL
DLL functions are the same as normal C functions. The only extra caveat is that the function prototypes
must be specified in the header file (fpgaConfigApp.h).
[Deprecated] Changing the default location for the RBF-file
In the LabWindows code, in fpgaConfigApp.c there is a #define used to specify the file location. (Line 47
in the current version.)
#define FILENAME "C:\\fpga\\rbf_files\\FPGA_v18_Final.rbf"
Note that directory separators (backslashes) need to be escaped with a backslash to prevent the
directory separators being interpreted as an escape character themselves. Practically this means that
the file and directory names will have double backslashes instead of single ones.
This setting is no longer used. The RBF location is specified as a parameter to the autoFill function.
33
B. Documentatie voor GPS bit
In this document you will find the technical details for capturing the GPS timing configuration data as it
was implemented as of June 2011.
Data stream
HiSPARC III unit
GPS chip
PC
LabView
application
FPGA
USB chip
USB driver
This diagram illustrates the data path. The data is first acquired from the GPS module, and sent
to the FPGA over an internal serial connection. The FPGA processes the data and parses out the
relevant configuration bits, which are passed on to the PC by means of a USB connection
between the two. From there the LabVIEW application handles the interpretation of the data
and acts accordingly.
GPS status message
The GPS board sends a one Pulse Per Second or PPS, containing several messages with various
data. The type of message is defined by the first three bytes of the message. In the case of the
configuration message, these bytes are 0x80, 0x8F and 0xAB. In this message, the 9 th byte is the
byte that contains the time configuration. The first two bits of this byte are the time setting (0
for GPS time, 1 for UTC time) and the PPS time setting (0 for GPS time, 1 for UTC time). Though
34
a mixed setting is a possibility, under normal circumstances, both these setting should be set to
either GPS or UTC time.
In the VHDL code, the extraction of the bits is done in the ‘GPS_STUFF’ block. The output signals
that carry the configuration values are ‘UTC_TIME’ and ‘UTC_PPS’.
35
C. Overzicht blokschema FPGA code
36
37
Download