Szkolenie_1_Podstawy

Download Report

Transcript Szkolenie_1_Podstawy

TWORZENIE SYSTEMU NIOS II
Orkiszewski Marcin
Koło Naukowe Układów Cyfrowych DEMAIN
Altera NIOS II
Wymagane oprogramowanie:

Quartus II v. 9.0

Nios IDE v. 9.0
Do pobrania na stronie www.altera.com
2
Uwaga!

Katalogi, w których instalujemy oprogramowanie
oraz w których zakładamy projekty:
! NIE MOGĄ zawierać spacji !
3
Uwaga!

Unikać powtarzania nazw:
- block diagram:
<..>_project
- SOPC:
<..>_sopc
- Nios IDE
<..>_soft

W razie problemów
www.google.com
4
Tworzenie systemu
5
1. Utworzenie projektu (1/3)
Utworzenie pliku z obrazem systemu:
Quartus II
File
New…
Block Diagram/Schematic File
6
7
1. Utworzenie projektu (2/3)
Założenie projektu:
File
Save As...
…/szkolenie1.bdf
„Do you want to create a new project with this file?”
Tak
8
1. Utworzenie projektu (3/3)
Wybór układu:
Family:
Device:
Cyclone II
EP2C35F672C6
9
10
2. Stworzenie systemu NIOS II (1/5)
Utworzenie systemu Nios II:
Tools
System Name:
Target HDL:
SOPC Builder
szkolenie1_sopc
VHDL
11
12
2. Stworzenie systemu NIOS II (2/5)
Dodanie procesora CPU:
Nios II Processor
Nios II/e
13
14
2. Stworzenie systemu NIOS II (2/5)
Dodanie pamięci RAM (On-Chip):
Memories and Memory Controllers
On-Chip
On-Chip Memory
Memory type:
Data width:
Total memory size:
RAM
32
16 KBytes
15
2. Stworzenie systemu NIOS II (2/5)
Dodanie komponentu JTAG Uart:
Interface Protocols
Serial
JTAG UART
16
2. Stworzenie systemu NIOS II (2/5)
Dodanie portów I/O (diody LED):
Peripherals
Microcontroller Peripherals
PIO (Parallel I/O)
Output ports only - Width: 8
17
2. Stworzenie systemu NIOS II (2/5)
Dodanie portów I/O (przełączniki SWITCH):
Peripherals
Microcontroller Peripherals
PIO (Parallel I/O)
Input ports only - Width: 8
18
2. Stworzenie systemu NIOS II (2/5)
Dodanie licznika czasu (Timer):
Peripherals
Microcontroller Peripherals
Interval Timer
Period: 1 ms
+ Writable period, Start/Stop control bits
19
2. Stworzenie systemu NIOS II (2/5)
Zmiana nazw komponentów (Ctrl + R):
-
pio_0
pio_1
timer_1
leds
buttons
timer
Powyższe nazwy będą używane w kodzie programu!
20
21
2. Stworzenie systemu NIOS II (3/5)
Przydzielenie przestrzeni adresowej
i priorytetów przerwań:
System
 Auto-Assign Base Addresses
 Auto-Assign IRQ’s
22
23
2. Stworzenie systemu NIOS II (4/5)
Ustawienie adresu początku programu
i adresu wektora przerwań:
cpu_0:
Reset Vector:
Exception Vector:
onchip_memory2_0
onchip_memory2_0
24
25
2. Stworzenie systemu NIOS II (5/5)
Zapisanie i wygenerowanie systemu:
Generate
Save
26
27
3. Dodanie systemu do projektu (1/2)
Dodanie obrazu systemu do pliku projektu:
Edit
Insert Symbol…
Project
szkolenie1_sopc
Dodanie pinów wejścia/wyjścia:
 input + output
28
29
3. Dodanie systemu do projektu (2/2)
Połączenie pinów z systemem:
-
clk_0
reset_n
clk
reset
-
in_port_to_the_buttons[7..0]
-
out_port_from_the_leds[7..0]
switch[7..0]
led[7..0]
-
30
31
4. Przypisanie pinów do projektu
Dodanie obrazu systemu do pliku projektu:
Assignments
Import Assignments…
File name: DE2_PIN.csv
32
33
5. Zapisanie i kompilacja projektu
Processing
Start compilation
- Wykorzystanie komórek logicznych
- Wykorzystanie bloków pamięci
Minimalna częstotliwość taktowania
- Compilation Report
Timing Analizer
34
35
6. Załadowanie obrazu do układu
Tools
Programmer
- Hardware Setup
ByteBlaster
 Program/Configure
 Start
- Czasami przydatne bywa włączenie zasilania  36
Programowanie
37
7. Założenie projektu (1/2)
File
New
Project…
Nios II C/C++ Application
38
39
7. Założenie projektu (2/2)
Wskazanie obrazu systemu (.ptf):
Select project template:
Name:
SOPC Builder System PTF File:
Blank Project
szkolenie1_soft
../szkolenie1_sopc.ptf
 Finish
40
8. Kompilacja biblioteki
-
Prawy klawisz myszki na szkolenie1_soft_syslib
- Properties
System Library
Reduced device drivers
Small C library itp..
-
Prawy klawisz myszki na szkolenie1_soft_syslib
- Build Project
41
42
9. Dodanie plików źródłowych (C/C++)
-
Prawy klawisz myszki na szkolenie1_soft
- Import…
File System
 szkolenie1.h
 szkolenie1_1.c
 szkolenie1_2.c
43
10. Uruchomienie projektu
Run
Run…
Nios II Hardware
Main
Project:
Target Connection:
szkolenie1_soft
USB-Blaster
 Run
44
45
Program 1
46
Program 1
Typy danych:
- alt_8, alt_u8
- alt_16, alt_u16
- alt_32, alt_u32
Nagłówki:
<stdio.h>
”system.h”
- funkcja printf()
- adresy komponentów wygenerowane przy
tworzeniu systemu SoPC
47
Program 1
int main()
{
alt_u8 variable;
while(1)
{
variable = IORD_ALTERA_AVALON_PIO_DATA( BUTTONS_BASE );
IOWR_ALTERA_AVALON_PIO_DATA( LEDS_BASE, variable );
}
}
return 0;
48
Komunikacja z komponentami
Przez makrodefinicje:

IOWR_ALTERA_AVALON_PIO_DATA( LEDS_BASE, variable );
(wpis)
(dane)
typ komponentu

rejestr
adres bazowy
variable = IORD_ALTERA_AVALON_PIO_DATA( BUTTONS_BASE );
(dane)
(odczyt)
”system.h” - nagłówek z adresami bazowymi komponentów
”altera_avalon_pio_regs.h” – nagłówek z makrami
49
Komunikacja z komponentami
Przez rejestry:

STATUS – stan pracy komponentu
np. ukończenie liczenia, zgłoszenie przerwania

CONTROL – rejestr konfiguracyjny
np. odblokowanie przerwań, start, stop, reset, itp..

DATA – rejestr danych

SPECJALISTYCZNE – w zależności od komponentu
np. DIRECTION, PERIODL, PERIODH, itd..
50
Komponent PIO – mapa rejestrów
51
Program 2
52
Program 2
int main()
{
IOWR_ALTERA_AVALON_TIMER_PERIODH( TIMER_BASE, 0x02FA );
IOWR_ALTERA_AVALON_TIMER_PERIODL( TIMER_BASE, 0xF080 );
IOWR_ALTERA_AVALON_TIMER_CONTROL( TIMER_BASE, 0x02 | 0x04 );
}
while(1)
{
status = IORD_ALTERA_AVALON_TIMER_STATUS( TIMER_BASE );
if( status & 0x01 )
{
IOWR_ALTERA_AVALON_TIMER_STATUS( TIMER_BASE, 0 );
// do something…
}
}
53
Komponent TIMER – mapa rejestrów
54
Program 2
IOWR_ALTERA_AVALON_TIMER_CONTROL( TIMER_BASE, 0x02 | 0x04 );
Ustawienie pracy ciągłej (nie trzeba restartować) oraz uruchomienie licznika
55
Program 2
IOWR_ALTERA_AVALON_TIMER_PERIODH( TIMER_BASE, 0x02FA );
IOWR_ALTERA_AVALON_TIMER_PERIODL( TIMER_BASE, 0xF080 );
Dlaczego takie wartości ?
PERIODH
PERIODL
= 0x02FAF080 = 50000000
Jeden okres licznika trwa 50 MHz (clk)
dekrementacja co 20 ns
50000000 * 20 ns = 1 sekunda
56
Program 2
status = IORD_ALTERA_AVALON_TIMER_STATUS( TIMER_BASE );
if( status & 0x01 )
IOWR_ALTERA_AVALON_TIMER_STATUS( TIMER_BASE, 0 );
57
Materiały dostępne na stronie Koła
http://demain.zpt.tele.pw.edu.pl/
Publikacje
17 XI 2009