stageverslag.md (54970B)
1 \clearpage 2 \thispagestyle{empty} 3 \null 4 \clearpage 5 \large 6 \vspace*{\fill} 7 | | | 8 | ---------------------: | ----------------------------- | 9 | **Titel** | \thetitle | 10 | **Plaats en Datum** | Assen, \today | 11 | | | 12 | **Auteur** | \theauthor | 13 | **Studentnummer** | 445455 | 14 | **E-mail** | [email protected] | 15 | | | 16 | **Bedrijf** | EVAbits | 17 | **Locatie** | Skagerak 26 | 18 | | 9723JR Groningen | 19 | **Bedrijfsbegeleider** | Jan Stegenga | 20 | | Erik Kallen | 21 | | | 22 | **Opleiding** | Software Engineering, HBO-ICT | 23 | **School** | Hanze Groningen | 24 | **Locatie** | Zernikeplein 11 | 25 | | 9747 AS Groningen | 26 | **Docentbegeleider** | Kobus Bijker | 27 | | Nienke van der Spek | 28 29 Copyright \copyright \the\year{} \theauthor 30 31 \normalsize 32 \newpage 33 \newpage 34 35 # Voorwoord {.unnumbered} 36 37 Voor u ligt het verantwoordingsverslag van mijn stage bij EVAbits, uitgevoerd gedurende semester 3.2 als onderdeel van de derdejaarsstage HBO-ICT aan de Hanze Groningen. Tijdens deze stage heb ik gewerkt aan de EVAjig, een innovatief product van EVAbits. EVAbits begon als een start-up in opdrachtprogrammering in Bedum en is inmiddels uitgegroeid tot een gevestigd bedrijf in Euvelgunne, Groningen. Sinds twee jaar werkt EVAbits aan de ontwikkeling van hun eigen product, de EVAjig. Dankzij mijn interesse en kennis in Embedded Programming heb ik EVAbits kunnen ondersteunen en een bijdrage kunnen leveren aan de EVAjig. 38 39 Dit verslag geeft een overzicht van mijn ervaringen en werkzaamheden gedurende de afgelopen twintig weken. Ik heb een leuke tijd gehad waarin ik mijn kennis heb kunnen verbreden en mezelf verder heb kunnen ontwikkelen. Mijn inzet en kennis werden bij EVAbits gewaardeerd, wat heeft geleid tot een werkcontract na afronding van mijn stage. Ik ben zeer dankbaar voor deze kans. 40 41 Graag wil ik mijn begeleider van de Hanze, Kobus Bijker, bedanken voor zijn ondersteuning en waardevolle feedback gedurende mijn stageperiode. 42 43 Assen, \today 44 45 Friedel Schön 46 47 # Samenvatting {.unnumbered} 48 49 De hoofdlijn van dit stageproject is werken met Field-Programmable Gate Arrays (FPGA's). FPGA's bieden op flexibele wijze een breed scala aan functies, daardoor zijn FPGA's geschikt voor complexe en flexibele toepassingen. In dit verslag zou dieper ingegaan worden op de werkwijze van FPGA's. EVAbits, een klein bedrijf gevestigd in Euvelgunne, Groningen, is gespecialiseerd in Embedded Engineering en Architectural Design. Het bedrijf heeft sinds twee jaar een eigen product ontwikkeld: de EVAjig, een testkast voor het testen van printplaatassemblages (PCBA's). 50 51 De EVAjig maakt het mogelijk verschillende PCBA's te testen zonder aanpassingen. Momenteel is de EVAjig gebaseerd op een microcontroller met beperkte communicatiemogelijkheden, wat resulteert in een beperkt aantal te testen PCBA's. EVAbits streeft ernaar dit probleem op te lossen door een FPGA te gebruiken. Daarom is de opdracht gegeven om een proof-of-concept te ontwikkelen. Om een probleem aan te pakken is het vereist om een uitgebreide fasering en planning te bespreken. 52 53 Tijdens de stage is er een onderzoek uitgevoerd met als hoofdvraag "_Wat zijn voor- en nadelen van communicatiemiddelen tussen FPGA en computer op basis van van snelheid, betrouwbaarheid en kosten?_". Een belangrijk aspect van dit project is het onderzoek naar het meest geschikte communicatieprotocol tussen de FPGA en de computer. De opdrachtgever vraagt specifiek naar de voor- en nadelen van verschillende communicatiemiddelen op het gebied van snelheid, betrouwbaarheid en kosten. Op basis van dit onderzoek zijn aanbevelingen geformuleerd voor toekomstige werkzaamheden. Uit dit onderzoek is gebleken dat het Serial Peripheral Interface (SPI) het meest geschikte protocol is voor de EVAjig, door de flexibiliteit en snelheid die dit protocol biedt. 54 55 # Begrippenlijst {.unnumbered} 56 57 - **Architecture Design**: Het ontwerpen van de structuur en organisatie van hardware of software systemen. 58 59 - **Baud**: De eenheid van symbolen per seconde in communicatie, gebruikt om de snelheid van dataoverdracht in asynchrone protocollen zoals UART te specificeren. 60 61 - **Clock-signaal**: Een elektrisch signaal dat de timing en snelheid van communicatie in een protocol bepaalt. 62 63 - **(Data-)bus**: Meerdere peripherals zijn parallel aangesloten aan de datalijnen en communiceren zo onderling of met de master. De bus kan verbreed worden, zonder de complexiteit te moeten verhogen. 64 65 - **(Data-)lijn** of **Signaal**: Een bekabeling van chip naar chip. 66 67 - **Datastructuur**: Een specifieke manier om gegevens te organiseren, te beheren en op te slaan zodat ze efficiënt kunnen worden gebruikt en gecommuniceerd. 68 69 - **Half-Duplex**: Er kan maar in een richting gecommuniceerd worden tegelijkertijd. 70 71 - **Full-Duplex**: Er kan tegelijk in twee richtingen gecommuniceerd worden. 72 73 - **Echo** of **Ping-Pong**: Een programma, die op een _ping_-request een _pong_-response terug geeft. Op deze manier is de connectie en snelheid te testen. 74 75 - **Efinix Titanium**: Een type FPGA geproduceerd door Efinix, bekend om zijn snelheid en energiezuinigheid. 76 77 - **Embedded Programming**: Het schrijven van software die direct op de hardware van een apparaat draait, vaak gebruikt in speciale hardware- en software-integraties. 78 79 - **EVAjig**: Een testapparaat van EVAbits ontworpen om het programmeren, instellen en testen van printplaatassemblages (PCBA) te vergemakkelijken. 80 81 - **Field-Programmable Gate Array (FPGA)**: Een type geïntegreerd circuit dat door de gebruiker geconfigureerd kan worden om specifieke taken uit te voeren. 82 83 - **Google’s Protobuffers (Protobuf)**: Een efficiënt en taalneutraal data-serialisatieformaat ontwikkeld door Google, gebruikt voor het uitwisselen van gestructureerde informatie tussen verschillende programma's en systemen. 84 85 - **Hardware Description Language (HDL)**: Een programmeertaal waarmee de configuraties en functies van de logische blokken binnen een FPGA worden beschreven. 86 87 - **Hot-swapping**: De mogelijkheid om componenten toe te voegen of te verwijderen uit een systeem zonder dat het systeem hoeft te worden uitgeschakeld of opnieuw opgestart. 88 89 - **Implementatie**: Het proces van het realiseren van een ontwerp of plan door middel van hardware of software. 90 91 - **Inter-Integrated-Circuit (\iic{})**: Een eenvoudige, goedkope bus-systeem protocol dat een master en een of meer slaves gebruikt voor communicatie, met twee lijnen: een voor data en een voor clock. 92 93 - **Master-Slave**: Een communicatieprincipe waarbij een master-apparaat controle heeft over de communicatie met één of meer slave-apparaten die reageren op de commando's van de master. 94 95 - **Microcontroller**: Een klein computer op een chip met een processor, geheugen, en invoer-/uitvoerpoorten, gebruikt voor specifieke taken in elektronische systemen. 96 97 - **Node**: Een individueel apparaat of punt in een netwerk of bus-systeem dat deelneemt aan de communicatie. 98 99 - **Open Source**: Een programma is opgebouwd met geschreven code (de broncode). Ontwikkelaars kunnen ervoor kiezen deze broncode voor iedereen publiek toegankelijk te maken, iedereen kan de broncode lezen en verbeteren. 100 101 - **Peripheral**: Een controller (of computer) bestaat uit meerdere peripherals, dit zijn chips of elementen die een functie toevoegen. Voorbeeld: de processor op een microcontroller, de UART-naar-USB chip op een computer. 102 103 - **Printplaatassemblages (PCBA)**: Een geassembleerde printplaat waarop verschillende elektronische componenten zijn bevestigd. 104 105 - **RISC-V**: Een open standaard instructieset architectuur (ISA) gebaseerd op de principes van verminderde instructieset computing (RISC). 106 107 - **Real-Time Operating System (RTOS)**: Een besturingssysteem ontworpen om applicaties te draaien die binnen strikte tijdslimieten moeten reageren op gebeurtenissen, vaak gebruikt in embedded systemen. 108 109 - **Request-Response**: Een gebruiker stuurt een verzoek (request) naar een server, de server stuurt een antwoord (response) naar de gebruiker. Voorbeeld: De gebruiker vraagt `hanze.nl` op (request), de webserver stuurt de gegevens van de website (response). 110 111 - **Serial Peripheral Interface (SPI)**: Een flexibel bus-systeem protocol met drie signalen: clock, MOSI (Master Out, Slave In), en MISO (Master In, Slave Out), plus een optionele Chip-Select lijn. 112 113 - **Synchrone Communicatie**: Zender en ontvanger zijn gesynchroniseerd door een gezamenlijke clock. Er wordt alleen op de klokslag data verzonden of ontvangen. 114 115 - **Asynchrone Communicatie**: Zender en ontvanger zijn niet gesynchroniseerd door een gezamenlijke clock. Data kan onafhankelijk van elkaar verzonden worden. 116 117 - **Universal Asynchronous Receiver/Transmitter (UART)**: Een asynchroon protocol voor communicatie tussen twee nodes, waarbij twee datalijnen (RX en TX) gebruikt worden zonder clock, met een gedefinieerde baud-snelheid. 118 119 - **Versiebeheer**: Met versiebeheer worden veranderingen in de geschreven software opgeslagen in vorm van een versie, daardoor is het mogelijk naar oudere versies te kijken. Een groot voordeel is het efficiënte samenwerken. 120 121 - **Zephyr OS**: Een open-source real-time operating system ontwikkeld voor embedded apparaten, bekend om zijn lichtgewicht, schaalbare en veilige ontwerp. 122 123 - \textoverline{CS}: Een lijn boven een signaal-naam betekent, dat deze active-low is. Een lijn, die actief is als het laag is getrokken. 124 125 \toc <!-- TABLE OF CONTENTS --> 126 127 # Hoofdstuk Inleiding 128 129 De opdrachtgever EVAbits is een klein bedrijf gevestigd in Euvelgunne te Groningen. Het bedrijf is gespecialiseerd in het schrijven en onderhouden van software en firmware in de kader van Embedded Programming en Architecture Design. Het bedrijf is begonnen met opdrachtprogrammering, maar is ook sinds een aantal jaren bezig met hun eigen product: de EVAjig. 130 131 De EVAjig is een testapparaat dat speciaal is ontworpen om het proces van programmeren, instellen en testen van printplaatassemblages (PCBA) te vergemakkelijken. Dit apparaat is uitgerust met een dashboard en een online portaal. Een van de opvallende kenmerken van de EVAjig is de mogelijkheid om cassettes met PCBA's gemakkelijk te verwisselen. Dit betekent dat je met hetzelfde apparaat verschillende soorten PCB kunt ontwerpen en testen zonder veel tijd kwijt te zijn aan het aanpassen van de testopstelling. 132 Daarnaast biedt de EVAjig een breed scala aan algemene functies, waardoor het een veelzijdig hulpmiddel is voor verschillende testbehoeften. Dit maakt het apparaat bijzonder geschikt voor bedrijven en technici die regelmatig met verschillende PCB ontwerpen werken. 133 134 Dit verantwoordingsverslag licht de opdracht toe en verantwoordt de gemaakte keuzes en de aanpak van de problemen. Het verslag begint met een toelichting op de EVAjig en het probleem dat de opdrachtgever ermee heeft. Vervolgens wordt het uitgevoerde onderzoek besproken in hoofdstuk vier, dit omvat een conclusie met aanbevelingen aan de opdrachtgever. In het vijfde hoofdstuk worden de HBO-I-competenties toegelicht en wordt beschreven hoe deze zijn bereikt. Er wordt afgesloten met 'Lessons Learned' met onderdelen die in de stage zijn geleerd of verbetert inclusief een korte zelfreflectie. 135 136 # Hoofdstuk Opdrachtbeschrijving 137 138 In dit hoofdstuk wordt de stageopdracht uitgebreid beschreven en is opgedeeld in verschillende secties om een duidelijk overzicht te bieden. Eerst wordt in de sectie 'Probleem' het huidige probleem van de opdrachtgever toegelicht. Vervolgens wordt in de sectie 'Oplossing' de voorgestelde oplossing van EVAbits uitgelegd. De sectie 'Doel' behandelt de doelstellingen van de opdracht, inclusief de gemaakte afspraken en de scope van het project. Daarna worden in de sectie 'Stakeholders' de betrokken personen voorgesteld die een rol spelen in dit project. Tot slot worden in de sectie 'Beroepsproducten' de te ontwikkelen beroepsproducten gepresenteerd. 139 140 ## Probleem 141 142 De EVAjig is geïmplementeerd door middel van een microcontroller. Een microcontroller is een klein circuit dat als een complete computer op een chip fungeert. Het bevat alle essentiële componenten die een computer nodig heeft om te werken, zoals een processor (de 'hersenen' van de computer), geheugen (om gegevens op te slaan), en invoer-/uitvoerpoorten (om te communiceren met andere apparaten). Microcontrollers worden vaak gebruikt in elektronische apparaten en systemen om specifieke taken uit te voeren. 143 Wat microcontrollers bijzonder maakt, is hun vermogen om geprogrammeerd te worden voor specifieke taken. Dit betekent dat je de microcontroller instructies kunt geven om bepaalde acties uit te voeren op basis van de informatie die het ontvangt van sensoren of andere invoerapparaten. Dit programmeerbare karakter maakt het flexibel en toepasbaar in een breed scala van toepassingen, van eenvoudige huishoudelijke apparaten tot complexe industriële machines. 144 145 Een nadeel van de huidige implementatie met een microcontroller is de beperkte flexibiliteit in communicatie, die vaak via externe chips wordt afgehandeld. Communicatieprotocollen werken op een hoge snelheid, vaak in de miljoenen bytes per second. Een microcontroller is niet snel genoeg om deze communicatie in software af te handelen en laat dit over aan een externe chip. Op de microcontroller is de processor vast aan de communicatie chipjes gekoppeld, zonder de mogelijkheid iets aan deze constructie te veranderen. Meestal is dit geen probleem voor de applicatie van een microcontroller, maar voor de EVAjig is dit een beperkend criteria door de brede schaal aan PCBA’s die moeten getest kunnen worden. 146 147 ## Oplossing 148 149 EVAbits heeft dit probleem herkent en heeft een opdracht begonnen om deze beperkingen te verhelpen. Het bedrijf heeft kennis in field-programmable gate arrays (FPGA). Een FPGA is een type circuit door de gebruiker kan worden geconfigureerd om specifieke taken uit te voeren. Deze configuratie gebeurt door middel van het programmeren van logische blokken en verbindingsroutes binnen de FPGA. Hierdoor kan een FPGA worden aangepast aan een breed scala van toepassingen, van eenvoudige logische functies tot complexe digitale systemen. 150 151 De kern van een FPGA bestaat uit duizenden tot miljoenen programmeerbare logische blokken en een netwerk van interconnecties. Deze logische blokken kunnen worden geconfigureerd om elementaire functies zoals AND, OR en NOT-operaties uit te voeren. Door deze elementaire blokken te combineren kunnen complexere circuits gevormd worden. De interconnecties zorgen ervoor dat deze logische blokken op verschillende manieren met elkaar kunnen worden verbonden, afhankelijk van de vereisten van de toepassing. 152 153 Een van de grootste voordelen van een FPGA is zijn flexibiliteit. Omdat het apparaat kan worden geherprogrammeerd, kunnen ontwerpers hun hardwareontwerpen aanpassen en optimaliseren zonder dat nieuwe fysieke chips nodig zijn. Daarnaast kunnen FPGA's meerdere taken parallel uitvoeren, wat resulteert in hoge verwerkingssnelheden. Dit maakt ze ideaal voor gebruik in toepassingen zoals signaalverwerking, communicatiesystemen en complexe rekenintensieve taken. 154 155 In vergelijking met een microcontroller biedt een FPGA veel meer flexibiliteit. Waar een microcontroller vast gekoppeld is aan bepaalde communicatiechips, kan een FPGA deze functionaliteit emuleren door de hardware intern opnieuw te configureren. Dit betekent dat een FPGA verschillende soorten communicatieprotocollen kan nabootsen zonder de beperkingen van vooraf vastgestelde hardware. Hierdoor kan een FPGA meerdere functies en communicatieprotocollen tegelijkertijd afhandelen, wat ideaal is voor complexe en veelzijdige toepassingen. De configuraties binnen de FPGA worden beschreven in een Hardware Description Language (HDL), waarin signalen en primitieve logica’s worden gedefinieerd. 156 157 Voor deze specifieke oplossing heeft de opdrachtgever gekozen voor de Efinix Titanium FPGA. Efinix staat bekend om hun snelle en energiezuinige FPGA's, wat hen een geschikte keuze maakt voor de vereisten van de EVAjig. 158 159 ## Doel 160 161 Het doel van de opdrachtgever is om binnen twintig weken een proof-of-concept te implementeren voor de EVAjig, waarbij de huidige microcontroller gebaseerde implementatie wordt vergeleken met een nieuwe FPGA-gebaseerde oplossing. Deze proof-of-concept moet aantonen dat de FPGA-oplossing verbetering biedt in flexibiliteit en communicatiecapaciteit vergeleken met de huidige implementatie. 162 163 ## Onderzoek 164 165 De opdrachtgever vroeg om een onderzoek te doen over de FPGA. De concrete onderzoeksvraag is "_Wat zijn voor- en nadelen van communicatiemiddelen tussen FPGA en computer op basis van snelheid, betrouwbaarheid en kosten?_" 166 167 De huidige implementatie op de microcontroller, de software op de microcontroller, hoort bijna onveranderd op de FPGA-implementatie te kunnen draaien. Wel moet de software met de FPGA kunnen praten, dit vereist een vast communicatieprotocol tussen de software en de firmware architectuur. Er zijn vele communicatieprotocollen beschikbaar met elk hun eigen use-case. In dit verslag is onderzoek gedaan naar welk protocol het beste geschikt is voor communicatie tussen de firmware en de software op basis van snelheid, flexibiliteit en kosten. 168 169 ## Stakeholders 170 171 Bij de opdracht zijn meerdere personen betrokken, deze personen zijn als volgt 172 173 | Naam | Organisatie | Rol | 174 | ------------------- | --------------- | ------------------------------- | 175 | Jan Stegenga | EVAbits | Stagebegeleiding | 176 | Erik Kallen | EVAbits | Stagebegeleiding | 177 | Kobus Bijker | Hanzehogeschool | Stagebegeleiding / Beoordelaar | 178 | Nienke van der Spek | Hanzehogeschool | Beoordelaar Communicatie | 179 180 # Hoofdstuk Projectaanpak 181 182 ## Beroepsproducten 183 184 Concrete beroepsproducten die van EVAbits werden gevraagd zijn: 185 186 ### Demonstratie Zephyr OS op Efinix' Sapphire Core 187 188 Voor de huidige implementatie op de microcontroller maakt de opdrachtgever gebruik van Zephyr OS. Zephyr OS is een Real-Time Operating System (RTOS), speciaal ontworpen om applicaties te draaien waarbij het cruciaal is om binnen strikte tijdslimieten te reageren op gebeurtenissen. Dit type besturingssysteem wordt veel toegepast in embedded systemen, waar betrouwbare en tijdige reacties op externe signalen van essentieel belang zijn. 189 190 Zephyr OS is een open-source RTOS dat is geoptimaliseerd voor gebruik op embedded apparaten. Het systeem is ontworpen om lichtgewicht, schaalbaar en veilig te zijn, waardoor het geschikt is voor een breed scala aan toepassingen, van simpele sensoren tot complexe industriële besturingssystemen. 191 192 Efinix is een fabrikant van FPGA's en biedt een reeks handige core-modules aan. De Sapphire Core, een processor logicamodule geoptimaliseerd voor hun FPGA, maakt het mogelijk om minder primitieve operaties binnen Zephyr OS uit te voeren. Deze core maakt gebruik van de RISC-V architectuur. Om verwarring met Zephyr OS te voorkomen, wordt deze core ook wel aangeduid als de RISC-V core. 193 194 #### Requirements {.unnumbered} 195 196 - Maak een programma, die een LED laat knipperen op Zephyr OS, die op de RISC-V Core kan draaien met gebruik van de Efinix Handleidingen. Het aansturen werkt direct op de GPIO-bus van de RISC-V Core. 197 198 ### Demonstratie communicatie tussen de FPGA en een computer via EVAbus (RISC-V Core) 199 200 EVAbits heeft hun eigen datastructuur bedacht voor het effectieve aansturen van de EVAjig, dit is geïmplementeerd met behulp van Google’s Protobuffers (Protobuf). Protobuf is een efficiënt en taalneutraal data-serialisatieformaat ontwikkeld door Google, het wordt gebruikt voor het uitwisselen van gestructureerde informatie tussen verschillende programma's en systemen. Verder maakt het gebruik van een eenvoudig en uitgebreid berichtformaat om data in een compacte, snelle en makkelijk te lezen manier te coderen en decoderen. 201 202 #### Requirements {.unnumbered} 203 204 - Maak een basic echo-programma op Zephyr OS, die een dummy-response terug geeft aan de computer. 205 206 ### Demonstratie communicatie tussen de FPGA en RISC-V Core (VHDL) 207 208 Vervolgens moet er gecommuniceerd worden tussen de primitieve FPGA Core en de RISC-V Core om data zoals configuratie uit te wisselen. Dit moet van beide kanten ontwikkeld worden. 209 210 #### Requirements {.unnumbered} 211 212 - Maak een programma, dat een LED laat knipperen op Zephyr OS. Laat Zephyr OS communiceren met de FPGA-implementatie om de LED te laten knipperen. 213 214 ### Implementatie van een driver in Zephyr OS voor het aansturen van de FPGA 215 216 Zephyr OS is modulair ontwikkeld om een brede schaal aan microcontrollers te ondersteunen, hiervoor zijn verschillende drivers beschikbaar. De FPGA hoort zelf geconfigureerd te worden, hiervoor is geen driver beschikbaar en deze dient zelf ontwikkeld te worden. EVAbits wil graag dat er een driver voor Zephyr OS wordt geschreven om makkelijk de FPGA aan te sturen. 217 218 #### Requirement {.unnumbered} 219 220 - Met de standaard-interface van Zephyr OS moet een peripheral kunnen worden aangestuurd. 221 - De driver moet de conventions van Zephyr volgen. 222 223 ### Onderzoeksrapport communicatieprotocollen 224 225 De communicatie tussen de FPGA en de RISC-V Core kan op verschillende manieren geïmplementeerd worden. Hiervoor zijn vele protocollen beschikbaar en toepasbaar. De opdrachtgever wil graag een vergelijking hebben tussen deze protocollen om beter te kunnen kiezen welke voor de EVAjig het meest geschikt is. 226 227 #### Requirements 228 229 - Het onderzoeksrapport wordt onderdeel van het verantwoordingsverslag. 230 - Er moeten volgende protocollen vergeleken worden: SPI, \iic{}, UART, APB 231 232 ## Planning 233 234 Er werd meegewerkt aan de Agile werkwijze van de opdrachtgever. Bij EVAbits vindt aan het begin van elke dag een 'to do'-meeting plaats, waarin wordt besproken wie welke taak gaat uitvoeren en of er problemen zijn. Aan het einde van de dag wordt een 'recap' gedaan, hierbij wordt gekeken naar welke werkzaamheden zijn uitgevoerd op deze dag. 235 236 ### Fases 237 238 Aan het begin van de stage werden vijf fases gedefinieerd: 239 240 | Fase | Betekenis | 241 | ------------ | -------------------------------------------------------------------------------- | 242 | Oriëntatie | Opdracht onderzoeken, een planning maken en oriënteren in het bedrijf | 243 | Ontwerp | Eerste ontwerpen voor de producten maken, details onderzoeken | 244 | Onderzoek | Communicatieprotocollen onderzoeken, werkwijze begrijpen | 245 | Ontwikkeling | Producten ontwikkelen | 246 | Afronding | Producten en de stage afronden, verslag afronden en eindpresentatie voorbereiden | 247 248 ### Werkzaamheden 249 250 In de eerste weken werd kennis gemaakt met de opdracht en de elementen erom heen. Vele dingen waren onbekend en niet behandeld gedurende de opleiding, deze onderwerpen moesten onderzocht worden. Dit is gedaan door uitgebreid onderzoek te voeren door middel van het internet en door gebruik te maken van de kennis binnen het team. Een onderwerp dat vooral veel aandacht opeiste is het concept _Zephyr OS_ en de tooling en ontwikkeling van de FPGA. 251 252 | Week | Fase | Werkzaamheid | 253 | ---: | ----------------- | ------------------------------------------------------------------------------- | 254 | 7 | Oriëntatie | Stageplanning geschreven, Project gedefinieerd | 255 | 8 | Oriëntatie | Onderzoek Zephyr OS | 256 | 9 | Oriëntatie | Onderzoek FPGA | 257 | 10 | Oriëntatie | Onderzoek FPGA (Efinix Tooling) | 258 | 11 | Ontwerp | Combineren FPGA en Zephyr OS | 259 | 12 | Ontwerp | Communicatie FPGA en Computer (UART) | 260 | 13 | Ontwerp | Onderzoek huidige implementatie IO-module en EVAbus | 261 | 14 | Ontwerp | Communicatie FPGA en Zephyr OS (UART) - Knipperende LED | 262 | 15 | Ontwerp | Onderzoek Zephyr OS Internals (hoe werken drivers? hoe worden deze geschreven?) | 263 | 16 | Ontwerp | Schrijven UART driver voor Zephyr OS | 264 | 17 | Ontwerp | Implementatie EVAbus via UART | 265 | 18 | Onderzoek | Onderzoek Communicatieprotocollen | 266 | 19 | Onderzoek | Onderzoek Communicatieprotocollen | 267 | 20 | Ontwikkeling | Communicatie FPGA en Zephyr OS (APB) | 268 | 21 | Ontwikkeling | Communicatie FPGA en Zephyr OS (SPI) | 269 | 22 | Ontwikkeling | Communicatie FPGA en Zephyr OS (SPI) | 270 | | Afronding | Conceptverslag afmaken | 271 | 23 | Afronding | Communicatie FPGA en Zephyr OS (SPI) | 272 | 24 | Afronding | Afmaken Verantwoordingsverslag | 273 | 25 | Afronding | Afmaken Verantwoordingsverslag en Eindpresentatie | 274 | 26 | Afronding | Eindpresentatie | 275 276 # Hoofdstuk Onderzoek 277 278 Dit hoofdstuk gaat over het onderzoek: _Wat zijn voor- en nadelen van communicatiemiddelen tussen FPGA en computer op basis van snelheid, betrouwbaarheid en kosten?_ 279 280 Eerst worden verschillende protocollen toegelicht en vergeleken. Daaruit volgt een conclusie. 281 282 ## Protocollen 283 284 In dit hoofdstuk worden verschillende protocollen toegelicht. Een protocol is een afspraak tussen apparaten hoe gecommuniceerd wordt. Een voorbeeld is een spreektaal, er is afgesproken hoe bepaalde dingen worden genoemd en dat er regels zijn in de taal. Als twee personen er niet over eens zijn, welke taal wordt gesproken of hoe zij de taal spreken, kunnen zij niet met elkaar communiceren. In communicatieprotocollen is gedefinieerd welke signalen (draadjes/lijnen) er zijn en hoe deze moeten worden aangestuurd; wanneer gaat stroom over welk signaal, hoeveel tijd zit er tussen, etc. 285 286 Protocollen hebben meestal een clock-signaal die de snelheid van communicatie bepaald. Bijvoorbeeld wanneer het signaal stijgend is (oftewel van een lage waarde naar een hoge waarde gaat) worden de data signalen op een bepaalde manier uitgelezen. Als het signaal van een hoge waarde naar een lage waarde gaat, is het een vallend signaal. 287 288 In de volgende beschrijvingen worden VDD en GND niet genoemd of meegeteld. VDD is de stroomvoering van desbetreffende chip en GND is de aarding van de chip. 289 290 Vele protocollen werken naar het bus- of master-slave principe. Bij een bus zijn meerdere apparaten, zoals chips en processoren, parallel aan de signalen aangesloten. Er is één master gedefinieerd, die controle heeft over het gebeuren op de bus en één of meerdere slaves die, op aanvraag van de master, kunnen lezen van de bus of schrijven op de bus. Een aangesloten chip zou voortaan *node* genoemd worden. 291 292 ### Inter-Integrated-Circuit Protocol 293 294 Inter-Integrated-Circuit (\iic{}) is één van de meest makkelijke protocollen. \iic{} is ontwikkeld in 1982 door Philips Semiconductor. [@i2c-ti, chap. 1.1] \iic{} is een bus-systeem, die minstens één master en één slave eist. \iic{} bestaat uit twee signalen, één voor de data die moet worden verstuurd en één voor de clock. [@i2c-ti, chap. 2.1] 295 296 Elke node heeft een adres waarop het wordt aangestuurd. Er is alleen communicatie mogelijk tussen de master en een slave, het is niet mogelijk dat slaves onderling kunnen communiceren. Als standaard is 100kbit/s gedefinieerd als snelheid van communicatie, maar \iic{} is compatibel tot een snelheid van 3,4Mbit/s genoemd _high speed mode_. [@i2c-ti, chap. 1.2] 297 298 #### Bedrading {.unnumbered} 299 300 | Naam | Breedte | Functie | 301 | ------------------ | ------- | ---------------------------------------------------- | 302 | Serial Clock (SCL) | 1 | Dit is de clock voor de communicatie (master-driven) | 303 | Serial Data (SDA) | 1 | Over deze lijn worden command's of data gestuurd | 304 305 #### Voordelen {.unnumbered} 306 307 \iic{} heeft een eenvoudige bedrading en is makkelijker en goedkoper te implementeren. Ook is hot-swapping met \iic{} mogelijk, dat betekent dat slaves verwijderd of toegevoegd kunnen worden aan de bus zonder dat de bus uitgeschakeld of herstart moet worden. [@i2c-hotswap] 308 309 #### Nadelen {.unnumbered} 310 311 Doordat er maar één datalijn is, is \iic{} half-duplex. Half-duplex houdt in dat er of geschreven kan worden door de master of door een slave, er kan dus niet tegelijk gecommuniceerd worden. [@i2c-ti, chap. 2.1] Ook is \iic{} relatief langzaam in vergelijking met bv. SPI. [@i2c-ti, chap. 1.2; @spi-silabs] 312 313 ### Universal Asynchronous Receiver/Transmitter 314 315 Universal Asynchronous Receiver/Transmitter (UART) is een asynchroon, full-duplex protocol, dus er kan onafhankelijk tegelijk geschreven en gelezen worden. In tegenstelling tot de bovenstaande protocollen is UART geen bus-protocol en werkt deze alleen tussen twee nodes (point-to-point). UART heeft twee datalijnen: RX en TX, RX staat voor _Receive Text_ en TX staat voor _Transmit Text_ en heeft geen clock. Er is niet gedefinieerd welke richting RX of TX data verstuurd door evenwaardige aard van nodes. Soms moet RX en TX gedraaid worden in de bedrading (één lijn van RX naar TX en één lijn van TX naar RX). Door beide nodes wordt een clock-snelheid gedefinieerd, deze wordt _Baud_ genoemd. Hierbij wordt de data simpelweg geschreven met de gedefinieerde snelheid inclusief een start- en stop-bit en optioneel een parity-bit voor fout-detectie. 316 317 #### Bedrading {.unnumbered} 318 319 | Naam | Breedte | Functie | 320 | ---- | ------- | ---------------------------------------------- | 321 | RX | 1 | Op deze lijn wordt data verzonden of ontvangen | 322 | TX | 1 | Op deze lijn wordt data verzonden of ontvangen | 323 324 #### Voordelen {.unnumbered} 325 326 Zoals bij \iic{} heeft UART een eenvoudige bedrading, het is dus goedkoop te implementeren. Doordat het asynchroon is zijn beide nodes evenwaardig en is het niet vereist om één node als master te definiëren. 327 328 #### Nadelen {.unnumbered} 329 330 Doordat UART een point-to-point connectie is, is het niet geschikt voor meerdere nodes. Als er gecommuniceerd moet worden naar meerdere nodes moeten er onderling UART-signals geplaatst worden. Door de asynchrone aard van UART, zou UART onstabiel worden bij hoge snelheden en dit resulteert in een verlaagde maximale snelheid. 331 332 ### Serial Peripheral Interface 333 334 Het Serial Peripheral Interface (SPI) protocol is een bus-protocol dat, in vergelijking met zowel Inter-Integrated Circuit (I2C) als Universal Asynchronous Receiver/Transmitter (UART), complexer en flexibeler is. SPI maakt gebruik van drie hoofd-signalen: een clock, geleverd door de master, een MOSI-signaal (Master Out, Slave In) om data naar een slave te sturen, en een MISO-signaal (Master In, Slave Out) om data vanuit een slave naar de master te sturen. Daarnaast is er een optionele Chip-Select lijn om eenvoudig een specifieke node te selecteren.[@spi-ti, chap. 2.2] 335 336 #### Bedrading {.unnumbered} 337 338 | Naam | Breedte | Functie | 339 | ------------------------------- | ------------- | ---------------------------------------------------------------------------- | 340 | Serial Clock (SCLK) | 1 | Dit is de clock voor de communicatie (master-driven) | 341 | Master-Out Slave-In (MOSI) | 1 | Data wordt verstuurd door de master naar de slaves | 342 | Master-In Slave-Out (MISO) | 1 | Data wordt verstuurd door een slave naar de master | 343 | Chip Select (\textoverline{CS}) | n peripherals | Naar elke peripheral gaat een clip-select om te bepalen, wie geadresseerd is | 344 345 #### Voordelen {.unnumbered} 346 347 Een groot voordeel van SPI is de snelheid. SPI is niet gebonden aan een gedefinieerde snelheid en kan zo snel mogelijk communiceren. Ook is SPI full-duplex, dus is het zeer efficiënt bij een hoeveelheid data in beide richtingen. De implementatie is heel flexibel en geeft vrijheid voor verschillende toepassingen. Doordat er een gezamenlijke clock is, is SPI betrouwbaar bij hoge snelheden ten opzichte van UART. 348 349 #### Nadelen {.unnumbered} 350 351 Doordat SPI full-duplex ondersteunt, is de bedrading complexer dan bij \iic{} of UART, dit is nadelig omdat het implementeren moeilijker en duurder is. SPI vereist vier lijnen, niet slechts twee lijnen zoals bij de eerder genoemde protocollen. Ook ondersteund SPI maar één master, die het clock-signaal maakt, daardoor is het moeilijk om verschillende peripherals aan te sluiten. \iic{} ondersteund een bus-systeem, dus er kan een reeks nodes aangesloten worden zonder de complexiteit te moeten verhogen; SPI maakt gebruikt van de chip-select lijn, waardoor het niet mogelijk is een simpel bus te maken. 352 353 Ten opzichte van UART heeft SPI geen standaard manier om fouten te detecteren, dit moet door de ontwikkelaar handmatig geïmplementeerd worden, wat de complexiteit kan verhogen. 354 355 ### Advanced Peripheral Bus 356 357 De Advanced Peripheral Bus (APB) is een onderdeel van de Advanced Microcontroller Bus Architecture (AMBA). AMBA is een specificatie voor communicatie tussen peripherals. APB is gedesignd voor lage datahoeveelheden en een simpel interface. [@apb-arm chap. 1.1] ABP is een synchrone, full-duplex communicatieprotocol. 358 359 #### Bedrading {.unnumbered} 360 361 | Naam [@apb-arm table 2.1] | Breedte | Functie | 362 | ------------------------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | 363 | PCLK | 1 | Dit is de clock voor de communicatie, kan apart gegenereed worden | 364 | \textoverline{PRESETn} | 1 | Hiermee kan elke peripheral gereset worden naar een bekende staat | 365 | PADDR | adres | Aansturing adresbus | 366 | PPROT | 3 | Beschermingstype, in hoeverre de data moet beschermd zijn | 367 | PNSE | 1 | Uitbreiding naar beschermingstype | 368 | PSELx | 1 | De aanvrager genereert een PSELx-signaal voor elke afhandelaar. PSELx geeft aan dat de afhandelaar is geselecteerd en dat een gegevensoverdracht vereist is | 369 | PENABLE | 1 | PENABLE geeft de tweede en volgende cycli van een communicatie aan | 370 | PWRITE | 1 | PWRITE geeft de schrijfrichting aan | 371 | PWDATA | data | Geeft de data aan, die wordt geschreven | 372 | PSTRB | data/8 | PSTRB geeft aan welke bytelanes moeten worden bijgewerkt tijdens een schrijftransactie. Er is één schrijfstrobe voor elke 8 bits van de schrijfgegevensbus | 373 | PREADY | 1 | Gereed. PREADY wordt gebruikt om communicatie door de afhandelaar te verlengen. | 374 | PRDATA | data | In deze bus wordt data gelezen | 375 | PSLVERR | 0-1 | Deze geeft aan, als er een fout is gevonden | 376 | PWAKEUP | 1 | Deze geeft aan, dat er iets wordt gedaan op de bus | 377 | PAUSER | u_request | Gebruikersaanvraagattribuut | 378 | PWUSER | u_data | Gebruikersschrijfgegevensattribuut | 379 | PRUSER | u_data | Gebruikersleesgegevensattribuut | 380 | PBUSER | u_response | Gebruikersreactieattribuut | 381 382 #### Voordelen {.unnumbered} 383 384 APB heeft meerdere voordelen ten opzichte van bovengenoemde protocollen. APB ondersteunt parallele communicatie, er kunnen dus meerdere bits tegelijk worden verstuurd. De andere protocollen zijn puur serieel, dat betekent dat data bit-per-bit wordt verstuurd. Door de adres-architectuur is het eenvoudig om verschillende peripherals aan te spreken aan de bus, met SPI moet er een chip-select naar elke peripheral leggen om de zelfde uitkomst te behalen, en bij \iic{} zou dit handmatig moeten worden geïmplementeerd. 385 386 #### Nadelen {.unnumbered} 387 388 Ten opzichte van \iic{}, SPI en UART is APB erg complex. Doordat parallel data wordt verstuurd, moeten er vele lijnen worden aangesloten. Daardoor is APB meer geschikt voor een bus intern, in bijvoorbeeld de FPGA, dan voor communicatie extern van chip naar chip. En afsluitend is APB veel energie nodig, door de hoeveelheid lijnen met een lagere kloksnelheid en dus een lagere datasnelheid. 389 390 Een nadeel specifiek voor de Efinix FPGA is, dat de APB slecht gedocumenteerd staat en lastig te implementeren is. Verder is er ook niet veel informatie beschikbaar om een driver te ontwikkelen. Tijdens het onderzoek is het daardoor dus ook niet gelukt APB te draaien op de FPGA van de opdrachtgever. 391 392 ## Toepassing op de EVAjig 393 394 \tikzset{ 395 block/.style={rectangle, rounded corners, minimum width=2cm, minimum height=1cm, text centered, draw=black, fill=green!30}, 396 line/.style={draw, -{Latex[length=3mm,width=2mm]}} 397 } 398 399 \begin{tikzpicture}[align=center,node distance=2cm] 400 401 % Nodes 402 \node (computer) [block] {Computer}; 403 \node (fpga) [block, below of=computer] {Soft Core op FPGA}; 404 \node (fpga_hardware) [block, below of=fpga] {FPGA Hardware}; 405 \node (pcb0) [block, below right=1cm and 2cm of fpga_hardware] {PCB}; 406 \node (pcb1) [block, right=2cm of fpga_hardware] {PCB}; 407 \node (pcb2) [block, above right=1cm and 2cm of fpga_hardware] {PCB}; 408 409 % Arrows 410 \draw [line] (computer) -- node[right]{via USB} (fpga); 411 \draw [line] (fpga) -- node[right]{via SPI} (fpga_hardware); 412 \draw [line] (fpga_hardware) -- node[above]{via SPI} (pcb0); 413 \draw [line] (fpga_hardware) -- node[above]{via \iic{}} (pcb1); 414 \draw [line] (fpga_hardware) -- node[below]{via UART} (pcb2); 415 416 \end{tikzpicture} 417 418 In de bovenstaande graaf wordt de communicatiestructuur binnen het systeem geïllustreerd. Het systeem omvat verschillende componenten die onderling communiceren om gegevens en commando's uit te wisselen. De componenten en communicatiepaden zijn als volgt: 419 420 - Computer: Dit fungeert als de bron van gegevens of commando's. 421 - Soft Core op FPGA: Dit is een verwerkingsunit die op een FPGA draait. 422 - FPGA Hardware: Fysieke hardwarecomponenten die worden gesimuleerd door de FPGA. 423 424 Verschillende PCB's worden getoond als bestemmingen voor gegevens of commando's vanuit de FPGA Hardware: 425 426 - PCB0: Ontvangt gegevens via het SPI (Serial Peripheral Interface) protocol. 427 - PCB1: Ontvangt gegevens via het I2C protocol. 428 - PCB2: Ontvangt gegevens via het UART protocol. 429 430 De communicatiepaden worden als volgt weergegeven: 431 432 - Computer naar Soft Core op FPGA: Gegevens of commando's worden via USB verzonden. 433 - Soft Core op FPGA naar FPGA Hardware: Communicatie vindt plaats via het SPI protocol. 434 - FPGA Hardware naar PCBs: De FPGA Hardware communiceert met de verschillende PCB's via hun respectievelijke communicatieprotocollen. 435 436 Deze diagram illustreert de complexe communicatiestructuur binnen het systeem, waarbij verschillende protocollen worden gebruikt om de juiste overdracht van gegevens te waarborgen. 437 438 ## Vergelijking van SPI, I2C en UART 439 440 Hieronder is een tabel opgenomen waarin de drie communicatieprotocollen SPI, I2C en UART worden vergeleken op verschillende criteria: 441 442 \small 443 | Criteria | SPI (Serial Peripheral Interface) | I2C (Inter-Integrated Circuit) | UART (Universal Asynchronous Receiver-Transmitter) | APB (Advanced Peripheral Bus) | 444 | --------------------- | ------------------------------------------------ | ----------------------------------------------- | --------------------------------------------------------- | ----------------------------------------------- | 445 | **Protocol Type** | Synchroon or Asynchroon | Synchroon | Asynchroon | Asynchroon, Parallel | 446 | **Complexiteit** | 3 (MOSI, MISO, SCK) + optional CS | 2 (SDA, SCL) | 2 (TX, RX) | Hoog | 447 | **Clock Signal** | Ja (master-driven) | Ja (master-driven) | Nee | Ja (extern) | 448 | **Data Snelheid** | tot tientallen Mbps | tot 3.4 Mbps | max. ~1 Mbps voor standaard UART | tot enkele tientallen Mbps | 449 | **Multi-Master** | Nee | Ja | Nee | Nee | 450 | **Multi-Slave** | Ja (met aparte CS lijnen per slave) | Ja (adressering) | Nee (point-to-point) | Ja | 451 | **Foutdetectie** | Geen ingebouwde foutdetectie | Basis (ACK/NACK) | Basis (pariteitsbit) | Ja (optioneel) | 452 | **Bus** | Nee | Ja | Nee | Ja | 453 | **Kosten** | Matig (extra lijnen en complexiteit) | Laag (weinig lijnen, eenvoudiger) | Laag (weinig lijnen, eenvoudig) | Hoog (vele datalijnen) | 454 | **Energiekosten** | Hoog (door continue clock) | Laag tot matig (lage complexiteit, bus-systeem) | Laag (eenvoudig en lage snelheid) | Hoog (parallele communicatie) | 455 | **Geschikt voor** | Hoge snelheid, korte afstand, en meerdere slaves | Lange afstand, meerdere masters/slaves | Eenvoudige, lange afstand, en point-to-point verbindingen | Korte afstand, veel data, onderling peripherals | 456 \normalsize 457 458 ### Conclusie 459 460 Tijdens de stage is uitgebreid onderzoek uitgevoerd naar de voor- en nadelen van verschillende communicatieprotocollen. Dit protocol zou dienen als communicatie tussen FPGA en de soft-core op de FPGA op de EVAjig. Onderzocht zijn de protocollen \iic{}, UART en SPI, met elk verschillende kenmerken en beperkingen. 461 462 \iic{} heeft een eenvoudige bedrading en is flexibel met de mogelijkheid om meerdere peripherals aan een bus aan te sluiten. Wel is \iic{} beperkt door een lagere snelheid en half-duplex. 463 464 UART is ook eenvoudig te bedraden en flexibel te gebruiken, wel is UART ongeschikt voor het communiceren met meerdere peripherals. Het is een asynchroon protocol, wat het moeilijk maakt om data op een hoge snelheid te versturen. 465 466 SPI bied wel een hoge snelheid met full-duplex communicatie, maar wel met de consequentie dat de complexiteit relatief hoog is. Ook is SPI niet geschikt voor bus-systemen, doordat er een chip-select lijn naar elke node moet gaan. 467 468 APB is het meest complexe protocol, wel is deze goed geschikt voor de FPGA door middel van snelheid en flexibiliteit. In het onderzoek is het protocol geanalyseerd en geïmplementeerd, maar door een gebrek aan documentatie is het helaas niet gelukt om deze verder uit te voeren. In overleg met de opdrachtgever is een alternatief gevonden. 469 470 Op basis van dit onderzoek is theoretisch bekeken, welk protocol het meest geschikt is voor de EVAjig. Gezien dat het gekozen protocol de bottleneck zou zijn is snelheid een prioriteit. Ook is een bus-mogelijkheid niet vereist, omdat er slechts tussen twee nodes (de FPGA en de soft-core) gecommuniceerd wordt. SPI blijkt het meest geschikte communicatieprotocol te zijn voor de EVAjig, het biedt de juiste snelheid en flexibiliteit. Doordat alles op de FPGA draait en door de Hardware Description Language wordt beschreven is complexiteit hierbij geen probleem. 471 472 ### Aanbevelingen 473 474 Op basis van de conclusies van dit onderzoek, zijn er volgende aanbevelingen opgesteld om de communicatie op de EVAjig te optimaliseren: 475 476 - **Integratie van SPI in de FPGA-architectuur**: Het wordt aanbevolen om de FPGA te ontwikkelen met het SPI-protocol, hierbij is het eenvoudig om de bestaande hardware clock te gebruiken en dus de FPGA-kant de master te maken. Dit biedt maximale flexibiliteit in communicatie met verschillende apparaten en systemen. 477 - **Ontwikkeling van een SPI-driver voor Zephyr OS**: Efinix biedt geen SPI-driver aan voor Zephyr OS. Om de integratie van SPI eenvoudig te laten verlopen, moet er een aangepaste SPI-driver worden ontwikkeld voor Zephyr OS. Op basis van de geleverde driver van Efinix en de handleidingen kan de driver voor Zephyr OS ontwikkelt worden. Het is belangrijk om de driver goed te documenteren, zowel voor de gebruiker, maar ook voor de ontwikkelaar om het gebruik eenvoudig te maken. 478 - **Optimalisatie van communicatieprotocol**: Door de aard van de FPGA, kan er een hoge datasnelheid toegepast worden. Er moet een test gemaakt worden met meerderde kloksnelheden, om de meest geschikte snelheid te vinden. De snelheid bepaald ook de betrouwbaarheid van de communicatie. 479 - **Optimalisatie door APB**: APB blijkt een goed geschikt protocol te zijn voor de FPGA, wel is er nog een gebrek aan documentatie in de Efinix' handleidingen. Er wordt aanbevolen om dieper onderzoek naar de werkwijze te doen van APB in plaats van SPI. 480 481 Door deze aanbevelingen kan EVAbits de functionaliteit van de EVAjig verbeteren, als er gebruik gemaakt wordt van een FPGA. 482 483 # Hoofdstuk HBO-I competenties 484 485 Tijdens de stageperiode zijn er planningen gemaakt om de werkzaamheden gestructureerd aan te pakken. Dit hoofdstuk beschrijft hoe de HBO-I competenties zijn toegepast en ontwikkeld gedurende deze periode. 486 487 ## Onderzoeken 488 489 In de oriëntatie- en onderzoekfase werd uitgebreid onderzoek verricht naar de meest geschikte communicatieprotocollen voor de toepassing op de FPGA. Dit omvatte het vergelijken van de snelheid, betrouwbaarheid en kosten van verschillende protocollen zoals SPI, UART, \iic{} en APB. Daarnaast werd onderzocht hoe de bestaande microcontroller-gebaseerde implementatie kon worden overgezet naar een FPGA-implementatie. 490 491 ## Projectmatig Werken 492 493 Bij de opdrachtgever is een agile werkwijze gebruikt, waarbij iteratieve sessies hielpen om de status in de gaten te houden en aan te passen waar nodig. Aan het begin van de stage werd een duidelijke fasering gedefinieerd, die als leidraad diende voor het gehele project. Dit gestructureerde proces zorgde voor een overzichtelijke en efficiënte werkwijze, waarbij elke fase van het project zorgvuldig werd gepland en uitgevoerd. Bij het onderzoek zijn problemen opgekomen betreffend APB, deze problemen zijn projectmatig en in overleg met de opdrachtgever opgelost. 494 495 ## Analyseren 496 497 Een grondige analyse van de huidige implementatie van het systeem bracht diverse verbeterpunten aan het licht. Deze analyse omvatte het bekijken van de beperkingen en de mogelijkheden voor optimalisatie van de bestaande microcontroller-oplossing. De resultaten van deze analyse werden gebruikt om de nieuwe FPGA-implementatie te verbeteren, met als doel de functionaliteit en efficiëntie te verhogen. De protocollen werden geanalyseerd om het meest geschikte protocol te gebruiken. 498 499 ## Ontwerpen 500 501 Op basis van de uitslag uit de analysefase werden nieuwe implementaties ontworpen voor de FPGA. Het ontwerpen van deze nieuwe configuraties vereiste een diepgaand begrip van de FPGA-architectuur en de specificaties van de te gebruiken communicatieprotocollen. De ontwerpactiviteiten zorgden ervoor dat de nieuwe oplossing zowel flexibel als efficiënt was, met verbeterde communicatiecapaciteiten. 502 503 ## Realiseren 504 505 De nieuwe ontwerpen werden vervolgens geïmplementeerd en getest op de FPGA om de functionaliteit te verifiëren. Deze testfase was cruciaal om te bevestigen dat de theoretische ontwerpen in de praktijk werkten zoals gepland. Eventuele problemen die tijdens de tests naar voren kwamen, werden geanalyseerd en opgelost. 506 507 ## Adviseren 508 509 Op basis van de nieuwe implementatie werden aanbevelingen gedaan voor verdere optimalisaties en verbeterpunten. Deze aanbevelingen omvatten suggesties voor toekomstige verbeteringen en uitbreidingen van de EVAjig. Door deze aanbevelingen kon EVAbits verder bouwen op de behaalde resultaten en de ontwikkeling van hun product continu verbeteren. 510 511 ## Schriftelijke Vaardigheden 512 513 Gedurende de stage werden diverse documentaties opgesteld, waaronder technische documenten en dit verantwoordingsverslag. Deze documenten dienden als waardevolle hulpmiddelen voor zowel de opdrachtgever als de Hanze. De geschreven stukken werden zorgvuldig samengesteld om de voortgang, bevindingen en aanbevelingen van het project helder en gedetailleerd weer te geven. Deze schriftelijke vaardigheden waren essentieel voor de communicatie en documentatie van het project. 514 515 # Hoofdstuk Lessons Learned 516 517 Tijdens mijn stage bij EVAbits heb ik veel geleerd over verschillende technieken en professionele en persoonlijke ontwikkeling. Ik zou in dit hoofdstuk dieper op deze punten ingaan. 518 519 ## Technische Vaardigheden 520 521 - **Diepgaande kennis van FPGA's** 522 Gedurende mijn stage heb ik uitgebreide ervaring opgedaan met FPGA's, met name de RISC-V Core van Efinix. Het ontwikkelen van schema's met gebruik van een Hardware Description Language was een uitdaging zowel het tooling om de FPGA heen. 523 524 - **Real-Time Operating Systems (RTOS)** 525 Het werken met Zephyr OS heeft me waardevolle ervaring gegeven in het gebruik van een RTOS voor embedded systemen. Ik heb geleerd hoe ik effectieve drivers kan schrijven en hoe ik de voordelen van een RTOS kan benutten om efficiënte programma's te schrijven. 526 527 - **Communicatieprotocollen** 528 De vergelijking van verschillende communicatieprotocollen (SPI, \iic{}, UART) en de implementatie van de protocollen hebben mij veel over het innerlijk van computercommunicatie laten zien. Ik heb geleerd hoe ik de voor- en nadelen van elk protocol kan vergelijken om de beste oplossing voor een specifieke toepassing te kiezen. 529 530 ## Professionele Ontwikkeling 531 532 - **Problemen oplossen** 533 In het onderzoek ben ik vast gelopen bij het implementeren van APB. Ik heb geleerd om daarmee om te gaan en naar alternatieven te zoeken om dit probleem te verhelpen. 534 535 - **Onderzoek en Analyse** 536 Het onderzoeken en analyseren van de communicatieprotocollen heeft de vaardigheid versterkt. Ik heb geleerd een bestaande implementatie te begrijpen en te analyseren om deze theoretisch toe te passen op een andere casus. 537 538 - **Documentatie en Schriftelijke Vaardigheden** 539 Het opstellen van documentatie en rapporten, zoals dit stageverslag, heeft mijn schriftelijke vaardigheden verbeterd. Ik heb geleerd hoe ik technische informatie duidelijk en gestructureerd kan presenteren, wat essentieel is voor het delen van kennis. 540 541 ## Reflectie en Toekomstige Verbeteringen 542 543 Het werken binnen de ICT is nieuw geweest en verschilt erg van eerder gedaan werk. Ik heb belangrijke contacten gemaakt en dat er een baan is aangeboden bevestigd mijn plek in de Embedded Engineering-sector. 544 545 Kortom, de stage bij EVAbits was een waardevolle leerervaring die me goed heeft voorbereid op mijn toekomstige carrière. Ik ben dankbaar voor de kansen die ik heb gekregen en kijk uit naar de uitdagingen en kansen die voor me liggen. 546 547 # Literatuurlijst