Soft Core Prozessor Nios II. Konfiguration, Einbettung und Programmierung

FACHHOCHSCHULE KÖLN FAKULTÄT FÜR INFORMATIONS-, MEDIEN UND ELEKTROTECHNIK REGELUNGSTECHNIK PROF. DR. J. O. KRAH Gruppe: DSF Praktikum Thema des Versu...
Author: Melanie Fertig
3 downloads 0 Views 1MB Size
FACHHOCHSCHULE KÖLN FAKULTÄT FÜR INFORMATIONS-, MEDIEN UND ELEKTROTECHNIK REGELUNGSTECHNIK PROF. DR. J. O. KRAH Gruppe:

DSF Praktikum Thema des Versuchs :

Versuch

Soft Core Prozessor Nios II

3

Konfiguration, Einbettung und Programmierung

Name:

Fachsemester:

Vorname:

Versuchsdatum:

Matr. Nr.:

Testat:

Einleitung: In diesem Versuch soll auf einem FPGA ein einfaches SOPC (System on a Programmable Chip) System erstellt werden. Hardwarebasis ist das Stratix I DSP Development-System von Altera. Das FPGA verfügt über 25 000 Logikelemente und kann auf zwei 12-Bit AD-Wandler und zwei 14-Bit DA-Wandler zugreifen. Die Abtastrate beträgt bis zu 80 MHz (Systemclock). Bei Verwendung des Soft Core µControllers Nios II werden diese hohen Abtastraten nicht erreicht. Hier soll der Soft-Core Prozessor Nios II lediglich den ADC auslesen und das Signal unverarbeitet über den DAC wieder ausgeben. Benutzte Tools: Quartus II Version 11.1sp1 (32 Bit) Nios II Integrated Development Environment (IDE) Version 11.1sp1 Download: www.altera.com Hinweis: In der Download-Version (Web-Edition) können Stratix-Bausteine nur eingeschränkt kompiliert werden. Wenn zum Testen alternativ ein Cyclone-Baustein ausgewählt wird, ist das Kompilieren auch ohne die kostenpflichtige Lizenz möglich. Bitte achten Sie auf die Behandlung des Vorzeichens von ADC bzw. DAC.

DSF V3 WS 12/13 – Krah

1

1. Quartus II starten FPGA Konfigurationen werden in der integrierten Entwicklungsumgebung Quartus II von Altera erstellt (siehe Skript). Im Labor verwenden wir eine Version mit Lizenz, um auch die Stratix Bausteine programmieren zu können. Quartus II 11.1sp1 wird durch einen Doppelklick auf das Symbol gestartet.

Um den New Project Wizard zu starten, klicken Sie bitte auf das Feld Create a New Project. Auf der ersten Seite ist das Working Directory anzugeben: „D:\DSF\Krah“ Als Projektname (und top-level design entity) geben Sie bitte „Prakt3“ an.

Auf der Seite 2 sind keine Eingaben erforderlich, also bitte „Next“ wählen.

DSF V3 WS 12/13 – Krah

2

Auf der Seite 3 wird der zu programmierende FPGA Type angegeben:

Im Praktikumsaufbau wird ein FPGA aus der Stratix Serie verwendet: “EP1S25F780C5” 1S: Stratix 1 25: 25 000 Logik Elemente 780: FBGA mit 780 Pin’s C: Commercial temperature range (0°…70°) 5: Speed Grade Da auf den Seiten 4 und 5 keine Eingaben erforderlich sind, kann nach der Auswahl des FPGATyps sofort „Finish“ gewählt werden.

DSF V3 WS 12/13 – Krah

3

Als Top-Level ist eine schematische Eingabe mit Block-Diagrammen vorgesehen. Dazu wählen Sie bitte unter File / New den Typ „Block Diagram/Schematic File“ an. New File …

Die „Leere“ Datei mit „Save As“ speichern. Der Name sollte dem im Projektwizard Top Level Entity angegebenen (Prakt3) entsprechen.

DSF V3 WS 12/13 – Krah

4

Um Quartus II das geforderte Timing mitzuteilen, muss das Synopsis Design Constraints File „DSF.sdc“ in den Projektordner kopiert und dem System bekannt gemacht werden. (Vom Desktop oder aus dem DSF - Web) Assigments → Settings → Files (all Files anwählen)

Die in der Datei genutzten und im Weiteren beschriebenen Signalnamen (z.B. „clk“) sollten unverändert übernommen werden, damit das Timing Quartus bekannt ist.

DSF V3 WS 12/13 – Krah

5

2. Konfiguration des Soft Core Prozessors Nios II mit dem SOPC Builder: Tools → Qsys

Rechtsklick auf “clk_0” unter “Name” Rename in „clk“ clk unter “Clock Settings” auf 80 MHz ändern. Library → Embedded Processors → Nios II Processor Doppelklick auf “Nios II Processor” Nios II / s auswählen - cpu_reset (noch) nicht anwählen Auf den nächsten Karten: - 4 kByte Instruction Cache bestätigen - Keine Advanced Features anwählen - Keine MMU etc. anwählen - Debug level 1 anwählen - keine Custom Instructions „Finish“ anwählen: cpu erscheint unter „Name“.

DSF V3 WS 12/13 – Krah

6

-

Klappen Sie im linken Fenster das „Memories and Memory Controllers“-Menü auf. Das Menü „On-Chip“ aufklappen Doppelklick auf „On-Chip-Memory“ Memory Type RAM Block Type Automatic Memory Width 32 bits Total Memory Size 65536 Bytes (64k) Read Latency 1 Finish Rechtsklick auf “onchip_memory2_0”

-

Rename in “memory”

Im linken Fenster das „Peripherals“- und anschließend das „Microcontroller Peripherals“Menü aufklappen -

Doppelklick auf „PIO“ Width 12 bits Direction: Input Input options; Synchronous capture; Rising Edge (D-Latch Register im I/O-Block) Finish Rename → pio_0 in ADC

-

Doppelklick auf „PIO“ Width 14 bits Direction: Output Finish Rename → pio_0 in DAC Im linken Fenster das „Interface Protocols“ - und anschließend das „Serial“- Menü aufklappen

-

Doppelklick auf „JTAG UART“ Finish

DSF V3 WS 12/13 – Krah

7

Verbinden Sie die einzelnen Komponenten wie im folgenden Bild:

Die schon ausgewählte Nios-CPU erneut anklicken und den “Reset Vector”(Systemreset) und „Exception Vector“(Interupts) mit Adressen im „memory.s1“ belegen. Finish Da Adressen doppelt belegt oder bereits reserviert sein können, sollte man, um Fehlermeldungen zu vermeiden, unter „System“ „Assign Base Addresses“ anwählen. Dadurch werden die Adressen neu vergeben und es gibt keine Adress-Überschneidungen mehr. -

File → Save as „CPU_prakt3“ In Quartus II Assigments → Settings → Files (all Files anwählen) muss das Qsys System File „CPU_prakt3.qsys“ dem System bekannt gemacht werden.

DSF V3 WS 12/13 – Krah

8

-

Im Qsys den Reiter „Generation“ anwählen. Simulation NICHT anwählen „Generate“ anwählen und ein bisschen gedulden. Wenn das Info “Finished: Create HDL design files for synthesis“ erscheint, „Close“ anwählen.

Im Block-Diagram-Fenster -

Rechter Mausklick Insert → Symbol Den „Project“-Ordner öffnen und „CPU_prakt3“ auswählen Rechtsklick auf Symbol und „Generate Pins for Symbol Ports“ anwählen Insert Pin’s und verbinden und die Namen anpassen (Wie im folgenden Bild)

-

Save (Diskettensymbol)

-

Start Compilation: (violettes Dreieck

… und ein bisschen gedulden)

Assignments → Device → „Device & Pin Options“→ Unused Pins -

“As input tri-stated” “OK” Assignments -> Pin Planner (siehe folgende Tabelle)

DSF V3 WS 12/13 – Krah

9

In diesem Versuch werden nur die Pins des Eingangs1 und Ausgangs 1 verwendet. Eingang1 und Ausgang1 Node Name

Location

Eingang2 und Ausgang2 Node Name

Location

ADC[11] ADC[10] ADC[9] ADC[8] ADC[7] ADC[6] ADC[5] ADC[4] ADC[3] ADC[2] ADC[1] ADC[0]

PIN_B4 PIN_B3 PIN_C18 PIN_C19 PIN_C20 PIN_C21 PIN_C22 PIN_C23 PIN_C24 PIN_C25 PIN_D19 PIN_D20

DAC[13] DAC[12] DAC[11] DAC[10] DAC[9] DAC[8] DAC[7] DAC[6] DAC[5] DAC[4] DAC[3] DAC[2] DAC[1] DAC[0] DAC_clk reset_n

PIN_A3 PIN_A4 PIN_A5 PIN_A6 PIN_A7 PIN_A8 PIN_A9 PIN_A10 PIN_A11 PIN_A13 PIN_A16 PIN_A18 PIN_A19 PIN_A20 PIN_AD15 PIN_F24

3. Quartus II compilieren -

Start Compilation: (violettes Dreieck - und ein bisschen gedulden) Mit dem „Programmer“ die Konfiguration in das FPGA laden (Kästchen Program/Configure anwählen) und anschließend „Start“ anwählen Quartus II Fenster minimieren DSF V3 WS 12/13 – Krah

10

4. Nios II IDE starten (Programmierumgebung für die Soft-Core-µC Nios II) Workspace wechseln (damit das C-Projekt im VHDL-Projektarbeitsverzeichnis angelegt wird)  File → Switch Workspace → “ D:\ DSF\Krah\software” C-Projekt anlegen File → New→ „Nios II Application and BSP from Template” (BSP - Board Support Package)

“Finish” anwählen. Project → “Build all” anwählen DSF V3 WS 12/13 – Krah

11

C-Projekt Compilieren und starten Rechtsklick auf Projektordner im linken Verzeichnisbaum → „Run As → 3 NIOS II Hardware“

Nun wird das Projekt in den µC geladen und es erscheint: “Hello from Nios” auf den Bildschirm.

DSF V3 WS 12/13 – Krah

12

Einbinden von µC-Ports in das C-Projekt (12-Bit Eingangsport des ADCs und 14-Bit Ausgangsport des DACs) - Die Systemdatei “system.h” einbinden. (Hier wird beim „build“ aus der Systembeschreibung (*.ptf) des im SOPC-Builder erstellten µCs generiert. Deklaration und Beschreibung aller wichtigen Parameter des µC o →Verzeichnisbaum → CPU_prakt_2_bsp-Ordner → „system.h“ #define Adressen aus system.h für den ADC und den DAC benutzen … short *padc = (void*) ; short *pdac = (void*) ; Schreiben Sie ein C- Programm, das den AD-Wandlereingang auf den DA-Wandlerausgang übergibt, so dass auf dem Skop das Referenzsignal des Funktionsgenerators identisch mit dem Ausgangssignal des Stratix-Boards ist. Bitte beachten Sie, dass der ADC -10V auf 0x000 und +10V auf 0xfff abbildet. Der DAC erwartet das Signal als signed 14 Bit in der Zweierkomplementdarstellung

Anhang C-Programm Schleifen

Abfrage

Operatoren

while(1){ . . Programmcode . }

if (Ausdruck = = Wert) { . . . } else { . . . }

== >= < = (Zuweisungsoperator) && UND logisch || ODER logisch & |

UND Bitweise ODER Bitweise

^

exklusiv oder (xor) Bitweise

> Bitweise Rechtsverschiebung Bsp.: Ausdruck3 = Ausdruck1 & Ausdruck2 Wert = 1101 & 0001 = 0001

DSF V3 WS 12/13 – Krah

13