Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
UNIVERZITET U NIŠU ELEKTRONSKI FAKULTET KATEDRA ZA ELEKTRONIKU
PROGRAMABILNI PERIFERIJSKI INTERFEJS
INTEL 8255
Studenti: Alen Eftimov 8736 Dragan Živkovic 8737
Niš, Februar 2006.
1
S A D R Ž A J :
1.SERIJSKI I PARALELNI PRENOS PODATAKA..................................................................................................................... 2 Serijski prenos....................................................................................................................................................................................... 2 Paralelni prenos................................................................................................................................................................................... 3
2. PROGRAMABILNI PERIFERIJSKI INTERFEJS INTEL 8255............................................................................................. 5 2.1. OSNOVNI FUNKCIONALNI OPIS KOLA 8255.........................................................................................................................6
Opšte........................................................................................................................................................................................................ 6 Bafer magistrale podataka.................................................................................................................................................................. 6 Citanje/upis i kontrolna logika........................................................................................................................................................... 7 Kontrolne grupe A i B .......................................................................................................................................................................... 8 Portovi A, B i C ..................................................................................................................................................................................... 8
2.2. DETALJNI OPIS RADA KOLA 8255.............................................................................................................................................9 Izbor režima rada.................................................................................................................................................................................. 9 Format definisanja režima .................................................................................................................................................................10 Osobina setovanja/resetovanja pojedinacnih bitova ....................................................................................................................10 Režim 0 (osnovni ulaz/izlaz)..............................................................................................................................................................10 Funkcije kontrole prekida..................................................................................................................................................................10 Režim 1 (prekidni ulaz/izlaz) .............................................................................................................................................................11 Definicije ulaznih kontrolnih signala..............................................................................................................................................11 Definicije izlaznih kontrolnih signala..............................................................................................................................................12 Režim 2 (prekidna dvosmerna U/I magistrala) ..............................................................................................................................14 Definicije signala dvosmerene U/I magistrale...............................................................................................................................14 Razmatranje specijalnih kombinacija režima ................................................................................................................................15 Mogucnosti strujnih izvora na portovima B i C.............................................................................................................................16 Citanje statusa Porta C......................................................................................................................................................................16
2.3. PRIMENA CIPA INTEL 8255 ........................................................................................................................................................17 3. PREDLOG REALIZACIJE CIPA 8255 POMOCU VHDL-A .............................................................................................20
3.1. CTRL_LOG............................................................................................................................................................................................21 3.2. PORTAIN ..............................................................................................................................................................................................26 3.3. PORTBIN ..............................................................................................................................................................................................28 3.4. DOUTMUX..........................................................................................................................................................................................29 3.5. PORTAOUT...........................................................................................................................................................................................31 3.6. PORTBOUT...........................................................................................................................................................................................32 3.7. PORTCOUT...........................................................................................................................................................................................34 3.8. GENERATOR TAKTA (CLK_GEN) .....................................................................................................................................................43 3.9. GLOBALNI MULTIPLEKSER (MUX_GLOBAL)..................................................................................................................................44
4. SINTEZA I IMPLEMENTACIJA KOLA.......................................................................................................................................46 5. TESTIRANJE RADA KOLA..............................................................................................................................................................49
PRIMER 1 ( MODE 0): ..................................................................................................................................................................................49 PRIMER 2 ( MODE 1 STROBOVANI ULAZ):................................................................................................................................................53 PRIMER 3 ( MODE 1 STROBOVANI IZLAZ):...............................................................................................................................................57
6.ZADATAK .................................................................................................................................................................................................61
MOD 0:........................................................................................................................................................................................................61 MOD 1 (STROBOVANI ULAZ): ..................................................................................................................................................................66 MOD 1 (STROBOVANI IZLAZ):..................................................................................................................................................................71
7. LITERATURA : ......................................................................................................................................................................................76
2
1.SERIJSKI I PARALELNI PRENOS PODATAKA
Racunar komunicira sa spoljnim svetom preko svog U/I podsistema. Podaci (informacija) se predaju/primaju ka/iz spoljnog sveta u kodiranom obliku. Postoje dva tipa prenosa podataka:
1) Serijski – preko jedinstvene veze (žice), ili komunikacionog kanala,a u datom trenutku se prenosi po jedan bit 2) Paralelni – preko veceg broja veza (žica), u datom trenutku se prenosi više bitova.
Serijski prenos Serijska informacija se prenosi preko jedinstvene linije na principu bit-po-bit. Na ovaj nacin smanjuje se broj veza(žica) kojim se CPU povezuje sa U/I uredajem. Serijski prenos je sporiji, karakteriše ga niža cena i veca pouzdanost,tj. greška u prenosu ili prestanku prijema lakše se detektuje,pa se zbog toga koristi za prenos na vecim rastojanjima.
Slika 1.1: Komunikacija preko serijskih U/I portova
3
Paralelni prenos
Paralelnim prenosom se istovremeno po posebnim linijama prenosi veci broj bitova. Time dobijamo vecu brzinu prenosa, ali i težu detekciju greške, vecu nepouzdanost prenosa i vecu cenu. Zato se paralelni prenos koristi za kraca rastojanja. Paralelne komunikacije, za razliku od serijskih, nisu dobro standardizovane. U/I prenos “ Hahdshake” podrazumeva da se podaci iz spoljnjeg okruženja prihvataju od CPU-a preko ulaznog bafera, a podatke koje CPU predaje spoljnom okruženju predaju preko izlaznog bafera. Primer tipicnog paralelnog izlaznog interfejsa je prikazan na sledecoj slici:
Slika 1.2: Povezivanje izlaznog interfejsa na izlazni uredaj tipa D/A konvertor zasnovan na paralelnom prenosu
CPU lecuje podatke u izlazni bafer podataka, a izlazi bafera su direktno povezani na izlazni uredaj ( u našem slucaju D/A konvertor). Izlaz D/A konvertora menjace se u zavisnosti od sadržaja izlaznog bafera.
Razmotricemo jos jedan primer paralelnog interfejsa kod koga se koriste handshake upravljacke linije. Kada U/I uredaj želi da preda podatke interfejsu on prvo postavlja važece podatke na linijama Ulazni_podaci a zatim aktivira liniju Pod_Ul_spreman. Interfejs odgovara lecovanjem podatka u Ulazni_bafer i aktivira liniju Potvrda_Ul_Podataka.
4
U/I uredaj nakon prijema signala Potvrda_Ul_Podataka deaktivira podatke i signal Pod_Ul_Spreman. Interfejs nakon primanja podatka postavi statusni bit Ready i verovatno aktivira liniju IRn. Kada CPU prihvati podatak interfejs deaktivira statusni bit Ready. Zahtev za prekid ( IRn) kao i obrada prekida se prihvataju i obraduju standardnim putem.
Slika1.3: Povezivanje ulaznog i izlaznog interfejsa
Kada je u pitanju izlaz, interfejs ce postaviti Ready statusni bit i generisati zahtev za prekid kada je Izlazni_bafer podataka dosrtupan. Kada CPU upiše podatke, interfejs resetuje izlazni statusni bit Ready, postavlja podatke na magistrali Izlazni_podaci i signalizira U/I uredaju preko linije Pod_Izl_Spremni. Kada je uredaj spreman da prihvati podatke, on lecuje podatke i vraca signal Potvrda_Izl_Signala. Nakon toga interfejs deaktivira signal Pod_Izl_Spremni i ponovo postavlja izlazni statusni bit na Ready.
5
8255A
2. PROGRAMABILNI PERIFERIJSKI INTERFEJS INTEL 8255
8255 je programabilni cip opšte namene projektovan za upotrebu u mikroprocesorskim sistemima. Ima 24 ulazno- izlazna pina koji se mogu pojedinacno programirati u dve grupe od dvanaest pinova. Ovaj cip koristi se u tri osnovna režima rada. U Režimu 0, svaka grupa od dvanaest ulazno-izlaznih pinova može da se programira u skupove od po 4, koji mogu da budu ulazi ili izlazi. U Režimu 1 svaka grupa može da se programira da ima 8 linija ulaza ili izlaza. Od preostalih cetiri, tri pina se koriste za signale handshake protokola i kontrolu prekida. Režim 2 predstavlja dvosmerni rad magistrale koja koristi 8 linija za dvosmernu magistralu, i pet linija, pozajmljujuci jednu od ostalih grupa, za handshake protokol. Ostale osobine cipa 8255 ukljucuju mogucnost bitskog setovanja i resetovanja i mogucnost davanja struje od 1 mA pri naponu od 1.5 V. Ovo omogucava Darlingtonovim tranzistorima da direktno napajaju uredaje kao što su štampaci ili visokonaponski displeji.
Slika 2.1: Raspored pinova na cipu INTEL 8255
6
2.1. OSNOVNI FUNKCIONALNI OPIS KOLA 8255
Opšte
8255 je uredaj za programabilni periferijski interfejs (Programmable peripheral interface), skraceno PPI, projektovan za upotrebu u 8080 mikroprocesorskim sistemima. Njegova funkcija je U/I komponenta opšte namene za povezivanje periferijske opreme na 8080 sistemsku magistralu. Funkcionalna konfiguracija kola 8255 je programirana sistemskim softverom tako da nije potrebna spoljašnja logika za povezivanje periferijskih uredaja ili struktura.
Slika 2.2: Interna organizacija 8255 vidljiva od strane programera
Bafer magistrale podataka Ovaj trostaticki dvosmerni, osmobitni bafer koristi se za povezivanje 8255 na sistemsku magistralu podataka procesora 8080. Bafer prenosi/prima podatke nakon izvršavanja ulaznih ili izlaznih instrukcija od strane procesora 8080. Kontrolne reci i statusne informacije se takode prenose preko ovog bafera.
7
Citanje/upis i kontrolna logika Funkcija ovog bloka je da upravlja svim unutrašnjim ili spoljašnjim prenosima podataka, statusnih ili kontrolnih reci. On prihvata ulaze sa adresa procesora 8080 i kontrolnih magistrala, i po redu izdaje komande obema kontrolnim grupama. (CS) Chip Select (selektovanje cipa): “nizak nivo” na ovom ulaznom pinu omogucava komunikaciju izmedu‚ cipa 8255 i procesora. (RD ) Read (citanje): “nizak nivo” na ovom ulaznom pinu omogucava cipu 8255 da pošalje podatke i statusne informacije procesora na magistralu podataka. U suštini, omogucava da procesor procita podatke iz 8255. ( WR) Write (upis): “nizak nivo” na ovom ulaznom pinu omogucava procesoru da upisuje podatke i kontrolne reci u cip 8255.
Slika 2.3: Definicija rada PPI-a 8255
(A0 i A1) Selekcija Portova 0 i 1: Ovi ulazni signali, u vezi sa RD i WR ulazima, kontrolišu izbor jednog od tri porta za registar kontrolne reci. Oni su normalno povezani na najmanje znacajne bitove adresne magistrale (A0 i A1).
8
(RESET) Reset: “visok nivo” na ovom ulazu briše sve unutrašnje registre ukljucujuci i kontrolni registar i svi Portovi (A, B i C) se postavljaju u ulazni režim.
Kontrolne grupe A i B Funkcionalna konfiguracija svakog porta je programirana sistemskim softverom. U suštini procesor 8080 izdaje kontrolnu rec cipu 8255. Kontrolna rec sadrži informacije kao što su “režim”, “setuj bit”, “resetuj bit” i slicno, cime se inicijalizuje funkcionalna konfiguracija 8255. Svaki od kontrolnih blokova (grupa A i grupa B) prihvataju komande od kontrolne logike, prihvataju kontrolne reci od unutrašnje magistrale podataka i izdaju odgovarajuce komande njima dodeljenim portovima. Kontrolna grupa A ( Port A i viši C port (C7-C4)) Kontrolna grupa B ( Port B i niži C port (C3-C0)) U kontrolni regitar reci se može samo upisivati. Nije dozvoljena nikakva operacija citanja u ovom registru.
Portovi A, B i C 8255 sadrži tri 8-bitna porta (A, B i C). Svi oni mogu se konfigurisati sistemskim softverom za više razlicitih funkcionalnih namena , ali svaki od njih poseduje posebne karakteristike, odnosno sposobnost da dodatno poveca snagu i fleksibilnost cipa 8255. Port A: jedan 8-bitni izlazni lec/bafer i jedan 8-bitni ulazni lec. Port B: jedan 8-bitni ulazno/izlazni lec/bafer i jedan 8-bitni ulazni bafer. Port C: jedan 8-bitni izlazni lec/bafer i jedan 8-bitni ulazni bafer (nema leca na ulazu). Ovaj port može se podeliti na dva 4-bitna porta u zavisnosti od režima. Svaki 4-bitni port sadrži 4-bitni lec i može se koristiti za izlaze kontrolnih signala i ulaze statusnih signala zajedno sa Portovima A i B.
9
2.2. DETALJNI OPIS RADA KOLA 8255
Izbor režima rada Postoje tri osnovna režima rada koji se mogu selektovati sistemskim softverom: Režim 0 – Osnovni Ulaz/Izlaz Režim 1 - Prekidni Ulaz/Izlaz Režim 2 – Dvosmerna magistrala Kada se RESET ulaz postavi na jedinicu, svi portovi ce se postaviti u režim ulaza (tj. sve 24 linije ce biti u stanju visoke impedanse). Pošto se RESET ukloni, 8255 može ostati u ovom režimu bez zahteva za dodatnu inicijalizacije. Tokom izvršenja sistemskog programa, može se selektovati neki od ostalih režima upotrebom jedne izlazne instrukcije. Ovo omogucava da jedan 8255 opslužuje razlicite periferne uredaje sa jednostavnom softverskom rutinom. Režimi za portove A i B mogu se odvojeno definisati, dok se Port C deli na dva dela, pošto se zahteva definicijama Portova A i B. Svi izlazni registri, ukljucujuci i statusne flip-flopove, ce se resetovati kad god se promeni režim. Režimi se mogu kombinovati tako da se njihova funkcionalna definicija može prilagoditi bilo kojoj U/I strukturi. Na primer, Grupa B se može programirati u Režimu 0 da nadgleda jednostavna zatvaranja prekidaca ili da prikaže rezultate izracunvanja. Grupa A se može programirati u Režimu 1 da nadgleda tastaturu ili citac trake na osnovu prekida.
Slika 2.4: Komandni bajt komandnog registra
a) programiranje portova A,B,C b) setovanje ili resetovanje bita selektovanog bit poljem
10
Format definisanja režima Definicije režima i moguce kombinacije mogu izgledati zbunjujuce na prvi pogled, ali posle površnog pregleda rada kompletnog uredaja, logicni U/I pristup ce izaci na površinu. Projektant cipa 8255 uzeo je u obzir efikasan raspored na cipu, definisanje kontrolnih signala i kompletnu funkcionalnu fleksibilnost, koja podržava skoro svaki periferijski uredaj bez spoljašnje logike. Na ovakav našin ostvareno je optimalno iskorišcenje dostupnih pinova.
Osobina setovanja/resetovanja pojedinacnih bitova Bilo koji od osam bitova Porta C se može setovati ili resetovati upotrebom jedne izlazne instrukcije. Ova osobina redukuje softverske zahteve u kontrolnim aplikacijama. Režimi rada
Režim 0 (osnovni ulaz/izlaz) Ova funkcionalna konfiguracija obezbeduje jednostavne ulazne i izlazne operacije za svaki od tri porta. Ne zahteva se handshaking protokol, vec se podaci jednostavno upisuju ili citaju sa zadatog porta. Kada se Port C koristi kao status/kontrola za port A ili B, ovi bitovi se mogu setovati ili resetovati bitskim operacijama kao da su izlazni portovi podataka.
Funkcije kontrole prekida Kada se 8255 programira da radi u Režimu 1 ili Režimu 2, predvideni su kontrolni signali koji se mogu koristiti kao ulazi za zahtevanje prekida procesoru. Ovi signali, generisani sa Porta C, se mogu iskljuciti ili ukljuciti setovanjem ili resetovanjem INTE flip-flopa, upotrebom funkcija bitskog setovanja/resetovnja Porta C. Ova funkcija omogucava programeru da ne dozvoli ili dozvoli da pojedinacni U/I uredaji prekidaju procesor, bez uticaja na druge uredaje u prekidnoj strukturi. INTE flip-flop definicija: (BIT-SET) – INTE je setovan – omogucen prekid (BIT-RESET) – INTE je resetovan – onemogucen prekid Napomena: Svi maskirni flip-flopovi se automatski resetuju tokom selektovanja režima i resetovanja uredaja.
11
Osnovne funkcionalne definicije Režima 0: * Dva 8-bitna i dva 4-bitna porta * Svaki port može biti ulazni i izlazni * Izlazi su lecovani * Ulazi nisu lecovani * U ovom režimu su moguce 16 razlicitih ulazno/izlaznih konfiguracija
Režimi rada
Režim 1 (prekidni ulaz/izlaz) Ova funkcionalna konfigurcija obezbeduje prenos U/I podataka ka i od zadatog porta u vezi sa signalima prekida ili handsaking protokola. U Režimu 1, Portovi A i B koriste linije na Portu C da generišu ili prihvate ove signale handshaking protokola. Osnovne funkcionalne definicije Režima 1:
* Dve grupe (grupa A i grupa B) * Svaka grupa sadrži jedan 8-bitni port podataka i jedan 4-bitni kontrolni ili port podataka * 8-bitni port podatka može biti ili ulazni ili izlazni. I ulazi i izlazi su lecovani. * 4-bitni port se koristi za kontrolu i status 8-bitnog porta podataka.
Definicije ulaznih kontrolnih signala STB (strobe ulaz) Nula na ovom ulazu upisuje podatke u ulazni lec. IBF (ulazni bafer pun) Jedinica na ovom izlazu ukazuje da su podaci upisani u ulazni lec. U suštini, ovo je potvrda. IBF se setuje kada je STB ulaz na nuli, a resetuje se tokom rastuce ivice RD ulaza. INTR (zahtev za prekid) Jedinica na ovom izlazu se može iskorititi da prekida processor kada ulazni uredaj zahteva opsluživanje. INTR se setuje kada je STB na jedinici, IBF je na jedinici i INTE je na jedinici. Resetuje se tokom opadajuce ivice RD . Ova procedura omogucava ulaznim uredajima da zahtevaju opsluživanje od procesora jednostavnim izbacivanjem podataka na port. INTE A Kontrolisan bitskim setovanjem/resetovanjem PC4. INTE B Kontrolisan bitskim setovanjem/resetovanjem PC2.
12
Slika 2.5: Strobovani ulaz u režimu 1 kod 8255 a) interna struktura
b) vremenski dihagrami
Definicije izlaznih kontrolnih signala OBF(izlazni bfer pun) Izlaz OBF ce se postaviti na nulu da ukaže da je processor upisao podatke na zadati port. OBF F/F ce se setovati rastucom ivicom WR ulaza i resetovati kada je ulaz ACK na nuli. ACK (ulaz potvrde) Nula na ovom ulazu informiše 8255 da su podaci sa Portova A i B prihvaceni. U suštini, odgovor sa periferijskog uredaja ukazuje da je primio podatke sa izlaza CPU.
13
INTR (zahtev za prekid) Jedinica na ovom izlazu može se upotrebiti da prekida CPU kada je izlazni uredaj primio podatke (prenete sa procesora). INTR se setuje kada je ACK na jedinici, OBF je na jedinici i INTE je na jedinici. Resetuje se tokom opadajuce ivice WR .
Slika 2.6: Režim 1 strobovani izlaz kod 8255 a) interna struktura
b) vremenski dijagrami Kombinacije Režima 1 Portovi A i B mogu se pojedinacno definisati kao ulazi ili izlazi u Režimu 1 kako bi podržali razlicite U/I prekidne aplikacije.
14
Režimi rada
Režim 2 (prekidna dvosmerna U/I magistrala) Ova funkcionalna konfiguracija obezbeduje znacaj za komunikaciju sa periferijskim uredajem ili strukturom preko jedne 8-bitne magistrale i za predaju i za prijem podataka (dvosmerna U/I magistrala). Signali handshaking protokola koriste se da održe propisan protok magistrale na slican nacin kao kod Režima 1. Takode su dostupne i funkcije generisanja i dozvole /zabrane prekida. Funkcionalne definicije Režima 2
* Koristi se samo u grupi A * Jedan 8-bitni, dvosmerni port (Port A) i 5-bitni kontrolni port (Port C) * I ulazi i izlazu su lecovani * 5-bitni kontrolni port (Port C) se koristi za kontrolu i status 8-bitnog, dvosmernog porta (Port A)
Definicije signala dvosmerene U/I magistrale INTR (zahtev za prekid) Jedinica na ovom izlazu se može upotrebiti da prekida procesor (CPU) i za izlazne i za ulazne operacije. Izlazne operacije OBF (izlazni bafer pun) OBF ce se postaviti na nulu da ukaže da je CPU ispisao podatke na Port A. ACK(potvrda) Nula na ovom ulazu omogucava da trostaticki izlazni bafer sa Porta A pošalje podatke. Inace, bafer bi bio u stanju visoke impedanse. INTE 1 (INTE flip- flop dodeljen sa OBF) Kontrolisan bitskim setovanjem/resetovanjem PC6 Ulazne operacije STB (strobe ulaz) Nula na ovom ulazu upisuje podatke u ulazni lec. IBF (ulazni bafer pun) Jedinica na ovom izlazu ukazuje da su podaci upisani u ulazni lec. INTE 2(INTE flip- flop dodeljen sa IBF) Kontrolisan bitskim setovanjem/resetovanjem PC4
15
Slika 2.7: Režim 2 kod 8255 a) interna struktura
b) vremenski dijagram
Razmatranje specijalnih kombinacija režima Postoji nekoliko kombinacija režima kada se ne koriste svi bitovi Porta C za kontrolu ili status. Ostali bitovi mogu se koristiti na sledeci nacim: Ako se programiraju kao ulazi – Svim ulaznim linijama može se pristupiti tokom normalnog citanja Porta C Ako se programiraju kao izlazi –
Bitovima u višem delu C (PC7-PC4) može se pojedinacno pristupiti upotrebom finkcija bitskog setovanja/resetovanja. Bitovima u nižem delu C (PC3-PC0) može se pristupiti upotrebom funkcija bitskog setovanja /resetovanja ili pristupiti upisivanjem u Port C.
16
Mogucnosti strujnih izvora na portovima B i C Bilo koji skup od osam izlaznih bafera, izabranih nasumice iz Portova B i C, mogu davati 1.5mA pri 1.5 V. Ova osobina omogucava da 8255 direktno napaja Darlingtonove spojeve i visokonaponske displeje koji zahtevaju ovakvu struju.
Citanje statusa Porta C U Režimu 1, Port C prenosi podatke u periferijske uredaje ili iz njih. Kada se 8255 programira da radi u Režimima 1 i 2, port C generiše ili prihvata handshaking signale sa periferijskih uredaja. Citanje sadržaja Porta C omogucava da programer testira ili verifikuje status svakog perifernog uredaja i da promeni tok programa prema tome. Ne postoji specijalna instrukcija za citanje statusne informacije sa Porta C. Normalna operacija citanja Porta C se izvršava da obavi ovu funkciju.
17
2.3. PRIMENA CIPA INTEL 8255 Cip 8255 je veoma mocan “alat” za sprezanje periferijskih uredaja sa mikroracunarskim sistemom
8080. Najvažnije prednosti ovog cipa su to što poseduje optimalan broj pinova i dovoljno je fleksibilan da omogucava sprezanje I/O uredaja sa sistemskom magistralom 8080 bez upotrebe dodatne logike.
Na sledecim slikama prikazani su neki tipicni primeri primene ovog cipa.
Slika 1: Sprega 8255 sa brzim štampacem Slika 2: Sprega 8255 sa displejem i tastaturom
18
] Slika 3: Sprega sa tastaturom i terminalom Slika 4: D/A i A/D konverzija
Slika 5: Sprega 8255 sa flopi diskom Slika 6: Sprega 8255 sa CRT monitorom
19
Slika 7: Sprega 8255 sa citacem kartica i industijskim mikrokontrolerom
Slika 8: Ostvarivanje distibutivnog multiprocesorskog sistema
20
3. PREDLOG REALIZACIJE CIPA 8255 POMOCU VHDL-a
Na Slici 3.1. prikazan je predlog realizacije cipa 8255 pomocu softverskog alata Active HDL 5.1. Potom je izvršena njegova sinteza pomocu programskog paketa ISE kompanije XILINX .
Sl.3.1. BDE dijagram cipa 8255
21
U strukturi sa Slike 3.1. (najviši nivo cipa 8255) razlikujemo 9 entiteta, odnosno komponenata:
* Ctrl_log * Port Ain * PortBin * DoutMUX * Port Aout * PortBout * Port Cout * CLK_gen * MUX_global
Svaki od navedenih entiteta bice obraden u ovom poglavlju.
3.1. Ctrl_log
Bilo kakav prenos podataka unutar ili van cipa 8255 odvija se na osnovu kontrolnih i upravljackih signala koje generiše ovaj entitet (blok). LIBRARY ieee; USE ieee.std_logic_1164.ALL; -- Komponenta Ctrl_log upravlja radom cipa 8255. -- Ovaj blok generise svaki interni upravljacki signal. ENTITY Ctrl_log IS PORT( Reset : IN std_logic; Clk : IN std_logic; nCS : IN std_logic; nRD : IN std_logic; nWR : IN std_logic; A : IN std_logic_vector (1 DOWNTO 0); Din : IN std_logic_vector (7 DOWNTO 0); Cin : IN std_logic_vector (7 DOWNTO 0); Aen : OUT std_logic; Ben : OUT std_logic; Cen : OUT std_logic_vector (7 DOWNTO 0); DoutSelect : OUT std_logic_vector (2 DOWNTO 0); CtrlReg : OUT std_logic_vector (7 DOWNTO 0); Ard : OUT std_logic; Brd : OUT std_logic; Awr : OUT std_logic; Bwr : OUT std_logic; AoutLd : OUT std_logic; BoutLd : OUT std_logic; Coverride : OUT std_logic;
22
CoutLd : OUT std_logic_vector (7 DOWNTO 0) ); END Ctrl_log; ARCHITECTURE rtl OF Ctrl_log IS -- Definisanje inte rnih signala u okviru -- bloka Ctrl_log SIGNAL CtrlRegD : std_logic_vector(6 DOWNTO 0); -- Lecovano stanje Kontrolnog Registra SIGNAL CtrlRegQ : std_logic_vector(6 DOWNTO 0); -- Upisano stanje Kontrolnog Registra SIGNAL ModeA : std_logic_vector(1 DOWNTO 0); -- Mod Registra A SIGNAL ModeB : std_logic; -- Mod Registra B SIGNAL PortA_IO : std_logic; -- Registar A je ulazni/izlazni SIGNAL PortB_IO : std_logic; -- Registar B je ulazni/izlazni SIGNAL PortCUp_IO : std_logic; -- Kontrola viseg dela Registra C SIGNAL PortCLow_IO : std_logic; -- Kontrola nizeg dela Registra C SIGNAL CtrlRegWrite : std_logic; -- Dozvola upisa stanja u Kontrolni Registar BEGIN -- Poslednji bit kontrolnog registra je uvek '1'; -- Svaki bit kontrolnog registra predstavlja neki -- upravljacki bit za registre A,B i C. Sada cemo -- popuniti komandni bajt Komandnog registra (Sl.2.4) CtrlReg <= '1' & CtrlRegQ; ModeA <= CtrlRegQ (6 DOWNTO 5); ModeB <= CtrlRegQ (2); PortA_IO <= CtrlRegQ (4); PortB_IO <= CtrlRegQ (1); PortCUp_IO <= CtrlRegQ (3); PortCLow_IO <= CtrlRegQ (0); -- Definisanje izlaznih signala bloka Ctrl_log -- Nacin generisanja dozvole portu Aout AoutLd <= '0' WHEN nCS = '0' AND A = "00" AND nWR = '0' ELSE '1'; -- Nacin generisanja dozvole portu Bout BoutLd <= '0' WHEN nCS = '0' AND A = "01" AND nWR = '0' ELSE '1'; -- Na osnovu spoljasnjih upravljackih signala Ctrl_log generise -- izlazne signale koji daju informaciju o citanju/upisivanju -- stanja registara A i B, kao i interni signal CtrlRegWrite, koji -- ukazuje da treba azurirati sadrzaj Kontrolnog Registra
23
Ard <= nCS OR nRD OR A(1) OR A(0); Brd <= nCS OR nRD OR A(1) OR (NOT A(0)); Awr <= nCS OR nWR OR A(1) OR A(0); Bwr <= nCS OR nWR OR A(1) OR (NOT A(0)); CtrlRegWrite <= nCS OR nWR OR (NOT A(1)) OR (NOT A(0)) OR (NOT Din(7)); ControlLogicProc: PROCESS ( nCS , nWR , A, Din, ModeA, ModeB, PortA_IO, PortB_IO, PortCLow_IO, PortCUp_IO, Cin, CtrlRegWrite, CtrlRegQ ) -- Pogledati Sliku 2.4 BEGIN IF (ModeB = '0') THEN Ben <= NOT PortB_IO; -- generisanje dozvole Ben
IF (ModeA(1) = '1') THEN -- "punjenje" niza 4 bita Cen stanjem 1xxx, Cen (3 DOWNTO 0) <= '1' & -- pri cemu je x jednak komplementu PortCLow_IO std_logic'(NOT PortCLow_IO) & std_logic'(NOT PortCLow_IO) & std_logic'(NOT PortCLow_IO); ELSE -- "punjenje" niza 4 bita Cen stanjem xxxx, -- pri cemu je x jednak komplementu PortCLow_IO Cen (3 DOWNTO 0) <= std_logic'(NOT PortCLow_IO) & std_logic'(NOT PortCLow_IO) & std_logic'(NOT PortCLow_IO) & std_logic'(NOT PortCLow_IO); END IF; ELSE Ben <= NOT PortB_IO; Cen (3 DOWNTO 0) <= "1011"; END IF; IF (ModeA = "00") THEN -- "punjenje" visa 4 bita Cen stanjem xxxx, Aen <= NOT PortA_IO; -- pri cemu je x jednak komplementu PortCUp_IO Cen (7 DOWNTO 4) <= std_logic'(NOT PortCUp_IO) & std_logic'(NOT PortCUp_IO) & std_logic'(NOT PortCUp_IO) & std_logic'(NOT PortCUp_IO); ELSIF (ModeA = "01") THEN Aen <= NOT PortA_IO; IF (PortA_IO = '0') THEN --Port A je izlazni Cen(7 DOWNTO 4) <= "10" & std_logic'(NOT PortCUp_IO) & std_logic'(NOT PortCUp_IO); ELSE --Port A je ulazni Cen(7 DOWNTO 4) <= std_logic'(NOT PortCUp_IO) & std_logic'(NOT PortCUp_IO) & "10";
24
END IF; ELSE Aen <= NOT Cin(6); -- ACK signal generise dozvolu u Modu 2 Cen(7 DOWNTO 4) <= "1010"; -- "punjenje" visa 4 bita Cen stanjem 1010 END IF; CASE A IS WHEN "00" => -- Port A IF (ModeA = "00") THEN -- Ukoliko je Port A u Modu 0 DoutSelect <= "000"; -- Selektuje se nelecovani podatak PAin ELSE DoutSelect <= "001"; -- U suprotnom, selektuje se lecovani podatak PAin. END IF; WHEN "01" => -- Port B IF (ModeB = '0') THEN -- Ukoliko je Port B u Modu 0 DoutSelect <= "010"; -- Selektuje se nelecovani podatak PBin ELSE DoutSelect <= "011"; -- U suprotnom, selektuje se lecovani podatak PBin. END IF; WHEN "10" => -- Port C DoutSelect <= "100"; -- Selekcija podatka Cin WHEN "11" => DoutSelect <= "110"; -- Selekcija podatka iz Kontrolnog Registra WHEN OTHERS => NULL; END CASE; -- Generisanje informacije o prekoracenju, tj. -- kada procesor "puni" Kontrolni Registar IF (nCS = '0' AND A = "11" AND Din(7) = '0') THEN Coverride <= '1'; ELSE Coverride <= '0'; END IF; -- Ctrl_log generise upravljacki vektor CoutLd koji moze -- da ima vise stanja, zavisno od toga koju funkciju cip -- 8255 obavlja. Naredna sekvenca pokazuje nacin na koji -- se "puni" sadrzaj vektora CoutLd IF (nCS = '0' AND A = "10" AND nWR = '0') THEN IF (ModeA = "00" AND ModeB = '0') THEN CoutLd <= "00000000"; ELSIF (ModeA = "00") THEN CoutLd <= "00001111"; ELSIF (ModeB = '0') THEN CoutLd <= "11110000"; ELSE CoutLd <= "11111111";
25
END IF; ELSIF (nCS = '0' AND A = "11" AND nWR = '0' AND Din(7) = '0') THEN CASE Din (3 DOWNTO 1) IS -- Posto je A="11", Din "nosi" upravljacku WHEN "000" => -- informaciju, tako da CoutLd zavisi od CoutLd <= "11111110"; -- niza 3 bita vektora (signala) Din WHEN "001" => CoutLd <= "11111101"; WHEN "010" => CoutLd <= "11111011"; WHEN "011" => CoutLd <= "11110111"; WHEN "100" => CoutLd <= "11101111"; WHEN "101" => CoutLd <= "11011111"; WHEN "110" => CoutLd <= "10111111"; WHEN "111" => CoutLd <= "01111111"; WHEN OTHERS => CoutLd <= "11111111"; END CASE; ELSE CoutLd <= "11111111"; END IF; -- Kada je aktivan CtrlRegWrite, to znaci da podatak -- koji salje procesor predstavlja upravljacki vektor. -- Tada CtrlRegD preuzima 7 bitova vektora Din. Kada -- CtrlRegWrite nije aktivan, ne azurira se stanje -- Kontrolnog Registra IF (CtrlRegWrite = '0') THEN CtrlRegD <= Din (6 DOWNTO 0); ELSE CtrlRegD <= CtrlRegQ; END IF; END PROCESS; CtrlRegProc: PROCESS ( Reset, Clk ) -- Ukoliko je aktivan RESET signal, stanje Kontrolnog -- Registra se postavlja na "0011011". -- Sa svakom usponskom ivicom takta stanje Kontrolnog -- Registra se azurira BEGIN IF (Reset = '1') THEN CtrlRegQ <= "0011011";
26
ELSIF (Clk'EVENT and Clk = '1') THEN CtrlRegQ <= CtrlRegD; END IF; END PROCESS; END rtl;
3.2. PortAin Realizacija Porta A je efikasnija ukoliko se on podeli na ulazni i izlazni deo. Ulazni segment porta sadrži logiku koja prihvata podatke. Kao što se vidi na Sl.3.1, PortAin prihvata podatke iz «spoljnjeg sveta» preko globalnog multipleksera, a prosleduje ih prema entitetu DoutMux. LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY PortAin IS PORT( Ain : IN std_logic_vector (7 DOWNTO 0); AInReg : OUT std_logic_vector (7 DOWNTO 0); Reset : IN std_logic; Clk : IN std_logic; AInLd : IN std_logic ); END PortAin; ARCHITECTURE rtl OF PortAin IS -- Definisanje internih signala unutar ulaznog dela -- Porta A (Ain) SIGNAL AinRegQ : std_logic_vector(7 DOWNTO 0); SIGNAL AinRegD : std_logic_vector(7 DOWNTO 0); BEGIN AinReg <= AinRegQ; -- Ulazni deo Porta A (Ain) mozemo smatrati kao -- sistem 2 x 8 latch-eva "pojacan" sa dodatnom logikom;
27
AinProc1: PROCESS ( AinLd, Ain, AinRegQ ) BEGIN -- Kada je aktivan signal AinLd, azurira se sadrzaj -- Porta Ain, 8-bitnim podatkom koji je na njegovom -- ulazu IF ( AinLd = '0') THEN AinRegD <= Ain (7 DOWNTO 0); ELSE AinRegD <= AinRegQ; END IF; END PROCESS; AinProc2: PROCESS ( Reset, Clk ) BEGIN -- Ukoliko je prisutan spoljasnji Reset, stanje Porta Ain -- postaje "00000000" IF (RESET = '1') THEN AinRegQ <= "00000000"; -- Sa usponskom ivicom takta 8-bitni podatak ce biti -- dostupan na izlazu ELSIF ( Clk'EVENT and Clk = '1') THEN AinRegQ <= AinRegD; END IF; END PROCESS; END rtl;
28
3.3. PortBin
Realizacija Porta B je efikasnija ukoliko se on podeli na ulazni i izlazni deo. PortBin prihvata podatke preko iz «spoljnjeg sveta» preko globalnog multipleksera, a prosleduje ih prema entitetu DoutMux. Naravno, da li ce se Port B ponašati kao ulazni ili kao izlazni, zavisi od upravljackih signala, koja sa procesora dolazi na entitet (blok) Cnt_log. LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY PortBin IS PORT( Reset : IN std_logic; Clk : IN std_logic; Bin : IN std_logic_vector (7 DOWNTO 0); BinLd : IN std_logic; BinReg : OUT std_logic_vector (7 DOWNTO 0) ); END PortBin; ARCHITECTURE rtl OF PortBin IS -- Definisanje internih signala unutar ulaznog dela -- Porta B (Bin) SIGNAL BinRegQ : std_logic_vector(7 DOWNTO 0); SIGNAL BinRegD : std_logic_vector(7 DOWNTO 0); BEGIN BinReg <= BinRegQ; BinProc1: PROCESS ( BinLd, Bin, BinRegQ ) -- Ulazni deo Porta B (Bin) mozemo smatrati kao -- sistem 2 x 8 latch-eva sa dodatnom logikom; BEGIN -- Kada je aktivan signal BinLd (ovaj signal -- generise blok Ctrl_log) upisuje se sadrzaj -- sa ulaza Porta Bin IF ( BinLd = '0') THEN BinRegD <= Bin (7 DOWNTO 0);
29
ELSE BinRegD <= BinRegQ; END IF; END PROCESS; BinProc2: PROCESS ( Reset, Clk ) BEGIN -- Kada je prisutan spoljasnji Reset, stanje Porta Bin -- se anulira, tj. postaje "00000000". Onog trenutka -- kada naidje usponska ivica takta, sadrzaj Porta Bin -- se prenosi na izlaz BinReg IF (Reset = '1') THEN BinRegQ <= "00000000"; ELSIF ( Clk'EVENT and Clk = '1') THEN BinRegQ <= BinRegD; END IF; END PROCESS; END rtl;
3.4. DoutMUX Zadatak entiteta DoutMux je da na osnovu upravljackih signala generisanih od strane entiteta Cnt_log, definiše transport podataka prema izlaznim segmentima portova A, B i C (PortAout, PortBout, PortCout). LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY Dout_mux IS PORT( Ain : IN std_logic_vector (7 DOWNTO 0); Bin : IN std_logic_vector (7 DOWNTO 0); AinReg : IN std_logic_vector (7 DOWNTO 0); BinReg : IN std_logic_vector (7 DOWNTO 0); CStatus : IN std_logic_vector (7 DOWNTO 0); CtrlReg : IN std_logic_vector (7 DOWNTO 0); DoutSelect : IN std_logic_vector (2 DOWNTO 0); Dout : OUT std_logic_vector(7 DOWNTO 0) ); END Dout_mux;
30
ARCHITECTURE rtl OF Dout_mux IS BEGIN mux_proc : PROCESS(Ain, Bin, AinReg, BinReg, CStatus, CtrlReg, DoutSelect) BEGIN -- Tokom jednog taktnog perioda cip 8255 moze da operise samo -- sa jednim portom. Otuda i postojanje multipleksera koji -- propusta samo jedan od 6 relevantnih 8-bitnih signala. -- Drugim recima, izlaz multipleksera Dout zavisno od stanja -- kontrolnog signala DoutSelect "preuzima" jedan od sledecih -- signala: Ain, Bin, AinReg, BinReg, CStatus ili CtrlReg. CASE DoutSelect IS WHEN "000" => DOUT <= Ain; WHEN "001" => DOUT <= AinReg; WHEN "010" => DOUT <= Bin; WHEN "011" => DOUT <= BinReg; WHEN "100" => DOUT <= CStatus; WHEN "110" => DOUT <= CtrlReg; WHEN OTHERS => DOUT <= "11111111"; END CASE; END PROCESS mux_proc; END rtl;
31
3.5. PortAout
Izlazni segment porta sadrži logiku koja šalje podatke prema entitetu DoutMux. Napominjemo da Port A može da se definiše ili kao ulazni ili kao izlazni, zavisno od upravljackih signala.
U jednom trenutku, prema „spoljašnjem svetu“ komunicira samo jedan port (A, B ili C). LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY PortAout IS PORT( Reset : IN std_logic; Clk : IN std_logic; Din : IN std_logic_vector (7 DOWNTO 0); AOutLd : IN std_logic; Aout : OUT std_logic_vector (7 DOWNTO 0) ); END PortAout; ARCHITECTURE rtl OF PortAout IS -- Definisanje internih signala SIGNAL AOutRegD : std_logic_vector(7 DOWNTO 0); SIGNAL AOutRegQ : std_logic_vector(7 DOWNTO 0); BEGIN Aout <= AOutRegQ; -- Kao i u slucaju ulaznog dela Porta A i izlazni deo predstavlja -- sistem od 2 x 8 latch-eva "pojacan" sa dodatnom logikom; AOutProc1: PROCESS ( AoutLd, AoutRegQ, Din ) BEGIN IF ( AoutLd = '0') THEN AoutRegD <= Din; ELSE AoutRegD <= AoutRegQ;
32
END IF; END PROCESS; AOutProc2: PROCESS ( Reset, Clk ) BEGIN -- Nailazak spoljasnjeg Reset "anulira" sadrzaj izlaza -- Porta Aout. Sa svakom usponskom ivicom takta sadrzaj -- Porta Aout je dostupan na izlazu, jer se AOutRegQ -- uvek preslikava na Aout IF (Reset = '1') THEN AOutRegQ <= "00000000"; ELSIF ( Clk'EVENT and Clk = '1') THEN AOutRegQ <= AOutRegD; END IF; END PROCESS; END rtl;
3.6. PortBout
Izlazni segment ovog porta sadrži logiku koja šalje podatke prema entitetu DoutMux. Zavisno od upravljackih signala, Port B može da se definiše ili kao ulazni ili kao izlazni. LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY PortBout IS PORT( Reset : IN std_logic; Clk : IN std_logic; Din : IN std_logic_vector (7 DOWNTO 0); BoutLd : IN std_logic; Bout : OUT std_logic_vector (7 DOWNTO 0) ); END PortBout;
33
ARCHITECTURE rtl OF PortBout IS -- Definisanje signala unutar Registra Bout SIGNAL BoutRegD : std_logic_vector(7 DOWNTO 0); SIGNAL BoutRegQ : std_logic_vector(7 DOWNTO 0); BEGIN -- Interni signal BoutRegQ se uvek preslikava -- na izlazne linije Registra Bout Bout <= BoutRegQ; -- U okviru ahitetekture Registra Bout (kao i u slucajevima -- Registarova Ain, Aout i Bin) definisemo 2 procesa. U prvom -- procesu definisemo upis ulaznog podatka u Registar Bout, a -- u okviru drugog procesa definisemo "preslikavanje" -- sadrzaja Registra Bout na njegov izlaz BoutProc1: PROCESS ( BoutLd, BoutRegQ, Din ) BEGIN IF ( BoutLd = '0') THEN BoutRegD <= Din; ELSE BoutRegD <= BoutRegQ; END IF; END PROCESS; BoutProc2: PROCESS ( Reset, Clk ) BEGIN IF (Reset = '1') THEN BoutRegQ <= "00000000"; ELSIF ( Clk'EVENT and Clk = '1') THEN BoutRegQ <= BoutRegD; END IF; END PROCESS; END rtl;
34
3.7. PortCout Port C je definisan kao jedinstven entitet. Ovaj port se koristi kako za podatke, tako i za upravljanje handshake signalima, cime se obezbeduje «strobovanje» ulaza portova A i B. Struktura i funkcije Porta C su složeniji od portova A i B, pa je samim tim i njegov opis najopširniji. LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY PortCout IS PORT( Din : IN std_logic_vector (7 DOWNTO 0); Cin : IN std_logic_vector (7 DOWNTO 0); CtrlReg : IN std_logic_vector (7 DOWNTO 0); Cout : OUT std_logic_vector(7 DOWNTO 0); Ard : IN std_logic; Brd : IN std_logic; Awr : IN std_logic; Bwr : IN std_logic; Reset : IN std_logic; Clk : IN std_logic; Coverride: IN std_logic; CoutLd : IN std_logic_vector (7 DOWNTO 0); CStatus : OUT std_logic_vector(7 DOWNTO 0) ); END PortCout; ARCHITECTURE rtl OF PortCout IS -- Definisanje internih signala Porta Cout SIGNAL CoutRegD : std_logic_vector(7 DOWNTO 0); SIGNAL CoutRegQ : std_logic_vector(7 DOWNTO 0); SIGNAL ModeA : std_logic_vector (1 DOWNTO 0); SIGNAL ModeB : std_logic; SIGNAL PortA_IO : std_logic; SIGNAL PortB_IO : std_logic; SIGNAL RiseAwrQ : std_logic; SIGNAL RiseBwrQ : std_logic; SIGNAL RiseArdQ : std_logic; SIGNAL RiseBrdQ : std_logic; SIGNAL RiseCin6Q : std_logic; SIGNAL RiseCin4Q : std_logic;
35
SIGNAL RiseCin2Q : std_logic; SIGNAL RiseAwr : std_logic; SIGNAL RiseBwr : std_logic; SIGNAL RiseArd : std_logic; SIGNAL RiseBrd : std_logic; SIGNAL RiseCin6 : std_logic; SIGNAL RiseCin4 : std_logic; SIGNAL RiseCin2 : std_logic; BEGIN Cout <= CoutRegQ; -- izlaz registra Cout ModeA <= CtrlReg (6 DOWNTO 5); -- mod registra A ModeB <= CtrlReg (2); -- mod registra B PortA_IO <= CtrlReg (4); -- registar A je ulazni ili izlazni PortB_IO <= CtrlReg (1); -- registar B je ulazni ili izlazni CStatusProc: PROCESS ( ModeA, ModeB, PortA_IO, Cin, CoutRegQ ) BEGIN CStatus(7) <= Cin(7); IF (ModeA = "01" AND PortA_IO = '0') THEN -- Mod 1, registar A je izlazni CStatus(6) <= CoutRegQ(6); -- i to se upisuje u Statusni Registar. ELSIF (ModeA(1) = '1') THEN -- Registar A je u Modu 2 CStatus(6) <= CoutRegQ(6); ELSE CStatus(6) <= Cin(6); END IF; CStatus(5) <= Cin(5); IF (ModeA = "01" AND PortA_IO = '1') THEN -- Mod 1, registar A je ulazni CStatus(4) <= CoutRegQ(4); --i to se upisuje u Statusni registar ELSIF (ModeA(1) = '1') THEN -- Registar A je u Modu 2 CStatus(4) <= CoutRegQ(4); ELSE CStatus(4) <= Cin(4); END IF; CStatus(3) <= Cin(3); IF (ModeB = '1') THEN -- Registar B je u Modu 1 i to CStatus(2) <= CoutRegQ(2); -- se upisuje u Statusni Registar ELSE CStatus(2) <= Cin(2); END IF;
36
CStatus(1) <= Cin(1); CStatus(0) <= Cin(0); END PROCESS; PortCDataProc: PROCESS ( ModeA, PortA_IO, PortB_IO, ModeB, Coverride, Awr, Bwr, Ard, Brd, RiseAwr, RiseBwr, RiseArd, RiseBrd, CoutLd, CoutRegQ, Din, Cin, RiseCin2, RiseCin4, RiseCin6 ) BEGIN IF (ModeB = '0') THEN -- Registar B je u Modu 0
IF (CoutLd (0) = '0') THEN CoutRegD (0) <= Din(0); -- Prvi bit signala Din se lecuje. ELSE -- U suprotnom, ranije lecovani bit CoutRegD (0) <= CoutRegQ (0); -- postaje izlazni END IF; ELSIF (ModeB = '1') THEN -- Registar B je u Modu 1 IF ( CoutLd (0) = '0' AND Coverride = '1') THEN -- Prvi bit signala Din se lecuje. CoutRegD (0) <= Din(0); ELSIF (PortB_IO = '0') THEN -- Registar B je izlazni u Modu 1 IF (Bwr = '0') THEN -- Resetovanje INTRB kada je prisutan CoutRegD (0) <= '0'; -- "write strobe" ELSIF (Bwr = '1' AND RiseCin2 = '1' -- Setovanje INTRB na usponsku AND CoutRegQ (1) = '1') THEN -- ivicu signala ACKB CoutRegD (0) <= CoutRegQ (2); ELSE CoutRegD (0) <= CoutRegQ (0); END IF; ELSE -- Mode 1 ulaz IF (Brd = '0' AND CoutRegQ(1) = '1') THEN -- Resetovanje INTRB kada je CoutRegD (0) <= '0'; -- prisutan "read strobe" ELSIF (RiseCin2 = '1' AND CoutRegQ (1) = '1') THEN-- Setovanje INTRB na usponsku CoutRegD (0) <= CoutRegQ (2); -- ivicu signala STBB ELSE CoutRegD (0) <= CoutRegQ (0); END IF; END IF; ELSE CoutRegD (0) <= CoutRegQ (0); END IF;
37
IF (ModeB = '0') THEN -- Registar B je u Modu 0 IF (CoutLd (1) = '0') THEN IF ( Coverride = '1') THEN CoutRegD (1) <= Din(0); -- Lecuje se jedan od 2 bita: ELSE -- Din(1) ili Din(0) CoutRegD (1) <= Din(1); END IF; ELSE CoutRegD (1) <= CoutRegQ (1); END IF; ELSIF (ModeB = '1') THEN -- Registar B je u Modu 1 IF ( CoutLd (1) = '0' AND Coverride = '1') THEN -- Lecovanje CoutRegD (1) <= Din(0); ELSIF (PortB_IO = '0') THEN -- Registar B je izlazni u Modu 1 IF (RiseBwr = '1') THEN -- Reseovanje OBFB na rastucu CoutRegD (1) <= '0'; -- ivicu signala "write strobe" ELSIF (Cin(2) = '0') THEN -- Setovanje OBFB kada ACKB CoutRegD (1) <= '1'; -- postane "nisko" ELSE CoutRegD (1) <= CoutRegQ (1); END IF; ELSE -- Registar B je ulazni u Modu 1 IF (RiseBrd = '1' AND CoutRegQ(0) = '0') THEN -- Reseovanje IBFB na rastucu ivicu CoutRegD (1) <= '0'; -- "read strobe" ELSIF (Cin(2) = '0') THEN -- Setovanje IBFB kada STBB CoutRegD (1) <= '1'; -- postane "nisko" ELSE CoutRegD (1) <= CoutRegQ (1); END IF; END IF; ELSE CoutRegD (1) <= CoutRegQ (1); END IF; IF (CoutLd (2) = '0') THEN -- Svi modovi IF ( Coverride = '1') THEN CoutRegD (2) <= Din(0); -- Lecovanje prvog ili treceg bita ELSE -- signala Din CoutRegD (2) <= Din(2); END IF; ELSE CoutRegD (2) <= CoutRegQ (2); END IF;
38
IF (ModeA = "00") THEN -- Mod 0 IF (CoutLd (3) = '0') THEN IF ( Coverride = '1') THEN CoutRegD (3) <= Din(0); -- Lecovanje prvog ili cetvrtog bita ELSE -- signala Din CoutRegD (3) <= Din(3); END IF; ELSE CoutRegD (3) <= CoutRegQ (3); END IF; ELSIF (ModeA = "01") THEN -- Mod 1 IF ( CoutLd (3) = '0' AND Coverride = '1') THEN CoutRegD (3) <= Din(0); -- "Lecovanje" bita Din(0) ELSIF (PortA_IO = '0') THEN -- Registar A je izlazni IF (Awr = '0') THEN CoutRegD (3) <= '0'; -- Resetovanje INTRA sa pojavom ELSIF (Awr = '1' AND RiseCin6 = '1' -- signala "write strobe" AND CoutRegQ (7) = '1') THEN -- Setovanje INTRA na usponsku CoutRegD (3) <= CoutRegQ (6); -- ivicu signala ACKA ELSE CoutRegD (3) <= CoutRegQ (3); END IF; ELSE -- Mode 1, Registar A je ulazni IF (Ard = '0' AND CoutRegQ(5) = '1') THEN CoutRegD (3) <= '0'; -- Resetovanje INTRA sa pojavom ELSIF (RiseCin4 = '1' AND CoutRegQ (5) = '1') THEN -- signala "read strobe" CoutRegD (3) <= CoutRegQ (4); -- Setovanje INTRA na usponsku ELSE -- ivicu signala STBA CoutRegD (3) <= CoutRegQ (3); END IF; END IF; ELSIF (ModeA(1) = '1') THEN -- Mod 2 IF ( CoutLd (3) = '0' AND Coverride = '1') THEN CoutRegD (3) <= Din(0); -- "Lecovanje" bita Din(0) ELSE IF (Awr = '0' OR Ard = '0') THEN -- Resetovanje signala INTRA na CoutRegD (3) <= '0'; -- svaku Read ili "write strobe" ELSIF (Awr = '1' AND RiseCin6 = '1' -- operaciju AND CoutRegQ (7) = '1') THEN -- Setovanje INTRA na usponsku CoutRegD (3) <= CoutRegQ (6); -- ivicu signala ACKA ELSIF (Ard = '1' AND RiseCin4 = '1' -- ILI AND CoutRegQ (5) = '1') THEN -- Setovanje INTRA na rastucu ivicu CoutRegD (3) <= CoutRegQ (4); -- signala STBA ELSE CoutRegD (3) <= CoutRegQ (3); END IF;
39
END IF; ELSE CoutRegD (3) <= CoutRegQ (3); END IF; IF (ModeA = "00" OR (ModeA = "01" AND PortA_IO = '0')) THEN-- Registar A je izlazni;
--Mod 0 i Mod 1 IF (CoutLd (4) = '0') THEN IF ( Coverride = '1') THEN CoutRegD (4) <= Din(0); -- "Lecovanje" bita Din(0) ili ELSE -- bita Din(4) CoutRegD (4) <= Din(4); END IF; ELSE CoutRegD (4) <= CoutRegQ (4); END IF; -- Mod 1 ili Mod 2 ELSE IF ( CoutLd (4) = '0' AND Coverride = '1') THEN CoutRegD (4) <= Din(0); --"Lecovanje" bita Din(0) ili ELSE -- ostaje prethodno stanje CoutRegD (4) <= CoutRegQ (4); END IF; END IF; IF (ModeA = "00"OR (ModeA = "01" AND PortA_IO = '0')) THEN-- Mod 0 i Mode 1 IF (CoutLd (5) = '0') THEN -- Registar A je izlazni IF ( Coverride = '1') THEN CoutRegD (5) <= Din(0); -- "Lecovanje" bita Din(0) ELSE -- ili bita Din(5); CoutRegD (5) <= Din(5); END IF; ELSE CoutRegD (5) <= CoutRegQ (5); -- ili ostaje prethodno stanje END IF; ELSIF (ModeA = "01") THEN -- Mod 1 IF ( CoutLd (5) = '0' AND Coverride = '1') THEN CoutRegD (5) <= Din(0); -- "Lecovanje" bita Din(0) ELSIF (PortA_IO = '1') THEN -- Registar A je ulazni IF (RiseArd = '1' AND CoutRegQ(3) = '0') THEN CoutRegD (5) <= '0'; -- Resetovanje IBFA na rastucu ELSIF (Cin(4) = '0') THEN -- ivicu signala "read strobe" CoutRegD (5) <= '1'; -- Setovanje IBFA kada se signal ELSE -- STBA postavi na "nisko" CoutRegD (5) <= CoutRegQ (5); END IF;
40
ELSE CoutRegD (5) <= CoutRegQ (5); END IF; ELSIF (ModeA(1) = '1') THEN -- Mod 2 IF ( CoutLd (5) = '0' AND Coverride = '1') THEN CoutRegD (5) <= Din(0); -- "Lecovanje" bita Din(0) ELSE IF (RiseArd = '1' AND CoutRegQ(3) = '0') THEN CoutRegD (5) <= '0'; -- Resetovanje IBFA na rastucu ELSIF (Cin(4) = '0') THEN -- ivicu signala "read strobe" CoutRegD (5) <= '1'; -- Setovanje IBFA kada se signal ELSE -- STBA postavi na "nisko" CoutRegD (5) <= CoutRegQ (5); END IF; END IF; ELSE CoutRegD (5) <= CoutRegQ (5); END IF; IF (ModeA = "00" OR (ModeA = "01" AND PortA_IO = '1')) THEN -- Mod 0 ili Mod 1; IF (CoutLd (6) = '0') THEN -- Registar A je ulazni IF ( Coverride = '1') THEN CoutRegD (6) <= Din(0); -- "Lecovanje" bita Din(0) ili ELSE -- bita Din(6); CoutRegD (6) <= Din(6); END IF; ELSE CoutRegD (6) <= CoutRegQ (6); -- ili ostaje prethodno stanje END IF; ELSE IF ( CoutLd (6) = '0' AND Coverride = '1') THEN CoutRegD (6) <= Din(0); -- "Lecovanje" bita Din(0) ili ELSE -- ostaje prethodno stanje CoutRegD (6) <= CoutRegQ (6); END IF; END IF; IF (ModeA = "00" OR (ModeA = "01" AND PortA_IO = '1')) THEN-- Mod 0 i Mod 1; IF (CoutLd (7) = '0') THEN -- Registar A je ulazni IF ( Coverride = '1') THEN CoutRegD (7) <= Din(0); -- Lecovanje prvog ili ELSE -- poslednjeg bita signala Din CoutRegD (7) <= Din(7); END IF;
41
ELSE CoutRegD (7) <= CoutRegQ (7); END IF; ELSIF (ModeA = "01") THEN -- Mod 1 IF ( CoutLd (7) = '0' AND Coverride = '1') THEN CoutRegD (7) <= Din(0); ELSIF (PortA_IO = '0') THEN -- Registar A je izlazni IF (RiseAwr = '1') THEN CoutRegD (7) <= '0'; -- Resetovanje OBFA na rastucu ELSIF (Cin(6) = '0') THEN -- ivicu signala "write strobe" CoutRegD (7) <= '1'; -- Setovanje OBFA kada ACKA ELSE -- postane "nisko" CoutRegD (7) <= CoutRegQ (7); END IF; ELSE CoutRegD (7) <= CoutRegQ (7); END IF; ELSIF (ModeA(1) = '1') THEN -- Mod 2 IF ( CoutLd (7) = '0' AND Coverride = '1') THEN CoutRegD (7) <= Din(0); -- "Lecovanje" CoutRegD(7) ELSE IF (RiseAwr = '1') THEN -- Resetovanje signala OBFA na CoutRegD (7) <= '0'; -- rastucu ivicu signala "write strobe" ELSIF (Cin(6) = '0') THEN -- Setovanje OBFA CoutRegD (7) <= '1'; ELSE CoutRegD (7) <= CoutRegQ (7); END IF; END IF; ELSE CoutRegD (7) <= CoutRegQ (7); END IF; END PROCESS; -- Opisacemo proces koji definise stanje -- Porta Cout CoutRegSyncProc: PROCESS ( Reset, Clk ) BEGIN IF ( Reset = '1') THEN CoutRegQ <= "00000000"; ELSIF ( Clk'EVENT and Clk = '1') THEN
42
CoutRegQ <= CoutRegD; END IF; END PROCESS; -- Sada cemo da definisemo proces koji detektuje -- svaku promenu stanja unutar registara cipa 8255. -- Svakoj promeni cemo dodeliti Registar jedan interni -- signal. EdgeDetectSyncProc: PROCESS ( Reset, Clk ) BEGIN IF ( Reset = '1') THEN RiseAwrQ <= '0'; RiseBwrQ <= '0'; RiseArdQ <= '0'; RiseBrdQ <= '0'; RiseCin6Q <= '0'; RiseCin4Q <= '0'; RiseCin2Q <= '0'; ELSIF ( Clk'EVENT and Clk = '1') THEN RiseAwrQ <= Awr; RiseBwrQ <= Bwr; RiseArdQ <= Ard; RiseBrdQ <= Brd; RiseCin6Q <= Cin(6); RiseCin4Q <= Cin(4); RiseCin2Q <= Cin(2); END IF; END PROCESS; -- Dodeljivanje signala koji detektuju promene -- stanja registara RiseAwr <= Awr AND NOT RiseAwrQ; RiseBwr <= Bwr AND NOT RiseBwrQ; RiseArd <= Ard AND NOT RiseArdQ; RiseBrd <= Brd AND NOT RiseBrdQ; RiseCin6 <= Cin(6) AND NOT RiseCin6Q;
43
RiseCin4 <= Cin(4) AND NOT RiseCin4Q; RiseCin2 <= Cin(2) AND NOT RiseCin2Q; END rtl;
3.8. Generator takta (CLK_gen)
Cip 8255 ima interni generator takta kojim se definišu trenuci prihvatanja podataka iz «spoljnjeg sveta», kao i trenuci promene signala unutar komponente. Treba naznaciti da je cip 8255 asinhrona komponenta, tj. da se pomenuto «taktovanje» ne vrši eksterno. LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY ClkGen IS PORT( nCs: in std_logic; CLK: out std_logic ); END ClkGen; -- Definisanje rada untrasnjeg takta ARCHITECTURE RTC OF ClkGen IS BEGIN CLK_GEN: process -- Definisemo internu frekvenciju na 10MHz constant CLK_PERIOD:time:= 100 ns; begin -- Rad internog oscilatora direktno zavisi od signala nCs. -- Kada nCs nije aktivan, stanje signala CLK je '0'. U suprotnom, -- osciluje sa taktom od 100 ns, tj. frekvencijom od 10MHz. CLK <= '0' and not(nCs); wait for CLK_PERIOD/2; CLK <= '1' and not(nCs); wait for CLK_PERIOD/2; end process; END RTC;
44
3.9. Globalni multiplekser (MUX_global) Zadatak bloka koga smo nazvali Globalni multiplekser je da obezbedi korespon-denciju izmedu internog modela cipa 8255 i pinova na samom kucištu, kojih ima 40, racunajuci i pinove Vcc i Gnd. LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY MUX_global IS PORT( PA :InOUT std_logic_vector (7 DOWNTO 0); PB :InOUT std_logic_vector (7 DOWNTO 0); PC :InOUT std_logic_vector (7 DOWNTO 0); Ain :OUT std_logic_vector (7 DOWNTO 0); Bin :OUT std_logic_vector (7 DOWNTO 0); Cin :OUT std_logic_vector (7 DOWNTO 0); Aout :IN std_logic_vector (7 DOWNTO 0); Bout :IN std_logic_vector (7 DOWNTO 0); Cout :IN std_logic_vector (7 DOWNTO 0); Cen :IN std_logic_vector (7 DOWNTO 0); Ben :IN std_logic; Aen :IN std_logic ); END MUX_global; -- Definisanje rada bloka GLOBALNI MULTIPLEKSER, ciji -- je zadatak da obezbedi korespondenciju izmedju pinova -- cipa 8255 i njegovog unutrasnjeg modela -- Tokom jednog taktnog perioda cip 8255 operise samo -- sa jednim portom ARCHITECTURE MUX_global OF MUX_global IS -- Definisimo pomocne signale PA_sub, PB_sub i PC_sub Signal PA_sub : std_logic_vector (7 downto 0); Signal PB_sub : std_logic_vector (7 downto 0); Signal PC_sub : std_logic_vector (7 downto 0); BEGIN PA_sub <= PA; PB_sub <= PB; PC_sub <= PC;
45
-- Signali Aen i Ben su aktivni sa '0' PA <= Aout when Aen='0' and Aout'event; -- Port A je izlazni Ain <= PA when Aen='0' and PA_sub'event; -- Port A je ulazni PB <= Bout when Ben='0' and Bout'event; -- Port B je izlazni Bin <= PB when Ben='0' and PB_sub'event; -- Port A je ulazni -- Sada cemo definisati kada se pinovi Porta C ponasaju -- kao izlazni, a kada kao ulazni PC(0) <= Cout(0) when Cen(0)='0' and Cout(0)'event; PC(1) <= Cout(1) when Cen(1)='0' and Cout(1)'event; PC(2) <= Cout(2) when Cen(2)='0' and Cout(2)'event; PC(3) <= Cout(3) when Cen(3)='0' and Cout(3)'event; PC(4) <= Cout(4) when Cen(4)='0' and Cout(4)'event; PC(5) <= Cout(5) when Cen(5)='0' and Cout(5)'event; PC(6) <= Cout(6) when Cen(6)='0' and Cout(6)'event; PC(7) <= Cout(7) when Cen(7)='0' and Cout(7)'event; Cin(0)<= PC(0) when Cen(0)='0' and PC_sub(0)'event; Cin(1)<= PC(1) when Cen(1)='0' and PC_sub(1)'event; Cin(2)<= PC(2) when Cen(2)='0' and PC_sub(2)'event; Cin(3)<= PC(3) when Cen(3)='0' and PC_sub(3)'event; Cin(4)<= PC(4) when Cen(4)='0' and PC_sub(4)'event; Cin(5)<= PC(5) when Cen(5)='0' and PC_sub(5)'event; Cin(6)<= PC(6) when Cen(6)='0' and PC_sub(6)'event; Cin(7)<= PC(7) when Cen(7)='0' and PC_sub(7)'event; END MUX_global;
46
4. SINTEZA I IMPLEMENTACIJA KOLA Za implementaciju programibilnog periferijskog interfejsa 8255 iskoristicemo cip XC2S30VQ200 iz XILINX-ove familije Spartan. Kolo koristi napajanje od 5V. Sintezu i implementaciju cemo obaviti u programu FPGA Express, koji je deo XILINX-ovog paketa programa. Na slici 4.1 prikazana je šema sinteze kola na najvišem nivou. Na šemi su prikazani blokovi koji cine cip 8255, kao i veze medu njima. Svaki od blokova može da se pregleda «dubinski», kako bi bili prikazani gejtovi od kojih je sastavljeno.
Slika 4.1: Šema sinteze Sledeci listing nam pokazuje dobijene rezultate POSLE IMPLEMENTACIJE: Design Summary -------------- Number of errors: 0 Number of warnings: 42 Logic Utilization: Total Number Slice Registers: 411 out of 864 48% Number used as Flip Flops: 154 Number used as Latches: 257
47
Number of 4 input LUTs: 645 out of 864 75% Logic Distribution: Number of occupied Slices: 419 out of 432 97% Number of Slices containing only related logic: 362 out of 430 84% Number of Slices containing unrelated logic: 57 out of 430 13% *See NOTES below for an explanation of the effects of unrelated logic Total Number 4 input LUTs: 571 out of 864 64% Number used as logic: 568 Number used as a route-thru: 3 Number of bonded IOBs: 21 out of 60 35% IOB Latches: 4 Number of Tbufs: 62 out of 480 13% Number of GCLKs: 4 out of 4 100% Number of GCLKIOBs: 4 out of 4 100% Total equivalent gate count for design: 7,923 Additional JTAG gate count for IOBs: 1,316 Implemetniran cip je zauzeo 7923 ekvivalentnih gejtova, kao i da je pridodato još 1316 gejta koja su neophodna za realizaciju JTAG logike, preko koje se vrši programiranje i testiranje. Maksimalna radna frekvencija kola 73.253MHz. Na slikama 4.2 i 4.3 vidimo unutrašnju strukturu dobijenu nakon implementacije kola gde se vide zauzeti blokovi unutar kola. Na slici 4.2 prikazan je razmeštaj celija gde možemo videti i koji pinovi kola su iskorišceni. Iako se zapaža da izvodi kola nisu grupisani, to je da bi se postiglo približno isto kašnjenje veza do svih pinova. Izgled povezanosti samih veza prikazan je na slici 4.3
Slika 4.2: Šema zauzetoti celija FPGA kola
48
Slika 4.3: Šema veza celija FPGA kola Na kraju izvršena je i analiza potrošnje kola u delu paketa pod imenom XPower, je pokazao totalnu potrošnju od 10.3mW. Pri tome pri temperaturi ambijenta od 25 ?C, temperatura kucišta je 25,4 ?C. Na slici 4.4 prikazan je i sam fizicki raspored pinova na FPGA cipu.
Slika 4.4: Raspored pinova na FPGA cipu
Program generiše i programski fajl kojim je potrebno isprogramirati FPGA kolo da bi se dobila
željena funkcija.
49
5. TESTIRANJE RADA KOLA
Primer 1 ( mode 0):
a) Pokazacemo kako se može spregnuti D/A konvertor na 8080 magistralu preko cipa Intel 8255.
b) Kreiracemo Test_Bench kojim se obezbeduje generisanje trouganog napona, cija se amplituda menja u 8 koraka.
Rešenje a)
b) LIBRARY ieee; USE ieee.std_logic_1164.ALL; entity MOD_0 is end MOD_0; architecture TB_ARCHITECTURE of MOD_0 is -- Deklaracija testne jedinice component a8255 PORT( RESET : IN std_logic;
50
nCS : IN std_logic; nRD : IN std_logic; nWR : IN std_logic; A : IN std_logic_vector (1 DOWNTO 0); PA : InOut std_logic_vector (7 DOWNTO 0); PB : InOut std_logic_vector (7 DOWNTO 0); PC : InOut std_logic_vector (7 DOWNTO 0); PD : InOut std_logic_vector (7 DOWNTO 0) ); end component; --Definisanje signala koje cemo da posmatramo signal RESET : std_logic; signal nCS : std_logic; signal nRD : std_logic; signal nWR : std_logic; signal A : std_logic_vector (1 DOWNTO 0); signal PA : std_logic_vector (7 DOWNTO 0); signal PB : std_logic_vector (7 DOWNTO 0); signal PC : std_logic_vector (7 DOWNTO 0); signal PD : std_logic_vector (7 DOWNTO 0); begin --Mapiranje portova UUT : a8255 port map ( RESET => RESET, nCS => nCS, nRD => nRD, nWR => nWR, A => A, PA => PA, PB => PB, PC => PC, PD => PD );
51
--Dovodjenje pobudnih signala RESET<='1','0' after 150ns; --Resetovanje na pocetku nCs <='1','0' after 200ns; --Zadavanje signala za selekciju cipa A <="11","00" after 1us; nWr <='0' after 200ns; --Zadavanje operacije upisa nRd <='1' after 200ns; -- Port A se definise kao izlazni. -- 8255 dobija signal sa procesora i -- prosledjuje ga na izlaz PA. -- U cip 8255 najpre treba upisati komandnu -- rec "10000011" pri A="11". PD <= "10000011", "00000000" after 1us, "00000001" after 11us, "00000010" after 21us, "00000011" after 31us, "00000100" after 41us, "00000101" after 51us, "00000110" after 61us, "00000111" after 71us, "00001000" after 81us, "00000000" after 91us, "00000001" after 101us, "00000010" after 111us, "00000011" after 121us; end TB_ARCHITECTURE; configuration TESTBENCH_FOR_a8255 of MOD_0 is for TB_ARCHITECTURE for UUT : a8255 use entity work.a8255(a8255); end for; end for; end TESTBENCH_FOR_a8255;
52
Test Bench Mod 0
Da bi cip 8255 obavljao zadatu funkciju, neophodno je jedan od dva njegova registra (A ili B)
bude «transparentan», kako bi se obezbedio rad u Modu 0. Za tu svrhu izabrali smo Registar A . Onog trenutka kada procesor pošalje sledecu vrednost (koja treba da bude konvertovana) ka cipu
8255, prethodna vrednost se postavlja na izlaz cipa. Transakcije se odvijaju zavisno od stanja signala nCs, nWr,nRd i A.
53
Primer 2 ( mode 1 strobovani ulaz):
a) Pokazacemo nacin sprezanja tastature na 8080 magistralu preko cipa Intel 8255. b) Kreiracemo Test_Bench kojim se obezbeduje da procesor prihvati ASCII simbol sa tastature.
Rešenje a)
b) LIBRARY ieee; USE ieee.std_logic_1164.ALL; entity MOD1_1 is end MOD1_1; architecture TB_ARCHITECTURE of MOD1_1 is -- Deklaracija testne jedinice component a8255 PORT( RESET : IN std_logic; nCS : IN std_logic; nRD : IN std_logic; nWR : IN std_logic; A : IN std_logic_vector (1 DOWNTO 0); PA : InOut std_logic_vector (7 DOWNTO 0); PB : InOut std_logic_vector (7 DOWNTO 0); PC : InOut std_logic_vector (7 DOWNTO 0); PD : InOut std_logic_vector (7 DOWNTO 0) ); end component;
54
-- Definisanje signala koje cemo da posmatramo signal RESET : std_logic; signal nCS : std_logic; signal nRD : std_logic; signal nWR : std_logic; signal A : std_logic_vector (1 DOWNTO 0); signal PA : std_logic_vector (7 DOWNTO 0); signal PB : std_logic_vector (7 DOWNTO 0); signal PC : std_logic_vector (7 DOWNTO 0); signal PD : std_logic_vector (7 DOWNTO 0); begin --Mapiranje portova UUT : a8255 port map ( RESET => RESET, nCS => nCS, nRD => nRD, nWR => nWR, A => A, PA => PA, PB => PB, PC => PC, PD => PD ); --Dovodjenje pobudnih signala RESET<='1','0' after 1us; --Resetovanje na pocetku -- Zadavanje signala za selekciju cipa. Najpre treba selektovati -- cip zbog upisa komande od strane procesora; drugi put se cip -- selektuje da bi se procitao "strobovani" podatak u Portu A nCs <= '1', '0' after 4us,'1' after 9us, '0' after 5 ms; PD <= "10111000","ZZZZZZZZ" after 9us; A <= "11","00" after 10us; -- Definisanje porta A kao ulaznog.
55
nWr <= '1', '0' after 5us,'1' after 8us; -- On prihvata ASCII karakter, koji se nRd <= '1','0' after 40ms, '1' after 40.2ms ; -- strobuje, a koji kasnije preuzima PA <= "11101110" after 5ms, -- procesor. "UUUUUUUU" after 35 ms; PC(4) <= '1' after 5ms, '0' after 30 ms, -- Ovaj signal generise logika tastature '1' after 31 ms; end TB_ARCHITECTURE; configuration TESTBENCH_FOR_a8255 of MOD1_1 is for TB_ARCHITECTURE for UUT : a8255 use entity work.a8255(a8255); end for; end for; end TESTBENCH_FOR_a8255; Test Bench Mod 1
56
U ovom slucaju cip 8255 radi u Modu 1. Kao što se na slici vidi, ASCII simbol koji generiše tastatura se najpre «strobuje», a procesor ga
prihvata onog trenutka kada bude spreman. Transakcija se odvija zavisno od stanja signala nCs, nWr,nRd, PC(4) i A.
57
Primer 3 ( mode 1 strobovani izlaz):
a) Pokazacemo nacin sprezanja stampaca na 8080 magistralu preko cipa Intel 8255. b) Kreiracemo Test_Bench kojim se obezbeduje da procesor pošalje ASCII simbol na štampac.
Rešenje a)
b) LIBRARY ieee; USE ieee.std_logic_1164.ALL; entity MOD1_2 is end MOD1_2; architecture TB_ARCHITECTURE of MOD1_2 is -- Deklaracija testne jedinice component a8255 PORT( RESET : IN std_logic; nCS : IN std_logic; nRD : IN std_logic; nWR : IN std_logic; A : IN std_logic_vecto r (1 DOWNTO 0); PA : InOut std_logic_vector (7 DOWNTO 0); PB : InOut std_logic_vector (7 DOWNTO 0); PC : InOut std_logic_vector (7 DOWNTO 0); PD : InOut std_logic_vector (7 DOWNTO 0) ); end component; -- Definisanje signala koje cemo da posmatramo signal RESET : std_logic; signal nCS : std_logic; signal nRD : std_logic; signal nWR : std_logic; signal A : std_logic_vector (1 DOWNTO 0);
58
signal PA : std_logic_vector (7 DOWNTO 0); signal PB : std_logic_vector (7 DOWNTO 0); signal PC : std_logic_vector (7 DOWNTO 0); signal PD : std_logic_vector (7 DOWNTO 0); begin -- Mapiranje portova UUT : a8255 port map ( RESET => RESET, nCS => nCS, nRD => nRD, nWR => nWR, A => A, PA => PA, PB => PB, PC => PC, PD => PD ); -- Dovodjenje pobudnih signala RESET<='1','0' after 1us; --Resetovanje na pocetku -- Najpre treba upisati komandni bajt, a zatim -- definisati Port B kao izlazni. Ovaj port -- prihvata "strobovani" ASCII simbol, a -- kasnije ga salje na stampac nCs <='1','0' after 7 us, '1' after 10 us, '0' after 20 ms, '1' after 22 ms; A <="11", "01" after 20us; nRd <='1'; nWr <='1','0' after 8 us, '1' after 9 us, '0' after 20 ms, '1' after 21 ms; PD <="10000100", --komanda "ZZZZZZZZ" after 10us, "11001100" after 20 ms, -- ASCII simbol "ZZZZZZZZ" after 22 ms; PC(2) <= '1' after 10ms, '0' after 25 ms, '1' after 25.5 ms; -- zahtev logike stampaca
59
end TB_ARCHITECTURE; configuration TESTBENCH_FOR_a8255 of MOD1_2 is for TB_ARCHITECTURE for UUT : a8255 use entity work.a8255(a8255); end for; end for; end TESTBENCH_FOR_a8255; Test Bench Mod 1
60
Kao i u prethodnom primeru, neophodno je da cip 8255 radi u Modu 1. Port B «strobuje» ASCII simbol koji mu šalje procesor. Kada štampac bude spreman da prihvati
simbol, onda šalje zahtev ka cipu 8255. Transakcija se odvija zavisno od stanja signala nCs, nWr,nRd, PC(2), PC(1), PC(0) i A.
61
6.ZADATAK
Proveriti funkcionalnost cipa 8255 u Modu 0 i Modu 1 na sledeci nacin:
MOD 0:
1. Pokrenuti program Active-HDL cija se ikonica nalazi na Desktop-u 2. Izaberite dizajn 8255a 3. Otvoriti listing TestBench-a MOD_0 koji se nalazi u folderu TestBench 4. Uneti zadatu sekvencu podataka koju šalje procesor preko Porta D (PD) 5. Izvršiti kompilaciju pritiskom na taster <F11> 6. Podesiti entitet Top level desnim klikom na ?+? ispred imena fajla MOD_0.vhd i izaberite Set as
Top-Level 7. Otvoriti Waveform fajl MOD_0.avf koji se nalazi u folderu Waveforms 8. Podesiti vreme simulacije na 100 ? s 9. Pokrenuti simulaciju pritiskom na tastere <Alt> + <F5> 10. Ocitajte sekvencu osmobitnih podataka na Portu A (PA), kao i trenutke pojavljivanja svakog
podatka 11. Po završetku simulacije potrebno je da se vremenski dijagram uveca ili umanji, radi bolje
preglednosti. 12. Odštampati vremenski dijagram
Grupa 1: Sekvenca osmobitnih podataka koju šalje procesor preko Porta D (PD) je: 00h , 01h , 02h , 03h , 04h , 05h , 06h , 07h , 08h , 09h , 0Ah , 00h Trenutak posle kojeg je podatak prisutan na Portu A (PA) ___________________________________________________________ Grupa 2: Sekvenca osmobitnih podataka koju šalje procesor preko Porta D (PD) je: 06h , 05h , 04h , 03h , 02h , 01h , 00h , 00h , 00h Trenutak posle kojeg je podatak prisutan na Portu A (PA) ___________________________________________________________
62
Grupa 3: Sekvenca osmobitnih podataka koju šalje procesor preko Porta D (PD) je: 00h , 01h , 02h , 03h , 04h , 05h , 06h , 07h , 08h , 09h , 0Ah , 00h Trenutak posle kojeg je podatak prisutan na Portu A (PA) ___________________________________________________________ Grupa 4: Sekvenca osmobitnih podataka koju šalje procesor preko Porta D (PD) je: 00h , 01h , 02h , 03h , 04h , 05h , 04h , 03h , 02h , 01h , 00h Trenutak posle kojeg je podatak prisutan na Portu A (PA) ___________________________________________________________
Grupa 5: Sekvenca osmobitnih podataka koju šalje procesor preko Porta D ( PD) je: 00h , 01h , 02h , 03h , 03h , 03h , 03h , 02h , 01h , 00h Trenutak posle kojeg je podatak prisutan na Portu A (PA) ___________________________________________________________ Grupa 6: Sekvenca osmobitnih podataka koju šalje procesor preko Porta D ( PD) je: 00h , 01h , 01h , 02h , 02h , 03h , 03h , 04h , 04h , 00h Trenutak posle kojeg je podatak prisutan na Portu A (PA) ___________________________________________________________
63
Grupa 7: Sekvenca osmobitnih podataka koju šalje procesor preko Porta D (PD) je: 10h , 0Ch , 08h , 04h , 00h , 04h , 08h , 0Ch , 10h Trenutak posle kojeg je podatak prisutan na Portu A (PA) ___________________________________________________________ Grupa 8: Sekvenca osmobitnih podataka koju šalje procesor preko Porta D (PD) je: 00h , 01h , 01h , 02h , 02h , 03h , 03h , 02h , 02h , 01h , 01h , 00h Trenutak posle kojeg je podatak prisutan na Portu A (PA) ___________________________________________________________ Grupa 9: Sekvenca osmobitnih podataka koju šalje procesor preko Porta D (PD) je: 10h , 0Ch , 08h , 04h , 00h , 00h Trenutak posle kojeg je podatak prisutan na Portu A (PA) ___________________________________________________________ Grupa 10: Sekvenca osmobitnih podataka koju šalje procesor preko Porta D (PD) je: 00h , 01h , 01h , 02h , 02h , 03h , 03h , 04h , 04h , 03h , 03h , 02h , 02h , 01h , 01h , 00h , Trenutak posle kojeg je podatak prisutan na Portu A (PA) ___________________________________________________________
64
Grupa 11: Sekvenca osmobitnih podataka koju šalje procesor preko Porta D (PD) je: 06h , 05h , 04h , 03h , 02h , 01h , 00h Trenutak posle kojeg je podatak prisutan na Portu A (PA) ___________________________________________________________ Grupa 12: Sekvenca osmobitnih podataka koju šalje procesor preko Porta D (PD) je: 00h , 01h , 02h , 03h , 03h , 03h , 02h , 01h , 00h Trenutak posle kojeg je podatak prisutan na Portu A (PA) ___________________________________________________________ Grupa 13: Sekvenca osmobitnih podataka koju šalje procesor preko Porta D (PD) je: 00h , 01h , 02h , 03h , 04h , 03h , 02h , 01h , 00h Trenutak posle kojeg je podatak prisutan na Portu A (PA) ___________________________________________________________
Grupa 14: Sekvenca osmobitnih podataka koju šalje procesor preko Porta D (PD) je: 00h , 01h , 02h , 03h , 04h , 05h , 00h , 00h , 00h , 00h , Trenutak posle kojeg je podatak prisutan na Portu A (PA) ___________________________________________________________
65
Grupa 15: Sekvenca osmobitnih podataka koju šalje procesor preko Porta D (PD) je: 04h , 04h , 03h , 03h , 02h , 02h , 01h , 01h , 00h , 00h Trenutak posle kojeg je podatak prisutan na Portu A (PA) ___________________________________________________________ Grupa 16: Sekvenca osmobitnih podataka koju šalje procesor preko Porta D (PD) je: 00h , 01h , 02h , 03h , 04h , 04h , 04h , 04h , 03h , 02h , 01h , 00h Trenutak posle kojeg je podatak prisutan na Portu A (PA) ___________________________________________________________
66
MOD 1 (strobovani ulaz): 1. Pokrenuti program Active-HDL cija se ikonica nalazi na Desktop-u 2. Izaberite dizajn 8255a 3. Otvoriti listing TestBench-a MOD_1a koji se nalazi u folderu TestBench 4. Uneti binarnu vrednost ASCII karaktera koji generiše tastatura (ovaj podatak se «strobuje») 5. Izvršiti kompilaciju pritiskom na taster <F11> 6. Podesiti entitet Top level desnim klikom na ?+? ispred imena fajla MOD_1a.vhd i izaberite Set
as Top-Level 7. Otvoriti Waveform fajl MOD_1a.avf koji se nalazi u folderu Waveforms 8. Podesiti vreme simulacije na 60 ms 9. Pokrenuti simulaciju pritiskom na tastere <Alt> + <F5> 10. Ocitajte vreme posle kojeg se osmobitni podatak pojavljuje na Portu D (PD) 11. Po završetku simulacije potrebno je da se vremenski dijagram uveca ili umanji, radi bolje
preglednosti. 12. Odštampati vremenski dijagram
Grupa 1: Osmobitni podatak koji «strobuje» Port A (PA): 11100001 (E1)h Trenutak posle kojeg je «strobovani» podatak prisutan na Portu D (PD) ______________________________________ Grupa 2: Osmobitni podatak koji «strobuje» Port A (PA) 01010101 (55)h Trenutak posle kojeg je «strobovani» podatak prisutan na Portu D (PD) ______________________________________
67
Grupa 3: Osmobitni podatak koji «strobuje» Port A (PA) 10011000 (98)h Trenutak posle kojeg je «strobovani» podatak prisutan na Portu D (PD) ______________________________________ Grupa 4: Osmobitni podatak koji «strobuje» Port A (PA) 11000111 (C7)h Trenutak posle kojeg je «strobovani» podatak prisutan na Portu D (PD) ______________________________________ Grupa 5: Osmobitni podatak koji «strobuje» Port A (PA) 11100101 (E5)h Trenutak posle kojeg je «strobovani» podatak prisutan na Portu D (PD) ______________________________________ Grupa 6: Osmobitni podatak koji «strobuje» Port A (PA) 00111111 (3F)h Trenutak posle kojeg je «strobovani» podatak prisutan na Portu D (PD) ______________________________________
68
Grupa 7: Osmobitni podatak koji «strobuje» Port A (PA) 10111010 (BA)h Trenutak posle kojeg je «strobovani» podatak prisutan na Portu D (PD) ______________________________________ Grupa 8: Osmobitni podatak koji «strobuje» Port A (PA) 11000100 (C4)h Trenutak posle kojeg je «strobovani» podatak prisutan na Portu D (PD) ______________________________________ Grupa 9: Osmobitni podatak koji «strobuje» Port A (PA) 00001010 (0A)h Trenutak posle kojeg je «strobovani» podatak prisutan na Portu D (PD) ______________________________________ Grupa 10: Osmobitni podatak koji «strobuje» Port A (PA) 00110111 (37)h Trenutak posle kojeg je «strobovani» podatak prisutan na Portu D (PD) ______________________________________
69
Grupa 11: Osmobitni podatak koji «strobuje» Port A (PA) 11111111 (FF)h Trenutak posle kojeg je «strobovani» podatak prisutan na Portu D (PD) ______________________________________ Grupa 12: Osmobitni podatak koji «strobuje» Port A (PA) 01110110 (76)h Trenutak posle kojeg je «strobovani» podatak prisutan na Portu D (PD) ______________________________________ Grupa 13: Osmobitni podatak koji «strobuje» Port A (PA) 10111011 (BB)h Trenutak posle kojeg je «strobovani» podatak prisutan na Portu D (PD) ______________________________________ Grupa 14: Osmobitni podatak koji «strobuje» Port A (PA) 10110000 (B0)h Trenutak posle kojeg je «strobovani» podatak prisutan na Portu D (PD) ______________________________________
70
Grupa 15: Osmobitni podatak koji «strobuje» Port A (PA) 11001010 (CA)h Trenutak posle kojeg je «strobovani» podatak prisutan na Portu D (PD) ______________________________________ Grupa 16: Osmobitni podatak koji «strobuje» Port A (PA) 00010010 (12)h Trenutak posle kojeg je «strobovani» podatak prisutan na Portu D (PD) ______________________________________
71
MOD 1 (strobovani izlaz): 1. Pokrenuti program Active-HDL cija se ikonica nalazi na Desktop-u 2. Izaberite dizajn 8255a 3. Otvoriti listing TestBench-a MOD_1b koji se nalazi u folderu TestBench 4. Uneti binarnu vrednost ASCII karaktera koji treba da se odštampa na štampacu (ovaj podatak se
«strobuje») 5. Izvršiti kompilaciju pritiskom na taster <F11> 6. Podesiti entitet Top level desnim klikom na ?+? ispred imena fajla MOD_1b.vhd i izaberite Set
as Top-Level 7. Otvoriti Waveform fajl MOD_1b.avf koji se nalazi u folderu Waveforms 8. Podesiti vreme simulacije na 60 ms 9. Pokrenuti simulaciju pritiskom na tastere <Alt> + <F5> 10. Ocitajte vreme posle kojeg se osmobitni podatak pojavljuje na Portu B (PB) 11. Po završetku simulacije potrebno je da se vremenski dijagram uveca ili umanji, radi bolje
preglednosti. 12. Odštampati vremenski dijagram
Grupa 1: Osmobitni podatak koji šalje procesor preko Porta D (PD) 10111010 (BA)h Trenutak u kojem je «strobovani» podatak dostupan na izlazu Porta B (PB) ______________________________________ Grupa 2: Osmobitni podatak koji šalje procesor preko Porta D (PD) 11001010 (CA)h Trenutak u kojem je «strobovani» podatak dostupan na izlazu Porta B (PB) ______________________________________
72
Grupa 3: Osmobitni podatak koji šalje procesor preko Porta D (PD) 11111111 (FF)h Trenutak u kojem je «strobovani» podatak dostupan na izlazu Porta B (PB) ______________________________________ Grupa 4: Osmobitni podatak koji šalje procesor preko Porta D (PD) 00010010 (12)h Trenutak u kojem je «strobovani» podatak dostupan na izlazu Porta B (PB) ______________________________________ Grupa 5: Osmobitni podatak koji šalje procesor preko Porta D (PD) 01001111 (4F)h Trenutak u kojem je «strobovani» podatak dostupan na izlazu Porta B (PB) ______________________________________ Grupa 6: Osmobitni podatak koji šalje procesor preko Porta D (PD) 10101011 (AB)h Trenutak u kojem je «strobovani» podatak dostupan na izlazu Porta B (PB) ______________________________________
73
Grupa 7: Osmobitni podatak koji šalje procesor preko Porta D (PD) 10000001 (81)h Trenutak u kojem je «strobovani» podatak dostupan na izlazu Porta B (PB) ______________________________________ Grupa 8: Osmobitni podatak koji šalje procesor preko Porta D (PD) 11100001 (E1)h Trenutak u kojem je «strobovani» podatak dostupan na izlazu Porta B (PB) ______________________________________ Grupa 9: Osmobitni podatak koji šalje procesor preko Porta D (PD) 10111111 (BF)h Trenutak u kojem je «strobovani» podatak dostupan na izlazu Porta B (PB) ______________________________________ Grupa 10: Osmobitni podatak koji šalje procesor preko Porta D (PD) 00111101 (3D)h Trenutak u kojem je «strobovani» podatak dostupan na izlazu Porta B (PB) ______________________________________
74
Grupa 11: Osmobitni podatak koji šalje procesor preko Porta D (PD) 01010101 (55)h Trenutak u kojem je «strobovani» podatak dostupan na izlazu Porta B (PB) ______________________________________ Grupa 12: Osmobitni podatak koji šalje procesor preko Porta D (PD) 11110001 (F1)h Trenutak u kojem je «strobovani» podatak dostupan na izlazu Porta B (PB) ______________________________________ Grupa 13: Osmobitni podatak koji šalje procesor preko Porta D (PD) 11001011(CB)h Trenutak u kojem je «strobovani» podatak dostupan na izlazu Port a B (PB) ______________________________________ Grupa 14: Osmobitni podatak koji šalje procesor preko Porta D (PD) 00001111 (0F)h Trenutak u kojem je «strobovani» podatak dostupan na izlazu Porta B (PB) ______________________________________
75
Grupa 15: Osmobitni podatak koji šalje procesor preko Porta D (PD) 01110110 (76)h Trenutak u kojem je «strobovani» podatak dostupan na izlazu Porta B (PB) ______________________________________ Grupa 16: Osmobitni podatak koji šalje procesor preko Porta D (PD) 00010000 (10)h Trenutak u kojem je «strobovani» podatak dostupan na izlazu Porta B (PB) ______________________________________
76
7. LITERATURA :
1. INTEL 8255 Programmable Peripheral Interface, 1986.
2. ALTERA a8255 Programmable Peripheral Interface, Sep. 1996.ver1.
3. Mile K. Stojcev, Branislav D. Petrovic ARHITEKTURE I PROGRAMIRANJE ? RACUNARSKIH SISTEMA ZASNOVANIH NA FAMILIJI PROCESORA 80x86
I izdanje, Elektronski fakultet, Niš, 1999.