nios ii processor reference handbookes.elfak.ni.ac.rs/papers/vbalovic - nios ii.pdfi predgovor u...
Post on 14-Jan-2020
11 Views
Preview:
TRANSCRIPT
Nios II procesor Nios II razvojni sistem
101 Innovation Drive San Jose, CA 95134 www.altera.com
Preveo i priredio .doc i .pdf verziju priručnika,
student: Balović Vladimir br.indeksa: 9854
I
Predgovor
U ovom radu su obrađene dve tematske celine vezane za Nios®II sistem, koji je proizvod korporacije Altera®:
Nios®II procesor Nios®II razvojni sistem.
Osnovna ideja je bila da se čitalac upozna sa konceptom
izgradnje “embeded” sistema na jednom FPGA čipu. Ovo je širok pojam, koji obuhvata analizu sistema, kako po pitanju hardverskih, tako i softverskih zadataka. Pošto je naš zadatak vezan za reprogramabilne čipove i to ne samo po pitanju aplikativnog programa koji se na njima izvršavaju, već i po pitanju hardverske strukture samog procesorskog sistema, logično je bilo da se u prvom delu ovog rada upoznamo sa “srcem” jednog Nios® II sistema, tj. njegovim procesorom.
Hardverska struktura jednog procesorskog sistema
realizovanog na FPGA čipu nije “fiksirana na silicijumu”, kao što je to slučaj kod tradicionalnih mikrokontrolera. Ovo znači, da smo u mogućnosti da u zavisnosti od potreba naše aplikacije, njoj i prilagodimo hardversku osnovu na kojoj će se izvršavati. Time ćemo učiniti niz prednosti u odnosu na klasične mikrokontrolere, pre svega po pitanju performansi, veličine i naravno, cene ciljnog sistema. U nastavku ćemo se pozabaviti opisom arhitekture Nios® II jezgra, kao i elementima bitnim za programiranje: registrima i memorijom. Takođe ćemo se na kraju prvog dela upoznati i sa formatima naredbi Nios® II procesora, a na raspolaganju će biti i tabelarno priložen skup svih naredbi sa kratkim opisom svake od njih.
U drugom delu rada, upoznaćemo Vas sa sistemom
Altera® Nios®II. Biće prikazano kako se koristi softver Quartus®II za kreiranje i realizaciju Vašeg prvog projekta. Analiziraćemo prvo sistemske zahteve naše aplikacije, a onda uz pomoć alata SOPC Builder i generisati odgovarajuću strukturu koju ćemo kasnije prebaciti na naš FPGA čip. Takođe, biće reči i o razvoju softvera upotrebom paketa Nios II IDE, kao i o pokretanju programa na ciljnom hardveru i njegovom izvršavanju na ISS – simulatoru.
II
Sadržaj
Predgovor .................................................................................................................... I
Sadržaj ........................................................................................................................ II
Kako kontaktirati Alteru............................................................................................VI
Tipografske oznake u tekstu ....................................................................................VI
1. Osnovni podaci o Nios II procesoru ..................................................................... 3
Početak rada sa Nios II procesorom................................................................ 4 Prilagodljivost Nios II sistema .......................................................................... 5 Konfigurabilnost koncepta “mekog-jezgra” .................................................... 6 Fleksibilni skup periferija i mape adresiranja .................................................. 6
Standardne periferije....................................................................................... 7 Periferije formirane od strane korisnika........................................................... 7
Instrukcije definisane od strane korisnika....................................................... 7 Automatski sistem generisanja Nios II istema ................................................ 8
2. Arhitektura procesora............................................................................................ 9
Implementacija procesora ............................................................................... 10 File - registar..................................................................................................... 11 Aritmetičko-logička jedinica............................................................................ 11 Neugrađene instrukcije.................................................................................... 12 Custom - instrukcije......................................................................................... 12 Kontroler izuzetaka .......................................................................................... 12 Kontroler prekida ............................................................................................. 12 Instruction i Data bas....................................................................................... 14
Pristup memoriji i periferijama....................................................................... 14 Instruction Master port .................................................................................. 15 Data Master port ........................................................................................... 16 Deljiva memorija za instrukcije i podatke ...................................................... 16
Keš memorija.................................................................................................... 16 Opcije konfigurisanja keš memorije .............................................................. 17 Efekti upotrebe keš memorije ....................................................................... 17 Metode zaobilaska keša ............................................................................... 18
Tightly Coupled memorije ............................................................................... 18 Pristupanje Tightly Coupled memoriji ......................................................... 18 Efekti korišćenja Tightly Coupled memorije ................................................ 19
Označavanje adrese......................................................................................... 19 JTAG namensko povezivanje.......................................................................... 20 Prebacivanje i izvršavanje programa ............................................................. 21
III
Softverske tačke prekida ................................................................................. 21 Hardverske tačke prekida................................................................................ 21 Hardversko okidanje ........................................................................................ 21
Utvrđeno okidanje ......................................................................................... 23 Okidanje na opseg vrednosti ........................................................................ 23
3. Način programiranja ............................................................................................ 24
Registri opšte namene..................................................................................... 24 status (ctl0) ................................................................................................... 26 estatus (ctl1) ................................................................................................. 26 bstatus (ctl2) ................................................................................................. 27 ienable (ctl3) ................................................................................................. 27 ipending (ctl4) ............................................................................................... 27 cpuid (ctl5) .................................................................................................... 27
Zaštićeni mod ................................................................................................... 28 Korisnički mod ................................................................................................. 29
Implementacija procesora i podrška korisničkom modu................................ 29 Debag-mod ....................................................................................................... 30 Promena režima rada ....................................................................................... 30 Tipovi izuzetaka................................................................................................ 32
Hardverski prekid .......................................................................................... 32 Softverska zamka ......................................................................................... 34 Izvedene instrukcije ...................................................................................... 34 Ostali izuzeci................................................................................................. 34
Određivanje uzroka izuzetka ........................................................................... 35 Ugnježdeni izuzeci ........................................................................................... 36 Povratak od izuzetka........................................................................................ 36
Povratak adrese............................................................................................ 36 Povratak sa prekida ......................................................................................... 38 Upotreba registra ............................................................................................. 38 Adresni načini rada .......................................................................................... 39 Keš memorija.................................................................................................... 39 Instrukcije za transfer podataka ..................................................................... 42 Aritmetičke i logičke instrukcije ..................................................................... 43 Move instrukcije ............................................................................................... 44 Instrukcije za poređenje .................................................................................. 45 Instrukcije za pomeranje i rotiranje ................................................................ 46 Instrukcije za upravljanje tokom uzvršenja programa ..................................... 47
Instrukcije uslovnog grananja ....................................................................... 47 Ostale instrukcije za kontrolu toka izvršavanja programa ................................ 48
Custom - instrukcije......................................................................................... 49 Instrukcija nop................................................................................................. 49 Potencijalne neugrađene instrukcije .............................................................. 49
IV
4. Tipovi Nios® II jezgra ........................................................................................... 50
Podržane familije FPGA čipova ...................................................................... 52 Pregled mogućnosti jezgra Nios II/e............................................................... 52 Fajl registar....................................................................................................... 53 Aritmetičko-logička jedinica............................................................................ 53 Pristup memoriji ............................................................................................... 53 Faze izvršavanja instrukcije ............................................................................ 53 Performanse instrukcija .................................................................................. 53 Upravljanje izuzecima ...................................................................................... 54 JTAG modul za debagovanje .......................................................................... 55 Nepodržane osobine ........................................................................................ 55
5. Skup instrukcija.................................................................................................... 56
I-Type format naredbe...................................................................................... 56 R-Type format naredbe .................................................................................... 57 J-Type format naredbe..................................................................................... 58 Tabelarni pregled instrukcija .......................................................................... 61
1. Početak rada sa Nios II sistemom....................................................................... 71
Naš projekat...................................................................................................... 71 Softverski i hardverski zahtevi........................................................................ 72 Princip otvorenog jezgra ................................................................................. 74
2. Razvojni tok Nios II sistema ................................................................................ 75
Analiza sistemskih zahteva ............................................................................. 76 Definisanje i generisanje sistema pomoću SOPC Builder alata .................. 77 Quartus II zadaci prilikom razvoja hardvera .................................................. 78 Nios II IDE radovi na razvoju softvera ............................................................ 78 Izvršavanje i debagovanje softvera na ploči.................................................. 80 Varijacije razvojnog toka ................................................................................. 80
Prepravke softvera i hardvera ....................................................................... 80 Iterativno kreiranje Nios II sistema ................................................................ 80 Verifikovanje sistema uz pomoć alata........................................................... 81 Hardware Simulation Tools........................................................................ 81
3. Izrada primer - projekta........................................................................................ 82
Instaliranje projektnih fajlova.......................................................................... 82 Analiza sistemskih zahteva ............................................................................. 83 Pokretanje Quartus II programa i otvaranje “Tutorial Example Design Project”.......... 84 Kreiranje nove SOPC Builder System strukture............................................ 85 Definisanje sistema u SOPC Builder-u........................................................... 86
Određivanje ciljnog FPGA i podešavanja vezana za Clock..................................... 87 Dodavanje on-chip memorije ....................................................................... 87 Dodavanje Nios II procesorskog jezgra ....................................................... 89
V
Dodavanje JTAG UART komponente (univerzalni asinhroni primo-predajni kontroler)....................................................................................................... 91 Dodavanje tajmera........................................................................................ 92 Dodavanje System ID Pheripheral opcije ................................................... 94 Dodavanje PIO bloka ................................................................................... 95 Dodela baznih adresa i utvrđivanje prioriteta prekida ................................... 96 Generisanje SOPC Builder sistema............................................................. 98
Integrisanje SOPC Builder System-a u Quartus II projekat .......................... 99 Uvođenje SOPC Builder System modula u Quartus II Project .................. 99 Dodeljivanje pinova FPGA čipu .................................................................. 101 Kompajliranje Quartus II Project-a i verifikacija vremena .......................... 104
Prebacivanje hardverskog dizajna na ciljni FPGA ...................................... 105 Razvoj softvera korišćenjem paketa Nios II IDE .......................................... 106
Kreiranje novog Nios II C/C++ aplikacionog projekta ................................. 106 Kompajliranje projekta ................................................................................ 108
Pokretanje programa ..................................................................................... 110 Pokretanje programa na ciljnom hardveru .................................................. 110 Izvršavanje programa na ISS - simulatoru .................................................. 111
Završna reč ..................................................................................................... 113 Literatura......................................................................................................... 114 Biografija......................................................................................................... 115
VI
Kako kontaktirati Alteru
Za najnovije informacije o proizvodima Altera® pogledajte relevantne linkove u sledećoj tabeli.
Napomena:
(1) Za sve informacije možete takođe da kontaktirate i svog lokalnog prodavca. Tipografske oznake u tekstu
Sledeće tabele objašnjavaju upotrebljene tipografske oznake u daljem tekstu.
Kontakt (1) Metod kontakta Adresa
Tehnička podrška vebsajt www.altera.com/support
vebsajt www.altera.com/training Tehnički trening
Email custrain@altera.com
Literatura vebsajt www.altera.com/literature Altera kontakt za nabavku literature Email literature@altera.com
Email nacomp@altera.com Vantehnička podrška (Licenciranje softvera) Email authorization@altera.com
Tip teksta Označava
Bold tip sa velikim početnim slovima
Ime komande, imena prozora kod programa, opcije kod podešavanja. Primer: komada Save As.
bold tip Eksterne parametre za podešavanje, imena direktorijuma, imena projekata, imena disk-drive uređaja, imena fajlova, ekstenzija fajlova, imena usluznih programa i termini engleskog jezika. Primer: fMAX, \qdesigns direktorijum, d: uređaj, chiptrip.gdf fajl.
Italic tip sa velikim početnim slovima
Naslove sekcija u okviru određene lekcije, termini engleskog jezika. Primer: naslov sekcije Dodavanje Nios II procesorskog jezgra.
Italic tip Interne parametre za podešavanje i promenljive. Primer: tPIA, n + 1. Imena promenljivih između uglastih zagrada. Primer: <file name>, <project name>.pof.
Početna velika slova Znaci tastera na tastaturi i sva lična imena. Primer: Delete key, the Options meni, itd.
VII
Vizuelna oznaka Značenje Courier font Ovim fontom su napisana imena signala i portova. Primer: data1, tdi,
input,itd. Sve što treba da se unese tačno onako kako je naznačeno, takođe je napisano ovim fontom. Na primer: c:\qdesigns\tutorial\chiptrip.gdf.
1., 2., 3., … a., b., c., …
Nabrajanja koja predstavljaju sukcesivne korake u postupku koji nam se nalaže da uradimo ( koraci u nekoj proceduri).
Označava stavke prilikom nabrajanja, kao i zadatke koje treba uraditi, ali kada je njihov redosled izvršavanja nebitan.
Označava proceduru koja se sastoji od isključivo jednog koraka.
Ruka označava informacije koje zahtevaju posebnu pažnju.
Znak upotorenja govori o posebnim elementima pažnje kojih se treba pridržavati kako ne bi došlo do uništenja proizvoda ili radne okoline.
The feet direct you to more information on a particular topic.
Prvi deo:
Nios II procesor
2
Nios II procesor
Cilj ovog rada je upoznavanje sa Nios® II procesorom. U nastavku ćemo razmatrati sledeće teme:
Osnovni podaci o procesoru Arhitektura procesora Način programiranja Tipovi Nios® II jezgra Skup instrukcija
3
1. Osnovni podaci o Nios II procesoru
U uvodnom delu ćemo najpre predstaviti familiju Nios® II embedded procesora. Ovo izlaganje će biti od pomoći kako inženjerima koji projektuju hardver, tako i onima koji su zaduženi za razvoj softvera i to tako, što će ukazati na sličnosti i na razlike između Nios II procesora i tradicionalnih embedded procesora. Nios II je procesor opšte namene, RISC tipa, a odlikuju ga sledeće stvari:
32-bitni skup instrukcija, tok podataka i adresni prostor 32 registra opšte namene 32 spoljna izvora prekida Instrukciju 32 × 32 koja množi i deli proizvodeći 32-bitni
trzultat Namenske instrukcije za rad sa 64-bitnim i 128-bitnim
proizvodima množenja. Instrukcija barrel shifter Pristup raznovrstnim on-chip periferijama i povezivanje sa
off-chip memorijama i periferijama Okruženje za razvoj softvera bazirano na GNU C/C++
alatu i Eclipse IDE Sastav seta instrukcija ( ISA - Instruction Set Architecture )
kompatibilan za sve Nios II procesorske sisteme Performanse iznad 150 DMIPS-a
Nios II procesor je identičan mikrokontroleru ili “kompjuteru na čipu”, koji u svom sastavu ima CPU, razne periferalije i memoriju i to sve na jednom čipu. Termin “Nios II processor system” se odnosi na Nios II procesorsko jezgro, skup on-chip periferalija, on-chip memoriju i interfejse ka off-chip memoriji, koji se svi skupa nalaze na jednom Altera® čipu. Kao i određene familije mikrokontrolera, svi Nios II procesorski sistemi koriste konzistentan skup instrukcija i način programiranja.
Osnovni podaci o procesoru Nios II procesor
4
Početak rada sa Nios II procesorom Početak rada sa Nios II procesorom je sličan radu sa bilo kojom drugom familijom mikrokontrolera. Najjednostavniji način za početak rada je pribavljanje Alterinog razvojnog kita, koji u sebi uključuje već gotovu razvojnu ploču i sve potrebne softverske alate potrebne za pisanje programa za Vaš Nios II. Nios II softversko razvojno okruženje ćemo nadalje nazivati skraćeno IDE ( Software Development Environment ). Nios II IDE je bazirano na GNU C/C++ kompajleru i Eclipse IDE, što predstavlja već poznato i prihvaćeno okruženje za razvoj softvera. Korišćenjem Nios II IDE paketa, projektanti mogu odmah da počnu sa razvojem i simuliranjem Nios II softverskih aplikacija. Takođe, upotrebom Alterinog razvojnog sistema, projektant može da svoj izrađeni prototip pokrene i testira na samoj ploči, pre neko što se upusti u izgradnju svoje hardverske platforme. Slika 1–1 prikazuje primer realizovanog sistema u okviru Altera Nios II razvojnog sistema.
Slika 1–1. Primer sistema realizovanog sa Nios II procesorom JTAG connection to software debugger
Osnovni podaci o procesoru Nios II procesor
5
Prilagodljivost Nios II sistema Alterini FPGA čipovi pružaju fleksibilnost kada je u pitanju dodavanje novih mogućnosti i povećanje performansi procesorskog sistema. Suprotno ovome, sve nepotrebne procesorske funkcije i periferalije mogu biti izbačene, kako bi se time pojednostavio dizajn, smanjio finalni uređaj ili snizila njegova cena. Sa obzirom na činjenicu da su pinovi i logički resursi kod Altera uređaja programabilni, mnoga prilagođavanja Vašeg dizajna su moguća, a mi ćemo u nastavku navesti samo neka od njih:
Pinovi na čipu mogu da se reorganizuju u cilju dobijanja jednostavnije finalne ploče. Na primer, adresni i pinovi za prenos podataka jedne eksterne SDRAM memorije mogu da se pomere na bilo koju stranu čipa kako bi se skratile veze na ploči.
Dodatni pinovi i logički resursi na čipu mogu da se koriste
za funkcije koje nisu vezane direktno za procesor. Navodimo da Nios II procesorski sitem konzumira samo 5% od ukupne površine velikog Alterinog FPGA čipa, ostavljajući ostatak resursa na čipu dostupan za implementaciju dodatnih funkcija.
Dodatni pinovi i logika na čipu mogu da se upotrebe i za implementaciju dodatnih periferija za Nios II procesorski sistem. Altera nudi biblioteke periferija koje se mogu jednostavno povezati u Nios II procesorski sistem.
U praksi, većina FPGA dizajna sadrži neku dodatnu logiku u kombinaciji sa Nios II procesorskim sistemom. Dodatna ligika nema uticaja na naše shvatanje funkcionisanja i sagledavanja osobina Nios II procesora u sistemu.
Osnovni podaci o procesoru Nios II procesor
6
Konfigurabilnost koncepta “mekog-jezgra”
U ovom delu ćemo predstaviti koncepte koji su jedinstveni i razlikuju se od onih koje srećemo kod diskretnih mikrokontrolra. U većini slučajeva, ovi koncepti se odnose na fleksibilnost prilikom hardverskog dizajniranja, a koja se ogleda u mogućnosti finog podešavanja sistema i njegovog implementiranja. Dizajneri softvera, generalno nisu dužni da brinu o detaljima hardverske implementacije i mogu da pišu programe bez poznavanja prirode Nios II procesorskog jezgra.
Nios II procesor je konfigurabilan procesor mekog-jezgra, nasuprot fiksnim, off-the-shelf mikrokontrolerima. U ovom kontekstu, konfigurabilan znači da poseduje mogućnost nadogradnje ili redukovanja baznog sistema kako bi zadovoljio željene performanse ili se uklopio u željenu cenu. “Soft-core” znači da se procesorsko jezgro nudi u “soft” proizvođačkoj formi ( struktura nije fiksirana na silicijumu ) i može se naći na bilo kom FPGA čipu iz Alterine familije. Drugim rečima, Altera ne prodaje “Nios II čipove”; Altera samo prodaje prazne FPGA čipove. Na korisniku je da konfiguriše Nios II procesor i periferije prema svojim potrebama, a onda i isprogramira sistem na nekom FPGA čipu.
Konfigurabilnost ne znači da projektant mora da kreira novu konfiguraciju Nios II procesora pri svakom novom projektu. Altera nudi već gotove Nios II sisteme koje projektanti mogu da koriste takve kakvi su. Ako ova ponuđena rešenja ispunjavaju Vaše sistemske zahteve, onda nema potrebe da konfigurišete sistem u budućnosti. Pored toga, projektanti softvera mogu da koriste Nios II simulator skupa naredbi kako bi započeli sa razvojem i debagovanjem Nios II aplikacija i pre nego što finalna hardverska konfiguracija bude determinisana.
Fleksibilni skup periferija i mape adresiranja Fleksibilni skup periferija je jedna od najuočljivijih razlika između Nios II procesorskih sistema i fiksnih mikrokontrolera. Zbog soft-core prirode Nios II procesora, projektanti mogu lako da izgrade Nios II procesorski sistem sa tačnim skupom periferija potrebnih za datu aplikaciju. Posledica fleksibilnih periferija je fleksibilna adresna mapa. Softverskim konstrukcijama je omogućen pristup memoriji i periferijama, nezavisno od adresne lokacije. Zbog toga, fleksibilni skup periferija i mape adresiranja, namaju uticaja na razvoj aplikacije.
Osnovni podaci o procesoru Nios II procesor
7
Periferije se mogu podeliti na dve široke klase: standarsne periferije i periferije formirane od strane korisnika.
Standardne periferije Altera pruža skup periferija rasprostranjenih i kod mikrokontrolera, kao što su tajmeri, serijski komunikacioni interfejs, I/O opšte namene, SDRAM kontroleri i ostali memorijski interfejsi. Lista dostupnih periferija se neprestano povećava od strane Altere.
Periferije formirane od strane korisnika Projektanti mogu takođe, da kreiraju i svoje vlastite periferije i integrišu ih u Nios II procesorski sistem. Za kritične sisteme po pitanju performansi, koji troše većinu ciklusa procesora na izvršavanje specifičnog dela koda, osnovna tehnika zasnovana na posebnim, prilagođenim periferijama, omogućava implementiranje nekih funkcija direktno hardverom. Ovakav pristup nidi dvostruku dobit: implementacija hardvera je brža od implementacije softvera; procesor je slobodan da obavlja ostale funkcije, dok paralelno sa njim, naša periferija obavlja operacije nad podacima. Instrukcije definisane od strane korisnika (Custom instructions) Kao što sami možete da formirane sopstvene periferije, tako je moguće proširiti i skup instrukcija i to onim definisanim od strane korisnika. Soft-core priroda Nios II procesora omogućava projektantima da integrišu svoju logiku unutar aritmetičko-logičke-jedinice (ALU). Slično kao i ugrađene Nios II instrukcije i logičke instrukcije definisane od strane korisnika mogu da uzmu vrednosti iz najviše dva izvorna registra i opciono upišu rezultat u neki odredišni registar.
Korišćenjem custom-instrukcija, projektant može da iskoristi hardver na optimalan način i tako ispuni ciljeve vezane za performanse sistema. Pošto je procesor implementiran na reprogramabilnom FPGA čipu, inženjeri koji rade na razvoju hardvera i oni koji su zaduženi za razvoj softvera, mogu da rade paralelno na razvoju sistema, svako u svojoj oblasti, a da pri tom vrše testiranje i optimiziranje svakog od isprojektovanih modula testirajući ih direktno na realnom hardveru.
Osnovni podaci o procesoru Nios II procesor
8
Iz perspektive softvera, custom‐instrukcije izgledaju kao makroi ili C funkcije, tako da programerima nije potrebno da znaju njihovu građu kako bi ih koristili.
Automatski sistem generisanja Nios II istema Poznati Alterin dizajnerski alat SOPC Builder design tool, potpuno automatizuje proces konfigurisanja procesora i njegovih željnih osobina, generišući hardverski dizajn koji će biti direktno implementiran na jedan FPGA čip. Ovaj alat omogućava projektantima hardvera da konfigurišu svoj Nios II procesorski sistem sa velikim brojem periferija i memorijskim interfejsima . Kompletan procesorski sistem može da se kreira bez ikakvog poznavanja jezika za opis hardvera ( HDL ‐ Hardware Description Language ). SOPC Builder može takođe i da importuje fajlove dizajniranja u HDL‐u, predstavljajući time jednostavan mehanizam integrisanja custom‐logike u Nios II procesorski sistem. Posle uspešnog generisanja sistema, dati dizajn može da se prenese na ploču, tačnije na blanko FPGA čip, zatim prebaci i napisani softver i sistem može da otpočne sa radom. Kada se hardverski dizajn jednom prebaci na ploču, arhitektura sistema, tj. procesora je fiksna. Napisani softver se na ovakvoj strukturi izvršava na isti način kao i kod “tradicionalnih”, nekonfigurabilnih procesora.
9
2. Arhitektura procesora
U ovom poglavlju je opisana hardverska struktura Nios® II procesora, uključujući tu i diskusiju o svim funkcionalnim elementima Nios II arhitekture i osnovama hardverske implementacije. Nios II arhitektura je predstavljena kao arhitektura skupa instrukcija ( ISA ‐ instruction set architecture ). Jezgro Nios II procesora je tako dizajnirano da uključuje Nios II set instrukcija i podržava funkcionalne jedinice opisane nadalje u ovom dokumentu. Procesorsko jezgro ne uključuje bilo kakve periferije niti logiku za povezivanje sa spoljnim svetom. Ono uključuje jedino elemente potrebne za implementaciju Nios II arhitekture. Na slici 2–1 je prikazan blok dijagram jezgra Nios II procesora.
Slika 2–1. Nios II Processor Core – blok dijagram
Arhitektura procesora Nios II procesor
10
Nios II arhitektura sadrži sledeće, korisniku dostupne jedinice:
file-registar aritmetičko logičku jedinicu (ALU) interfejs za custom-instrukcionu logiku kontroler izuzetaka ( exception controller ) kontroler prekida ( interrupt controller ) magistralu instrukcija magistralu podataka memorije za instrukcije i podatke ( instruction cache i data
cache memorije respektivno ) Tightly coupled - memorije za instrukcije i podatke JTAG modula
U nastavku izlaganja biće prodiskutovani detalji hardverske implementacije, koji se odnose na svaki od gore pomenutih blokova. Funkcionalni blokovi Nios II arhitekture formiraju osnovu za Nios II set instrukcija.
Implementacija procesora
Nios II implementacija predstavlja skup dizajnerskih izbora ugrađen u Nios II procesorsko jezgro. Sve implementacije počivaju na setu instrukcija definisanom u priručniku “Nios II Processor Reference Handbook”. Svaka implementacija je namenjena da ispunjava specifične ciljeve. Ovo svojstvo dopušta Nios II arhitekturi da se prilagodi potrebama različitih aplikacija.
Implementacije generalno variraju prema jednom od tri zahteva kojima se obično teži: što bolje performanse; što niža cena gotovog proizvoda; što bolja iskorišćenost sistema. Slede primeri za svaki od ovih zahteva:
što bolje performanse — na primer, da bi poboljšali sistema, projektanti mogu da povećaju ili smanje veličinu keš memorije. Veća keš memorija povećava brzinu izvršavanja velikih programa, dok manji keš očuvava on-chip memorijske resurse.
što niža cena gotovog proizvoda — da bi smanjili cenu, projektanti ponekad pribegavaju ukidanju pojedinih blokova, kao na primer JTAG modula. Ovakav potez očuvava on-chip ligiku i memorijske resurse, ali sa druge strane isključuje mogućnost debagovanja softvera.
Arhitektura procesora Nios II procesor
11
što bolja iskorišćenost sistema — na primer, kod kontrolnih aplikacija, koje retko izvršavaju kompleksne aritmetičke operacije, projektant može da odluči da instrukciju deljenja emulira softverski. Uklanjanjem hardvera za operaciju deljenja, oslobađamo on-chip resurse, ali zato povećavamo vreme izvršavanja ove operacije.
File - registar
Nios II arhitektura podržava file-registre, sastavljene od trideset dva 32-bitna registra opšte namene i šest 32-bitnih kontrolnih registara. Arhitektura podržava “supervizor” mod i mod korisnika, čime je omogućena zaštita sistemskog koda u kontrolnim registrima od “lutajućih” aplikacija. Nios II arhitektura dopušta i naknadno dodavanje registara sa pokretnim zarezom. Aritmetičko-logička jedinica
Nios II aritmetičko‐logička jedinica (ALU) radi sa podacima koji se nalaze u registrima opšte namene. ALU radi tako što pribavi jedan ili dva podatka iz registara, obavi zadatu operaciju nad njima i vrati rezultat opet u registar.U tabeli 2‐1 su date operacije koje ALU može da izvrši nad podacima.
Tabela 2–1. Operacije podržane od strane Nios II aritmetičko-logičke jedinice
Kategorija Detalji Aritmetičke operacije
ALU podržava sabiranje, oduzimanje, množenje i deljenje označenih i neoznačenih operanada.
Relacioni odnosi
Alu podržava relaciju jednakosti i nejednakosti, relacije manje ili jednako i veće ili jednako i to nad označenim i neoznačenim operandima ( , , ,= ≠ ≤ ≥ ).
Logičke operacije Podržane su sledeće logičke operacije: AND, OR, NOR i XOR
Šiftovanje i rotiranje
ALU podržava operacije šiftovanja i rotiranja i može da šiftuje/rotira podatke u rasponu od 0 – 31 bit‐pozicije po instrukciji. Takođe je podržano i aritmetičko pomeranje u desno i logičko pomeranje levo/desno, kao i rotiranje levo/desno.
Arhitektura procesora Nios II procesor
12
Neugrađene instrukcije
Neka jezgra Nios II procesora ne omoghućavaju hardversko izvođenje operacija množenja i deljenja. Sledeće instrukcije su jedine operacije koje procesorsko jezgro može da emulira softverski: mul, muli, mulxss, mulxsu, mulxuu, div, divu. U ovom slučaju one su poznate pod umenom “neugrađene” instrukcije. Sve druge instrukcije su ugrađene, ili kako se još kaže, implementirane u hardveru. Procesor generiše prekid svaki put kada se pojavi neugrađena instrukcija, a kontroler izuzetaka poziva rutinu koja emulira datu operaciju softverski. Zbog toga, neugrađene instrukcije nemaju uticaja na programerov pogled prema procesoru. Custom - instrukcije
Nios II arhitektura podržava dodavanje novih instrukcija, definisanih od strane korisnika. Nios II ALU je direktno povezana sa blokom custom instruction logic ( pogledati ponovo sliku 2-1 ), dozvoljavajući projektantima da implementiraju u hardveru svoje operacije, na koje će se kasnije pozivati i koristiti ih baš kao i prirodne, već ugrađene instrukcije.
Kontroler izuzetaka
Nios II arhitektura poseduje jednostavan, neusmeren kontroler izuzetaka koji upravlja svim tipovima odstupanja. Sva odstupanja, ili izuzeća, uključujući tu i hardverske interapte ili prekide, primoravaju procesor da svoje izvršenje prebaci na jedinstvenu novu adresu, adresu izuzetka (exception address). Kontroler izuzetaka, određuje razloge prekida sa ove adrese i upućuje dalje izvršavanje na odgovarajuću prekidnu rutinu. Kontroler prekida
Nios II arhitektura podržava trideset dva eksterna hardverska prekida. Procesorsko jezgro raspolaže sa 32 IRQ – ulaza (IRQ – interrupt request), irq0 do irq31, kojima je obezbeđen jedinstven ulaz za svaki izvor prekida. Prioritet zahteva za prekidom (IRQ) se definiše softverski.
Kontroleri izuzetaka i kontroleri prekida
Arhitektura procesora Nios II procesor
13
Arhitektura takođe podržava i ugnježdene interapte. Softverom možemo da dozvolimo ili zabranimo bilo koji izvor interapta i to individualno preko ienable kontrolnog registra, koji sadrži jedan interrupt‐enable bit za svaki od IRQ ulaza. Softverom možemo globalno da dozvolimo ili zabranimo prekide koristeći PIE bit u status kontrolnom registru. Hardverski prekid je generisan akol i samo ako su ispunjena sledeća tri uslova:
PIE bit status registra ima vrednost 1 jedan od IRQ ulaza, irqn, zahteva prekid odgovarajući bit n, ienable registra ima vrednost 1
U ovom odeljku su pojašnjeni detalji hardverske implementacije Nios II memorije i organizacije I/O uređaja. Fleksibilna priroda Nios II memorije i I/O organizacije je možda i najuočljivija razlika između Nios II procesorskih sistema i tradicionalnih mikrokontrolera. Zbog toga što je Nios II procesorski sistem konfigurabilan, memorija i periferije variraju od sistema do sistema. Da bi sebi obezbedilo pristup memoriji i I/O uređajima, Nios II jezgro sadrži neku, ili čak sve od sledećih nabrojanih stavki:
Instruction master port - Avalon master port koji je povezan sa memorijom instrukcija preko Avalon prekidačke strukture
Instruction cache – brza keš memorija za instrukcije unutar Nios II jezgra
Data master port – Avalon master port za povezivanje memorije podataka i periferija preko Avalon prekidačke strukture
Data cache – brza keš memorija podataka unutar Nios II jezgra
Tightly coupled instruction or data memory port – interfejs za povezivanje sa brzim memorijama koje su van Nios II jezgra
Nios II arhitektura skriva detalje hardvera od programera, tako da oni mogu da razvijaju Nios II aplikacije bez spoznaje hardverske implementacije. Detalji koji utiču na programiranje su diskutovani u trećem poglavlju ovog rada.
Organizacija memorije i I/O uređaja
Arhitektura procesora Nios II procesor
14
Slika 2–2. Nios II organizacija memorije i I/O uređaja
Instruction i Data bas
Nios II arhitektura poseduje poseban bas za instrukcije i poseban za podatke, klasifikujući to kao “Harvard arhitekturu”. Obadva basa su implementirana kao Avalon master portovi koji odgovaraju Avalon™ specifikaciji interfejsa. Data master port je povezan sa obadve memorije i periferijskim komponentama, dok je instruction master port povezan samo sa memorijskim komponentama.
Potražite priručnik Avalon Interface Specification za sve dodatne informacije o Avalon interfejsu. Pristup memoriji i periferijama
Nios II arhitektura predviđa memorijski mapiran pristup I/O uređajima. I memorija podataka i periferije su mapirane u adresnom prostoru data master-porta.
Arhitektura procesora Nios II procesor
15
Nios II arhitektura koristi Little endian memorijski zapis. Little endian je način zapisa podataka u memoriji, tako da je na višoj adresi i viši bajt mamorijske reči, ili kažemo da su bajtovi veće težine na višim adresama. Primer: Neka je dat podatak 0xABCD. On se zapisuje u memoriji na način koji je prikazan na sledećoj slici, pri čemu je adresa 100 početna adresa podatka u memoriji.
Nios II arhitektura ne specificira ništa što je u vezi postojanja memorije i periferija; veličina, tip i povezivanje memorije i periferija su sistemski zavisni. Tipično, Nios II procesorski sistem sadrži skup brzih on-chip memorija i sporih off-chip memorija. Periferijski uređaji se tipično nalaze na čipu, mada takođe postoje i interfejsi ka off-chip periferijama.
Instruction Master port
Nios II bas za instrukcije je implementiran kao 32-bitni Avalon master port. Instruction master port ima jednostavnu funkciju: donosi instrukcije koje će procesor izvršiti. On ne vrši nikakve operacije upisivanja. Instruction master port spada u grupu Avalonovih master portova sa protočnom strukturom. Upotrebom protočne strukture povećava se ukupna frekvencija sistema fMAX. Instruction master port pribavlja uvek 32 bita podataka. On se oslanja na Avalonovu prekidačku strukturu i izraženu dinamiku basa. always retrieves 32 bits of data. Pomoću dinamički dimenzionisanog basa, svaka instrukcija se prenosi kao cela instrukciona reč, bez obzira na “širinu” ciljne memorije. Stoga, programi ne moraju da budu upoznati sa “širinom” memorije u Nios II procesorskom sistemu. Nios II arhitektura poseduje on-chip keš memoriju uz pomoć koje povećava brzinu pristupanja instrukcijama, kada se one nalaze na sporijim memorijama. Pogledajte naslov “Keš memorije” koji sledi nešto kasnije. Takođe su na raspolaganju i tzv. tightly coupled memorije, koje garntuju izizetno malo kašnjenje prilikom pristupa kada su u pitanju on-chip memorije smeštene van procesorskog jezgra. Pogledajte naslov “Tightly Coupled memorije” koji je obrađen nešto kasnije.
Arhitektura procesora Nios II procesor
16
Data Master port Nios II bas podataka je implementiran kao 32-bitni Avalon master port. Data master port obavlja dve funkcije:
Čita podatke iz memorije ili sa periferija kada procesor izvršava load instrukciju
Upisuje podatke u memoriju ili na periferne uređaje kada procesor izvršava instrukciju store
Byte-enable signali master porta određuju koja će od četiri bajt-putanje da bude upisana za vreme store operacije. Data master port ne podržava protočni transfer podataka, jer nije moguće naslutiti adrese podataka ili nastaviti sa izvršavanjem ako podaci nisu već pribavljeni.
Deljiva memorija za instrukcije i podatke
Često instruction i data master portovi dele istu memoriju u kojoj se nalaze zajedno i instrukcije i podaci. Dok procesorsko jezgro ima odvojen bas za podatke i bas za instrukcije, ukupan Nios II procesorski sistem može da se predstavi kao sistem koji poseduje jedinstven, deljivi bas instrukcija/podataka, prema spoljnem svetu. Spoljni izgled Nios II procesorskog sistema zavisi od memorije i periferija u sisitemu i Avalonove prekidačke strukture. Keš memorija
Nios II arhitektura poseduje keš memorije i za instruction master port (instruction cache) i za data master port (data cache). Keš memorija se nalazi na čipu i to kao sastavni deo Nios II procesorskog jezgra. Upotrebom ove strukture povećavamo brzinu pristupa memoriji celog Nios II procesorskog sistema, koji u svom sastavu koristi i sporu off-chip memoriju, kakva je na primer SDRAM memorija namenjena za smeštanje programa i podataka. Instrukcioni i data keš su uvek dostupni u toku rada, ali postoje softverske metode kojima se može zaobići data keš. Upravljanje kešom kao i njegova povezanost su dirigovane od strane softvera. Skup instrukcija Nios II procesora poseduje i instrukcije koje su zadužene za keš-menadžment.
Arhitektura procesora Nios II procesor
17
Opcije konfigurisanja keš memorije Upotreba keš memorije je opciona. Potreba za visokim memorijskim performansama je određena samom aplikacijom, tj. funkcijom koju će naš sistem da obavlja. Mnogim aplikacijama je dovoljno najmanje moguće procesorsko jezgro i mogu da učine usupak performansama zarad veličine. Nios II procesorsko jezgro može da sadrži jednu, obadve, ili nijednu keš memoriju. processor core may include one, both, or neither of the cache memories. Pored toga, kod jezgara koja sadrže data i/ili instrukcioni keš, veličina ovih memorija je podesiva od strane korisnika. Uključivanje keš memorije nema uticaja na funkcionalnost programa, ali utiče itekako na brzinu kojom procesor pribavlja instrukcije i čita/upisuje podatke.
Efekti upotrebe keš memorije Efikasnost keš memorije u podizanju performansi sitema je bazirana na sledećim premisama:
regularna memorija se nalazi van čipa i vreme pristupa joj je daleko duže u poređenju sa on-chip memorijom
najveća kritična petlja instrukcija je manja nego kod instrukcionog keša
najveći blok kritičnih podataka je manji nego kod data keša Optimalna konfiguracija keša je, kao što smo već napomenuli, određena konkretnom aplikacijom, mada projektanti mogu da donesu odluku da formiraju konfiguraciju koja će biti efikasna za širok spektar primena. Na primer, ako Nios II procesorski sistem uključuje samo brze, on-chip memorije, ne mora da znači da će instrukciona i data keš memorija poboljšati performansesistema sama po sebi. Takođe, ako je kritična petlja programa 2Kbajta, a veličina instrukcionog keša sa druge strane 1Kbajt, instrukcioni keš neće povećati brzinu izvršavanja programa. Zapravo, performanse će se verovatno i pogoršati.
Ako neka aplikacija zahteva da određeni podaci, ili određeni deo koda, budu stalno dostupni u keš memoriji, tightly coupled memorija može predstavljati mnogo bolji izbor. Pogledajte u nastavku temu “Tightly Coupled memorije”, radi detaljnijeg uvida u svojstva ovog tipa on-chip memorije.
Arhitektura procesora Nios II procesor
18
Metode zaobilaska keša Nios II arhitektura poseduje instrukcije kao što su ldio i stio kojima se može zaobići data keš i upotrebiti Avalon data transfer radi specificiranja neke druge adrese. Dodatne, tzv. cache bypass metode, se mogu primeniti u zavisnosti od implementacije procesorskog jezgra. Neka Nios II procesorska jezgra podržavaju mehanizam nazvan bit-31 cache bypass, koji im služi da zaobiđu keš, a koji funkcioniše u zavisnosti od vrednosti bita najveće težine u specifikaciji adrese. Tightly Coupled memorije
Tightly coupled memorije pružaju nizak nivo kašnjenja kada im pristupamo i pogodne su za sve aplikacije kod kojih je vreme izvršavanja kritično. U poređenju sa keš memorijama, tightly coupled memorije donose sledeće prednosti:
performanse su slične kao i kod keš memorija softver može osigurati da kritični delovi koda, ili podaci
budu smešteni baš u ovom tipu memorije u realnom vremenu nema suvišnog zadržavanja, koje se
javlja prilikom učitavanja, poništavanja ili oslobađanja memorije
Fizički gledano, tightly coupled memorijski port je zaseban master port Nios II procesorskog jezgra, koji je istovetan instrukcionom ili data master portu. Nios II jezgro može da sadrži jednu, nekoliko, ili nijednu tightly coupled memoriju. Nios II arhitektura podržava upotrebu tightly coupled memorija za pristup kako instrukcijama, tako i podacima. Svaki tightly coupled memorijski port je direktno povezan sa tašno jednom memorijom, koja ima garantovano nisko i fiksno vreme kašnjenja. Memorije su, topološki gledano, eksterne u odnosu na samo jezgro Nios II procesora, ali se snajčešće nalaze na samom čipu, te ih još uvek možemo klasifikovati i kao on-chip memorije.
Pristupanje Tightly Coupled memoriji Tightly coupled memorije zauzimaju normalni adresni prostor, isto kao i ostali memorijski uređaji povezani preko Avalon prekidačke strukture.
Arhitektura procesora Nios II procesor
19
Program pristupa tightly coupled memoriji koristeći se regularnim, load i store instrukcijama. Sa tačke gledišta softvera, ne postoji nikakva razlika u pristupu tightly coupled memoriji u poređenju sa bilo kojom drugom memorijom.
Efekti korišćenja Tightly Coupled memorije Sistem kože da koristi tightly coupled memorije da bi postigao performanse po pitanju pristupa specifičnim sekcijama koda ili podataka. Na primer, aplikacije sa očekivanim čestim interaptima, mogu da podele kod za upravlanje izuzecima u tightly coupled memoriji, kako bi minimizirali kašnjenje prilikom prekida. Slično, procesorski zahtevne aplikacije u kojima postoji digitalno procesiranje signala (DSP - digital signal processing), mogu da koriste tightly coupled memorije za privremeno smeštanje podataka kako bi ostvarile što je moguće brži pristup.
Ako su potrebe aplikacije za memorijom takve, da se ne mogu u potpunosti zadovoljiti onim što nam je na rapolaganju na samom čipu, onda postoji mogućnost da upotrebimo tightly coupled memorije isključivo za kod ili podatke. Veće aplikacije moraju selektivno da odaberu šta će da smeste u tightly coupled memoriju, kako bi maksimizirali odnos cena/performanse sistema.
Označavanje adrese Postoje tri adrese , koje su sastavni deo CPU-a (CPU - centralna procesorska jedinica), a koje zaslužuju da ih ovde pomenemo:
reset address exception address break handler address
Programeri pristupaju memorijama i perifernim uređajima koristei makroe. Zbog toga, flrksibilno označavanje adresa ne utiče na dizajnere aplikacija. Nios II arhitektura raspolaže sa JTAG modulom za debagovanje, što pruža onima koji rade na razvoju aplikacija, da na samom čipu, preko udaljenog PC računara, kontrolišu stanja procesora. Softverski alati za debagovanje bazirani na PC-u, komunicaraju preko JTAG ovog modula i pružaju olakšice kao što su:
JTAG modul za debagovanje
Arhitektura procesora Nios II procesor
20
smeštanje (prebacivanje) programa u memoriju startovanje i prekidanje izvršavanja postavljanje tačaka prekida i nadgledanja analiziranje registara i memorije prikupljanje podataka koji su rezultat trenutnih
izvršavanja Na strani procesora, modul za debagovanje je povezan sa signalima koji su unutar procesorskog jezgra. Svi resursi sistema vidljivi procesoru u supervizor režimu rada, dostupni su i ovom modulu.
Modul za debagovanje vrši kontrolu nad procesorom šaljući mu hardverski signal prekida, ili izvršavanjem instrukcije prekida, njenim predhodnim upisivanjem u programsku memoriju. U oba ova slučaja, procesor prebacuje controlu na rutinu koja se nalazi na adresi prekida.
Meka procesorska jezgra (soft-core jezgra) kakvo je i Nios II jezgro, nude jedinstvene mogućnosti kada je debagovanje u pitanju, naprednije nego kod tradicionalnih, fiksnih procesora. Soft-core priroda Nios II procesora pruža projektantima mogućnost, da uz pomoć modula za debagovanje, prečišćavaju sistem od grešaka i usavršavaju ga u toku razvijanja, uključujući sve mogućnosti koje on predviđa, a da ga kasnije potpuno uklone i time sačuvaju, odnosno povećaju logičke resurse na čipu. Kod verzije sistema koja je spremna za masovnu proizvodnju, JTAG modul za debagovanje, može bilo funkcionalno, bilo i fizički da se odstrani iz sistema.
U nastavku su opisane hardverske sposobnosti Nios II JTAG modula za debagovanje. Upotreba svih hardverskih mogućnosti zavisi od firmvera, koji se definiše uz pomoć softverskog Nios II IDE, a kojim se uspostavljaju veze sa ciljnim procesorom i kontroliše proces debagovanja.
JTAG namensko povezivanje JTAG namensko povezivanje se odnosi na mogućnost povezivanja CPU-a preko standardnih JTAG pinova na Alterinom FPGA čipu. Ovakav vid povezivanja pruža osnovne mogućnosti pokretanja i prekidanja izvršenja procesora, kao i pregled i editovanje sadržaja redistara i memorije.
Arhitektura procesora Nios II procesor
21
Prebacivanje i izvršavanje programa Prebacivanje programa se odnosi na potrebu da prenesemo izvršni kod programa i podatke u memoriju procesora preko JTAG konekcije. Nakon uspešnog prebacivanja programa u memoriju, JTAG modul za debagovanje može da napusti “debag-mod” i preusmeri svoju aktivnost na pokretanje izvršnog koda.
Softverske tačke prekida
Softverskim tačkama prekida je moguće podesiti prekide u instrukcijama koje se nalaze u RAM memoriji. Softverskim mehanizmom za generisanje tačaka prekida, upisujemo prekidne instrukcije u izvršni kod koji se nalazi u RAM-u. Kada procesor naiđe na prekidnu instrukciju, kontrola se direktno prebacuje na JTAG modul za debagovanje. Hardverske tačke prekida
Hardverske tačke prekida pružaju mogućnost postavljanja prekida nad instrukcijama koje se nalaze na postojanim memorijama, kakva je na primer fleš memorija. Mehanizam hardverskog prekida neprekidno prati procesor i njegovu trenutnu adresu instrukcije. Ako se adresa instrukcije poklapa sa adresom hardverskog prekida, onda JTAG modul za debagovanje preuzima kontrolu od procesora. Hardverske prekide je moguće implementirati zahvaljujući mogućnosti hardverskog okidanja koju poseduje JTAG modul za debagovanje.
Hardversko okidanje
Hardversko okidanje, koje aktivira akciju debagovanja, je bazirano na uslovima koji vladaju na magistrali (kako instrukcija tako i podataka), u toku izvršavanja programa u realnom vremenu. Okidanja mogu da učine mnogo više od zaustavljanja procesorskog izvršavanja. Na primer, okidanje može da se upotrebi za pribavljanje podataka koji predstavljaju trenutne vrednosti procesorske obrade.
Arhitektura procesora Nios II procesor
22
U tabeli 2–2 je dat spisak svih uslova koji mogu izazvati okidanje. Uslovi za hardversko okidanje su bazirani na instrukcionoj ili magistrali (basu) podataka.
Tabela 2–2. Uslovi okidanja
Uslov Bas (1) Opis
Specific address D, I Okidanje kada bas pristupa specificiranoj adresi
Specific data value D
Okidanje kada se specificirana vrednost podatka pojavi na magistrali.
Read cycle D Okidanja kada je na magistrali ciklus čitanja
Write cycle D Okidanje kada je na magistrali u toku ciklus upisivanja.
Armed D, I Okidanje jedino posle nekog utvrđenog okidnog događaja.
Range D Okidanje na opseg adresnih vrednosti, vrednosti podataka, ili na
obadva.
Napomena: (1) “I” označava instrukcionu magistralu, “D” označava magistralu podataka.
Kada se uslov za okidanje javi u toku procesorskog izvršavanja, JTAG modul pokreće akciju, kao što je zaustavljanje izvršenja, ili početak uzorkovanja (trace capture). Tabela 2–3 sa sledeće strane, prikazuje akcije okidanja koje podržava Nios II JTAG debag modul.
Arhitektura procesora Nios II procesor
23
Utvrđeno okidanje
JTAG debag modul poseduje mogućnost okidanja sa dva nivoa, koju nazivamo utvrđeno okidanje. Utvrđeno okidanje dopušta JTAG debag modulu da reaguje na događaj B, ali jedino ako se već desio događaj A. U ovom primeru, događaj A dovodi do akcije okidanja, koja omogućava okidanje za događaj B.
Tabela 2–3. Akcije okidanja
Akcija Opis Break Zaustavlja izvršavanje i prebacuje kontrolu na JTAG debag modul. External trigger Zahtevanje okidnog izlaznog signala. Ovakav okidni izlaz može da
se koristi, na primer, za okidanje eksternog logičkog analizatora.
Trace on Uključivanje prikupljenih tragova. Trace off Isključivanje prikupljenih tragova. Trace sample (1) Čuvanje jednog uzorka magistrale za kopiranje bafera. Arm Dozvola utvrđenog okidanja.
Napomena: (1) Jedino stanje na magistrali podataka može da pokrene ovu akciju.
Okidanje na opseg vrednosti
JTAG debag modul može da okida i na opseg podataka ili opseg vrednosti adresa na magistrali podataka. Ovaj mehanizam koristi zajedno dva hardverska okidanja kako bi postigao potrebne uslove, koji se aktiviraju na skup vrednosti iz specificiranog opsega.
24
3. Način programiranja
U ovom poglavlju je opisan način programiranja Nios® II procesora, čime su zaokružena njegova svojstva na asemblerskom nivou. Detaljno su objašnjene sledeće celine koje navodimo, a koje su predmet posebnog interesovanja jednog programera:
Registri opšte namene Kontrolni registri Supervizor režim rada u odnosu na privilegije korisničkog
moda Hardverski potpomognuto debagovanje Procesiranje izuzetaka Hardverski prekidi Neizvedene instrukcije Keš memorija Reset stanje procesora Kategorije instrukcija Dodate instrukcije
Ovde nisu obrađeni softverski alati za razvoj programa na visokom nivou. Pogledajte priručnik “Nios II Software Developer’s Handbook” za sve dodatne informacije vezane za razvoj softvera.
Registri opšte namene
Nios II arhitektura raspolaže sa trideset dva 32‐bitna registra opšte namene i to su registri r0 do r31. Pogledajte tabelu 3–1 na sledećoj strani. Neki registri imaju imena koja asembler prepoznaje. Zero‐registar (r0) uvek vraća vrednost 0, tako da upisivanje nula nema efekta. Ra registar (r31) čuva i vraća adresu koja se koristi za poziv procedure i implicitno mu se pristupa preko call i ret instrukcija. C i C++ kompajleri koriste opšte prihvaćenu proceduru poziva, dodeljujući posebno značenje registrima r1 do r23 i r26 do r28. Pristupanje određenim registrima, kao što su recimo et(r24), bt(r25) i ba (r30), je ograničeno određenom modom izvršavanja.
Uvod
Način programiranja Nios II procesor
25
Tabela 3–1. Nios II fajl registri
Registri opšte namene
Registar Ime Funkcija Registar Ime Funkcija r0 zero 0x00000000 r16 r1 at Assembler Temporary r17 r2 Return Value r18 r3 Return Value r19 r4 Register Arguments r20 r5 Register Arguments r21 r6 Register Arguments r22 r7 Register Arguments r23 r8 Caller-Saved Register r24 et Exception Temporary (1) r9 Caller-Saved Register r25 bt Breakpoint Temporary (2) r10 Caller-Saved Register r26 gp Global Pointer r11 Caller-Saved Register r27 sp Stack Pointer r12 Caller-Saved Register r28 fp Frame Pointer
r13 Caller-Saved Register r29 ea Exception Return Address (1)
r14 Caller-Saved Register r30 ba Breakpoint Return Address (2)
r15 Caller-Saved Register r31 ra Return Address Napomena u vezi tabele 3–1: (1) Ovaj registar nije dostupan u korisničkom modu (user mode). (2) Ovaj registar nije dostupan u korisničkom i supervizor modu (supervisor mode). Njega
isključivo koristi JTAG debag modul.
Ugrađeno je šest 32-bitnih kontrolnih registara i to ctl0 do ctl5. Svi kontrolni registri imaju imena koja asembler prepoznaje. Kontrolnim registrima se pristupa drugačije nego registrima opšte namene. Postoje posebne instrukcije, rdctl i wrctl, koje predstavljaju jedini način za čitanje i upisivanje u ove registre. Kontrolnim registrima može da se pristpa isključivo u “supervizor modu”; oni nisu dostupni u “korisničkom modu”. Detalji vezani za kontrolne registre su prikazani u tabeli 3–2. Za detalje u vezi odnosa između kontrolnih registara i procesiranja izizetaka, pogledajte sliku 3–2, koja je na strani 33.
Kontrolni registri
Način programiranja Nios II procesor
26
status (ctl0) Vrednost u status registru određuje stanje u kome se Nios II procesor nalazi. Svi statusni bitovi se brišu nakon resetovanja procesora. Pogledajte stavku “Reset stanje procesora” u nastavku. Definisana su dva posebna bita: PIE i U, što je prikazano u tabeli 3-3.
Tabela 3–3. Bitovi status registra
Bit Opis PIE bit PIE je procesorov interrupt‐enable bit. Kada je PIE bit jednak 0, spoljni
prekidi su ignorisani. Kada je PIE bit jednak 1, eksterni prekidi se mogu opslužiti, u zavisnosti od vrednosti ienable registra.
U bit U bit označava mod u kome se procesor nalazi. 1 označava “korisnički mod”; 0 označava “supervizor mod”.
estatus (ctl1)
Registar estatus čuva zapamćenu kopiju status registra za vreme procesiranja izuzetka. Definisana su nova dva bita: EPIE i EU. Ovi bitovi imaju iste vrednosti kao i bitovi PIE i U, koji su već opisani u tabeli 3–3.
Kontroler izuzetaka može da zatraži uvid u stanje estatus registra, kako bi utvrdio stanje procesora pre pojave izuzetka. Kada je opslužen prekid, eret instrukcija navodi procesor da iskopira vrednost estatus registra natrag u status registar, vraćajući mu time vrednost koju je imao pre pojave izuzetka. Pogledati temu “Procesiranje izuzetaka” u nastavku.
Tabela 3–2. Kontrolni registri i bitovi
Registar Ime 31…2 1 0
ctl0 status Reserved U PIE
ctl1 estatus Reserved EU EPIE
ctl2 bstatus Reserved BU BPIE
ctl3 ienable Interrupt-enable bits ctl4 ipending Pending-interrupt bits ctl5 cpuid Unique processor identifier
Način programiranja Nios II procesor
27
bstatus (ctl2)
Registar bstatus čuva zapamćenu kopiju status registra za vreme procesiranja debagovanja. Za ovu namenu su definisana još dva bita: BPIE i BU. Ovo su zapamćene vrednosti bitova PIE i U, koji su već definisani ranije. Kada nastane prekid, vrednost status registra se kopira u bstatus registar. Koristeći bstatus registar, vrednost status registra može da se vrati na vrednost koju je on imao pre nastanka prekida. Pogledajte naslov “Mod debagovanja” koji je nešto kasnije opisan.
ienable (ctl3) Registar ienable kontroliše obradu eksternih hardverskih prekida. Svaki bit ovog registra odgovara jednom od ulaza za interapte, irq0 do irq31. Bitska vrednost 1 označava da je odgovarajući prekid prisutan, dok vrednost nula ukazuje da je on zabranjen.
Pogledajte naslov “Obrada izuzetaka” koji se nalazi na strani 31.
ipending (ctl4)
Vrednost ipending registra ukazuje koji su interapti u iščekivanju. Vrednost 1 n-tog bita, označava da je odgovarajući irqn ulaz prihvaćen i da je odgovarajući prekid prisutan u ienable registru. cpuid (ctl5)
Registar cpuid čuva u sebi statičnu vrednost koja jednoznačno identifikuje procesor u multi-procesorskim sistemima. register holds a static value that uniquely identifies the processor in a multi-processor system. Vrednost cpuid registra je određena u toku generisanja sistema. value is determined at system generation time. Upisivanje u cpuid registar nema nikakvog efekta.
Način programiranja Nios II procesor
28
Pogledajte naslov “Obrada izuzetaka” koji se nalazi na strani 31.
Nios II procesor ima tri moda rada:
zaštićeni mod korisnički mod (user mod) mod debagovanja (debug mode)
Sledeće sekcije definišu modove i prelaze između modova. The following sections define the modes and the transitions between modes. Ova diskusija uvodi razliku između sistemskog koda i aplikacionog koda:
Sistemski kod (System code) sadrži rutine koje izvršavaju funkcije na sistemskom nivou, kao što je operativni sistem na primer (OS). Sistemski kod je generalno dostupan kao deo run-time biblioteke ili jezgra operativnog sistema. Sistemski kod se tipično izvršava u supervizor režimu.
Aplikacioni kod (Application code) sadrži rutine koje rade na vrhu servisa koje pruža sistemski kod. Aplikacioni kod generalno pišu programeri stvarajući korisničke aplikacije, odnosno programe.
Zaštićeni mod U zašzićenom modu, sve definisane funkcije procesora su dostupne i neograničene. Generalno, sistemski kod se izvršava u zaštićenom modu. Međutim, jednostavniji programi, koji ne koriste operativni sistem, mogu da ostanu u zaštićenom modu neograničeno dugo, a aplikacioni kod će se bez problema i u ovom režimu izvršavati.
Registri opšte namene bt(r25) i ba(r30) nisu dostupni u zaštićenom modu. Programi nisu sprečeni od čuvanja vrednosti u ovim registrima, pa ako to rade, vrednosti bi mogle da budu promenjene od strane debag-moda. Registar bstatus (ctl2) je takođe neraspoloživ u zaštićenom modu. Kada je procesor u zaštićenom modu, U bit ima vrednost 0. Procesor ulazi u zaštićenom režim neposredno nakon resetovanja sistema.
Režimi ili modovi rada
Način programiranja Nios II procesor
29
Korisnički mod
Korisnički mod pruža ograničen skup moguućnosti supervizor‐moda. User mode provides a restricted subset of supervisor-mode functionality. On obezbeđuje veću pouzdanost za supervizorske višestruke zadatke operativnog sistema. Sistemski kod može da izabere prelazak u korisnički mod, pre nego što prepusti kontrolu aplikacionom kodu. Neke procesorske mogućnosti nisu dostupne u korisničkom modu, zbog čega će pokušaj da im se pristupi, generisati izuzetak. Ni kontrolni registri, kao što smo već pomenuli, nisu dostupni u korisničkom modu. The control registers are not available in user mode. Pored njih, nisu dostupni ni sledeći registri opšte namene: et(r24), bt(r25), ea(r29), i ba(r30). Izvršavanje programa u korisničkom modu nije uskraćeno za čuvanje vrednosti u ovim registrimaPrograms executing in user mode are not prevented from storing values in these registers, ali ako oni to čine, vrednosti mogu biti promenjene od strane prekidnih rutina u supervizor modu ili od strane debag-moda. Kada je procesor u korisničkom modu, upotreba bilo koje od sledećih instrukcija će prouzrokovati izuzetak:
rdctl wrctl bret eret initd initi
Kada je procesor u korisničkom modu, vrednost U bita je 1. Implementacija procesora i podrška korisničkom modu Neke implementacije Nios II procesora ne podržavaju korisnički mod. Kod takvih jezgra, svi kodovi se izvršavaju u sepervizor modu i vrednost U bita je uvek 0. Zbog toga, aplikacioni kod nikada nećemo napisati tako da zavisi od partikularne vrednosti U bita, kako bi programi mogli uvek korektno da se izvršavaju. Aplikacioni kod se podjednako uspešno izvršava i u korisničkom i u supervizor režimu rada.
Način programiranja Nios II procesor
30
Debag-mod
Debag-mod se koristi od strane softverskih alata za debagovanje da bi se definisale tačke prekida (breakpoints) i tačke nadgledanja (watch-points). U ovom modu se nikada ne izvršavaju sistemski niti aplikacioni kod. Procesor ulazi u debag-mod jedino nakon break instrukcije, ili posle forsiranja prekida preko hardvera, uz pomoć JTAG modula. U debag-modu su sve funkcije procesora dostupne i neograničene softverskim alatima za debagovanje. U ovom modu, vrednost U bita je 0. Za sve dodatne informacije u vezi ove teme, pogledajte naslov “Obrada prekida” na strani 37. Promena režima rada Dijagram sa slike 3–1 prikazuje prelaze između korisničkog, zaštićenog i debag-režima ili moda rada.
Slika 3–1. Prelasci između radnih modova
Nakon reseta, procesor otpočinje sa radom u zaštićenom modu. Program se može prebaciti iz supervizor moda u korisnički mod upotrebom instrukcije eret (exception return). Ova instrukcija kopira vrednost estatus registra (ctl1) u status registar (ctl0), a zatim prebacuje kontrolu na adresu u ea registru (r29). Da bi smo odmah nakon reseta ušli u korisnički mod, sistemski kod mora da namenski postavi sadržaj registara estatus i ea i izvrši eret instrukciju.
Način programiranja Nios II procesor
31
Procesor ostaje u korisničkom modu sve dok se ne pojavi neki izuzetak, od čijeg će trenutka nastanka procesor ponovo ući u zaštićeni mod. Svi izuzeci postavljaju vrednost U bita na 0 i pamte sadržaj status registra u registar estatus. Uzevši da prekidne rutine ne modifikuju estatus registar, upotreba instrukcije eret za povratak od izuzetka, će nas vratiti u mod u kome smo bili pre njegove pojave. Procesor ulazi u debag-mod jedino ako je tamo usmeren od strane softverskog alata za debagovanje. Sistemski i aplikacioni kod nemaju kontrolu nad procesorom kada se on nalazi u ovom modu. Procesor se uvek vraća u svoje pređašnje stanje kada napušta debag-mod. Za više informacija pogledajte temu “Obrada izuzetaka” koja je sledi. Izuzetak predstavlja promenu kontrole normalnog toka izvršavanja programa, prouzrokovanu pojavom događaja koji zahteva neodloživu pažnju, bio on interni ili eksterni. Obrada, ili procesiranje izuzetaka je postupak opsluživanja nekog izuzetka, a nakon toga i vraćanja u stanje izvršavanja u kome je procesor bio pre njegove pojave (pre-exception state).
Izuzetak uzrokuje da procesor automatski izvrši sledeće korake:
1. Kopira sadržaj status registra (ctl0) u estatus
registar (ctl1), pamteći pritom svoj pre-exception status 2. Obriše U bit status registra, prevodeći procesor u
supervizor mod 3. Obriše PIE bit of status registra, onemogućavajući time
eksterne procesorske prekide 4. Upiše adresu instrukcije nakon izuzetka u ea registar
(r29)
5. Prebci izvršavanje na adresu exception handler-a (exception handler - upravljač izuzeća) koji utvrđuje uzroke prekida
Adresa exception handler-a je postavljena u toku generisanja sistema. U toku rada, ova adresa je fiksna i ne može se promeniti od strane softvera. Programeri joj ne mogu direktno pristupiti i zato mogu pisati programe bez ikakvih informacija o njoj.
Obrada izuzetaka
Način programiranja Nios II procesor
32
Exception handler je rutina koja utvrđuje uzroke svakog izuzetka, a onda upućuje na određenu exception-rutinu koja odgovara prekidu.
Tipovi izuzetaka
Nios II izuzeci spadaju u jednu od sledećih kategorija:
hardverski prekid softverska zamka izvedena instrukcija ostalo
U sledećim sekcijama je detaljno opisan svaki od navedenih tipova izuzetaka. Hardverski prekid
Neki eksterni izvor, kao što je na primer neki periferni uređaj, može da zatraži hardverski interapt, pojavljujući se sa zahtevom na nekom od 32 procesorova ulaza koji su namenjeni zahtevima za prekid, irq0 do irq31. Hardverski prekid je generisan, ako i samo ako je svaki od sledeća tri uslova ispunjen:
PIE bit u status registru (ctl0) ima vrednost 1 neki interrupt-request ulaz, irqn, je prihvaćen odgovarajući n –ti bit u ienable registru (ctl3) je 1.
Prilikom hardverskog prekida, PIE bit se setuje na vrednost 0, onemogućavajući buduće prekide. Vrednost ipending registra (ctl4) ukazuje na to koji je prekidni zahtev (IRQ) u toku. Slika 3–2 na strani 33, prikazuje odnos između registara ipending, ienable, PIE bita i generisanja nekog interapta.
Način programiranja Nios II procesor
33
Slika 3–2. Odnos između registara ipending, ienable, PIE bita i hardverskog prekida
Programska exception-rutina određuje koji od tekućih prekida ima najveći priotitet za obradom, a zatim prebacije kontrolu na odgovarajuću prekidnu servisnu rutinu (ISR-interrupt service routine). ISR mora da spreči prekid da bude dalje vidljiv (bilo njegovim uklanjanjem sa izvora ili maskiranjem koristeći ienable registar) pre povratka i/ili pre ponovne dozvole PIE-bita. ISR mora takođe i da sačuva vrednosti registara estatus (ctl1) i ea (r29) pre ponovne dozvole PIE-bita. Prekidi mogu da se ponovo aktiviraju upisivanjem vrednosti 1 za PIE-bit i da se na taj način dozvoli trenutnom ISR-u da bude isprekidan. Obično exception-rutine uređuju sadržaj ienable registra tako da IRQ-ovi sa jednakim ili nižim prioritetom budu blokirani pre nego što im se oslobađanjem resursa ponovo ne ukaže mogućnost da deluju.
Način programiranja Nios II procesor
34
Pogledajte naslov “Ugnježdeni izuzeci” na strani 36.
Softverska zamka
Kada program izda instrukciju trap, generiše se izuzetak koji nazivamo “softverska zamka”. Programi obično izdaju ovakvu instrukciju kada su im potrebne usluge operativnog sistema. Exception handler operativnog sistema određuje uzroke “zamke” i celishodno na nju odgovara.
Izvedene instrukcije
Kada procesor dobije validnu instrukciju, koja pritom nije implementirana u hardveru, generiše se izuzetak “neugrađene instrukcije”. Exception handler utvrđuje koja je instrukcija generisala izuzetak. Ako instrukcija nije implementirana hardverski, dalje upravljanje prelazi na exception-rutinu koja emulira datu operaciju softverski. Pogledajte naslov “Potencijalne neugrađene instrukcije” na strani *.
Napominjemo da pojam “izvedena instrukcija” (“unimplemented instruction”) ne znači i “nevažeća instrukcija”. Ponašanje procesora prema nedefinisanoj, nevažećoj instrukciji, zavisi od tipa Nios II jezgra. Kod većine implementacija Nios II jezgra, izvršavanje nevažeće instrukcije proizvodi nedefinisan rezultat.
Ostali izuzeci
U predhodnom tekstu smo opisali sve tipove izuzetaka koji su bili definisani od strane Nios II arhitekture u trenutku njenog objavljivanja. Međutim, neke implementacije procesora mogu da generišu izuzetke koji ne spadaju niti u jednu od ranije već pomenutih kategorija. Na primer, buduće implementacije mogu da ponude modul za upravljanje memorijom (MMU-memory management unit) koji generiše pristup nasilnim izuzetkom. Zbog toga robustni exception handler treba da pruži siguran odgovor (kao što je izdavanje upozorenja) u slučaju da ne može tačno da odredi uzrok izuzetka.
Način programiranja Nios II procesor
35
Određivanje uzroka izuzetka
Upravljač izuzecima - exception handler, mora da utvrdi uzrok svakog izuzetka, a zatim prebaci dalje upravljanje na odgovarajuću prekidnu rutinu. Slika 3–3 prikazuje kako teče proces kojim se ispituje izvor izuzetka.
Slika 3–3. Proces utvrđivanja uzroka izuzetka
Ako EPIE bit estatus registra (ctl1) ima vrednost 1 i vrednost ipending registra (ctl4) je različita od nule, izuzetak je prouzrokovan od strane eksternog hardverskog prekida. U suprotnom, izuzetak je mogao da nastane kao posledica “softverske zamke” ili neke izvedene instrukcije. Da bi smo raspoznali da li je u pitanju “softverska zamka” ili izvedena instrukcija, pročitaćemo instrukciju na adresi ea–4. Ako se na toj adresi nalazi instrukcija trap, izuzetak je tipa “softverska zamka”. Ako je instrukcija na adresi ea-4 neka od instrukcija
Način programiranja Nios II procesor
36
koja se može implementirati softverski, izuzetak je prouzrokovan “izvedenom instrukcijom”. Pogledati naslov “Potencijalne izvedene instrukcije” na strani 46. Ako nijedan od pomenutih uslova nije ispunjen, izuzetak je nepoznatog tipa.
Ugnježdeni izuzeci Prekidne rutine moraju da povedu posebnu pažnju pre:
dodele trap instrukcije dodele izvedene instrukcije ponovne dozvole hardverskog prekida
Pre preuzimanja bilo koje od ovih akcija, prekidne rutine moraju da sačuvaju vrednosti estatus (ctl1) i ea (r29) registara, kako bi ih oni mogli povratiti na pravi način prilikom završetka rada sa rutinom.
Povratak od izuzetka Instrukcija eret se koristi za nastavljanje izvršenja programa sa adrese na kojoj je bio pre pojave izuzetka. nstruction is used to resume execution from the pre-exception address. Osim registra et (r24), svaki od registara koji su bili modifikovani za vreme procesiranja izuzetka, mora da bude obnovljen od prekidne rutine pre napuštanja procesiranja izuzetka. Kada izvršava eret instrukciju, procesor:
1. kopira sadržaj registra estatus(ctl1) u registar status(ctl0)
2. prebacuje izvršenje programa na adresu koja je u ea
registru (r29). Povratak adrese Povratak adrese iziskuje izvesnu pažnju kada je u pitanju vraćanje sa izvršetka prekidne rutine. Nakon što se izuzetak pojavi, ea sadrži adresu instrukcije koja bi sledila u trenutku kada je izuzetak generisan.
Pri povratku sa izuzetka tipa “softverska zamka” ili “izvedena instrukcija”, izvršavanje programa mora da se nastavi od
Način programiranja Nios II procesor
37
naredne instrukcije, u odnosu na onu koja je bila u toku kada je program preusmeren na izvršavanje prekidne rutine. Zbog ovoga, ea registar mora da sadrži korektnu adresu povratka.
Sa druge strane, izuzeci hardverskog prekida moraju da povrate izvršavanje od instrukcije koja ih je prekinula. U tom slučaju, “upravljač izuzecima” mora da oduzme 4 od sadržaja ea registra, kako bi ukazao na prekinutu instrukciju.
Prekid je promena upravljanja normalnog programskog toka izvršavanja, izazvana break instrukcijom, ili od strane JTAG debag modula. Softverski alati za debagovanje mogu da preuzmu kontrolu nad Nios II procesorom preko JTAG debag modula. Isključivo alati za debagovanje upravljaju procesorom kada se on nalazi u debag‐modu; aplikacioni i sistemski kod se nikada ne izvršavaju u ovom modu. Obrada prekida je način na koji softverski alati za debagovanje implementiraju dijagnostičke metode, kao što su tačke prekida (breakpoints) i tačke nadgledanja (watchpoints). Obrada prekida je slična obradi izuzetaka, ali je mehanizam prekida nezavistan od tretiranja izuzetka. Prekid se, naime, može javiti i za vreme obrade izuzetka, dozvoljavajući alatu za debagovanje, da prepravlja odluke “upravitelja izuzecima” (exception handler). Procesor ulazi u stanje obrade prekida pod sledećim okolnostima:
procesor dobija break instrukciju JTAG debag modul prihvata hardverski prekid
Prekid dovodi do toga, da procesor preduzme automatski sledeće korake:
1. sačuva sadržaj status registra (ctl0) u registar bstatus (ctl2)
2. postavi vrednost U bita u status registru na 0, vršeći
time prebacivanje u supervizor-režim rada
3. postavi i vrednost PIE bita status registra na 0, onemogućavajući time buduće eksterne prekide
4. upiše adresu instrukcije koja sledi prekid u ba registar
(r30)
Obrada prekida
Način programiranja Nios II procesor
38
5. prebaci izvršavanje na adresu break handler-a. Ova adresa je
specificirana još u toku gnerisanja sistema. Povratak sa prekida Nakon čina obrade prekida, alat za debagovanje napušta upravljanje procesorom, izvršavajući bret instrukciju. Ovom instrukcijom se vraća sadržaj status registra kao i dalje izvršavanje programa sa adrese sačuvane u registru ba.
Upotreba registra Upravljač prekidima (break handler) može da koristi registar bt (r25) za pomoć čuvanja dodatnih registara. Osim ovog registra i svi ostali registri će se sigurno vratiti u svoje stanje pre prekida, nakon povratka sa obrade prekidne rutine.
Nios II adrese su 32-bitne, dozvoljavajući time pristup adresnom prostoru do 4 gigabajta! Međutim, mnoge implamentacije Nios II jezgra imaju redukovan broj bitova za adresiranje memorije i to najčešće 31 ili manje. Periferije, meorije za podatke i programske meorije su smeštene u isti adresni prostor. Opseg lokacija, odnosno segment, za periferije i pomenute namenske memorije je definisan prilikom generisanja sistema. Čitanje ili upisivanje na adresu koja nije određena kao “memorijska” ili “periferijska”, proizvešće nedefinisan rezultat. Procesorova magistrala za podatke je takođe širine 32 bita. Instrukcije su dostupne za čitanje i pisanje kao bajt podataka, polureč (16 bitova-half word), ili reč (32 bita - word). Nios II arhitektura koristi Little endian memorijski zapis, što je već ranije naglašeno i objašnjeno. Da se podsetimo, za podatke koji su smešteni u memoriji, a “širi” su od 8 bitova, bitovi veće težine se nalaze na višim adresama.
Pristup memoriji i periferijama
Način programiranja Nios II procesor
39
Adresni načini rada Nios II arhitektura podržava sledeće načine adresiranja memorije:
registarsko adresiranje (register addressing) relativno adresiranje (displacement addressing) neposredno adresiranje (immediate addressing) registarsko indirektno adresiranje (register indirect
addressing) apsolutno adresiranje (Absolute addressing)
Kod registarskog adresiranja, svi operandi su u registrima i rezultat se smešta nazad, ponovo u registar. Kod relativnog adresiranja, adresa se proračunava kao suma registra (ofset-adresa) i označene, 16-bitne neposredne vrednosti. Termin neposredno adresiranje ukazuje da podatak neposredno sledi opkod instrukcije u memoriji. Neposredni podatak predstavlja konstantnu vrednost, dok podatak koji se prenosi iz registra predstavlja promenljivu. Registarsko indirektno adresiranje ogovara relativnom adresiranju, s’ tim što je pomeranje konstantno i iznosi 0. Apsolutno adresiranje ograničenog opsega je ostvarljivo korišćenjem relativnog adresiranja sa registrom r0, čija je vrednost uvek 0x00.
Keš memorija
Nios II arhitektura i njoj pripadajući set instrukcija, su prilagođeni postojanju keš memorija za instrukcije i podatke. Upravljanje kešom je implementirano softverski, korišćenjem cache management-instrukcija. Ove instrukcije obezbeđuju inicijalizovanje keša, osvežavanje keša kada god je to potrebno, kao i zaobilaženje data-keša radi ispravnog pristupa memoriji, odnosno segmentu periferija.
Neka jezgra Nios II procesora podržavaju mehanizam nazvan bit-31 cache bypass za izbegavanje keša, oslanjajući se na vrednost bita najveće težine u adresi. Adresni prostor takve implementacije je 2 gigabajta.
Kod napisan za procesorsko jezgro sa keš memorijom, će se korektno ponašati i na procesoru koji ne poseduje keš. Obrnuto ne važi. Zbog toga, da bi program korektno radio na svim implementacijama Nios II jezgra, mora da se ponaša kao da
Način programiranja Nios II procesor
40
instrukcioni i data-keš postoji. U sistemima u kojima keš memorije ne postoje, cache management-instrukcije nemaju dejstva. Izvesna pažnja je potrebna da bi se obezbedila koherencija keša nakon reseta procesora. Pogledajte u nastavku temu “Reset stanje procesora” za upoznavanje više detalja. U vezi podataka oko arhitekture keša i hijerarhije memorije, pogledajte ponovo poglavlje 2 ovog rada, “Arhitektura procesora”.
Nakon reseta, Nios II procesor izvodi sledeće akcije:
1. postavlja vrednosti status registra na 0x0
2. postavlja adresu reset-rutine (reset address)
3. počinje izvršavanje od reset adrese. Postavljanje vrednosti status registra (ctl0) u 0, ima efekta na stavljanje procesora u supervizor-mod i zabrane hardverskih prekida.
Posle reseta, sadržaj keš memorije je neodređen. Da bi smo osigurali koherenciju keš memorije nakon reseta, reset-rutina mora odmah da inicijalizuje instrukcioni keš. Dalje, svaka reset-rutina ili bilo koja druga naredna rutina, trebalo bi da pristupi inicijalizaciji data-keša. Reset stanje je nedefinisano za sve ostale sistemske komponente, uključujući tu, ali ne u potpunosti, sledeće stavke:
registre opšte namene, izuzev registra zero (r0), čija je vrednost permanentno nula
kontrolne registre, izuzev registra status (ctl0) koji se resetuje u 0x0
memoriju za instrukcije i podatke keš memoriju, osim instruction-cache linije koja pripada
reset adresi periferije; odnosi se na odgovarajuće periferne strane sa
podacima ili specifikacije za uslove reseta dodatu instrukcionu logiku; odnosi se na specifikaciju
dodate instrukcije za uslove reseta.
Reset stanje procesora
Način programiranja Nios II procesor
41
Nios II arhitektura je load-store arhitektura. Load i store instrukcije upravljaju svim kretanjem podataka između registara, memorije i periferija. Memorije i periferije dele isti adresni prostor. Na narednim slikama je simbolično predstavljen tok izvršenja instrukcije sabiranja Add, na principima load-store arhitekture. Definisane su, kao što smo već i najavili, posebne funkcije za pristup memoriji: load i store. Tok izvršenja koji sledi, a koji respektivno prate i priložene slike, izgleda na sledeći način:
prvo se učitava prvi operand iz memorije i prebacuje u registar
zatim učitavamo iz memorije i smeštamo u registar drugi operand
izvršavamo operaciju nad registrima (vidimo da su i operandi i lokacija rezultata eksplicitni)
rezultat se zatim upisuje u registar, a odatle izričito treba da bude zapamćen nazad u memoriji.
Load-store arhitektura
Način programiranja Nios II procesor
42
Ovaj deo uvodi instrukcije Nios II procesora, kategorizujući ih prema tipu operacije koju izvode.
Instrukcije za transfer podataka
U tabeli 3–4 su opisane sledeće instrukcije: ldw, stw, ldwio, i stwio. Instrukcije za transfer podataka koje podržavaju transfer bajt‐podatka i polureči su opisane u tabeli 3–5.
Tabela 3–4. Instrukcije za transfer podataka (ldw, stw, ldwio i stwio)
Instrukcija Opis
ldw stw Instrukcija ldw/stw učitava/upisuje 32‐bitnu podatkovnu reč iz/u
memoriju. Efektivna adresa je suma sadržaja registra i neposredno označene vrednosti sadržane u instrukciji. Transfer u memoriju može da bude “keširan” ili “baferovan” da bi se povećale performanse programa. Transfer podataka za I/O periferije treba da koristi instrukcije ldwio i stwio.
ldwio stwio Instrukcije ldwio i stwio učitavaju i upisuju 32‐bitne podatkovne reči
iz/u periferije (periferne memorijske uređaje) i to bez keširanja i baferovanja.
Tabela 3–5. Instrukcije za transfer podataka
Instrukcija Opis ldb ldbu stb ldh ldhu sth
Instrukcije ldb, ldbu, ldh i ldhu služe za učitavanje bajta ili polureči iz memorije u registar. Instrukcije ldb i ldh znakovima produžuju vrednost do 32 bita, a ldbu i ldhu nulama produžavaju vrednost do dužine od 32 bita. stb i sth čuvaju bajt‐podatke i vrednosti dužine polureči, respektivno. Pristup memoriji može da bude preko keša ili bafera, što povećava performanse sistema. Transfer podataka sa I/O periferijama koristi “io” sufiks u predhodnim instrukcijama i opisan je u sledećem redu.
ldbio ldbuio stbio ldhio ldhuio sthio
Ove instrukcije vrše operacije load/store i to sa podacima dužine bajta ili polureči, a odnose se na periferije, kada nema keširanja i baferovanja.
Kategorije instrukcija
Način programiranja Nios II procesor
43
Aritmetičke i logičke instrukcije
Logičke instrukcije omogućavaju izvođenje logičkih operacija and, or, xor i nor. Aritmetičke instrukcije omogućavaju vršenje sabiranja, oduzimanja, množenja i deljenja, tebela 3-6.
Tabela 3–6. Aritmetičke i logičke instrukcije
Instrukcija Opis and or xor nor
Ovo su standardne logičke operacije nad podacima dužine 32 bita. Ove instrukcije izumaju vrednosti iz dva registra, a rezultat upisuju u treći registar.
andi ori xori Ove instrukcije nazivamo “neposrednim” verzijama instrukcija and, or, i
xor. 16‐bitna neposredna vrednost se dopunjava nulama do dužine od 32 bita, a zatim kombinuje sa registarskom vrednošću kako bi se formirao rezultat.
andhi orhi xorhi Kod ove varijante instrukcija and, or i xor, 16‐bitna neposredna vrednost
se pomera logički ulevo za 16 bitova, kako bi se formirao 32‐bitni operand. Nule su pomerene zdesna.
add sub mul div divu
Ovo su instrukcije koje služe za obavljanje standardnih aritmetičkih operacija nad 32‐bitnim operandima. Za izvođenje operacije se uzimaju dva registra kao ulazi, a rezultat se pamti u trećem registru.
addi subi muli
Ove instrukcije nazivamo “neposrednim” verzijama instrukcija add, sub i mul. Instrukcijska reč uključuje 16‐bitnu označenu vrednost.
mulxss mulxuu Ove instrukcije omogućavaju pristup gornjim bitovima, od operacije
množenja 32x32. Odabraćemo odgovarajuću instrukciju u zavisnosti od toga da li operandi treba da budu tretirani kao označene ili neoznačene vrednosti.
mulxsu Ova instrukcija se koristi za računanje 128‐bitnog rezultata prilikom množenja 64x64.
Način programiranja Nios II procesor
44
Move instrukcije
Ove instrukcije omogućavaju izvođenje operacije “pomeranja”, kojom se kopira sadržaj jednog registra, ili dela registra, u neki drugi registar. Pogledajte tabelu 3-7.
Tabela 3–7. Move instrukcije
Instrukcija Opis mov movhi movi movui movia
Instrukcija mov kopira vrednost jednog registra u drugi registar. movi pomera 16‐bitnu, neposrednu vrednost u registar i znakovno je dopunjuje do vrednosti od 32 bita. Instrukcije movui i movhi pomeraju 16‐bitnu neposrednu vrednost u gornji ili donji 16‐bitni segment registra, ubacujući nule na preostalim bit‐pozicijama. Upotreba instrukcije movia je za učitavanje registra sa neke adrese.
Način programiranja Nios II procesor
45
Instrukcije za poređenje Nios II arhitektura podržava brojne instrukcije za poređenje. Sve one porede dva registra, ili registar i neposrednu vrednost i upisuju u zavisnosti od reziltata, ili 1 (ako je odnos tačan), ili 0. Ove instrukcije odgovaraju operatorima poređenja, odnosno relacionim operatorima, koji su podržani i u C programskom jeiku. Pogledajte tabelu 3–8.
Tabela 3–8. Instrukcije za poređenje
Instrukcija Opis
cmpeq ==
cmpne !=
cmpge signed >=
cmpgeu unsigned >=
cmpgt signed >
cmpgtu unsigned >
cmple unsigned <=
cmpleu unsigned <=
cmplt signed <
cmpltu unsigned <
cmpeqi cmpnei cmpgei cmpgeui cmpgti cmpgtui cmplei cmpleui cmplti cmpltui
Ove instrukcije su “neposredne” verzije operacija poređenja. One porede vrednost registra i 16‐bitnu neposrednu vrednost. Označene operacije znakovno dopunjuju neposrednu vrednost do 32 bita. Neoznačene operacije popunjavaju više bitove sa nulama.
Način programiranja Nios II procesor
46
Instrukcije za pomeranje i rotiranje Izvođenje operacija pomeranja i rotiranja je omogućeno upotrebom instrukcija koje su navedene u tabeli 3‐9. Broj bitova koji želimo da pomeramo ili rotiramo, može da se specificira u registru, ili kao neposredna vrednost.
Tabela 3–9. Instrukcije za pomeranje i rotiranje
Instrukcija Opis rol ror roli Instrukcije rol i roli omogućavaju rotiranje bitova ulevo. Instrukcija
roli koristi neposrednu vrednost za specificiranje broja bitova koji se rotiraju. Instrukcija ror omogućava rotiranje bitova u desno. Ne postoji “neposredna” varijanta ove onstrukcije, jer se umesto toga može upotrebiti instrukcija roli, koja će izvršiti ekvivalentnu operaciju.
sll slli sra srl srai srli
Ove instrukcije implementiraju <<and >> operatore C programskog jezika. Instrukcije sll, slli, srl i srli, omogućavaju operacije levog i desnog logičkog pomeranja bita, ubacivanjem nula. Instrukcije sra i srai omogućavaju aritmetičko pomeranje bita u desno. Instrukcije slli, srli i srai, koriste neposrednu vrednost za specificiranje broja bitova koji se pomeraju.
Način programiranja Nios II procesor
47
Instrukcije za upravljanje tokom uzvršenja programa
Nios II arhitektura podržava instrukcije bezuslovnog skoka i instrukcije poziva potprograma, koje su navedene u tabeli 3–10.
Tabela 3–10. Instrukcije za upravljanje tokom izvršenja programa
Instrukcija Opis call
Ova instrukcija poziva potprogram koristeći neposrednu vrednost kao apsolutnu adresu potprograma i čuva povratnu adresu u registru ra.
callr
Ova instrukcija poziva potprogram sa apsolutne adrese sadržane u registru i čuva povratnu adresu u registru ra.
ret
Instrukcija ret se koristi za povratak iz potprograma koji je predhodno pozvan instrukcijama call ili callr. ret učitava i izvršava instrukciju određenu adresom u registru ra.
jmp Instrukcija jmp uslovljava skok na apsolutnu adresu sadržanu u registru. jmp se koristi za implementiranje prekidnih naredbi C programskog jezika.
br Grananje koje se odnosi na trenutnu instrukciju. Označena neposredna vrednost daje ofset adresu sledeće instrukcije koju treba izvršiti.
Instrukcije uslovnog grananja
Instrukcije uslovnog grananja porede vrednosti registara direktno i dovode do grananja ako odnos u kome stoji njihov sadržaj zadovoljava postavljeni uslov. Pogledajte tabelu 3–11 na sledećoj strani. Uslovno grananje podržava podjednako i odnose poređenja programskog jezika C:
== and != < and <= (signed and unsigned) < and >= (signed and unsigned).
Način programiranja Nios II procesor
48
Ostale instrukcije za kontrolu toka izvršavanja programa
U tabeli 3–12 su pobrojane i ukratko opisane i ostale instrukcije koje upravljaju tokom izvršavanja programa.
Tabela 3–12. Ostale instrukcije za kontrolu toka izvršavanja programa
Instrukcija Opis trap eret Instrukcije trap i eret služe za generisanje i povratak sa izuzetaka. One
su slične paru call/ret, ali se umesto na potprograme, one odnose na izuzetke. trap čuva sadržaj status registra u estatus registar, pamti adresu povratka u ea registar, a onda prebacuje izvršavanje na “upravljača prekidima”. eret vrši povratak sa obrade izuzetka, vraćajući sadržaj status registru iz estatus registra u kome je bio sačuvan i izvršavajući instrukciju na koju ukazuje adresa u ea registru.
break bret Instrukcije break i bret služe za generisanje, odnosno povratak sa
prekida. Ove instrukcije se koriste isključivo od strane softverskih alata za debagovanje, dok ih programeri nikada ne koriste u aplikacionom kodu.
rdctl wrctl Ove instrukcije služe za čitanje i upisivanje u kontrolne registre.
flushd flushi initd initi
Ove instrukcije se koriste za upravljanje instrukcionim i data‐keš memorijama.
sync Ovom instrukcijom obezbeđujemo, da se sve predhodno zadate operacije okončaju, pre nego što se dopusti izvršenje naredne operacije čitanja ili upisa.
Tabela 3–11. Instrukcije uslovnog grananja
Instrukcija Opis bge bgeu bgt bgtu ble bleu blt bltu beq bne
Ove instrukcije ostvaruju grananje na osnovu poređenja vrednosti dva registra i ispitivanja istinitosti iskaza kojim smo definisali njihov međusobni relacioni odnos. Pogledajte naslov ”Instrukcije za poređenje” na strani 45, radi podsećanja na ugrađene relacije u Nios II jezgro.
Način programiranja Nios II procesor
49
Custom - instrukcije
Custom-instrukcije su instrukcije definisane od strane korisnika, a kojima je omogućen pristup na niskom nivou custom instruction-logici. Ugrađivanje custom-instrukcija se vrši prilikom generisanja sistema i instrukcije implementirane na ovaj način su upotrebljive samo u okviru datog dizajna, tj. zavisne su od sistema. Više informacija, pronaćićete u poglavlju 2, na strani 7. Instrukcija nop Nios II asembler poseduje instrukciju nop, koja je ustvari, nepostojanje operacije. Drugim rečima, njome se ne izvršava nikakva operacija! Potencijalne neugrađene instrukcije Neka Nios II procesorska jezgra ne podržavaju sve instrukcije hardverski. U takvom slučaju, procesor generiše izuzetak, nakon što mu je dodeljena neugrađena instrukcija (unimplemented instruction). Jedino sledeće instrukcije mogu da generišu izuzetak tipa neugrađene instrukcije:
mul muli mulxss mulxsu mulxuu div divu
Sve ostale instrukcije nisu u mogućnosti da izazovu izuzetak ovakvog tipa. Kod prekidnih rutina moramo da budemo na oprezu ako koristimo ovakve instrukcije, jer one mogu umeđuvremenu generisati novi izuzetak, pre nego što je predhodni pravilno opslužen.
50
4. Tipovi Nios® II jezgra
U ovom poglavlju ćemo predstaviti sve moguće implementacije Nios® II procesorskog jezgra, dostupne do trenutka objavljivanja ovog dokumenta. U tabeli 4-1, su uporedno pobrojane sve karakteristične osobine sledećih jezgara:
“Nios II/f Core” “Nios II/s Core” “Nios II/e Core”
Sva jezgra podržavaju skup instrukcija Nios II arhitekture, koji je definisan i opisan u narednom poglavlju. Dalje ćemo se ograničiti na detaljnije opisivanje Nioa II/e jezgra, koje je i najmanje i najjednostavnije, ali ujedno i najrasprostranjenije, jer zadovoljava većinu poptreba kod manje zahtevnih aplikacija. Za one zahtevnije projektante, priložene uporedne karakteristike u tabeli će pomoći prilikom donošenja odluke o pravilnom izboru jezgra, koje će zadovoljiti, kako njihove lične, tako i afinitete same aplikacije.
Tabela 4–1. Nios II jezgra (prvi od dva dela)
Jezgro Osobine
Nios II/e Nios II/s Nios II/f
Cilj najmanja
moguća veličina jezgra
mala veličina jezgra
najkraće vreme izvršavanja
DMIPS/MHz (1) 0.15 0.74 1.16 Max. DMIPS (2) 31 127 218
Performanse
Max. fMAX (2) 200 MHz 165 MHz 185 MHz Površina < 700 LEs; < 350
ALMs < 1400 LEs; < 700
ALMs < 1800 LEs; <900
ALMs Protočnost 1 Stage 5 Stages 6 Stages Eksterni adresni prostor 2 Gbytes 2 GBytes 2 GBytes
Cache – 512 bytes to 64 kbytes
512 bytes to 64 kbytes
Pipelined Memory Access – Da Da
Branch Prediction – Statičko Dinamičko
Bas instrukcija
Tightly Coupled Memory – Opcija Opcija
Altera Corporation 5–1 May 2007, Device Support
Uvod
Tipovi Nios® II jezgra Nios II procesor
51
Tabela 4–1. Nios II jezgra (drugi deo)
Jezgro Osobine
Nios II/e Nios II/s Nios II/f Cache – – 512 bytes to 64
Kbytes Pipelined Memory Access – – –
Cache Bypass Methods – –
I/O instructions; bit-31 cache
bypass
Data-bas
Tightly Coupled Memory – – Opciono
Hardware Multiply – 3-Cycle (3) 1-Cycle (3) Hardware Divide – Opciono Opciono
ALU
Shifter 1 Cycle-per-bit 3-Cycle Shift (3) 1-Cycle Barrel
Shifter (3) JTAG interface, run control, software breakpoints
Opciono Opciono Opciono
Hardware Breakpoints – Opciono Opciono
JTAG debag modul
Off-Chip Trace Buffer – Opciono Opciono
Exception Types Software trap, unimplemented
instruction, hardware interrupt
Software trap, unimplemented
instruction, hardware interrupt
Software trap, unimplemented
instruction, hardware interrupt
Kontroler izuzetaka
Integrated Interrupt Controller Da Da Da
Podrška korisničkom modu Ne; Permanentno u
zaštićenom načinu rada
Ne; Permanentno u
zaštićenom načinu rada
Ne; Permanentno u
zaštićenom načinu rada
Podrška korisničkih instrukcija Da Da Da Napomena u vezi tabele 4–1: (1) DMIPS performanse za Nios II/s i Nios II/f jezgra zavise od opcije hardverskog
množenja. (2) Koristeći najbržu hardversku opciji množenja i čip Stratix II FPGA u najbržem modu rada. (3) Performanse množenja i pomeranja, zavise od toga koja je opcija množenja upotrebljena.
Ako se umesto hardverskog množenja koristi množenje emulirano softverom, onda je i za operaciju “šiftovanja” potreban jedan ciklus po bitu.
Tipovi Nios® II jezgra Nios II procesor
52
Podržane familije FPGA čipova Sva Nios II jezgra, podržavaju sledeće familije Alterinih FPGA čipova:
Stratix® Stratix II CycloneTM Cyclone II
Nios II/e jezgro spada u klasu “ekonomičnih” jezgra, dizajniranih na princupu najmanje moguće veličine. Altera je dizajnirala Nios II/e jezgro sa jednim jedinim ciljem: redukovati upotrebu resursa što je moguće više, ali i dalje zadržati potpunu kompatibilnost sa setom instrukcija Nios II arhitekture. Hardverski resursi su sačuvani, na uštrb performansi. Nios II/e jezgro je otprilike za polovinu manje od jezgra Nios II/s, ali su mu srazmerno tome i performanse lošije. Rezultujuće jezgro je optimalno za aplikacije osetljive po pitanju cene, a i sve one koje zahtevaju prostu kontrolnu logiku. Pregled mogućnosti jezgra Nios II/e Nios II/e jezgro:
izvršava u najboljem slučaju jednu instrukciju za 6 taktova može da pristupa eksternom adresnom prostoru veličine 2
Gbajta podržava dodavanje korisničkih instrukcija podržava JTAG modul za debagovanje ne pruža hardversku podršku za potencijalne neugrađene
instrukcije nema ni data-keš ni instrukcioni keš.
Sledeća diskusija ističe opšte elemente implementacije Nios II/e jezgra. Ona ne zalazi u detalje implementacije na niskom nivou, koji nemaju nekog posebnog uticaja na projektante, prilikom dizajniranja hardvera i softvera.
Jezgro Nios II/e
Tipovi Nios® II jezgra Nios II procesor
53
Fajl registar
U toku generisanja sistema, kontrolnom registru cpuid (clt5) se dodeljuje vrednost koja je jedinstvena za svaki procesor u sistemu.
Aritmetičko-logička jedinica Nios II/e jezgro ne pruža mogućnost hardverske podrške za potencijalne neugrađene instrukcije. Sve neugrađene instrukcije se moraju emulirati softverski. Nios II/e jezgro koristi posebno šift-kolo za izvođenje operacija pomeranja i rotiranja. Ova namenska struktura izvodi šiftovanje i rotiranje jednog bita po ciklusu.
Pristup memoriji
Nios II/e jezgro ne poseduje ni data-keš ni instrukcioni keš. Pristup memoriji i periferijama se obavlja uz pomoć Avalon-transfera. Ovo jezgro može da adresira do 2 Gbajta spoljne memorije i ne podržava mehanizam obilaska keša “bit-31 data cache bypass”. Ali ipak, bit najveće težine u adresama je ignorisan, kako bi se sačuvala konzistencija sa implementacijama onih Nios II jezgara, koja podržavaju ovaj metod.
Faze izvršavanja instrukcije Pozabavićemo se sada protočnim ponašanjem, odnosno procenom vremena izvršavanja instrukcija. Mnogi programeri aplikacija nikada nisu imali potrebu da analiziraju performanse pojedinačnih instrukcija i živeće i dalje veoma srećnim životom, bez ikakve potrebe da se zamaraju tabelom koja sledi u nastavku priče.
Performanse instrukcija
Nios II/e jezgro obavlja jednu instrukciju u vremenu i procesor čeka da se ta instrukcija kompletira, pre nego što pribavi i izvrši sledeću instrukciju. Baš zbog toga što se svaka instrukcija kompletira pre nego što se sledeća izvrši, predviđanje grananja nije neophodno. Maksimum performansi je 6 ciklusa za jednu
Tipovi Nios® II jezgra Nios II procesor
54
instrukciju. Da bi ostvario 6 ciklusa, Avalonov instrukcioni master-port mora da pribavi instrukciju u jednom taktu. Poseban deo Avalonovog master-porta direktno produžava vreme izvršavanja instrukcije. Performanse po pitanju brzine izvršavanja, odnosno potrebnog broja taktova, za sve instrukcije, prikazane su u tabeli 5–2.
Tabela 5–2. Performanse izvršavanja instrukcija za Nios II/e jezgro
Instrukcija Taktovi
Uobičajene ALU instrukcije (add, cmplt,…) 6
branch, jmp, ret, call, callr 6
trap, break, eret, bret, flushp, wrctl, rdctl,…
6
load word 6 + trajanje Avalon transfera pri čitanju
load halfword 9 + trajanje Avalon transfera pri čitanju
load byte 10 + trajanje Avalon transfera pri čitanju
store 6 + trajanje Avalon transfera pri upisivanju
Shift, rotate 7 to 38
Sve ostale instrukcije 6
Korisničke instrukcije 6
Multi-ciklusne korisničke instrukcije ≥6
Upravljanje izuzecima Nios II/e jezgro podržava sledeće tipove izuzetaka:
hardverske prekide softverske zamke neugrađene instrukcije
Tipovi Nios® II jezgra Nios II procesor
55
JTAG modul za debagovanje Nios II/e jezgro podržava JTAG modul za debagovanje, pružajući time JTAG interfejs softverskim alatima za debagovanje. Međutim, nije omogućeno umetanje hardverskih tačaka prekida.
Nepodržane osobine Nios II/e jezgro ne podržava “korisnički režim rada” (user mode), koji je ranije predstavljen. Ova činjenica nema uticaja na aplikacioni kod. Međutim, može uticati na deo sistemskog koda koji se odnosi na korisnički režim. Nios II/e jezgro ne može da upravlja izvršenjem instrukcija koje imaju nedefinisan opkod. Ako procesor izvršava neku instrukcijsku reč, u kojoj figuriše nepravilno definisan opkod instrukcije, njegovo dalje ponašanje se ne može predvideti.
56
5. Skup instrukcija
U ovom poglavlju će biti opisani formati Nios® II instrukcijskih reči, a biće informativno dat i skup svih naredbi Nios II arhitekture. Neke od karakterističnih instrukcija će biti i kratko prokomentarisane. Format Nios II naredbi, ili instrukcijskih reči, može pripadati jednoj od sledećih kategorija: I-type, R-type i J-type. I-Type format naredbe
Ovaj tip formata naredbe, karakteriše to što poseduje neposrednu vrednost, ugrađenu u instrukcijsku reč. I-type instrukcijske reči sadrže:
6-bitno polje za opkod "OP" dva 5-bitna registarska polja "A" i "B" 16-bitno polje za neposredni podatak "IMM16"
U većini slučajeva, polja A i IMM16 određuju izvorne operande, a polje B određuje odredišni registar. IMM16 se smatra označenim, osim u slučaju logičkih operacija i neoznačenih poređenja. I-type instrukcije uključuju aritmetičke i logičke operacije kao što su addi i andi; operacije grananja; load i store operacije; operacije za upravljanje keš memorijom. Format I-type instrukcije izgleda ovako:
Format naredbi
Skup instrukcija Nios II procesor
57
R-Type format naredbe
Karakteristika koja određuje R-type format instrukcijske reči, je da su svi argumenti i rezultati specificirani kao registri. R-type instrukcije sadrže:
6-bitno polje za opkod "OP" tri 5-bitna registarska polja "A", "B" i "C" 11-bitno polje za prošireni opkod "OPX"
U većini slučajeva, polja A i B određuju izvorne operande, dok polje C određuje odredišni registar. Neke R-Type instrukcije ugrađuju malu neposrednu vrednost na mesto najmanje težine u polju OPX. R-type instrukcije uključuju aritmetičke i logičke operacije, kao što su add i nor; operacije poređenja, kao što su cmpeq i cmplt; custom - instrukcije; ostale operacije kojima su potrebni samo registarski operandi. Format R-type instrukcije izgleda ovako:
Skup instrukcija Nios II procesor
58
J-Type format naredbe
J-type instrukcija sadrži:
6-bitno polje za opkod 26-bitno polje za neposrednu vrednost podatka
Jedina J-type instrukcija je call. Format J-type instrukcije je sledećeg izgleda:
Skup instrukcija Nios II procesor
59
OP polje u Nios II instrukcijskoj reči sadrži kod date instrukcije. U tabeli 5-1 i tabeli 5-2, su navedeni kodovi i njima pripadajuće instrukcije.
Tabela 5–1. Opkodovi instrukcija
OP Instrukcija OP Instrukcija OP Instrukcija OP Instrukcija
0x00 call 0x10 cmplti 0x20 cmpeqi 0x30 cmpltui
0x01 0x11 0x21 0x31
0x02 0x12 0x22 0x32 custom
0x03 ldbu 0x13 0x23 ldbuio 0x33 initd
0x04 addi 0x14 ori 0x24 muli 0x34 orhi
0x05 stb 0x15 stw 0x25 stbio 0x35 stwio
0x06 br 0x16 blt 0x26 beq 0x36 bltu
0x07 ldb 0x17 ldw 0x27 ldbio 0x37 ldwio
0x08 cmpgei 0x18 cmpnei 0x28 cmpgeui 0x38
0x09 0x19 0x29 0x39
0x0A 0x1A 0x2A 0x3A R-Type
0x0B ldhu 0x1B 0x2B ldhuio 0x3B flushd
0x0C andi 0x1C xori 0x2C andhi 0x3C xorhi
0x0D sth 0x1D 0x2D sthio 0x3D
0x0E bge 0x1E bne 0x2E bgeu 0x3E
0x0F ldh 0x1F 0x2F ldhio
0x3F
Opkodovi instrukcija
Skup instrukcija Nios II procesor
60
Tabela 5–2. OPX enkodiranje za R-Type instrukcije
OPX Instrukcija OPX Instrukcija OPX Instrukcija OPX Instrukcija
0x00 0x10 cmplt 0x20 cmpeq 0x30 cmpltu
0x01 eret 0x11 0x21 0x31 add
0x02 roli 0x12 slli 0x22 0x32
0x03 rol 0x13 sll 0x23 0x33
0x04 flushp 0x14 0x24 divu 0x34 break
0x05 ret 0x15 0x25 div 0x35
0x06 nor 0x16 or 0x26 rdctl 0x36 sync
0x07 mulxuu 0x17 mulxsu 0x27 mul 0x37
0x08 cmpge 0x18 cmpne 0x28 cmpgeu 0x38
0x09 bret 0x19 0x29 initi 0x39 sub
0x0A 0x1A srli 0x2A 0x3A srai
0x0B ror 0x1B srl 0x2B 0x3B sra
0x0C flushi 0x1C nextpc 0x2C 0x3C
0x0D jmp 0x1D callr 0x2D trap 0x3D
0x0E and 0x1E xor 0x2E wrctl 0x3E
0x0F 0x1F mulxss 0x2F 0x3F
Skup instrukcija Nios II procesor
61
Tabelarni pregled instrukcija
Aritmetičke i logičke instrukcije – prvi deo
add Rdest, Rsrc1, Rsrc2 signed (with overflow) and unsigned (with carry) addition
addi Rdest, Rsrc1, IMM16 signed (with overflow) and unsigned (with carry) addition immediate
and Rdest, Rsrc1, Rsrc2 AND
andhi Rdest, Rsrc1, IMM16 AND immediate into high halfword
andi Rdest, Rsrc1, IMM16 AND immediate
div Rdest, Rsrc1, Rsrc2 signed divide
divu Rdest, Rsrc1, Rsrc2 unsigned divide
mul Rdest, Rsrc1, Rsrc2 multiply, store the 32 low-order bits of the product to Rdest
muli Rdest, Rsrc1, IMM16 multiply immediate, sign-extend the 16-bit immediate value to 32 bits, store the 32 low-order bits of the product to Rdest
mulxss Rdest, Rsrc1, Rsrc2
signed multiply, store the 32 high-order bits of the product to Rdest
mulxsu Rdest, Rsrc1, Rsrc2
treat Rsrc1 as a signed integer and Rsrc2 as an unsigned interger, store the 32 high-order bits of the product to Rdest
mulxuu Rdest, Rsrc1, Rsrc2
unsigned multiply, store the 32 high-order bits of the product to Rdest
nor Rdest, Rsrc1, Rsrc2 bitwise logical nor or Rdest, Rsrc1, Rsrc2 bitwise logical or
orhi Rdest, Rsrc1, IMM16 calculate the bitwise logical OR of Rsrc1 and
(IMM16:0x0000) and store the result in Rdest ori Rdest, Rsrc1, IMM16 calculate the bitwise logical OR of Rsrc1 and
(0x0000:IMM16) and store the result in Rdest rol Rdest, Rsrc1, Rsrc2 rotate Rsrc1 left by the number of bits specified in
Rsrc24..0
, the bits that shift out of the register rotate into the least-significant bit positions
roli Rdest, Rsrc1, IMM5 rotate Rsrc1 left by the number of bits specified in IMM5
ror Rdest, Rsrc1, Rsrc2 rotate Rsrc1 right by the number of bits specified in Rsrc2
4..0, the bits that shift out of the register rotate
into the most-significant bit positions
Skup instrukcija Nios II procesor
62
Aritmetičke i logičke instrukcije – drugi deo
sll Rdest, Rsrc1, Rsrc2 shift Rsrc1 left by the number of bits specified in Rsrc2
4..0 (inserting zeros)
slli Rdest, Rsrc1, IMM5 shift Rsrc1 left by the number of bits specified in IMM5 (inserting zeros)
sra Rdest, Rsrc1, Rsrc2 shift Rsrc1 right by the number of bits specified in Rsrc2
4..0 (duplicating the sign bit)
srai Rdest, Rsrc1, IMM5 shift Rsrc1 right by the number of bits specified in
IMM5 (duplicating the sign bit)
srl Rdest, Rsrc1, Rsrc2 shift Rsrc1 right by the number of bits specified in Rsrc2
4..0 (inserting zeros)
srli Rdest, Rsrc1, IMM5 shift Rsrc1 right by the number of bits specified in
IMM5 (inserting zeros)
sub Rdest, Rsrc1, Rsrc2 signed (with overflow) and unsigned (with carry) subtraction
subi Rdest, Rsrc1, IMM16 signed (with overflow) and unsigned (with carry) subtraction immediate
xor Rdest, Rsrc1, Rsrc2 calculate the bitwise logical exclusive XOR of Rsrc1 and Rsrc2
xorhi Rdest, Rsrc1, IMM16 calculate the bitwise logical exclusive XOR of Rsrc1 and (IMM16:0x0000)
xori Rdest, Rsrc1, IMM16 calculate the bitwise logical exclusive XOR of Rsrc1 and (0x0000:IMM16)
Skup instrukcija Nios II procesor
63
Instrukcije za vršenje poređenja – prvi deo
cmpeq Rdest, Rsrc1, Rsrc2 compare equal, Rdest = 1 if Rsrc1 == Rsrc2; otherwise Rdest = 0
cmpeqi Rdest, Rsrc1, IMM16 sign-extend the 16-bit immediate value IMM16 to 32 bits and compare it to the value of Rsrc1, if equal, Rdest = 1; otherwise Rdest = 0
cmpge Rdest, Rsrc1, Rsrc2 signed compare, if Rsrc1 >= Rsrc2, Rdest = 1; otherwise Rdest = 0
cmpgei Rdest, Rsrc1, IMM16 sign-extend the 16-bit immediate value IMM16 to 32 bits and compare it to the value of Rsrc1, if Rsrc1 >= IMM16, Rdest = 1; otherwise Rdest = 0
cmpgeu Rdest, Rsrc1, Rsrc2 unsigned compare, if Rsrc1 >= Rsrc2, Rdest = 1; otherwise Rdest = 0
cmpgeui Rdest, Rsrc1, IMM16 zero-extend the 16-bit immediate value IMM16 to 32 bits and compare it to the value of Rsrc1, if Rsrc1 >= IMM16, Rdest = 1; otherwise Rdest = 0
cmpgt Rdest, Rsrc1, Rsrc2 signed compare, if Rsrc1 > Rsrc2, Rdest = 1; otherwise Rdest = 0
cmpgti Rdest, Rsrc1, IMMED sign-extend the 16-bit immediate value IMMED to 32 bits and compare it to the value of Rsrc1, if Rsrc1 > IMMED, Rdest = 1; otherwise Rdest = 0
cmpgtu Rdest, Rsrc1, Rsrc2 unsigned compare, if Rsrc1 > Rsrc2, Rdest = 1; otherwise Rdest = 0
cmpgtui Rdest, Rsrc1, IMMED zero-extend the 16-bit immediate value IMMED to 32 bits and compare it to the value of Rsrc1, if Rsrc1 > IMMED, Rdest = 1; otherwise Rdest = 0
cmple Rdest, Rsrc1, Rsrc2 signed compare, if Rsrc1 <= Rsrc2, Rdest = 1; otherwise Rdest = 0
cmplei Rdest, Rsrc1, IMMED sign-extend the 16-bit immediate value IMMED to 32 bits and compare it to the value of Rsrc1, if Rsrc1 <= IMMED, Rdest = 1; otherwise Rdest = 0
cmpleu Rdest, Rsrc1, Rsrc2 unsigned compare, if Rsrc1 <= Rsrc2, Rdest = 1; otherwise Rdest = 0
cmpleui Rdest, Rsrc1, IMMED zero-extend the 16-bit immediate value IMMED to 32 bits and compare it to the value of Rsrc1, if Rsrc1 <= IMMED, Rdest = 1; otherwise Rdest = 0
Skup instrukcija Nios II procesor
64
Instrukcije za vršenje poređenja – drugi deo
cmplti Rdest, Rsrc1, IMM16
sign-extend the 16-bit immediate value IMMED to 32 bits and compare it to the value of Rsrc1, if Rsrc1 < IMM16, Rdest = 1; otherwise Rdest = 0
cmpltu Rdest, Rsrc1, Rsrc2
unsigned compare, if Rsrc1 < Rsrc2, Rdest = 1; otherwise Rdest = 0
cmpltui Rdest, Rsrc1, IMM16
zero-extend the 16-bit immediate value IMMED to 32 bits and compare it to the value of Rsrc1, if Rsrc1 < IMM16, Rdest = 1; otherwise Rdest = 0
cmpne Rdest, Rsrc1, Rsrc2 compare not equal, Rdest = 1 if Rsrc1 == Rsrc2; otherwise Rdest = 0
cmpnei Rdest, Rsrc1, IMM16
sign-extend the 16-bit immediate value IMM16 to 32 bits and compare it to the value of Rsrc1, if not equal, Rdest = 1; otherwise Rdest = 0
Skup instrukcija Nios II procesor
65
Branch i Jump instrukcije
beq Rsrc1, Rsrc2, label branch if equal
bge Rsrc1, Rsrc2, label signed branch if Rsrc1 greater than or equal to Rsrc2
bgeu Rsrc1, Rsrc2, label unsigned branch if Rsrc1 greater than or equal to Rsrc2
bgt Rsrc1, Rsrc2, label signed branch if Rsrc1 greater than Rsrc2
bgtu Rsrc1, Rsrc2, label unsigned branch if Rsrc1 greater than Rsrc2
ble Rsrc1, Rsrc2, label signed branch if Rsrc1 less than or equal to Rsrc2
bleu Rsrc1, Rsrc2, label unsigned branch if Rsrc1 less than or equal to Rsrc2
blt Rsrc1, Rsrc2, label signed branch if Rsrc1 less than Rsrc2
bltu Rsrc1, Rsrc2, label unsigned branch if Rsrc1 less than Rsrc2
bne Rssrc1, Rsrc2, label branch if not equal
br label unconditional branch
break debugging breakpoint
bret breakpoint return
call label call subroutine
callr Rsrc1 call subroutine in register, the value in Rsrc1 is the address of the next instruction
eret exception return
jump Rsrc1 transfer execution to the address contained in Rsrc1
ret return from subroutine
Skup instrukcija Nios II procesor
66
Instrukcije za učitavanje
Load byte from memory or I/O peripheral ldb/ldbio Rdest, byte_offset(Rsrc1)
compute the effective byte address specified by the sum of Rsrc1 and byte_offset, load the byte into Rdest and sigh-extend the 8-bit value to 32 bits
ldbu/ldbuio Rdest, byte_offset(Rsrc1)
compute the effective byte address specified by the sum of Rsrc1 and byte_offset, load the byte into Rdest and zero-extend the 8-bit value to 32 bits
Load half word from memory or I/O peripheral ldh/ldhio Rdest, byte_offset(Rsrc1)
compute the effective byte address specified by the sum of Rsrc1 and byte_offset, load the half word into Rdest and sign-extend the 16-bit value to 32 bits
ldhu/ldhuio Rdest, byte_offset(Rsrc1)
compute the effective byte address specified by the sum of Rsrc1 and byte_offset, load the half word into Rdest and zero-extend the 16-bit value to 32 bits
Load word from memory or I/O peripheral ldw/ldwio Rdest, byte_offset(Rsrc1)
compute the effective byte address specified by the sum of Rsrc1 and byte_offset, load the word into Rdest
Skup instrukcija Nios II procesor
67
Instrukcije za upisivanje
Store byte to memory or I/O peripheral stb/stbio Rsrc1, byte_offset(Rsrc2)
compute the effective byte address specified by the sum of Rsrc1 and byte_offset, store the low byte to the memory byte specified by the effective address
Store half word from memory or I/O peripheral sth/sthio Rdest, byte_offset(Rsrc1)
compute the effective byte address specified by the sum of Rsrc1 and byte_offset, store the low halfword to the memory location specified by the effective address
Store word from memory or I/O peripheral stw/stwio Rdest, byte_offset(Rsrc1)
compute the effective byte address specified by the sum of Rsrc1 and byte_offset, store the word to the memory location specified by the effective address
Skup instrukcija Nios II procesor
68
Instrukcije za prenos podataka
mov Rdest, Rsrc1 move register to register
movhi Rdest, IMMED move immediate into high halfword, and clear the lower halfword of Rdest to 0x0000
movi Rdest, IMMED move signed immedtiate into word
movia Rdest, label move immediate address into word
movui Rdest, IMMED move unsigned immediate into word, and zero-extend the immediate value IMMED to 32 bits
Ostale instrukcije
nextpc Rdest store the address of the next instruction to Rdest
nop no operation
rdctl Rdest, ctlN read from control register
wrctl ctlN, Rsrc1 write to control register
69
Drugi deo:
Nios II razvojni sistem
70
Nios II razvojni sistem
U ovom uvodnom delu, upoznaćemo Vas kako je tekao sistemski razvoj Nios II procesora. Ovaj priručnik je dobra polazna tačka za sve one koji se prvi put susreću sa Nios II procesorom ili uopšte sa konceptom izgradnje “embeded” sistema na FPGA čipu. U ovom vodiču ćemo kreirati Nios II hardver, a takođe i softver koji će se izvršavati na Nios II sistemu. Izgradnja “embeded” sistema na FPGA čipu je širok pojam, koji obuhvata potrebnu analizu sisitema kako po pitanju hardverskuh, tako i softverskih zadataka. Uputstvo koje je pred vama, vodi Vas kroz svaku od ovih osnovnih tema, sa posebnim osvrtom na korake dizajniranja hardvera. Tamo gde je potrebno, vodič će Vas uputiti ka naprednijim dokumentima, u kojima ćete pronaći više detalja.
Ako ste zainteresovani samo za razvoj softvera za Nios II
procesor, pogledajte članak Software Development Tutorial koji je dostupan u okviru Nios II IDE help podrške.
71
1. Početak rada sa Nios II sistemom
Naš projekat
Kada budete proučili ovo uputstvo, razumećete kako teče razvoj jednog Nios II sistema i bićete u mogućnosti da kreirate svoj osnovni, namenski Nios II sistem.
Projekat koji ćete izraditi u ovom vodiču kao primer,
predstavlja mali Nios II sistem za kontrolu aplikacija, koji poseduje karakter displej, ulazno/izlazne portove i LE diode za indikaciju. Nios II sistem će takođe moći da komunicira sa host kompjuterom koji će pritom moći da kontroliše logiku unutar FPGA čipa.
Nios II sistem iz našeg primera se sastoji iz sledećeg:
Nios II procesorskog jezgra memorije na čipu tajmera JTAG UART‐a ( univerzalnog asinhronog primom‐predajnika )
PIO bloka koji je 8‐bitni paralelni drajver za LE‐diode i System ID bloka koji služi za identifikaciju komponenti
Slika 1–1 sa sledeće strane je blok dijagram koji prikazuje odnos između host kompjutera, ciljne ploče, FPGA čipa i Nios II sistema.
Početak rada sa Nios II sistemom Nios II razvojni sistem
72
Slika 1–1. Blok šema našeg projekta
Kao što vidimo na slici 1–1, ostala logika može da postoji u okviru FPGA čipa ali sa strane, tj. uz bok Nios II sistema. Nios II sistem može da interaguje sa ostalom logikom na čipu (On-chip RAM) u zavisnosti od potreba celog sistema. Zbog jednostavnosti, naš primer koji obrađujemo u ovom vodiču, neće uključivati ostalu logiku na FPGA čipu, odnosno neće imati blok koji je na gornjoj slici označen kao Other Logic.
Softverski i hardverski zahtevi
Za ovu priliku, potrebno je da posedujete sledeći softver:
Softver Altera Quartus II verzija 7.1 ili novija – može biti instaliran i na Windows i na Linux platformi koje zadovoljavaju minimalne zahteve prema Quartus II alatu.
Nios II Embedded Design Suite verzija 7.1 ili novija
Fajlove napisane za ovaj projekat – posetite Nios II stranicu sa literaturom čiji je link: www.altera.com/literature/lit-nio2.jsp.
Početak rada sa Nios II sistemom Nios II razvojni sistem
73
Vi možete da realizujete projekat iz primera i ako imate razvojnu ploču i ako je ne posedujete. Ovaj vodič Vam dozvoljava da napravite izbor između sledećih opcija: Bez ploče – Ako nemate razvojnu ploču, Vi i dalje možete da
koristite ovaj vodič, ali nećete moći da se uverite da projekat radi na hardverskom nivou. Umesto toga, Vi ćete moći da izvršite simulaciju rada softvera na Nios II instruction set simulatoru (ISS).
Sa Nios Razvojnom pločom – Ako imate Altera Nios II
razvojni sistem, koristićete ploču koja je uključena u ovaj kit. U tom slučaju, Vi ćete takođe morati da imate i izvor jednosmernog napajanja i kabl koji je predviđen za dati kit, kao što je recimo USB-Blaster™ kabl. Sledeći Altera razvojni sistemi su podržani:
• Nios II Development Kit, Stratix® II Edition • Nios II Development Kit, Stratix Edition • Nios II Development Kit, Stratix Professional Edition • Nios II Development Kit, Cyclone™ II Edition • Nios II Development Kit, Cyclone Edition
Za sve dodatne informacije u vezi Nios II razvojnih
sistema, posetite www.altera.com/ devkits.
Neka druga prigodna ploča – Vi možete da koristite ovaj vodič i sa bilo kojom drugom pločom kojam ispunjava sledeće zahteve:
• Ploča mora da poseduje Altera FPGA čip. • FPGA čip mora ispunjavati specifične zahteve, u zavisnosti od
familije kojoj pripada:
• Stratix III ili Stratix II • Stratix EP1S10 device ili veći • Cyclone III ili Cyclone II device • Cyclone EP1C12 device ili veći
• Jedan oscilator mora da obezbedi konstantan takt na jednom pinu FPGA čipa. Maksimalna frekvencija je ograničena maksimalnom brzinom FPGA čipa. Frekvencija od 50 MHz ili manja će raditi na većini ploča, dok je znak pitanja za veće frekvencije.
• Ploča mora da sadrži 10 – opinski priključak namenjen JTAG
konektoru preko koga se vrši komunikacija sa Nios II sistemon.
Početak rada sa Nios II sistemom Nios II razvojni sistem
74
• FPGA I/O pinovi mogu da se opciono povežu sa 8 (ili manje) LE-dioda, koje će služiti za vizuelnu indikaciju aktivnosti procesora.
• Moraćete takođe da imate i odgovarajući Altera USB kabl, revizije B ili kasnije. Neodgovarajući kabl može da dovede do grešaka u komunikaciji kada sa njim povežete Nios II procesor. Prepravljeni kablovi imaju jasno uočljivu oznaku revizije. Sa ranijim kablovima to nije slučaj.
Princip otvorenog jezgra
Vi možete da izvršite sve korake iz ovog vodiča, čak i na
hardveru, a da Vam za to licenca nije potrebna. Sa Alterinom opcijom “otvorenog jezgra” Vi možete da izvršite sledeće akcije:
Simulirate ponašanje Nios II procesora u okviru vašeg sistema Verifikujete funkcionalnost Vašeg projekta, odnosno lako
procenite njegovu veličinu i brzinu. U kratkom vremenskom roku generišete programske
sekvence uz pomoć kojih će Nios II procesor isvršavati željene akcije
Programirate uređaj i izvršite proveru rada na samom hardveru.
Vi ćete jedino morati da otkupite licencu za Nios II
procesor kada budete u potpunosti uvereni u njegovu funkcionalnost i performanse i budete želeli da svoj projekat pustite u proizvodnju.
75
2. Razvojni tok Nios II sistema
U ovom odeljku videćemo kako izgleda kompletan razvojni tok projektovanja Nios II sistema, kao i izrada prototipa na razvojnoj ploči. Slika 1–2 prikazuje iz kojih se sve koraka ovaj tok sastoji.
Slika 1–2. Razvojni tok Nios II sistema
Razvojni tok Nios II sistema Nios II razvojni sistem
76
Razvojni tok jednog Nios II sistema se zapravo sastoji od tri razvojne faze: faze razvoja hardvera, faze razvoja softvera i faze razvoja celokupnog sistema koja uključuje i hardver i softver . Kod jednostavnijih Nios II sistema, jedna osoba može sama da odradi sve faze. Međutim, kod složenih sistema, postoje posebni dizajneri hardvera, a posebni softvera i svako od njih je odgovoran za različite korake. Faza razvoja sistema, kao što smo rekli, uključuje i hardver i softver koji međusobno neprestano interaguju. U tom slučaju, odvojeni timovi za projektovanje kako hardvera, tako i softvera, moraju tačno da znaju koje informacije i koji fajlovi predstavljaju presek ove interakcije, odnosno od značaja su za oba tima.
U ovom vodiču pažnja je usmerena prvrnstveno na razvoj
hardvera i pruža samo mali uvod u razvoj softvera. Za upoznavanje sa procesom softverskog razvoja u budućnosti, Altera preporučuje da pročitate štivo Software Development Tutorial dostupno u Nios II IDE help-u, posle savladavanja ovog uputstva.
Software Development Tutorial i kompletne IDE reference su
uključene u Nios II IDE help sistem. Da bi ste otvorili Nios II IDE help sistem, kliknite na Help Contents stavku u Help meniju. Da bi ste videli dalja uputstva, odaberite Nios II IDE Help u Contents panelu, i onda kliknite na Tutorials.
Analiza sistemskih zahteva
Razvojni tok počinje sa tzv. predizajnerskim aktivnostima koje uključuju analiziranje zahteva aplikacije, kao što su: Kakve računarske performanse su potrebne za datu
aplikaciju? Koliki je propusni opseg ili protok potreban? Koji tip interfejsa je neophodan? Da li aplikacija zahteva ugnježden softver?
Na osnovu odgovora na ova pitanja, Vi možete da
specificirate konkretne sistemske potrebe, kao što su:
Kakvo nam je jezgro Nios II procesora potrebno: manje ili brže?
Koliko nam je dodatnih komponenti potrebno? Koje su to komponente? Koliko od svake vrste?
Koju vrstu sistema za rad u realnom vremenu upotrebiti (RTOS - real-time operating system) ako je uopšte potrebno?
Razvojni tok Nios II sistema Nios II razvojni sistem
77
Gde hardverskim ubrzanjem možemo dramatično da poboljšamo performanse sistema? Na primer:
• Možemo li dodavanjem DMA komponenti eliminisati
izgubljeno vreme procesora pri kopiranju podataka? • Da li bi smo pogodnom instrukcijom mogli da
zamenimo kritičnu petlju DSP algoritma? • Može li Nios II C-to-Hardware (C2H) Acceleration
Compiler da poboljša performanse?
Odgovore na ovakva pitanja, donose zajednički i hardverski i softverski tim.
Definisanje i generisanje sistema pomoću SOPC Builder alata
Posle analize hardverskih zahteva sistema, koristimo SOPC Builder alat koji je uključen Alterin razvojni program Quartus II. Upotrebom SOPC Builder-a možemo da specificiramo Nios II procesorsko jezgro, memoriju i ostale komponente koje naš sistem zahteva. SOPC Builder automatski generiše logiku za povezivanje komponenti u hardverski sistem.
Možemo da odaberemo željeni objekat iz ponuđene liste standardnih procesorskih jezgara i komponenti koje su već ubačene u Nios II Embedded Design Suite. Takođe i sami možete da dodate svoj hardver da bi ste time povećali performanse sistema, kao i da dodate nove logičke instrukcije Nios II jezgru da bi ste ubrzali sam procesor. Ovaj vodič se bavi standardnim procesorima i jezgrima tako da ne pokriva princip dodavanja nove logike sistemu. Primarni produkti SOPC Builder alata su sledeći: SOPC Builder System File (.ptf) – Ovaj fajl čuva hardverski
sadržaj SOPC Builder sistema. Nios II IDE alat zahteva ovakav sistemski fajl da bi mogao da kompajlira napisan program.
HDL fajlovi – fajlovi jezika za opis hardvera (HDL -
Hardware description language ). Rezultat su dizajniranja hardvera uz pomoć SOPC Builder alata. Softver Quartus II koristi HDL fajlove da bi preveo celokupan FPGA dizajn u objektni SRAM fajl (.sof – SRAM Object File).
Razvojni tok Nios II sistema Nios II razvojni sistem
78
Quartus II zadaci prilikom razvoja hardvera
Pošto ste napravili Nios II sistem koristeći SOPC Builder, Vi ste ga automatski integrisali u krajnji Quartus II projekat. Korišćenjem programa Quartus II, Vi ćete izvršiti sve zadatke potrebne za kreiranje finalnog hardverskog dizajna na jednoj FPGA strukturi.
Kao što je prikazano na slici 1–1, većina FPGA dizajna
uključuje ligiku koja je van Nios II sistema. U mogućnosti ste da integrišete svoje lične hardverske module u FPGA dizajn, ili da integrišete druge, već napravljene module, koji podležu pravu intelektualne svojine (intellectual property (IP) design modules), a dostupni su od strane Altere ili IP provajdera trećih lica. Ovaj vodič ne upućuje na načine dodavanja logike izvan Nios II sistema.
Koristeći program Quartus II, Vi takođe možete razmestiti
pinove za ulazno/izlazne signale, specificirati vremenske zahteve i uključiti druga dizajnerska ograničenja. Konačno, kompajliranjem Quartus II projekta nastaće SRAM Object File koji će konfigurisati FPGA strukturu.
SRAM objektni fajl ćemo preneti na FPGA koji je na
razvojnoj ploči, koristeći Alterin kabl za prenos, kao što je na primer on USB-Blaster. Posle konfigurisanja, FPGA radi po specifikaciji hardverskog dizajna, koji je u ovom slučaju Nios II procesorski sistem.
Za sva buduća pitanja oko korišćenja Quartus II
programa, pogledajte Quartus II Tutorial u okviru Quartus II sistema za pomoć. Može se naći u priručnicima Introduction to the Quartus II Software i Quartus II Handbook, koji su pak dostupni na adresi: www.altera.com/literature/lit-qts.jsp.
Nios II IDE radovi na razvoju softvera
Upotrebom alata Nios II IDE, ispunićete sve softverske zadatke prema Vašem Nios II procesorskom sistemu. Pošto ste generisali sistem sa SOPC Builder-om, Vi možete početi sa pisanjem C/C++ koda za aplikacije i to neposredno sa alatom Nios II IDE. Altera pruža izdvajanje hardverskog sloja (HAL-hardware abstraction layer) što Vam omogućava da pišete programe za Nios II brzo i nezavisno od hardverskih detalja na niskom nivou. Pored Vašeg aplikacionog koda, Vi možete da sastavite i ponovo upotrebite gotove biblioteke u Vaš Nios II IDE projekat.
Razvojni tok Nios II sistema Nios II razvojni sistem
79
Ako nemate potrebnu ploču, za softverski razvoj možete da pokrenete i debagujete Vaš kod uz pomoć Nios II instruction set simulatora (ISS). ISS simulura rad procesora, memorije i stdin/stdout/stderr nizova, što Vam omogućava da verifikujete programski tok i ispravnost algoritma. Ukoliko imate potrebnu ploču sa konfigurisanim Altera FPGA čipom na opisani Nios II sistem, možete da prebacite svoj softver na ploču pomoću Altera prenosnog kabla, kao što je USB-Blaster.
Za kreiranje nove Nios II C/C++ aplikacije, alat Nios II IDE zahteva SOPC Builder System File. Biće Vam takođe potreban SRAM Object File za konfigurisanje FPGA pre nego što pokrenete i debagujete napisanu aplikaciju na hardver.
IDE može da proizvede nekoliko tipova fajlova na svom izlazu koje su date u nastavku. Da napomenemo, da ne zahtevaju svi projekti baš svaki od ovih fajlova.
system.h fajl – definiše simbole za integrisanje hardvera u sistem. IDE automatski kreira ovaj fajl kada kreiramo novi projekat.
Executable and Linkable Format File (.elf) – format izvršnih i fajlova za linkovanje koji su rezultat kompajliranja C/C++ aplikacije, čiji se sadržaj prenosi direktno na Nios II procesor.
Memory initialization files (.hex) – fajlovi za inicijalizaciju memorije – neke on-chip memorije mogu doći sa unapred definisanim memorijskim sadržajem. IDE generiše inicijalizacione fajlove upravo za ove memorije da bi ostvario inicijalizaciju njihovog sadržaja.
Flash programming data – IDE uključuje i flas-programator koji Vam omogućava da upišete svoj program u flash-memoriju. Flash-programator automatski dodaje odgovarajući boot code koji omogućava Vašem programu da se butuje direktno sa flash-memorije. Flash-programer možete takođe koristiti i za upisivanje proizvoljnog sadrzaja na flash-memoriju. Ovaj vodič je prvenstveno posvećen prebacivanju izvršnog
fajla i fajla za linkovanje direktno na Nios II sistem.
Za detalje oko razvoja softvera za Nios II procesor, pogledajte Nios II Software Developer's Handbook i Nios II IDE help podršku.
Razvojni tok Nios II sistema Nios II razvojni sistem
80
Izvršavanje i debagovanje softvera na ploči
Alat Nios II IDE poseduje sve što Vam je potrebno za prebacivanje softvera na ciljnu ploču i izvršavanje i debagovanje programa na samom hardveru. IDE debager vam pruža mogućnost da izvršavate instrukciju po instrukciju na procesoru, tj. da se krećete korak po korak kroz napisan kod, da podešavate tačke prekida i analizirate stanje promenljivih tokom izvršavanja programa.
Za sve nedoumice oko izvršavanja i debagovanja Nios II programa, pogledajte Software Development Tutorial dostupan u okviru Nios II IDE help podrške.
Varijacije razvojnog toka
Razvojni tok nije striktno linearan. Ovaj odeljak opisuje osnovne varijacije.
Prepravke softvera i hardvera Posle testiranja softvera na ciljnoj ploči možete uvideti da
Vaš Nios II sistem zahteva bolje performanse. U tom slučaju, moraćete da se vratite na korake dizajniranja softvera kako bi ste izvršili poboljšanje algoritma. Druga opcija je da se vratite na korake dizajniranja hardvera i uvedete dodatnu logiku za ubrzanje hardvera. Ako sistem treba da izvršava višestruke, međusobno isključive zadatke, Vi bi mogli čak i da donesete odluku o upotrebi dva ili više Nios II procesora, koji će međusobno podeliti radne zadatke i time uvećati performanse u odnosu na individualan rad.
Iterativno kreiranje Nios II sistema
Osnovno pravilo kod izgradnje kompleksnog Nios II sistema je početi prvo sa jednostavnijim sistemom, koji ćete onda iterativo nadograđivati. Nakon svake iteracije možete proveriti da li sistem pruža očekivane rezultate. Možete da rešite da verifikujete osnovne komponente sistema, kao što su procesor, memorija i komunikacioni kanali, pre nego što dodate nove složenije komponente. Kada razvijate sopstvene komponente ili sopstvene instrukcije, prvo integrišite svoju logiku u minimalan sistem da bi ste proverili da li ispunjava očekivane rezultate. Kasnije ćete lako da integrišete sopstvenu “ispravnu” logiku u kompleksniji sistem.
Razvojni tok Nios II sistema Nios II razvojni sistem
81
Nios II Embedded Design Suite podrška – pruža nekoliko radnih Nios II referentnih projekata, koji Vam mogu poslužiti kao polazna tačka u vašim projektima. Posle instalacije Nios II Embedded Design Suite, pogledajte direktorijum <Nios II EDS install path>/examples/verilog ili direktorijum <Nios II EDS install path>/examples/vhdl.
Verifikovanje sistema uz pomoć alata Hardware Simulation Tools
U mogućnosti smo i da izvršimo hardversku simulaciju
izvršavanja softvera na Nios II sistemu, koristeći alat kao što je ModelSim RTL simulator. Hardverska simulacija je korisna u nekim slučajevima, uključujući sledeće:
Za proveru ispravnog radnog cikljusa Nios II sistema, pre nego što on postane dostupan kao gotov uređaj.
Za verifikaciju funkcionalnosti samostalno kreiranih komponenti i instrukcija pre isprobavanja na hardveru. Korak simulacije hardvera nije prikazan na Slici 1–2. Ako
budete kreirali vaš Nios II sistem pomoću standardnih komponenti koje su dostupne pri Nios II Embedded Design Suite podršci, najlakši način za proveru funkcionalnosti je prebacivanje hardverskog i softverskog dizajna direktno na razvojnu ploču.
Za detalje kako se izvodi simulacija hardvera za Nios II
sistem, pogledajte AN351: Simulating Nios II Embedded Processor Designs.
82
3. Izrada primer - projekta Ovaj deo vodiča kroz razvojni tok Nios II sistema će Vam
pomoći da kreirate projekat koji smo kao konkretan primer osmislili za ovu priliku. Izvešćemo sledeće neophodne korake:
1. Instaliranje projektnih fajlova
2. Analiziranje sistemskih zahteva
3. Pokretanje Quartus II programa i otvaranje “Tutorial
Example Design Project” – primer projekta
4. Kreiranje novog SOPC Builder sistema
5. Definisanje sistema u SOPC Builder-u
6. Integrisanje SOPC Builder sistema u Quartus II projekat
7. Prebacivanje hardverskog dizajna na ciljni FPGA
8. Razvoj softvera korišćenjem Nios II IDE alata
9. Izvršavanje programa
Instaliranje projektnih fajlova
Pre nego što nastavite, moraćete da instalirate programe Quartus II i Nios II Embedded Design Suite. Moraćete takođe da skinete sa Alterinog veb sajta tutorial design fajlove. Ovi gotovi fajlovi se koriste kao polazna tačka u Quartus II projektu. Možete ih naći na sledećem linku:
www.altera.com/literature/lit-nio2.jsp.
Uradite sledeće korake da bi ste podesili dizajnersko okruzenje:
1. Pronađite pomenute design fajlove na veb sajtu Altere.
Napominjemo da su u .zip obliku! Različita grupa design-fajlova postoji za svaku Altera Nios razvojnu ploču!
2. Prebacite design-fajlove na neki od sledećih načina:
a) Ako imate Nios razvojnu ploču, skinite fajlove koji su za nju predviđeni.
b) Ako imate neku drugu srodnu ploču, skinite fajlove za koje smatrate da su najpribližniji vašoj ploči. Na primer, ako je vaša ploča StratixII, preuzmite StratixII design files (NiosII_stratixII_2s60_es.zip).
Izrada primer - projekta Nios II razvojni sistem
83
c) Ako nemate nikakvu ploču, možete da koristite bilo koji od design-fajlova.
3. Raspakujte sadržaj zip fajla u neki direktorijum na vašem
kompjuteru. Nemojte koristiti razmake u imenu direktorijuma.
Sve što budemo radili u nastavku ovog vodiča odnosiće se na direktorijum <Design Files Directory>.
Analiza sistemskih zahteva
U ovom ovde delu biće opisano koji su to sistemski zahtevi koje naš primer-projekat treba da ostvari. Ciljevi našeg projekta su sledeći:
Demonstracija jednostavnog Nios II procesorskog sistema koji će moći da se upotrebi za kontrolu aplikacija.
Izgradnja praktičnog, realno ostvarljivog sistema. Demonstriranje najosnovnijih i efektivnih tehnika za izgradnju
praktičnog, sopstvenog Nios II sistema. Izgradnja Nios II sistema koji će raditi na bilo kojoj ploči sa
Altera FPGA čipom. Celokupan sistem mora da koristi jedino resurse na čipu, tj. potrebno je bude potpuno funkcionalan bez oslanjanja na razvojnu ploču.
Projekat bi trebalo da očuva princip on-chip logike i memorijskih resursa, kako bi mogao bez problema da bude ugrađen u širok spektar FPGA čipova.
Ovi zahtevi vode ka donošenju sledećih odluka:
Nios II sistem koristi jedino sledeće ulaze i izlaze:
• jedan ulaz za clock , na koji se može dovesti bilo koja konstantna frekvencija
• osam opcionih izlaza za kontrolu LE-dioda na ploči
U našem projektu učestvuju sledeće komponente:
• Nios II/s jezgro sa 2 Kbajta instrukcionog keša • 20 Kbajta on-chip memorije • tajmer • JTAG UART • osam izlaza-isključivo paralelni I/O (PIO) pinovi • System ID component
Za kompletne informacije o ovim i drugim komponentama, pogledajte: Quartus II Handbook Volume 5: Embedded Peripherals.
Izrada primer - projekta Nios II razvojni sistem
84
Pokretanje Quartus II programa i otvaranje “Tutorial Example Design Project”
Za počezak, otvorite Quartus II projekat kao tutorial example design. Ovaj Quartus II projekat služi kao jednostavna polazna tačka za razvoj Nios II sistema. Quartus II projekat sadrži sva podešavanja i sve design-fajlove potrebne za kreiranje SRAM Object File-a.
Za otvaranje Quartus II projekta, i uradite sledeće korake:
1. Pokrenite program Quartus II.
Na Windows platformama kliknite na dugme Start, postavite pokazivač miša najpre na Programs, pa Altera, pa Quartus II <version>, i onda kliknite na Quartus II <version>. Kod Linux platforme, ukucajte quartus u polje command-prompt-a, stavljajući za putanju pretraživanja, direktorijum programa Quartus II.
2. U padajućem meniju File, odaberite Open Project. Budite pažljivi da na pomešate Open sa Open Project. Pojaviće se Open Project dijalog boks.
3. Pronađite <Design Files Directory>. 4. Selektujte nios2_quartus2_project.qpf fajl i kliknite Open.
Ovime smo otvorili naš projekat. 5. Ako Vam se u programu automatski ne prikaže Block
Diagram File (.bdf) nios2_quartus2_project.bdf (pogledajte ime prozora na Slici 1–3), uradite sledeće:
a. U File meniju kliknite Open. Otvoriće se Open dijalog
boks. b. Pronađite <Design Files Directory>. c. Selektujte nios2_quartus2_project.bdf i kliknite Open.
Slika 1–3 prikazuje blok dijagram fajl nios2_quartus2_project.bdf.
Block Diagram File se sastoji od ulaznog porta za clock i
osam izlaznih pinova za pogon LE‐dioda na ploči. U nastavku ćemo kreirati novi SOPC Builder system, koji će konačno uspostaviti vezu između ovih pinova.
Izrada primer - projekta Nios II razvojni sistem
85
Slika 1–3. Primer Design Block Diagram fajla
Kreiranje nove SOPC Builder System strukture
Mi koristimo SOPC Builder alat da bi smo generisali Nios II procesorski sistem, ubacivali željene komponente i konfigurisali njihove međusobne veze. Uradite sledeće korake da bi ste kreirali novu SOPC Builder system strukturu:
U padajućem meniju Tools, programa Quartus II, kliknite na SOPC Builder. SOPC Builder se pokreće i pojavljuje se prozor Create New System.
Unesite first_nios2_system za ime sistema.
Odaberite neki od Verilog ili VHDL jezika za opis hardvera.
Možete da prihvatite i difoltna podepšavanja, a kasnije kada generišete sistem, SOPC Builder će napraviti izlazni design-fajl u jeziku koji tada budete selektovali.
Cliknite na OK. Dobićete SOPC Builder grafičko koruženje.
Slika 1–4 na sledećoj strani prikazuje kako izgleda grafički
korisnički interfejs SOPC Builder-a u njegovom inicijalnom stanju.
Izrada primer - projekta Nios II razvojni sistem
86
Slika 1–4. SOPC Builder grafički korisnički interfejs u inicijalnom stanju
Definisanje sistema u SOPC Builder-u
SOPC Builder koristimo da bi smo definisali hardverske karakteristike Nios II sistema i to koje će Nios II jezgro biti upotrebljeno i koje će sve komponente biti uključene u sistem. SOPC Builder ne definiše softversko ponašanje, kao na primer gde su u memoriji smeštene instrukcije ili gde se šalju stderr nizovi karaktera.
U ovom delu, mi ćemo izvesti sledeće korake:
Odabrati ciljni FPGA i podesiti Clock.
Dodati Nios II jezgro, on-chip memoriju i ostale
komponente.
Specificirati bazne adrese i prioritete među zahtevima prekida (request IRQ priorities).
Generisati SOPC Builder sistem.
Proces dizajniranja u okviru SOPC Builder-a ne bi moralo
da bude linearan. Koraci dizajniranja u ovom vodiču su predstavljeni u čisto pravolinijskom poretku i to zbog toga da bi novi korisnici lakše razumeli celu proceduru. Međutim, Vi ćete kasnije biti u mogućnosti da prema svojim potrebama i po sopstvenom rasporedu vršite sva projektovanja u okviru SOPC Builder-a.
Izrada primer - projekta Nios II razvojni sistem
87
Određivanje ciljnog FPGA i podešavanja vezana za Clock
Sekcije za podešavanja, kao što su Target i Clock Settings
iz System Contents taba, određuju odnose između SOPC Builder okruženja i ostalih uređaja u sistemu. Izvešćemo sledeća podešavanja:
• U polju Device Family odaberite željeni Altera FPGA.
• Dvostrukim klikom na polje u kome je clk, dobićete
mogućnost da podesite frekvenciju u MHz. Unesite vrednost za frekvenciju kao što je prikazano u Tabeli 1–1, i pritisnite Enter. Po difoltu, ime ulaznog clock-a je označeno sa clk. Frekvencija koju ste postavili za clk mora da odgovara oscilatoru koji taktuje FPGA.
Tabela 1–1. Frekvencija Clock-a za željenu ploču
Željena ploča Frekvencija
Nios Development Board (sve verzije) ili ako radite bez ploče 50 Mhz
Proizvoljna ploča Ista kao i frekvencija oscilatora na ploči
Sada možemo da počnemo sa dodavanjem hardverskih
komponenti SOPC Builder sistemu. Kako budete dodavali svaku novu komponentu, moraćete celishodno da je konfigurišete, kako bi odgovarala specifikacijama celog projekta.
Dodavanje on-chip memorije
Procesorski sistemi zahtevaju minimum jednu memoriju za podatke i instrukcije. U našem primeru, koristićemo jednu memoriju, veličine 20Kbajta, koja će biti zajednička i za instrukcije i za podatke. Da bi smo ubacili memoriju, uradićemo korake koji slede:
U listi dostupnih komponenti (leva strana prozora u System
Contents tabu), proširite sa plusićem stavku Memories and Memory Controllers, pa onda i stavku On-Chip i na kraju kliknite na On-Chip Memory (RAM or ROM).
Izrada primer - projekta Nios II razvojni sistem
88
Kliknite na Add. Pojaviće se prozor The On-Chip Memory (RAM or ROM) vizarda.
U Block Type listi, selektujte M4K. U polju Total memory size, unesite 20 i odaberite Kbytes,
kako bi postavili veličinu naše memorije na željenih 20 Kbajta (pogledajte Sliku 1–5).
Ne menjajte ni jedno od ostalih difoltnih podešavanja.
Figure 1–5. On-Chip Memory MegaWizard
Kliknite Finish. Vratite se u SOPC Builder System Contents tab i sada će se on-chip memorija sa imenom onchip_mem nalaziti u listi dostupnih komponenti.
Za kasnije informacije o on-chip memoriji, možete da
kliknete na dugme Documentation u okviru On-Chip Memory (RAM or ROM) vizarda.
Izrada primer - projekta Nios II razvojni sistem
89
Dodavanje Nios II procesorskog jezgra
U ovom delu, dodaćemo Nios II jezgro i konfigurisati ga
da koristi 2 Kbajta on-chip keš memorije za instrukcije. Iz čisto edukativnih razloga, primer iz ovog vodiča koristi “standardno” Nios II jezgro, koje obezbeđuje balans između performansi i iskorišćenosti resursa.
Potrebno je uraditi sledeće stvari:
U listi raspoloživih komponenti, odaberite Nios II Processor. Kliknite na Add. Pojaviće se Nios II Processor MegaWizard,
prikazujući stranu Nios II Core. Izvršite sledeća podešavanja (pogledajte Sliku 1–6):
Nios II Core: Nios II/s Hardware Multiply: None Hardware Divide: Off Reset Vector: Memory: onchip_mem Offset: 0x0 Exception Vector: Memory: onchip_mem Offset: 0x20
Figure 1–6. Nios II MegaWizard – Nios II Core Page
4. Kliknite na karticu Caches and Memory Interfaces.
Izrada primer - projekta Nios II razvojni sistem
90
5. Izvršite sledeća podešavanja (pogledajte Sliku 1–7): Instruction Cache: 2 Kbytes Enable Bursts: Off Include tightly coupled instruction master port(s): Off
Figure 1–7. Nios II MegaWizard – Caches and Memory Interfaces page
Nemojte menjati ništa od podešavanja u karticama Advanced Features, JTAG Debug Module, ili Custom Instructions.
Kliknite Finish. Vratite se u SOPC Builder System Contents
tab i primetićete da se Nios II jezgro pod imenom cpu, sada nalazi na listi dostupnih komponenata.
Za sve detalje oko konfigurisanja Nios II jezgra,
pogledajte poglavlje Instantiating the Nios II Processor in SOPC, priručnika Builder Nios II Processor Reference Handbook.
SOPC Builder automatski povezuje instrukcije i podatke
master porta Nios II jezgra, na slave port memorije (videti Sliku 1–8). Kada pravite vaš sistem, uvek proverite da li automatsko povezivanje SOPC Builder-a, odgovara vašim sistemskim zahtevima.
Izrada primer - projekta Nios II razvojni sistem
91
Za sve buduće detalje oko povezivanja memorije u Nios II sistemu, pogledajte poglavlje Building Memory Subsystems Using SOPC Builder priručnika Quartus II Handbook Volume 4: SOPC Builder.
Slika 1–8. System Contents tab sa Nios II jezgrom i on-chip memorijom
Dodavanje JTAG UART komponente (univerzalni asinhroni primo-predajni kontroler)
JTAG UART omogućava prikladan način komunikacije i razmene podataka sa Nios II procesorom, preko USB-Blaster prenosnog kabla. Ovu komponentu ćemo dodati na sledeći način:
• U listi raspoloživih komponenti, proširite stavku Interface
Protocols, pa zatim i stavku Serial, a onda kliknite na JTAG UART.
• Kliknite Add. Pojaviće se prozor JTAG UART MegaWizard.
• Ne menjajte ništa od difoltnih podešavanja (pogledajte Sliku
1–9 na sledećoj strani).
4. Kliknite Finish. Vratite se u SOPC Builder System Contents tab i primetite da se sada u listi komponenti pojavila i stavka JTAG UART, pod imenom jtag_uart.
SOPC Builder automatski povezuje master port za
podatke na Nios II jezgru sa JTAG UART slave portom. (Master port za instrukcije nije povezan na JTAG UART, jer on nije memorijska komponenta i ne može da šalje instrukcije Nios II procesoru.) Kada budete gradili vaš sistem, uvek obratite pažnju, da li je automatsko povezivanje od strane SOPC Builder-a, odgovarajuće vašim sistemskim potrebama.
Izrada primer - projekta Nios II razvojni sistem
92
Za sve buduće informacije o JTAG UART komponenti, pogledajte poglavlje JTAG UART Core iz priručnika Quartus II Handbook Volume 5: Embedded Peripherals.
Slika 1–9. JTAG UART MegaWizard
Dodavanje tajmera
Mnogi sistemi za kontrolu imaju u svom sastavu tajmersku komponentu koja im omogućava precizna vremenska izračunavanja. Da bi imao periodičan sistemski takt, Nios II HAL zahteva tajmer.
Odradićemo sledeće korake da bi smo dodali tajmer u
našem sistemu:
U listi raspoloživih komponenti, proširite stavku Peripherals, pa zatim i Microcontroller Peripherals, a onda kliknite na Interval Timer.
2. Kliknite Add. Pojaviće se prozor Interval Timer MegaWizard. 3. U listi Presets, odaberite Full-featured. Nemojte menjati ništa od ostalih difoltnih podešavanja
(pogledajte Sliku 1–10 na sledećoj strani).
Izrada primer - projekta Nios II razvojni sistem
93
Slika 1–10. Izgled prozora Interval Timer vizarda
Kliknite Finish. Vratite se u SOPC Builder System Contents tab i videćete da se sada u listi dostupnih komponenti pojaila i komponenta tajmer pod imenom timer.
Kliknite desnim tasterom miša na timer, a zatim na
Rename.
Unesite novo ime sys_clk_timer i pritisnite Enter.
Dobra je praksa da date imena hardverskim komponentama koja se lako pamte. Nios II programi koriste upravo simbolička imena za označavanje svojih hardverskih komponenti. Zbog ove činjenice, adekvatan izbor imena komponenti, može učiniti rad sa Nios II programima jednostavnijim i razumljivijim.
Za sve buduće informacije vezane za tajmere, pogledajte poglavlje Timer Core , priručnika Quartus II Handbook Volume 5: Embedded Peripherals.
Izrada primer - projekta Nios II razvojni sistem
94
Dodavanje System ID Pheripheral opcije
System ID Peripheral opcija, predstavlja zaštitu protiv
slučajnog prebacivanja kompajliranog softvera na drugi tip Nios II sistema. Ako sistem poseduje ID peripheral, Nios II IDE će vas sprečiti da prebacite programe predviđene za drugi, različiti sistem.
Da bi smo uključili i ovu opciju u naš sistem, potrebno je da uradimo sledeće:
U listi raspoloživih komponenti, proširite stavku
Peripherals, pa zatim i Debug and Performance, a onda kliknite na System ID Peripheral.
Kliknite na dugme Add.... Pojaviće se prozor System ID
Peripheral. Kao što možete videti na Slici 1–11, System ID Peripheral opcija ne sadrži nikakve opcije za podešavanja od strane korisnika.
Slika 1–11. Izgled prozora System ID Peripheral
Kliknite Finish. Ako se sada budete vratili u SOPC Builder System Contents tab, pronaćićete na listi dostupnih komponenata i upravo pridodatu stavku System ID peripheral i to označenu imenom sysid.
Za sve druge informacije vezane za System ID peripheral opciju, pogledajte poglavlje System ID Core u priručniku Quartus II Handbook Volume 5: Embedded Peripherals.
Izrada primer - projekta Nios II razvojni sistem
95
Dodavanje PIO bloka
PIO blok sa svojim signalima (programabilni ulazno-
izlazni signali) predstavljaju jednostavan način da Nios II procesorski sitem prima stimuluse iz spoljnjeg sveta i prosleđuje odgovarajuće signale ka svojim izlazima. Kompleksne aplikacije za kontrolu nekih procesa, mogu da sadrže i stotine PIO signala nad kojima Nios II procesor vrši monitoring. Naš primer koristi osam PIO signala kojima kontroliše rad LE-dioda na ploči.
Uradite sledeće korake da bi smo priključili našem sistemu
i PIO blok. Uradićete ove korake čak i ako vaša ploča ne sadrži LE-diode.
U listi raspoloživih komponenata proširite stavku
Peripherals, a zatim i Microcontroller Peripherals, a onda kliknite na PIO (Parallel I/O).
Kliknite Add. Pojaviće se prozor PIO (Parallel I/O)
MegaWizard.
Nemojte menjati difoltna podešavanja. Kao što možete videti na Slici 1–12, po difoltu je širina izlaznog porta postavljena na 8-bitova, što se tačno poklapa sa potrebama našeg primer-projekta.
Slika 1–12. Izgled prozora PIO vizarda
Izrada primer - projekta Nios II razvojni sistem
96
Kliknite Finish. Ako se sada vratite u SOPC Builder System Contents tab, videćete da se u listi dostupnih komponrnti nalazi i stavka PIO i to pod imenom pio.
Kliknite desnim tasterom miša na pio, a zatim na Rename.
Unesite za ime led_pio i pritisnite Enter.
U Nios II programima se vrši ovakvo imenovanje upravo
ubačene komponente. Moraćete da upotrebite bač ovo ime, jer u protivnom, programi napisani za ovaj vodič, neće funkcionisati u narednim koracima.
Za sve dodatne informacije vezane za PIO blok, pogledajte
poglavlje PIO Core , priručnika Quartus II Handbook Volume 5: Embedded Peripherals.
Dodela baznih adresa i utvrđivanje prioriteta prekida
Na ovom mestu ćemo dodati sve potrebne hardverske
komponente našem sistemu. Prvo moramo odrediti kako komponente unutar sistema međusobno interaguju. U ovom odeljku, mi ćemo dodeliti baznu adresu svakoj slave komponenti i dodeliti prioritet zahtevima za prekid (IRQ-interrupt request) i to za JTAG UART i tajmer.
SOPC Builder poseduje komandu Auto-Assign Base
Addresses, kojom se lako komponentama dodeljuju adrese. Kod mnogih sistema, uključujući tu i naš primer-projekat, ovo je potpuno adekvatno rešenje. Međutim, vi možete da podesite bazne adrese na način koji vama odgovara.For many systems, including this example design, Auto-Assign Base Addresses is adequate. However, you can adjust the base addresses to suit your needs. U nastavku su date neke smernice za dodelu baznih adresa:
Jezgro Nios II procesora može da adresira 31-bitni adresni
raspon. Vaše bazne adrese moraju da se nađu između 0x00000000 i 0x7FFFFFFF.
Nios II programi koriste simboličke konstante da bi ukazali na adresu. use symbolic constants to refer to addresses. Nemojte da brinete oko izbora vrednosti adrese, već uzmite neju koja se lako pamti.
Izrada primer - projekta Nios II razvojni sistem
97
Adrese komponenti čije se vrednosti razlikuju na poziciji samo jednog bita, poboljšavaju efikasnost hardvera. Nemojte težiti sabijanju svih baznih adresa u što manji adresni opseg, jer to može dovesti do lošijeg iskorišćenja hardvera.
SOPC Builder neće pokušavati da poređa zasebne memorijske komponente u blizak memorijski raspon. Na primer, ako vi želite da vam on-chip RAM i off-chip RAM budu tretirane kao jedinstven memorijski opseg, moraćete eksplicitni da im dodelite bazne adrese.
SOPC Builder nam stavlja na raspolaganje i komandu
Auto-Assign IRQs, koja povezuje IRQ signale sa ciljem da se dobije ispravan odziv hardvera.
Nios II HAL tretira niske IRQ vrednosti kao veći prioritet.
Komponenta tajmer mora da ima najveći IRQ prioritet, kako bi se sačuvala tačnost sistemskog takta.
Da bi smo dodelili odgovarajuće bazne adrese i pravilno
rasporedili prioritete IRQ signala, uradimo sledeće:
• U padajućem meniju System, kliknite na Auto-Assign Base Addresses da bi Builder automatski dodelio funkcionalne bazne adrese svim komponentama u sistemu. Base i End vrednosti u tabeli aktivnih komponenti se mogu i dalje promeniti u odnosu na vrednosti koje je postavio SOPC Builder.
• Kliknite na IRQ vrednost jtag_uart komponente da bi ste je
selektovali.
• Unesite vrednost 16 i pritisnite Enter da potvrdite novu IRQ vrednost.
Slika 1–13. Izgled System Contents taba kompletnog sistema
Izrada primer - projekta Nios II razvojni sistem
98
Generisanje SOPC Builder sistema
Napokon smo spremni da generišemo naš SOPC Builder
sistem. Uradimo sledeće:
• Otvorimo System Generation tab. • Isključimo dugme Simulation. Create simulator project files.,
što će nam uštedeti vreme jer ovo uputstvo ne pokriva opis hardverske simulacije.
• Kliknimo na Generate. Ovime započinje proces generisanja
sistema. Ovaj proces će potrajati nekoliko minuta. Kada se završi, u System Generation tabu će se pojaviti poruka ʺInfo: System generation was successful.ʺ (pogledajte Sliku 1–14).
Kliknimo na Exit da bi smo se vratili u program Quartus II.
Čestitamo! Upravo ste završili sa kreiranjem Nios II procesorskog sistema. Sada ste spremni da integrišete ovaj sistem u Quartus II projekat hardvera i počnete sa korišćenjem alata Nios II IDE za razvoj softvera.
Slika 1–14. Izgled poruke o uspešnom generisanju sistema
Izrada primer - projekta Nios II razvojni sistem
99
Za više detalja u vezi generisanja sistema uz pomoć alata SOPC Builder, pogledajte priručnik Quartus II Handbook Volume 4: SOPC Builder. Za detalje oko hardverske simulacije jednog Nios II sistema, pogledajte priručnik AN351: Simulating Nios II Embedded Processor Designs.
Integrisanje SOPC Builder System-a u Quartus II projekat
U ovom delu ćemo izvođenjem predstavljenih koraka kompletirati naš hardverski dizajn:
Ubacićemo naš SOPC Builder system modul u Quartus II
project. Dodelićemo pinove FPGA čipu. Kompajliraćemo Quartus II project. Verifikovaćemo vremena.
Ako ne posedujete razvojnu ploču, možete da preskočite
ovaj odeljak i odete direktno na naslov “Razvoj softvera korišćenjem Nios II IDE paketa”, koji se nalazi na strani 34. Čitanjem ćete se opet bolje upoznati sa tokom hardverskog dizajna. Međutim, koraci koji budu ovde obrađeni, nemaju uticaja na dalje razumevanje ovog uputstva.
Za sve detaljnije informacije u vezi korišćenja programa
Quartus II, pogledajte Quartus II Tutorial u okviru help podrške samog programa, kao i tekstove Introduction to the Quartus II Software i Quartus II Handbook, dostupne na adresi www.altera.com/literature/lit-qts.jsp.
Uvođenje SOPC Builder System modula u Quartus II Project
Dizajnirani entitet koji predstavlja izlaz SOPC Builder-a,
nazivamo sistemski modul. Da se podsetimo da naš primer-projekat koristi Block Diagram File metod projektovanja od samog početka.
Kako ćemo da ubacimo sistemski modul, zavisi od početne
dizajnerske metode opšteg Quartus II projekta. Na primer, ako smo se mi na početku projektovanja opredelili za korišćenje Verilog VHDL opisa, moraćemo sada da ubacimo first_nios2_system definisan fajlom first_nios2_system.v.
Izrada primer - projekta Nios II razvojni sistem
100
Da bi ste preveli sistemski modul u Block Diagram File, potrebno je da uradite sledeće:
1. Kliknite dvostrukim klikom na prazan prostor između
ulaznih i izlaznih pinova. Pojaviće se prozor Symbol.
2. Pod stavkom Libraries otvorite Project.
3. Kliknite na first_nios2_system. U Symbol prozoru će se pojaviti komponenta sa imenom first_nios2_system.
4. Kliknite OK. Vratite se u Block Diagram File schematic.
5. Postavite komponentu tako da se njeni ulazi na levoj
strani, poklope sa vezama Block Diagram File-a.
6. Kliknite levim tasterom miša da bi ste otpustili komponentu u polje.
7. Ako vaša ciljna ploča ima LE-diode koje je potrebno da
Nios II sistem pogoni, uradite sledeće korake da bi ste povezali LEDG[7..0] izlazne pinove sa komponentom first_nios2_system.
Kliknite i privučite LEDG[7..0], da bi ste ga povezali sa
portom out_port_from_the_led_pio[7..0], komponente first_nios2_system.
Slika 1–15 prikazuje kompletnu šemu povezivanja komponenti, koja ujedno predstavlja i potreban fajl tipa .bdf
Slika 1–15. Kompletirana šema Board Design File-a
Ako ste vi nabavili ploču bez LE-dioda, moraćete da obrišete LEDG[7..0] pinove. Da bi ste ih obrisali, uradite sledeće:
Kliknite negde na površinu LEDG[7..0] simbola da bi ste ga selektovali.
Pritisnite taster Delete.
Da bi ste sačuvali Block Diagram File, kliknite na opciju Save u padajućem meniju File.
Izrada primer - projekta Nios II razvojni sistem
101
Dodeljivanje pinova FPGA čipu
Ako raspolažete sa pločom koja nije iz Nios familije
proizvoda, moraćete da definišete odgovarajući razmeštaj pinova za FPGA, kako bi on odgovarao priključcima na vašoj ploči.
Ako posedujete Nios razvojnu ploču, preskočite ovaj deo i
idite odmah na naslov “Kompajliranje Quartus II Project-a i verifikacija vremena” na strani 38. Formirani fajlovi Quartus II project-a već sadrže odgovarajuća podešavanja za Nios razvojnu ploču.
Da bi ste kompletirali neophodan posao, vezan za ovaj
odeljak, morali bi da znate raspored pinova na svojoj ploči. Takođe je poželjno da znate i ostale podatke o upotrebi ploče, a koji su izvan dometa obrade ovog dokumenta. Predlažemo da vam pri ruci bude dokumentacija vaše ploče.
Da bi ste prilagodili uređaj, uradite sledeće korake:
U meniju Assignments, kliknite na Device.
Otvoriće se prozor Settings. U listi Family, odaberite FPGA familiju koja
odgovara vašoj ploči.
Potvrdite sa No ako vam se pojavi pitanje: "Device family selection has changed. Do you want to remove all location assignments?"
Pod stavkom Target Device selektujte Specific
device selected in 'Available devices' list.
Pod stavkom Available devices odaberite tačan naziv uređaja koji odgovara vašoj ploči.
Odgovorite sa No ako vam se pojavi prozor sa
pitanjem: "Altera recommends removing all location assignments when changing the device. Do you want to remove all location assignments?"
Kliknite OK da prihvatite podešavanja uređaja.
Slika 1–16 sa sledeće strane, prikazuje izgled Settings
prozora i odabir uređaja Cyclone.
Izrada primer - projekta Nios II razvojni sistem
102
Slika 1–16. Dodela uređaja u Quartus II Settings dijalog boksu
Da bi smo definisali razmeštaj pinova za FPGA, uradićemo sledeće korake:
U meniju Assignments, kliknite na opciju Pins. Otvoriće se
Quartus II Pin Planner. Sam program Quartus II project ima mnogo već postavljenih podešavanja namenjenih Nios razvojnim pločama, koja ćete Vi morati da preinačite kako bi odgovarala vašoj ploči.
U koloni Node Name, označite PLD_CLOCKINPUT[1]. Sada
je potrebno da proširite kategoriju PLD_CLOCKINPUT[1..1] kako bi vam bila vidljiva stavka PLD_CLOCKINPUT[1].
U koloni PLD_CLOCKINPUT[1], kliknite dvaput na ćeliju
Location polja. Pojaviće vam se lista rasporeda raspoloživih pinova.
Selektujte odgovarajući FPGA pin koji je povezan sa
oscilatorom na ploči (Slika 1–17 sa sledeće strane). Ako ste povezali pinove za LE-diode u BDF-šematiku,
ponovite korake od 2 do 4 kako bi ste port LEDG[7..0] pravilno dodelili odgovarajućim pinovima i to za svaku diodu posebno: LEDG[0], LEDG[1], LEDG[2], LEDG[3], LEDG[4], LEDG[5], LEDG[6], LEDG[7].
U File menuju kliknite na komandu Save, kako bi ste sačuvali
nova podešavanja. Zatvorite Pin Planner.
Izrada primer - projekta Nios II razvojni sistem
103
U zavisnosti od ploče, možda ćete imati i još dodatnih podešavanja kako bi vaš projekat korektno funkcionisao. Vi možete i da oštetite ploču, ako se ne budete pridržavali njenih specifikacija. Konsultujte se sa proizvođačem kako bi ste postavili sledeće radne uslove koji neće oštetiti ploču:
Nakon uključenja, svi neiskorišćeni I/O pinovi FPGA čipa
ulaze u stanje visoke impedanse. I/O pinovi su konfigurisani za napon od 3.3 V, po
standardu LVTTL I/O. Ploča mora imati izvor napajanja od 3.3 V, a ovaj napon mora biti i na pinu VCCIO FPGA čipa.
Na svakom pinu porta za LE-diode LEDG[7..0], napon pobude je jednak naponu napajanja, odnosno takođe iznosi 3.3 V.
Slika 1–17. Dodeljivanje pinova uz pomoć alata Quartus II Pin Planner
Za sve buduće nedoumice oko načina dodeljivanja pinova u okviru programa Quartus II, pogledajte referencu: Quartus II Handbook Volume 2: Design Implementation and Optimization.
Izrada primer - projekta Nios II razvojni sistem
104
Kompajliranje Quartus II Project-a i verifikacija vremena
Tek smo na ovom mestu spremni da kompajliramo naš
Quartus II projekat i proverimo da li on ispunjava očekivane vremenske zahteve. Isprojektovani hardver moramo da iskompajliramo kako bi smo dobili objektni fajl (SRAM Object File) koji jedino možemo da prenesemo na ploču. Nakon izvršenog kompajliranja, potrebno je da analiziramo vremenske performanse FPGA dizajna i uverimo se da li se on isto ponaša i na hardveru. Preduzećemo sledeće korake:
• U meniju Processing, kliknemo na opciju Start Compilation. • Pojaviće se prozor Quartus II Status utility. Proces
kompajliranja će potrajati nekoliko minuta. Kada se završi, trebalo bi da vam se pojavi poruka: "Full compilation was successful."
• Kliknite OK. Program Quartus II će prikazati prozor u kome
je sadržan izveštaj o procesu kompajliranja. • Proširite kategoriju Timing Analyzer u izveštaju
kompajliranja. • Kliknite na Summary. • Proverite frekvenciju prikazanu u polju Actual Time, koja
pripada stavki PLD_CLOCKINPUT[1]. Ovo je maksimalna frekvencija (FMAX) kojom ovaj FPGA dizajn može da radi.
Ako je očitana frekvencija u polju Actual Time i to za pin
PLD_CLOCKINPUT[1], manja od frekvencije oscilatora na ploči, ovaj projekat neće raditi na hardveru, tj. na ploči. Moraćete da izvršite podešavanja dok ne dobijete optimalan takt, ili da redukujete frekvenciju oscilatora koji taktuje FPGA na samoj ploči.
Čestitamo! Upravo ste završili integrisanje Nios II sistema u okviru Quartus II projekta. Sada ste u mogućnosti da prebacite formirani objektni fajl (SRAM Object File) na ciljnu ploču.
Za sve buduće informacije na temu ispunjenja vremenskih
zahteva u okviru programa Quartus II, pogledajte priručnik Quartus II Handbook Volume 1: Design and Synthesis.
Izrada primer - projekta Nios II razvojni sistem
105
Prebacivanje hardverskog dizajna na ciljni FPGA
Sada je konačno došao red i da prebacimo SRAM objektni fajl na ploču. Uradićemo zato sledeće stvari:
1. Povezaćemo ploču sa kompjuterom uz pomoć već
pominjanog kabla za prenos i dovesti joj napajanje. 2. U padajućem meniju Tools programa Quartus II,
kliknite na stavku Programmer. Otvoriće se prozor koji će automatski prikazati odgovarajući konfiguracioni fajl (nios2_quartus2_project.sof).
3. Kliknite na dugme Hardware Setup koje se nalazi u
gornjem levom uglu, da bi ste pronašli željeni kabl. Otvoriće se Hardware Setup dijalog boks.
4. Odaberite odgovarajući kabl za prenos iz liste
Currently selected hardware. Ako se željeni kabl ne nalazi na ovoj listi, moraćete da instalirate drajvere koji idu uz vaš kabl.
5. Kliknite na Close.
6. Čekirajte Program/Configure za fajl
nios2_quartus2_project.sof (videti Sliku 1–18).
7. Kliknite na dugme Start. Pokazivač progresije napreduje prema 100% kako program Quartus II konfiguriše FPGA čip.
Slika 1–18. Izgled prozora programatora programa Quartus II
Nakon ovog postupka, Nios II sistem je konfigurisan i “udahnut” na FPGA čip, ali još uvek nema nijedan program u memoriji koji bi izvršavao.
Izrada primer - projekta Nios II razvojni sistem
106
Razvoj softvera korišćenjem paketa Nios II IDE
U ovom odeljku ćemo započeti sa radom u Nios II integrisanom razvojnom okruženju (IDE - Integrated Development Environment) i kompajlirati jednostavan program napisan na C programskom jeziku. Prikazaćemo samo najosnovnije korake razvoja softvera da bi smo demonstrirali rad hardverskog sistema koji smo formirali u predhodnom odeljku.
Za kompletno uputstvo o korišćenju paketa Nios II IDE
za razvoj softvera, pogledajte vodič Software Development Tutorial koji se nalazi u okviru IDE Help podrške.
Sada je na nama da odradimo sledeće:
Kreiramo novi Nios II C/C++ projekat koji će predstavljati našu aplikaciju (Strana 1–35).
Kompajliramo softverski dizajn (Strana 1–36).
Da bi smo mogli uspešno da odradimo opisane korake, moramo da imamo sistemski fajl (SOPC Builder System File) koji je već kreiran u odeljku “Definisanje sistema u SOPC Builder-u” na strani 21.
Kreiranje novog Nios II C/C++ aplikacionog projekta
Kao što i sam naslov kaže, formiraćemo novi Nios II C/C++ aplikacioni projekat.Application Project. Uradimo sledeće korake: 1. Pokrenimo alat Nios II IDE. Na Windows platformama,
kliknite na Start, stanite pokazivačem miša na Programs, pa na Altera, pa na Nios II EDS <version> i onda kliknite na Nios II IDE <version>. Na Linux platformama, pokrenite izvršni fajl <Nios II EDS install path>/bin/nios2-ide.
2. Ako se bude pojavio prozor Workspace Launcher, kliknite na
OK da bi ste potvrdili difoltno podešen radni prostor. 3. Ako već niste u Nios II C/C++ perspektivi, odaberite Open
Perspective u Window padajućem meniju, a onda kliknite na Nios II C/C++, ili kliknite na Other pa onda kliknite Nios II C/C++, što je zapravo isto.
Izrada primer - projekta Nios II razvojni sistem
107
4. U padajućem meniju File, odaberite stavku New, a zatim kliknite na Nios II C/C++ Application da bi ste otvorili vizard New Project.
5. Kliknite na dugme Browse u okviru naslova Select Target
Hardware. Otvara se prozor Select Target Hardware. 6. Pronađite direktorijum <Design Files Directory>. 7. Selektujte fajl first_nios2_system.ptf. 8. Kliknite na Open. Vratićete se u New Project vizard, a polja
SOPC Builder System i CPU će sada biti popunjena. 9. Selektujte Count Binary u listi Select Project Template. U
polje Name će se automatski upisati count_binary_0 (pogledajte Sliku 1–19).
10. Kliknite na Finish.
Slika 1–19. Nios II IDE vizard novog projekta
Izrada primer - projekta Nios II razvojni sistem
108
Nios II IDE će kreirati i prikazati novoformirane stavke u polju za pregled projekata Nios II C/ C++ Projects koje se nalazi na levoj strani radne površine i to:
count_binary_0 - Vaš C/C++ aplikacioni projekat count_binary_0_syslib – Paket podrške za ploču koji
uključuje detalje u vezi Nios II hardvera altera.components – Povezuje izvorni kod kod svih
komponenti Altere i koristi se tokom procesa debagovanja
Kompajliranje projekta
Sada ćemo da iskompajliramo novoformirani projekat da bi smo dobili sliku o izvršnom softveru. Moraćemo prvo da izvršimo izvesna podešavanja kako bi smo minimizirali veličinu potrebnog prostora koju će softver zauzimati u memoriji, jer naš Nios II hardverski sistem sadrži samo 20 Kbajta memorijskog prostora.
Uradimo sledeće:
Desnim klikom aktivirajte stavku count_binary_0 i kliknite System Library Properties. Otvoriće se prozor Properties i to za odabranu stavku count_binary_0_syslib.
Sada kliknite na stavku System Library koja se nalazi na levoj
strani prozora. Strana System Library sadrži sva podešavanja koja se odnose na to kako softver interaguje sa osnovnim hardverom. Zbog toga, u podešavanjima koja su nam ovde dostupna, figurišu imena komponenti koja smo dodelili kada smo kreirali Nios II hardverski sistem u odeljku “Definisanje sistema u SOPC Builder-u” na strani 21.
Izvršite sledeće promene postavljenih podešavanja, kako bi ste
redukovali veličinu izvršnog fajla (videti Sliku 1–20). Čekirajte opciju Program never exits. Isključite opciju Support C++. Isključite opciju Clean exit (flush buffers). Isključite opciju Small C library. Za više detalja u vezi stavke System Library, pogledajte
priručnik: Nios II Software Developer's Handbook.
Izrada primer - projekta Nios II razvojni sistem
109
Kliknite na OK da bi ste zatvorili prozor Properties i vratili se u IDE radni prostor.
Kliknite desnim tasterom miša ma projekat count_binary_0 u
polju za pregled projekata Nios II C/C++ Projects, zatim kliknite na Build Project.
Pojaviće se prozor Build Project i IDE će otpočeti sa
kompajliranjem projekta. Kada se kompajliranje završi, pojaviće se poruka: "Build completed".
Slika 1–20. Podešavanja vezana za stavku System Library
Izrada primer - projekta Nios II razvojni sistem
110
Pokretanje programa
U ovoj sekciji ćemo pokrenuti program kako bi videli izvršavanje kompajliranog koda. Program možete pokrenuti tako što ćete to učiniti direktno na ploči, ili uz pomoć Nios II ISS – simulatora (ISS - Instruction Set Simulator).
Starije verzije count_binary.h zahtevaju manje modifikacije
kako bi sačuvale kod od zavisnosti u odnosu na novije uređaje. Uverite se da 18. linija koda izgleda baš ovako:
# define LCD_PRINTF(lcd, args...) /* Do Nothing */ Pokretanje programa na ciljnom hardveru
U ovoj sekciji ćemo prebaciti naš program na ciljni hardver
i pokrenuti ga.
Ako ne posedujete razvojnu ploču, idite pravo na naslov “Run the Program on the ISS” koji se nalazi na strani 46.on page 1–40. Da bi ste nastavili dalje, morali bi ste da kompletirate korake iz sekcije “Prebacivanje hardverskog dizajna na ciljni FPGA”, koja se nalazi na strani 40.
Za prebacivanje izvršnog programa na ciljnu ploču,
uradićemo sledeće korake:
1. Kliknite desnim tasterom miša na projekat count_binary_0, odaberite opciju Run As iz ponuđenog menija, i kliknite na Nios II Hardware. Alat IDE će prebaciti program u FPGA na ciljnoj ploči i počeće njegovo izvršavanje.
Ako vam se pojavi prozor sa upozorenjem da je
potrebno da IDE odradi indeksiranje projekta altera.components pre nego što možete da nastavite sa daljim radom, sačekajte nekoliko sekundi dok on to i ne obavi. Izvorni kod se inače indeksira u cilju debagovanja.
Kada je ciljni hardver počeo sa izvršavanjem programa, u okviru konzole za parćenje pojaviće se karakteri koji su na izlazima (pogledati Sliku 1–21 na sledećoj strani). Ako ste u delu “Integrisanje SOPC Builder System‐a u Quartus II projekat”, na strani 34, dodali LE‐diode všem Nios II sistemu, onda će one sada blinkati po rasporedu brojanja u binarnom brojnom sistemu.
Izrada primer - projekta Nios II razvojni sistem
111
Kliknite na stavku Terminate (crveni kvadrat) koja se nalazi u gornjem desnom uglu strane konzole za praćenje, da bi ste prekinuli izvršavanje sesije. Kada kliknete na Terminate, alat IDE vas isključuje sa ciljnog hardvera i oslobađate Nios II procesor od daljeg izvršavanja programa.
Slika 1–21. Izgled strane u kojoj pratimo stanja na izlazima Nios II hardvera
Možete i da izvršite izmene programa count_binary.c u alatu IDE i ponovite predhodna dva koraka, kako bi ste se uverili da su vaše promene vidljive i u izvršavanju na samoj ploči.
Za više informacija u vezi izvršavanja i debagovanja
programa na ciljnom hardveru, pogledajte uputstvo Software Development Tutorial koje je dostupno u okviru Help sistema podrške alata Nios II IDE.
Izvršavanje programa na ISS - simulatoru
U ovoj sekciji ćemo pokrenuti program count_binary_0 na
Nios II ISS - simulatoru. Da bi smo ovo uradili, preduzećemo sledeće korake:
Kliknite desnim tasterom miša na projekat
count_binary_0, odaberite opciju Run As, a zatim kliknite na Nios II Instruction Set Simulator.
Ako vam se pojavi prozor sa upozorenjem da je
potrebno da IDE odradi indeksiranje projekta altera.components pre nego što možete da nastavite sa daljim radom, sačekajte nekoliko sekundi dok on to i ne obavi.
Kada ISS – simulator otpočne sa izvršavanjem programa,
u konzoli za praćenje izvršavanja će se pojaviti
Izrada primer - projekta Nios II razvojni sistem
112
karakteri koji predstavljaju stanja izlaza programa, (pogledajte Sliku 1–22). Promena stanja izlaza se odigrava veoma sporo, zato što postoji kašnjenje usled petlji u kodu.
Kliknite na dugme Terminate (crveni kvadrat) iz tulbara, koje
se nalazi u gornjem desnom uglu prozora, kako bi ste prekinuli izvršavanje programa na ISS – simulatoru.
Slika 1–22. Izgled strane u kojoj pratimo stanja na izlazima ISS - simulatora
Možete da izvršite promenu u programu count_binary.c i to uz pomoć alata IDE i ponovite predhodna dva koraka, kako bi ste se uverili da se uneta promena ispoljava na ISS – simulatoru.
Za više informacija u vezi izvršavanja i debagovanja programa na ciljnom hardveru, pogledajte uputstvo Software Development Tutorial koje je dostupno u okviru Help sistema podrške alata Nios II IDE.
113
Završna reč
Čestitamo! Upravo ste kompletirali izgradnju Nios II hardverskog sistema i pokrenuli izvršavanje programa na njemu. Kroz ovaj vodič, Vi ste se upoznali sa sledećim koracima u razvoju Nios II sistema:
Analiza sistemskih zahteva Definisanje i generisanje Nios II sistemskog hardvera u alatu
SOPC Builder Integrisanje SOPC Builder – sistema u Quartus II projekat Kompajliranje Quartus II projekta i verifikovanje vremena Kreiranje novog projekta u alatu Nios II IDE Kompajliranje projekta Izvršavanje programa na ISS – simulatoru i na ciljnom
hardveru Da bi ste uspešno napravili i sledeće korake u
usavršavanju znanja vezanog za Nios II procesor, na raspolaganju Vam je sledeća literatura:
Nios II Software Developer's Handbook – priručnik u kome ćete naći
sve vezano za razvoj softvera za Nios II procesor. Software Development Tutorial – vodič dostupan u okviru help
podrške programskog alata Nios II IDE. Ovaj vodič će Vas do detalja naučiti kako da razvijete, pokrenete i debagujete novo napisani Nios II C/C++ program.
Nios II IDE Help System – Help podrška alata IDE pruža kompletne informacije o njegovim osobinama. Da bi ste otvorili help sistem, kliknite na Help Contents u help meniju, a onda i na stavku Nios II IDE Help u panelu Contents.
Nios II Processor Reference Handbook – Ovaj priručnik daje kompletne informacije o hardverskoj strukturi Nios II procesora.
Quartus II Handbook Volume 4: SOPC Builder – Ovaj članak daje sva uputstva u vezi korišćenja alata SOPC Builder, uključujući teme kao što su izgradnja memorijskih subsistema i kreiranje proizvoljnih komponenti.
Quartus II Handbook Volume 5: Embedded Peripherals – ovaj priručnik sadrži detalje o dostupnim gotovim komponentama koje su besplatno uključene kao deo podrške Nios II Embedded Design Suite.
Za kompletnu listu svih raspoloživih dokumenata za Nios
II procesor, posetite stranicu sa literaturom na adresi: www.altera.com/literature/lit-nio2.jsp.
114
Literatura
ALTERA, Nios II Processor Reference Handbook, San Jose, 2007 ALTERA, Nios II Software Developer’s Handbook, San Jose, 2007 ALTERA, Quartus® II Development Software Handbook, San Jose, 2007 SYNPLICITY, FPGA Solutions, INC. Sunnyvale, USA, 2004 CHRIS ADLER, PRODUCT MARKETING ENGINEER, AND JAN
TAI,TECHNICAL MARKETING ENGINEER, Nios II: An Extremely Versatile Processor, Sunnyvale, USA, 2004
WOLF W., Modern VLSI design, Prentice Hall, New Jersey, 1998 M. K. STOJČEV, B. D. PETROVIĆ, Arhitektura i programiranje
mikroračunarskih sistema zasnovanih na familiji procesora 80x86, Niš, 1999
115
Biografija
Vladimir Balović
Hajduk Stanka 8/59 18 000 Niš
Telefon: + 381 (18) 4232 964 + 381 (64) 19 625 19
e‐mail: vbalovic@ gmail.com
LIČNI PODACI: OBRAZOVANJE: RADNO ISKUSTVO: RELEVANTNI SEMINARI: RAD NA RAČUNARU: JEZICI: OSTALE VEŠTINE: LIČNE OSOBINE:
Rođen u Skoplju ( Republika Makedonija ) 21. marta 1980. godine. Državljanstvo Srpsko. Gimnazija, prirodno-matematički smer, stečeno 1999. godine u Prokuplju. Apsolvent na Elektronskom fakultetu u Nišu na smeru Elektronika. U sopstvenoj režiji, na poslovima hobi elektronike, elektroinstalacija, održavanja računara. Uspešni učesnik i takmičar na strani fakulteta na VI simpozijumu industrijske elektronike “INDEL-2006” u Banja Luci, sa realizovanim projektom kontrole temperature tecnosti putem GSM-GPRS modema. Član tima na Međunarodnom kompjuterskom takmičenju studenata “Hard & Soft” održanog u Suceavi ( Rumunija ) 2006. godine sa najoriginalnije fizički realizovanim portabilnim sistemom za praćenje respiracije i pulsa kod čoveka. Microsoft Windows okruženje, Microsoft Office, CorelDRAW, Eagle, Protel, OrCad, VHDL. Srpski, Engleski, Ruski, Makedonski. Poznavanje diskretnih elektronskih komponenti kao i vesto snalazenje sa njihovim datasheet-ovima, iskustvo u fizičkoj realizaciji elektronskih uređaja i sklopova, znanje iz oblasti izrade stampanih ploča, rada na protobordu, osciloskopu i lemljenju. Odlično vladanje matematikom i fizikom i sposobnost prepoznavanja električnih problema i svođenja pod njihove zakonitosti. Pošten, uporan, vredan, precizan, ambiciozan. Spreman bez kompromisa na sve izazove i zrtve u oblasti elektronike.
116
top related