57
UNIVERZITET U NIŠU ELEKTRONSKI FAKULTET DMA (Direct Memory Access) KONTROLER mentor: student: prof. Mile K. Stojčev Bojan Nastasijević 9435 T Niš, septembar 2006.god.

DMA (Direct Memory Access) KONTROLERes.elfak.ni.ac.rs/Papers/DMA kontroler.pdf · 2013-12-06 · 1.4 Ulazno-izlazne tehnike za prenos podataka Između U/I sistema pravimo razliku

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

UNIVERZITET U NIŠU ELEKTRONSKI FAKULTET

DMA (Direct Memory Access)

KONTROLER mentor: student: prof. Mile K. Stojčev Bojan Nastasijević

9435 T

Niš, septembar 2006.god.

2

SADRŽAJ

1. UVOD ..................................................................................................... 3

1.1. Centralni procesor....................................................................... 3 1.2. Memorijski sistem ..................................................................... 4 1.3. U/I sistem ................................................................................... 4 1.4. Ulazno-izlazne tehnike za prenos podataka ............................... 6 1.5. Direktni pristup memoriji –DMA .............................................. 7

2. ZAHTEV ZA REALIZACIJU DMA KONTROLERA ....................... 11 3. REALIZACIJA DMA KONTROLERA............................................... 12

3.1. Blok šema DMA kontrolera ..................................................... 12 3.2. Osnovni elementi DMA kontrolera ......................................... 15

3.2.1. Invertor ............................................................................. 15 3.2.2. I kolo ................................................................................ 16 3.2.3. Bafer 1-bitni ..................................................................... 16 3.2.4. Bafer 16-bitni ................................................................... 17 3.2.5. Bafer 32-bitni ................................................................... 18 3.2.6. Sabirač 16-bitni ................................................................ 19 3.2.7. Registar 16-bitni .............................................................. 20 3.2.8. Brojač 32-bitni ................................................................. 21 3.2.9. Upravljački sklop ............................................................. 22

3.3. VHDL kod DMA kontrolera ................................................... 23 4. TESTIRANJE RADA KOLA .............................................................. 30 5. SINTEZA I IMPLEMENTACIJA ........................................................ 36

5.1. Implementacija DMA kontrolera unutar čipa .......................... 36 5.2. Rezultati iplementacije (zauzetost resursa na čipu)………….. 38 5.3. Testiranje rada čipa …………………………………………... 39

6. LABORATORIJSKA VEŽBA ……………………………………… 41 7. ZAKLJUČAK ...................................................................................... 56 8. LITERATURA ..................................................................................... 57

3

1. UVOD Na slici 1.1 prikazan je globalni blok dijagram računara. On se može razložiti na centralnu procesorsku jedinicu (CPU) ili procesor, pridruženi memorijski sistem i ulazno izlazni sistem.

Slika 1.1.: Globalna struktura računara

1.1 Centralni procesor CPU predstavlja mozak računara. Njegova funkcija je da izvršava program smešten u memoriji. Program čini skup instrukcija. Instrukcije se izvršavaju jedna za drugom na sledeći način: prvo CPU pribavlja instrukcije iz memorije, zatim je dekodira i na kraju izvršava. Kao i svaki digitalni sistem, CPU se može podeliti na dva gradivna bloka: programsko upravljačku jedinicu (upravljački deo) i aritmetičko-logičku jedinicu (deo za obradu podataka), tj. „mozak” i „snagu” procesora. Danas se aritmetički organ kod von Neumann-ove arhitekture, naziva i staza podataka (datapath). Staza podataka sadrži izvršne jedinice kao što su aritmetičko-logička jedinica (ALU), pomerače, registre i komunikacione puteve između njih. Sa programske tačke gledišta, staza podataka čuva veći broj stanja procesora – informaciju koja se mora zapamtiti kada se vrši supspenzija izvršenja

4

programa, a zatim se mora obnoviti da bi se produžilo sa izvršenjem. Pored korisnički vidljivih registara opšte namene, stanje uključuje programski brojač (PC), instrukcioni registar (IR), prekidno adresni registar (IAR), statusni registar procesora (PSW) Staza podataka obavlja aritmetičke operacije, a upravljačka jedinica ukazuje stazi podataka, memoriji i U/I uređajima šta da urade u zavisnosti od sadržaja instrukcije u programu. 1.2 Memorijski sistem CPU, kako je to prikazano na slici 1.1, projektovan je da radi u saradnji sa memorijom. Memorija se koristi za čuvanje programa i podataka koji su potrebni procesoru. Za realizaciju memorije koriste se različite tehnologije. U principu cena memorijskih komponenata raste kako se njihova brzina povećava. Memorijski sistem čine sledeće tri celine: 1. keš memorija - veoma brza memorija u kojoj se čuvaju programi i podaci koji će se koristiti u skorijoj budućnosti. Ugradnja ove memorije nije obavezna kod svih sistema. 2. glavna memorija - čine je relativno brze komponente koje se direktno povezuju na CPU i upravljaju od strane CPU-a. Koriste se za čuvanje programa i podataka. U najvećem broju slučajeva glavna memorija je RAM i ROM tipa i adresibilna je na nivou reči. Svaka lokacija u kojoj se čuva reč ima svoju jedinstvenu adresu na osnovu koje se ona identifikuje. 3. sekundarna memorija - čine je magnetne trake i magnetne i optičke disk jedinice. Ove jedinice su namenjene za memorisanje velike količine informacije koja se ne koristi tako često od strane CPU-a. Jedinice trake i diskova uobičajeno se direktno upravljaju od strane procesora specijalne namene. Prema tome, sekundarnu memoriju čine sporiji i jevtiniji gradivni blokovi koji sa CPU-om komuniciraju indirektno preko glavne memorije. 1.3 U/I sistem Računar komunicira sa svojim okruženjem preko U/I uređaja. U/I uređaji su deo mašine koji mogu: (a) memorisati informaciju čitljivu od strane računara; (b) konvertovati ulaze okruženja u formu koju računar može da zazume; (c) konvertovati podatke na izlazu računara u formu koja je razumljiva okruženju. Okruženje mogu činiti ljudi, drugi računari, razni industrijski procesi i dr.

5

U/I sistem predstavljaju svi U/I uredjji koji su povezani na CPU. Jedan U/I interfejs (kontroler uređaja) može da ostvari sledeće tipove veza između CPU-a i U/I uređaja: (1) jedan-prema-jedan; i (2) jedan-prema-više. U svim slučajevima, sa ciljem da U/I uređaj korektno radi, U/I intrfejs ostvaruje funkcije baferovanja i upravljanja. Fizički U/I intrfejs može biti lociran u okviru U/I uređaja, CPU-a ili biti pakovan kao posebna jedinica. Iz brojnih razloga (specifičnost povezivanja, potrebe, performanse i dr.) na jedan U/I interfejs se može povezati jedan ili veći broj U/I uređaja preko namenskih ili zajedničke magistrale. Svaki U/I interfejs predstavlja stepen za spregu između sistemske magistrale sa jedne strane i jednog ili većeg broja U/I uređaja sa druge strane. Drugim rečima U/I interfejs ne predstavlja samo skup veza i mehanički konektor nego sadrži i određeni stepen inteligencije.tj. sadrži neku logiku koja obavlja određenu komunikacionu funkciju između U/I uređaja, sistemske magistrale i CPU-a. Inteligentniji U/I intrfejsi mogu da vrše određeni nivo lokalne obrade i da sadrže sopstvenu memoriju. Ovakve strukture obično dozvoljavaju direktni pristup memoriju (Direct Memory Access – DMA), ili U/I obradu koja se obavlja konkurentno sa radom CPU-a. U/I uređaj povezan na U/I interfejs često se zove periferni uređaj ili periferal. Tipični predstavnici U/I uređaja dati su na slici 1.2.

Tip U/l uređaji ulazni izlazni

Medijum i način prezentacije

skeneri + znaci na papiru

linijski/serijski štampači + znaci na papiru

grafički ploteri + vizuelna slika na papiru

CRT video prikazi + vizuelna slika na ekranu

svetleće pero + vizuelna slika na ekranu

tastatura + znaci na prikazu

sedmo-segmentni LED displeji + znaci na prikazu

jedinica magnetne trake + + znaci na magnetnoj traci

jedinica magnetnog diska + + znaci na magnetnom disku

jedinica optičkog diska + znaci na optičkom disku

miš + vizuelna slika na ekranu

analogno digitalni konvertori + analogni elektirčni signali

modemi + + analogni električni signali

sintezatori govora + izgovorene reci

Slika 1.2.: Tipični predstavnici U/l uređaja

6

U najvećem broju slučajeva U/I uređaji koriste elektromehaničke tehnologije pa zbog toga postoji ogromna razlika u brzini rada između procesora i glavne memorije sa jedne i U/I uređaja sa druge strane. U/I uređaj se može upravljati direktno od strane CPU-a, ali najčešće uloga neposrednog upravljanja se dodeljuje specijalnom procesoru koji usmerava tok informacije između spoljašnjeg sveta i memorije. 1.4 Ulazno-izlazne tehnike za prenos podataka Između U/I sistema pravimo razliku u odnosu na to u kojoj je meri CPU uključen (aktivno učestvuje) u toku izvršenja U/I operacija. Pri ovome, pod U/I operacijom podrazumevamo prenos podataka između U/I uređaja i CPU-a. Ako su U/I operacije u potpunosti kontrolisane od strane CPU-a, tj. CPU izvršava programe pomoću kojih se iniciraju, usmeravaju i završavaju U/I operacije za računar kažemo da koristi programirani U/I prenos. Ovaj prenos se implementira ugradnjom veoma malog specijalnog U/I hardvera, ali ima za posledicu da CPU troši veliki deo svog vremena obavljajući relativno jednostavne U/I upravljačke funkcije. Jedna od ovih funkcija može da bude testiranje statusa U/I uređaja sa ciljem da se odredi da li taj uređaj zahteva opsluživanje od strane CPU-a. Kada procesor izda komandu U/I interfejsu on zatim čeka sve dok se U/I operacija ne završi. Kako je CPU brži od U/I interfejsa, evidentno je da procesor suviše mnogo vremena gubi na testiranje spremnosti za prenos. U/I uređaj ili njegov kontroler (U/I interfejs) mogu imati ugrađen specijalan hardver pomoću koga se zahteva opsluživanje od strane CPU-a, tj. izvršenje specifičnog programa radi opsluživanja U/I uređaja. Ovaj tip zahteva se zove prekid, a tehnika prenosa je poznata kao prekidni U/I prenos. Mogućnost prekidanja oslobađa CPU-a od obavljanja onih zadataka koji se odnose na periodično testiranje statusa U/I uređaja. Kod prckidnog U/I prenosa, CPU izda U/I komandu, zatim produžava da izvršava druge instrukcije, a prekida se od strane U/I interfejsa kada je interfejs spreman da primi ili preda podatke. Nakon opsluživanja prekida CPU može da nastavi sa izvršenjem prekinutog programa. Ako se u U/I sistem (podsistem) ugradi specijalan hardver tada se U/I uređaju može obezbediti mogućnost da vrši direktan prenos blokova informacije ka ili iz glavne memorije bez intervencije CPU-a. Ovo zahleva od U/I uređaja (ili njegovog kontrolera) da bude sposoban da generiše memorijske adrese i vrši prenos podataka ka ili iz sistemske magistrale, tj.

7

da bude gospodar magistrale. CPU je odgovoran na nivou iniciranja prenosa blokova podataka. Konlroler U/I uređaja može obavljati prenos bez intervencije CPU-a. Interakcija u radu između CPU-a i U/I kontrolera postoji samo kada CPU treba da preda pravo upravljanja nad sistemskom magistralom U/I kontroleru. Nakon ovoga U/I interfejs i glavna memorija direktno razmenjuju podatke, bez posredstva CPU-a. Ovaj tip U/I prenosa podataka se zove direktni pristup memoriji (Direct Memory Access -DMA). Na slici 1.3 prikazan je odnos između ove tri U/I tehnike za prenos podataka

Prenos Bez posredstva

prekida

Posredstvom prekida

U/l<-> memorija preko CPU-a

programiran U/l

U/l aktiviran prekidom

U/l<-> memorija direktno

DMA

Slika 1.3.: U/I tehnike za prenos podataka 1.5 Direktni pristup memoriji –DMA Kod obe tehnike, programirana U/I i prekidna U/I, CPU aktivno učestvuje u toku U/I procesa. Kada periferija predaje podatak U/I interfejsu, CPU mora prvo da prihvati taj podatak a zatim, ako je neophodno, da ga smesti u memoriju. Na sličan način kada je periferija spremna da prihvati podatak CPU prvo čita podatak iz memorije, a nakon toga ga predaje U/I interfejsu. Drugim recima, prenosni put svakog podatka zatvara se preko CPU-a. Zbog toga kod obe ove U/I tehnike postoje sledeća dva nedostatka: a) brzina U/I prcnosa ograničena je brzinom sa kojom CPU može da testira i opslužuje U/I podsistem, b) CPU upravlja U/I prenosom; za svaki U/I prenos potrebno je da se izvrši veći broj naredbi. Direktnim memorijskim pristupom (DMA) premošćava se usko grlo CPU-periferija i obezbeđuje prenos podataka između periferija i RAM mikroračunara bez aktivne intervencije CPU-a. Osnovne karakteristike ove tehnike su: l. prenos se ostvaruje bez programskog upravljanja, 2. brzina prenosa je velika i određena je memorijskim ciklusom (< 0,5μs) a reda je 2 M bajta/s i više,

8

3. prenos se realizuje kao blokovski.

Slika 1.4.: Tokovi podataka kod DMA U/I prenosa

Uočimo sa slike 1.4 da je kod DMA U/I tok podataka direktan ka/iz memorije. CPU sve drži pod svojom kontrolom na taj način što izdaje komande kako U/I uređaju tako i pridruženom U/I interfejsu. Ali, u daljem toku, ne upravlja više prenosom podataka na principu bajt-po-bajt. Takođe, DMA interfejs je povezan sa CPU-om i preko DMA (upravljačkih) linija. Preko ovih linija reguliše se odnos prava upravljanja tipa sluga/gospodar nad sistemskom magistralom u toku DMA prenosa podataka ka/iz memorije. U/I uređaj se povezuje na sistem preko specijalnog interfejs kola koje se zove DMA kontroler (DMC - DMA controller). Sastavni delovi DMC-a su: a) IODR - ulazno/izlazni baferi podataka; b) IOAR - generator adresa; c) DC - brojač prenetih podataka; i d) CUD - upravljačka jedinica. Registri DMC-a omogućavaju prenos podataka ka/iz kontinualnih memorijskih oblasti. Registar IOAR se koristi za čuvanje adrese reči koja se prenosi kao naredna, i automatski se inkrementira nakon svake prenete reči. U registru DC čuva se broj reči koje treba još preneti. DC se automatski dekrementira nakon svake prenete reči a nakon toga njegov sadržaj testira za nulu. Kada sadržaj registra DC dostigne vrednost 0 DMA prenos se zaustavlja. Nakon ovog trenutka DMC aktivira izlaz DMA_REQ preko koga obaveštava CPU da je DMA prenos završen. Tipična sekvenca događaja koja se odvija u toku DMA transakcije prikazana je na slici 1.5.

9

Slika 1.5.: Tipična sekvenca događaja u toku DMA prenosa

Gospodar magistrale u jednom trenutku može biti CPU ili DMA kontroler. U zavisnosti od toga na koji način se realizuje DMA prenos razlikujemo nekoliko tipova: al) Krađa ciklusa - DMA kontroler koristi sistemsku magistralu za vrcme prenosa jednog bajta ili reci na principu krade magistralnih ciklusa mikroprocesoru. U realnim situacijama vreme se, kod nekih mašin-skih ciklusa, produžava za nekoliko taktova ali se zahvatanje i oslobađanje

10

magistrale sinhronizira sa radom mikroprocesora. Ovaj tip DMA se uglavnom koristi kod relativno sporih prenosa podataka. a2) Normalni - DMA kontroler koristi sistemsku magistralu u toku trajanja celokupnog vremena koje je potrebno za prenos bloka podataka, a mikroprocesoru je zabranjen pristup na magistralu za taj duži period. Ovaj način rada se koristi za veoma brzi prenos podataka. Osnovni nedostatak ovog načina rada je taj što je mikroprocesor duže vreme pasivan. Naime, može se desiti da CPU propusti da analizira neki događaj čije je izvršenje urgentno, ili da se izvršenje DMA prenosa nedopustivo dugo odloži. Zbog toga se DMA kontroler u takvim situacijama programira tako da se ceo blok podataka ne prenese odjednom nego u određenom broju podblokova specificiranih dužina. Nakon DMA prenosa podblokova, upravljanje magistrale se za određeni period vremena prepušta CPU-u. Na ovaj način, CPU-u je „pružena šansa" da može analizirati i događaje koji se moraju hitno izvršiti. Ovaj princip rada zove se „burst" (paketni) DMA

Slika 1.6.: Normalan i „burst" DMA način rada

a3) Transparentni - DMA kontroler koristi sistemsku magistralu samo za vreme onih taktnih intervala u okviru procesorskih ciklusa kada mikroprocesor ne koristi sistemsku magistralu. Drugim rečima mi-kroprocesor i DMA kontroler koriste sistemsku magistralu i memoriju u različito vreme bez sukobljavanja. Da bi se ostvario ovakav tip DMA prenosa potrebno je da vreme pristupa memoriji bude relativno kratko ili da se koriste specijalni magistralni slotovi koji u datom trenutku nisu potrebni CPU-u.

11

2. ZAHTEV ZA REALIZACIJU DMA KONTROLERA Realizovati DMA kontroler (čip) koji bi se koristio za indirektni prenos podataka između glavne memorije računarskog sistema i ulazno-izlaznog podsistema. Opisati rad kontrolera uz pomoć VHDL koda i imlementirati ga na čip iz familije Xilinx6x VIRTEX2. Kreirati laboratorijsku vežbu pomoću koje će studenti postupkom simulacije proveravati rad DMA kontrolera.

12

3. REALIZACIJA DMA KONTROLERA Na osnovu zahteva za realizaciju i predhodno navedenih osobina DMA kontrolera izvršio sam njegovo projektovanje uz pomoć programa VHDL. 3.1 Blok šema DMA kontrolera Šema DMA kontrolere, slika 3.1, sadrži četiri osnovne celine:

• CUD - upravljačka jedinica • IOAR - generator adresa • IODR - ulazno/izlazni baferi podataka • DC - brojač prenetih podataka

13

DATA(31:0)DACK(31:0) DMA_REQ

mem_r_w io_r_w DMA_ACK R_W

enableout1

in1

mem

buf1

enableout1

in1io

buf1

jedan(15:0)

adresiranje_memorije(15:0)

in1out1

invertor1

inv

zahtev_za_DMA

pomcmem

pomcinterfejs

in1out1

in2

U2

i_kolo

clk

DMA_ACK

ADR

R_W

ASK_pom StopDMA

DMA_REQ

zahtev_za_DMA

RW

U3

upravljanje

clkpom

enable

out1(31:0)in1(31:0)

U5

buf

enable

out1(31:0) in1(31:0)

U6

buf

enable

out1(15:0)in1(15:0)

U7

buf_adr

enable

out1(15:0) in1(15:0)

U8

buf_adr

enable

out1(15:0) in1(15:0)

U9

buf_adr

CLK

Q(15:0)DATA(15:0)

Reset

U10

registar

A(15:0)

Q(15:0)

B(15:0)

U11

sabirac

CLK

Q(31:0)DATA(31:0)

LOAD

U1

brojac

I(31:0)O

U12

and32

brojac1(31:0)

CUD

IODR

IOAR

DC

Slika 3.1.: Blok šema DMA kontrolera

CUD - upravljačka jedinica predstavlja deo DMA kontrolera koji, čije samo ime kaže, služi za upravljanje i kontrolu DMA kontrolera. On uspostavlja vezu sa periferijom, procesorom i memorijom, kontroliše smer protoka podataka tj. da li se vrši upisivanje ili čitanje iz memorije i daje dozvolu za upis adrese u adresni registar. Sadrži sledeće ulaze i izlaze:

o zaxtev_za_DMA – predstavlja ulazni signal koji dolazi od periferije i predstavlja zahtev za prenos podataka,

14

o DMA_REQ – predstavlja izlazni signal koji je upućen procesoru kako bi se zaustavio njegov rad i omogućio pristup magistrali podataka,

o DMA_ACK – predstavlja ulazni signal kojim procesor javlja DMA kontroleru da je prestao sa radom i da može da počna sa prenosom podataka,

o R_W – predstavlja ulazni signal koji nam govori o tome dali se radi o prenosu pidataka sa periferije u memoriju ili iz memorije na periferiju,

o mem_r_w – predstavlja izlazni signal koji se upućuje memoriji i on joj javlja dali se vrši čitanje iz nje ili upisivanje u nju,

o io_r_w – predstavlja signal koji se upućuje periferiji i on joj javlja dali se vrši čitanje sa nje ili upisivanje na nju,

o ADR – predstavlja signal koji se upućuje adresnom baferu kako bi se u njega upisala adresa sa magistrale podataka,

o R i W – predstavljaju signale koji se upućuju trostatičkim baferima i oni predstavljeju dozvole za unos podatka

o StopDMA – predstavlja signal koji dolazi iz brojača i on nosi informaciju o završetku prenosa

o clk – clock IOAR - generator adresa je deo DMA kontrolera koji određuje sa koje adrese se čita podatak iz memorije ili na koju adresu se upisuje podatak u memoriju. Početna adresa se uzima sa magistrale podataka u trenutku prestanka rada CPU-a. U svakom ciklusu upisa ili čitanja podataka adresa memorijske lokacije se pomera za jedan. Logika adresiranja je povezana sa magistralom podataka preko ulaza-izlaza adresiranje_memorije a sa logikom upravljanja preko ulaza ADR, DMA_ACK i zaxtev_za_DMA. Tek kada procesor da dozvolu za rad DMA kontrolera preko ulaza DMA_ACK, tek je tada moguće upisati adresu u adresni bafer adr_in. Prvi podatak, bilo da je u pitanju čitanje ili upisivanje, se vezuje za tu adresu a sledeći podatak se smešta na memorijsku lokaciju čija je adresa pomerena za jedan. Sa svakim narednim podatkom adresa memorijske lokacije se pomerena za jedan tako da se nikada ne poklope dva podatka na istu memorijsku lokaciju. Stalno pomeranje adrese nam omogućuje CLK kao i adresni registar. IODR - ulazno/izlazni baferi podataka nam omogučuju prenos podataka iz memorije na periferiju i obrnuto. Postoje dva 32-bitna bafera i u zavisnosti od smera prenosa podataka uvek je jedan zatvoren a jedan otvoren. Kontrola bafera se vrši iz logike upravljanja preko izlaza R i W. Baferi su preko ulaza-izlaza DATA povezani sa memorijom a preko ulaza-izlaza DACK sa periferijom.

15

DC - brojač prenetih podataka čuva broj reči koje treba još preneti. DC se automatski dekrementira nakon svake prenete reči a nakon toga njegov sadržaj se testira za nulu. Kada sadržaj registra DC dostigne vrednost 0 DMA prenos se zaustavlja. Nakon ovog trenutka DMC aktivira izlaz DMA_REQ preko koga obaveštava CPU da je DMA prenos završen 3.2 Osnovni elementi DMA kontrolera U nastavku ću definisati svaki sastavni elemenat kola, predstaviti njegovu sliku kao i njegov kod u VHDL-u. 3.2.1 Invertor Osnovna funkcija invertora je da se na njegovom izlazu dobije invertovani ulazni signal.

Slika 3.2.: Simbol invertora

VHDL kod: library IEEE; --biblioteka koju koristimo use IEEE.STD_LOGIC_1164.all; entity inv is --kolo vrsi invertovanje ulaznog signala port(in1 :in std_logic ; --in1 je ulaz kola out1 :out std_logic ); --out1 je izlaz kola end inv; architecture inv of inv is --opisivanje funkcije kola begin out1 <= not in1 ; --na izlaz se salje invertovani ulazni signal end inv;

16

3.2.2 I kolo

Slika 3.3.: Simbol I kola

VHDL kod: library ieee; --biblioteka koju koristimo use ieee.std_logic_1164.all; entity i_kolo is --kolo vrsi "i" funkciju sa dva operanda port ( in1 : in std_logic; --prvi operand in2 : in std_logic; --drugi operand out1 : out std_logic); --rezultat funkcije "i" end entity i_kolo; architecture i_kolo of i_kolo is --opis funkcije kola begin out1 <= in1 and in2 --izlaz dobija vrednost "i" end; --funkcije od ulaznih operanada 3.2.3 Bafer 1-bitni Bafer služi za odvajanjr dva stepena u kolu.

enableout1in1

Slika 3.4.: Blok šema 1-bitnog bafera

VHDL kod:

17

library IEEE; --biblioteka koju koristimo use IEEE.STD_LOGIC_1164.all; entity buf1 is --bafer sluzi za odvajanje dva stepena u kolu port(in1 :in std_logic ; --in1 je ulazni signal enable :in std_logic ; --dozvola out1 :out std_logic ); --out1 je izlazni signal end buf1; architecture buf1 of buf1 is --opisivanje funkcije kola begin process(enable , in1) begin petlja1: if enable = '1' then --ako je dozvoljen rad out1 <= in1 ; --ulazni signal se prenosi na izlaz end if petlja1; petlja2: if enable = '0' then --ako nije dozvoljen rad out1 <= 'Z' ; --ulazni signal je u stanju visoke impedanse end if petlja2; end process; end buf1; 3.2.4 Bafer 16-bitni

enable

out1(15:0)in1(15:0)

Slika 3.5.: Blok šema 16-bitnog bafera

VHDL kod: library IEEE; --biblioteka koju koristimo use IEEE.STD_LOGIC_1164.all; entity buf is --bafer sluzi za odvajanje dva stepena u kolu port(in1:in std_logic_vector(15 downto 0) ; --in1 je ulazni signal

18

enable :in std_logic ; --dozvola out1 :out std_logic_vector(15 downto 0) ); --out1 je izlazni signal end buf; architecture buf of buf is --opisivanje funkcije kola begin process(enable , in1) begin petlja1: if enable = '1' then --ako je dozvoljen rad out1 <= in1 ; --ulazni signal se prenosi na izlaz end if petlja1; petlja2: if enable = '0' then --ako nije dozvoljen rad out1 <= "ZZZZZZZZZZZZZZZZ" ; --izlazni signal je u stanju

visoke impedanse end if petlja2; end process; end buf; 3.2.5 Bafer 32-bitni

enable

out1(31:0)in1(31:0)

U5

buf Slika 3.6.: Blok šema 32-bitnog bafera

VHDL kod:

library IEEE; --biblioteka koju koristimo use IEEE.STD_LOGIC_1164.all; entity buf_adr is --bafer sluzi za odvajanje dva stepena u kolu port(in1 :in std_logic_vector(31 downto 0) ; --in1 je ulazni signal enable :in std_logic ; --dozvola out1 :out std_logic_vector(31 downto 0) ); --out1 je izlazni signal

19

end buf_adr; architecture buf_adr of buf_adr is --opisivanje funkcije kola begin process(enable , in1) begin petlja1: if enable = '1' then --ako je dozvoljen rad out1 <= in1 ; --ulazni signal se prenosi na izlaz end if petlja1; petlja2: if enable = '0' then --ako nije dozvoljen rad out1 <= "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ " ;--izlazni signal je u stanju visoke impedanse end if petlja2; end process; end buf_adr; 3.2.6 Sabirač 16-bitni Sabirač (adder) je kolo koje ima funkciju kao što i samo njegovo ime govori da sabira. Zadatak mu je da sabere vrednost iz registra koja je upamćena u predhodnom koraku sa jedinicom . Izlaz sabirača se vodi na registar i ta vrednost se opet privremeno smešta u njega.

A(15:0)

Q(15:0)

B(15:0)

U11

sabirac Slika 3.7.: Blok šema 16-bitnog sabirača

VHDL kod: library IEEE; --biblioteka koju koristimo use IEEE.std_logic_1164.all; use IEEE.std_logic_unsigned.all; entity sabirac is --kolo vrsi sabiranje A i B sa rezultatom Q sluzi za

odredjivanje adresa port ( A, B : in std_logic_vector(15 downto 0); --sabirci

20

Q : out std_logic_vector(15 downto 0) --rezultat ); end entity; architecture sabirac of sabirac is --opisivanje funkcije kola begin process (A, B) --proces koji se realizuje kada se neki sabirak promeni begin Q <= A + B; --izracunavanje zbira end process; end architecture; 3.2.7 Registar 16-bitni Ovaj registar služi za smestanje adrese i njeno slanje na sabirač i magistralu podataka.

CLK

Q(15:0)DATA(15:0)

Reset

registar Slika 3.8.:Blok šema 16-bitnog registra

VHDL kod: library IEEE; --biblioteka koju koristimo use IEEE.std_logic_1164.all; entity registar is --koristimo ga da pamtimo

adresu sa koje obradjuju podaci port ( Reset : in std_logic; --Reset CLK : in std_logic; --Clk DATA : in std_logic_vector(15 downto 0); --ulazni podatak Q : out std_logic_vector(15 downto 0) --izlazni podatak );

21

end entity; architecture registar of registar is --opisivanje funkcije kola signal TEMP_Q: std_logic_vector(15 downto 0); --pomocni signal begin process (CLK,Reset) --proces koji se izvrsava sa promenom

signala clk ili reset begin if rising_edge(CLK) then --obezbedjuje da registar radi na

uzlaznu ivicu clk if Reset = '1' then --kada je reset 1 TEMP_Q <= (others => '0'); --na izlazu su nule else --kada nema reseta TEMP_Q <= DATA; --na izlaz se prenosi

podatak sa ulaza i ne menja se do sledece uzlazne ivice clk end if; end if; end process; Q <= TEMP_Q; end registar; --vrednost pomocne promenljive postavlja na izlaz 3.2.8 Brojač 32-bitni Ovaj brojač čuva broj reči koje treba još preneti

CLK

Q(31:0)DATA(31:0)

LOAD

U1

brojac Slika 3.9.: Blok šema 32-bitnog brojača

VHDL kod: library IEEE; use IEEE.std_logic_1164. all;

22

entity Brojac is port ( CLK : in std_logic; LOAD : in std_logic; DATA : in std_logic_vector(31 downto 0); Q : out std_logic_vector(31 downto 0) ); end entity; library IEEE; use IEEE.std_logic_unsigned.all; architecture Brojac_arch of Brojac is signal TEMP_Q : std_logic_vector(31 downto 0); begin process(CLK) begin if rising_edge(CLK) then if LOAD = '1' then TEMP_Q <= DATA; else TEMP_Q <= TEMP_Q - 1; end if; end if; end process; Q <= TEMP_Q; end architecture; 3.2.9 Upravljački sklop Upravljački sklop je sastavni deo logike upravljanja. Sadrži ulaze i izlaze koji su već opisani u 3.1.

23

DMA_ACK

ADR

R_W

ASK_pom StopDMA

DMA_REQ

zahtev_za_DMA

RW

Slika 3.10.: Blok šema upravljačkog sklopa

DMA_ACK

R_W

DMA_REQ

R

W

in1out1

in2

U1

i_koloin1

out1in2

U2

i_koloin1 out1

U3

inv

zahtev_za_DMAin1

out1in2

U4

i_koloin1 out1

U5

inv

ADR

StopDMA in1 out1

U8

inv

in1out1

in2

U9

i_kolo

in1out1

in2

U6

i_kolo

ASK_pompom

Slika 3.11.: Šema upravljačkog sklopa

3.3 VHDL kod DMA kontrolera -- Design unit header -- library IEEE; use IEEE.std_logic_1164.all; entity DMAkontroler is port( DMA_ACK : in STD_LOGIC; R_W : in STD_LOGIC; clk : in STD_LOGIC; zahtev_za_DMA : in STD_LOGIC;

24

jedan : in STD_LOGIC_VECTOR(15 downto 0) := "0000000000000001"; DMA_REQ : out STD_LOGIC; io_r_w : out STD_LOGIC; mem_r_w : out STD_LOGIC; DACK : inout STD_LOGIC_VECTOR(31 downto 0); DATA : inout STD_LOGIC_VECTOR(31 downto 0); adresiranje_memorije : inout STD_LOGIC_VECTOR(15 downto 0) ); end DMAkontroler; architecture DMAkontroler of DMAkontroler is ---- Component declarations ----- component and32 port ( I : in STD_LOGIC_VECTOR(31 downto 0); O : out STD_LOGIC ); end component; component brojac port ( CLK : in STD_LOGIC; DATA : in STD_LOGIC_VECTOR(31 downto 0); LOAD : in STD_LOGIC; Q : out STD_LOGIC_VECTOR(31 downto 0) ); end component; component buf port ( enable : in STD_LOGIC; in1 : in STD_LOGIC_VECTOR(31 downto 0); out1 : out STD_LOGIC_VECTOR(31 downto 0) ); end component; component buf1 port ( enable : in STD_LOGIC; in1 : in STD_LOGIC;

25

out1 : out STD_LOGIC ); end component; component buf_adr port ( enable : in STD_LOGIC; in1 : in STD_LOGIC_VECTOR(15 downto 0); out1 : out STD_LOGIC_VECTOR(15 downto 0) ); end component; component inv port ( in1 : in STD_LOGIC; out1 : out STD_LOGIC ); end component; component i_kolo port ( in1 : in STD_LOGIC; in2 : in STD_LOGIC; out1 : out STD_LOGIC ); end component; component registar port ( CLK : in STD_LOGIC; DATA : in STD_LOGIC_VECTOR(15 downto 0); Reset : in STD_LOGIC; Q : out STD_LOGIC_VECTOR(15 downto 0) ); end component; component sabirac port ( A : in STD_LOGIC_VECTOR(15 downto 0); B : in STD_LOGIC_VECTOR(15 downto 0); Q : out STD_LOGIC_VECTOR(15 downto 0) ); end component; component upravljanje port (

26

DMA_ACK : in STD_LOGIC; R_W : in STD_LOGIC; StopDMA : in STD_LOGIC; zahtev_za_DMA : in STD_LOGIC; ADR : out STD_LOGIC; ASK_pom : out STD_LOGIC; DMA_REQ : out STD_LOGIC; R : out STD_LOGIC; W : out STD_LOGIC ); end component; ---- Signal declarations used on the diagram ---- signal clkpom : STD_LOGIC; signal NET2369 : STD_LOGIC; signal NET2405 : STD_LOGIC; signal NET3794 : STD_LOGIC; signal NET5490 : STD_LOGIC; signal NET7261 : STD_LOGIC; signal pomcinterfejs : STD_LOGIC; signal pomcmem : STD_LOGIC; signal brojac1 : STD_LOGIC_VECTOR (31 downto 0); signal BUS5334 : STD_LOGIC_VECTOR (15 downto 0); signal BUS5335 : STD_LOGIC_VECTOR (15 downto 0); signal BUS5555 : STD_LOGIC_VECTOR (15 downto 0); begin ---- Component instantiations ---- U1 : brojac port map( CLK => clkpom, DATA => DATA, LOAD => NET2369, Q => brojac1 ); U10 : registar

27

port map( CLK => clkpom, DATA => BUS5335, Q => BUS5334, Reset => NET5490 ); U11 : sabirac port map( A => BUS5334, B => jedan, Q => BUS5555 ); U12 : and32 port map( I => brojac1, O => NET2405 ); U2 : i_kolo port map( in1 => zahtev_za_DMA, in2 => NET7261, out1 => NET2369 ); U3 : upravljanje port map( ADR => NET7261, ASK_pom => NET3794, DMA_ACK => DMA_ACK, DMA_REQ => DMA_REQ, R => pomcinterfejs, R_W => R_W, StopDMA => NET2405, W => pomcmem, zahtev_za_DMA => zahtev_za_DMA );

28

U5 : buf port map( enable => pomcmem, in1 => DATA, out1 => DACK ); U6 : buf port map( enable => pomcinterfejs, in1 => DACK, out1 => DATA ); U7 : buf_adr port map( enable => NET7261, in1 => adresiranje_memorije, out1 => BUS5335 ); U8 : buf_adr port map( enable => DMA_ACK, in1 => BUS5555, out1 => BUS5335 ); U9 : buf_adr port map( enable => DMA_ACK, in1 => BUS5334, out1 => adresiranje_memorije ); invertor1 : inv port map( in1 => zahtev_za_DMA, out1 => NET5490 );

29

io : buf1 port map( enable => NET3794, in1 => pomcmem, out1 => io_r_w ); mem : buf1 port map( enable => NET3794, in1 => pomcinterfejs, out1 => mem_r_w ); ---- Terminal assignment ---- -- Inputs terminals clkpom <= clk; end DMAkontroler;

30

4. TESTIRANJE RADA KOLA Da bi u potpunosti približio korisniku i pojednostavio korišćenje VHDL – a objasniću celu proceduru testiranja kola korak po korak. Sa Desktop-a pokrenemo program VHDL tako što dva puta levim tasterom miša kliknemo na njega. Nakon pokretanja programa dolazimo do koraka gde nam on nudi koji projekat želimo da otvorimo. Izgled je dat na slici 4.1.

Slika 4.1.: Izbor projekta nakon otvaranja programa

Ako želimo da otvorimo projekat koji smo već otvarali, onda izaberemo jedan iz prozorčeta, ako pak želimo da otvorimo projekat koji nije ponuđen već je negde na HDD-u ili nekom drugom pokretnom mediju onda idemo na „More designs”. Nakon toga dobijamo kompletan program i automtski nam otvara stranice koje smo zadnje otvarali za prethodno odabrani projekat. Da bi smo krenuli sa testiranjem kola izaberemo ispod Design Browser deo koji želimo da testiramo (u našem slučaju je DMA kontroler), to je predstavljeno na slici 4.2. Nakon što smo odabrali šta želimo da testiramo, idemo na prvu ikonicu desno od disketice “New Waveform”. Kada kliknemo na nju javljaju nam se dva prazna polja. Sa desne strane je Time Line a sa leve se nalaze Name,Volue i Stimulator. Desnim klikom miša na prazno levo polje dobijamo padajaći meni kao na slici 4.3. Izborom jedine aktivne ikonice “Add signals” otvara nam se nov prozor u kome imamo sve ulaze,

31

Slika 4.2.: Izbor šta želimo da testiramo

Slika 4.3.: Izgled stranice Waveforma i padajući meni

32

izlaze i ostale elemente jednog kola koje testiramo. Mi biramo ulaze, izlaze kao na slici 4.4 i zadajemo im vrednosti po sledećim pravilima.

Slika 4.4.: Izbor ulaznih i izlaznih veličina za testiranje

Kada smo izabrali ulaze i izlaze ( posmatramo samo njih jer ulaze zadajemo a izlaze gledamo) zadajemo vrednosti za svaki ulaz ponaosob i to na sledeći način. Desni klik na izabrani ulaz ( to može biti bilo koji ulaz) i onda dobijamo jedan padajući meni sa više opcija, mi biramo prvu koja se zove „Stimulators”. Nakon odabira opcije stimulators, dobijamo jedan meni koji izgleda kao na slici 4.5.

Slika 4.5.: Padajući meni opcije za zadavanje vrednosti „Stimulators”

33

U zavisnosti o kakvom ulazu je reč (njegova priroda signala) biramo odgovarajuće vrednosti. Tako npr. za clk signal odabraćemo „Clock“ generator, za ostale signale koji se zadaju u binarnom obliku tu je opcija „Value“. Treba istaći jednu veoma bitnu činjenicu da se ulazne vrednosti zadaju u binarnom obliku a izlazne se dobijaju u heksadecimlanom obliku. Negativne vrednosti se dobijaju kao potpuni komplementi te je potrebno ručno ih prevesti u originalne brojeve. Pre početka testiranja rada DMA kontrolera vrši se izbor ulaza koje ćemo da programiramo i izbor izlaza ćije ćemo promene da pratimo. Potrebno je izabrati sledeće ulaze i izlaze: zahtev_za_DMA, DMA_ACK, R_W, clk, DMA_REQ, mem_r_w, io_r_w, adresiranje_memorije, DACK, DATA i brojac1 Postupak programiranja DMA kontrolera u slučaju kada se želi upisati neki podatak iz memorije na periferiju (slika 4.6.): • Korak 1. - zahtev_za_DMA - ”0” (periferija još nije uputila zahtev za prenos podataka), - DMA_ACK - ”0” (procesor nije dao dozvolu DMA kohtroleru za prenos podataka), - R_W - ”0” (vrši se prenos podataka iz memorije u periferiju) - clk - postavlja se da okida 1 Pretisne se F5 i prati se šta se desilo na izlazima • Korak 2. - zahtev_za_DMA - ”1” (periferija je uputila zahtev za prenos podataka), - DMA_ACK - ”0” (procesor nije dao dozvolu DMA kohtroleru za prenos podataka), - adresiranje_memorije - unosi se 16-bitna adresa memorijske lokacije sa koje će početi čitanje podataka - DATA - unosi se binaran broji koji kazuje koliko reči treba preneti Pretisne se F5 i prati se šta se desilo na izlazima • Korak 3. - DMA_ACK - ”1” (procesor nije dao dozvolu DMA kohtroleru za prenos podataka), - adresiranje_memorije - isključuje se - DATA - unosi se 32-bitni broj koji predstavlja podatak koji se prenosi Pretisne se F5 i prati se šta se desilo na izlazima • Korak 4. - DATA - unosi se 32-bitni broj koji predstavlja podatak koji se prenosi u datom koraku

34

Slika 4.6.: Dijagram stanja DMA kontrolera za slučaj prenosa podatka

iz periferije u memoriju Korak 4. se ponavlje sve dok brojač ne dođe na 0 kada se prenos prekida i preko DMA_REQ se šalje informacija procesoru da je prenos zavrsen. Postupak programiranja DMA kontrolera u slučaju kada se želi upisati neki podatak sa periferije u memoriju (slika 4.7.): • Korak 1. - zahtev_za_DMA - ”0” (periferija još nije uputila zahtev za prenos podataka), - DMA_ACK - ”0” (procesor nije dao dozvolu DMA kohtroleru za prenos podataka), - R_W - ”1” (vrši se prenos podataka iz periferije u memoriju) - clk - postavlja se da okida 1 Pretisne se F5 i prati se šta se desilo na izlazima • Korak 2. - zahtev_za_DMA - ”1” (periferija je uputila zahtev za prenos podataka), - DMA_ACK - ”0” (procesor nije dao dozvolu DMA kohtroleru za prenos podataka), - adresiranje_memorije - unosi se 16-bitna adresa memorijske lokacije u koju će početi upisivanje podataka - DATA - unosi se binaran broji koji kazuje koliko reči treba preneti Pretisne se F5 i prati se šta se desilo na izlazima • Korak 3. - DMA_ACK - ”1” (procesor nije dao dozvolu DMA kohtroleru za prenos podataka), - adresiranje_memorije - isključuje se - DATA - isključuje se jer se tu sad prenosi podatak sa DACK - DACK - unosi se 32-bitni broj koji predstavlja podatak koji se prenosi

35

Pretisne se F5 i prati se šta se desilo na izlazima • Korak 4. - DACK - unosi se 32-bitni broj koji predstavlja podatak koji se prenosi u datom koraku

Slika 4.7.: Dijagram stanja DMA kontrolera za slučaj prenosa podatka

iz memorije u periferiju Korak 4. se ponavlje sve dok brojač ne dođe na 0 kada se prenos prekida i preko DMA_REQ se šalje informacija procesoru da je prenos zavrsen.

36

5. SINTEZA I IMPLEMENTACIJA Kolo sam sintetizovao u programskom paketu firme XILINX ISE 4.1. Ovo je programski paket firme XILINX za razvoj aplikacija baziranih na njihovim CPLD i FPGA čipovima. Alat koji sam koristio za sintezu kola na FPGA čip naziva se Xilinx ISE 6.x XST VHDL/Verilog a za implementaciju kola koristio sam alat Xilinx ISE 6.x. 5.1 Implementacija DMA kontrolera unutar čipa Iskoristio smo FPGA čip 2v80fg256 iz familije Xilinx6x VIRTEX2 i sintetizovao sam ga po brzini kako bi DMA kolo radilo što brže i ako to znači da će da zauzma više hardverskog prostora. On dolazi u 256 pinskom kućištu. Izgled praznog čipa dat je na slici 5.1 a naše kolo implementirano u istom čipu dato je na slici 5.2 gde se vidi koji pinovi su u funkciji realizacije našeg kola i na slici 5.3 gde se vide veze unutar čipa.

Slika 5.1.: Izgled praznog čipa i njegovih pinova

37

Slika 5.2.: Zauzetost pinova ćelija u FPGA čipu

Slika 5.3.: Šema veze u FPGA čipu

Na predhodnim slikama smo imali prilike da vidimo kako izgleda čip,

tj. iskorišćenost njegovih pinova, na sledećoj slici 5.4, prikazaćemo kako izgleda čip iznutra, njegovu strukturu, raspored po ćelijama i međusobnu povezanost.

38

Slika 5.4.: Unutrašnja iskorišćenost i zauzetost ćelija u FPGA čipu

5.2 Rezultati iplementacije (zauzetost resursa na čipu) Nakon sinteze i implementacije DMA kontrolera na dati čip vršimo čitanje izveštaja o radu našeg kola. Izveštaj je dat u sledećem obliku: Release 6.3i Map G.35 Xilinx Mapping Report File for Design 'dmakontroler'

39

Design Summary -------------- Number of errors: 0 Number of warnings: 0 Logic Utilization: Number of Slice Flip Flops: 48 out of 1,024 4% Number of 4 input LUTs: 87 out of 1,024 8% Logic Distribution: Number of occupied Slices: 54 out of 512 10% Number of Slices containing only related logic: 54 out of 54 100% Number of Slices containing unrelated logic: 0 out of 54 0% *See NOTES below for an explanation of the effects of unrelated logic Total Number 4 input LUTs: 88 out of 1,024 8% Number used as logic: 87 Number used as a route-thru: 1 Number of bonded IOBs: 103 out of 120 85% Number of Tbufs: 32 out of 256 12% Number of GCLKs: 1 out of 16 6% Total equivalent gate count for design: 1,533 Additional JTAG gate count for IOBs: 4,944 Peak Memory Usage: 64 MB Iz ovog izvestaja najvažniji rezultati za nas su da je kolo zauzelo 1.533 gejtova kao i da je pridodato još 4.944 gejtova koji su neophodni za realizaciju JTAG logike kojom se vrši testiranje i programiranje FPGA kola. Bitni podaci su takođe i koristimo 103 od 120 žica što je 85% kao i 48 od 1024 flip-flopa. 5.3 Testiranje rada čipa Nakon izvršene implementacije DMA kontrolera vršimo testiranje rada kola. Na sličan način kao što je to odjašnjeno u poglavlju 3 vršimo unos odgovarajućih vrednosti za određene ulaze na čipu i puštanjen simulacije dobijamo dijagram stanja kao na slici 5.5. Na dijagramu stanja možemo da primetimo da postiju izvesno kašnjenje pri prenosu podatka sa ulaza na izlaz kao i kod prenosa adrese ali to kašnjenje ne remeti rad kola. Iz izvestaja, koji su dostupni nakon imlementacije, možemo da pročitamo da najveće vreme kašnjenja može da bude 8.774 ns.

40

---------------+-----------------------+---------+ Source Pad |Destination Pad | Delay | ---------------+-----------------------+---------+ DMA_ACK |DATA<27> | 8.774|

Slika 5.5.: Dijagram stanja čipa nakon implementacije za slučaj

prenosa podatka iz periferije u memoriju

41

6. LABORATORIJSKA VEŽBA Zadatak : Proveriti ispravnost DMA kontrolera testirajući tačnost prenosa podataka. Posmatrati dijagrame stanja za slučaj kada se radi o prenosu podataka iz memorije računara na periferne uređaje i kada se radi o prenosu podataka sa periferije u memoriju i popuniti date tabele. ● Pokrenuti program Active HDL čija se ikonica nalazi na Desktop-u; ● Otvoriti dizajn DMA_kontroler ( 1 ) slika 6.1.;

Slika 6.1.

● U padajućem meniju izabrati dmakontroler (dmakontroler) ( 2 ); ● Kliknuti na ikonicu New Waveform ( 3 ) slika 6.2.;

42

Slika 6.2.

● Desnim klikom miša na levu polovinu ( 4 ) praznog dela izabrati Add Signals ( 5 ) slika 6.3.;

43

Slika 6.3.

● Otvara se Add Signals dialog (slika 6.4.); ● Dodati signale zahtev_za_DMA, DMA_ACK, R_W, clk, DMA_REQ, mem_r_w, io_r_w, adresiranje_memorije, DACK, DATA i brojac1;

Slika 6.4.

44

● Desnim klikom na svaki od izabranih signala(6) izabrati Stimulators…(7) slika 6.5.;

Slika 6.5.

● Otvara se dialog Stimulators gde svakom ulaznom signalu dajemo određene vrednosti slika 6.6.;

Slika 6.6.

45

● Nakon ovih koraka sledi programiranje DMA kontrolera: Postupak programiranja DMA kontrolera u slučaju kada se želi upisati neki podatak iz memorije na periferiju (slika 6.7.): • Korak 1. - zahtev_za_DMA - ”0” (periferija još nije uputila zahtev za prenos podataka), - DMA_ACK - ”0” (procesor nije dao dozvolu DMA kohtroleru za prenos podataka), - R_W - ”0” (vrši se prenos podataka iz memorije u periferiju) - clk - postavlja se da okida 1 Pretisne se F5 i prati se šta se desilo na izlazima • Korak 2. - zahtev_za_DMA - ”1” (periferija je uputila zahtev za prenos podataka), - DMA_ACK - ”0” (procesor nije dao dozvolu DMA kohtroleru za prenos podataka), - adresiranje_memorije - unosi se 16-bitna adresa memorijske lokacije sa koje će početi čitanje podataka - DATA - unosi se binaran broji koji kazuje koliko reči treba preneti Pretisne se F5 i prati se šta se desilo na izlazima • Korak 3. - DMA_ACK - ”1” (procesor nije dao dozvolu DMA kohtroleru za prenos podataka), - adresiranje_memorije - isključuje se - DATA - unosi se 32-bitni broj koji predstavlja podatak koji se prenosi Pretisne se F5 i prati se šta se desilo na izlazima • Korak 4. - DATA - unosi se 32-bitni broj koji predstavlja podatak koji se prenosi u datom koraku

Slika 6.7.: Primer dijagram stanja DMA kontrolera za slučaj prenosa

podatka iz periferije u memoriju

46

Korak 4. se ponavlje sve dok brojač ne dođe na 0 kada se prenos prekida i preko DMA_REQ se šalje informacija procesoru da je prenos zavrsen. Postupak programiranja DMA kontrolera u slučaju kada se želi upisati neki podatak sa periferije u memoriju (slika 6.8.): • Korak 1. - zahtev_za_DMA - ”0” (periferija još nije uputila zahtev za prenos podataka), - DMA_ACK - ”0” (procesor nije dao dozvolu DMA kohtroleru za prenos podataka), - R_W - ”1” (vrši se prenos podataka iz periferije u memoriju) - clk - postavlja se da okida 1 Pretisne se F5 i prati se šta se desilo na izlazima • Korak 2. - zahtev_za_DMA - ”1” (periferija je uputila zahtev za prenos podataka), - DMA_ACK - ”0” (procesor nije dao dozvolu DMA kohtroleru za prenos podataka), - adresiranje_memorije - unosi se 16-bitna adresa memorijske lokacije sa koje će početi čitanje podataka - DATA - unosi se binaran broji koji kazuje koliko reči treba preneti Pretisne se F5 i prati se šta se desilo na izlazima • Korak 3. - DMA_ACK - ”1” (procesor nije dao dozvolu DMA kohtroleru za prenos podataka), - adresiranje_memorije - isključuje se - DATA - isključuje se jer se tu sad prenosi podatak sa DACK - DACK - unosi se 32-bitni broj koji predstavlja podatak koji se prenosi Pretisne se F5 i prati se šta se desilo na izlazima • Korak 4. - DACK - unosi se 32-bitni broj koji predstavlja podatak koji se prenosi u datom koraku

47

Slika 6.8.: Primer dijagram stanja DMA kontrolera za slučaj prenosa

podatka iz memorije na periferiju Korak 4. se ponavlje sve dok brojač ne dođe na 0 kada se prenos prekida i preko DMA_REQ se šalje informacija procesoru da je prenos zavrsen.

48

Grupa 1: Prenos iz memorije na periferiju

SIGNALI Korak 1 Korak 2 Korak 3 Korak 4 Korak 5 Korak 6 Korak 7 Korak 8 Korak 9DATA DACK adresiranj. memorije

brojac1

Prenos sa periferije na memoriju SIGNALI Korak 1 Korak 2 Korak 3 Korak 4 Korak 5 Korak 6 Korak 7 Korak 8 Korak 9DACK DATA adresiranj. memorije brojac1 Grupa 2:

Prenos iz memorije na periferiju SIGNALI Korak 1 Korak 2 Korak 3 Korak 4 Korak 5 Korak 6 Korak 7 Korak 8 Korak 9DATA DACK adresiranj. memorije

brojac1

Prenos sa periferije na memoriju SIGNALI Korak 1 Korak 2 Korak 3 Korak 4 Korak 5 Korak 6 Korak 7 Korak 8 Korak 9DACK DATA adresiranj. memorije brojac1

49

Grupa 3: Prenos iz memorije na periferiju

SIGNALI Korak 1 Korak 2 Korak 3 Korak 4 Korak 5 Korak 6 Korak 7 Korak 8 Korak 9DATA DACK adresiranj. memorije

brojac1

Prenos sa periferije na memoriju SIGNALI Korak 1 Korak 2 Korak 3 Korak 4 Korak 5 Korak 6 Korak 7 Korak 8 Korak 9DACK DATA adresiranj. memorije brojac1 Grupa 4:

Prenos iz memorije na periferiju SIGNALI Korak 1 Korak 2 Korak 3 Korak 4 Korak 5 Korak 6 Korak 7 Korak 8 Korak 9DATA DACK adresiranj. memorije

brojac1

Prenos sa periferije na memoriju SIGNALI Korak 1 Korak 2 Korak 3 Korak 4 Korak 5 Korak 6 Korak 7 Korak 8 Korak 9DACK DATA adresiranj. memorije brojac1

50

Grupa 5: Prenos iz memorije na periferiju

SIGNALI Korak 1 Korak 2 Korak 3 Korak 4 Korak 5 Korak 6 Korak 7 Korak 8 Korak 9DATA DACK adresiranj. memorije

brojac1

Prenos sa periferije na memoriju SIGNALI Korak 1 Korak 2 Korak 3 Korak 4 Korak 5 Korak 6 Korak 7 Korak 8 Korak 9DACK DATA adresiranj. memorije brojac1 Grupa 6:

Prenos iz memorije na periferiju SIGNALI Korak 1 Korak 2 Korak 3 Korak 4 Korak 5 Korak 6 Korak 7 Korak 8 Korak 9DATA DACK adresiranj. memorije

brojac1

Prenos sa periferije na memoriju SIGNALI Korak 1 Korak 2 Korak 3 Korak 4 Korak 5 Korak 6 Korak 7 Korak 8 Korak 9DACK DATA adresiranj. memorije brojac1

51

Grupa 7: Prenos iz memorije na periferiju

SIGNALI Korak 1 Korak 2 Korak 3 Korak 4 Korak 5 Korak 6 Korak 7 Korak 8 Korak 9DATA DACK adresiranj. memorije

brojac1

Prenos sa periferije na memoriju SIGNALI Korak 1 Korak 2 Korak 3 Korak 4 Korak 5 Korak 6 Korak 7 Korak 8 Korak 9DACK DATA adresiranj. memorije brojac1 Grupa 8:

Prenos iz memorije na periferiju SIGNALI Korak 1 Korak 2 Korak 3 Korak 4 Korak 5 Korak 6 Korak 7 Korak 8 Korak 9DATA DACK adresiranj. memorije

brojac1

Prenos sa periferije na memoriju SIGNALI Korak 1 Korak 2 Korak 3 Korak 4 Korak 5 Korak 6 Korak 7 Korak 8 Korak 9DACK DATA adresiranj. memorije brojac1

52

Grupa 9: Prenos iz memorije na periferiju

SIGNALI Korak 1 Korak 2 Korak 3 Korak 4 Korak 5 Korak 6 Korak 7 Korak 8 Korak 9DATA DACK adresiranj. memorije

brojac1

Prenos sa periferije na memoriju SIGNALI Korak 1 Korak 2 Korak 3 Korak 4 Korak 5 Korak 6 Korak 7 Korak 8 Korak 9DACK DATA adresiranj. memorije brojac1 Grupa 10:

Prenos iz memorije na periferiju SIGNALI Korak 1 Korak 2 Korak 3 Korak 4 Korak 5 Korak 6 Korak 7 Korak 8 Korak 9DATA DACK adresiranj. memorije

brojac1

Prenos sa periferije na memoriju SIGNALI Korak 1 Korak 2 Korak 3 Korak 4 Korak 5 Korak 6 Korak 7 Korak 8 Korak 9DACK DATA adresiranj. memorije brojac1

53

Grupa 11: Prenos iz memorije na periferiju

SIGNALI Korak 1 Korak 2 Korak 3 Korak 4 Korak 5 Korak 6 Korak 7 Korak 8 Korak 9DATA DACK adresiranj. memorije

brojac1

Prenos sa periferije na memoriju SIGNALI Korak 1 Korak 2 Korak 3 Korak 4 Korak 5 Korak 6 Korak 7 Korak 8 Korak 9DACK DATA adresiranj. memorije brojac1 Grupa 12:

Prenos iz memorije na periferiju SIGNALI Korak 1 Korak 2 Korak 3 Korak 4 Korak 5 Korak 6 Korak 7 Korak 8 Korak 9DATA DACK adresiranj. memorije

brojac1

Prenos sa periferije na memoriju SIGNALI Korak 1 Korak 2 Korak 3 Korak 4 Korak 5 Korak 6 Korak 7 Korak 8 Korak 9DACK DATA adresiranj. memorije brojac1

54

Grupa 13: Prenos iz memorije na periferiju

SIGNALI Korak 1 Korak 2 Korak 3 Korak 4 Korak 5 Korak 6 Korak 7 Korak 8 Korak 9DATA DACK adresiranj. memorije

brojac1

Prenos sa periferije na memoriju SIGNALI Korak 1 Korak 2 Korak 3 Korak 4 Korak 5 Korak 6 Korak 7 Korak 8 Korak 9DACK DATA adresiranj. memorije brojac1 Grupa 14:

Prenos iz memorije na periferiju SIGNALI Korak 1 Korak 2 Korak 3 Korak 4 Korak 5 Korak 6 Korak 7 Korak 8 Korak 9DATA DACK adresiranj. memorije

brojac1

Prenos sa periferije na memoriju SIGNALI Korak 1 Korak 2 Korak 3 Korak 4 Korak 5 Korak 6 Korak 7 Korak 8 Korak 9DACK DATA adresiranj. memorije brojac1

55

Grupa 15: Prenos iz memorije na periferiju

SIGNALI Korak 1 Korak 2 Korak 3 Korak 4 Korak 5 Korak 6 Korak 7 Korak 8 Korak 9DATA DACK adresiranj. memorije

brojac1

Prenos sa periferije na memoriju SIGNALI Korak 1 Korak 2 Korak 3 Korak 4 Korak 5 Korak 6 Korak 7 Korak 8 Korak 9DACK DATA adresiranj. memorije brojac1 Grupa 16:

Prenos iz memorije na periferiju SIGNALI Korak 1 Korak 2 Korak 3 Korak 4 Korak 5 Korak 6 Korak 7 Korak 8 Korak 9DATA DACK adresiranj. memorije

brojac1

Prenos sa periferije na memoriju SIGNALI Korak 1 Korak 2 Korak 3 Korak 4 Korak 5 Korak 6 Korak 7 Korak 8 Korak 9DACK DATA adresiranj. memorije brojac1

56

7. ZAKLJUČAK Ovaj rad je imao za zadatak realizaciju DMA kontrolera i DMA (Direct Memory Access) prenosa u VHDL kodu. U uvodnom delu sam izvršio teorijsko upoznavanje sa osnovnim komponentama računara kao što su procesor, memorijski sistem i U/I uređaji kao i sa tehnikama prenosa podataka između memorijskog sistema i U/I uređaja gde je detaljnije obrađen DMA prenos a sa njim i DMA kontroler. Nakon uvoda i zadatka za relizaciju DMA kontrolera pristupio sam njegovoj realizaciji uz pomoč programa Active-HDL 6.3. Ovde se nalazi blok šema, njeni sastavni delovi kao i njihov opis u VHDL kodu. Realizacija sam izvršeno za najprostiji tip DMA kontrolera kada on koristi sistemsku magistralu u toku trajanja celokupnog vremena koje je potrebno za prenos bloka podataka, a mikroprocesoru je zabranjen pristup na magistralu za taj duži period. Nakon projektovanja sam izvršio testiranje rada DMA kontrolera i pritom sam opisao način programiranja kola za slučaj prenos podataka iz memorije na U/I uređaj i za slučaj prenosa podataka sa U/I uređaja u memoriju računara. Zatim sam izvršio sintezu i implementaciju kola unutar FPGA čip 2v80fg256 iz familije Xilinx6x VIRTEX2 uz pomoć programskog paketa firme XILINX ISE 4.1. Alat koji sam koristio za sintezu kola na FPGA čip naziva se Xilinx ISE 6.x XST VHDL/Verilog a za implementaciju kola koristio sam alat Xilinx ISE 6.x. Laboratorijska vežba ima za cilj da omogući studentima da se upoznaju sa radom DMA kontrolera i da shvate kako funkcioniše DMA prenos podataka. Nadam se da sam ovim radom uspeo da pokažem ulogu i važnost postojanja DMA kontrolera u savremenim računarskim sistemima.

57

8. LITERATURA

1. Mile K. Stojčev "RISC, CISC I DSP PROCESORI", Elektronski fakultet Niš, 1997 2. Mile K. Stojčev, B. D. Petrović "ARHITEKTURE I

PROGRAMIRANJE MIKRORAČUNARSKIH SISTEMA ZASNOVANIH NA FAMILIJI PROCESORA 80x86",

Elektronski fakultet Niš, 1999 3. Volnei A. Pedroni "CIRCUIT DESIGN WITH VHDL", MIT Press, Cambridge, Massachusetts London, England 4. Xilinx Data Sheets, [Online], Dostupno:

http://www.xilinx.com/support/library.htm