Minor Embedded Systems: Practicum Opdracht 0

© Mathias Spiessens en Harry Broeders.

Deze pagina is bestemd voor studenten van de Haagse Hogeschool - Faculteit Technologie, Innovatie & Samenleving groep E-EMSYS = minor Embedded Systems.

Bij dit practicum werk je in lokaal D1.052.

Deze opdracht is de inleidende opdracht voor alle drie de practica die in de minor embedded systems gegeven worden:

Bij deze opdracht maak je kennis met het DE2-70 ontwikkelbord van Altera. Op dit bord bevindt zich onder andere een Cyclone II Field Programmable Gate Array (FPGA). In deze inleidende opdracht zul je leren hoe je een softcore microprocessor (de NiosII) kunt configureren en op deze FPGA kunt plaatsen. Tevens leer je hoe je vervolgens software voor deze softcore kunt ontwikkelen.

Je zult de eerste week van de minor met deze opdracht bezig zijn. 6 uur op het begeleide practicum en nog ongeveer 6 uur thuis. Let op! In week 2 ga je bij elk practicum werken aan specifiek bij dat practicum behorende opdrachten.

We maken bij deze opdracht gebruik van software van Altera. In lokaal D1.052 is deze software al geïnstalleerd. Je kunt ook een gratis versie van deze software thuis gebruiken: http://www.altera.com/products/software/quartus-ii/web-edition/qts-we-index.html. Let op: wij gebruiken in lokaal D1.052 de betaalde versie http://www.altera.com/products/software/quartus-ii/subscription-edition/qts-se-index.html je kunt thuis een 30 dagen probeerversie gebruiken. Op dit moment is in lokaal D1.052 Quartus versie 11.1sp1 geïnstalleerd.

Bij het Altera bord wordt een CD geleverd met heel veel informatie en voorbeelden. Deze CD kun je downloaden vanaf: http://www.terasic.com/downloads/cd-rom/de2_70/CD-ROM/DE2_70_SYSTEM_CD_v.1.4.0.rar. De User Manual van het bord kun je vinden op: http://www.terasic.com.tw/attachment/archive/226/DE2_70_User_manual_v109.pdf .

De bordjes zelf kun je vinden in de kluisjes EK1 t/m EK8. De sleutels van deze kluisjes zijn te vinden in lokaal D1.052. De DE2-70 borden worden gedeeld door meerdere practicumgroepen.

Opdracht 0a

We beginnen met het bekijken van een on-line course van Altera, genaamd "Designing with the Nios II Processor and SOPC Builder", waarin een overzicht wordt gegeven van de Altera development tools voor embedded systems. Met deze tools kan zowel de hardware als de software ontworpen en geïmplementeerd worden.

Deze course is te uitgebreid om helemaal door te nemen dus volg onderstaande handleiding.

Opdracht 0b

Breidt de hardware uit met een hardware driver voor het LCD display. Deze hardware driver kun je selecteren in SOPC Builder.

Natuurlijk moet je de VHDL code om de gegenereerde hardware met de pinnen van de Cyclone II te verbinden ook aanpassen. De namen van de pinnen kun je vinden in de DE2_70_pin_assignments.csv file. De pin oLCD_BLON hoef je niet aan te sluiten.

De namen van de poorten van de gegenereerde hardware kun je vinden in de nios_system.vhd file die aangemaakt is door SOPC Builder. Zoek naar entity nios_system en neem de port definitie over.

De pin LCD_ON moet op 1 gezet worden om de LCD aan te zetten. Dit moet je in het top level design (lights) doen met een concurrent signal assignment in VHDL.

Als je de hardware gewijzigd is moet je de BSP ook opnieuw "refreshen". Klik rechts op het lights_bsp project en kies voor Nios II > Generate BSP...

Pas de software aan zodat een boodschap op het LCD display verschijnt. Let op! Het is niet nodig om zelf de LCD display low level aan te sturen want de SOPC Builder heeft hier een driver voor gegenereerd (als onderdeel van de BSP) die we "gewoon" via de stdio library kunnen gebruiken.

#include <stdio.h>
#include "system.h"

int main() {
    FILE *fp = fopen(LCD_0_NAME, "w");

    if (fp) {
        fprintf(fp, "test");
        fclose(fp);
    }

    return 0;
}

Let op! Het gebruik van fprintf kan ervoor zorgen dat het programma niet meer in het geheugen past. Dit kun je het meest eenvoudig oplossen door fprintf te varvangen door fiprintf. De functie fiprintf is veel kleiner dan fprintf maar kan geen floating point getallen printen (de i in de naam is een afkorting van integer) en is geen onderdeel van de C standaard.

Een nog kleiner programma krijg je door in de BSP Editor aan te geven dat de output naar stdout naar de lcd gestuurd moet worden. Je kunt dan de veel kleinere functie iprintf gebruiken. Deze oplossing heeft echter als nadeel dat je alleen nog maar naar het LCD kunt schrijven en niet meer naar het console.

Het testprogramma wordt dan als volgt:

#include <stdio.h>

int main() {
    iprintf("test");
    return 0;
}

Opdracht 0c

Breidt de hardware uit met een timer. Deze hardware timer kun je selecteren in SOPC Builder. Schrijf nu een programma waarin je een led, button, timer en LCD gebruikt om een reactietijdtester te maken. Het idee is als volgt: na het starten van het programma wordt een willekeurige tijd (bijvoorbeeld tussen de 2 en de 20 seconden) gewacht en daarna wordt een LED aangezet. Vervolgens wordt gemeten hoe lang het duurt voordat de gebruiker de switch overhaalt. Deze tijd wordt in ms nauwkeurig op het LCD zichtbaar gemaakt. Het is in dit geval misschien handiger om een push-button te gebruiken in plaats van een switch. Bedenk dat je dit kunt doen door een simpele wijziging in de pin assignments. Zie http://www.altera.com/literature/hb/nios2/n2sw_nii52004.pdf voor een voorbeeld van het gebruik van de Timestamp Driver.

Let op! Je moet de timer die je in de hardware hebt toegevoegd nog koppelen aan de timestamp_timer driver. Dat doe je in de BSP Editor.

Let nog steeds op! De timer die je in de hardware hebt toegevoegd moet niet aan de sys_clk_timer gekoppeld zijn. Dat check je in de BSP Editor.

 

Verdere informatie

Het Nios II Software Developers Handbook bevat veel nuttige informatie die je bij de volgende opdrachten kunt gebruiken: http://www.altera.com/literature/hb/nios2/n2sw_nii5v2.pdf . In Section II wordt de Hardware Abstarction Layer (HAL) besproken die belangrijk is bij het programmeren van hardware. In deze section wordt ook veel uitgelegd over het ontwikkelen van drivers voor de I/O-devices. In Section III komen diverse advanced programming topics zoals interrupt handling en het toepassen van het µC/OS-II RTOS aan de orde.